From: cvs2svn Import User Date: Sat, 1 Feb 2003 05:20:12 +0000 (+0000) Subject: This commit was manufactured by cvs2svn to create branch 'SAMBA_3_0'. X-Git-Url: http://git.samba.org/samba.git/?p=kai%2Fsamba.git;a=commitdiff_plain;h=ed336acc6eef4736bd924e8402cc463944e9327c;hp=34b2e558a4b3cfd753339bb228a9799e27ed8170 This commit was manufactured by cvs2svn to create branch 'SAMBA_3_0'. --- diff --git a/docs/Samba-Developers-Guide.pdf b/docs/Samba-Developers-Guide.pdf index bb933802176..897074783c5 100644 --- a/docs/Samba-Developers-Guide.pdf +++ b/docs/Samba-Developers-Guide.pdf @@ -1,6 +1,6 @@ %PDF-1.3 %âãÏÓ -1 0 obj<>endobj +1 0 obj<>endobj 2 0 obj<>endobj 3 0 obj<>endobj 4 0 obj<>endobj @@ -2527,7 +2527,7 @@ xref 0000174321 00000 n 0000174427 00000 n trailer -<<7fd6ff3b92a5faaa32c7fae07a75de5e>]>> +<<37e21dd5bf11a0bb7770129df9f0d2ea>]>> startxref 174907 %%EOF diff --git a/docs/Samba-HOWTO-Collection.pdf b/docs/Samba-HOWTO-Collection.pdf index 1dedb444bd8..e25e15e0a61 100644 --- a/docs/Samba-HOWTO-Collection.pdf +++ b/docs/Samba-HOWTO-Collection.pdf @@ -1,6 +1,6 @@ %PDF-1.3 %âãÏÓ -1 0 obj<>endobj +1 0 obj<>endobj 2 0 obj<>endobj 3 0 obj<>endobj 4 0 obj<>endobj @@ -13,46 +13,49 @@ 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<>endobj -38 0 obj<>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[14 0 R +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<>endobj +38 0 obj<>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[14 0 R 15 0 R 16 0 R 17 0 R @@ -90,53 +93,52 @@ 49 0 R 50 0 R 51 0 R -52 0 R]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<>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[54 0 R -55 0 R -56 0 R -57 0 R +52 0 R +53 0 R +54 0 R +55 0 R]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<>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[57 0 R 58 0 R 59 0 R 60 0 R @@ -174,53 +176,51 @@ 92 0 R 93 0 R 94 0 R -95 0 R]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<>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[97 0 R -98 0 R -99 0 R +95 0 R +96 0 R +97 0 R]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<>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[99 0 R 100 0 R 101 0 R 102 0 R @@ -261,51 +261,52 @@ 137 0 R 138 0 R 139 0 R]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<>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[141 0 R +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<>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[141 0 R 142 0 R 143 0 R 144 0 R @@ -348,51 +349,48 @@ 181 0 R 182 0 R 183 0 R -184 0 R]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<>endobj -223 0 obj<>endobj -224 0 obj<>endobj -225 0 obj<>endobj -226 0 obj<>endobj -227 0 obj<>endobj -228 0 obj[186 0 R -187 0 R +184 0 R +185 0 R]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<>endobj +225 0 obj<>endobj +226 0 obj[187 0 R 188 0 R 189 0 R 190 0 R @@ -430,51 +428,53 @@ 222 0 R 223 0 R 224 0 R -225 0 R -226 0 R -227 0 R]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<>endobj -266 0 obj<>endobj -267 0 obj<>endobj -268 0 obj<>endobj -269 0 obj<>endobj -270 0 obj[229 0 R +225 0 R]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<>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[227 0 R +228 0 R +229 0 R 230 0 R 231 0 R 232 0 R @@ -515,23 +515,19 @@ 267 0 R 268 0 R 269 0 R]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[271 0 R +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[271 0 R 272 0 R 273 0 R 274 0 R @@ -542,53 +538,54 @@ 279 0 R 280 0 R 281 0 R -282 0 R -283 0 R -284 0 R -285 0 R -286 0 R]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<>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[289 0 R +282 0 R]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<>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[285 0 R +287 0 R +289 0 R 291 0 R +292 0 R 293 0 R 294 0 R 295 0 R @@ -621,61 +618,61 @@ 322 0 R 323 0 R 324 0 R -325 0 R -326 0 R -327 0 R]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<>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[329 0 R +325 0 R]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<>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[327 0 R +328 0 R +329 0 R 330 0 R 331 0 R 332 0 R @@ -723,61 +720,61 @@ 374 0 R 375 0 R 376 0 R -377 0 R -378 0 R -379 0 R]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<>endobj -418 0 obj<>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[381 0 R +377 0 R]endobj +379 0 obj<>endobj +380 0 obj<>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<>endobj +418 0 obj<>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[379 0 R +380 0 R +381 0 R 382 0 R 383 0 R 384 0 R @@ -825,45 +822,37 @@ 426 0 R 427 0 R 428 0 R -429 0 R -430 0 R -431 0 R]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<>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[433 0 R +429 0 R]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[431 0 R +432 0 R +433 0 R 434 0 R 435 0 R 436 0 R @@ -887,1266 +876,916 @@ 454 0 R 455 0 R 456 0 R -457 0 R -458 0 R -459 0 R +457 0 R]endobj +459 0 obj<>endobj +460 0 obj<>endobj +461 0 obj<>endobj +462 0 obj<>endobj +463 0 obj[459 0 R 460 0 R 461 0 R -462 0 R -463 0 R -464 0 R -465 0 R -466 0 R -467 0 R]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<>endobj -490 0 obj<>endobj -491 0 obj<>endobj -492 0 obj<>endobj -493 0 obj<>endobj -494 0 obj<>endobj -495 0 obj<>endobj -496 0 obj<>endobj -497 0 obj<>endobj -498 0 obj<>endobj -499 0 obj<>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<>endobj -507 0 obj<>endobj -508 0 obj<>endobj -509 0 obj<>endobj -510 0 obj<>endobj -511 0 obj<>endobj -512 0 obj<>endobj -513 0 obj[469 0 R -470 0 R +462 0 R]endobj +464 0 obj<>endobj +465 0 obj<>endobj +466 0 obj[465 0 R]endobj +467 0 obj<>endobj +468 0 obj<>endobj +469 0 obj[468 0 R]endobj +470 0 obj<>endobj +471 0 obj<>endobj +472 0 obj<>endobj +473 0 obj<>endobj +474 0 obj<>endobj +475 0 obj[470 0 R 471 0 R 472 0 R 473 0 R -474 0 R -475 0 R -476 0 R -477 0 R -478 0 R +474 0 R]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[477 0 R 479 0 R -480 0 R 481 0 R -482 0 R -483 0 R -484 0 R -485 0 R -486 0 R -487 0 R +483 0 R]endobj +485 0 obj<>endobj +486 0 obj<>endobj +487 0 obj<>endobj +488 0 obj<>endobj +489 0 obj<>endobj +490 0 obj<>endobj +491 0 obj<>endobj +492 0 obj<>endobj +493 0 obj<>endobj +494 0 obj<>endobj +495 0 obj<>endobj +496 0 obj<>endobj +497 0 obj<>endobj +498 0 obj<>endobj +499 0 obj<>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<>endobj +507 0 obj<>endobj +508 0 obj<>endobj +509 0 obj<>endobj +510 0 obj<>endobj +511 0 obj<>endobj +512 0 obj<>endobj +513 0 obj<>endobj +514 0 obj<>endobj +515 0 obj<>endobj +516 0 obj<>endobj +517 0 obj<>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[486 0 R 488 0 R -489 0 R 490 0 R -491 0 R 492 0 R -493 0 R 494 0 R -495 0 R 496 0 R -497 0 R 498 0 R -499 0 R 500 0 R -501 0 R 502 0 R -503 0 R 504 0 R -505 0 R 506 0 R -507 0 R 508 0 R -509 0 R 510 0 R -511 0 R -512 0 R]endobj -514 0 obj<>endobj -515 0 obj<>endobj -516 0 obj<>endobj -517 0 obj[514 0 R -515 0 R -516 0 R]endobj -518 0 obj<>endobj -519 0 obj<>endobj -520 0 obj[519 0 R]endobj -521 0 obj<>endobj -522 0 obj<>endobj -523 0 obj[522 0 R]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<>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<>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<>endobj -558 0 obj<>endobj -559 0 obj<>endobj -560 0 obj<>endobj -561 0 obj<>endobj -562 0 obj[524 0 R -525 0 R +512 0 R +514 0 R +516 0 R +518 0 R +520 0 R +522 0 R +524 0 R 526 0 R -527 0 R 528 0 R -529 0 R -530 0 R -531 0 R -532 0 R -533 0 R -534 0 R -535 0 R -536 0 R -537 0 R -538 0 R -539 0 R -540 0 R -541 0 R -542 0 R -543 0 R -544 0 R +530 0 R]endobj +532 0 obj<>endobj +533 0 obj<>endobj +534 0 obj<>endobj +535 0 obj<>endobj +536 0 obj[533 0 R +535 0 R]endobj +537 0 obj<>endobj +538 0 obj<>endobj +539 0 obj<>endobj +540 0 obj<>endobj +541 0 obj[538 0 R +540 0 R]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[543 0 R 545 0 R -546 0 R -547 0 R -548 0 R -549 0 R -550 0 R -551 0 R -552 0 R -553 0 R -554 0 R -555 0 R -556 0 R +547 0 R]endobj +549 0 obj<>endobj +550 0 obj<>endobj +551 0 obj<>endobj +552 0 obj<>endobj +553 0 obj[550 0 R +552 0 R]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<>endobj +568 0 obj<>endobj +569 0 obj<>endobj +570 0 obj[555 0 R 557 0 R -558 0 R 559 0 R -560 0 R -561 0 R]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[564 0 R -566 0 R -568 0 R -570 0 R]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<>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<>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<>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[573 0 R -575 0 R -577 0 R -579 0 R -581 0 R -583 0 R -585 0 R -587 0 R +561 0 R +563 0 R +565 0 R +567 0 R +569 0 R]endobj +571 0 obj<>endobj +572 0 obj<>endobj +573 0 obj<>endobj +574 0 obj<>endobj +575 0 obj[572 0 R +574 0 R]endobj +576 0 obj<>endobj +577 0 obj<>endobj +578 0 obj[577 0 R]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[580 0 R +582 0 R +584 0 R]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[587 0 R 589 0 R 591 0 R -593 0 R -595 0 R -597 0 R -599 0 R -601 0 R +593 0 R]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[596 0 R +598 0 R +600 0 R]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<>endobj +612 0 obj<>endobj +613 0 obj<>endobj +614 0 obj<>endobj +615 0 obj[602 0 R 603 0 R +604 0 R 605 0 R +606 0 R 607 0 R +608 0 R 609 0 R +610 0 R 611 0 R +612 0 R 613 0 R -615 0 R -617 0 R]endobj -619 0 obj<>endobj -620 0 obj<>endobj -621 0 obj<>endobj -622 0 obj<>endobj -623 0 obj[620 0 R -622 0 R]endobj -624 0 obj<>endobj -625 0 obj<>endobj -626 0 obj<>endobj -627 0 obj<>endobj -628 0 obj[625 0 R -627 0 R]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[630 0 R -632 0 R -634 0 R]endobj -636 0 obj<>endobj -637 0 obj<>endobj -638 0 obj<>endobj -639 0 obj<>endobj -640 0 obj[637 0 R -639 0 R]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<>endobj -651 0 obj<>endobj -652 0 obj<>endobj -653 0 obj<>endobj -654 0 obj<>endobj -655 0 obj<>endobj -656 0 obj<>endobj -657 0 obj[642 0 R -644 0 R -646 0 R -648 0 R -650 0 R -652 0 R -654 0 R -656 0 R]endobj -658 0 obj<>endobj -659 0 obj<>endobj -660 0 obj<>endobj -661 0 obj<>endobj -662 0 obj[659 0 R -661 0 R]endobj -663 0 obj<>endobj -664 0 obj<>endobj -665 0 obj[664 0 R]endobj -666 0 obj<>endobj -667 0 obj<>endobj +614 0 R]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[617 0 R +619 0 R +621 0 R]endobj +623 0 obj<>endobj +624 0 obj<>endobj +625 0 obj<>endobj +626 0 obj<>endobj +627 0 obj[624 0 R +626 0 R]endobj +628 0 obj<>endobj +629 0 obj<>endobj +630 0 obj[629 0 R]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[632 0 R +634 0 R +636 0 R +638 0 R +640 0 R +642 0 R]endobj +644 0 obj<>endobj +645 0 obj<>endobj +646 0 obj[645 0 R]endobj +647 0 obj<>endobj +648 0 obj<>endobj +649 0 obj<>endobj +650 0 obj<>endobj +651 0 obj[648 0 R +650 0 R]endobj +652 0 obj<>endobj +653 0 obj<>endobj +654 0 obj<>endobj +655 0 obj<>endobj +656 0 obj<>endobj +657 0 obj<>endobj +658 0 obj[653 0 R +655 0 R +657 0 R]endobj +659 0 obj<>endobj +660 0 obj<>endobj +661 0 obj<>endobj +662 0 obj<>endobj +663 0 obj<>endobj +664 0 obj<>endobj +665 0 obj[660 0 R +662 0 R +664 0 R]endobj +666 0 obj<>endobj +667 0 obj<>endobj 668 0 obj<>endobj -669 0 obj<>endobj -670 0 obj<>endobj -671 0 obj<>endobj -672 0 obj[667 0 R +669 0 obj<>endobj +670 0 obj<>endobj +671 0 obj<>endobj +672 0 obj<>endobj +673 0 obj<>endobj +674 0 obj<>endobj +675 0 obj<>endobj +676 0 obj[667 0 R 669 0 R -671 0 R]endobj -673 0 obj<>endobj -674 0 obj<>endobj -675 0 obj<>endobj -676 0 obj<>endobj -677 0 obj<>endobj -678 0 obj<>endobj -679 0 obj<>endobj -680 0 obj<>endobj -681 0 obj[674 0 R -676 0 R -678 0 R +671 0 R +673 0 R +675 0 R]endobj +677 0 obj<>endobj +678 0 obj<>endobj +679 0 obj<>endobj +680 0 obj<>endobj +681 0 obj[678 0 R 680 0 R]endobj -682 0 obj<>endobj -683 0 obj<>endobj -684 0 obj<>endobj -685 0 obj<>endobj -686 0 obj<>endobj -687 0 obj<>endobj -688 0 obj[683 0 R +682 0 obj<>endobj +683 0 obj<>endobj +684 0 obj<>endobj +685 0 obj<>endobj +686 0 obj<>endobj +687 0 obj<>endobj +688 0 obj<>endobj +689 0 obj<>endobj +690 0 obj<>endobj +691 0 obj<>endobj +692 0 obj[683 0 R 685 0 R -687 0 R]endobj -689 0 obj<>endobj -690 0 obj<>endobj -691 0 obj<>endobj -692 0 obj<>endobj -693 0 obj<>endobj -694 0 obj<>endobj -695 0 obj<>endobj -696 0 obj<>endobj -697 0 obj<>endobj -698 0 obj<>endobj -699 0 obj<>endobj -700 0 obj<>endobj -701 0 obj<>endobj -702 0 obj<>endobj -703 0 obj<>endobj -704 0 obj<>endobj -705 0 obj<>endobj -706 0 obj<>endobj -707 0 obj<>endobj -708 0 obj<>endobj -709 0 obj<>endobj -710 0 obj<>endobj -711 0 obj<>endobj -712 0 obj<>endobj -713 0 obj<>endobj -714 0 obj<>endobj -715 0 obj<>endobj -716 0 obj<>endobj -717 0 obj<>endobj -718 0 obj<>endobj -719 0 obj<>endobj -720 0 obj<>endobj -721 0 obj<>endobj -722 0 obj<>endobj -723 0 obj<>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<>endobj -733 0 obj[689 0 R -690 0 R -691 0 R -692 0 R -693 0 R -694 0 R -695 0 R -696 0 R -697 0 R -698 0 R -699 0 R -700 0 R -701 0 R -702 0 R -703 0 R -704 0 R -705 0 R -706 0 R -707 0 R -708 0 R -709 0 R +687 0 R +689 0 R +691 0 R]endobj +693 0 obj<>endobj +694 0 obj<>endobj +695 0 obj<>endobj +696 0 obj<>endobj +697 0 obj[694 0 R +696 0 R]endobj +698 0 obj<>endobj +699 0 obj<>endobj +700 0 obj[699 0 R]endobj +701 0 obj<>endobj +702 0 obj<>endobj +703 0 obj[702 0 R]endobj +704 0 obj<>endobj +705 0 obj<>endobj +706 0 obj[705 0 R]endobj +707 0 obj<>endobj +708 0 obj<>endobj +709 0 obj<>endobj +710 0 obj<>endobj +711 0 obj<>endobj +712 0 obj<>endobj +713 0 obj<>endobj +714 0 obj<>endobj +715 0 obj<>endobj +716 0 obj<>endobj +717 0 obj<>endobj +718 0 obj<>endobj +719 0 obj<>endobj +720 0 obj<>endobj +721 0 obj[708 0 R 710 0 R -711 0 R 712 0 R -713 0 R 714 0 R -715 0 R 716 0 R -717 0 R 718 0 R -719 0 R -720 0 R -721 0 R -722 0 R -723 0 R -724 0 R -725 0 R -726 0 R -727 0 R -728 0 R -729 0 R -730 0 R -731 0 R -732 0 R]endobj -734 0 obj<>endobj -735 0 obj<>endobj -736 0 obj<>endobj -737 0 obj<>endobj -738 0 obj<>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<>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<>endobj -784 0 obj<>endobj -785 0 obj[734 0 R -735 0 R +720 0 R]endobj +722 0 obj<>endobj +723 0 obj<>endobj +724 0 obj[723 0 R]endobj +725 0 obj<>endobj +726 0 obj<>endobj +727 0 obj<>endobj +728 0 obj<>endobj +729 0 obj[726 0 R +728 0 R]endobj +730 0 obj<>endobj +731 0 obj<>endobj +732 0 obj[731 0 R]endobj +733 0 obj<>endobj +734 0 obj<>endobj +735 0 obj<>endobj +736 0 obj<>endobj +737 0 obj<>endobj +738 0 obj<>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[734 0 R 736 0 R -737 0 R 738 0 R -739 0 R 740 0 R -741 0 R 742 0 R -743 0 R -744 0 R -745 0 R -746 0 R -747 0 R -748 0 R +744 0 R]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[747 0 R 749 0 R -750 0 R 751 0 R -752 0 R -753 0 R -754 0 R -755 0 R -756 0 R -757 0 R +753 0 R]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[756 0 R 758 0 R -759 0 R 760 0 R -761 0 R 762 0 R -763 0 R 764 0 R -765 0 R 766 0 R -767 0 R -768 0 R -769 0 R -770 0 R -771 0 R -772 0 R -773 0 R -774 0 R -775 0 R -776 0 R -777 0 R -778 0 R -779 0 R -780 0 R -781 0 R +768 0 R]endobj +770 0 obj<>endobj +771 0 obj<>endobj +772 0 obj[771 0 R]endobj +773 0 obj<>endobj +774 0 obj<>endobj +775 0 obj[774 0 R]endobj +776 0 obj<>endobj +777 0 obj<>endobj +778 0 obj[777 0 R]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[780 0 R 782 0 R -783 0 R 784 0 R]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[786 0 R +786 0 obj<>endobj +787 0 obj<>endobj +788 0 obj<>endobj +789 0 obj<>endobj +790 0 obj[786 0 R 787 0 R 788 0 R -789 0 R -790 0 R -791 0 R -792 0 R -793 0 R +789 0 R]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[792 0 R 794 0 R -795 0 R 796 0 R -797 0 R 798 0 R -799 0 R -800 0 R -801 0 R -802 0 R -803 0 R -804 0 R +800 0 R]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[803 0 R 805 0 R -806 0 R 807 0 R -808 0 R -809 0 R -810 0 R -811 0 R -812 0 R -813 0 R -814 0 R -815 0 R -816 0 R -817 0 R]endobj -819 0 obj<>endobj -820 0 obj<>endobj -821 0 obj<>endobj -822 0 obj<>endobj -823 0 obj<>endobj -824 0 obj<>endobj -825 0 obj[820 0 R +809 0 R]endobj +811 0 obj<>endobj +812 0 obj<>endobj +813 0 obj[812 0 R]endobj +814 0 obj<>endobj +815 0 obj<>endobj +816 0 obj[815 0 R]endobj +817 0 obj<>endobj +818 0 obj<>endobj +819 0 obj<>endobj +820 0 obj<>endobj +821 0 obj<>endobj +822 0 obj<>endobj +823 0 obj<>endobj +824 0 obj<>endobj +825 0 obj[818 0 R +820 0 R 822 0 R 824 0 R]endobj -826 0 obj<>endobj -827 0 obj<>endobj -828 0 obj<>endobj -829 0 obj<>endobj +826 0 obj<>endobj +827 0 obj<>endobj +828 0 obj<>endobj +829 0 obj<>endobj 830 0 obj[827 0 R 829 0 R]endobj -831 0 obj<>endobj -832 0 obj<>endobj -833 0 obj[832 0 R]endobj -834 0 obj<>endobj -835 0 obj<>endobj -836 0 obj<>endobj -837 0 obj<>endobj -838 0 obj<>endobj -839 0 obj<>endobj -840 0 obj<>endobj -841 0 obj<>endobj -842 0 obj<>endobj -843 0 obj<>endobj -844 0 obj<>endobj -845 0 obj<>endobj -846 0 obj[835 0 R -837 0 R -839 0 R -841 0 R -843 0 R -845 0 R]endobj -847 0 obj<>endobj -848 0 obj<>endobj -849 0 obj[848 0 R]endobj -850 0 obj<>endobj -851 0 obj<>endobj -852 0 obj<>endobj -853 0 obj<>endobj -854 0 obj[851 0 R -853 0 R]endobj -855 0 obj<>endobj -856 0 obj<>endobj -857 0 obj<>endobj -858 0 obj<>endobj -859 0 obj<>endobj -860 0 obj<>endobj -861 0 obj[856 0 R -858 0 R -860 0 R]endobj -862 0 obj<>endobj -863 0 obj<>endobj -864 0 obj<>endobj -865 0 obj<>endobj -866 0 obj<>endobj -867 0 obj<>endobj -868 0 obj[863 0 R -865 0 R -867 0 R]endobj -869 0 obj<>endobj -870 0 obj<>endobj -871 0 obj<>endobj -872 0 obj<>endobj -873 0 obj<>endobj -874 0 obj<>endobj -875 0 obj<>endobj -876 0 obj<>endobj -877 0 obj<>endobj -878 0 obj<>endobj -879 0 obj[870 0 R -872 0 R -874 0 R -876 0 R -878 0 R]endobj -880 0 obj<>endobj -881 0 obj<>endobj -882 0 obj<>endobj -883 0 obj<>endobj -884 0 obj[881 0 R -883 0 R]endobj -885 0 obj<>endobj -886 0 obj<>endobj -887 0 obj<>endobj -888 0 obj<>endobj -889 0 obj<>endobj -890 0 obj<>endobj -891 0 obj<>endobj -892 0 obj<>endobj -893 0 obj<>endobj -894 0 obj<>endobj -895 0 obj[886 0 R -888 0 R -890 0 R -892 0 R -894 0 R]endobj -896 0 obj<>endobj -897 0 obj<>endobj -898 0 obj<>endobj -899 0 obj<>endobj -900 0 obj[897 0 R -899 0 R]endobj -901 0 obj<>endobj -902 0 obj<>endobj -903 0 obj[902 0 R]endobj -904 0 obj<>endobj -905 0 obj<>endobj -906 0 obj<>endobj -907 0 obj<>endobj -908 0 obj<>endobj -909 0 obj<>endobj -910 0 obj[905 0 R -907 0 R -909 0 R]endobj -911 0 obj<>endobj -912 0 obj<>endobj -913 0 obj[912 0 R]endobj -914 0 obj<>endobj -915 0 obj<>endobj -916 0 obj[915 0 R]endobj -917 0 obj<>endobj -918 0 obj<>endobj -919 0 obj<>endobj -920 0 obj<>endobj -921 0 obj<>endobj -922 0 obj<>endobj -923 0 obj<>endobj -924 0 obj<>endobj -925 0 obj<>endobj -926 0 obj<>endobj -927 0 obj<>endobj -928 0 obj<>endobj -929 0 obj<>endobj -930 0 obj<>endobj -931 0 obj<>endobj -932 0 obj<>endobj -933 0 obj[918 0 R -920 0 R -922 0 R -924 0 R -926 0 R -928 0 R -930 0 R -932 0 R]endobj -934 0 obj<>endobj -935 0 obj<>endobj -936 0 obj<>endobj -937 0 obj<>endobj -938 0 obj<>endobj -939 0 obj<>endobj -940 0 obj<>endobj -941 0 obj<>endobj -942 0 obj<>endobj -943 0 obj<>endobj -944 0 obj<>endobj -945 0 obj<>endobj -946 0 obj[935 0 R -937 0 R -939 0 R -941 0 R -943 0 R -945 0 R]endobj -947 0 obj<>endobj -948 0 obj<>endobj -949 0 obj<>endobj -950 0 obj<>endobj -951 0 obj<>endobj -952 0 obj<>endobj -953 0 obj<>endobj -954 0 obj<>endobj -955 0 obj[948 0 R -950 0 R -952 0 R -954 0 R]endobj -956 0 obj<>endobj -957 0 obj<>endobj -958 0 obj[957 0 R]endobj -959 0 obj<>endobj -960 0 obj<>endobj -961 0 obj<>endobj -962 0 obj<>endobj -963 0 obj<>endobj -964 0 obj<>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[960 0 R -962 0 R -964 0 R -966 0 R -968 0 R -970 0 R]endobj -972 0 obj<>endobj -973 0 obj<>endobj -974 0 obj[973 0 R]endobj -975 0 obj<>endobj -976 0 obj<>endobj -977 0 obj[976 0 R]endobj -978 0 obj<>endobj -979 0 obj<>endobj -980 0 obj[979 0 R]endobj -981 0 obj<>endobj -982 0 obj<>endobj -983 0 obj<>endobj -984 0 obj<>endobj -985 0 obj<>endobj -986 0 obj<>endobj -987 0 obj[982 0 R -984 0 R -986 0 R]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<>endobj -1007 0 obj<>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<>endobj -1026 0 obj<>endobj -1027 0 obj<>endobj -1028 0 obj<>endobj -1029 0 obj<>endobj -1030 0 obj[988 0 R -989 0 R -990 0 R -991 0 R -992 0 R -993 0 R -994 0 R -995 0 R -996 0 R -997 0 R -998 0 R -999 0 R -1000 0 R -1001 0 R -1002 0 R -1003 0 R -1004 0 R -1005 0 R -1006 0 R -1007 0 R -1008 0 R -1009 0 R -1010 0 R -1011 0 R -1012 0 R -1013 0 R -1014 0 R -1015 0 R -1016 0 R -1017 0 R -1018 0 R -1019 0 R -1020 0 R -1021 0 R -1022 0 R -1023 0 R -1024 0 R -1025 0 R -1026 0 R -1027 0 R -1028 0 R -1029 0 R]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[1032 0 R -1034 0 R -1036 0 R -1038 0 R -1040 0 R]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[1043 0 R -1045 0 R -1047 0 R -1049 0 R]endobj -1051 0 obj<>endobj -1052 0 obj<>endobj -1053 0 obj[1052 0 R]endobj -1054 0 obj<>endobj -1055 0 obj<>endobj -1056 0 obj[1055 0 R]endobj -1057 0 obj<>endobj -1058 0 obj<>endobj -1059 0 obj<>endobj -1060 0 obj<>endobj -1061 0 obj<>endobj -1062 0 obj<>endobj -1063 0 obj<>endobj -1064 0 obj<>endobj -1065 0 obj[1058 0 R -1060 0 R -1062 0 R -1064 0 R]endobj -1066 0 obj<>endobj -1067 0 obj<>endobj -1068 0 obj<>endobj -1069 0 obj<>endobj -1070 0 obj[1067 0 R -1069 0 R]endobj -1071 0 obj<>endobj -1072 0 obj<>endobj -1073 0 obj<>endobj -1074 0 obj<>endobj -1075 0 obj<>endobj -1076 0 obj<>endobj -1077 0 obj<>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<>endobj -1098 0 obj<>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<>endobj -1109 0 obj<>endobj -1110 0 obj<>endobj -1111 0 obj<>endobj -1112 0 obj<>endobj -1113 0 obj<>endobj -1114 0 obj<>endobj -1115 0 obj<>endobj -1116 0 obj<>endobj -1117 0 obj<>endobj -1118 0 obj<>endobj -1119 0 obj<>endobj -1120 0 obj<>endobj -1121 0 obj<>endobj -1122 0 obj<>endobj -1123 0 obj<>endobj -1124 0 obj<>endobj -1125 0 obj<>endobj -1126 0 obj<>endobj -1127 0 obj<>endobj -1128 0 obj<>endobj -1129 0 obj<>endobj -1130 0 obj<>endobj -1131 0 obj<>endobj -1132 0 obj<>endobj -1133 0 obj<>endobj -1134 0 obj<>endobj -1135 0 obj<>endobj -1136 0 obj<>endobj -1137 0 obj<>endobj -1138 0 obj<>endobj -1139 0 obj<>endobj -1140 0 obj<>endobj -1141 0 obj<>endobj -1142 0 obj<>endobj -1143 0 obj<>endobj -1144 0 obj<>endobj -1145 0 obj<>endobj -1146 0 obj<>endobj -1147 0 obj<>endobj -1148 0 obj<>endobj -1149 0 obj<>endobj -1150 0 obj<>endobj -1151 0 obj<>endobj -1152 0 obj<>endobj -1153 0 obj<>endobj -1154 0 obj<>endobj -1155 0 obj<>endobj -1156 0 obj<>endobj -1157 0 obj<>endobj -1158 0 obj<>endobj -1159 0 obj<>endobj -1160 0 obj<>endobj -1161 0 obj<>endobj -1162 0 obj<>endobj -1163 0 obj<>endobj -1164 0 obj<>endobj -1165 0 obj<>endobj -1166 0 obj<>endobj -1167 0 obj<>endobj -1168 0 obj<>endobj -1169 0 obj<>endobj -1170 0 obj<>endobj -1171 0 obj<>endobj -1172 0 obj<>endobj -1173 0 obj<>endobj -1174 0 obj<>endobj -1175 0 obj<>endobj -1176 0 obj<>endobj -1177 0 obj<>endobj -1178 0 obj<>endobj -1179 0 obj<>endobj -1180 0 obj<>endobj -1181 0 obj<>endobj -1182 0 obj<>endobj -1183 0 obj<>endobj -1184 0 obj<>endobj -1185 0 obj<>endobj -1186 0 obj<>endobj -1187 0 obj<>endobj -1188 0 obj<>endobj -1189 0 obj<>endobj -1190 0 obj<>endobj -1191 0 obj<>endobj -1192 0 obj<>endobj -1193 0 obj<>endobj -1194 0 obj<>endobj -1195 0 obj<>endobj -1196 0 obj<>endobj -1197 0 obj<>endobj -1198 0 obj<>endobj -1199 0 obj<>endobj -1200 0 obj<>endobj -1201 0 obj<>endobj -1202 0 obj<>endobj -1203 0 obj<>endobj -1204 0 obj<>endobj -1205 0 obj<>endobj -1206 0 obj<>endobj -1207 0 obj<>endobj -1208 0 obj<>endobj -1209 0 obj<>endobj -1210 0 obj<>endobj -1211 0 obj<>endobj -1212 0 obj<>endobj -1213 0 obj<>endobj -1214 0 obj<>endobj -1215 0 obj<>endobj -1216 0 obj<>endobj -1217 0 obj<>endobj -1218 0 obj<>endobj -1219 0 obj<>endobj -1220 0 obj<>endobj -1221 0 obj<>endobj -1222 0 obj<>endobj -1223 0 obj<>endobj -1224 0 obj<>endobj -1225 0 obj<>endobj -1226 0 obj<>endobj -1227 0 obj<>endobj -1228 0 obj<>endobj -1229 0 obj<>endobj -1230 0 obj<>endobj -1231 0 obj<>endobj -1232 0 obj<>endobj -1233 0 obj<>endobj -1234 0 obj<>endobj -1235 0 obj<>endobj -1236 0 obj<>endobj -1237 0 obj<>endobj -1238 0 obj<>endobj -1239 0 obj<>endobj -1240 0 obj<>endobj -1241 0 obj<>endobj -1242 0 obj<>endobj -1243 0 obj<>endobj -1244 0 obj<>endobj -1245 0 obj<>endobj -1246 0 obj<>endobj -1247 0 obj<>endobj -1248 0 obj<>endobj -1249 0 obj<>endobj -1250 0 obj<>endobj -1251 0 obj<>endobj -1252 0 obj<>endobj -1253 0 obj<>endobj -1254 0 obj<>endobj -1255 0 obj<>endobj -1256 0 obj<>endobj -1257 0 obj<>endobj -1258 0 obj<>endobj -1259 0 obj<>endobj -1260 0 obj<>endobj -1261 0 obj<>endobj -1262 0 obj<>endobj -1263 0 obj<>endobj -1264 0 obj<>endobj -1265 0 obj<>endobj -1266 0 obj<>endobj -1267 0 obj<>endobj -1268 0 obj<>endobj -1269 0 obj<>endobj -1270 0 obj<>endobj -1271 0 obj<>endobj -1272 0 obj<>endobj -1273 0 obj<>endobj -1274 0 obj<>endobj -1275 0 obj<>endobj -1276 0 obj<>endobj -1277 0 obj<>endobj -1278 0 obj<>endobj -1279 0 obj<>endobj -1280 0 obj<>endobj -1281 0 obj<>endobj -1282 0 obj<>endobj -1283 0 obj<>endobj -1284 0 obj<>endobj -1285 0 obj<>endobj -1286 0 obj<>endobj -1287 0 obj<>endobj -1288 0 obj<>endobj -1289 0 obj<>endobj -1290 0 obj<>endobj -1291 0 obj<>endobj -1292 0 obj<>endobj -1293 0 obj<>endobj -1294 0 obj<>endobj -1295 0 obj<>endobj -1296 0 obj<>endobj -1297 0 obj<>endobj -1298 0 obj<>endobj -1299 0 obj<>endobj -1300 0 obj<>endobj -1301 0 obj<>endobj -1302 0 obj<>endobj -1303 0 obj<>endobj -1304 0 obj<>endobj -1305 0 obj<>endobj -1306 0 obj<>endobj -1307 0 obj<>endobj -1308 0 obj<>endobj -1309 0 obj<>endobj -1310 0 obj<>endobj -1311 0 obj<>endobj -1312 0 obj<>endobj -1313 0 obj<>endobj -1314 0 obj<>endobj -1315 0 obj<>endobj -1316 0 obj<>endobj -1317 0 obj<>endobj -1318 0 obj<>endobj -1319 0 obj<>endobj -1320 0 obj<>endobj -1321 0 obj<>endobj -1322 0 obj<>endobj -1323 0 obj<>endobj -1324 0 obj<>endobj -1325 0 obj<>endobj -1326 0 obj<>endobj -1327 0 obj<>endobj -1328 0 obj<>endobj -1329 0 obj<>endobj -1330 0 obj<>endobj -1331 0 obj<>endobj -1332 0 obj<>endobj -1333 0 obj<>endobj -1334 0 obj<>endobj -1335 0 obj<>endobj -1336 0 obj<>endobj -1337 0 obj<>endobj -1338 0 obj<>endobj -1339 0 obj<>endobj -1340 0 obj<>endobj -1341 0 obj<>endobj -1342 0 obj<>endobj -1343 0 obj<>endobj -1344 0 obj<>endobj -1345 0 obj<>endobj -1346 0 obj<>endobj -1347 0 obj<>endobj -1348 0 obj<>endobj -1349 0 obj<>endobj -1350 0 obj<>endobj -1351 0 obj<>endobj -1352 0 obj<>endobj -1353 0 obj<>endobj -1354 0 obj<>endobj -1355 0 obj<>endobj -1356 0 obj<>endobj -1357 0 obj<>endobj -1358 0 obj<>endobj -1359 0 obj<>endobj -1360 0 obj<>endobj -1361 0 obj<>endobj -1362 0 obj<>endobj -1363 0 obj<>endobj -1364 0 obj<>endobj -1365 0 obj<>endobj -1366 0 obj<>endobj -1367 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<>endobj +838 0 obj<>endobj +839 0 obj<>endobj +840 0 obj<>endobj +841 0 obj<>endobj +842 0 obj<>endobj +843 0 obj<>endobj +844 0 obj<>endobj +845 0 obj<>endobj +846 0 obj<>endobj +847 0 obj<>endobj +848 0 obj<>endobj +849 0 obj<>endobj +850 0 obj<>endobj +851 0 obj<>endobj +852 0 obj<>endobj +853 0 obj<>endobj +854 0 obj<>endobj +855 0 obj<>endobj +856 0 obj<>endobj +857 0 obj<>endobj +858 0 obj<>endobj +859 0 obj<>endobj +860 0 obj<>endobj +861 0 obj<>endobj +862 0 obj<>endobj +863 0 obj<>endobj +864 0 obj<>endobj +865 0 obj<>endobj +866 0 obj<>endobj +867 0 obj<>endobj +868 0 obj<>endobj +869 0 obj<>endobj +870 0 obj<>endobj +871 0 obj<>endobj +872 0 obj<>endobj +873 0 obj<>endobj +874 0 obj<>endobj +875 0 obj<>endobj +876 0 obj<>endobj +877 0 obj<>endobj +878 0 obj<>endobj +879 0 obj<>endobj +880 0 obj<>endobj +881 0 obj<>endobj +882 0 obj<>endobj +883 0 obj<>endobj +884 0 obj<>endobj +885 0 obj<>endobj +886 0 obj<>endobj +887 0 obj<>endobj +888 0 obj<>endobj +889 0 obj<>endobj +890 0 obj<>endobj +891 0 obj<>endobj +892 0 obj<>endobj +893 0 obj<>endobj +894 0 obj<>endobj +895 0 obj<>endobj +896 0 obj<>endobj +897 0 obj<>endobj +898 0 obj<>endobj +899 0 obj<>endobj +900 0 obj<>endobj +901 0 obj<>endobj +902 0 obj<>endobj +903 0 obj<>endobj +904 0 obj<>endobj +905 0 obj<>endobj +906 0 obj<>endobj +907 0 obj<>endobj +908 0 obj<>endobj +909 0 obj<>endobj +910 0 obj<>endobj +911 0 obj<>endobj +912 0 obj<>endobj +913 0 obj<>endobj +914 0 obj<>endobj +915 0 obj<>endobj +916 0 obj<>endobj +917 0 obj<>endobj +918 0 obj<>endobj +919 0 obj<>endobj +920 0 obj<>endobj +921 0 obj<>endobj +922 0 obj<>endobj +923 0 obj<>endobj +924 0 obj<>endobj +925 0 obj<>endobj +926 0 obj<>endobj +927 0 obj<>endobj +928 0 obj<>endobj +929 0 obj<>endobj +930 0 obj<>endobj +931 0 obj<>endobj +932 0 obj<>endobj +933 0 obj<>endobj +934 0 obj<>endobj +935 0 obj<>endobj +936 0 obj<>endobj +937 0 obj<>endobj +938 0 obj<>endobj +939 0 obj<>endobj +940 0 obj<>endobj +941 0 obj<>endobj +942 0 obj<>endobj +943 0 obj<>endobj +944 0 obj<>endobj +945 0 obj<>endobj +946 0 obj<>endobj +947 0 obj<>endobj +948 0 obj<>endobj +949 0 obj<>endobj +950 0 obj<>endobj +951 0 obj<>endobj +952 0 obj<>endobj +953 0 obj<>endobj +954 0 obj<>endobj +955 0 obj<>endobj +956 0 obj<>endobj +957 0 obj<>endobj +958 0 obj<>endobj +959 0 obj<>endobj +960 0 obj<>endobj +961 0 obj<>endobj +962 0 obj<>endobj +963 0 obj<>endobj +964 0 obj<>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<>endobj +984 0 obj<>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<>endobj +1003 0 obj<>endobj +1004 0 obj<>endobj +1005 0 obj<>endobj +1006 0 obj<>endobj +1007 0 obj<>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<>endobj +1026 0 obj<>endobj +1027 0 obj<>endobj +1028 0 obj<>endobj +1029 0 obj<>endobj +1030 0 obj<>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<>endobj +1051 0 obj<>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<>endobj +1062 0 obj<>endobj +1063 0 obj<>endobj +1064 0 obj<>endobj +1065 0 obj<>endobj +1066 0 obj<>endobj +1067 0 obj<>endobj +1068 0 obj<>endobj +1069 0 obj<>endobj +1070 0 obj<>endobj +1071 0 obj<>endobj +1072 0 obj<>endobj +1073 0 obj<>endobj +1074 0 obj<>endobj +1075 0 obj<>endobj +1076 0 obj<>endobj +1077 0 obj<>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<>endobj +1098 0 obj<>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<>endobj +1109 0 obj<>endobj +1110 0 obj<>endobj +1111 0 obj<>endobj +1112 0 obj<>endobj +1113 0 obj<>endobj +1114 0 obj<>endobj +1115 0 obj<>endobj +1116 0 obj<>endobj +1117 0 obj<>endobj +1118 0 obj<>endobj +1119 0 obj<>endobj -1368 0 obj<>/XObject<<>>>>>>endobj -1369 0 obj<>stream +1120 0 obj<>/XObject<<>>>>>>endobj +1121 0 obj<>stream x+ä2T0BCs#c3…ä\.§.}7K#…4K=3cS’¢` g`NÖvôurT(ÊÏJM.QpÉO.ÍMÍ+I,ÉÌÏÓ Éâr á ä«endstream endobj -1370 0 obj<>/XObject<<>>>>/Annots 53 0 R>>endobj -1371 0 obj<>stream -xÍ[ÛrÇ}×Wì[œªÂށ¼¤t‰V,QéR^— (° Jößçœî™ž^€TіHÉ®²uö`fú6==½«ÿ=ɳ1þͳ¶ÈÊ&›­žŒGc<±ÿ¼ý‰O²¦šâ¿«¬œŽÚ–ÙéWYÛ 8WY^ç£Úl8iY&˜´­GyœÔA £©#E˜ñtTa\5&%€ãHՓRälíÏ2£! j!¥þŒ”ƒ\Œ£)3ÖͨÁbõ‹Õl±r<*Ô(yV £Dˆacä„Þ§´q®²IÓ$ÎAˆ™OaÌDz f6­Ç`ÚÓ±¯²b\JǖtSÓšP¥àªD•¡JËYsp•M+›„ã¤*5Ýa=¦*å`INbÔ¨8’8›ò'µqrI±‘sIÆV*KVÓ±ÆUV`KF®-0.qŠ3sÇÁ™bÁ2ÇÜi Ç`¡eü-—Tq`^Æ¿X Ä ܄FOœƒ˜t̸M¤Ç`‹|È: ¬ôcfü”´‚‰¤â6•lW@7pˆ}HdœƒˆŸ–&0ÎA -;¡žFz ¶ª)NbÛ08Öaª2¡¢6VUA³­P Hª±qsKŽNj¤Ç`KîMÇ: £}i¬Ã`Ûé`æZü_¶š`'ø_%€â¶ b`."é1X$,šX‡ÁNÚ«‹•l]E@Z4py)âé1¦m¦”7±ƒÅÄp[b+[Õ±“0ÎÒX‡ár9«.Ïs·Ù$—®ÍérãĒcŽO¤Ç`‘ù°ûm¨Ç`q:Á‰u˜ÊŒéòÄ:Ìøë1Ø¢a¨%Öa°rÌ%V QŠ­BÖQ`†ˆœhž8!nQÀö‰ô˜ªV%Ç: ¶ÃçŽu¬úŽuÊ ßûuU™I6r) )8•Þ8M#ƒ2ad^qO¥i=Æغ„íë0•a¼8Öa*C¿%Öcú­¬ë1ØépfQÙ!&nfÁÖ´WZ×c°²×ë0Ë4VŽsÊ)Îü] -$ˆc“‰$qJQ€°q(*"¤sÒ,œÔcš?ýVX‡i~ž­ibIie=‘” I8ÒA DŽ„FzÌi êi¬N+Ǒè‰i¤i—ç,FzÌEY‘¤¡:-²,Uñ¤i—Sªb¤Ç˜V–s¬Ãԅ§ªcf„–ƒ™U$T¬<7U$I¤Àq A#=¦H,Ãë0X\6¼i¬Ãx‚üìX‡ÁNy q¬ÃP§emfÁV,ÞÒXUE4C[•” \^”Œ#e`1-R˜)°‘˱M[leþ’¤Ç´‹–IJÒ-šFÂA®% -8ÐAätÖ,‰s;…EâÄz‰ôlͽäX‡iwæôÄJ^. ­ÀR@a¥tŒΡ©Ž?$ç &E²¯é1âNCuIXÂî…€´dà° iœƒ˜´äe#‘ƒ……`Zê1XÜu§ŽUàb¹qr?ð VO« ÿ{ÎA -$³:)¶¥Ý¸G+1žN8UË81)r*ÂÀHÁ¢L†ŒÕp–kî†,7 4¬ƒ(×ûDzÌE¹“ë0XÀð¦Mì1Xd\„Ibæ¶æ XÁbf„¦õ˜¬Ø×X±/Ï \E‘ý¯‚\ü!9iV)‰ô˜, AÏ& ¶dEìX‡Á6ô\bUÜÖ]¢sIÜÀ©|Æ9hâÄ #ä(±c,ÒZN‰u˜âòÔw¬Ã°=Tƒ26V•A5h†¥¢Û0 -‘ŒÅöÆ9hÊ” ³e«ÊDV…O¬Ã¦LbU™0¶È¢I`U5¾mT^ÜFUeØÿIœƒX²à­ ‘ƒ•nƒc‹¢af‹zLexùu¬Ã`Ñdñ¬*ƒ{KI3¼ä)ë(ŒÊ§Ê„qAx#=¦2 íX‡Á¢C$Öa®GžUqÑêMÌtÏ>ˆnTTmB\6dç –D/“Ú@ÁÊéãX‡Áâ`õ«@²ïa?‘@€lÓq>ó8ÔAÎAL -‡"«Ø@ÖrŸNn®æ(…b@~%k±4cäaŒHˆäb–?ËžNA_Í]þŠLBœ½Fc‚ب¥Ý çgOžþˆcrœ]Š(%1{[egÒ¨ÆãÙgÝùržõ—Ù‹~½›¯wÛ¿žýŠQœ£ŽÂ°£‚Ã~8}öêù3þz·{àx˜½Ùô¿Îg;yŽkV5 Ï_ö³›æìv‹~Mí©I©äèÛü“«z8N‚zè£ÖВµ÷ž~hè=Îæ݊ãpöM&Õ7•ÿÐjA£ä°q‘ARñ׳óínÓ×à°«¿3áՑ'­}ÄÓ¾‰º$„Fã"Æ×Oóõ|Ó-ùíµ¦ ®Éëí®[.-ì/ʲýÎToDGÔmNÃõnÓ_ÜÌâv©'ߙÌûîjEˆiNzqÕ]ïæ>gjDÂÑ‘‹ó°éþ«ÿğ ŸC2Ûõ|‚ÆÚ4)";V?ÊdŨÇçÝúBFGÕ¤3žÍ·’€pNXºBx<êΝR¾§?¦4ùË3è{ªAx«IÞÎ;Õ -Ù½ŽwWs± -^|L£¦«Nr)Ëƞ]wï璹 4–£•÷½õxXÔ?âñY ”.ö•~~³X^,Öï©$ZEä6ş/ÖÝf¡z27L¿ñ–Z¢º¶Ü×ò,x÷eó,ò“xíŒèìÅêºß캵Ä1ŠåÚÝv7¿–_c†&œJçÍÁJQéÁ±‰þè¾Î/6ón'Á‹J¹Š'émnݮΩ‹¿Iðh6ëח‹÷7KáxÛ:ÎC:Ì.˹®‡]U=^A‘)èQÞ ‚ºÞWÝR‘ß¡¿÷7’ùIÕä¤xëœbƒú‰»q‰±døi±»;¡:GKìõ®»T'Ø“<—=ˆ¦hÙ6²ò -ïãt×mva‡£:­ÍÅw„‚æ@¤EûaÈö9Êu;á׫sý!ߣIþ|%ï˜3ê>ÌmHÑ¢»?ÓîTþrÓkEYpÑ -'Àb=ß]Œô3ú´mûXî šæRL(‡÷ܪ©Û+÷l‰ƒ~úqþw -Œ7ELÉ -°äv45,ÇIrC¤Æ4–urn ÎýŽÓáýžY梛¯ô7l”hƒ)ªšx-@Wk?®Ï6¿SÊAT.[ ut¥>{˜m¯ºM8ÊðÓ2–´ÝÇn±ä•LBŸFÄÌ©êC 3å­e;ß|Ôò /*Æu8Nïä?û8×ú¼ÀÅҙhr!º×¸*†„Àwò–ÕoOp·@7ëÅo4Riʄ³å7MyŒ¶ý#í›`¶Õ†ûeú…¶¸5?l‹—'§- fï.ß½—gØ(U«©w‹õô7{\ÅJ_Ÿéc_«ãqñáð×'§O yŠŽvºÏw3„‘HÎhÃÕ¹;6úø΀ †,ÑÕ伕PO‡ù>®Û¸Ö±äK~dÎ®a’XÊR¼ì׉ãÛx›x×o>üƒ«à¥^æ¼SЯLä%¾%áB=Nø9ZLž/Ýûu¿›ï"Úèa´`4V¢2zWvGþÊò~fº¨ -n ÃrªèááU9õג㐦Rž?~©‡zÕñ|ø̊N•ðâe¸»¡‘Öø^£W½¹˜¢a¦»Û -¸k×Ïú%½»©¹+ûyþq.OÑõhâíùžã=>xPR‹z¯ä›Íb“7êM|¶”¼5aýòúø¿²±ü g÷ü´-ۋ”ÌUŒÿ7/8[ŽðŽÅáƒX&¯tSâõü~2ÒZß[äç~öÁÊ[5ƃõ& ò£åp¶Zž{ù_u××Aþ -å†%”_PI¬»•–(ø¶Ó.£@/þ©jâ»Ñø>JŞà]í¦ÐhˆÙñxu½é?ÎåÊ]R/å|ÓŠù7^Y…x^¬%ÔЍ²}¼íVç©8',e}±Š÷› —n¡o(ÕUÚ¬x³²_oœ  -ü¸˜K—Šq£özXú6ÛÀø4¼ù–-nÕôˆß3»Í‡sö5|î]7h–Ü\³"‰Çß<¢GSÞ1¢¢±‹öýò•~µåÍØûó …Îw*58/p‡è—7±aŒ¦QßÊ|% ÿÄ4Q)|Àé+d—{û°›mú­ÖoþìØޜ㎬Ïñ‚® …쟐ñˆäÚøÎñ©óÀm¸Í‹ŠþšœZÝé¦чn­oV›ÊøX#u€Ue fôÑ,=ölé:ÁŸPÍò׃I¤¼ÅÇò>!£ÀulèîƒÆØé|gžγÌz£ÍMw·=¨Þ¿>#ø>Ùà²û­Þð¡)ˆ`´ê Ä~¨ß_÷;›I)ƒÚéäí¿z{òË /îí ̗ü]£ mñ‹Ÿ¡ïú%¤ÿ˓Wώ_Sy|Œa»è.ñ¿ÒóBû!ø˜Ò‡ÀA?äÇ~3‹¥"^“Û^¶cuYjßR'ŸkW¸t=ÃÛ.«ï ô2ð#µBԔÑø~ ‘W•Í÷°Å-] ‹~ÕéŽ`O0ÖmÝííàWòóg¦)JÆ^ o¿Ü€z"ĞËë^ߊàˆHçAwÞßh_ßoØK=äøîbgJ8ãJ‰wÅz¥ì..pðoCqÎëþ#ž„E¸ᕌ¿_@ÕpøE)_Ý,w‹ëÐÊÄûyW\#>/»™ÉÿX7Ý;¨:ù‹þÝ}.¡P‹“ë%îƒR ð•ó4„åë>>QԌ&w“ÀI;·YöÏ­[;nh]sü -ü­‹“½ª®4|ôˆïåî²bÔŸæÉ×>¸¸ñýQƒ/&öµOüz);øZ©Äß1ª˜ÆÚñ”?_Pçž=ùϓÿÿ5¤endstream -endobj -1372 0 obj<>/XObject<<>>>>/Annots 96 0 R>>endobj -1373 0 obj<>stream -xÕ\MsǽëWlù’ ö 䒢H9aÊ¢d‘)]\•AP‚M`iŒ­Ÿ×=3ÝoÐ&)QN’*[ogvº§§¿få_žYŽÿY[fÕ0›.žå9~±¼û»ü’ ë1þ¹ÈªñAÁuvöŒà"kòGp‘Šƒ!#¸ÈŠ¢8(‰d ¶níýòJÆ`ÇõAÅc /²2Ï{33[ŽF4–1ØѨ?–0ôP5 e vXŒ™Š2‚ -›RF*yBœ¼ê‘•,K(/ Tà#זu64Ž t¯*2Ž ¼0—ÉXt_ˆÎºç—Ê^$ ýáY˜Š ¢äc<’DQà¢D.¬Ý8‚Iã‚(q\\º‘ŒMgƒ(il;3r–°˜Q+J2–1ئC1VmÆCü ÀMœJæÁ(¨s*hW 4ëdxá¨ÒªæÔ(ðFn8:h3ç.2ì]NAè´!’1X¼Ä,a°Í¨?–0ضQl¹ŒÁŽËނCïUÙËX̯éú̌ÁëÞªãøê^úXÆ`›ª·ª þ¡ø’´ß -\ý‘ƒÓƒ#(J”“æ$c°Ãæé¬x䦮ô(© @ÞH«ìAlx%»¦“È8‚x_!.ÃIƲֲÏ;ÒµÚČeÓä\ø̌eÓF½3 3áUÅWââ“â¸â#W`?‡YcdXH\IøÀȍG2Î8‚³”ñN2Û´²VÊ,¼N¢±ð ˜ -¾_L®£@D+Ùt'ƒ…Íã¥6”1ض賄¡ÜRü‡Õ%Õã\#®![RâÂœdœ–D¬.1-ageæ,c,i(ÇßYݶÃ"H¶m‰SOêA,¨”(ì$cё„0gå ÕM‚õ o$ŸÐâô:Gpä…:‰Œ#ˆ9sqåNêûÊ:„û±Ì©@Æ UÁÅØõ ÁxæÓ3ŸÆAºqœDÆDÄ/îãb™ù¡¾]2¥‰? –0XÄ.~)c°ð;% (†P…ÏÌl#É(±„ÁŽ·XÂâÄ l´UÛªFî´ÆÐDZ‚X0rèIŸTU‹dŠ26L‹ƒf±¡RàÓFN\ö×È0±Ò¿JŒ\h$c¬֎õ8K,œ¶ÆYÂ`ᤠ^g C½uÝcÂqºípV -|Á‘ lA¼²’ãçƒÕ(H,a,(—cã,c°po°Q{-c°’ßË,ҐÞX°$¸Û–ff ¶Óïïe,V8’]·U©Ó­Nå«Ó @”HªÐÐIÆ`›F–¤óÈPƢƶÏ5ŽÄ&l,c°Ø Kl;k³±Ah@ÜgX¿'rŒ ú7’1ŒãCt–0رÄab ˂Åc:Ë,ÒÀKXvVRWāǶ(])pq"WRþ9É Fql(c°pbØ;g ƒ…ƒ€°Î;Rïã,a‹³%«'VlÛ\L"Žº¼Äi)ãA¼²–úÑIÆA˜‚YõÐiÞb$Å  ‚ ™ ƒª3_Pä ÖP-pñJõp>±,Wv†XÂ`‘ºŽˆ R%W*ðE나ÆĤðKÒHƲ\q²Ä–劓%–0XÄvèÁg& ¦Álµ‹%½¥&rÈùZxDyP8‚²\©×œd,Ëc"–0XìLÅ&f,֙ËΫ‡­Dfc‡-Y’º’Äɖ–8çò¤Œ1m.ÆYÆ`±@Ë,ÞÃcÒ°Ar`Âø’"—`$c[’±qIqlð°¥³êa–KF@,a°ãB¶ÎÇ–P$Ձ³Œ%©*ll082?Œ -DØà"²¿ÒHÆb…RÑ1ë Ö¢ÃYÆ"l.'Çff 3CÎÂbïŒa 1¡ -g ‹*$b9+™·«MµMŒ™·sšy§qšj;G0fÞÎiæÆ¹td í¡ˆ% R˜% vØ@4–0´‹0Á,c°š(úXÆ`µÅA,á°o,Q8eáiÙ·²'/c°H¯ Z3cZèeòšƒ…51«^´¡æV‹À 6¨¢ ý‡ »WEä¢MÉâ Ñ„—:KXT!Ý'b ƒE‰q|,aQ”¸EgƒkI;ka%~¨"‡s‡q -T‡˜¾Fl$c°ðqØWg ƒ…«™% ¥ÞXÂØÍ|fƲsâ*œUQÑ&·s®6A#ÓJ¶`Œ#ô_%¸ãŒ¸mg ‰ìÒI0Š H.Ç×9‡à`Ý%qE'rN|œCpZò§æˆ¶µx(µFý³cdÂ14Š &ԆŽsÁi2àœCY¤ÙÎ98&Î!6 ’VΔ •gsJ”Ç/äõÏ"›ÆøÈhL7Æ‚¸¶^e¼ŒB—;̆#‚~nbaå܍"U" #(ڐÅÇ9„Tp!4N­W]ÖÒ?›•FF-ÎGxÜ>Z 2 "QÍRã‚‹5:çP–(Í8‚àÐ :§Ë/© ¦¶åGFlŒ£´|£Âò㨰|çtù‰Óõ:ç0-߸°ü8®ÔèiÜËóg/¾CU“gçWZÙç¸FlëìüRoØñóôùùäâz–uWÙQ·Ü̖›õ·ç?abm!£ÒÀ°A)Þ}œÜlf+yFì&¹|žÕò†øÃí|ú³>„Ó:*ã¯G«n­Óãâ{XÕñ׳ۋål£ÃïÓ/Wݯëùòƒªãó/äøŒ|ô»Ó¾ïV?Xu·7ú8®Wm‚;gþp;¿œÉãÈ&Ú2NpÏÿ•Cùâ;xÿ ¸ -³”P,¸¡”JÂ2ƒšŽçëéíz=ï–2ùHÜó•OýXiőå¶ÿZ«Îùš$Xw%ᜍ‹*ʺùC¿aœ â›w³E·ÑßqëfŸ=\.»ÛåtöÌ"ç¢N{}3YM³h8«ˆ,a̓è"* D‹µ·‘ÕWЁZ©ªN¨2͞}ZNU-8Ch&F…m«¥M̗VKÙʖ Jdp}ێÀmûžfñþäôL¦„Ïj«h_zя˜/ÊÙ¶lúÍö¶wjælÒ§oÎU„cÛ³ÛxBPNÙqXt+Ý\¤IþàæãD=²Ý¡’n¢ùÌŸ?~«ïF˜k“g¼Yu›nÚ] ïì/ þŽ¨Môµ*©ë°N?½Ÿ//áre0Ú|~p“éÇùrä¯Å#v©É´ƒ -ùVßl†Û*=Åñ–gaÞy‘ÌûÝlÝ]ßn¢ŸDڃkÉhùoV—!ÁÛZHxĆæ àV؄¶šÿÿNàŒ6•¢Þ÷“åë`¨YÛ<9ÏÉòR•É-šžª¡a ó2ùÍ·“õú×n¥Ï"fŽÛ4í«åtõéƈOSLsµ8qÕöÓÙdq1‘÷á&eø˜í¾[™U.óR””{<ÑSŠ’péÛ&q²Ü¬ºËÛ©/ÿ ]þÝKßρhv÷„؉’'‹›nµ™,5Ñ©á1ì,Ÿ"êႠô#{xÑ݆¤ߗ¤#z6›Þ®æ›Oº7¨‹“}ì_Úþ5J*ßäm‰v }s/‡—ÿ¨“A0ÔmÃQ2Å=©ÁÙë—jÝ0K³î¾Å¢Ílæù…ÅêMW²A!w[B†}¼Ën9˜…c8ÓŠÏßFek<œÜàe‘î¦3Ý[Þç‚(žÜÄõ¤ÛÉgÎc²Æ9Ýzqq#þEfDmÞå¨[,¢‡‚בCÓÛÏ]íƒÆÑØ£Å!“ÿ=9 nÑXápþé&Äd-£´{ìs¾\o&××s@õ#¢àƒzÐÃUìw}tv<çkš­áó®j•¢ù¶ÝUoƼ!9•t¿ª!´ ¹— ¨p¯ænCâ%Y„ecñ,#šèič@“Nc¦až7yäÓs]3zEþÌÛÕ|1Y©“Æý^²³ãn1 Á7³¥ì^u××!‹Áª*$??U# - ÀZ!¢Ò!GÄَ«oW³Õì—ÛùzJ04tÊq:ïf“ËX}Ë' _5ÒìZRnP¹g -pÑÛ½œLµæÙRÊ¿w§û~‰ôóvÛ"$ºoàšÌøö•Ðn¹ÈÕ¬fp[Ãæy½Ý·5ÉB’­?…F*íˆ Jt9˜¢A¾#ôjç{=¸­²Üèu¨=Ä´‘và=†ËóÕíZ³#D2Ïr§S´ B i¥s NRîØÔÿìæËdà|è®ç© †æ­e™ùûöƒ4<‡ÿþê­B­_qõŽojq‚RávÊ=î©:cS‰Õ¹'¶}††ñåän3Dáq…ÅÇ;©Òóf9€úß]Ònˆ\›õ%ùqmÕÄtÿýÝ}² -µ±þ5Ž­ށå¾Ëj÷™b°d‹è·¦“þC–¶ìÓgÕX–:ÀM‡Ú -_F{îºOV(æj~Æ,É>l{g­µèà3$ÞÙv; -¼ÿ8 >1ÏzZ,[¯z²³kíë÷eÓÐ8‘ŽˆuŽNDyˆ8–é}˜mþ¦GAŽì÷Š÷ÀëXc⚛¸fÝVŒ=Q\Ínßî5®:U¾4rõÝÕÔÿöâõ+Çák$wuÈí·+k‘z·}’ «¸ð]¬—›'(ÇV¡´þ«È€¯¬óp:Û ö³üÜ˾ï>tK=òˆêù®PkM¾%̱¢‘9Ïîl¶IiR/7 —\Üß}×M)¡‚¼VÝ¢+NŠ;$=h‹›Ùu’½ªc¼cÔo^žœþûèÍéù»7ßl~Ó3¯ -¥ “…]õ~nv—Ç(7Öxhþ"–‚î§ Ϩéîòþºhb‡Ó.P«`žÖ‰¸«¤þða%íá4¨O.ƒRr|²U -¥`4¨FEéºû½jÚ»öt·Kä·(¸¯CËù´9bW3‡6«Pv»L¾8Ümìm25¥l&ÕÀ5ú!| ñ¡×¶9þÁA¼~Œk¸m‰þ‡‹à(A¿F³s[„½™À/(uæW1푏)S&š2h<Úd*{glµô.HvoÈöeÔøNA‚‹&híŒò/þ'Ïu#‹¸o²(³T?\x¿Ëò¹ì²‹×ø*ÑN™FV|n¦µ2q$LmW¸”„Oá=ÚÎC=àâ 襵²—ZèZ'+(ß\$ϒ„|Ì¿›JÖ4Ø®Älvƒëû³¥ŠÀׇsûø0Éãà¾Ý}{|¤CQi[±´œÍ.g—*2m ‘ãÁc¢àòՅˆuÛÇå(Þó¶¹{å¾ÐE¸J–Ê=] îXÅn*üá™R%ácÿ)‡÷/d[ß ÚVÈþã!›Ë9ÒNm°Ÿ!á/{Oi7µÚQØ~U¿<>RÈ·NÍ×,4’ÙôïéDK÷õ#¨¨Õìè$~¹W\¦‹ê}çêî‹#)LUIøxh\<¦í}³Ñʃn†äKZq±éj讄,Öc)!ómæ„åÉÖáñYô+æ*ɁRs=[Ì!?G|+S:|?ë‘fûê@þ6Ç T¢áëtï!5®ÄR‰Á —}& ÷ «pï)_¦äÑEd7HDÓ51¾xȇéûŠÙãÙÅ<¸:©~š'²è2hë±7,R)÷g+áÝìò¡OòU”ðâ;|t>hÄù@é8ë· g‡¯_f(šM7Ùq7½] sn©…þ•'|ž7h¡F|3ŸË)xuþì‡gÿg¶[endstream -endobj -1374 0 obj<>/XObject<<>>>>/Annots 140 0 R>>endobj -1375 0 obj<>stream -xÍ\Érǽó+ú(ö¾.¦EIÉ"dù: ‰1Óð,¤ô÷~™U•ùz0I“eGXxóºª+³²r«–ÿû Èrü·Èº2«Úl¾zŸæøÅþç§È/Y[øßUV §EWÙëWY“O8‚«¬oN+XڜCwÚGp•yko—2[員ŒÁ¶²æ°rKx••Åtl¥/ªLQÊÓ&kÈH‚«l¨DLã╥Œw2LZ–§­MªÀ'\Ÿ‹~Œ#(:¨D[F2)»ÓšØðÊ|ÀIþÊÈõµhÇ8‚òÊ\^i$c°u-¯t–0ؾ˜°¼§ZL¸Êºú @D‹Ï8ÉX^ÚB‹ÎªœM_aò(g&gâºZfÕõ•±—öÒ9‚xaٞvD2 ›`6,fæÓ(ðåD®W!#(ÈEF#Ë+[Y­±á•øь«Qௌ¬iȜ“óÜàäÈ~è@†ŒçÙ9=Ïiœžgçô<'N°s!ƒžg'ƒ-‘_×&Ëa –ãq–0Î3̑Çíه×NäúNÆGP–+NÂIÆ`ƒÁÚPÆ`¡ýšÇ ӇýøXÂâœä 9ËlÙɆÚØ *¼„Ûž5ra›Œ#(¢ÊøÆHÆ`k]®³„E˜ -þ’Æaĵ:«Ë­1õxr°å&®ÓvŽ ŠNçŠ( ´ç$c°•¸Sb ƒ…»˜% v(§3”]ó™ƒEÈà™åÖ­x#y«Hª@íÞ!44È0ãb|d1Rç¬ä˜¤q -dN¥Ô¬â©¯¥§>@ ÓwG¯ÃÏMæƒÕhL,a°]7KXLº’ý´×2[w"¦³„Áö%‚§³j_Õ ~âôPsj_áý› ÆáPhDÑø¸ÈÁE`NãŠ$;É,ŽMÏ,a°ê!h,aQ Ab ‹u•“™ƒm hÃÇjL®ºB ‘œ• Ž™ŠêœC,¨ìaµ>0L -…˹³(ðI§³8çPtÐ ÈUF†Ik9ÐiR>iâtçbRÍ*#äИXHX©Ÿ4q:‹s1i+.¨22˜Oòd¬&¢@&%˜tj\Pq'Î b$c‘£‘W:KX¤ûá,a°Ã€óGc Ã@Ê vËXÌGÒ,b ÛÀ{ Äí‹ -ÚUàڍ\‘×òR#‹°âLj% Ñ`ÂƂsIì|¬.©„³6Ó À–”¸°'ã¥ØÇ2#–°,I\§³á¥]ÈÄU¥iäŠR¢“Œ1-ÜsEl˜ÆgÆ[*ði#W #ʱwò¤Œ1-γaÚ&äÓaµ -|ÚÈØî"+d,**'¬žŠ"hH’S€L«§"qpâ˜UÔW:ĤZV9É,2ↆ2«6%,†"+s–1Xl öÛÅ,T0K¬F%Kg‰å@33‹™:f Kô–ã33^eu)õ–³ŒÁ"¤LfV#@¡¹˜nߞÈiòUGP¶§Ã7’1Xd,ØYg ƒj±ng C‰E)j2–1تž¼—1X8ÇÉXÂ`‘bó|fÂP1Ò˜”±ŒÁ X"Æ`µÜ¢±„±•äˆÎ†cWTßJ~ì"=‘‘Œe $üûPÆ`Q)a×},a°Èd Ž³„eƒ$èKX6Hš>Î2 ˆóc33†¢àþyÍAÚyˆq£Tઈ\«À’ŒdŒ£a% þ úw–°«ÞYÂå„5–±¨B-±„ÁÂVa>–°(Jݐ³„ÁB哙 ‹5ªm,c°].–l¬*¹Ðœ#*9Srâ -j ېÝ’1…’£b–0X¸‡’YÂ`{ h43a‹ÖÄ2‹È„v¥­J˔Ÿ^kxI\ˆRNJ9$†¤•zœqc9䜖CiŠÎ&N¢ês!k±$ÈXÔ'¹'±„EAÒ["–0T€& ¿–1XÈ4a ‹úÄûø̌¡‡R|¢³ŒÁ"aà5ÕÃø¬Ì*¸ê#‡J †dAˆŠ&lÁHÆ¢&i‹K¬¶ˆ%,Š÷ï,c°tx‰%,j’R‹XÂPzX±ŒEM»},c°(Ú D“7(ñÓjN žáÄûLï4Ž v¤±©Æ¡#`P0´o¤(8a°èIà8K,”’ž•]e æÍñ±„ÁbP¿³„¡`¬Î2 ŸÌï JBJï‡\[Zä‚iG Ò.Ta$c°ð_x¥±úJ¤"–éßöÂÈè Œq”ÞfTxY%usž9çãà®kâŠÒ¤ú³qêÉõ¨ᄥG=}-ÃPÙu駋q5[®u2<˜Wqäj±: yø A .=ª¡/±jé|caýiV&KXۓqu½¼ZȄ5:ó¶:_3rƒ&>}úmÿÓ4²Ì“¾g‰êC‰^/vûkUGÞG9÷ºO¨—†"iíáb7ønsޜÎÇõƒ|,OÛqßÂ6­Š§ž&æ›ÖŠød³˜ítϤªl£ˆ»Ký ñ×ñ·9¶wMõ*ŠHÌæóq¿ÞÉá›&Úê=ÊlâÈZ¨´ló?ŽÛíçR‹¶_0ÞÅf3nôáf¬/£"îQ~U’§ÈyïÚý;[lUëȐZÛ¦£Ö¹]lއ3-×£e2Ú­Ù7Ü>ßPUðBîíï¦ ‹Æàd»c2/×ouÿË$ßóa¹»”ßp&+;¨ÛÕùüj ×+ rjSÒ½‰E/2 Õ)ӑŒÞýè«q·H–øçð–$†þd¡XÖÃP‘ÿa$ÂV~q${uVëN£½–ÜköÑP†4¨îcl<”æk㦗õqðDsØöñýЬÿ9.×nÖÙ×2ü7ê½è©^éOè;XðyʑÜ=öÑCáÑ’y ôtV´dÚ;÷}AA'ÒÄÁ&µ”‡j9¾ØÙúB‹lÌ´òËr}1~Ðcƒàäqm«\æ ÔžE‹¥½—€Õ ²Œ½‚}#úåò÷¸bßô¥®Ò¼Oaww„,×:_ìbˆFë,Dï.gjH“H±]Ì÷›åN_†´¸éRôÿ«¼¾?šdr!|üM~FØw땂¦È» Ür÷òüùó`%ˆ¦‹®wËq=»’bûqÍ‹$cË·ûÍLxaQ¤çC”ëküϜ¯-dA'rsžÏ×»Íx±Ÿ§å61éüÌ©ïëñV½Æ ViÜVÈÀvE\¤”)fCÖÅ[ٙÎQNû±}ùZFŸ =ÍPéÐfëÅîøyN3òUóæý8P¸CÁ¯_W¹­–äöK¹5 £.÷ªƒ2¥ÔÞ.Ö©œK¹Ì}íÝÇß$:iàI¦b?mb¼š­4¡Fn™©Júi±¯öfÇèIY®ŠN|Šã©š*mEÛ½ëý&̉Èdnìçõò·‡/–ëýobÒl2¸Ò¨€…ªwÊFu”¸sº¡°±UL¬µ¼·¡æG=ÿçØÛ(Z²7Övt²þlà{/gqt·~ÿ ²­ÜBcˆ “Å‹òméÍ=%~·—Ž\ËR¸Ü!ª3˜,{½ÝÂmÍ/méÒëÿFZO—fíTãAß|üÕzìø£u—Ž@›UyûývÎ.wTÄÇöúF)+ÍbdइCç~14¤ø‚kõŎ¡ …j‰æÝÁ!BŽ6T-TýOvû(¸šM¯ìÕb÷øù߸&͎zÑ'³y˜Bêöþ¾,¡Õ -J¹áb£EóI2¾xùý¯ÏTƉ—~ûƒ(óÍ÷ßrjîæç6fáèJ½ížÉ Ù±E’Áò•»Yì§ÌÚius‚7á†9FÿB=}¥[µЋq|zœr¡x_v‹dI˜#'4.q=Ö˜ýò.ö,¦,S)Š\\çUÅ-¡.*±’益v Ao8÷Ÿ·º^¸KÙg(øH¯êHø½‰I“k¶ÇÄz·œ{áŽÛVR„õ³áš¿ÎCW‰©ã:n*æfÔ{9{Ž·YŽïäÚÆoØ*¼Ëª›Q¯PYXÁ¡ÖÃÊí¿/Óþ­OT|uqpðnq×é稹ª¸Q!Ìß0)\‡jK&|»cV|‹úÔÜ?¦–O7©_³©bf#M±[ -×5æ– öü ->o\«–|,»ŠÑŸ‘Õ©ŠÏ8¿çÖOô.øÆ.ÍçÑ?â߂p 壯¦íATãË^,cŽu Üßÿ?]ƒî°ï#™­BqØôù÷rñ!…v\“[ÇãX\£oû6=ŒïêÍ’®ñvlv^›®£‰y’¶ÇîyøìÛ½Ærv5¾Õ·AßUýéô µº:è,ˍŽ$0ï¡RÍS8‡²<oJn•$Ø'b×©2#·¤Ž»§íå,vªðéu¢ºJ¸Xö2ÈâÔ¿š—¹Í¸Ž*cü°^l¶—KýÄ%zÝÄþÕ½;£(žü»ˆSñråÏ/$PO/–›Å|7n4٭тIW‡G…ï× ÇÚŞV;LΌøFÐ|– -g$bÖ -qߚλy“ã/¼Ë_“0øW±&é.^4 žN6‚³á›BUõÝoÅT3I¤‚Ss<,5Ƌå›ß“ÆÖ¤Ì";~Þ¾À ñE{>­†¦KþrÔÅO0†iô:HcäÒf3óû)Äi+dìƅ?Â8bPY¢ZÜh-…OÅüÒซÛ7JrЧ ÐÕlûN½>:þ]ú¬àz¶ÁmÖŽ®\¾HkQ)ú5÷Ô—)æx¿…^ŽÙl·Û,Ïñ¡–¦bœì¬f××ÉV¡ôö–ñ“-©Ó^ÚÃgøÞ?~$ˆÿ‡—ºèð%$þ) ¾~ôòñ£ìÇÍø+¼nötœïW(ꬤCzÚ Hº|Ç—Ë¥,úïgþõàœÅàGendstream -endobj -1376 0 obj<>/XObject<<>>>>/Annots 185 0 R>>endobj -1377 0 obj<>stream -xÍ[M“Ç ½ëWÌ!§*KÏ÷Ç)µ–,[©HµÑ®K©JåÀåŽV´IΆä®ìŸ Àp(Ë*‰+ÛUß¼énF£Ñ£ÿ=ɒÿgI“'E,ÖOÒYŠ'úÇëèIR—þ\'E7ËX%—O\'U5«çà:ɲjÖ:Òc°e1jê1Ø:•¾­Ãë$GÏ^$ÁÅh\Á6­êFêx ]ó±T“%ÊYî¤*jêª 5a -î—õëà:éÒY^$ÎA¨šv³Â‘ƒE‡ceÈ<‡í␠lÈÀeYJÝ*I²GV€}••n!I©Ý2°nז4kÊ9HSʞ¢¤Ç:¥Æʔ†~ó”'MYrÀª-̐<쀑c3ÎAX½ÒNØêÉêÌc =[e˜SÇ: JÉxÆz 6oGm=[W˜×Öa°m=’Êc¸_šÂøÖÖc°ìzŽ%ç¬êΜS€Niä²,‡w:²¤†UÍ.† †¸ ¨¡ƒ°’4T’ç¬ 7£¥‚Z1°9 œL’rbΚYåÚ9ˆñŠ–Նì´UÖ°“ðz`Ž"¤aÄÒ°iØãÂ"ªXÃÀeX ÇH2M‰åK«m!€:QóËÖHÁÖŒdlÅÝ6 ¯>釁u¸,k©¡’£Ûª Au˜í ‹cŸömɧ#[R²¶"pM¾íÀÀ\–ÓB*•ô˜¬Ä"9Ö0©Cý»¶ƒåYp¬Ã¤Mœ±ƒ…#y©D¬qÚîÄþ LÀe9ùx©¤Ç [5Öa°m:f&ujø¶kë0ÆJƒýµgÁV ©c¬Ã`Š8Žu˜bJ¯3VLQP‡Ñ ́˲šDRÒc¨ƒ`T{Öa°u‹0çÚ:L¦ =ØX^æ%”nyH$^õ‘ƒãC"~‘8Ñ)¿'=‹•‚!µ©X!Ë܂d`Víª0½’£[¸ 5Öa°ý¾-Zt´Âƒé蠑“`b¤Ç¤K]ë0ؖ’:Ç:L ƒ¶cE¤–6Î()pYZ"ÂJzŒAËÖa° mýÖVm(pÄAØ  ƒ(é1Ù¡ÆôÆ:Lv =ÀXv²î¤N&€e'‹ iùM&)vˆ”9qì`Ò.+ɝŒ5ap›nÖ0p’Jz E°v €±SàÈhB••A3IìEZ6hàđ %=Æ e±ë0‰DnïX‡‰m°ø=k,’6¬ãŠÀ©¤Ø"08p²JzŒn‹ŒD2Öa° åçŽu,–&ÎÚ:L¦Ðl¬Ç`˚¼EÛ²:y'é;«#@Չ\†¸\$Fz ‘ò -{‰c&e;̎ce3NJH¤þ")pA%=V‘Œ‘b[¸@Š­ˆF¡ŽÉE"F[ìݝcE¤º¶¥‘30‘—¥ä‡FzŒn‘YBSmê1XL£gePlër6hàȗjlºô&ëâ0ºåŒÛXé3 Ñ,g`Ý.È®¤Ç¤ E3kÊæË -< ¹v΀zEÐ+pœ\ç`ȵã\;¶#ÔX§.s@(Zq@@:A9×6’kÖº$]€6Œ\¯Æ¤Ð‹Á6¢Ó¼Á5Òc°p«Â³ƒí(ÙvmÆåӚ±ƒÅÞéےÕÉui“`3 P«GŽÍlœƒ°zA]r'ÔÎAÈÊg#=&=iq¬Ãˆ(s0Öc°˜‡ë0éIÙ§kë0XLJåY‡aL¸—Êc°U7êYÜۅh/‘ À~$f¢mÍ8iWȉC^d`n8ñ¿LIiˆc-kiÈÀNüO9ay¬†R/ÔÐc°ØÑ2Çò’§å«K^µä9’fç7¹[‡É(h˚ ¥ -ÿV=ÓæEC¤… ¥­Œc Z—þòo•?0äe¢”ƒbÏÁD’§–P[Û9®L!¿r,2͑ø· -˜ a -µ.zM̨‚pÓ8ƒà`׎ƒ!tàß:X`(üS}$º‚AtØqÙC9ƒ¢ªF‘ãÁªðo,02ûJ9ˆÁrÚŒ3 ',êž-bÂ;Ê„8¡Ð™$´c!!ÉåØsù· -˜òé5LviE‡xd*‘ûîêɷϱ¯¤ÉÕ[‰<´Jê¦L®n¸þŒÇ‹o®æ׫>Þ&O‡Í¾ßìw½ú­2jušåÔ웧ïæwû~KïPDFèäæXgFÏpJOÐÝÛåíýv¹¹%EÇðöÅùKzFÛLׄgoî=س›ån¿]^ßïûzÊ5ÚžòˆÐµŒc. ÿv¾ZýF N=¹ö¾žoæ·Ò UޅQç÷ûwh´\Ì÷ËaC͐PtЕ՚ýÞmJ¯ûÑX,U`Ú+ŒvØ&ÉØ(y»œ¯¯çÔ„º‹OçVûI]„q“h ë1]—å÷äü|N4=뺑r2ãªÜ³ƒ¹ÂI+NËùÔÈõã+Õfdú³ !’ùi*ÆӍ_n£wFo67)geCW;äýKöþŠ´ vëëÙK€ÆDaªhmÛ\üRW0ûhÌë÷Ö°ØÁ­á‡Ý>¬_¬vl‚rìĈÿq‚_.Ûa7¼åY¶³ªŽÌ¡WÀ¦ºöž/W=‰Š h¦¼üm·ï×ôpQÅ~öÛ^ÞÅn Ë‚ÅöVÔÁŸ[b8Œ„öé  -Ąº´sl-dB]ÛÅáÚ~±A¨º_PáZ™ÿúø_¾…ht†Dsäû¤†)J…£±_ ûž•È¿Â2ýîmyàÖT#!e>êÖ%/oçÖؔ¢_ÓækÞsw7lŋÑyv‰‰túçmuàˆYŠ -“wD”úÆÑë¶ÀáF<‘Ç%tza?:‚hsÖ4n!a“Ë?´ØOƒg~t„¿@v=ZE¤Ãt=ÝöØ-$ûÁžc›ûîÈÿþò_šœÔýN,ü‘îƒ>H㝠-ы§Å‡…Ë~õÁ¿&Iɳíò¡ßrÀÀ½CSÄÜ*ftÈ·šŸ¿ÿi±-…×dìՏ¸ó‘úsµ Yþ •Š?”ýo¤²\½X:À -ÿš°­æÛ[Ù £ª6÷ëë,ûÍlà¬éB—ÅŒ˜]"ªÂÇ"'Ìú¢p ;&¸žšÌûùÍMœ1öÉy^õïɌ8åVYLz&±ÓéaÉC Î4ïEâMŒž½Ynn†÷ìJHßÍ<¯®øUœjÕbçox|, 4äaŸémKâ SøE51‰¥Íäi­ðï^`Ÿ‘=‰d{ÒÙ>4KÛ±žTã<˜ýƒDø*Ì -#qI^¬ÙUeŠP ÓlîjV»ž÷ND‡:ûš©CÇG³3.±ZΆ<ñH˜~ónÎB#°0µdý`hRÅÿNƃsE8š÷Ô8(—!~ìBØ('žúÁ](¬UÒft•hΏQ‘Šqûb¾øh™vlى3QIÜ*O”œ†éOrÔ]¿ÅvE -â{=9œzÖFýGípï6ÎåP2œÌàQåpÚ@CO£î´‘<]-QÑ`ýÚYk#£ñO ¢nt ÅQÑÌÕ æ·›a'+ ÷vE'Üñ>UãNŠn*µ˜fz“”›OY_W› îÝåŸÆˆgýõýímØãñ]‹¥5!- A"Õ4în; j¸–p€8ôH¥ŽK(Iâ›Cµ¦Qáhd±ä£ -ÃÍ@Zâ€1yAPôՔãÝü¡çð+vÏGô×® YP»Ê&Ó9 ÊÓïï5dc,æüœ¾öÓr鱚$¿L=PÊg<‘h*æÄ)è„Û~´ÁAڎ‚÷$dþc¸fUq©åÝìÿÄÏóX¹ÛLf}¸ßßIi³}áSÃÇg¾ß•$èY†]Ö§/¸Œú UQŸšo䐂S§%íNa”¾7EMñeüXÓf¢éë¹8ðˆ®È (/Ûåïw¸ÚTùYè\ZG~£7Ÿ93¸yǕèÄՋ±níD·ó›‡ùfî'p—TÆJë…+U!\•écFS6j3qÈn¢Êë~¾âeæçéÆï0˜&M«mˆÇû%ʌ®¸pâÆ~òÑJ¢DWI¼ì¸áÚË}*‰zLZõýŠ£"+Nœ,ÿAÓu5͋»°j[·èP/ç¹Ôm’Õüy4Ñd\HDJ0–ÿ尕ŠŒ?Ø-†õݪß3kËhnúǑp 8ʂŽÔkvnâ©2¤™‘›x]àU§HãLÚ²‘»¯ìÎ}Ú,ß.%êŒÊ[ÿnÃ5bŽ…Ôë~ÿ¾ï7äEHDðu”(—øª ù:n®¡jãwáXЕOÜi’Ÿ^½ø7õ‰Â›- û]ÈGqIÜfn¤k”ˆX|L€TàÍÛqÇ­_™ŒR|”¨Æ~t~M;ç‚w$I§™Ñ?¸„¼&á~ÝgÄ8Œµø3¯f©»®P.Ë4™‡ã©;p5„½!¹ØK,hv*woyÄz'}¦fR©!妧È+*!‹—¹ÂËO»p—ÏÒ¯¾t¡rxx …Äd<[?’«ávJK䘬7Ãö™),ÿxwÒiù@çªÜÁ÷¤Üt¶ÆWÞªçë~ûSö=O-Ã)‘àÝ˞„Èr¼§¨äHªðåjÙÇuŒ*⌃E¼…ów¯ækÙ?ñِVø/Q<[.D;×sù~¹_¼c¥q§P†kãR|ù§Y*_þPõP³iaàb…r}öÄûˆ•ž’#ªà¤¯3û÷ª«PÅ?÷<¡³ªBGfjzàGŒz¦¿‹9v„ÿa;H`´Õ¾xFv Ï(4}=_­û$ -¥¼ºw<_~òb¸Ú&9Î2ú‚üp§gü×ýî~%áÒŽäé|ñ.ÞVáµ8wqÇû;¨óís|TÊ߇á{°¶À÷üU>>ù<ùÝ9íU?÷‹}òlXܯQ·Õ’nA÷ƒ”™4iG-È:ß_=ùדÿ; âendstream -endobj -1378 0 obj<>/XObject<<>>>>/Annots 228 0 R>>endobj -1379 0 obj<>stream -xÍ[[—ÓF~çWè-ìõîz侜 ›¼”Ø–ã —ýõûUuwUÉ6™YxHΗ>uwUuݺZü}Ï%)þwI%y•Ì÷ÒIŠ'òǛçô$©Š.’¼¸@̓‹{†\$e9© fÈEÒæ“Ì`†\$.OG ¥ÖnR˜¡–^$™kFc- 4¯Æ¨¡–Õ¤63[hSOJ‹zpåˆ+K-ÛÑÌX*ÌËI–¤BCBX—Nòð&DCoa¤ËšIkQCc,” -Eñ»bâã˛RwÚ:.`YÓ% -úHð²Õ9:0`.eÖ´4í ùµ4PøŠë…¯S^d—Ï™ÐEÖR=£˜!1)‚"&•–¦%)GÔÐ@‘¬Z‹š )%É̖šQ@0¨¡ÉÌR„Ž54m·¢^2QL¨"æ3@. ¥!NAöiPCE--jh–ƒŽå -"Gþ“ -ÂÄ×,sh˜–ß$ÐÒ~ZhIP?-¢Õ~&tڀ¹"…-æZš¶5§Eõ -„óªù2¡ - ˜K3¸?¹u“0·†Æ´¨†`Š(ªT؃¢††¤ð((PPf)k}Ñ;HOKã4£˜!±¤#oSÐÒ@YŠú%‘WŌ(É,¨ç ` m™b†$P±  ¥Ö)B¯A M Qp5¨¡¡!ð`Çzv+_¤zþ˜P  i©M2Á )ì -Ø #]EV­C-MÂT¤kh†‹A M!)ê…A}L†]‘ufL0†Ä´($ €”,³¬âȵ'hœ!C© 'Ë8Ž¬º³Ð@KcEðVy F MJ DmPC“ÿR«¨¥¢vl,jh S£±† -˱ëzB9j¼LÇÞ8æSÕ_Þ²ý@Äjɕ¨3cõk2¸¯b†¤]aG“– -Ÿ¯Šš4HéIQŽqŽ‹ìãÜɼ•¤Œ2Erúj>íQ–|æÈf¶&YÁ.? ë+_4“² 4¸:Ac´uyˆŒÝr¶þ‚º…“;Ê—E$N朣 ùž6뜏ô±ÖÏã}{ÞmEùå°<› ó݂ -õ_QÆ -âjºÇt°¹¯×„à ùöCGÏàÐùƗN[ªøøM\„7„QùM¢K]Ê 7Æ¡†UtsúãG!T¼…춉BHõY¨„€7Ì‰Æ ©ÙT“Ô‰°‘w°c[øÉ#Ës‰pÒKñv3}ï-ŒN‚wWjßÙ9ãàŠã6FÙîåÅvXÇú̞q.¦‹wÓ_|hBŸMO#›nýàÕt†úÕƒsp-'‡³Ù°[Æ@§§•~y=¬rX@ hëx -òɖbŽgÞ»§Kvxt~â‘"yùäákzˆžz%Qà jâøÿBõÙê -}¸6Ø3åçH j8 ŽMàõn½6,¥)]oÈéŸqÎЍ•ª¸`‹qpöùYÌ9J0Jª8ªŽÙ¿Ø­VÃ:&¾ÚXŽØZ@bNÝúc·f»EMN§ÜDH24XÖÞ)×{²Í>t Nƒ¸BÔôìÄý¦ó§ó͇~E³Ã‡Ô;¶=‚‰¼É±¬ùæÙczwv’†³<­ù³êÝFß6®\Áçb6þf=F¥d{ƺ׈ˆ…X¢ê•BŠC1; -Ÿúí–WrŽ±¢Ó̸xÈŒà3.ÞëŒ?ô³Â£ã„ -ބÿBš ø$øNv«ØƒO(ˆQsJD~óm~fŽˆÿ>ÿýòœž. -àŒÝÆ3ö1‡`͇ˆEÒÀÚ »õÌ­è¶H4› Wþ8cÖ{Þw0ÐHê|üŸ V:.×ÚЖ½•nñî ½š¤­•Á0mAìá?oõê…9³Õ+Øß+¾U›ºC_ÙÎ#E;ádXóM5}â.ßBÙß땰igôµ¥9÷³¨‡uÍWdSCÓðÕ|ê¸-‹PÖ¦'¼<òªÁðå¹íJ²d‡åÎÿ!Ùì#;+n1ðõԝõÄÛ¤Gàð%Ã-šhÉí…%.{èå9¦/¦«Uì8ã¬.·Ä—ÊS_ã 1Jœž94nlÒaë÷D=TWݚ;KY©Å;«~³Ùù,‹ì[㲜´Yä²ý®‚Ä8¦â ŸGcâ@]M×ý&\bWéO’Hƒ,gøHÉF¸ç˜ÿóÕ|˜ýå"Úæ§Uø q5ÊPÊp-ÏѪøØwŸÈ±k?Á¥Md_wíoÁaH|Ù}ìæ|?€¸ ¥†ÝôÊO}vÐ ŠÂ8ú†m_œÃ«êó9_® ÏōH~¹žþåË&äæpðö÷ GDô2ËØËVñœõå{ˆäŒ^¤÷bƒóª[¡s9 M­ßpUß¹Ôb%àËZùlt¨@ÈÛï°Á™:>¹Ž+^ïewÔIÓ­ ¿¢DM£§$´×V{ÓMýg4%¾{‰G‡Mÿ_ÞIúŽåʨQäAéÁ3|Çß+Uø2«Á?Ããï–ñ¹ÎÅÃW&¯×ßèv'O†ÙŽÎ@ÒMÏqn*ZN5nþðúGÚó§—÷~»÷?ðô0endstream -endobj -1380 0 obj<>/XObject<<>>>>/Annots 270 0 R>>endobj -1381 0 obj<>stream -xÕ[MsÇ ½ëWÌÍRU¸šïSJ¢b›U–͈t˜ƒ.£Ý¡8öîÌfv)9ÿ>@7³\ÆrÅ»Ê֛·iÝ=ú׳$ŠñoUi”•Ñró,^Äx¢ÿy÷=‰Ê¼Á7QÖ,ÖÑÅ37QQ,Jø‰šxQÎÀM”¹¾„Z ¶Îfb³’~œ‡WÖ -h¤›¨Žû!qBhœÑ|X -ëÁBÓoòB¡ŽkªE•ÊÉdâý8aœãjšo©œ˜LR-2C²Ð¢)©*@…z®ªE8ICR&"¶$/² -A¨ãêœÆ)g ­áþ@ŠÐ²a_”͆ 5¾¨á‹À¨Bu -Jö…Ha„:®I`¶B9ɦ1ÍFIšgì(Ê uœLM9!RÒ¨PR„f1;J„2B—Ä9ÙMI‹!6/0­ÀŠX, -r•ˆeÄ:N&§œŠ5ZG…’"”—½Ê uœHQÎ@ -(ÉBslfÚ6Ï:cÆ9®É¡gà $ÏÓ~ ¤Å`ñÊ°䋌·Šó…ž YØslüÀèÒPà8 ùq , ù $ÔbÌþöïgÖ`°e K˜±ƒmÒD%‹Ñ³Ôx’A0žã’¸¢))i1Ä"A¬²"6‘D->aÄ:©0‹2å „PNè©$çæ,–t‹d€é0 ¡b rœ©¤Å`ÓrÎ :À|a¬Á`±Å+˼‰RD#8_ÇZ 1ºÖ`°H:V²Å`QJ;Ö`,Aø†RɃÍ(âÖ`°y:³†Å`as;g‹Á– íàð^ƒÁÖ¼kð&ʑ‡¬¾ƒÅ¬ì{Ùõi#EûZ€ºÞsâê@Zì]oXv½ŽeWÖ`ïzòëýXqu`-ö®7,»^Çf],0Æ´‹ k0Œ 3ֆµ,§ù0Öb°(¤s;Ö`°e皱ƒ…ö³÷ ±5³c &×73É“ë«™5Äõ•ÔµâzÁõŽ£BfTÒbr=e à 6§\dXƒÉõ k0S°¬Å`S6”ÎÊbrn6k0ت˜id1Œœ°‘U²Å`‘äáÜÀ F†ƒk0X,1«‘Å`9¡˜±ƒEU`-)îÃOè!îcÜç8·S•´˜ÜG•DXƒÅ¹p½ayyÉ9…ÃLÎ¥|iXƒÉ¹”nk1¹/¥½©ïµ,ŽpA` †¡8hÖb°ˆ=pŽµ˜\PÏ4âtKkIK'dd£¼Ã¿$Òb˜"a³Ö`1V…²âYÔtúÏ2žuœ1R%-†XÄ(x6°ƒEԁýk0XXS -¬Á°?ÊiØPY‹Á"YaÍ(+ê !P-ê0ê8.X,'%-&u¨B0¬Á`±³°$ÂXƒÁ¢>Ƅk0&ÌÏk1©C§ÌÀŠ:‰œ2EAÇ%•©’ӄk²` ÆK¹à ¬Å`±Ï ŽŽ•)ÅrF•)1SrœÛúJZŒ)!Ma5¬¸5°cJ()±Ø”卓Ôr¾å"€¦d ÄòÆ ¤Å`QRUpÉ¡¡"¶¢ÆŽëp$ ‚XÇ91JZ ±ÈXƒISr®a ‹É–5lCÛ*Œ¥B;A s.vDâë ;\ÊY:kúqtžóRˆ´oD@³¬˜vÓÎ1eó‰åGÛ óQR¦r~–_2¶uTÄä”3³Á™³QR„""‡1B‡c&£œ$”Âg Y(*mäñŸU¤c0¯8R& Èã3©R,u¿ö÷øÏ*Î1\•2&HݝÀ(/K ‡w;±%6\€à0ã:puk^k8%¥ÍÓ_kÍ\§«~%nÂÞ­J¯T?87aWaë?•ˆÄÍۍǹ£P~°(7‹_Þu튡V-üéýLϐOJ“{ññ–ºO«äP««©ßßÝUA­'³§(P8­P}8K²ƒ÷ËQgm§nÕ/÷ý8ÏÐ8Ð<òh>ó:5Í,ô!9¬¾·ÝfœþÍóÆÍIævP´i·[ؑ?·ßG¯ wœ<”*t±yë¤ØNH^²ÇN×½/èX]?‰@†Ùý÷‡ëÎUaÝÕ -Q¾¸ù¿PÊÕA)ñ -/Hè|œ‹ö·ƒ_z¸¨÷!ñq–ž{«ºj^à¡æ;ÜN¼•¶cŸa£wÝîv-å*aR—U¼Å5lݸ4`^óXD“Fܧ'ƒR§7YœþøñýùÏÿ¤!t#ðtôpös꜠:‹…8L͵¸8ý‰”@/[“lôóÐû“UéOzåû^¯ι³r=[¸4ì]óæÇ3vM(4¬˜Gþ³×M6›{Ñzš{æ]·ú¾åÃ,Z¡’ý¡nÅ;8Ÿ› ¸ù0µÃjrvFþÄ»öÙúëè‹v”l ÐA@ƒŒŸ÷† -Q܄Šã=¨ÇK‡°Ú{zÜßHWbvØ<=ûö‚ŠöSìÛ KS³ çã[o$ËÄ2Z’ò`[b÷͝ÿ¶]öÃ~ÜÝÐH¬”¤ñ;5þJõ† -§ßÃëqì N·“;¥$2ó\£Ÿ.x} [“©KLÁR½ç+?ójájÆîQRJe‚~ô½+áD­÷—í@¢Â%ñ P6fXyÑr®û·Ò-Ak¿‰½“ºx)Ö²E÷U;mI(–zRû.ºwC·”0›¿ª£‘{uøê%ôƾ\hN¯A3џÒZ.Šg¸ÅW™Ž¬K??]®èú±!pïªMÞÞ²€ñ8¿³€½õ³—œ‡ö—eõdìÏ[ۘêýóa”¤í9/½ñ2¾ªS”:ê\Âñ/ñ¥Ž:D²%C«õˆÓçK×µ_´~aӋN2ÜýÍò,-É´Öü¯dýÒT3W»F•¥[k}Ú¾šãÀm»&´„Ñ. YîóMÇÛ -%¬¦£|ÿܽ ñ&Õ&ä§nÚ¡«ðþé‡khOö²Âѕ÷]ãèv×I¾±ýå/ß ¼¾1ûü÷(jp|£sg½Kr´?oV#¯Œ&Gô;ÑæcÇëK#$“í„,ãÚú¸MÒºšz؊D’ý5‚­ÆÏÃz”öµeüʉ>“ö­m:¶øŽúk–ÕðM8:ÿ_ÞzTûe±éÎàªtž®ú -°£)Øj¨<6É+(ôqo·üs|fã^âËgä·Òÿö¯W‚½5ƒþ0b—ÅÏ;Þqø­žñ£u»ïvŽð푞:/OÏ_žó&Àµô¹d·o—¿²Óí^¼žÆ ?´ùím¿œÆÝxͲé›é‡è{ýSú²íÐwóÀ›nÝI𹏯‹ígéÒûÜzݯ]‹×ôš§Úk·è:Ióð¶Ýí°¶9`̈́H²¼i‡lo´Špþ篍$+Èê'G•¿…‘aL-o‘|Ÿ'ºº¾b÷Ùªá^½ Öjí»E(;Ë»CóúїÀAÏ…ìê>meyÓAUΝmŽœécßxMÏ꯱lÜLÅ_åJµÄ'Z÷î‹Nß4ÅËošš]Ø,²ìÁò¥±Ê«D‡e¾)îgïÓ‹p+ ®ÔluÑMŸz¹ÆßÛ %ùHÖí\ãz¸üzmgüíò€íîášêÿîáVŒb -²wݝ0·Ç -T‰šˆ^ß~äåI_)øî—zå~‡¯Dg=·â¯vXã‚žaφý4®nõêÆÇ ˜ÜéT9©*S àš`>ýﺡ›ZÎøƬ(}8é‡k.¯pý›Ôîá{ÿŸÿkÕèàê™{®Ô›îí|P` <¾¼–ņzðiÈ×®mŽZä~¥‚%Z7 ÎUøÐØ'ûnšÆIÔBtz€¬|tÚÿõa’qì¾s+…è1wÔ«=ʯfÕõ^Š{µsrçø=Ýz˃h©·Æe·c“ °æ_ñË ¯8}H4½œ·û協dûŸÈóNuj¼ü_÷ñ§IÈäY†¿ÒÉß¹âC‹Wo_¿ŠÎ§ñôa¢7ãòvƒ»ÑÖ__gT†PõZÅ }7ò©§ ú·Ëgö Rendstream -endobj -1382 0 obj<>/XObject<<>>>>/Annots 287 0 R>>endobj -1383 0 obj<>stream -xÕXËnÛ0¼û+xLVøÅS‘GSôP müŽã$,+õ#@ÿ¾»KjIÇ@íÜ: ``8ÜÑ—ZQú9PB¿^ S‹I;•„þùñGDmü¶Â„J%0·ƒ¶Â¹ª.¸¶B)Y…‚,1°ÆU¾d l×ŽàEKÜ --Õkj„ Ð@º®a€‘Ĕz¡™ä…µ} ˜8¥šJ‹šÉxE*ˁr`â‹Ùd¡ 5ˆµ8Æ2•/ÎD²Äèc;ԑlc@¼—%e—d˜,1Ë2e¡¸®1=Y6qI†É³,³QÖÕ´êQ–@–M\’a²Ä,Ël”µ†je dÙÄ%&K̲ÌFY#‹’Ȳ‰K2L–˜e™²Ê%#e—d˜,1Ë2e¥)JF Ë&.É0Yb–e–dm¹d°lÏE™L–¸—Íl”õ>– ÷™%@²b ‚9™,1°ÚAu2ek¼G`ߒ,›¸$Ãd‰Y–Yºé­ÃޓºE(Km¦çƒ½'ÞT&n¯½†ôɲSm¯!ón Yº{ö²§gˆî‚Ý -¹Ã ¹wc(>P÷V¨~7†üaò§gˆúÔî–k3Ô¼Cá0Ct6:©ç¥Æ»[!ø„€‹ßþüd¥¶¯tåNâÙª’/ß>/XObject<<>>>>>>endobj -1385 0 obj<>stream +1122 0 obj<>/XObject<<>>>>/Annots 56 0 R>>endobj +1123 0 obj<>stream +xÍ[ÛrÛ8}ÏW°æeg«ÖŠx©}ÙJìMÖ5“ËÄJe_i™¶9‘H¯.Éäï÷œÐhÅòLª˞©Jtx »Ñh4Ìÿž¤Éÿ§I•%ù$™/ŸŒGc<Ñ?Þ½ä“dRLñç2ɧ£ÊƒEröÄÀeRMv8—IZ¦£Ò6œ°Ó¼Õè´*G©ìÔ@4g£©!E˜ñtT ]1&%€íH•u.rVú[zT„F¤t¯‘2ƒ±u$¥Çr2š`°rŠÁJ:X>e ²Œ­2ËÙL9—É„=GÎÀeRW°Iä „˜©¦ZLSg0ulšÓÔeJ‹@‹šC + ¨b +ÌFä \&Ó ûÔvbÀ¬å†t”2· +à€è4@t:æT(g :…v0€’ÒiWd.rpˆŠQ§†ƒQ¤á28Nlh1‡¤«EÖ YUâk“²8¤˜+úaä D§ðß±!-‹~vXƒÁÖü+vìÂ+tº²à Äb&«Î@ +TSmh1ØlBÓFÖ`°EMûEÖ`Š;ÝiëÄŧãUc¸C!@ü BñuA9øz€è4Í1呴,¦,·¬Á`'ô¡Ø&CÇy%ŽY×H2Ð Þ$ÉAvÝäMˆE@×LÇ\)ISƒÁ"¯¼+¬Á`aÌwd æ°âæ‘5, Œi¬ÁˆP˜tØIY75i*®QàID15-¨œX¾Ò§rBœŒ&6´˜ÂÒ) k0X¸=¦F;¶˜ª0€GÖb°˜P(ªmEѢɒ¡f¨¢sûL$-¦:%z0¬Á` Ò°ƒÅ9‰B¡ò¬‰ig „Ų+ i1X |±['&™æÆÅñœ_9Ñ)< D>Â^ØÐb°²P k0â Ö`XObHd¸ÈHéšN\Q\Ï9ù”3PÅUҋë[zq#ëÄ ¬/²£g„((£¬§cYtàTÅEj ŽSø_$-+›‡a ¦:%­¯[ iTeYƒÁʜŶN`$2Œ›NBQ`Ïy•´˜3d‚”9‡0¬Ä>à )L¡mH™;•4e*€"ˆóCä D§H$`#mh1X¨m·nH$RuY{Hˆ"DC·Ö”d8¬Ýy©{å~³UDR=("ƒÅ#įšK{¶‰aÖÊHHŽÆÖfR3žÜ#!#·Lå ‡3ʎø +‘â\`ÄcMÜÙ6ÏùM„A`•$œÇ.ùMîV1_P&"L(rÊDµPBу-ٝT™þ¹¡ՙÐN„e%•s!«€ž‘ä7™ˆ¼€Êˆ€¾“H)! režÛüP‚C(çÉ+pºù2íDx9 Â¥(¼üVá=#â*œ­„g(ó|öäé àq2»t¢ÐXÉìBʘx<ÿy֜/Úd¸LŽ‡~Óö›õßg¿£ÖUÊVG¢I™elöóÙ³Wϟñ äUÆ +)&oWÃïí|#ÏášÅÔ??æÛ%úl6ÝГeá,wäèaþKz ^½”qöIKöµ~i:ñzÌÚfÉvØëºxPùo[Ík'lœa¶˜cjž¯7«ÆO ‚WùȄ¿­Ž<Éhí£\V]NGâB£qüëeÛ·«fÁÇ(xOr?5Iׯ7Íb¡n‡\3Ï«G¦úDtDm"ÎÖi¿Y ÛyX.eýÈdþzº*Ñbê$ýgøÌgYæ$O6!6—iê~rêf‡Ïq6®ÆáyÓ_HÓñ¨¨CóY»–°‚­!v A!µ¨½3|-ځpM‘Ÿ¾¸+ž¼k§N¤c¿ø’Íu+FA=y]6 ±•MôÙMsÕJ8F…ªD¼’`{ ½îF4>ª1ç!h>ßv‹‹®¿’­£¨{}ÞõͪszqOǺtZ!Ó7›ÁÌÏî›tîVdîpî ÓÙ-o†Õ¦éÅQqr(5>­7퍼£þÄo&wöŒW%£çñªm6â’Ȫ°©ïóÒõòœú0ã®ý¼%ó¡¿ì®¶+¶¨S¹’ËnÑJÜÆa¡*`ïŸRà#H1aê²!®¤5ҕ°¿ ە¨gƒSqíV—aÒ©B­B#Ûçnsí;ÈÇÁ„°›f% ¾N°¼ xebLp¶iV›°j™—… ½câ]CM@gÞlØ0n½ýòܽˆõpËkŒŠ£ô;5¾\ .¿ÃQÍ$íæbÄé產¾XUŸ¹Ò1e8BÚQèÙbÓ®z,¼Oí?ù¯·‹0HâüJ;—¬w§àˆ!"%l2;{tÃîpç Ö¸hÚ¥ËáyÙp(C½Q´0ž;[}¡xÈÜ5OÝZ5˜ÉŸF±ëfå7 ¼š{e’æSÓ-xbç¸},BúïôÆn§!o¤X·«O­ 8 –÷º_§’õ±i=|ŸeàÁ=g~¥#Äà¼?^íÉN¶}÷­‚4,¶ù¢ÃÙNc?9”K¸%áõOËÂÄô=nñ'Êï]ô·üþäÍÙ?DEgɇËWò +¡Èƒ£}èúéúX÷<~=sñ €¦xœ}¼ýö›³§™<ÅFŸíf­E +c³à–ÆþX’aÇ !㮿½år”ŒínðáºqSiG8•ÐÇOjª0èìŽ$ñיÑN†þoÁªÐVÿE±‘æ—•þ¤î,Éo9L9隫~X‡EUd‹ˆKÑwzڼˠ÷û܋²¡]çgóáÆ%l¦"‘œž¸@ŽjSˆí÷+Ü·÷îÕ@fîøzÐ9@ÀEÅ6œ÷Ä ™6Ã|XСpÚ×yI~m?µò”WVa…}»hßýfð0«ÙÛUׇË0Q†5±7ê¼}ú_Y'v;ғs\e·¢Óq ÁÓѤÉéÛcö†ËCÍÒ¿[É¿ê Í9$ª…üÂNÓì_‡ùǘbÂ@ãk”ñróbÂÈýª¹¹ rÛBç{ìñ}³tÉ"¨õLýéÄ·åZÜ÷S“P<]Þ¬†O­ää¼#׍é|5|ñH~íuRˆ`6ˆ’¯K×Íò\|1_ó¥ƒê¹3XZÒ×lÑm6<¾Aö©k¥{äº# nC³Õ¨;àƒ£É#¨ï:ø­‰qÊçvÆP8 Yx²ÞÞ°!Ä&úa"cщD~¡ÇÖÛx Sœ­ŠˆñÜ{EÜ¢«†HׇÅ6”E¹‹„íú@òÞ=Œ×Wkß2UÍ|5¬]údcýz{Þ·îꅑ(÷‰»G½_&uµi|…d''”vñiK¸I._¡Ü)™q‡kÅÄé(S‹²­–™vÖ¾lÒêçgd|{§I'ñýÞ=ƽR\§Y œµÝÔq]ªéÊÖUùÌñÖNýáôõ™èn‹H;'ƾ¡H}Í_!ØPúí*ï„'[Õ %Æ¡ÛæyóïÞ¼KñÓǃäq™/«à’×,Þ©|òæÕ³Ó×ԗWýa™Üï½g®| ߈Í_ «yH{†BŒMtÛØ)îIPÏ]M×Z8ÚWM\6¨ŒK¥ßQ… d;ÈßÁø Èèÿª±Ùê_©¿çŒr1,ç…ŒjG]½Û:ˆž$ó'`ü‹£ëëÁ—üm8o·­;ÆãÎC#1Bts1ǜ‰³â_SàÎÒ%†ÍŶæµÏ‡yX~ˆ+óg¯&s»Øt7®šÇ¯½¦a:p2kW—Í\¥~ˆCãþÙwšØt &-dó¿m»¹ÛqQ²„äX÷[uáIN!{|Q ¢;a'T +’§|%Õ°·ÞÑ-‹:W«ÁmyøÎ)vpgÏWÛîÂU+ðzþýw@YAQMþŸÙë¤[Ï·ëµÿâ„uûGxìĪ%Žœ|z`Æ“ºáVIw@|›#ì¡e_Pýé*ônMó^¼ eíg}?lûyû“Ì/ÊÚE¸™Â­β>#©NÀÜì÷kóÔë-ÿ€Ë„£{P\üQ̉¯ªtƒMξôs±¾Ìò»lQƈþ#fr†=ÂGȱZò6©$/kC ø‘¢}__N±§/jÿ…¾E嚟È×òá ²ðÅXrë ±œª\ÎÕxʘ:zí¿gO~{ò'sGendstream +endobj +1124 0 obj<>/XObject<<>>>>/Annots 98 0 R>>endobj +1125 0 obj<>stream +xÕ[ÛnG}÷W ò°p$s®œÙ—…,Û/lÙ±´ðK€El&$Gá%‰ÿ~Ï©î®*JôE¶e#»@ Ã3Ý]U]]]U3þý^žðÿ<YÙdÓŽÑá¿è^ý›¿dMÕΉ¬hÇ̳Ó{.²º=¬çà"ëªÃÜq.²¼ÊkGzLv|XÁŽ›ÃγCÚ²Þë1u)®)cx‘•y¾#rÙÐ ˜°…` ¨*€fpp‘+`ãài ºRAÛê@iùk¬Ã´HçÔ>³°×èmëO§“Åù„ë1Êæã0ùW2ÀÍiŠ–K¹c“Ëí¯‡æér³.¶S•­«èƒ7'û~¿5peC:~q5¬6“¥Ä($`e›üòd؄3‚0g'ïè|؆x†¢'´Ó~º]Í6ïdKpQŽ¢[|Ke£z9êa¯ßÑÅPnò&¨‚îhW&Ÿ.)/zöNŸ?äoˆaºñ®kârQ?ü6êE†á¶qw;ŖÃò g¬—Ó‡4¢-âÉɮⱠ!÷Q:°w¤aR©kÍÏÞ¦;Õ[ 돈&#Ç«4^‹EŒ9ˆ#¼Ïåb½#y?8mPÆGLdétÁ2Ÿ>=ŒŽVêµ~öî*]u›¶aCΖëÍd>ŸhlÁE–®æJõÍÈ2î‰÷7tOUúzPŒ7á7“ëv •…hQÃ!“ÿ]Çk¢Mؾ{îôí$¤>|Q®®ëB"nÊQž2yÿG/ Ú$¨_£§ÿrÿrInДþ@€?ú•JdÒe•^wnÖ=·¤ÜˆÆI¤‹a1™-Cš‘šÏO{öÛ¶,ņ^¤;Gøiø“?)+؄ÓG]dݗ³7Û`DæFšªÙE÷ŽšØMÄ$h=Ö)Ne×u=9«dUôvô™—«Ùb²’K +ߨ•‰Yø4÷IŸf)°æóàJo„ýÚú¯eÍÅ\>Q °ñwÖËU¿êßÎÖ³ \Ùu•‚Ä«~r+Üß媽©jPé*E=œL¥J ¹aH<¾[˜¾)tø%Š~--J.-ÍnØ8ŀM¼©ÐLКÆïÃôWs-l•=¼ëZ¨ÁÔµß'äWø½ ¥ +ÚÌvç¯zÜ,¡ ÅW:­æ~ÏC‰$‡¾Y&ÕÏVÛµÄfHzM§Ã6Vͨ´X …27FK*«ôþ3̖iI¨ç³Tyóµ…æú/ìòÜ·ÎÔ¨+F1„ÞÚnå˜:ð—k¡âÙNBŠp4= æ %ªFó=ùXÝëò®nϨ/ÛÜNß^,`äƒ'ów?Ðø¦Q³4:è4w®5ú;uÌÔo½‹{”RÆ°‹æƒ”÷G|ÉÙ¥ÛrŸ“¥EØäÑûèö.Ê^Ð]mé>åËXC ý嶙I´î£Õò/WÚa‹P à]™&­ûŽóãÕj) +ÊDÍÜ÷Ép‡¿%õЌÓÂöôÝzÓ/¸Wh(Û¶¾æ³é,Tƒy–|ïS–¸œÍãÃVé€ß¡*I\â§Þy_¿„pŒFt‘ÒÆ®rIß³{ÛÏ¥[ˆw vAMC+‡™¤&¨OåÄ»$ìM¿ù—ø<¾@é>7°¾G¯[ý\ÅRŸI8/v‘¯Sq$­\äoâHžµAólΡ}Æ÷u +»¿<,3àkÐoØÔ¨$y=À›:ó甑hìEÒ8.R/ã)êÄUhA­ÿI‰ñ Ž®á“~ƒ¦›´¬Ñe·ÛüÙðfX†ò_†ÜY ]I¾{ ºº}û…Nû¦->Wýpß~5L1Û@sk¤¥¶w(ÔówŽ»Ôð_’­V±7Ü6¶‰^*µÀnuHùp-ÑʵDø%¶>•ÖŸPMƒiðݧfŸŸP÷±ä^€Û<å­f—ÕxèêZŸPO¿DÅ:=O8áGjVÍùoö²L8^H©ý˜ÑkéX¸*²Ä·ôï*2¨ô·¬"£èתȽ×óï(%f—1Ù)¤‰nfJ32ç{ŽslMì¼G 霏€ûòX¼’ä… ·:Z!íè«&Úâ¹Ñ øÊ¢_:ö8Zi^ ñ%J =B7 Á÷h„¦²—›æbÙ%^ó1ŽhiI: ïpa­­³ môð]lº§Úç æÀËÔ6>v?¯c[ìZÝñúm^úׄ³ÐÙBJoª}û÷òѱhŒ¢!˾¿è/D„èŸ&ãW{**‹¯mۏc’‰ŒDó»g|¿ä<¼`Á›z7\ÁEx¤uúJú£GE,Ãó‰>ú%×úÇL•,àßmìw|¹|Ý+ì‰÷:|9€/}­×r3Źa¡ý¶}øèXLÀʵþY|²Ëµ÷sŸišU…:nú£ ¢Ez½ï¼¼ÿ=Ë;1 >¬ïîüM2Ú¸Üt—ñÃUt)3ò{gEë'$>GNcHÐÈæâkg‹~qêCØ­‡WµñÕ×ûàøÎÍ¢+¼ùJÉ;þÝ5^΄zfßKÃ|ÞmòS‘Qzßp…Œ0½þe ФÀ¿¯|ԟÏB´b²Ž}̏ùÏçƒ r|ŸG/Àu%Ÿá|Ý_õ?…nÂwÕM©+J:3[Òڏ³“¯Maÿó-ÿ5GÆ]Ä+u¿‰(RC°Æ©ï¾¶¡7ãóýfúà·Õy}ˆlD¾J@ÇU_E}MQo1W-õëƒ'øþT¾ãG¨-¾?”é‚oÅNž?<ÊP3ÿÚO7HU§Ûøš£•è°ŒJdãQÇOËf3néã³{?ßû?!4 endstream +endobj +1126 0 obj<>/XObject<<>>>>/Annots 140 0 R>>endobj +1127 0 obj<>stream +xÍ[]wÇ}çWÌ£ó e¾gö!'L“²cä8¯«ÕÑî(ûö¿Ï½Õ_wÅ*`@Âö9†»wº»ªºººªfüßGE–ãß"ëʬj³åêQ>ËñKüÏOÿà/Y[ÏñßUV•³ÚƒëìÕ#«¬®gs᮲¦š•Â \e]w0Nà*+ŠvVÈ@Å`›>ÊfⴄU3ë!j[Ï:È \e}Î%íAr1iÙPÖH*ۖlSsɲœµXržsIœV 5™S“HV&k>‡=a3Ì9g?®È»Y“µ‘TŒ%«Š»Y[²™·Pæá†:`æIz³J8œ´…yÓ@7i_a6LZÀNJÏišÖlc®â)Þsgžƙ«$N LÓr9[€s +¤½iÓD*‹AÐ"uZÔ´´èñGcÀL“ <§€Á'fë¹b'fë°ý‰TLqè +;/Ç +^eeÞÃÀi¬S¥ÊÝ.7ɀ©’ T©9.r±d9§ž‘TLqkÌ.¬`ŠkÛÇ:ŠÎ<¤é¨¨ +$v§3'N „eHœ@,XTÔ2Nª,N2ôL¬`°#“°‚Áöfù4V0,à¤3ÓÝkz†‚‚‹:@=â´Ï!nâb\Éã™H›±‹GÖ=h€s·b°³cQ0³R)qJ³'Ë!*…'MNÁ`ہ U ¶ï±¶°‚aœ’‘1±æ5~¤u:z§\ÕqE9á%×4@N Å-q⩬[2U ¶*¸%‰ Ħ$V°;cP&²Xàv€RTîI"ƒÅõÞ++lK?‘±‚Áâ¨Ì,,.žƒ±‚áE¸Òt¬b°Ð ‘uƒEjq0V0“bzE’Y1XÜNYÁ`çsl«ŒŒÄÎx0³m,B°)pVK¶ "ê0½Iœ@˜©ªi¦8P17€7¿°‚¹Œj +†™\T$Å܀â`¬b°p,˜8J¥,¢©*¤FÄ9‡ãXÅ`‘å©ÌŠabœ«VƺãQͱœ?ç¥;WæמëùHâ:cÏã@š8`°³Ä +æðŠ±‚Á"ÿ‡™ÒXÁ0¢ T¬b°v—$Ö©Š„ÃBˆù°S5A,Š« âGR1YÆe‹; +"¥±‚©NNu+,*‰ƒ±‚¡ ¼-ŽULSØH¬`°–EÉXÁð̌½cƒEš…YgFDYf/ðSx“šQ ÔAÆ7¤b°¸~ lbƒ…Œ up´°q¬b°ˆð¨Èº@ž» +ù*F ÀL*™ÓûË{ã)ÈÇK<’85g.•HÅ`‘¥ÕÊ +kW«Œ §¬Ô±‚i…êP`Á`‘52V1ue"Ö5­KæaècÀÎF‚Øp›5r!®•i b°È®±dª˜Ê0Ø$V1غÉV0UMÚÎ ¦ªtC+˜±”Ulb3–Òͅå…T`qëbð¸ªåCM yíAr̈́°Cä`Âa¤‚nšHÅ`1(<ËiÓÀÌøe¬`²æKqYÅ0’—4V1ؒ=«Ä:oA·ŒÔŒo€29çñœµRx”9a“FÒM +7°ŒÓ&5&õœ›%r1)Î"ìIÅ`‘Sc[+ØÙ»Y tl1Å«ÑȼÕs̃†HÚÀ¹+ýŠ”™ýÝ „±k0R¦>\“ž…¸_°õR›Õ¢~9Nu¤‚CµX — cšÆ%½Íç"g‚Àa¹·X>þÒ'DAx"%ê<´Ã0à–”KŒ>e— ]9àЭí…Kw[®œ)׸rÔÔ±¿Gå<㴉”À \âL×0δI\‚A¹Ä™r~\‰­B’bQP·»~Kb›~ž{zöèñwHòìì;Ž”ÍÒ®ÎÎ.¬ÃŸ—ßœ-ί‡lºÌ¾Ö»a½ÛþåìWŒÂMQpԉvRrØ7¯«óŸ@b^Í´Îñc¶°A¹)çá'>„ ¤·Ö +*͓óN»Á¹X:°·FýI ^òI#”'Ÿ±NÏjÛ½J¢ÚCR˜ªöõk¨é)³Î'OõŸÓ¸ŽzÂ-#¼"ÿò®zzƹÐû¯ã!}¦!;ÅØ£ž®WEôò —½ÍŠ†EûP‘Ë儵¶Ù(âMŠM‹õ…ɇ26â—q}1½³ãÀWsѨs>¬—š³{ížö!o•fNiìÆ=¹ú݄DÑӇ­M@¤yy®Ãݕÿš×áŠ>vþêÄUÓÅ«swµ0wAfœvv;,÷›qg‹±CÐùíÍþÊåÿ›°º õãÏH#Ú¯v¿çÅGâD‰¦™ŠçϟÏ(^U5Ñ*?ÜìÆi½¸&½GßÚŽå´¾_ï7 òdÙ¥šœ/Ök +t‚FC +ƒÏ×»Ít±_q!É°?Ó_[‹'2rh0¼¦½Ý5‹B½r¿/_ÙΡ  ž«g¯cÃ9ÌÖÃîÝ´yã(òÄxÈc ÓxcŠÒ¸Ú=Ú©­¨‡†oxbÌŸ¼Ö.ûöŠß£(Ÿ:µSᤪ’ܧ‹•KՑ3µ!úiØN×ûèŽèÂÁ]]‚ëŠô\SÚdZw“oö7'.”—~^¿=~1®÷¿ÑŒ¬ºãAƦ_[dÇ×-óþ~óHo‚¢Ï“ »åã«iëê+¤ ¡ úT;ùqaçL¶èt&ø†›õvÆ GËâ˄pо¼lÆ֒´'ѡдv¹ñûÍ~/O{‘!Ñ¡¼ëíAhyeîRý|/‚|ä¤^Þ[ÏÑCm~5Þ8/-¼±ˆéÓ~;¸©e ðo + ORÄÌxÍM4ÂkVæ#|¸&P T_ ýÿ¤¬$Á:ó]¼˜BŅ°Óa÷ôùv+i‘—E«¡S„Pøíbé¦`åÛ?H6tkë[߂À›¬(öâå÷?¼:3Åâëåè:ȞbÔ¾µÈÃÁÖÕèøHJ´‰rã.𢡄öŠÜÑ3NÐÿ·Rk¥ÜIãÊÙÐøzvj¶/C/åÅ4½q öÍ¿†ïÜ¡Cÿ°OòËs/?^­ÅÃ":à%_è*Þ1ïÃýì58lh}?½c@哪©ó ªCoNûå~m ÷–C˜ceæUœ:U»‰CR¡‹áæzrUŠ§Ð>ʶ;6rM6|¯ƒì±…0Iÿ8Þ:ô¡e‘Ý©Ê>(ˆ¾J*b~̺¿£žo]YZá‹'íDøŽw€adz»Bú¥åd噙¯ñ6LJßcZ¤yCag¦d¹Ÿ‡£•eÑí~9Y/“Uc¬x·Ã°º¶nÛñ*½ r¡†q5c¯¾Š]NõN*‰f?oM@tgÒ9ú—ä‘ÞŽoâë íªüƒ¦Ðb&ûz7.Sዷ ¢yìâ¢ðå{ê+mK˜›µ{ˆŠ/oœëC–:„öãûõ^%‘Þ7à#¼Ôã˜,ÓÅɋ×BvÄŸgò;ýZúŒxËu×Áúp( æ»<5^õXó"øxCñ63Oþ->Þ5üÜWû¡s6wÄ? ðò!lZ›&y¦«2죓]ZTü¸ Z„VöϧÏÿã|:ô?›Õˆ7E.¢ 'K¡ééèªM¾ÀŽ…°ø°µeðAÜÕf‰øÖ7¾×{²\úÀ†/pSl„Ñ_²6jÛtý¼}ŋ·µ]÷k°Îê>锔ˆz½ü{ޅF7^“ÅÖ籫a‰~æët§p,Îoù«Ðú»‰wÎ$ovüš<ö^òH¾;Œ‹ëéµ­«Wõ'4•½N*¼U+KgŽäoaLó<´ÁbÇ,¦Îú†àNœ"`§’3jOçxðÙ^-|«_eÝï Å/­4dÞåNG0½[›íÕh/.Q×ÍWï×µðYϧ«å2½/ÆÍ°ÜMËGññešþ· Þ +ßWÈáSþì\™ÎO­ÕÛ¿ E*²¦"Hšh8Îñ͏Ìøþê•àçÒr•=»eq|5ä“Þ÷©ê´ù{ +›ÀÔXRµéb¼ü=[|'ü";~”>Ãçðe~GMòž°ŸùCç(ü¿§DY¾³Ø,âK|k×ÆíŠ/ôó€c7*;Tkë•ÕxeûFÇãå2}ƒ<+Ùðj±}c!ýïøÁÌÍbƒÞçãã8Rö¿Ÿ=ú×£ÿÒ +ãÖendstream +endobj +1128 0 obj<>/XObject<<>>>>/Annots 186 0 R>>endobj +1129 0 obj<>stream +xÍ[ÛnÇ}çWÌC »šžû<´hÙ "…!i(@‡årH½»Cÿ>çTßjH +¢rI öLMw×­«ª«Ç¿˜$Å“ÔY’WÉ|yNS< þÈ'IU´ø{™”õ´t`‘œ(¸Lšrš+`ƙ4 ³p ÆËĔմQC5µ.§…¦*¼L2ÓNkEÕÔ*rÁu5^&y^ŽÖÍ+2)— F¶p¤‚µ˜VŠ¦ Ø5†‚Ë,h'Í2ŒAHƒŽ<¤rΈv`ÚBx(¾%§8PA Ì +j>5œ`ÚHUԚ†T»lrü õTЬN—IQ@;‘¦à2isHi +Rȸ'՘ܤ£¡Ø)Ý$N¬1¨Y=bIcP‹ :Rcµ®¡åH՗u›É¼DõU¥=¡=èDi"[žÂþÐ^;5I)@´!¦L¹\¤ÑïJS‹Ö[¡ qBKsa¥­¹œ€ÀJd¥5ßÒ„^³ÿ£JxGM½0l’qØwx骿ޭûÕ5ßãþ*stJ@JNßóÒHÝÖîÙÕ°æ38h|vÙo¶ëþb·í.eŽbZ§~<•÷!AQº9æàj=[,~''ê,̾œ­f×vTFeÖº³ÝöõóÙ¶VÆ´'O¿ù¿ºåoÞÁß­R2VP +"oFÙÏfˋßA@n‹Ì³± „É ÷Ì+ ÍB÷Íì<Ã+ᄙ[‰u4¶‰·Éá= WÕ JÓ¤Tþ„ûI±ïuŒ“{‡ô<Û¢f».܋³àd§{´Y^Lçðz.P -6û·Zc¬ûÅ=Y·Ø,YÁôOÃfë¶#âXðªDüɛì}?_›áJ6XÑLËÊSî˜%YØ+É»~щc#ë5ý¾ÙvK>ƊyéçÙ®;û.²T˜Üî?rï!IØ-8u´ØFOº šÌ*+îUÄDíÔÇ+„ŸÝœ‘Ab]ôêgØW|J+Ç$g¢ +qæðí„iœ2½aÿøÏ3²Éïx+ +Zêßûë ’GpXtÿŒ ÉÙîæfX[÷Äéû6ÚcÒwü«(¢}Ž‘©†Kë\|­Ä‘ü‰ýû1<~í+ÃÄrœë~hd‹îI7ç×û*ÝqŽÃ‚Úo×¹­HØcóž“üû†¾ö§ÿÐ(«¾ºÌ³¾àd¨q¨QBœuÛ J¾8HŽÖým·–MÆMûÇWVÈxµßA?ü Û+çxÔl6¯Éžó³à°Ð¸tø¬rN¡pj%d·ˆÚå4IH̒®Ðˆ•Òb¶¾¶éb{µ[^tRSŽRÏ ù‰»5¾”Û{™Q×à*oO¾ìÅFfÑ>¼¼ô¶ñ<~è>SCˆæ¥ñÇ[µ!ëÞö¢#ÔÒ¦õ%&ê\N0zö±_]ŸmnÃuTPȇsy%{xtxòQև!RW=¡K45'Ÿ ?¡ÌÿøJ™{יÍ´ ò r„́¨Üš½õ®^šF„c;IùÜGyœšìî;^Š/Z‹ ßä"Éù0,6d¼—œ>Þ]j¿¸‘ÃÎäNxúøi&|BÜ&óñ¦‘p“Jâeý+µƒÃZî7ø~…¯æE’j8æ»/¥ ·)*Ôèy6Ëc4¼Nfó_q +µÖE¾7{< 8Á OÅ*—|“nº5 ¥Âá5écî9‘^gS=(êxtÂANÕZÉÛEó¿ÈÔLï$ìQŠ¸”7ÑøhzÔÏ®WÃÆn T{ÊL‘­Güjí¡»=Øá^}ËO^ïŽcÜ(ß9ê.v××.óâÜËCW!¸}ž†2êf= '¶´;7ç®äz„Êžì•VŽü^–èý`vb»£¢èr hèQù3vrÌè„àÓ춓Pž!îb^Ȗ­œÙ'ì”*Ã}©"ÞÝÜK40ŸÉs´Šc«qö@N^æ ¬º¼m­Ñ(ÞS*ö‚ëùoÅȇ/´Ðæ±ÄÑì/Žç,óݪÕ=û»íí ÂžÞêOæ”ß>Q›“éIcby¼xhÓÌVö€“B,•è¶¾\8uÒt¯C„<ÙŠ>â+g½tèÎæëþF2.•ӉݻÒ&F©JÆo×ôÿ?¢-ÄV†·~j^ÞÎVs×d‡ÚљÒhSҗŠQt'‚v·Ón¶£ r9J ¸[ÙÓy8rú…_V}û‚‹*ZÃ7Ï~^õW½5Æèôü÷áÚµ3‘¢{]tÛÏ]'MmÜ2áÒÛy¤>"âj¦òÅq £ ¡¸t +‡­äçÇÿ¢RqKڄîïnãœ@Q+]à<Ê·Ñ´iÛ§q’¶ä„úB¦R]¸Ã †Ž¹ì6öL^S‰22¼cby !ä^‘õ:›ˆŽù;MÄ+¸[pñg›ÕNÖÃmiONh҇vÕHGûN¤;gö¡üY"4c~Þ¸F<>à~Uå{k{n¸ŠÖm‰Ÿ›–p³º£_°ÊÇaý«­ƒ°»_EÇԉ„ïdU^_g©‹¹ä´[âšDâba°¼ il· +’pî]É[#Eb|‚ð}°‡]ØIe°”XfKÛôėU•o žáˆÞÏ­Hº|ö¹ßÎ?‰¤h&®Þxx¹ç~ÚÚf>ÒÐ~w²Àً_Hð¥Ã·Ç8~„Îï{\¡,\Cß:ì͝w,‚n»#ø$(X䡃ŏëÁMFiñøˆ¢óþ3dÊÃÅbˆŸ&àHZåÎÒÏm$?뚗è:êZï´Ûì>ԅ3öÇü“/ôpaçíä'{©üTm ^ïê¶P¼ÞM2ÚýK/48÷æqcÕy« ƒøåbà•u\¬#;.§Ýo»~Ý-qh•°Z¾@e¬Ù€ZÛÜGAÃç]¼3ó'¶sú»M‚È,á[¸¯“p…â?ò 3ïý‡åÍ;|ü(%±{›ãÿw’xùMÒáûïd½_ºù69æ;$´Ks^–1T×iËÏHú[Æ©Îþyð?á }úendstream +endobj +1130 0 obj<>/XObject<<>>>>/Annots 226 0 R>>endobj +1131 0 obj<>stream +xÕZÉvÛFÝë+°ëô‚4 +3–žäö9rì˜r’-DB’`sì¿Ï½¯¦'µ:m«™IÎItqQ…÷êUÅŸ˜$Å¿&©³$¯’ùê$¦xþóþŸ$UÑâ¿«$/¦Ëdv¢à*©Í-NÁUbL>5j Æ`ËöÖPÁÖõmVa°m3ÍõÌ +¯’,k§™b5[ÖA7ª£1tMÍ­™óŠ/ç%„Y%M5­….˦•å «r\¿²­ æ̐abýrLi_$§ ´L«i¡H‘¥l8‹i™Xd)+.)ääÿ,ˆ\Y‰œUýJääsNHÁ–Ì©X…ÁVµŒcÆ¢›ôÖXi’‚Š†±VÑ"ÇÃU0¯8B|4«)p 5[4·Y…ÁÖ—>ŽUlÓL[Í*LuĆa¬XÛЯ¼µÈⲎ« õ œ‚«¤-¸B³kƒÐ ÖØ‚A‹6µ¥Í, GQ +¬=¯ ÛZ@JAYÖBqXe¡¼1Š,EiD?|o +ठ+b`JëDRc®8gˆ¬6g ; œV4¶òÐÙ# wÁ¢+ +bÚöåc°’I«fp3b =½“=; ˅sR´ùÇça\E§ÅD ¢ÃË.‡‡­“ûöìèÄ÷’[á‚èB^@¯}^Ø,»ùîÓ^ ¹)øœñfÜ.lr‚•êÊùã¸å»Ø +¶&wúõ|ûy³· ™ÌdžÙ¸idzb¥îÃßÖQ1-?0É°é‡AçWý~ïÍK´דù¸<¬$x°Ã*J<É¢Ûwœ‡Y1¨{¹Wò§ +¹sÕ󙁪­Oò{VyzNmU¥Ð~üÏ|òëÉ&4TÙ•3s¦þ¶FzølƤ\WU¸Ðýý2ŠÕâNFù°ë>Z¯ÁFâèrI´Y°A(^U*6ðÕk¶ïæ¿ûàYhŠ~>¹°(C;³‡eo“ º—æ1Â%*ó'áÄáMç”×ëýÂÏÙ$ñMô¾¹?q]:·*䊹«ÒVqvvuî²ÆŸHòÍ)§²£¸ZȒ¯Ù9-\7‹¬Ðø⠌Ä2è;’o.Ø×Nè)ۘê»Ãb"†ù8ÃÈK-†ÅßöóÏs[7ÐÈŸä^j.H½î±K薿ӝ¹Ÿ=:¹q¾HÙ&wš ŸŠp‡‚ýŸí¯•—£ÃV;®ënX†„–M ßõË]sÕo%mëL÷µ~üÀ÷½n&§«›¼€E.º]o³-6þÇTN¼ÌV¬ óõnÞIřéñ9탃#:’ê±pTÉzëÞè··ŽfÝê¢û‡­ppž¸ißõÛ'oºùÕ°âæ(<ÏÇÃÚ7ãqS?¬/Çí*Tt­mí÷‡vÈ~gÖ¥íšâ®'¯¼Óž½xúN¢ÇE¡e}1 ýìÇíg2èÛC!ûrÏč’]Ÿ°ÛËÑë‚ùî°ÝŒ;Ñ5wMø—OÿHo:-&0øæú£ÜìÙ忛çf‡ÍfÜú Nä2ï-ÁpÉ\hÖo¯û­ø*Žò´±~ôH‹û3Ɣt¨ Îh‹Ùüª_Éތ1æ÷'÷¶[ïû¥=Àº6œ±£`?òb%è˜Ü·•{úœï!)…½a–§rzƒ»RŸW¸õðI…,~Ú¾ÛJ=ù…Ȑ3u<Ý=ƒÀáyØÎKҡ踌a~3ì¯Dìí¼m“ûá!b>lŒ1ö'µZ¹·›~í%Cí. ²z_]”ß#Ÿэ:8ý"£à×4!m?lÙþÿQAzðë-´sc[¯Ðˆ†…¿oKój;66]àr)ìtVÝ›ÙNÏém¼ªyÌÆЉPÕ+ÃÌú9ŽëöRáp&_Uþè>½v¬Ù: Ëi~£q%Âeœàö&&B8½©CNßmúùÐ-­ApÏήºý~;\ön£{éPúÑOpvƒèðºV_&ÃoYþb%[)Õ̾üÔ­6n[„‹zܼØÎæìÅëSIeµ:y{‰-ù`uDùŠÇ’÷é(E¤Žy:ÑJsf\’ÿÕmŠ1ö¸Òà¾_ÇàóqÅà±1ˆû Ç ž/Ì,&sGqá¨Á5ºj‡ÿõö—ó·\G^Õúƒ1Õï¬Â@©?2å +i$\mìÆÃvîúÅiÖÆ +°‡¨À1å\bP´œM¨lÏž‰‹ R?Jð"@ù=u<‰ß[Đý{ô‘V‡»}¤_J4L­ÁÿbË{Z+ ­é¸•ëH^ x¡³}Óל•&¸cÖ1§´1Sü0Óå™èWñ€‹qÓËý.qÛô»’{mAtÚü +mæ׏¸11åwU%X9ÄQÈ-üU€Ê-Òv0Ôp¥ÎoºÍÆ]ò çàwk΄1¡Š—.‹„}—?p/f3~>/XObject<<>>>>/Annots 270 0 R>>endobj +1133 0 obj<>stream +xÕ[KsÛF¾ëWà»jIcðÆiK–×±ªâµÖ’W{ð¦@ 1 pAÒvö×ï×ÝóhJt¢d2»U‰>|œA¿¦§§ùbüßDe¥E4[žÄÓOü?ÞÿLO¢"«ñÏe”&Ó̂Ety¢à2ªói¡8—‘IòiªÈ´ IÓ|ZaÒ:› xRæ’³-£"ŸÖQÁ€81ilh 'eÒ¸†ˆË(¯H4PÁeTVÓ\q<.¯‹iBãè_x\€Wã}“qUʖÉÓi‰—àqb\ %'㊚•gÁr^N<®‚@ôCâddü)g@\à2ªb;p2.Kƒ]rá}–«Ø%p2.Å.dϜAg¹Ú~ž“q¦d» q XÎáøšŽ-«cVÏäÐ0a–¦–ÇÊL¤Œ‰b@K’ådJ—–â…ÆÉ—k&ðzàdÎ$/¤°XÆ Ìi [~+¢Œq +Bs²fàDXd–@’~iEö°ëO¿–£ãr2màäˆ(‡q–-‡0Pc°™eËꧥa³Á4x?GA 4~HÈáŽUF¹"e@„¬9½0péŸålӒþ%€Æ)ÈѤ9—ƒàh …q +’†Yƒß@“j ¶Œá~Å* ¶.±Ô«ð2J ³žYc°A«1Ø2èMRiŒ8àÔÆjL,å@ÍL1dvd֘؊ÂÈ[Cc°H8ÚƒE$h}5^F¤Ò¶ÊYAl!”vœ ‚c-'žôœ‚αc?Ûq֑žÔØ;6°âX7VX…áœ8§%ãYÁ&´ƒ)Var,­Å* ïAô‡™†MAŽõ¬Æ`ñ® ¬Â`æú½ƒÅ焱 +ƒ-‹Ý™†cM¶c q¬‘ŠV…¥°c„óx¥{NA¸Ç¤ôJOj 6­ÉLUlQí² +ƒE½C„± +“óh¿ ¬Æ`3Ú"«0؊èg֘\Kû‚«0L #Â~¬Æ`BZ*Á¦´c¨± +ƒå¢)°âD0Õ^²î„ug¹ŠÊÔs +²ë`ÏÁu’ë8 xRc°(6 l`‹Í}‡U&d󄱃Şû™5+ 5° +“s89Va2pN‰Í³¼—%(—¨C5™`<6a€0•Sª¢.ÉÉ~IPcRùŠ¤` 2ž4@LZîp +bR¬àJ Ԙ^ÉÂùi5‹ý;Õc†…°1@\?VÄ-¤jÆ/¡'WALÓþHÁ"²3Í* çˆä'Ö,ìYhVa¸$ýXu:R\q% H`I$ZÔ,ïŠU/EìC`?±¼ÙÉ/¶„;•Š˜©ºxRc‰X…I$ŽÏJx!<ðK9,g°%×¼_IìÊ@d^Aþ%ƒ0Ðr&¦­&ñ¤Æ'­ÈãU,Ž0o`&]¨Z,U¿¦’³DVbZ$‘‚X0 +cM ò3†Bhœp…4འ+"`-D/'ãðV²’*84NA»ê'ãR9¡à} DÀ¾ÏA”“q¨Ö(`yÝ<Ž2ƒ@Œ£r>p +òœÓC ;H~b%<©±óD*âÄr`âӌa@␗°ùñÁ›!ÿMN!Aª•=^eÈþžR¶Ø2p,ïç¬7º¦ô*fp’àåMç2þÛ38ÇP,äT8ðß,Õ XK¼P8¤éob°ï À…`ÈðŽyyuòâ5¸8ºš#£¢ÌA3¡Ì¢«î›àñìÙUóiÑFÃ<:úMÛoÖϯ~ŨšÒ¨‰6IhسËfù©¡_ y§uŽ† F«vœã²ég-q8"[®[¯·-O +±Ò²”ÇÓCþÏ$™(‰¸%« +ŠBjÒælX®š±[=Kviõ<¤ÌúÝVþ‰ˆæ¿fŸÛ i– Wf‰uÀ°ÚtV[il£'<ÜßN +™<øà}ÛÜ°"X“ˆY‰²u÷?/œÖ‹ìÈ\"tÚP#Bió¶ùÆÊàx^¤V™oËN\…œYâx¨%HêÉ=e~né1ÚdeB-YZÿ‹öK»`‘Ì’Zž>˜ð ¾£ÍÞ@›¯¬âÇÙ^×\Ý†WªÂ8³AmêÜFßA=qÿåÞ3YXÿ—‹]@ sSØ(;[tn¢Ý§ÊŽ,Îp>à“«¥¿W,¡N6—¿Œb{^âÅ´òÿfÛw=ç´Ô+(Îù྇…­CT1C§Zx‡nH\çÿžòBϦuérÙéjÕö7Ý7©YÐD,Ë£LhÓ)NZo8†h¥.†qÓ|êÝæ7¢q,=¶úå~<˜¤&I_¼öõj1Rɕdo.>ü‡~ÁÇä£ +1¥ŠÕbÂBzÑ/ÏÞ±ä8ŸùUó¡ï¤ PՍšèð:U2•’_ýó\|€ɑ­sm0':.ºt½ooÞ4\p¡%å/]¿Wàlä +—è}»ü46ýÍfr~NΣ[®ÂîBú]?ào“Ʋ4Ây =•ÂöÈ ¬ÜÑ šíì´±9쑍A±AHèÓ©ôð¶™uýfXßÑÏ24éüÙÇ*òw"èНV0V£ šJw—¬'ǹ“3Rû.gµõ¥›çþítÁé^/¸7¶€CÞs…Z4kzrÎo>¤"Y`Ó̸ƒÑlèçÝíväBAuìøÝå 6} á–ct݌+šY×TnG+£og²ÜÑ}òsÿè{ÖþÑã'Íè5èà¸ãhÃ큝ɸ3RN‹Ô–¦v!9ùœû"4KظŠ(]uË Y³ß TgóÍ[}Ð<¨ÑÓ{öùø¬䈋,äË+뚏ÏÿF?ÇÝm•8 ìuNÒüK¬ +oyÄ›¯Àê‘èÇ&SNìèU»ý¡Õ+ç·}ëʤüÒ ]÷ë@?•H¥ëÎÊŠeZ9ˆaJÝӦ炌ÚîEÑà“2‚ÚÕϑê™é}éë]Ë åkˆ›½Vûø̾ (ÜÓZ+}iÇ5ZAŸ“õ¨Ñí™Nb½Q׋ˆ¶ëÖµ`Âjy|Ìs$£•¹&Á>›>|歌vÿEöÍÀQÀ¥¢„Áƒdr+ý08ÇçÎh5b³ǯØ/À›±ƒhJˆÔÍðµ_ ҎÂނž·µæ×aüì?:Éì ³½NÚٜP•”¿»æÚÊ?qF#OûÂóºë!:ûméÐxÚ'Þ5T¹‡íŠNÍhôEVg;upÙ­ڇµtÿè}KpÑlÚµ$|}ç“ÌÕÙŋó Žr܆n[XošÙgv°^lóqXòC|Ûçû¶›Ãz˜óÜôÍÚßOj§4]*i­_µ‹Ö6u°`&ÓÕWé·¹½qÞ-l“ÝL ¿Ï4sèHa]5ë5‚—W76ؐfwMËFÆÂÀýåSkÌ;êä¾ÆØ!v +€P­_ϯÙQz«ÿ®2ÐåfÖ§)lô«æIþ@‘ˆ¸5Á#ª¶;k$zqê!-¢tYín6§9v* §¦¬gðñoåyÕ2Ü *Õ¾—h~ªó?Õ{ Wãé±ÿ£œê4ÁR{„IóLN”â¡ËvüÒÉe}oá·ø —`t.á¢ßÕOœBöéŽ{Rr€jÑG”`\ì}»BÃÈ.\þŠâåö–à Šû²`ß;ṳ̀ÜsU­#ò‡òêy¿‡›íŒîÀȸåuuä!åÞ}·Õb"Âù-üç¶odž=ná+ã +Ù®Ÿséƒï¿LeîNx@äuQNxÕ~Úr—•¾³ßI„á[\K?éû§M²ODS;öÞ%®¶ÚqFQ_=ñÆù'51iI?Á‡#Ê%§CwnÙã^؟Ò7RVc£òý çÚqÛûÆ?¾·ôuÉjfíš u˜â¾É©‹$¿“.šÍìNj¤ô‡ït™•]e뢙úU×ÜöÃÚú ¹ÿ½…]J¿ [9¹°Î²G­ý§êÖ?Zcçò§œª<¬%ðõ•ìNßëìýE²7kq?{Ÿâ×eøöÂî +Oÿ3kü‰¾®¼ÂiJÒØv½Iœäêv‚§PBs%|ùbè ¾ÇsÝT?Á1üácßôñGHôå`…ÿòŒ?ŸÃåäåéۗ§ÑÅ8üŠVfôj˜m—¸þn\!“Òù€*2®é#Œ/iû«“üçV\dendstream +endobj +1134 0 obj<>/XObject<<>>>>/Annots 283 0 R>>endobj +1135 0 obj<>stream +xݖËnÛ0E÷ú +.“…i’Ç´*ò¨»*ÐÖúÅUR–„Z²þ}‡‘ìÊÙUp¸suD͐ÒÌÿœA@“C_0Ê0~|±¢e…¿=Q‚ê Žd_d²'ÆPȼLö„sö˜kt¥ &C•´K‚¢%.i­‚°Kf²'%§"ó<'ì3.œ‰ žç¢ç9VQ9'<ÏEÏqªÒøa=/"·xŽKžçJp%u )'<ÏEÏsºJuQN$.xž‹žç”NuQN$.xž‹žç$¤º('<ÏEÏsÀ²º8‘¸à•÷]EÏsÜduq"qÁó\ô@#¡¸ºàM Ëeϋ½µ¿Ðz™ÄCˆÁ3ó±.¶»ŠFêWžE´‘¤þé^ îêæåؒñ•<ÃÜót_¿#¥ð¼[j°°ØÝs×¼ ãÔ oö2|wp÷ðåC‡üÏ'’bSÓ¿46@•K´=]Zwív'—uìŽ ƒë–ïW·ÓlI^ÒJŠ@ +Á¨p+º¦?•}¼ÐW²€›ÈB®: É>¶ê&²Ð7‘…Ywüc'ª¼‰,ܧlµ_ZéÁõ/-w_Žmj…GFw¢€Su¥cpwöVžÎ×Yû¹;m~ØÀA.­ÿWs ³àˆ[-}}>gC¦OÀIZjßðÿc{»³Ý•aBCqÄÅaJúeÿðõñ|;ïía&ÏãáÜãøÔÌÝ8Ø,Gl@6†Uvž¹t ®‹ïÅ_yŠŒúendstream +endobj +1136 0 obj<>/XObject<<>>>>>>endobj +1137 0 obj<>stream x…ŽA‚0 …ïûï¨g;æ˜Gˆz3Ѹ?@ÆH$"ÁÿoN^LÓ¤é{ïk_ŠARŒÜ sˆ"MpÙA[XŸËl¤Ç„f ió+”Aí/GBh„årPC8$›¸yײÀmÚ'œ†øîR?UÓsè·¡ýFÙ.Ñ]Ƃõš ©ê‹ójqÖéùÀ?®õ¤½·òxyƜƒº«•ã;Òendstream endobj -1386 0 obj<>/XObject<<>>>>/Annots 328 0 R>>endobj -1387 0 obj<>stream -x}™ËrÛHE÷úŠ -oFaCøöfF¶ÚnÅX¶èÐÆ„$X$À@Ëúû9™E ’’g¢#l_ÞÊwVeú?G±ð_즉N\¶9D~éÿøúù(Ž‡Ñčç“hà6.‰§ÑlÖîFÖ»ñ,᷍›N¢ÑôÔPl\<Ž£¡+NVŽ&#åFã(Ù¡ ܸù,Š-7’¥ãš›ˆ'¨Êqe.rºP8ñ%Ÿi1l2ïmˆ¨Åǀ8Œ¬Á°³i47ìlÝh8%bv(¤"Ul0¬¦Æ°‹Ù8šZYƒÅì@\î5{³ÉˆC©PÔÅÓaX²M<5X¥N=ëÇ1Ö špEªØ`1›ˆÙÀ ;™‰ÙÀ,fgmϪÙ!­ ”ˆy|<#JF–5v,õ1²ÓÚɀrÖbØр€띚´ãÁœù\,N%¢8°ÃNd÷Ö`XZ÷@³Á85md-—‡âro×»<};&’õ¬W<”á‚UªN°Š¼OK¢¤<†5–!s k°Ä#[ÏÈ,NÉæ -¬wŠÁä/.ê„"ãTÇz'k0fه(¬Á°óš ö™YÉ\‡akÔkö.s•Ó+‘Ï£"ãrÇzkpïr`½Ë¬w1°÷.÷ìÞå½lÂINýzÖ»¬Qa–HØ0Š¼ËÃ2óˆ6°ò'Èr` –€tÖ`X®s´M` & ÎF«Y]Žg2þå>:G½ ïrÀ°ã '˜a †¥ÿƖ5Xò(×Ò k1,cŸ·RoWìx*¯#3RQ¬H2– 8°ÃrÔŖ5Xr!5²Þìd°?ejĊÔì0`ÓCˆö¬žºñhªÍ:“ë’"éS¬âÜ–bE>š€a©¬Á°D95¬7Ê<Ó'âPò @ô²´ƒr™E°'-£òž1¬ÁbT. †5–w š &Áì ‚íY‹a9‹­]‹åò ó2ÈZ Ké¬fŸcÞIÚ1·ŠúP\=ûhđS é`â9i -\€’¤1• \€’"¹A.@‚Lħž3Ž…qà4ƝŠ› -‚›§~.ÀÎÍÀ©›œú¸¥Rr í9áô}¸ápzä4ž,þ>+!(!tœú¸ fäTå¸{ ÊDWÙCÄxhðùD* ¨”“+pÀÄC8}M.@¸¹|X\€>cãÀIÆöN=½œpD½7.~(ٔíä„›Ë> \€ìސ|êb7P.Ò2vzNÓÉqëOÖ æhÊxì!¡³9åK • PÒ¢™:N!"–íÅÛoHü[¤Bˆ+;ƒ§£ „Óú.@qD6^à$': -zÎ@8~f vö „›è츋£“OظÅßì&ә[¬ôS¿dǧ˦­Ó¬ýcñƒu¼õëÞ¡äï­Óœ‰Ë'Ÿ¸EôÝ/‡€tmº\ç×Ǫl©¸–ø`ŸtœG}¾Š²iiDÍ°hæyïh¹¿ª'iÛs¿Ê¥Tt‘ÓS7§N_¯Gâkž²-¤÷H†ôÃËNc®FîîX¯Šò^W~(Ê´.üÂw&QÜ;|ã +6ÛªnS¹ió틺ÅÑ(r뜍¯›Í’*—wÅý®öÍsW¬sí±Cc H<ÏTu/ád©Vý0ÓÇ®eå6­7þ÷îü9T8‰ÜM›Ömž°H[É?^y=Å<Ú¶î88^~¦ÅÚ´ôÞ5y͇g^á–rH‘Ó¾cweñËeë‚fxezþJì®®6œvgW7oÝíÝí=åü—þu¹Ð¿’Ç·îêæ$yëò6‹¢È(?tŠÿÿànå;¿ã ©ƝUå?Zw[ՏÿÔ l§Ñç›m]ýd¿-ë꩑0ŠÒéñ «ÓfWäâg‘?I¿w/bäYN£uښÝVè@«éµDzíº®ØBN̦Zïä$WO–Ñh½Î4««¦qÍnYæ~»,¥¹nòVK²Û’ÙÛóËNÅ®Œk¥oÂÚÞ9@îêë¿?½úvýÚ芝]]œž_¾J -ýò©ª3É°¦Wö7‡–ß²ì-m±ßh•‹ôÑ°»W•L6ùo%¤ü—›1]VŒ1 -”®2ÎLM’Û¼:xRԋݺ-¶ì>fX^ߥÙþL°Õ§LWÛu•=ê¹rÈ B›Næhå½î5 -ø÷®È9/¤x7Z¼PӓýïÒ¨÷uEáúbÜN kuaõ¬h²]#ãõEºù¶¹o "?nܛ¯ùFòrZ– Ø,—‘Y§ ù×;› ÜoE՝ÜÝ<—Ùÿ•&νaé»W~ќg•»¼Z¸îm*+ñ÷‰ïÇ13“ýØVÜ}dØ_ÜÈa°bgRòŒ ýª‚£ˆ¾$&@·{ÜU֮͌µ)Ãô—´¼`>ÈÁx¹p×iÓù4ۏ»w¢G? 3ðì}pÄw€ÙlÄ­Bïs.Žþ>ú/(Îendstream -endobj -1388 0 obj<>/XObject<<>>>>/Annots 380 0 R>>endobj -1389 0 obj<>stream -xš[o×…ßý+ÎSÑ>˜æýR (ä\±ãÆJÓ·‚"Gc^”á0¶þ}¿µg΢”F7Kkö}Ÿ}öŒôë‹Aêó¿Aš ÓhšV»ý^ŸŸtÿüøóyo’¦ói¯Ÿvi0žö†g´MÎäl؛‹MDév:ê œ5 »^²†wi8ê÷&›}š,zS™íÏ0? f ËlŸ§Œ5Œâþü’íË ‚£x4V8¤×à.'ÊJÇÜ¥ÅqãBÍh„²1È×Òip—f ï8ƒ„1œÊ`G:†%xu ;ôf.kXìB¹-š +A%¨cδ…±†aÑD‹¬a²;Œ4ul®éÞSMI(fEM ÃÎ'2Û±Y´?Í]È£$äd1B_ÖÛOµz[ ;à°±†aѱpÖ0ÁŽÔÀEÖ1ì|Лš÷£Ït÷8M…S†1Kµ¦Î–S³KÖ°êÓ§òE³cXº†€:»Ža“KYêž_‘u¬“£ój¬aØÉL©êì:†Å©ê؜*ŠŽÏ`¤†›Ê©*X©šÈla +U™-¬aÂÊBa³ÙÉ8·ãp@oM…YÃ(f¤àTa Ë)c cv ®-l6Kºb ÆúI 0kÅüœ¶)¬a9ýXX𤳅5,6ralÁ¸ÌÌ$Ë›]&}qÀ˜St\ œ©‚åÔè’5 Kf¨|‘5¬ /XÇ°dŸdt²Ù)ò¥A>ì낚’SŽÅFŒ-XŠÃla ÃNu;šfô2Cˆdt²ŽuH"…5¬C¢1f²†a©k뎙0«»;&EKÃü™#¥œâ roéŠ)œAjC’p§t ;˜©6…5 ;]ʆ]ÄÐ-²†I0mF];Ö±Š£›ÍXÃ*NœË"k– Ã#rL‚‡ã ͎a,m¾•FÇìƒÑ…Ïыcþ-7[FÍ7]ÇÆÍVØ,:çq7Û8D3ɏ>š¤q ÐkX%Ðì3Ö0,Çpì¬aE§Æ:V 4IŠfÇ*Á¥WŽa™:3—5œKà^åpÇÚp™~Ä©@®aر­±†s2P\dIF‹s2pª°1£2†],ºgîai -YÇ°tœ{•Š¥Åµã8P®_Á°Ã‰²\XðìCg Î5½MÖ0,‡bá¬a±š…&k˜€è —u¬dè*²1£ÆLqƒÙT’­Á]š/ÔÉg¥¹W8ƒ8ËBHö;AÇ°mõƆ]Œ/dsm¸éò‹Mœ@Q–VTµì8Z±°†¥¸¯ Ö°r¤²°ŽaÑD&:YÇ°s¨Â†Ëڞb„‹—;6\4Öpë²±ár+›],¬ãÖec#„N–ñ¶ˆ ošäUvy>$›˜å…`ÂÍ&.†]¼°Y4Úr ]u(D Îô’g¬a;†iÙ7ÍɁŽí7„äÁg—‘ÅxRõažâƒ&^‡™]ô[ (ža‰êkX™Ð1Ö0þöõúQXÇʄ^lŒ5 Ëw·ËՊ*J ø¸‘‘\ÎdÔŸ¸»‘ ”›±`X¾,Қ…5 ››¯°†ay« o…5ŒÇœ.âéXÇ°S-+ƆåÆuŸ# üY¦ (£PÇréÌqMKc°†ÖEc c– u ˦8qÖ0,ï° g + Ý}Å®c¶rc·›ÃeÉs~&³" Þ[L@q…kXn'ë6®&c Ãr¡Ì\Ö0l\Á&k–ÉC¸Å®aÂ%‚±ŽaGº×Š¬cX®+ÊÛivÌ["Z›åÊ1,k¸Û¥Õq’OùØkïÎH¢¹“ó æ`@-r -¦Ü9X-¬aXî¬Ö°j ©SXǪ>k–9;uÖ0ìLŸ”LÖ0y¤Öä±óÊ1,Õt»ŽaIœGä8¿©S¿N³ÞÜ[¬Œ/¼Êi¦µâÞäSŠEù¢Ö|žÔý…û$*€8ƒä8`!«>Z£Œ5 ˀ ÖN±c²È+$9îXÇ°¬Ód±°†UŸÁ…fÇ°üJÃí:V}¢9;Í9OÜ[1XN1(ÚѰòÖ0,£õBÖ°Ò:U4;†åÓ.wšã2_æ¨^Ç:ÎQ„Â`k –‹Þ5;†eßá¤YÃj8àÂæTÅ('Ü<-å“Ó³es½ -kX‰Ôý6(¬aX>KÒ…5Lªr2:Ö1,[g³°†U„¹YXðL1÷Ê1lž´l$ƒ‰“×µM€Ò5-o«…+P-££×q¡’ã—ßâ¥2@QÙr¡£p*yêÑÂHá|ÇÌÁOŠ\¸2=¿óvÆ凞UI¹[¸á¸Fƈ9v~íØê4(W܏®pÒâ|òÇ/r²+TäñY·ã -„‹õªÈˆ9¾NécüY§A8âá tÇGCè­\œ+F³~±pæ ±ñåºå"<¶þ¸*#¼%¼–‹x -W`^á"¼³\Ž§ã ¶á.Âkåør«¯8&_†*<-lgŽn^8zSo!ù˜ptyLjð -$„ȅ+.¾®@¸x“.\„_•;ΠB¿ðÅ \|&-rªzúxÓq¯¯_¼ú–a5H×·ú»„é|–®×ñ7 ýt½ú3²{é;©ëÓªÙö¹þåE?½¤?†<?„ß=êf¹oÒ»CSÓÕÍáÔ¤ÕêTošÇg£^º¾¯Òqwó°<?­ÓW‡Ýn¹_ëÁ—øÐ)ó†'ªt¸M›ý±Yn·ËÖþ€¢{nÚKß>¥æ€¦ýíæîTWéÃrw³LËcZ¦w×ãô¾Þì–õcúú°[nözŽ¶Ûª–ÑK]ü¾®êê×Óæ¸iªôcµ\oöwOÂà/3zéõrõñ®>œ²ï–jÓëœA85œ]ú]^^Ȏ‘­+BEðíru¿ÙWéº>›tµZa­!ªý:ýó°Ù둯¶›J?#~™Éž¹;‘C»ÝaOt‡›mµËJ¾©ëC}|ö4)ýðxlª]zØnVª*“ˆÞn¶U<éó¬—~¾_6é€ uº¯¶iµÜ§7é®jþþLý¼÷¤éöP§Ÿ7ûõáÓ1->¿zûd.M,úáí՛wÿýê‡w×?þð}¯ùܤ¿vbﮟ*ýSÎy¨ò"ãì¹a®VMn•òôðDýAãÑBïi©í㹂]ó¬-ח꿬‡Xðÿ ‡¸ Î9ýõ´Ünn£¿ã UÙ÷UóéPŒ\{ÞøhJå)En¿›Špþ_°O ÅF”3µ>PÉcÕ$R´¿ú~³?}NÓm¾ìlê#OB¾.òÜ_§#GAg=÷–ž;BÏj¼ÝÔ Sy{ÚÇݝgø}¾*×ÕÃöð˜8z\1Üù‰ìDORðÄB—šK÷i~ó¯+Û!êraº­P{%ê|«jÇÅr$eçê<Û5H†é»ÚâÖaŸûè¢>Tç§woþ“ÞWõnsÔCéõæ|]¶HsÊª´¤ï7Ç&”=х¶oªOJ¡.¿íx'&:ª‘~¬)Œò.òõf¹=܅bÏï¤Ýõóê“nÔ"…Ëí„=Þ/ëêIòy¥¥OZ·Bôði_ÕÇûÍÓ©¡OSO­ÓzSW«æÀ.d<7¢j֛ÛGE–Í|±,UÒ«—Ñuù<)9ôýU¯Ïch•GånyüȬ¯9:È<DÁðû}áå²iêÍ c7í–8¯Ð^^–ôSù˜ -îýÕÛ¸aÖtA]'¤KUÍÊùˆ¦=÷Ð:-OD±o6«n´¼úV_L´;kÿïÏy]œÇ^üáêíë+­K¿læÞê´C²“{©—==þrÖ_h¾ºÁ8ù’·cýyØ|̟ -CŒô“o®_üëÅÿ› ñendstream -endobj -1390 0 obj<>/XObject<<>>>>/Annots 432 0 R>>endobj -1391 0 obj<>stream -x}YËrÛÆÝë+fw“…`¼Kù!GUVì˜tœ-BÀ@KÊ×çœÓ •TªRut¦ß== úÿññ_`²ÐD©©v¾çã/óÿ¾~¼(bÏ7ižâÿ;„©—ÐÖ¬.4'^¡Y…Áf)Ö*ÎB/§â8¥¨ Q¬ð΄AìŊµ¢Iᥠ-’‚DTa°yì%šUl‘À¼’Uf£ŒN͚ょáY ³yÆhЪ‚;-©âd¤(Rc:$éžÕjló€`f–y9b°q6ûG—4›f §4›L¢Ó¬ðÎD°ƒ&˜Yëdy¡”®`&ѬÍRˆ&b– -œIH–D¬h&äs&­VŸ™$QRȤˆlÉQ’ÀXäÈܗÂAA$‰Ã¦ÞVa°yNÖZEæl ÌQ"ˆŠ%Ð$ajhŽJX@NAh Rz$'»±¯M92d± ‰ä¤&DRc°iۊU˜Í’Ðê,«1X$_k֘Í3gNVa°E¸°k!w‰H˜’çpfòÎA2@U‘_Ç* £~¸P¬1Ø Ç`r²ƒr:°N³”=Ší*!u¶€z„Ã~Á<ÉI Ga°QVs¬ÍDxX3¬¿‚(jILvéþ0¦¤ ’Ö!ß>ðœ€ƒCG“Äî5“3¿âcFBÎ<'«1Ø<‚kŠU,Ü_È*Œ–@ç£Ùf»sæ-íj áêˆ$Oaaׁã2†q¢9‰a¦Ÿ|‹‰7M^BÔÌǨ&"(ŒD¡£CÍ*Œ`Ž–µ.¡Ã¤t> ‰b…¡‡bÇ*l§Š¥¡#‹E´Ð¬Â`£·ÃiÖ¬,ŠU,rŒ4Î^iŒ -ȞæX.vY™AJ`œHÂU˜ ǖU¬Â0볓«1âÀv¬5‹þ–A ƒˆVÍ²ÃÌ2$Å* ëÆBVafJê7k¶fƒÃrq&„‚¬Y‡iVzʱ -C1ʅbά(ŠãbÆam‘(–{<³)_Å*Ì4f Vc°òH8YÁ‹\i¶NI; ©¿xb[[…ÁZ'«0“œ¡PJVaæ‚Ë—c5¦Ë̶b‹G©šíUácÐîԜ%128ƒÄ®Hw È)‘ph•“Ç1X,.ˆÆ± -ƒÅ 4«°U›e¬GÌXùä9̓E3jͶ<ña©“/$ñðj7ö+–WÀ"‰G¾fy9žVaăýo!«0|ÅemŠ±/ËW,Ë ‡¯¾#dŠ¥è3©1JfÖªõíÒ&ûO @ÔÊu8püàÅå˜I¡6ãXv¬dP¾7À% 8Ô*Tfw½@.º€™J¹$0 ~‚ ¥ ƒà÷Õ̉F yäg"æ Äðòã gkؤ¡¥n¬Ëzää3dæĚ,nÔh0T™bo×o®ÑtYßóǙ4ÏÌz#?Ìøf]ý„– <³*ww¥)ۍùruûóúÏ ß\ÊÇîzágÞ7ã44wû©Þ˜«ýôX·SS•SÓµçÇ#jÌ»®½oöƒœ2MkÆݝWᏔ¸Ä¯DÎ$~éÆ©iLin›jèÆî~Z½n¶µY½ŒS½3ÓPצk­ÛÔv¢ Ý´ðw_ÑÁñÜ^ ‡!Ààjß÷Ý0©‰™˜›vºÕ#jtb°žxË(ydy‘­ks³ëio4ë®ÛŽµX[„Kï›ò¡íÆæ‡Ô¨®öC3½˜mý£ÞʙEØÉkþj¸Pž¹í†ÚTÝ®ßÖSm6õX MÏ,™îތç&–uJ=ó­mî4Á§î©5wõôT×­ùÞ´›îi4¿®¥¾ýzó‡ÙÌ/˜;gùÅÒ♫;”©¬Îò‘Ò×Óäë`p<óý±œŽúQÐîGƒ€ÎʄŚíõ4ŸüÞ ½v If۔ۭmYއEŸ–?|xæS³k&K'3ij‹T؛²Ì'è/å8nîÌíËê·O¦ßî¹Q‹ÒbÃñÌÛ}³Ý ¡§N`ÿr]ø*L}“RôÛMX?O¦‡Õ§n،¦LÝVÃKϛ}üóY±gxæc=ɍi»ö²ê¶û]k6åTšû¡ÃD—Oåݶمûùå·ÿcþ_1æŒñÛX>¼¢½À՘:Ü.\eŽ±ÿ8YonËê±iksUUݾ0€î»a7£²5ŸÞ_}Á¥ê -ò/ô{á6žv8¾ún³º²Ñÿݟø%~ÙÑÂÛBS«zøQg]‚ߪp´z¬wv­mÿMo¦N2ûõúb?3p¦y>„tÚ X‡pëOÍô(œUk)® ÍÏ(÷öãÐíûÑìʹÞaȟÛ@Ïӈ7ddÒÿÕ#Ô^bûºjÊ-¬L‡wd4¨ÇBúüNâ³Ç3žKŽ+è¹¹60›Úʖ ésO±pãþî†U­Ë‹ÍÒüòùûú3Pã!Yc·*NÈMm~4¥y÷ûŠŠO$_yTw@5¯äï«£jQ²äuƒ\ßÅ¡LҎ¬÷=ÛXÜ: ÔÁþ¤‘[¸ÙŒãÞN¼…ƒò¦#ò¾šñøjåIÿÜo»ÊÂ%ÇÎSO¦“§á¬.p-ûµ.QýæïÓËÁeMùlž1Ïãà̄úèzs•R¶ü*æçüwÊO««Û·Wêâzš÷]µgåúRåe€_Ïyü2ó ž×/IŒŸìó<Æ?HˆyüÃúⷋ‚°ÿendstream -endobj -1392 0 obj<>/XObject<<>>>>/Annots 468 0 R>>endobj -1393 0 obj<>stream -xmWËrÛF¼ó+ææä@ÏpJQRd«ÊŠ‘ŽrÁ•›´¤¿OÏ,ˆ]>JUR5z{v¦wö¡ÿ&ùø ( )RTn'¾çãËøëéó$=ŸT¦ð{KAzñ€64Ÿ¸ly‘ÃizKƒÈËI ©ƒÁF)Y#MrO‰4gR‘Z irà‘Ís/!+H@†1“‚L³4öR‡5Ò(òB‘*&©Å,UÈͲFÂ:;« gÖ+Uª‘5R_›¢Œ$RcÖÌGn–i’GƦÿdfµÒ$=bñŒM2T#=°‰Âº&#k¤*lʽ€AFj1fUìˆe4ážH\A"u0'ìÑIJÏóÇ-)vßVÆ9 ¹B}6É &¥—’ *UF%ýÀÔ¤èDIÈbč4„e%nœeÎÎ0hŒ§ñ°¨l³A7²˜ Í0»Ã:xK!:8qX)5V”šñv4€ã:màt-éb°0ëˆu0§Äýàh 6Kà¡eqf ŽyûäV³”×ƲF%ƒý ç$H¤ÅÆ ºÐ²FŠIZ çRd¶˜Ë 9°e ‡}î˚À~6,ä>°ŠO¨xdEå‰éCÉÉ +Y,aFë`dœ§¨ËaÌ=ÁKkY3›ã±¬tL$½±¥\¡› àœˆIŒ’·i„å8L$_A–ÄÉ`ìçC>dJµø`¿eK8¶å^yCF‚Dê`–ò­aY#E²Ñ£ót˜õ€!U¼9,k¤8bäÀ‹ø–ˆ©Å<+Ÿ2ë`fù„sY‹ÁÂR¬ì`¬ ®x:²&)¸q"ÞՑ NJ.̇;Ÿ32H2v0f…kG¬ƒ9c>a­ƒÁâKVr -Óá>’e7ˆ§5¤âãã²Å¡ KÂ,±8à[:dIì é&À˜STã`čy”Ã:li¯“«;…Û„/ü’QYJ‹•¼b|Z”¿aÛ§Í×E«iÛ¬t÷ûâÇħ) !2Ÿyôµy¥þ¥7çlîÑsµÒ´©j#ž«ߣ']¬¨-ÞÎÕAy[õú@ŸªÃA½kõª*ûª©/‰àcÇ~ʓ«Oyvë|ˆúxÑÏuû«*5=åO -ÏëÆø'½ÃÂ`Éézÿ*óUŠߣûºo›Õ~ìÑ£Ìp‡{ôY׺-6TÕ/ÍiZ¸¾±Jz¹6ÚYÿ%\æÐmºm›öÂä:ëû¢\s®}Cµûš{•vmSêî‚]ýXôåzؽG…»­Š×ºé8ÄG³o©“èà™n¹ˆ“ñŒp{N±³®Ûow¼—ÏÒÁ›×£…îÎ7(®&ô__m6´.~Iyh‚åFwÒQWwÙpÈáágx ¥|Má›Ï®gôØ6?tÙÓmSî·8ŠÃQ2 ð:gÁ4õs?[v}[”=ãE–e1þ ‘ð—?“¿'ÿ½Ú,fendstream -endobj -1394 0 obj<>/XObject<<>>>>>>endobj -1395 0 obj<>stream +1138 0 obj<>/XObject<<>>>>/Annots 326 0 R>>endobj +1139 0 obj<>stream +x…YËrÛH¼ë+:|YM„Ÿs™•¬±G»ÖcD:tñA 6pñ°¬¿ßÌj »H+bb#FNfWuVuuU“û¿“ÐŒð¿ÐÌ"OMZœŒ‚>qÿyøt†q05“Å4™ÂDá,˜÷hg–\o&óŸf6 Æ= 5Ÿ±ãÂ٘v²ÒÙÅ´.L8 ¹R9ºOǍ'AÔR +f1BÅÅT8žŒDËdŠ?ÐNÁÂLÅNÊvÂçÂ9!§ t†sŠq†ƒˆB± +ƒErŠEÜ'ž!µØtŒ?ȦrSäI¹iL4«0Ø鈛Ê.tl7ÆÈ/Èт¤ ’ƒ¦L®g¦ãCÖ:C¤§08wH@¿ +rӈ›:Rc°cɾg榋DziŒ"…pl‘Æc˜âäBÍ* 6ž#ÿÊVaT<<NJÕlÄãñ¶VԜŎsÑR5)HIñ©1ØqŒX½©Æ`q®Ú±Æ`qÉFÚVa +Ž™('Ê +ž…RˆáhÆmÙ,z Ç0Ež<«0%/Y…)yÎm½­Â`Ñ]p>Žµ¢&s)ÔùŒÁ +zò†hGìHÁÆq0Ӭ”ÄÞ¢l汋`çYcf1b°žU,ÚÔ«0Øل%ãlm°ÒÙpy$:>؞c"ŽÔ˜á°›*Va°è?ÖÛ* v1ãéxVa;áé8Ö +F§áų‚xÁ=× t¤Æ2žU˜‚GÜÔ³ +[ÁÖ³<` +f+ö¬Æ`§ìAŠU,Z>ÎÎyÖ¸Àç1ÓèXÁ"å¨7Ï* wN{Ö¸ž¨mm’ѧ¤‘H¥ +`’"£17u¤Æ`ÑüǚU,¦,®·U˜IžR°ceÀÆ#Ö6†=g¡”¤ #i¾²’¤Æ”$9ô¬ÂV6u¬ä!ZDvf…cìj‘8V˜ÛNb¦ãŁ­u<㇠­#AÊñÀbäñg¦cÖ±b»`Ÿ÷¬ÝóÓN-ÎàHl+3Ùb˜NØ ða*Â"+™…ïXt»°GÂ*LɼšÊVa°s>F«0D¡ÅÍkEÍø@»W4À]„[<!БƒòÊ+Vaf‚¯BÏÚM1d†÷·íþ÷ó󗗗 a¤AU?cWQôîJ‡ýÎ쓧,0÷»,i2ÓdðÐIî¡¿:Úð[Vׯÿv.M…˜²]‘Õþ³à­c„ÚD#%›5#[8hîÿéö‹ù”•YìÌ}·Þå©ùœ#ÐõõôÓý篿¹„D¹Àï_yº8´#¡03l•—é®ã±¿äí³$À~Suušy%H³óÉCqù¬Ê³]ŽK¤bQqÃÉ«,o›­ä¸ß·9Úï‚öç`1Ôè‡ç úIC)ùü#†•«~Û`%'ë]Ƹ>Te‹*c?¸)ƒ‚ëÀå+/›Å)¦gü î„þU½°Ž¯í“àˆWŠlyqsyq¼ø!KpEX‡Hkã¸ê.»|·ÉË'Yt™—IÛ5g*7,dÈ1y±¯ê6A)7m¶?:¥u†;.~šbã,·ùSWÛ*Ùæ»l(¦!^QýŠƒë×.’ƒ=Læ©iß>© ûùÐd´Âe›Ôí¶ÇÅA^JüãHå +]`‡zukŸqåÑK~$ùΞTiDS“Õ¸¯´ÖûБ•lFHš«Â®Ìšt—ã€ßØPYlëª@C»º[¾7ÛÇ'ü7/?åÏíJþDßߛ»åyôÞdmÁÛ~ÙÀ®·h2Ҙ«ªüWk«úû¢YWÌu±¯«¸4ëºzi¨;/Ü{.Õ+ïò<{a½‹â¹|4ݞÕpàKÕÌ}]¡ð ô¾¦ÚuìÉ¢K­pž’´®šÆ4ݺÌìýP«–Y+©îöHÛãõí]m8™·—9¿ˆ&wÿýôp÷åþ(å÷ÐàêîæâúöXìǪN™9Iï:Š½W¸ +R&JÌMò]­ÅåÙTœ +¸„o,¾­pk’u…a³®«d“r`b¶!qÍ/×õ¦Ûµù×3&«·IÚ_V}ˆwyúÝ|œ.%§ÆExÞÎByª+$ÕQO]¾‘Ϋ}]åMÚ5œZÇ ù‚>n»µy÷ â¢,1³ÒŒS¨N07IÌF²f–¯eúv<þ£c¼ªÌíÝÊtPSTv®Û‰üõ4ĄAá·^—7KÞµ ®"ŵùµÑÝBµypkîjL3‰\'åsRÞ ²ÃÜ®Ì}Ò4/U½1–iýº—×ÎZæMµåuÙÖÕ¦“—ÌQ ¸¤}oeA4æB*b™á5’·ýxÁ/2^Îðÿ±žá‡i0ú6æ4ó1Þi˜<wøsuò÷Éÿ¤+öZendstream +endobj +1140 0 obj<>/XObject<<>>>>/Annots 378 0 R>>endobj +1141 0 obj<>stream +x¥Z]oÛH|÷¯˜§ÃîCJõqÀáà$»·>lœ\¬½½‡´DÛÜH¢–¢Öñ¿¿ªrº¤$@€C#¥b÷ô×ôôPúãb2ü…Ù8äÓ°Ú^d—>I>üãb6¾ÌÂt>Åßm˜Ï/‹lÂí…ÀmMF—!ƒ/.se³ËQ˜BùjóÉå¸T+p&—´É ܆Ŝ+&.§‘Óbq9…ÎbFÎånÃlŠGœC³"i¡ b:9>U v:¥WiQÅ Aqb’âm— ‘U ¾Í” v2?±Y1ØbÊÐ'«ƒ]'šc'S˜Š N‘Ÿ© ¢Ã-rI_'®Ž,k‰TÌ žŠ*f3䲂ÉÎ&aƒ]dL³‚DT¶°ŠÁB3ª0É*F‰Ž¬ž·EžCˎ®©!«Á4¹`EÇ´…¢F¢h$3:‘†¢^{x`Q‹pÇYÁMFgÃÙјaL¬b†bÌÜ&֌*¹m¬Ñh2"3J0–-Æ…°‚iÔ¥(¬`,;fqV1Ø ëBXÁ`±‰Od3{ÙɺŠÁbÝ©hV 6Ÿ!¾®b°X'6†jžÁ¸‹ÐÀdCC¨ÌP± +˜¡*!aÃ݌;ÞÙ¸ìtË1£g†lYÁPãæ¬`°ØmPì¬`°‹MNl\¶˜@ݸÀê…®*‚±’Ši«ÑEÓ¤ÝIŠ“Ê +‹c'Ùh0<¶í•qO†bœÓ¨É)+˜ËZœ\V0ӓs$V1ØÜ"•ØhԘ¡¥Å9½5dF Žþ RÂòԈ˜Šs&/±ŠÁŃ³‚ÁÎÍygs‹X0«˜[„gˆkV avYÛ1#*ìO˜Â½µ'Âþ„qÎN˜ÃYŠ(%96 +‰Ã”0@M (‘ŠÁZ V0ƒŸ1€.+/èfb3øÖ½œS3ØÈ00UfjF +áå ~Ò¬˜Áçl%¬` Wè js¬ÄŒ{îÚ)V²J ÖN5gMt‚‰ÐOµˆ(Iœ@ÜvÖ&È „VTÒ"8©,¶àHYÁ`çc¤Vd#ˆ9»ˆ³Š™€âDV1Xë@"+!ÆĨVEgñ·3ØdÀœuƒÇÜ®N*f(¦Hƒ°‚c(&ÊZwŠO3¬T‘ wF<…U vvjUt#·ë‚ûĀ¹ã‹bk!‰T Ö&aƒEw@Þ]V0X\-fÊ +&Ë(²‚Á¢ +¦Ê +f(xò¸¬M¿ëÏè?V‹è¬@\!xŠ’ˆ[gu県’“Šé +¯ +¦+œÀœ™s +‰€”¢EŠÁbô…bgƒ±Á+˜1â$é¬b°Ð„bJšƒEÐtÝh2†;£É†Ä䁍&:+8™ìl4¹—íML¬âd²³Ñ…A—8D9±frŽ.e§3җ‡ˆÌdÁ0ʎ g£( +ζÔÜ%!ˆËŸ’ŠÁBh!¢Q픧9Hôg†¢EŽ©˜W-aƒÅœe]V0”qÄq6.‹چ=f=7`Þ8ä¢ù ©ì„Ž‹*¦I‹6.Š¸ÆCCn(úê¢8Ÿà«³‚ÁZ8ã̶.=£¤êµ.˜¡¾ D@κÀÀÙ¶wN`ßœ³.0ȍP]pÄVˆŽ8f„¸•… ÖJÈÙèÎX |{‘ŠŠCٟ++,:݉¬`°8#×,ì‚g»°‚QIèæHy’U îéºæЧµ5+C,ïÄÚµBXÁ0 +³NÞ?k²‚Áâj)+˜=‚ã‚kŽFá²gŒq¨wájaðÔ®£ó0<`°¸èä$ª,ο™²‚ÁZ‹¬`îÖùɺŠÁZ¦]V1X܏à¬[ʼnr<÷ý‚/ú#&A-ܱ'IÚÆñök3yäBƒ'ÒhOÆ(9fØd„ Ö^; ++˜žrôqV1Xt]7¦7üaóÀUC4*’¸ùXÛ1&Èá"<@ÚËúvR1؂»NXÁ`q_…¯I±búÊÙFXÁÑøšdé݀ÁÎø2ÌÙèÂc%löpwzŽSLJ¤bºÃ‹ª°‚ipÆP¸¬à˜„-±ü߀ÁŽyX +˜îðZ"¬` ᘥu]s6¾®è§ÖÌYž&Ç1»èIÅpgÆÂEƒÅÕrÐd²‚é,s粊Á¢ÁŒ• [*WV0XŒá'¬`^ف|]ż2¹Â +慐ÈYÅ`q"躊Á₮šc +æñžoÇßÈ#%aÄÁ‹0&R1Xl,ê¬`„ÂÞm9«,θ“dƒµQAXÁ`ÑG*+삧‡È +F‘L]W1X´ õH1Xkg®Y1‚Œ÷(›äQ ²m’# ω±=֎Ù~ØÀp…I˜ÄĆRM¤b°x­„ü8+lÁû¢°‚ÁbÎE]V0¢ˆë"‘XÅ̏•ª³‚ÁbÒu#Š¸”c['Ù'LqŽd£á˜5œÑŽa2¦å¬`°ˆ.–uV0Ýå /¬`˜ŒB’¬b:4:YW1Xœ8pÈeÃ]{ ä¬b°Å©fÅ,8«š¤9† +l“±õJ¬»ÿzn”ÙI¤âFÊY„qÀ`q @M9+,B0:+˜Aæ a#P3UV1Xì •U 6¶Ù´n †^8´CԐu{Á`q +c 9+,¦ed/±Q1j4Φؐ(بÈYÁPŒiÞ:+¬¾Â +f,øu’³f2ls7¾ïóuO§X‡\“#‘sÁaT› +çÖð0u9‡°å·pÎLÁuÊv+fæ_¸ô›Õ!—ãÛç‚ÃæŸ çËán+rž½I§@p6ê:ç·Ø){ o¬Äs¯½R0 Xòî9gî ræs÷Ýëå¢?Ι·‡œ_`Ã0ÚÂ)º‡Ð‰¾ÆLœC¸—³PgçŽ}ñ‡k0Ïvû?5:‚sø’_’ð„9î^Éð…s̀ßc œCpñeâüāÌïI§@æ.~oÒ¯g¹ƒ*yùB`.Äw1=gwQ{Ð8‡0ÛâAÎTâ춍‡7i‚ ¢X‚ôœ(q¯–/Ĥ7 +Ë{þ„c:Ÿ…åÚ~¾‘…åê»åcÛ»}y8<­Ãëf»-wë_¼ÀÃ/pbŒñøw×חaù¼¯BsêÝ¡+7›²«›ďBÒs¿ª6@A¸},[(®VǶîžÃ¦ú³Ú„ß¾»oZ|ØþYµ‡°k:è +eX7Û²Þýö=•e®ë§æ)t LÚÝ×Gh»-·we(¹YNÂû¶Þ–ísxcâ|®k›Í¦jύzßVmõDZ>Ô]>TåºÞ=œ­õª\}|h›ct]ŒV‡Hèªh×T©¶Bx ò¶\=Ö»*,Ûã¡ W«–èà"ôϦÞñ‘×›ºâgp• DÕ4ï…*D^š\nî6Õ6*ø¡m›öpæÈí󡫶á}³©Wu„Ô}½©ìQUúëcم‹¶á±Úìê܅ëðPu?Szên`­wëæéŸ^¾ýáÜÚ7ïÞ^]ßü÷õ»›å‡w?_vŸºð×$q³<ËXøKŒªiÑbê àjÕŤ3IÇý™4ò«è=JdóÜ'(ÃZªºÿŸš°¸ýq,7õ½…ø !WLæ®êžšö£ÅS#ÿ‘Ž•tW¡š¿æØyuƒª. e¯ä՛×q õPvË՛Û~“…mµ½û|‡\Ç-=¹í–¶Z‡="^> Œ˜ò7Õ]]ڎ—Âü&ÉÕú§²;¯ôš=Êғ/jo«þ=7Ç6¼¬ºÕˏí]q¹B'8«Ì×Üh•Åzuǎí'î²³'—6 )Œý‡1<îÏmâSŒÂSÝ=²-®lsž?uÓtýnúJÀֱٞ-}9àÃæGø~°EcÚðŠæÌþ>hÃÖÁõ¥÷…­ýjô”Gü¹«:†¥{Äb©!ÿ­oñnN[=zý»=»{¹ Œ9»ï»ýõ®«H±ÓÝ&Ãúª?Ä(šátFcuõPíÖågq-·lЇfsäòq_ïÙúÙ՟^þ\6ÔÆ()— +¶.ˆ3âx@ý2¢8b>· Ÿ/ÎÍu×¢§Ñ›ûãnEb}Œ'ѺÚošç€ÓMØz8>¡„Iôh +’×b¥˜‘òÐX O–B>6ñ̬¶èà„¤y<{E;ZÞjƒÅa´¹¦áþåæú?á}Õnë¯êþj EˆÃ‰ @ Ñðs}èL‘êùw]=1<<¿V¨§S¾OÊz~ÌþµÉÓu]nšS)V÷=þO(<¤üy˜9ô·‡ :%‚ƒ)&Ô<í0Q<Ö¶Ÿ¿úPÖu[­ºCƒØ{¦øm³®ïŸ­hß·Hq+´¥ÕL,{ºJAu´˜†lrYÅfµ-ÑY[Ô,d>ۺߢɜ.»®­ïÐò¶ÜïaðgiG.móҙ÷Wo­‹¯‘×(¶+ -ƹgh١ׯCy„í»®^}qÏ{‚F[QâýF”_}¦æ司HÚŠ»x6ç/}m¸¼½zûꊳÍïH:Úê¸Åúiõö¶¿˜e £Wwp±æê\Vçó ~  "ç'?,/þuñ?å>&½endstream +endobj +1142 0 obj<>/XObject<<>>>>/Annots 430 0 R>>endobj +1143 0 obj<>stream +x•YÉrÛÆÝë+zg!3¥lY¶ª¤D1©([lIˆI€@ ïëß9·Iô%”¤*å*›‡wºAÿušB3Lœ™jsÌ|3þõýëÉ<š&Ë3ü½1E2Ëö`m' +nL˜³¹"5;G=Õxc¢0žEJ6¦¹ ¦søÇJ*®˜…šó&#ñV´ˆI…éÐ|–*QÁùèÈ* wãp+Yb¸¿÷7JÃ#§4†l–Ì +-«0ØâØ+—}d6C"ö ¢S.KI6K˜¥ˆÙ Yò‚a@5‰ôÆÌ9µÎª ½$`„& '”äÉ “Âä93(€œ‚ÔzLj 6‹éí(*a¦Eì 3üëõJ˜iH˜Y¿ § ´ ïIÁ&¯X…ÁJ‡+Va”%ˆ+Ïj 6 +‘Å* 6)Žìj vžË*¼11R¡5»SJ~ƒØ3!~F(ÜÅh´…¸ä݄¯hòY„FKî·>6 +¥îþ•óçùLÆ# +±GJÜ튋CòY,±·öLˆ×܀øØh km†vÅæg-É¢ðg›,Ÿ›åJ~² ̲úpsvm>·ÍCý¸ëÊ¡nS7¦ßÜÏ*|ùóòϓSüÐs*!/W¾µýP7¦4×uÕµ}û0˜óººú~7ؕ¹¨×Ö,ÞúÁnÌÐYk oQnîKjҊ.í*ìßY¹éêFÌ,vÛmÛ ï…‡®]9irwð(” ·|²ær³¥òÞ,ÛvÝ[Q­ÄÏëò±iûú½O·MýP#«ö.›{;¼Xۘ»ºYµ/½ùeiÊfen¹üÃìz¦Ì=È©ïg÷¼¬¦†/› éî©ÚÌM×>×+ëüSŽk_ÆgîÚî‡< xæ»\¯]…éé¿%êªÞԃ<:U©jøچqµÆMÙ÷«{sý¶øíÊl×»ÇZžÑEÿ´«×+äfR—ƒ+ï™[Éäv]¢döu0[Øxi»UoÚÎئêÞ¶ìºÃ×½_í ]Ô´ÍiÕ®w›Æ¬Ê¡4]‹îD3 åýÚþS \ÿÇ0nûòñ½¶ÅPV?hÇü~±0´íÚUO'FW_ú¨Ò9 ë’%X!l¥LUZ™1åsY¯Å¸E³¿<Ùîïl1nLêÍmo»×eõT7֜UU»k섇¶ÛŒû¡lÌÕùÙ F¿³ÕÐvotQt³ë¶m/Ɣk:ÌIPûIç€QñÂv϶›vߢz²›Rôݺ^îŸê­Z)ç÷‹Ï8›ƒ¹éúuﺔWù šÍ…l^êáI¬N\Ú+èÅÞ×®Ým{³)yc›éü.lµëêáMî¹ñ”}e^¢ë·¶ªË54ûÍÙä×h¹iì_^ËÍ]tu~ya¾`[ÔÖ •Gb“>·:+ʎ¦õÛ¯wË_Y^Û÷û<ôí®«¬©Ú•5Ïui>ÿ¾ 6]ÖiOUdxü õPfm'³~dY2‰Dn·ì:ñcâ´fk;é¹>Õ}¿{?5n[vu8B”3‹¶úaÓnÇF‘ßm¹2}ý¿i{^—¯æ›oâ6¾YÛg»æ÷:bÑӕ/“çïÐÖì¿ÿx ”œ½x+ rü4žG8?,ή?q›ÿ‰2çmµcdÀÄ _†øøé<(ø¼>6¼åy‚ÿˆ‘ðñ/˓ßNþ”%æ«endstream +endobj +1144 0 obj<>/XObject<<>>>>/Annots 458 0 R>>endobj +1145 0 obj<>stream +xu–IsÛF…ïüssr „e°R”Ù¬²cF¤ã\ApDÁ‹,ÿ{¿î¡0-¨Rªbéá›×ÓË`ùo(JC%ª<-|ÏǕéçþý" =_%Y‚ß“Ê#O_D­¶ !O*S/Ðñ›MFÎxaA˜xJ&ˆ°cœ{ 3/¿6:I;ænW "Š£äxRI¿Ä"* ‰"/Ë"/½bvÃeƒ~@e°rÐOlTM‚Xî$ŒAB©N£Æh—‘bG+¦ qæs¦cU¥FXä¬%4§8/—')—™ÄHÈ +Š+$Zc‰cBR%Á+(5%”¢ÍÎ*5h’Q1œ«4Ö¶·AFµ°âJ…†5Ž_QÛ@íÛÎûT ræNˆaaÏ Z#Ž#u>BÌ3fe÷tš¬)ÅuThP´¥NÔ´› ÌJ~¡ZSà‰Z+Ν¿KN¬„õ…Ú;*4¼ˆ„É9*4hN‡PP¡O*ÄI“^>-:Ëx88¾²‚ra})8ÈÕè”.¢?p²"§…I`ÛïSt͊KÚZsA­UÓ)¡MéNÔ¬¬Õi²æ˜£ÖQdMB³²V§AÑÐTPk 鱈‘¡TVlšv¥g• BS`M;¯Ð i€Ù*4Í&{åµIá"·˜Ÿ*š%ыrznàV¦ç®Ą¤jüWPjP Î*5åKqÔÊ,´Ãá¡G¬hW “ܶŸï˜ˆ•ƒñ墑uÄÂ1m_YNù°àRœD:h«PjP<ï¥õz·¸ºKP¿Ú=Ðë-ÉRµ;ð«ÍW»ò·mÝþP7ueš¡ÿ}÷má«%^!ÖXô±=V͜Øõj›ª9’k‰È“oý§Vç³iÕ³a+Þ©Ý´ÝP쫺~’S¢›/ÿÎs¸ù¬¾4Õóìòí_ëùÊ{søP êcՌÏêޜö]цåzÍùÉm¶Åi_(PՏ¦S7ë»­*] äÚOEY5CÛ?¾,øc–Éçmxiß |­šCû£Wm§¾¶Ý÷c׎gîÆRôøeÕ»<¾z—gÿ#ôñ5²5ÝSUµ)Êï*|SÕ½9£³˜‡ºoº¾n†®=ŒåPµ [EïMcº¢VUóÐθ5ûñ¨jódêù@DÓ5°™®k»9] CQ>R6C« +Ս uîÚÒôóśb(íIYÊæßVűi{2þlÇNõ<¸}0%*×Î õ­ú~<©òùÆ;Ó¿=õCU×ê±xâä1´}mzžúÕ]v¹ðÀñ3>/XObject<<>>>>>>endobj +1147 0 obj<>stream x+ä2T0BCs#c3…ä\.§.}7K#…4 Œ™¹…BHŠ‚žP$YÃSOÁ=5/µ(1G!3¯¸$1''±$3?O3$ ¨ÍBÁТM¢Ÿr =  !)f \C¸¹˜T&lendstream endobj -1396 0 obj<>/XObject<<>>>>/Annots 513 0 R>>endobj -1397 0 obj<>stream -x}YËnÛHÝû+.z3i aDR¢¤Ù œ8é1:~t¤ ³è -Ñ6'"©!)»ý÷sÎ-²êÊ -ÞgÝG‘ùßY,ü‰ežHšÉ¦:›DüÆÿõõ·³E”Èl™E©$£Åv²:3°’iņ3°’ùâN å ¬d™zä ¬$Ž§Qj-;‹£¥agI4“Ù"09'§@M“êŽç ¤ÉY47‚ƒNé­u&³e”Á$\G ‘Œ‚“%#ñ¤ÅT»Œ¦†ujg~‰H4é -4’+Yd4é9¡4Mhғƒ… ÄéYg§–ÀäbÆ(ФŒ$¦¯ž´l¢gXƒÁ.¦<¢À\I2™2Ï:—RT#³"Ç3š…‘øŒZ=g ÊX³ž´,ŒYµƒÍfÌ`5˜îÎé®g»1ÍÁ¥ ³«@k!@¨d¬MOZ ÇvÄ V`4È v®UæYd±O#Ï؅Šè“ÅT¼`k°;8åYU¬ÏÞžÈú_׳ùBÖ[ý¨ŽßlÞ\Ö}Ûl›¾lê_×ÿų˜c±{ö”$xúÍú±ìdŸ·½lšºÏ˺“‡¢.Ú|'e}ßHSËcó,}Øõùn']^Ýå’×ۑ€à}ùph é ÕÕIs?<÷Ò乄XÕt=½˜È;]ò°½+»©‹bÉí—Oç«OÒùzÊ.r.cí‰ù…S×ê]Ãc–ôuù—lv%ÊéDly"¦qærq³z+ßï¿?àï²^þ¥ÿ\¯õŸäÇ[¹Y½OÞJÑo¢(2ʏŽù!ßó^.ïQ*pª“‹¦þG/ߛöÇ¿N3Žç‘ò‹2¨›Ž1ܶ ú¡:­RN&ΦÙry¡ü‰iÔçÇÇÆ)b÷BYßlš|)žŠÝI* uzۖµ¦Oóðíúò?œ¹|ÔüÉíGʝ˜B©~i6?àòÏÔ¢î®òýž}ÃñÕy5´þÇÐ÷'¹¬ömóTlå®mž5þ²v£æuªpˆäuðTÏ£Ä+óØ«hçQ[wسMQÅA«é8¼†0~Í8fU×ìãxµãŽht曶é:éwh =[Ú|žrPm”³}Øû,ϨÑr8ê \jqÄE¯ÇqØã¾_^¯ä§ €ïÊGÏú˜+än¾þþÛכo·¯W´¿»¸¹:¿¼>I)ZísÓnxœn_ @îÜh«rÌ¿×͉ïÖ,VÇ(€jÜ66ñO%Ø9× f~×z¦*ßnð¨äÛ-Ž¦;ܨ$úê°ëË=6Š¸hïóÍPhöLpÈ7ûªõä´ðIkèWÌiÜC§ç‚ãÿãPn~`¦óèWzô¡ÊÞ¿g?´ ÎÆáܯkY+ä¢ì6‡®¶¹)J¼OFì9›ø—¯˜¡ÈËy]7‡zSüÂ¥Œ†:M;>SýTR½)dõRoþNQfYu¯Šx0§¹¾YËÎUÞ°T›º?ßÄþ*èe7n°à®Vœ¢[t5|ƒIxºOñ©GŽH°¤Ç֓›vëÊé¨18mòú -Ö¸ò¯×r›wšh+ŸêMû²×ŠÚZñ6ó:Ýø¿LšW×'“p|aÒI4ìsa'çZ…«bshËþ…*ß^ wu S½¿¼V<Åz±˜â‡Ë͜‚ŸÖgœýAk†endstream -endobj -1398 0 obj<>/XObject<<>>>>/Annots 517 0 R>>endobj -1399 0 obj<>stream -x]’ÁRƒ0†ïyŠ=ê4 ±ÕÖñеy$A혤ÕñíÝЖf†Ÿïßü» _„ËC% —Ð:Â(Ã/óãåÔ’*JRxÉfõ ;’j¤RP~öN4ÑHq<¥‰v òŠÖ =ÅVãæØI%±zŠ¹ÒDDž gšj¤ŠÓ"¡¥ %Ȳ¦c+‡DLM$¶$ -ô\aª‘b\JqGA5.W¨ -ßÞ½…Ž¬4Yl$pº‹§ UÚL'À@·7%Å-¥°4ߍ›7;@è`·]ÁÚ·ýïaüþVï ƒŒç8¦6S…ø_áƒÏì©Â84Ãðz3ÄÒ >)Î)èw ƒ{\î‚s7Ѻبs§<甩§ÁÝÃÐÝr»ZÂSö¶á>´Gg±ßK{—85ú³ŠÕÑÿèÇ>˜c{1 -ÿ+U࿈PŬµ&Ï䪝×endstream -endobj -1400 0 obj<>/XObject<<>>>>/Annots 520 0 R>>endobj -1401 0 obj<>stream -x­VMoã6½ûWL·6bÚ²ì-)ºÛ=´‹n|鑖(‹µDª$µ^ûãû†”ç£Ú[$‡oÞ¼y£¿FMñ—ÑrFù‚Šv4S<¹û÷ùÃh¶¾]Í×bF-åë…ȇ_ Ýò~ºÊ×bNóÕßgø8EU\Èò9=³ÏÄâñó›Íhò~M³)m*`Z,W´)#<).~ªe”£LÐ/ö@ÁÒGãƒl’¦¤òn¯½¹þqógŒ“-SœqÄ°)/2£Ÿ•,)ԊZi¨“;åÓþ9eÙ°¶6ìߜï¢Rûàô¶ª¤ƒuºŒ -k‚Ô†<يz¯ª¾!m*‹kdÀ^ ¬UÓ1❠-t´=·C A+þͦ4Îr…‹KkÞÚdY§L£¾CÌø w$o[jmvÔè½z—RA9ïRY .ˆøCZɆ•µÈ¯À08¦o·¥X=¤á‚¬£‡ážAå³<…1ÎVï£Ñ7j­SO‚²M‰"öFU^ðúx 8‹œÆ³ì'¤çZï -9e2]+ƒ¶†$´ÕYm¸ t{ŒÅ¼•íVÒAmÉë .©¡{7™áyIX·KXÖt®‹HN&f‚nzݔL$kãFéôKÒ°Tr}µ¿¤J;HÏõ¨ŽvÎîœlÓeWß$&J¥wýSN >˜ò…Ìœ*‚uGA„'_Û¾)IöÁ2ô~dÑÝÇ:N¢d±¨ÙN9œARþèƒjOr£Z~Q(Aï{ِQªô ÁDi¶òÍúšÙER)‘g$å¬ ß§Õ“¬ò+±tu–/Ç,ÿ´õÔfã´÷®æ‰D\镢÷ïT¡Ïv\w±P«2rÛ(f€ÕWUôœá„ÙÊý#>Û·@ÿË´¤!è“)éð5ê (Õ£ïcmÚN7P'÷9†#¼œ$šÜËô¸aßÑє\æèu‚þPyÕIˆCñ?œ@G÷žÓû×Ñ|º¾œ Üüà À_¾æ7+ -¥éèÁÑYúÍm€›H¢›Õm{O_”ól?pøÔd\ÝVïꝗ›%úu´|ngØÜé{c9kTÞqRRš[…©id{š.’ÞÄx‰eøîûÚíà{²Øó¥è HO¯¡I+^¦o ­Ò˜½ìƒ§dA&¥„ݸïR„g7 L<½uÛY¤AËõÈ&@Ùi_‡tºa§’SõðÝJ…¢æŸÎ«¦Âí&<å³ ÇQé´ÙÇý«ºí›èŠ‚>¨í‘Ytüòò÷³ž;+š‹å斎cW·˜N(Þ -Šýñã-Ñ00¶°©c4W˜DtœÌ0âÒØO><\†ÂÇQ…Ð^4›dÈñ½ÆûCœà(F›¼_ÝÏùyžæü¿yGš¯¦bµš§¾æZý¼ý>úí.tendstream -endobj -1402 0 obj<>/XObject<<>>>>>>endobj -1403 0 obj<>stream -x•VÛn7}÷WLòˆWWKN>$iA.´F\Ü]j—1—”I®ý}ϐ»•½U4†mÅ$çræ̙¹=™Ò_SZÍh¾¤¢9™dšŸeç´8_áó ßNÒ&Ìf«ã«y¶>x¹>¿yNÓ­7ð±<ŸÒº$؟Lh]Œ¦Ù"£WNŠ )Ԓ|“SaÍFU­AYC¥eötý f4Åk6sŠ–04Z×q |{Ñlµ<òؓ2Ѷü¯xòm^*'‹`ݾ?,•Nå-ûÌèwªJú@{Û"sQ²…†Ã€óé<›±ó~7­Ö{ò6^,„!/%Õv=Ú-›óTY -¶’0áØß։"¨Bft‰Ëœvƒ‡[QaëHh}ÿuLžS^ݔ2yÅÉ"¼ÖsG²¦muI9€± <+S‘V7ìNù_žzÞùH¶©û÷µÒ6ú¯>á -×ý1~כּ©œm·ô+½¿zûùã—OÝåÙ4•æÞå¯5bð?±†»UËùØØ3öÇ~q3–ÃÀÞ_}@ù2»«UQw0R”Ä2¨z,I¾'aöÖHÚ©Pã3‰¢°­A‰-^º;éža†N⊇ʑ¶ªhD#ɺ>ԎcªIøXC¶‚JÇË]>ØHt@1¡A/C¼xÀ3Ô8½M.Hy°Â!¤M¢ÊËÏÿ¸¼øð6 ßÃÀ/§”A(í¯Ÿö•èó¯SþûøÍY×F#ЄPÆà“ÎúÐÐØП“ tB»p„^͸W‡/cÇÒÇH‰Æ±T¤W±œ—z3$õ{ŽÄ·ècn¸m›@é=Dè;.i«På»~+ µQp”Ú|$怆A^¸ïJ¹­FŽ¨–E]í ß»×â +†éÝqëÝXÛBè1ÊÅX«|w?ÍÎ2Zw‚ç:=I°Çþ8£>è¶^ˆ/Âm³µ.4Q$1—‡Æï„V%çg7\77´¯õÃCjBNµ"j+'hõæðG×?¨àÇwìÞp#¥5„>¤­(Áš®C}4ùÞ]¬Ô&‹!éWMzôÀ[ØgïÂð¸@sÀ½ýÈ.Ö.oÈ1©r - žÎhT|hû…Þ‰½g«‡E%ÀÅ'Äèµ0˜nþÊGéÚÑê/!0RÃZ£nò2æaðáaIîMß+„дÀ³¨­)AGh  ž÷â I,…lx Ѝ³›z¤Œ o£Œ~³æ °Ä¬†ýÒRnCýˆ^'E -ƒ‚óî¤9Ò¸ÑÇQÝâ²ÕEMJüÀ8(%æ3fé>ñóxŸqr±6ˆ#¡í²ÄۍÆ#B_Ø&ºÓˆ”mÑŠ±+²(?‹¸†;E’n6ôÓí¾“A<ÝÒ9`Mæù£ŠV ˆËJЯC”ƒóI¼vÌvì")ó^ö±| xëʤT Œ8ÙÐl†—žˆè=¹- m>¢iÎÚ$[ƒ ¨á>åĆ÷&ˆJ4þ‹Ä\€ÄÌ^û/ÑGÝìç~À¶ˆ²HʑH EµÅÔáAŸz}f§“~kÁ¯UU,-Qÿo[UÜà?€4QF%â×-(pxË Q§ØçÝ̝.±ŸÏi9[¤%çòÅû—/蓳߰ؠSÒˆs…ã8휮&ØõÊÿ³o/V‹lµ<ǶÍï&lîõúä÷“ù »ôendstream -endobj -1404 0 obj<>/XObject<<>>>>>>endobj -1405 0 obj<>stream -x•VïoGýÎ_1v?”(æà€v?9JÒZjצŠ"Eª–»=³öÝ-ÝÝ3ðß÷Íî]ŒÏP;‰‚Q<¿ö͛7óo'¦þÆ4ÒhBIÑDÆÓhFãٔ¿ãŸ‘”uÞÏ;ýO§ižÁe2ה`>Ð<éÆÑ$Š#ºqÂ8UÞRftAª”.]foæwpS÷Þp -÷îå—ùÇßh¾Dçz͞k•ç´”ª,“F–ŽTF[]Qe%]^ܐ6üã-9 ëŒZTN¦d¥yP‰´Tˆ•8á€zÃIÄuvÿÔúž„ã8†B1x¶/¦Û—.é7ÞO íFôu 7e)•ž“r•6ŽâÑiß%«ˆ.2*µ[ré;fn)K)ì)‡>îe]S<Š†\|ìYÈïSW èJ۞µe“ëim;¯³ªP¹0ù0XOûUºò˜Ù¥®ò”–âA’( hš­¯ååÄ¥m"Ì{)7Ždªþ×C袀€ÜZ{ˆ,Y]È$£E;ø è´áÍ84”Zvá'¤(ÝAgÖå­õ+kú¹NDÞ·¢XˆþB•}[,@þhº3÷ѝV|j–ôÖ >/XObject<<>>>>>>endobj -1407 0 obj<>stream -x­V]o7|÷¯Ø-*ÖI')úðC¤Ž‰ÝV×EÕꎒhݑ -ɳ­ŸYRgK–“ºEØ9‰Çݙݙ%?Ÿ¤ÔÅ¿”F=ê)¯NºI—†ýa2¤Áx„ç~­¤EX 'øøÂB¿›&ƒ—BŒgÞe'Ë¥)e $ŽG”„ÄÝ.ey+3´VeIʓ“º ?:µÔ¢$oȯ$m¬É¥sҝf·ˆöf­Eºšñ»&C‹„Þ}õôš;~-ám]j÷† ’­«ëìý9}XÐÖÔT;òNÿøm@ÎoKIJ3­ó²â%ޫĖJµÆˆJcÖ$|Ø!¡ÒtK>ˆjSJ×qwvÐv^X_oaIÚOzŒÄåVmÇP%z*ª¹ ²+ʁG Ð¹œPŠ’rmÛýA$“&£„2ËàœWz@¹•°Ò‘¸ªsP2„EÝ흴‡˜¹2#Èx¾+éŽÍ$é¿A.ZÍóRIí©ý‘âKý†2ªhWÆy-*yÈ´<ÖýO”Û­L]´”žæ"Gn2 ¬|sÒ4¬0úÇPzMÎTÒ¯˜´r(Yn¬•¹/· ‰ª7moŠ}e<·:ô ïóVSP.4‰ÒšKÖBÁÍpRÒ=¿Ø`‚Oji K…þ$´Xâ1ÇѬåê|E"¨w¯Ñ7‹›åì´AÔq'Á|e Tˆì–Jy'KÈk«üöP~ ÓQ(V~®¥óè3m„s÷Æ`±0@ ݳÕX„û²'òJh -¢»Õ}«=vû°-¨T#ÕSÃX*¤‡¼\Òl$.$¾ÎCr6É.uSÄ{…z×þìö.Q„ÍÆ+¨¶ýûÍdÈM…ük ɯÐÃÀQ5vO~EÚèv,OÔº›F/zg½“­¡Î‚ &Tkõ°ëk Ðxüßù%î}4 u:û~éF©òo'ÛnT.J›Åˆ½¶_ ea³AÙ¼ýÉFãgö+$.!îÒ˜Te)_5MQú#/ÓhÁ—ŒvOyB³;åy%î$”iÃzJïlÊͳ'Aƒ‘÷Óð_¨’u€ÑǍö Uœì·58†ø‚þZaT¸¿ÙXAVJÇhM’=„_I÷Ü»—pÀnØSL,™PZhsŽa®ø„ŠðJ³½ˆÏÑ‚.W>vÈo7òüQ3&^1•;®ÃqcœFî»üt\LŽ$¿°¦‚-/®§gă -•ž<„ÿ®²3ŽÇšïÆk½õ]O;½3’>O’äÀ&MƒölÂ=ªL­ƒÁ -åÖrùuÂ?ŸÏf7®.®o¦³ÙO‘Os&Ód²;”4>¾‹sšá'ú+Ÿ]÷>žG kcqÔÂ÷ÿ+ rãÓ0mŒ)ìÞ¨¯ý Ø+ùì¸.”’IÇ25Õ? -)K9·ÂË3‚pÃõ Ó@м^â¸1ÖŒws%â’8îÓ0Mã]eúöÓ»·ô‹5·ð]˜¼®pl'ÞÙn6´GÝ _þëÅd0$£á8Þ;ÒÇ~Ÿüzòù2Eendstream -endobj -1408 0 obj<>/XObject<<>>>>/Annots 523 0 R>>endobj -1409 0 obj<>stream -x…V]oÛ8|ϯXä¥)¨þ¶[àpp¾ -‰›Ö:䅖h› Eº"ÇÿþfIÉMÔŠ †e‘»³³³Cþ8éR]÷¨?¢¬8é$öúɄ“1¾÷ð_JZó ,=~|û|ÒëL’ ÆäGõ†Ã¤[?iZ„@ƒÑWüˆú“N2ú݋q÷× —éɇۏÔSºØѤKi t(ÍκI·“Ðr+<Í֔n•Ù8º¶æ§¥-Ÿþ~Ÿ~Çþu±÷_ôÆȝægXm¬çõ´ÇBGÂät°9/JOÞ¿|¢ÓýÖÒ¾´^òŽvJK²kò¥pÛSü& ÍÈU›t>È-bÈõHl„2ôx†ÐŒÙ»}ЅìáÍã{òJë°)º ÜîMR¯ìÀV¦œ€qj³õè†È9)­Çõlúyþe1[$þŇ -øÕíôkÂlð.ö¹Åù*{Šx}y1 -¡4  Û²…ÑȽ۔¶Ú¡mí¡ÿífz}Ck[R.=B¸Ç÷ -D±´ŽVˆ]•eÒ¹u¥õAªÖ2'´ÉomåÀˆcòÒµò¢:ß«\ž“³TˆÃ -%ØBZ#Ij'C’­ -d—´+íJË"ÏÙí³,3¬&åú d¶ÒH¬«Âf®`¹\¶r2î¹Ë„¡•QʹJŒ¼Ãqu¹â&·;´l:´V/!|éáîfº¸!'¡,â¨Úå%G}It<« -i¼ðʲRÀ©³U™IÀÎ%ԞŠ-ÈF¢å;Y:lܳŒÖ -y@‹NÉ2  “å÷yº ¨02݄®•ØëX‘ÄЉִԳÂZڊgÐ{ו¢æ`¬ º¬C;ʶbçe^°êl„É‹êÍڃ´2»“4»þ?x—q-*ík¢Ï˜gZivõî„ÝÁ¡Âàe»ÌLDk_°§¨0A*¡Ö7!ZôÏ®3†™d•ï… ¾Á*0sñ@$‰‰ í2ó>Q¾3Ò¯”uð;rÅ*ɬY·òÚK%¡iSÁÕ{0@g‚!Z|Hï¹Å<®ÁÀ’ è¡>ö@x -*̏\¹?4¥ŸÐÕÖFíp&èÇÛÌjº“ÏR3âߨ(ÅÂÅý%÷=.æq-„A÷”Ð2óQ«²Ä8€Íè'®Úílé Ï ÉrõåÛÍyø|¸ûgqNwÓùýtÞ=oñ†£¬yÚmmpÌzÆeHÚóŒâEUñ ¨ª4ÞKÙŽ“³×=úYñY0gÖ¼&”µE#žA\ 󊏐Ø(IÏ…ønKåG¯l×13duŽƒí9#8V䎕÷Œc»¶Ut#ٗEœEÖóÉLF¼Z*ºP¦ÜÛÐ ¤ ³Â:îVð|øŸÌ¡«P±{ìu‡Ë“ÄŠì(þ׳VáµiZ‘X£­´¥Ä‰eXÍ"Æ´‰M8Š› -"©ÀÌ·µ+—U81¡l“ËõrƒîJ'Ëgö`ô' ÑN8‡±ÈۇQ8óøدE{©HGà´7ê«¿ôpŒ†FÇ!]Eˆíæ˜d O¦ÉQK«F€*ι‚ŒëdÂ^yÄiÔbÐþ:¥h,ÏPpH×Ö됉{ËZk@˜¼Fì̟¶l¸d¸;ŒßÖ)´Â„:Vró‰]* ?´çoYëï ¸fƃd<šà’Í—Œ>ǹIO¾žüÚêaendstream -endobj -1410 0 obj<>/XObject<<>>>>>>endobj -1411 0 obj<>stream -x•WMoÛF½ûW t©XŒ$+’}ÈÁ_‚:¶kÉI)Vä2ڄä2»K+ú÷}3K* -íŠ"-îÎǛ÷f†?Æ4ÂcšOèxFiy0JFôæÍqrBӓ9ž'øç4åòâô4™ö?_¼~wJã)-s˜šà!#˜h™Ž“ñ(™&tçLLõ•rgKz¸yÿ7KŠ. -£«@w¯–ß`hJãq44œÌaèpi©ñk6 …µ -d<©'e -µ*4=…÷¾\ WÊ댼vO8(Ž5•ùIkëmLXÓõÝ=mmƒ?Š‚*ã#µem -Í!Œh8>N&ì:¬5[Mc„µ³_*úŒÛxUín›Êkr>u¦4À= xÐ½Vp[|Î5i0¶Â3›–#”[×ó\Z@žé€ }Ò¾›Ì€=²ÖxÉž\|^|$¶ÂGç‚Pfµ§²I×1,Uj<0þ)BeZï‰ßú§„Þ€PÁaå÷ã|æ}¡ÙŽ¦‹‡»•ªjTÁñãþ_*ÉM­lP… õnêXº]ퟕDl T¬aXQAbŸkÃãqÄDHö&¡k›~‡¾ý•n+ðÈiE›µ.ޖ:˜0¥ -óœm˜OÀ¶ˆ†^Æ6(l,…m[6ïN·v;R­4ÕÚ1,€{µåR}8oəÊH¹q %Ü œN­Ë:Cƒ^ú1^ÔÍnPvj Ä8LüàTõUs «m@Dà–"[ƒ¡9H]y8¨2öÅÕdºÚRi3íø‚âœ|­S“=sSJŒ±¶Üæþ·ø‘$¨L꡾ R|` â*d¹¥Ìä9( ыBO½½ðÉT’Mè£vza˜{Q-T¹R´ÒX£KMh­žP‡øYÒÜ48Õ -œÄïyZ…âñðñUì }Ð¥h›².tÉ!Aå(:Þ~=zžW:l4 ù•HŒ%ÖA/×È5Uè6 Bʛ¢ØB_fe "³Àh@= ¤G‚m™$’H -Ž>Wièyå¢¡Ž p(üˆÉ·¼`:´ä€ -ásòåxBPëäËlz„ƒJf¬K4$öÖëv!ÁôüJmu HÈ7um]ðB»èïZYá7ãP[ï Ë q´P° ”Çç,‰Ùéöý”ÑPPB›KiLWPŒ9Œ§®©öG0oã+øö…A¥3â[}Òƪ1u¤ì˜à{Qè 4È)Ð1a :†Nx^lL* }5'Õr¯*’³tþB×(kÁÌÌ?48‹z ‘#Ši¬‘‹Dh Tõ|·D]ˆg0maÖI ~#®gš£uIJ€{£¶Ï@„âÒPöÛùµmŠŒÒµFƒâùÀ™‚(Q­Ìü-¨ù3à)Ï%&bl4 zî…úeÈev#È^>hOÚëàD0`õ¡ú-S|”8¡ß:íctušpX™L?Ô¢ä]A0Íí«Ò`•WˆWùžóVï±w²xùÂ{ô@ä¥úÆy"Iî`` Û~d„Éüš(¦ïü*h®ìx`9GKÕ¹jŠÐRAÄÉnws¬õ»á­Eÿ¬ “)™ÿ#–éÓ9¢†7BÀ’ÔË‹Ô{—Ð[ÚÆËкlU»ŒcýY\\ôpx¡ô}Jñ‚Åõ“'3^–<„i¿ƒ;[«ÇƳA÷æ-ú.ö.éÂ(+&°°0`)ÖhÌÕo4™­þÀæûÚ.GÐ7¾ÉŽ,=/V -ZÉ°ÍúÇW ·PxK±‚¶uÈ¥"XW¡…`àî- =|#H\W )tì’ö °Á>҄Û?û-ÑÚŸ -ßÛJpc؟ùÒFy«æ©ªrýwÍ̈;œP©ò°çƒ7 P®1VTíJƒ½jÃKÄn!R)‹¦ëÐ!Êo7àš7%xª*mß©Ú`‚ÈNAgÝbµ*/£çñòêæó?7·7WG$÷Wg—íã§û÷Ë+žnòâìúzX—dÁÁÈåui®LaB»õÜ´K²Xzwq."•?.1ù쯡³„>I.ÕöÖ -›·ˆø……Á?EdqéfX`¾Æ[ÝX¾»ˆ]‚«‡KüÀÁß ·žž› JÀ•î, ÷Ô`Ë[yǘîã¦[ä±r'X sž™T+ì‘Ü®÷¿=^¿;i?ÊÆ3|žÓlŽO:þYœ}8?çýƋͥM^¢„A Ò°»0œNùüÿúœÎ§É|v‚oJ¾9eƒW˃¿þ®ÂÓÚendstream -endobj -1412 0 obj<>/XObject<<>>>>>>endobj -1413 0 obj<>stream -x5ÎQ ‚0à÷ýŠóh®M×6Õ -z(Œô*Sc’Ždýÿ&—‡{ùྠ‹Ã¡2äv"Œ2H]P¡UìYÌÒc •!Û£ç0¸Œ7C±¦CDŒÁØäVž«ÍâÇÞì½ýLýÚàü¼1#Iÿ.ýÁ„SΨ Q¸9¸ù‰añî—ÓÁ£EýrÑ£©W-” Jêø¯é¾[WC®ä 5 1†endstream -endobj -1414 0 obj<>/XObject<<>>>>>>endobj -1415 0 obj<>stream -xWMSãF½ó+º¸UF؆`²7ØÍVqX³)œÊ!¤R#idMVšQf$¼þ÷ûºGFì&) -0h¦?^¿~ÝúçhAs|-hµ¤ËkÊê£y2§«›ëä?Wø¼Ä·×TȃÅ|•ÜLÜmŽ.>þLË9m -غ^ÝÐ&'ؙã?ÙéûR5­ö0D÷uãݳÎ)õnŒÝ’±Tª³Íßbd±ŠFÎ/¯’%̜.“EBÏÚ?½#WŒWã+Z,úËbƍÇOwdu»sþ {`&ׁÕ:+•5¡¦tO»Òd%e•Ñ¶ ”)K*Ëtàs• -»ªUV‹«ˆR 6g$ÁÎé|qC îû.‹·{rLT4œçü^© kÆa»K…– db,SèšÆy&í¡J|¯ç…Öí¨è* Ú_“úŠs'ôL٠ÑÈQ[§9wóWUÁ7¬wÒÔ °kցIÚ\¦P§ Ž±uŸNƒ~ùßÓéOOgOgSFÞF́ -ˆæ8hÈÐJµ -¬˜œaŠn½ë =ªÔT¦ÝËsQO.â€Uîj.f嶈x.g2o(2e¼Ô³27{BüÃçÛûuÒ~mÅzí P‡,^9ø—ÌF•õéõ—úĤ*oì3²Føå’VÍP -ò²2âæœdV½…ËÅÝ Ð;Ü(áC²5 %hÏûhbd‡Í!]øÌÂYEg@J½Ÿ¸¯ªa˜?Ü(€–MÏXxñùU{³ì§èŽHh)éÞu~ô1{­S„×ÜÄîQ(]WåғA·½ "ë4üö)ŸÄ -ë­Ð˜Pú”ù8%úzC„XïÐŒoaGTw<<-šPcjS©€³z Í„ ŽŒŸMPõz«|^ñP††ìJ8}êz3ë³å&Gd ‡_'¹ú]€@ŠÔOÖ)¼@,ºÀ} -<¹ÇylA1¤c´|Fi‡RKµyÈZ͛„ò2×C£3S^d(• ×t¬Mh½¹}”Íäw¡Ì«³`1óÑ¡Vœ ’~iÔöÙxgYù' £œ˜KÜ"·Ü"3\r—KÌeʌŽN«ɖ©&J”ÑAúëÍÆÄ1G’¼öŸ>™Fœ’\ä?¢lG #øsZҍ£-Úc˜¬—2ù9«ãØõ v¡SU¬ªèÏpfÈüxäìq?ÞΆq.ÀY?NÀa´ÿx·'pÊ㺢¨Qv®˜FDžÌ%îVÙx0çϱ­ã¡¾ðp×IÓ]a4¡IÆä¹â`)÷RèR¬Ê¨SwBŒ7²%=G!˚T€äbý¤³Ú 5o¤wðbv#ͬÃyf$Ó²¬=ÜÎøâÄ©þªêfFÇýÊ2Ø9Žòú2^±ÅbOT[-ˆý`¡¸Lès\%6*v{ññ;›Ä}A¼Z"W¨¯x¼ Wº¥Ò5:®œ †lÆÉ/D)uՈ ¶^e_``ò~™Å„ƒ((ÊuÚm'©WÐKÔ´ %æ] -ª,òö"µ€Þ€õXuZŒñ8›tì5#9íJyõèßdâLrw苏7//Z—óøÞó¿_ì®VWÉêúï†ØÁל÷/›£_¾:(ϳendstream -endobj -1416 0 obj<>/XObject<<>>>>>>endobj -1417 0 obj<>stream -x­WÛnÛF}÷W Œµ‰eŲóRøÔq][m^+r)mLrîR‚|Ï I™bâ¦(Ê8/»;3gΜ}=i„!MÇtzFQv0 -Fô~4 Îhr>ÅýÿKM‰|O¾óájvpòqBaH³gOi΍hÝ[¯É¯”'“ñ[íòŸ=mlùL‰-ik«èœïÈ­l•Æä¼ISZhR‹Û-ùmÁÇhrº\ë’r•á££9®§ÛÇ?oÉädz/#†§Á>%&ՙÊÕëÅÀ -öuîñ¨ò˜ºŸ³±qEª¶b(5ΓMH­•IÅ ·R¥vAce|LØʓ…'…¶M Î]”vãL¾¤‚ˆTåÄù-¢çØWj]³LíB¥t¸¬4Œ©(²Uî£ç˜­Ujâö}k¸ ïQg:[Hl@—±¹{¸þ‰"›ç:òÆæx‡‡“ϵÿd»!è‰Ý áW•“ d\[û²ª‡mãkëS Æeê,Î£Ô -v ,€–Ú{ea¼G®5ÈEi‘àŒqöÖ²µ¥B•H.²äHbÐ)סÀm,ͳEÜóÇäÈ¿öq€ð“€f+DéK=s¸À2‡CœW¨HsRüFà FÍàǝyšéåÆcí¼V1ÛÆ4žzæeó«>gx%¸ï. {½!×!7ˆ­ŽƒœÜnÀ–’2‹‡Ô<ëðXÄ]–H%„X¨²g\Sq¤˜M톭»ŠÑë0nå.­Œ/hg"¼0¶¼US.púZérˤCIõ½4BÛN[Cb䘵Q»Û7ЮèqC6…ráé”=ê -•5r€Ï”@ë9^Õ5ríƒÌ5ϾëDU©‡Ì£EÿËè[Ÿ±}—C𫴙x'ñ3"­k=ÓÂ×LM,‡Í2iœØšS´á¡•¾38@mÚ´[Dx»û6°ÚÕgô ³ ‹hu¾º j–¶äoÛñ@°”b–={ -Äé‰ÞI{ cëЀ]‡;[úŒQs]¼ìîïg}"kµNÕ¬v5÷wóE‡‹ ×~~—fÍ Pè‘q^Aü_¯QŸRo¼Dß­TÚC…{¬YV(Wž2æGLø{ñ^4 wpQ éüWwÙ¦úJ[èÒCÉMî` Ҋ -Š˜Ï“°zv{G¶Ý@&9icÒ0•Õ!|ía@¿BÜxø¤nBj­â<‰¿°Áî4‹ÁýáºÓE^· 8ųI­â(ÁXå‘ðæ•É…Ï(Óaf×ü óÐð;ž°ÀeõŒ|2ì‘M|/Zõ.1nµÂ(„Da„’jõ—:h4ž«Î4œªç¹š©Zr{B¹Çœdz*º¿‚Àƒ P5~Õ3͊Qw>èƒtÄAÃ36£ -io`ÔPò0ßr°ì¸Þ5®1æ€jûØWË6ÄÁ²Â:úPçdDM^ÇM§§_ó£›OWõ°À: -Î9›{ûîÿ.븻j?áþº¹ÇíMçõm Õ÷£—v%uo»÷ôòæYÃÿv½yޞ;Z†¯¾îݽíÕ;xõno훲ôMw^C`ò(]¿>¿¹š/c|xyÿNÿ›G{}ãOïÅÛÉ1 ¾ì}çjޞ¾¾’cN>ž7¿Ã3üà>?Å/èö—å姫K‚b~ááÆFU†éKD—‘¶†Ój#>úÑè;™N‚éÙ9¦e,§|Æíìà÷ƒ¿~5Ô7endstream -endobj -1418 0 obj<>/XObject<<>>>>>>endobj -1419 0 obj<>stream -x}X]O#7}çWÜ7@JfóAVU¥– -µ -¬öiåÌ8ÄËdœÚRªþøžk{&v&Ɍ}?Ͻ÷˜¿†4ÀߐÎF4>¥|u0}<øt5 Ÿéq§çøRÐ  ô˜õ?¼(\¾ï¼8~ü~0 þpC<¤þç÷vïñQŠð²ûeûˆŸ¦2g£o"ܧþ~5øq‰æšy.|Á¢øú O/)•Ú¼ì|>}½ž=<óÒOW'4†ØõG§ì܅®¬²NUϤ4&[Ï+é,= {4êÑøé˜r]U2w² ù¹&£k' /ºÇªûÖôÉ-¥•Thª´£µ°–æF‹"Öٌ¼\6³«_ -K?ÑJäKUIKº"åzÑ¿>i_·/ÆɋŒ&ÖÖ+I mØZ镬¾ -G¢,ƒm‰êV©0’]\¨çÚÀG§i.IU^ºÑæå>¯á0k°jµ.U®œ‚ÉV¼È§ãŒn‚4~»`?B ]eÅ]pïR¯”Ý LÒÐÔèÅçӑ’bAós]–ÂIo‚ŠT"i¶õ·µpÇà)Q­l×Shgl¾B§¨Š&X¤EÓžÞ‡ÈÈgX€5X¨ ͤ›^ß>P…xY햩f—Å'£Óì„S?±6¸³“Œ¹Ö ¶zÝ#Yx -õ®®BB€?‡к¹ä°K¤‘Ì(pK#ebGÄw‹‘¨=än£ ­“À^¨Òä1Jƒãå«0y5¦~¢Ƥ>¾TzS2Pê\”ðß³õ,‘] ãT^—¸ó5”3¹4$¯¢râ™›h…Y×5r4ö)êúÉë8@ÄJ‡àóï½àLy»'ê„& ´½mjC5¾+6½XFv) ËXT¹Ç€x„PÊpã-q’‘é%ðæçFDF?pÛ%©Ç‘‘¹T¯¾È¬V3G¹ )D7vhS4h[ˆ|ö&ÜVûjlëЇ}…Àî3ål -˜j0 ç·„=ol\Éî£5ZUHnÇ¢vKm”Y9ôõ[yì2Ê%öÄ ZzU"½Mc 9tÌe.jdX4ÑAVdåGÛGpayï$&ÊW5’¹ ˜g?ª@F—[Ö>û‚YzÔ¢-«…ó0ÒêÚ䲉ø0ŽÐ›Îð m»©=È E³·ö?) :ÈӜ6KÄ Ì™XIè=ðYŒÜ×´™ò¤Ÿsð -…Ø»ò-„²á ®=ø;Îj¥«þnfÚ¹ÀU„<­µò#¼_y¥Ö/ܚ˜‰˜„˜”¡êYI§ð,½é“». 6Šç9˜¦/%É«¤z^εYj]Zø½¬c#º"Ê@t[q“Yƒ}ŒgƒÁË2;ä´?: ƒî!PŸ-'›†G>џ¨£Æ È9ÝnÙ%¶xÎ ’=AÏp»ÉS‘íOžL³á·©¿_øû¥¿Ž²FÃÌÓ k´Ý˜êÎo–þêï,kK7v¥Œ;»˜´v.æ¸Ø ‚ëï,+B ßQÕXA€´Gu ‘¦+„fz•˜› L=䦭sìð¥.r£AOEõÖtÙ¸5…âLoHþ#VঠŸ1s «60žÄh* œ€{{ Äx -4F4s5Lý&±žCсXi²oU¾4ºRÿÀ {zô+£kƍié+ìüïZš·XÀ;äîéˆó¢™]ß%zEQ Å ,Öê\!v…×á}šuè}½½ÿã÷ûÛ/w¿ §¿Æ¾Ê¼6Dà ÃY 5PˆD×.ÝA 3TaG¯p‡—nã0²’@ÓlÝV €§L®Â,mœŠŒ0ò™D=¤:Y–žþø–  p+ٛIÄ/q&€§Äßʪàð‹Hè'U¥kØå#k‘¿€ZÁA_.ïÐጣáø…_ølB/ÎÛ¼2Í-hžRŸ ’5!9žÁ®êÕl ,cV‚WìÊ^"ç!ƒYz[Dá,x<žûP&û‰‘‘7 /Â&‰j;yɍç·û¢6_Ê¢.ã”am€’3ǜEm°TŽ6¸£O.zBÆɂ&s ÃN$½hÀ˜(4ê™÷wê)=¤ù1S*-~aï?]Ç“óðô,œñ¿€}˜ÜL'tgôw @„9Ç1|œ­å}ýfyÿlÀÿ«8e'Y8åùä…NÛo89;ÉÎNÏñÏ ,žó£ÏüÆzbþendstream -endobj -1420 0 obj<>/XObject<<>>>>>>endobj -1421 0 obj<>stream -xíWKÚ0¾ó+æIó ÀöÆc÷Ô®Z©$d‚Ùxì®í€¶¿¾3v‚ÙˆªÝöR©$gb23ßØão&ü¥0Ê B±ïL·7 \Áb‹ Ç(l ‰“$EÑýR­%·®©VGÃá#3–kœþ Œí-î; DiQ¹¹+¨€Ÿ¨Gœ'©¥ãý¤Aé6]ÍÂ>Oú4NÝ8sã܍×}hY;W¼(ßf«É²ûfÙCÙjÄYçN¬-gi<¤Ø<Î,%õð„8Ѳ7êF™­æ/ƇÑ6H0ä žð¥+í§«ëŸC͸Û|5O5wPs·¤ùŠ â퀹>pmà(l œ#`[Ú|[ò=0ÍA*±Ê–J ˬ8à Ûs“©·7HSŸ\QæÖpbQUø¦„´P2¿SêAÈ;’Ì - ˜uG¥ð.îʵҥRPŒKHƒ¬4dk·Ã90¼£&Ê/¾ºV¶ì7+ŸÇíŸ÷v²ymÁ’%wOÎXːG¤Žw&|6ŒdtA~1bÔ}¬¸,8¨-ð—Ö &fAE¥ù¶ˆÙ%ŒTG?iÜùÛ©‚í`ïÏÕڝ2†¼ȲK›µìÅðµä„ó$‹R+)¾sÞìðtÖ{G>6jÏp…[NÐ¥[ŒÜq|Ÿîl1[ž1,-ÐEXÄ´LnPC!3„é,†‰K—x%3ç7>£ÐóÌ)DÁ"Ê4Fž[.ŸEC©‚=ð:¿NÜe¿ÿ=i²¾fäóSQ&*hHù ˆ'¾¡d#¬wæ¿ãæ¸]\¾óIw–êÒòÛÔýò ûãö/óyÃƗù)¾Å ¦’k$¬~]DΨçwh=”b¯¬ëÊb-³· þFHtþÔw¤x‘¨‰Ù½=,JH¨ÔTôjÈËÀîˆx]ýÏNg,­k¡suNóB`Yq(öÂ*˜¾ÞAMÊ1ÔP!r¬ŠœË;5¶Á†µ™#6±Å ±¥HãTÀ5ß«Ö' -¢¬Ný\í_m· Á~ÆÃ҉Œá=íÍY'ùÊÆØ÷y"m²ö•ÃGÂ9e^”ÿ²$ýißûÊóMß>®ûöt8Š“qÃá»úhòq:OZÝóÂÂ\Õé%)Ó£F!%ô1ÙÍâA Sêh‰°X¡•ÁVÐ÷ñ¤0 âÑpŒ_ŸørzES׋ÎçÎ"¿aendstream -endobj -1422 0 obj<>/XObject<<>>>>>>endobj -1423 0 obj<>stream -xW]OãF}ϯ¸âe©„M ª‹Ë"ñ°YZ¢VUՇ‰=Žg×ö¤3cØô×÷ÜñL⪮*”„Øžûqî=çÞü5šÐšOélFY=§cº8›àýürŽ÷)^FR1º]ŽNïÏi2¡e#³Ë9-sÂãã1-³ã§m“•F7êoá”n,­¤{‘²!WJÊu-TCµ°NZýbñ)šœ*‰jpÃҋª*ÊtãTÓJršt–µæ„V­ûaùe4¦dr–Náÿؕʒ-u[åðH‚àAä[|'É*×úpÒpl:KÏùØCAR!2CF·Ó/ÒxŸR!Te}Ѕ®*ý¢šuŽáG¶ ’hh!jiIˆ¶Þ°%|iHŠ¬„ó\ò@5"ˤµjUIj€Œ6_©0b]Ëƅ|>£äð’9GØA¶•F4Âr©j@ã¤=iï!m¤Z—+ݚRkÀ«¬³>ù…‹ MRbø²ËãÆ9Yo -ÀðÌÿ‹Øí ú}¢¾JŒ—/L…‡Ãßh´ãŠYëgÎÇ蚝&Åۃñ=qO_ǍBêfóQtEÖ:À_xÏ>¸ßO„Æ{–h%åBY›jë;‡+ƒŒ»:…Ç|1•{]nZÛ®:rßRk¹Mº ‰²ºBó¡y†ž§…t·ŸŸ¨<@´L’”–è Y@ےͬªU% Tޕ‚³_¼«%ÇKw»¬v…ŽÝyÖvzEе@½/(™ÓK&Á4½HéI:°lMí¦z±ÿ>ߓé<ñ©o=‰z%вY‰†eöà¼jrp›KØeœw·káQ¶ÒyOȶï @h@îpÕ[$} ]Ïñ^˜´Õ-Õ-0y§­Þ0È¡ÉÖ«~P¨4_öVVÀµŠ.<Á{-ØõǺÒ+QÙ?q"óV£» -ÉwX]ì´qÇ*¨Ô©Ýl´qôž¶ÒwÒ!¬A‘~…txÝD‘;d7F>+ÝzJNÒ«,çˆÞÞƒVbáÊe!ÚʓæS!’RÀ¶ó8pÊì¤ ì`]uô5øaÛõZBYso»Ý¬€¶¡!..þ -4?ñm€`-\n©’Üþ\Y\xÞçCïýŽ‹" üx¢*Ò©*{úS×p,š®¤£Cìÿ ñ㣎ö_¥ä†g}dZ±Û>I-XºÆ=i³w„ ê¨ƒ' $X ²a²fXŽßQ™0¬4ËÏçÅG8áVñ¤IéNÓâó2âö’ ½Dk ]|4,”ƒ »â¯á^Ä90²Ó…W¼fú öÑH …b†Ü¸ vTU™¤wd×h‹å ”\g-C?®=’¹Ä(¬ÐÒ Qî°§/Þp'2zdgä¦RO}Dà°FPzÔ¶ãŒÄÀkąÏ@ZBà ½ð½’ß‚ª“lžØÀ!¦tcé“ÊŒ¶ºpp\´èWXˆ9„ŽÖ·£Î4®ˆŸÇ%vûèpéLm8N‚à¡g‰î)ºÑa©BU´®íê Exõ¾’ëΥǯg‘bL ž—j /"~Áx)Œ2вßN‡3`à.‹KY@õUË`›ë¥ì™À³¼ß”‘-^蟎^ÜK@O²÷ºÇCÞ,š‰ï%b[ñ²ÊB­`§t~°ÈÆî!…NDaê‰h˜(X ür‡iþ -í¨(<´°øÒëúŽ.ÒD)7{!R¨ò`òžð@«âèÁ8Ž³íáqç/tËÑ£Qµ€N÷Øt{ÛtØ\>` 7ºØ|¬’k¨g›\?ƎN®—“냹•^[Ž12øê‚GEü¶Xú ÀI$òfׂ™~àÂõÒ1öP{c à Íìä³aŽïÇxÐþ¸ ²äUÁ’ß Nïÿu¾w¡½§k¿Þ!­}„?±Á7çý ´I¾y„k~œpÈÝÞŠö…ý»¾örÄI<ÌÇWßµ*žÏÏÓùì? y±³‘ËÑÏ£k¯¤Yendstream -endobj -1424 0 obj<>/XObject<<>>>>>>endobj -1425 0 obj<>stream -xÍWËnÛFÝë+.¼©Ȍ$ے\4â棈“Æ ²hº‘C‰ 9£ÌQõ÷=w”ÄH)²jmøəû<çÜË/ƒ1ð9¦Ù„.§”ÕƒQ2¢ëùe2§«ù ¿Oðe$ƒÛtðäåÇ”¸2Ï(Í ÇG#J³ó{ÝHjV¢Á·ÒRU*I¯ß?¤tÿ&¥Ûôð"¥Rá¡$[/’L«‚Š²’¤ ÷ÏQ/Yi¾JC"kJµ$aÝ£w÷áÉ£ôÓ`DãËdïçeceU$tWÐV·8ÓÐB7+wëŒÏ>yy">ߔʒm×kmzJ[iý˜ÒùéuSjEBåß±à#|J¿*QË_NÙ@žŠT½È{oʪ¢B”5šl#L“„“irÅ9¥+‰z |5Mkmm¹@™l&•0¥¶ThÙº -µkÊ Ž ±…âìÞX”.!˜A}m(— üáÈñ;½£âBln´ùLhŒ(nʇRåpB7×CòMãzÅÿÞ§T‹l…îsï€NDé†-å²52G[{>×(ã@ì›y®kxô‰X‰ëù¿eÒeϱ‡ÈC!þž_ë½Xׄ'/oh T3¼/.¯|;&É4¡‡]énC…̈÷Í»ß_½{óþ-[Þ§ÇÅd–L];Ñf4æT£N–¹«"üà2в=ŸCWX¡Neå8¡$*ÎXóAhÐò€jÞ0Óҗ‚^ ۀ‚.OüüxŽîí3ä~ N?îye Œ`Ò -zkÊZ˜m´ùàctUI3$Q5+Ý.W.E]圅:­+±µžÐ¸,íÇG =Çüȃ'$Pû‘âEŽ¼ —‡ô0‘(ۀMF×TéLT®Ë<\´®5`«ËÌÑ«[ð•øŠ¤#ꉱ\fåZ8~Åc-n× ÎéîhDLô€°•;è‡xzéÆ´$XY¿Ñm•3>„BºšÍ©ó9¤V –‡>´ž}Žø¢‰Ryœ60ÓóËUXi¥²¡ÜQ†¢OúZ|ÿ*ÓNÑXÇÄ.̾Þ±ïFR}-VµT ŠNáãDqx½aýÁ(Ž'2ìªxä`¨Ø´ä{‡1Ê+$]a™^ûÆ]ĵ%,'Y‹®¢ùíÎ4¤Ò¯GF~iK#ûD»—7C¿?ùFƒâ˜ÓhÆ·“™ˆ:/‚q` -æÎfà+67ÿƒšEÑå{guÄJè´h·BP@ó9X®H@hKn—Š‹ÇÍu ÆbfuCö¡WTýE b¸ûŒ\hÌ74L#e]à䐀ó²ùɺñj[謠¥Ö9•¹¬¢-›dÃn"i8þÜW\Ù¯@/ëXÿ -êª#àÿéϵ+wè¯Ó× ²ÑßZ …{p]á†l=$6b1À‹†4¿VlV%šùíhs»Ž´,Ž”>]Rœ;ÛïíÏ|Lޚë¸ ³Hù.Ü6Cg}Ñ8£LaýÌ/ >p(c´E É*Î(-¿P`[ìÞ`¢ÆìÇÐÅW%ö0©Ü:Ð;—M¬„Onuèû»ó<¼h§xmœ_Ò¯”ÐЇg¯oŸaԟ&öÁ¬å ŽíH»½õ"¿˜ ÔùùìÛW³«d6c[ç{cûE:øcð£ÔÉ endstream -endobj -1426 0 obj<>/XObject<<>>>>>>endobj -1427 0 obj<>stream -x½WMSãF½ó+:>AÕZkË`C*›*›…Ä>²VŠCÈa$°@ҍ„Wÿ>¯gFFf‹\ØÖL¾÷ºùç`L#|iæÓdJQ~0òFtr6ñŽéøt†×>~JI‰yàOfo,‚ƒÏ—Ç4SÀÖôtFAL°3Q.jTMkñ"ItP.¢uZHRUkIº YᥨÌÉMª×T) -¥yœ©Hd¸£+YRXªÆ_Ü+Ìá&ãT‹0“GÁãÁˆ†ã‰ç#€Ã•ÈCAI©rXŠTž$h¯µ°!-«ŠOp@‰Ê2µáwê¹JU¡)µ‘þõ©PdãtÄH%|¡çXç¡©"¡$Í$ýÌO?_Žè̖g裄ˆÜW¬rû.Á/T¨ÖÞÈ;íÜ ýçžK™È²”ñl*M™|‘}¡‘ ôŒÆè7r81qúÞÌ£•+OýL nA úzs5_^Û«¯ú3oʱ»æ HÄ1ß²mA_d©¹Í‚îÒ"†M†ÆW[Œm{óZW¨HÅý!8;÷Ihmµ\ÛwËéðâÑ¢¡X&¢ÎªO»oË4eÓz>WEU¢ÿÀX¢JNÐFTˆ\R -w™V{zîNõPÊ ¬ù6üܒ¢Ág¨„¦Mše@´O”&ýÔJù2äQ#@ÒÚï¥Úóv-«ÅòfE&ÔûCۙ_Nj_îàªZÓÝòz…®Áªˆtéöë¹çÌúS ÌKDm9©IÁ¹ÉÁ@µ€vÀr/9²Nó`Ëp2†OܯÝn£]Ä?Ì5Ö蕎Ê4”±GBў€Ÿcx»Ã‡V'Ö{î¹~‡Ñô?q¸‘º ¨Gö=$~ÿp‡ÅÓ6ØÕã¡ßeb+®VŽwKš¤k[=™93¸qz 48Áf.8ÕfioûÍu¨mFŽF_ô,J\c ç!¯xažhËMeñ†±EVõªØؤ*c†Ônã0œ²ìae—B(k ±•uÁöˆ±ž+|K€:s)" --­óVé—7ßΗ׿Ñj~µ˜SpC‹‹¶u.Ñà÷ ºš¯‚‹oL¤Ø'Vwvh³›‡—ˇíñál„å:>üè¦z<;öfpOpÉg[ÁÁÿê$Öendstream -endobj -1428 0 obj<>/XObject<<>>>>>>endobj -1429 0 obj<>stream -xWMoÛF½ûW t©HŒ$˒] mÒÂ*Œ¹¬È•Ä„Üe¹¤ýû¾™]ÊÔJ.Ú"‰cQÜùzoÞÌþu5¡1þLh1¥›9¥åÕ8Óì~’Ìhv·ÀïSü«5müód?\]}ü4£É„V˜šß-h•̌ǴJ¯Ÿ6t°-í•iÈ©r­¨±´±uªI҅N›ÜÂ_רºi«!5;Oºá_hPÕz£ëZgT*×èz@Û®UA¶’“9Þ-×Ijͦ?¬¾]i4¹I¦ãzpÐnÐ³8ÞçEáïÔ+ܓ+òí®!•½":µÕd_uMnkªl£M“ÏwKëÚ,(œAMŒmè]ä8:”ÐNãdî¨Rµ*5¡}Þì(…¥!)G¹/”„Öì-í¬k}½Þï´„q»ÏM†Pèþ–lMËUäϤÎ_?pQ¹„ø¨©°)rqíÚ °kä(–.”Ié•®s›å°P “ªÝä¦åϑ{ S*}2 ²u†Ìa~­S‹°8>ÚiŒ`v:äE­ÄAfK˧ç!ò¼!Ô¼fg¥6X$ð1%Uá¬á-ÿ(orÀá†j jÕIÏdI“Y’Qt1¦»$ºßÙ$ kúõa‰rD._ðLða³i‰R]¬㛃#vo˜*KÑ HתA¢ë³BJA*ë\¾F0H;'߶ 4ÓÎg¢£ÀuKªitY¡O0{?Ñ®ã®W@z“׈Ð÷@0 µšÍ @™'ô€7|sž)Gߌ*Ú#ÚE»¤‘én©¡íB¤Ï­æãTÀ‚e¡ï™™¥ŠZ«ìÀaG~/;ãæñÝ¡ò‚]±"Ôö5ÏPÕ6àr“§ l֚L™ô0$·³mÁahJ[!„ôÄvä7èmØ÷ñÓ=M ʬΣ›™ï§irŸÐgõ=7ېÛ?³ÛWöÑtõG/®â7}‹¹ÊO*æ{j Аͳa9k l‹&¯À?ORGhEiLy‘O¥˜6EÂqzºÙkž¢d@ëO´2¿\ªï]_ª}ÃBeDë7¼DÉÆOē‚r¹ëFKBÊôF!pîÎ^ëCƒNêÖ¿“®%&‰OŽU' ¹ü²íyîFâEês!ímý}[[4‰”hR1ƒø¨8ðåŠ~aŒÃy‘é*nÁ½ó1Cù驞sfQ~Ž,¼¡Œ±­I5ôUV©²¸üv‡Ñá[ ˜¿¡ß0§6µ-/*¸ 4žÇ[¦A 4>”§·ƒIwµ59ĺO¾¸ïÍ®À ªìÇÐâØn5Dìd‚ðÛë¨@‚Å€vX+H£*ø²é™ bw\‚öŸ7Ÿ·‘ªÜB0¹Å;^ŠðX¼»MÅù¾‘³›“@eƒÖ½ÎMZ´ÙQ€ŒÌú"dsAÔÖñ;Š^ž–Ïá8çYkŒ»ÔÍãӗç([f*ÚÕú¬ò"e ¸á+?ÇD9Îl -ßQ'ƒÇV*³u¾E.~d·XeG]ûIŽ—VŒpŠó1*ÌBü¨Ÿ»ÍÏoi¡õ%d-¬e r ‹Wç Fؒ»y8IˆOáÉ1T ~ -C;UUä`csÈX8»ØF{LŒ>³=wʈf ÃÐÏï4Õ! e¸QoEMá®{ü¤$ªÌñ€¬WDãõ‹êYvSŸÝhz‹™sïçÆÓfˆ ö,ð‚Š 1É¥>'.pÌÃþŸæ]5Å cáV -,“#H‚au­õ–UŽï’¡lcĝ -z‘ K=ת×CŸÞ%zæb?Õ9:GBøwŠ½õQRY #¾„ÊžJSð}¡£~b¸M˜7’¿ÌoñÿÓÊWªãQ¾ŒË÷€èIÇ?“Œ³ïÐ:Râ"lzøq±NX+7v#ãó$~*í#Ñ¢ :Up: p¾“U9Pý㧻p žÌpi¾»¡ùôÖßBŸ>?>Ðoµý†Û.ÆrÚò¬Ävdj2ÇMF‹ñ=/Xÿr9›-fÉb~‡µŽÏÜ°©_VW¿_ý :Ù>¤endstream -endobj -1430 0 obj<>/XObject<<>>>>>>endobj -1431 0 obj<>stream -xRÁnÛ0 ½ç+rizˆf%Ž[lvè°!zÉE¶éD-y’<¯?ªIš.†Ámäãã{ü1‘Hø‘ÈXf¨ºI"d2 ¤ëœÿ|¡y ¬RÉ׫ÀC1ùðù2GÑ0V¶–(j0N’ ¨f !¯6Ti‡€ÒYUWʨºvä=ùÛâ™1RH.óE.2F™}iðbCa´î€“¡0M¦(•§úo0lgu _ªë[‚n ÈÔÚpe²½Eؓ‰°uÛ§p_¹äÁ¹oïlÙRçž´©íèAŸ˜ÂÎÙ¡÷¨-16Àu~è{ëx&$7þ=-S_zEXU¶/h•y¨p՗µ½6;(ŽÕZk±áhÍMà·;ˆ£ZÅçËT¤‘5K-‡6è×ÙM רêúnTW*žc<ó÷èTµ×†§uØ£;ƒÐo Gw°W?é’xIøSè«I ±{¬;ó0½ÔMaû ­‰Žù®•5ML_½x¹ Ø½Å·³;Mª)(Ýú“JëÓNɌ—y½„\åG‡7÷÷øæì3Um5td‚Š}#Óù¹`ž'w'mÿkÓ<y¶æ%Ž†¤ëS1ù>ù ïÿ;endstream -endobj -1432 0 obj<>/XObject<<>>>>>>endobj -1433 0 obj<>stream -x…WkoÛ6ýž_qá/MŠDKÒOÃ햡ȰÆE: À@KTÌZ"U’²ç¿s/ÅØÑV MH¢îãœsþz2¥Kü›ÒõŒæWT¶'—.oæø\Ü\ãs†ÿ^S}òãòäÍû·4»¤eW®®ohYŽ_âNyúÓZuQ{šô{׸rΖ_äéuzãb¾(fxçt^L zX«H -–]:ý}:¾ ét8>».®øøÃZ[RT6FۈãÚ\Ö¦Ñd"•Ê"¾¯½0gi’ÌMÈùt¤Ñ*肖k?§ÑQ0mטz3+Ïðû©G,6jM‘³ŽÃ¹¤‹é<Åì¬&ÝMkp€°†­õMTV»>4û‚nHÓ¸]:7„ ¯ÖE -ÚVsO}W©¨9{°†3l9h¿Õþ|@\÷‰V}iì¶:îœß¤8TYꎀ¼jh¸~ÝÝ~"o®;¨œŸ·®Ώg£TñÈrjP¿MRt–ä%Æe½¬6lé^µ+%õbíÔQÔMÃ(ÄTŽ#§®,{ÇçYGU™d20 VÞm´ -›Ùȑ¤XMݯç¦ d\p³Ø»mµ€1ržLCRK)H^µCŠ¨ûЮª„0…·FÑÝû{A¦_U.rß[Ëï'"pN¨L²VF¾‡(Ê‚RwñÖ j¬‰É=ßs•F@£/=ßa˜¹.8‚Ô&ρ Ø>€ ´ŒÝ*/ õ‚‹µèçwwþõðñvùŽ.FîÖgZ 0“1–ÚØqrCCÐíL\ÓÎÔëЍTÍóA˜ÍÜmSÿäŽ:Ô/Þc˜FÎqk$\ßT¨Iª[v hÂq®[㍳ÒÞõ…£žXƒm…Zb€Ë ×{‹µÇŸÁT`äf¤s×ÕÿŸ0̓uH=Ûp ýÖc&¡f¤î… Æ´hU/Ɔ´‚QÖjµw-x|0¶â‘Â~•˜{ÝÂÑë$lP«: ·R @P žÛ9ˆ@?&Ä<¡\*ÑGCŽKH—‘ōîn$4VÐ{½;6‹0p¶Ù˜ go¹D§·ðSkn€|ªô“©5hÛ-z•D4Fé bc"`Ju^•ÑÈôBü&ØW½"„¼£Êí2ó•»åäˆAª¯aœ1ÃI·“Õbô<Š¸ˆåÔÏ·hzI| - ÆaÂ×uБf ©Íc=gßY+yÀ8qÅI¤²Ù¡é=£•Ó?0ÚuàÇàHéP·ÛÑ@7ÅK ÂáEAA#äî–Ü‹ÔÊm1Îó«Åöê!ì' ©a8! ð(ΓMæF£FAÓ|Êk¹šË_,2~>¼Ž 9E×ÉC3V fY5t®ô -/ÿUs«=0õHœôù$OÞØÁ˜+njc¨!æ `AýHÇ!ß̕*-¾tm§#w†”0\XúÂ%éõ¨œLÛêÊîfÜ.DÂysÃ^ [E×ñIx~Ãi²Ž‚™ÏunÝaíÜîQgh;Ø4Ñ,s “ÑݪÆ$œ%´uË\Y8žêÒÆfät$axX>wÆðȅH -í2hä èÅæ0Á¹¦o1Á>Z!Ô~ZneSx6 - a‡ h¸Ÿ+ïΡ¶r{ÞÀ¸µ£#¥ñÆî0x"M6­l’Žc7HCdí<ʅ?Ž!AY²õ¡—j®œæn0 -ŒÛ삼cã7c‘_³Á´[g²S_Y=)ÔëqfK2g…P ž¸c$Ƒk.—,Ág€sq¡:ÒüGyÉBp΅–÷€¼3æúÁaq÷F\§mðÍû›Ã—¢éÛyÁ_¼¾ñ}kq½(®¯nðý Gfßq ï–'œü7x —endstream -endobj -1434 0 obj<>/XObject<<>>>>>>endobj -1435 0 obj<>stream +1148 0 obj<>/XObject<<>>>>/Annots 463 0 R>>endobj +1149 0 obj<>stream +x]”MÚ0†ïùsÜ6›ï#¬h‹´[í–H{‰”ئqRÄ¿ïŒɀ‘¿ž™wÆNþ:>xøó! L ’Žçz¸2=~ÿ ˆóŸÏÍ®ÐÂÆa(! \Ÿi %$ᔄâJÈ7`q %ø^è†LäŒjä¹9S­SŒÏÐid³Z Š ±bLa“ÆPBž’›Icˆõ‚ÌM˜hë%9®ád2jÁNfF qä¦Lcˆ^R7bC¬‡3äI9“šÑÀ§’œQM7æ*ctëçwe9S/Ñ]]Ψæþ]f;…8Á|xR +´@S`ˆS°†&¡ÄëGš4†Ø‰ŸÑqM"gTSÜÌ*cT3Ÿ.ì¬2¦)Dw±¶“(ÁóŒð<ðß Ø9ËÂyùžãí‡b‡¯K’fPÔö-Á•êi­úN×CÕ7Z}+þàÞ]{Ÿñθû©84Ne×C¥U_6ÊÀ^(ѕ-4j§A+8è3ôÑôeۂ)嶄RÕ7wÍ~@KýAØ\ôîºï¢87&µéɅÏ~8Ön›£h/ „¨]øx[-6+l¬¬1OcÜÑrÊ,Óa’årÛ +ªðŠŽ…ê͸3™wÞ +ü¯¯ÎÉs!L›Åûrñ`f-Oþ'jØvúlµÇ†Ç6~Mu„×N›a«DË[ÈËuýKwÇ}§‡Ó,퇦©ÞJõ^*;Ë_|”ÆœuWÃJUÝåDÇF64ï±Åln1Žé Åi<žr”áÇ0‹ð> ˜Rܪp>ÿ­ÊJ£endstream +endobj +1150 0 obj<>/XObject<<>>>>/Annots 466 0 R>>endobj +1151 0 obj<>stream +x­VËnãF¼û+:›ëõ ž{³ìfÉ"k]r‘Mi"r†™Z+ Ÿêʖq€80dHœGWWWWóϋ1ð7¦Å„ò9ÍÅ(áÉý¿¯Ÿ.&«Y6¦Ùt•M¨¡|5ÏòþWM·²Ÿfù*›Òt¹À÷ >Ž©Š ã|ŠC/,ä“lþôùÍúbøqE“­+`š/–´.#<).¶ +–>T]“2%­Ùº½þåæúÇõñðx‘bàuyù•UIaÇÔ(C­Ú²O[§4÷[' `ÁÖõù.*µNoºÀ%tØ¥8TX”6TÛàÉVÔy®ºš´©,¨€½·ãº°[t´²ÃE}®ä·@Ñ`œƒ.­yhoà.%éõ=bÁo(¸#yÛpØi³¥ZïùCJå»OeŽ:àÆÒʸ_Yeù ŒbAîô̖ͦi¸$ëèñuÏ.A¥ÇyºÆ8[U4x¸þ¢Æ:~v©![—ì¨3úûLÖ+À™ç4˜ô`¿ =‡Ô:WpäTÈt +ÚRÐRkµ‘2€ÐÍ1óV5Eސׁ¯hBûa8<™—¥Ìºm²¢sIDrn:]—¡ÈâFåôkª°TJiµ¿¢J;Îu(Ž¶ÎnjRœYOõ%eCh¤ÒÛî9ЍL©BaŽ‹`Ý1£5®'¿³]]’ê‚•ä ¨ü(z{¸ëL3‰ð$zrd[v8ƒ¤üÑnNJ£ºc°ßùNÕd˜K/LTe£Ž«ß ±H*%ò‚šœµáû´zRT>˽¤Îò¥Á@”Ÿ¶ž:löޗ;‘ˆž™Ò2¾åBžm¥ä>b+ T6jS³°Àü‹N2ü0µ"ϧÀbçh½À±L›^}1“ïQ£®€H=Z>Ö¦iu aJ‹ `˜ÁÐÁD¢µ½Nˆë÷=ýý(eŽ6—Ñï=*Ï­‚8ˆÿéä:z°›Î¿æSøz.ððÿ/=̯6VJÓÑ~£©t-š7ڀ4‘B7󝶝§;v^œ枚LªÛèí.Dӕf‰VÝ^Úw:$ö%XÎUvœ””†Ã†1 jNƒEÑ» w¼ƒÄ‰ýP»-,O{ *=)“é-"iváuúzÒ*‰+>xJ¤aH*؍û.Ýð‚Ù¢wIƵnZë‚2èöÀOlfðuH!Ð[N&ÕÁr+ÅN~:Ïu…Àæ앳àÅQé´ÙÇý¦ºéêhˆ}âQtòƀÊÊ÷³v;«—‹•–nŽÃV7˜I¨ÞŠýñ +c”è8Ô1ú*ü!Ž7I¦liØ' æq@áJÈ.úLòâp¯ñÖG8Š· ?.¦û4OÓý_߄¦ËQ¶\NÓ¬Ž“þ§õÅoè¨öûendstream +endobj +1152 0 obj<>/XObject<<>>>>>>endobj +1153 0 obj<>stream +xWÛnÛF}÷WLòˆ©«%¹@’4 Œ"—Æ +Z#.Š%¹$7&w•Ý¥ý}Ï쒖Â*AmX–ÅÙ¹œ9sfýõlJ|Oi5£ù’²æl’¬×tx±%þ˜ÐÅô2¹¤Åz…÷«urAVRÛ N?¼t¶ó‹Ùƒí ö½)Íf‹ÓVxŒÎ¼Øœ__ÒtE›.×SÚä!؄6Ù襕ÂKò•$פ”]¨²µÂ+£©PµLžn¾À¦8ÈÎg«d £M%‘’ÀͶ–';R:ø–ß‚‰#צ¹²2óÆîû‡¹rÞª´å˜ ]Á¦,¥ó´7-Š9{h8 ŸÎ“Ï·hëzOÎÃLhrRRev!¢Ù²;G¥!oJ –ãm­È¼ÊdB×0æ²܊}0–D]ŸÅsÉËdѕLNq±H¯uœÁ‰ªigÚ:§À˜‘•.©VwN¹_"žºd8§Éb>ƒÿ‹dß¨‹º¯ÏemRQÿݗ &?†ÕÎػҚvK¿Òۛ7ßúÐϦ±A½/üþ\!÷o°)[®ÊÜÁŸ6?Ž ËУ~oz ÈyWÒ|ÌbI»JeU‡ ðEÀ2 +„þ¤{zo´¤òޓÈ2Ójd©ã¤½—öàf%ŒÐI¼(Kµ)ÑR-IÆöwy*~L…†²´='t;zgë…ßD 9éƒáV_áéµhRAʁ")‘7/>¾ÿóúêݛÄóƒ¸Ì¢\z¡jwû´oHGŸ‡ üùøõE7S#pìPÚyàŸõó6,à¤6¾N‚¢ ä&Œäƒ›ðàO†ñ¥L‘–Sd(‹Ó®ÂlY'ëbÈ𷜉k1Ô<}Û6‚ÒGŠÐ-¦^Ò¶@•mÝVfªPg~$;愆IގxsYˆ¶Fè–A_ÍÛÍ;Ê´ázàwÜ:;®M&ê1JŸVéxäöé°Ì×p×T©4<7QîDjP¯“Yk•‡°HïA9„“솈\Å¢Nb +æ#T†Ë0YÛH=äħwWýsýê姏W›æL'ªY>Ÿ/:…é„Ïvº£áñ, Jx˜·#A¾òO ¸ÍÖX/0?¿Ü>Ò»µÊ¹4SpËì˾Íøbqþ¸Ê>ˆ©)­h ÙÅáCÛj7hÞûß9¼æ6×üPmDÂtÃ那@õΰT÷Ø0š¤µÜ0é„zØËe៣â ÍkÌ ÷þ±X½œÑ"ÅÆJ%ºVZ“aBÐì¡ïçõNì{=(Jî¸ F7«„ÆöÐòP>Šf'í!0¬p!á&ÍC o¾ïÆQ¿o½ieV*‚„PÈ‚Ž÷’ !̅lx'ËšŽHRZúA´QB¿ý0b]Ãn(5¾zD¯¢€A¯yw²Ñœ×ã¤ZqÇ*~€&j` ä+ëtøy¾Ï¸¸ÐäÑþÕòí +ã ÏLÂÕȔ}P鳱͒ :ß7p ¯Q>ºÐï´ã ƒ|º{KBVbÞ:*kk=`ÑA ú¥ {”¬בXy/ö¸ ycó¨OŒ°Ï0gšï=Ñ#‘Í h. h֘(VL»£KPÃ# ò{è _ 'Á=ø;lsq3{hö_¢ºÏó€ #Ú"5‹E$1ÄÀW»†×{ó}—œVº­{\­ÊÊãÆTÿk«²;ü8A¥•W"Üäºk ~åÛP§ÓënÓN—¸·¯ç´ä+ðò‚/d×Ïß¾xN¬ù‚ f%êØ'œÉyä|5Á…/ÿŸ÷íŚÿsXඍ#—ìèÕæ쏳àÇÓendstream +endobj +1154 0 obj<>/XObject<<>>>>>>endobj +1155 0 obj<>stream +x•W]SI}÷W\݇%@@÷ÉTâ®Uã*[©T¥j«™é‘Ö™iÒÝ#ðï÷ÜîAc´j@¹_}î¹ç6?bêâ7¦QúCJŠƒn4ÓúaîðG—Ã8Ši0á}ÿ$ꓑ”Á¶ ï§GmۋÑimۃ}mº+ìi/Ֆƒ!xÓ“;§h’¡ÚáoRŸ¸K“¤uë„qª¼£Ìè‚T)]%ºÌÞMî:Šãà×îà׺ú2ùôMf8Îs½`υÊsšJJU–I#KG*£•®¨²’®.oI~yONÃÆ:£¦•“)YiU"-bn#NØ¥voq­¿µ~ á8Ž¡P  öÅ´:Ò%Æûy¡­ˆ¾Îà¦,¥2ÃqR2×ÆQÜ?í¸dÑeF¥v3.}ÃÌÍdI"…=åðÃãAÖ5Åý¨Ç5ÁǞ…|ñ0uŀnª´m[[6¹ž×¶q:« +• “¯£õ¨S¥s™é*Oi&%‰’€¦YùZ~ž¸´M¤½y¯äґLÕ+¸î£@ åäÚCdÉêB -ÚÀ§K§Ì›8ô{hêI4Æ+ ¤­ŸMÐÀ ) +BÐŸ…@‘FkGÊšN®‘w¬(¦¢3UeÇSˆM0v¯%8éAxú'ÁKŽëρl×Ç鏣^8‚\ŠÄ‘]•N,Ig;ɺÔGaF`*ÝB‚€U©–ÒFÔЬ$pU϶TåƔzúˆ‚š¦w•Jåö<ñàžÑ-Vç ‘ît¨Æ<ã辏uSþfß[î,»¥ÒØDùýW°yãP~ÓÕV•EeAEÎƌü…x¬(»Ì÷à é)„§¨,úf¡C8ón”¾”0.Wè)Œ +ëç²+*%ä‘Xב#U:i2 ;"=wJso˜–^BÙÔÎe¢²•7¿¼æñ1ÒÚ-(x°€y!ìÈKÞ:tD7UN{Ò( –EZ݅ÿ72µahjNuù»£Œ-X¹ê©Ñ"MЇú±üø|ÈïÁè\4I Wðñ,lg +|aI—¡`ÉD‘ÃT%9UÈc‚ÌS&Tn À°V<ÑûV­L³ðöüó‡sº6ú +Iuâg¬ äk7íQ-Ø¿rŒÑhˆ/&lw9õ§ÉÁ?ÿxƒÂendstream +endobj +1156 0 obj<>/XObject<<>>>>>>endobj +1157 0 obj<>stream +x­V]oã6|ϯØ-ê±lÙ>;ÎC»æp—´µÚ ¨û@K”ÍX"}$•ÄÿþfI+gçãšMX–ÄÝÙٙ%?¥ÔÇoJ“ ǔ×Gý¤Oãá8Óèt‚ëþ¬¤2<§øú̃a?MFÏ=1-x—õ.F”¦”•H>>PV÷û”åÌÐZU)ONê‚DüêÔR‹Š¼!¿’´±&—ÎIwœÝ ڛ]´ézQÄ{m† ½»õõ5÷ôµ„—õ©;£”¬è\^eïÏèCI[ÓPãdÈ;ûã·9¿­$)Í·Î˚éð^-¶T©5^6T³&áú L‡¢;ò^ԛJºž»µ£®óÂúfsHÒa2`$.·jƒ8†jÐ3Q/•È®t 9"ŽPBïbJ)(en»ÃQ,&³ŒËy¥—[ +‰[¡*±@5&à· ÜÞJ{—I™@€ò}|’î +™&Ã7HÃëE^)©=u?R|iØV íÊ8¯E-‹ì†”ÿ ¦ÝÊ4UAKéi!rp“)ñ䛘“¶W…Ñ?Ö59SK¿â¢•[¹±Væ¾Ú¢LÞv¼åùÒxîrhÞ祦 \h•3´,ƒ‚ûत;~±Å‹pi K…þ$´Xâ2’ãhÞqM¾"„»×ãëòz9?nµÜ©/_"»¥JÞÊ +òÆ*¿=T^©à—P@Ԉ•Ÿé<úLáܝ±ª( ÐB=wì2á¾ìÁ‰u%4C¡»§û.{èöa;;¨Fª%†±THy¹E³‡˜HÜÎCröÇ.uKâߍ?»}„KE+a³ñ +ªíþþC;rS#ÀZ&”­ÐÃP£6(ÖØ5¾ùi£»‘ž¨u7?ŽU¼`›Üh ÑpÚ°tP£Õý®¥qmëìg•¸öÁ'Ôëí[¥' Ê¿í™l»Q¹¨ i#þÙy0Â>ƒ¨y[“=Æ×lU¨[B%Ü6¥1ŸªJ¾j†‚õ' ž/£K2Ú=Ñ ÍÆ %‡Ì+q+!"¨®Sz¯À–n; Tƺ¿ŽüRU,L=f4:'Ô¨â<¿iPcˆ/详„û›=¥tŒÖ&ÙCøBºÇ¶½€øw#žbB@`Éj!ËF¸â})«ÌåE|ŽJ‹r™ùØ!¿Ýȳ'ˆÚ ñŠÜë…t=Žã´JߍßýMbOí¥55Ìx~5;!Oø¯ôô>|\fác°>ሬú~Üh®f½Á IŸ'Irà¶7{áöÔ¦ÑÁ[…rkŒ +¹|¹ÖŸÏæóë—çW׳ùü§XJ»¦Ét·il¼_g4ÇOt9“¯Ÿ*®}؅ÖÆbo…åÿW@ÕƧÏ`ÚS8½^÷°WÖ°ã|PI.:ÒÔ²ÿ$¤¬ä +/Oš ç- A‹f‰cßÆXÿ] pº)é§ÂÓ!Ó4Nfo?½{K¿Xsûйɛ§ÁNâ•ÝvAwҟòAá?œDF“Q2ŸÆƒFšrØ÷ÙѯG_g.±endstream +endobj +1158 0 obj<>/XObject<<>>>>/Annots 469 0 R>>endobj +1159 0 obj<>stream +x}V]oÛ8|ϯXä¥)ਸ਼ã¯8œ¯Â@⦵Æy¡%ÚfC‘®HÅñ¿¿YRrµ=1,‹ÜòÇIºøëѸO#ʊ“nÒ¥aÿ"™Ð`2Æ÷>þKIk~¥ÇoŸOúÝI2 Áx˜ô© þp˜ôê'M‹h0òŠ_ÑŤ›Œ~÷bÜûuÃezòáö#õƔ®v4éQš(]J³³åVxš­)Ý*³qtmÍ;OK[>ýý>ýŽêaï<5ÍÏ°ÚXÏëi…Ž„Éé`+r^”ž¼%~ùD§û­¥}i½ä픖d×äKᶧøMš‘«6é|[Đ;ê“Øeèñ ¡²÷.@²‡7ïÉ+­Ã¦Lè‚r»7I½²? X™rÆU¨ÍÖ£"礴f׳éçù—Ål‘ø*àW·Ó¯ ³Á»çBç«ì)âõå!Ä(„ÒL€V€nËF#÷nSÚj‡ +´µO„Z8ü·›éõý ­mI¹ôáß'´ÅJÐV8ZI vU–Iç֕Öl©Z˜Ð&¿µ•#ŽYtÊK×ʋvè|¯rÙ!g©‡J°…´F’ÔN†$[È.iWڕ–E(ž³ÛgYfXMÊ'ô/Èl¥‘X#V…Í\Ár¹lådÜs— C+¢”s• y‡ãêÎsÅMnwhÙth­^BøÒÃÝÍtqCNBYÄ5PµËJŽú’èxVÒxá•e¥€Sg«2“€K¨=‹ ZDËw²tظg­ò€)œ’e@f2 +ʿโ¢®•Øë¸ñ‘¼ÐÖ”Ô3ÂڊgÐ{Ö¢ ®}Œ z¬C;ʶbçe^°Úl„Ç‹ê͸ÈìNÒìúO°.ÞZTÚתC_1¿´ÒëêÝ »ñÂàe³LLDj_°§¨ ü Pã›-ºg×Ǚ ²ª÷Ÿ`U ˜‰9 ’Æö ýƒ‡F„ïŒô+e]üŽ\±J2kÖ­¼vÇÒHhÚTðpåÞ ЙXˆÒ{n-g0,¤dƒz¨=‚êò#WîÏ͸ÚÚ¨νx›YMwòYjFúÕ¤X¸¸¿ä>ÇÅ<–…0èšZfÞ%tU•%d£o¸j·³¥w4쬐­âêË·›Nø|¸ûgÑ¡»éü~:ïuZüğáµ(gžöÚÃ3q’ö'sè)Tgì{Ã!ò$±";ŠþõŒ„UxmšVF$ÖèC+m)q2V±ÈŸ1ebŽÜ¦‚H*03…ÁUíÊeN:L&Ûár½Ü »ÒÉò™½ýÉ(À³Îaòö¡Î6>ÞkÑv Éá|‚öF}õ—>ŽËÐhø-¤‹#ñ£Í3€,ä‰49jiÕPE‡+ȸN&ì•7œ6A@-í¯SŠ6Àò ‡tm°™¸·¬µ„ÉkÄÎüiËfË„{°³ømB+L¨Ã¡$7ŸØ²ðC{þ–µ¡ÎS¦O‡¸ÔÅ6—˜…Œo3GgX¬¦-A{JÁlÕWŠv„9.`Ÿ(ý9¨»RÁ~T²â¶³y4<ò,„³ð(ÅèÑzÓ«‡³BcYÍØ6mo5)öžå”Ð-îk‘©xÁҒOÇ9¼\Vªê`4+l W/Èëw¨­iå yÜ×Èfõ\b…Qá«jhúp;©ª7Â}}rA#?á|1½¿œ²m‡ïâ^üê¶Á)ϛ çãîG^ÿÿéÁxŒG\£±´×ç7éÉדÿ`„ãúendstream +endobj +1160 0 obj<>/XObject<<>>>>>>endobj +1161 0 obj<>stream +xW]oÓJ}ï¯åå©1ù(IûÀC¿Ð-miR¸HW{Ml¯Ù]7äßß3³vn®P‘c{çãÌ93ãŸcáߘæšÎ(-FɈ޼™&'t|2ÇõNS.NO“ãþýóåÁëw§4>¦eS³\d3£-ÓÃ;gª`ªo”;[ÒÃÍû(XRtQ]º»xµüÇ4GÃÉ—–¯ñbÍ´£°VŒ'õ¤L¡V…¦'£ðܗ«áJy‘×î /Š#EMe~ÑÚú@Öt}wO[ÛàGQP¥ñ:ÂHmY›Bs#Ž§É„]‡µf«iŒ°vö›SeB_pªÝiSù `MÞO© pN$t¯œÀ¿çš4[ášMË+”[×ó\Z@é€ }Ò>›Ì€9²ÖxÈž\|Y|"¶ÂGç‚Pfµ§²I×1,Uj\0þ)BeZï‰ßú§„Þ€PÁaå÷ã|æ}¡ÙŽ¦‹‡»•ªjTÁñã þ/•ä¦V¶ ¨Bz7u,Ý®öÏJ"¶„ *Ö°‡G¬¨ ±Ï±át1¹¶éØçS/P趜V´Yàám©ƒ)Oª@-OÁنyL‹hèeÌaƒÂÆRØÖ8eóîíÖnG¦•¦Z;†0¯¶\¢ç-)Bù(7t„»Ó©uYghÐK;ƋzÙ ÊM-‡‰NUß4²ÚDN)²5˜™ƒÌѕ‡ƒ*c_\µA¦«-•6Ó~€çäkšÜèì™{˜RbŒ °å>0÷ď$A‰`RÕeàkG!Ç-e&ÏA]ˆ]”ùgêíÏ¦ÊlBŸ´óÐ Ã܋j¡Ê•¢•À]iBkõ„º8ÄÏRæfÁ©Và"îçiŠÇÃÇW±€ìA—¢~ٔu¡K êFÑÐáöëÑó¼Òa£ÉïDb,±.z¹F®©Bg°RÞźr0(k™F@ª!=lË$‘DRpô¹JCÏ{,µud€CáGL¾åÓ¡%ÔŸ“¯Ó A¥“¯³ã#4T2c=¢±·–X· ¦çWúg« @B¾©kë‚ÚE?(xçhœÐÈ +¿‡ÚzoX^ˆ£…‚m <>gqHÌNÿl´ï§ŒF‚"xØ\JÛcº‚bÌa\u…Hµ?‚yÁ°/ *Ÿê“6V©£ èdÇßã€Ì†B ANŽ Õ1tÂóbË` +P‘`è§9©{U‘œ¥ {ð·xºF X `®`î¡éÀYÔûhȈQLcXÜ Bk€  ªç»5 zìB<ƒi ³NJðq=Ó­KRܵ}"—€²ßÞȯmSd”®5ÏÎD‰jeæo™ø@ÈoœOy1c£IÐ3p.4Ð/C.3AöòA@{ÒÞX'‚«Õ÷h™â£Ä‹ ú­Ó>6AW§ ‡•ÉÔñ -JÞTÓܾ* Vy…x•ï9oõ{'k— ¼GD^ª`aœ'’ä²íàKF˜Ìï‰bú>ÁO ‚æʎ€ös´T«¦-Dœìv7ÇZ¿ÞVô¯º0©‘’ù1b™N1#Zah#,G½|1ɱÐH½w ½¥mœ!° ­Ë6µË8֟5ÁÅE‡÷Jߧ/V\?Yl2ãe¹Cˆ‘ö;(±«µzl<ûtOÞ¢ïbߒ.Œ²b  ö?böÁPýF“Ùê/l,±¯ír}ã™ìÈòñÐóB¥ • [¬| +q …·«g[‡\J ‚Õ¡qZîÞÂÐÃ7‚ÄuՐBÇ.iì#Mø¸ý»Ù]¡ñi¡@ð½­8†ý™/m”·ižú¨*×x×̌¸» U*{Þ9x“åzc5Õ®4Ø«6¼Dì"•²hº.¢üv®yS‚§ªÒ¶ñª &ˆìtÖM V«òÒ9z/¯n¾ü{s{suDryuvÙ^~¾¿¼âé&ή¯÷‡…pIŒ\^ó‘æÊ&´kPÏM»‹¥wç"Rùq‰áÈᄌ~~‚\¢ì©6mï ‹(†zÈÂÒÍ®À<§ºq|w»W/•øAƒß ·žš  ç +wÐsê0å-¼cJ÷1Ó-îX±¬„9ÏJªöGnÓû߯ߝ´aã¾üN¦4›âž½8ûp~FwÎ~ç…æÒ¦ /OÂgØÎG§ü­ò¿>úŽçÇÉ|v‚oFœOÙÐÕòàãÁ÷÷Îendstream +endobj +1162 0 obj<>/XObject<<>>>>>>endobj +1163 0 obj<>stream +x5ÎÁ +Â0Ð{¾bŽõК´!ImUð TŒàµ¤­¤ØCü#"ËÀ°Ëƒ}š†A–¨ÌJhA!T]pp%S/S„™´šl +ŒAÏ`"ÝTIkè Q +m²ksjôÁ/“‰Øyó^'‡h½Ûè…ä—ÿ`Öë¢uÌÁ¯¸wDÝÓ&‡¾û*.y!…Jê1cü»Úkr!ßÜ0endstream +endobj +1164 0 obj<>/XObject<<>>>>>>endobj +1165 0 obj<>stream +x…WQSÛF~çWìðÌaÁ4oÐ43<Ĥƒ;}(ÎI:Y×HwꝄñ¿ï·{’°EšN&ÁÁ§ÛÝo¿ïÛÕ?G šãς–—tuCY}4Oæt}{“Üàß%>_â¯×TÈ‹ù2¹~q¿>ºøü]Îi]஛å-­sÂ=sü&;}¨ï^tN©wÛ`소¥ êT­ÿ–'ËøäùÕur‰gO_´1zK®ŸŠ‡¯i±è_.‘#?}¹'«Û­óßørfrHQ­³RYjJw´-MVRVmÛ@™²¤²L>W™Ðr¨Ze¥±x ªáÎIžs:_\Åì‚;ÏTU¡¢c)IËÇ ­Kâe™³­26¼]ٖª% ½VùŽZ‡€…öT˜J“²ù…óHÝؖ׎ÌäL[jϕï…³ÜšéŽ ¹r +Òo)w¸Àº¥dU—ë·D"ÈĞ´”uÚjG*EÈ*w’2kUø’Ið5‚íM(¸ÔêÅà†.pqSU÷¤‡:¡Ÿ-̦óª5Î2ÎüíH†RJµ¶Ü8äPãTF…›V\­é‰YÁ|˜!®Í2cž»¬«QǐíåMrÍÔ¸·5Hjõ¸&f ™‚¬Âu^Wu’Uá]M+ÝÞ?<>ɗÿÃWRyŽchŽÍø¡ 4™–°Lè· ¹NE¿?¬ž<*³)Ž¹ùæ +ƒÀu/<<$óÌ>ÛOjxL1‰ñÐ ×ծՈ¾ah†v«R&灱ø«Ý5dðÜôIË2aØR=‰Ù«,6ÜîÈ1Q!8Î#ù ¼Òöˆ}¥v(tMã<óuß¾'wá€u[*º +`ö‚D}³Y=IÅlÂp$ÒÓÖi΂cêª*8b­z'z{]ÃÕ³L*æ…:Mp¼ˆª}> úíwϧžÏžÏ¦Œ”v»q°AEµ +-Û䯄ïºFäˆ*5•iwò½x&÷oÀ*w5÷±rdÀƒ?¨ŒaTY_^ÿP_X4‹wöf #Tƒi‰J3´B·lʁX—“ʪ÷ðq»XH¸VoÝ{ߖÐìÇç=Ü1³}]ˆ_ØSà¨< Ô»IøZ¡†ùô|õŒ=Ÿ”ÍŽŸB‘ÐÒҝëü>vhS„W¬_ÏQ(]Wå"Ç ÛÞ Qu>„}Ê'¹…­VhÌæ'e>N‰¾ZÓ'!ÖG4fâ{XgÄÕÏM j l*°sV´™0 Á¶_!øl‚ª×åóŠç1ìc[jäé{PWëY_-‹d4q,>,úõè_B]ÆDendstream +endobj +1166 0 obj<>/XObject<<>>>>>>endobj +1167 0 obj<>stream +x­WßOãF~篡J]â ÜKE€Óñp”BÚ{‰Tmìu²‡íõy׉"ñÇ÷›±s´UÕpþ±»3óÍ7ßL¾4Ä¿€&#:S˜ C:ž Ætv1Áõ¿…¦X^ŒÎ~øâ₆ƒæO±Ä öñÆêˆ`8\T‡Lg|Lîþ`ùɧ3 +šÅðd|1¡Y$ï‡4 î­×äWʓ‰ÉxŠ¬vÙϞ6¶x¦Ø´µe tÆWäV¶L"rÞ$ -4©E‚í–ü6çc49]¬uA™JñÒÑŸ§ÛÇ?nÉddzoC꧃|8ŠM¢S•©%֋ìëÌãVeµ_×f#ãòDmÅPbœ'“Z+“ˆn¥ +íµ•ÑxpÆVž,<ɵÍáhlpg²%ÅØèD¨J'Îo=ǾRë*˜eb*¡Ãe©aL…¡-3ˆ=Ǭh­5ÏÃMx:ÕéBbºŒÍÝÃõOÚ,Ó¡76Ã3¼à8œ¼®ü'ãØ AOìö ¿*d -áŠxØؗUlk_Ÿ0®gq%V°«al´ÔÞ3( ã=r½¨@Î ‹§Œ³·–­-åª@r‘%GƒFH)ÞDnci–.¢Ž?&Cþµ?Ðl…(}aÂgXfpˆ³àrjNŠßh¸Á¨Ù\Àb|»3Oó#½üHýh„£×*bÛýˆFóã^Ǽl~µÂçô§‚kÿ¾6àt¯7ò:ä±Uqƒ“Ù ØRPjq“˜g‹¸‹©Ä õQtì‚k* +“î)+E ªë‘³p§â=!n8`’i˜i騛ÂC‚uRµ¤&Au&…Œ(3 ‹ V½ºÐ˜…©rτê¾{ ÚNĦ° ÀüÈå:4±ÑÝ,nŒ_I —i̹:l„H\ºϏ‡“O—@mXvú§gU9N›êSaa#W.àŽ«Ö¿ÊT4B¢|¿6& h`ÄyyRéBQ0¸“ù‘Jò• +`µ°k=?®¬ ? fQ™GÊkÐÇB^D* 4¸qežÛB€êä­ÐybB%ăA‘ Î<—êžã´€$Dª0áOh#$É®hëªR7tå„ +WF‹Ä˜\5ª!•ájˆ´ ³1V` {ÌÊõkåK±Ì™A‘‰c Òx^Àe¼;¶)üïÕûIPpÍ®NÀ„: €Ñƒ†­H‘æšc¡ +…-¥ôes%—¹Bw4ë é Ç&DR¸}ˆxq𛵅A5¾ÞÝ?Á÷V‡½@œaÇÝ`7¥{í§w¿>I›qoŠ=I솵¬½ŠÑk‘ne.©Œ7èd¢¹0²¼US®mú^êbˤC5u½4BÛVGCb䘵Q»Ûï7­ðqC1…rÁé„=ê +52€Ï@ë9^Õ6Jí‚ÌåξëX•‰‡Â£;ÿË蟱}—Cð«°©x'ñ3"kÓÂ×TM,‡õ2é œØŠS´áyE¾53@mRwZžDsÛû6°ÐUgt ³‹èU¾Ú ª—6äo:qO°”b–={ +ÄéuÞ©zcãP]‡;[úŠ)#]ž÷v×÷³. ‘µJ§*V»Šû»Ñ¢ÅEk?¿K³æÞ'ôH9¯ þçkÔ§ÔGuÑrK•tPáöj–%ʕŒù“þ^ž‹&á +Ž" +$ª[WÿCas]x(Y iÀ DQAóyVÇnçȦÈ'Lš²ªU3ø Uこڙ¨DŠ$ÆaKí ­Ãu«}¼nATŠç‘J¾Q{‘ÊBÝã©Ë+“ ‘Q!†§ÁÔ®ùâæ!Þw=eŠ=]}™^´îw÷–)æ&‘K¥Œ±ôâ”ú“!ÈMߟWÏ&gƒÉ_Íy]0æí·³ƒßþ˜ùЛendstream +endobj +1168 0 obj<>/XObject<<>>>>>>endobj +1169 0 obj<>stream +x}X]Oã8}çWÜ7@j3¤-mGZ­DaX¡] + Œæiä&.õÆ¬íÐe5?~ϵ4 eŠÒؾŸçÞ{ÒR:Á_J“ ǔ­N’锶ó„/'4¥IJ£é÷§ãä3IKìÅÑÏÃfe2MNÃÊì!º¹@ЧËúLKJ“Ñp@cH;Oé!÷ÛNè!;¢Öç'‘­¥t4h=Åm|:Ü>ýyüðãà„ú) ‡<ˆéø‰§>\o-¼“ +“ði_ã—(´Ylßìlygé|ðýŒי¿žã$¾\lÒ|È;øù7Å;Þè?xzAï,­W·ÿ¾]Íïyë§Ë¥)§¢rÑL|N»s]Ze*ŸH/i£méñ(íÑ GÃÇcÊtYÊÌɜoä6šŒ®œ4¼é»îØÓ'·’VR®©ÔŽ^„µ´0Z䙰Î&tr›Ö¦“§n%,ÒZd+UJKº$åzuÊÄË£f¹Yv:³¶Z¤Ú°´ÖkY:Ü +G¢(‚mՍRtÃÅ¥zª |tš’TéY©mžŸàó f V­_ +•)§`²Ïòñ8¡ëàÍÓïçìG„mJÊv·tÁ½ ½Pv0IC3£7ÿ”L Ú(˜Ÿé¢Nz‹Tì I³¿…;–XÕʶ=…v Aá+tŠ2¯ƒEQ4Màé}ˆŒ|‚؃ÊÐ\ºÙÕÍ=•ˆ—…ÑnÕÕì’ød0NFœú3[kƒ;;ÉXhÍ`«^z$ O£ÞÕuRðçƒãz)D&9ìi`$3 +ÜÊHÙ±#¤€Œˆñ‰ÚCî6 +ÚZ ì…rí•[i£œpÈÊ¡¯ÿØÊc—Q®cOÌ ¥W%"ܛ4ƐCÇBf¢B†EdE–~´}–÷NbGùºB2·óƒ£öìWÈèr«Êg_С3#óCºC´eµTbQ FZ]™LÖOã½n ÏжëڃÜP4{kø“ ƒ,0Íi³B œ‰•„ÞÓŸÅÈ}í6Sžô ^®{W¼…PÖ\ ÆµrÇY-uÙßÍlíO3¸Š§­ü¯ÁG^¡õ3·¦%f"&!&e¨zVÒ*à >›Ð‹W‰m޷掴è2¡ý’5!9÷žÐ)«õä (bV‚WìÊ^^ç!ƒYzSDáÕ Ðz<÷¡ì8ìHB>Þ,<o4¨6Ù·\{º»/Ða³•Ì«0ö„ëÓå4¾½¦cü 1Òx2HÒ¡oPg׳3º5úƼÊð6Ìo ld¿>џœà§ˆüÈ÷\¦Pó±Ðyïh2J&ø}?LäGé„}y8øûàUÕV·endstream +endobj +1170 0 obj<>/XObject<<>>>>>>endobj +1171 0 obj<>stream +xíWKâ8¾ó+ê+H“zo<ºO;­] Ò^ZB&1$Ó`ÏÄÔûë÷+;&êÕ0½§Õ6HŽŸUŸíª¯Êßz>ñ÷)(Œ(9öÆÞlFmQìÑÓ4Œ¼˜&³u?ðQ/$í0yLAz÷õÐtâùWCÆ«Eº‘Åš×AmS@ÉÝã„|ŸÖ; ‰f1­S;>¦uÒ7¯*É +­ò¿D™k)ßNҔTj*3IFªT¤wh‰’¾ŠäE–Íw%z·ºÌ¨#ÀúT+i×o }1’¹)Í`ý¥7¦‘z ôZ¿`àEÒ¯¬“äTȔvÀl-Gé‹ë4¶õt"ttæ|$P«¤°³‘ç>ßÚóÀ£?3©(/¯XAº&w‰¬#ÕGî((¶» ÙK`¶$Ãóq5°‚Žfl«È¡¢ÅæI¨[Õà¶;¨IËZ`&Ì5ÄÔ¡‚æ¥]|Î1b“|•ßí¦!±ÊÐ>8ÌÑYà Çõ)V}Mo֙jÎ=´ÕF4›óg%ùGþÍGù&oÈêf-ïŽgÿ z¯Éùmzã×^‘»9©-økXŔ+&º…åÛÈÂd i{*Ié’Â.ß?æ +Ê_‡6à¼ÉÛLôNbø•“AÙ‰=ó° ®?àåeãluÇèlØ+d’#ÊXÇÜŽŸŽ±©âh*¨4²$ +„ N¤ˆsˆÙØò6‰d¹«s*YÈ£>#\ñ&²S“çU§¬w;ì…aGËRÃÍ ¦½ó&×lôƒœ9Zur×ÛiõßE¨÷fÅ·ã{7íß=Ϊ£M½hêSß{÷‘{ŽÍ?-æô{¡¿È¤¤•NNGx¸}=2ŽüÙYH£xŒ÷\Ú_ðké@$…6È»\ÒÌs'ñċ#<‰yž?㮇uïÞßcGè#endstream +endobj +1172 0 obj<>/XObject<<>>>>>>endobj +1173 0 obj<>stream +xW]OãV}çWŒxY¶Â& ! •ŠË"ñ°YZ¢VU·ªnìëøîÚ¾©ï54ýõ=3¾NŒÙjՂŽ?æã̜3ã?Æ4Âï˜æ:ŸQRâłõ_F4›Mâ9MsŸ_ÄçTkÊpïOï?½ÓÅ$¾÷Np¿Üz³::»Ñ%­2ÇÓó Í`ìb¶ U*&F´JNè[?ËÉןN¾ûôö”pxs8|w8¼•Ã·«ÏG#Š&ãx'º~Òµ£gãsR$·Ê¼®Éçº$…(+[Eªñ¹­WÞ<áŒ*µ‹ÙÔÙݔÆcŽ>jÏ&sIƒmïª$¯meþÆS¶r´ÖþYëŠ-SjKe**•c_ëÚ>;üWUJ…MT1¸À%¶ò¦j4yK6Išú”֍)Ïã §äsãÈå¶)RxDRð Òþ)¯ÉßH8>#1‹§üØ}F ˆÚ6ÓOc²øœP¦Lá$èÌ…}6Õ¦ GBøžÝ£Gö†– ٠і[¶„/i•äpžj¾Â˜J%‰vά +dlý…²ZmJ]ù/Âg”<þtJÂQnmarÜ¥% ñڝ´xèŒVÚlòµmêÜZÀkœok¡phã˜Ø0Îìó¸ö^—[„°|¥χˆÝ ¢?$*Ub¼¤0m‡\¨¬çŠÔº´OœOmKv¡ +]ŒÌ‰{ò:nÒV{˜ˆ¢+’ÆþL©Ð»&ílCexUšJŒµ[Æ7t0¹r£©Ñ +Eæó€Ýé°£L áv¯;±~Ûv­ +÷;žHÄjç®@ò-VA{ +á€05Û­­=ý@;-MôÖ F?C5D2QßÙm­ŸŒm„ãø2FñrÅ9¢­·ªÉX³R©¦žÂ|LàC’+ˆ¶ªvd‹w±âël[_€OÕ{"‚,©Z¾5\³Ùhˆj*¶›í¦V5”#ÄÅÅ_ƒá§ÒÐÂåŽ +͝ϕũçC0ô¦²o¸( +š[¡7¡"­põ0ýÐ6\`Ç/±?ùâ'Ç-ã¿hÍ ÏÒȌb·}~:tƒkºFÎ2)Ty +a²@}Õ & Ëõ +Éó+*æT`‚eåù¸|'Ü*¢K1ÝZZ~\u¸ÑÿH2ô>--:”£bÝ?x ×:ÙŒluᯁ>ƒ¥1* ´P̐wÁžª&ÑáŠnm¹„’Ú¤á9(“ZL5¦`–^ZLqѾž¾ˆáVd òÈ®ÖÛÂ$<ðÌ^‹ ò¨m;Á‰×~Òé•ÌòBÿtõdÀ1¦kGLR[g3ÇYƒ~…….‡ÐÁ]D ÞÀí¶¶Þ&;F[ÄϓëM ûèpÛÄl9V‚à¡g‰.ÝÚ°O¡Êß´õ†"¼Š¯èªu)øõ,Rˆ'R aáDv‹çÜ`—Á-ûíôr Ü%Ý>P}Õ2Xäz) xŒ÷›²c‹È÷Óñk‚ ;z’}Ð82ðº[t yÌۚ÷Tf[¥“Á¢+w€:Ñ S¯H<@ÃDÁ6 {ÖèWxìmwŠÂC ›€ìŽ¢ë{ºèº“òúE¤PåÁä=åVt €7pÜͶû‡½¿Ð-ǵ)tºÇ¦cØÓX¤ÃÒzüxm‹ÍUé"º‚Úq¶ÑÕC×ÑÑÕêÝCtõÂ`jTa7Žcì|yÁ£¢û¶\Éà5ùjׂ™¼±1±¨—Fˆ±‡ÚW֞ÐÌN~6ÌñÃÚß-ƒ,yUp$;ÁÙÝ"Ì÷ñ ï~‹s¼ ŽâéìB–¨ë7× >óÊ|ۗ2¶uDóÞûøìߗ®é|Ïñ6ˆ×Àôd|ÉÏ¿_ýxô⧞endstream +endobj +1174 0 obj<>/XObject<<>>>>>>endobj +1175 0 obj<>stream +xÍWÛnÛF}÷W òR'iÝ)m»¶ £ð¥1ƒ<4}X‰K‰ ¹«ì’Võ÷=³KR"-¥íS#4dîÎå̙3£¯'êãg@áFSZä'ý O“ÑÏñ,ÄsˆÿFR‚³íf‰x=ì£êèx ê³}šÎ‚ðՋ«ˆÀeó€óÛ %ˆd: )ŠÝû>E‹ÓMª,Yi^¤¡é'%rIÚÐ݉86ÒÚÞFŸOÎoǍ…³á4ÃÆéf%ø¡+”Z’i÷„]?<“7œ¸Ïïð‡Êg.«T9Ÿia÷üì·O·]HÜ0Ÿñ¥ûÏ=‹|.j¯bQ¤jIÂv㩜FÁSDH2KºKh«KÜ.h®‹•»õÆSC[!Y®×Ú€r+m¹Ó7¤×Eª ÃB«ôw6€«"•ÏãNě4Ë(iF…&[StŒ\ÙJWl4­µµé0مT¤ÚR‚ú#S‡P¹¦…Á²å\qöFo,  f€¯±Ų€?fÑÁ;k Ä@ln´ùB(Œ(.ÊÇTÅpB“ù¢1^õ_"ª(õ8¥ ¶¤ËÒÈeíø\æØ7s­sxô‰X‰ëñßeÒdϱW‘WQTñwü"Xïź"œß^ÐíÇ}x6û.zÞ¡vUËK£Ëursú`: +Q'Új ؊}%|"të´$4¹nø.³˜ù!Ò՜hLÏ•J°z8ð¡míÙçˆÏÐK@åõJZÀLÇ/£°Æ¬‘ÊVp·¢¬@åY‚~ÏÅi‹ÒNÌXÂÄ.̮ޱzIV¹T<]d¤Æ}^Bì‰ËÁ:/çÐ!wB«lÛI—¸&‡³ZP7'AŦ©ÚÎ|´Óëøä¦ä\°ScÊ/ëéSñæ÷e¦ç"û݋aA«æd{x~ÏV÷÷‡f·ƒ80ïöfwtS ‚_"³EF&ÒðiË0sð‡šÇÍ'ÞôFíh…øM $ ÝÁ÷ ‰6r[Ã1Pl½:ü+TútÁb>Æ£!•I0Ãoè2UÿŽ@`ØóöO¶òl°¬k<þ[櫦+ÿÄ¿ÖýªÜN]\…@4ˆJw§PîÇWB}¶ž!)Ç®¸Œ†4³Ú¬RÔöõàs›Žµ*XœjgœUß¼S|]œh†A8bõx¾¼¿ºÄ>¤?C±-Jž`Ø´ÛÛÎêgaB…óÿhՇ㠜â«(_ö™O7ÑÉo'¥Ý²Kendstream +endobj +1176 0 obj<>/XObject<<>>>>>>endobj +1177 0 obj<>stream +x½WËRëFÝóVPtý¶I%©ÂèS¿}šh8¡(?è³m/å3nz4M‚!fS|Ç×>•’Øö°º¹Ô¶Ãi0õ¶Ø{ӏ܇ƒÆô¿Üö§³à´ëv¾8ør5¢~Ÿ ö1™Mi۔z´ˆŽKI‡™ŠDF¹ÐF–‡´¥È%¾’È2µÖô òPQ$"CB“ ö +KÉ2 ëkUÊD–¥Œ‘¨´ÔNj—ƒô‡Á y³ËD•‘„Gï„d&#“ª‚ð§(Mµ"QÀ”óTš2ù&³vŽZš:Ãeú¼$Y¨ +Za‰0”šN`½TUÓ:-àwó.®¼ý`Œ8Ñë„6ª¢¥xCšÝ.°¯h™’3ä¬tÒ¸hl¹Nõ’wJûú£Rñ‹Âºà2Nµ3ÙÉÓ=)UO‘ÊÓâyOá)ܪ`؂Jß©—RöÊ/þ|ÎT(²¿`íkœðóN`‡A¤Š„’4“ô¿ýrÕ£SÆO? t23|¢:äb• Dq¢_¨PµW¥m¸SŽOìº0úÌg Øô\º§ÔÌÀÍ%<ÛO$üà XÍ·\&†]Üݜ]ߺå[ºœ ¦Á¤ªŠ8æUî€ü7YjËzL‹˜ \¸‚4WÚ *†OŠÓ;ë-«êŠy†ì–´!Ù|C±LD•™á¤ñ¾LsQnêÈçª0%ƒc¼A—QnS +g–"ÝÓ÷Vþ kV²K'^¸ dÎì1 ³ä³ L’â•Ò¤»µR>§ÜXP#`ÐùïlµíVšùõÝÙTŸŽÜÉüڟÿütŒPfI×·85x1) bº¿8ïR÷ +Y;vjRn÷ਠÀ_€Ü´|–œY»”疝¹°ÌâóÚ=m4A äO÷kœ•ŽÊ4”1Ú£BÑ^¹Ùµáv‡uÉ'œÖ>6wBïá6ý¯lÞlÛ|‡öÐy¿q‹Ï“1ïs;ÀjBƒ–܉¶ý¹îº®OïV8Á\pÅl¦‹…‘oä‡ïäL ßι“×ÇÏǀÙÓ©ø»I„ž¾ ”Ù7: ¦ªrðáØ#·{S{ìR•1Œß&K1G&nùò»@ÆÁۆ¸5•UÁxˆ¡Ÿ+<‰%0žù-" -]ðz^Ý};¿¾ýÎnæg´¸£ùeg£‹¯—tsö°¸üvˆQ„-vyÖ‘-ín‹ÓËer#ð”õՇШ™êº ‹Wè +»=.K'1‘­ÅFó õûfËwsÕcÁNR#^ù< p  Š÷Ãßv6(Œ²5s;A?$kkïãë¾éû1CǍ`;©…ˆ¯VkÄî6¦ôÏð´E¨Î€„"ŽœÐd".Ž®Õž0. WaKC,«ã㒥£Õ5øÃÝf~ȳ ”% D!*4<\•*’ZSe1zŸˆ#ÈPç*«±ëœÁJD¯h¾³ -*F«Q¯KË>šà¸‡ D…"˪óé(L…ÆP´TÏ^Úâ$S'n¶£¶›Â^,qáÐÙph‡qòµâ‘ÁFµ«^XˆPU¸žJ2ÓrÁÖ¢0>zÍ)¶|1ò­·zp´Ô²Ó}^2ð›©?Ø<ú#ŠçjXÇ®…úµA­Þ° ÷úÞÕpDk«¤íLKÍ‡y¼ÍI1‘˜M?~õ#;GÝå?‘\™ú)®Sig©x:vÀ›y>ô'øÿj6¤É¤Œ‡Üÿ]ߺ/Õ D-äETås…//=©WœL{°ß%GÓQ0à<¶ôÙÍåâà÷ƒ3–n“endstream +endobj +1178 0 obj<>/XObject<<>>>>>>endobj +1179 0 obj<>stream +x•W]oã6|÷¯Xø¥9Àöَ?’}HР͵ˆ‹ À½ÐeñN"]’ŠëßY’JlƇ¢¸\+wvgvvõ÷`FSü›ÑzN×+*ÚÁt2¥Å|9YÐâfßçøo%UƒûÍàã§Íf´©ðÈêfM›’pûtJ›âꎆÆQ#_d3$Sќ¦kJjÅ7IÊÓV +OÏÕóŽ„.éYéÛ制'm<=nîž&t~RiZ¡4F{kšFZêœLGØ|Li<»žÌýêz>IWæ+ ƕM-òÕv-õxH9š/—ٝMG¡=9ÑnyC•±…B’,¼2šðå¼°¾ÛÈן¤ç_h¸·²’ÖJÎÑyi‡´kÌV4döáIäàÚíyT8:C>~º¥¦“ñõ"øoâ›Ò»”ýîÈÓ)4ž¯'«Þ÷ÏîŒÝåöFG=±Ô Œdãùàˆ‡Åví·]ãÕҋút„. =nä§ + S ×<3é’GC01õº˜oÃ/2# +´ {t–mÜëUæ? R: ×O• Ý©”•pn̓®‡ýœU£×|?&1Dbrl8‰ÈÇϛ`;Oý4¼¨z.¤Àp·ßvÖ ?B‰ê”rÅøáo¸ ràú9 ÷Îs¬!,d÷¾F,N¾šÙWŸ3Sˆò3²t‡ÐÚtº°Ö0«ZQæmð»S#vl0zS«aDUÖ´Í Z +€=ùƒâÎÂDãC _Êy;ꢶF+øô©øòj|o¤pÎXå8š€c·“ð¯³áÁwŸ¬d56 +’¨ +~À1£2á­ÆPRí^÷‡Åç¥çm¥*ŸÎ¹Ã=Qëø.¾»Håù¾‰c›“@e“͹RºhºòÕÀLó +Ì&åB¨ã{=?<>¥Ç9O+1u@ì£ô÷ŸŸ²lY©h×XpøC:•w(£¡x(¸Š#,8Ç»3ƒÞQ§@O*lSzçb;»ø‘Ãb½÷ír¼´]¤§8-Ò ^Ÿõs¿ôÅ-µ~€ŒGcØC³\ÓÎuºn"ÆØèûQ8›?…+¯P1óE* Õb¿—G"KCÉÆÙc0,N•µ#x‡gÄqGwQHƒ»d2¸ñÉ^<…»zôêkg%éYe'f£ëMô#ì¨ï²›ÇìÆó%ÆÍmœÕ lx Ûg°!Y`éT4iÿß󚚌âL±(m ‹#(€awµrÇ.ǯ!ðˆe÷Dô.M&íó\«“æÅô.‰0*«©Tèœá¼ì9Ú)K¢,AhÄá²ç֔b¿’ÐK?Iì㧛ô*9[àóæšVËY¤äéî·û;úݚ¯xÃÀ(:vqÌm£‚Ù +ï¥x`¼žÞòèÿïa±^LÖ«¬¸}>çS~Ù þü Iø÷ªendstream +endobj +1180 0 obj<>/XObject<<>>>>>>endobj +1181 0 obj<>stream +xTÏOÛ0¾÷¯xê…"-!ICZŽ  ‰lS#qáâ&NkšØ™íñßï{.…Òí0Umª<û{ߏgÿš¤”à“Ò"£yAU7Iℊü*^R¾\à†¯•Ô„Âe‘Æù¿ +ù²ˆ³ÓÂM9¹¸Í)M©l½X.¨¬ ’„Êj6n¥&AU«¤öhRIõ"ÞÔ¦JG£ª%­­¤V9ÿ…„®Qœ´$¼—]ïyC¢ª¤ã[ã<)M~+üÛåÏËçI”P”ÎA±¬g£j[ªŒö¢òX)éñîaEÀ|,Ьt¦}‘¡ô ýÍÝ÷iÑI2͘»Ä$µFoøڅÞ[á¸ÝQ7+7 .­¬Ií'ÀQùmhãþˆÆ—ð6è lגĺ%žÌ ò‹  gr¶,&~uq{E)Ìn(Ê.)*ĉêƒñ d϶Šº°KÔ5;ˆä Ù".xÛ]C¯f°¤¥Ý±ÿlö4™ÒZ8û Œžf±$‹®mÕ@;I];GPòtÎ5ÃRè¼U;yb]o Dw.¦G¥kŒ1è#(l¬z‡9m<›Òs†¾7š(9sÇ´07ï½n¾RÔàåIß0rŠ£E=$߳ㆣÑg¿v¶nÍó}÷CëUP­{#0šûµ‡“päìJtk#¹=sG¨¶JCWŽîvð^½ƒÆ´Ï…¶Ãú¾ðcÁg‹O4j‰Ü0NȒ×ÑôcߔLï•Ñœ•ëÖ1Ž +ßð‘iÔfÀe€ ]L+Lâ¡þ4»D¦O-½P­{ógùvúÓwÉrNYŽàêúþæš~Xó,q¿šjèpîÊ<£Ãòh‘\ýßàæ‹<^KÜe| +æŒò­œüœü‚‡Çendstream +endobj +1182 0 obj<>/XObject<<>>>>>>endobj +1183 0 obj<>stream x¥WMoÛ8½çW zi -´Ší¸qºÀ6í°MÓµ‹6{ %ÚbC‘Z’Šë¿oHÊV” ÀbH$r>Þ¼y3úçdJüLi1£ó *›“I1¡·‹·Åœæ— ü>Ã'i_LÏ'ÅÅøÅÕêäìã;šMhµ­‹Å%­*‚ ž”§ïkÑéh^ЗN•÷ôÞYïiÙ­ tåìÎ+³¥³ôüÕêûɄÞÌæ°qúͺû­³]{<¶íT%ùÐÙÇ9M§Éå›Ùe1ã «ZyªlÙ5ÒòµítEk‰DEÊPiÍ÷ΔAYC;ê£]a*jĞq/ O¡FÞ -N î蚂Í!NϓOÕ´Z²?Îbݧ#ʘ¥Yzbógdåç»>3Ow§x\ÙF(ãï^ôíúfIHƒ½¯%{·VÓƺ‘_'½Õ]LÅnèF†«ëÏK2¢‘¸kéú–DUIï¥?Ú¼ù¼ V?ȈG W’VpS#FÍ9È¥l­÷´û‘SxbìÖ‚jm‹kE*Ê;š.rQÎç Š2/¦}P¾ì¼ðéÜ°x p -ç>*çƒÞ¿&¡5}ZÒ7e*ƒ@†‹C,ká;ê·ütì–Ò=€\Ÿ‰ØJºÒ¶¼¿{•O -<åàøô(•ÃK¶z("lw‘PÜÍZøÔHšR´¾Ó"_²ÌêýíÙõmF.ûŒZg«® žJaPzà/wÊËâh;f9ȼC™]¢*™‘Ç๛,Q0æ^*æÈo# ÀaŽ‚ -5Èí:cϞ5ƒ°Á;àÝ}ýpûH~˜¼# ŽÛ=Û7Ä1J»3ŠŽì྾Hœ¸±®A™Qlkô¾?EGã]²ÎÔß W¡2@j1¥WhN66Ht—±hkù‚Zá@O–›'}ê›uþßP-u[eø>®·Â8Å÷Ùz®y¹M¯”F Š¨Fiá8tíü>È\¿7å0NtÔ!² c©ûbBµ43 œOÔ̘2Zc\—)VÔ.Ô|Èá{ÚÕBžéœô%‚ύäSYÖÆj»Eïóifs µVk Cͺʚ:J¢ÉȪmçRoZ#ћS4b#ÊZá¯,§Qܒ3.!˜Ö@mс¤ð{֕DÖ$YMGî¤yPΚÄçë n–uŸf_%nêALQìUxéÉî ±¥±Äº1`2ñÂ÷”@[Œ«¬ê‰ GµGØ,QQŸÀæ( l¬¯}O­q ß Y1JóÀåHƽíܑ)¥å¸ö@"֓ÁäÆA¡+Î.¥ˆ¿´†ñÌ£–ç È`dÉÊëöãÀWe7Sºk[ëÔòMŒÚÉVC3˜ï=E¤0ÌW˜•%Qo±$ƒ —ˆ)ìY‰ßtÐÍ"dŒ"Ÿ9Xé» ÇåB›[L>¯¯ÅƒŒ¨Ž<6 -ûÀSŠyÖ1,"Ug*aÊ=Ï}‘ClÑhiW@Ïð²‹ËÖsè'Lá ý±c%Ÿ 1É«OÛ^Ú0€XO#Ôq4úR«¨‰;¥õ(áh\E†¯ÐiÁ獊1¬ˆŠù÷K~ío¦µ€[$ÞCYÀ(ÿ3jÞ_ä¥U‡—T&;áUn‰—\õÇö3¿À'P mÂttPÐ҂yóšÖ]ÀóQʬ; ':*2¦År@XÍz㱝º¤Õw§Jþè¥ÚĕFjä½Jû—äKi„S _¶ÞOÆ?0-㠁.r@¹¹ú¼©ìÐq+‰ñÅsIwÆI­ 5Î>Z€J¬(_CwI8ö0JKŒÍ¡#„ŒDcq MßR£ oœ»,Úǎ„r3-âÖLA¥Ýk+"Q¾F˜ƒÈ#'pƒ}äœwnB@‰ùÁÿņ,É×<ہ3–- Ú~Ïæˆ&<³…Î -ú:P¾?ÓîðÛÓ݁c{üy‘7ÔÕ³’~Ði.Ãa–çå%¶0ò@󗘢¼2zLÉ\Æ 6o-﨧ÁÓ§É#¨ophV?4®@‘â±cñ£o…§ÊpŒXù_R¶z×K嵝ò¿ÑŽE¿’(°Iý%‹M±-ê¿©(2ð—Ço²ù´àÁÿøýG?ûæ›/æÅââ™°;»àÈ_|9ùÎÌåkendstream -endobj -1436 0 obj<>/XObject<<>>>>>>endobj -1437 0 obj<>stream -xWÛnÛF}÷W üRˆ6¢,Kr€>ØhRõ%E]+rEnLî*»¤ý}Ï쒲L)Ð8¶er9—3gÎ ¿%4ÄWBӝN(­Ž†bHã³±Ñx6Å羝¢U¸1šž‰YÿÆåâèÝÇ1% -V°5™Mi‘ì ‡´HO¾Z÷õÍâÎ é<ŒÆbŒC'Ôþsª²µ"iŒmLªèW’b)R‘½»¿ûüÇïŸï¾|¢¿•X‰\O—þ!!D4ýä~0š°åm¡œzoNö±áftܚ‡ÇŒZ»Ï ŒAr -`K{Rº†Aº¾¹¤‡“k›Ê’n¤¯qùÒÙ­Wîá ]}"™eNyO6_:+³Ô×O×WÁL›²QõֺǐÆðÀ¥z¿w÷²¦ä|$’ÉL$"¾íŒw¾R۔-åz£ Ip|tvF`þ*éI{Î÷À£ô¾©TFµe;£1-uí‘(Ý÷ð፠ûˆ^Ñ*ej˜¥JfŠ­ð‘˜<@ê;ë0z RåvTX€¶Õe G©B^d·§{ó‚<⿱ÚïB5¹Njeê¹lL¦¼vrY"¬¦F˜;NÔÀ¶÷þôŠ¶Š2K·w z4v28,è³`Aƒ–{½‡œÙóö§´²ëZ["1Si8¢–jœ¬ÝbväÎ6ëXs0Á>‹£#]­hgj<Ð/úÙ?Y1²’¯™àÇLùV՗Wws`”Ú$<ãc-E,¥µÚäTêǾ+XadK‹Ûyïþ-œŽì.‡ÂA¿Ø²a(hí,*Tòp䋎×rcu¦²ñsJ 1+ -ˆO†$téXœ -ú“mrǟ£¨Äæ¤ùΤǴ–¹ gŸ—}0šŠ  Ðö¸¥6苾&ÿüQvà+ȓ5+æÒm³W/d-.ˆE] Æ5/ú€-Î /ºþÅS‡|€¥Ô¡ê"e.«¥dƒ‚®"¢žîn¯ÿbâÂÅû!t.Àg`¸{IǑ{]5e-²/wÁ -«Ê‚i©E^åÜnFuÊH!ZþØCþsÜ´où?ÁðO³àeɞ”¾›œÕVÿ¬{¹ŸTÉÀ3J¬A‰Ÿ4«§Ø=ÛT±y÷±#&øtڎ8üÚÓòþêvþ2‹–x-uù d·M"5\ã9J7sº×&-évAóXl¾Ùƒ< -($ÓV(w }`5íßѬkp§rpM9h)³0°¯¶¹ -Þbö‘ ¿Ö»µ¢,lŒ‚‹ÏÁª %ã~|Ám4f¹î‹?ÓRn¤.Y‹©ü=úµ2Lj$ÄOPcôwø}8áj…@†?†§HœÃ M!Ko_5„yàr1¬bl°”¦’Fæh€·–µæIѶS—ËÃI×ì•|ÄÝBBº‚T­6À}f,~AzØÂóˆzÉuŠ°w1´Þže8ÂЍ¶vºö»ÀdìêÈ ìiÐføMÎ(El255T*“×ÏË(¹]!X`•ˆ2Æ`°Ê£„ü‘M÷2àFã)u -(>I VÇÎ_[Ž ³ Ÿp–åbSX‡pøoÓÐC˜ƒÿÀ5¿–ÊíÑ󝜁Œ{_‚4¥×‘8ŒÉc`!ЇmÒ²É:¼9·ˆ„6 s…t¬ÁŽÓC:´Og_c¯`T ‡æC¢€0ɎÐ7ûÒr^PZjގ[‰Í…“+m©Å‡sTŸ^¶ì”·5>¢h½'1|1P& &D´²]©£×ƒ(×6‡°wLÞ§w¨ž_/7(À~{£ÚÉÕJ§é9—=©~¬U¦kœC"qró*ĺóÁö‰p0å9/LH¬ =Ç¡½dê,èN[‰epA£ÐøHú bas²1a}±áU6ZF̂pò_¾F±¶—}9äI®óÆá©ã²âÅÓÓJ—LBf/On êa—‡#ã+ -½Œ»°\zÅ)#0®S»§Ìڏd‚7©Ù)M&çñb~qsyAŸœý}£ßlŠÕƒ”éǀ ºÓ!^™þÏn3žŽÅt2ÃûMÙê‡ÅџGÿ…wendstream -endobj -1438 0 obj<>/XObject<<>>>>>>endobj -1439 0 obj<>stream -xW]oÛF|÷¯Øú%Ӓ,KJ€>رÝ°%7VšMQœÈ£t1yǏVõï;»$%‹q€¢È‡Š·;;;»súû O=üêÓx@§#Šóƒ^Ô£áé$Ñp2Æ¿øã5¥òAÿl º\ÌN®‡ÔïÓ¦m 08‡¦Å•7¡[§¶O ÊÁ”Âmef%-xsò¤¡7v6x—eH‚~ïµÅX<Éë>3GQSÙ` ¹‘Ÿj™HKvlƥŔ -¯&¥«ß®>~¡83 iþþþäæž -]FePñ£Ð·ÐÚà¤fY5äTÈôF%¡H֟@tçvÓ—&q+¬ ôãxµŠêµ˜c+a–“2ôNVLJbh’ªDï¬Ê5(]b*|ÍI¾\mhʕÓRC8Ž­[“Z¸ -Ý@k ±Þ@ê1Ä'¨B'ïJ=i©§Î¥™õ}©2Y Œ’$^—%eÎ=V©t^„’GցTߐÆúãˆYÖIÌïh(@$s³‚nÉ©8æÐP±óeWs·k#=¨|¡Då{p¿ñŽB:\Y…ó~¦.[‰–ù"bAPÊ2þc™¹Ö՟¬|Fñò‚†–¶—Hë¢à5èBEH%dã*O{H:<½Œëäz´]¼ÇíÄ\ÎxIÈ@pÝr>"fx¾üˆ¨ˆ{&o8ûm¡|0q•)éã¨x™ÉRì`vkK˜ÂF"BäÉõ[êà Ø)ŽO‡õˆ£³ëHP3œå‘[LˆÆªîc-oGv°ÛcMÂA¯Ô*|¿ldŒahX&çê1.ϧVw>¹À²eûƒ+ðþÆ4ÙŽnã5H9qSp'³¯êcõ´"NËÜHVûê4²÷Ú-Ǖ掝¾2A¡7mèúp%&æØ[yÙ¡ŠUUvëÀ^/¾ ÒÝF̑¥[³r˜ºj¹‡U8$†„KL¡̜'¸f¼mŸÕA|ÞX0˜ªXËöeü¼}™DÕAÕVÿöŸmQ[k‘!m\Œ‹º¹ÿ½•!ÅOä.ÐHG[¦&©aÉÑV™]&϶ҖóDšûâq4³öÓ\©¢Ð¶|C0[ó|PƟˆ%ct;õÊVÙGǯ[9Ãrf7ƒÖÐ&~s¤–Ü-©u‰ü3ÒV5ð²¿X˜:À‡8 €­â~!SÎwOÄDqu[ÕW>c0NµjåUAkîkp*Óʊo4w.>ݪrïÞã -Ý8:jåÛmÓm!¯]dµÊÙp_’l©R ľBA¬/BSܳp @r=¦OW4›Þ~Á_Wtÿq6Ÿ½ŸÝþÄ°°G¸ò½ã£.]V‰ÏxÔGvWýíZ}ö"p´M㻋\w€ÿÇX”õŠË0$y(²U¾¨wMr Ÿ?“ ë»K ‡‚ž°™ö’þ6…Ƹì.–ÊëwŒ¾ Obü„!ð-êHcÁTç2a†¿IŒ¢ÞèŒ_º½û0{˜ã=è[î&q3^v&àýÒ¶hwð¢½Í½ã[Ò§K¸!f—³sÂe\Æ/aJÅÞáºãuÎ_J½äÛu}ï9¹ž4>ߝE£³>ÆgQ$5<œß]œÓ½wß`ðѸâƒr…âšQ¾ÈMNéxÜ{Ëåü»m÷”l•áxG9b&œêj~ðëÁ¿ Ò§ endstream -endobj -1440 0 obj<>/XObject<<>>>>>>endobj -1441 0 obj<>stream -x¥TQOÛ0~ï¯8õ)H4MҐ¤=€6Þ`›ši/•ë8Äà؝íPòïwç´F‘&­mÒ(¾ûÎ÷}ßù×$…¿)”, -àÝ$‰ÈÓE\B¾,ñ9ÃË -h&WÕd~CšBÕ`J±,¡ªÓ*]*/¬f^> èÓLšu³Q½—FƒÔ\õµp'ÕÃ$óE³¬Œ—ø_ÕÑ\x>oóî¤çŸBËl Þ@ǤöxÓ5(Æ](p燭@èÆj³´ˆ“âŒ?ß®ƒ{cj୑\À¦÷ûtáœÐ^2õPLH³w¼az'½p°cÚÓ¦°9o%÷€¥@óØo]Øß!€=YÃÆVsæü;J¼eM#y U+`J„ºXā•@’jl-ì¶Ìb rM!Å÷V0­P[¼Y1⸙z¦e@e8Žä˜_'p>j;Ëò8'þ`ÿyÑñŸ`'QdÕÁ`š£gÚþk£Ì²‚ îŒ½—þ§Ì¸Ÿu$”ì$º •+“%¨úúäƒúDo-Ö+Ìý[Ço9֩¾å±ýPüƒŠ1ìH˜RÖ±a]„Dù3*¾5µƒÞ tÉ–hù np^td1Ùm•èЧañ^`‚ó›4YGc¿dú½]š^ó0kœ)En@›àOÛዸÑÞ¥ÆrEÆ©~™ÀÚ·}E§p,Z;·“ž·Ç2hÞæ¼Úh˜öÑÜÇrÃί—û'-ð0Z. [æñق µº¼¹º„oÖ<?Ã{⏠£©&žcƬLÐÖu„y1†Áí׊؆Π6¾eŒ°ŽÒõ l­ñ†…¯àf?¥®ÍÎáÉÃ[©…#ܼÌã²X⠈˜Ù9½úRM¾O~«š»endstream -endobj -1442 0 obj<>/XObject<<>>>>>>endobj -1443 0 obj<>stream -x­WïoÛ6ýž¿âÐ/MDñ¯Ø΀ah»(°¤Ûì!Ö} )Êâ,‘*IÅõßw¤d7jlØ°$ŠïîÝ»wçOgcá¿1-&4“¬ÏFو®G“lB³åOð¿STÄóE¶>³>»º½¡ÉˆÖ®š/–´Î ׌ðDž¿-E”£ëŒ~æN&§û5ý,¼ß[—Ó;#Ý¡ ÚÒæÕú¯³]Nf¸ä|%êà' 0^$€Ëé Ááíu6Îè½ Îæ­äÏÓɍÇÝÉÉ"›óÉ{µG{mr»÷$+­LðäQ \åÔtñx²8J…/œº@P>(‘“-¨©„6Ôçp:žÑG |è¢OS„=Ò^WYSþ“Iqªh½¢`Ó±çÀ.¨5•òžÃÓ_lµî@Ú Ã^‰Ê³îñdžEF*N©Ja^Ú(’Ö ëßý™|8Tê9~2z£¤àHÁH(E ƒm)Ýã/Õ ž@©ãÅ8ã(Al„½œ9_PŠÇ”{°ÐÓ½Ô'½”Â#xò¶VûRሪ¼ÊèÖ:ªñÅR›ÂºZ°,.@gº0·²­Qûø˜ÄƶøÓ«ÛëN7瑞|C!w,‘ïÓû^WüމZAԑݡ6#Ï×ÙÚ¬ëz {úë¸R²u:žÞʚïԊ%¢˜™Õݛc¹úbp§%K£?µÌˆR5y]ëJ8¨,Rç[W z֥Ɖô Ê•v¯Pì‹eI ;"n'££r…’bj¬÷·&&|aCÙ¢ÐNÁ\øk_o"•9ø‚E`ÛmÉõEd‰°s}c:âN5ŒH§B2)$Âw1‚ìƁ| ×d R1Ù øê0tà÷¹Š¥Úc¼ÄT+½c­ôRé¿/µ,1V4`ÙècÀÛ3¨oz´Á {õbú1´FÖûþ±ìÄ£€wpaAlœ¹üƇV¢}ÂróJ[7pN>ŸÚ÷«?`B֞>ž?hs¿ËCñ°½ ¼º¹&äÇW‘“ vŒÑ8ÚÞr:»$CÍq6Žj¬ 3ì+èRKž[ˆhJ²f›ê–)D[Bn¬©Z'1‘hÚB&¯GûòÅJ"™y sùÔÕíü8¢ù¤‡§!€íl³+±.xSHþåmÕÆ] ֓Ü‘;˜CYñ×qñÆt\C"É©HNåÐ:C}ÅÍqüã>§.•‰E|&« F_€õ‘/½_g{ ™+tT}³‚£ÍS2C1ˆ¸ÓÒYo ð€pˆ¥—D’qôOõ¹Ô›˜ÔÅ^ñ¨¥¬Ú\Åýèe¿©Ü­èÇ+ºïÆHçZS¨!òÂL`Ð-’CÍïÄÆQÁ—RÑdWÉËE¶ä}áÇÉ|AOK_í²g’=â=ƒÔ6XdT\ÿ/À%ýá՟ÿ=ò ðrK¯óËÉ2ߜ -»ñ»§¿†sb}q,~§°¤-ð¤ØÁÕÛ÷·«Ó–Ý6¼ òQ‹¨fœgˆ¯~0 thð«_•o0vÕXv„Ѿ†2½tzƒæç0ÃoH>šÓi´~œÿqºjŸ¦×7cBltÅËQÜg1ëâ–=6=Xˆ†íqO=;ȦÛ—½Îzk[Üd7Ðôö/%fbf‹Y¶˜/“j§± ïÖg¿œ}< wendstream -endobj -1444 0 obj<>/XObject<<>>>>>>endobj -1445 0 obj<>stream -xWQoÛ6~ϯ¸‡uH¶lÇv†a@»µ@šu‹‡í!/´DÙl$Ò%©¸þ÷ûŽ”dÙ͐¢$&y÷ÝÝwߝ¿\e4ÁOFË)Í”×W“tB7«I:¥ùj‰¿§øµ’Êp0_M¿=x»¾¿¿¥lNë¶+üQìL&´ÎG7é4ÍRzS< íÅV:2%Ý|Kïtn{¯Œ~½þ sÊ26Ét £}%”&/¿zÚ çÆŽÐh?‘‰ÜçÈïð©ô¸ò˜Ò½©¥Ñ’§ô–Dw@N«²”–r¡ÙÂçÆyvL(Éf .­Ìáeànk؆7ÁÃvÒ>I›FÌy‹9Y¦«Œ:#ÓŒ΃ -çÉt‘rrFÿ(}·¦ÂH§_yªÔ£$/ªÇ֓h}À¥ð¤Â -û—1m½ÏIJ<TU¡Reã`Ì°÷AXkü9²ñ“*ÏþC^+géÆ{K•|’®æUþHµ)äɉÒN9OFÓޚäÁ2¿¼ð[Ž:¨üHŠ|G¹ÑZæ\ük:ì>QŽ×#qmŽ0™Ò6®Ž°€ÿMÃ¥CÞ¸Λ=Ÿ¸ —°ƒSΠ[ðólÅf·é‚ 2¨XÇädºJ³[J– eX<½d±6:y¦ç•ÿN:?Ê}Hi¡Üã³PÑLg8»v‰Ìꨇ¸9Q˞TªJ’@Û¡F–­¾¨œo6È<Î*³Eé….¨ôûˆÿœÚßç+Äý ^lÄ•••¢8¶0ƒó‡QçÞË -ÍÛùxÝRÂIzN.Jn@œ@3¹&И¶¬¬‰9ÈTˆ]ÒFm©¢z6Õ]2ÏYI*¡L‘óe$ÎM:‹Duõ&¼ ßL]#“ç,@/NÛ'LëÓí<Þ¦Rçñ¥ BF³)mŽþ¬²‚²$ž™à£;ËÐ åvßö- 1ʓSµª’õŒÉqÞ´B6Š¼¹@?":{üþt️ñžÇ‰÷Öl­¨Ý5€:¨ZÅ~9Þì "?7Ύ+“‹j ºnÄx£ôøÒÖÃ(ú((fC²èžŸ¡Z@5 -åöÆ^·%íræ[Ùí³~éG›ñèÉ”WJjŸ´JÉâBJð‘@¸¼È},SÀÏÅ,8£ùNèmY–ÂW—Ê4A ¹UÉôfíЅR[›†O´,ùJÂÍYšª‚|ÿ`\l˜ù’‹½Ø¨Šåü„µƒuЄ©TÀa4ÅÐ=ŒXa£ -Ç!œÂAY¬üÒH \FóùŽ`0õɪš+ô»aŠ£;´·‹Ô FHw,äoÚ»1‹½’µ¥tmÈ6zÐMˆãYUd<ãÉ÷’~>'àÀÊOñó;Pó6Ý`Ú^ð¥ãnnô¬ú£*‚¾t¹luæ²lžÞ¶ H <‰ª‘H• ¹hjYé«ÛÉ ¶6„ë 0i õ«Jçï×ÿ ìN²Oíòô"2مÍÞw×IɽÄnò’ƒE–f]èV&!úÞG„ݍ±$‹—û´BϘ¶§dñº6¿ZxL­ÀéÆZf[Ì&6‹µ(î@Çô¹æäòUVÔÞµã‚WÀhŠ7F3àsU×ü2ªm—ì¸fñÓ Z*4|sÀ' WúÉ<ˆ÷@À4â`D,"aW « ôÚÃÃÙ©3Cہx`º»Å3¹à-YxÁ\O`Š3 ',Ýèa·Müafîe®J^»NX4o‡‰›ÔE~:$ÙÓæ#¥;ƒ±–×  T°NˆúrÆ%2” µÊw2 ZÞŠÒ; õæê@+Cx°:lÝMOì>/XObject<<>>>>>>endobj -1447 0 obj<>stream -xmÁ’‚0Dï|Eك1 {ÄZ½Yµ[ò1  –D)þ~ƒÊmkŽóº§{~ƒÜO„,Æ.…ìƒClO{DÊÚoÒ>/XObject<<>>>>>>endobj -1449 0 obj<>stream -x+ä2T0BCs#c3…ä\.§.}7K#…4 Œ™¹…BHŠ‚žP$YÃÓSO!¤² U!?M!3¯¸$1''±$3?O3$ ¨ÏBÁТO¢¯zs=s3  -!)ÆÆ #\C¸¹øà&äendstream -endobj -1450 0 obj<>/XObject<<>>>>/Annots 562 0 R>>endobj -1451 0 obj<>stream -xY]oÛF}÷¯ô¡H5#J¤(X,;ÙfÑ8ÞÄE^ -,h‰¶¹E…¢Öõ¿ßsîP3‡VZmƒœž¹s¿ïÌP_ÏR7Á?©+¦n6w«æl’LðÂÿy¶H¦._Γ‰kÜ,MظOg—Í’T8[N’\8K§cAÅ`gyRˆ¨b°Ð²TV0ØyžÌ•ܸé$‡OÞ3:£,v:úm¬`°Ëi’‰l>¥‹)¢µ“%Õ¢¨bš¼¤ÚÀzÑ9E¼(HCõd>‡²@:î‹ÅGvšÓàÈ -†l^0P‘ éEî"+˜¡È“™°Þ(‹2›1h“@l‹Ü!T vžŽYÁÌNƼYÅ`Q3p'²‚Áæ˱¬`°ËÙH¯bT8ôêΊÁNS*èU z¨À"Šè–º‰Ù›Íh”!˞`°……*²‚Á.æ4*²‚Œ -¬b#³‚Œ‚Ud½É) g†rŠ2“CtR°«lº`,"+˜F-Ù0‘ v‘YÁÌÁ‚ù ²Þä “Ê(['òQŽl¶`"+la&GV0؅uud39sXÅ`³Œ¡ -¬uP†)ȶ^r y`!ÝY"ñ‘T QK• v™"µQÖ+-˜ïÆ!¢ — RœÒÚH*kå-¬`°‹Éhc¯tÎ ‡xæ.3@¥!ˆ¾Ë„TL“8 ¢¨bš”QiØX1ØÜâYÁ`‹)#XopN/ìØ*\fÀR3AõxH“Š€H*¦I3”U ý;b£ZÐ*ETËnÌf…/pLÉ#2µ‚!:µðÛZ²ŠÁΟ±‚Á¢‘ö k}•¡ììñj ‰ÚÔV16¶‰ãw2£Ó(žL -F³§F*ì¬ì,cEEV0X¤EXŸÚ”Õ€Ì-ª†¼Cƒ-xúg‘ “1{`T`ƒµ$¬`°…Q” “1SQbUÌ`ðê ¬`°¨k•å½m¶\XçÙEÍ:+p¸·E…›9H>Ê D7Ï°u”ˆñ’"@‘ˆØ¦<7"©lÎkŒ°‚=›‘U̼ð®(¬`°(Õ«,.?#V0ØÙY0")­6+‹)›‰¬•álÁ‘wí®è‘•¡`°vWŒ¬-xoò¢°ØE=™sv £vf€œZ!ˆ²AŠ©,æ̍¬`°v…V0@¯"«˜ àüV0X q„8èUì VÙpšábj½Œ©‡r3dA “í€V0Xt 6Ž²‚¡vÂþ‰¬b:TÐÝ «˜¥cYÁ`‹9ݍ²‚Q3Svzd½»$v“D!#Ž†¼»Ã!ÌÀ¹²‚é.‘ ÖnÂ -†Éh'ôú‚ÃaÅBFûC«+¸±í„ó2’ŠÁ¢‘ ª¬³Â -;ŸeÃà ;%Ê*‹W«¼;¸Ç±¹ ¸jÀ܉ÃmÉN n sN‚À ¤£¼ºÀà¶xu!·µ’¤b°8(`Bdƒ]ðµY;.¦“ã‡Þl=¢Öt1íåm,²f/ß'a¨{`a`M9èÈ@N 6…û…ŠÁB‡²^¥ è5>sxýž; Q„Äåh&¤bn›X¿-®¬L(ž¥4`Û"ðiæŸÂ6"< %p˜‘³‰q”³9PÇc)ra'λ£v*TL/ØdQÔ{acÛrÒù™l^DÈàðvIÅT×z¥S)Ë^dƒÅí1UV0ۓ7Š(«,ŽkÞì§^ïf&ËËêŸsásÍvðîðáIÅ`‘;T_ULƒyò+˜ó’Yo^vîg€æÂ\ÐiàÒ\NÕH*‹—Š*kÃPdƒÅg˜Ô*†3>ëU ytZ`90[ñým†®Ç]åîÎ^ߜ½|‹):q7wø9`^,ÜÍÚ~ÀÿY½x·í»v}Xõu»ýéæ¿X‹Ì¤~í9.ñS¬~qóPïÝ®ìz·j·}Yo÷®ÞÞµ]SRÌáßþÞÞ»}Ùܖ \é~quã2×vîÕå§ßr북\âÞݹ§öàëýƒë[׶ƒT¹w% ˜¸s›„Pëe\S5·UÇ­./þ§Êµë*Wîv]»ë겯Üê¡ÜõXÕýÑÖÄ»ƒwØ t§¼ÝT®½sð¦Úö{¿³é¸òhÁîÝò—ïߜ†<–„ïÈwÛ}ßù¦Þÿ쮪þ±í¾¸_Ûûv{êšü¯å?U½UÌaç>¶eÃÊømoF^£º„#Þ¿zwõŸ‹W7?üšôôîçà -†Ã¸\ݏ¾Š­:t/phÁW«ÞYÛ±9`ËxtœŸ<×hÒÍÓÐìpkÇõŸToñ]‰ûÄ_t%Â!Ï_ÑõÕÅ7 D•±4·>!–ÿ±¯ø@çý]·,-÷yÛ÷>©w(W£×~Ô¬Ž¾uÏ ‰æÀÜÏÕÖarSåõåÔVëjm‹GM€[ -UéçÈ-f«  oÅøTˆ Z·(ê}Õ;H•ÃN¯//¾á#~x‘®Ú¡‘8Äi澹ݕûýãÚ±Ÿ¼©øý: Q4ˆÌ_-Ç`øCâysXk°ÊÍæ8,mþvÕÚêKy0³Ç.«Ûº´PúÝ:ã»Ä?Vë_ÊþY?ã''.;¸âÍ>Y€À£»2Š{Yõ«—_ºÛ)ÎyÃx~«ÊpÙ,æ Ü¿@Î2Úúææìßgÿît£ˆendstream -endobj -1452 0 obj<>/XObject<<>>>>/Annots 571 0 R>>endobj -1453 0 obj<>stream -x¥WÛrÚH}ç+ºò²v•ƒûæK²qmâ81Ù샫¶i@“He$Aøû==#À›ªlR©`„4}9}útëkoHüÒ4 QHQÖˆ~Ù|ø£7Š€&áXÌ(£ád„¿þ*¥Ç^0Šáþn0 Žïv®3 §bÞ9 /4™Lð9žMñà¿U´êáPLh<˜âǐqWìrÎĘFó±áî8‹°¹â»Ýk܇xÊ?ëîv®q7œ#ÜÃÝëEïò՜‚-V@%œÎh;0ðKtv“È¢R–BA¯Í–*C7&_éu e¶”$K’t¿Ÿ/>÷ÔÆ8ö`u&íŽnM&uÎg*kÒTY~Šý §Þ_4Ò8Š¡ «¬úZëRWŠ>(ë|íOŒi8lNS$×jeÅÎÔÁ¾Îk(Ý‚Ï*Ñ%E>ü *R%KE™ü¢¨äà«DVî¬ÄEd2تä2U´ÕUÂ]’ðOKYê¨Én8òÑ®tªJ*•Ýè_à®Ì–‚O‘ÌcJKE!0Ú!tÖFòt6y:?Fï ä…\+e•(zyˆ¡ÁŠÌÊc÷úݧÅ;”e‹8Hám×ÎU; k}Y[Sç±.lâ  † Æ\ F®ÔWu•û[I÷¦R¿ŸF¸àºÅ&ª3•W„ï’˳ԹtH!º[¹Ñ1üå¹Éaå…ç!ÜÐÃí ¹°_p‚lŒlk֔Âjc¹W¬ò´ãØ}»F")E²KêJs­ ɨòôIç±Ùš¡Ç}t’С«èé ©? úÄìÝ"´E±‘SÒÄÎ`«óH!ܕŽ4‚AºØOhœïúï—Õ.U'ncßÓ©YsÒ+k²“SŽ\­¡`mRb–Ìn.¨­t„N3u•êœÑEI¹B;•¬æÄo·'}†Nz¸ ;ǔÃi@šÈ 2'tÚîb‚;–[°-Î L4~„Àµ·+€Å̓¨ÖžVN5œõÜ0hij¶`Ê!‰&/ןïïþþçîþqqõæHª,ýŽ8…¨Y'/–e¬ÕÜ_­E?¦;ZzýCa#¥X)]!¢GÖÆÄ _ +(´C Ü(”Ó(ÑÚ³ºÓ% €àsbHŽ’§21u;HÙ(XíºC´„˜Oår»áÑÊéÅ©^ª"!ÜûŒ½àðjÑÒ«]BtêFN‡+e¡"ËmaXØeÖ¸†©³¥“o‡!YÎÞ ü>ƒ• R…ß©pf«Ó,àŒ;ÝfƒÕ5&“s1ÆVø˜m¶ùYç½j"¦£ Oßé;YPO^ôÆÓ±˜†3_ðфƒ{¹è½ïý V2º°endstream -endobj -1454 0 obj<>/XObject<<>>>>/Annots 618 0 R>>endobj -1455 0 obj<>stream -x•W[sÚF~çWœ—N‰']°Íd:Îʼnj»1/8‹´€Ý"-&î¯ïwÎJH7â1èì¹ßWßG¹øó(ò))ÎG®ãR8_83šÍ#<ûø¯5­ÒÃק£`8çú3ä4sNÔBݍ†0°çã ±ØhæÌX1Âsq–“Ï?¡,Ö÷œÎƒ9 ÌiâÇ=Ώ@‘Sä:> pÀÍç8Ì)duèqó™ÈôÜ9ü™ Ô#£@„.~dÓ4Uþ¡ò*ÓdS©&©wvÚã.CcZÃ<(’D€Ÿýß:ÖE—Dž Ðòy“•+•}i•Ë4Â1áóŠÞ¨&©Ñ5ƒÃ"¦”Y5éˆ mVi‰ "•ŒÓëÖT”+ëßÞ|¸9¶ ãæJÙÔå®zžõúâÓõÕÅæ‰U/ß[÷ÈÛ¶Üe »Þ¦œ[Ì\mY#ð¹B­Ö´ªË=Üb©O]™~ÐRoìF8c®<ÖPVÕz­k.+ª3úQK`”­îÿ"Úu$ìY?£eÍã!t?ÎwhÂÂa‹}-ðý‹S;’Nóñó³ÚPÞõceàn¥š©JPPÜRè¹ï»´Ö¹.Œ-8.³Sm­€ž½SÛìY­Í®ªÊÚtéËÊMY¿\ßßwL€vŒ{Ö «;X4ýÚжÌ5%ˆZ ý˜G(KKÔVnjXØ †l®xlí -΂2ÿjgR§‡öû( ?d}a†¾0lÛû§ž4•ŽÓ5 ¦.t™`ÅÙÙeӟeâåqXÌaHÔ:ÊÀx<;{wswv&áå΃÷3&‰Hþ‚^F™±©Oûs¨·sDΜ8Oøà(¯kEDŠ±má`„vÜ X½§ Ëaºkê©4ð´áå9ÍÒÕ´óY2±*‹ì±3ûtbìÑ×+£‘28¢…QIžÊJš^ºv´žøÛ{ÉEÎ;àI™Yõ¹«dYOcýÄSìWtä+gZ˜–éH։‡EyD!÷³j¾uQpC×=¢êä ad û«HçzÈsyi7½Œ¦ËÛ²\SU¦…‘{® -[l³¿±Rí’W+,}ÞârBM¶/ “n¿fúɬEGêB­2ØˀÜ*mTš5H2}Ï5pY§ÍK K, œtž¶×˜÷×o?ýu»¼º¹v¶&Ïä0½ŒÛý>‰œ¹GݕçÞ£v«Î[/ óE€ûßú„»‹?Þ\Ðm]~ńÁM.ÞñxßXóÄ ñâ3h¹ØËÉÿ¾òÛLÎq¥s²Ì÷Ëџ£aE³Âendstream -endobj -1456 0 obj<>/XObject<<>>>>/Annots 623 0 R>>endobj -1457 0 obj<>stream -xWÙnG|×W4”¦qyI$•7IŽ¾b1ÈCÃÝ¡¸öî =3+šùúTÏÁcMÙA`[Ö^}TWW÷|:P4ÒhLy}ÒÏú¸³ýñþ瓋á0Ò¸?ΦTÓÅå4ëÇ«Šîø}º¼ec<N²ËxÁö.kº¼Ì®öžùϦ#˜¼˜N`bˆFÒÂÛ\M¾|p3;齸 Á€f Žu<Ð¬ð¡öi–wfKIVšGi¨n¬#Û¬VÚ8*t-JE•~ÐʒP :›}€1äíuþTÒùç…ÉK‡ìRnæñí.bcÔfEç~8žD[éÿ°;1¼ÐŽi.É!ÌR-¬C´s£×œ¤6~YhC”ªÀmÊ«R*GN#\¸ð}LS Ž­O[‡Ïo3zWIa%Ð\À>dÂ”º±ôFºµ6é†}–ê¡äM •Z!„¼j -YкtK|XZ*JëL9oüsDÖrXH'ÊÊfÇ0Ž³‹'`ê§ÙàŠº—C@][ºõ\€CÄ$-)íH/8A¹®W•Dò%ÿ¿ W/èÁèfEµX­8›9ғRmÑ{3 /øº·"ÿ]•ŸÓÓûŽÏé)ªjCŸšî¼ß’a/HùyU1•ðW€L.»¹¼?;§nøVS‡À‡R·\‹¢†º­çY®Õ‚VˆI†ú— -Xס*H3G\Ž3<}è|Í&ì)Y·©$‰<׍r© W4@o,@Òîè"Ô¥Èè6Yy-òe©$Í wÊuüÚ7ǯºTìèÖÏ"ïü°,1B¡æ‰ùp††ûj¢ Áóbx|E¬sºå–ÂñýÆŒEûÊyйòþÉÜ}Ç<­—‚‹€¯ÌýÙ.ÆÔwcàSh•Œ^îHˆFÃoÎÇáÿ£ÒkXäOoA·† ÉN‘Ð3˜_ kÑJHŠoR€‡ùŠÜÁ 0Äû^I -(Jé|‹ã×’’ՍℹcãíC¼×Þ·Z9£«JšŒfܝQo¨tZ€$l\]ùȘŠjSþˆS [?¤cY¸yùöŽ_,Œ®[„ýIÁ‰Dñb!}@70WPLi™*é!×¥ø m³ý¦ä‡} šP__þ–Ëè¢öœ D[KWŸ· -͊‘Ñ/RåòIº}‡±R…F%Õ²žãJ/ZžEÊb.sL¨ä!%i¥­å\Ÿ(9<#5·„Ô.Qx¥[ußÂ~T ©¼-Æ]oóy÷üM¯ â‘h²mApb‰âZ%ÞË–ñMF×±/`朖z̀œGƒ-¾a~ ’ ãP$º)1Q~d˜ÍÝ$ýÉ]dAôT¤ø<ùü`cîÇ^ õšÛHBÀ·@—Èú¾ƒ¶1àvµao»1¾×'UÿYÞHÕ¹?ã¾IÚƒ¢XSØf—Á’VŒ`;€£ƒ.ÉΓûÀŽ\#v»ÒªàÆñ3h‹Û¬ <~|=J‡)vzÒå½£©eæEãÛßH¿XˆIU ÊÇ2®l®»”’Avý|‘í½èioüM)mv"<܎¾Hšü£«0+P(¶,ÂfBk±ñ:ã9._° liD‡¤VÝh¿¾l ²> ¼w4ß qUq´Ìÿmç;}«º`NwQmN÷BÚÑîhR^ɇáγ9°Qe”°ËpïЕPlÜN“"ÇbªÊ÷ƒÐxv`­L£b7øø#yIśV¥.PWn”–³¯`X‹ ¶¯mИ8{©ÀqíKTmŽ›Úc¯°Â`w\@Iâ¢È',Š¼Ç 2Š¿õ ¤Cøõѝ&°3 €ò©Á/æ‹Òð1ÁÉËQ -0–Œ§ÚSÚêzø~¬ÁÍÝ0)ü…À¶G§[-NúŠ€ µ­áÕ=¸Lgz,WëÃl;8O:’úL^ÙÌ3¿o„!6/Å{&ÂÇkn+ä؉J®Ô -óüˆºÏRƛˆÂŠ,xE÷û W¥j>Ó§‘â`ó | ܉Fk÷];³^cMÏÎK…_¤áLº4ÀöÐ-¨WÈǞj sÝ\§22¿âŽx4“ ÜÔ­Ú¡~ÛÅ>…£‹·Š~¸¹{Nv×ÄþóQ¼<<˗ìüá WaWŒ%˜F¬c§#Oâ -wýúæšÞýAæûþÞ)‘S“þUêËÿy¾ðñíN“‹l2ž†öhÂÞ~šüvò/}š3endstream -endobj -1458 0 obj<>/XObject<<>>>>/Annots 628 0 R>>endobj -1459 0 obj<>stream -xWioÛFýî_1uRD),ê´¤¨'u›¢IÚXAP4E±"WÒÆä®Â%-«¿¾oö(96ŠÂ!r™yóæÍèóIºøëѸOƒ¥ÅI7éâÍîß»Ÿø Çã¤OFÉ(<ätå–úϺI†“1¶õñ)%-Nà ¾ö&“dŒSwÌ?ñ±æ3VqtöºÕÆsAÃÞ0yÖXeo&ÝäüØâÅì¤s “=š-Ñh2¦YæéÒ,m•ÆTžÎ>aÓyØÔ¢tµÖR[Щ_Ä¥B¤+¥åßZòèÔãé7Ó^·‡Ow:íâïƒ)¯m%*eôá-]j÷€m–µ¸oÚÉäMG×y>íعÒmr³T:¸4܅Ô!_6[Iò–b¼­Ž¬Ò³ÉüJ<Ö"©«rK•ç”+[Q…ÓÁâð°T­<>%±^KÉìŒ6F?©h%n$–ÜŦä×| ¿e+øqdWÿ…ÎHZ\ž©R¦•)· ]š’ä­(Ö9ßÙt!£'™Y¯·O`¶Î³`Vÿç Žøhsu-¨²ÓˆÓ3O‹vè1töOo§çÝs|zacŸÜÆ}¾Tz½ç@7¬6SÆ[ˆÜšDÜáRÄÉz>77ò,„ҿïƒûãa0Shš&½¥LÚ´TëJ!._ àÈILs…hÏH%29£ aeç¦Xו,y´Ø€è.÷vÅܚÇó-5ÈØÔY]¼z{åí›Eà -í³Î[`€›Ç=¨¢ºk¦ì†åÖڔ´„ž3ùå^/ê -ý´R)úq*î¡st,ø][¯ ¶^¯1+dß".¼ÞùÔjYCêBæ8l‘ežG~ê ƒÉyUa¶ça+Iø*Oœ˜áVhK{±ñmÛŏþ‰¶"¡ ß>€jéÇlåFŒ G M¹ û…d Z”p:˜ôNf?CxFÌUº¾%»E /‚\‡ù&Å?—¹™‹ü¯h¸›L˜¸Dôˆ¾K’¤”<ì°B€ûkQ¢î1~Y¬üp÷È1ºßS§¶¥Ÿû¹zy½Ñî'µ—„Ô¶ÔÙMšÔ~M_ס-NÂHÙáØd@£Þ$é Øëç¯/ 9¥ù„ œ^š´æùÐ%›Cñ'Úã.†Þ¬õÿëz8&ãÑ?»pÍ`·ÿ8;ùýä_nendstream -endobj -1460 0 obj<>/XObject<<>>>>>>endobj -1461 0 obj<>stream -x­WÛnÛF}÷WLV -‹Ö]r -´°åP€¦)¬"( —¹’6&w•]Ҋþ¾gv¹²ÄØE Ä7Èär.gΜ~=ëRß]÷¨?¢´8ë$ê‡É„“1>÷ðk%­ÎnçgW÷×ÔÐ|…GF|ÈÇ;š§­Q2Hú }0J+½¦r#iš+©K*ÿïÎBé·ó/03 n7˜i÷Æ0Ӛãø֚Tf;3–¾Ô†¥'f2o†ž„UÒÑN•oýIZ§Œ&³¢ÏJgfç’àjT»Bví‚doõ ê!ö6R{ӕ“–d.ÓÒq.˜¿þ— Õeô͹[œçL„&‘¦¦Bg´ÎíŒÍØq‡ÚÝ~Òã˜Ê(I9<©žT.×2;q$tC¢X -Y ]iE©žäÁÁ¢¥™\’ˆÇjÇÞúF¸†SkLùìÑäÂH¨.ÞRQ¹’–’PLi×ñÍVrxl§òœVBå¤Vœ1TZØ=1z ¯ d»Fð:!_þY¹ÁÍxÎmL•g“žNÀ[­VˆF8Ü"ú¦3çLªD‰¸ùÎÕ=Øî¹×º’ezå÷µxfe‹3µûK‰“ieU¹Ggt U…‹dâ؝tž}rÏ |Æð•2 æ’À†«Ôî·C~š ƒ,˺‡É’­"Ý(-©´\¢¯ç‹·B™dŠl£Û¶½Ê‘­iÖ©Úfþ*ª`=Ç3ٞä7Ð.vWZƒÙ'“.uûžÊ‹Þh\ƒ»ÏßnwÃ@ö؀ç¡&QŽq_ÉàÅ -¡+‘û }gê§V* Ԝ‚khE!u8üMjYÑ¢—´¬Jt4i4Gº‘é£/èÒ|£ó©Ç í5EWhº©;¬…;/OÉ9Í88¿ç¥‡‘«ür‚xsª‡“APkI¨)éø¯°Á*ìµúÿ ôXä~lõht·W]/?3dšii „Ü@‘^¬ï%qoª d®Únóý³Dž(iÃU” ƒ ê2[¼­gKƒýÝ ¦&¤üˆÿ˜—˜o+¨Å$é^C퇵܏’aÂ$* Ÿ¬Yæ²`9Èè½µÆz¾ºÝãg×8±ñ¥™™J§y•AúéâÍþÇHfqbì¬#Áº¡‹ãƒþÙE«ÜoÑ0h#~hÊÿ"” bÇa&‡¨Äv+u&³„î­”·wl™›¡s©™Ë!Bù`‹\N7¢Ã8zèImwáZ,P‹;SfðyŒÈ0EÃ2c ýa£w>´Û˜¼Ž;€­ ífâçê ù\oX| a3•V_+Iñ’3»£ŸBT§Ì¾î…½éˆØ‘šµ°w†‘k?¢1®Ïÿ†846‚—JÖ’†“­0Á×96Û/Y¡Ç½xrÚ^ÕEî{ã˜C¾Ÿ´ÖW¹JQ5Þ -y¶ò¨b1QفïbÏ(¾øÜ/§ãó´.'¬—6žÓŽ×{§r i쬓´Â:èëo«Òɜ¥¬;?*ß`‹–LÖ jˆžÊ(Ú(Ñ%ð-ÈmjºhÀÙ§é\>Yä>ÝMÃN°2ynvœ{ -åa缶5\ZY°ŽB +4Ší8qZ`›v ئéÆEÛ=Ðm±¡H-IÅõ¿ß7$e+r±ÀbäÃE¾yóæÍèï“)Mð=¥ÅŒ.®¨lN&ń.—Åœæ× ü?ϓ´Ž7¦“âêøÆõ5MŠþ—ÛàÄ.Å4¯œ^‹´Ç͒·Á‰û_X}þá Í&´\ÈÕ⚖U¼+åéçN•ôÎYïé¡[èÆÙ­WÏåë_­{Ü8Ûµ¯–ßO&t6›c‹Óý²M§*É·Î?Ìi:MçœÍ®‹/[ÖÊSeË®‘&¯m§+ZIÀ)C¥5ß;Se mU¨Ç SQ#v¼8ˆGiHx +5˜>Pp¸ãÑl♪iµäó8ŠUŽ(c”>F鉷?'ë(_ßöQzúvŠË•m„2þÛ«‚¾ÞÞ=ÂàÓW’O·VÓںѹNz«»Š]ӝ 7·ŸȈFâYK·÷$ªJz/ýaÏ»OKÐðdõ“Œ|D¸’´Â150jŽAþ(ehµ£­ØÅI|€ÝÁƒµ¶ÅcEJÊš.rR.搒ò^ù²óœ§%ü- @,ù œz÷š„Öôñ¾*SA…0SŒ +Œ¬„l¤îáã h{îI:úb#éFÛòñÛ«¼ +,à*ãâÕ£(ö7y×}þ°w¥˜¹Ä“¢Y‰Ã¿gÜHSŠÖwZļ«@–Á,ßݟßÞˆatdQëlՕÁS) ²êåVyYöŽQ"ïB–¨Jã<'a½–%rŲKyÛrXžPA ]»Îæ³Ì6$>âq_ÞßÉÓéÄøW±Q¤}-PBӝQ 8 +ƒ ù*ÉáκiF²­Ñ»~6gtiwVýV¸ +™ã0… Ô¼De¼p²±A¢°ŒEEËÔ +ebÅq‰úfU ô×TKÝÆê@¾ˆëwažâý¼{Îy¹I·ž”"†DT£´p +vD~2§ÇïL9ĉbÚ#Û«0¦ºO& K³Â ù$ÍÌ)³5æõA"ĊÀèBm¡‡ ßÓ¶–pý,çd-‘|.$ŸÊ(Ȳ6VÛ ÊžW³š[µZilÔ¬ªl§£á—̬Út.Õ¦5µ9E!6¢¬>e'¾–ãBi ŒõH +¿cKIbMǍttœ4OÊY“ô|»Æ“e݇Ùg‰‹z€)ú¼ +/=Ù-¬#–ôKÌ&“áyÇÚ SeCOJ8=`³EE‚š£ðf}î{i½ˆ=`xg¨ŠQ˜{-G1îlçJY+-ǹ1ŸLþ 6…r®8º">d7„ñæ.Ë­b0²dçu»1Äñ•EڍEƒîÚÖº·<‹¨l5<ƒõÞKD +ÃzUiâý¶ks&!.C1Ø«: +¿éà›‘ dŽ¢žÙïÒW +Ž9Ê„2·hz^¯Å“Œ¬ŽNl:Fc‰yö1Ì Ug*aÊ·|€È[ZP3<'ÄdÅ´õú¥ðý²C&Úf’§µ¡±ŸFªch"õ¥VÑ·JëQÀ‘Ð8…€4_¡Óô.ÎÃsþÜ€Šõ÷ó þíŸL ·¼§¶€ pþŸ¸yÿ '(M9<‡ 3Y؉×èr»ØH¼ä¬?ß?ë z‚”P&,Gm`-è7¯iÕ\…̾q¢¢¢bZ̅‚Õì7ƒ©K^ýíTÉ·`^ªui¤FÜk¡´I¾”F8e1ëåÝûÎø;ºel$ðE”³‘³ÏCÄ1“h_ÜtgœÔJ°Qcí³1¬ÄŒòc¨.)c£°”AÛ|:RÈL4ëñ ¡é%5Ê ñƾ˦}¨H87Ë"ÌT 1±‰ò5`GMà4öÑá-æ3Lh—Å5þb§ü5²èF©¢¢?e±.6EýEfþ:¿åíæ“ââ +/Õ{ï;¼“íßõæ‹y±¸Âk)o6›3öߖ'ŸOþ¹ÅëÀendstream +endobj +1184 0 obj<>/XObject<<>>>>>>endobj +1185 0 obj<>stream +x•WÛnÛF}÷W üˆhQ’%9@l$)Œú’F +Œ¢.‚¹"7&w•]RŠþ>gvI]#mG–¨å\Μ93üvSÿbš h8¦¤<éGÓ)í_l†}_L¢KM'x£ YIKœíãîÝKsvtÙߝà|sô%³ÃÿavØ¿„ßÂÎìõüäüÈâ˜æKä1žNhžúú4Oξûåõü+Îô钏ÄÑh8 Þà"šâï<=£æÇÊÒT’„Ö¦Ö‰¤ßHD‹(‰ÒóLJOüþéáóGú[FË(‹òý¥(Š¢à  ¢×¸ˆGÑ ¸ØäÒÊ·áÔxjo0ŽFAã®Sj[D]zÀ܇«IUÁ á…nï®ééìÖ$¢ ;á*\¾¶fã¤}zM7I¤©•Î‘ Çֈ4qÕþúқirײÚûìó鸔owÎà^T_¢x<â(î¿i·¾S)-$ej-5 wp|pqA oþJážI9Î÷À£p®.eJ•a;ƒ-Tå(nÚÿý§×=æðÀ@tªWJ]Á,•"•l…„äR×Y‹ÑKX\K»¥Ü´* +8J$ò"SÛW؛‹hžÃ#~µQnë«Éu’KceÇe­S锋aÕÂÜr¢¶𧖴‘”º˜Ó³6ŸÁaA‚ ¶ôêrfGà_Òʬ*e4ˆÄ)$P‰ï;ȍ›rÿǑpÿ~*®Õ|TÇ êT®•v$y Ú¿êcî,Yp4Ö¯É{õêhwÔ&óC¨Î?´½:}¼¹Ÿgr@Á†Ä|ÚÛÄÊë¯ñl¥»=*‚ t?§Y(;„r•å()TӔ(· ½gIíÄÝ®ír+3°NZ*óÑó°2™ôlÞ`’ð¿Tە¤µ(j¬# T‚iÀ½ÁÒ 9㘀|Á®&»êN&¨X U° G$³·Lí—BH2©ßAµVßà÷éŒ åéï‘8‡ëÛCμhÍòS€ËÖZ³”±ÁBèRh‘¡ÞJTŠÇEÓXm.Ogmۗâßæúåõje•öî2côrÐÁ¬CÔ ®S€½¡ñv”á“7dØØiñ +ã±­##€8°ùA á7¾ ±‰$ÔTS!uVå<4ƒî¶…´ÊOE`}"ƒÁRò[6ÝÉ ‡/jG‰•@ 𠊱ʶþšr\é­‡³,„ÜX„ßu7@‰öþ=×ÜJ`27‹DÇw|2î|E¤°-½ŒÄaLS >)uÚâ͹$”K¤c4Ò¾ýxD» +Ë£Á84ï„^C¶„¾Ù•–;ðŠ’BñŠä¡Ø¬/œ\a2ˆ.Þx˜ƒðt²e§¼²ñ EÃî= ŒI2 0!0 X˜ZjqMq3ˆrk2H|Ëä]êa‘êøubìV8ª¬X.U♞qÙѓòûJ¦ªÂ9$Æ7ïSÀ6¢p>XF=ç…Y‰]¡ãØ·—H¬ÁÝjq£® .häIT̯OF#&ìPØ"Ö¼/ÐZ‰€™Nþä*»{ѕCžé*«-î:-JÞ>Ý)-UÁ$döò ¢vyL2Þ¡¢ÐË°‹…“œ2ã:½È ¯N¾€l‘ÖveÀ$܃z&LÊföùÂî·OKÖ vŒQý +Û¯ÿÛì¢ /ÊõýÅÎßùG™Ô”ీ;3xçgÞÀ<ßrY¬B´¼"€«€@Wj‰™¬Dtíá<ÿ0mžµâ1žZ§COFÑ吧óìêîúŠ>ZórNïL‚Ç lÜm\ÿ^{GoÒÇScz֌BŽóß÷¹ÜLÆx†æ;lðýüäϓP~ã¢endstream +endobj +1186 0 obj<>/XObject<<>>>>>>endobj +1187 0 obj<>stream +xWaoÛ6ýž_q˗e@£ØŽc;ö!i’5@bgµº®X‡–([ Ez$/ÿ~ïHÉNT†¶j‰wïÞ½»ü}Чþôi< ÓeÕA/éÑptƟ“1>øg%áA2LFÝ—éÁÉ͐ú}J ÄMƔæ„8½¥ÙQ.‹R—¾4šüªt´)•¢±d´zÆñ­&A®ÔK%Ó¥5õ:¡©ñg„LJ¤ÜT/VÂyiiaÍÆáçJ8šÎÒ÷·Ó_~J¿ô踚 àÈ áiÃ1ÚÊBZ+sÂ3œšîçô©Ô9bÑ4¥«"¡é”à48$â1©3€Á9r2«méŸ;ù¤~*­Ñ•Ô K\…Q_Ý_ÆóŽó7Í2£½5J!IaÚû*j|S‰@s”4™£dÈ7ûè$™‚>ÝNç/ØÌ ®–yPx- ºþíúÃgÊTɐÒw'·´¶Æ›Ì(r^d¾…”š§(—uCN ÀÚ¹aHҟ¤=q ]èç6x(—BOߏ!Ç9³Pê:0ËIz'+*-ò U§…p¨•¥K0e#GŽ‰E…¾J<ӔoNK ázÔfCbaj뺅Ö8b½A-2ˆO¢68ßÉ»O2Ü'æ’L ‹ +xAD¼F!J±BòÜJçHóX¯Ix/«µw´@e@ªmHcýqD¥:‰ù H€dN¸WP­ ‘e*6Öuu‘š]i.ª…*÷k "7¥väêõÚXO?Ó³t‡­D]µHXT°ŒÿX*³ÊýÉÊgÿ!/hhiÛGZEÐ@ˆ‰“<y6µ¥WH:<íÇur3ÚZÑqÛ1W36‰ÐdgWGÄ /P—ïqÍBåξA»֗Y­„E÷q ÔlfÛ®ƒÙl4¡ ‰"OnΩËdï<>Æ¿20ƒ«X ЧFsHúrÔÿòÓ®‹aª; kr z1F+î×7F’Á&¹ t2ZÁTâD±ÁW‚µ2~xÅBɊ}ÓÕ + +.¬©àN£RüÂkh[kA°`­»·FÛàêªè:€™Jy;›·I^t›ýrÄ ÃA2ëŸQwñ’Ý +êõ°Í¨…¯K—¶lù =̈\â+DˆVnl! ó>[æa °u£‘tā£Ûx RNÜ\¸“ÙÖñXlTÄiùÁ +3ra–ÁòZƒã›V ìêÒ Ô¦ W^fü€Ç*·XÕ] Zéy²: Hv ‘"K÷ÌÊaaêå +Öþ’!·–sd7Œ·åÓ҇_j0XˆLãeül¼L¢èÐÑÞþüŸí¥¶S%ôg3ÀøR·¿·2D¡ø›°4ґš©É#¬p´Uf— Ƴ½iËyŠ»÷8Šé€Ýc^®Äz-µ{C˜³f|PÆOÂ4Fëvî å5:~—¤(gdÀÚÄ_þ¶%wKj¼"?bFÚ[&÷ï-s h³°xJ¼Àˆ@—‡Ućù‰­m·n´íU^E(´äºzÓ¹eQë02šu‹O·ªlV¸¸ò˜µl†9›Ħځ¼ÖÈ¢ÊyÖ…DkØb}!Z`ÅÂü/y‡DAŽéãüšfÓ»Ïø¸¦‡³tönv÷ÃÞkÄSÞ6>HgTðŒM ¾½[y·ŽúâE@hëÅKXÿvΏÿgðÈèn +ýь Aº®Ñf*L“ƒëô…Šö®* +Õ‚)½Jú—^ËW뤰ò-£ï'ÃÓA˜üÄ,à•æmPłYôƨ@ +/Ô£¤7:ã—îîßÏæ)Þ“a#ɚæ³Á.y?gki«³;xÙîpoÙ[}¼Â DÛ2pž—0Fñº˜™5Xr¬¬ø'—¼SÇmçøà +£±áx%v0ßìˆÛª•:Su.]¸ûÉͤÙú#ü†39¥Ñx”œ‡Ýz~qyAÖ|ÅtÁ/YÍÉÃòżŒxäxÜ;gJþ× n.øÑp>/XObject<<>>>>>>endobj +1189 0 obj<>stream +x­TQoÚ0~çWœx¢R1II¨´‡V[ßÚmjª½ UÆqˆÛÄf¶)åßï΁µl‘ö2 V°ï¾;ßÝýÅá7†<y¢E¬(à}±üÁb¹d)¤EŽïñœå`%Ôh‹'iÆâá“xÉæC'‘EÇ刟æño”QüM9šÝ¦ÇPÖ³tž@V,Ø"+ ¬F¥˜Ì¤³Æ8ï®@9pž{%.¡á¶o ãJ{|.ë +Z.^hÞÉ'ØJPº6åó(‚iœ±([ ôäóýC€â°1¦Ñ%$¬wþè.“Ú+ÞþÄiÚg:MrV`ÆwÇõœòÒÁžkOIYé¼U†‚Ö˜—ÝօüNüÕ¨ +ÖÖðJpçC ò2íÎ+£Á[^×J0( cºÏés‚ÛW ÆVҎaË-Úxi‰"SÃÆJí+{w@¦Þè؟Pû˜Ã8WrvÁò] i²8]ŽJî>Á^imdƒu¸"½÷ˆ'Í?PIâ#•OÆ>ý¯¨}z«‰lU§4'yúD¨N(™ÕÅp:qʒ>"¿’5ßµyä#NXÖŸññ!ðHHONÈå_ 0ؓ|0&÷1‚ÖÒº )ˆ—R(êޘÊÁÎI,©C8~Ôê ÜÁyÙQ=ªnÛÊ‹:nÈÁùõ¤[Mz¨CŽµUï´U(xÛRé`MáOÛáÆ„Ñޚ¶íÝôêûø½]šÕçœ\µvn¯¼h†<¨kÎ}>$FCß C¾¡_g·ÅiÄd8ފ9$غq’R½=\ßÝ\Ã7kž%5«;" i5š‚âÌè]¦y„M€“ÃÀýג˜†Î .¾áŒ–°šÄ« ØZã0-nÁÝüPº2{‡#J4JKGiž²'Ž¶j’ä´õ¥}ý¦¥rendstream +endobj +1190 0 obj<>/XObject<<>>>>>>endobj +1191 0 obj<>stream +x­WÑn7|÷W,ú°Ï’ìHr¢HÒ0P;m¥Â(š>P¼•ŽÕ©<+úûΒ:ɾ¸@‹qAÇãìÎÎή>Ÿ i€CšŒèrLº9z3#ºšNðy„ÿži™\‹Iÿûw󓋛k h¾ÄUãɔæ%ᚾѧ?*{§,)[Òýœ~R!l/éƒÕ~·‰ÆY2–fªY¨×ó?ÓMÃI¾éüò +QÌËÓ[½+[-§ó¡+÷‡F“b,‡îy˞¶Æ–nH׆m ¸œ±¸¤Í>{ÄéX1Þð|†BdU’[Ò¦Vˆ(ò—x<^ÐG- B”t>¼ÌÁuH[S×äl½û{LáÀó² LÑåc/QkkAÂ3o¬Lˆ~G&ô ã–ÕšËbÿ5Šv%L T SÕʾŠ´`ÒÎ"ëßZó…BÜÕü?½c­$R0+içZÊ7¥ø+î"ÒS¨lºg<•*ª… + W2— *õ˜sšú!æ(JOÁ5¼­G¸\ЍóÔà¤±Kç%²8ùÂÒé¶AíÓפ®$¯^ܼÙëæ4ÑS.h¡ôZ$ò]~ÞéJž{ÕpdŸØ?•eâù¶Ù8¬#Ý»ˆ¨ß&¬ë֛¸{~!Ó åÉ )³»w‡Juužˆ¬+k>·BsCÁ4¦VK¬…Ö/•3óÊàD~PhäŒ*·eÔù¬ÇVÖæÚ.™7YÑYºâäí6F«z/`i!àó>8¶åˆ>^Êd©v«•±+tQŽ¨‡ŒªÌˆ’ð¾%ϐ±­œ:"©>c?ƒþyÂšH¥Ž:=õ‡cZì"CwÐUIªF[š°Þ³‡èT\ñ¡Ú}¾èó天蛮Çz¨ü¹5€‚¿)è·Ü7Ö!TöFô/@¼ +ÇÒ/½käAsF’>íЮm ˂¶l4©0èa¼XŠc&·|bC+ÍÒàYö#éð•ø˜Ò:Y‰C¼ÀÍû´·év/±"XC0ˆO-àY|Э­ÛÖ\®`R©z Cè¥+ù¨¥“|ŠŒnØ/YGˆiãB0¸53ª«…ö _‘·C³HT–´4ÀW"×®*©/"‹HDLë+ÏI}&w‰rÖâ6>± +ºÅ kÒDhڐÌp͛F´ç˜ýIIðûAöƃ| Ãìe R1àøz×7ßےS©¶˜,)ÕÚ¬E+T:Åo+£+LXñøTðöÂðéš-G0ÂN½½˜~3Œ­U‘Áz_ÀŸÈN=*x‡ĦI+OBl5Úø(¬4¯vͦ)çÒ·.E&ývŽM O§ÆÞÏûÆò°|X]¿!ŽúÓëÄÉhTŒÃd{ÓË4ÆÅ%jŽ³iJc!¸Âz1ƒ.–‘…ˆ.IWÊ®r½Ñ2KÕ֑›hª1YL¤ZD‡¶ÐÙæѾrq’DfOè\9uq3>Œ‚d>ùË£ÿcqÛâJ¢ Y²W·ikAƒu$ï‹(3Ì¡¬øtØ9ú16Dr.’ãZ¨'Ü&?îó|Î6ñ…¬ +P˜|¥ÖÍB¹ô~^D¬4BdÉè¨:ù f…D[ædúbþ˜$pg´wÁ-ÁJÂ!–NYÆÉ?ùKe) ¨K¼âÑËX]·%§Õ æy·¤ÜÍ臏3ºß‘½k]B ‰a«ƒÑh‘Â~ýOnét~>šÃëcR7~ûœ£Ó·pN¬/^Äï @^ +€\¼¿½™ìv#[P¿!JjÆyx2¨Þcˆ`4®ø⌦ˎ²&4PfÐÞ,Ðü²ýø•É's:.#½ÖOó?MWòôújL¨…©e9J«,f]úm ²Ç’ 1°=©ñ±g{ÙìWÀi§³ÎچƒËâBƒàþݯœ«ÉU1O³VGSaèÃüä瓿ÿÞkèendstream +endobj +1192 0 obj<>/XObject<<>>>>>>endobj +1193 0 obj<>stream +xWMÛ6½ï¯˜C8ÀJ¶¼Ž?Š¢@Ò&@Ù¦]ía/´DÙÌJ¤CRëøß÷ )ɲã"A°X`×$gÞ̼y3þ|“Ñ?-¦t7§¼¾™¤zµœ¤Sš-ø{Š_+© ³åôëƒ7ë›ñ»e3Z—°5_⏂`g2¡u>z]< íÅV:2%=|xCoun{¯Œ~¹þ„·3Ê2~ ÉtÇ£}%”&/¿xÚ çÆŽ`h?‘‰ÜçÈïð©ô¸ò”Òƒ©¥Ñ’§ô–Dw@N«²”–r¡Ù§ÆyvL(Éî\Z™ÃËÀÝÖ° o‚†í¤}–6˜ós²H—uF§óΓé<嬌þQú~M…‘N¿ðT©'I^TO­'Ñú€KáI…;1ö/cÚzŸ“”Þ{:¨ªB‰ÊÆÁ˜a6Öøsd)â'Užý‡¼VÎҍ÷–*ù,+\Í«ü‘jSȓ¥ržŒ¦½55*È ‚e~yá·46uPù‘ùŽr£µÌ¹ø·tØ)|¢!¯GâÚa2¥5l]aÿ;:š†K‡¼q=œ7{>q.a§œ…A¶àçjÅîVéœ 2¨XGádºL³% ²¸ ¯6:¹R‡ó’'Ÿä>ä²Pîé*F´ÏÀ®O"¥:Î!`GNÔ²§•ª’$Ðo(Ž¥F«/¡ø*ç› RŽ³ÊlQs¡ *ý>â?çô÷yçÒpc‚±AÉDe¥(Žm F̼àüqÔ¹÷²B×vþ_¶\p€®uÿE­ ø#·þò֎51ù˜±ƒ¢KÚ¨-RTWSÝ%óœТ’é0[DÆ09]½ Ä.è7S×Hâ9ÐÓ«·óx›jțÇo”/ˆÝMisôg5”DeðÌ!×Y†¦8(·ûºçkYQžœªU%§¨ãˆóU+^£H™ ô#2¡›ÇïN÷ŽûïyœxoÍ֊Úݨƒ’Uì˜ã= – ì£qãì¸2¹¨Æ`êFŒ7J/m=Ž¢ßz]6$‹øj¨”¢PPkoìññe[Í)g¾•Ú¾F—~´9‹\Ay¥¤öI«Ž,xࢥ ÄʋÜÇ2ü\ú‚3šï„ÞFaeù{q©FCáS°°‘;Q•¬mЩPjckÓð‰–%_I¸/KSUìŒ‹ 3_r±U±„Ÿ°v š0‰ +ø!Œ£º£Ç«jTޘ $"ðS8(‹•Ÿ‰A€Ëè;ß ¦>ZUs…~7Lqt‡ö¡Y1v:­©ãf…¤ãM{7f±±¶´ƒ‚® ÙFz±bÄ#‹¢ŠÃ‹ç:ùã^ÒÏçXù)ž`fj®Ò»WXZ ´|鸛„=«þ¨Š -].[G¹,›¥«Öà/‰ÁƒgQ5’©4í@-+}cu;Á¶¢Ñ†p&­¡~=éüýú¿ÝËC@ö±]˜¾‰LãA@va³÷ÝuÒ_r/±|ËÁ>/XObject<<>>>>>>endobj +1195 0 obj<>stream +xmÍnƒ0„ï<Åébr5Ü"µ +/à˜M±ÄÛ×äçVíq¾™Ý_/s!Û#N!F¯¬½]õ‰(BÝ:%Í3Ô XÈC-üuš¸1KóQ_—¼8B#W 7!اaâŒ~¥gŒz&4d¹ ´ÂÍHÕ=ދ|˜ñòòL-Í°¶'¸˜xGXz)z,rÀ‡…¯z µRI+“” G©]•¿ÚFi²>/XObject<<>>>>>>endobj +1197 0 obj<>stream +x+ä2T0BCs#c3…ä\.§.}7K#…4 Œ™¹…BHŠ‚žP$YÃÓSO!¤² U!?M!3¯¸$1''±$3?O3$ ¨ÏBÁТO¢¯zs=s3  -!)Ɔ #\C¸¹øÌ&âendstream +endobj +1198 0 obj<>/XObject<<>>>>/Annots 475 0 R>>endobj +1199 0 obj<>stream +xm”OSÛ0Åïù{ Œãÿ>B)míÐƽqŽ.‘Me' ß¾oåD^‡L2Ï?iõöi㿋…ø[QQœQmaâ‰ÿøõ…ŸPZfø4­‚ä(v´^i( ƒL0! e¥/Âû„4´ +³ÙF©Aã0X‰²Rƒ&å̐ԠE”r¯Ðè% ƒ\P©¹ÓhfYjÐ( b¹WhдœUv QPp‚!¾R'\‚“4GܪgBÊË LHô ¯r£Ô QÂn|Y©Aq +2š¨Ð iÂw3Q¡A˄3š¨Ðè•"A¥-Ü(ù½.#ÌEæ3rbÊèÈÆP<è2òLHL »NτD¶î2==b:Ñ£‡Rƒ& ÷8Q¡9Ÿ˜§s¢Bó$¸{ñTjÐU<;WjÐ$S¡Aóœo|ª,4OY1ó,5h–Í<»{Iùê–<*N¸{™$²x>=ÒPê~hž ‰ìc0τäìݯÛC©9û|¶Õ9MbôvrêÄäôÈFkž yrêÙèô¸/8τd§.S¥f§.SOÓ˜g#)rÜ#¦Õ´]ÜT‹«»“AÕ¯å,/¨Ú¸·1žÔËoí`»Í¾š®½¨þ`m‚ßþ¸öÒÝjµY®•yTT«–ºWmÕ ©ié lÓí{Z¿¡Vo}骞›ž^•¨îÚA5mµÛÎÅ'þñ|Û<ímÓ>Qï +Ÿª±….1¨l.u{hl×Ý}0Ú˅=Ž«*õ¸ÓÔméŽä¥ãÊlZyª÷»×–T»¡õ³B:½®ácx§>è=,Ù –´í©ínSѦ3èãáâÌÛ×ŽÏtíhSR=¶ü¨º·QönÝvçÍv»¶ÿ¯s]äöÞ¨úeÿúqÛhæ~oõîýx÷ëjnŽËÏJ G×·ëc#d´yüàB,eócÏbéÕ]1řºW’?Ÿž$Çû'+0g€qÄv>W‹Ÿ‹Rá“endstream +endobj +1200 0 obj<>/XObject<<>>>>>>endobj +1201 0 obj<>stream +xXMo7½ûW t‰ ز-»¶[ ‡©’¢°Š €/Ô.%1Þ%7K®ýû¾r?DéTÄ9ì×|¼yóf¨g·tƒ·ô¸ »*곏˳ëç_iqCË5ž<<>Ѳ¤›ùÍ îçÿxݒ²%½lU«Éë¢kMØS¥ßuE¯çk×âfû®[OÖ2–ÔÅòûÙ ]-îaé¼tµ2öõ‚o^?ßÓímttµxš/ø…?èåËÇdƒ‚®*Oa«©¨Œ¶T Tº†v[\Ì#˜‘OOmg­±›9-·ar¨açÈ5Á8ëñ•D/AÏRx·wÑ?'7ë8ÍøxN߶¦Ø’[s>šDÔêB›wíI­×º1ڝÚO£Æë–BkðVp¤:¾¦PAgÎMðºZÏés Òám†°4pª}rÙ†ÝÓ¦Õ@@ÿ 0öz!þz¿/ª^©D±ÔãÛôfݯ'ã³|h•ÝèKZu2Ðqw&l']Ç“jšÖ©ˆÊãVÊ6´{x°®†±&$[ +s +gCëª +—«}æ~ÄõRÞåëäªP–œ ̉I(‘ð¢Þ•©ÔªB¹QÂÝVãcæ*©‚«Î¨ªr;]Γ×ÅÃ\8ùù,–Ú­Yik׉ÞkÓú€ ðð¦n*ÝJ¶§Þ³n0í5RÌUï9¯Áߜw…«k|Rî€øÙ0®pY½qŒ$Œ0µ‘ƒ‰~Bj·UuL¿QÞï\[JL ÌðÖ(+ƒTº „Þmõw ^Á,N ^÷Æà­^›üuÍÀ/âO؄ÎÜð­¡f[f™R+)Sæ=vaŽ¸cC‡R¡Ô-þ;NÒJTî’<Ì>Z)nG¸›Å®cô3ðuOüs’!â´¿±{¨ÜU_wþô(I~é +ª¹+ÏoçÄ׸¼êõ?ªAycSö|#©“¤fÖ¯[WXZDKW‹_FÿŸERúêÄ¢~EÅiBBFWúgÕÆ8+´RµëX$!Û×óÎs8½÷IÌB«uÄlšA?¸ÅºÞðYïå3êK/’4ø”¢ƒØ²‡ÚšÍm!\ç`$Ϊß{<Î(ú1è g–õÇQ—Š²« + h‰;ÇêÑGþÒiuWƒÍ ‚Ü?:íƒgIOh&qiµoœ-¹½i#jŽ€² ú „é`Êó9q²,1£¤sƒ£$´Óm{2™cYã‰È]L}ä™çÌ:÷‰ÊY ÅÅC‹£kšŠ§„Ƶ“‰ÀŸÆ9ÌÃ9Iá_o—è؝D?’6*¡hÞ©SnNâÅ ‹3 Õb ­¹jš§†êëÜ3³oªš=!ÞL–A$qÄȤ ^/„³Ãy‚áAõ8¹'hô ¸ºF#â$¶Ó&pØ!L!¿wEvc¨ÖeæÐØR7˜ ¼ÖÄåBÄ( {­T]äe˜³–ÂDý¸Meý‚ž(¦Å +z°§² Ip™_|#È@¬,ÏieŠ kù(‹szq)<œt‹¼ªÉv†AØ¡ˆˆë뒇lÔl ž@涯£'œ$Ø—cñâ&Ùó-."UèžA¡ÎšŸyçùb«ë¼s± `Dkó +p¬øe~6v±.¹ ¥iWfଧkß1_Xmc3““žx¤‘9P{¸CßJYäaïm-C0Ù|W•)3L‡òó¶†AÛcŒª g°8b`´ànx~UÆ ífƒ–öÏýl¢1±Ì-b£†ž|’0Î"ÒªdÏ.:wL,ÙPÝcö¸{bÒ£™к«X-2ÿ[¦dܓ/Õ^¼9q!8 /ÉMæ +ߤßgäëÕâ¹Æs‹X"œ1¦†¤þoéÛ®µ™gµáeKZÚ;LuIh ]c"—Ñ4§ŸTÈgfÚ¹r†=cåâmó‘Vé\’IòäÑð„ÝRìaÎ5®Qg)Q™Øࣕ¥}ؓóK@‘=Zp9©~«.!ø-ŽpXš—yPA½ÅŽÎ¼r ‡û§:‘[ƒç/j‚®›˜Yå6HC˜Ç5J›0Paôf8tH›²zcLÊÉ +&3ß@mÁ¡ùj¤°†ËŠ7AšÊ Žç kÔ8¡™Nǽ¦Å€eåÒe®‡€Ú$}ãۃ֌ÛcʌâӍX<,:”ðWáñx9æƒÚ!–óñ_×A¸\WvÞÆ`wzÐć¿xL—DŽkÆ_ò™Œâ\ÿHף㽠µ§H;!fª±—ƒÎÐâß5‘ëÚí^þR">/XObject<<>>>>>>endobj +1203 0 obj<>stream +x…SËnÛ0¼ë+>%@£H¶k¹‡´zHÑÂ*zɅ–(‹©D*|ÄÕßw(Û-b¤(¹»3;;ûœäÈøå(æX¬PõI–fx_dé +ËuÁÿ9•h’»2¹¾_"ÏQ6LY­ ”5že(« ©+;^ ©Å¶“5¼ Ã`¬‡o•C#…V¾ƒÐ5FЊ£z¡´ç€“ƒ°ÂK¸~;çö5ÕIì•o±y¸»,Ÿ’ Wù"þÂù‘GlBN)ÆÖ.ÅgbN¤ÌΊ¡U•èºªŒsŠ #´·B».6ÖôZý«¢±!ÆýšQl«ó­ »–ÝJJ&xœéYY(K`Gd‚öB‹ì¥öpUˇíˆ=éM‰ð{ƒÊ„®ÆVâ§üY˔ɍºJ×óUºŒJ̜¬‚U~Ä E´/ÒÎÐK6G6Âc#ú­à ã4xEˆN‘ÂñUMZÙ µÒ;aX½©å Ûà!*&õ¢ÀdlšæŒ_!;מBO>°ò9Hw€ÚDU^>ÐLQFsÄ`eYZÐu­bÑq VôÒÇÌÓlπUp3;4:ziêx¬Êg´þÂR— "ŽàÄ|Rðmlcÿã‡ÒµÙ;|)cxí€h1 Ma^$½P‰!îu|ü§­™F|}¿>î\¾â>®Èç·“#ßÜ>ÜÝâ«5O²òøhª]5iy^®ŠìCŒÿgwoÓNÞ<¦“ä„Ç‹†}Äqยj·óñ2V\Ë´X­¹ý¬¶XÆ«Oeò-ù Q¡kÂendstream +endobj +1204 0 obj<>/XObject<<>>>>/Annots 484 0 R>>endobj +1205 0 obj<>stream +x¥WMoÛ8½ûW zÙˆ[þÞ[Ò´Û`Û4mÜí,hŠ¶ØJ¢–”âúßïR²e·¶-‚Ø–DrfÞ¼y3ú·7¤þ†4‹i4%™÷Ñwöïÿè͇QL“é8šSNÃÉßá*£‡^<FÃýÓx?í\ç4΢Eg/¬Ðd2Áçx>ÃgŒ«h݋§ÃhBãÁ ŸØ6òÅ&GÓy4¦Ñbðt£isÅO»×x:žbUXëŸv®ñtº€»‡§×ËÞåËÅZ®Êt6§eâÁÀyöÊl©2ôÜk½©áéƒÈW‚„#AwË1Ý[ »£“ ]œ/?õԏÇ8ã {*k²LY¾ÍF†³`¤?^,¹·Êªkít¥è½‰.6añ˜†Ãfq+rìw•ŠÊ︐&ÇY•XeŠ¶ºJù@ìÓJ8-›H†£àèZgʑSöIKü€9—¯"ÞE¢H( (©ÂŸÈwD’ëB;øB¥pnklBªvWVÚ|€2¢eªN¬¶8—ZºËÁÝ'à”„(„À`ÐYëÉãÙäñü½3P”b£¼—UªèÅÁ‡+2ë€Ý«·—o‘idL²“Q8ë8m>³×B~ÞXSIX2m\‰ã( ‘ÿE4ù_ÕUjìoŽîL¥~?unÉ)KŒ¬sUT„ß‚3³Ò…ð Á±ñ¤ºEa +œò,°fèþæ9yŸql|2ˆ×¦«Yw·lxI/¯Þ=‹èÚ Õ­=X\]*ëTtW»€ƒ)”½¿gÍC8a-qŒYp¥´ÚX®«ãØ·T$ÞnHFR”b¥3]iN³!!«P>u‘˜- YÒÅþÍJj:Ô=ž!ôÇóˆ>2q÷€Dƒ Ú"ψ©Djo +°Õ…Tpw­¥†3·ñ ìÇþ®ý¾«v™:Á1ñUM™ÙpÐkkò“]žWíAñ2*3d:&6'ÔVZ¢ÈL]eº`ÀATEé¨P¨$ÇÚgNìvË1DèGtë™rØ HSñ„È Eö™ 8ìàbåêk¤sh—°8íÄì`1󲵃¥µ za´,3[0åD—/Íw·ÿs{÷°¼zý:J«<ûŽ +…žY¯,p–¬UÚ?­E)f;ZéCb¥R,’]Á£[6Æ$ ŸÃ)H´×A ܈“—ֈÐ&°ºS%K€bbHŽ‚'—š:K<¤|(Xí«ý²Oъ Ç'äøŠQ—G|à¨/_ÊF)ú()nÃ8æ1žÎIkEß?Üs™ ÉŠ=÷_š±k5M™zR`·’µEê~ޖU•Õê)˜Ë ß\élT†ª³èº¾DÃ3"p°-‚Å—Ë»åQè¿àñž<žY#ÐN6ç!ZðÀ7¤Ÿ?¹õ6hO¨}r;TfN¥É Ê7¢ÿ›±~<†‹7Ž©Uj®u†ò˜d,V\XºYÍÜЗ5´ÑÓ¯X×õZÎSU¶vÕù{Ì°‡«7°W"ìÐxüHÐ5yBÍPã Ä:Rx‡‰à[ÿž wKÎP§â®±uÂCAœœhöq]´ªÿÝÒhKð*a1hú¤…W¦\oDŠ·^èƒë¿€ÏT‘ t ‹/î¯@i1ùSٕ²&T o‡@ßhV3cwßú{bpJ­ûÐgÁ›f¨k=Ú«·@,3 ÊዧŸhÃý³£ó½<ô¦†}‡¦å‡€NòÀitÂËM¶2Òdᶭ\iJª!hÓ@½¼sªD=Ñë5NÄäãõÓô [Ž73µR¤`¥T±oè8¦±ê᠜É‹Î÷bßRå¶Ûþº”•è~ä™ï4ð 3—/FÈZL+ˆOz¶G¤ÛP û±™AÙGÒÇ|ê“:Œ¼¾ãr¯éϾçT.dŠÁ ”0f#‰¥ +´ùd0AƒvÍDÁ"Ë6*Gâ` OŽ$`"„> ý<‰ª„Î0É×2e>ûæÑÊéÅ©^ªdE„· 4¼VÀ¼U´ôj‡ù–ÓáŠ+•Ô˜¹üv€…Mæiµó'AéDÅSÅ¡‰@– …W‚0Ï`$ª 3ölu–'dñ“ FׄLÁyD[ã›9Û òóÎ+Õ$š&Ü}ìý®#l~<G³é>/XObject<<>>>>/Annots 531 0 R>>endobj +1207 0 obj<>stream +x•W[sÚV~÷¯Ø—NOH’h&Óq.NüPۍyéÄy8HP¢[¤ƒ ýõýv„¸éԙ€V{¿/ßÏ\šàŸK¡G~@q~6q&D3gJÓ(ij‡ÿµ¦%#@ºÿøôá̟ùÎ%Þ$9M'3'l¡ŒΆ0°—¾ã±ØpêD¬áNð.'¿X, ftõŠm¢™ëÌZƒ§aMb²çué³9Á›¨XŽÅyãºN@—ìqSxÇú&±@‹XrN.|æ@1Ô#CO„‚Œô¸ÀCkÌT€çÍD¨U(ÀçÏX….ÊB=2˜ö +}zœïŠ!Á`ó¢H„Fl²@{/|ž=ΟZ>&ñØã\d‚œ2‰z\4>‰¶+@ f½>W€‡Ä°óV¦=ν´|œAW€7¹”€Š®{ܬ G@žã ÷B”"í1JF½™7*o|=#7¤ù-lÈ<‘™Ð<>[Ëtµ©ÓbEf­éAå EïÊ\¥iê2Ëtýbþõl|=…ñVÐ::Ÿƒg™Ö¡ÆèŠÀ×Z§h[ÖßøÉ +½÷–Ò†LI›"Ñ`QE":+U«\¼¢BǺiT½cIM¾pbØçÐ mÓ,c#&4r¹d¡º( )ct^Zë‘þQel7;2ºÖh4Ík½#…ç¼Ä‡Y+ð'úûFí(.Ÿ@—°bæï”S®Š#ŕZi‡®Ë<œ.R]Äúå‰Võ¤i¡uAYZ|ƒàmjÖB¤b³QY¯!ÑM\§•IËÂiU¡~¦ìãG6ASé*¯2M6‡’ŠóÎNûºËÐ9-aI"ÀOˆþo댓ˆð=y¨|C×çUV.Tö¥5A†^þ^ÑÕ¤15ºFðeXpÔ×ô¨#.´Y¤%òˆ„2öœ^·{$ZÏïï>ÜØÁåé U\/«ºÜTϳÞ^}º½¹:`Yõò¹·u‹ì­ËM–pÚÄSbKšk.+c„?W¨Øšu¹…[,õÐx‘é'-UÇnS¦X[Õz©k.+ª3z§%0ÊV÷‘ í:ö¬ŸŽÑ¸f·Ï=žç´âáe‹}-ðã‹S;’Nóñó³ÚPäõ®2p·RMƒT%(+n,tÞ÷MZë\ƖÛ©¶V@ÏÞ©mö¬ÖfSUemºôeåª,ž©»6Â=š3ö3¹[ +áa «êr™fºùýÔv Ëͺ3ú¿Ü>>vL€6Œ{Ö «ûX4ýÚкÌ5%ˆZ ý˜J(KKÔVnjXØ †l.xxm +΂2ÿjgR§Oûöû(m?d}a†¾0lÛû§ž4•ŽÓ% ¦•.t™`ÅÙ fӟeâåqXÌaHÔ:âÀ¼¸xw÷pq!áåIÎã÷3&‰Hþ‚^F™±©‡ý9ÔÛ9"ïœ8OøÅQ&^ –‹ˆcÛÂÁ lºA°z;N-–ÃxÓÔciàqÃ+tœ¥‹qç³dbA&TÙ®3ûtblÑ׋£‘28¢…QIžÊb_ã²ä~âoï%9o‚ƒ2?²êsWɲc}à)¶,:rŒÅ3.LËt$ëÄâ<¢+Ŭšo]&ÁdrDÕ7Èah ûƒdć²l³P¶VÁÜn}P1V +6g¹¤ªL #7Ά5vÚßX¯vá«Þèr¡2ÛmŒ_£n¿fÊÄE_êB-2ØÃ@.ŒD•f Rvßre'\Üió#«o:ۓæýíÛOÝÏoînµÉ3¹Æ×q»ëG8e]êΟG/Ûݵ®9ÑÌǙ‡ë,¸ä•úpõǛ+º¯Ë¯˜4¸ë⠏iñŽu\N"ŸFáE”üŸ{…~ç0Ÿ°¸÷ó³?Ïþ£üÁcendstream +endobj +1208 0 obj<>/XObject<<>>>>/Annots 536 0 R>>endobj +1209 0 obj<>stream +xWÙr7|×WL)©2•——DRy“ä8qÊW,¦ò¥Rà.(®½ ÐVóõéÁÁcM9)Û²öš£§§gðåd@}üÐdH£1åõI?ëãÎöÇǟO.†ÃlHãþ8›RM—Ó¬¯*ºã÷éòj”ñl8É.ã?Ú»¬éò2»Ú{æ?›Ž`òb:‰!þI oop5ùúÁÍì¤÷ê‚š-8ÖñtB³Â‡Ú§Yޙ-%Yi¥¡º±Žl³Ziã¨Ðµ(UúA+KB$èlö Ɛ·7ÖùSIçŸÿ$/²Kad¸™Ç·»ˆQ›ûáxm¥OüÃî`ÄðB;¦¹$‡0cHµ°Ñ΍^#pBÚøe¡ ýQª·)¯J©9ráÂ÷1Mt8¶>m¾¼ÍèC%…•@s[ø=> +SêÆÒ;éÖÚ|¦öYª„’75<Wj…òª)dAëÒ-ñai©(­3å¼ñÏYËa!(+›Ãh8Î.ž©;œfƒ+ê^QhuméNÔs “´¤´#½àåº^Uɗüÿ.\½ £›ÕbµâlæHOJµEïÝ,¼àëފüwU>¥§÷Ÿ+Ò5RTՆ¾4%Üy¿%Ã^0òiU1•ðW€L.»¹¼?;§nøVS‡À‡R·\‹¢†º­çY®Õ‚VˆI†ú— +Xס*H3G\Ž3<}è|Í&ì)Y·©$‰<׍r© W4@o,@Òîè"Ôà6x+òe©$Í 7ÉuüÐ÷ůºTìãÖsÎFîÄ؇ý`(øåN¤‡ôúصœw##@+b‰Ó-·Žï76À+0U97=0?™»ïç`ôR0þøÊܟ!ƶÌö@¥Ð%½Þñè6^ߜzÃÿg¥×°ÈžÞ‚i × “¦ô#—g0¿Ö¢‹ +ðߤó¹ƒA`ˆ÷½ˆ'TÑùîƯ ÔüªÅ s󪓴ƒx¯³oµrFW•4͸1=¢ÞPé6´?Ø$hº2ò‘505ŠAÕ¦ü§@·~,øƊpóúý)¾X]·ðüIÁ‰2{®< ˜+(¦´ž*ñ!×¥¨ m³ý~dö1cB}}ù[.S ˆÚs‚m-]=m šÅ"£_¤Êå9*’´sûc¥ +k ŒJªe=Ǖ^´<‹”â\æ™PÉó#ªÑJ[˹>SrxFjn •]¢ðJ·ê¾…=Õò HåO’z^oóùðòý® â‘h²mApbuâZ%>ÊVðMF×±/`朖z̀œGƒ­hþÃü$Æ¡$HtRb˜üÈ&0–»»¸CFDOEŠÏ“ÏÏ4æ>ì0qèPo¹½$´{Ûht‰¬ï;hnWö¶›à{}=õŸá$Qû3 1(Š5…mv‰,iýg۝qiÒ?» +ìàÈ5b·+­ +n?~¶Ø¸Í +2À“ÇØ£t˜b§']Þ;šZ`^5¾ýôÃßBLªŠ`P>–qk`sÝ= ” ²ëG‹l¯DÏ{#àoJi³û³áábô @ÒÐ]…Yr@±°`–Z‹×‘ÏqøŠe`K#ª8µÊèFûÍe[h”õyà½óà° ù«Š£eþëÞé{Õsº‹jsºҎvG“òJÞ8Ìuž}́½ˆba\ú=t¯€®„bãvš”9ëPU¾„Ƴe»ÁÇïÉCH*^ú°},uºr£pm÷œ}ÃZl°xmƒÆÄÙKŽk_¢jsØÔ{ýƒíkãJwD> `GŒ¥¾õ› 4Ó÷íÑe&Ð2u>’òIÁ/ã‹ÒðÑÀÉëPŠ,֊ÇÙs¢ê©yø~ÿ«®n!—¤þB`ÛcÇó=G|)²…ƾÖðº \¦s =–«õa¶œ!--}! +/iæ…_4Ât ++—âݒ™ÅãÕ¶rlA%×2…AbDÁg ãDa-¼–ûÅFЛR5O4Ç ¤8ØÃ|ç(v*½ÑÚ}×ά×XÓ³óRái8“î °6t êò±§\7˜Ž$§©Å°V}æÆ/p½W;̺–zlw!*véë=¾G3³‰Vl߇ëTFæW\f$›ºU;Ôÿv±Oáèâ½¢nî^’Ý€Ä5&°?¸|E¯ /ò%;A8¼UXc ¦«ÁïéˆÆ“¸»ß]¿½¹¦F’¹Ãºw2䔻éƒî¤Å :<8ކ~¤?Sì­¸“‹l2ž†õhŽ~šüvò/{r/öendstream +endobj +1210 0 obj<>/XObject<<>>>>/Annots 541 0 R>>endobj +1211 0 obj<>stream +xWioÛFýî_1uRX),ê>¢@œÔmŠ:icAÑŊ\I“» +—´¬þú¾ÙC—c£( Éâs¼ysðóI‡ÚøëШK½!¥ÅI;i÷U.ðЦÁóNòœúã~wzɈJIsœmãööëÝO¼BýQ?éQAÃa2 9]‚»Ù ‚»¸ìäöúcÖ3$cÈé9Aþ‰í?cFá¬ÛÝ{.¨ßéÃîÝݝcîW0b܃ÁÞ¹Þ?¿ä\8 +ßFÇæ^LOZ—°·CÓ9ÀŽG4Í.mš¦Ò˜êɳé'„C J—+a-5ú­^Ü*DºTZþ­E!n=|3é´;ø´'“6þ>˜òÆV¢RFJiSaêŽÆ#ò&­LÞ¶tç“–)ÝÒ&7 ¥ƒIý­KÍî0é³°éR’×ým´d•¶Ø™uæwâµI]•Z«<§\ي*Ü滇­jI€àé)‰ÕJêLfç´6ú¬¢¥¸•Ør‚MÉË,†WY˞‚زK‰o¡3҆–Â3UÊ´2å&¡KS’¼Å*g™û&dt–™Õjsµužµú?;¹gˆ÷6W7Ž*;‰8=gZt’~¯KÍ.(ÿ@Òi}:¹› Ú|:áx—Üñ]ÔTz³cB;ìîŽã6¹ d‰è7£Æ‘Ó /fæVžϺ÷èv (JQ…¦PÓʤMKµª"ãÂ7¬Ó4WpþœT"“sºVx~iŠU]É2ñ@D{ˆÝ§æN¯˜Y“ãz¾¡¢w`«z#«‹×o¯½~3ßSO•áCŸ ’'ã>ž™B(Ð¿Á²#êDÁ‘{ñÖ#Jàñµ(fÂÓQ› +Å"5 ­þñQ'a÷V•0ýH©HSSëÊ¡,bf½1kX,|’¤¦,¥])½ ÷ZÝQ¸‚Z¸)5¥¥ç û©å]E¶’+R–½ð›n˛¯#dGöðu@J®ëäÕ52ªy£ÍZ+%òmê8Ƕ6Å$eœ¡?P&3ZRmƒ4O‚X÷H`‹™¯ãÏü± RSœÔðÚ.ْ¥,å6µbÉÝ¢øÅZ»ÕÀå¶Y„ x¤àFõ{áY³Þsg[ªã͆‹0 ?³Ìõ„|÷ú +k¹ŽG·¨ɅԲä(Ål^šÂ…èýNÄÜ ±ïv“n»æb-ú9ãÄ$©¢™‚ùæ0:ÄaÒ¸ž] ]‹Ùê¨ÇAßÚC¶DJÀ¿BVK“E¬äçZ݊¥ƒayHΑØFCá¥3³ÖSúíÕËùèôZ–·²$X)²>£µØÐ1N¤¶Ìa«0`=D+Ï]9—¡Y8¨îÞý2]p…ÓRB'˜ˆòΑ Œ‚è/vµfì ×J§’$\Z¿h)¼Cš¡» j—Œs&’ONnò¢®ÐH+•r†ÇÐáZÆA«‚ݵõEÁÖ«†„ì[ø…å­ @}®5j\ˆ»-²Ìȏd0r ®*̸qò<ì! ‹òŒ‰n„~´«2¾_;ÿÑ8ÑO$ŠÂ·à€$@ø1]¹Ù"äÿèOÎÉãŽ~!™ð¹‡O&½“ÙϨ8C è¿*]ߑݠw¡N‡!/ÎoۉñÏEnf"ÿ+ªÇ ӗˆžÐwI’”’g.Ȁ•(‘ö˜¾,v~¸åãï©UÛÒ¿pòò~3£í 5„×jZjm'Nj^Ñ×uèŠã0Qv†ƒd8èÐùÚ÷výâê%§4Ÿ0Ó+“Ö<º˜³eè"x¯÷¨9jcúÍÿ#¯ù¥s4ě+ßïYìÓ“ßOþªˆÝendstream +endobj +1212 0 obj<>/XObject<<>>>>>>endobj +1213 0 obj<>stream +x­WÛn7}÷WLV +k­‹uq +´°åP€¦)¬"( j—’ï’ +¹kEß3äR—]ä!Îò.9—3gΌ¾žu©ƒ?]õ¨?¤´8ë$êɘ®Ç#|î៕´<»›]=ÜP÷šfK\Žñ!#ïth–¶>¥•^Q¹–4ɕÔ%•Æÿvo +¡ôÛÙÜ¿¦n7Üo÷F¸ßšáøƚTf{1–¾Ô†¥'f2o†ž…UÒÑV•koýYZ§Œ&³¤ÏJgfë’àjX»BZíÞ0áh[õ ê!èÖR{ӕ“–d.ÓÒq.˜~ˆKPˆê2úæ\Š Îs&B“HSS +¡3Úç¶Æfì¸Cín?éqLåZ”¤nªg•Ë•ÌNœ ÝÒ£(‚DVhWZQªg¹w0o©D&—$â±Ú±·¾®áÔS<:€\¸àiÕù[**WÒBŠ)-âZãÿßüA³‘®mUžÓR¨œÔ’3F‚J »#F¯á5¢lW^'äË_ãâ1+×xϹµ©òŒ#pÒÓ x«åQÒ'â[DßtæœI•(7¿¹zÍ=÷ZW²L¯üu_‹+[œ©Ý]úHœL+«ÊØ/œÑVm.’‰cwÒyö=É3ð€á+eÌ%¿®R»Ûx ù6Y–u5’Ù'[;)DºVZRi¹D5^Î_…2ÈÙ0$F·l{™#[Ó¬SµÉü!TTÁzŽ;َä7Ð.vWZƒÙ%ã.uûžÊóÞpTƒ»Ï¿nw¯ì±?ÎBM¢ã: 8¾’À‹9BW"÷úN3ÔO-U¨91VЊBê*pøšÔ²¢E!/iQ•èhÒhŽt-Ó'_ЅùFçÚk‚þ®Ðt[wX- +÷^ž’sšr, q*,~ÏK#Wùåqsªû“APkI¨)éø¿°Á*ìµúÿ$ôXä~lõht·W]/?3dšia „Ü@‘^¬ï%qgª d®ÚlòÝA"O”´á*JЖ‡Au™ÍßÖ³¥ÁþîãR~Ä JÌ·%Ôbœto öƒZîÁŸ²ùɚE. V‚ŒÞ[k¬—談Ø8~l’!۝‚LšI©tšWTŸ.Þ\à7|ˆÜ`×ÑŦ:Òª[º8>èïÎ[ånƒ^AAëC?þˆF6$ˆ‡q¢›Ô™Ìz°RÞ=Þ³eîï8ðæ-ÎÙ ˜–ðšÜΕ@â±5ú­{Í`?é÷ 㖲´Oö(ÅYØ$U§F£Ôuo¢~++Š}câ ҉óµÜJ™¡_¡w˜ÑOÇÒ.1ùó]BfR3—}„ÊÁ¹.œ^DqêгÚlóX 7¥Ìàó(‘a€†= +ÆúËFï|h»6yw=Z=²ÍœÏÕò¹:^®øÂg*­¾V’þáýfzO¿„¨NI}Ó +Ó§#5kMï ";W~:cRŸÿ q^¬ï'”­$ï +' a‚ŸsÌhk ·ß¯B{{Ýä´½ ‹Ü÷Æ1‡|++È$¬/s•¢j¼òXå)Åb˜²ßÀžQüðÐ/§“ó´.'¬—ÖžÓŽ7+§²§i쬓´Ä&èë_«Òɜw¤¬;?*ß`ó–LV jˆžÊ(Æ(Ñ%ð-È­j:oÀé§É<>Ùá>ÝOÂ:°4yn¶œ{ +åaç¼±5\ZY°„B H˒ 8;*ž{0Š -q„ÑôÝbñyöñã|±ø5z&=ÌyÒýLWëÈÀ}eÁm‹î;ÿ€[o½ƒ@ -Y,AYð]º¶¦Ú^ä°Fs8V#/IØøB T#_®"Ã_8­¥ÈHeRG¾éW[OkžçV=±–o¿Vx» ’÷¼¡&ÎãHËó¿áMžl$,ã…(yØ!îKì˜KläXßQf–Xã•éåaW©×{r8 ];g(¼®òèðNs³ö©&‹ÖS²Ó½¾ÅXÃW(ÚiÿãïdªMjëö1ñ®û4Õ®n~¿½áyö]Nw&­°t•~ c»í“>µÇk¶ù?^ãA2Mðæ‰çú×lîýüìϳ({ Øendstream -endobj -1462 0 obj<>/XObject<<>>>>>>endobj -1463 0 obj<>stream -xWkO9ýί¸ªZ5•ÂäÑlø²‚RvQU`!­©òÌ8‰ËÌ8µ=„üû=×öt(«RU„Éø>Ï9÷úÇÁ€úø7 É>Ž)+ú þì÷“!¦|⿑´88ôÎG4ÐlÁšå„÷û}še ú®U%sr+I¹.…ªÈÖY&­]ÔE±¥´v$Nª×K#rU-ÉiTÉ >Jc•®H/¼…[Q¦‚2Kº ¥tüðÃìûÁaŸÞ,-–²Kofði·Öɒ2QQ¥zI[]LÎ;Ÿdpt:ÿÐ¥ëB -+ə-|/9Lmਲuáø„‰–Ø۞3‘—ªRÖá´yC›•¬H8x\»˜ <ê*i‚Ž“9[)K:Ëjcá½úÜ^œ‘…9T aðÉÞ9ÊïKÜYõ(œìÝ_Ý|ùëæêî:Áëᝦ ‚íl%ª¥Ì:GòI”ëBv[Ás!Œ,õ#òF©ª$ªï•xdœ HŒréÿº¢ ],žÑY[OÔ #½óáËΈ<'xƒdF­G¶Ó¼ -äV§# š¾S\bß¹® fsÂ8f›p¤­Dè×F›pµU°ÏЇlpÄjc º††óa¤Ðœn*vR)(ú(AµKؓ՗)â ø5 -H*EU{:ǸåB¸q)S3Ð<=…Š­÷¹¯½_Åø¢FŠ,0ÞçÀn ‘~Ô¯4ˆuª³Ön ¬KliU(Œt×Ñ"àKÖ@4ôò/sQ%(5s-àJÆÞïy«*”ÛvQŽ‡¶¿]fœPã¡¥ô‚g A.¥;½¸º%ÿÝt(ß¿}OPB¯S `­NI÷¤ áù7>ý–¢¦ -%ËBÊ"«‰:¥Æ{Òe½X.ïç&t«æZj ‚V}‹Œ\C•}ñœÏ>¨ -‹›­Ó -³¶öÁÂ}Ðivêj@´ŸEúrFQ½ÝÀԖGOŠHç„Z¨eLbž{10^|ªÑ6gG‰Ë"q'Ét@ƒ£)Ùùp<‰´‘\ÿõáp0ÛB”Á8³¹-ج…¼ƒ„üÎÂÚâ%^ÐålÔ»~ñ´³üÒU7.#âY,Eª±×”ÛVÚ bRɸ˕e -¼ß) -ó©!ñë²'èúä+†J=ÖKæLˆw˜ðèÄ„8ø/,(ô„·ð7ÀtFM+8»ÅÒ¢K3,V€Y]!à8HÈ®Ðì,*à PÊ2eQôÝ·lœ!•Ê,¬º(ôɶ|IcxZUq³Â‚‘ ìÇÄÎS ¹äOIvŒOßbÕæáx:ÿÀyÓÝå—Ë«ûKú|ssuã'ä9n¹yDzý.>ljz‚‰ªL ’Œ«Á'?/8>}B]Á]6Ð;ÿi!Š\;”´ó±ka§‹Z ú~›Ò‹jŽµ¨½€ùu‘E2(+ó::~VÖ&ê ^Hs.í¡~`9`¦ÃÉó` îw™9 µlÆGH mè#¯ƒ‚î±ê鍅TÒWå`0¡Au»òòŠS¼TMãàŒq³ž~¤ñ$^doO¾žžp¸ßù¾r¦³šóó¹sÀ‡ÍÃIÔÊ;¿UáÑd”LÆSð'F}6ôyvðÏÁÛm´endstream -endobj -1464 0 obj<>/XObject<<>>>>/Annots 635 0 R>>endobj -1465 0 obj<>stream -x¥XÛrÛ8}×Wô›”)›uW^¶r±g\;™H™d·ø‘„1 h Ò²þ~N$M1©¹Ô&eÙ$.Ý8}útCÿë…4ÂÿcšÌ)Îz£`„7ÍÇçŸ{óE°¤ùrŒ(£p2&ÕSJë^û£óÕåhë£ËE°j¯m=g4ςYk´ýŒÑɼñ‚í¶Ÿ1º ƒE{m룫U¶G[ÏMÂY0o†“`Lát -{MçKœÛ?¹óΖxŽf˜ƒÑɤyâQàF«Y0¥)Ž6¢1~rI»ÞÛMox;¥0¤Ípϗ Ú$åmâAqt:¨BÒQeNwÙ1•™Ô…Ò{ú”›J¥%¡údR+<(M_•NÌÉÒƦ0$ž„JÅ6…½Üdt¯âÜX³+‚W›ß{#ºÏá×&ü"á’À5þHU(£EJ‰,°ƒ}Íó‡·óÊ[°¢Yúõ -[SmãΧ3Ý`#“ÿ˯~9k³xc(Î¥À!MN“ÉOº–.b£wjMz¹Ë€Î¦¤¬´•VÅC¯eþ°.Ì_ù…³zOÂ^l+Ï²»'¤,¿¿@.îHé8-™ÐI‡–¡mYø-jh¤MÁ¾šüÑ‚qì hs`¼Âwé)WàÀì×õƖªðQl@¢ëÇ{“ 0ÂAv|çÄm™´üŠDZL¹?8 k­f×b¡iëðº€GL¦ó\wÎ=ôѸ⃜Tš:hNÀ¥A‘ðÔÝÊXÔaÌå^Ù"?Ó£<Ã'ñÝñQeA[F~ð&øS"C@%Ð/æ$Aƒ+7ìÅñÿ’$Î¥¼ÔtÇ£JÏ$µƒƒàbÖ:(Ç$ ÿ€qZâ´̆¥-B]Ql²Ìè@$Yr—¬•'¥uñƒ¹ݹàƒýOR+¤=†Ž Ÿ¡8Þ§åßO¼ù£"è+ñë(r–¢Hé]×­šó¦%Ø*-‡PjÌ#í@4 dTjȎ…3)bŽ7ùIYYËI--Rk°êà>•ËbpfN÷*I¤î× kÚÀvÍ@äPYNVØç|á=/s‘Ýež©XÒ'?҄¢Ë"s!^9×_öìà‘ èæ¹ÈEì¡õ–¶I¨Ù°ÞÊF´€LŸ;H‚è ÜqûU¾½¬~(¦ö8˜ñüƒ¥ÎËÊǘ §l¢-DüecH+a­‰°Ác•1o¢c ³ÐÄw+Izh0YX:É4­ˆÙÑÅåh¬U\kÀT!ÁŠÉF;)ZdR}Üí¹ÕÂ%ÇI-@Ç3™]{¡g@͖šfo ` v¯ §&v‚ËTqBͶÿ+sCo’LiV?þo(R«6ÚáÊám\Վk´=!…«%Íh<_T™V«¿¾‡!:ÌxÍõ ¥‰i„¸S 9¸5ýﴓSwò}nÊc ÜÑKqRFŒ7|vj @ÌḯÎô"ƇçÉKz÷IãÉZkVK;¢¨0&µQ”Kû¨Š(Ò(úŒWUÂÖá98P9ziڗ/ï_œ:Ñڞ;LIL Š\c8~äNæÒ«ÛVƒïuŠ¶/vŽ*,Ò{®o̗­‘cŒÊªžÈJÔ×]uü#lY ÕqåÒù€¾hÀ[”¹bP¸öBìYì8£aDW–s…LÄ…×NáP¿¬Fǐc?‡ÿª¡&â»NøØL咫$ÌåNY²å~/-þ@Ž¸£[—ÈÑMTòÚ­¨ÈàÇeÇêx„¹6qõìD¦ò!E‚pêìs±Ý"s]ÍÊ"ºíœïßåBȽïŸen®Å4'΂;>õ¿@ëè^h±—yß´Ï"ÞzÉ·ûã&IÖЉ}&\:\Üf£* ë½nšßv°Ú€ý»Þ ±)è7%OÒѳŬ¿ðïz< VÐÞÆÁw¬&仗—ÚãPäÈÐ'&3îK´+Ž¯‡C|YsB¿6\ãN”ªíð~ýáöîÃÍzøpóíË:¸ùvSÑ¡ÎW¿¾c]FúOèõCš»[WSŠ:仼´Ñ“|Ÿ—û(ëÏ¿m>~üМ¦…³¯fK¾Õ^fðŠBÜFw¨LË \áW¸òm,rW>_z2=‚ÔÚçu§´qš,pÆÞÀ­ºafBŸqÍ,óy‚*¡7yæùßà€·.z<ēp“I¹Z°BÙ+ú|û®ïノ‰K¾»õMÃÔ*n˜ç.qƍš¯o¬Vd[ñ’³œªèµqÙÕÐ3íIÐýàFz€Qçë^j™ãV¼¾‹DYa]Æ}QTݾp×Ö_Œ–øJdá€]¿¹û†ïì¿£¦÷m—9à×õôëÅhÅ`ý §‹i°˜/} -OCÞæfÓûµ÷«O\endstream -endobj -1466 0 obj<>/XObject<<>>>>/Annots 640 0 R>>endobj -1467 0 obj<>stream +q„ÑäÝ|þyúñãl>ÿ=:æ<é~¥«Æ²udࡲà¶E÷Ž~@…·^? …, ,Hø.]YSm.rØ ¹?«‘—$, +ü ª‘/W‘á‹ß5歅ÈHeRG~é·ZOkå¶<±’ …ÂÛe¼ÿà 5q¦˜ü@Zæý —hòÌ`a/DÉÄq_b½\`ÇæŽÒ0³Ä +ߖ^ž3q‹z½'ãе3†Âë*ï47+Ÿh2oM0 ;ݛ;L4ü„¢ö?¾Ô ´q­cÝ>†ÝMŸ†ÃÚÕãíŸw·<Ͼ ËéÞ¤ö­Òo`l·Ýâkä¸OíQç†m~ø/Š×£ëd4ãk&.ôoØÎûÙÙßgÿšÙcendstream +endobj +1214 0 obj<>/XObject<<>>>>>>endobj +1215 0 obj<>stream +xXkO9ýί¸ªZ5Haò $¡_V´”]TñXH…VBª<3Nâ23Nm!ÿ~ϵ=I:-« ÂÄö}sî5?ÔÇ׀&C:SVô“é”v?ÌϬ8™&õO’SŽ’2’æXÜÇöí,Æt:IŽi4àíß~åÇÙAïbDƒÍæli<Ð,÷{û4Ë:—ô]«Jæ䖒r] +U‘­³LZ;¯‹bCiíH̝4T¯FäªZÓ$¨’k<|–Æ*]‘žûîE™ +Êt.é’ÒñÃÃÙ÷ƒ£> Ž“!lwJœ-²Kof°i7Öɒ2QQ¥zA]Ž|ì|êã58ýøxØ¥ÛB ++ə l/ØMm`¨²uáx‡‰'±µ=c"/U¥¬3Âió†ÖKY‘p°¸r1XÔUÒ89'#vr¶T–t–ÕƆM{ù¹¿<'‹ã5¸Á;{¨”OqgeÔ³p²÷ps÷åÏ»›¯· –‡5M:„³³¥¨2OèqÈQ® +Ùm9ω0²Ôψ©š«B’¨òpÚIc‘l™Æg; ¢v(¦S™à"fFÂ'ª†ÜʄnŒÏ³JìZ¬VœTdOl€æÚ¸e˙TºµDöbÅ-c,™tivý§ßÃþõùìœR#ªl@ðØᢙ鲔U.óÇĸ캂[k±–Zv2m°Þ#‡VF§Ё|sFú¬û\h£ªEƒY® ¹—­æ¬P²r47ºlÀ¸¸ˆc6’™àÐ»Çäî-e¯K‘-Á °¶ E–éšÏ†aÇxA”«š©"²aàrÎ /€ û‡Eü7v‚ +±E{Má`¯AàCõÒ±³o>ðèñ–]éØÔ8ø¿\k%þ¿}“ÐÃR¸÷ ƒÑÕ⏸¹ñÖóe¯\™¨-ø‘¢ÀÈÛíù'÷R<3Î$F9ðŸÑ„.ç[tÖÖ5èHïbøkeDž¬A2£VŽ=Ûi^ rK Ó‘M݀)N±¯ÜZ׳9a³M8RŽ–"Ôk­Í¸ÚJØgˆèÃ68bµ‰¾]CÁy3Bhv7;+€” +}– ‚ÚìÉêÓñü$•¢ª=£ßr¡ \¸”©hž‡žBÅÆÛÜ×Þ+ñ¾¯" Œ?‚c`3ŠH¿êW +ĺÕY k×P Ö%6ie(´TWÑ"àSÖ@4Ôò/sQ%(5s%àLÆÚïY«*”Ût‘Ž§¶½]dPc¡¥ô‚g A®¥ûxysOþ³5è +P¾ûž „^§.À#´: $ݓ‚†çßx÷[Šš(”, )‹tÌ&ò”jޓ.ëÅt±Ø°{?'0¡{ 7WR£´ÒèKdä +ªì“Çସ÷AUXÜlVèµ¥°OæƒN³‰P¢½éëEQô禶,zRD:'ÔB NF'æαçãŇÏæ(ƒá(qY$îÑ$™hp:å6û8Obm$×|4 ´e0öl. 6k!Ï !¾ó0¶x‰t=õ†_<í¬¿tՍÈ؊¥H5æšrÓ +»AL*w¹²¬Q÷;Ea>5$~]öݞ]¡©Ðè`½`· ·N´AˆƒÿÀ‚B/X…üÙÝ96-çìC‹.¹Í°Xfu‡c#!»DE0³TȀO@)˔EÑWßòá ‰¨T¾ea¤ÐE¡×¶eKÃݪŠ“Œiÿ@ á<’K~—dðî[ÌÚcg8ž>rÜèëõ—뛇kú|wwsç;äW8ò¡eæËö»ø°Éé:ª2H2J¬Ÿ|¿àxS´ uwù€ÞÅOQäڑ¤] ;]äÙ÷íؔ^TsŒEí̏‹,’AY™×ÑðVY¯/y ÍY¸´‡øá€™#ÛÆ +Üï2sæjÑ´@ÓÚ:ÑFxڌÞãŒ.h^FSø¸<÷ä)ŠM™ä=Ëóxûœ0Gt¾øÖ…'ØS¾# ’Ññ?I¦ø ŠR|E§éµâÙ7¾+iJåëg¹]šâaÇÓd‹}}- ZHÆ5žäyî\ Í ¸r*õ +Ï ¼ÿ~Ò|á²ÿ2l¿n%V<­ˆ"xµßW: _láµS×yúK<?»B÷üÔÌr úE¡ws÷|ýÀºR/¿'ÃæJJ?Ãï»ÉÐé2Ïw,`o™¥?0&³úÿtظ¼¿ÕÜáhšLÇ'-Ý=¥®„s”|š NùîiaÕ}˜anu¡2@XÓofögP±$N’1}Ucø×AU¡-ð5ªTÁ[\üB’_wp#pô;wڏ‰_Áó­=£(ølzîQÑ9gˆA}ø=º$7¥­©8J ƒ~Â%Ы¢  ~zm!œ4ÂÅ9˜Ð? ¾]z±Åý)^±¦± ƸgOi<Á5=¦ëìêã;üï/ç:«9B=»|Ôl9šôAµ¼ó»Ð÷Ó;šŒ’ÉÿàÅ£>Ÿñyvð÷Á¿MMÇendstream +endobj +1216 0 obj<>/XObject<<>>>>/Annots 548 0 R>>endobj +1217 0 obj<>stream +x¥XÛrÛ8}×Wô›4[6%ꮼlåbï¸6v2‘rÙ-¾@$$aL‚´¬¿ßÓISL*3S;SqLDwŸ>}º‘?z!ðH‹1Mæg½Q0›æǧõæ‹`Ióå<QFádLª§”Ö½ö3Vç«ËÕÖ3V—‹`Õþ¶õœÑx< f­Õö3V'óÆ ¶Û~Æê2 ío[ÏX]­‚°½ÚzÎh΂y{5œc +§SØËh:_"nÿäâ-ñ>Í°«“IóÄ«ÀV³`JS„6¢1þä’v½7›ÞðvJaH›àž/´IÊ#Úăâ étP…¤£8ʜî²c*3© ¥÷ô17;•JKB'ôѤ*VxPš¾*˜“¥‡ MaH< •Šm +{¹Éè^Ź±fW¿l~ïèz<‡_›dð«„K¬ÉðK’¨B-RJdì+Þ?¼Wނͧ_¢ ±5eÑ6î|:Ó 2ù?ý×/±6o ŹÒä$±™üV ë`è"6z§öÁѤ—§ èlJÊJ[Pi%1\z-ó'€uaþÊ8«Ï$œÅ¶ù,»gñø@Êòûkäò€”ŽÓ2‘ Tqhږ…?¢†f@Ú¼á«Ém!ǎ‘€6Æ[!}—ž’Ñxõ°Aq0ìÁy]ol© +ŸUÀæ)º~¼3™#`ÇwNܖ9@˯H¤ÅÁ”ûƒÃ°&ÐjÖq-š¶¯ Xb +4çº÷ÐgãŠ9©4uМ€Kƒ"2á©»•±¨Ó˜Ë½²E~¦Gy†Oâ»ðQeA[^F}ð!øU¢B@%Яæ$Aƒ+·ì Åñÿ’$Î¥¼ÔtÇ£JÏ$µƒ“àrÖ +”sÐÀ8-­³ai‹PW›,3:IցÜkç˓ҺøÁހî\òÁþ'©ʞ +CG‚c(N†Ïiù÷>ƒ|¨HzÇJü*Šœ¥(Rz×u«æ<ä†iɶJ $À!”óH; •²cáLŠœãM~RVÖrRW˃AE‹Ô|up?•ËbpfN÷*I¤î×Ö:´íš¨¡*³\¬°ÏõÂg^Ö"»Ëu^V øc.œN°‰¶]@òw”!a¬„µ&VÀUÅT¼‰ŽE€ÌBß­$é¡Áfaé$Ó´"fF——£±Vq¯Sфtj+&í”heIõa·CæV W{µ@Ïdví=j¶Ô4{ iqze85±\¦Šj¶ý_™zdJ³ªøõC‘Z½~Ôÿ¨Qoãªw\cì )\-¹iFãù¢ª´ZýÝòõ8 1 `Ç[h&¨-ML#ĝnÈɭ駝œºÈ÷¹)5pd/E¤ŒøìÔ@&ØÓÚ è=,DŒƒçÍKzûEãÉZkVK;¢¨0&µQ”Kû¨Š(ÒhúŒWUÂÖá98P9ziÚ·/ï_œ:Ñڞ;LIL Š\c9~äIæÒ«;VƒïuŠۃ;Gé=÷7æK‰ÑÈ1FeÕLd%úë® +ÿ[Hu\¹t> Ïð¥Fm î½{;.…ÄhÑĝå\e!ñAáµS8ô/ë“Ñ1äØÏ©ÁÕR“ñ]'}l¦vÉ]’ æò§,Ùr¿—¿ FÜÈÙ-‰+äh€!*y徨¨àÇmau¼o¢iáì»Ù’oµ—¼¢·Ñ:Ó2Wø+\ùŽæn{¾ëdzŸµ/éNWã +Yà +cYu¹Ì„>ã†Yæ1J oòÌS¿o]âx‰7á“r£`q²Wôéömß_{—|vß7³R«¯a´›P¤—i¾¹±X‘mÅK¹r•bÌÆ=Ws.Ï´7&ÁàƒËZV¯{©eŽ ñúþ ª…%WEQ z¸ÿ»kˆ-ñ¯! ‡éúõý›×|]ÿÃ/½k»Ì¹¾®·_/F+ëçøNÓ`1_ú†|Âͦ÷[ïJ§ZHendstream +endobj +1218 0 obj<>/XObject<<>>>>/Annots 553 0 R>>endobj +1219 0 obj<>stream x¥X]oÛF}÷¯¸/…œB¢>#Ù}Y8qÒ5'ÝJ»A½ŒÈ!519Ãr†VŒÝþ÷ž;CR4Ý<‹ ²ÅûyιwüÇŜfø7§Í‚–kŠ‹‹Y4Õî㷟/›M´¢åÕŸ~.»o9m/–¯Ñk¼{-pwµ^Eëæß}³»˜¾_Ñ|N»~ÖWÚ%ÞüŒvñå¡2'«t½Ú}ÁƒëæAD2Y¬áf—\~> G¢’dM!)Q"ÓÆ:[rÆä–î(šj+ñy¨3rG|Xó½àà÷Ö9ºÊš‹½¥‚„0ç&9O–ff93‘ÄÐã®õþ‘?[`9¢7½ïh¾œ-”Ãü—"ì-§JAš›²¹Ø$8€#Ùzöؾ‰®æ~á¼ |éØóyAôL–×k¾ÿOLÓÄ`kÑ0úø#ž)P2ä÷ù<ýˆGb‡©ë¯œû·7¿»€4®g“Cg“ÛÚLThö5j Úu Ö³Ú8Y6ëQjxø³.¸ —ÅEh"ýg…]>/XObject<<>>>>/Annots 657 0 R>>endobj -1469 0 obj<>stream +1220 0 obj<>/XObject<<>>>>/Annots 570 0 R>>endobj +1221 0 obj<>stream x­XÛrÛF}×WtR”S"xEJ~ÙÒ%vT»²“YWj¹C`HLÌ0˜hîÃ~{N÷”DÅÙdåR•$`fúrºût~=P?š )SVõ“>Þì}|{4’S:Œ’U4LÇÉ`÷TÒôh2Lú4–1/NFXŒO¼8èO’ ÒÓd(«ý$Ý=ñêpÐçÝC–PQÚó^y’³ãs¨õϒ3^…ÚöIÎöOñœžŸŠÞô|IñIVÏÆИŽ†ñ츏¿ñIV‡c¸’öS±*=•UyâÕËÙQï͈š-–ñلf¹@Ò§YvüÖGÓ ê@]šêŒ]yü{ål¨]I”Õ%žßé°qõlªïM¦yÓEž¿šýÙNAw0HúiŠÌòãùð´Oq½5`·Ü°±Ø2ե΅BS§Õpë¬ ®¦‹•¶¡CÊ攕&»#g©óþïäe*¯D b¬¹UüÄåj¹±^RÿÉØÜm<½›Ñ' èƒ šGHcñT–tuM›B[Z×®ZÿEåÝá(9Ohë;·¡Ì­·¢iJk ÑÑÛÂ\ßëÚéÛéÏÓÙ÷·ß¿Ÿ};ŸO·>è*ÎçV‡ÊÙùü»ä; Žï?Hÿ3‡vÐ>v˜éu µ®+ã=0ð¤AÑ?ÏEì+Xë„ÑÙ!!BËî£Ü€WYº ŸGJ‡M*t¹^6%ýôñðÉà€eM¥±wþ5 ÆÞåßݒ¦ªZ(‰;!¬_÷zžß$®^%ôIS¡sE•©k$‰ÕJ2…¾ayÿ?-Á‹(`¼ãµcºÖ÷ºtë @@ -2844,77 +2387,87 @@ x Ǟ9Îÿ-Ji‰áq‹Zç²Ud›j÷ÜVk®°œžˆJè-8ÙµØï9ïäa&aÂÓ^Šñ1 ïèIk÷‡¢§{R›6뵫ŸÚÿ>'¬ü»–?Åàø°Ù¾A„m`²´‘ÀøÁÕȚ³woQN\FauÝ`WLû=ºáB÷ #xVk‘ü„(Ÿ·½ÜÙff‡½jáš5vY#Ô'%LZU;s$®‡>€µ¡'ÊDëÑރ-X†³Ò³X”¤u©•Ç»…‡èxhŽ«Æä¼Ñ‚ižõ¿‹r£¶îUZÒåKmàޕ ]á„ŃödÖÁcÎÛr‹Æˆ9CóˆãVªŸeÓђò&ãü\ã*`2Ð>æ ­BÃIž¾¦Âva1_⿝ ¬¸³@di…øúk{œ“l +8ܕ«õú@ېþ g¥ç±.wµ­uÝnòdÉå%E#‘bÓϊÙÙç0…b‚Á+/C¯´ ̈¯pj,)N}§Ì¬…Z”[‰²D‰¬ï&Ü,¦6  Eó[Ù¥ i' %焴ôC„Ü:EþkUBEùogð—K¾%¡M‘ûrðn0ã湑¡d—þ;ì0Äw‹€‚@iÅÒ¼7Š®þ9ݏ2œæ9çruáŠ(áØ¡SY¡³;È0š¯Ðg5rQ¬ÔÚ,_ -Ú²ËñøNj‹Úèå Æf¾ ,ñ×®ÀœÎrµ0׶G¼PzŽàáíAØݵÑZÊ9h„GsúrO-<ؐ¶™Ë!}ÇžæÇ;$3 r>^u3WÂè] Å%îÛh‚ÿÁô£YÞüÕWˆrŒ$_~öä„I†¬Y†-un:­…+ F&߁·ÈÿQ®&:‰x{fØw`>ç·Ya ,ì„}”õ4¹§=O=ŸÉÿçÀ ûâÀŸ$˜Ë1veß78+……äÚÁÌÆԏ¿œd'å_àz©-8Ó$`2é>µÇ ¬H%]u¢œØtVX“©2¡[2\k‡ !À¥¸²-±øfá³Ú,˜k1b'2„#$V³©Õ¶œ zP `bÜàÞ/ƒ¶¬á1õz\¦X¸Ì¾,é¡k±*º\ðP£!8عÀ§ D0תÄ[¾wÂ!Å®ë‘ôûálÉyÏßíÀŨdœš÷×Ùn¤ø,vžâ³ãïB·—ô¡v¿0ñ]ï.XråçãIÒ?K©;éŸó~|kC20WÆK¥Li\u2´É`6ÂǼÉø,~š¥,æûÙяG¿l‹oendstream -endobj -1470 0 obj<>/XObject<<>>>>/Annots 662 0 R>>endobj -1471 0 obj<>stream -x¥XïsÛ¸ýî¿b¿UéH´$Ëúq×iǾKRÏԎé&ׁHDL JÑß·¨Ðjg:›$vDÀîÛ÷Þ.õíjFSü™ÑjN7KJë«i2ŕóÏ¯–ÓdM· þYÓìööü©¢íÕüf‘ÜÐí|•,qw~»L¦ñßÅ>´X­“9-Ö+üŽFR~u¿»ºþ° ÙŒv9Ÿ½\¯h—ùs§´KG¹6Ga2RŽtCøD'Ý%ïv_¯&SšÌn°ã.ýKwT«¢t¤š´ê2É\XÆ}GÔ -㔨Âåþ¸Uº \UÒÒÑ(çdC‘ L*yYéÈi–ê.-ù÷|šÐs%…•”éæOŽ7Äbe“‘+%ÉÆ)äÈgì;‡º+JÞ«PéŸHuãäwd–‡Æ ¿ZZ+ -i}’×ҘÃd6K¦77Ô§ü2¿ÒÛ|â“ù2Y0*/£gm­ÚW§—wô3rT -œ-(Õu[I'©‘®°ÎˆTÒˈr£kŒne£š¢­U-bփ8_ÞñéÃ*ðþ©hYDàÏÉ/wÏ`Æí(«ê'‘w¥j^qš‘yWU'ÚKp™9'RÜ*¸Š:íjÁ—¯!Y U%ô‹n¬Ê¤%¬ã¹TF¢Ø¢¹,%³Æ‚R1ï½ÎN=±J í°ÜŠz/ˆ÷ç +e±ªV  •]”»z#QçVj?Fp—è!Ž‰ªBIdæKÔúӀª![ï°%G0°21SÊ@±Ôisú[àÂ%]Î\øA—^“ù"Ù,W4¹Ù@³àËßõqÑà¼Î)ßdéÖ÷ûït –¶5cZë2ñŒÿ£qĈ %µ“YtŒe‚>–ú÷Ôè죸t®ýéúÚcžø:$ÚcJ+•¾²e„€$ˆb<ÂKL~6ç§v·g»Øvm«§ÃwÑÿX7ÔÂÖS¼¼1Öc8JèÈ(M)Z éH*¥ñþ5@wh7ÔjÎ$ºD¯I"{õŒÖCÿ8ª@¬¯žñwri Š¼{Š£ +² ˆYXB×À-XklNùCªc=Èh5 -w§$I‚! k•¬g´™G3šƒj!õ Í`ò9ȳNf¸8H´fâWB¿j Õ°NÑ•·ü/ªÉôÑÒæûõãû·ðÍçÉ|:ÃV¸£ï,È\W•>2êP [-¶. WU¨FTôë§Ç»‡§ÄÁ‹¹ OyPº³0–ØP2:*W’/ë%¹1Ä-kÔ۠Ӑ²´G‹È˜ƒGÆÎszà%ú5dÒËqDÛV¦¼ô}¦8æ1ýf9æÛ¬Gcڟè³JKôF¾õ†z¸ØJää jใÄ=ÀLfAGm^ £»– ’ßEêôY’l³…7ijËI¢aðÚT7ƒf*§dý"qÏÁq •¡F¡Š=Î@ƒL…/O&p™;*V k5p`ÝxÌÙÉ9â±ç -څ® -’ˆÔÓÑm ,¡»ÊêñâƒFÂT¾„Ks»‚" -ó‚è¬4ð|o~'²<ô˜AÌH `:ùi!à‰>RcõAš‹Ó_FO»xÇ{ˆFîðô“u žiòã!ü@*;æޙiÌ( .0‚vO©ÑǗw=Ï^ lïÙÝØGXŽNŽÖÁ)ֿĶÈ^~ë\¨‚¯¦ƒÆBôÙĦÓ/´¥î*pÈ´—óLœV,?Õ =CøBO¢¼k¼JE¥œïy!DŽèŠªàoXãG¹»øIÜF6ê¼éþó§/ۇ§¬ë„ÅÈQðF£Üã@Ԟɞ¹Ú¡#ãJ®'ÔÌbiCQ.Ñ~°¶Cqz«žÊÒ¨ä$¬ì5Së % bH;Ëöà:"F•ÄâFpå™û„òۂýÆ1ÀÔ¨Ö1aó˜ý:Œ·<8?n©7Rþ8À•ŸÜÝümv€oà†¸¦]¢F.wŽ1Ë;“õœF ¸§äˆÙ6 %Ë·§ÔQÙž¡Æ´ªˆ,e¶ù C¬µè‹á™Ì'Wé†Ô  ŒlQMÌlJ’¾ê}@çªÁsp¦Â-Œ‚p0h,¶kVš, ¶Q6LÄ¡¥‹¬V¸„Sf{q"›($3Ï8 ‚vÍ38O×üàÕe]ת S92NÄq,¸ÿûh} ‡ÎւÃàOðÝQÊK^÷T"Þ%Û:ÌÃëÌéGÙ£!AdbrʧŽ%µ•ÕÝ†qÁõTµÐmè}Áwu™y†É¬.1K^z€¥oBª}³@³å· F%­4Žån{Ð8=:´KŅ¶ˆPÑ/r€‡~`ý”Ãn^‹W?Cšh–W¹ïi›ƒRJx„CIj?‡¥=ÑM~^Ôv/Èï'„#ÚvŒ²ïɊÂÈÒT 1?†“1SĉúdÒ¾:¦‹çÀÃ]Þk!º^5÷ᥦðÇ؈ã9ü. ŠXw읷P®=ނ!T¶0¨Ä«´æ¹íÃWåì~œŠ0]dŠy” ,ˆýÄ÷ñ½À9´ÔûËY©<-ÆøžîgÉ8"Ùn˜b˜ª -·„øþņ<.â«¥Ÿ¤¼æþáӖüÛF˜àþ2KÿÊmrx»'i‚QĀÓRƒmÁ‚w€@-¸ë‡`¼hŸ_²gIY×ñÕ`¶À7ëZ.ñ=Çò–‡ÖíÝãý=ýÃô^:}a8øÉ ò’Éjºù¿†ÜÅj‘¬–k|+ƒS ÞìýîêŸWÿÆ\·Àendstream -endobj -1472 0 obj<>/XObject<<>>>>>>endobj -1473 0 obj<>stream -xXkoÛÊýî_1p[TdF’e= -…Ÿ÷¸vÜXin}Y‘Kkc’«Ë%£èß÷Ì,—–hA› €øšç9gfóÇɐø;¤éˆÎ'ç'ƒh@ãù0Óx6Åïþ•šRyp1¦ÝûW‹“wci‘²ÉlJ‹„`g0 EÜ3¾µù®]Ÿ¶k¯)¶E¥Lá¨ZkzÔÕÕý§g*T®É¦r/³/¶ §ËﺤÊRí4™B¥¶ÌUÅ/.ñçùöó¿n?GßNÎt6<FpÞ[Ànœ]TüMÁ WphqŸ{Ó}‚#Gpµì%V;R=?\9휮êÍï˸“3¡ÙãžÃû§ë?“[+TjÙ«)^[\Ώ5 -Ž"b¸s6š ØG‚öq}¾¾ºJ}AÌ¿I]JýG­]ªYêª4å•úì—e+ÿê8I[tvqi6Õ»°ÎÖa-¥>,Ÿ>ÌiUÆk„f!(ÅMȤ,à"µ5.ùVŒ‚¯4ð¡’~'@¼óïê:®+Ðj'‰úþFt™V xéïݧĸ6Ò´´¹ŸG“cøoÛ×äö..PkmøMÈÀ‡cØUu ½±uÕÅÙÎÖC·Ñ±I=´ŽxâžKDŽ_ŒÝªÖÝáú‡Ê7™î‹"!wˆÖr™–:Y.£6Œû”ë½/R\붰¬ ñŽøÚ°Õ"¦“wõ›ü¼~Gð.µ¾Tm:Èc´îƟYûê)~ýéñîþ—èéÓož‚›™Ø0ÿ×ˆîYÔÁç@ý~£L{¯ G B9õ‰~¼›Ó2™B//èl<ö˜™D³hѵ-RóR—ª2óûÂUeóo÷7fê֖¯$ÄwœÄÛ¸‚‚xZÉÀÈ1’ iªKÍüZáCá¡èéæZâTì'vëhþëjÃtæÕ^H”§ ûÂ@lþI9‡P‚ùr·‘Xñ*ó’õ\I„`ÿՍ àã]Ü Û³i4ãùø—£ÉTÊ[nò°ˆo|¸mɛXñ¾±xÎQ®âµ) eí*Rq ¡®Üÿäõl„†ÌßrÆ$.5ÆØ¡èYå+_Í­É2R™³ðOÌ®·JÛx¿hr¢Ñ€‡&Ò;—Yï0JSí(· ff®„U‰Né²Óraà$L.š¾ƒhL6E©Þ¢9N…\½Š¤¡c~ © ÔeCŽÕà‡êò0ˆHr¤5²X1^X[)Ñ+UaŸ0 öV¦½q®–eg»Ö¸. *Â0ðóѾ²œHé¦lR¤+(Þ«Òf¾f*‘c‹]²E¬{²«õ¾`{:äCO’ÁB”í­6‹›´F%ȁµYÇëÂÄ*Š•ç˜èÞnëêù×ËÏ·_Ò0¾·WœJ }kàæÓÃåýc×w»ëI6Â`œãC¨’ü&@§ïª4^; ØeR†¥*kë @dÁhֵ˸ªÙK ú–⇠:ÎØddŒsÓ$ -ó ëž9‡‚eH^õmö@µ(…R¹/¥0a¶ »Ñ,ƒ¼€2«n®#úº† 3¶r…ˆB·¼1õÍ -§:>ýPc‹ŽÁ½ì)Yº~ßÓÌ/¼ %>pÙ8ἂøò.†ˆâ -.ƒ¾V”ָýü#«ëúÅZ¬Ž‰V¡³ýÛ­m%hb®ó““wz.„ZêXêø”'¸)ØùÓpupÖ`¨‡ý¡Œ²™ò˜•²meò§hCfc¦·w‰ -7c!¼ÑèªÏû¥6nÝN|Ò)n3\ÄÖÕ_)RžN¡8P’mßõÞā?ób;>ú˜iœ´>Ú-­T,ÊŸ´ -,Iß,¡ØH戤p• :mYôwaÉ©Ì÷FÛ;™­- Šž b­fÝc®5à‚"ÈY«·ßUf.3/-l„Ïp<à›mÛ/üÝñË,¤”'‹CÛû F¸ -E³,{|uº ڇtŠóßkÁã^vcµÂúèc‘Jà“Ž_ßÎ:¢ùü/á4[™ãOZê£uQ/È­Ñóˆ¸SûUð„–IäÙÕqz m~ÿ:m5ákj‰ƒ5S! ζ"ۜÿޙ;`øq¢Zöä¸Þñ§2ÞÛv2ïŽ$ЧҼ¬«,?ðwL­ÁEXZ<ìcneÅj– FK¤…Á)Î~‰NMaÁw¯°× V G(\3§ý.Â[#"*ÛªÝF-£ÀƒF“AªVs}hÍj2kæéKél6¢ 4ƒ¹¬•Ï—W—ôTÚo@.ÝظæíB&Tg8Á±ÌÎél:˜ó:ò­³ãé8šNf~_°áÛÅÉ?Oþ>¿¿,endstream -endobj -1474 0 obj<>/XObject<<>>>>>>endobj -1475 0 obj<>stream -x¥WïÓFý~ŀt␓_MrHýÀQh‘hJ!¨­B{}ٞí Þ5áþû¾™õ:¹„RD9!9ñîÎ̛÷Þl>ž i€¿!ÍF4žRZž ’ý0&cšÌgxá­)—ãñìË/†Ãñ鋫åÙ£ç—4œÐ2Gé!À`@ËôbšÌ“QBOm•›ë¦VÞ؊^TÎ×MÊÏî1½ÑޛꚚ-½¶ªäÇ·N×ôª¶¹)´{¸ü!¦4rˆÑ( †Ô͓Éx„X‹ß–Ïî…E“vÑEwÒ¶=„\³ÝÚړq”™<×µ®<嶦?Luù'©*ã§Å2á“ú]”Y2Q®4kìuiã'¹±;ò–Ò¶4Mu›}ŒÙ##ñ§ó¦àµNkÙv“Ò ©t@}À,…™r[è’óôíЭ|Sk')bÝhš0Øá´ö Ä@)ŠÚ3Š?kÿ¢Ê-ºû±Ñ'Y> ‹êO€Ÿ®µOH²~à(æN…M¥Y ýbw‹{¼‘Á9ÈÉlÑCÀbµ£ÊzÚ¨O „-[…@[…®ëӃ)7ºÈzd«âVrj3ØØùmT­ZnЮR«Êa…òGÑCÝ]Æ؁2Á,“zqmkÍ}2ÕÉñ™©uêm}û(Ë؎(ß<ùõ¥½u_¿z±ìÑncÒ À+ƒKU݆ªZ_¥E“qü¤dFæ¨nIœl~˜o,ÑLâ¸êÛè-‚51‹ $fQPê0advç@ܑ-çüèy”Øÿ– v«.ìÝãÇ H)ï® »VÅ{*¢ç]¹NX:ø.0·Eaw Øê‚Kҟóõðq< Ë`1ýÑ$d\HG¶ÊoèGZá_DAȽÿÈ\ê>ñòÕêüíjUBÏíþò å1,K´&Ó¹jŠ`ž)i·âcxâ°ç‹p`{X*Ujšß9U®UPÛjÅ çw]2ÜT-ëç|À¨?™ôXfˆ“Ö?X­oK3U"¬ƒrÞ±fÃ+»z‘Ó­mˆшWƒœˆ¬€î_æ\¬'Ë?”óŽ¨Yª-kE’ä¶:5 q{{Єu Úhµ.´ÈêÔCß7iA£©j®/§Ô§ܐý‚MÕÂb¸>Î '”¾èÈÝ-UtfDqX U-§‚³eß!Ãà”×Úï´® ¶kH6àwƒ@˜)\tLÍ0†’%?KĜIÞÖ`þ‰œösã2΍ +ŒÀ(+ ›ï‘¶µ„fIšÈJzs?tip‰Õà˜×uBo¤éÅÞ¼Cí(<7ŸQ‰ã1 <ݯô±«âÌGá Þ³³õ#°ÓEѓ1iéPÝ©—o›pKŒ€"7²•…é%³ãÄÜã<½j<í”ñ÷XuLF<.n„þL-œÓ©çԘ¾bg[½÷4&Èؖ¤lëüeð$VHuÇiيYřÆ;KÔÄÎe7¸eÀ€“Âԑ0 ¤ß¬;d؀堻€»ŠÎŽ4Ô¥cö›†çÜ Û4b”´1Y¦«ÕÃãAºÀ] ì -|Y#§à,ìz@’µ*ÀDæ–èTá-§¦âU‡3—†£)|+áhÆì¾盦é ?OƬ\Ê®žðτ¿1è'›6|Y–[+g؏;ú³®ñ†sÈïø-2™M’ÙtŽ;8s2åPϖg¿ŸýváWéendstream -endobj -1476 0 obj<>/XObject<<>>>>>>endobj -1477 0 obj<>stream -xXkÛFü¾¿¢!à 5 ђVû2`vœFâǝµÈ"#Q#i¼ä 33\­€üø«î!)…kAl,öArº»ººº¨ßϦ4Áÿ)]ÏèâŠòòl’Mèj~›]Ðüæ?Ïðå5mÎ^/Ξÿ8¡[ZlðÄÕ ~XîžLh‘Ÿnë,U*îè%-ñï_?/—•wSè€ßîž-¾àù9M§|Àl–Í&SÏ®³ùÅ '¿¥zÐd]¤|§ó{½¦ýNEZ©šžï\©‡´v:B½_ຶ4H‘ùâ€L €ÛU µr:KAo› ã.êmv“¢^e7Ù,›gô‹±k·tû_ú˜²¦O:Ö՟Ӟ ã«lÎùþÂÁgæic|ˆ„DËÉOQÜ=  ·fo^-8ËÜkõz$©2¼®Xkhð)*靶õ`ıqz‘ Bƒ7:ÜGW F4@Ž[¯Ê0 e×4x¯ãιõ £ÅN«µñ:Î`Å7 ã)w6jíMQÐJS©ý–q6è§Y¸\½¨HË8 `qnFù‹årŸð:í1CaU©€P¯‚þ½F4†ÅØÔ½±[‰S:À… ùòÆ»’´ÊwýÏÕ½à’¨Õ€³üu[¸•*>“«¢d6¨<Šö`O®PüK:èÀ …–_»˜P“»ƒ¶ÁDƒ‡_ö‚[B¡áø¥26â Q*UA…Ž‘›†?I¨¼¶øEÙ¹TÚL@Û_!ä ‰Ð­#-„$Ü#Ä@ÛÐ"®–Q®b£½¶¹½ÝÐÁÕè[@ßi»q>×`#“‘Ongi -Î2¾W!Ÿ-Œ”Ð bŸ½{õ¼kÖ…๒öÞDœŸ#zàˆqóCR„£‹V²îà°å;cõˆ¶xÎÑ÷(л‚>*« úßCØãDÔ  WŽ¸Crí,"¨Ze˜H¾Ú+‚Aòà(¿FKp* ðN•L·(2œÆùøiD«:BIè7ÈÍo µÛKÌܕUžr¢^¯œ‹Rà¢ÕNá4#Nùç5c\Qò=ªÿ¾02ÎÓ;“{Ü&Rs9Ði|"(àȂ„ v[9¤ M|㘦C;5B y‰¬¤ ÔGoJå„gðš88õˆ`’œ FþoAØJç,A8ž]Òør–Ý°œÞYž²#mFÇÖ+m¶…Sk´XãI-ÝPÈyr:Û+ï¤pz]qkqŠh'"·+LRÆږ{SÅNDû©a2}{â'V%ßN}K¡f|¿™) [¤M_M§•ð>("áíÌѸW´¢•ÁzܲÂ$B@orjþ42ikÈ$Qá«¢­¢í"Ô:a`1<¬ƒ#˞R‡ e\¹GÙB¢p¿²üŒà’ŒÐdæîgHhˆZ­9§/uèÏ{ï±Ï ú¡Ò¬»Üõ Êë ãÙLG’(àòS&ڌ}{ééËðèGbR†•VöÀƒžœÔÈÉwP5Ž´Ñä¼ÔOðÅx4ð¸t\êSÆ .°–)M÷÷B7ēª°[« -‹ «&.ŸdA¤9§Å뢵ߴè¶à$éï`”V>&Ô"훺(ô  -³Nî„m¹xÛIy*ÛðÖ)eIâÃn°>­Íh¥ñ$¬ç n9£áZ»Ó›AßtT¾ïš=@Cìùá7+<É;O* u‡ª+äßžurT#É;¼.Öì‹Ô -v zªy‰¤<:óV"¯^q­á:P¨tn6•6Œl *[ãèt¥Øj6¼l>õze ¿á[¿‘<µ´¸qœ}¸Ð4X¦Ö~¶ª’cg£0‚· ²N0&oPWB‘äÁÛ>% ì6Zž7ýd‘³ÃEZ÷1ÃS%¶¬ZE•x K/ÆËgâ͎Ê"ÒP,UR{ÞøgL¸X±1{1–ñϔz¯iR­x`)¯õj]§OÆ´cLw1Ñ éÎq° -¹¦´¯yêÈKlõ^C’Û:x4Ž…M2;¼~ ß&•–uÂ0K1íAÏŦ…œ›fž -e³ï’§Ä"ÜÂFjï¼m·m÷·—=øcÇìHúÄIóO5ä Ê›¹¬ U¦#ÐiGñÝL¯KsÙ ŸÑk £¢nÿpe½Ø,ãM†^³‚­‰@„DÛý7J¯’æΚÇôVi_š^j8 è?\üÎTäÍv‡d„šŒz‘“ÞRaÔ>p -é_5 C`Êæ-]ªÈf´åFäÊ6ôítAÖrjáL©@ ª`‰­4|l¸5òž*~]‚à0KV?v¯«ÒûC·É" Ó؀Ìð^h)v÷–õlá–|Ò/[¿|þãMó’=½Â§7tu=ÍfW—ìí>½z÷úû¹/ìí߸¼.±,¿¼1¸ãö‘ñõ„?T8O/åü¦°1ÛÚˍô¦À×¹¼ñ½àwó(ÀUôŸÆéßñBF~-³7¿žg×W7ø°gί9Ô‹³Ÿý˜+Ñendstream -endobj -1478 0 obj<>/XObject<<>>>>>>endobj -1479 0 obj<>stream -x•W]oÛH|÷¯h8¬HŒ>lIö=yãd×XۛÛèÎ8D1"GâD$G;CJÑ¿ßê™!EÑ·— Ž-“ÓÝUÕÕ=^Œhˆ¿#ši2¥8¿FCšL&øz5ŸáëÿŒ¤õÅϋ‹÷Ÿ®h4¢ÅšŸÎg´Hχ´ˆ/UaK)ÒkÊôf£Š ©‚ª"‘†ÊTÒ×ÊJÓ§°ö MÒ§DçBß(Q/à7FZKÒÆb'£w‹ïÄÂÑÉå("þ?F“hÌ™ªp§¹‘‰*#ùCâ½1"ï“(ä ·Hà–_Ò`<®ø½_ûøß×Çß?Ü=¾>Ý}øõáùãrù¢ŠDìrù¡2F失JËåg£×*“Ê–cŽº¢ƒÊ2Zã]Ä#¼fŽ}ZkCRÄ)ùbE8ã³(ӈžu)]Ú±.J¼b­2U–¶òHËËLmev¤RÓJ:y]q|»\êLQ*g†œ9P!r¹|×ç“ Jd&C>´ßeÇTùg¥ŒL\–êB_?þPe-*7Gb„µù֐r3ö`Ž=/ï?Mƒ,CÃëhÊP¿Üýñüðü ×qÎ% P`’>Q– §t~‰üb=R†*´ÄϵËY^:è€^·ÿ6a·|vNŠÉf©ØKz$•ï´)EQ‚g M!írQ%Øm©wÖU$Ró…“ð„-…))—Eµ™ùûrÏ ÌŖ´ñ¶Úq†œ—S š’“ê„@¶2‘Éò]—Ú+ÍÉÖUÈxÊõ8óFæz_ӑéXd¤AGtM¦*I .{¹‹¼|çõs·ì(ÓI&ÈôÄ&zH4þçø>P/ÙëS¯eªuÂߞÀ빞îá<îpۃ”3‹m$9»ñ¾09YE­R+…AGrkrDn˜Ÿ,EŸ_3ÄèY®­¥Öj¸³Ðð¡Çà;\pãSW§àµ -àl×é -È;Ÿ¡›kŠ3…ö?ûúíÛq*c§Í7ýQ#»ƒ¯€'+%õ ÊäOz¬ÌبÄ*Vzï܁]±eŒCÄÜé.kî7Owύ6n}ú‚¬Ý¤©¦®}ê Œ¯i0¹ñ¦ðƒ}™YÈW¨Ìöw ™ág+ò•5‰\U"”É=žô~X$ô7qB ½É¿çÎãQ Pv¼•ð-#âftÔh+Ȁuï’*w] ±åºàéњ\1w™4†—ì^i-›D!<¼UÄ1.Ø6&Áó‚€ìžgäVDcK|Tú×h‘³Î}ÖUãª@&Ž?ŒïtÍ9ז£=‰-Üé¬à>ã ðÙ~¾ð÷;H¹Šå¨{g€¡š&€/%tH…³þp‰‚K`2¢Jbq¯;÷Àً Röäyø]Âï?݄¡À ÍýÀ˜FóhAèaär/ÚlÑè%&.]EC}-À_LáÚ7` -¼¬kVàþ7':j´­=ŒU‡ÉÑ®éÎîä‹Aì -ƪdw2VkËÔèj“:W9k¾€Ia‡Äx‡X]Ƴh>qËË×lg4Šjs3Ã@TÀ„HÊځ]cCQKüq1ðªZ.Sóà{òec´9§Òsˆ]u*ZÉXÆeƒà -8Ê ˜÷±ÿ¼5cF˜ Ì ò`º¿ºÐßȦN©B?%¢x-tù -SÓÖ­--±b±*˜£•ôýËpk#Htj œïém±ÿxlUzHQ¡WÊãŒø8Þ~:Ujimtþ6ó°È¼åBÀù8š»+PèñÄg̽ØÃ²Ä -ÅÁ8֝ô9,d·µ 'FíeÅ…wmª«,a± Ú^zÛëäLG£,,üvèËæ]Äs{ˆù^ž™¦ y¨C3K½SµÔ+0ªôëj3х輺<¯ÍöŠÒK@³Ñ7 žOeÅ´ uóŠÃRaZà!â41;e2º™Õu÷yÆñý8–b^½}&·O♠Ʉ+fPCuz9…Uw'M®,¿ÇÐzîëë*Ë:áC¾@ÇÍMž‰¬#¿NœŒí<l:o[víZ'tXvN!ìf|B'vƒ¨ëL‰+‡Oqg:KªÊEQaLC­û„c[@N¼Añ€ß•‘ƒSTH[åPͪòðtÂ3‹¥äeš]Ñ=1D5‰‡.”º2¸I'öï 8'¥¸¹Æ®Â°ñ΀„ ȍºà -ÀôØ /J,Ž;§þEgño]Ž¯ý˜8Œ§CÀ1klä¤öϚçó}k·¦Æƒ¦5í }=>K9_GÂFÉÐXÑ"z(›zw»]¦Â,¸¥ðû¨ëUl0§¶SsïÞ_x™}>íµ_Ü¥à —‚°×Â=ü^{6Œ€·•Ùš1àëû°5Ê´×W°)níó Mg“h:½æ‹Ø—»§ŸïøæôWý{C%ðyV+ç;…W³á ?ï§4}ÐÅZm*ãeý€ë½©œéØ[ú&Vš?ÂJóovvi.%W³«h6û+ü՜C}\\üëâ/¢t_endstream -endobj -1480 0 obj<>/XObject<<>>>>>>endobj -1481 0 obj<>stream -x}WkoÛFüî_±P4lZ’eIy P«n¬ ªÂ8‘'‹yÇÜ#ëßwv¤eæÑ"imnwggf÷¾žŒhˆG4ÓŔÒòd˜ i2'—4™Ïðÿcüqš6òÁÅd”\ô?x½<9ÿcB£-7¸k:ŸÑ2#Ü3Ò2}¶°a››{RU¥•ó,­5ù`Î(7¶š’›··”åN§øõᔔÁGÁSU»ÊzM¹§´vN›P¨6;c÷&y¾ür2¤³ñ4™ à³Ï¶¦Tªqžï¼=ø KzcMp¶ etÁÁS[HQaSUPåì&/4áÅ/½*×ø[»oÚÑê™×šKúSN´‡ý äÖ]$cŽUáq¹ªÔšïÛÐ&w\v]I6©Eúi°!ÇeMå?Ìrcl½zžÐ•´)H¦¦¼.¸ÐnU@³Œ*9òb (\òöՒËn~º~µ P;Vm=HEŠ/ºbüQ«tAƒñpˆgÉüBêü·Ø¥†ª¾¿šÑådlÈSF¡‘è'ëv>()1è¢ðT6æÛ˜¡s…U™0¢Ë`ãlIªW–/잊ÜìÚo5ZêW0Öi¨U.p£Såõ)²ÇSŒÅ1o<µf“ß×.æ”{_ã´òtÐÒÄ3P¨íbìÓXM©vÚ÷kºc2ïî⠎ΠJJ$ùºøS©BàŒ™í½Âœö¶ø¦³ÿúŽèŽ;tՆ¯ˆ¤Ìò{íª|eM¦MÊe#·™6¶6YTŽBO-©Ü•:;í% Íj¨e)ƒ/°(¹1eìÆS1Ô¦ÐÞÓÀk1z)a"Õrq‡ê;<+åýÞºÌãôAûA#)†M¸ünñæÃç›åû¿Ix«çÜÄãQˆMŒö²Fž½’^R^%*ˎO ¿úq‹ew˜²„Þå‚ ŠÿÂ*lµ³Ï‹fÎq~ 22o©Ü ÆrISƃ>1Ú3³ÿ‚Ê 'u.4Ø׶J{daë ßçöq€c&B’lB¢kH̕Âv§¿Ö0Ɍև^‚h?ú]À`ς~¡~ƱËVÁ%|L)ÙD<Ì#Õ9¨IjÍé…–&/$WÖ›×Ýzç]¤º¿kéÜʉIŸïÊڇ;f<·ÀíGÖdÝ©$¯°Æš›OÛs0­XÇùW͜9ë¼éªõ¦i2OÆÉ4¡O¹ÍˆtoÅÊÝãÕ͌%d"zeÅpãÐYL¦ŠÝ—|¥Ó|s§2@¶¨6ÇùÅt.’g‰8ánúß[pÀE‰“+¾ØcRjë"k#ÅÛùÂÚÇA‰‰ñt<‰ã)äµ~{ýº†˜[aQ LNòÅg½°Qä몲mÿG¥™xó ÇAqž%t»U2ânâõhpØkmèÓÕ¥øBoL’aìÄeÓÄ®‡Ý|¹±I/lÁ°(禠 ›v8ðY¬þioECÓd8½ä©üõ³=wc_Ûû\ƒÝ[õMóü¢Lšå!E}ÈS–Iy•^=çtëRE_ñōª žê÷¼0C0vVøç·þ|LXAÇ#1º &CYAüØœF=hm·üô:5àËÄaÎbÓV+fF¼æ¥i@ù昬(•éØe -üↁø|g±ìþˆ(t=¬Ob| H ÈX0Q'@Žõ TY€íWW«†áA¨!ÆÑ$þ N¿¨¥»R`ÃnÑFî†˕×d[ù1šrÛíñ}„ðÚ+#Íñ AÜ%Ñ,”A¹@×ÚÔtNoµß±Q°‘3ßEÜ?Æepԏ—=”ÞÝ®ž=]º„Ì[4–äÌ©ýZ¥;ÞI2Á»Éo!ë”ç‹%laF‡D?èþ!â=l”ÅÜÕ&N¦QúbµÚçÆPvi¬€M“(ªîgFÚ®¿å¶ö²¢?®rì-ì_½ÚaÓW—gÖàüÖúðݤZ.›®ˆP¥n¯oԍx*° [6p}X`¥°éŝHV_~JžG€.>;¤­ {Éu… Q¾7ªfUëÆ(W˜/²tʚ!Ë^$Êñö‹Yq4^OÙó×x;I³þŠ/4 y©ÏÙ1£ 2̖>/XObject<<>>>>>>endobj -1483 0 obj<>stream -xWkoã6üž_±(p½à(¶“8òlÓ^M ´DE¼H¢Ž¤âS}gIÙQt)Z‡»³e’»;3;K}ݘÐ&´?¥%åÆ8Óìà0ڥ݃}|žâ¯‘”mœÄÛ‡4Ù§8ÖÙl/: 8%l)N6gÑaDg7WǗמÞ\Çw7Ÿ#÷ÍÑ=ª*ÕKK×1éR¨ŠNuåŒ.>Å_6Æ´5#\œnþH÷¢\~º}±G“ ‡šN£éx‚E‡ÑxgÊËnµµjQ´tÓ¸T8™Òþ5Jøó¶/v»8y2‹Æ³=Þçʒ¨kY¥ê-…%mԓªDƒDãrmpТ¥_u^Ñ/KS[géŒ\.Cfx*JUJ8LUIѤؔKHÎ{‹ƒîD>ÏZ[N˵Q¨hÖåµµ.i?:%]ßÄçt–­ÒߤqqBI?¼…­æŸ²¶ô§I9|ˤ!|֕$[ËDe*¡RbmÊÅp­²r*NéŠCöRv¹p”ˆŠš*•†‘©èþê„ROè}Cò°T¥}¼Ë÷Ò¼ ‰hBKÇêÂcû"°¸±ƒ ‰.kQ) ~€ìBX`ª+>øu‘üæde‘«åª˜‹ÏÇ× ¼Oˆ1EŒÚh§]D}¥)VXÚ$2„»R‰ÑVgnkÎR´ÐCF©åjÑ8U=ùHEˆ·ˆ$'8Ɉî¥ìï… YQÖJÑÙ l®—ˆßZP j.ý€‰‘üåmû -…Í«ó!›ä²ä˜Ç«ð-£•/¥OÏñ•—$–Mg¡õú¿ò8Ë'gz„£[’Š# ºà.ÎT!=g ªr¬˜õùæãÍÝo?ßÝ<ÜÒR›gìg¥¡Æ"aýüWÃÅê/Â@Üjå!Hp»\H3¢[£JaÚÕº$ ú}Ü‘<7õ÷+çŸ"ßrV”¨j3ïkº¹ßžÒ£05çGtë,t+\îkô0xüɪRbX,4 -1:;" ÉZ[æ*É}¯õJ}§RQhˆq ä{êÒk*EÕR-5ÔÇ|ÃØ:¬HÖXèz„n¤Bº\`Ë-•R ƒÑXB™áÉ稷íE&ÛÂÕJð–ÛŽ<°™{.|âfj{í#Âú1 ASèSî}f} TÚíèë2ÊÁâÕ_AMªB»•á37£Ê‚R Κor5òk)€ñ~¨àûgB–0déEfšÊ# }aà z¯%dõ¢Œ®J$².C@óÝZ?RÂÄ):«î™[¢‘A=›"Ï0QÓ¶%vðX*´HÅ|ja`Jœ+p•<˨©uÑ%šQ$nÄ?ý ÆØPÚ°d¦]¬cz -ßJÑR%áÈø¹‚áô»4ˆ„¢Z3J)îçÆÞ±g¡1‚볊{ȗ"AF’³F½œœÞ%Ԟ²ï—5'ŠÔÚ¿uuèùÛéÑ|þxy}Ïç?1⯷„M¸¾¡÷^ÖwZ»óyø²3Ï¹mÔSÇÑÊ,¹ž$ˆÇšç© -žðÎFõ‚ÕŽQÈÎu˜©Lrý&Ówò'êEúùâGZ ¦ëE/úV70‹w 4¨De\¡`ÞfX¢¼mE»ÿd“‰¦€Ä¹£nWâÆïÝÉʤYß~zT@«¢»PôQÑz0÷n¾Åpa 7Ž·³ÓÈ×CŸsæ÷ÇWƒôX#÷ç§w—ñ]ah\;wðêxÆ Â*Ë\QŒC ÷Ä¡/U.P¼¯†03’é{r·¤ O$fBó½‹ÊC0ÀF¥NeR´|?Y'Ûóe”ºvÁ²AGöî žÕÒÊ❷pMÿ¤õ Å1¥Âõó:Cwy4_3êî\Mªábß6°oQ| ñÒJõ{ ôÚûÉ®'<œi¯]Ò×/{/PãyÉ ÷ò úyÂOùÚöqèoë2}™âAžkÌz€Lœ6툞ŒÆÕ \*l®jÌk$óìtÍnÁ-!Qø.#¿}qÐÙÍd†¦ƒ¼íF{;üÒžãj¢¿à|\8’†GÈúâ×“°ck|ÈëÿÇ+õ^šv÷w£ýÙÞÎpÖޘ³;7~ßø4Z™Ëendstream -endobj -1484 0 obj<>/XObject<<>>>>>>endobj -1485 0 obj<>stream +Ú²ËñøNj‹Úèå Æf¾ ,ñ×®ÀœÎrµ0׶G¼PzŽàáíAØݵÑZÊ9h„GsúrO-<ؐ¶™Ë!}ÇžæÇ;$3 r>^u3WÂè] Å%îÛh‚ÿÁô£YÞüÕWˆrŒ$_~öä„I†¬Y†-un:­…+ F&߁·ÈÿQ®&:‰x{fØw`>ç·Ya ,ì„}”õ4¹§=O=ŸÉÿçÀ ûâÀŸ$˜Ë1veß78+……äÚÁÌÆԏ¿œd'å_àz©-8Ó$`2é>µÇ ¬H%]u¢œØtVX“©2¡[2\k‡ !À¥¸²-±øfá³Ú,˜k1b'2„#$V³©Õ¶œ zP `bÜàÞ/ƒ¶¬á1õz\¦X¸Ì¾,é¡k±*º\ðP£!8عÀ§ D0תÄ[¾wÂ!Å®ë‘ôûálÉyÏßíÀŨdœš÷×Ùn¤ø,vžâ³ãïB·—ô¡v¿0ñ]ï.XråçãIÒ?K©;éŸóþOL“ñ>)œÌk2“ðo2>‹_¥F)Kø~vôãÑoê†endstream +endobj +1222 0 obj<>/XObject<<>>>>/Annots 575 0 R>>endobj +1223 0 obj<>stream +x¥X]sÛº}÷¯Ø·*‰–dY·v웏z¦vÜH´3~HDL JÑ¿ïYThÝ;ÓÎt’8I»gÏ9»Ô÷«MñgF«9Ý,)­¯¦ÉWÎ?¾|ºZN“5Ý.øgM³ÛÛ󧊶Wó›ErC·óU²ÄÝùí2™ÆO|ûÐbµNæ´X¯ðûÿŒ¤üê~wuýqA³ír>{¹^Ñ.óçNi—ŽrmŽÂd¤é†ð‰NºKÞí¾]M¦4™Ý`Ç]6ú·î¨VEéH5iÕe’¸þ¸ŒûŽ¨Æ)Q…Ëýq#ªtA¹ª¤¥£QÎɆ„#A™ÜwUò +²Ò‘Ó$,Õ]ZòÿóiBϕVR¦›?8Þt‹•MF®”$§#Ÿ±ï>ê®(y¯B¤"Ս“?Yƒüji­(¤õI^Lc“Ù,™ÞÜPŸòËüvJoó‰OLæËdÁ¨¼Œžµµj_^ÞÑCÎÈQ)p¶ T×m%¤FºÀ:#RI/#ʍ®}0º•jŠ>¶VµˆYâ|yǧ«Àû§¢d?&¿Þ={€·£¬ªÿ?©ˆ¼+UóŠÓŒÌ»ª:Ñ^‚ÈÌ9‘âVÁUÔiW£¾| ÉZ¨*¡_ucU& (a?È¥2ÅÍe)™5”ŠyïuvêñˆUJh‡åVÔ{A¼?oX)‹U°m¨ì + ÜÕ{‰:·Rø1‚»DqœHTJ"3_¢ÖŸT ÙzŸ€-9‚ပ‰™RŠ¥N›Ó_.éræÂOºôª˜ÌÉf¹¢ÉÍš_þ¦ˆ‹¨çuHù&«xH/ °¾ß§µ|´¨ÓZ‰g”øŒÆ#.”ÔVLBfÑ1– úXèßSg ³OàÒ¹ö—ëkyâëhSŒ)­Túʖ’ Šuð/1øٜŸ +ØݞíbÛµ­6ž?ÝiDÿeÝP [O ðJ8`ðÄpXá(¡Ï £4¥h-¤#©”Æû×Ý¡ÝP«9“è½&ˆìÕ3ZC=þ㨱¾uxÆßÉ¥1+òZìQ(Žj€®È2 fa ]´`¬±5:å9¨Žõ £Õ(ÜQœ’$ †0p¬U²žÑfÍhª…Ô74ƒÉç Ï:™màâ њ ø^¨†%ꌮ¼ÛUM¦–6?®?¼En>OæÓvÙÀ}`-溪ô‘a°†Øe±m4ðèµÚ¨B5¢¢÷ŸïžæN€åAéÎÂSb/Éè¨\I¾¢—$|äž·¬Qjƒ&CÊÒÝ!cú6O灍èאI¯Äm[™òÒ™â˜ÇôOË)ø3ßf=ÓþD_TZ¢-ò­7¬ÃÅVú 'gxP†ÏÔíf :jóZݵqü!R‡¤Ïjd‡-¼ßHS[N½‚×ÐÞ "¸Ì/S9è$H‰{šŽk@¦ ä4 +MP쁰èpzc*|y2ËÜL±ZX«KÆcÎ&Ώ=PÐ.4TD¤ž‰Þcc` ÝUVsxˆòKPù͝ +b( |?h¡³ÒÀî½ïÈvþñÐ^1#‚éä…€'Zª"²”Ùnäw ±rÔ¢/†gf0Ÿ\<¦žM/€2²E51>°)Iú¦÷¨ÏÁ™ +·0ZÀÁ ±PØ®Yè¯0ØFÙ0 ‡n.²Záfe \wìʼnl + Ì<ã€:5ß>/XObject<<>>>>>>endobj +1225 0 obj<>stream +x•XkoÛÈýî_qᶨȌ$Ëz( +?·֎+ÍЗ9´&&9ZEÿ¾çÞáЭE° ˆ¯û<çÜ;ùýdHüÒtDçŠó“A4 ñ|i<›â÷ÿJM©<¸˜FÓîý«ÅÉÇ»1 ‡´HÙÆd6¥EB°3Ð"î™ +ßÇÚ|×®OÛµ‰×Û¢R¦pT­5=êêêþÓ3*×dS¹—Ù[Óåw]Re©všL!R[æªâ—øó|ûù¿·Ÿ£‹o'g:žG#8ï-`7Ό.*þ¦`‡…Ž+8´¸Ï½é>Á‘#¸Zö«©‚ž®œvNWõæ·åÜIŽ™ÐìqÏáýÓõ_É­*µìÕÎ/­ +®aÇGˆ…G± Ü9MPì#Aûˆ¸>__]¥¾ æ_¥.¥þ½Ö® +Õ,uUòJ}öˈ²•wœ¤-:»¸4›ê]Xç?밖Ò?–OŸ æ´*ã5B³”áÂ&dRp‘Ú—|+FÁWøPI¿ Þ ‰ùwõוNhµ“D}#ºL+ ¼ô÷îSb\iZÚ\ž¡–{±¾Ë~üóì.¤Ã]á†ü¢«û"µUZâñ¥[xn! ñß4dmu)WÓÃ÷¹ãMÏ6¥”BnJ›šL»ˆžMk1Xj·±Ø!À–f K TØ*0ò:^wœæàeB 2¸–8¾šbþ[C/G_žHҙ¤¥( É11 ~eË][êö‹·RŸÏ£É1ü·íkr{—@¨ƒµ6ü&dàÃ1쪺„Þغêâlgk¡ÛèؤZGԘŠžn®%@E}b·Žæ?¼œ6gBí€ y¼°/LÂVٟ”s%!˜/w‰¯2!Y8@’D˜õ‡n¤ýïâfʞM£nÄ¿M¦2IÞr“‡í(| üãÃmËÚĊ÷Å¤sŽr¯Mú—µ«HÅ1ºrÊëÙh ço9c—úZ(zVùÊWsk²ŒTæ,¼ÀÓê-ƒÒ6Þ/šœG£h4ài‰ôÎeÈ;̃ÒT;Ê-´‡)™+dz`U¢Sºì´\¨7‰“‹¦ï`³LQª·ècÎL“ !W¯¢eè˜_?*YِcÙê!·<"’i,VŒUJôJUXd  ƒ½ùnœ«eËÙ®5®K‚|0 ü`´¯¬ãRº)›éÆ +J÷ª´Y†/Ùƒ +@ÝØb—¥ÀcÑ{ž,i½/X›ùГd° e»C«ÍÆ&mã@…Q r`QÖñº0±Ê€båÀ9f¸·Ûºzþ÷åçێ/ißÛ+NH%°½5póéáòþ±k»Ýõ$«`÷EÁF0Îñ!Ô I~ ÓwU¯¬~2ü(Ã6•µu ²`4{Úe\Õlƒµ}KñCPg€ì22¿¹éŠyÐuO‹œCÁ$¯ú6{ wJÔÀZ”©܊—Ò˜0[Ýh–AÞ<™U7×}]C[¹BD¡[ˆޘúf…LjSŸ~š±EÇà^ö”l[H¿ïiæ7݄¸¬šp^A|y CDq—A_+JkÜa‰^~“€‘Õuýb-vÆD+ŽÐوþ‡IíÖ¶Î41×ùŠÉÉË<B-u,õ |ÊÜìüe¸:8d0ԍˆÃþ4FَŒw IY3ƒ2ùUS´!³1ÓÛ»D…›±ÞhtÕçýR·n§ >é·.bëáÊï)O§P(Ɏ¶Æ/yoâÀŸy±ý Ì4NZí–V*eáOZ +–¤ƒo–Pl¤ sDR¸Ê¶,ú§°äT{£íÌ֐FEƒÏ±‹V³î1×pA‘ä¬ÕÛï*3 —™·6‡7ð͚í7ýÈîøeRʓE€!‚íý… #\…¢Ù –=¾:݄íC:ÅÁïµàq/K±Zaoô±H%ðIǯïgÑ|þ·pŒ­LŽñ'-õQ„º¨ÀäÖèyDÜ©ý*xBË$òìê8=6¿x¶špŠý´Ä‰š©‡Z‘mÎï°0ü¸Q-{rNïøS/l;™wGèSi^ÖÕ¿–ø;¦V€à"¬-ö1·²?‚b5KP£%ÒÂà‡¾D§¦0‚¹~ŸàŽ»WØë+'Oˆ#®™Ó~áu¿•mÕn£Œ–QàA£É U«¹>´f5™5ótˆmt6Ñ'™Á\ÖÊ硫Kz*í7 —nl\óv!“Fª3œàÿVfçt6Ìy¹>X#¶ÇŽ§ãh:™ù p|Áo'ÿ9ù?ø·¼šendstream +endobj +1226 0 obj<>/XObject<<>>>>>>endobj +1227 0 obj<>stream +xWkÓFý¾¿â‚´b‘“×&Y¤~`)´H4¥ÔV¡‰=N†µ=Áöß÷Ü;'ë”vÅ®vå$wîóœs'_Ά4Àïf#O)ÎÏр.‡ÃhL“ù Ï#ü•šR|0ŸÓá_¹Á‹MÆóÖt8ŽfÁv·Qø×؎Ǔhr?·£Á<ºlLÿÏíp0kmÛl¯—gO^^ÑpBËNçxH$¥-ã‹ç¶Hͦ.•3¶ WEåÊ:æçê)½ÓΙbCõŽÞZ•óãûJ—ô¦´©Étõxù¾§4²ïÑ( †ÔÍ£Éx„ ‹ß—/x£IctÑzÚ5N¨ªw;[:2%&Mu© G©-éOS\ýEªHøi±ŒØS¿2‹æ>ʵ†±ÆÙ*®«Š“ÜÚ=9KqSš¦²É>Ä쑑xu¥Ó:cÛJk9։IqfŽT: > …™|—éœót[]Z¹ºÔ•¤»ÑãE¼·Æb E í¸‹¿h÷ªH-`ò¥ÖñŽøÌޖ7ÁÁ^gYOv¤qØÖö ‚ØYà€§úwrhæÕõmDFÝ!ëCÒ¾ºS!ßÕþŠ€6¢¯|L(¬.Y'Ê–éuíh¯Œ{Àdc 0â]q#¨gDÁOKšSyúQËʃ²1.î%^’°¯ó×^<¢P›GTPÝSAB N<Ü_3ö&Ë(©ÁҀÆ1FLðÃ=ƒÔë¶Q¬ÊâènÿˆµE'&µùA­Ý¶æwÃڍ9mM’èbõ¸»T¸4[^>käôÐã~ Ø‘d­2“!+|Ê©©píáÌeþ˜‘ürhfˆ•{(¥rušvR¶©ß§|-jVk§RàM ¸%IÄåÛF{G⛡W=¾?âÊÊrö^ò0¶àHf èb'öA'eCȐEvù"íúÞJ>¾šÞS:þ†æ3œÃr’Àk‹…éiÔ^y[l`‘÷r;îÂq¦Ò$ÿF§P–Á#ñ¤¾<ìò† óF‡S|ϙiz9¦—ØîÉ®W×ÏøÂÿ2N?Û¸æk¯Ü?9P?éÏbGCàëÄd6‰fS|½âà“)Çx±<ûãì‹›^¬endstream +endobj +1228 0 obj<>/XObject<<>>>>>>endobj +1229 0 obj<>stream +xXkoÛ8ýž_qa`à°ÛyØ)P,úØÅN»u03Z¢m6©!©¸æÇ﹤(y”¶Xl‹¦IDÞǹ÷ž{ä?Ïæ4Ãß9-tqMyu6ËV+ê¿Ø=~˜Ñõò"»¢ËÕß/.ñ­•´ÃÙnw_Òً«l™Îâ|8úr}vþfF7´ÞÑ<»¼XÐ5Œ]]¯h]3ZçOJ³7š¦’ôœ6øóÓÏøw»Ùdµ5;UJ÷týålFÓ9"ÄÍöB-üáäB:ËWùüù›KšÏÙób–-¯ohºXe«ë+6ð–â^’6žòƒÌïdAǃð4ÖÒSã$s4c*Œt„ØÞ¯ñ\jõ¡ŽH9r8.‰­¹—YtzÓ:.Ùb6‡×›l…Äáõ¥ sttó+}Œ‰Ñ'é›úïÑ"ÏÅuv.°OÁYÚ)ë<Á¿#¥9¦Þڄü…PáhöúŚƒË­^“!—Ô…´ŽFŸ¼°žÞI݌& ً,„8z-ݝ7õhB#ĸ·¢r#º Ñ{éÆ£ŒÖ ˆ +eeîU€ˆ e)7ÚKíUYÒVR%ížáU(‡Yš\”¯÷K D6ª-’¶hš\ ùçô ƒäX~ëaD-œvR;å.?8×}„rZT†ýWBiðR+/J*¥÷\4ü*¸Ê`‹„~ ³ ™¶è¤ú†>9ɑƒïz@40©½Êy©Ÿà‹ñh#àqéziØ2 +~u˜Òx~àºm¼vk]c±aÕøÍÓIX1AöÁañºhAíªp +᠏¶:Æ5ÚwMY>н(UÕ #šzñ¦£ò˜¶â­S…E¯q¸3 b}œ‹ ÐVâ&NjÞrÁFÛki§9րì>%Ô3ß?Ú=@cìùñw3<‰;, v‡jjÄß +ž"*ªIˆ;¼) ÖEb ¹>•_y‰Ä8:ñ„®D\ƒä’àz WË\í2m;²Õ¥¬ˆG§]`@·ª/ۖ§OµÞ$áÇoëÀ¤7¢”%nç. ’)ÉÏÄ*9v62d‚Žà킨#ŒQ4uh‘(½S¢6»mž´õd’ÓcF*†˜áV…-+Š©Ñp² ZCÓ³éæiЂ±Ízf Ò¶X̤±0ÞêgLxbSÖbLã-ž1ôAÑB¶A‡ô’Vë*}2¦]Çtc¤™î÷V!çԁö-M€<‘ÄZ%(9åÁ£Ñ'ҋdVxþ,Ö Ã’I†ÎƒLs'8·Å<%ÊvßEM‰E¸‡Œ”ÖhÛnÛo®ðµÂŽ»#òÍß5 30 oäªUa˜z ãŽâÓÜ8VVâ²E?£—GADÝþá̾™ÆÛ­d6D·Æ"šöß$¾A7·Z}ïaµ´•rñ¥†ƒÿCÅTMVí¶E¨h๟ôÔ +“táÒ †A0UûÈ*5Ðfëm˅ȅ4,èÓtÖ#r-ká¦4@VÁÛJèØàøüͪ}՝_ã‚Õ>.˜gË ~qýôâÝˬ®¾°Ò~mò¦Âêü*Å©NӍér†ÏŠ'¯ŒÞ©}cà z‹Ýl›<¼x=ãWdâ¯é?­à¾å½ëüv4×åò¯øøƒ].ÙÇ?×gÿ>û/¥3’ +endstream +endobj +1230 0 obj<>/XObject<<>>>>>>endobj +1231 0 obj<>stream +x•WaOÛHýίXE:H‰IBH÷‰R¸¢Žks‡N¤B{/±½é®ofíÄ1ýr­ª†`ï̼÷æÍ쏣žèâoOŒúâl(Âô¨tÅYw Å`<Âç>þY%æGŸ&G§·Ñë‰É¯ Ç#1‰ïvÅ$<~ŽU&òX;Q8eñ ?fê=‰Y8¡³6}µ$b¦Dn’ßÈÜ-.t¶À³¢57|„˜këðˆNU+8™¼!ÇN úXg.W2f^µÈ"^¼P"m±’ÎmŒÚ"2©ÔÙwi‰XøUÎ åB¹R|zÅ¡˜è¸Š†;½³ O_قÊSÀb¡"ê]á³°2m ™EÈÁ,‘û%½ØÝgù叛_ïÿ¼¾º}¸ºþr÷x3>ë,27^Öª,ÿGY§M6>Y3׉º×.o³5…ÇnŽwOà5»m JÉ0fÔۄEyƓÌã@<šX#íÐd9^qô³´ÓãD/U²à„"vyUqx9nªLQ*e†œ ÕL¦jz”f"R‰*£Ð¡µøœíG¡­Š8K†º†ÐËÍ»f¶¨Ün!lì÷)}Oyßórz;,uÈ uÏ¡VPô|õõñîñwªc¯ÔcÑAm€IùDIaÁ/‘_ˆ [‘ ¤ +Òsõr¦Ç 4ÞÄíÿÁ&ݒÎN…&2€Y,× +¤n…NWÆæ2Ë¡| -2B.†sÑ%¸enV¬ë¬”HÅNÂ.—6©ÊŠ ÎÌ!ÿõr Lå’’b&Ãe±¢ )/V \€’j„¥Ö͔ŠT4=iR;!?à–ç + O5Ÿg:ЪԬ+:Ê‚´èèŽÉ ÉXG<ÄmÁFʑ§'^?Ÿ¯&%;Ú6’)eºg½‰ LÿS|¨UÙj‹V¦òؘˆ>îÁkqO·pu¸kAÊ ŒÅí$9ºð¾p¶·ŠJ¥NI‹Ž¬<ŒæW'‚§çûuBô,ÕNˆVR«5ÜAhø²Çà;TðΧûà• +àl—uäÙgÄŹö?|ûüãÛa¬BÖfÃ0Øë8×|<9¥D ± Lú¦EÊ ­žA¬rfÖìäŠ5s âÎ4Yãß<\=z4긵ÅOi•w“]5UíC_P§.:gÞî `°¯ùJ¸6à!3üìd:“ &R³bACD$j'½æý±z]oò§Ôy4 +$Ê— +¾ee¸› 5º2 ݅«¨H¹k!¶Ôd4=jSƒ*¦.SÖÒñŠ<À+­f“(„†€·Š0¤ÑÛÆ$xœ »¦Yg‘f¦Cnè_kdJ:+Ãq5\2aþ0¼ÓíÎa\kŽö —p§ƒ‚1i0wÞél?_èó +R®£â(êZàD¨fÀ—Nڔ@¸HÃ%0Q¥ á×Ù=ÀüZ&²'ÏÃÏ ŸÞ^얓NìF9i)ô³±KôwŽA+A—"î§D g^d¤ßb<”€‰6†[üüD†¾ÑvZ‡ÿ‘Ø0P1ý”<4ê%SâÄBð‰í(3áV*Ôs ðòؚb³}ôÜJ›0{-Ðïý.6–þ(ŸñÎò’,ÃDôº²X\Œ05ࢡ¼2^îgiŠ?Ü/¦é46)Íû2cÏY¤]ˆî¦™T.o(ÛªQÑL… ”ƒd`8ŠuKkXŽޑ1š2ŒâyË/ú»p1“k´Qd …×Ìä¯ð2ãx[©iûTF͔o["€:A‚}ßà|Åþr_«t£B¯”GÑq´ô4ª,©skҏ™—ûËG^ œ£©©J +=žøŽ¸—k8•œ¡ŸÈǪžÊ=ì²rßÈê5–cˆ ïºØØ«¡ jTۊ/[œK¯1( û½]¶ãî]Äãõļ™gfׁ™ÚT¡‰¥Ö¾‚Ê6ªýUú-u7 х輪<¯»Åë¥ç€„ÆŒo<«¾‰!SÖM› I…hÁåAîe£LB7q¦ê> Äþü ƅ]˜6n†ÈmÊhC2å%£§€²^6VcÃ])›jGï´ž{f}^$I#|™/ÐáqI£t䷈½Ÿ¦ƒçcËιuª«’K)”+Ðˆ½C”;SáæCác\•҆ªR™˜Ž[f¨v`¶%äD‹ÍõU0œž B¹"…jf…‡§žXÌíÐäŠþ†'¢ŠD +£ ¥Î,®BŠÅþF€c^â:úHú›‹sÜÛ +º/2~H8ƒlÑè  ®L·ð2Ǿ¸bõ7(:ˆÉ9B +´ícОŒ3,â¤ö[Åóá×¾µOoÇÕ=dˆ»òøL ‡Ý`0<§ÛÈ·«‡OWt}x£}÷³ \ÄKwzå+Q÷‚ž¿6Ù\/ +ëÁ.·¶àÞs—â[iØè_ˁþ7\åtà`4Fñ¿ÀÆôÕÍä诣ÿr3­endstream +endobj +1232 0 obj<>/XObject<<>>>>>>endobj +1233 0 obj<>stream +x}WkoÛFüî_±P4,Z’e[ +N jՍUEU'òd±"ïØ»cdýûÎÂ<ø!ët»;;3»üïdL#üÓՄÎ/)-OFɈÎç—ɘ¦³+ü>Á—Ó´‰oŒ§É¼ÿÆ»åÉه)Ç´Üà®ËÙ-3Â=£-ÓW·†ÂVSåì&/4e¹Ói°îpJ‹%¥N« =•–cØ"ÓÎã¸24¿Hè6t×UUä© +¹5t£‚2Y\íü))O{]øùzùïɈ†ãód‚4^ n´ß[ Ni°ÐakmÆ¿>åÝiSÇ{÷Î>9UúABË£lóàu±¡Ü“GÎ:£Ü")d±¬½vÉÍõ2éÅ\ «Ü<‘ª*­¸Kk}tÑÜß<cÁÅ Uµ«¬×1­Ó&ªÍÎؽiãL.“)×ö—­)TÈC ~8ø KúŚàlA÷Ê肃§¶: 릪èú€Côª\ã»vŸµ£Õ+¯5·åW]T ›¦ù7È­W$T…ÇåªRkôÕn‹ã²ëJ²I-ÒOƒ„•®:®ü›Yn¬£ƒ­W¯#üm +4‡é/ ˆ T  §Q%G~i —ݼº»^P¨«¶tQŠ/ºb.¢V-èN&Éd4¦áä*™ þ.viA㑪ŸæW4¤œŒ yʈ«ÀX}²nçC$fAææÍl Pü„UØ*jgŸ³aÌ9ÎmGæ-•{ÁX.iÊxðÑ/L£öÌìß 2ÈI=¡ 6Àµ­½G¶òyn8f"$É&$º†Ä\)lwú¿#£õ¡— ڏ~0ØaÐÏá%Ô÷8vÑ*XfMjK6óHuj’Zsz@¡¥ÉɕµÆæÆu7ïÐc¤ºléÜN>$}~,k™aðÜ·Y“u§’¼bÀÿinæ™Èà$0­XÇهy3Y‡7Í[oú”¸‹(öAœA=žÅÃvT,¡‘) …û…†b¢Ulºä+æ›ƒ”9É°E¹p7~³Èw<™Ù‰X.Í œ§ÿ¹Å”8 âƒ=¥¶.²6R¼/l}™˜:_N%1:…¼¢ÄîÞ5zO+,Š·I¾x¯9ò`óuUY‡nƒšÒØaŽ“Yœ¯[%í>®.í {­ }š_ˆíôœršŒb.š–uë¦É½ Lqá6è†îƒ77í¸µ´Ã`ÎҔ}楥¢˜ËdtyÁ À-Êf3¶O5䶗·ê³æiE™.4ÊCCú˜§(,#.¯Ò«×œó ¹ºTÑN|p£ê‚gøoL ™þý´Àן ëåxFOÁ(+Hہìwèh·öõ4àËÄO†±W« ]óŠ4 |sÌQ”Ê,ì²AçpÃ@\G>³Xöÿ‰(t«Ï]| H ÈX'Q@Že ŸUY€íGW«†ØX'PCŒ£¹ûœ~PKw¥À?Ý¢Ü ±3V)/ȶ†OÃö›r[¸0>C{e¤9ˆ›#€Å¬Û‰éŒšµ9¾‹¦¿Ëà¨o{(¿»]=úrÅ2oÑX^‡3§ök•îxmȧ&¿…šSž&–°sý¬ûC?BÄ[ Ø(k¸«MœõL£ôÍjµÏ  lÎXø:š&QTÝkFÚ®?ç¶ö²¿®Ÿsl)l[½ÚáÎó‹¡58¿µ>|5—V㋦+"T©ÛëÀûsc’؃…-˜=œ¯RØëâÄύÉÐà—<}]\µ¥­ {Éu… Q¾6ªf1ë†&W˜/²bÊR!«]$Êñ®‹ê7ÑáHøm'!iÖ_èy; —úŒ-£ "ÃHÉ£‡É¦‡†ÈÂݕŠŽÍî^WÆª¶’}’K?^5¸ùxVA×8b¼7îêxRÊ£èùL|`:¾®©æ+š @Ží38Å×ZÚC2÷ììãé4™Í&x>ž$³ ?#¿z¸¾{wM÷ÎþËJ76­y'‘µ]r_â |vNëќÏãÉîh±¿5>¸:•eî =èx‚ƒ=m|‹Ãí ¾pz5M®.gxHÇeÓ9ÿéýò䏓ÿ%HZendstream +endobj +1234 0 obj<>/XObject<<>>>>>>endobj +1235 0 obj<>stream +xWkoÛFüî_±(ÆlZ[²ý¡€_iÝƖkÑ0 +¨NäѼ˜ä1w¤ö×wöŽ’)ÆE‹"H"QäíîÌììòëΐø3¤éˆÆŠòA0 ÉtŒéðxŠÏ#ü5’’ópçàã! ‡&4£Á&ÇGÁÑä˜Â˜ðÜ`@a´»J%îW}Žµ´Ÿ©2¢°‰4t@u‹JRit¢2i)ÒÆȨʚ?ƒáBÃ)¿ßž¿?> +ŽÇ#œ¿{9»9»¾ý|1» ïgŸ‚ê[E§ô¨ŠX¯,݆t©s¡ +ºÐEetF?ò4ùñ¹È—Â9Ú®at |Œ;m­Zf ÍêŠ3éÿ%2ÿäºzœ;œƒÉŸ¦Ê’(KYÄê­„%mԓ*D†ƒD]¥Úà eC¿ê´ _(”¦´…tBU*Ée†«"'QĄÃTeuŒ‡’‰6}ŸƒŽ‡E©-§U5-l“¶¢ l£é¶ÛYxE§ÛéïRˆ¸8!§¶aˤùÁe¬­ï™C¡Ò̧‘Ì">ëB’-e¤Q.qoÌÅp­²¨T$*¥ ÙI¹JEE‘(¨.bi™‚æ7ç;ڂ}ÈÃB&J»x–çÒ¼ ‰q0¤ËÌêÌaû"psm{A#—¢PP#»˜ê‚~A]$¿U²°ÈÕrUÌŧ³[P^ˆ'Ä!”ZéHgAWiŠבŒ{ánTd´ÕIµ¿Ag%è!¡Xrµ¬+U<¹HµEˆmÄ’œd@s)É Þ @²"/¹itÒ ›êU+"Æ·¨’ D?àÉÈHþòŠ¶}…¦‚Õù‰R™sL€ãT¸ÍháJéÒsvã$‰ÛFßxÝ_=yœå’“³z„£[’Š# 2ã.f{pœª¢"`Ŭ/vg÷¿ý|?{¸£•6Ïxž•†{ˆøû¸z.Ö8vâVë)A<ðv¾”fîŒÊ…iÖ÷EÞ` Ðï㞋è¹.¿¿sñ!p-gEŽº¡6SÃQ‘Ül~0¢GaJ0Î%îÑ%¬°Ð¨RW£ƒÁáOVå*ýb¡Qˆ±²{4Yk«TE©ëµN©oT*2 1®€|GÝ}úBM¹(*¥†ú˜oø[ÜÛó@’ÚB×{èFÊdõž l¸¥¢L +t0K(Ó?ù +õ6Èd¸Z¶¹mÉ›©ãÒÈ'n¦¦Ó.!"l.3AÐ4…>åÞgÖ{‰¥ÐŽ® £*X¼úË«I`&÷Ÿ™#F•¥"œµØåjä×’!ãýPÀ÷/…Ìa$È҉ÌԅCú½蝖Å‹2ºÈq”—Ȧ ‘Í7küH 'k­¸'Õ + êف|‚Á؋7…Èñ¥L‹X,Ág¦–Ö٢ĹWɳ ÃZ]£ETíñOÿ‚1ô¨ömX2ÓUê­czòßrÑP!áÈø¹€áô»4ˆè…é£Z‡3öéK)ìæÖ®^œ™Æ4ò®Ï*î Ÿ‹IÌõrrxçP{̾Ÿ—œ(RkJüÖNPlJnýéøÛÅébñx}{.?1â¯;Ò.\ßл¹“õ½Öջŏ nõÔr´6K.¤# â±æxꞂ«ü£m?½dµ£DòŸsíg*£ToeúF^àD½`yÃ|q#ÍSÓö¢}£k˜Eƒ*Ñ_ $—)˜€³–(?¶¦ˆÝÿ²IDAbžÜ½žn×âÆïíŠdeTo¶ŸЪhŠ.Š{´Ì]øÍõF¿qlÏN#_[ }ΙÏÏnzé±FæW÷×ámah\‡;wðúxÆÀÂ:ËTQ(Ý×`R±_ ø¹ÂLHB¦oÉý͒<€·v3œàMìxŒ×­AptâÞ: Äó3ì&ú `ãˆjž!›Íï'þ‘ýéàäÿ¼>ù’Ó8œS¼ãáå.Þ=ð¥«pç÷¿ w´Žendstream +endobj +1236 0 obj<>/XObject<<>>>>>>endobj +1237 0 obj<>stream xmUÛnÚ@|ç+ÎS›HÅ\B€ô\*Ej m\U•"UëõÛÚ^wwÊßwÎÚâTIL°÷\fΜñŸÞˆ†øÑlLS’yo ir1¦4™ÏðÿVѺw÷Ÿ&4Q¼FÈt>£8%)–gw/Êîé».R³s´ŒÉíW9=ŸíŒýí¼ðÚ$íT–ñ§S!Ïç´Ó¸±/Š´wdvêm´óvæ{ çÝyü«7¤þè"£þ™ß O¥°^K] @@ -2922,1351 +2475,1276 @@ O oMSCP*¼H„SbýVíÉm0"Fš>/XObject<<>>>>/Annots 665 0 R>>endobj -1487 0 obj<>stream -xW]oÚJ}çWŒÔ—TR©ªòÑÜö¡InAʕ’<,ö{c{ï:”Ïì®Á8éUUµª÷kfΜ93¼tÔǟM†t2¦8ëô£>Vvÿüü«38™F#:L£>e4FÓð•ÒŒÏÓéx i4àÿCü-%-ÝÆàlßۘðHëÂżs|}FÃ>͗ði<™Òº\‹Âʒ&}Ó²šÎcK  ?W]éL¨üãüßNŸzÃn]êܖ:MqOå8yW•2ÝÒLd A»Í¤q•]L¼ ½“âÂ3“hÑ])KùR)£¬¤ŸR$*_±±ãë áÆp‚€qãB.5`ØêŠbø òJw‡=±ke(öu©H¥0’2ñ,ÉÀCl ëî -|Ä:Ã[V,RIe×üàR­ªöI„p'ÞSÙÝÕ%#“H—j!oRú¸{Øí}»½ŸßFÞýÀn“h9XW¥®òä·aÞ³£E÷˜–_è{ØÊD¼VyˆŠs$ȟÈ͉IõJç祒ÆZ–:£.ŸVé̵ܸ¼Wy¢7†næÁpD÷k™ËW¼'¨2þY¾Êv¨qü~ÿr8Òý#›ËNð­–IÏ®F€ð?Ê젅 -¯%^+ݓl?™t' -a l$»²Û§„9 Ë#šÃ•×ݱ´FEª¤ñ,Β^"FÐ#sXZ]ٝ¥.a‡ä/‘anµHEŒá¨ÿfO ¥^*œP¦³± qâqòG—Uš’‹ –>^Žè«ŽÓMgž ¦²ÅÇ)`3ï6º ”¨c*·|vþÔ‹y BU$8ÎEa7šžAüM+v˜qõÀ†)ç}¢s”²ÊD¹}{±ÿãjåñ£Ë£ƒfÆe} 8 Jz<ºà>Ÿ\†\ýP%P -`e°„źز߼Ԉ²|Çä°OkÔ2 ½ÈW­™T¤’uÍÁê÷™ŽHi`CÌ4sW뇒„Ó -EÈá4òùÛ}µ”4«®Q8ëéÛ ïØ’ò*4)¾å`[ªàj­‚ÐÒX@€=‘瘥38ÎÎå¨ -ñ*TÊ2ѕ×IF¡¯U¨Ð¼†Õ!\Î +´1L›†²ÔýæIƒöèu l&Рeu.Õ«÷µ~ɉ]p¾Mö™ÊQ«P4D_†¶¥—K+ØØ¢YZ”Þµ>$‘Y3ÑDj4”aË@"|k4v×éñ‰Ñ/qFš Ôu ¡éCàÖM‘f{””L6N¢óɄDn 8jÖb §ëéINtŒüæöÿæ‚®4ý—J¤jÉÝèÞ_WBå$|ñzgLú -¶¾5 ¼æ!iŽkµž•r¥œ°2D7Ò^|¿‘Ï<3³…–»úa{ˆùÊý÷› /á v °HG©EuA“õʘjô) -1íÞå¯vÁGË`•+Ì6;Ç\÷ N,Þu¿íÎñ¬@ ¯lhó\ö¥tÎ&5(-{‡¼F‡*&a–d; -HÀ4åBJt˜)ò­_Ô ‘Å̂9h¯º¨Å.-€ñCÅ¥6zi[Ö¯¼)ž9˜L~0q“3ünjG(¼à`(耵áñ©æ·?¤‰;;¾žî¸/ÿðçA£[óXò'? F“Q4Oñ›¢q:d¾Î;wþ™êB‘endstream -endobj -1488 0 obj<>/XObject<<>>>>>>endobj -1489 0 obj<>stream -xWËnÛH¼û+ØCÀ¢õ–œKàGŒø°NÖ"XÀ—9²“3 -gdEûõ[5CÊ4íd‹Àˆ$Îô£ºººùýh }üÈl(£©¤åQ?éËdÞO†2žÏðyˆ¿JË*<ŸN’ñkF“ñË狣“«SŒe±‚“é2ƒ~_éÛY2J‰|²;ɬv¢ä«­œW>·FV¹É$÷ÏJ•I­ñ•- -]}x·øÃc ¢áÞpÃoÏäf!»– Üòkݸ=ûýü ?(/;e`XIaSUÈÖéJ¼•¥µÅãóTyÉZ9þ"y2Dï}é FH^Ÿâ’•­$xIäÚǜü:w²ÜãKnîáñFûóëÏ·bT©åûVWûp‹Öï+»ÝÄÁÈoƒ”v:î”sÛ`…<´J×bW!ËŸsƒ'¹—{ô–*}UeËð˜¾r>eÞ/ °Seð¿ÛÂÞ[Óñ\iØpÞ%²°b¬»ÑFœN·Uî÷²¶Ì/­_í:Ð83tºÐ)½{»ø|ùù}(=â³Ë I×Öis÷®ã÷•`[U’ˆLT‰œ­¹[£™ÉùV²\@:œFH‰æ5)Tn ¯¨ê¨µ’s°~G°Bðä/MuAá‚âWZ9ÄOûÏ"Ž÷¢zTy¡–yýT®:ÖL‰’á© ¢R¸,°xö{@´‹C´(9š Zñ˜§: -" -%PvM3ÂGÇ+;9ðlg~ųI3øNíNÕÁ•×D rë–€¡…™ûš,ˆ³îñ÷ sü€>Á¬åêöú²¥Çqá¨F§ˀ, •î`Þy Ŕz¦®ò¢›ø¦Ê16O~?»øt}ó1¿Ú -2 ²f«2ûÅåðÆ* U’‰ ÜÈÑ@Ø«"‡ªwð½±;•©}‚Vj°ÿ2D0;…jWŠ‰Ï–‰Ü’Nû @M´žwü&( (y$‘±Õ¨|‡';»-20Þ P;„}'D?0Ùc -‚û&ëø±¨k•g:˜iåú#t$ÍÐ3­/7M¶°à¦Ç€‡t0ÀÖýgñs<Ù¹ó̜ÖXô‡ºº-4Žq#Þw«ýÆ GªMv<{ÓðˆÜap'Wi½ŸõfÉ| §Ã(wÃéLâf Ï{ƒþ$2|øÿ4ù8æ2åÕR9Ì·¸Œ±;÷&]WÖäS}šçyyjæ• ÁBÐl&ØO´OOœÈá{\łGò7Jý¯¹CÕ½ØqT*'ÕA;âà†Œ¡ J•écR¿éEÒ9ªòVrs}‹3apR’¸ n y¤ãŽ\ÁQϪYÔµšÂÁr©áž§St›!ÉÞ(ú¢ÝÞ¯_²»ã¬>­–ès¦ÒT;.¢A@*9Ԑk lýÎ^ùRÙo¨16ïdXOYnÞì5z³þi³ðÿï7ÝñlœÌ¦s¬©h†Éˆ>.Žþ8úÏæø endstream -endobj -1490 0 obj<>/XObject<<>>>>>>endobj -1491 0 obj<>stream -x•TËnÛH¼ë+ÈÁÞ`Ő²,ɇ`açø¯ ØÃ"‡ÙÇ&g虡þ}ª‡”Ö–sYâkº«»ª“ŒRü2ZÎèlAy3I“”Î/2\ç«%®3üSæó4™\­'ï>§tAëP‹ -LšÒ:?ÝY÷°u¶ké=yÕlÔëûIJÓ,MV0<-l£´¡FùÀ6ÆþÞ ¶[k< zöbñîóœ²lˆ9- -0¡búw[ۍªL=çA[C¶Œß}³IrkÊýûÕÇ ­+íü}´Á7²¦îAy«cF‚hTÃtwùõêòM–ïÓ;ƒºÓ¡Š®ÿ\ßܑg÷Än„²±Ô:»©¹!5DxE0QtÃáêúï;dŠ¡RAV&P8h2Ýð!A.hÓScQ#8¬aðÉ+mXÒ`j•Cú"îÉk­O¨´.FÞX w@?";j°¡]¥óJ()êŒ~ìø@"¦ÌG- - õ¹uºQ®§CÁ?Xœ­k¨5”ó‚²ùXγ,ÁcqºLΓ,¡/vG…¥k`¶µÎUªL¨g«¼ß!„®ù¯×M±Œï£ÏËFxæ(2{6^ýÉ®UR*K¹5wFU)‡¾[ÑÊÆøƒdoTÁ‘ƒtõX O°ï©ƒ'@–Ö#€ŒÀc¿¾äAÊÏ28P.öacÛÞwÄÞN›íoÄ¡˜Ž-‰n%÷(Æ>íÙbürèÑ£Œ043 -"µŒjàŸá?NüØé'U³ þOҁšÎ´}ù k@°É]ßtª¥v;í^i&ͺaxïT/d=ù}VæGÌtél‘n1±cAdxÁo>vA×:`š}oòd¸Q®ÌQ[‹¹÷c?§Œo­ Iü¦ƒçº§QÌ !Tžsè­l‹·#rt-AQ–‚íê¸}M¤b®}ËG¨ƒ ã4¬Æå–-°„Wg4;Û2 Ý:{Ý†QÊ»+Ys‚8ݛO—©¬áÿ?AóåŸ è§õäÛä^vôÜendstream -endobj -1492 0 obj<>/XObject<<>>>>>>endobj -1493 0 obj<>stream -x•U]oÛF|ׯX •’&©/º@Ë©¤qê¨) -(N䑼Š¼cŽ¤]ÿûÎIËr• …-È&÷vggf÷¾LB -ðÒ*¢Ù’’jøÍ/þ‚æñ -GøXI™{1‹c?:õ" -9îՉ7›ÉùÛ ŠÚd(²\Å´I 1†M:ݪ!ü -ú|}ÿÝßýöó åJ%µ†Ù¶JçÔÕÔ’’ÎZ©[ÚN?˜—¸‚p{Fµ•ž(ëBЃ´2šL6šùWÈ g}ÍGÕ´—¸ *wH­[•ˆ–ω¨›€~W:5 *ôn}åÓjk™vV6Tª¦•)Ì -|Jµ—åÃN -¡s>/XObject<<>>>>>>endobj -1495 0 obj<>stream -xV]o7|÷¯Xè¥v`>¬¯(P%VÐ µãJ -Š îݑ’gU(úß;KžlGrÚÆàó¹»³3³ûõ¤G]üôhܧ‹eåI7éÒ°?N4˜Œñ{ÿ­¤ûð¢ßëáñ…½~?¾x³<é¼P¯GË{MÆ´Ì º]Zf§ËµÔ”™²R…$¡sRÚyQ´e*H8ª]-Š„>›šÊÚy<ãCO…xðkdeŠÂl•^Ñ™Ê+£n!W¦IfôýåÙò RèÒë˜A»?@]Ëü”P’(Jú‘>ü4O>Ìæofó‹d>›þr͇ºÔîu“IüV䎜´ÒâÀÎÔ6ÙH›Jk\ÿ|tÂɬ¶ÊïðýôjqôZêÌî*O•pnk,®Ç½ÒÅlŸk÷GœÀÂ[•ùbG®’bƒbÏ9 ʄ&SªD,G‹2"¹Óôþ–Dž[é³¹§šz¯ñ'àš '÷¹^$ý;´b«ÐQ{ÓÎ¥—YédÒ|ÛEP¹M¹¡WÚøW¤¥ÌIp'B‘9Ý£Ëç$ -¿6õjMÈ{kôžO½£µ°e$Á}¨n-$-9YÝ0"¤‘¦(RÐǺgê¤"Ûðƒ6¶Å#Àh_Ó®ß9Z™JjïP>É?«X@`Z‰Ô º•_keQƞYÿŸl-ôJ’3FӖ3ÝJZIO©ô1DænÊqMæÝœ^®¬`¦ø:ï^S²`}´/vN’AB éë*°:ÒgM‡ÔÇ,Czà ôD¥ÒŠ gö«U#…¦?ž'åþEþýøäþØWû(zI0`ï_/|É7mòìÿj†èïãÒbargÝ5eQºmXõ‚Z¸ôi1›ßL¯g?·“Ê r5ì+ð;\±×`@{2Yy™ï“oHë™¿)Ýg«úpõöê7—³KbÀ£ð‚;¥’ꪒ–etx€µ! -g¢IýMRAʬÜ“É]Ý,¨0f€XœÌ3 › ò¢).=_°ø - Uû5*Ý_Ü\ZŠÊ±LBÞR!€eã5Ò§Ê8 -^‚PÐÝ©’IxZçÃÛ-BièE)”>ˆ-¼ÙZæwgÉ¡EìW¿´ôð³—"FG‡èš&|Ñdà1ób+Ð-C ¤hqÐ_,Z­ÖžûŒ÷ð?à”Äù;ðÐ#€¨˜H߇‡*S8­Ÿ¡‰ž•Ccù? ›up´à^ü¤-L‘JkmEßàÄ9!¤úÔ ½X;b±Ññ÷[¡CyûiªW•±ø[Ñàø¦˜7ÀmTEÎ[ A0çeECtq Ëáß/0£Ñ¶ð#m¨Xjý¸yh×wœm˜Ð[Ôå#Ùxú×Ñ(3SkÏH?_ÚXD‚\±:¢Ö!n(—wždpì5?ט+a⢦Ɣ…M*¨{ÍsaÙHèÖ4g¿d8`έà´2æвµQ™¼;KXñ ñqø-BK‚öKå¼}'n2•U\ñÓ¸; « @¶ÆxHÄÖº1åa³/2Ç@Û°ð:Ҙ³#„Ɂe&NŽ^Á“d˜ôº5ȂÇb`X³WŒ1 Êó¢• -·¾¤` —¼ˆ•¼„azc^Ô:o}Û l‡9DÏO¢òlic‘Ù`ãÑFóÛk†`.óŸÑ ·ËJ‡éÏK^8Õ©íìùÓI•>Ç }Z -à G†Â­’ñh‚]ŸG|ËlyòëÉ?Äû¢Ïendstream -endobj -1496 0 obj<>/XObject<<>>>>>>endobj -1497 0 obj<>stream -xTMo›@½ûWÌ­Nþ|Š’8‘zHÚÊ®ªJ‘¬õ2˜ °Kw—¸þ÷]Lj;9Ԗ³óñ潙ù=ADß$c˜ÄÀëAFǺNӄ®cúi„Ü̒it0ÏÃéG“y¦ç·«ÁÕÃF#Xå.mœ&°Ê€RG¬øpÉê ƒº56HÙ¹’¹Ø¶3xj¬Õ+B÷.äŒø|LfÞ°nDåÍjV’Q…L«*ÒXº;ËÜ¢[àÅêeDŒ&á˜ÒKÔÔÊ@%6Æ,e¨é™8À,t~WsèÂL¦T=…HÃ8„î½j5Ô¯”Ë m›Î«/šÒŽ¢’|¾@ø)d¦vƎ^ ”¬ÞwN³SCh¡5Ÿá™>]xºð4þ0„_ªS¨¶Ê‰•Ún‰!a'loµºªµÎûˆ -‰˜ ¹« ”jGfÌNé,„/9‘' äLTÆñ(A·òiY bÁ -^¢5ï°-Dæ‚-ÕÃV+/ˁµkX(4 ΡŒÄ'QQrÕaÜ7*‡Åý2¸»½ 3¸î2öQeÿJ:…\yž -So:ÂOQž*äåìÚò *©ãè!^‰SzðzùTÍ{¯Ö¸¼o)}—õZøÆ:á }diHù–U—°i-˜¹È A” +”‡Á ¥È¯ ¬u -‘ÌYœõî /iOÊâ™XG4¸†ò3É &·$BV I*kf©Ö¾A€Y ©#ñ•ädä§mq×ÏÏ¥ãŠkd=x-¶…=Ó#pyãn¨vã2êù‰êF¬Ï"¬ûZÃu›5žÑu•±&\[Þ¸†'„† sÖVÖÀâiÙMdlO£‘‹?~2œþGô;UÐ0^šCC¥‡IÅ´Ó L¢¨Ã¸¼y¼½oZ½ ·Ô¹¼­‰uϹ ôAÍÿcQLiÏ&qJ›™Ä,q!îWƒïƒ¿K »Vendstream -endobj -1498 0 obj<>/XObject<<>>>>/Annots 672 0 R>>endobj -1499 0 obj<>stream -x•VaoÛ6ýî_qÀ0@bŒÛ)ºIÓ)dk¼}™÷’hK$z$Çÿ~ïHɱ•X‘")EòîÝ»wwüwÑ?ÍbO)­£p„/û_ß~D“i8£I4 cª(Žâð¢]•ô0ˆgópLÑhN°;>aׯx÷bF4…sìE“ ì¹o,±7wyïj18ûrAñˆ+À›Îæ´È*|IƒO¹ØX©é"¤Q%‚„!Aw‹ eªEM•¬©Oߝ™hæÍ Ç„°È‚‹0 -é«*ê¢^“¨q“®ýÅmaóÖfÆÞÀ„¢¨5ÏÂ)¸4¦©$íTC¹x’pîqÄá3©Ÿ€ÍY(i¯nî¨8¯VäM‚qg2xøüí¯èØMD -éûÂ6´T”¥ÌŽÍŒh}h×÷·=s§´Í‹4P&é÷ëOÿ,ápϘÃf·Š‘>6›ŽïTÕV+ÓÆ[oÃæÛà˜Ó§~®®?½IÂq”?ÙËJ@aë%žB‚HÎMMJgHUŽB²¹lžÒªÐƒ±jC ²M[&d¥jÐâuS» ©ª*¬?c@0­”ýÉïFm:ÇçáìzS%aÌ6£áwpjþÃôÿô·P5^—Y)«…Uúgw øCø†ÞöÞ;’¹…îTò¥óDZð'ö¸R #¶K×2àU—;ªDšµôÛ,‘­., §©4 2Šƒ 8y¸¼¥LX‘#—'T˜6¾0îÑÇ?bÀ6ØA©Ö¨aW1ˆ¢‡ £Ç…ÚRÕÔö@äl¢–Œ_èmtñT”r‰,ë"æàœ7_W!ݬ°ü3 Ք=ç\ðÛº1’)“h4ð²–ï«d¯ƒ®áȬËÄà„{ö¥Kñ¶>\!iRC¢„Ó:S[´»ÖïÞì2˜ƒ|(•6ÀáH©T‘I+ŠÒôk©Á&B”Ï·¿L>ÉRm* S•9š¸ñ W´‡;™j,w:¾ÚR-Dâèô£ÔU— åj¨G+1‘Т̑V– p8—ŽÒ\m$‡&èï èERJ2 -ÆGËRBi”hQ§9ڈ«€²|¡³êŠ—Ö -m®U³Îàv@÷jJ üm´²*Uå)Ÿ®}1xQÖrKËÎÁÊò¤ZWE¯ÌúÊ"?ÚÙPÔ¬Eô"ćИGÃó!+´LÑvüÕwm$vŸkw¡çy«š2cÆÐÒ4Ô5¤Zé -­mGï‹ò¬1ú¬T%gð›ˆ3.d”m¿©Ç›z?àFá³#ǁq5Z*õh¨,Y…iÝv¥ êzÎü<½A¯n€÷w1CêýQ¾: ÖW«SÛ"³Æ×O+é×ÉD¾P‚Š³ÃÕ)ŸEµA -E¢žä )´Ï‰ŸÕïç{€{¼v@Ûù1{šœr¸['*ÕrSŠÉoß‹ë+HuÁ­ãú¥G»kœ³¬ÏŒ‘¨ikB›%DŽo֗W.ª×5¼V0lÔ¶†ÝdG<Ý­ñ_œÉ\)cOÔ;R릵€¦k»¦ÿ(wÇyXrgb4ó8 ¨K”k‘fg¬¬NCƒ>å«ÁvÀ€CÒ÷ð%ÈäÝÃSÖQُñNmOÛVô†v­’ëÔk²{0ð<¨¸ñɬ°¾e÷Dâ ñ:Z-ƒsß5^ê+ðiä1$÷O˜ñQô¯”u=¹ã¡/cncËãÁ‘äAí+«»M¿øn¨b¼ oõïu©Qþƒa—Ú]ÏWOyç‹“Û -ü¼öÒ}qÔ÷þæ/'ñ¬q¶xÒOf“p6ûwÖùœM~^ þü†@݄endstream -endobj -1500 0 obj<>/XObject<<>>>>/Annots 681 0 R>>endobj -1501 0 obj<>stream -x­W]oÛ6}ϯ¸ËKÝ!Qý)ÛŠ!ëP`I»ÅE0,{ %Úf#‰*IÅñ¿ß¹¤äÈrVìahë”&y?Î=÷ðæÛɀúø3 éF1%ùI?êã›ýÇ¿žLÇѐâYõ)§Á¸¿_etwÒ^cw2ŠÆõY¿;FSŠûq4ã»óY4¯W~·µÎiw1îNâ)üán<&õÊßm­qw0ٟåÝö»Cö,ñ.²£Ñh„ÏñlŠÏ!þI+¿1NlgcØ!ŠÑaLÃÂûzYòÞüpo¿ÄÞt^î].NÞ}Ó`@‹JϦ´H=ò}Z$½[ùì(وb-Ém$½]|Åùa}¾G[m×FW%½[©eª¤ -í¯u¦—"û›¬LœÒøR#W‘þ.Möþχ1J·H{-ÃtýéæÐxŸö焅e 9¾Bä’ôÊÿ?Õ¹€ÿ­$\¿jU¨b±¥Öý?uEye‰Ìjڈ§g) ,9iºË"1»ÒQ)¬EŒ©=Œ¬‡ g¾§=°½<:ˆÐpVÚÐNW†*+ ÒÐ$*äR8•'ëx\zà‚]ÎóvAŸ¯¯ºÉ|P…Ȳ݉4¥‡ìæ:U«ÝÃ[ÝDš°yBÿsýŽÌs2ÿ¸¼¾Ô?‡‡ðµ -³ØH*Çù–FåÂìH)-EòÂÕåMtáŒÎ2†îNäKA[•e$œ“9ê¼ø„Hs1þ}„}¢¶-Ç-;R$›šcˆ0ÀÖÖσ$@€ó¶,#¹dáS6ÇWÂu²D¦ZڈœRpNRᲡ¥A‰aá%‹ö»ÿx{G©pb)[S|.ÀJÔ¯°ÙéŽÏ²`Åâf]·à{ 0Ò:a\P–|*$hƒ`ào ™b–í¼ü$™‚ÞxíYÊ5‚«,´² -¢]åv?„ -Ìi€G‚_‹s¼E^­çÑ°é6~Œßa¯xàNGþ¸Ñ§Q̊v#Š•R—™ ú+ì#JfäZ˜”£ðqBn:ŸÉä°TBbü Õ`¯*ùBÔÇî˜ €ðã‹ê‰%\Ëx#PÎ|‰:Öʯ›u±t) !Âm®ž5꺍•W6^›Gmv Fð¥GÑM+àŒ–^J·•2<•‰2I•£vEÞ0óÅ·JᢠSïåÔç4‡IeÈ!{x2p^y¤o“êFClÁ^Èn•K6ˆٞ†@ƒ±ˆ.^3~ÄJ^è’BʔkÕ Ýá*ú2ϙ»|®oß[ÁpD—¬8+QeMù’ð</hºu¬ì¶*KmŽúQºËŸî<·‹ßnžžØ­–a QÊ ¼JvÔ0Þr%Pô†3óçÚaÌj8½ñSF÷)ö"Q×&÷íãÉÓX~RkséBu²´!ØÔó]ìµjH¾xLÍ›º <Ðì±ôÁé Åüò3!5…¥dŸpfSP4X>'²ô³JîiÈOﴀ¦kiNietÎÓȽkA1pÐÈ2¬ºË]‡ÞÂ&@LY×`tâ4žÖ/]_鼬ðþØSº¹¹Âs££­^9 -fœ*¬Î$†š2« VÔw^•¥QD÷›]˜‘g:¤S »ƒªÑûºÑòÖL°-‰ºªŒg~Aëì/ƒ©µ¸â5(Þ8"¥ó<2(½„a -ÚB 2w–¾êùeÜ`PkN u óÓO3:jK~V …Ý??²î‹„†¬Cä›Ý1Ã×Ã"LSíÕXpüðb#Mž¨BÊ!†3Ž|dEð÷¡3¢›'ÃâU§+¤Í ™”•Ê¤Ý¡'ò:·#=ðº#«r• T2ŒÃ:ãAº‰ª®++ðq•yBàpÃá­®²Ôó¿Ç¬7J@gVïüòן(žú·îîâæò‚>ýüÅëµFéðè‚ï7Çϧý9¿oÿñmãÜi<ëŠ;“9›úeqòûÉ?.®¨endstream -endobj -1502 0 obj<>/XObject<<>>>>/Annots 688 0 R>>endobj -1503 0 obj<>stream -x}VMoã6½ûWÌÑù3þ(ÐC²Þšlºñ"=ôBK´ÅDjIÊNúëû†”mEÅ’P$gÞ¼y3ý1ð3¦Å„¦sJËÞ(áËù××ß{‹U2¦ùlžÌ¨¤ñd„¿qUÐs¯½Æîl‘\·v§óy2¢éd•Ìqw6™ÂR\ñ]x¡é8ڝðŸà­Ö÷¦É¢µ×Z–´'«Ö^k 4ãü^ŒÞnzû>Óf‡ çËm²ëˆ6i_Ô>—Ú«Txe4Yù£–Γ7$èEéÌ=nÈI{–”&''JIGñNµŽ­®ÉØó¥Õ²¹ôËæ{oDWãi2çþÑÔE–4'Ì>>R8 ï;8ovï[ JTø¸ƒi¥ñ»Œ@U{w^–lí 濫(–S{Mßïÿ¢Ze ;{þǛœVŒkX@€5bmnXSW.¡M®¥&“„¿â T!¶š2y…©J0H[+tšKGF3pˆ JÃ{ƒŽÓmí騊‚¶|â 3ÁÊHÂَ3Fw‰ÚÀ¦ÈB{±—|+  ¯ -ÂÓÚ*ÿÎ8}Þ@èd˜QÿìNâIyî n¡¯OŸ(ͅÖð ›òM¤qGÀ tK@!ûp@Ê7¼–RhGÏ¢Ü"ŸAe®ãW›#D`‘\U y©ò¶†VA\ЄËUå~Šå,bÇîÿî«D&z75¥@(²,bèønÁj¨+©m* -ƒ®rq@&8/K©!BÝYSB­ÝËOëOAººãS¤©©!¨˜&±® -î`Å;€|Άw×M•÷/Bø­U„—6Ð'Èž7¬gB–@+*ÖyŽÂFÀ¯RVžd9 ýÁTÒÚE݊^ï·¡la«0øÄ6Y”¿B8..¤ ³\}LdË߉3®* yP©5Îì|Çù9¹!#©@ Ca Ôֈ åfv­Ê½8€—ÿç/f!|j£ýåæÈà Þ¤%÷@^Cgsx‹Ä‡&ÁM­Åªðj@Ú ÎpŽ¾iõ֌±Ó”9ë*ȧã9"G÷iå&m|˜¡1ÀvàM—ÛŠô5ö9>À*;²BE“¡nKoåYf*Å+ËE|Ì2º;¯Š;ü(ðàQpMs”ú ¬ÑãÿHfÒ: þ#Jx§,ôTÕ[è*¿äûEnÜ^ü£´¤?”®ß^Œ-²“$ÃP+º ×&Ôx|¼B’!?¡B‡wËöx¾HFË)MWc<÷ð„z¾y¸½¡'k¾£UÓº#‡tuºpµ­øü*™$ ßÌîé4á%¼ã5$m¶˜%‹ù/GܙØÔçMïÏÞ¿ù›ˆendstream -endobj -1504 0 obj<>/XObject<<>>>>>>endobj -1505 0 obj<>stream +­:Ouû¹¶¹©Ã#óÒÀˆ(Þbîk!kTµ WJ*%…ñ”(RÂél_ë°t^f*gi3R«Ê¬•ÖÕë£Ø–$FÉZßXS•îÃa›¯.± ٞƒ[¼Y‰fݹ½î~‹Ôfß]»ïó„áñªÔëÏ뒼v¨ÚQê)J”b°VI&¹Öˆ6mõÓÚÎ"Ë f ‚饵ß}lµ¼£G«sGlš»i›°ØÕÇÛH’î=¯cªœ¶"ɚÍPBnáÁÁ8ckhÏ0,Ù(ºòwUþ·Îu¨Ód8µ4€ÁåÞP|:íÚÁ‚VâLÍZè¶Q›NÓ†–Ž,a°èZBÖÚÅà¾% …Sa¹y«[K #|š7o Ño§ù/¯ð®‚MB¤× Ðn~ax CV¬Ý°^ÜN¿ èφW|þvõ°¸_þ¼Y-㯫Ïa+?ž*ò5*zWKžSMf“h6ã%ˆ4—#¾u÷¾ôþÉÓm¸endstream +endobj +1238 0 obj<>/XObject<<>>>>/Annots 578 0 R>>endobj +1239 0 obj<>stream +x•WÛnÛ8}÷W З°ß;Š"išmÚfkY Í-Ñ67’¨T\ÿ}ϐ”íÈ ‹¢i%‘s9sæÌä±3 >þ h2¤Ñ9¥E§Ÿôñf÷ãÇ_ÁhšŒél2MúTÐp|–LãSN3>OgçÓdHãéÿ⯑´Ä‡é†šfÅVq}\Ä££³dԜ}æ4ž\Œ’ɱÙ>!”ÆÆÎÝÕ¼szsAÃ>͗Èè|2¥yæÁ›ôä³ÞÓt™:–]‰ô¡®èZB•ôQ—Îè<—†ð$ÞÎÿíô©7ÃÄÉmmd¾¥™(b0‹Wù(ûL‚ßÞh (øš‘F>ÖÊ*'釙*Wáð˜ƒxx8IÎùð•\j€¶Õ5¥E•µ0þäÖÊRº•“¦KU.…•TˆIÁá³pþ®ÀCª Ørb‘KÚ(·fƒKµª üï2ŒB!©Ûë J&mjÔBfÁ¥ )÷ðµ÷ùûÝü{òR®"set]f¯fxÇ1" q ùú?"]«2&ć9 TM”vƒÒäz¥KàòXKë,-.h£ÍƒuÂ)]ÚÃÚ5Þ©2ÓKßæÑqBwkYÊ'ØTÛ`–¯²:8~··ÜÄ@sÿ‚A-eŠ ø' º4.9%Ê ?XZ+D¼–°f¼Iö_ŠB"Ì*a-|d»/ä¶U¨—_ ÍJpÑò{@b#«\I œ#½DŽ`Fá±´ºv;O]Â’¿Erù·U.R¤Œ@Ã3Gj©2z©pBٖoëÀß,àŽ.ë<'Ÿ<3|ü:¡K¼õt> é óP->N™‘Aö`Øê^*Фže€Ï.¿znr˞CªÐP s?¸¦À2Ç¥ávgrŒ¹q*`Ô ÇÞÑ%ÝU³=¾ØÊÿ× Úä×[_G ͂;ú5™±ôëäŠo„zrrãC‹@)€U‹^Ç»jËqó«ƒ,¦í˜¿Óm FB*Ê@;,*JÉ©zXÃw¦#JYÇ3ÍüÕÆÐBR†tZÉ¢ Ù!‚F=_M1tû³–f­ 9 +/o=]BYÛI‚áGüڈ-© Q˜â[N¶¥ +¾×jÄM´7ÐuNY5cà\‰®OBå,3 ]‰dZù:…-X= àÌ°J[Ë´9P–`„wx’±¤=z]› 4hùCŸKõbm,y±‹Á·É>S%zŠf¡‚ÀÃ8¬ôr©R[̉ªÂT€È‡çAƒ„‚§CZC\J·“¿PÒÙ.ú1Íëft´\£“Ã>7CþÏ-3¨:ù›G¬­ è= +°‰!c*_]â¼µùf4ƒWÝ"V£•0¸¶ðBϦ®r½ù}ÏB9÷Ø*¶X$<ö@c†Ñ»±Ò½c«§7}ºàñ;HÆ£!ë þ…f°¾ó«è}ˆ° K ‰ÄÖ|O[¹#ÊóÜ݉ӛfä÷§ïFg<‰DNùðLÀ”¶”+ŒvA?×HÛÞ{|ñTJç-ߓ]3ïDn5„b˸";¶b",o<[Pf(·T¦ãvQnÃ;lɐ[l/؈öú‹®ìÒ"®_Uj´ÕK×ò~DIñöÁ< ++Š_Ÿ÷¡ŠÄæ‹Æ֎X[^¤^ð D™xF±³Ó›é~ëž^$“Ñ·ôÿú­€þû7ñdœLÎñk?²çOóÎߝ?­3Iendstream +endobj +1240 0 obj<>/XObject<<>>>>>>endobj +1241 0 obj<>stream +xWËnÛH¼û+ØCÀ¢%Y/çø#>ÄÉÂZ ø2"GcrFጬ(_¿U3¤LÓvv±ŒHâL?ª««›?ÒÇ¿L‡r<‘´<è'}ÏúÉPF³)>ñWiY†£“q2zéÁñxôüÆÙüàèòD#™/ád2ÇLà ß—yúö“ÝJfµ%ßluï¼ò¹5²ÌM&¹wxVªÜHj¯lQèêûùwXÉ`-ö†SX|{*×sÙ¶Là–_éÆÀÍéç³Sü ¼l•a%…MU!§+ñVZÔŒÏSåu&+åø{ˆäѽ÷¥78F¦ðú—,m%ÁK"W>æäW¹“Å_rs×ڟ]}¹£J-?6ºÚ…[´~WÙÍ:>Fþ¤´Óq§œÛ”+ä¡Uº» Y–øœ<ɽÜi¤·Pé½,+[†Çô•ó)ó~©(€*ƒÿÝhöʎçJÆó.‘¹c½Øµ6âtº©r¿“•-`~aý*økׁƙ¡Ó…N ìíÛù—‹/G@|vq.éÊ:mnßuü¾l«J1€‰*‘Ó¥g)YbÚlÇËYôÄr¿q’V:c©UáËĚt|3ò5 ‡¥ìöÉ@»Ï":åîY`2@­×•}PEB[mâ÷ŽèPæ8Öäý‰P²×hÍÓúy©ÈÔH^„’®”¹ÓÂЛ¾ÖÄ¡3k´ ›6\…ÚíùŒx¡›t¶º1_¡mÍÓó-‰@ð_sQظøR9–'µë]æšÂ0‡;…c©|®S8Œ+7~£Šb÷¤ey®Á£Á˜‰Ç’@0¨E½ãQ,É9¸£Ê… +* gè4ãE”žóßJO2 5ÍA|TÉQ»†Éð-“1гMmB~ÐÐuAyá1ðÄÛԂ€+…쩝öˆôXn˜\^® ]‚¦: Æ:¸ÅˆçZ•¤ëÆÀòÆdŃ¾Av¨¤¥X$@Ô8 öKm!‡¡0ŒŽ?0'w+40yÞJ6à +4‡“G4¯¨B¡h ðwI%G™•œð[‚‚ÿ k* +jT¾ÒÊ!~Úq¼‡ÕƒÊ µÈ häqى°&I”¹OMFp”beÅ“߃ì¡S¢EÉÑWЇ‡<ÕQQ°({²mú>:^Ùāb[ó:Å✓«Æ“ªã /µ~¤Õ ;3 +å1w5ObÝÙïæõxâX«ÓÍÕEKˆ‹ã̸ F,#V @¡ÔÁ¼ó)õ]æE7çu•?`J}>=ÿtuý1¿Ú +’*F©2»ÅåÈÆ K’± ÒÈÑ@Ç«"‡ˆw ½¶[•©]lÿVj°ÿGü™ügn™òj¡¦Zؘܽ;“®*kò_žfŸyZžšy¥ÆþD0ÿ›E¤û‘öéQ˜Y€"|›WÐàHþF¤ÿÕ!W¦º;ŽJeâ|ÚËF×P0´A©2}Hê7½H:GBÞX¯np&ŒKª‡?êÖp‘G:îxÁœ"ñ<¡EI«),—îy:E·ҙìz/ÚØÍÝê9»;ÎêÓj>`*MµãÞ¤’} ¹µ³–A÷Y°%´{S5cø)cÆÃdÆAú*c&aΒ.Q>ö3¾íýÙ+A¹¨ËýȨߗ·“,Õ5Âz€¶Aç¥÷»CàÛÏèŸ_Rõ»¡yWx5·¦±OÍòáÃú-nEªü×°ÙÝu -V‚E‘‡¬ö¬„+”É¥U¾Fýè0ò4 ôD²mcx=ÂFÄ×#.'ÞbÂcïŽãœÈ»쎷Ç‹Ï‹5¼€Qo8K'Òk(r™v× j--V¾p1œÖ"v ° N¡C¨Œ ÷èrV+Ø`‚ÞÙ1^TëW¼°æÊ×Ê~G±¦xÃRÊróf¯¹Ð›öOHáÿ÷F;šŽ’éd†­&ÆÇ´üq~ðçÁ?'Òòjendstream +endobj +1242 0 obj<>/XObject<<>>>>>>endobj +1243 0 obj<>stream +x•TMoÛF½ëW ÐƒÝ bDJ"•CQØù@}hêÔz(zX‘Cqr—Þ]Yå¿ï›%¥ØJ.…Y¤fÞ¼÷æãq–Ò)-s*»Ù"ÙlèۇÛãaAyž%­6¾/×ɒSØ²ÏSìz³IÒ)6Cü)”VË™#Èù‡ÛíìÍǽ¥mMi²Zf”£Ê:ßжŠØ ږ×Gë¾î=ôô yÕíÔÏÛ/³ÍS0Eàue;¥ uÊvˆ1öÇ­Ý[ã0°—ˆ7W”¦R{>ŸgE$Là…†éï}kwªýgî¹ Ú²u|ï»]RZSŸžoß¿KhÛh_ÙǼ#kÚìu¤&ˆFuL7¿ßÞü”–'žË$!Gš˜ú×ݧòìžØM°@6–zgw-w¤Æ +/°!Š>q¸½ûãF¿b@hT;V&P8›3Ýñ™ W´¨³h’ Ö0ô”6,4˜zå@_\¾úÞô+ª­+Ÿ‰7VʝÑ/ÄNìèØè²IŠF?ø,"ÒsÇыJ +Dîî”èýØùwÖgÛn}}KéJúŠ!Y¢µâíoöH•¥;€õ­.ULhd¯¼?[·üë˱@zVHòŸSÎË x–(þz6^ý¯î5Ò#Kp· F;©„±{1ÉÆúpüîTő¼ÌõԙˆèíWփ¥uÕ #ð4¨/u2Õ3gÉÕ©lœ×‡ËQ8Åi³ÿ9éØ:°‘ê†Ñk.œhgùèôÍ8œŒ°-[ +!­,kàÃ7MüxÐOªeükҁºƒ˜÷ öÁրÁ`Sº¡Q+6JïŽÚ}ç™L鎑}TƒˆõŒäþY›Ï±Ìµ³]DºÇªN ‘­…:<Áøøã!èV¬±L™Œÿ¨Tæbž%ÜûiƒSÆ÷օ$¾ÓÁs[KÒ¨(rB U–Üz%gâՄSkH”k` wÜ©'2‘ëÐóu6tZƒÍtÞÒ§{³¤,ÇÅÌ×2ÑqûèÞÙ/8lØ£òÐÁg%7NP秔y±Àuþ?ë³*VI ŽÓ]]¯W‚öa;û<û5 !endstream +endobj +1244 0 obj<>/XObject<<>>>>>>endobj +1245 0 obj<>stream +x¥U]oÛF|ׯX ±Šæ—>\ Ž#F’&uˆ GñH^EÞ)GÒªÿ}g¤èØr_ +ے%îíÎÎÌî}Ÿäã' UHђ¶õÌ÷|Z„wIñz…ÿCüYI¹{±·<õ ŒÖ^üòÁzM¾7¾ØPË_yë14ö}ö· –ã Â/n.)ô)Éq¹ZS’¹çøf{öUÔ© ѐ «ÍWÊL-”¦ZÖ©´çÉß³‹›˜‚ ?;×^ˆÓgI©¯ kº¢¤¢S™¤ÖP#ÛV邺=õ‰# =¨¶¤´Èhp¦kK©[µ­2šDzM‹T(™Cú€ÿasíquŸæጠæ%·²¡Gӑ–2£Tæ„òçTJÿÂñG!΀¼ãÔ1-@ÞFÚiÇÔÁÒó— k ÖX*UQž +nút›L­dòAVf_£ªTj…U@x&Ñ°´Ä}‰ª¢Üššø°H̓¤Æt–;A¥®Á—´۝(äý¹G ¢J©êLTÜÎýQÏùTࠐT›–Æî^ö•>ï¥þ¸¹úB'!º3lŠ`ÅÂÎÖ¢ÅÈÚmœ•älV~ï”ç҆@=mdª„~鑬 J?ë!b’ 9á´¹©*sà"cÞÓ¢óMsô2xbÎ=ƒWÿgKw2{/Úÿj©+p-…î ٔ¦«2*äð‚M{º‡—uƒ5œÿïϘ˝Ҫ½??ÝúgWq\¥4B 7R¯…;ÉŸÊ­`ƒñ„LÊÖÔ{…EoÈކ}’ÑÓÜ`ˆ,S"dc¹€XgÂf?xJêeæ8ìo¦ÅN(ÁN³Ñ]{ÌÃÓO¡ƒ/~&ÔpˆkñØÏ9ªÒå¨Éä9]oÂgþŐDq¿$®]²_>¯êx›s °>î¤i¶$÷¤z~DZ™a[¡qè×#/<äÈٝ«¢Ãi³gÒF%‡áÏy ÎYý_7·wÏ©ºÊ[ì ÊvB¹j±ïœÕñ¨ô¶ê2yÑx%G¶¼>ÙØ(•B8[ÓyïâƧKžïq)Çû§Læ8@ﯾ½ûëÃÝÛ#^\3<¼?D¸Eâ"¦Ëà‰cxãâHU-îÙè7N®§d*sÚ£¬“܃Š'KÞv’T™ØO_{ôј 2´\l$C=Õ#æcÓa#–ÎA¹úhžÓœ°zýÀŽ@2n£ã%Ø5¨<úJÔn%· ‡v:O;+”ÆE¨©©S!į§+3Ž¼ËEÄ‹¼rÓÆ«Ø[-qÓsðbÁݽKf¿Ïþ¡œ‰8endstream +endobj +1246 0 obj<>/XObject<<>>>>>>endobj +1247 0 obj<>stream +x…VÛn7}÷W ôR;ˆV÷‹ ¨;h:qeEP÷Ú¥$F»ä†äZŠþ{ϐ+Y–•Æ„Ý%9—3gÎðÛY‡ÚøïШK½!¥ÅY;ééÇ.ñҦᰛŒ¨?á¹7Hzd%-°·MƒË!^ãJ§‡M»ØMÚõOmeÐë'—õÞ.ÎÖ[O9ìw»I·ÞÚ&ÝޝÅ`»6Ûí ’áK³H«;ÚÙû{3;k½kÓ%ÍÔIú½. ‘Ö`8¦YBnÓ,='8yA?ӗOŸ§É‡›é››é§ûdz3ùíöböõ¬MÍ`Â!ìu2­¬ò[lŸ\ß¿X–:µÛÒS)œÛ›9ìÛJÇûZïúÔép,ÍL1sP°û^S*œ$'Š¹À£þÉÓB-+Àf*O[SY0æ¤}”–*§ô2~±kQÈ×ø,ɯdt6¨|Æ9™Ò+£Ié¸C|œpp"0W̓ÔèÅÑɫ݁l›ÝA2ŽéЁOá'kiçÒ—Äž|‰ÈSQfè•6þi)3„`®°É‘¯ÈýÊTË)OØá„Ð[Z [à!#µ`çx: £é>€¼QyNóÖA¾bžc—¡…àU‘®ùE[ˆ|_Ó',Œ%“g¨Hš+©½Kè=É¿K™zBð$17ðnå·JY¤1wÄþ„çéJè%H`P“ÍJâGÒRzDé=|ˆÔ+XÊ`&õÆnQ7/—Vp “ˆç%uFÌ0Eö¹‚÷ÒWeäJKú´µ¶óÁ‰’âè8ä3](­8g®=ó08!Îwž”û! (üýHêþÚ¥»o&:Õr Ì?'v²¥u–þÉÓÿFH¾ßt3éê֊YÒ| qg j¬€§Ï÷7ӏ“Û›_‚4§ +µ%9nÎPäН»†*(T*K/³]u/Á<ó᥻mˆÛ‡ë·¡jŒü0Öêã§ÙÍ1þ±­‹ +Î%Ue)- Äñî‘;Ca§Ôςb kP ˆÃõÇ{ʍYƒ óþ­šYé™Ð+6ÄE}v°´%RS™î ×F Q:n˜‚Ëá³#-ý\GlŽ]ñ7 @çJ&ámeœ«DÏ!ôBDiâÊÖ +ïEº’ÙÁŒ(' !Vƒ£2ߞô¸0yn6h¿ºßc4gˆI +§˜jª!eáNô+NZ-WžëŒu€¶„Æâøxt&€(™$œåiˆqøU…Ó‡(AK¢zeAڎÜòÚtŒAÚܤèYi­±¨ 8„P¿‚Ú! “¹ÃKïßÒÛ)6¨^–Æâ›f ŽRǖb\·V%9oE€Μ—% PÅMB÷üÜcÀŒFyXÌ_ôF-ÔÁõwüfß׸·HÉGž¥¦(«¨–©©´.*wâÕmŽ¾FÓòø´H ²½â÷ +Ã%Lz¤S+³°s…$ç®Ý9§järc’±r2PèFZs,éʨT>\$ÜìàïK÷¸–„¶/”s<¤k?qx•V=rÆO³àá¼r*¸%kŒGwØJ×òüt½x2‰aÂøÀ̈ãwwîy(VÕ™áÓE¡‹y“7æ­®(ˆæ†FQðôÅìÆȨtÖx^\?÷ýuܨÉÉ㥉›ÓÚù8s¦w·œûTf¿¢2n f³Ÿ§{8Õªœmí8Ӛ+ýôéJýy!"ܖ¥€Ê€ *’>7KA,!9%ì%WtÝø„²Šüá"&²Ë¿y˜I÷Á}«pêLEÜS§®׸u†¸]{¸k“ËË8¦'·o&tgÍW¾<\›´* %öÙÜiŽÚ¸sý`¬÷Gýd„k.î·Ùù`Ènfg¿Ÿý¡K£,endstream +endobj +1248 0 obj<>/XObject<<>>>>>>endobj +1249 0 obj<>stream +x}TYoÚ@~çWÌ[IU;æ²á)JB"õ!i+¨ªJ‘¢e=Æì]wPþ}g×v$*ðß1³#Hè=‚l “x=HâÒtB×é<£ë˜>¡fÙ4N?z0],âéG&‹,žŸ?¸Y.ï§0ÁºðmÓyë¨u’ÀšW¬Þ0¨±°AêΕ,ÄÖiÌái¨±V¯í1g¼Ä§ `2u#ªV³UÈ$°ª!¥»,,j°%^¬_QÑh©ýp‡zƒZ¨ÄƄ‚%²5}'º˜Ç>ïò~#]@Dø£É”ØS‰5äƒr êWjcк¦MèùRÇqF*Rø7¿„ÌÕÞÀؓç•@iÁêC›4ëD‚D Î |†'zµåé^¶ÓúÃ~+¦T®Ê½~•ÚnI!a/l o4ý/å¬Ï>RA"æBnÁ*ØIµ'€ 3f¯tÃׂt +&*ã%” >/XObject<<>>>>/Annots 585 0 R>>endobj +1251 0 obj<>stream +x•V]OëF}ϯ©ªd$bâ$$áê¶_·¢ÐÞ¤}iú°¶7±Áö¦»kBþ}ÏìÚ!1 µâ +®½ž™3gÎÌì?½ˆø‰h:¤Ñ„’²7x³ÿõý—^4ž„SGÓpH% £axÑ<4ï §³pDÑ`Žq::àÔ?ñéÅ4Œh2g8‹Æ8s|tðˆ³É¨ýÏ®½³o4Ðbx“錩C…7I0e,Hô°SªJ‘WTÊ2–údñäl£©·íÆÀ½Hƒ_U^å՚D#ºñ6ÛÜfäÝ Ã¡·S5¶Ãi8aÛKcêRÒNՔ‰‰¸­Í+©_¤&ç x¤½º{œS%ð½Z‘w †Ë`~ûýÏè8LD) -ééa“U"ŠB¦ÇnԏF>«›ÇûŽ»SÚfy’(óóÛÍõ„Oø¸ãÌa³[E±HžëMKu¢*«€iã½7i³õ8&Át)@œ«›ëI8Î2ð_vªPØDN 9ç®"¥S”À*G!ÙL6@Oi•kcÉXµ!ٔ-²Tèñº®œA¢ÊÏ_Ž1 ™6ŒVÊþàO£¦œ£ópz}„)ã0f›Rÿ‰œúšÿ0ýý?¼ºÄ‹à2-!Ecµ°Jÿè̐€ÿ¨_ßûÞGG1·Ð݁JÞ²tñ8~ÅW +dd¶åZ|¢ªbG¥H²¼’þ˜%²Õ¹…ã$‘Æ€AFqPÁƒ óË{J…±0ryB¹iò içýðÿ¤°P¨5Ú×u ²è héqI¡wTՕ=9»¨$ãzG¿ä…\#EE"Mی99Í÷UHw+<þ™Ú¥¿ª‹NpnømÝɔIÌDYËÏU²×Áâ#Ó¶ƒîÙ·¶ÄÚBú…¢I iˆA«TmCš7q÷n—Á äC©´GJ© ŠTZ‘¦Û( ‘¢|…àxü¥òEjSJp˜¨ÔÑă³¢™8<ÉTmyÒ±hK´‰# Õ®ÑWm1”ë¡y¬ÄXB‹2CYY&ÀáB:J3µ‘`šŒ¡¿ q!É(8- ¥Q¬E•d#®Šâ}†Î«k^Z+|h3­êuv·ºWSLào£•U‰*NùëÊ7ƒe%·´ ¬,O:©µ]ôέï< òû¡Ù yÅZÄ,B~Hy4¼Ò\Ë3`ÇoýÔFa÷µvÈ[U)3†‘¦¡®>UJ—m;ú\”gµÑg…Â*9CÜXœq“ ¢ìûC=ÞUû7_9ŒëÑB©gCEþ̊ÈM¶mýUå=ûxy÷@—÷·?ûpû]Ø´Ck|õœÍý>}Aï,Àû§˜!õîª ß} ×W«[Û¢²Æ÷O#é÷ÅD½Ð‚Š«ÃÝ)_E¹A E¬^ä)´¯‰ß՟ׁg€»¼v@ÛùCŽ59åð´Ž%Tªå¦ ŠßÜ97Wê‚FÇÍیvf\³´ËŒ‘èikB›ÆDŽö—W.º× ÜV°lԖ§[¼#^Œî €Vø/¾I]+ãLT;Rл¦½€¡kÛ¡ÿ,wǹ_ðdb4û8k,¨+”‘fg¬,O]@ƒ9å»Á¶À€KÒÏð%Èd“ÓË[ÖQÙÍñAmO›Qô†v£’ûÔk²½0ð>(yðÉ4·~dwDæ q;Z-ƒs?5Þú+ðeä5$÷W¸ñYt¯€”µ3¹å¡‹üڏ±e€e‡ÕàHò öÕZÓOþ Ý@ºwțSýk]¨XcÙ%6ÇÆõÕSÞäÄõââ6?o–ýtß5À}¼Ùۗ¸Ö¸K›çÕUèÃ+üx:§“™¿\ÏØÏí¢÷{ï_’ÒÕÂendstream +endobj +1252 0 obj<>/XObject<<>>>>/Annots 594 0 R>>endobj +1253 0 obj<>stream +x­W]oÛ6}ϯ¸ËK½!Qý)ÛŠ!ëP`N»ÅE1,{ %Úf#‰*IÅñ¿ß¹¤äÈrÖ§¡­Sšäý8÷ÜÛogêãπ¦CŔägý¨oþv6GCŠgqÔ§œãþa•ÑýY{ÝÉ(×gýîdM)îÇьïÎgѼ^ùÝÖ:§a<>Þĸ;‰§ð‡»ñ<šÔ+·µÆÝÁäp–wÛkìÙo°Ä»ÈŽF£>dz)>‡øg$­ýÆ`8A°a„(Fc„9@0 ïëeÉ{óã½Ã{Óy4z¹w½<{û~Lƒ-×(A<›Ò2õÈ÷i™ôîä³£d+Š$·•ôãò+Îëó=Úió¸1º*é]ØjLõ(S…$Uøko2½Ù?deâ”Æ—¹Šôçpirð9ŒQºeÚk¦Û‹cã}:œ”%üåø +‘KÒkÿÿTçþw’pýªU¡ŠMĖZ÷ÿÒå•u$2«i+žBž¥0°ä¤éf,‹ÄìKG¥°1¦ö8²2tœ]øœöÀööòä BÃ}xXkC{]ª¬4HC“¨KáT"œ¬ãpé v9Ï»%}º½é&ó^"Ëö$Ҕz°›ëT­÷?’è&Ò$€€Í¢øŸëwbž«ˆùÇõíÍ þ9<†¯U˜åVÚP9η4*fO¢Hi%’G®.o¢ gt–1t÷"_ Ú©,#áœÌQ'àÅ'D☋ðï#쫵m98nّ"ÙÖC„>°¶~AàÊI¹ØÓN>pݘº‰ÀÔLpͅÓے{ƒt…»È½ÅnLcOäºØ¼A—W8\§ž$óB­}h>,›¯Òšlh&¨C)“>çÖe×>P´Ómh¥6ÖH1y; ‡{qÀÂ7·ª\_Iúïþ?åÏOß¡ +¬¢[·:½ ÝV¡<;è‚bb¤U"SÆ:p"Åè,Ó»†/u&ò$œ·eÉ% Ÿ²9¾®“%0ÕÒF´ä”‚s’ +— ­ J”ë,Ç(Y´ß—w÷” +'V°5Åç¬Hý +›îøl! Vl nÖu ~#­Æe ɧB‚6þ6)fÙÞËO’)è×ž•Ü ¸ÊB+›  ڕQnÿC¨Àœx$øµ¸Ä[äÕ:Øg»_ C;ìã´é(÷ø4ŠYÌ¢ØS)u™É ½Â>¢ZFn„I9_ ä~óNÞ ü•Ê C™qUÉ'5P>uß Ô(hˆ•ß]N¬à†X@Jæ+”°Exíجë¤KiÐ3nsõŒ¨QêÐh,º²ñÚ¼gK1‚*è‰FZbtóJº”á•L”Iªe+P†I(¾U +{/çÞ8§9|$¨)CÅÃkóÊ# |›T·:“öBv§\²EœÈö<ŒEtõšñBrðº@ƒR¦ÜSëíMÑPxÎÞås­u‡¶ +†#ºf±Y‹*sèǗŒ€çQxAέcQ·UYjsҊÒ]øxﱸ[þ¾xxN·º…F)3ð*ÙSCv˕@ÑÎ̟k„ «y¶~Àè¾Â–õ¡®Mî;Ǔ§±üÖæÒ+„ ëdiC°©ç»8ÈԐ|ñ˜š56uAx–9`éƒÓA†ùÑgB66j +ŸªÈ!á:̦  h(°|NdéÇ4”ÜӐžß‡AM+6ҜÓÚ蜑1zׂbࠑe&XpWû)¼…+ °nÁèÄi¼ªŸ$º$¾ÑyYáé±ç´XÜ`xY¨Äh«×Ž‚C†§ +«3‰y¦Ì*è”õíûWéËvfB¤€ãI™hì eô®îñ_‚¨5skKn*cà”ßÍûÃe4È¿Å,¤ô/c¤W/ÌÐXhS¦ñºÒçB=¿ yÀ +ÍY›Z~á£FmÉOˆ¡¦‡GG@Ì}}Ћuˆ|³;|bäzx@„éqª½ÚkYLc¤É³UH9ÄpÁQƒŠ,þ>$FtódX¼à´s…ªù !“ƒ²V™´{´C^çv"eQ÷dU®2J†!Xg<>7QÕueñ=­2Ïn8¼ÓU–ú!෗͖C èÌê‘}€_ùú³ÅÓðÂ]-®¯è“Ñ_A]>/XObject<<>>>>/Annots 601 0 R>>endobj +1255 0 obj<>stream +x}VMoã6½ûWÌÑù3þ(ÐC²Þšlºñ"=ôBK´ÅDjEÊNúëû†”mFÅ’P$gÞ̼yý1ð3¦Å„¦sJËÞ(áËù××ß{‹U2¦ùlžÌ¨¤ñd„¿aUÐs/^cw¶H®£Ýé|žŒh:Y%sܝM¦°V|^h:v'|1,x+ZâÞ4YD{Ѳ¤å8YE{ÑhÆ3ø½½Ýô†w3|¦ÍAϗ Úd>ÖmÒ¾h\.µS©pÊhªåFZGΐ ¥3s´ô¸!+냬IiÂq²¢”tï$ltluM¦>_Z-ÛK¿l¾÷Ft5ž&xîMSdIûqÂyÀǧB ++á}'ðÍNà} T‰ +w0­4~—(° +²ïÖÉ҃mœáTòj¯éÛãý_Ô¨ agÏÿ8ӁŸ†Ø ÖöFmšÊ&´É•¥Ôd’ðW„*ĶÀBS&²0U‰ Ò¶:Í¥%£rˆ JÃ{ƒŽÓmã訊‚¶|â 3¡–! g;ÖÝMÔ6Evډ½ä[™}U0$˜J‚¾A»¨£èõ¾uëÛ¶ +ƒOl“IÙú+„uçæB ²š»ù;医 +HTZkv®ãü\\_‘T ‡Á0Z7ˆ ífvQç^ÀËÿç/T!$ø$£ýåæÈ9xÀž½H!JÖ Ÿ¼6i\Íá- +ïE‚E-ʺy–Ö +ԆùvIi`KÓÀ‡ˆ4qÆLÅþ;ž/Ñ1ºÆC`+Ԁ9wÙ?SÒvvÁÜ)Íj +‡¨=î¶Õñâ_rã{ðÚ;BÌ78ï24y뛙 ò_èñ}¼–ûgNÄA{é˜KÒk5©ŒØî4Ââ)a›4¼kÏ>߯ƒ½BA9Ì®“:ðhïEÿb} ×{n‡I—&tÝv<bG^͑-HU@ŠÐ!îòÍIA-ÛÜí×Ô¬`œ™Žï’ ÕžBóÁAWy°‘¨ªBaÊðÔÈdBЏ„WÒ}†sôM«·vŒ¦Ì™Wž>ϱ?º—(+‹l°ñavzc€qà­ÊmEútŽ0ˎÌPÑV¨+éQe6 R¼2]ÄÇ*CÝxU4Øáw@ò׊£ÔUÍC,ÊÍMå³Â»éy¤ïæç'ÑÕéòøeóùW¾+åS(•êþGù3“6~ðÑÂ;UƒOU³¯òK½_äÁíÅ?JKúCéæíÅÔEv¢¤jEäÚøÞA ¤¯ïÐáݲ…=ž/’ÑrJÓÕÏ=<¡žonoè©6ß!Õ´nÁùÁÈ!].\-F+ÞO\Nìé 4á¼ö“Õ×k¶˜%‹ùF˜ŸØÊçMïÏÞ¿ øš¡endstream +endobj +1256 0 obj<>/XObject<<>>>>>>endobj +1257 0 obj<>stream x+ä2T0BCs#c3…ä\.§.}7K#…4 Œ™¹…BHŠ‚žP$YÃÓÓSOÁ¿ $3?/1G!9?/-3½´(Ä× ÉjµP04„hՅè%¤ÅÄÜDÏÜÌhWHŠ†™!È×®@.08)¡endstream endobj -1506 0 obj<>/XObject<<>>>>/Annots 733 0 R>>endobj -1507 0 obj<>stream -xZKsÛȼëWÌ!ç`šx$~¬³®²µÊJ§*•DB"b`вþ}º¿0 Š»ÙÚ*¹Zïý˜´ÿ½ŠÜÿEn»$s›ÃÕ|6ÇoÆ¿þí*Jf+·Xg³¹;¸Œÿx°w·Wn•ÌRá\g³…ŠÁfë‰ZÅ`×óÙRe\OÍ.VTµŠáôÁ­Sºd€îzÆ2p«Œœra2Éf±ŠÁ¦K3Š*»X0a v¹b0Œ`’ùl-¬b°‹õÄåh¾`¬ BÍшPϦ "l4GÔ CÂÂË­—ÔlHØ(³,2ňÈYŸÆy"i4@Χ±ç¢ÄGR1Œ¦Ù,q‹À -‹¡L‡×,A`3،iYÅ`3-¬àƒK¢xjwNœ¢ç,Éq»Y¢Ógö¢°‚és„4 -+^Å1ò)¬·»\Zù"oǐØØeL¯+vWkäYX¯9K}éLjÈ4 †ì"¥Ïõ²‹¹5F³ÕSCÞ«€™ ËU`½l²´¾‰ÐlK—òv¦,›:°ÖriÌqÆäš^”A¸„r¤bª]1 vEׄŒÍ9¹UÌò±©„ vOYÁ`A¤²‚ѐóùÄgÅ`±`W1XÌ5cŒWñÁ~¯vù܀Áb¯¨f_‚(²~\.X,@¤1ZÑèH* µ0XÁ`1(_`#QXbªY1Ø$bùFYÅ`Ó;AXÁ,Á’ÁYÁH#Š©vƒÅa¡)‹©Dˍš³«‰W‘ÍH²æL"Ø ŠHäç+`° w °‚ÁâÔ˔Ì<¯¯È -fž#øXÅ`1bê•b°¨Xª²‚™IÖ(hîã]qË0^p‰!oÀ`3‹>°‚Á.¹¡EV0¼ÂðÂî(«˜ñ®QaƒÅ)6‘ vÁcWdƒÅ ¹ -v#ègäydƒÅ5C½R ÷+õªÏ$.¼ÜD)/9‰!ˤ`°èØ ¬`°ð½XÁˆÈgrdƒ]¦ô9°‚á3.,ÈÆÈÚJIðӎÖÈHCæ2[’rsNðäö—¼ÀÁ[ôA/E)#5dJ#RTXÁ`—sXÁ̯˜Â -F0#ªY1Xtî„ w(tÔh×g)á ‚`¹”ŒG \µéIÅ`q{TQÅ`W+f8È -†K¸7Âá‘U £¦vûpT3Ã0[ÂR1jVÌà©ì*‹cgÐÄdøDáôá.±[Ab€œ@$ÑJ7r™DÞa‚ b°p=1Š*ëXÁLqÂÙ¬`°ðI ¬`$G³z¥¬]'‚¬O†«À·ˆÐ1=áåጤb¸„¶D~GÖÔÆð‹ãjj=ÕœWHÅP‹wÁ›‘z(ª˜FyïV°ÏÃBY;/ã%e¨9ÆÍ#¯9`°x*QÖËÚ;,XlÛ&“³g²‚awÎ=XŸ -¤ÝŽ­9…X„•읂âÀÂɃMTXÁt™»QXÁp -ë -ᎲÞ)Üì˜óßؐÅ#˜fy +¬½à -+,Þ'àTÐ,˜bV1X8«vƒÅ] šcÜñƀڏ¬Íd§‡ϐ„;°>¼À -à ¬wõáVðîÈöáö²1^¦ÖH }¤WŠ./p -F¸¸t¢OFYûã';‹i4@½1™œûÀ D¨v ¤b°xcCþGµŠÁ¢ùàn`3S—ƒµ7á «˜¡®'v}eñÞc'ß c Õ>þx—Puäw$ƒõ³4²¦6ÂñcC‹»×½Ld #Øǚ -ëE—ý'¾åG(iº<„`Ê$R1X;ƒ…Œ$Í#º4*F¦W¨‰ÿò€keÒxÀ·1TÜ?h\€0‰õ ©˜ñÝ"ˆ*kV0ÜE/ þѬb°1uJ1XÜnC‹Ídƒ…õÊ;‰©´%´ †(ê/¾Q2|Îà]Ä#c-‡6Jȇ'2@N ¦†Ó&œy0ï¿U؝ 2d‚$힉áãXäAð· s5åí߀qBÎî܁³ÃŸ#콍›9& kÂ& \€ÔÉ×ýÀˆœb‘$.c9óžü@'ö->þñúá}!84{$\€ô“±¹a³†ÏƒNô“;(p‚C£ã‹á ç+ŸöoÛÔՃW|9%¸È]–§å?!^–®Ú¹Üì.hx}–VطܙÃ>wè;tÏÖʁ<¾¬êw!‹Xá¾ã®‹îݧ_n½Þ÷h´‚OK¡d8Düß¿üüËíÝ­{(÷ƒÓ^Ÿ+B>\ߺÏuýít¼di1s_?Mž8OTü\?¹ûíÈæ|8U6¡­Ë«­ÛÂDm‹ã¾~vmg=O¿aCrFѓ)›xê,<‘l¶ÅæԔݳ«ìى16NùÈþõËàCÞÅa_´œä~Žü9«(Ž¡™û­-ÔÔõCUs Å©ÛaNË ¦cÒM¿ÎҊð5ÿ6ØÏÝ¡8Ü gj$ -¨Ùև¼´½v7ʈ1 éÿ9tVf6{$¹b§UdÐןþénŠæP¶|Ƚ+;ŸÔaÓÀ×·› SÈ}ÕÔ{÷¹ì'|b J˜¹”Å›•Æ­ ÌÄq4ÁIᯑT7ID™ïëGóR3ï4´Ów¨·®éƒËy_ïv—7/æ·×àÆÕOVû®|Ñ÷ø~|þhã¶eSlººyvÁ‹I¦(ÂÿHý!™bÁy‰Ñuž={^ö~½-žmÀÌù?ðhš5ԞgG“ÛTús‚)Ç,bþšmŸ´Mƒc²p‡¼ýÆSG¾ó•€«ÑŸSgλ®)ïO¦öx„ï/;Yz›±Ý¼ýâ8®[´–Ý:(pÌÎòý3¬òG,Øé0¾(„K~üكÐ{Š?ÄÎÛÉx¿|ýC÷wýÀŽo÷ãY1-÷/Î"–»/妩Ûú¡CÙCpÖ)·ÏmW\×èÊêwNq;">Uõ7 «Ídòøšïºî -#_㪷ôôMƒíGonOÇcÝt/²f͋n™\³´¬m'¸ ÃrÿžýD[ÿ:Òê_þÍ'‹’ºPþÛ¢³ç>4%ÖikåÿéRdý@Ù }HYd·ÙÝçÍcáªÓ°gÍèï"o·[ª¿Æ±¤Ðð÷2·]¤ ïæëyÐ2ÆQZË»ènPKû›x³‹Àþ¤„ëÞyZS¼,³î¹ ³˜v~º»úûÕÿái -endstream -endobj -1508 0 obj<>/XObject<<>>>>/Annots 785 0 R>>endobj -1509 0 obj<>stream -x…YÙrÛF}×WôÛÌT`ìËSJ–ÆMYŽ"Ñå¼B D!!¥øïsÎm}¹ŒR®’||p÷¥ðññ'0Yh¢ÔT› ßóñ/ó‡ÏIîù&ÍSüܘ,ó¢ ¬Íã`8sApHj¼1Az± ü²YèåЄùŒ¨Xc°QN³ò¬° -ƒÍ#èP¬Õœ^JÍqì&$² -ƒÍr<¥X…7& |/S¬Æ`“äPÖڍSÄ Íaà%&d#rlꐰ -ƒ-Fäd­æ(BŽf͂”æ=›%¬—c†Ï~LŸgÖ7DÁ©ØOX"A¢ØšõS[¢”O¥‚›‘Msy…±HX…¡9g£(Va8ù‡²b7Éý)‘l ‹l¸CsšÀ;Å* 6c(VazŦV¬Â,>©XëUÊH ±ø‰ ñJa°q†U¬Â´{Ä*̱%¬ÆÌUˆ–T¬Â`áρ]ësÛú¢²¨‘ ›I‡é3E± -ƒM²CY…QN¯œfk7ömçX»‚”Ý=kí8VahFÅà³cf8 ŠµvÃÌödÈfOY»SsÄx«0«Q³c­æ ¶=çøÍ -3{Ò±VÖ¦ñMØς¬WÓ+ZP,w[Œôr@±B“ PRÁÁ´Dš£D e²]ÑÊÐ"H…ÄÊá‚Ì™”X9á ⇚™Ô˜¾²«0ØÂ?P¬1ò+ ßÉj 6ád:6,H’7³„, Ã -9Ì$„Rë5†»iz Vc°9ÇNÉ*Ìf éîlVc°XoÚ®Æ URìd[²²¯cìî BÊ(ÀU5¤+pؖ\#±ZØH Ü0•|!ˆ¡Ù#’3K ÆщÚS<*¸ ÁF1Â"‘U,œO+±DH$Ëœç¡⒃t‰êH©–+Ó¥…¶˜³h‘¸¤0dqu€YyVX…Y8ݱ³pÜyŽR! Í(:XA6ƒ•SJ± -ƒEÑ -k#Š§«Râ#²HhV^á†xgVcë3r5³“ÏátU -yu‰‰f…áUÌ"+Va°¸ -šU˜I=f…ᶻ¯em¼Át‘BP#A6“Ó®CdmSùÓM)³‚DTaˆÚ9VaºÌ9Vœ -±Ôd¼ä2d‘h¶l¶¿*%p9¤Øtº*EÒ -Vaä#‘ŠU¬\+á†è¹râ4,ЗDTlIh— ‹%Y«/”aÇJåýÚr -N+Õq²R÷rÜ2T´8‹°Ä-ƒõ”Ê ;oØÚ²)p8&Òè©"¡[vw^ €Jqšî!€s#R¤ÆL^Fµ³¨Æ`¥xŠU]¥H¼c5‹¥YÉmÙ#wච谂0Šõ¤IépBµ³¨Æt˜)T¬Âp 9Ԛ5f8j%+>ŠÛS½¹}qXêm!^ñ"¦{æ„C‡B‘6 ¸°Íõæ-R×;š.9å0Crž/Qâ 8äàÌ¢ùx×wœ‚̬83 jÌÜqy;Q‘±b5‹¸´¬Æ`eå8Ío°1íj Ñé€lñÞ%ç¹ø$€‰Q¸ã\ÀLáUU.wx#óI­ƒHz:Tœƒà†’k8†8X}xÓãß©Ñ!¡çðÖ¾§´ -ù.=‰QÿÁá`-ç òésãÍr -‚ÝMéTr‰×Õ½=‘gì ÅIprO°!$¼JÛ%É&m»ùÌ9.ec:ÎApoŽ³ØtÁ€—"< õq!2í8{ŠØO-Alh+7CÚãÁ6s>aسxƍ_Y2³XÊgß,ª"ÄÈ3‹—ÚÜn¶}ӎƒYtÝz¨Ç-~»€À%2„ˆ}2ðÌ÷—r4Í0?ÿ¼ô =sÝ×åØ´+sO½uonúæ¿îËê÷rU”;;öe¨{ˆœ{2ž¼n‡±\¯a¨kÍõº©[qüòÈs<}Ӕ«¶±{B#°Ûvì»å®¢ªS‹hn訟v«c’\!˜mß=­ë͙`$±’¬éÙÁ,;sk^Ê×ú\ÎpÀyæ±%e»­µP•[S¶K ŒÍÆY[‰gþ×=á‰vü·i;ÓíÆíNRq˜b¼Ñé'‡±/ÛUýÎã™gÊ7sß ãcÕ7Ûq -}y.E¹g®–¯e[ÕK[u¤êÜs”ÖåÚ,÷ùäC—øÒèº =ÖÕ®oÆf]¿ÖëÓºá||¿j؝ž¹ëúÚTÝf»®Ç‰‚íÒ=#_'&[ÙúÖ6Ï úÒ­ºv0OõøV×­ùÞ´Ëîm0_R¡o_o5»½æ $c:è3\"Ÿ'æ¼²]ªkƒuü~4ØÓôMâîµADg,á¤ìWõh¾ ö‘ãÈÐoÿíÞöîšï]ÿû9Uøöƒ,6Uß ÝóˆÂm:$¶Qår{ù;éI\ÐÏ×rS£ŽýkSá÷[3V/ÇýÀ'Øý“Ub–ÌÕn|A7•ê;Ìäút[P  ¶^òÿ¹ï04·7æj½î¬è9Kh«‡zØ­G¸]½Líyœ;Tú¾†å“¹ûñø˳EþÙ{=‹W7Ï|Ü5ëå>Wºgq$ŠÉÌôÀ!Ê~“¡Ø®KžbÀì[×/Óõ¦n«þÇvÄxíÿù¸j¸ùxæó´Û®½¬ºõnӚe9–æ¹ï6íbF¶E£ÄBš¢üõîÿƘ¿#neŒ'Ö©zì±Ç±Ãñ¶2åæ©üÇ ùáNz ­\UÝ®ÅqÙ>wýÆösÓ¢_͗›«{I}]AþÇI?té~×o»AÌê¤âºðþ¢À§7øµÛn»ž‰SœÁº?i“‚É}¬^êM)SôPÛ£txi¶fì$µŸ®ù¡*3p¦ùs -é¸JøðvÐ 6ÿ"œ‰P&æçm݊ƒÕñ|†,³³ŸÁ9ßÔúáÞtäzÃÛhÎÿƒ’ûÊãÕÝÇ+®©ßcsÓU;ÎÜ<¾—>ˆóñËÌ/x¿9>þùM4KsüÈ4¢©ÿ,.~¹ø §-2Åendstream -endobj -1510 0 obj<>/XObject<<>>>>/Annots 818 0 R>>endobj -1511 0 obj<>stream -xmWÛrÓH|÷Wœ7v"4ºû1„ÀRE*,vÁ³'Ymy%;À~ývŸ‘5ãKQè´ºÏeΉgFbü1R&’Òlfqã7ӏÏïgyÅRT~nÄÄ&2#ZËbb°I¥!`°yqª ðF“Oqèì–IT!ì¼À_…r„­ajž 1Ø*Š€u¶ù¿ÜHU1]´LFÈZŠ( ȃ-Í)`-™ÒdbTŠPÍĺ”2†C¥sæ @+õpJi"ǔF¥) ƒz6ÀL¸ˆò 0Θ’×˜ 'ìÓÄ)­Ò™Bj’¨36)pð—KVO -4¦‡b-BÒ c÷ÎrB^8rî&H&h„¶‡›é…¸ûyÁyÒ ±:;œ@.I%ÑCö•›íI†JpybHõ;‚“Ù[yš½YÎ^¿+ð¼,Ÿø¹VT¥,Wúµ˲ù·UÉmÓt‡í~z»’÷}wØ ²©·õ³ÝØíþÏå÷Y,7¸=h))#YØæзûß*êÍ·z4¹|ºŠäãÛÛO2ìlÓÖkDÙïûöÛaoyêz ÕÃ¥|Éý¯z³[[Ø|x'÷[¨Gi}"¾Ôbüä®Û° -u¾A ¦Bð1 =~]>²~; ²`2t‡¾±Òt++/m-w_4>SšH> ‘nuhöm·= ë‘¿,ŽÖûÎeuýó·$‚ߘÅó§ývͶÁs͋+ ßâ¾,Xéâw»vûìŠ<7ƒ‘«wg{œŽE·Ãp°jyR®¦‡>î꾺­‹Œ.?Ø=îÖ]óãšZõ/¶iíÏËDTýѾØušÜœGHc½’WOõ+‹ö -ÿàȍ¬ì®·M½·+†8=j|¢^¤g÷£àZY$Ÿm½’¡ýÏ^¦™GòPÿ’_›ö|%P?¶è#ìÑîK!×åŸû¸ÁLiÜÓʸ ݳ¬ÙK5æÿk‹Y\·['>ë g\³îë+½5˜†¯XT+#}®ÆÁ©½[µWg§‡æ=ØM×ÿ>ÎÔeš¸‘d±î~ÊݺÖí´N| »GPmë¦èìtÑÉeØ^í%^šòð)‡µÛé×ïªñ~3)þ PñµÍ/*\U‹Û‡7·ò©ï¾Ûf/o»æÀ› >.ì ¿:)¸)ã9Ÿ?ßh~œ”E…ÿî‚,2}¿œý=û:b*endstream -endobj -1512 0 obj<>/XObject<<>>>>>>endobj -1513 0 obj<>stream -x­VÁrÛ6½û+öèÌD”Hєì›ê&ÓÌ4nÚ¨“‹/ ‰hH€%@Ûúû¼Hš’Òi;m<™Iàa÷½Ý·øó*¦þbZ%´Ì(¯¯тÒÅm´¦t½Âïÿ[I{ÿ!YǗ~Ø^ÍßßR² íXÙjMۂ€³À›üú¾“-ŋˆ>h'­pJèãgú¢taž-iéžMûÕÒ³rå›íW š%)P®?‹z'ø Ÿ¯Â ³e%üqD›ƒÔE¿(¥8î%«(ãE[CªÚ©ý‘\)é«<Ò¾Ó¹SF‹Šj™—B+[[2ûïÅ¡:CR‹]%=@!›Êk@òŽ1BÄ/C\’°ÐS¾8È8BsӂΦùÛyŒ9Ä£MeÇh`"‹<_$ø©*’/¢VZÞñgh6KúÀ¶¦ê87RQ4Äû]«—ùÏJw/´½ÿ4ÿð é<©ÖhN‚af` bÑˆøc2ç°H®³²ðZáˆK‘Ø fr‰ù“y¦] 附A ¦ *ñ |’É:O;À֙U·v`”`Lcyyä$N+ó®UîH¦a¢NÎ͍ޫ“æQi½¬”u%­£}ù}’azyÜ}ƒZ‡C°²m8I]ÌDe´ÄYí“lú"Z®Ó ‹èO¯Fm6'ü?li½ÌStì˜baj•jYïØ^êÝeЀzU#ê'»"S'üp‘¦kMU ؓó€?[fQgt“À9Pa7áõk?ϒšÁj†ŽF¹ø’ûío*ŽQLÔüý÷º¾ïôAÏ Ã^AGÊ (FƒW*Ëdy•DšjþŽèmdÚ^séòyi¬³áм_3[EëžÒÇ$[ùþyEðG½<†oѧˆ#ûHÍÿ£­…óæå?ƂÒöðžußÒl‹‚!'lÉ!¯¸_u}N݉^\\F(S¶M4ƒS9UÊz{…WmŠ”YÇ6 ár6"yðÄD߆Ÿ† ¨ÿc` -Eqÿ\™\TL¿"ÿ+ôÇ̾u:¢Ü"£ iö8;uؙ—P…l«ÃÊðžÐ@JØKÓTÃ8Ba”c%ÛBX5ÔÛ_2uM¨SôcӚ'L3ðÄvÂp¦Fä_¥CŒVAÛðD+ù©Ø”G«ÀÊ0Ìɵ˜iA·8b˜ª;%Núž”89—vŸE“9Š›B‰Áåyv”vmòœÝ¸÷ž!ò·«þ¸¹žqÛ8©D Ûotu¤eB;…d`•Ô‡ñÖ1NpTçèŽ '… j{A#àÞt-=^§o0–rUsÚ;ì =@Ø°;B¯*<^#ÄF¶Êo| “/-.±(îÅÆ9§òZú²´‡Éë¤Eܧ±â‚1—+*ÔA9*qw8 ø¬$¬œDã¢C³áNx·–w q'wËôî&; ÷ -á8ŠÏ“²Ý·"—Twè¸R`žð0™ê³±ÖäÊSÄ?4ùÌEjq¤:£Ñø±8)Ú`ÁIéÒÖoB¯<ü‚樼ëÛR5ÀpÏRb¾éɎ@ÝôÔ·èߊl—#kÕÁߐzÃ_ŸÜ-ý0û·wÛ×ÛbºJ£U¶Ó=»a2ßm¯~½úeù}endstream -endobj -1514 0 obj<>/XObject<<>>>>>>endobj -1515 0 obj<>stream -xWÛnÛ8}ÏW ڇuX¾Ä°ÝîSÚlÛn¶u±/y¡%Êb#‘.IÅñßïR’eÅÅn/h*‘s;gΌ~^ÍhŠß3ZÍéfIiu5M¦´˜Í“9-Ö+ü<Ç_+)/æ«E²¼ôb6_¿|ñ~s5ù¸ ÙŒ69œ,×+ÚdÓ)mґ€Ya·Ê {$c)S.µÒ+£ùÒ¤…¯­Lè֓/$UÆyÚ -§R*å“,I”%iéÆ>RjªªÖ*|ߑÒѾ©¤Ú)½{³ùq5¥ñì‰m²ÑçÛ$²ÌJÇ/ú¦4NöžâvU³?I»ÒláêH°ÿ³–×$tF;©¥ O­¬„‚Ë\=ˌr$"ôqàn/¬Wi] -‹¼¼´9âºI °Ó•ÔžLŽ›ôé¾ Œª„“Ú¡þÖT$ºt+¡ÅN†k{iÝ^¦^=Édàö³A‰}«F˾叐YtŽ¨a£Ÿ|Bá|SŸ®ŒÁÞªŠÑ9EÉi(7p¬€N·‚§ƒ\p -ˆk«áó¡Û¯÷x¶/môóe²`Œþ)¤FʵCp\U87)£ƒÐLt ó¾@ý LZT.-Rˆ!oRS’ªöe(Y࡬`×0ò*_{ÕÚТ’¯8€W0þ â®)Ÿ9Ç ‰ „ ÁD€Ôq:5Ú[S–8¿=r\ƒŠm>ÜOPTËÕ®¶1Äæ¨UJ—ÐañÄw'Ѷ¡³FéÓ ’9µÜˆ3ò®N‹pób‰9ÛžLC~’Iç:ítâ,ÂCà’IиB³L,qŠŽÀ@:ùʸÂ?àã ÒU¯òP‰>óZïЄDáÚfÀœóh=tÀ¸ÍK_…:Dyo#бAáZ œn­Y*¢± -þX%}a£„H}¿»§‡ÑwæܝðbgEE­á‡7Œ5ú‘s¶ZSŒ>ˆÝEÊ¿€oiP›®}Ü…Þ ÒÊÍ6f¿¹~-ú҈[Ï8‹&ú€ãªBa™‡{ƒ¤pò¹¢]gw -uЍ umʺÆзm›çïÎÿD -†f¥½HPÔ%Íð \· -}ÏL†Jó½˜Ð8ÑåK] (Kôñ©´Cön+;ý_­¤ÈM­³@kàр÷]«çɟJ×ÏÔô!Ý’pDbÄñðuUWQ˚œisØA-øæ9ô–½ž`™A«éP(ÔV–’5Çb§ô¯<·òÇpqÆ,…,÷A3¹Ò0Ö՞XÃäg“ÀD‹ÝÅ#C>«0рCýÂÌ£F{cK]0±•˜Òœë“P¥Ø–q^M>¾¥ŸW„ñÍ,jÿlš`Ixǵ¨tQx–ʈþiÅÏyŝÒö²,ã,æSª­÷Ž`÷·s‡iN·JhxÀ3W:,Ú -C K£wî¦ Wɚ÷*Dò0_®š$Ú(ÃËni=Œä¹YðÈqW˜ºÄÔ@_Ö/°H€™G萰i 8ðœôöˆE†ƒlæšûg-J•+™ ˆÒͱ@P rp±¦ç¹´kÓ/ÓyY»¾ÉW :ÝÅz~a‚}“ö ûKÌ´ǐ¦{ŒÊ†­L«"/FH«RÞ -íb§¢ÕÌc½¿DžZލ±¼ÎÞÒxÁË-@ 仹L>®]zí u#õºYÜ;Ô"æ1ÊÝmQ•DègMT=Æî¢GÁTì ]¬OžcݓYBŸÂj1s©U#ƒe‚e ¯Ír»ÃØ ¯“›a³°ç°}eÁôã¸gˆå¼­SÞÙ1øC[±2¿mZ{¾ˆ­Mͯè2¬-×[¥;’N“5ƒÐ«êÒ+ÌÔH˶”\ï€ʉUÊÓN-èË©cÚ]3¡ûR -¬ÑV演±èგ¶ÇFMlø_^[œÀ7‰ÄØ*]˜<¿ªÅe®hç Ôiq -_NRu†‡@y_ˆp\‹ú«`ô€W³¦÷1Ý·?Àâ(@ûU$†ÛnŽÔþ«×‘Œ/Bh–3¼^G ÖΖøˆ\ßÐrÕlõßn?¿¿å•*xgҚ7¡0hù渽0^MÁœ¦1 †ÝÀ‡ø]-×Qj—K~ôÇæêï«%¹@endstream -endobj -1516 0 obj<>/XObject<<>>>>>>endobj -1517 0 obj<>stream -xWïS7ýÎ_±ã|(LÁ¿ 6ɤ4¤Lc ±3ùÂLG¾“m…³tH:Œÿû¾•N¶¹ÆmSûNÚ}ûv÷­ôxУ.~{4ìÓ進åA·Ý¥Ó^·Ý§³ó!>÷ñg%Í.'«.½¦É ;çøVw»4É©þyE7b)i,í“Êð¥|¶ Ì虚WVxe4ÍT!ÛG“¯]:§sÚ÷{íÁîóR8·Êß$7°¸,…ßg„. -/­†»'IR{«¤£™±Ì›“¨ü/T! +ßì5öÒwô‚p¤•£"%­”ž*ï±á"7«ÿˆ~nMUn×¾ µÉËÂ8ïv3·V®Ý4¯öÒÃÖHs­t¦¨Bºþ‘›—þ£wxĀœiC*§|ZDZ¡k:-ýÊ؇MPLñÆnQ“‰dÚÍ -ÞÞ= ”Öx“™"mÙøسޖÙÇÿnßÅòOæ_âé\Q¯Û褪üvv*ëä1I~13BDNÒRf tK‡Œã7מÜÂTENSIÚx™GǕFÁ Õy -¸¤ó%‹9 W¨!ìqh¯cš¼»ë\ߥÅØ05ª}UX4àÔ«ÑbËJ×½‰=ÎU°ŸVgª3äJ)”ž“ÑŚVhg¸É…]7£{a=¯…-è ÅÂBÔo³º9±œ -ZG•®žÉUei¬z!Ÿ½Ô¼´›@z莚[rQޔžYá¼­2_YوÉñ>d¬ƳB!vEÁ,‰i!Ù´™z¡ônÛ!Âј¾@TÌÊэô—×·ãМ H½Èsԃ“®MÓð:gk~Á½SéŒûX <Ö4Áj)ó`Xϐ70rS¥=©Í«ÉKÅQçT] %W¯ÐëÝ¢XB+Ìt ?l‹$=çZ=&`ax3òȅ˜ÞªoÜTŒ‹8Ì!Ž~µPФ©Aç°ìÄ~IVjZ¿ K²ßЊ«×Ô֚wz%³ÿ´Ï »ãÆQåêršmԙëwãîZ@ËKŽq¨èãáa»7 “ȼ[™³¼À˜š*Êièì ¿)6¬œã¡¹>ñ9,ÀÿmVšž„U¦r“ÔûC¦:ÑPòÕ½?ŠìKjq»U¡ÐœÖ1µ’3¶Îß·q‡õ£©2.k2R»…ÍAQ ¶1-–RÄL"[äµÖ>Π|Îdf;D†n­×ÉΰR] ØVûŽã¤¢m½`ò°‹Ü,YWìYØ - يëðsÁJt÷š¾ò˜KöÏ>ƒ†Ç¢dW‰@d“Âd<óÈÅKÕdòY𤻠4}\Ž»#iîkoà Ÿ›Å\>¨V xv‚)‰ï¡^Á‘ƒÐ@Ò1¸'1•ŸDQ1ûè:èx¨8—3<>ÉÏq.]ÖãH^Ãõnµ-†0çâB#ÒÍtHT0i ôX ûÌmZçŸ2Òóë2‚l8†0ž‹ $†¹Žã«·Í!;Á‚™) -M…ÜÀ+,#èbƒq…Í|7n#®x1pá¾sÉ8é×J‘ŽýŸµz¡‰‘˜‹›¾q“H{Fï~»¾ys1zÿ¶Ûý…~—(ý¸¾£pB+­3Î;ˍ+Ê7 Ÿ²áRK«2ÕºÌø0'\Žþþè;¬ö܏BÐŽ ¨SÒþ/ê/·Ÿ~ÿðéöóÝÛޔ1ÿu„ó ¬_Z6¤­16Ùøf;¥ê¼ž½½îŠç§4žGu_Œ./èΚ¯¿p’…“D(s6~’6œ »|‘<üÎY°£çlîlxÖÎq/…©Á½Ÿüqð$»Sendstream -endobj -1518 0 obj<>/XObject<<>>>>>>endobj -1519 0 obj<>stream -x•X]sÛº}÷¯Øñ“Ó‰dÉveßÎmgìĹÕÔ_µ”Iò‘ˆ˜$”¬ß³ P’é™´7±e `wϞ=»ÐÏ£1ðL—gt>¡¬: Gtv~‰×‹+~=ïӴ”Îχýç7ó£Ó/#úæKœ4¹Â›œpÊhDóì„zÿ¾=>ÿëçǯO¿ÎÿA§?t­ÉèAUvVÆítN‹-©²¤JW í<Ù%ív~˜ÿ8Ñ`<^ÁÔ/,Œ3¶ðÙVÊÔôÉÖÁÙ²äÓNéA‡Ò®lM3íÖxôÿŸ™ó™w6S%Ý+v–nœÝø?u†æ3¦56×:ÄПµ·eçÉé— # ƒ³ G9 ä ۖ@FSm -… -‚¹™>ΨRYajíw8b‰6Žì¦¦øzRžxŒÇ¤v­‡4/Œ'þ©ip:·gl5cÐ𘂥ù§§Óéú€Ì¨`líiS [„5¹áø`+§û- ©H啩‘R§‚u´1Èh®6žj6ɎœêÖdÙõì§%Ÿf”« Êk˜DØ)ØVÞÛÌ(dcBA üTyî´÷ÃtâÙÌED0¼l ;j¬©S++•3K“IP}œ?Š—| Ó<¦ådïtü Ë× -M §jN&vÜé̺ÜSn9oÔ8»6¹îʋ»4rl¶ #´´®Š^I¶ïgôÍÔ9øŸ®Y® k 2rT‚—›qš€ØÀ̵Éø™êg·R[a“ֹ·t]“~UUÿ±/$b܅j`EÒ]#8zçm;³wA!^®»^œ±èØ'í†R/N´Õ9Úa·Ï!»£$á.ҟ@m+8Í@™z…u¥µ/mCßOÖF‘êÙï0^8«ò Ìþþ°•tÝV,‡ÅKOWM‚|¡Öoô‰!Þ'ê/¿Ck€ ŒCTz6þÙjÔª »jÖ©S%C¼ÈéÐBò®@:ßð¤D-±{l´ҷ€óö,§²Ã>§p&9ÎxLIFŽ#Ú§”yW;ó.æãu/+gÛæ5KÇ1ÕÇ° !P)ˆÇ²õ|4^„å+@²-("òfUKéñ -»ìrHUâ áa„f­3-ÂAñ‚ÎX"­>ä&ԕ=e•C@vèÐót¸ ò®6ØÃƙJ¹-ò|x~:”Yg늳)~—BÔFk7vÀQž!¨ŽºÙ·0–í^¨;º)„åj ¯fZdz›¤ã]èEcVÜ=s߂݇ìOi* ƒÚ²Ôvxö£ úÑ@?QŽzy©¹Q EÌþyý|K÷Ÿow'~ÿ !Ti¤,´ü³â¾‰7¡Ó -¦÷Í55•Ma™܍ÛÅ/]ÂèЖl#•"œ©íΊO¡6ÖG¨«,ý:»}ÿ{ïñy›ƒT²Ú·\ƒ?[ã8Šžâ7.–<+”‚>n·+ê 췚‘<@E¨ ¦œ®î²Ôlloœy$WT½”|;]¡õwÒԋ Þ«h‹”¯ÈzÔw°†ûPô œˆw3‘`ºO{nÐ9^ÀÙý 1J0ó7&96Åj{–Ò²3öý¸ôèFyLwÓºi=¶ÿÌd6`Fuû’`è:So1[ìlÝÝ}‚WwvèW̝©_º±NïŒX87¢‰PøØ QPm$[ {,؍ۯSzëõík€Lê¼íW&‚LoK•é~ªô–Õϵè$dhõpr7í1(ìƓÊ^0ûݾf…ªW8eï?*P’µØö ?à<ÐN~ƒHD@Lèí ¦A­ÃÃӟäfÞ3 &2Jó8 ñ[8%¾hîäßU6¢BÝd–õ -ív˜? KÒF‘ [¶Ò+͘_¡µÍ¤sl°ªõؔ}\ &ÒiLñ˓£`0°¦ÎŽ”È¢,À¹J|?ýò1"ò%fp>ŽÓ"îçÃq¬¤.èÏ>a8*x;ª_òˆyÔþ.|¸-zVÍüÄÅÆ¢µ,ÚåÙzŒÊ…Pg2ÊWåô©—˜4梉uj¡ÁZ‡I¼S nøÐKyéô¥Ç‡ª­¹½vÀI:¥ññÈ? Æ% Umà!cڟá*BФ—˜œyåVcCǸQ¢g;´t¶’èxX-Á^ ÉÞ–ØH-­,`¼X¢ï‡G ³BÓÏŞU7úOyŠì@…z.sÜÑ#yÝbœšg¶…¹›EEŠ¯dX¢_‡úùAҖeë ¸º‹\—R¨TÀ])v:ô€=MÒ,·š7ٓ ‰ñíâfàÞ3L¥–=Ö¥Ú"yf¨‡C -}?âä $K½C2 Ò±·Y†kÂG–©´kA,>=ã|ɉó îr½Lµt@¸!LVÈîâ92¦âP(§2ƒ.úÔAø˜4»/2s8rPi’§B mŽ¯I|£1àÒ`ϧVU¢(úâq½¸à†ãXô3U-ú#kU2ãÅ?æÏÁþj;N²r•îŒã ¾N¹:§Éä"~q1»¾¿¹¦'g%‰Ÿm†+H Óp•!t—#þNåä‹ÑÅåÅðrrÃòÉŸr;?ú÷ÑJ,ÝWendstream -endobj -1520 0 obj<>/XObject<<>>>>>>endobj -1521 0 obj<>stream -xXkoÛÊýî_1¿8€­HŽáGpQ@¶åV€­¸oƒ (VäRÚkr—w—´¬þúžÙ%-Ùí&½M;"—ó8sÎÌPŒi„¿cº8¥/ç”U×ÉÁç»+ŸQRàÎù%þ“Óh8(Ɏƣá—á鐒µ¤û‡¿}[$ *T)?%¿ã¹3Ãs'§xî(Y+çï~·®e¹¥Òd¢‘9)M ú®tn6Žæ  Gd,²/Ü 6·ytó5M¿Ïæó$M¿-’é×Ó4½}šýcú´HÓiró>†#:çK#:#f'3ºJ;jþì‘&yn¥s|Ò_ªD¶VZ’•ä*ÑdkDZ e]HúCP]3$TK[[!5Ù\Ͼ-¼Ù5†ã]•¨k¥WAI ˆ†ÝéÓó!—áhÖP³­UÖÁhž•êY~탺êÁ? ç©ûsH7¦ÞZµZ7”eé'_]]҃ʬq¦hpÛÖ½3”ø’½=܇üñ:H€ªâŸ 'ªï3årË­vç åvtSr~¥C&êÁ¼HKÉÍãçÙ#‚vÈž ˜ö¤¹ºŒ=»böåyG†yG¦Ø+ˆS 333UÝ6Ò21\Ôö[>ˆÕŸMA)B²vKnmڐHz–uCFƒw`Y®^Te ”ZF‹à·G•±ºYP³ºSÄ[¶•Tei6oeˆž Ô±€}ûÉÒ÷üìuÂ':4¢6w:Y ë6ˆ†J)¢Î\ÐYòXOƒÃekÏ`?jœ[I-­×çʔKméé¢Xx(ÀL„Z®9nÊ× ð+£ã…\JÀ–~Š#Ø»~Ç(‰F-!ŒjÖ{r»ŸÌéAh±»O‡¯é¬ÖÆ5ñ°˜¶¡Y™¢6´±Pc®›|m¤vœ˜oÜ÷>J6¸ûáãÓô''n¿=|ý%7ºè_~rt6¿¹ÿõvJ¿pØ,‡Ÿ=p=ýëlþÏÉ}2}šO’ŸE2ßþ¯gÓtôª5ڍ6ú¤¶J7žæ=Íȵuml“~Še»Nw^`lMèm's̍ ľîüéÓŽ ó”(KÊصΆÖz£mÔ¼¹;®ðm?©2ô9¤ë-4Pˆ¶lŽýcŠÉbãæ!—ÉcZ¶ Ç°³Ü¹Æ¨dHùnTœ¡Q ¹°~¨ªt^$û uùy}p>ƒÃ}† ÐV)áœÉº§E, õf-mFfªP¡öìå~ó JÊGk³ù¡å¥Å’,¸–f…ìñéEeÀx)×âÅï aR!§eæ¾Ã[ƒéQŽ†Í™³ôÂo©æ¡o0$§cR \-á× ÌÐ@”?òœDÔ>3Ž²?eü4é‘ð#¼Üˆ­ëR¢l0®Vköè© -¶D탛h÷M›µ ìßñ’­¿(‰)ô癲ð…Û²¾‡ÿÙO:a!Àáܞînޖ- ãë$.iâ½gÃ|. ÏÞÀŽ)»®åKîEÁXl<…Eþ@Z¼â–ýÖÇ(ìF– _ç7'KÁ:c¤Ž7&Žï#Q3&·(Õ¿ðP7)ÂjPnɼÜâ.ožžÒF1'쒈irÿ}ò6Ó}BÕÖ`#‘°Ñr1¾{û†+®Dƒeq@-h¶üh`^_ÁNy½ñªñѽÏÔ\YhR½ü`š!Å<÷]ˆsèåhu»,U6à՝¯Ê×°–úqNÞ€ -7£‘ß Ñ¼ñ—Š7•‚ó¶,ÐÚނ}9ïÄØI2:YØh»^£‚à¨X)‹ǻzº6cyp¹í°z–[®V«á/j8M;÷i궮‘Ušf-;ÝðªkMédƒ[]ÛJÓRèJèP©4å­’h÷.M5\»­G6¾’tH[¹Rá.Þ08ЏÞÊÑÕ߃Y$ÁÕ±ñêF3LPÔð&xU¾[°Vo7( š:« /ů%=ñ¢v±/.n×\heM[CIYIŽuHÌwÂÜ®>àRV¶y\»!ï éͲ oâÿéˆwJóÒ{Lÿ}•qØ(4' «¥ÌæЫƒjE ¼68Ѕë͈´ÿâʺù£5@Š7Ìc¾¯!Ûî(þ|wÙ½«Ï/†£Ë/øö_äG‹ÉÃõ„­ù²¦[“µŒµ7ÄϝôÇO.FxƒÍø%ÃÙÅÙðâü_Mààù??Mþ~ðoå+endstream -endobj -1522 0 obj<>/XObject<<>>>>>>endobj -1523 0 obj<>stream -x•WÛNãH}ç+J𰌉s™FÚ ™ÝHa‰gG#YZuìéÁîö¸í„üýžjÛ¹ ï2 PÒî®®:uêTùçI‡<üvhإހÂäÄkyÔïy­.õ¯†øÜÅ_&iáôzÝ·t®û­Áñ‰[ÿ¤ýÙ£kò¸cp…Á¾ç‘žSõsFAà½jMÚä"WFSnȦ2T‹ ZÊWZ‰¸€ &Ãwmôeš)+ýLáRd"ÌeÖúàÿ8ñè²ãµ®pËÎxÓ:ùK¶Çf͆ä«HÒX’ŠãÂæ™È¥%Çd”/¥•ØKmáýÔd²i:^·õ±ßD×Ct¶TÚÔñÓÙãӘÎF_>i™¯MöÂѾÐsfŠô7K£»wÇ5lóT¤©‰$‡k§º½hïÙXĄÍde¶’Ù{nèöØFjÒ"ٞ¹2†ƒkŠ,”¿`»ã°‰M(b›­öl9|ö¾342’‘#²CJ‡qɦšÖéìvüÇdúÏͽ?~šÞøã捓éÝý×шAía¤Å0}s‡5=Ìè›Ò‘Y[šúÔGWD;êr/C ”6ÑGÍó»OAðm2úA0û>óǽnŒž&ŸfA0öšï|8g¢×‘öÐ`áζ9A“Gº‰¢LZT⮖XtœÐÁDäᎦBe¶E“ƒb ù¦Ì3wX1qÁ}öèF¥™@ï+¼àÄ齐/(’) gƀdK³vý»Ç6|“z¥2£™ƒ \_¨g؈Z ª0)Ñh6G¯EéžüY(tz¶R¶]úªÕkû^éâõá¶ÌÃöVu÷¡l"C ¼¨èÐoÑh:£{W%eêÞ¦C(R1W±Ê7‡q18œ„*~+ó"eMõƒª‘o¡(皅1ägи"$ô É0<8UÝË„úg!QwìL9ºà<ûÉ †-\ê€Þz© ʖi ©Æb¥'S™ßN¾ÌŽ.žš!mRØÃT•HVɃt¢p[tC»}¸È£D -4 ˆ.UfižA¿Cp‰‚sHFF_GGwm·\4`m–ZGl'€pc´Åü‡ 502“K•ãã,/ S 4ªÄԞ𾣛C¤tp֐hwfN\T:ÁUvÿPjòŠ9S†/Ìg$ÙfÛ¡på:Ÿ†`¾+X|›—Êà-3¾”;‚jÌhææ1^2sîF°\Å:/EuçéEíæVì+ý€8m1®O)îoIå^u|l•^ügyܔ{‚óZ'tрfÊ©)#@x9öOþ:ùÁ5r¯endstream -endobj -1524 0 obj<>/XObject<<>>>>>>endobj -1525 0 obj<>stream -xX]OÛH}çW\õ‰JÁI MèJûKQ‘¶«dÕ^&ö$žbϤ›¿çÞ;ÆDª´ (Ê|ܯsνÓ_gSšà{J‹KºšSZžM’ ÍgÓdF³ëþ¾ÄO¥i# ù“Áç·«³ñý„>Òjƒ›æ×ø##Ü2™Ð*=§øµ7֓ov;WÕô'}uïW?Ï&t1$×80ا«g]aÛËËKÒûá3ãûM§ÁØÅåœÏîs Ãâe\<ïã+^='ã©Î5=|'•e•öžÜF>ùñðuI^H¡4]D{W3äáõ,¡ÏnOëÊí½±[Ú46­C”Êf”c©v”é]áäkµ.4/ðˆúçù¬k›ÉbwQ#×-U¹V¯æs‹D"¾A.kUëŒÔÚ=ë}YÒc3øB¥JscµGÕ¶Æ×È#5}Õõí÷%YUbññÜ$:ùCBŽ'd…6®"+¢§Ó«ä’=匘TS}Øi2–ÜNWŠã}|Oβ7¨k³Kè¦ðnDjè '[¿¨´¦R×¹Ëh} }nÒ ìTt8\;0_«'8½+\ÀöL#®QÆ{p%â„çÖÕR/ia´­Ç¡¤”óµÖ–¶æ¿õê=°1‚Ÿ¯îÿûËçoËՒ -瞚»£-—0±fCw@§±Ÿqç]ÑpÆ^Ðu*0ãâÎ(¬„*¯Ù4 ÍÑIÜÖõý%Uo3zÚk,á_ÉkpŸã’ÌY͹ÿ÷îû \Pe0Z'´â’ø ˆuµéÜ®¹š…KUJ¯­®GÔ؂IÔæçê`ovžv< mÇTkŸ¢÷ `áMÝÀ< hW¹g“Á)𬇠Mžùy¢.Õ•æB¤f]ÑûS§L cc¾–ö‡òè œªÑiÜÒÞ ’ØÀC– WˆÓÚ±{oj&‘î#£µÛ²wÉÝ©ôIמRe91•kD@ VuÞøpˆb ‰t염Õ7RiåPéx<¦Ä·[ß5«"û%Ú¢ €)cæuä3$:&wä6K+ Ø!ÿ`%â·Cu„^ŒàÌ10AvU`{6¬®~AúK²#cýø†VôĤC\ -ˆ=†šDæJÉ{íI`ÉUqg§å¬6ðzŒT 8ŒjA¼N‘¡ú€ÏäòÔÙºrãñª‡“–6E؂£¸@3vù2H-[•øOfòñ|ÀŠ€*ÿÄ{E -¡[›Ê•-“!ïǶÕÂI¿¤¹²[>Óg ›…Ô‚Ä" {P£™ ENJËâ@n]s~ü.w˜s$aQ ¢íº[+TŠ1Ê"ú$&§Ó‹éB‹È_C|Ëu!ÒÔµ‘ØŠú˜ØBØÊ·‡`\Õ »FˆÝ)*¬+£z?šˆ¬ÍÍ6× t³«M‰NŽüÃÐÀzé°Ãkk° -Õ.u!NÉ` $ií¡e±j`æï:€Æ“ˆ’÷/i™è"ƷЍuîe¹mY™$l¤•¥sDë†YéeøÁpÓÖG=+S¨µ)ô‚Ѫ‚ =!¡3ÚàY:‚phLljv$/‰óQæG2þ¬…q`V̹îገ" ZˆÖ1+ E ™¡P!—'ÀDÈÉø’³ãÎN¶èãδÍê33û(>!ñ–÷åùÃù8‡ôzvÿøð<ÇûY‚Ä9+Ò9¾?ýFüô§Ç®å;Hýà¡ØªU+üí1pŸ^ëRFlȓÞIãûëèïtŽ×ùõÍ?Èqyóåö†¾WŽ]ºsiS"¢ ÎE»ýb1á'ûÿÓò+÷w¯ØÙb–,æ×øXZLفO«³ÎþQü‡Âendstream -endobj -1526 0 obj<>/XObject<<>>>>/Annots 825 0 R>>endobj -1527 0 obj<>stream -xXQsÛ6~ׯØé“2cђ,KòÍô!¾Ä×ÎÄIï¬NÚ¿@$d¡&–-ë~ý}» (…ñM;M$vû}ûí"Žf4Å3ZÍéjIy5šfS¬ô?þó¯Ñl:Ϧt=_eKªh¶Xf7ÝSI£óg¼½Yã«ø-¿…!š/¯eçzÖ?ô¯®ÙFWüÅ\Ò«Å*[Ðb½â=ø¿Ñ´ÝnF—w šÍh³CÔËõŠ6…;¥M>¾ ¯Æîà)/¶ÁS¥ŽÔzMÚæͱº ZypMáIy<4ÜŽå{U–Úê'}Ùh_;‹Mª {X1¹ -ÆYª\¡Ëw›?FSšÌ®²9|Ç*{ÎTFŸ7Ÿî_fïÈ5¤Jgõÿ–—Z5ôk cŸ<í°ìMU—º…¶Ê#²oÝeô36í][´Õ8¿*Íu1ðö*ÐÁ„=!Tz¸¿¥ºqÁ宔…tX2|VÏ^܋FDøØê€<<“Æn,Ku©ðS¢E}Ê.hÛ². |oÜòóªú._þ³ÕÁgݶù€"e_‘Ó“ñ> À+$¢_„mœo¤¶ZvÝàƒíQœâcÄíόq4Guôÿ`· ô$ù}oéþírŽú×Ï?ÿóˇé±ÏVÄ*£ÍÖñçÙºƒe¾ð¦Ï±!Ǻ¼Ë;6NVٚk‰91_®ˆ½Ÿ¸*/{Òl`¥÷󹳅ɵuSå`Ä)‹%NW­Š‚±rM :ÆOg d"hߣæxyÏ,³–mY®ãF>øç_?}bö7*Gr|úº4ƒY+Éèõ’¶Xúðñžõ\Ê:©§*õdòh->èE•­æ™Ã¾-ª€f0ǑK5 Zú¤ì½²ÿ?± Ä7r;™¯³Ù M®ç¤ÿwצºiôŽÉî·_ºÂ§Q ¸¤qnˆ‚?0Ö?}ùºù< ¹ÔS¥›k”§ž€¶/&gäÏ4» ³/@.PÁ#6OWÙ« Ñ-Ð2øÝö+ZUI/–5‹ÃÜóm¨2ïËòäž#Å·C2܁ Eìc³Ž rOßåÀƒ¾šz&%É3jøˆ4î80Ԅ3§I¹÷êŠF0ïWѸºfî$ݪ@iQÔN#𹈄) ­ŒÛlJ•±-Ó O1Üä8鷈*Z¢BÐU¶Áuˆãò vƒ²)¨TÛ1ã[e’ètq![â@÷‰öAmK㑼YØô™µÖóÑІT¾‡·ÜÕÇ¡*¥Ð¯$ô{“7λ]`*ы”åè̉ pñ]BŠ3Å^Ù?ÒÌqÀ ì§Ò -4•DX¥xo£Ÿ „èß z‚.ç$+I‘” 3O]'هè› £  O@†ë,ö$ñªú#uŒ s 2$6¥Vh‡B&ÚèÊáÕ·E185—+4¢p º`Ÿ¹¾AöyNJ|–8…®€öƚ Ë£XPôä\A¦ÐŠÄD‘” Ÿpè=ôÎÑé|›ïÓ 3$ÇPÄÊe\{,€TãØ-ÝF&Õ¸6vÄê[ы4Hݼv.N‰-r¹Xà;¤5w„"ü€\¨¢4©LåGÐQ¢"ó¸Ò%WŒEp63} ‹œñònJ7qü›Ìq¢`‡2ÓQ©_âˆ6¦»<Ÿ îD³Ïm̦±k¤ým§1÷Û^ÝèAU[ÉíìÚ¹”Gï¦ËMGUN)’R:÷ÜÖý‡i¸{ˆ\-¥ËÕPîýÑC·Hå9pÄÀE·:WðÄóÍo'¨Xo^xžu³.ôÅâÖÐØ,ìöqöÃ@T3&ååݼ›sÆé®ö™? =ãï¸Ìwp„,4\c’ö'ĀJ»81ÝVÎOßì®Ôs¯•ye½äìôq¿U†= ,wɅÄ]õׇëJ'Ó ê íXû„}3©:þNþªÖ®V¯ec}­Ô«©ÚŠl[m9êÝ©.5¸‹ÖÐaoò}„m™`Ã)p“ˆ‹‰ºcŠªÊèœfnÜeXYÖ1â3¡;ü—¦V\B‰&KfÄ4² <¹w=ŽßI68É1ˆžP)!§Ê;§,¬c%Åé‘k‚ц†ûšõM:”žç{îqU-£³®kž5˜gS¶üõ„‡` q<ùǒæËÃÀ³¤ª1fHr0¼Wm #Ó5®¥É³›Ðe¬G‹-ÄU‘#þ ŋΤ€q€²#Û\ì<ë?Ž™µßy¹«¶Æv¾¸«=¾–Ôxm1…«ežeø­ã÷Øvú¦ÂÅñFW¡píâÊmº<`7ÒXÈX7¨ìaVö–ggžÚ&ޟkç½Ù\- rÊ¾Ò ‚<½áVnp—wëŽÂ³%þ-`}EËëN²Þßß¾§_÷F2úàò¶‚º‰/Žf’6LVStŒb ©_d‘¡mƒ#`ÍݵVæüxíÙóœëЬëÒqa—)…Á -.OòØoµ/´`o‹Õ"[-×ñ¸šóÒÇÍèߣÿäU°oendstream -endobj -1528 0 obj<>/XObject<<>>>>/Annots 830 0 R>>endobj -1529 0 obj<>stream -xÅWMoÛF½ûW |rƒŠ%YR -ä`ÇIk ¶ÒJFP €±"—’«ì.%ëß÷ÍîRiŠE“8ÌÝùxóæÍðûYL}üi2 á˜’ò¬õituh4àó?ZRÆpôðߟ¿ž†1ŽÅƒ1Ž”4š ¢qøVÐÜŠãA4ågC>è¾õ‡ì©íãfqvùù=Å#Zdk<ŇÔ9íÓ"¹ˆûÑUGôh$ÝÏék^¥jgèaA¨HÔv-+›'Âæª"#õVêŸÏ0Êî½ÑÞ`£‹un¨”v­RÊ«­*¶Ò®“HӜ¯R™ûE¦ŠBíòjE¡®HmpÅ=3å2JT•Q–òïªOïO#¤ _þÈ*Ñû…cvJ§†>Ð_Òðµ>õÝôô´‘I­s»Ç¡c&oœk¬…S8~þ íÍÝlþT!Ü'•=}¹ýxþ‡±ÇA¢¼?v§h'ö.ïZ -Ã|™‹r)h—žÁ7®t2î–JÐR­jÓF´ùåá0ç‘{.jY*+›Jg"/™Bƒ>KšÃÚ§ãùu©:ÿ -ºBž[yÈ>”¿i$àáŠz§}+@29Br°7!wœ*ùFªFE2øDj+ÐBU].™Yè¤Âuow°°V–Ëè£Y-M]Xî?xÔĦaÙt«û‰pý{RӎñT•Z~¯s&¿ËP.]Fx Òc•¿HUW¾èLv̌ƒéð¨“oXagÉÁ!)XÝh¹EG!Ü3e¹'OV©:•²¤ÈqÌgsª„='µè'ƒˆîÅ7' c ŒmkÆISUqôߊ¡BȨƒäoËàÿ ‚ÇÞPAè鷕Võ†õÏ©âþ’S¿7n5„m:ê½{ Q£“\øówçÍU]rUQàóŽ¥sÏÖDðㄧ@^aù¸Xg¬² 2( õû™D%˜5P à›8âÉþ¥ -òºËÁōÝ~¸Cu -/¬\ŽºaöÁ(Cç,{óÆ*)1 ðøYÁ8;nÜ³"ZpCä‡iDÞE9÷ô1nFbÓè52<{ËökpjÃrÏQÌÝTGTb…|ÀRÀVŠ uۭځò4?Ðåç$ì½I4)Aÿ=O¨M÷üõƒ|±?šƒ#ú=¯ê2{±"ù‚±`›]à*˜¿ l -Ž")õ4a?=\ߢÞ3ÝÎî¯ïÜWﱟôâxzƒi¿?âø_ ÓÓ3Ȫ¬Øfò“·æ¹_%žàM)Ö(þRò¬9j;DÈ؅Ö¬r·šÛ^J;\X½[Pɐ©“5ïFZË܂tbt»‹YKÌpÏz_¬ÈÍúØpäRÚäҗԟiVÌ ‚&è}·¯Û£åqcߏw·®ÕxÂ`cL=gƒÂ‡ÖDŸa `Ç°24'®.±wšaÞærGÉZlxöºÓ¸ÿÛìëbõò$¼í†v8îÞí‰3Œèc؈cçWî°`°wõT–¹<è±]ɘ ¡Áx -_¶ºl‰ñ pÜx6v_;_thǵDQßcº --ôy'ƒAßÉm -ºMƒáʝÁm©ªÂ -‹x;¸‡MçsÁm/È µMçùý ùyÚÇZLçâ1ÞæC¼ 9-˜_ßß\Ó­ÜÊw«7ƒÜjÆAôšã½Iï!acø‘—¦ÑdMÆS¼‡ÁÊdÈÆ?-Îþ8û¤:ƒùendstream -endobj -1530 0 obj<>/XObject<<>>>>>>endobj -1531 0 obj<>stream -xV[SÛF~çWœ>ЙH²%Ǘ´é $}6-Êd:¡ÓYKk¤DÚu´+ÿû~{‘± î%0€iÏí»œývÒ§¾û4Š)RVŸô &I8¦Áx„Ï1~N û Œž'ƒ0~îÄhòôÀ›ô$z7 ~ŸÒ’Ç#JsBâ^Òì<-JE5ׅ̩+Y­¸"–ç¥.¥ ¹ ] YUr]Š{Z²†ámÞ(ÒÒ>Sõ<̤XТ¬ø«Ó/H×£‰Ëăp€|çgg´¬8Sí-xÓ¾eõœÑÍå[úuö)QV°%‚SÅÌïR‰×£ ßCc.Œ6g(ˆg¶Ä…l¨–ZÎ5++upâó}%ç¬úóàß俸ȚÍR£/¥Ö²É½¦?øaîmų¶)õ/µŠ7Gbæ²f(½’÷Rüs¼Ÿˆ šÝRÅW¼2ÃNêÚA— Ïd]s‘óüH*©üÙ×8ê߉ûáÐÌêóô*ý0{?›ë}ÉtN"%k¾.XãRDÅHm”æõ‘œ g9IQ™)lܨv Ä6;€qDƒÅ̓ ´Á ¿£¢| —ŠX–ÉVhœ¼3ç”!“湍ÀYVؙ¿ ¦hÍ«Êü5±Í“®Ò²@ç×·ô©¹\+š¦Ql˜^ã­RðÒ=:+Ý´™nÁ;îomÙð<4á¢w“­f‚xìX ¾ “°ÒGÀoYrк{ï–ºmJL£‚ -¹*sŽÞ ̜rdË´l6¤ -ÙVùNӇ…~(E»–aù–¥¾m Hz³,3f¹d„‹„ÏMfTv FÅ`¸ïõ©`;ʟÙV`(Šæ`Ȝ©‚‚œ"ÓCtj„Pæ§ÔÔ}îàð¢} eU–ÿÛ{DWÂÈÿÆkòý¼\ÿâƒvì~ -òqöý¡ð64òhÇ!튮—èÂqö8 À5ž¥áŽZN7ë‚ rÖÚa€¹!3#opS݃kBúý‰[pËÀ¹%0íFí)°k„ßí‚U(Ø`›óU$Z¨ìÔ+ç/ß?½»û¡Ëx ÜàÿœÙÃÎ0h/›IeqÁÊ2»+Hì..ÐÞJ‘U­Â–z€‘³@7c¯:3áEÅÊyűñ¼>#—¼Ë€0´Ãb†…u:¾ÕZÀ*)8è+Ð2 ©$µäY 1·„£q.)!;cx¢; ÛsÒNPÓb`œÐåP MgéÖ0×Ö4íN±…”W/lFÐÞa¬Ç¡-ã7 •ó]_¶‹Ø¡çÓ¡y¨~äžK0o5–/vœ¾f_¹ f-ß_váN¬‹1TÒØZÇ’í2Í(Í̏\}ž­™7ÝWŸ>%‡ã]<Ù«À£ÛÚçÁËØÝ .āF“ð!à2µÝØ^[5¯çЕcÖ~2\‡òó£™:€‰Up'âW˜°4fºÓÙ4¥.÷¥»€¨œÿKÚ±Ÿ@?‡ãIBþ_>·×o.覑_°4èRf-®n†&nÐâ9N(õpûÚڗÊ¢¼7;ÀÉÁX šhÐXöå@0q£A8Ž!7Ä Ì¿®Ò“ßNþ›%8endstream -endobj -1532 0 obj<>/XObject<<>>>>/Annots 833 0 R>>endobj -1533 0 obj<>stream -x•WMoÛ8½çW rrǵ×N÷–I7@‘v·ÝC.´DGÜR¤JRñúßïR’e%)°(Ø5Ÿï½þ:™Ñÿf´šÓù’²òd:™â—îÏ׏'óåjòžïg“%•4¿XMVÍ7M÷'ýï%Ï“Yïiÿ;ž.—%~nh±¼€Ý¬NiŽÿNÒ6>8ŸÎøññƒ듷7ïi>¥õq/W´Îc¸ø%]¢ -ÒÑl6¡ow·ÓéJå½²†>¨àI˜œ~(“۝§»õ›õ?'S:›/`dt™eÒ{º²&8«é“òÁóö7[%gç‹ÉœÃ\|Wr§Ìc´šÂ<ò—è·êüzª=ÿ -Ùó8DŸ^fµSaO¹Ú>6þˆ¿ñ7_¡8ðw'w¤L4r/ʍàRÁ„“Z -/IùøHl”fk[ëzYR¦•4H>XÄ"ù¤rdDPO’º¼ qÆP“ÙyJ4Fû/¿þ„„c¶¥ÍÕvÖ&—Nï_J}Òx™Ò½³Ý‹€?¹ 3áä¶Öd,žYÊlY9‹ÎÅhAÚmtK\X(\m ‡`Í8èƒÒºqßæb7r¯ZG#[¥%ú Zrh슼T8p" ¢™0ˆ$ “º5ÍéÔF˜ØX”–;žË­¨u '¡kIMø•p¢”ŒÓ„¯yÓïøÎ4ùºª¬ éi‹†ÂÓFJCk2§-j”Â-dÚl·B{94Ú¿0 -®ž“·T -£ªZ%à?TÊG¸ÕÎ <Û½)ËX™!]"ÎA—ù„þ´»D±úø`¦­¹/…ã°™¢ n1ú &ÑꐐxÑz-Ïð5ûI;ŠX|§‹@¥eÐoê882 ÷-͕“z»grµàdÎ1ô‰à˜.,Aßðê·»+ªD(&ô£@K¸Ù¥45U¶ògu5æØ âQÊgÙõù‹³¨gPrÀø¨ˆ&2A[]¶°aó-øÚ&¯™GÇÄ¥ºŠQëJ¡SŠ Qã§Q&ò˜‹‘ªÔגHÉXœ!SA\bÂؤ_ƒŠ[%îg*ÕۛCz÷¬·q4¡«CMw4ºìmpàØKfÃßÔ.?~V¸ƒ®Œ?;zYçŠmxŽåahöóÎHç U ?/÷³V¾â¦\Ì+ A \;@¯t*1nÄ£¤KÈø¯Zz`Ž*  Øį¨‹a!uÎc|%´ƒBeš¢ª¤p¤’8Â>§·ù-P岯ccF¯hñ°+TVðqÌCÉsf($TE G/Æ'ù¢)sLtJÓ¨ ‚ƒ¨0å“n@Ì^ -oBÓÍ܉y˜³mm2"1”ôÈõ–¸Q:wð^P¥Ä,H^¬Ñ{~Œ>±Ö°‡7ƒÈ{/Aq±&&›ÝðL††Ù2˜2|¸ý|-·‘%ñC›ž¤­q8¯ØŠ‘ÆTûëHüuW ¹ÙՏûšV“AÜG9¿â2—>sªJ[`¹'•…ØÁø3gØÔ/©?йÅ˛‘­öôâãõJ±U,-ý*áýκœriÆ^ùðæH²ŸÑåJÛç+FC bö 4!ñ¹ÕÓ¶û·I²^]ˆ~¿Á,ö1æX*[»^^}Ú1}`X‡U_ O­V@0Ýoµ¡W¾Ókfot4Ì4IµFF´?%}~™Ý£–šÖ$…a*"Ç´ôÅ^Gîñ¸JíCbN8„³ÎK½¥‡QÜ?…Pq—ìå]äÊWZ@ÈÚaÀÀ«·X{#®šE$‚‹ãÀnÖSÀNÌá9²lÝÎ(ìÊ,–›X€žßˆJ†j|ýˆo+qùˆ\…Çî*Å6rmg -¶ø舱ä¤Ek_â2Ðs+ž„ÒbÃK‚nêÍakqÖ>[¹9ñ ]â‚›KSÍló8Úù.ÉF–òJ7¾¦;Àq.¶ãT›Ñ’¨ÜÔcyXÛâÆ%a›•7éYìW㯙9‡ËÁ9_¶qŸ¼úezír¼X-&«å®â0ºzÇÉ]¯Oþ:ùü -£endstream -endobj -1534 0 obj<>/XObject<<>>>>>>endobj -1535 0 obj<>stream -xXßSÛ8~ç¯ØÉ éL ¤ ½— pÃMK¹’kïŖ‰Šmù$™ûëï[Évl‡þ˜¶Œ]É«Ýo¿ývÅ¿Sšàϔ't:§(;˜Œ'4?ç4;[àùÿŒ¤Ä/Ì&§x}eaúöÝø¬¿p±<8¾žÑtJˇÌÏ´Œ L&´Œ†Ëµ„aeIät»¤h­79E:ËD“[ G•¦´Ñæ OnM÷"[ ìŽI¤©Þ ÒJÖÎãLåÊ:#œ6Tõ¬Rù(ß,¿Lèhz:>ÁÙÃH繌œ„}ÏƒAD8ž,=Ø°d´v¼­Eþ(á‰$x&]«‚tB ,[Ò9­4œ”êH¤ˆàú>,m­“iÓ;ÛÈL;I™.svÀÁ‡Ë1-׀ƒy*«T²?…0ŽÏ…#lòøz^A:¤{¥jþ·zÈ`Z•F¹-aÙ³¥ ޜ„Ï۞[" ٖÎÓTYÄΩ¼ZJ‘ZÎ$FgL¨¼Ú“¸‚¬rr¼xGSd™Ó}t:¬}:ÏÆôEɍÊ=D‡be × -i2e­Ò¹íF' 6À¬LL«Ò9ø <Þ6x îv¶]cÃêË1]¦*zbW`6-­ Þ,•’+‘êG¤ök  +±ƒ3]×¢SËsOKì ¿ooþ |©±d¾t"æ?¼éÅÜúè«/¶`ó¤Æ+êã ¥[é.n>Ý{Ëu(¬¡TFÔ³Æî|ǖ÷”]¬ y”Bõ®5ÔBÅæ“ë©ú¡Þ{'ubþΑ±´‘Q…C]dó­b™;•lù™q®ðË7e ÜKœ’Ðó鏫K@‘(™Æ -a-*¦X8±9ð…ÐBþÆW.W1âw˜^0¹#¥dË¢Ðƽ•^ŽÂ -´ÚËé0©­ô`Wùˆª¢ç«VÑ@ðú -=áÐ!»tµ8V åà -b¸Õ¹ì1jØð¼Í}¯Óí#`~p]B¼/uîŒN}P–ð¡m! Û)†X% ´)w>3&h«?¾–%투¦›Cœò '8¼@6‚Ö½Œ -ôž]å%ÊX·“0èV0HW#aÓ1]³Í»Æt³ÅIççÕÊ:W€ Տ.‹cÐ$# –wßê$ڞ1Ò:™œ#E<рU[òƒ| ãñ‹è,E=Ym+‘V¹ïwnm¤$™Ê °2Î/?„öÉ šÃnðƒ½:|9¤•r¶¶åM`[Æ®ã0ÙB<蜏?ÝZk»Y›¦ÇT¯|+%U@÷vÖäìÂ?¡‚y0‘sHèi¾uv®¶@eCn¼o-_}³÷4^´Ô©cªÃ!”–Ÿdºn[…¶+T…IÄñêa¢hNß QCò2UÐÕSõj¬KÂAÑ0íIznÖ -ª€È¤È};Ï=Þx§Œäö‰dþ…Pƒ´uƒé…h×â¹n—{nÚó ¢È´¯†õ ,àæb FçH—Æ¢iTÃî6—ý„”ãEÐÒèÕîó[ϛ ÇôQ³ºH‡›€¿m0Mcpe¤c­|ë@ˬ»ï#ô€WÂŸt²“1½oÆﻟ¶³z/ú-ÏÌáºÖÜwȆ pDä ¢W;¨`éĵD¾Ýò2ƒÖZÅ8܃„£f6ø½a¶©ÛÿøZ™&#ð0ào]Ñ»¾^OÔÜޛóÐ!sص§Z#à^ò?íe¿ÕPÑÖmÓúÒöƒˆ(B;ç+_«“|O6ŸåÁ˜G_è<ŒþÂð2j&\‡W(¿Ð¶;#T]m¿¯:œ \1tÔÐì m'¥ª;D‘6ì­LûÖÑÞԆU‰>¤_IéÒ*Çý³NÜ|Øa‡¿‘qòºXÃÊ¿ðîøØë[åF—³*»U=œUÃótŽßlœÒ|á/—÷ç/ÎéÎèohªô^G%ÏG¡ÐØÑ£zûÑbò®™ýB;[ÌƋù®Ä s6yµ<øëàUendstream -endobj -1536 0 obj<>/XObject<<>>>>>>endobj -1537 0 obj<>stream -xWÁrÛ6½û+vt’glY’eÉéÍ©ëi&ÝÖê´_ “¦õ÷y B ڗNÆFvßî¾}»úq2£)þÍh5§Ë%%åÉt2¥åòŸ‹ë>çø³’2ÿb~9›,âŸ×'w šÍhÁÖòzEë”`g:¥u2~åFÛé:—N9éˆ$)K«j™R%m©œSF;ʌ¥û5mvpZ7V+½%áHhþöæ×?ø2ýsÿå¿Þ-*M*O×ßO¦t>»œÌá~\ç¢&AZ¶”©BRb¥`_0Ü2¦”#— „ך¦Há2‘êENØÖÅÝ'š!éür°au6›\Mè›IU¶cdÞ4§ -Wkcw=T®³rLÌù|5Y²•è¾Ðéûð»Se…ð”äBoÙ/'!U®*Ä.ʟâ°ø¥(̖6æõ,J {K -•<;Ê«P¾1=|}‹{L›¦®žÐ秊/Ҟ±¤ŒÓV¨RÕ¢ö• oœ´H»LQgCœkù¤ÉÎPĔDáL„HéZZ‘tVZUç>W㸰i(ב#T -÷̌HñTU†Éèöá‘D][´žb(?£`ìH"·µx–,äIb]ûº£ÚóeWí/™GR +J ŒÔef¾Ï•҂\SUÆÖqژ[²fÿÝt™ïq<̱kÆìH#¦!ËÊßãëN& ºä ±¨UEA™PE’OžÐ¿cIG7I"£[©•LG1ÐïĶc}/ú5h”)ë%÷\1¤M¾åFvxè(šïèÓa†Ð×èÍBÁ6Jnjq(D¨4髺»³EG"3Q¨ÒZô]€+( ßʒWÖ$2mÀÂD„āL T¥ÉW¤¹–qjžN'´f‘(¥€6ù°w¦MF»S)´ªš:ÃÉ!ÎJp„ã»ØZÓT­±™#—OÀ Ú68F[4À¼ƒ@YþGÁ¤Vqå!p Uå^cç ï#Þ çÁf.Ü;”½k„†bíyKô%:€c9#Ì¡> §S&'û¡d֔¾¾ýpCœÐòN¡¢ ²^ñ]M-àiPׇ¯q•‚@1†Ê‚ËœÎÀ–Ÿª*Àz–Ï‘6½ØÜIò@}VœJå„Ðò(p„ÊzQ%xê[ ±!¢mTãÀw* Haß¿_c„”b Át”J—@Ôda${O’¢0­cà^íÒ· ۈäÙÿδ2:‘þ^.Ðdû -eٕQD^SVF#˜>7®›ÍA]GCŽzdGg4jG¾íF¯#Ú¨¯3ü¿7Ù¡Çœ÷KÀAûzÂîš$G^"\£[Y@¡YÈA8A8|•ðȇ9_çP pBmµ±xãI¶'H CXW¤Å¨‹Ãû—-A•kÖÃ>­qW€Ñû%€x…a G”ýжŽwÑ€ö;’t]Cmb}Ie&šC'Pڏ6 ì7Lc™F°æOh¿æ 9XèZ~ÍDi”‰Ê*Üè$—L“wîo‰5#‰§g? D/_!æœf@goͽ׹Cÿc,cãƒV†d؃v‹Òµ,âwXL 1f~ñ&é^•ÄP‹Tîhâ3"vä.WÛ¼ÀßaÚõ6ÌãMž$>€òǺ8HI7½ˆú5”9ZD^À}[z6U2ÁJ7HÏKLÔ ­Æ<ÍU5py¬ý¸>vÝtq×[wAÉC2dêkðц¼ëŽ+'&'†¢®ÛÈý6"˜óàÇ~|X¸>^¡ïy®{®û§kZÞ®ØÅ -™†WіŽ™!èËښѽå“Õt?Bé2½_õzkÑA”x Ý #¨ ==ž8þ,Ù¯”‡ÎìúÈÎ{gƒÅ‹»ë°MΖø‘v}IË«Å䚓÷xóíó ýiÍw¨ݚ¤)!+~Gg´çû ç«é§ÿõ“f±ZLVËkü,‚·ÕŠþ¶>ùëä'GCˆÒendstream -endobj -1538 0 obj<>/XObject<<>>>>/Annots 846 0 R>>endobj -1539 0 obj<>stream -xµXÛnÛF}÷W òb°iQR)ÐMŠ HÓ6zÌˊ\Y›\†»²­~}Ïìò¦µ#% -6–{›93ç̬¿^Ä4ÅOLéŒæ eåÅ4šâKÿëŸß/³8šR’΢•´HçøëG}äõ”,_E æfI´h<5[-¢˜–«)¾–4ŸÍ£´ñìxŒÙer<»œEsZÎRwð|µìGnïh “ ÞëÖòìx̧G³ÞªÅb孊SØèGîäÑV%sÜ;š1û*9še(â4Žfðh%퀏}½¾¸y» 8¦õx'«”Ö¹ƒyJëlò¡Ê$ ÚÙPV¨ì‹y¹þŒËvDŽ^|øã…ÿ֝2!«IÔuq »“T˦TÆ(]ú(ʍ RÔÆMÝ©{Y-Pïu÷ÝÜ5z_ß<è¦Èù‚)]Çs¸°Î'ÍÍÃÍ#ÙFՅ$#í‰*ç+zPEAÙNf_Ü ÙNTw2?ºc«\±UØ+ŒuK7Ê>ŒTåÆÞ©Y稑پQö˜R -ó%t¿(¥•MD·ÕÜÁv',=ÈFÂ8o’û"ð¡ÒÖÝ Ï/ãK½2ԟB¼¨[K¢Ð•ììccFPGí”Ë|@öÆYY%ŠâpEÿÊF{³NûŠH=õŽ¿a~I„@ - x…¢ŒÞvîJŸ4ªMäœK± »«ôŽ±:pÈcåÃË®;(»Ó†÷·›îŒáwÛiùX#—•uz5ìBÁg„‘îE±G¦øŒõ–÷I‘9ÿŸ…i«}¯ò0\™.kaÕFÈ+d®Ýµ™E¬L;N»c{µÎÑVdí6XÖ4:ßg2h þ0kŸ`Zê\m¼¨ÇoLµÑ]†tÕ2åÊÃâl鲛Qš¦± Õþ”¶uÄÑ#×¥ýàŠ¡Ÿc"vA”:>üqÀŽe¬WŠ> -穘馑¦Ö¬$-;ÚTø6+)~½¢Š#֝˜³nMF’pžªˆ ªFùè«ênpäžP;ftñ =ÀöK]]†þ¬òHtÜzÞ1O²»e}'·ÆåéG© ‹¤ù)jyâWš}(i™u•Ò¥ÞSºM§aÖЩ@•j<#ß\)ƒõ?’yH ˆWwåÛiˆç6øº‡¾@ §ò£¢­›±­+Ko]-ÎU#3«›C+®ˆC(`X9±ÆÈ%÷ÈÎ\š¬Q.>}/ÇZ"3Y[ÔNs¤t¨^Bh°ã$„Ü2H‘s± <µÍW±`ƒ‡¾¿7°t8î$ ¾mÏwD6ŒÈ3ùԛ7hÆsÁ€ëæ€ðlž@.ôÂÚr¶ öWHœ¾¯íþÂhàŽ¬? çIë»N5áõO Õ±’u]ÂwkW`ËPYÏ)Y»±#á;nx(È}K@Y9ã}å{$Q¾E‡—ªRÐ. -S&*N[ßï›4ƒ«‘*L¨ -ÆrÃî:f+?4pk/¥œ4£û] åFÉõ­è¨G…‰ŒÊtÐ{8U¹~ŽmÚ×ܦ²5p»Ýµ¦½t»ç—ƒæVª` *åsFÀ=|V{G@ªðÒe²’n–r-MuiY§øI…wøbU¶/DÓöÌè:\á -íŸï¡äû·š›:†¨§÷}¼ˆ£yó/¼ö ×7?¦ÜDphûi²üôÒ¯ÞhîýÓÁè11µÌÔVeLÖYúÅoêÚ]ˆy—2ƒ2ñkàW×Yå‚s¼0XÕÁt±ó̑Ïm~Ôvöގ -Æãæ3Ó7ڌïÕÖëU hœ¤Ñt5§$Yáÿ xJ}¼}ÿú–þjôgÀD¿él_âiå*;wÝm¸N§¯x}Gˈ޻¶›èS?† w¯¥EŠ$+<DZ;]ñ¡oÖ_üâàIendstream -endobj -1540 0 obj<>/XObject<<>>>>>>endobj -1541 0 obj<>stream -x•OÚ0Åï|ŠÑžXi PÂû©ªÚmµTía/Æ1w›ÚÎ"¾}Ÿí$ i{h…¶gÞüæóc’QŠOFù‚–kâõ$MRz‘§ÉšV›¿øA‡°°\Ü&›ñ«Ýd¾]P–Ñî€XëMN»‚'MiǧÜæÕÌ>]ï¾ORš-ÖÉ -[¦m¸ n]b´^H#¸Óæü÷Ã-íùùvÕKé3Jh¬(H*ë+Hȕ‚ŽÌ°Z8a,ÒòÆú=%v'^Ë|{Kªñe͖«¨:˒<¡w -‡wR+:IW†hÖ1U0SÐ=«÷Œ²Ĝ3r߸¾¸4†©Ùñ(ÕcL3”œ=àÄØeÉêZt‚ßÜÝÿ -I{é,=LmÃKb–®€¥©ê|õpR²¾||÷ŽÂÔÒZèµ>VT—Ю”¶Åž-“…Ï\ †= fœ)Ú£âZ*ÉžÜIéõ1£+=KYÞéÎàÊ*ýH ó§3£Ü>Âþ6^҃¯Ð—‡î” ó'¤ jm©OÔ ²+“JÀQšˆÀˆq.¬%80äÒ'% I‡VVu!.‰‚çH¬7PßòK¹àÇö{x)VŸÐ…\®Q…ªUۂÐ>Dë˜ó¸ƒWãR‹r”^"$D¬öÍòÇt¾úX=ßXÏ%dŸ6VÎK¦EÌ64 - Ī -@±µ¶¢zƞ!¿ÆÂÂ~q$Í^6ÿ†8¼óŒ6ß¾hçsJWwï¯üÉ_3;%¤|ô&`üÉÿö{Æý,A)Û·lo:k©Ȃ©õF²cGn|REw­ Æ« Âé$z 3?t˜DX&ÒµtŠì7&ÙÁ¯èÛïØbþ‡ë8–Ô "zȸnÓá<ð¡ -?Wn™ü3ßÖ֓g݌Ð`&šª€0l–JÐ]ôò5S\T¿õÓ0Ô駌…ñ¹8òçö e\=#„êÜÉð/¼NúY#‹B¨à÷ùvÓ:*[㍵YâM¶‰—ìý˯^Ò'£¿ãEBo4ojÁò·¶¯oÖ˜åé­¿úþ÷nïn't•¯’|½Á+ó[ÿ×ÛÝäóä'ú.S¿endstream -endobj -1542 0 obj<>/XObject<<>>>>>>endobj -1543 0 obj<>stream -x•W]oÛ6}ϯ¸@6ÌZù#i’ØCÛµO+Ð!Þ[€Œ–h›«DºüˆãþúKŠ–¬¨[¦ICñ~œÃs量Íi†sº^ÐÅ•ÍÙûåÙôÓZÌh¹Æ›«ëZV4+f3¬”“[±óÒÒ|QУ×j¬Òúòî3­¥J9oÕ*xY~¾Xþ}6£W‹K8™”R{+êú@Ðbƒ"ø-U)¼2š7sìùuŠýêâ²X°!‚Í ºÍJÐK{/i>o÷.®‹+ÞûŽthVÈЬéO­Éœ—£»‰Ü¼¥Û éÖÔÂ*w÷â% G{Y×ü™Ð#ž÷·¿ÑZ4 -ir¬ß•/I›=¯jõ]òÎ×ü"%ø¥›XՒޝ ¢Ï¦ -µäàÈùî—ðáä í¬yP•$02 yÁ±ê{ä%æa¥3Á–ÃÈ¥§¦&'íƒ*¥+è‹U8øg@ŠßV¡dz™dçTÉR9^Â¶à‚F8Vx˜Œs´Î퍭˜+áÅJÀøn’2Š‡1™J_N£U´™~ÊÇ4{ꊬü”T&b6H°—†‹‚bvÀÔÆ -œ¡ß -äÍÉÚó‡A^·¡Ül¹5`¦ ¬ôƒ©1’?àƒ -÷6|Rm6ª•ëÛËá¦QžìBvûQW(›,/ðY´(WE¬%®·V@Yn…V®I¡ -! -KuCÊdu°ÖÖðnIAWÒÖTñ€ÉÓꜞjR鵨uh+X Ù!!åacO@qKïPâ֚°Ù’Ñ’Ö -%’xª¥)Ø4½Ëœö(¸›ôªú^HVÊsëQºR(¤ êè¿U‰€ºjƒÆ‚L”þaСB‡³"G¢ÜYObW8¦°ûoÛ$<ÔQûpލPõSËç¤Üž9èÓ³©^hCêei‚öm¸H›S^öÂ{Õȑð'vã {réqí ^|ù;ªqËsˆ¡o;FVŽˆszšðùqŠ¦ÀcaK‹’­k§èíá׋ay?#ùëÝ ‹xQ↍²3{¯˜½VîjQÆ&Ò¤{ 7(Ã÷ƒ¨ ¾u‚\êíý@鲕l‡äÓBü‰¦+¥§(ð)ÐMó$z‚­¹‡¸·?ßÚ³j3Ü´V«Fù¼)öõÞñ²‘.w÷¬ÏhÉ ¼;]ÃäêByéŸFÌeƒ1Öφ=׸íÆF“Aԕm‹ÈãÍ×{ñÜDK#^*©»÷l¡œ \™^k µ]ñ²“̵VlÑoIlsIõöc/Ç^’-:Í'£˜Ë×­i0ŸmŒ6–Kê坅Ûâ~<ՔKÀõ½9âEê‡î=Ç­+Ñ?¢ˆ¨1¾êvx±¢R!‡Ž¼4+®´£¯q.¬ÏÄ߈—ýVJn”Rg‘uØ!ºO÷Blñ‚˸S.³»Vg¯y-æÒ6£ÖÍH}ó”ën.ùŽÁßh<àŽÓœ/Ömåã;…_ñºÿ—3äÙÚ^ìV¯9vA'”í· -Wgxˆ®’ùM÷‘vq•>ÒþçW$=çËñòú²¸¾ºÁ7+†üMœú—gœý5õ“Vendstream -endobj -1544 0 obj<>/XObject<<>>>>/Annots 849 0 R>>endobj -1545 0 obj<>stream -xÕXÛnÛF}×W PQ‹ºX¾$@¸)ÔAZ»oÚ¹7!¹ÌîR²úõ=³KŠejŠm‚¶¸œË™9gôe4§þÎéjAç—£Y„_篢%-¯¯ðóÿŒ¤”àèþ¿_-/£9],q  ùÅ,:¿ät?zó0š¾]Â=¤°y}E‰{FñØUÂÚ­6 %‰•°’>Ž_>|«ì¿:žJOý¹$G|AïöLØLڈ2e;»øÙ:mðš*I"iŽ²T[3Íu,ò©e§¦•Qá䴉e{”çg3àkŒ<û2iþÚUõoFÉóS"+Y&ª\“.»42¡Š*—…D*Â±îtmè·R=NVeýHnœ,9ôäëU  ¤µ2z£$vµ£P̍4¼YD 4|ȑSÑ;G±(i%)ÖE¥ò`ÁV2VéŽ#CBr.ZÈÓdÂœô\ 'öÐ']q¬(“%™º,ْwë… gÛêApKÕº6Í}5U¹ˆÞÂíèAÁÅ"ä³Éü¡Õ>ø‡¾…œ‘•Ò×,ÑqݕXØGü„•‹%~ß[Có‰22Æw¤Ó^¤DYgÔªæôD­Ï¯Âš,–˜jèÜï¾ÿps7™G3>À šE×þs -ÃY#rJ!ež×ÁÏy#]¦âAi9\(ßÚ@¢ ÌZ(ãV±ó dfG j <”Z¡Ì")ç¼d£ˆZ ‰£mb  -¹Jy&3”ÎCØßæ÷ )…øÌ+—Á,Ÿè4µÐ¡š÷LÚmT“ð»ßÂ(­  a(“y•Öð£“ÃÍÈ|Es,´¼ÙNÎQ9gåO·­þÄؽ9`‚Pý>G]E{$¬«ì'Ú*äÀH‘«?!”Œ.àr›K†.Š•*•žþ­Åæ,xÓ­`°•í~LB‡g{`쮌ãcƒgáŸ9W½žNý‰ÈÓd¤Ízê×kDµç2’èýU®lƝã'T‹Õ|‡š•vÖÉú#À¬Mø~àà{8^¼Z¢Å9¿»1®¸µ?Žåúuh\8%¶kOC¼è50¯¨ª¼!ñfÍæH{Ñ c˜^½ß|S&6Lá­B…ûA‰dÜ!ëw@Ü^gŒsYl`ÚtÛÿMì ݶkNÈïu³Î/ñÌõ9¾P™…]æþæîÍ }0ú¶"ºíïZüæ¤}ar5ÔŒOéòj]]^ÝxázÎv~|ý2ú ¬¶«endstream -endobj -1546 0 obj<>/XObject<<>>>>/Annots 854 0 R>>endobj -1547 0 obj<>stream -x•TMs›0¼ûW¼[™š&@ÚéÁiڞÒIkfrÉEa” -ɕD\ÿû®'Øé¥ã±Çâ}ì¾}+~Ï" -ñ‰(‹i™RÙΠ¤4Kƒ˜’<Ãÿ_éö¤¾üüü6‹ÒeP'Hi)Bz:ž$­gÓsKqx,'ÑéÑ4 ®§Ñ4 2ºJ’ Gçeg8ùÎÓ3¢Wð'ÑÉQt>‰NΈfÙIgŸ›äñÛáoŠÙåׄ¢ˆŠz¥yFEÕ«RQÎ×Ü<‹’Óã|u»~¼ ¡Èjª™!f¡^ՕNhEº¦½¨81Ã)îöÚü"Ö¹†+'JÖç8ÃêZ”ÁEñÈkŠ€ä!ËT‹jÅÁ2 ûÕ}ÖªÛÎ …³Ý%µ¯t±_ j‹†c—™]7)£’IÉ+Ò~ kÁÜ:#zî6 S­¥Ô{¡¶¾ImtK OZ-¤Pœ.wH1x(¬'ÚÑjúný°*>ŽÑ8†z€´fí†Áp±oîçðÃqrš¸bÉû¡m·Ûiã µx@èpp¿™ùb±®Y€ü©óNj÷=+ÌeXË7X…”Æ-ÏÈ a¥ÝHÌ6º“£:ÿT,KÝ)5+²ÜZ¿ã–)¶å-6J•0â=óQ¼Š×¬“Ž6¼aÏB›3P Q;;Ìée,%‡…ÿˆS—h%=,*ÄViÈÄžŒ„Pû–O@ßµƒœ sgȃðLîÙÁŽíl/¶'q† ¿ø•— <ág®JsØ9Èj-ì\YúD‡ãÀ°¹…$~°· ÞÁ­®:ɱl¦¼ÎÇÝö7£ÚòK¸p§àΘ´¼l˜¶ÅUâ|;RÛ¡´<½ó9ïn^ˆ™cgý]ƒUf¼öôÁW_~½:zëß÷ó*=dæcf”âř/)ŽúK·^ÝݬèÞè'¸nuÙywô—Ö×-Žé‹,¼þ ždI¥9^ ¸]yì[})f?fPœ¹ýendstream -endobj -1548 0 obj<>/XObject<<>>>>/Annots 861 0 R>>endobj -1549 0 obj<>stream -x­V]oÛ6}÷¯¸@æ¶bù;: içµE±ÅC1Ì{ $Úf+‘žHÙõ¿ß¹¤$;j‚!À ÅËû}νÿôbá7¦Å˜&sJ‹Þ(áKûç÷_ù Ífq4§‚¦“hZrzè] Šã8š]]Ž“(¦ébŒ'MFóöÄO¯Ï¸Î¢E-n—Ñ’¦³ÛhÌo§Kè'{uÆí2~t{¿îݬni<¢õ±ÍKZg>$|IûïöâàdIñ$¢Æ:¥w$è“JKcÍÖÑ{e]©’ÊɌV*—¯×_{#Ž§ÐÒ8[' r¥”d4=ˆ",ÀãE08œLá5„a!Žè£†¾*uÊhD§HU-:^ ­]ï冩6¶é›’Þoíæ5JsT™´p¸B[2[²ò JáÃpВ›JENG%O|½E×eª”©3¥’ÞĽ£n/UV–Ú$mKƒ¡K¤®‚ªÃþl½Îܤ0„8X1¬¤RZS•)L üFKw2å7ÄíHä¹9YÚÂÿ½ÚíeYç²±+ŽBå"Q¹rçÙÂh(ÉÂI±“$¿#ì •È(¹Ð)×Kº4¢Ô¦”¤4,Þ3‰©PíÀµ-”9Ó1z©tfÒªÚù—Q-6ž£™|E”¥F‚]ɅBà{s‚Jü³í´½ è­¾S!ҽҒ6}Cqp2ÍLAÜPR"+å¬,‚é¸ç[êg I-’\Òçûa",zóýêÁgÖ?PjôVí*N‡£“r{_ V~³× ×ùfXØlÛéÅ>™—6¢Ï:•”T*wDØvøU» QŽÈl*4%g蟊ú"9£\ۑ»Ü r”“£g©ãRHå“q_’±ªBo…§ +Ÿ¾-’ˆÃŸ¯PÕô÷~DšŠ€µÓ±§vÏõ "®_‰® •ð ·¹<Êç]öÞú‡M÷©u9¢»V; ]¥¯Áá¹eŸëås¥¿Ù&^nkñs‘˜\¥n=\FiÇÝTcÆ×ÄTÈï¢8äõ똶׊êJ´éüZiÏRß}|ojƛÏI܍µ.JHØ%(R‹FgJC~µMO7Åù²—š:ø{𑉼5J|¬ûL\ÅRÃÀRÁ&òh¸ -@ôŽª.é¥@р6øéºyÝøڐÇÁœïYÎC‚˜äÎÀrOÄQ -½cªòdúE錙ðvÆnŽG£Q×ÂYʟ˜§A5¾xÚŠªCÝ«ÍÜ©q ˜1½®›Õˆn›©2 öŠÖœ‘&~¼i:b„ù -šû+ óïÎgªÀæ‰2–4€HoéáîÓýÝ3¢ž2¢çvʌyu`SÙÖ>gç @XoéCx´¸+ß·¾Ôlµ¼€g2ap¼t/oÖã†ÛMeº˜F‹ù2@n9á`Y÷~ëý fô3endstream -endobj -1550 0 obj<>/XObject<<>>>>>>endobj -1551 0 obj<>stream -xu”AsÚ0…ïüŠ½•ÌÄ6;Ǥ)·vÚ ™^¸i‰•`ɕd<þ÷}²MÚÒ†¥Ý}ûí[~Î2Zà›Q‘ÓrM²ž-Ò­óeº¢UYà9ÇÏ1†ƒYžæ—÷ÛÙÍfEYFÛr­Ë‚¶Šg± ­œo´ÇcOžµ …ŠÉ÷õÞµ¤£6¯ž‚¥ÆjâC<6:ë^ÉW±§Þ¶Ô ®IE>èQÔ{‘^m_f Jò5ÔnÕüɳód =|":“>/XObject<<>>>>/Annots 868 0 R>>endobj -1553 0 obj<>stream -x•WÛrÚH}÷Wôƒ«W™a›KÞ'Þõ®í8T–< Ò`&‘4D#Á:_¿§çBd‚÷RI¨ ÍôåôéÓÍ·£„úø“Ðh@gCJ‹£¾èãÉîãïG£DŒè¢?C*hЋ³ð-§éQr>Äóóñ™ðÛáD$á¿…LÆâœßáÌ$|Û½ÝíŸÃ¿JÑÒ]Júgèً׳£Þ5Lôi¶DÐÃјf™‹OÒÎÕJ®kUQr.è¡Òe­ËGš6뵩ê“Ùw7ù»Ý³s<Ë:8œº)ëÊdMZkSú£ç”$áè`„qôµzÔeÉF·º^Q½RˆÙG+iÕ)Me±d½KëN”²ÖEŸt™™­¥û­ch…JW²Ô¶°¤‹u® -UÖ*c÷}ê& (œn´¤»i÷ÃÃÍ;Z(á¬NÞ½»N©”…Êh­×j~ÂI«6¥ª,2±d–!&SæO10ܸ•å,w¡ìùLež[†¨™!]™eš!’9-›Ò¡%s]?ÁÙè †O>kµ¥c€ƒt™æM¦ì+6 ®u£åP"ZšŠR™™1Ê(Ô3«€`EK+`jvXN.z“qï~ÖôAÙ4×ÀÏR³6%eªeæRè]§¡”Ý‘3ݑÌ|0ÇÑ»Ž…v/w°\Ç(áó@/jÂÕoõ2Ë<çè'ý]VÊuùði~BȊßÎ g`r²ÊQ²Uèy§RKÜF‚«º^¿êõ@ -¦ŠÖ4UªÏ£¥ªQjúóÄ"c^ÌíÞY h`™óÉð;€3銤¥i-«úI8$UÒÛ²)~7 ;ïÌONIÕ©9O•âtybLwÓ7÷¨mÚ0ÇÑ(‘¬cž…ÍJQè´2Ö,k‘š¢ç¸Pȁ.‘wá¯àV€ýlðw/næ'‡à‰Ù¿Ï ¸Ñ¦#Úõ2M•µteX"rºÕ$Cm¯n¹¶¡‡P7³ø¢ÒÚrýß(Ç1ôPlîW XÿÖ¨FH­×MîѨW•i½5Vq¯£¥]u¸A3YËTÉ:,í¬ûI\¾˜EàC±Ç -€­;‹dBÝÜl¥P°ȲPª$k -.Ѥ¦\6¬I$¦©i»Bý!3(¨¶T( ±BÇâ¹B‰fE¥©Iã/^`.|ktå’ÓÙcWÉ …Óˆ»¶5<Pötpe,L–°Ÿù^‹`ïh¿¬L±ëì *‚.9 - ‰Ûs wºŸ€ÍQs5>cDð(Ë'ÚJÈ£AQãT(ŠW6AÀï‰$ ljëï͂¬¡Ü^V÷|ÇàÂãHp˜Fyn¶ÜÅwSúã5¬Ö:Íi€ ¸âʳRùšô’žLãÒð§cÉñgÚXAþ‹ªŽ??¼Ë¢>ýá_ù‡™\)H‘ç&z°ƒb+&€ë?07ÐüÁåW4˜c*xÆî[ƒ$tÃ1fLµÑ©¢´R‹“(â=ùk7/Ñqܱ‡Ø¼ "íÓñ5ÛÄr±çRæ`¶EëcÓٙúÀv¥1DŽ`ÑÌ2뺅DzmåyZ¢-¤µ[4æ¡þd‡Ø°ÅxÂn׆Ÿ¶ÐS!àS78¢í¶­0‰¸W€ë-¢—`æ=ÒWÁw ¿ç87i‹9q—hUíŽ~ƒ"Zð/2Ä5Å{»V©^úÅ)ÚãEiŸï>ÀǤÚÕ2l Ñ[ Ú]B‰XIÿW>>٘F'Ö,.^£V¦–låøöàp ýI€…”q®|ÇëVØaИèÆ%º,tÛÙ@Œ}·¹År~Åüe‡±ýžGÉJ­>ëܐuö×¼¼Ëyé=uúW4 K]ᓧ‹³™×ÎmyüÙ%Ъô ®\þ®t(­/3þƒžÎ`“ûšç~$ü‚Ÿ¥“=.î2Žƒ¯Oü‹?[$P›wÈÇ< 9ÐÖ BË»cX«Ãã wæo錽FÚí˜ã@|Fy,úèû¡u>:£áدÚ㠎ôíìèýÑߙ ‰ºendstream -endobj -1554 0 obj<>/XObject<<>>>>/Annots 879 0 R>>endobj -1555 0 obj<>stream -xWoÛ6ý?Ÿâ6 ˆ Ԋ,Û²½`ÀÒ4ݬ™{؆eh‰±ÔJ¢JJu ìÃïIÙjês‹ØuÇûñîÝñýوBüÑ,¢qLIy!žþÜÿt6Z šŒã`B%M£Ã¢ ÕYoYÒ|úÉÞhAdƒ‚£xÄ~Œý5va0îïöÖ%E£q0ïíÎYÕxã!DGS|»•UÜ[cw£þnoÍ» ×“í­±;ç°æI´€‘Ñ<†›%MàûܯìnoÝxÌz»Q„ƒ¢ÙyzÝÂJ—ð”å싼×[–4›! Ç½ÞƆ=n¾XŸ]¼š :´~D†ãùŒÖ©MlHëdð§jÉdª-R*Uš?î©É$©?H}nȔ› QÕ#=慤F‘HSûƶPQP-´(e#µ!QaGQ¢¥hð*´<ª¢P»¼ÚZégë·g! ‘ L&´¤‡z¤DµÚÈçdT) k–=(¦¢h¥Án›d$ ×¢ÉΉ¥…Þäzo÷nl$iY"‘)íò&{r®¨k­j³‘N5ìÔ´‡ dòF><ûž%.^…´p!F„&ÿåœþ»Ó"ïxLø\R)Ë ‡ÁÛ_5"-óŠ¶Zµua˜&6…<)ïc›ê‘wÑ4²!XZ!¼øVµÔM.ÍIi­TC¹¡¼¬‹<ɛ!A¤¼°5åü„à'/Ðô£7Û¿€Ovܾ÷Ý)Ç9¼h¾(T"Š #ʍ¸ðšOY»E:Rï ¶?éÎF«‘©/¾¥¤*¸ù%%—Èf•06ü`,çÛV€ÒAËsÆ\E;I•”é‰@]r8wø "7Íy@tÉäÃ9׆ٛF–„$•¹1¹ª WC)ޝN· Î6‘ÿUC‰¨`^½·Åb…m%r™à´[.‹üT8/9ï€ -`Æ¢JUC ¯Øû–7 -Eaɏpã´£ßÿ€Î1HA‡›ç|0kíSÎ0² Z£ªÝVäÙhpÔñ©Ì€]j ’Ä1‰€wPM0Y‹B…ü ~E“wÓF,ØsZñXDEJ§x šÚ:EÕwN{bbCÕV6“'­¤#°ŽýӇgÈeZÚ2¯i%ò—WøYÂ"ˆã®ŽñìLàOŒ¸s¢š8Z¾os-K‰ÄC‡sÚŅ>/‘c@”ÊZV)"TãÐ Á9Ç­³B¦£†cd@„EA Ÿm ¡ØÐ>‰„ |ìéc²âzÆ1¦ñH²…ƒÔöVZ/^up“ G4ŒfÁ|lÙþªm2Å åN¹ ýáža<íböZٛ& ¶GFsó÷¼JAt·ö®q#øÄ-öSà<Ä6Oð”6®«YOØéa¿ÙV‡FÔõA©*pãÝ÷B×ސ9.eàQ0ƒìq ÈÍ$g|Ž{iÕ< òµª¾Dö¡Y¨-‡[Yö\D2*Д|ì0:l{Êb¤£ ô롙>9g Ú)ýÎõ#Y}ȵª,üv™D!zۂ—w€â{ÿ´\n{©jñ‚ÒzÏ^ kÿä´CIòL`d҂8÷ރ<g ªïY@KΑqt½ úÀþ`Æ>ëµʒ‰ŸöÓêÔý@/Ð'~C 8©nÁ¸‚ïZ:[iËYÝÉ¢è5˜3‡M[CLÃþ쑶Ž3JªŽÌóÊF¢®%0Ê¡ùÿí6 h8|+@kïçurÛÑsŒ \Ü`ÆI1m]+Íz%»« -%R> -ó‡›!|ö˶hò=*)rÝ+¡“ }-ià+Æ,˜Z2ügÚM -¢J¥1{Xt¡óC-v—å˜ÐÀC0“%o)ðȍDOŽõö£\œUæzv€ƒ-í¸’i\€¤ßeÈëëXõN~<mcâ­FékÐùFrán˜ñCÚZÙ?ߖÃ.7Y/ҞãNŒ…>Cþt^öfCžÿþ>Žþ˜ÇüÛ.éÛ^z?Îão¿,{{7 ;9þîÉ.¦‹ùWDÇÑÕ/˟¯Ò=QPÙUQg⟫?–_Õðúv¹:(è ÷“0 ¿*½\^…ŸH/ÕNê嵕?u¯.&¾¬×7wëÛ_ᄀû›7¿ÝÞß¼¤åÍýëÛÕ -W¹cG±>/XObject<<>>>>/Annots 884 0 R>>endobj -1557 0 obj<>stream -x¥XÛnÛF}÷W „Q‹–(Y’ûR8·"@츱‚¢hú°"WÒÖ$—á’VÔ¯ï™Ù¥L1iÑ¢0,›ÜåÎí̙C}>›Ð?ZÄ4S’Ÿ£1î?>üt6]\ESš/gќršÅ—Ñe¸Êèþ¬{Õùe4é¬â º¼œá‰ÙrÿcüVš6l†&Ó«hÑ_˜Ì'°3Ÿa%§x2bÁ¶:—X»\²)Þ(kO—9MÇ v¹]{±:»x3£É„V¾xÌ>"Žù’V©D;¦U2\í4©$±MQSãtJµ¥Ä…Njþ·Æò½Ê׊vÖՔ7øXã Êu¾Öٍly¾úæâ`nXV¦¨±ªÒÜ~­ueH™quäo&áÑ"ZrUVéðS<_Ðé#£Q_Ñ(žG3Þò~›Êés±¼…ëm⥫M–QiÓÎñÿAD*Mic2-žkÖ©©¯­ î®u¡U½cÆ4’bÀæoÒw¿GôA‡Ð띪IÁŸFn§*<rZR÷¬Ò*%[d‡g´>Pª7ªÉ|ä£8–‚Œb>%¨"Ñt° íÔ£¦ÏÖ\ øWéÏ üK©õªGƒíª@ÌÎÙÄÈæÓ@Îə¼Ì”Ù-¼èÖ²‡b5Î[T¶²¶¦OC[…2ü«ª~z~Ìþ¦²9ŽùÅ©Ý;º]Ñ,_Ä”dFuDïK]ÐàV×{[=ô|¹Õf»[£º;kÓÁ‰Á́Â^ºËÊ8À×NG[aË)Haà$—™MŽ¹ô¡ž÷ŒêÑl±§üàÎã×EQ4€…,ÕUD¿¢8ng›,E8ùd -S• ¢9wh†€|€‹Ñ‘«:Ù1ÒPƶ'Ô`E>ÚPSñˆ!j¶]m{a#/yD«qm{ø¥Ûïޑ«Q†­ôl–Ù½xŠj9‡ëšÑ5Ú9 Èý©*Iâíê"ƒÔ=äœ$±ÓÍ×u­óR„¾x4ÚÞú]V¶ÔUÍlÀðRǀö;“ì+WôÉgêÇ) Ý‘]ö»·®*œ›ƒ‘ÔVÿàk3\ȵ D÷JK›ƒOØUG‰* -ô&ø75®ÌÔA§œ=\úD·½àJ˜AÆۈà,?i -Wƒ±tz.¼D®´6ÓUÏ»NøÉ©½WVhj¯00¼p¤'¸QØý>¦–ô;1½ÌLò€î·ƒòÉHÑH *¦4fÁÖp‰4‚4ÊÞÔ;±ÒÆtâ&sÏÅ^¾š‡ *\ä9ÐM®5Î÷©€(8–à#ð†ûLWûÐaB -릮Ѭ(*°¥uÎÛAš%¹oþݤ“1xœ9÷:ã)|tZˆ•)mٔÂ:Ü Ç¢†à\Do=1ü§؄Р|:8¾°¯’—¨ÜÑ ®â˜©ip¬cZĺÇÒÍýèÃÝË0e‘ʈæNHw{m!uØw³@qÐ=S$K¯¡‡¶ÐÚë,=`0´­lSJm/Þüªš»MYڊÙ7SՁ7íûNGÜþ†¤z_0\ÃhDj9q`) 1J¯gà5Ú^g¶ä¾¥[DÔx@CÓy0q²ÑÆ_Âð¨+2«Ò~âxüOÆcH´Žè£°'¤“Íë»_؊³¹ÞË{Ìþ]ä­ñÅnyO#}n¥µ@ÕÈå·pØr·µÜ…7 •·¢DÚwÖeÛpT•‰Ç|…º q1‘ýæV: ¹#˜mÑ>Þ=~»âÅexÿéy&zöÇ£‡!D=$%YÐ_ޔ¤;љ¸‡6ÐçW]¼cÕ¸NƒTÓUÐâñÌkñï„S†Ç¸À¹[K£ò2õ=ø¸‚×£„8òž»t²2™ã˂%é0Ž–óKVç÷×7/®ÁµöÖ¯l‚Ž-j R+1j-Æp(þç7‚Ù_à yó^.ء׫³ŸÏþ­û~¥endstream -endobj -1558 0 obj<>/XObject<<>>>>/Annots 895 0 R>>endobj -1559 0 obj<>stream -xµWaoÚHýž_1—öT*Á†‰”“¨’´œR’ ´= úac/Á­½ËÙ&ûõ÷f×K I¤êîJ`™Ý7ofÞ®ÿ:ð©…?Ÿzµ»¦-¯EŽÏïýÞüg’ælÀÔíÛÍûƒv¶vÐõ:”R7À‡$4>¨ Sê÷½~ÅV¦äÃW·b¬Ža†êÒê8¥ Å8VÇ°½Hí¾ïS»Å¦ÔÁÚ^9bÀÕ1¬Gï¨bå5A¿ ,°u½ ðBßïymõñ+uáόµ2fÀÇpúh­ŽaiG«ôA(ìÖïôŽ™+cKEP±2n +ö@–ÍN¼öÝä yÑ¢cšÌ‘ýn_"“ÛMÂڙNE¬N§£ÁÍh8øJWãÓé'o¾ÒXf÷2;ŽEz+P(Ž†H– Ñþúvòí E€³9‰jÓ/±Šô:§Ñ„6ý®3û-Äóu«Bft–Åؐ†j®É?)÷p“ˆ_匑Hå M?\Ó¥Èeö»,A$Å2§ë±óàüÿg{èŒã&þ?þùL¯‰ù¨eË0Lb© -Zê;MO”i]üšË0 ¥Z¥KKh~¸ÇáÉåN扸ËO¦­M´·ZŽî9Š“4áu}õþj6[,׳“#™‡Y¼,b­N¦vþþºúèŠÎn†ŸÏohðy0¼¼»<§‹«š|Žéúf8šœßԟÝ=Ôi -ÎN¦Îêêâ‡XÍöhüÍæÂНË"²eëâ£Ùìðåʄñgde¼ -C™çóU’<0ÑM¡©ø2(l^@ª:VmŸÓï ©; ¢(Vw4’k*;)§ûXP±TiíÁõ»” ëYMA7z÷@‘œ‹URÔÉʅžÏe–“H*«•ò…Èн˜+Q¬ Í,Mv·ZžÞz¡Vó]'5žÉH6Ïói®“HfÀžäšä&Î !V.—m("‹8/ç¾íGE.bú·È <šÀÂ¥uŒn%°ë5iòcÇg܅pÁs±HÉ°@X+{·‰$$'¯fNnd¸*$ EWK©Ê€Î7³÷VBgoáµXˆÒX!¬LM«¾ý2.z'ò„Îj±'=#¤³’T&E5ǾÙnÙÙÛ²2Ârv°OÎÇ,èöö¶3öm䆝“µåð”d¾ç 0™ü²L^ðŒ)ªUܺBkàpô)*DŠô3ÁȎãܛ sæö©g˜b VQVªe½nZÌ[î*¡±¥B?+ŽPÑ~Œé*GkŠ{@ÚÖù½HVHWÉ2Ów™Hi¡õw2swªƒÝ1GŽM€äaþ2-Ól=º–© jÊ"lš•¡XîãBYˆ%¼Ã.P~sTNŽ:C?܃sBC‚Dö`Š†{Ÿ/ƒHؗ…T¨{î?ÆËìÏ3‚{–ÕÑ4ÆÂGÆc±= H£„•.l×-r\Œlõ4á ˦)]+±G»¨š6þ¥BŽcô…´1™\ŠŒëǒn·t<¿(M\G²³,xa¢C¦—!)h©ójõhhI°aǦ?*¡_&¢È:«„Ì2äNÏép`:“*–Ñ!+ n«Œ•´„lÉöh¤ HÏrãp=áȧ Ü5Ä7GfŒjA۔é9ì -½+ä¦`dìdWþê& W.1DSXua¨WªØ¯ŸÉB⡃5¥ËDòaŽ:ÛÏk$‰Ð­/$sÂ2™ê{®Gld®Œ¦鳇HɄ«gàá##Ñks¤±ŒlRE!ûsš`/>HIìTmF±Ð»5W©Þö¸Ê’ý4ÍjáB¨;.>N¼¦5>è*QFe¯ÛŠažÁœ¼7gZÉ7˜‡ ÎOFEÃ’w0w념ÖãCgßËdû|Ñ:V^ýÒ¼U3_8vˇ…W46WAÞ VP_ð²Ó.LÎY»I5ôì1ff¥|¬xå º1½öëÛê`­©ói Ù·¤og¶>]Ôí%Řw»¢ã…L]ÆjµyºE4BzÞA§î.kÎÞ¼è—ZçwñÞoS·wlŸªÆƒï¸žèo¸YЙW¦/øÍ~nA£×âGºy›ëô:^¯ÛÇ][ôû¼óùäàƒe¯¬nendstream -endobj -1560 0 obj<>/XObject<<>>>>/Annots 900 0 R>>endobj -1561 0 obj<>stream -x­VëOãFÿž¿bœŠªÁ¯„<‚ -4KÕIýpï†ìÝ>|Þ5©|g×q@æzУ¿ÊÞͳˆÙ<ò‚9)B¯×}?ÏNgŸ(± ~é}ìÉ=è}è]ön>µ/3Q´î]ŸÞdóëlÖ5¬ô1ŌKJÛÝÊî<‡ß+€@®‹‡N^@Ðp~üŽ\Ktæ”>ÍXý¨ÒfùZC· ÿõu|üdþ$Gáëõà/‚:‹îH™Bka4£ ý®™×€ÊûY|$~˜õwÁš0½T³¨2eäk*2D.‰gî‹- -âTGÁùdSVWùº/¢uA"+‹º  ¥a@züSÒÊ:&}£ ¸Xü  Kù…òž%ç™i©)Œñ4{Y²!ù’䞯â qî¿"J-F[íôMڃ7iߤ}ø&íяiۓíÇ´÷àJÛúLçn^pø¯£Œ¶ÒSÿ³Ú|¹ s­V-½ö5|ԕw'aÉlU*çV:²UÁ5¶Vaª’Þ…–Û¹–›©6дÏ>lÖ› ' -–ß\15=ì=¬ÜT1ÈXhú¶Ä£À§ì–)†Ù÷æ–•JSÐO+¬¶æ¶o׬É÷ÉFñ¸îž›ùåÉÛ[f¹…÷:¯\õø5Úi4 -ãحܯ9†ãa8MpMGùÉÔÁœf?:ÿ‡±‹gendstream -endobj -1562 0 obj<>/XObject<<>>>>/Annots 903 0 R>>endobj -1563 0 obj<>stream -x¥WÛrÓH}ÏWô£S‹ßâ /[ÜR»@D±yKc{@šºÄköç÷ô\YqŠª -S¶f¦{Î9}ºõýlL#üÓbBÓ9%ùÙ(á—öããõÙdr-i>]Eʱê2šùo}âõ4Mñ9[.ð9Á¿RÒÆ>˜-–ÑüԃéjŠ3O올8XïÁËøìâjEãÅd;_Ž)Nm’#Š“ÁxM#Šw’nò¢Tº®(6&«d}Å΍±w' 䧃£Å5VSQš{•ÊŠ}~ó7É™Ô5™ ÕðEéÔì+zӋ4¥[Ž&KüüC”iDW¦¤ÄäE&kɱq<lˆ¨ôƔ¹¨•ÑÏ D%Ó›kcnsßË5Uª–$jÚÕuñüâBù{E•iÊD⤭Œ´¬/HT´—YÆÿ#¿^ÌÔ$MŽìmTR:ɚT¦´WõΆ ǒ;–RUÕ¥Z7œ$ª*À’ð7ìA£³C ­K%7½À£4iã6ù›m¤¨›°ÄpËÈQRgžšéºP–ÍqD_v¸?2;~w;ŽÈäõá9¯@?Ë|ÊLˀUMQ˜²Vzko¾5ŒÍºNæ.ø­U¯ÂQ@®X* ø0å¶$âç-8ç¥QÒêòbµLNi©îAr!’ob++w‰Ä+r¸ˆ eˆ8ÜMæ :¾¢}Ø -è!5¢»™–‰¬*ÌøŽI  Ã [XžHÄðk™ HªZd™“X’).–ýN%;/™u-”&Æůì!4°Ì ÿIäkÁk‡Nítž¹íÐe X«“·%ׁ4èl8YFã g3çVl“ˆ^èBE¿v´ÝÑöH{l#0 &ÅÝðæ,ѵ<€ÁV‰)¤s<ÅJwƒÖ‰QýOMP¬é󸤄ÝB¶ÒÈ <¹£Þ»óˆn4U;ÔÄ3 ÞVëÕÕö‡* -Ùg¥åÌ£äà0Jáù6*“Õ30 iÀsnÞ_‘ÿ‰µÀ…ÊN‘ÙIKÉÆ´>8[z,©ŸØEßþ:Ž«Éº?W“€õ:âkBìMP*j±f{v§ %Q. Ž¾7¦—Ò½Ýë@oãø–r™ì„VU^EôF$»SAì)ì#ö¢m¤ì$ˆª2‰²x}þø§%Žu"’º¡ñèÌk9ìm¬='O1|ëEfi©­â"= ¯lµOÿZ7·×¾TÇíš -Ï`Ú¨,µa.pq¢Ž8Ñ¥„9 £ûÇ -¸ä¥î¢-ÜáÆP›»chîÝp@ÚôZö´ ¡¢‰±>lBµoKM©ê%;™|ãÜ!y±Îdú¥Ìü Ð•Ø+ëZO¨å]¯rPð}¾{{³S>È@Ý •qb -W˜H‚Y…ƒ†.›áÛ_âQá! -Î3põò¸îU˜||+Êðbý-þYʍšiÛ äÌGt{$”Y‰íÄp1gJKº•%†¨¤TEý MNÐuüÇoÄå—Ò¶: ¤o[éF$Ü÷¬äŽBÿ3th]pNÑx‡áÖC“äîœ=? Š¹ښ?[Ã!˜``ó‘™pŸž”@=¦ÂdÇ;3Ì_ ì7RoûdnR™‘LLgÜ° D‚3µYV§óâN‹íEnnw†±VuÔ`Ù:ý€Ä;*'Æš ¬6˜Ra²`WKÉò“àì{Š^B¢4kôW—­TùÚÍœèÃä>àsÜOkË"9¹Ö;ÀˆVa蟹áØK83¬Ÿm€¾ÆĈÕ® -6í¡»;ˆðZ‚æñoï;ñL«Ôfóœ®QŒ>.Z  C§¦`ë†KÁÏì(yê> ÓïõÑC#ãqÈçÀËðžEÔ¢õœ>»óHwÝÖa¶ôøŽçxC[Nñ5w·ùôâÝËx‹1_‘½î¾.ðÎaØ0\Œ¦ŸÍŸ|Ӛ-fÑb¾tóìjÄ'¼‰Ïþ:û/d†’endstream -endobj -1564 0 obj<>/XObject<<>>>>>>endobj -1565 0 obj<>stream -x…WÛnã6}÷W ò”bù¯í,PÙl‚ ºé¦‹-°î-Ñ6JTHʎúï=CJŽ­MÛ\lK"gΜ93?wÔÇï€&C:SšwúIŸFƒ¿N'xâßJZv>Î:½›>]Ðl‰ã)>d„Õý>ÍÒSâŸó„È–iª•,üºu®’ŽDA—YvoUá¥ýdÕFÚùéüÝ=t¿¿z7{ìô©;è'S<ý»¾’1_Þ0ylñúåÀyC"õ•ÐzײÌS+…—äגʈ‡õnF4ĸºÃàök!É,ë…f¡eîH©©8™Ñv- Ry‰U«°ô6VPMNzÚ -\À[!rI®©$YYH¿•²h@ž'Cw#¬2•#W•¥±ž"™$lºV^"4+]B7ƒ| àŒ¾©"3[G¿ÎH©®2&²ÀtðœÑÉe‰¥-g_„“ö›…YK··Øþ'mÞ’é ÎöV/ÞS -:)ï¹sÊ‘å'Ñ<ýhð¤v9'#Žo˜„‚Z›-gì©Àûv-|mĎçb#iš¨*µøX"rÑd/¡K„ê|…¤"µÙ*­[qZ$)_à™gœŽÆj]Ò½5¥´^»L mVd -½{%4&½h£VO?§XZ~Ÿ+•>‘6æ fÚ~G¨+·s^æ@¾RÎÛ Ï¸Êä‰ûü˗»ùü!l˜Ï¯*k¡»+Sxkôƒô¸?Ïç! ùüºØ(k -–g4z¤ñh”¹‚÷:rsÀ‹Ð[±sT9”A\ŠJh¶Fþð‡à ñ7Z‰ð¡Õ`¸E ² %ÒÖæäH]? g% " „>›-`Û3zùZ7pT¸-‡5&©€Þ nª9E±S´ª©8è7b&µ šE¸ìJhVÜ.ÊSÎäÌ~®= -DrÁ8…Âô²,c»@8ZåÊ Ï…+B3pšö¥%8t’'±BÐuÁÓÂø5cn~‹`õQvPÙï{Ӗ„¹MgÑïk¦j-•u>aû½› Lê~y>ŠZà=¡OJ¬ -ã”Û¯CÙóyÑ=ïdžÖ 2k²*åèãâCÂ:7 À½Ì­Ñ ô¥V•/ðY7L.ªUŒ†‰-mÝ®· -ŒyÔbÛ ípg‹°ãíu¶º´&Ž‡»M‹âƒ¦VºhÐ"«‚K©àF„¬ ‹#‹íšŸp­YˆËÉ °–ﺡ»ÞÞm† -J½±»À;Xldõõ錜 bÝ -ˆhÂ&þp +B‡ª-Ý_ÅÇL)Ær/$ú*6*ÐyËͲ°UlÍA‹òƒzv¯9ÀI!õò '=V(s,ä6 d¹Ê2œ™¨³úücŒ¬¡•ó­–ç? -õòjßU‹Ø:“:`Ib®ˆj©4æNSÓx+¨®ieaA J¾Ä^@'½–ÓÔä@š$ôŽHp}3Ç}LU%³Ôí,Íà»6€ÈbNcŸF«@›á ˜ h®4rù"ÁóeLSn@•Zn8ÃͲùév­Òuð²¨tN˜t@ªœÆ&1é%z&/aåÞp0Ïu‡uó˜Dô}¥ÍB迳õtR‹ -¾Û…¦‘:qq¸¬BWb -’ûL¶Lèò™.£Ù.­01…]ô\É -e‚æX…Vr0!6tióc ]°•L ‚ÍâMèßC¡òL küD= b½¥§Ë¬çø”‰Œv©0*r’—Fk³ål‚Z*Æ^òõˆnEŸL -ßE<Ød·ÙНôù[ÃégÅh2J&ã)N -<¿ð¶ëYç·Î?¯O -Mendstream -endobj -1566 0 obj<>/XObject<<>>>>>>endobj -1567 0 obj<>stream -x¥WmOãFþߘrGïNº8/„hAâtwêUªŽ–TU|XۛxÁöšÝ5¹¨êï3»¶ >hO*!Šï¼?óÌängL#¼Æ4ŸÐþŒ’bghz0Šf4=œãz‚·‘´Üy·Ø~Ñ-–˜â"%œh‘¼¦æ¯2ªt”è¢eJ'4¬­ƪ敡þÏ÷*Ú³o7;#ŒGÑ!ÔtÒyu×ÉÒcé;6ð_Ò¦xl»è¤ož±}WËZV¢¶²ÓѨ°Áÿ$˜·NWÿ[…0Žu ?Ni<LfœŠ QĂl¦ë<%+’/¬.EœKJåRÔ¹³´Ô†\&áj*+Y¦ª\‘.i£kCvc,Èm*ù–âڑ¿-_¡*¹Pæ^oDé"úÄßR©½\ŠýhÂö뒋e.Ž5R&î%9Mn-Åmc–Èu"rä -æÒ¥h‘u¹³m"_‹ J–užoÚÜ5öl%µT2¥J¸¬…´oIX¶C¶Hc*ĆÝlÜðŒ‘‰£ó³ÅOt/òZÚ¨Q:™ESâLúl @¡ s!·¸ˆ%y Êô-§g­òvn%Ž"w•6ÂlYµ!½ôùãt ي k<{ðZ•½€øàeÐnì5Ó!Y…ZeŽ– -Žæré np—KKŠã\º D>œžño .m–úœn·<*“J¸[¨"È].\Y±4»…U+ΑÓ=³÷yX Þxa[iKÓÇ'wï4—†~$nÛ-Db´Ý… ¿BÏ¥±©Œ‘U.˜]+—‘¨*£aJ8Ù`Ö 6x»ñÊ80_Áž{–5[Ôe[ɘgœñµ÷Ù'=8’•€ÊÀ9çS Ð×Õ³Í2 "¸önžSð(ãëL%³!l/©@ (­T63üxDc4…Áþ8ôßxM£IDïe\¯VÌNy|j0YáÀcö›sã~FáÁܬ)Ë>`µdÖÂSë@¡\éO6綸ÛWËfm£ª¶wÐÁÚø4ö’$̪.d‰smšAmÎÑ' Œ;"¢3²ª¨ÀÉò‹ðŸþ |»åö 7åÊRè©X‡\uós0AŠ8âfn†@·'+ª¡õ«ÛSs2ÆtnD_|ç§kw° jk°¾ µ ìfk Ýƒß0ò¹žÆw=`kžíÆ·JiPÑ鐽Â;ò^=!à™:ðe»pBÙCoOƒáHY±’O-/ÚñÇ[¾žì¯D¶»GÑÖà{§.ˆny9¦—šœž~ÿu@Qé½hÇI¨… êa‚Yà™–¨@Ýb`òÄò,ڑuó•R¦ iÞ%*P ø Ý2²¥lchF$GdzW€~÷)ç= ¯lzLM'ÓÉ$Ӕ©¦ˆ™j­4P '÷ù¤-â$W€> ‡~ÊgÚºa¾žöDDšzçÁ¤KP$©ê¿¦'ºövrp@e!ìí ®¢ö=ê©;cê=x¯ ¡Ê“˳‹ÅÙo‹kú|qrù{©¾\Ӆ4˜R'—'±«Fóëž0‚9¦««Ó¦Ã|Á¿ -l渄ÜÜÔá-$Sƒñü`JW¯y1¾‡öê nføòþÛ|ùœU_¸ÞÃñhzäû~¿í~þlmõwþ'¢LdN,Ü;òÁ·Txžs<½‘c0J -7{ß óçVE£V¦Ïéx*Â΀ü¢žÛtÑUô*¸÷ -À›¹®i8ˆ5jÐl2ë%³ñRA½‚b,X…²Ø¥Ú•˜×–vhW\îQDE:é5¬ÔÒL˜lí(ýE®õ-a3à>|ÌͤöM‹= 9c¤õ[:¶‘‡Í–?žá'Õá>ÍæMk_œýòîŒÎ¾áö½Nü¼óqº­À`>âß[¯¿m°NçÓh>;ÄD†Èф5}Xìüºó©UÁendstream -endobj -1568 0 obj<>/XObject<<>>>>>>endobj -1569 0 obj<>stream -xVmoÛ6þž_qߔ±üZÛ P )¶¬V4[<  ´LÛL$R%©$úã÷)ɲ“¬ےÅ{yî¹çîëɐx i6¢ñ”²âdh:ã}2Ÿá}„+i~˜ÌGéèµÞOÓéñý‹“þՄ†CZ¬ác:ŸÑbE°?Ð";ýÛT” M_+•=ä;Z+½"SyRkò[I¥5Ë\¤=)¿¥©,n*í•ÞÛ9/‹”¾¬½ÔTJS撶â±=WŸ‚%eß-îOÔŽübuڗ>ëK™(á' LK[(ç”ÑŽŒ¦Ga•©\ôˆ e%]ʆúWç4œÄœzãaŠ¯«Óá$¤ã”þÚ -Hëheè:õS<¸£7b0Z *'CΉ—ΗV»„ÓßXQ7”meöÀ_œ”{t„´¤E!(Råfef6Zý+W´ÜÑ­(–"ÄÞá -)ËgQ·³`€k8.b¨:¯S!5Ž•ðׄפHP¾LrʃûPêDu})c¯ôÚØBx€Nkk -m9ꈔºx» P­Mž›'η•æ:)FÛd"Ÿä³·"ó€¤ãõDz퉷†¿Ñä?F¨s&ùÖ_*ÝÏj ó$buÀ$6x4IéVú@󪌞,þ¬ì#øõï–T…Ø‘–È5€ã vœSÖ;8±¥byb?ñãà@J×(”#ç­Ñô&ó©(¤^±E¦8wvCáµÈT®¼’\fó¨ø8;œ%W“ƒ¹ûÈbsíó;bFÃÜÑ41l%„Ë„8À\]">ËͼÌÐjSï–?¥Åy6¨tBß:Žú(ÍÈ©ÿ¡ 7ä7‘+á†ñc”¦é…)™ãE^É ÜxYºÀ +„.òÂ8<ƵW;w¶‡ %ì*¡¢ÂÓKI¨PiÐ6éE^n…® -iUƘT(Ÿu™P$ÿvz%ۊÐց|̔H+Îp0扶»r+¡Žw§I/¹{GèIæyJ—O cæ TDäP&®†}b®µöŒK}„k8Æ&‚Ö °Dd; ½`«`׊ý J"}BbÉÓ¢c—«¹§83ÒBzd°c+lâ?òÏfÀoÆ-WžP ¾Õz`návQå^ñ¸ ³ó“¾,Æ¡ßj…ÅDYïYÆÇ -aäöZ—–î¹”Œ(/#ÇAö0@10¡ )ñ5.ÛIVÚȱƒC¡‘B=Ž^=þyG7ÚêÞï!n”C¬Bkï+ҙôŽc -Y”Âya10 ‡ë0" ñ€>CSm@pó€¡O5§Òé0Ò¡W±ðÁv€½`Bpã*p(hm륕Nn³'æXmXê büvóG»!Eγ‰$/3¹•bõ¢ù!î<]@›3¯Ù™:äkûJ˜AÛëe錰f¥xV,g0Ö3„‰ªïW®7"?Â0äÖ!äÒ[',zߋ¼Ãû&rÞ%4ÍmM•¯0Nœ Ûë_?ýyCNm´È öæŠ%?Àó–o… IÇ7 D¡mܺQúWózN°UÏÇ4Ô›Ãíå珗hDsÏ°ül2¨¶öa/Š 2Å*Ž½Ùkُ­›“Ù$MçQ;ÎÇlç—ÅÉï'ÿëÄÊlendstream -endobj -1570 0 obj<>/XObject<<>>>>>>endobj -1571 0 obj<>stream -x…WkOÛJýί© RbHÃã-EêUK¹@Õ[ ]ic¯ñÛkvפ‘øñ÷̬M\«ííCrœÝyœ9sfò¸3§þÎé耗”V;³d†§7ɂÇGx>À§)ßy{»³qBóÝ渲<ÆCF8>›Ñmº7_$‹äMBÙy]‡ Ֆlš6¼¾ýŽ« šÏãÕéÁ®îÝÆþ…BSe} Üµ>8L}OrlN35¿Hè›m©R*ԓrñ»]MèI;“á -ýkZ+O¹ukå2M8ˆMç‡É;÷:Pې¢µSM£)gۚ-hJmU)~¶ì'¾ËM©'´jÅ<ð`ã/ "r[ÉU W»¤óv°Žðvaœ"i¡Ó6[©äÐÂÎO_¿?ûøñcr¯ƒÀ€³‘3÷EˆXÐc«[Ð‡œ6@DÁFë1EooÎɺQ¢¯®N†‘|cm©ÝDn¦ª¦ «Æ:åL¹!l³Í-~À륦žø¼¦,iű¯*pí1ÙÐߍœ×6ðéˆJ–ЯOùÈþŌNz2€8ŒQÙ¤4½ê ”xâÙ!s–|ôÒ®»uL ’Ô¬Ð5Ñ´[6[k»±˜šL.9òqf ¼ÑÄXøK~x`”›çëµÀÉÙGn¢f¹m@~ZÚZ[i)TšêÐ19£kæwg½gÌ¥þÂp…™ók…êÁî ¼{²ÃNÞ£\œ §æ´*QR4¡¯&ò…òÞø êT÷Gýƃ£¼TV™шˆ#àÊ?½+/•n ÓRÃIߜB <=wcDÏqT…éÚáÊá\³³µmˌôF§1edÒWY­J(‘d]rd\lÎûËå‡h—ãÙ¥60uÃd:h‡Œx¡‘ãA•†V€3þ4%J3ÚRn_úi¿l²ýž´D¯b—Qf2°nó¢bXïx–G҃öž~ûçU¤×TþÅu~OY~6›Í«Må3?Ë­4 —È‚îH~{GDè oHB`YFtÀ|¾ÆGPLNFÖÐÏ<) ‡¦½Ê•W}œÚîÆC¨(z‘mI䶆xG͖DP1Õ{…0;‹›*HÕ£÷ié—á<šΣŽÈ Zs¹¾ëÿ4>s_0e¾ô$ÞОÉä†GžzmÛHG¯¸×*@»Çlk“êr3nì[PU¦O[㬫+´¼ƒž©{í™41ÜSZ©ºFaâ{TbUªú¡û؍;L©±ŸÁ|è‡ÉÐP?ŒX3GtàÜ%ƒT5d›`e¯Tˆ£{ƒxQ¼ÜÜcŠe£rƒ5<£?¨C‹ Û 6lO"Å`ˆ=žú‚îö˜}N{O…V;sÃôï^wÞc÷G6|¿”/·ei×RQèŠwÔùÕŠykwJI’pH¿é¥aBÒ'(Œ&K\œ“¿ÆÉâ²V8æ,“"ÊÛë8ŽC£äî5˜$˜©d‚0gU,F€IY½†àŒkÛS Ûª8ŒÌxÖÕ8Ž^j¿ÝaúIÖµÖGtú±…Àùn÷\ÃÊ°Xy›l^h:Æݦ:O¼¨KÉ›Ú -âÜó uƾÕæ,¿n븅Ø@~Ð$Û阔Š¸ae-F‚í[ËCj0E»DHe€L82³]¢¶ÐŽ0¿‚¤Þ¤Î4A|™KÑø<žªlih±Þ×-sªFxÍ9~2©³7ÀƒR¤^‡„.àZÿPUÃ;%¶Nœýjê“7#ϸÜ3%òëCéŠ+ªîèRUúùnïZ6Çw¥Iî^_AN¡¶Fã²ò’ÕóYöÄü˞Cvá%ˆe×^Ȧ…µ»€OÑ»àÊ鹋4’‘ÁóWBýš¯xMß y¡æ¶äál'„Á!z(ÃïG ÄiÃ5ä=`ÈsL tý{ΖhÞÕK¢‹«¯)/\pµ­&G)nË`P6ƒMkä>/XObject<<>>>>>>endobj -1573 0 obj<>stream -x…TÑn›@|÷W¬*UI¥˜‚M0~t”FêC«´¡}<`m“À喤ôë;wà¸r“V¶%ÃÞÍÌÎìݏYD!>­´L¨hfaR’®ƒ˜ât…ÿ ü:¦íXã y©p&/âå%N ®²Ùû›5E1e[°'I¤”•î0¤¬8â V}UOtk¬Ü]Õ -µ]¥…ËwÙ=öÇEãþùb…ÝçÙ¾²„¯Â:“×ܐ앸7½íU]T¨ÞrIù@\ɞ;,à”lkL]éÙÁ -¶¶½ˆ{¬ôÖt’Êh˜Û`EuBfëd„4–ÁÂѱîM>R7êí‘ÄVúÁ¿q‹¼XáŸBÛªæ 2 ¦ï¦>;²UÓBvi€¢íÛÖtrB|4( ï¦§F ¤}Š!Ö -NÐÙ¦ãº(èÆ·C×,\¸®ÎýÉŒöã™/#L:ô©¤mÊG¥ ܺ<àÒ+|6£À‡ù5óœE(ÝA‘ìa]*½u–{1•«éÑ÷'„å={〠-Ó4J—oÈ´®ƒ;PIìžëš¬еqà#‚* -Ó{é.Vvpô­²^€Kòí· Ý¹è& -ˆÉ#ŸÐŽ‚³í…[àrv™=Ï\¯ÜÁñ`¡]¯íÅá`I§ -Ôºc>±0›J‚á·#›²ê0§¦¦¾ÒéÔG .§tI‹d:~w›OWL¤¹Çz„]ô kñähæ‡ óU¸~æ^1ñ -wP’â‚Âì¯/ʇlöeö?õžµendstream -endobj -1574 0 obj<>/XObject<<>>>>/Annots 910 0 R>>endobj -1575 0 obj<>stream -x…W]oÛ6}ϯ¸ðK QbÇIÜ}h—v+†4[c õ0Ðe«‘D•¤êèß¹—”¬(†¢A‘÷ãðœs©¯GSºÀ¿)ÝÌèòšÒêè"¹À_úã¿ÐՂV4¿Lfñ¡¤‡£Ë«¿¼š‡—‹Y2Oüvz5å·³›ä[gó«dŸø-œ_.ðn¾¸Áï3ü·šò£7Ë£ów/ivA˵]ß,h™IIøKzüëV5^[š^%ô ÓÖ~O¥þ¦Kw²ü"[§7aëÙåå.³c¬&ô¾öÖdmê S‡¥sšNãR©KTµVäÚ¦1Ö;ò[”dÊÒìŠzC¦á½ø«‘›Ò¬UI®Z'©©sj”U•Fq!ú½ì‚Ï“9×ñ9ìø;¼Ÿõ燎ï]ìçÉþczEŸÝVYý£uÚ®Ž3«¶ô«“xü¦íÌTª¨¨ÌÅÈþ®9ðŸ¥VNßÈÅêû²+U£ô 7j©uü[Qã÷Jq·¤ê¬Û’™´­tíéöþîõûÿܽ½{óöc²õUÉ%_Ðٔ ‚„*o-à³´Véãƚq2íUQ:BØP4U&ÓÔõÐx*êÌì*þ¡íZ[ãºõÝRÙ8κêf€cuBvj—Úb­3´%çöúöáì÷ûOË{©<‰¥Ï®Ã!Ýç²H­Í7}J“>á+”ÉpO¨ÒŠI°Už]¬Žl1”–Šo Ïùm[×ÌdŸð JéZ·~šJ}«ÊrÓpN¥<'<“jcí‹4ˆÕ_[í8‡ÁáÁx8”ÉXrr,.,‚áU–|¤jŒ[O\špꝱYl–^MB£)¤­À|«ÁûQY‡´Àå¿PªD}²¬ußG”ŸMà¿îIña+;•S*{A ``{,oÔºÔ@ŽtÚ=œ"4¹¥ÚQãrül8C×µÂ5f ݸRjª¦„²#—Ä8IOŽ¡ ÕÇÞ9¼¦‡»7¤^—Ž-’…€—óÊú¶¡“êÀ9 ;¡'<‘ &ùéMi"¬p2ê•5("&ôi[¤[nuÀ8Р"«S DÁš<×iôÁÚ×`9äd ¬b"8ªGÉ ït™Ã=DŒÕ ,eàdêqb!­Ž…Ì{ڀ9žôwÂC¾\S—÷ 7$R?bÓcmvXÊ2ürÞªz1CrŒeŽŠX»Âo“jkT@ÇƃCŽ3Æ¥Ìû¡%°/ƒ„ÿc¸”%×ûQÿ\Oe-?ÇTLoSæÄ ”ÀdQßà—Bi>ÂÝVc³-ËãBàf§³±½ˆõÁÖ±MÎþÀÙ¼°Î£$ô<\Á·ÒíÏVºní4 -RÌUçxL8 þŽyÝ`ºÀ÷ÇÍzåXÀ؛ԔTëa$$zƒ‰†Ö¤îCU€ë¼I0€p„·Æ±2HiªÏ&bõ YÁ,nžwÁXÛë‚„ó0¹,ÄZa”‰ÈÇ3Û°ÚP‘i%Ç4ÊT8F Ü©£¹{‹ãÆ 0u-U™SrçÙë^xLK–#ÒMBç¡ú ÏLUGþÓGõ/œW·³n|ñÖgMò¢3ÜupƒÂm(!~Æc?®ySÊuì~P?(ˆ˜õ¹5ՓH°Gyž]ò¿ã3‚zn÷¬*n3Lä05!û&¸Óg'R®ž{§€íê¸u\ŽâÜ™O¼ÕlՂ+Nsÿ`‰¨Þ!p‘ïe[?ĒúœÌ™¶àÃà,6[ÈB¸ÎHze|ÞQÈSî#}¸8;ùÎb/E -ÜΉe*ן¾è aZ¬1÷¸ „kè(/ö2è£æ9ÍÝ a/?Ø"> F -'mÑ>GûÛa‹CD]¸iör\Š£´Ý9â#£›p`#\‡÷tò†‹H@@• ºc¢IÖÅ÷±ò\ºÕ•(÷üÝâðÉz‰o×ìÿ¾‡ç7óäæzœÿå5×ÿvyô×Ñ¿˜NM¸endstream -endobj -1576 0 obj<>/XObject<<>>>>>>endobj -1577 0 obj<>stream -x…VMoã8 ½çW>Í­›¤Ý$=ìa:³æP` °X`.Š-ǚڒW’›ñ¿ßGú#[`Q¤H,Š||$ýïbEKü­h»¦Û eõb™.éöþÿïv[ü_ãã5‹‡ýâæñŽV+Ú¸²ÙmiŸ̗KÚgŸN¥†™‰d)jƒöVÕú¦Q!œœÏ)–ª?kc©m4™Š:¿"ë"̓P*6NÒÏûŸ‹%]¯7éP>=)ÛQV\ ´ÍåŽÁ8‹ß±mүڒ)¤ñÈ¿jÏ¡œ³oªp^á k½‰]JûRw@÷µªªnôùª*“Ø«ÛtÍØc*th#.ИQJϪ>(“!¿\ÀMÆÀUT™É”4¡*=‡$¥¿ÁƒDÛ'6ƒe–(wšÙL¢×š2g­Î"RN˜gUG*gd׃ §ÏÌ3®P!Ùã[GÑããF?üõgW´ÎÏðK¹AvÑy£ÃÏ¤˜w‚“ ’œÎ™`†Iø!ýžP¨)"-pnµÐ<1Æõ€­¥¬ÔÙËp·õv†¬ŽÊXÓÇr÷½-µŠYÉN ×"4qͱô|ŠߊÃC…ê\aÆŠ’A:"d3éå; MTu©$†¥ Jνnœ‡N¥,S4½þ¥@‡0KûÒmÏܐ‰d6j!\ÊIå:dÞ@¨VMâûËAEõ)ÁÑ •ù QßÐÈírícÔuÓgV¹#Wž•Ç5»¼§ ¡CßRÆIÿRYD‹½ÇF€çŽ˜OŠHGŒ†Â»Z z&RBá…Ɂë¾ÃE{—üõg™–xߥ=Œ¨PX)Ÿ:[O³æÜsÌ)Ð w"/‹&P>/XObject<<>>>>>>endobj -1579 0 obj<>stream -x¥WMoÛF½ûW zrP[±dErzK‚0Ð8n­ =ä²"—âÖä.Ã%Ũ¿¾ïí’M-ÚÂ6l“»óñæ͛Ñ׳¹\ák.ë…\¯$)Ï®fWòjþj¶”åÍ/ðSkÉ‹ÅÕb¶š¾x»9{ùþµ,®d“ÁÖj}#›T`ç -O’ów¹ª]Ë|5“OÖdF§ò‹Û9ëe«›Nk+ŸM]çånóbóÇٕ\.–0q®l*Ÿîn—Ö»ã©-òýÍ×Ñßåõr¶àq8˜ÏäÍÖ7µJšxl)óyl±Fè8vk½«Ucœ—EôôÁ$µó.kFáH“×®Ý墤íC/ºäŠÑ#ôy˜T×HJɹ+ã¦ø¡Ïd~ƒ3¸£ƒÛi«]ëq±¬Ú†yi»7µ³¥¶—ÌÕ0T8éÇÅåzvÃY&Y¬Öߢ^õk,Ĩëěÿï†ïû:J’+»#gçÿ±¹¸™Í_Ÿ0ºM5å‘C8ú -T5¬#•Úz2Ì{Ä¥sm‘öZpà\ ¥T[ Ǒê!úMîÚ0ŽG¢Ÿ¶U1Œ.pr¬q Í±Ã•'Ç{KQ.B ¡“∐Fy(>ñáÝHF"?r©ÒӅët ]€u„³n`IlAú Ür£;8ÍQG3¬6(‡ºÊûG“ïåd´+D¸HäT‚Ñ·þv„]cÃà07¸óÉ}?*ŸÒv4ˆƒÑU?Йûˆ]½îRàÕ.,*² uv]?jðÖ}£„D… -Y[àK]n"²SØY%®3ùh±˜4Üðb;•F;FyÔ·- >Õ2jXé0Z1.H܉ßіrº -®sbÄúOL‚‘rȕ-×%R‰kTœqøßÝ>üȈyrâÅ]ú½tSl¼«NdÒÈÛ*g0,óä%G²=]Ü59ùËX 1I@x>{Š‡ -úŽ})Èï±ã ñÃJ¿A"ˆtºV0ÚÙLÞêD!¸#esDV¶¸G?K -ÈsÑï0´öº/ç{£Bìwa[ˆa‡e|’0¶.®Æ,+#x'…ÙÖª>|yÿ;†#dXþˆϜh1ÊG٬ٵ…ŽX_aÂÚ¦ï͛ӧ§å«?Öý»Osà=i zߤÌf¹^ÎÖ«›8‘^ßðÑϛ³_ÏþìÑÍendstream -endobj -1580 0 obj<>/XObject<<>>>>>>endobj -1581 0 obj<>stream -x…WÁrÓH½ç+º8…ªÄ±ã8GC–Z Yb -¹´¤±4Dš13’µÞ¯ß×3’ì(ÙÚȚéî×ï½nÿ>™Ñ¿ft}IW J«“édJ®fø9_^ãç%þ8E›ðÁÕr:¹|ëƒËŇÉü­–Ë×>®O.>Ïi6£õÁËkZg„ÀÓ)­ÓÓï^9OÖP](ú~ÿå'UœÚ(J9<4ÔxE÷kùË›Œrg›-®”'örpO­mÊ,¼ùÎp­wê]¼,¼5y¿þu2¥óÙÒ[g§k9!ק…m mt‰›¼ÅM\Çë à#•Q²—Ø™­X‡L$YGj§ •6dzZ΍R—,]cFa9¦ôóü‡6™mÉ+ï5*G |¡O÷r”cº¨Ü“MvÚ6žp\§¨2 †”q_‚g¤=%J›\pÿ ½‰[ÍÏ*ä½±®åyûõnõåþéi8Ø?ÀOh] ~•¢v{©@×Äei[?d`2U+WI3C&NeÚ©4&n‰Gq;SkjgËÝF–Mb&@Ú²«uڔì¾} é¶ÐiAµk¼¼ÙÝ2`áÔF9eR•q]e™–\÷þlH{ëìNgB-t¦Ak BF°AÀN»b -$ ­èúÿP6yÎI©hõâШÆ;›5¶§Ó‡ÕÝÓ{ò{$] ‰º¸ã˜;Í(ü@A¼ÉfO8MÊH¼Œx»-»}ìÎ(hÊ[Nt©ë=X^î^‹€8^‘Ý “Îý°gËÞ·Öe¦ºU`zÌÑÀQú|ôŽHÅ×½¯zŠ90)máÓi'õWÍ~zúsñù†f ½xÅ9œ)(`¶˜\Mf¨]®júåH‰Ç¾r~)¾rz$…:¼,øԐlΨ.´QªÇ£‚w(Őú[ûZÊÆ ‹pz™cZ¥uƒC§;ªÁ?F·Úƒ‚èbƒôÄÅ೯»€ ¯pN7xÖjÀ$#݀ōrõlK»׍£_Þ꺰‹‚¤ $!^U‹_1ÂB3\£Ò4µ©QÆqU˜s§¸†Áx]J2 -Ê” ¬pü•,Ê)gŸ˜©D]{À-08¢{\æ+E , {hީؖ–÷B¬ˆ|«Ð¯-,d€å&j0¼`¥)$ëX8êÐùMÌ)RaØ÷¡û™°…O"=z9Êp.³uÈ*´YºÓ©³ÞnêŽ7j‘ÆPh-² -v€a¤GùŽ`íyÅœ!XŠÊd(ًT‡´# åQ$éA2`”Ì|Ì|BbÌô’ø!¹Ið‘l&‹~È´ÝéL  -Ô¹ŒAÆ̅Õ2¥¥¼‘ÎxŒY]£PȄVÐ98€ÉgÀ…êC7ùOJ˜RÙËN)cU¡ÔÔR&$x4ªñA76;Uz›>ÃZ†u#–̧~7 Kè ;r -­ERÃ'bR¹2J¤fº@xÿø: /õ$)# ›”1‡c^â`ȼèés<£Ca¬làzž IDQªÂ±¾~`†î)Ÿ:àPS’u c|ú†ÎŬûÜ ìI0‹ú„ÌÞê°ô÷+ä¸TÂÓD¥½bçÏHm€!À ~˜ˆÛ£Ñʉì°ûì؅•ã‘«„i ŽR¥ªDv6—©Ôfªi"{*Ö¥ÈáÿÉñîñÛça&vÖtàb@Tú]YTЉmÓ©2tØn¥ÕPÐa†AXº¼Ø|·aŠÔҲɄG.bY±á<´ëL:ˆãÅ0BŒ"v¶°µ¶Ä=Ð@)nœ¸ ªuÙc >°’²²aŠkð,2(þÁéJ¶ªÛ¸t~ö¡Qhì·‚צ1a§â0áA¨Ð¬3YÉ -1Ä«í^«2ݘ›a“ÜPè\tUY…{€£ o·µ˜´cª÷~||ßz -½ÃN JqÊ4U[?L̨§°DÆâE›„A%䀪ŨZNdÈÉê‹õ¬½Ç+‘n¼qB_§{‘Éqaù¡™áEg)‡Üj; -šlò0^Üaå™ÐÇ=ÅM݅'¸½PˆÅiÅЖ`Lrqðø£·¯ílpƒŠ·cÏ Þ´>žØý1| @aƎî>|Ϲø¼ì,w¶ÀWºå-fSq€ÇÕÝǕ¸Å/™Ÿ·6E‹°&ˆJ¤êóþõóë鍼ÿK×üz>¹^,±žá›9úÇú䯓ʸǥendstream -endobj -1582 0 obj<>/XObject<<>>>>>>endobj -1583 0 obj<>stream -x•XMoÛF½ûW |r›–lGvrsœÈÁ®[)hoŊ\JŒ—\fwiUýõ}3»”(ÊAPFdjw>ß¼yô÷“)MðoJ·Wt=£¼>™dºš]g7tsw˟ñã4•''—ŸßÓô†%®Ìîð¡ ŸLh‘ŸMgÙMv•Ñ“ª5͵{­rü¿©B¾þeñ Woh:W/®nqõl±Öo>'ëèi>?§Ê“¢R«Ð!€°VŸ´N{ÝàcCµj¶ôõéË_d[íT¨šù­ºö} ¤Œ±ÏÞ't1½Î®Øk<€ë¥u5î؆|—¯IyZ[„ïÏaº2¸_)¯DSPçµ;¸,-5*ã­yÕ•ÎÖTTe©¢û´Ë5‚úŒÔô?ªn>Gn>À´2¶Ñ1u/x&AÕjÛ[OI¸° ]…mI¥Qc·eeðÖ!@äPpcseH¾‘JetOì‡Æ”•ó¨c@IÛ@H9åûFD£”%¾3¤‹*"‚†rÛøÎÀ,=}™S¡‚Z¢Ì„~WÏ}zšs¢¯èêÛ4ò8èh–¾º&wH›ÏIµ­©òXßÖٕSuÍ ©š ]©ØÚTͲâxíoÁkS2LPué'W=¢éǑІ3ŽUcO‚VƒàLj²r¶k?“O|ëQ(@}V,Þ Á‘C» ªjz*6Uùô´èëÖyöþ8ÿãùœš}­ -$ lI©<·FL7]-se›¾¢ý}{¿®ˆi™jé”ÛFû˜b :WÍÎ -°–ljŠy3.U¼_«|,ÈuMƒhG9ö-ay-:6RªTX pC­éØז‚ë@ EÿM kÛ­ÖҖ6˜Ù4ܚ1c°ÇÔ¤7pÕºª–¬mœ£%0…1_ñ•ËÏ X!¿³KòËÆ{!Æ £PÆ=;ž ™T“!bkõÂd4}ï4Æ2ØQ‰ -‹oµ/]+µ~ ¾%üñô¿£‘L`”û²YWàIpf¾„jÓ|ضlxÜ´ª.ÎÅP¢> î´U¨BqzhC @D\n/)>¥‰‘VY&«®ÍhÁsÂU¬Æx‘}«sæÇzż[ƒž…„5e«0·p˜0Óz«2¨Ù†7u…vØ*¥cOŽ¥:£VTþCìë»ÁÖKl/ˆ$ܯƒC`_õÜ%”É“³ïæ¦2Œ3¦fcâ¤Úáq3qG[{È—øêþâϼ g¿’ÏÐޕ¸»Ä°ÀY4xhh°DÙ\o25õØ(wç(ìb‹>‚ƒÙÆà5¦ž™^±¢_*¶>ƳLJ9’ÿ´†°º&çu‰Wà̸ãz# ¸>¬-N-a2£ß†îþ OënŸóó]ŏ¼slÌ!"x—±+ü6מ1û> -R…vË&ñ/Ï4vۖ´ò #ì}Þrý:€å5¦——Aô1Ö:Øà€ƒ¹Ñº`fÅ @ÌÆÈ6Ú.Œ’À‘(ö¸“o1# âcG]\´¬(è4™:aÇs{@þŒ¡8F)¤â: ºUAƒÙ±­ß˜ÄÀV°—-Â(;>”"*ۋëi” "i¯3z6Ýj¥–°ûŽÍ‡^C<ÊØɾØÏ®è۟]ÃV7ÞÒKc7¨š§çûǤy“Fe¨¥NãXßêÐ;òU‰XWýNÐùº±Æ®À€,/D.;éÙ¢ŠzÚz_qn€†Ðe¹ÝëرËZà †ÈF®wÒ·—†ƒQˆÃi»µzåDàÊéÜÖ-*ƒƒ?<ŽŠ#J Uꃞ•øîÈåŽÎ¥6Ô*‡ÆtF9j-d^£ƒ’ pÑÀ€,d`Ņ†VƆÛB•€Ÿ"»åÉâÕ"j.+(@d.£j§³Eé+TÕ!\OKT`o8©—ã$E?ÔÄ#ß(Üò0ZÖÂ<IºÉ¦'Dij¼9©•¬BaØ]˜ƒç҂UÁ5«Q(æ GQÁW/6c!„©’~‰HN{Zêé‡ê4^Øç…O#1Èú»dÃkz­Ç¯)x‘«ð2î<'Qö)êÀ‡¨Í oð…À-:fy*ËתY + ‡… šÆÒq:³Xll¬0[UgÅ?3¡ öm/½"GŒËkùŒ W§¨Û!õ¢•©Þ) #¸¸ƒ.†+'š[|¦äa„%,y…ˆzUd,—z?sG¡ñº†‰eI -i6X÷"‡øDZLJ1B·æ/x¸ç«±rwI¢Mgø{ÇÝ5Ínïø¥q~ÿøñH²ß¸·ŸlŽ—¡$ùÞEüâvòžÏÿä 7³»löî -9᳓ ÛøuqòûÉÏ'endstream -endobj -1584 0 obj<>/XObject<<>>>>/Annots 913 0 R>>endobj -1585 0 obj<>stream -xWMsÛ6½ûWìÍΌE‹’-˧։ëÄmóÑX÷™DB"`P²þ}ߤDÓî´£IFÝ}»oß.ÿ>JiŒOJ—šÎ(«ŽÆɘfÓY2£óù%¾OðÏJZ…çWÉùk¦“4™¿òƓqûß×÷Géä"¹¢Éì -æ+šLçIÚþUÒ}ðÎÇ/]¿]ÝžSšÒb…hgóKZäÁò˜ى±¹´ - -åHi/íJd’*ñC:y®ôši¹%ÑøBj¯2á•Ñä¤Ý(œ\KJ/•Îi#펤p»SeI¾WeîÈZÊ7‹Ç£1Òi2A'¹Ñ’à5ƒmâçg·Hhõ¤Õ_Ûh9q&>ìpœPeò¦ ÷3S+™³‹³R-ϜÌ«üîlh@ `öúåú#eF{kJZ©°‰÷Bµ²”¡}‡©AY›:>z\ó"E%¨@÷RîÝå&k*ä2f’3Xû"=Ò Uº$Æ}Eéy,àhš‚FÈ_:KÎñ¡o(1š÷Ö45ÝÝÐ5¢‰ezˆ&\ý“Temø&¼¯ÃE”"³2 j4HÁeÍÍÖѧ—Iy.*ÛdP,ÈP‚à%€lP‹œù±R¸úýäëÝÍ÷7‘Wƒd–+ÕºðåŽrµZI‹k\¾oŸîþ¤m¡²‚ -“z-ɬØÙRږ*!õ.æ½u¹ Ph×ՉJÆëCçºõûË¿KèÎ3жdǎ͒ã;ÀlO€˜âTù>*vz§œHˆ³;pÛÚdó°¶RëÆRŠÖȝ¦ZÀ 2%ƒƒPxq57$û/µ•ëN©~C6Áy0¬_Q6Ãìý -z58Ôיrƒp™¨ÞJY‡‚©JžF°šði-Ÿ|D0+kª`#”–é!)Ôª¶&“Õu©böcébüŒGÏŸ]‚· -ÂS°±‚)f*þ€êÃÞó®Mwïø»Û½ÆÃñ"Mé],êǎ‚L"Á!Í9ÕÈ­r¼ÇZMs[v¡b)œ¤B– w¢Ï—Ôýü/m#µiÚTäFhQvÝà Á²6ڊ݈ÈEB_(z'²X8¹ý¡ÑÊÆ5BÍB«»ÐU”ØZji! -@Qš@áÊ=³Hs/–ÆühjôØ yJGrø­±?Ð`Td¿ -a{µëKnuT ¾C¨ä²BÂ'4' &6{MwòïFjø‰âA® ÔÊi¹cEËM%^´K;J”¯ÕՃ:jпŠŠm¥o¬†;˜ôåæ]èkÄê¸(Jƒé¹U¾À©A8úŠÒq^f G^fwJC¬yˆDŸ=Šo!?’ûD訋{‰8U=HÌc5Æ$…²p~a0ÔYåS­PºÓáŽÈrÂA‹^—sj@„ßÌTP;œk”€¥„U`P®V -ûQ„À^9ëPLÒàʓ!¾@ƒ¡Ûh€:W.؁ ´ó­Äc >üºYȸ±÷bƅbgg·Ó°¼g¦Îí˜FÝ'¤(ò‡=½kÇ@ø%^0¦±ÈAo>r ± éaòüj -M ‹f‘%=beá/?;-j^Ç°Ç!µA¦!§–7ÎׇÏ‹Ï­| -V"^áBÈÏ´ ÏâÑ\ºÌª%ú¬ÀZƒŒ¬¥ß÷»Âæç8YŒÄ6Z³þáXÛ?P‰(æxÚ[±1ñД-»3¥ß•nžhižp*˜Cà]'í]Æí(ùú -þök6Z»=©†>Rè-ÇWîM),' –¨ž=¯±îXÓܙÇø -_ÚË#t/»£©Ä?ùçÅ;éâèÖÜÛ]ÍSc£²~˜Ý$˜Qègck”4lÄ=þÈõÊx‘¤L/ªÊu}O S]¯”—ÙFof êé~¹UF¹ªÆEþËý%^Aâ(¢n³…±K¬êèè-_g¿Xtâm£Sµ› ֑>h¬«khª†ŽÉîL~ ¢ÌŽ­\7¨ú1Xi{ŠI€ ‚†ÞÑà5vYH–¯±=bù“¨_ŒÌê.uðäÚ'“¥q)±Ámñš‘eAÐqÌÑ(cUÙqX -@<žŸˆë犉ß$ã4¬€nC’pcÙp1OùF%X±â ã‚h³D°`áZ¤(¾oùý gVØ3ùØj}Äó·{˘µï^x›Ý¯<Ŏ\a¬*wlÍãMñ§È±¬=>ºLæü. Áú>™]¶}4oŸ¦xS_Mi6›GEŒ©ýbÍ#²A7ý—!¶;JgxwžOit9¾jô½èœÃÁìbIÇ)ûeqôÇÑ?}”endstream -endobj -1586 0 obj<>/XObject<<>>>>/Annots 916 0 R>>endobj -1587 0 obj<>stream -x¥XMoÛF½ûWLÑC@¢DI–dôP8i܁c7Q‘‹/+r%nMrÕ]Òªþ}ß̒4Í|EĶÌý˜yï͛¡ÿ¾ˆi†1­ç´XQR\Ì¢]®gъ–›5~žã¿Ó´çXÚ}ùøÛÅú*Ši9[Ds*(Æ÷«æSNŸ.úŸñty­ûO{ŸñtµŠ6ý§½Ïxz5‹½§ábãë—â¨E´>x½½˜Þ,)Ži»ç4W›5mSIfFÛd´ÍŒ'•çöä©Ê4}º¾}}M*-Li|åTeU0äg²¥,Q5–•ITeð«B'™Ââ· >l§ŸM9ÿjû×Ō&1£´MG÷¿¾¡=‡kgØ=¥¶P†O+vÚùˆÚC¨öøL¥¥Ü–í¨Ô:å2õ¤Éë£Bš¯šôîRIbë²êB -iá¤'í"^<½Y5 ôv}Î,ùÌÖyJ;œUjÊâD©MêYÿ6·ˆòó`G~åïwŸ·wÄ´7‡¡rÊþì+]¼„9¾ÛÓÙÖ¤ 2SsÍð!Z`«horI®eȂT™ÒÉøŒ±xí•q H+oòóÃ+2e¥Œ é@$Ÿ:@tïlÁ×;bbl‰cÀ̀³>nã€D—!'†ým3U‘W&Ó;RsõaKxz}‹ëÚUcòVr-Ô9!t5¸i§« -ìb瀟NX‰˜˜I`#‰fÚkª”ô ‡IÃádmbZ­˜†‡ùjM¥+ë~2ßDñM®Ö©x]Fóˆ>ê¿kãvÿ’W¦• eÔP$bSH²Ø)Jl¹7‡è²þ™! Z.“Ú90 :jà£h ¸½¾~óžÞméÏû^Þ;j4ñ,™œex€…šðŒî8ìn¥<¢J©>2“ ó¢ÑTWÉô¨Š(nJA‚B?sf"÷߈Jj®ü©‚aHTT¨µL;k+Jü"žÛë÷o±ß}xKî>®èÕÑ­ö Ä]AÜHAsO‰‚_¨GOWP¬”‘ÅîSŽq@!ðO¬óB%™)uÐëOžNÙV&ð¤ÊŠwÀTsŒ¤'È¢ªÂY¸Wãã9XÜÇ>E…e@ o§=ÕrqÃz¸ðL´fèÀ… ëÌÁ”*'_qQãWg:i6Ž’L°‘ƒ®hïjqmøNŸ2?Àè±á`Y“ôóäáUsÕ³iÊqº¯6éYÜ0æ`£öW tcÝ#øÜÉv—‡WcÔý á$y ïcëªË„+OL¹CÕ§”*]ØR -¢gi÷9Šžw ›Œ¥„ËOz…1ˆ£8k˜ -ÓJInQUhaœcÇ5@‰ʔ¤–@¸ ÐMí©Ìmëóè'80ÑP[ªÛ;tàEÜ'é×ЩB_bnÔÎä¦jÝ -êmBñ𐛄3n'çüýh¹Ò ŽDcÅ)ÝÉ$Zœ¨‡ÍÑÙ'“‚ÐÝ9ä0i8“}óúpÁZ+Yãn´„Ò`Y{]Á!p,Œ™//åØ0]±¼ƒ\ha'n§[FYñ|¾pÑ6Ïà–1«(¦¦„s³sÊ Têìëw‡nÑ èƒ3ñ:ý›ŒôQ~·Žâqǯ*Í.´*ý°ä`!“Y´^NæsNôy$…kv, „UçRŸ˜! ™Îû:guª͌uò$»T?éܹ}C§É#¤ê¹0ÃU]Ýs²ô[¡„õmׂq¯a-à\“Ë £—ó]]½Ì†]TÚÖk íƒêJ9ÞÐ¤Ä¤ï ’3dÀÄXz4HÁî÷,mI%ˆ ã| ­VV—RÆ _"U Rô¾ÙÎQô$‹ÃB\—­å‘/vMßéÜ®iÏkʯ¬áêžÕšÉËÜGœʇ[cãBìϲGKÛdÅCÁȹµ{é#¾f¼w¯M³”i™*—Já5l󱕢ÔN™I2òõƒ‹„ÓvãN ÃnÜ¡‚>Úvã`\ˆIêáL–…ÐÖVS…bðHR̂å¦Nlù­³` -ƒRº·Ô®áK°(>* údíÝ“ï莓ve/¶)ï)”m¯Ìµ!µÏ8áöˆðŠÀ-vµÉٗÄÕQ4AèiMn¡dÚºaü¾ò\€:mº}ϐ9¼%¦ëG|Z†Q -N&f,ï -EÐÚÚ3`Š‰ ï7Óه¤Üa3c*Î Ï‘43~†øv0ô!–|ø×HÐ Ï«¿gôñþ–-F<¨`zç ƒm`óÂ9âˆÞ4Sk˜Oڜí—üòî{aÚe¥„½aúíŒGÏ(§Ì!«À4ԗ¢ðýÞ8iNsé£ÇuÆÄÀÌ€,aùÞ+Œ£©>êRÞÁê#¬ç”i°(ï¼±«JÜûdlíÙ×DLÌõ'Õ¡0i9¢‘é͌®ø}€3\|F×Cþqx¸˜ãɌgtRËÙ·ÜÈމ<ŸÄ3¼¶cÍ÷ö‹§$h‚M14·ÿ‡\;øF æMªKâ?M[5M&<â‹TßÿIíÿìm¥ÎØ4ºËhµYàqø“Að‚{gÿ -¯ð.Ê㝓x…¿Ó`Ãd=9éè[/vËÕ&Z]έñLf€·Û‹?.þ{{vkendstream -endobj -1588 0 obj<>/XObject<<>>>>/Annots 933 0 R>>endobj -1589 0 obj<>stream -xWmoÛ6þî_q@QÔEcɒcÇ)¶ÙºýÐv[¼OË0Pe±‘DO”â؏ßs”(ËoëºMLóx÷ÜÛsä_£€¦øÐMH³ÅÅhêMi±˜á÷õò¿Cü¯$¥v#œßžÝ€oÚýúõ§Q8»öfN§Þ’ +1258 0 obj<>/XObject<<>>>>/Annots 615 0 R>>endobj +1259 0 obj<>stream +xuVËnÛH¼ë+ú¶ÙCdñ)òè$ë$€•8+åq¥¨‘čÈÑrÈþûT7%NS؅Śîéªî™ñ¿³€ø hR”RYÏó¾Œ?¿ç/”ä)~kŠóyr'ZϬ)Mç¹â¬)|ÔlNÒj vÏC•XãšÂÅt[Ù' çª “ù’¼©‚5-—\íÈ)XS¾D¸çd%Köc Ôlº˜šU˜•¤óH³ +³’|’Yc°1wÀï«1ØT3V%.à[ +’ˆÕ`„ 9—;r +…˜Ý9¡$N¸'#©1»r­žU˜uN ÒxЉƌ±¬óŠkŠ‚h²¯èLÒy QÌ:°N1·ë9kÊ2Øä9YgÀ“9j<êôì S0Ø<án{ž]Ø0H&%i ŒU±s·§U‰ в )wM€¸à!ºsA#'aÿ",⎠0q°3®tä„Èáø¤Æ`¿§Õ˜íKÙ«0Ø,aë=«0,À À ‘Õ˜‡h1‰Õl6e¥Æ •+# +xˆˆ^}¹Á‡K\.gwä$%æœÏߐR€OyáÐ`h91—KŒµç8eœ/dÔc¾ßÀ)D•1RzNAî»æIɉ«O'DêX€”é!'ÀPyNA䌸NOj W\¨Y…Ñ ôõŒ›jÌ] '±ƒ…YpÄÇ*Ì=žî«1OûTø§ä$ð• <àûÈÁ‡+doÅø‘Ô˜]J1 >Tc°òL(VáÁÃHÇʳ1¬›óýåcE Ν<€÷MkÁ¥r…Ðâ2§ r¢l ”¥è3s˜sËHNå*Õ®Ò+äœüâú@ÉòKcÒÄOFkh?{³™Ý=äx&h³Çÿ&é2£ÍNþ%Á—òÕǦkí®/»Ê6nþÁÚ¹‡µ¯¡0ÄêWë¢Þt,9ó˴ʼnö¦èúÖ8êŽEG/¶§º:;z.šŽl{A½|é,õÎÌis4T‹sgZGUƒèÊѹh;2Ey¤Ò";W± ×ò4aoÛrgSVûª¼n;*]ªJùÑÂêM±=²{zk›Î4V¦~å5/„›C[tUs Õš¾WÍÎ>;jL÷l۟Žž«îH"ü¦ ¯Ÿ>þ 'Ó֕s0ÞT£¢Ù)>mè¾,sRDkOôX¹¡¥ î«CßòþO÷+ÚõÖµÕ¶ï̎ðK%ÀíÓ ÕESðµè»#>V% +¦R~°Nä´ªÊÖ:»ïèJùPÁ›õ‹ëLM]kàSóŸ +ŸP”$Z÷ç³m»[ôµ<ڃmmá˜1–ÏnˆM½cyðv {oÒ<Îí¶´zYy¤ó©?T2€JÏeŏÕÿðë®(Jÿ=¬©ÆŸŒ4\åXwV,–Nþáè«3íÝ +ÃVa®Ð&Ûc`«î×b)OeÑÐã»û'xךñ/7•øü}óùÚãál8Û·%fÛî ýª +zûm}ô¾µý}<ŸÙIq³bÈt6­Ó &¬Ý=d~„ãˆï(Lûíáñ/É2ÍpÌA¦!çÿk3û2û ¿ëõõendstream +endobj +1260 0 obj<>/XObject<<>>>>>>endobj +1261 0 obj<>stream +x­VMsÛ6½ûWìQž‰(ñC”웚ÆÓÌ4nÚ¨“‹/ ‰¨I€% Ùú÷y ~˜’Òi;­3v$‚xØ}ïí.þ¼ iŽ!-#ŠSʪ›y0§$Žƒ%«%>Gøm$íüB<_|oaµ¢yÐÿiöø‚}á*ˆ{Œ$X´ ?lGðúìᎢ9mvˆ$]®h“ûu<É&µ“ûF8¥÷ôé }U:7/–´t/¦y¶ô¢\A_Dµ·›?n)\¶HÓ8 "`MÖ{©ón9¡0얣eòòƐʥvjw"WHz–'Útæ”Ñ¢¤Jf…ÐÊV–Ìî;!p`ΐÔb[JËº4§ +¼cˆmNÓ0n#–€…ö˜òÕ!@Æ:Ÿ™LÕ¥È.2~ÜÌ¢9˜sˆG›ÒìOg Ô( Nä«eIòUTJË{^†¦Ãú£¨$°­)œ)(êÄý]«×ÙÏJ^ióþóìãg¤sTÑœÃLÁäÈ'a@ü_‡d.a‘ÜÁÊÜ+ƒ#®ECbg˜Ñ5æO慶 „fz1@šÎ©ÀønI&ë<í¼€'¬3«0l=x€A‚!øúÈQœVf‡F¹™š‰:;73z§öLšG¥ô²RV¥´Œvf5ú,Ãäú¸÷œ )zŸ°W²­9IOEi´ÄYÍQ6-ú<ˆWI«‹èNh Ú¬ÏøÜP¼ÎTçbn*•*Ym{ØNêíuЀ¥“FÔG˜Ý@‘±À£~lq‘¦kLYöØ£³§A¦´ˆÐYà°Eûø­’§Ñ‚¦hE¾–½Ù~û£3”9S4{ø^½w5Þ+Ù*°SP2rá]0â +e™&¯hÚrš= Wú2.¬™tÙ¬0ÖÙöЬ{gº V™OQºô•ó†à¥<†/ÎcÀ‘ýG$ŽæÿÀÑÖ¢ÃfÅ?Æ +)D3ڡ묂ðŽ¦qØ6§KŽÎ„aÝÙ)p"wFøÝ©ŒJe}E;Zç9¸±Pˆ+]£‘Ù€äÞ× +3zÇGâ¤8ÂÁQøÔý„hõ8AØ}/M&Jfˆ†OÿÔSÏÍ#í å. +ÂYu8[µßš×P¹lªZøö9¡R”° ^9wâ´séÃE˜m¸6Vr#h_ï}6ù+â&¢ëÆ1¿@Ó2îïÃä"k`gá¸/[Ê iã0Aásgúd»ÉÔȶH=闃æ±¾T‹ìY:DÁØ(” Ï<”Ÿƒuq² +ôôÚ\ƒ‰W›¼‹^eÕAã'}HG%ÎÎ¥íÁOŸÑäÄM Àζ¯ó´þ$sìZg÷ß®Ûô‘¿#4çOë÷ý÷€ÑGVBÄhô ‚.OËl’Aé—Rï]qÁ st§š“ÂŽ–Ä^Ј‘·3‡†ž&ÉÓ-Q¦*NûÀ=õŒžZ l؞ Wž&±–2ùÓ­·4y±×‚° ¡ðœÊ[ø׫6h“ÖI‹®cŕb-.O”«½rTà¶pðEâVŽ¢ÎpóÐmíQ2¿_Éû¹¸£û8¹_¤á~€Nƒø<›]#2IÕ¥WLc}Ö֚LyŠüÅNŒ—ÙT 'Ú¢R0 „#{T/œY—P]x†ZyüÅQúno UýH‰‰¦G;ZêƧ¾C!—dY™­Úû;‘oô£sÙ¢2†¢¹²Y#ytðX +w†€ÖΗFÅÍg+P0ÛQ–þŒîN;* ùpâUË7BÙúžiž=¬Þn²ñ"XÆ îUÿ,“`™âîÎ[Әq?ln~½ùí?¨Gendstream +endobj +1262 0 obj<>/XObject<<>>>>>>endobj +1263 0 obj<>stream +xWÛnÛ8}ÏW ڇMZ¾Ä±îSÚl›n¶q±/y¡%Êf#‘.I%ñßïR”%ÚK.9·sÎÌøçɔ&ø;¥åŒÎ”×'“lBóÙy6§ùj‰Ÿgøo%•áÅ V/_¬V4ÉÒ»Å/0¹<Ë.ÒÑyvށ¿lÒ~IgÏVdzGÉb°Ýq<1²ù$[F«×ÝÀðøóœ¦SZ—Èo±ZÒºŽ'´ÎO¯/?‘( ++Sz›Ñ­Ò¹¤ÞSé¨nœ§¤me6¢ªÔhõ³‘ïI肶RKžZY ¥•êIT‹÷‡wë'Mϲüžî…õ*o*aIi/m)rØñ;Ilu-µ'Sâ&}¹IQ-ڡüÖÔ$HKÿhì=^i±•áÚ^Z·—¹W2¸½6Îï`ÕhÙ·œã2‹Î5lô“ÏèœoëÓՁÃÝ[U {èÙâ4”8V.&+Ì!xzTUÅN­ôÕpªt8tùíÏöÕ!E?[€{(Ú;©‘rãWÎMÀèQh†rS×%^¼ߡ~QZ”'ß)¤C6Þä¦"Uï«P2á•Ñ„²6Ày•¯½I6´¨åàÍ΀ñW$ˆ»¦z@ä9nHL0B`HL§s£½5U…ó›Ç5ð»þt3ô8Vªmccˆí%P«’.£5Ââ‰ïŽ?CbÝ§céó1’9Òþ”à˜‘wM¾ 7_-1gÛchÈO +é¼Ò1ŽŽ³´—B‚Æ5j\D`b‰s(Oéøã +ÿ€K4HW`¼*C%úÌc°w/ìVú£X2¶IÎCzPÀ¸l©õQh 76 +×bàtc(rUðÀjéwñ1A©£ïW7twú9w%¼ØZQS2|÷Ž±†9g+Ñ `ŠÑ±»qÅ_Á·2¨M'_'·A» wŸ0ۘþáúµÈèk«öžqECW +Ë<Ü„„@Ð)?ïhFW‡?ٝ‚¢uÛÐ:¡s_ãâ'á—å‡çÿ"ƒXi/ò{ û’fx®S‚î™Éè’Á|/&'º|ÙWÊ:>–vÈÞ5be§¿%… ¢4.­G Þw­žÆ+ÝȊUÈÄÕÅ#C>©0!ÀaÿÂÌ£¶÷FI½bb#Ñ°9ס*±©â¼žÒ ŸÇôèl{hi±ÃfÜ#ÌÇy>šñ¯4¼j[ætqž-Χ´X®²ÙEh⷗×/yÉ +‰^™¼áÝ($ÊwGÓ>†®Îh´œ€y­j³a¾œgË>…òÅœïýµ>ù÷äØô®>endstream +endobj +1264 0 obj<>/XObject<<>>>>>>endobj +1265 0 obj<>stream +xWïoÛ6ýž¿âà~˜‹5²e'¶;t’®é‚5?Ö¸è—-Ñ6[™TI*nþû½#%ÙÑ4[ $±u¼{÷îîõí ¥!þ§4ÑxBÙæ`˜Ìf´ûaWø0¤ã4MŽéh6Åßél‚¿­¤%Œ‡8Þþ¨Çé,IkãÔ¦ùñóÚm:L¦ÑötþˆçÁِ^Ó|Iir4ÑXŽ'3šçÀæYŸê/^ο ép”&´ß—¹mþKcF™Ù”Â×ÆÏÞZãtRxiµðêN’ÔÞ*éhi,7Ææ$*¿Æ•ÁÆhVþò¤³‡±cdZª>µrT䢤­Ò ¥ó'|¸µÈÍö™èWÖTåÎöaª]^ÖÆy·g¼ƒ•k÷š§éao¤ÅF¢˜ÎՏ¹y?FGä@ Èù™Öp¤rÊu-]O¡ÓÒoýÚ&Å·~댺,HÓ¶'(Dgž` ´Æ›Ì͑6Æö¶Ìö8þ±'íÊdãþ!žÁÙ¥)Ãaœ‡ÃÑ4Ì:øj š*ëä+’"[“YRs’62[ ÀÜ8”æ[¥P<ž“(‘Pi•ð˜l‘©Bynx¡óz¾ÃMïÖÊÌ÷M¦ãdÄ£“½T«ÊÊÁ´8µ5fmSézHqƹ +ÞÉêL•¢`†\)ÅW¥WdtqO[Ì5€}'ì}7›/¬gÛ­òkºC×ðø3'6 AkáèƒÒÕwrUYëƒpÈï^j¶í&Ƥæ–Ü¡\J/­pÞV™•œŸCŊà<+rwÀQ̒X’]›…JïÏ2¼¸¡ÏP³ut)ýéùÕM˜Ò€¤žä9úÁI—ÐÜt¢®Ø›_óU:ãh{º Éj)óàXØPå™Ì8cÌðÔá©Ç˜zXò‡åÚQ#òœÛ>¾5¯Ç…d,¡º¤ÏMÖ WË:Ÿµ)ÒžT»Ðjòšæ(sªn’»Wèûý¦Ø@+Ìâ>~Ú5Ió=÷ê+B†£ŽÜˆÍSÕJq b^,Åa!qöÛµB“/ &‡e'ÎK㥦õQX’ã†Qœ½¦tÊâ‡E‰¹ìnG•«8öº¿ÖPðO¾1LãáQkbŽ!n,%p,¦ŠÒ¦8Hm“,W¸6hîEü ðû«6[MwÂ*S¹ÉçmŸÓ‡&A ”ƒT@ao_F¦%õx´ªÐTÈ´÷ŠzM0öΟwy…€õW e"þ|sqÚiÙp8¨'Á76ÃFŠX5Tb‚Ö:ÇՒß3Y†…Aá€;ïua3œÆØCCEÁbµÓ¹Nตh×Ø2"7VÆ'9Â굆½0|½h‡ØVb’ïé / °áøì¡3èul@ÕˆÊ`+˜Œw_¹x¨C~¼ò(Å5yπËñäbý¬ü:bM'~݉Ùsû@•°Õ96">‡G¢ùÆòáùþEÅìc ١ã\³„ñNø—ÑM¼zòµuBï'Qûb+n.^ÒtÒn‚† +&Á™•ðÊÜ6öq‡ñ¢ÙXþ¾Œ ;á—‰;ł9a®ãª„ômw¡Îa°4Ea ŸD…g$]´øW8Œ?lpِ¿ ÷îÎÂáè8™áMaïNÿI«o µáåNãQÞ5ûó–pqòöóËw—'ïÞ ‡¿Ñ¯tÃ%´á£á²VZ3rÜöÌRžãx̎ßK-­Êè¢VbƇÍØÀen_þ¯£÷ƒÐÊuSºÿ‹úóÕÇ?ß¼útý&]0æßã¸^àÆNN-®ÒÖ»7ì÷üRBÏb}fø€š@É^K¢»0ú­Í‚Ç¢ÒžüQ­Ý›4ÛKä­Á›Z‘½ ¸S +³BY#{íŽ{¢¤{>söùÁp?ä&øœÍê{F:9N&Ç)ÞgÇÉì5–ZÞ¿9¹8=¡kk¾à²‚³po +Î9¦¼†ÏÆt8â…8ïלìÞµž¹ùŽ¦GɯÐxwÎû“cöýn~ð×Á?Ïڒendstream +endobj +1266 0 obj<>/XObject<<>>>>>>endobj +1267 0 obj<>stream +x•X]sÛ6|÷¯¸ñ“Ó‰hI¶%§“vÆNÜÖÓø£–2éC^ “€’õﻀ”BÏd¦MÆqe····wô÷£ ñgBó)Í(­ŽÆÉå%í¿˜5þgL³ËóäŒÎ/çø~r–ÌÉHÊqvŒ§û/ñìt6K.âÙ)ÎwGi6MÞ ?¿^þ1¦w´Ìi’œŸMjž\Ì.i™ù«Ç´LOhðߗ‡§¿ÿ|zøüø~"§ßè¶vÒÔÒѽ¨$=I«Ë4öÍòn?§É„¯…ûGÓ¹³ÌNnÙB·eF+Iµv2#WG¢,é^ºëۇU"-T--ÒX+‹08"•!½­©F4KÂR>&±Ò™Ð²P–øoMaÃ#üY2EV'©®ÁÇä4-?<žÞ>â u*œÒµ¥m!ÁÎdŠ?Àv”ìñ+Y¥j@1ÂiC[°™0|*9$=•.=-´u–´ďG>Þ/(N¬„•‰´c:ˆ-¬Õ©LÈV¹‚$H àYf¤µI¼q:KÎ9£Î[ƒÀ†­jG:§´Få*õI y~ëQ†ú@Q¾>'{Ðá]áN(W%@Õ\I ÜÈT›ÌR¦¹nÔ½Q™$ʇ»2rnäv 3”kST¾Úw ú¢êLo-0+Yƒ³L6Ñ4ÈÔTj䀇q›¿¹Yi6*åÏÄ°º•Øy5I™É,¡«šä‹¨àÇs. +ÃÓ]ˆQ|¹k$G¯pÐV0˜=|+¡êAž¥^)c’&!ˆ:G:!V´ãn_C†#âC>ŽDÈÖÑjǚf¢T½Æ¹Rë綡¯'%H âw¯ŒY +e}Cx”dÝV*…†}4µï&Ï|!6²ï+ß|hþP¿¼Ÿ¤¿ƒAG~ƒ˜F~o%z]†ÂpöP˜(5d†CFº‘u ÒaÃ'%z‰ñí¹‘6¡/…‚æ%(DŽ)€dƒçŒl ™š±š‚™9;<Ì«ÞYâ„Ïùx«ÍóÚè¶9FÏÒq(õ1"xH¡¸Ì#o-_/^íë‰äXhPddÕºö­Ç't>Hâð]‰;¼…`0mr;Žçd +¢hå¡6a³Œ”] Û¡CäñrÏÈ«Þ`„Q•0;ä|x¼’Ù(£ëŠ«éqÁ–¼P)ÍÈéÿ‹öä !uô õ³€m{j/7Tà\ ìU­Ð‹,O ‰>Þ¥þÖ{ÌZÖP-›®m!î‡Œ§T˜AoijA;}k!‚aC4ðOp”¡_žk‹¿®žnèîáãMã×7>… +6’¹¶³vÜòìt‚Bè0ۆʶЬ gtyXŸ¿ŸVÁ‡v¤ß)^3µîÑP|Þ@j£m  +¹ú£Ÿ7Oÿ€ã=??V㠔ìö-÷à÷VÎ"’'øäÏ%àŽÇíš: +‡£æÀ$XñRA„ÆÀuã(ì«Ô5lo\y×»zéëmd…ÑßYÓ ; x+֐-J +\Aõèo§S0 øpÌ Üˆïނé.>sÉñ ,î®áˆÁ‚q˜ÿò@`‘ã¡ÐÍã ò}\@ú`_Oð·] «R¨¿i=´ŽÿYø݀Õ= CÖ©hl‹Ý¢õéÓ ú¤×°aÇ|Rõ3}Bè>øˆsë=¦!ª-¯VGȞ †qóù~D}óâ`“2dû™…à׸\¤r˜‡(­f÷3-& ,^ý/nîÖ>&…a<ŠôKàÍKZˆz[öøс¾X«Ý ð=î ëÞ˜Dp ÀÈ^0.j–þ?!×ËAh(‘YZ†e¨«›Ï/„û‰øûÎFVè›T³¢^àÝû|ɏH—­Ÿ¿•dN”­0Ú~rlñ\1ø±*‡¼ÀLRÞ©ãó÷ L††ÁÂ';J~`‹þîûéïh‚1Ç;Æè û7o‹<7ºdïyÚÀvéÕ¿ßÕq|:çÃW¨ÍAÏ÷iKä«1«jÖe@)«6Ï¡^¨@f±"#<]È`܍·ƒ‚Äõës µlà;ð ‡Oú/¯Ðø¯ÚšÇjG˜/#Džs8šŒG“ Â2Õ:^.n‡[# "I2ÇÆÌ;(½rXö8Çýjup(7ºòÙñ’ZBµ`’с–0@5­5>ÀZ±.¼ï½6^)ÔÃ>û™j"UÝÊËÛcdžTè%‡D™óˆü‡󴒼«0,ìۼЀè`&þ`!øU GäK£hX-/[[jŸ¹¿Ü·§J8¼#… '£0ÒhÉþmæ‡êùÉk±íêvð>êT%GšËRìP<•ÈäW”Ð3ŽH`Uâ“qs¸MS¼¼…`YJýèaÓ痛°·à]¿VFcÊ î@Ø‹6`ؔøÊPz˜B!ŒH!`,¸˜p¯ÇèÕCsYÈA§Á6JÞ=YoüzÄo2 +‹[\èù¶Ã®Šòƒâ<<®W/¶î8ŒÍ…¨VÃU‰W‚(Yñëçàùjˆ;Žvrß'3ü&âòŒfgÉtvÁN±¸º»¾¢G£}?ê/5‚,“:êÍÇømÃÏlè|~žÌñˆ1›Íøé›åÑ?Gÿ] ¦¨endstream +endobj +1268 0 obj<>/XObject<<>>>>>>endobj +1269 0 obj<>stream +xXaOãHýί(…/Œ™$0!ŒV'w‘ ÑìV²têØí¤§ÛÛmr¿þ^uÛ$p×3·7Œ ±ÛÕU¯Þ«ªÎG}êá§O—:Rº9êuG#Ú_ì +z4àr1ºÄõËpØ‘•”]/°¼o,ÿ|wEý Zä°;áÌ?ïÑ"=Y¬%Ý?üíÛ|1§\òÓâ÷£ÏwÔï‡õgƒK¬Ç2åüsÂïÚÕ¢(vT˜TT2#¥éaNߕÎÌÖÑlApÊXôà ›ˆÉÛ<¹ùš$ߧ³Ù"Iæ¿Í“‡óA’Ü>Mÿ1yš'Édqóއ:ã[=:ëŸwìNjt%”vTÁýé#³ÌJçx¥¿µéZiIZl${°Uº†§¥PÖu‰ƒþàTƒÁÇ­*¥ÍÝ 4Y]O¿Í½ÙU†ýQ–J¯‚’u›Õƒa—á?™VTíJ•60šgG…z–_[§®ü~÷â|@gƒ/Ý~ã-jþӍ)wV­Ö%'iò‰úWW#zP©5Îä۲ݲæ¼{¹uüã} ‚Üâ¿ '6%â>ä’ü–;ï~'$ÝÑMÁQ•ŸèæEZZÜ<~ž>ÂiW‰ô™€lK«QìÍØýà³OÒ;J4ø;2ùAZ$øb˜Ÿ©Ù”u%-ÓÃEm¿Å_ýÊ.ÑÄ"kwäÖ¦.‰¤gYVd4Ø®eêEeЪe4 ž‚„Ù+ ‘M1·s𵂿E½Ñ€ª(Ìö- QÇSc¡†ÒÀpð0Ø@ý–¥­ZxEƒFÔæÞA'Ka½îÁQQ!\4P›+á: ¿Ë°Sç¸CéËS؏ÚçVRKëÕày†4eR›Jzº(;ä`&\Ý®9Ê×ð+£ã‰\JÀ–|Š&#êØ»ªÇ(‰J-!Œ­ªÖr»ÏèAh±»Ý׆áTlÖÆUq·˜¶¡d™<—6³cΛ|­¤v˜/ \ý>J6ê¸/ǏO“Ÿ¬¸ýöðõ—ÌlPKÿò“¥ÓÙÍý¯·ú…Ýf9üì…ëÉ_§³Žï“§Ùxñ3O&³Ûÿum’ô^µF¹ÑFŸ•VéÊÓ¼¥¹º,­’O±ˆb÷éÎ Œ­ ½kdŽî„Øæ?½qÚQ‡aî€EA©{£ÖùÅP:@o”Ò‚—"óbÇ~ìûUŠ#»t½ƒrQÕ©M1YlÜ<ä²7yJ˺âåhy–+·ÑhØ"‡ )Ûa•†ÍP(P\X?” U¸?/’CКø¼>8žÎñ!Ã:( «€”pΤ +U„ÃŽ"Ðz³ˆŠ2#S•«P[ör½áÞ%¥•£µÙþÐòÒbT\ ³Bôøô¢R`¼”kñ⧆ЩӋ²FsÝáÙÁ´(GÝæÈYúá·P³P7’€Ó)©Š®–Ø× ôÐ@—,#µÏŒã¥¼ï2¾›´Hø^lÅεŽ)QThW«5ïè© +¶D탛(÷[MÛµ ìß󒭿(‰.ôç™2÷‰Û±¾:ÇÿYOa @á؞înÞF.4ãëE\ÒÄsϖù\О½=SöU˧܋‚±˜xrŠü´xÐ-º¥QØ·,A¿ÎnΖ‚uÆHnt_G¢ §LnQ¨ᥦS„ \’yÄÅSž,<=¥bN˜(áÓøþûø7̧‡„*­ÁD"a£Jyäb|æ4W܉:Ëâ€ZPlùÕÀ¼6ƒòZã›ÄGô;x¦fÊB“êåÓÐ!f™¯Bì˜C-Gñ(ëe¡Òð|W¾†±Ô·sòû¨ð0êù½ÐhÍóà¡xRÉ©3«‹bÍ¡ìÍy/ç716CŒN&ÚæÁcct¸ x&*VŠpüx—OW§,ï[厳Ukì5œ$ÍöIâv®’›$Ik vºâQךÂÉ +š²•$…СC¦’„g´D¹wI¢±µ Ñzdã#Iƒ´•+ eáî\á$€Æzô–Ž&ÿÌÜ Ύg7áI=c‚Wåñ»!cõn‹” ¨³šð¢R|,i‰µ‹ypq¹æ¬ A+kêJªÌJ²¯]£¿;æöù—Ò¢Îâ2Ø7yOHo–·ð&þŸŠx§4½§ôßG‡‰Bsr³”Y˜Z£Qí¢„cƒ]8?\ˆX@‡ÇWÖ͵R>/XObject<<>>>>>>endobj +1271 0 obj<>stream +x•WïoÛ6ýž¿â|˜$²e;±S`’ØÝ $n«+ +h‰ŽÙJ¤*Jvòßï%ù×â-]ÃfÈãÝ»wïŽ?N|êàŸOƒ.õ®(JO:ÞpHۏü?:Ôï]z×Ôð½{Õõ|Ê%-°¹ƒã›fswàõšÍ8Ðl¥^÷úí?ø×¾7ø÷‰·<Áåm¿‡CÎømð†+폺¦`A¾×ïué +Î_^ )ˆÇ +¢ÕÿQv^´&m +Q(£©0d3©Å+ ZÊZ‰¤DÈ&ÇomôE–+](ýLÑRä"*dîý|;éЅôpËÖø±u +–l1I̚ É‘f‰$•$¥-rQHK"IÈ,¨XJ+±¡ÚÂ;ûá˜ÉcëäwºÞeß»Æÿt¾TÚ4ñÓÙãӘÎFŸ>hY¬Mþ¢3ü çܔÙ/–Fwï0ŽkØæ©È2-RIW¿º¹hç˙X$„Íde¾’ù{nèöØFf²2ùŽ¹*†½kÊ<’?aÛwØ$&‰ÍW;¶>;¿ËØÙ!¥£¤Œå±Ž­ÓÙíø÷Éôï›û`ü4½ ÆÇ7N¦w÷ŸGc †‡a˜•óDEXI—Æö}Ç]îâìx:ú^=A5!17+æ°#ù¹[jhrZ§ˆ"£ ¡4x_UŸHŽZݔ 'UXb¾Õfkrœ’Ð16`mn᝸"?š-Êr™üž;ìþ©mÏ)[‹„¬ MsI¥•ñQס- ª;§³&§‚"©QòIòJ)``²N*-˂“pŽÚ·¯¶){Wj±*óDþ¼:MM!‘&Q¸\­—NTžXÊDŽkÖ;4iŠ,A;¥ˆ–”ó½ÌΏ;i軔Ÿexu™Î´.j,&A©Ò*-SZCI¥YÎ$Êd!N…ŽŽ‡ÅâšKlrci'¯”e4œ¾ÃðñМ ‚€‹†};‚»œ8Ã:ã n¼&¿Ïmç¢ê;½®ë?è|š3·•m¶?öÉ÷y'šFwÀ-#XÖ¦\òléÁü-Øô0£/JÇfmiP½ý¨ÛAFT6Ñ̝ÍÖ݇0ü2™Nƒ0œ}ã‡^7 GO“¿ÆO³0Nη>´˜éM¨=¯Ëîlʑ34y¤›8Î¥Eé ðz‰UÇ)=HE-áh&Tn=šìUÍ_«Ds[€“”ÜhnTz‘ 4¿2*JÎœÞ ùœb™s¦ X¶4kg0¸{lÃ7©W*7šIÈàÁõ…z†ØvP…I‰NózpñZTîÉ¥B«g+UߥÏZ½´ï•._nË"jodwÊ7؀÷@†u4Ñ½+*eoÓ ™˜«D¯ûñ0( ~·•E™±˜‰æuß@P 4 9cÈË`qÄHä Zaxôprº“'(ôR¢àؙjfÁyöZ)L'Z¸”µõRA”­Ò%JÅZH¦²¸|š\<51BzÍ`ãT*Y÷҈Šõ膶ûpQ‡R)Ð- ¶T›¥yáŽÀ! +[Њœ>îÚl uр­…SìFc¡òÁŽÑ–óo2r”ÀôÇ ®ä³®,L‰’¨ÓxÂûnŽ ŒÒeÀY_@›ÝšÀ‰sªô«ëþ¡þŽ"À‘è;ó‰C¶Yº¶( ]ËÓPÊ·q{À`BóR¼e¦W:GP‹ÍÜ ÆKfÎm–ëX畚n==oÜܨ|­¥ ÆÍi ÅMñ@#wªÂÝþŸeqSy¶ œhÐD’)§¤òañ,©*¦ròª’Þ©è|ùŽßÆGw§Oo§‡¬ [M2÷n`":w«©•l6S1…“^ $4 ­…õÒý ìG‘¢¢žº3t‰Q4r~ȓD9«Zþ^¥/…Å€!5=«>a6‘Ìv£å^·rí çsUÉO`6ÒÐD:œm -ð†PÅÐm'ÛªäÁ±V'bžñ7s üæªûMç«pµÜh\˵?÷~9xŸ]t/½!ÞiÈfÐƳV™e&/è7ú*Ý|»Ú¦Ãâ½É/>/XObject<<>>>>>>endobj +1273 0 obj<>stream +xW]oÛ6}ϯ¸èS +8²¸v2`ÉÒ¢֏Áú’J¢-6©ŠTÿûKR²¢(° K»ˆ¼Ÿçœ{ùëlN3ü;§Õ%]-)«ÎfÉõ54;üό–««ä-®Wøûåm$mqv†ÛýîìÕõñ,ÎwGéf‘Ì;Ýïï6gÓO3º¡Í–æÉâ꒖pòayM›Ü›žÑ&;§øÏ^iK¶­kÓ8ú“¾š÷›Ÿg3º˜#`\“ͳlpìåå%üÇw¦Ÿ4Ÿ³Ó‹àõârå½ÃȾ9œºŒ§Î÷ÙÖkç¤,¹BÒÃwyÞHkÉlýo~<|]“õ‘$áÒ ÍWìa_-’‡ýÙì)mÌÞ*½£m«3§ :§Ÿœ¡\Ö¥9u"-%`[°p9 ð]êÜì µÞÜZT©x.ß[%Kö|‹r:ádN"5ÏrB_ÖôCé±P%²BiiÑÀ²¥DŠª¡¯ÒÝ=|[“>>ž«D&ødã ÿ…¶¦! 1ÒùUrɹ*“äµ$¥ÉÔ²œïã{2š£AkÛ:¡ÛҚ ‰q€\fù"2G•t…É)=оPYÐ*̎Ü;ñ„ ëR Ï%òªe´“È‘kã|Jƒzd¥’ÚMC3©@d©”švê? :=ò!1Aœ¯ìÿýåó·õfM¥1OmÍáHÍ-Ì'ÚÒ=°ÃeVÉYS¶\±W7¤Ë<À¸¹ËŠíSȄ•ì æì|ÞÚ ã%Q–o+ZÚK|Ÿ¾®!PüFr£%×þßûï£t@‘éKhÃ-Qˆë{Ӈ\s7K“‰¬NµtjuÉôéjƒû­Ewp¶ûH;ƾc©¥MÙÛ°°Êµ`–<¨n̳ʏ„x6@$Ë|‰Œ YWâ€Ns#2•–‡Q¶Jÿ”H阏' Òâp¡«Œ“Cj!Ó½iž@ž@R.ûxLhm òÕ¢šÐÇ÷ãÖþð|:F—jr·´Wè$pÇPeÅâ²öìÞ+Ç$’Cdt~;ö®¹¢µÈž¤³” ͅiLëjåŠÖ†ë@kH¤ã°å¾‘ȃNÇë±$¶ó؁ø¾mX9.¯ +˜1Fà^–(>SÁgÇäŽÜFbY#;Ô?¬B¾àv莧#87 L]”8ž»+_Ðń¾Á¤ìHÄØ?¶Ð‰žåð!ÄS ã!7•€ä½Ž$°d„ªx²×rVD =F)0 F· NVf¨;àwÞxf´kLÉøG¾"Âá¤ç‘O/l!PŒ]6©e¯>ÿ“•|<ß°^@…}â³^ +¡[ÛÆT“!ïDZÕÁI¾d…Ð;¾3d »…Ô‚Ä^@ö  Ä(?Œ*šŽ/ /Ë™Ôq}â®êÌ9’°,GÙöÓÍ݇¢EŒ²Ą>z—óùÅüaDä¯!¾²ôÒԏ‘8Š†˜ùBØËw‡à\¸–C ËCî –‚]DÖjWHPº­ª0ÉQ8y¯ NX©¾‚FÎd¦$äiÁ!I:Y¬X»|t}<@ãIDÉû—™˜"ÊvЍ}TµmY™|Ú(+Kç„Ò–Yiýòƒå¦ëxª©*ô£M%zBxØ%†g͊ñ<Üզǩ­tâs«́­Úµa›@€–RñôV܀ï)êړÚeUÆà1 +e?p¢ ¯™à”ö|Å_„¦×($ϳրŽ~ØtÀ™h§C®^X±ÞHiq}æñ·…@2Ü‚bó˜ƒ{ÐYa´²~trÅݓڍH¼@½]7Û¢ 6>o¼rsl•&\mÚªRFîû*u“›E=(’?JFe§ûùÛ ]^«a©‘¿ZæË ¯uÓ§cÛmÀ $&mT¾ƒ`~wõfÉ 2rn%Opn6 ?æ/i(8nÇqßÍ=°Àcƒ$„=Ì©°EQŠý-3I4–Ù‘Ë“g•ˆ_˜‚ Â,M7Wþ7ýé7¦A­FŽ=^Ž•£ Vûà„ÎAh…gM˜ž›è@÷T:n´ÿ"ðùc?Êíį¿kaA¹õy̙þáŒxE@·3¼cWÀˆPX2C£B-O€'’²W)束ÑǓYWÕg(4vöI|<â]ퟘçS,çÓÒk9üãÛóïT g´—Îé§ëxg¾ÄSûúŠ–³E2[~à—ÓúöËÝ-}o /œto²¶BZžŸlö¢»r±šá9ý¿^•üÎüÝ;r±Z$+¼Ïgìcyî?nÎþ9ûÇxo +endstream +endobj +1274 0 obj<>/XObject<<>>>>/Annots 622 0 R>>endobj +1275 0 obj<>stream +x•XßoÛ6~Ï_qè“Ċå8þ1`ɒ¬š¤[\tòBK´ÍF"]‘ŠãýõûŽeGi±-œH&ï>Þ}÷Ý1ߎRà_J“!)+Éoڏ??JÃd@£ÉY2¦’ÒÑ8™5O=>ãÛÙ«ÂZþvL§°?ª›ÆªI’Òh:ÁïÃQrN•¤åQšŒh˜’!¼L‡íƒw‚§t6ÃgIÞø«Ëy2œœÞÌ(Ð|‰³§)Ís¤ͳÞí}Q:7[KVfu¥ÜŽÌÆ)£- ÓÚlÉʌ^ªU d¢\ˆãù×£õ‡`˜ç½¥©°[–…´–”vrU 6ÁËNo>Ùy8A<°áÀkV(©¥R쨶’¤ÎªÝÆɜ6ÂÚ­©r±x¨™% ÊÖ¢(¤–+yZI»PI¢vkXQ™wK¥ÉeÑ`LÏB¸|ì‰ä) ÝÍ?Þ>§ÇТ0ZžðoY!EEN¾8²®RzeɟJ•›B¶Ph!,½v—ÐlZ›ºÈi!‘=Q¨dÞñïÖÂÑV¹5*=Ü^Ò¦2Îd¦ð/âaIñY-{1ψ°XK‡8<‘Än¼Rš6…À§G ìmÈNhQ;ÒÆu|/ Üò³¢|¯J~«¥³I³m8iý‚˜î·A@>Àä +h_Â6ηF¦Òïr²Â‚ÅÎ;Åbà¶ÆÍÖÐVìì/ìå֏~/4Ý^ØؚSΨ?ß}øíþê:>¶Ñ +¹Jh¾†uüÒf«™/¼énîmøcÞd û“5òƒÃñ„Øûž¤þË~$ÍVZ_02@R˜œ¨‰z³Á©20âė +\"3"Ï9wÈ\UƒŽai:B$œ´ ЀšñòžN²Ìj¶áÉr6òÁï>üÈì¯D†à†ò´›B9²–>¢çcZàÕÕõ=É<˜uŠeO÷®+•½£©÷AÏ¢¨%#dÛºp¨JaŽ‘ûjZú(ô­Ð?lLâwbÛN“tFýóa2åðÿmêX7•\2ٍÏÛ§¦ðé:h”„Ï Qðäwœë÷÷_æ÷Ȥ c©ñøJbæÒ UXÂ;Æ«´–U'Ä\M\âÍëù@•fç(OÙmŸUÆȞ(=¡ƒ ¨`½Pž%/žÍ A“ßl?CB‹®*yÅ eÍ¢ÅinùÖU™‹¢Ø»ÄÂ0¾ø–«õZB[lÚDnõ&ô5ÐÔ)‰žQÃ;„q)À®&8Ê½ÏP0‚y\ye6æNÔ­”öŠÚh–{‘P9¤•U6P©tÍ4ÃS€G²z1â„z-ÎÉrƒ¶Áuˆãòìe“W +P©ºaÆkeòèd~ⷄ#€î}iXÊ"x²°ékµå£¡ ‰l o™Ù a‘Šñ‹Ð#¯<ô[•Uƚ¥c*#n¢¼O:³ÀcC8ŽX3őb¯ì?zlû@t %(c)ú¹ĖUŠ]Wr¥ D;ø®Ð|qAá"8㣢rÏÌÖ[‹¢Ûm6œyBf¸ÎBOò^E{¤†t˜ÆJB€TɄM_+´D!“ +Á­diðÕë¢èœšË‘ ]°\Û ÷¸%> œBW¥•“ÅÎ[´2&'•KÁb¢øt§ˆZçèt¶Î֘0ü Ó%Ç©•ËymsL@e1N€Ý¾Ûø @T¦ÆPÆéSÖÖ^/âø6{i\ì[ärÑÈo—Ö<ÜE–Àȅ*ª@“R9¯üp‚Ž™Ç•&¸>“¡f¦×iñg<½Ќç>L²gCt÷ódŠŸÐ}vë';*äsÔzôkӈ‡aSϏ‘AµZK˜ 1ûޏõÓ&âڏp&à\¶b†ÛÀ=HiÓÝ}¸[M¨ær„£Â˜§zÓ.Œ³È,xbäâ)L&ºêow2F"ːVÌ_t)3O<îüµÏËÏ3·Fcô…Üh|àúœ†Ýg;qcŽžÞ ›±§OСn›‚ý ÔÛӐK¢Â¸‡H•†¤KŒ&]¿ÞɞPh¾þ ᄐõ¥ÃîR<µbRª–OŽN‹;ÎG‡U©Ñrd‚Õ¯;Àð‘¸Ï‹ö³/d¥QmNhRېø?øûÝøÅbù™ø•µu\¼VúáŒëµ/ª¬KÒu¹`ÔË}™Jý¬¢íZe됶qLN‹Ex9Ü£ ²œýŽ« +$«|#–1„æð÷L­ð +Ÿ«@,?2Æ ðü5ì±÷xì£ÁA ZBŀìKðB°0 •†I® Îv®oÚzv4è/|¸Ob¨«LÙ斳£no–%™GU¶æüXáÁ)H_ü}Տ«Ϟ åS‡fù²vþþÈt ïâ Ú ì¬™Ü1½4âæÈsÿ@ñ¢Q äØAèm.vý{ÌÚ7S_fʅҍ/nrÇdN›´§cÜë§g4O“ÁøœUóáâöò‚>Uæ+æº2Y]BÚ{v?néOÝWwìÿq³÷uö£»üh2J&cü ƒíOÐëùÑGÿhx—fendstream +endobj +1276 0 obj<>/XObject<<>>>>/Annots 627 0 R>>endobj +1277 0 obj<>stream +xÅWÛn7}×W üäÑZ«» øÁŽ“Ö@m¥µŒ @ƒÚ¥$:«¥Br%ëï{†äJÖF(ŠE“X‘¼ä\Μ93úÖJ©ƒ¿)ºÔR¶ju’ ‡=¼öÇ#¼vñc$Íñ`<¦Ã‹YàC‡Ã~2ŠG{ƒ¤WŸíÀlR¿Ä³ý´“\þ;³½Nº?Ú&éI³üÒê÷Ò¤O£1bXQÔM†áCA!“A2à'=œòûøàDtƒÁ>‘}Î7ÓÖŧ>¥)Mç€i8Ñ4÷‰uhšO—’fÒ:Òk§tIN“Èñž”å÷²³B’­Ökm͵Á¯2³[;™ÓZX»Õ&·´]J,7ÒУXÍß®¬Ì‚}<Fþ4}iu¨ö’.8wK#%eºœ«Ee„÷½ÖÖª™*”SÒz_µ_=?åög¶yñé’Ò~H®í¡„õ'+éþ‘¾¨2×[KS–DI¢rKY:•‡V„¬ jw" ƒ$VÒ-uNªÜèbƒ pøäˆP—–ÿb®‹BoU¹"FàŠ4Wü3»š%œ%ÍU!cÀºäxQö^—ÚÝA2ÆÿðHñODø ¾Wô§´5‚ ðÛÓVf•QnGWtȇ‘nœ««Oáøكt7w“ÇçA?ëùóçÛgÇh´ë G>XK,(¹­¦­ØyTΰÎw ÈT +¥v$˜ †] Ò ;epßÒF*§š”’/x¨ëŒ#gŒ\; ®"cŒÞÀuÎåö`q¨H£Î+i­XøáÃ{_íÃôÎ^*´‡'AܙÎe½w‡h¼8MeÛÂcpÄÁIþpÌdn&†ÈވÐ8ûB),Ó'´ÊVj߸ÒȸY3A3½¨|o­¹?Ìy¨„‘+íпžèˆG¾­|‘>4µ7Õðü}©ÿ +ð»þ¹Ï>–¿î+àá‹Š´×‚/A È*„äa¯Cn8/tö•t…ŠÌá ʤqUV«3 í„T¸îÇ -œ“«µcôáÕ#k¤­ +ÈYéiHl–m³ºOP Ož75mÏ5Xiä·JAј:xÕOÄgð&§§R½’È2]•¡èL¤j˜q05òÍ+ìÌ88$«k1…‰B/˜)³²‚Lå[eË +…c!›“Jx/¾ÊH45«á;¶}ܓ3×+ ;ÿ¤‰^1:<|ß©áÿ&†‡DNˆ!ÆÖׅÑ՚eÐk¢ á’Á·jºÖýtE:)—\ÿœ³wg†‹jÅÅEÏ&Ïi3Áw¬¥8^´ s)Èrã ƚ̬à N‰R0y 0À7q$p4Ì5Tv«@É#6=L›mq‡²š^xò{lj£Œ¡·t,jL)%<~Ñ0Ύqƒh¼! µŸnQë}„Põ0[­ŸœØîÚµONÙþœÊ²êsAïË‚5%‡xÐJd€|ܱ (ßæçºø”Å…ª=JÆ)ÕKÍ_ÝሎáŸï£~¯î=ñš…ˆ~SeõJvg¡Y$_1Æ]½! ¢ùsÂþà)’SÛæóóÃõýGj¿ÐíäþúîÁ CÂr—ŸŸˆ§Ý'éåÇÿZ÷˜žAN7`Åö¨LފÇ™‚×¥X¢ø3É#ç ñÐF(!cçZ½àÝ~ˆ<ªoEm8üq} nA%‹U8[òºa¥sÌ-()¶C¿ÂØ¥Ä(¬5Áג¸wïß é²‹PÒp¦^<ϱâ:³kvàõñÄEcÜØ÷ÓÝ­oµ4XÇÓÀÙ(ø±5Ñg˜+X5xyÍ‰«3lÉ ¤&X‹7Jn)[ +¬ú^d|÷ÿ:ù2@} <ïÀ±Æ1Ïtˆï[ã ûÝdÐc +>^ßß\Óg£ýÂq«3/}~1`ŸíúF{ÔÁRü›{„ooC|­ãÛ£”~œ¶~oý BiCendstream +endobj +1278 0 obj<>/XObject<<>>>>>>endobj +1279 0 obj<>stream +xVkoÛ6ýž_q‘îCT’%9–Ü-Òç>4I·¸(†vhŠŽÙJ¤+Jqýïwøíxq‹.d%&ïóœs”FøM©È(ŸoNFqYÒîÑÞ⏍Ï&qNã²À{šgñµ‚8<Âõíc8<*ã4Îp!}Èn6)âi8Š×b8ûÙìlºá;fÓ³4³ùn}#ÚtœÅåa´Ïf'É«)¥cš-PŸI‰—Êe:¢ü\«…¼íaõ†5sFÌSÄún)T'9ë¤VdD{'ڟgŸ`jLiêMEYSgKi¨Ñ• ½8¼X‰†©ÊP·dnæ8§ì;½SòkòFªþ+™éDCsÝ-‰¹/Èt›Zã\÷ªCXÖûˆ¢43ëu-ê:kšùŠ³®!·ZèÖÙïvL³àið1XäH±ÔšÉ +û¥—-ÞQ­êµqàT(ÞnVÎ8‡º­h-ìÀYå<ß\>#^K„rPŒ8Ë&hè¶n¢[j¸Wwº¾¨}UIWrÔÒÖh¡ëZ¯¥º…Ç–5¢-ª©ÝwÈ;æh-d-žúîŒhj›ÌäEÙY\âÎ=¢U-˜Hs!PoÂ÷üí‹çôûõûÙ5ñ%Cz-ÕÌ>¥¢¡ Q0ÓÙvs„%¸ ÔV»Ñhl%:&ëmŸÂ·µž³úïC~BE·õ4tN‰C#Ãi#xßÊnƒC¶¹GlVºa½Ö·Z}ÛÞ/ë×7T‹;Q[øæ9 é ËVpÝ4BU¢:âJ›p÷WÙ,'¶V®^ÎÞ\¿¾¾:–ûŠíç”݈õ’µ"‘*±½L<Žøl«<@ÏiãKµce4t¾p@¨pŠnzZX®zÌkÝ~ÞòÍSp ‡ÂòV[ls¸´ ·ãKWü'–' ‡o†I/oè½T•^ºš%ÙZØà¾TÂór‡nÓµ=ï¬ ¹º{&:Æ8ñÚ*Né¹óÝw Ùem˜uáÜj‡Ÿ†mhÕê; b´DÉ©Ûy§¡f©ûºÚKõ0¼{*eAaUí Y4ºÍ +šé dÙ ‡\T6+[ WFKe+°^×B†ÇX;àþ‘KÚ@‘¡d˜Ì™YRTQb3IN-duJQCÃû]àáÎTÐÊïœ#z©¬¼µÊ +=¥_Wë߂Ñâ;£; ŽØ÷B8nz×ë-Ž§Žïa‰.=ŒèÂ×ñ8 ÿ=ۛ­¾;q_c¾…‘Ä9õ¶£‚x@W»ÖŠ&ȟÿQÌŠyÅDc‡JÐï‹áÿîï‚ÕÛ6¸w‰ê1dNuþQ˜§?þ4ø=ÖáèGîÜk …Ñ=o֕k&þC؏ì#vÌ@d°Eðº7ØèDáõÐϚÀA[êE-¾Ê9†|#„Z£W¢…Ò@Yâؕ‹Ü«o:Ð.bµV"¬$ѕ&³\‚uÌO$ôÓª ë þcáÐAÆîiƒ‰iϨÍ2ÚÛ1@*¬=˜ «ëÙV>”èœpºã‘\˜'. Kï 7NçÂê|áß̛ ‡à y ©ÙÐ;˜÷&1ö#È~Ã>»UÃëØö˜áo¬—" oXnP¤Ž:8Û»d“1Ûô_€-«^TÄeJùÔ÷ñ#6]·$¯Êp Í˸œæ4çq1uÛÍÍÅå³ zÛêOÐXz¡yAꝸ2§Ø‘GeNQ1ÂÆâô#{è¸ÇÅë½½[dÖäËÙÉ'ÿX·ŒXendstream +endobj +1280 0 obj<>/XObject<<>>>>>>endobj +1281 0 obj<>stream +x1OÃ0…÷üŠË׎ƒíŽ)…­TK,,®ã@ªÄŽSàßsnʈ„,ßpwᄃ÷Q0 øÈ +¸;”P‚c­•ÄZᏺb«‹õC Œîò®Pt ¸O)h»j<ìðÒû6|N𨁓¯uêÉÙ9öéÚ0šÞÃèÆ£‹äFŸð ½,%QًnW¯•°Lq—aÉ8©ò’̐\ô&õg)€ù‹½[wÁ§†áŸXu5Ÿ"jÁß.àC³ß6ðÃÉÙ»`çÑù„.‚Ï~K&01Å¡”t“"¶ëßfŒï`Æ£3e§fNï(ëíEˆñij‹Y_˚H¡–$Ï­{]<? ËrPendstream +endobj +1282 0 obj<>/XObject<<>>>>/Annots 630 0 R>>endobj +1283 0 obj<>stream +xW]sÚ8}çWÜɝ! é¾¥™¤›™NÚmh»y¶Úʒ+Ùaù÷{®dc’N3€ìûyιW¿Sšàߔ–3º\PV &ã ~iÿ|ý8˜-–ã÷4?/¨ ÙÕr¼l¾izt¿t9§Óîwœ.­%~nh¾¸‚Ý9¬Nh†ÿNÒ&\N¦|||ða5¸¸{O³ ­6ˆ{±¼¢UÂÅ/ÙðÛÃý_ôEºBy¯¬¡ªò$LN?”ÉíÎÓÊ®³Lzÿnõ÷`Bç³9ÞÞXS9«é“òU8aÓeôq~9Ïø©ïJî”yö²­0Ïü%x,[žjÏ?W[ _ÉÉdÜx™ÕNU{ʕÐö¹ñ4§é´ñ4[¢ðô w¤L0ò(ŠµàÂÀ„“Z +/Iùp$ÖJ³µuÝü2­¤AڕE,’ŸTŽŒ¨Ô‹¤6/« +q¦2L/cŠ10ZÛøõ$²-l®6ûà´6¹tzÿZêã”î"¦û`+v/*üAÈ)\|̄“›Z“±8³”Ù¢t= Ñ‚´›à2”xk}E±0àjc8kF!@_)­÷)»–{xÕ:Ù(-éÐ'XВˈèDcWä…2@€*š ƒHª~R÷¦y:¶„±%Ö¥åŽçr#j]ые¤&üR8QÈJ:â/îfM¿‡dà;Óäë²´®Š§ CÚ +Ok) ¬Éœ6¨Q|„MIÙn„ö²oµ=~aX¹ºÿԈ¼¥BUÖ(kø¡R>À­vàl ôÆ,CeúD 8ÿÃîZø„º·°ƒTm¿Žf>6 ¸C®è,óuˆ˜F¤hº–çøšý¤ª¶¡ìN=o+*,Ã}]W§GÔண™¹r2CW÷L«^0•Ì9xN…ÌEƒè^ýöpC¥¨¶cú±E3¸Í…45•¶ôçu9âØ â(æ³h;üÅYT²R²Çõ!¢ˆ&pA[]$À°ù»Պ´vLYªË…±®:¦ú4~ma +¸±J] d܁/@2dÀòJ¬A•«W‘Ê–À‡ûKuqwHï±´ã6Çts¨ âÆA”½­{É|qøÛåG'…;(jÏøÉ£×u®XËúϱ0ôÍ~ÞéüV•½‡OË}ÒÊ7Ü$À…¼2Á”À%°ôJ瀠ãF/DSæè”Æ!#"{Qa¾=GŀŒ½ޘ¦›‰ò0ç›Úd,A¢/æë‰¸A:"wð^¥ +‰)½X£÷<öxºDlØ{l÷o-/¯czw¹m„#ô‘‚Qí"Ì5U"ÙŽöšÂm€o ­f\›·e1íQ”^GbG‡â{-…³Ëg=0'Hä¢EAìRk6ظµdw&ÖîÂgB3¹7ÐM±—­Á(‹FºÍ€ÃþQÐïÇ%æ<š5àìñöë÷Û¯OO°OÃO¬2lçé]/òÎKÐZ,‚Ñf;0£¡~¶ †¿¬>Ü~ –SdQöРéF}kζB¤!Õî +~Ýmû¬lëÇ}ëH/ßp™KŸ9UÆ-­b¡'•Ø»ø3gØÔ/ê>p¹Áüʛ=‘­v”âãí J±Q,*ÝJáýκœrQÆ.ùôîH¬Oˆr£íéZÑP˜‡ ÄÝMˆLNJšºÅêÍ%è¿w ˜ÅÆìŠeK‹Ïðõu' èÃZ¬ú-ú”TRyè~R…NùÎn˜½5²Ða?;Ð$–Œ i%~Júü:»‡‰š­ÊDma*"Ǹè…^îñ ŠíCBNxÏ:/õ†ž†aóhB…ý±“Cp‘+_j Kc€€×m-°ê\5+Hǁ­¬£}­ŒÃs`Ù*M'ìÇ,“ëP€Žß€J†j|Íˆo(aí\…ÇöúÄ6rMÓ›ûaHÄXoârŠŽ/a è¸/Bi±æuG@ 7öæ°¯8kOÖlN|L׸”ðÎÒT3ÛÀ< õps„Qµ°(㭅¯€qï?ΠÇÅÔ8Nµ*‘ÊMm1ûµ=¬h\b¶Yv£ž…Žq%1øšisu¸\òuwÈÿ¦“ëï|9/W¸`ÃÐrÎ Ý®þ¦WDendstream +endobj +1284 0 obj<>/XObject<<>>>>>>endobj +1285 0 obj<>stream +x•XÁrÛ6½û+vt±2#˒íHN/;±;î$Ž«I¾@$h¡&-«_ß·)‘”“¶“ÄCàb÷íÛ· ÿu0¥ þLi~B§3JŠƒÉxB³ÓÙxFgçs<ŸàŸ•”……³É)^_Y˜¾}7>ï/\.Ž¯Ïh:¥E†CfçsZ¤„&Z$ÃÅJ°r$4Ý.(Y™µ¦Ä…Ð)ù•ð´VyNkcŸðäWt/Š¥Àî”Dž›5 ªœ´qí"-”VÎ[፥Ҫg•ËGùfñçÁ„Ž¦§ãœ=LŒÖ2ñö >áøŒ`éƄ#kŒçõd%ô£„'’à™´n¥J2e°ìÈhZ8%(7‰ÈÁõ}\Ú8/ 2¶w¶•…ñ’ +Siv 쇫чË1-V€ƒy*Ë\²?¥°žÏ…#lòøzVC:¤{™äjÿ·zÈ`:™TVù aÙ +»¡5Þ¼„Ï›ž[¿" ņ.ò\9ÄÏ©½ZHQŒZÎd֏B(]ïÉ|INy9Ž^¼£)²Ìé>:=¬ý«’k¥8€…Re‘§Ji åœ2ÚucÀ×'sP_ƒ%8Rٔ–•÷ððl‘x»Ebp·³5èÖ_Žé}®’'vf`ÓÑÒâÍQU"©¹yDR_°ò9ð;8Çõy-"µ<„ÄúýöæÈ”EfJ'bÎpÍ&Ž#U®ÌÅlœl"3¶ Ÿ¢ûMlŒÅ,"9¸¿úòõêËÃCàýÃð£A,ZòáM/æÖGßB™E›' ^ÑP§-ÝJyóù>XnB‰4E2¢ž5vç;¶‚§ìbc( ëveø£ª(³Ü@•Þ;©ówŽL¥K¬*=*Š œo•JíU¶ágƹÆOnHɸW8+&¡çÓ/WïE¦džvB(…s¦”RáÅR8ä ”@ ù›P³\¿ˆßC\zÁhO"ÉÉUei¬%'ƒÅ¨tÒa&rW+Á®æUM¡À9Ö«(ŸK€”J¡Cvéjq¬‘ÈÁdpc´ì1j¸åy›ûA¡ÛGÀüຂl¿7Ú[“ú ,àCÛBD¶S ©Ê2¨’ö!36ªj8¾‘%݈œ¡›Cœó '8¼µ@6‚Ö½Œ +t]åeÊ:¿/(V¯i,¹k¶u·Ó–n–8ÙÜԂJ9 +0bKñãGkªò4yÀĒ=47‰Fg­t¥Ñ)“r`¥H#°NK~/p<þ hÝ¢,¡#ËM-ËJ‡çWVJ’¹,'çþâýÇØ0¬C{8¢Ã5~°W‡/‡´TÞ5¶‚ lëÁ×u&[HG} ñÇ [km7Óô˜›ehž Šè¾Âʆ”]ø‡#T.1r ],4ËÎÁõ¨kÌMð­åkh-Uê˜êp%f—®ÛÃVí +TaöG¼úEœ!¶§ïƦ!…™*hš´P¯ÆÜËSÇíŒÒ–¡» ûuzÁ<Л¸ug “’}è™'ÐLž”0´!:p•ÞAÑ FuOo²9¬IÞOa¼Aœ»öä'TÇ×-{„¦5P²Ó;…µA#/U{†`’Û +eie¦^vdb}ߏâ™À¬@I"Ûó³n壙ÀÉ>¼—Æ[3V\¸h{*6‹ ]+K›Ž‹aâ…gÌaFB•T¹¨ úY`±ô¨ ʾ‡ÐÏtƒ1Ϧh,Ì tOð +«ºh, …&+`Œ³€AŸÈH›¶²—Ç…xêkÇçfŽÞCuIx(¦lÇí»mcÍ^ôWž‘ãÅl{³!¯6À¯ ^7ê¨ +€£Ïþ‡öÊË Vkão +Ž–YöÆY¦i÷àêdžÀ?„¿M%ïúx3As;ߞ‡Î¨a×!œz=Ž|{Iÿò­—õ–þ£’ßäÍõìQ‚6Η»V&ù"žd8>ǃ0(¡ÀyøüÃÊh;áàâ»DÙÅvÝ™êèû}µáLàJˆa£fm;)u½!Š|ËÚÚthí½QeXPˆèO@ú•”î!­4î#˜qÒàÃ; ŒÛOÐÃVþ-@p'ÄÞÜ"צÂxUÛ­ë༖§3üãü”fóp™¼¿øtyAwÖü‰fJLRñ\$< +Œ=j¶Í'ïþ×Õõl~6žÏÎqíÅ08ËÆ®¿üÇuzendstream +endobj +1286 0 obj<>/XObject<<>>>>>>endobj +1287 0 obj<>stream +x}WÁrÛ6½û+vt’glY’ÉéÍ©ë©'Ý6ê´_ “¦õ÷y R *Œ5Œì¾Ý}ûvõýlFSü›ÑjN×K’ÅÙt2¥åòŸ‹›>çøsŠÒðb~=›,âŸÖgW÷ šÍhÂÖòfEë„`g:¥µÅFß™*S^{å‰i“)§+•P©\¡½×ÖxJ­£Ç5mvpZÕÎh³%áIþöö×?ø2ýóøð_ï6QçëogSºœ]Oæp?®2Q‘ £Ju®H:%Ø ·€¬)íÉgá5¶Î¸”J¿ª ÛººÿH3DÂ!]^/6¬~±‰NwŒ)ÖDãReÝ®‡Ç·÷)¹œ¯&Ë÷…IN CÔ^%°ãIfÂlÙ/‡Ÿh_æbeNs@üRävKûv¥„½É\˗ÎN‹òCW¸1=}~{L›ºª¬™Ðï¶Q¯Ê]°$‹–ëBW¢ +5ër]{åp• Â–68×ðI›^ | ‰ÜÛ‘6•rB¶V]e!_á¸pIW¨#;¨þ…¹à©,9 ›ÒÝÓWUå4Ðr¡ðŒ‚A°O ‰ÜVâEðHikS…Š£Îóe[ç‡4 )……Fj33ßçʀ[2'_—¥uUœ6f•ªØûýzcœOsì—1;2ˆiÇA¨¢ ÷øºW²F¼#5:Ï):B +ɦõw,éèVJå=Ý)£U2Šx'¶-ß{ѯA£T;(YàŠ%c+t,·.² ÄCGÉÐ|KŸ3 t®Ì5l£t̏Bt•†Ô ýÏc]µw¶èEd& +U9‡¾ë ÃÊ +Ãwª`Ä¥³R%5X(E—8ƒ ”脃"õ†4W*NÍóù„Ö,…P¥öÎÖ0cȚ|a*„ÑeCa89„Â9Žp|W[gëòª±sä²I˜AÛvŽÑ50ï M¤ÿ^C*©Qy\yˆ\BO¹×Ø9Ã{ç(€’y°™ ‚ò¢wÐP¬=Ïc…¾Dp,‚¹  ô|Τàd¿"”ÔÙ"@Ø×·n'T¼U¨(ƒ¬W|×PÃxÔõés\¥N CéÀeNgÇ–Ÿ²ÌÁz–Ï‘±½ØüI +@CV¼NԄÐò(p„*zÕ"xê[ ±]DÛ¨<ÆAèT@PÂ1¾ÿ¸Æ4)ÍÅ‚é)Q^BÔTa${O’<·gàAí’÷ Ûù¾?1­¬‘*ÜËšl_A ,Ú2ŠÈkGi‹ÒDÓçÖ·S¹“DßҐ£¹ÑšQh»Ñۈ6ºÂëÿïÍtèqJçÃø?h_OØ}-3ä%Â5ºS9š…€tÇW’‡=̅:wÕ'ôÖX‡7d{‚tdèå0êâðþeKPåŠõ°OkÜ`ô~ à€ÞBaXÃeÿ0¤­å]t Ãv¤|ÛP›X_•Š:ÇÐé(F6¦±L#XHóI tXpÐ,t ¿f¢4ÊÄE ®ÌÓäDÃý­°fÈxzöBôê bÎY `tÖÑÜ{;ô?Æ2v=he·‘ [cÐîqQږEü‹ƒíHŒ™Ÿ¿KzP%1Ôâ•[š„Œˆur—ém–ãï0íz»åñ&O’ÀOòǺ8HI;ƒˆ†5”9ZDAÀC[6•Jb¥¤g%&ꅧÆ`žfº¸<Ö ‚~\Ûnººï- Oƒ» ä!* 58¹?—¹@IN E»\»…‡=®Ã>瑏Íú°jý|y~ä‰X¶¶]ygøÀ®@%îýÔÖ¼„6t4ÈÜ@GVÎæ8ˆv譝¬£ûáùK›ãý’×[ˆrÄ èx·*‚ÄPÒã‰ãO‘ý2yèÉÞ©ŸÙ9u¶³xuÓ푳%~˜Ý\ÓòÃbrÃÉûzûåÓ-ýéì7èÝYY”°3ÚËý…ËÕô㉟!ÿ÷3f±ZLVËü‚ŸÕ’Íý¶>ûëì–æ…—endstream +endobj +1288 0 obj<>/XObject<<>>>>/Annots 643 0 R>>endobj +1289 0 obj<>stream +xµXÛnÛ8}ÏW úH_%w}H±í¢Xt»»õc_h‰ŽÙH¢*Òq¼_¿gHÝ̤vZ` ÅÛ̙9g†ùv1¡1~&”LiSZ\Œ£1¾t¿þùýb>DcŠ“i´¤‚æÉ ý(§Ï¼žâś(ÆÜ4Žæ̀§¦Ëy4¡ÅrŒ¯ͦ³(iF<;cvÏ.¦ÑŒÓÄ<[.º‘Û;äùœ÷ºµ<;³ÁÉѬ·j>_z«& lô#wò` «âîÌƘ}Í2“dMá-Њ›ûvuqó~N“ ­6À;^&´ÊÌcZ¥£Oe*IÐÎȚÒ\¥÷æõê+v,š#zõéWþ[{ʈ¬&QUùìVR%ëB£tiè³(ւ +Q7u§dy´@•¼×ÝwsWë]u³×užñcºžÌàÂ*Õ7û›G²µªrIFÚ+eÆ'–´WyNéV¦÷î†t+Ê;™ݱÑ5®Ø(ìwB•Æº¥ke FªtcïÔ´uÔÈtW+{L)„¹ݯD- +ieÑmy w°Ý +K{YKçMr_>”Úº{áùåäÒ_¯ u§/ÊåƒÈu)[û؁À˜ÔQ3å2½3F–V‰ø%œÊŠ¶®3TÄ´¶,½wµ8SµL­®l¸"¡€aE/Ä_ —ÜG ;3iÒZ­¹ø¬õƒj‰|LeeQ8͑ÒA :Mq ÞŽ“rË EÆÅ.@òÔ6_ł úîÞÀÒþ¸“$ø¾=/ˆl‘gò©3¯×Œçƒ×õáو]Ž\脵ålAí® +8}_Óý…ÑÀXΓÖvjÂ럪c%k»„kW`K_YÏ)Y³±%ánx(È}C@Y:ã}åœ{$Q¾E‡ªTÐ. +S*JN[ßï›-4ƒ«‘ÊM¨ +ÆrÃî:f+?4pk'¥œ4ƒû] åFÉõ­è¨…‰ŒÊtÐ;8Uº~ŽmÚUܦ²5p»Ýµ¦¹t³ã—ƒæV*g ë+åsFÀ=|Vµ{G@ÊðÒf²’n–2-MyiY§øI…wøbUºËEÝôÌè:\á +íŸï¡äû7š›:†¨£÷}¼ˆ£yó/¼æ ×5?¦XGphóe´øòÚ¯êßhîýÓÂè11•LÕF¥LÖYúÅojÛ]ˆy›2½2ñkàW×Yåí‚s¼0XÕÂt°ó̑Ïm~Ô¶öÞ +Æãæ3Ó7ڌïÕÆëeè$N¢ñrFq¼Äÿð”ú|ûñí-ýU므‰~Óé®ÀÓÊU&vîºÝpŒßðú®áæÐ9ÌÁ‘Þƒ>·Ý;ižàñqìK>îÝêâï‹ÿfHendstream +endobj +1290 0 obj<>/XObject<<>>>>>>endobj +1291 0 obj<>stream +x¥•ËnÛ0E÷þŠAVÛò#–³LšŠ6-â ]dCQ´ÅD"]’Šá¿ï%õ¨¬¤‹ 0 X&9sçÌê÷`J>SŠg4_/Ñ8¢Ë8/i±Šñ{†¯´ óËh<ë/Ül“õŒ¦SÚlk¹Ši“âDmøÁœ ‚Ù—óÍó ¢Ñl9^`Ëp« Ô¬ëTôÖSiwÚÿ}¸³¥>?Y/Z)m¦ƒ@ ¥)Ie`)é-¹LОV'Œ¥TZ^Z¿'Ãî±×2Y_ÑÕø²FóE¥úNa;ãNjEé²Ç:¦RfRz`EÂh+sAÌ9#“2Ô¾ßKµ«BvåÅÀ Õ¡‚í-Y]ˆFÜíýC'H"¥§¡-yFÌÒ°¢ •ϞÎQ–ÓAÈã·»_´¦ÖB¡õ±*=cÚdÒֈ§sô™ Á°$À‡3E d×j›KîðäB¨ŠT“‚+½JVU/xi¤;‚!ËõŽÀâ½3½Ü>Br ßçzÐñ˽t`þ„´A­ÍôÊ=áQ6eR8JS1΅µ·…\ú „!éм<§&Ä)Qðì‰õfi›|*üX’À7UõczTÈåJÛçµÚ „†@ðZ'ðÀœÇí|Y-Õ({é%BBÈjß,Ÿ±O秏բñõ\BÀñi«ÊyÆÔNTÙºFXž(¶Vä¯ØÓåWZXØ/ö¤ÙÓæ_‡w^‚Ñ&ëËz‡tvÿå̟ü;ŸCBʝ7ã/þ·×Ø2n§JYR³½h¬¥>sê)ôdW¹ðI}ÛÔn€¯"4¸ §‘职üÐaa™Š®¥Cž3ó˜dü¿¢oo±UùŸÎ«±¤fÑC¶ÅC˜çwUø¹ +tÛËäÃ|;XkOuÙCƒ™(ónÀ°YÊd@wÒËOLq‘¿é§a¨ÓO ãsräýö eK\=#„jÜÉð/¼NúU#ÓT¨à÷ÉzU;jºÄÛi5§ùb®Ðë¯7×ôÝèg¼2èVó²+KûêFÍöQ]ùýÿw‹/âÅ8^®ðZ@¨xå3|Þ ~ þñ4Nendstream +endobj +1292 0 obj<>/XObject<<>>>>>>endobj +1293 0 obj<>stream +x•WÛn7}÷W àU€du·ä}HÒø©\X}3àR»”ĆK*$ײòõ=Ã]j×òºMe@²¸s=sf†úv1¦þÆ´˜ÐôŠòòb”-—Ô¾¹-¾Œh2]d×4[.ðÿx>ËÆä$m <¢ùߚ'³i6­Ÿ|\ñCØ>½ÁÒðæš&#Zmàòj±¤UŸã$|²f£¶•SfK·¾ÐÆ:*”N­« Â;åÒ'´>¾Yý}1¢w“L JaÄ¢ +;¨\e ‹°¿ñ¢ö÷n:Ë&,~'ʵ a +vSKÍh©Êµtd7ô§QOä>ÈÒÓý@nßÓ]eèÎjᔿ󖄧ƒÔš?=áõñî7ڈRécôõ»2ÕÓ[2ö@UPZ}—,Ùä1žÖ¡Ýêj»k-éó\è‹-*-Ù9b¾Ã9l„#K{gU! ¸œA€¸`Æ:õ="ãpÒÛÊåçžs d­&/ݣʥÏèÖ)Tö9!ÅO‹*g`DãTÈ\y>‚Xå‚AA:H°V®‘£½ðþ`]q–s!‚X (ßêb€`±ƒ¡ ù0jEáM*Ól¥ Pí[¥ÀDŽ1â£A€0|¤£‰­¨a؉pÂÍˬ ‰S©-wU¾C²ùΙƱ2V#Åם"yϊ'§Â¿¯œ§IÛ­jˆzÊíí¹P//¤Ý¡×Ú$¥<³ýÉU{‡;-æP€]‚J™ï„Q¾¬!BÿFæ!òEJ`µimœeiI•)¤ÓGôoã#¹}ޗÃçœTfãºܪœíò·q ­¥‚u0qçlµÝ‘5< +-RãtΖ2cÕúY´Áý Óµà÷úH²P‡Ž2…B#UBGû KØ¥-F +"QæU§ç =Çy€6Vk{ˆ®€µ!ù$Êý¿$R ûøq‚¦îi†"£Õ˜%{;YºÛ=·«§µ”‘*“۲İä¬<s±sÄx +hä80ÊT DþÕFì‘3TµIŒç8rê„Àt ¿©4¤8©fPœ1isb¬ÑgïyfóPAwœäÀh-y p@ØBŒš1„­’,–‚|Êå>D +æ0ƒºÙçÔèä½åÃþP¬3ßÈ$Š bÁ†7#ºæE0ÎfÓ öË<[âëàògóÝ8¥Œ°!ã9 —‘´‰±mYâÜá”ÿŠ9ÿ’†ë¹‰³ïÜÔy53®HGœClC±I„Sl"úuccD/•/ãÆHž(Í×g¾ «Úÿ·nM?tSóâ¸K¡ôKÍ ¹©y°;´,æg°!ô<·• »›WAvÜUÊ÷Ïôú“ƒµ…yý¥W_©ú5/A†®nXsuzðåi—ÖŽûÜ捫3U îøëô °´ ø3ÔÛMŒŽ¨e?Ñ(<¿Ñ…öà㍫Øɽyœ)e}áyeùºð:ÄÀP¯Ças]P&×U!›ùZ_þDõ2CtýÉÓzz‘jùvðÀx17Iœ²¯Ï´*UHBqØwªÍJ&ß?0]£&8düó3¬³ÖUŸ•nqb,[ì¶n4lYãò§{ ²'£¶‹›ŒœµÁ~m“b+'ëé¨ÇJ!Mûœ5”÷wIB†Ïš¾mŽz¬ì¥rkt'«ÅXêö{ÝÊi´$¶j¥Ëם-±´]ôÖK=à[ ¿ÃÝüTÕ:– +wú6É+Ò<¶ÏÙ¯.D·D1£Ò†¢•ê±âD¡ªä:âR®¹ñNJ|Ʊ0?küz¬vRò܌)µ‰‡mFõe¢=VpCwqõ%t™d5ÅXšÙԘÞ,›kj÷ù2›Ž¦¼ÿ>ýŸ_m|xå—Úl1ËWøáÉF×ýçÕÅÿ¢qÇendstream +endobj +1294 0 obj<>/XObject<<>>>>/Annots 646 0 R>>endobj +1295 0 obj<>stream +xÕXÛnÛF}÷W Pq‹º_ Òê"­Õ·íŠ\Š›\f—”¬~}Ïì’"Eˉš¢@›¾ˆËÙ¹œ9sƟ®Æ4Âÿ1-'4]P˜]‚ÕŠÚ/f‹_F4[-ƒ¹û:¢å +?I1Ύh:_Ó³O&ãq°Â“Up{ún Fõ—Úþí2XÔF&0ÚXïžüõÇ«Ù"ÓtL(£ñ|„{Ý/)=\½Z_ ßÌh<¦uŒ€«%­#wψÖáõ:¿:Mõ^å[’"+RþÄP‰'©Þªœ +£·Fd¸¼HE(­{TYI:v?~·þ€;,wÇu!²ß‹}´ ¬öOšÛ¯)ÓQóûD… Á‚3ŇF4Oáþ:º¶[ʌ +aí^›ˆ"QŠÀmï¯{ eݹ¨wÑ ;jéýEG·FWEïäûïh¯Êąì9½¤§ÀföíLNç‘mD¦ê¼*÷¹¾W¡ÑVÇ%Ý¿ž‘ÌCs(JsÄ~tnO„M¤ h(ÛÚÅ϶Ô¯¡¤Hó$K•5ÃT‡"ZvjXµ¥Ö±ìŸäùÙ ¸Úx#ϾL@|9µqݾDÏ_L‘,d1huîJâÒØ˄b4g©,Ž1¬º2ô[®‡?©¼z$7N–ì{òù*ÖXFZÑ;!±›C]̝4ö¼A¢MáCŠœš€Þ–Šœ6’B*õl!C82ÔÈ'gÞô ŒÁAÇ5¢í1]p¬M&s2Už³%—œ֟m:µÀ-VÛÊÔ÷µÖlhTQông@ +†,f>ŸuæO­ºþ¯kÞ÷Íç솬”®f‘«¶<ÀÂ1â3>ZT.”høcoõÍGÊÈ?4ÌäÂ&ÿ"EʖFm*NOÐø|Ë´8fÓ &ó`…ïà o¾}ww?#>Æiï»ÏLð ó «…âIóǚ/¤Ù©Ðe´k¢gRT ”Î?#?U#j>ê„ *¡\G2‡¾‘0ÔU^6¿Âè˜Aûόi»6s¹'í”Bâ}=–î;êÁÍÙN)´pBŸ)ƒ5šR…U* =íóHÆ¢JÑ} ☁gQ‰fT'—àü@ûWaäØó+`t’òaª6C+Ãʨòàz§Ž„ò +Sÿc(òÑD…Œ<® m;+éžµÌ.´vó¤]h§1‹æ¾Ô Ë=ÅÛ[?RZÈ5ˆqŸ]£`΂¼Á²™ˆÀgšCæqâµÓWîpŽç¤Œ +ÉÕ¶IL-|˜ 0ªTè8% ‡ +"  ¹-žF$R°F†»“ ²K^…šÈ#Ú»ÓeRY¼y×Pk‡ô[7›\¢±œñ0ùTÙz õnø?⾎ö"½Pÿ-˜? ðªïûš*àO¿Ô?ëR¾t,ëÄòQ„âŠÁ]°R&2Êf5`h‡ÓBc¤l0+ÆØ©zذ•NSvPÉúJ@çžák™U&Pä[ˆoíŸËDzÙ&¼lpŽ:z—J^ŒŒ¡që7N¥§×}Nv¦F½†œQ‘„ß©…ù­0Nr zنÖE!6*Å\Ázƒ ‰Ç”sQ¹ ӉTæ;etÎÝ®3Y*¾ó¨ŠšLzé‚÷…k’×[\š3«Æ1{¢ô4àØ z¯–54ŠÐí ‚˜ PÈΑR Åó¼h~ÎY&:"æMËáB&Ào;­O½Ñ¼gÞ乏@Ô1æ?”Z¡Ì"Ê眾£;(` ‰£m…b  +©Š™¢J7Nv÷{:ï%%y=5 öŽc Ѫyyñh/ ¶x&¿®$\ä'£¸2€†¡D¦E\ÁV;× zKcì㼘¦³`Æóu#SÁ¿w']æëÞL-¼2á?ÔòHز*e7 ÈÍ^!z#Eªþ„€2:ƒ³M´Ø;6*¯Å|ü·öŸïM»™à°=Y Óèôl§Œ=äái\×Xôy?Hʲx9º›—6Û¡ÛÂÕq¨‘D×oReîî8Ñ 4= Z¹À$»iÕ¿‡ÚðͪީƋe0ZMi±œË[W‚‡»ûWwôÎèX'èuwIa_Í+ƒåû×J6[΂å;â£+·Rü°¾úåê/|°>/XObject<<>>>>/Annots 651 0 R>>endobj +1297 0 obj<>stream +xUM“â6½ó+ú¦*̇ ›ÊÉdrɤ6ª½Ì¥‘e¬,9’<,ÿ>O¶™&‡5ÔÈ­î~ïõkóÏ(¥>)åsZd$êÑ,™Q¶Ü$kZ®sü?ǟ“TÆ®¾ýõÛ(ÍɒV›<ɨ¦׳á¤i7º>×4Ÿm’ÅUôúŒh6K6×Ñ,KrZ¥kÔ¯i1›Ç>Ý)V¾>#ºJñ*zuF•o¢WgDóü¦r¼»\­>’܏¦ÏKJSڗÐ+[ç´/:5f´ãÖK7mØû“uøÀ^R¨8`C¬½¥ƒ$Ü+èpÆYÓçí ½Žåñý®LûíõøÄPºqöè¸öĦ n­eOh_)ÿ°ÿ:šÑ$]$s@³slŽ²–¦ïTñJ° J´š>ScC rñÆ&ðQz¶Æ 9©Pd‡‹lI/J8ëmh+‚B¡'å¤֝ïºî¤{SBÿöiäÊ–ìˆ=ÜR´H·&–<©Bš1 ÎßÄ-:àëXQp\–J$±ÃôyC)”OKŒ £N¿XSªcëú”Ø­>$û¬ïƒ™Ì£ ‘µ¯$´TQE²M‡æ* CÑ؃„@\³Nu¨;ax«µ=)sŒEJgëN(k&ZI•Ô ®8<ü0’ïív_¶ûŸéæYOç Èӎëcµæ±xäÉÁ/–¤áƒ–9|Û4Öˆ¬™PO»Úyp<™ÄéMþVƒñëϪè®eC€ßÐ&8«8ÿœ*‰q8cÃÌW¶Õƒ:ÿ¨(„m£‹àI/½Ó­ÙÀNóŠÎ'pÌ ^!Knu€åáGeÝ]SU,CÇ3Ê(´„y‚ü†·þ°Žm‘¡ŽÆB&6x2BîG< ýÓCw{áYŸøì‡rþÄ]gø%› 'K#ܹ µ_sO?ÓùB÷$ûØ4:¸¶E«ã:_fÛ5¨¢±ÄS¸°Á¢ƒá­µåk,‘,àÛZƒÀŠðîy¾<¾½ Ç̺-Ãn]ÌøÔÏéS̞>¯.Þúï½_cû›ëáfšá'b½ ù2¾¡±v»íËã–>;ûï z²¢þèÖ6fN. “|¶ù_˽̗Iž­ñB@õu‹üºý9ú™n 5endstream +endobj +1298 0 obj<>/XObject<<>>>>/Annots 658 0 R>>endobj +1299 0 obj<>stream +x­WßoÛ6~÷_q@æ¶bÉvìè€d×<ÃÅ0h›­Dz"e×ÿý¾#%ÙÑ æN$ïÇwwß]þÄ4ÁOL‹„¦·”•ƒI4Á›îëןø ÍçqtK%ͦѬy(èipõXRÇÑüê0YL£˜f‹WJšNn»'¾zýŒÓÙ¾7MƛÇ$îÇÚ$%v +¤hQèLiÀ·UÛÖt›œ{©Y ×f>2‘W‚¢V‰G`ĺÏÄY¬d0Œ~l²%–«ÐˆÞQÕ'½ ]4¢ >ý@7¯[_[2à8˜ù=˅”1Ʌ>Ë}%ŽJèS•'ӏJç̄wsv3™`X5™i-¼—•üŽyT㓨=tQ}hjµ™>x +N„†óºnVºã©‚É9M0šæÑ¿Ád¯h͸4Í⛶.0SYäÐ£ö^Só§§ÊXÒhGzKO÷î_õÄúƒ zîfMÂۛʷö%;ÚzK7`[S¹Hrs¾`é҄;7«–Æ Óe”‡ô”wSñL'€$AÂD#oÛ­×cýIÇþ1ú—¡ÞŒvþU8›Ó)v¢9V‘å_ ô¢hdÇm…ü‹6 &¸¬ás÷¾UkirZÌçÿ§«…¦±¥gsïېyùރÞlS-¦ßæô3ýž:õ£Ð1?t/¼¹4`ÔÕNy voê"o „‰æ «RY^OÂzü±@íÊÇ/GW•Jôûå…ýбuÆS»—Ñř}¸žíÄʛ͌ÇmVIÌ°ÆY¹H~ÊÕöì™/4„˜>…5¤ „¼?øƒ‚Áðwõìbc“scÚÀ +T¨R… ̄¥1`ýG¬"¼ö’8ò­Î>BP!cÃ÷±‘”©ÂÌõáÒͅXù¼ó¥¡®å¥y¦Øã§snÿ°–_֕Ùb-nñOkZ&äëÁ/ƒ¿]ûôendstream +endobj +1300 0 obj<>/XObject<<>>>>>>endobj +1301 0 obj<>stream +xu”ÍnÛ0„ï~Š½Õ"Œ\K9&M}kÑ".zñ…&׋TI*‚Þ¾CIN[#µa€àÏîì·³þµÈh…oFeNņd³X¥+ÚäEº¦uUbã瘎ãÁÇ,Oó˃ûÝâf»¦,£Ý±6UI;Eˆ³ZÑN.·ÚˆÓi ρº–BÍä‡æ`OZÒI›OÁRkµ q ‡Þºòµpìi°õ„kF‘ÂzÍA¤W»çŊ’|µ;µüáÙy²†Ž>=“>/XObject<<>>>>/Annots 665 0 R>>endobj +1303 0 obj<>stream +x•WÛRÛH}ç+úª5UX¾`l9o„„Ýìqb§ò°ÎÃXáÉJG#ÙK¾~OÏÅc¶v paiԗӧO·~œ ¨ŸM†t1¦¤8éG}\Ù|þõd2ˆ&tٟFc*h؏£ ÿ-§ùÉ`4ÆõQ| ùîx ü7¾ ;4œÆшïáÌÔÛߋcûô„Ïᯒ”Ù‡ý¡5ôìÆÛÅIï&ú´ÈôxÓ"µ±âJҙUª¬Uù@óf³ÑU}¶ønÏ&î|÷b„ içCYW:m’ZéÒÑ`à 'ˆ‡ÞÊU–ln§ê5Õk‰]Œ¹FžÓ\+AÆ93öD)jµ•ôU•©Þº_Ð&UÈd-Je +CªØ䲐e-Svߧî€áƒÓ­t7ï~ž]Ó²£"Y«óÙǏ·ó9•¢)mÔF.Ï"šUr«tch++ƒL éÌǤËü1†'nEy'Ê}(>‘ç&ò‡cÔ +,®HSʼnœ²¦´h‰\Տ0¤·*…áÕ£ËZî(Äèá U&y“Jó† ƒYÝ`Ù‡2]@*s-RFÙ%q­‚e*—ÀTﱜ^ö¦qï~ÑöAÐ$WÀÏP³Ñ%¥²ejSèÝ$¾”ÝI3¹‘Ìr8žÇÑ» …¶7÷°ل(áó@/jÂÕoõ*M?؆@¿ªŸ¢JQ®«Ù×å!+>ü¡°f8“‘–Œ­B/;•Ìð4\×õæM¯R°EÝT‰<2*eR»ÐŸ'ójnÇðæÈ8Åt©¶*‘”TR`¥`ú¤§ï'%z#t›·A¤Qût¸Í6±V¸98mÐôØqö¦žØ­Ƈß ÚX¤]»Š§ª·##ÈÐ~Ïò3ˆ»ø°Ò"zQfžà® +®¸Ã@õǹNZÌ [D«htt´À І]‘!˨)LTæV¦`{¥}¾õ([K¿{B>}@vh#t b ý_ù¸dCP³¸8uFX©Ì$ØÊñÀaúB€ˆq®üŒS,¿½ %чºÌwÛÅ0Š]·]3oÙQh»çѱ6`ƒçµý¥³Ÿæõí͉í¹U¼¢Á0ÈT…OžO,Ìb^4´ãé7x«Â ¸²yے¡¤®¼ø½œÂ&÷7Tξü‚-ŸÅ³öaOù¯(h-;ÜSž}œŽog¡åÝ2«ÕÙáÕÂG§úIÃ{ùѕ⠁ö[eì Ï(ÇQß= ï,ó§©ÑdMƱ[¨ãG÷~qòéäµ¾~îendstream +endobj +1304 0 obj<>/XObject<<>>>>/Annots 676 0 R>>endobj +1305 0 obj<>stream +xXoÛFýߟb®(`ˆh‰’(ªFs§5pqUKE{8+r-2!¹Ì.EÀ}ø¾Ù]ŠŒ«UK«Ý™oÞ õñbJü›Ò2¤YDIy1 â˜ú?zÅ„æ‹8XÒ<^âó4Ž‚iIO8<øéÏÃOÓU°¢ùl†%-ÂÓ¢ ÍÅ`YR¼øbo: ƒ9ÍÃI0ƒà4ŠƒÈ¯Xr¸ÆîŠO¹³vw°.)œÎ‚x°³ªÙj†ë :]`Ó­¬è`ÝÙ$˜wkÞ]ˆ’Õdekì.¢Ó=¼;W02ŒçˆX‰ø…¸×­ìî`ÝhŽèö»aˆ‹Â%²À¢¬×-¬d¿D€,gòÞ`YÒr‰€ö{ƒ%Œ„p´ßä¯æœ›áh µ6Á¯¶Ïs @\½#´}r¢xIÛÔb`BÛdôoՒÉT[¤Tª4:R“I2R’úҐ)wA¢ª'zÊ I"‘¦öľP;QP-´(e#µ!QaGQ¢¥hpZžTQ¨C^í­ô‹íû‹ ‘íŒL&`ñãH=Q¢ZmäK2ª”„5˞Ó'Q´Ò`·M2†.kÑd—ÄÒBïòF }´—{7v¡¨ ‘È”y“=»WÔµVµÎÙH§vj:Â2y#_üÀWoaÙ4˜ÏB‡À!ÞaøœëÿíôrÖñ5áuM¥,w ïEՈ´Ì+ÚkÕÖ]œa Øò¬¼pªsÄßÅÔȆ`o… ã]ÕR7¹4g¥µR å†ò².ò$o +ñòÂ֔Ë3‚_ éŸÞl4œÐì¸=÷ý9Ç9%¼j¾*T"Š+#ʝ¸òšÏY»GRR v<ëÎN«ƒ‘©¯ÔRRÜüš’kä´JŽ‹ƒ>0¢ó}«ê¤å%#¯¢ƒ¤JÊôL ®9œ ”P‘›æ2 zÉäƒC;Wˆ9šF–„$•¹1¹ª ×D)>œO· Î6‘  +ª†QÁ¼úhKÆ +ÛzäbÁmw\ù¹p^sÞÀŒ1D•ªÆ^±÷-o:ŠÂ(’ŸáÆyG¾¿>HA‡›—|1kí‰gܕHΕÑEî΄žœF½²/…Gì[k-v94„²‚íZ4¨*ä'YðMÞ_ºL`ÏiÅ×Ò 2*R:Å1hjë$Ðyïi‰yå[ٔZÀ´‘ŽÏ:2|-_ ©XjÏ4§ÁHd^ác ‹ ŽÿÊ:tø3¿1ŒÀ÷(+„–Û\ËRÐáÜ_tq¡¿ÖJÙ¥²–UŠÕ¸4CpN\Æq묐iÀðáðbQxh߂¿Á,6´Ï"aƒ;dú˜l¸°qi<¤liá"‡9 ¾•ÖÅ«·Ü'Spè²ãЛ¶É÷—{å2ÐûÃ-" +&Ñ¢‹ #ÙjeošL€ážÎÍßó*OÐýÖ»Æ}á ·ØOûÛ>/XObject<<>>>>/Annots 681 0 R>>endobj +1307 0 obj<>stream +x¥W]oÛ6}ϯ¸04bÅVü•½ IÓÚ4k\úZ¢m6’¨ŠR\ï×ïÜKʑÕ`(0I#‘âý<ç~;ÓÿÆ4ébFI~2ŠFxsøõñ÷“‹ùetA³Å$šQN“xMÃSF÷'Ýg¬Î¦Ñ¸³Šƒh:à‹ÉbŽ¿cüTšÖl†Æ—Ѽ¿0žag6ÁJNñø"ŠýÛêΣWe™ž~‰gs:þd#êKƳhÂ[>¬áaS9}&¶ƒ·p½C¼tµÉ2*­sÚ9^âÿ‘JSZ›LˇçšUj*Äk+ƒ·+]hUoم ¥°ù—„ôËß}Ô!ôz«jR°Á§‘Ûª +_ã9-©{Qi•’-²ý Zí)ÕkÕd>òaKA†1¿ˆ%¨"Ñ´· mÕ£¦ßÖ\ øWéo üK©õªGƒíª@ÌÎÙÄÈæã@Îș¼Ìö”Ù ¼èÖ²‡b5ÎT¶²¶¦/§¶ +eø©ª~yyÈþº²9ŽùlŠÔîÝ.iÎãJ2£‹:¢¥.hp«ë­z¾Üj³Ù®PÝ­µé€àÄàýžÂ^ºËÊ8ÀWN¬°å¸Iaà(—™M¹ô¡žõŒêÑl°§møÁï_EѲTWý‰â¸­m²àä“)LmT&͹B磹¸;rU'[î4”±Å„o”žhS Ä¶à¨: H¹¤1z Œ /Æ÷º®ÙêMeP>'™xýàâ—mlç‰ðu<çn[¡ÿòÞ½¤¾p‡#CBhÇø’n-,šyhCLÅ#nM³á¨jÛ ùÈ#Znkaá¡I·ŸÞ½#W#ýÁj–ٝxjj¹†ë™Ñ`‚D«ý£*IÞíò<Ì}«9I^ÅWu­óR<<íoý.+[êªfà¶R‡€v[“l+WòÉgêÇ) æÈ.û݋[WÎÍÁDj£õµ™äÚ‚»Ñoð»ê(QEL‚wSãÊLíuÊÙãOt‹WêĬ 2ÞFgùKS¸L¥Ó3á#r¥µ™®zÞu—HŽíÝX¡§Â @ò‘RœàFaw¿ù˜Z²ïÄô*3ÉPo!5䓑@ (¦2f¿Öp‰4‚,ÊÎÔ[±ÒÆtä&sŒÏÅNíl4߂¨dp‘ù¿›žÅR %×kt¼§a:NS;6Ì?5Ä©Ë¢ÀDˆœeBöä.¢øÔå«âq}ÌY§?d1pӊ¤Õ~¼:“JȘ¢aÔwš9 J­„߶íýûë66ïӁMáÓÁñ½€}•¼4eDƒºŠCv¤¦Á±Ži龗Þß?Þ½ +SÉ󒙇rƒ„”AŸÀòsFÁ~æ!VÍúYUâÀ#ïg0¢j•Î-ēØiÊÛéÊ7KU^þ!7¶èø  –;!qÜíQ´ÔaßAÌҊƒîyœ"Yz =´·…ÐNgÙðƒ© Me›Rj{þæ95Ք¥­˜u3UmpÓÞoBâî3RêCÁMàîB¤”vÂð¢´ñ:Þî:³%ã•Jl1ã7ßDœdàA¸àKZqEfUÚOýñhiÖž}vàDt²xu÷™­8›ëÜ[v@·Æƒ»å^F ùÜ +¤@ÑÈásýve”µœ…Ê[1"@öˆš¶@£ªL|?ÁW¨š¸Ðon%Ã)#Y°ñîñmŠSx•á¾ÓóLt>íEß~ñ’ÜØȂþ®p3’lE_âàaÏW[\†±jÜV§A¢-B ãîó \²§j³) éû«÷×W Eû•GöM®¢Æ̳çaûÉp>º”ý?+Ú'sÜäqW—KñbÆÁ¾^žüqò/§}c,endstream +endobj +1308 0 obj<>/XObject<<>>>>/Annots 692 0 R>>endobj +1309 0 obj<>stream +xµWïOÛHýÎ_1G{j*%&v~$NJ´œhàHڞ”ôÃboˆ[{7g;7»^pBZ©GUšíìμyófvóϞOmüñiP§OQ¶×öž~å·X´©Ûéy‡Ô øôϧ\Ò›Û8þøËm^ÇmƁ][¯ßïuú°uüÀPFðÙ­)÷jˌÂÐ k¶Ú2#¿ë{ýš±¾†€ëGë댂¶ÿˆ€ƒÖ×°"‹:¤N胂 ì#·Œº8;¨V|¶¾†µ×õz5+S :  ¶¾T >èûL–ßà÷úbWÆZ[3àC}²Ö×°‚´^Íê!¨aB8¬ß ‘Ž]ϵµ¥"¨Y™ +·†é@$ÆŸ}’‡ùT•=°ÉJd"'Söw“"98kÓ!Mæä{ÝN@}T©×i-µi5^ÓÛÉ·½F¾Œ¢4‘ª¤¥¾ÕÔúD¹ÖårYR+¢}©VYœ'w2/öùH›Z>PÁYãDg"QÇÓÑðzt>üJ—ããé'•¬¿ÒXæ8p<‹ìFPàyK¤Ë…è|­|,+ø˜~IT¬ï MhöÙ…¸ÊUʜN :WsMþÑâŸjÇHdòˆ¦®èB2ÿYtÛh" JdAWcÁøÿÿŽÐ'øûñïüT)—–Ð_ZKW,S‡y*n‹£i{‚övÛѽ±Gq‘¦3ü\]¾¿œÍ˖Áµss,‹(O–e¢ÕÑÔîß>×]ÒÉõùçÓk~ž_ ß]œÒÙå5M>œéêú|49½nîôé,ƒü¦ÎêtñC¬Îf[Rüö•éœB–¶qÈåG³ÙþËʄñWv˜c|¼Š"YóUš>0=¡)5U_åq‚g˜™](-;QZ\'˜,hàa'ê–FòžªV*è.T.$Õz{xõÅzŒôÙæH0`ï(–s±JË&Ùy¡çsLiJ•\©Xˆ틍‰’1%ÊðÌsÎzkٍi5ß ÒàŒdßaó˜êˆéeH +³ÔE5‰ztnI°i'¦?j1¿0j˜ˆj@6yJÈ.¼¦{þ÷A¯ DW½nÃ<§¸‚¹xoN´’o°9‰\Þ EÃŠw0w÷ 0Fx˜:ÿ^Ý _VZAÏ íÓâÕo7‰:(Žãê;Ã+›!»If0ØÙh¦·­‚ÝSí)sæ¦úóÊukzí75§Éw2†¿¥þñ)Š!ÍÖçǃ¦}ªóæa'=>È$ÑE¢Vëç.:@ ‘’ ppVÍï÷¼~ÏÇ÷¹ŽšÇÓxøñÝÏý /:ÑÑÊèŸËì¹ÅßeÛa‡Zƒ6¾þìk­;èz|q4Wk8`§“½¿öþ|ñÔWendstream +endobj +1310 0 obj<>/XObject<<>>>>/Annots 697 0 R>>endobj +1311 0 obj<>stream +x­WmOãFþž_1 +NEÕÄoy)Ház¨@S°TÔ·ñn’½³w}»kR|g×q‚ z4 $¶gžyæeg&ß[„øÁ8†þÒ¼ú“ ìßÔ +/BˆG}?‚ÁdŒßýŠÁ…CTß½ÕÂÁ?Ü +Ǩðœèͯ­þøÈ@†~rDø“íU·Ð\dü¸ú^?Q§b³3pš´‚óŽ YBäú1ŒP8š@BÇ’ôð¼A¨âwL 9û9ùÚ +¡¡Ë(hŸ»É”.EJÍ(,¥³f@ÙOÑož1Kw«P\¦ž¢Œº°áâè~‡µ‰#ä =Q¹"ß裵a֮ï™à1pÃè'üÀ‡Ú‘²O3Ør@zKÝ@ß\\'fóiÀL8Á”¾Ókˆ~œ%gÓ/”¿t>wòíu>u®:·_‚—óiV4îݜÝ&³›dÚÖL¹eżkC”ioewžÃoŒ@ •ÅC'-À«9ï¿ùž%×=€¥sFîUÂ,]Kh·á¿¾NN^ô⿽èø/|½üUP€cM§ÁQ.¤ÌŒfàÅ/šy h~? ó ßôúE°:Lo͊iPj¸š +4ÉÄ1wÅxC¿Pâxœg ëÂ0²L×Ð~­ ˜¼¨ +šPê{Ä'?E¬cÒ7¼ËùÿZ³Ì¿Q®àIrž˜Î%…1¶Ç×%k’¯I¸*ö"ëþ¢Ô`´ÕŽß¥Ý—öà]ÚÃwi~LÛÛv¶Ó>€kiªžÎí¼àð_0Fm¤§*þ'µŸñE ó…ŸJ±lh4¯á³,¸í„Š™R ì²w$+Y¥ 9ˆšÑÆNn gDh¿ Ö¸®èG)XÝÎë‰Éî#´âÁùD;{Õîõc7ˆq®ÞÚ¾DP˜WæR7®‚sÜ"«†s8Ûáø'Tn4\'Aâr½ìlaJÑZ¦Ü*¢à 5k`›‡dʇdÍp‚ +©r’e`ìlµ#Gyng÷å<‰Ž»µ“}\0Ðì‡ß¯ð&œ_\žáNLß÷¡bž—ÚÉ´ÄlΨE줬0ÐÞ{DV¤`宧v@“23]"ÛM¾­mŒl-ë°ºn;¡Ð®ì?ŽZ¹Ýsæ¤M°~Іå5Q*q7°9VÌy¾  ŝÇȆӎ`A‡”­¬P‚ÚßK®X΄ó®NHšq¼³«–x„«Ü†ë©b»#ñ/Ájïݑ«6¸-J8Æ ³Y¥°:.›5³nfrÅqÛyŽ½åíbÏW×5¬þÃÌ \Óê´ @úL + ’‘¢i , Ï@bmÕ§ öëb x¦¶Á¨Ã²rA© úq…UÖpIwîD#ü10éÃ(ÆÕyäÊàvvu:Ã.¿²ÔÀG™–¶~Ü&mu{µJoâšþbSŒþww\ÚéádbÕϒÖ­ÓM¡endstream +endobj +1312 0 obj<>/XObject<<>>>>/Annots 700 0 R>>endobj +1313 0 obj<>stream +x¥WÛrÛ6}÷Wì£=¨«uÉK'7;ž6Ž›0“>ø"! 0 iUéÏ÷,@0-Of{,È%v÷ìÙ³ËogcáwL‹ Mç”äg£h„+íLJë³Éä2ZÒ|ºŠ&”Ãê2š5ß2úÈö4Mñ9[.ð9ÁŸ•´q7f‹e4?ucºšâÌOLVììэå1…»åi®¼åå19¯/ã~°^­h¼ xƒTçË1Å©ËpDqrï$Ýä…Uº*)6&+eu9^Íh S~f0Y 8=6®`L°¦Âš•Ê’}º½ù›ä·Z=ˆLêŠÌ†*8ø¬tjö%ÝÆô"M鎽I‹Ë߅M#º2–“™¬$û†ÇñhãÒcsQ)£Ÿ D)‘èWÆÝƾ—k*U%IT´«ªâùp¨š¼¢ÒÔ6‘8i+#-«!‰’ö2Ëø?âëùLMRçˆÞy%¥“¬NeJ{UíœËp,ùc)UeeÕºæ #Šwª, Ã3pbtv £µUrÓs <¬IkÿP“ÙFŠª¶€ †,#_”s֔f:FéÔçò†ç`ù»·<*"ۅûl+€z–5¡r©¸ü˜¨¬‹ÂØJé­Ëxkn5Úd0™{§w®òl…£€˜ªSÔÁØ k‹‡Ë[ԚM;d:¥Õåpµ<ž©U(n!’¯b+KŸDÒ0q°ˆÀ^Ð6=¿ŸÌtœ¢»ÙçGhL@Ÿ™–‰,KÈ8ÇÄàa ˁ4ÀÿZ$B’²Y橕dŠ›d¿SÉ®¡ÊºJãÒXöA4°Ì ˆþQäkÁ¶ŒC§g:Ïüã࣬åÉ,B«u üL–ÑxEƒÙÌ÷ÿ«Yèà×¾\wGåzÄ9ÖˆƒÏdnk¦æZ @àڕ‰)¤WÜÍI÷ç­„âEÕ?©¦ÈãöÐu×Q"7Ñkï/"ºÑTîРπtÛ]tÌSßLÛïª(d¿•°kT­EQ:®9`£2Y>CEA hÌÍí5—˜Ü ¬ ™»HZJ¢õÁËÐc*=-\‚SÆãîq*ϝu’ÓCå3Ș TTbÍ2ì9…P <¹8 dô­–·”” ð\§hyzÇw”Ëd'´*ó2¢7"Ùõ*˜Àºál=í Ó_”¥I”ÃéӇ?]Á˜"©jèŒÎŒpÃZƜó´ô÷žg¦”Ú*nÊæÇV7á_ëúîºiÍΑ]]âĝ¤6\$Þ¸h½Ã'úp GatÀ8âZ6õ‰¶… ƒu,æ¾BóFýÎI›Þh>GY081¬˜. ª?µUՁ’L¾rì ºXg2ý Cº”zåÔé –¼ëu + úÎ9·Ò;èA¨Œj ð^°ˆ…#ˆR8hࣼ}ÿ9~ 4AiÎ}<îs6›fTF4$s,þYȃ˜Ëµ7L<ИèÎB0»Ë +Â͛)-éNZ,I‰UEõ ÃLÐuüÇoÄm—Ò֊”w#s#žoŽjG®‹ÿé:ˆ~œSe¼ÇrFkƒ¥ÈrÁÁ\ +íĞ%áD/Tó‘ˆð<MQBé±õ%;~2Ã~ÅÀ~Õhñvæ&•iÁ…é¬sRîHP„£qÊìôÚÛ¥=Ïí`íî*N¢Ž)Kf³1P• &†¬6ØB!‹²`5KÉÕ'A¬{³ƒ„5µèë˶ñË|íwôÇf~ÎçøK?lm‘œ´m:D+Þ±5N'ˆoøÙG$tcµÙý\0(@…ýk¨“[A[¬gºðþ"à†w>ãßÞwâŸqDÔÆôœ®Ñ$\¤k 0…œS]°pC£ fnq>/XObject<<>>>>>>endobj +1315 0 obj<>stream +xWMo7½ûW |rkõiIPŽ£FãÆ­¤@ÔµKI´¹Ë ɵ¬Cÿ{ߐ»²´V‹Æ-i9ofÞ¼Ž~œô©‡Ÿ>M4SšŸô’é”^ÙÞôh<ì%CM'üz’LÈJZâlÖ»_õÙáådwv€óõÑc°ý^?郥!{Šþ£ä"‚|˜qÙ½éÑ%͖ÔOFÍãÅxJ³,DÖ£YzFüo¹|‘j% ÿž¾–ÚˆŒüZRfÕ³´´TZºw³Ç“uú`ÑrK[¦å­s•t$ +ºÊ²{« +/íÇ1?›¿£»‡Î÷×-œ¿ë÷ƒ~2fÜÑÈCÄO/{hä ‰ÔWBëm ™SK­^†\Êêތ¨ßgf:‘šÎ`(‚ÿ/…$³¬-ÌBËܑ,RSq22£ÍZ¤òÀ–*VáèmàÂ1šœô´x + ‘Kr¥H%©HÏBú”Eí0pÞÏÂ*S9rUYëá)²J¦kå%r´Ò%tc,ÉÁœÓ7Udfãè·©"ÕUÆì7Ucϝ^•8ÚröY8i¿YÀZº½…ùŸô|ÑO¦§`:Û¡^^P +^)ï:pÊ‘å'žÞžÖ.ãdÄùÍÀEi¡ ‚ÖfÃ¥{*ðw³¾É6*Ïų¤h¢*È™,‘¹FUBWHÕù +ÕE3$²QZ·ò´(R¾À3Ï.¸{ŒÕ¥{kJi½w™Ú¬ÈzûJh,{7ÐFí¿ÉŸIF,-¿?*•>‘6æ 0m¿#ô¯Û:/sD¾RÎÛ- ÏÜ°Q—h´†¸_~ý|7Ÿ?ƒùüº²º»6…·F?Hâëù<$4Ÿ*ž•5Ë3‚6bße®àýY +¹ÙãEèØ:ªaÊ ®zÄdgkÔÿ‘4þÖÐJ¤­à1¨‚–([›“u½!ÎJ"¡„~1„mÏéAä hÝÀQa| Âm9¬ƒa2P +è½àI‘äh%jŠ&b)¦˜Y[SqÒGr&µ šEºìJhVÜ6ÊSÎRf?מ›ºÁ†À–Æ)4¦—eÇÒÑ*W^xn(¼C#ÔqÎà@Ón¢´‡Iò$VHºnxZ¿æ˜[‰ß"Y}PtöåE÷rڒ0Ïkžö(Ík¥Ô.1Œë|ÂøݛKêOxpBKÃQììJ¬ +ãT¸! 4|<ы3±X“U)çaö% <쒧—[cüK­*C`°™\T«?SYχÖA\YÀDóhÚ·lQthxfÔ¥59âx¸ûÐ %¾cj½anõ±@:|=¨³°¸#²8 ù w—…œœ ’jù®G¸ëîÜfè™Ô» Lïõꗧsr&Ès# cDŒøÅaX1tèØÒýuÐx¬"åÄXà…Ä$…!BEtžKº¸ú­[íÕܱh8èeûZÜ R/ÏqGÐc…ÆÆÄ,WY†[UßxGÖÐÊÎù£–篅zyÅwÕ"ˤ®X’ØJâlâÍ$f͔ +*…k†W8ˆ’/±ûé4°×ršš‘f§ }ãNˆ×âx2€©ªdöu»J3n÷µA8ì æ4Nf  ®€ ‚æÞâ…+Áóe,Sn@•Z>s…›có³ÍZ¥ëàmQé,Ü)­ÐR}É4˜Ä¤—˜Xº„•ïÙ µ vÉK!Z÷$¢ï+mBÿՀï¯yx|Ht lP„í0jѕØ~䮞-]þ †Q`ˆ6¥`E?*Y¡Y0«£«&ŽëÒæ‡p–l +‚ÍâhèßCäÐú¿f&0;~¢.°n¥«Ë¬ëøv‰¼5³êí®È5_­Í†‹ ¦©PØó °×ˆ…©üÿ"Ÿbú¥`•½rŠ½)‘\a‰…lÍ·†ÂuYañÜa1”À\ý/¬îÍ´^?úã‹d|ѧñxšLÆA%Ww®xWzĔ¢&|¯0Ž£ÓǗŸÞtHIß9²³ƒ[a4ߞøÉe >ÍN~?ùOÛ5üendstream +endobj +1316 0 obj<>/XObject<<>>>>>>endobj +1317 0 obj<>stream +x¥WmoÛ6þž_qK—-jÙ²Ûɖ)Úb04[< C’´D[L$Q!©¸Æ°ÿ¾çHÉqÕd-¶8~‘u¯Ï=wGßïÅ4À#¦éFJŠ½A4›Ñã‹Yáb@“xMi<›âóÑ$:&#i Ù´·/ìxG£FvùFô)³Ã£#Ø +fgÇÐjÍÒh ›ñdÜ:|=Âgÿݘâ˜æK$2™Mižú˜4Oß~E•Ë“—óÛ½þ»³XGCê ¢Þçé!5•Q¥£D…(S:¥~mM¡Ê~^êáÿâ ¢ËÆԋÒ®v^ÝouéSí{vð%mS<ªê»Øjß>ãû¾–µ¬DmåÖFc†ø“àÞ:]ýo¸€g‹{¯Etê‘¢—¢X²™®ó”¬t(¬°º‹\R*—¢Î¥¥6ä2‰˜SYÉ2UåŠtI]²ëdAnSÉW´¨)üÛò{”'Ê<è(]Dïù[*µˆk2mà¿.¹Š0æ2áØ"eâA’ÓäÖRÜ5n9€\'"hpï”.mDól ¢mSùZll0²¬ó|ӂØø³•LÔRɔ*á²RÒ¾"aÙÙ"]P!6f†÷`ŒL]œÏ¢‘×ÒFÑá$sdÒ£AGA·zÁlña!É3V¦¯žµÊsø¹“v•6ÂlYµ!½ôø1[±c{Q«²“ ^ëÆÞ ‚„щˆ¾šÊrÒ(*€˜ÃY.E tÚ0ŽMã芵AðÔ¢ò¾*ìbgǽ֍,ô Š¥“&d –ü@ï—Û Z +•{¤X…ZeŽ– +æré np•KKŠó]¶ D>Žó¯I.ý–zLw{•I%Â-T‰‘ä>®¬‹…4û …U+ÆÈéŽ[Ïû0‚Xa±ñʶÒ:—¦Ë ÷à,—Ž~$¹¹_ˆÄh»-P~…žK7 bS#«\$p»V.#QUFÕp²á­™lˆvãqb¾‚,[¶¨Ë®9N’9Ï<ãÏ>fz&€•`8”1g)ÌÒ·ÕñÍ: #¹nŸ3ð âëL%Eø^¡C\0°´QÙMÿÝ1Åh:Þ!½Æ÷ß¹¨W+žJ[¼kL°Âo€ÝµÓòÚ9ü€‚cNp“¦¬ûÈÑV‘§îZ‡Ê8² µ3¼}•l&ÑÑ61ªj{«‡¯Ž0«º%äZx1Ҝÿ¢)J`wBDçdïE’a?†Â!¶;n¯€˜,…^Züçý銪o1xƒïÝå‰3„!ãÅøâ¿d·‚mj;ûõ­e˜m¶×=Åñ óž«i|σ´æ ÝíW)õ*:ësTxF>ª'¼3S‡iٞVŽÐû“Æ`u€PV¬äSçm‡xñֆ¯*Ç«A”ÝäE´³öžˆi›Äö(òmLßixvöÝç =róóÕ ó…|ý?K£Íq!¹ã[>’dªOFcº>DZt·èÛ뗸· ØìûáËç¼úòunƃñ1÷2ükóÒúêoãOD™ÈœX¹#òÖwX¸Ÿs¼½“Œòav¾ÂæÏ­‰Æ¬LŸ³ñT†[ò£jο³æwG<9Š&G1M&Óèhâ —翼>§ £où÷F'~: >±Ó^ ÑÁlD½é¿I¾´kÆSüüšàw‹Çláí|ï×½±-,Ñendstream +endobj +1318 0 obj<>/XObject<<>>>>>>endobj +1319 0 obj<>stream +x•WÛnÛF}÷W̛À¢$êjA‘ u AÒZEQÀ@±"WÒÚ$—Ù%­¨ÈÇ÷Ì,I]b7­ I$µ;;s朙Ñç‹ ñ?¢yLã%ùÅ0Òl<‹f4YÌqãå4­ñÅbA‡7·Á͐¦“Y4o–ŽÆ¸lÖi2]tߌ§Ñ¸ûFÃæ­±2™£Ñ;p;ß¾]²ãg–·h¹F„³Åœ–©œ<¤er¹Üjê%6Õ4ì‘)R“¨J{ª¶ªÂ›¦»¢òp:·O:ˆ7$6ÏuQÑj/k|¾J2ÃŒ'E+SQn|¦UjŠ Ù‹Œ^-.†Ô‡¯1<¸üÓ֔¨‚ìÊk÷¤ÅÛUEJ¶®Êº"¾„…\dÖ>RãÔ ÊK~E¥38um2ì·äµ¦]ë¸Ó¾Î*øãôKG®Mò˜í±?œIf-n”ή2s4;SmiokGrÇã÷¾ÒyD×\+µ-qúV!„f_³ žwô@WÉ@,%ª ~[˜Öxyc Ïh=)glíÉô¹Öµè n¯i4 yìG.ÓË?8`1©§ÔÒ{qæ>ù8ñý˜ßÁ^ûyÙ®JWø»¿q*g$“­N[H;T€µvT¨\3$Œ,՞!PN'vS˜¿uʬ¸SùJÃ~‹Põ•¯+1Àé‡7ÁÕ!]shkS?žF |ÂcÂ_ëd(yj¿µ0K° ÞÙ6)º˜bm]®*`OkgsÐWØW›Û•ˆZÂV.°~m³Ìî8ü†zHøYºƒm²VúKåTR¡£SÿOð}õrüPV< R;ÄÇ=JUËçx”veņ4JÌ59â½,탦R Õ…~be"jQ9þ +jærü<µ¾ËëW•åGá#Ž¢èƖLø×O*«õ œ&°eAÜ ˆ•«²ÜzÔä, nJ¡¿jªf¨=>³GyÕ+é¥õßH ¤ ²r«Š:×Î$ Ql:ŸXT“Þ_BÈ£.‘l•hÆùˆî˜8(뙷ìŒÝÑv_¢Ixº¿ìõ{÷¯xít–EôƒC—¶Ä×(_´ŽR-EŒ©dC<Ú]qæÏ؄ +LH#PäK•h¤U„­‚l)Ÿ§¸‡JOì‘Z¡}Û =³Ëm[$ˆ`ÏVØÄý=úÛÙùìèθe¦àÆlQCÑx¤3ƒÇ9ڝá^$ ÏÉúN_®Ø"¿¦ £Ý¬6¸ðya& ~ËòÒѧRüoÊ?;ÙÇD "½EÄ÷¸íz{éÙN6‰®̓íñ³Û?ìé÷öV/ÍÁH‘$´Å½ýÄàø9ƒ7~{|!Y ÀBãIþZ: SYn°‚; îO,N^°ø=sÏٚ[èoˆÛB¢RQú!#GŃ ¦µqH…¯”CAu\KÍÕ#tQm@p³ãôYڑ¸“‹V1:ðÆ®­}Ã9Æ×àP7 +) ŠPI!µcŽ…†‡ £q*(à—O¿è¦À çù¼^V&¨ëÓâ7âoÆA[œk†Hf^;E‘¯%ì3nŠƒÍ$uE˜Á"¼1\Î $™ÝØÔ 4Pý0½àù†‡ÌLˆ¥¿îɀ,Óë˞ñ¾õœ'ŒÍom¥è®pNÑÝûŸßýþ‰¼Ù*cýói¹y·_~$! $_$€…N¸P·‹æ×Áh‚9‹1Íæ³hz-Óåݛoß@ŠöùÑ&¨ÛE%óRÈ ¿°¥?bzû÷it2ŸDó~;ñÂë˜÷ÿ´¼øõâÚ;„endstream +endobj +1320 0 obj<>/XObject<<>>>>>>endobj +1321 0 obj<>stream +xW]sÓ:}ï¯ØZf7ßIûV.tJo†ËL_[NDmËHrCfúãïYIN‚Ëå£$öj?Ξ=+¾ i€ßCšh<£´<$š-.’ Ms|ᯑ”ãÅbA‡f/šNfÉ<šÇøm4¾íߌ§Éxÿ“Aü½Œ'“dúÿ‹döˀÓY2üéÅ«%WÔ y~}Aà -s”>›-’-3ŸÔ€–éÙ;½"++×£J“n\ݸ—˯'ç×áþhŽ#gˍ²„?n#©ÔÖQnëŒpªZS-Œ#SmTÅú¢*Ŏ6âIúþàW½êѓ4*W2ÃáÚÇ´–rm¶Âd2ëqêå·ÒQS“ ­u- £›Š=HJuY +þ¬9Nx–«BöhÕx÷è;߈Ìuéút¥Ib´Ñ L@´ke,I72}d·¥xD üüñݛ«÷ï¿0&ké< °åŒŒZo\À‚¾5²‘ ½ÍiD|4–ôêþ5iÓ)ôýíÃÉ0’­µ.¤éù“©¨ÈɲÖFUìÈ:]j`€ðڄÐSKlo* +Zqî«R9\[Lv´Å»NðJ;¶¨d }²ò’MίtÁd&“ñˆú£i²À¿@Š¨¨SêßF }VáD˟~{fîÏâ̍ÞƄB¨y“oáFVÀGÒiQ;¸= ½•¤r_2›3Ð.8+Ç/¹–cƒN©ÞœW]#P-ÌX„Y ífGo+éû–¦²’ÌÕšé½·º‘ßÁn8ÀV ™ð»ç“•`dË}ø)1èÃ¥) +tœMè³rÿBX«¬U*[S»³ D§.‘•ª‚!æùqL„'%·Þ˞ž*¨´ÒΪgŠž–‡3ÑR]aöF\9ýNh¶ÕM‘‘ü^Ë4”ŒJÚ.‹UiõՆœ7›ëþtóö:å|N©q +ÄÝq™tÒ ¢#¼€P'pDP¤®ñÀ)ûGÖ¥? sî‡ì¼¨³ó–ÃD/ÂèQ¦ êÐf·—6[û!̦ÀÒo½„âÎz¼qœŸS–_ Ãr·¸²ÍAƒž!î˜Ýx°;â„.D^B%mSC0‹6F"âôñ_Á8oHD?ÒfµTØV ‚hŽZ|9£7Möåç'Õ¤=(º¯ mTȶÑ8)œ'Aˆ!÷ãs¼§úc¨cû …õĔ®Ö ÿí¨<ÌC¿uÚyòQ0¥GBÊsúìV³óƒ½â‘šüSª¬T*‹]w¾—`¬ß¼{t[ r—¬;˜|Yki™5!ÝKZ‰ªBCÂst`Uˆê1~K»«çhk´+æØQ»¢X:;4àÚ}©¨I×N!ËV°G|‚|Ñ´\­±Û²N›Á^™!D"æ⑍º ß½@-8∗vCgÌ:#­¥3Çå?¼ŒÑƒwbïۗë¢Ð[ß/Ô{jGÊü~/…ꥹ¤$I8±?Ôq}~\"F . _X¦¿nj‡@03J7^ªƒ©£N­k b„[ܔ~¯0…Eã4ƒJYӎ±ê¶ºeD¼zq™²¬¶aIí©p¸è´×*§klM#¿5</(GÇ0‚·/«s‡ëfÛ S™6֋LÁ×¹$»¥ڎKY“³(›CàvAF°&öþÑÌF&+õ‡Å”5Xº4 ÅÁbôæ…Õ¯•g¦7­´Ìo!±÷©Qµó‚ÞƒÚ¥Ð^Z(Õ_å0/Þ{Û·Ì(ˆá1×øA¥FßJQzåºFhù]”5_]ñÙþp†ÿ-Æԟp<Öåý­ší&óI2ŸáNls1æGo–'Ÿü ìžJãendstream +endobj +1322 0 obj<>/XObject<<>>>>>>endobj +1323 0 obj<>stream +x}TËnÛ@ ¼û+ˆERÀVüPü8:uôÐ"MÜC/Vmo"iÕݕ]õë;\ɍá&EÀ6¹Πɟ½ ñ7¢Ù˜&SJ‹Þ0Ò4^DsŠç3|ãß2mBàfzƒ¯¯â©ä¾˜,n¢øX‘v¤ªŠËŒ3É@>=™ÄE´Þ!$QÚ³m(Qˆït¹•¬ÌôI9*Œóä*crüþ~ýÔÒ`4‰ÆhãÊ5Îsáè QQÕÞÊëåRY†ª?VRÉï˜Nf>ZºÓ^3öœzô¨{@=¦VW^:c*êÜë*g)S¨æ ’×w Å­zƒÉ +£ñu8A£Êê=´é/bÆ"öՋH•5IÎX@u4_»: ­d”4Ädm ŠþUŽZ­myX—cE.>tcv:õ_ŒçVõÖg†œ)Dö¾A‡["%œ¸Q;‘:4¡%V¶z`RÐê¢Õ55E¡Êì‚L%~œÉ€H âvŒ1wa@±;+#ÅÛ +*MMZ—±`å°K ¦Ñ…ÄÁwߺêa»g0…Êg°-ND¢<ŠçñžKP| Ž#q¬Ð®Qø¦:Ù,H†Usðü·l ¸È*bùäüõˆƒ’‚ЁÛ·m{`l\ÆI½…²á4¼âÙ§vçUböÜ&v{ ñE«¾t-Ě„Ã ;ÎX‚iE ¬€BÛºtýã"y«RÄ#zd>“n݅< <—;£-MÇgޝԑ\ãù„&Ã1î8¶ýqùùv‰I4OȇÉi]péÃàÌàø`0.þJâYͦs\m”]Äòúãº÷µ÷oÿ!endstream +endobj +1324 0 obj<>/XObject<<>>>>>>endobj +1325 0 obj<>stream +x¥WMoÛF½ûW zrP[±YrzK‚0Ð8n­ =ä²"—âÖä.Ã%Ũ¿¾ïí’M§(ÚÂ6l“»óñæ͛Ñ׳¹\ák.논ZIRž]Í®äz~=[Êòf¿ø©µdáÅâj1[M_¼Ýœ½|ÿZW²É`kµ¾‘M*°s…'Éù'k2£SùÅíœõ²ÕM§µ•ÏƦ®ór·eSùtwûû‹ÍgWr¹XâþyëÝñÔù†>æëèãòÕr¶à©7[ßÔ*i⁥ÌçýÅâÀ­mô®VqV\ÜLR;ï²fH“×®Ý墤íƒ.´äŠq#è˜T×HGɹ+ã¦ø¡}þ*†epG7ºv;mµk=.–UÛ0#m÷¦v¶Ô¶ñ’¹† +‡ç)õL>k©jíñ2f´ê3:—nŒÄèù®Ó¶³¸Â›\˃*·j‘oM£y BPµ*½ '%Þ )6.\}š7În ]"¬è\Z¯y‹ÅSVx·¸'„»'‰* +!÷E»Û)•7-BµIâõ.m $“¸S%2ÑõÞ$øݙ&É$̸nT³‰Óԕ +à#ÎڇãU¥0†QWið@3ï<ƒÔû|J•äÆ¢›Üx©ŽKª}R›-’fH£€¦C­ýÁ7º¼ý­*à›5æᬵ ‘U…ib¿wbŽ ð^À§ÌìZð)&Þ¿é\ýèŀº5î‡Y$ÃSþ‡.½k <ÅC5ØHC_. +y´®C±sÕüC+äj¯%5Y²ƒY¥KuùZ랡̔ ÝIvè£ + €ße¬/+€Ã#“NrëÐ`𲎄ê!ïB)2ôwhÁR¥šÀ1,“´Eƒ +O3¶»5h:'±¼ÉHäG.UZb®pсn¡ °ˆpÊ ,‰-H?An4bÇ¢9êèqzõÏåà8÷Ay¿#ãhò¢œŒ¶„‰<‚ +@0úïvÃ߯ÏC`7<¹ïÇãSŽ¦Øp0:é‡8³ñªW\J»Ú…åD¶¡Â® °Gõݺo¨MÈ?k‹by©Ë-ðC^Šj\+fòÑbi¸à;ÅÒu*8v\ò€¦oX€{ª +Ô˜Òa¨bP²¿£Íät,çÖà ˆò1ž˜¥!åx+[®H$W§8Ýð?0¾»}ø‘óäÄ!©‰»ô{é,æ×x?ji¤‘6TN_X æÉH d{ ¯¸_ræ1–± b†€ê|w1&ÊL +ç±4`÷ÆôšD ÚGÝãt½&¾¶3< ¾å¬G÷œ(·|”›RÞc¯A5âG“~kDét¡`´1²™¼Õ‰BpGÊæˆ8¬iqw~–çrßa\íu!_Î÷F…ØïžÃ ø$aì[\‡YVFðN +³­U}øòÿwŒEŒÆ°ö;ž9Ñb”+Ž²M1¬5j ±¾ÂlµMߕ7§OLËë?¸ý‹Ïk¨î“,×ËÙzuçÏëk>úysöëÙ_äÙžendstream +endobj +1326 0 obj<>/XObject<<>>>>>>endobj +1327 0 obj<>stream +x…WÁrÓH½ç+ºöªÇN‚cŽ†,µ²ÄriIciˆ4#f$k½_¿¯g$ÙQRµ5Óݯß{Ýþ}² 9~-è撮–”V'óٜÞ_-ðózuƒŸ—øãmÃW«ùìò­.—ïg×o}°Z½>ðqsrñùš Úl|¹º¡MF<ŸÓ&=ýî•ód 5…¢ï÷_~RÅi¡¢”ÃCC­Wt¿‘¿±É(w¶­Ép¥<±—ƒ{êl[fáÍ? 7z§þˆ—…·fï6¿Næt¾¸Bz›ìt#'äú´°¡­.q“·¸‰›x|¤2Jö;³됉$ëH픡ÒæxÖȹI꒥kÍ$,ǔ~žÿÐ&³yå½F威# é^.rL•{²ÉNÛÖŽëUԐ2îKðŒ´§Di“ á¡ 7qkøY…¼·ÖU“¬ïžÞ‘ß#éJHÔǝÆÜiFá +âM6{ÂiRFâeÄu]ö)ú؝IДkNt©›=X^î^‹€8^‘Ý" “Îý¯°§fï;ë2aSÓ)0=f hà(}>zG¤â‹ÞŒW=ʼn˜”¶‡ð鴗ú«f?½ ý¹øü ½xÅ9œ)*€]®úÅHiÇ~r~)~rz$&¼,¸4jΨ*´OªÆ£‚w(ÁúGûFʶ ‹`昭c:¥M‹ÚB‡{ŠÁ7&Ðvڃzè^‹ôĽܳoú€ ­p7ùÕiÀ¤"]€µMrÕԥ݇ë¦ÑŽ/ïtSX„EAR’jħa¡nPišÚÖ4(㸪^ĹSÜÀX¼®@¡­ŽÌ˜å +V¸¾JåŠ3áMÌT¢¿®=à˜Ñ=.ó•Ð;´îTlKÇ{!TD¾SèW ëaD¹‰.Xh +©:n:t~sŠÁƒDäõCèa¬E<á“HA†2‚»ÔY…6Búà¥;:ëí¶éyc i …Ö"«`xz”ïÖ!W\Á‚•¨\@†B½HtL;²PE’¤öG©\G©ü…Á2ˆá‡d%a'‚™-‡±Òõ“£·!˜&œOç2øSæʔ–À^D"ã1¦sƒN@3ZCÙè>f b¨÷ý¬?a.e/S8¥ŒU…"KJ™àÑpÆý ìõèmú ñw ³F,™NýnA“Ð v´B‹˜ÆOĖre”ˆ Lqïþñ1ôî9éF,RL?c”Á†c^âÀÿeB Ä9žÊÀ¡0Vö0Ý΄¢%UáØP?0CߔONð +H¹Èº10­œºÞg߀´ü ‰ebJŸÑ[•¾~…@{J¸š´Wìü©-°hÁñu4X9¶œ»°\¼~~3ÿ&ÁËõêúæzv³\aÃ]–räÏÍÉß'ÿ@äÂ+endstream +endobj +1328 0 obj<>/XObject<<>>>>>>endobj +1329 0 obj<>stream +x•X]oÛ6}ϯ¸ÈS$NœdqÚ·4]>$ëfÛÛ@K”͆5’Šçýú{IÙ²œ¢Š ŽLÞÏsÏ=Êß'SºÂ¿)Í®é掊úäjrE×w7“[º½ŸñgüxMÕɇÅÉå§w4½¥E…+w÷øPŽ_]Ñ¢8{Vµ¦¹ö¯¦Àÿ‹õO‹o¸rKÓiºrq=Õ³ÅZÓ§ÏÉyzžÏÏÉRTi;8ŽkùIëuÐ >6T«fK_Ÿ?ÿI®Õ^EÓ¬(lCÔu˜ÐçHÊZ· ìýŠ.¦7“köšàzå|;®¡ÐkRÖ.Äá‡s˜6÷ +A4%uAûƒKÑÑR£"ÁÙW]Rå]M¥©*íÝاë|¡Ô'¤¦ÿQukõ9r ¦•uNilœÁ3 ªVÛÞzNêÀ½øƒí "tUVÝVÆ⻝G€È3¢àÖʒ|#•šÐ5:²gPPLj’¶‘rÎ÷ˆF)K|gHUD ® …Yzþ<§REµD™ ý8®2ž)úø<çD_Ñ>Ô·iäqÐÑIþêúðí‘6Ÿ“j[kŠTßÖ»•WuÍ 1MÔ¾Rl‚ mL³4¯Ûã-m+† ª.ýäª'4}?ÚpÆ©jìIÐÊXœIMVÞu-°ñGö‰o +¨ïÂJÅ$8rè–Q™¦G¡bS%Oϋ¾n]`ïOóß¿<`áSs¯¦DÒ@Àf”* +×aÄtÓÕ2W®é+ÚOÑW±—ðë˔–5K¯ü6ÙÇՅjvVx„µt8MTʛq©ÒýZkdA¾kD;ʱo Ã(héÔ±1Pµ Òa€jmǾ¶}Z(ûçhb\»nµæ¶´ÁÌæÁà֌ƒ=æ&½«Ö›Z²vMô.–ÀÆ|ÅW.?Z…üÎ.u,.›„'…*èÙñ @`Èäš [«&# éïNc,£•¨tøÖ:÷ÒµRëGê[ÂOÿ;ÉF¹/›µO‚3‹µ T ¸˜æã¶Õ`Ãã¦åPuy.†2õIp§­BÊÓC#(Z"âp3xHñ)OŒ´Ê1Yuí„<'\E3Ƌ„Z]0?¦Ð ón z֔­ÂÜÂi`–Lë¬ZÊt¢fÞ<ΗÚc«T|Š=;–êŒZaÂûÔן[/³Qºü>‘p¿Q€}Õs—P&Oξ›cgLÍÖ)ÄIµ+;Ëãf-âN¶ö +.ñÔý%Ä? ‚œýJ>CwxWâîÃgÉà¡¡Áes½ÉÜÔc£Ü£°Ë-ú¶v›‚טzfRxÅH~ªØúÌæHþóÂ>蚂×%ZlÀ™iÇõF@q|4X[œZÆä„~mºû'<­»}ÎÏw?òα1‡ˆà]Æ®ðÛ`\{Æìû(HNØ-›Ì¿<ÓØm[Ò*€Œ°÷yËõë–ט^^ÉÇXë`ƒäF뒙}/]2#?Øh»8FHG¦ØãN¾ÅŒ€„uq в²¤Ólê4…Îíù#„⥐‹ëèVE fǶ~`CfXÁ^¶£ìøÿüö>/XObject<<>>>>/Annots 703 0 R>>endobj +1331 0 obj<>stream +xuW]SÛ8}çWÜ7è 1ùjžviYZv·¥ 鰝ÙQl%ؒ+É ù÷{®dcètÚ¡Xº_çÜs¯~hˆ?#ši2£´<&CšMfɌ¦‹9~㯕´¦ïϓé[&ãQ²xãŒ'ÃæŸÛOG£ñûäœÆ³s˜/izFºæU‰¶JP›ÝIyp—™´.QËXI®`iì«òH/Tá’÷9¦ÀÁd¡~ßqŸ¬©+º¾¤ Dáy™,23ê'÷@pÖ|^7á" H­ ™Ôd`83³sôuÉð(Ï`²]¤ +* r  v¶À c^¬®þ8¹½¾üñ.ò©WDØr…Úä¾ØS¦Ökiqaûþõú_Úå*Í)(-Y¡7’Ìš­¤m(Jîb½—ûŠÝ0(e¼Þw®ðw¸òw ]{N´êØуYq\`í )‡8UvˆŠ†À)'âêöÜ66Ù<¬­Õ¦¶H%Å/6¨¦JÀRe*xq7"û¯5ȵ§Ô+¿¡šÈÁy0«‹(›Gaöý:˜Çðu¦Ø"\&(‡·VÖ0UÊӘB/Ùgšði-Ÿ|Ìɬ­)ƒ-ÓCRÀª²&•UU¡bïucic¼A‰£çžÏ¶À;ÁÉØXÂ3ÿï%ÕMûÀ»¦ÜoàGì:n›Yì5Žõ¨ ï"XÀyDC™3ªP[å¢À¤Èz×¾æjۏÜâ@¾C¨äÒ\Â2# "6{ wòg-5üDÑ WJe´Ú³’e¦¯Ú¤Ñý°%ôý¥*jоŒ +m¥¯­†;˜ôíòcègÄÕrPÓr§|ŽS½pz´…ãº<›å,`8 +gÿ2»S"ÍC#úìP{ّÜBG=U +Н† +÷Òáˆ,´èt7—DèùMM •Ã9±,!Üý=¸ ìF{㬘¤Á=À“æ!¾@ƒ¾Û˜P/ëL¹T`çA4Ð@ÌM´qøðÙe¨BÊ }1Š]a,c°ò^5˜L£T\#CˆOdûøØøM¼Ö®1a0ceÃhþÂèaҏaÖüirMK‹6‘=`9á~wZT`)ÀNPÔ ÌЭ +kWêóÍýò¦l$å‡—µì 5÷x4“.µj…˱À éÇ®°ã9.gbk­Yñp¬éèC”o|í,ˆØxÌôA³îMméo¥ë'Z™'œ +æxÛC—q@–ü …ÿp…šÿ4v;â EDJ¡«_¹3…°\€J¦ yú]Ýß±¹3~h.Ðc¼ÖB¥ÿä_‚wÒÆÑ.´W5ú™çÄV9TýyR´û2ÁTB'[™ ¡a÷í0ï™Výmïš7Tè(ãù2Ž@"¦PØáû°2+ÍÂ.aUîÂÜC0•{º•Ùg¬ïs<2¢ø÷³mª¥°+,ãèág:¾Í ~:´Üá½¢Õ±Ë Ï‘6h,¦¨¨†r÷IîŒÿ +2ÌŽ­ÜÔ@ûlt=…öc—„„¡g4øŒ­"å+ì‰Xó$0à‹‘Qí¥6½gRz„Åp%±«íðÀpB è8Öh²fªô8ŒŽ'&bÀ¢¹fÂÇ·B`º€jåPjˆn¬jó´— ß(K0–tZi––(\‹µÁó¿°pf’`äÇë: ž¸í;bÖ¼®ð^=,7÷ùž\nj,%×lÍã-ø[äXÚ̓¿vÁ²ãÙ¼éŸEóu„·èâ|B³Ù"j`,í7kP ºì>wØî`4Ãëx1¡Á|xÎ6Ãèe…ùôöSf:Ÿ&óÙ"p¾`,þ9ú°Eendstream +endobj +1332 0 obj<>/XObject<<>>>>/Annots 706 0 R>>endobj +1333 0 obj<>stream +x¥XÛnÛF}÷WLч*€DÝl]ЇÂIã6»‰Š¼øeI®Ä­I®ºKZÕß÷Ì,IÓLÒ¢(‚Ø–¹—™sΜúϋ9ÍðoNë-W”³hFWëY´¢ËÍ?/ðßiÚó,í¾|üåb½æt9[F *hŽïÛæSNŸ.úŸñôò*Z÷Ÿö>ãéjmúO{Ÿñt;‹–½§ár6Ç×/#ÄQËèòË› Bo¿¸çA‹%‡/I®ÖˆN²|½&ŠÕӛKšÏi·gŒV›5íRAbF»d´ËŒ'•çöä©Ê4}º¾}}M*-Li|åTeU§çg²¥,Q5–•ITeð«B'™Ââ· >즟M¹xÿj÷ÇŌ&s†x—Žî~C{>× Î°{Jm¡ ŸVÄÚùˆÚC¨öøL¥¥Ü–í¨Ô:å2õ¤Éë£Bš¯šôîRIbë²êB +iá¤'í"^<½Y5 ôv}Î,ùÌÖyJ±FÎ*5åñ¢Ô&u¬ +›[DùÎÅ +œ!?ò׻ϻ;â ڛC‰P9eö•.^ŠßíélkRàÎÇ\ó|cˆØ*ڛ\’ëE² U¦t2>c,F{e(ÒʛüüðŠLYé#Cú/ɧÝ;[ðõŽ˜[â03ଏÛ8 ÑeȉaD»LUä•IÇôŽTÁ\}ØžÞ_ßâú£v՘¼•\ uFN] nŠuU]ìâðÓ +3 l$ÑL{M•ò¾á0i8œ¬£ÍœV+¦áa±ZS`i‹ÊeÝO›h¾¥Év˜ú¨ÿ¬¸ýK>™N.QCˆL!¹"V”Øro5PeÝ33@©·&µs`4Ô€GÑ@i#z}ýæ=½ÛÑï÷ß½¼wÔháY*9Ëï< µàÕqØÝJxD±J©>2ƒMî‹šÑTWÉô¨Š(nJA‚?sf"÷߈Jj­ü¡‚QHTT¨5L±µ¥Æ?~Ïíõû·ƒØï>¼¥wŸWôêçV{† ¢® j$‚ ¿‚¹§DÁ'Ô#Š¦‚(Ö=ÊÇbw̔°SPüë»PIfJtúƒ§S6„• <©²â(|Õ#é ²¨¦pî•Ãøx÷±?QaÈÚiDµ\Ü0%îû­‰úpáBÆÀ:s0¥ÊÉW\ÌøՙNš £$ìã +Ú»ZÜ~ÓÁ'„Ì0xl8XÖ$ý8yxÕ\õl\šrœî+‚=z7 9”þèýÕMGÁP÷þvr†]åáÕõ~B8I^Ãóزê2á +ÁSSƨö”R¥ [JAô¬ì>G±³Óîa“±´pùIÇÁQƒ1ˆ³†™0­”äåP5Æ9vZ”Ø™L @j „»ÀÝԞÊܶþŽ>‚ µ¥º±CÄý‘~*ô#æFÅ&7UëRPoŠÏ€7€Ø$ü˜q;é<çïG˕fp$*NAÈèJ&ÑâD=lŽÎ>™„ÆçoÀ¤àXÌõatÌëÃA;h©Pd»Ñ -oïº[åt? -Ym0k7ƒ` ¡vµßœÞz!N.8ØE¿P ·e?÷;‹ô„×8lýÖ|nõá-ÛE¿5›Y}A0ƒ-»è·ÂÐâ¦!D삷¾_ü·€Ð*EèËZ%Öÿ)­âñ*S†¶*ϯ(ÚQ"SÑäõ©ÒÔ"Çù»÷ßßaE/WŸ °zÆ~c*?×±È}#ŠH´ÛÎÌØ£{)©Î$‡[-‰Ž›B–µ¨•.I¥´Ó Ÿ›Òބ€5ފ²¦Z™7ºÛL"­27Ò£wµEL"7š¢Få‰5µUe¤Ê$!ùYÆM-¢\’(ÊUT‰JIãµ(oû`LÂ%¢»Á›{ÀàѺLÕº­V8p—ÆlUg^ ‰CEck†½í ìM¶‚..ð4äÅ¤{`TJ™Hx¡©jJv¦=7wƝâäPߘ! ³Î*ݬ3r ­BVIŠõFµº¡WU´©ôFV¬hxN%§Å\‘Ñ­—ëèJëúÙ1´xCž×VotSÅÒw0|xˆÏvañ.þêЉþwmJSÝ mª†±4FT;v¥mI¥:Ï5T®ÉìŠHç*F$ËÇ×_;/ib,œ (O¿ö‹Èïʄ›ÆÖa,Œ$Ò=RitŽÒ3ÿ›í1¡¶ýÎmyÁafÁTwƒÎGѝ͟ š8Ù¾/›Ù#8Ìï±ùð:ð–ÓðKæ÷êN*Æ"sjN‘™¿œ¡z{EÂǀ™§o™ Òƒ6öe÷U<èx×Èc.Hð£ÞRcdeûÜø©¦ë½'eÓPZéâ´­ý縫ű7Óö·Gïw_1U°œkýˆö°­¦i ¸ì2ú§¯ÊÛv6L0Š,9Q÷³ ½äµ]±6ž–c&£ç¡ˆºrò&‰Þå/ÚXµrt¢x8®À—Ùójȹò,cÚM­ pFT¾ã´`~€TJ$î ¿æ ÓºZÇ?1ˆšÍ”òsí¼é¦U­ -É¥TˆL- \<"T84jjæ/<Ø©èa̓ˆË.Ñå f¶Žî퉇—Ý8Ä.Ÿ+DÙ0ì>Anz÷ããl'ûóÏw®Ðä‰þ¦u%7ì× # e~5ÇUv؎ÇÑOBåvÎ"ª®„m3È8ӆ"?’ „!ÿ¿8ƒgÃlŠèL÷ &ƽ|’•Èi#*QHD%ŽÙÝÍӎ[jŒ¹®+Û¼F2OJW`ìÖ½/ÝÀöÄ`Rº‹Œ3y±U&1b"M\©ÈÖ$Ú~S#œnŠ¸p>Œ—(T|\ãòsÊ—lÙþß -ÃTSèD¥Ý@•qÞ$ÇcÕqX¾ß×¹ŽDþó¡¯ÊcÚp‚Îà¾ñ<ï»sÏ –³W#$hXØäNaV-‘QTUÑ‹W/®Z{óñýÝ»¯Ü6+ oöDÔÍ©Ôöš3¦oéKN†¢–³ž±!jT‚FeŠ¦øá -ÁcR”EŠ-ÚHu8sPÀúِÕ0±ÇÿÍäú?˜´$yÑ&4|…ÍvVÉp„šï߸ ôðÙ·ý »h’ÛÌX öv'íÇÁ(p:­ìރð¹,¬ÕÓþòlC Ú¨$Ûd|þ0Ö%Xܵuʝ»#4.JW楬IÄ|U|xÉ1¦´¼É¹¸2<"Õ„ÏkhËÚþÆþøџ³\¤}&ØH˜Œ¿ðßâ%hŸCÁ5ޓËWüpÃ@l|r,ð¨ÄÉÍMÔ¿?h% f«¬\úØؑs½Xz‹yw‰ -¦3VñãjôËèµ[°endstream -endobj -1590 0 obj<>/XObject<<>>>>>>endobj -1591 0 obj<>stream -x­VÛnã6|ÏWœnâb-Y’/qòRd“l‘»I-}¤$Úf"‰*IÙ5ЏrQœ‹qÃÏefÎýuS„¿˜Nš.(¯Ž¢0¢Åò4œÑly‚ï þ§•;˜Ï’0|J&ŸO)Ž)]!Öâ$—”„HQDi>Šá<œ†³~—¢&³átwþåÓ9i®¶\‘‘î·ÛË *dÅDýKz³ÇA²@=i1ºª}V²,åNÔkÊeU±º°Q*öÀ_‡¿ï“>%ÓnÃѕO”t‰F—7_ί¿¾Ì>"¡]̚UÜEÄS €räŠö²Uô]ԅÜé®z²Õ "Ÿ•¨…6Š©$`ýݘ 8I¦‰=Ý[N[Qò5×äa”ãÁ }xÚòˆž’ÒüìOç}Ë4iµš”2gåD³*c“LԓšRMNºàŽ,rÁ7z§  Ò“”‚žFɍ(®Ykâ)î¹ÒٖeüŒ>XMpЇ[¾!vYùðƒ Zžpù¸dyí0{q,½â:íÎCº3LjW)”œŠ‚ -Æ+Y;Ê ×†„ùÉ#|H½[^›–•å~luC;Q–´cµqڕ…Xí½žt•‘¶éMçJ4î ÖL‡ ªÜC[Ù©}PÌ M(ÝϜĊ„Õåv#hӌ)kméVêÔZd¥§Ìv$qtßâ‹e¨K…§”è{%”6!¥Ò× x†Ù=PnÔEÎõ˜€Á›3 Í[‘žyÿ“„{PÞdãú¸"VîØ=3Åj) -Gc),¬™è.á¤éy@Š;üU[×°Ÿ0üÁyk4ŒÓ?´V¼éñ,Þ¬2Ý å`l0\E›sËLr|ÁxnLb5,ÖWّÒOè4Jæô+Eљû¼¨âÙ •;´«õ–k'+ò1µ·­aZVbÄCV›v2«‹™õ2H­ö¢†‡ü´bìV’‚ö}Ä:ƒá9œ4cù1ÀdżTõ½³îWµ†ô}ó¿YՔ|L×®YÛÕãæé@í—Aïuâ=õû0HfÞJ.®n>¾rP»M"·/Gö@RwnçØQüÎù…¬0ïµQx5:üИ·m†QÀ*p™&Ÿ—Ý«@¼ÀëÞrŠ—¿8\XHü‚¸Uòžç†.eÞVðn7ä¶Å ¿œD³è_ó(…P-Y°®z­é¦u*œ-–ábžx´ãhfC\¥Gý V£!;endstream -endobj -1592 0 obj<>/XObject<<>>>>>>endobj -1593 0 obj<>stream -x½VkoÛ6ýî_q‘‹Å’_qœŐçV¬y¬6 Ë>Ð"±‘H‡¤âëþûî%¥Äq¬¶ë)RDâ%yî=ç\Ý»Vzø¯{Ž!-Z½¨£ýI4†Ñdÿà¯0k&­ø´ûÌpÇx‚pÀè^’´strñíUš‰‚Á/¤²/“÷­tû½h‚~ýD9aæFZÑó½Ñå.u.Ó%Áœ6p±PÂøãÓôûBw0¦““ ѕ*uR+ؾN(· )S ô¦J+88 ¸¥’3‰¹´Î‚žÁT» r²˜âpy|DñÆú§c#HÌ\&ꔆр.žé<× ©n ÕE»_QÕha4¢P£µû&¬îV«ƒPaά]ð°ø$¹°õW]‚Ít™sŸóÐ s[ßZ|¾°Ô¥§×wbáÒxÓépFÀÅ˜úì€ë‚IU¥¿XÌYPbA'™Uæ¥ävnüÿ™.piDŠLI -ÇŌ•¹Cà"ÏmTmŒCJĘe¸Íe¾zHÒĵB"‘íPu¨ÔÕ}š¢©ûTqýYaçþ --“¤?Žv£a4ŽàT~ lA*é"Ö1ãP‡65rî*åí×ÚïFkûû¼•ªünzÂb%Ñ°òH>êf*_㽜‰u¬„à–Dë‘Ba34a\?ÉÓg§ ×ÃԆ°pR†7¥RÈŠ]KQÑsôI@>X¹bß1{»CŠó( d¡¹œ­UŽ,æµi—Ö‰OÏÄÒßGžs(>Ôq€ZÛ&è6craµ®i)¢7+j|'øx -Ù÷S'±bʞŸÇb*™Š*ª)Æy­9OT÷-F•¨éA›ZæFυYƒcÅ])T*"8[® )xûºý]Ã:ÁkX -©ÿ祝° ÷~QjƒÛ/¡ë5Õÿ?¢nÕ~UZ¿A;l‡®¸Ã±¨Ëêƒgo†Õ›ßáÅ ì3ešA|ϼõnc[N±E’ÊàãG¸¾nš X¿!ÂWT[ ú“žf(t°ž¯8cøaÀFhŒ°s­8 ç…𳔕¿Ø‹ÐkgùLS TcÉg¼®çÿšÕ·ºÇô¥~¿•yŽ=<…ºý6ªã«Äñwüüyüñ餚`úcÌ'CœÁÇa¸¾:8;<€K£ßãÇ:- dŠÑDL„wë ݽMíjîDX_´„æ0 ¥£ðѧÿݪ™B{»ôî$iýÔú ÊódZendstream -endobj -1594 0 obj<>/XObject<<>>>>>>endobj -1595 0 obj<>stream -x•VkoÛ6ýî_qjSDO;ŠÛ"8Š­í6ۇ¸Ce‰ŠÙH¢"Rñ‚mÿ}—”äú1u© ?HÞǹs©‡ž—ÞÎ}ŒDYϵ]œ»v€ñäœþûô)’ÞÕ¼çܸxyBÁ„þÄ i×Å<¢yÝó4-J!ϖñÉüKυå¹ö„„72¿^Ï»üÉ¿8ú¡C€E+Ñqôã»Ӌþï<_ò<îwi}X9Žú³U¥Ïï‹5­µ6$+yÄätéo‚X×~¾Ȩ;[ÕÁÂb”5+l7üƒQ³ó /_¢Ì`%pÃÒIEtïÈj)Ÿ¤#³å·BîwT2U• fÏÄ?zíܼnKkù®–ØgöÈlßÆL¤aÉe-8†çÕMÐH~Ì!kS<‰ -9c1”@&bž3ÉÊÌҮG“r1drq²g·U,x|ñ¹È)$ñwȝì]É -XkyÏT‰¬Kçà•ã7+Øzñ¹Ãé-úG²è÷aˆmâÔ»{:†„TĶfÌtï;R‰¢Í“4‰*^šD”M¯~eΖzJFÞ½~ÓÀ[Gdž4Çi=h2\Ç\隐©”çä8-+Ú#’—-GBÅEŽÅ°ÕJžb-Êû»RTÅ)VBªÿõbFµ Usaöþjº—ªÜMBªÉ–Äbq¨óµà4?7 %%›(˜4òm²wA|x>}Ééw€¨‡úF~Ù³6·¦!˄9TÞ­KöÀ*1ÞiGÞaªÞ¾ÝKuˆ(„RÚ2¸ãvßëâ:Ú–Wu97“æîðz*™Œè¤™Ž³Ë÷W—ø¹_X¤0Q•1²º-5«U°Î]ýÈÒÞk˜3iž æz -K|¬Ìü;8óé®Ö¢n M\Ï{¿ôþCy‡endstream -endobj -1596 0 obj<>/XObject<<>>>>>>endobj -1597 0 obj<>stream -x¥WÛnÛF}÷W Ò°HI¶%9AP$MH´QQ0P¬È•´ÉUvI+BÛH$­¦MÇ wçræ̜ᗋ1ðwL³ ]O)+/FɈ¦·3ü¼™óÏ þI+÷âönœÜœ{q};Næý¯éýˆîh±‚é¿äû£-²Él£éÙ¯V¬åsJe¥ªRu’§V”K‘Xi¥¡?ÉÖÂÔôþ×;úûÙåâóň†ã\.r6ôâE"ãGéý]ô?œLùôxšÜ&×Éÿèé,«jíÏÞÐxìƒ ‡ß®è äï#¨7Ò¼ dËeÞ½<¸êŸ©Îœ!Q…{'[{U-U•÷íQ.d©+K¢¦z£,í´ªê+™Ýè¦Èi)I, Iµ¦LW•ÌpRã° —¡ºN&œ¼Ã•®)×¥P•²\êύ­ ϕÏ{/QyA…ÎDA ®%>µ»Nsâë,¡tµRë7óùpªôñÕû.Lˆj2õwÊñ(©¹$] ãÓÜVzt@ÄÈõé¸Úk³E‘õZ"m“P0º•ÃѳÿÁµ3úQÁ¯hp·ªU&j¥+ZiCš­9ÄT&ím¥Ü"‡·„I;Q2è.çpOÒR%eÎƗ}Ç¢¨kN€Ý•ÓÖr—ÐÃàÊÛB5p¹[IK‘m›%íª‚˜ŒZ« -%ñˆ¢}k®ƒNò„A+Žè{ƤÒ`N®q œ<\†‡±2¿ƒü{U>ár-uÞxªÓS=öªÞ0ã𬋣҆kÎèšér‡  -¡­b&­*%Ijuc2™VÖÂG¶ñIÇVP® ø®Í–`ú¨=Pø(mÖ²³3Z×ßys§&tˆG_)Ðü#%±ºëºÅà•Ñ%'߯È1úîÍVОCþu qð-¯âbÒ©ñ3½Sži÷ª#ï‘,xjØ~ T¦¬•YcT}…± }À8`&æ?¡Ïì´,¯&«°Ï#ØA²‡“ŸFÈ,Êò¥A»åü;ÿé`âƒPf[´J™/=‘†l­3 ƒn‹,Ó ¦óÿ7šÞÇqÐA¯;‡@=ðú-S uð#ŠÂ ‹duãùEµ±êëë&T€œ,2‘+mJQÄ´‚ÆÙ |Â`5Úõa-„Á_ºÉm¥µ˜‡Kt„,*Y£qq Âb¹ªw?” ÆL‚ÈÊ˼³!ëö Æ5ÀK)˜jeÈSÀ‰3 -$9Ó]¼ƒ}Uˆ'*".‡È¶äøó¬þm,Æàá’w,7Ofɘ1¶=°ŠrOÑ'V<Ód5¶‡«£>fµá¤Î¤RÀ÷&’zˆ{Á1ÒÝlZºN‹A¥ûfˆ’ôïóЏú  -õé^;´/Žûñ±ÙŽw®3ì¾›Z$ÁtÖnâMf'Mqðk“[Q #t* *¹U «¦ÂÚÓ`‘ˆʬେË6CÍô«& -ހð¹G²3!%66h±m£K;Š4TeWˆÚíª‚Ö²’¦Xˍ‚Ã»gðZeqÁ8É%2t(6 Œ/UÐ/5ævÀ§ƒ[zr†Ÿ´.ôÞ¹!¾N§Eà('€ø»u8¡qÕô#rñÔkk\Ÿ£ËxÈ!Ìg.£Iqq‘1'1-¸úÛ=öQU**ŸçR9ýêAÅ[BBïO”[ -Œ¯¬ Šå¾Q¡õ– -…E”×Õ ó°tŽ§øHœ_Ótv—¸ï«O¯Þ¿~EþÌ_!ot֔€×í$á0^ÎFü=¿Çho,®–ÅjméCãԛé<™ÞNðùÈGG36ñãââ狵Ÿyeendstream -endobj -1598 0 obj<>/XObject<<>>>>>>endobj -1599 0 obj<>stream -xµWÛnã6}÷W 6}p€XÇqìêmÀA·¿Ðes#‘^’ŠWýúÎèfYNêl. bÄ9×sΌ¾÷Bð7„Ë!œ§½À `ÞF“KüˆF@Üû¼èù×Laãñÿ‰O,xŸen åß3iDT|ó¹ô­à™‘.÷7,½O¤u±L„g5H'Ò«Ì -V(+®"¡r ‡W¾p܏݆ZÐJse3΅ˆNßz ÂÀ›`mÏ6‹cÉ¥P}zÞJµ”*BÇϛ8¼uŒ?PäÖ£äâÊæsPú¯7ºIbŸ‹s¹À«3ۙx¿Ì¬°VjEý}£QÿzaX"j0S;kTIÂZù¨_`¡ãE~¢WR•ë›ý0À™‚¥¾fj…ØS‚™$‡Ö,KlYîÁ܁Ò[H´~°ÈÏ¥ýµvWA{0y£²ŽåIÎåO4qGŒW7ñÅ&2%:‘5÷±4ÖÝo˜µ¯æG ]颉OTj‡ÕWWjgâXÇ^ž•p« éÙû}?µ¤°eToR”%DÒ'¤keu¡ÁûdBc% çªàÒʊ3˜‹"dÒ©<Qs -áoõë˜ìî(ßG -*aY$n¬ úYfX‚~ÆåzŽ£ u¢i͔bÀ´ø×v–úQà¤9§!’–% j€ÑÚ¡ šàtyÄDJ¡„ÃF? P´£`ݔwÙÖ̪b:ÌýyB¶C¤:‹]F×ÝþØ:¸‡Y­„##Ð10¥t.Õ -"-“¢[­¢mŒN7ÎVjX[¯t8­G;" Ô¿pì]xçÞ¥7ôàV'ÌH;°Á%Y@År•F8+-Ԋ܀ˆ´¼oº€‘¥F줚ª]«6Éq)爷fÒþÐ)“Š4 7’ylNŸ¥Æ#Ñû™#†:­ØâH%d9‘`W=Š$ÖÔyª ņú]ºÅCäi)‹„÷Î -'<³N§òßò$MŸ"ZNÈî{•ëÌtÜV¨Lq±g„fÌÓâh Ö¸µ¶;ŸKÁ¦˜…‚¸³®`B¶£OCà’(·Œj¨u\Êt£qc³‹º"®«†6»Z3ÐNê«Õêt"qáÂ]éÓowý“»Ó&I€Ð G¤Ó©Lýp ·7óOÝÛÝïð»ÞäF®ÖîúüîÂét<ÀéÜf -n$7ºLÅ¢¦(^Jð¬ãæý•,Xø*hÇÑÁ¡·_f7‡pl›=¸1Ɋ™K^ ¯ØJPÓº';ß ÁÀ²¢×( -lfÍ!ù÷‰Û -èåf~™ßΊ­¹/gòÖl/v¥·™Ž$Kî)#ÉGíw!dª\ÆÀÏUäåfšŠ¤“³»À;­Ú³ø¿­j,>WãŽån "WÖà%Ø3ó¡[¾ªGqSš#ÅF)F=¬x±?ˋ=3Z‚˜U«â>÷ýëIµÙ„c|ûœã‹nõ6p;»ù<ƒ/FÜáPâ F3þõ…Áe@¯ÆýjzÂBXGCg±ÆO e…ÈŒÆo|1Ä7i:Lc.z÷þ7Xêoendstream -endobj -1600 0 obj<>/XObject<<>>>>>>endobj -1601 0 obj<>stream -xµWÛnÛ8}÷W Å"jÙ²ãÛ¾¥í¶ ²kïå!@@K´ÄFU’Šë¿ïJr%M²€›‹ˆä̙33‡£¯½†øi6¢ñ”¢¼7 †4šÎðy2çÏ~¤_˜,‚y÷ù‡Uop6¤­6°4ãŸ˜`e8¤Ut|ônõ¥7¤~8ÄÉU|œéDD$¢HW…#[m6*Rÿú¯AeÍ S끕Qe”Û J‘ßlU±VEXýŠ9#¿VÊ*'kkôÔÜ/çËSoÓèLZX Bz‹Q#ãÆæKF«B}{Öf—‡ØÕLˆ‡®¹ƒðð¬Ñó ]* ˆ=]sááY£æሖÒZ¥ ÊE!™£#:eÙ-¡–múXëJX»Õ&~;®£XÙí4ùÓ¦|±ÇŸ˜ëúÔܾÇ؎±kY•K!p ¦î-¶^I 2Y•¥6Ž6ÚÐÒ¬¥Ñ–þ™»BZU$'úú¸*"s¦Éiª¬Üï¾~÷šÓÈ£×%ÛÚèü·f=©¥É™ÝÍFën8C]OB{^k¹Õ“FG‚‡¦T~‚å.öæúÚôâ»L·hh«­êCàÚ·ïÿ2FO«kpvBaXÏýєǀs™Õ$âM':g(S…$±q¸Ð1tû×+h–D:2*&½!Qz§Š„b]­3I¥Ñyé,w_Kø8±Ó6 4 £ip —z °N iwº2´ùZЯŒ‹"]2rìÁ¥FWIZïe™µ­ìRáOòæJ*–Œ9 ÒðSïsp¶ pÖ01>©½‡Ó`Ðg•+ç…ÁwäcÎfgíßz ¢TXVT9¤…)Èîϲ[…è1<#3),àÜIã¯u+)Õ¥dÙÑX€ -I>¸© wXk,Øßø9fDd°ÆÝ¢Q{oَtq'T&8,ÌÂgUTß TÒ D0iwÖÉü=ªÀ¥žRLëñ`;‚jwvÀÔç=FÒH'û+5®N¸ è þl¥xÔØ[àå÷„¸©÷¨>‚¹µH2Hd˜¨TVÇçKƒšQÚFâùÐ¥{KiîT„¿[åà^1]eU’xN ÿ…Ž+̞7Mh­R0ŠŸµD^˜¬\s´¸)pi ó—Ëemÿô‚°#°!¡¿/ÏÿC¶‹X›ºÐgQÓ~ýY0i¼¨«éc¾}ïkͯ÷'£zV_!¸e –BÂc½€ýuþÉgË;S±Ç[h‡í1:7K4F÷4G{d\ #–% ÁŒïŠNè/sD²MÈ« -öŠšÅ•hpÄP‚¾+ë¬[) Zïö¢@çìu¶(Vü.Qeþ:5`¥Íiíx{kÒلÑFKª.‡B £y¹ÌêþçÌ(꼾¹ôµ1Ué€8cˆˆÑ;7Ýþ˜ø¶q~H|›™uó‚:®¯Fþè -ùÎ}é@ê¤%æۉ[î\„ÐÐm/†¶[Hš58¸×™|•wù`å3 +Hƒeíu‡À±0d¾¼”cÀtÅò"pi …8¸neÅóùÂEÛ4ƒ[VĬ¢˜šÎMì”3@¨ #ÔÙ×ï]2¢Ðgâ…uú+7éŸ}nÍÇ¿ªL4 P\¸Ðªô҃…LfÑúr²Xp¢Ï£Ð(\³€VWH~b†4d:?îëœÕ©r41ÖȓìRý¤s{ä¶ &ªç WuuÏAÈÒo…Ö·Ý +XΛ‘áqa´à2¾««—Y°{J»z­¡yP\)ÇšT˜ìâ8ƒ~&ÄÒ£Aèv¿gIK +ATïPÿm•‚¨º”òmx‰bp¢÷ÍvŽ¢'Uâºj­Ž|7ý¦s¹¦I<¯)¿²†«fxVk"/sqv(n‰Axl ±Ãî-{³´KV:”‹œ[›—þák`Æ{ùðjÑ2K˜–©r©\Ã2\iP'J씙$#_1¨H8mî40ìÂ*èŸm†…˜©¾Á\YmM5Õ'Ǝ$Å$XfêÄVß: +¦.(Ô¡{p+íê~k⣢ÏAÖÞM1éî8iWöb›òžB‰ÁöʋPRóŒn¯Ü +(®MÎ~$nŽb +D/kr ¥ÒÖã÷“çÂÓikÐí{…ÌÝ-1]âÓ2ŒPp01ayoP(‚ÖΞSL\xŸÁXÎþ#e{Sqnxˆ¤™é3ÄÃȇXòá_wA€<¯þ'‹ ÷·l-â= Ó8†Ll›àoš5L#m¦‚ñKVyO÷❯?Û²>ÂÞ0ëvãÿсº3ÊÂ)sÈ*ð Í¥<]¡ñ'Æï4׍>zÌKgÌÌ÷¾ï½Âð™ê£.åM«>ÂpN™wò&À»ZĽOÆ֞ÝL$Ä ’Áº’#ʘÞÌhËS?>/XObject<<>>>>/Annots 721 0 R>>endobj +1335 0 obj<>stream +xW]oÛ6}ϯ¸@QÔEcɒ¿‹m@º.CÚn‹÷´ %Q6IôD)®ýøK‰²ìØk;±MóòÜïs©¿¯á/ yHãÅùÕÈÑl6Æûd1Ç{ˆÿRRŠÅ‚o勍§s/hEÇSoìdG€õÜ[+NglÖIYùß~¾ +Çà˹·¤œÂeàMÚUFw̯18˜,œႏ†3o +  ya»b fs4±Zàê‚»èöcàäd·ì÷ngxs‹8õfdÝÖtdñ‚qƒì¢Û +—/&Ðe¼õfÅ!?‰– »Z¥ÈÍl1§Ub£9¢UŒª¡³ln-¼DžZ} +n™‘³ ¨+ƒâ0§²=g CS gè6K˜åÕú4±ˆÁÛ¬¦Ÿ+çV;²*•K®¬¼d*™ãÊ¡Ø@©Q]1!þ©ÀNI÷G\…‰.^0ѵìoOÜ¿lg"vù\.ŠšÍîòåFx7MÎ6¶o0}ç + éZ—rÛOß!Ê=¶7¦[sZtÇÝyñ(Tf‡-¢ê*Úö†Œ7ÚP$â„â"ðÿk±É£3-س÷N>ÊRd´¥È%â‹:Ço‡jËÊÅVkG†«Rg6›‘܈G¥KÐvãÔ'¯GÝM¡9Ñ—îãTžÆiµ‘˜lb"M\ªÈV"åÚþR!ˆn”¸ Þ( +Ô|\ãÞó”.é²$°†mèñM®•¶×UÄYœÎVGdmøþXg:ٟddÌ…®Ïs‡wjûñçy?œÛxpÎa…À Y¡™»„ ¶@^QQՆ^¼zqÝðÙۏïoÞ}xå¶0œب ƒÔöÆ3 ïéKû¢–Ùž±"ªU‚&e¶Fxq„öKŠâhb6ž} §ŒÏŠ,ÂÐÿ/•ë¯Pi™ò¢N |ƒÎflÉ7p„š/หtæ³o‡qvQ%·™±ìí^Ú¯½yà0­ìÁƒžð¹,¬ÕãámC Ê(%ÚÛl$¸ü~  0¸kî”ûwOh_°Ì +Y‘ˆùÖxÿ’cÒO(y›qqm𑨮 |^û°¶¨üçoýç¿óAÿÏmö '/¼Ù4 ÙŸK~f4O1¿”úšÞöŸfl¦ƒžpcÎGh\ö¥áyK ÖbmècmGÇdÆÀíÝÅÂGZ]ýzõ/ö¶aŸendstream +endobj +1336 0 obj<>/XObject<<>>>>/Annots 724 0 R>>endobj +1337 0 obj<>stream +x­V]oã6|÷¯Ø^ìâ,Y’mÙ P¹|Rà.×F‡C)‰¶éH¢JRv ôÇw—”GqRZ$0l‘\îÎÌÎêÏAþ…°ˆ`CV¹„§µÆÄ˙?…Ùrßé¿Åa…{<ýøñûÇA´ôg¸9öc(! fö(ý*྿½ ½˜c<:Âý]d˜c°ù˅Sé…óà1F¼8J" +é‚ÇQ·ð!9‘Ëä&€3HV@5L#¬báÏã%$¹-1€$^Ö3ô†ÅOÉv0‚Ÿa’Šj’2½¡“›3CŠãµ¼èÌLòѯRT`6î/>}¸ÍՎ+0Ò>ûru ¹,™¨\œY'ÀH1Šç¯+Cû1ÀJ…Ü‹j ™,KVå¥düeømwéÓcØo8í.ŠÚ‹FWwŸ.n??¿}Bۘ+9-a:¨€ˆÒ‘+8ÈFÁ7Qår¯Û쁲éE¾ÈKQ m3R¸€ugÄ““°aØÓ)±ãP+±_s Æ^:<߅GZŽÐSRšÝê¼+&V“Bf¬˜hV¦Ì’YqªÎÀBçÝ!ç}…7ª8º&Azj%k,Dq]ËJ#)ŽâŽ+½‘M‘CÊÏái‚#}xÊÐÇî$+モAâ©—‹ Äk‹Y§\*†)¾7Lhj›ê ¥žç3^ÊÊm¸6 Ì×SšÝñÊ4¬(cR ìEQÀžUÆ*Væbup*Òe +š®ÃÛt¦Dmw°Æ`Oä}'[÷’é‡úv&X5†Õ€zm®CÚPê$ðZj-ÒÂEI\Ú6ø…xi¯Â]ʬ{%”6>$Òå‹ðôow@Ù×c@ ^í\T:IóÜAøŸ„ہò*·ÃX±g¬™)VI‘[ A°¶¢ô+HÇ3¤¸Å_5U…¦ãûßÙeµqø֊מù«Y&¼²×,ØRy“qb¦Fr\¸o bÕOÖeْҙç4ˆæð Á¹ý–ÅQû~–{, Ö-$ò1u ˆÖhZ–ň›H›Ô +))†0#C©UNÔèÿ­Øv+ ^ó6b­­ð ý3eÙ0„‰Ä¼êeõ­5ì¹úpƒuó¿Î9>†[[,Uõ8oZP»Ð9Ü£xí íÀ󢹿ÄIŠ6ry}÷þ…{"è!¾itëi£òvªöV>6ˆwñщ­ñ˜QoÿƒJÍúԁDßR¢½E–žƒéuI/ºi}—î„l4×-Î#œ@ä•9”‡Î©‡X×Ðö>sá‡igšS£{Ã÷CÛHGòû-2cÞ`Մ3 ß6ÐwˆD³¡ßJp­$å±WJ–öŠî_ø8…¡{ë™Fhøø’“NNÄ}«Àµ«²}Uòì©g,^Ù77*õ ÎÚuÂÿeËø뗲DhCLn–í8ã¹ÏCˆ ÿ,¶Ês†ÿEÉ-Ï \ɬ)ыmÓRv^ˆï‹Ár +Þ"@é棥F(£Uk wÕÑ,^bàÈ!½N¿ þhøE!endstream +endobj +1338 0 obj<>/XObject<<>>>>>>endobj +1339 0 obj<>stream +x½WëoÛ6ÿž¿â‹Å’%¿ CÇ]±æ±ÆØ0,û@KtÄF"’Šk¬ûßwGJ‰ãØ]°W •x<Þý'ön/‚6þ`C§I±×†CxüÑ7øІ~7 +"èøï^?æ0ÇØ6î~ø©b»ƒîClŒñU趴Q4ÂÐ^ˆ£áZ^ÀwmèŽz¸Ò=ŸåxºåÌp҆LçÝN },²×Â4u¥µaš4ON/¾«‚ 'JZ­òœkózúi¯ ­»Åhtµ…Ër– “m¸J2^08J !·e8•–ë…†ïŽy§U¹€K•‹d'š3«4\,eub8éBQG-ßR+¸Ö°Èi†À—2±BI8¸á–K{ “ ÕfJÃS° +p J)æ±k@Ía¦l¹JXL¦p9>¡xmÜÓ Ue˜ê،×èt‚˜Ð™#fj)ä $ª(p÷ + ì}©dܺª•²ßøÕ^µÚ¤z°TX0c–©_¬»\Ûú‹*ÁdªÌS×s¥c5ÌbÙêÖàó-‡•*5<=¾r›„Û²7}_?‚1sÝAêåàÛ_ +Ä{$_RfÒEÕy)Rs7î7S‡Thž e‚{àR>gen±pžç&¨¶×hc†á6›9ô*¤)U‰DÚ=êPWP£û´»5„¾®ËåwŽÖhzZ&â3õB +¤`,Óeh-ÖI9œŒ¼“è¼®ßõAÈò³Ïù„/"[ó+4£BfB¦ 7!e¼@ÅJÎSCòt§Ïæèªk3“)fϲ ì6Ãä–0’ƒ£G—R"î(k,Aí.ÈÛDƃ{+ž-3·‡¤-W%Y¨T̽\6Ð"39š•±¼Àì_¹óÈ]e†Šõ¥Öñ +õà‡Øœ_­1m"-ôfMwyú=f!£~-+fìy.ó™`2¨è¥nXšÖêry¯ÐL„DMÎGRÈB«×å~Wr™ðÎVâñéô…<Êa ‰‡›1[<¤®7ãvIk®UáÊöñ.Ý° Ñ3¢0}H úص§W•»ó•ãñ3·‚È»f}(Ž3qí{Ԋ{Á¿Kè—ëºyý~§BèøêÛ՟ޟßî_ïïàI¦ %¡±Eþ¥‰Ò M€cü^$ܼ][+ †[`!=¦ÐÀsÇ—Ó÷çW;Žÿx:ýéèÃÛÆw;Ö©¼K¾µóÿ½5’4ðܵÿƒÞ~ö³oþÿuë¶Ø¢(ÏXçoµõ+4üvhñ;¼&¶Xý"~ö¦S½ù ^½ÂiS&„÷Ìð64å %© ¾|ëëAT‹vDhnKê÷aAÐó_]žÐÐj±æçŒáwç¢ÖÜ,”LÉQxQ¡;~¥²Òâ§zéÇbm17’é:Õ}äEÖW‹ÍùX•s¾«ì¥ö¿yŽƒ=z&ïK¥•p2¬.Q¿ô{^­;AÔw£ìêèìø.µú„W!«¤,5F×Rb¡õñ¿ +CÅ ³¯ +ܸ’§t 2pQZ +ëö‡˜8FiaHԎéÝétïǽ?BŸ| endstream +endobj +1340 0 obj<>/XObject<<>>>>>>endobj +1341 0 obj<>stream +x­VkoÛ6ýî_qj3D’%¿[C'@Ñ¥Ýfcûw¨,Ñ6ItD*^°õ¿÷’’?¢6fÃ2HÞǹs©ûš‹6}] &¹ÀE†„±J !_ñgG=ð%#ïn½h㝣C“£´5®B®tMÈTÄòN̖íÕӒ)¾â"Á¬µöÕJža#Ò»e*²õVBªz1Óڄª1¹¹$†*÷Ýô4¤šŒaIÌfÇ:O§ºå))ÙDÄE!_&{]/¡ï9"ú ò¹¾Ôȏ"{ÀâÄØg±0ƒ‡Ê[Άª|•ƒï8Uoߤƒ:D¬„,— ®¸à·Çº8Ú¨s=,¿ÛïÙýž‹þ``G=Ö&7—ø5_X 0A3š‘ºŸ´®åöé%jH7ã Ms1lM™4¯$S=<%>ffàtûC2ìѝD"n»£U¯¦µßjßòŸìendstream +endobj +1342 0 obj<>/XObject<<>>>>>>endobj +1343 0 obj<>stream +x¥WÛnÛF}÷W Ò¹°HIÖÍ ‚"ij4@ƒ¤±Š¢€bE®¤H.³KZÚþ{Ïì.%Š܇:€#“s=s梯WCàߐf#ºR’_ ¢ùœŽ¿Ì h:¼‹&4žÏðy6ÇG#iÙ´¿²ƒè.Ȏ ߈Òd<‰n/½¸L¢Ùù‹KŒF㣍q+çÑ(ÞÂÞÁït|ˆçøâíâBøñý€îh±¢a4¾ÑùN¦sZ¤.Ë-’mU–•F'´SÅRiz½ør5 þ°A–E^½ +ÏFÃhÊϾ¼>—’ÉFӋ߬X˗Ë*‰U¡ª(­È—"²ÒuífƒÇietÎÉw+rˆþT³´ç݄Ø{ÎkÏ“ŽížèRy¦qÜ¡Ž¼²à©aû-P™²V&µQÕ>ÆFôÍ¿§Ï2ý}f÷ e~ãºÃ ¸]œ©eÜØy&C~Й0 +ýÃfà¾Pc¤ †ç,7$Z¤M\[óœß0—([5ºXí¤$®o˜.Ï:µ§ ^Ã:i9ùEõ·øÞHùöá]ߖ2Q+•ðô;§h9<;ç:6µóT3°!Õ"⑈Ž‚|­Ñh)æŸ4TXŒÉMÒ ËמB}¶À>˜á&I¢kÌåÿoô¸Ïw:ƒy:ŠÀ>Pû=³ eñM#²ÌíÉkGl³x)ݕÀ ‹€Ü>d.Úä"kò Ë5Әτ ÂØ Vc`>ö°Naöçnx[i-¶Ìã5šBf…¬Ð»PCð¾\Ue$*c&ÅÂF…ßïn҆p¬;4àŸ*¹ØcT¬ñfyF¸ °åŒg.4_^ßâIÏ÷ˆË¡!L{ëxy^ƒþíáz¼Žš‘2‹†Œ±í€åP”;j|â°3uRး9¬ÈD 6œÔ…T2øþÏDbq'8Fú4›†®ñš â]ÝGIºú<÷—û'”ë5ˆrª|Î×*Hœ\Ý­V<˜Ú{ Ÿãþ=¸Ö¢Æ·v7Ÿ:¥4ÙÞßUn‹ MÛ+±ÆA4w‹ášW¸‹j\͒eÎðYÄE #Jjº5ŸH{xÃ=€F­Àt•8é` ÅōÎaì°Å±vÊLTî„´–…4­Àin#œ$Þ½uN áßÉæ·ø®‚ ‚Š¤½‡7Þ¾¡OFá[øNê¹ɺýF¥?8ù.|¾$q´kKkw(§óh:áûLcVýiqõëÕ¿OO;¦endstream +endobj +1344 0 obj<>/XObject<<>>>>>>endobj +1345 0 obj<>stream +xµW[OãF}çW|Zú$âع§RÙ¶H< n—¼TBB{’Ìb{²3cX÷×÷|cç‚í R d滜ïrŽ¿Eâ'¢Q—zCŠ³£0iûføÒ`Ð 4GÁˆFcüi$Íq6¤~Ø "êGø;ŠÂ`²ù +†ƒ°~«Íôº|·:ÜŅÚÊS»ü}}2œ¬Í~ž²Ó†åÎE®i:G&Ãñˆ¦‰÷Ò4nVÐt)­¤Xä4“$…UiIV:*¬Ê䖒N¦ßŽ:œjÙlÄ:ŸWÿ^ÛoÑ"Õ3‘’̝)«ïë+äd¶J…“´Ô™L”iÜ øsHíî0è#ÆbjzíHwV" ’ÎÜ­÷i®ÒMñRä ™Ó$ÒT?ЃÊg*O÷Hı´–TN‚2‘çҐU™J…áóœ­ÙLÔñD½ Ëñ°ù€®Ê‚z–v"Jµ¾£TÝIøRö×*&Œlô{]€0Æø ·¢pKª^F~/”AVüê¤jÖ±2.Œr%ƒr›*ë|V“Øg\\”1·ò,‘yé:ó_yÒHޜÙˆÈd0Ú»áÙó¹ŠÊú¤çÜÀêçM¼¼u"¾ƒÄkîU,Ïli‘C›Ó?ÜèR¦©}"¬8օυÎlkâã2³hK¥s.ï;ng¾½î¨‘ï¬W+Õ •W-¹ë§F+—Â`MÔã"éA”]:Ê1mÜáö'´¸ïwé\ùDM·srpMßl¢ÈÕnV Ñí\ënWÂÚÃûôg4®})Ÿ@jÛº#µ5ñÎFÅÂ+ú}Ã>hÃëíãŒ~ÜHíDºcT¯&”ǯý Ž´¼QmƗ¦ò2÷l¶ò”.I$ ó×RV³¸¥QO;…Ûwúxo¶0‘¹´6šÉ¹6ð3+üŒ;Nºæ¿MM˜kšƒ¸ëDÌô½2›&ÊVl´vØ X.–ð=¨<›K‡ŠßaoìFᙷs±My›ízÄê˜ös~2wCdHÌ]Fá—ñã¬ÐFF%¤çý KVI‰.f©¯Öh+£³•³´iÝßÖ+ÎŤb|œ^Kžk ¢lÛ®d¬@¸ÄK- +#¸Éª0×KÙ_[뤍0â @U&–Ę«e#¼Q •XBÝÝR8ÊJúCg‚¨R,Q*0ÑLC}¤:F KôMþÐ+w““)*LQѹf¹Åx¨W®qå‡ØÓ%W"ƒtáÕf\X§3õou’•OÀÓ ì®PŸR^)î€Zwb9bO¹ƒ‘§-àåpKÍJÖË?nóX %–z +zÍ:?ahOHBDŸJfe'T) Ç¼ÖÈTe+ nF=®è庈Ïɶ㵁z¹+H0¨§O¿Ý´ŽoN6©_Ôçå1™tÂI'ÒõÕå§æíægú]¯J£KG7­ø愢ÉdØÆÛ䔮‹œ®Tlt•Å6Éc.c¸Ž‡Î‘ýW¶`é+Ô¿¹—ÉÞ¡=·_ίö›r×ìލs*2W±ïaÖÛb!¹t͓Ï~U¿î6»;¶°fììN@o7óËåõ¹×Ñõ +ÁcbvèÝ ÿ÷™N”Ho9#«ö›-dê\öàÿ!òv3D †ÊÙmàR=²øb©6ŸÃ¸a¹ Aâ*  s1®E£á "< GÁd蟲®Ï¯>ŸÓ£¿ÉØaÆ·èfí¶£!àÇ=jB<¦ááTZÇKnºÄ»¥¿ +ßÎýᆻxÎƑ(p6Nþ>ú¿&ƒendstream +endobj +1346 0 obj<>/XObject<<>>>>>>endobj +1347 0 obj<>stream +xµWkoÛ6ýî_q C +Բ凬웻.@°&Èfïñ!@@K´ÄNU>âúß÷’œTÉò\$Pb“<÷Üs¼ú2iŒŸšF””ƒqÇtÿP>ŒiMƒfñÿϦ³àŒ§-6qüðh7‡qÌÛÍð[?¬£ó1ÑzKa0›N(Ú<Šizˆ1­“ÓÔ21krœûb…â)¬V£BlFš'V ³ýt±ZŽjVÞÚJ| ´=£ö·[¡´¹­™Öï֟c†ð&NOzŸ•ÎKo±¤r©¾uܼÁ¢49W¢¶Û­H¯ÌÜ흨6¢JôÌ•à„–I"-(–¬b/Á¶G¦¯Z¨Ö|à¦WóqœžõµçÝÕÂpölؕ,¸nâÞãü$h“FÿÃñ‰\êaöu8äéqtèÃE‡'A¬Ã!珣Cî(:< zdNhŵ²z})u´t{ðA©-MOèp'Uúz^'1×DýÑ^‘¿±ÆÁõ} ÷r9¦¦Síû‹â5X/T6"iëZ*C[©èw®6\IMÏýM)f\ oNm•ÈÒ5M2’¬æ‡Ý7ï^2¢\s²vx¬@ԟáÿŸÚÌ_s͵ÝÏër\䮟´½ùXhSå ÷¹·íê Ðk„ïÇ´c{D¬.«ÁëP¾o{bˆÏ( ÝÜ6l·ádá8LUÄ +-‰¥)Æ4Ö;L…¨8±­ÁX„ÙˆîGžfU“qCJ¤$·ÄªJîE•Q*í¦àT+YÖF»2씟7Êužé ]˜DÁÌ-\ɆFmªw/­¢+7Œ~v¼(‘UÅã,˜\I›åÍV×EWÓ&gþ¤Û¼™u·¦QGsLà¾õ6Gçg.œ$˜01{ëŸD)Œï ~ö¼— { XäþÓL}”3 ¹*[¢»8ç‹û³Î €ß˜s•ë-Šœi¹ãÊß0žäŽS.kî:Äw·Ö€tO¯Aÿâ¾Ç”?ìôê؈ƒµbO²ÂƒÝ1Q0םÿŸDe¿L*¸ õ^^¾GüMîÅt=S{>~>ìì‘iÎÁ{¼$\&œ½Zâö„¹€ÎaOÛ$ÇW-Þ$ €[~Oð»½?<«_¡ÜF1„":šˆ=rªgóÀ¥eíXê¶Ë»CW ê­¸º þyV¥t]Ø,ó*,1ó?èý—2µ?{fZ×ZçP¿Ž¸8±Jé¼Åe{‘¿Z­üå%eà@†aCF]]ü‹hW©TMŠÎ“®AÒô¬É¦›I´ Gâ>×üúp>i^zÖp®D‚ƒƒv +!à©ÜÀšþ¼øè£å‰Ôó­¤{HQ³E&ñ–•—(ŒÂ¥ÄHy J€ñõÐsžìrñlå¬"gq+*Q”¡âê&êšóŠ6ûC;  guµ(î­ÉþFUP©íÂÚøø½aÛ ˆ·*…Ó8ˆÏ¦E³`ùâ\-/?,éZÉÏèôQ&Ö]ܾZø0ŒðjOi¸ã5=íó,Šƒh>A¹c-GîÌoëÁƒo/ÁÐàendstream +endobj +1348 0 obj<>/XObject<<>>>>>>endobj +1349 0 obj<>stream +xeSÁr›0¼û+ö˜ÎÄ|tÒf¦gܖN{èE‘Vz®$âúïûö¤ãŽí±@Oo÷í®~/rdüÉQ¸-!‡E–f(—«´Æ²®x]ðÏi´ÓÆݲN‹Ëûfqó¸Dž£ic“²®Ð(p£,C#¯±ßÛyP gáûÓçŸàåi ¦EØ1ˆé5$Ù ŒåüÎxےD0dÁ’œ÷A+ƒÒ>8:j•~h^I†$¿e‚ºzÓ6ôÇ©ñÁØgc¶ë R#Ã(Ò–‚xÕ Â¬„”4ڀ=yož¹æ@îՇZðñž:&Ì #Ü?h.ò02rô (Ovij毶ð:€gÀ¦@§£×ÎO¤oåIº¤Jëç~e…só¸BΊ¶HŠ:ÍWH–UZN3’•ýèt®;{ÀĊSIꞇ÷GôpÍüÝn†yD[¢øObÐø¦Ý›‘ü0Aî®±íÇ®Q‹õÈE69˱™Tô×`].Ä`»íAcc¤#OmÀ×í¤è{xÓàØđõ"ð7£4+%†^ûhzН›¡˜ß{›w /P œšYX°KbÙ>/XObject<<>>>>>>endobj +1351 0 obj<>stream +xWio7ýî_1 +H¬Õ}X@?$iÜ +p 'QQPp/‰ÕîR!¹Qôïû†»²®]Û¨lËö’sð͛7Ô÷«.uðÕ¥qú# +Ò«Ž×¡áhèMh0ãï~tD1&:¼é%þéÐ`xëuip{덩ÛÇ[¹†x†çd4>YaŸÃñÈëSw2د¼sldóô†í»[êuh#ÉÑxBóЭãIÐ|Ƅ>ýµûôáž6I¾”Ùõüß+6éŽ “Vàõ`Ô|›Ë$”Ù²Ø0 n·ÜÐ{#Þ0Wä󲫨tvC:/=Kƒ&¥b‘/³ö&ôÿIwæ{âuêµI2snŠÇ@×k•ë jŸo¥Ž«ôŽTLF¤¾ P«¥Ÿ[©2÷w¨ÕyNô!úio(P›§@V‘Èv”¨@°íTN[‘Yfo*[&;'Pie!R4V$ !i9á_?¾¿›ýÝN¤OJ—AQQ_;7šWÚ.¿ò§0»äÞ©,–Ë\?‹ôJšaJD°6dTÑR©BäHϺ#Ü "–V ·É¬”ælc5=ƒåM’p¨Ç*IԖHPÍïC7m|„ÅêžMú!´~‚BMņCSß pÊ3;—Nû®C·Ì«®7è÷P2t~£h§1é7úª™n¬5ßJ<¦í}ùÚV0l*CÀ"césÛÓLZûØc—3„>²DF~ä¸Â$L̔D®£üÁü)B™¬aÁ5ð$Œh+íÊ!|ðf˜³î(å ðàœ;Ųã[DÎâ@\šÅ.¾ÙDŒw”払ÀØbáèZÂ5iœBÙ¸qæ"Á®,Š\9Ñ,{ނ¹‰ÐOq e ÎŒæÀ ɝ#RþÃP‰ÕRþˆ¸£uîŽoJ +P, ž°d|]&ÊÉ72hæ}ÛÖâÇԉ­”±TõjK™HQ 0Š2Lís%a»Fy’.ԙÙváœ1Û*ý„NÝ>`¥«r Öid§/F …¾üç¯ÿåmÝ_õ:õÖïwFõp !”¬öÕ¢À̜æ’›ÑìVȌ…á1E»JQ¿l·/o>>Ìþ˜’‘ »s´‡Ÿb¥Ýƒ¢ämV6ˆĊ|É®‚ÝP½“ɍ—X!jG­öZé÷aŽçlö¸Ðåf;7×¥Lb‚<“~E7¨Ï<Γ¤‘ +—wØMn;tŠ×;^ñÅ +÷ËjP*|f¨ÙŠ6®ê}óŽPc2V:?öíŠøûÓ-·0bç´hFË)5þœ6^j½ŒL åÆ]F !GÝ{©$Ì[aƒU1!~;Bó‰ä «mW˜çèh|bXb­þ­ÜwÙ^(GEèG>êRÖ{A€Vd‚á+õ‰kùæӻٌJRØúøkÜñ˛Œ“ÞçaûrlàZ‚•¢”N…baz=|¾¿wc Ÿž«Yž­3µEՊ+ætÀð©Úw“ó!ÛǝÖÝp«?ú Fo4ìá³"nAÝ΄ݼŸ_}¸úÌ,|Šendstream +endobj +1352 0 obj<>/XObject<<>>>>>>endobj +1353 0 obj<>stream +xVÑnâ:}ç+æ-T") $„¾\u·ËU¥n÷® WBºr‡xëØlì@ùû;6¡H¨´­J ñœ9sfæß=†øëÃ$€QIÑzq Ǘr…CÇ#o +á$òFà‡cχ’B†‡‡þñRǁÂ8ž``€‡£0 +bŒl¹áÇŸÝø²èÝΆ0…E¾7!dÅ°HmÒ!,’>K©Ð,c´¼+*±¢)¤ŒpH$¯ +6¤LrR.ûA.oÀ…¿n¿zCp}¬A›XK[0p.0¡—ý©Eyì*EKx|€e#—7ÝÀ«?^•²Z#6_ö$TW‚ž{âóLJ+Œmò.ØvÔ=ák¨œˆ‚X¥Z„nA¥")wk n„ne™v3º ß4òjŽ:t{}Í ë,  Ýhú¾gu:Iº]ʖa>™?¤jŸMºµ¨Ä›[£µ®vcq¹’÷lÓÖºS¬++–˪TÀ©øœÑ”C]áç(ŸÖuÀB#¼°nngcð}ãRîÞ¦Ü`bí +åÛÝ©"œï°“$fä+ Äd@ —ý;ô’itS¤  3 $ÉkØæ ¯êÅSPkš°lgO×,µ„jÝ§‡Ž¼ÀØÙ6Gmí&V6@“WN=ø·fB¸’€Bêܜ{¥ø/=à#G×¼ö3b•²°WhºHhË8 >KþJkR©gîÜΦàOŒHè·£±76_”Ix¹ +d Ç}7qؖ£Øˆƒ:Gçî‰Xñ¥Jp®ÈŠZŠ¸FΖÈå–nhylŒ9Œ¥wu)A´§ù˜ÙÞm­þœ½á)T·Â*ªÁi|+5ܪî¨nž95*çLJÌæ<¿<=98.[¦q´-îw%5Uf~Îà,¯¦õ9†qs¾ÌûzzŒÉ ‘Õ#r–º¥BÛN#þ©:FË–©=Lºf½í¯éÁ"g +˜:ch Sš‘ŠëîAû›jm +R¸uÙ§£là ·Ï—Æ¼°–J1Ü£eN6¸¬‡ßBáW¥‚òJP ӓ‚¼™¬JâR;¨³ÒDhç\À™öwR¬9=ÎâùeçÖöômCíœÞÎÂÚ}úðõÇó×ûŲ?c¥Òÿ™ãœÁ¼*íÅþÑá´Âº‰?p ÎSâʽ!c͐øÇäbíiÍl^jW#Ïé~¿ïæ?Ÿ •IU %ZTÈ°òBâã!îȪ2;kE*«D«º™q]œáÓd<‚Ð÷½ +ÍÖχJù‹âwåCÙ°q!îdˆÏä6ã(ö¢0@ÏÂx85¸ß½Ÿ½ÿ³U`;endstream +endobj +1354 0 obj<>/XObject<<>>>>>>endobj +1355 0 obj<>stream +xSMo›@½ó+ޑH1_Æàø)9µR+Qµ‡HÑÂ.ö¶À’ýP’ßYÀ‰íä!Vˆy3óޛ٧ EBOŠ2ú@ÓI”`SÞЙoK:3zµ@;ò"²ËÀmÄ÷7ÈT-Õ*Ê-*ª“П&üÁŒá5þ|ÿ†±s{9\U§„´œVk_´â᭓—Ã~äHӐ•QáÕAôŠ»N§''µ0èdýÒw¬B- cY× ù* VYåS.…}}Œ¼~¤„kh7ìæV›¥Uˆžý¨å/¨È¨s6!u€=pjÞX¥_1Èĉnh”Ӎˆ/Ò&:Þ¦SÕ±_†íÅ9ÚÓ~“,à<ª=R¹0jaí+ŒÕLî¶Uú™i¡R/£ÒœYvM¹âƒHÒ&¸´XMm©Yºž0Ïg;£c²56¬¯Ù‰»Vvb`ýÝáóAø-Y➡7Éc=qÿíc~H£³³ÄÌ|¸òÚÏ%û¯*ËN}3ÉEã´ƒ]‘率øí,TŽ~|*‡$hÁø»†V«là§ÕBÉe9,³ß¾/t^nüN~z5òb›Œn!Ò4ñœîªàgð„Vendstream +endobj +1356 0 obj<>/XObject<<>>>>>>endobj +1357 0 obj<>stream +x…V]oÛ6}ϯ¸)K–ü™}è°ºÈÃlöºëPÐe³‘D•”âøß÷\’Š5CÀQÄûyþv“Ñ¿­rš-IÖ7Ód½¦Ë‡=àŸ)ͳy2£ùz…çå*Y‘UTÂv +h;[äÉ}´Ía?˜R¶ž%‹ëƒŸw7éæžò)íJT²\­iWø x#o·b_)ú¸ÙRmŠ¾RîÍî«wÊVÁi2›'9ÜnšÎÂDvÚ4$š‚¤iJ}è­à7ÁmNYÝòU²d·­n¤"'ê½ Y2½‹®o[c;Gn\ÄçۏÚv½¨h£QÖöì:U~3ԖÐÖÇi…sʑò¾õÊuÔ.aJ“lêR*ç¨;*êýL%Gt>"^ÚޟTFª÷ŸÐî¨É£h;eÑ䓲ŽDUyûžE‡³ZÑIwǫ̜24ìLoÑ=£eU©¬(ɐcWõŒ šQ“'_&s†îoÓS-ÎtOŠZk0©Ú{#qËÝ ‘Sƒ÷  yýTzo…Õȅ¹N6/|•nñ¨*téKê®Ê?‰³#Ìøå<¢æu&Ù[4ÒU±°½R u'8Ý`~û3E¢þÙ§|øãáÓuo;C=jg¨Fä»#i•è€X脜®u%,CƦ¦Q´W•9ùRH×Ì!ÑtÔ ++jÅÃì`É-¥›E¤ã-=•hiÿUIßlºuàË%Äé¨A¬ºG#­Ñˆ³«g!9UwlŒLékúäç˜XmŒÅ„EÝVêŽ#Tæàixy…9ɟ˜¨ÂÀFž%†¼×ÍO¡)ÝóreÉ|–Ó$_$küO(üü#úBwÿ‘¡3£ÃhCL†Ó£·ôŽÍ1´´À´‘°3öüŠ?·gïôŠétv`Ç´3©¯2qæò&vŠw¯R«jèöÖþ +`ÃTVÆ)˜ñ"§}â˜Ê# ¸^Ú@’Y>ìZäj0©È_<Ÿ`k¡ÂÐƒ¿ŽÐIÏ)ќq%qN’|±œ4>0~HÂu{'HuPî¤$h”ž¡ŠWÝV_% +Ö&è2¡Ptñ¢nÃý‹È¦åûÛEYŽnðx a¿Ä¼_XŒ¬jÓƒT\H„ï8/m>ýú>€4DœŒÏ¯c>*´mUÔí×±Ç(â:Öè#‚Õù*|Ó“oÁ|¹N–‹;ReYÆu½ßÝü~ó‰ìtendstream +endobj +1358 0 obj<>/XObject<<>>>>/Annots 729 0 R>>endobj +1359 0 obj<>stream +x­VMoÛF½ëW r©X”HYñMiâ"hS¤±ô X‘CqcrWÙ]Jfýí}³"EÈ¥€aX¶¸»3oÞ{3Ë/£”¦øIi™ÑlAy3š&SšÏR|Þ¬–øÌðë˜Ê¸p3&/~¶­Iú“O¦ýÇûßFÙ»²Ù2™SCÙj•,úo5ݏÒ,YQ–¦ØÒÐl†D§/²vöµÖdy¶&ˆWB^~¹M´)Qãbµ¤MñLi“_JÿÉqÞå5Újs{`çµ5þùæ3ÎÝôç@Ê8%Ž^ݽùçíëÓòv|¾~1Ø6¯ž.\£½þÊOóº-ž>à§B»§CiìÿRæ¥7"xT>ƗâÊpPAÕ?¢šÒ8O\­iØ@-ښ¯)T*ÐQ×5±òL¹ó£öMÎdKòªÙ*R¦ø~²Ô5“¯”ÓfGžÝAçìÉ(y' ëâ LP;öÙì•ã‚‚E6D­Ï‚`ÜÊi”0Ëi²Â_ Õ +ËÞü(GR[Ûâ_Ç*Hj KÖû}ͯl»¤ÒºMŸ[èyïɤ׆|gò_ºH¦‹yŒŽâPÇ Í6É­)¿ç³“?$ЁÙ]éU8:0*ªAÖ5jäp ”EZUlœ¹ªë¬/t6 +ýpwßëáI”®•ÔõçcÅî·QLÌ´©´‡y@;ƒæ"¦ž¡d²-¨óŽÎEá+u`Ú2Ú[ˆ^Ð 6RÞ:Ç&Ô¦¢GŁýŒ"æ}ôǯî)8Žë8¢<0ÙëœR¼âd—QÀŒÕNôŠ!-døŒˆ¤.¬ +d{4„ðÙ%ÙÇ痦ûӒ‡ÿ¹á¢[#žmu­C'1ËÖD¾T| L×33Ø΄‚ºÙ×\- "`{p[Bôˆi'wCB¡ý^¡ù¶h£»ˆ÷ûpýր¿ÿ㖪ö·“ÉñxLrºÚº6ᢝüËøW7ì&Eªôm +~LöÕ¾'a豗½v:§?NG.Ùxsâ2ö‹8òL}:V:¯b¡ Ë[T*í ¶tkÍ!JXŒ­Á#ixßÁMBoBÏEˆ÷ +. m ¨Xº—Î69Ô@*&øFšHxW.—C~”rTPŽ¦±G*tY‚nGödxYÜ^Z±õ(ïãXØi#ýF»3x*³n§Œþ* ñöÝÌS :‚ãN 8ƒáq} ÆgkÐÎþú=»·Øÿ;wGë +yÀ!OÔaÄhW¯eZ*Ì"± ,.%Àv¸sÞIg!a_Ɔë¤tÝÁ´C0¹6­Œ%à> xjµ!Àؓë2²(f? TjÔ +3Àá}ÛìE•ó–båÛrg1æ%LŒùƒ:iÁS¤ÝµæÒaktOÉ\lUþ@Ç¡}À¨ÕèÃâVì v ’w¸ "kÚ«WŒi=ÐZk¨D#{×TÙ=—­h ÞUá¢ì½ÃuI»¢ÌÞ6,£GÎÃßÙ#…hqjHrÐ.´ +û¿Y±ïåUÿ”.ð*¸šÑ"'˙ÌØûõۗkzçìg؅^Ù¼•z¢ÍÑx81^N_Èþ႕ś^üæÞÉ°¦™<{½ý5ú>Dtendstream +endobj +1360 0 obj<>/XObject<<>>>>/Annots 732 0 R>>endobj +1361 0 obj<>stream +x]QÁr›0½óïè́Ë8·dÚô’N[›vzÈE–EQj•„iþ¾+ìf:XiÙyûo÷W‘Óñ)P +¨>ÉYN•·c÷!)֌C¬Ëу N÷åë„}„c½-Y…ªÞP^P86yh’ìq ^¡iIAԔâZ½’ÃMóB  +œ_@i±!Ðêëîé]ã]–ÍóÌì¨9s6nò̺Yl̑‚t©ÁËþ ӅÆCbtÖ¶)½ÊJ½=N'ú-및à[̝Q&¯=B§ñíqç)„IžÐûWtÿ|ƒVË09Úö*ÌKVDᅋ<ìwV’sy;ùáS e‰ûö¢†N’ŠÅAS¹‰üˆÙ„nQõÓ8Zþuq-úÿôÎÒâÅ2 Äڑáá}÷Ò ‚دØÅÌáÉ ?ÙeÐõuÐ\Цê<¯X½Ø¸ÿøpÏξhðΪ©×ÄŒ]V”þmH7ù6âߖW‰š‰uAû¥*çeÔyß$_’?ß®endstream +endobj +1362 0 obj<>/XObject<<>>>>/Annots 745 0 R>>endobj +1363 0 obj<>stream +xW]oÛF}÷¯¸ðKe@¢D}Xò}pã¦k m¼±ÚôA/#r(͚ä°3¤ýû=÷)ÑJR`‹ A¨ù¸_çžs篫˜&øÓrJ³[JŠ«I4Á/§>ýru·Œ´˜.¢)4gÑ]û•ÓóU¼ˆù;žF¬ÎâÅé‹Wç“è–æ«þ-h5Á áƒ×zŸÅ3˜ì-.fQLóøNÆw x¾Äæ2Ž–4ŸÜFsñhÍÚ/^å‹f«Öæ«%þϞ9MÙU oV4›ÅH¼Ša"|É¥½o„9eÓçÕþ7Vg«·«½o¬ÞNàîùìOë«ñû;šNh!×·Ë­SI1~Iϵu¦Üѳ*¶êO¿{íÆ¿ªdoJM÷Ib›²¾Yÿ÷jB£é'¦Ì¬+TmlI¦$U҇‡û'z0N'¸ëțÙ`¼ G³9"ÆÁ§ÆUÖë°>§8nקKDƒõõÞxJmÒº¬)Õ>qf«=ííjK×'cigŒà ù~¼Ï‘ +ŽÃÁ“³mxS;•BåùQ®Ð)ÇSï5ùb[)ïéf°ØÜPfrÑcMð?ÿÛT-{V)Ìù?GÚ+ì¡­ò&¡¦ÄŠ¯U™r‚mvၤ-±e¢«‡Ê´=|°î…œƒDD¯=¦Ä¥y®ÓˆÞ#üÂ_½@ …á»/Ì)‡šÖ¨QãT6וÌh?¤*× +v:ƒ%¤›óÙ<·öÅ㤏øF´éhÊÐGÅ>Vº”(F´¯ëê_ãñápˆ,~ÍSUEÖíÆ|dü>i«=ZF+nyœÝLo—V;,Èâ¨+yÊU©ë“—Gzi83•ìˆ°Ë'ªÒQb‹ñ)kÿåÑtÅwçÀ~³µ%þøÃ'm!OÍ67]±ct5Bªí“b» Àˆ|>úZtŸ¦4PBqho’}[dv½Ô);‰Îêbv:T!U°o3ÒÊ18›¢ÐnˆžL¥܋m ÖK*퐺Eô¶q ÊLêH•³¯âäVÓ^çUÖ䤜tc¿¤k”]¨`ôôðnÄÅýûãçõG*”)küö·Gzܕ*1–ÞÙ¦Òª¯þY™Ùàok*ÌYbNá¶ç†Èœ-èñáçû†RÀ[Ú!#Ü}þ”j§¥Ûšw¾pûYVœÙQ/µ!(Aëƒå`à{Y; xGff×¾LW¡l;ŠëÀ3oy쑯M›„£y p®[Gv}ú¢Nº‰à‹êjðA}°ì.Ç¥PPAwnwh¦ÍÀBƙ’•,Û9ÌyÏ}¤”Pi9éf ˜.`Œˆ–Ü˅­ÔÁCæ†Z»ÍÍî"TÎt–‚ªÑÖÖu®aäE<@¦u§$ô™õ'J­SN+÷0 ê/û­{ª_‡MìF]D®Á” +jۊÓ%ÍxŒú;±YL1“ÉìÁ BJR&Êmò†‘P¼K·<›`rºÊMÂt­ÎcƒtœK3n)¡É²~XÒÅ°*Ú~`(ç:ÃPFý¹Åp‚o›û–Ô|h„E×ñäü±L6ƒxssÙ"çåfï÷ßÛJǒ—œ¶¢#øe_´ÔüM‚ì©G]ïjqgFÆ.WðŒÉÍÖç¡ \(™&ÆÓdFèî^ rŠ,9 ¹Ð/ÐÚÓFU×(nÿH +Ãe¡Ï“Æ ŽÕô—Ê´ŠÄÌ6dăeXï?éR…&xL¹o3ó•ŽoŸZj¸Ääß$ªS’•÷ÜQó&—ô Y˜ÐRLh‰<ÈئÂøÌ2¯Z•B[ÝH†ásàÒ6Ðoä1¥fÕ1å˜ØR)jY—ïŸÛ F!ýp'ÁT!Ìnc¶ô>†¯Â– '!Ûö€.±WEºEyéL6ƒÊéWˆåò^èÙ*aÏqå8çáNÐA¦2ò–X£Nƒû»?ž©vZ3-Óc+”x‚M£ÙˆQáx˜mªÊº:Ðâ^‚§[•¼hàt3ÐÑ.jÇÔi×u£ËLjg\l¿l<à$üt¹¿N·_oÇóÿA'ˆØž¢¤“]Y:Ô|ƒoäPžùÕƔaÊ$ox +E¶¿mþ;¶<4­X †›è¸÷61 7¦:°œ= í—)cÝ2ôfÒ4ÎoÄÓl.ÅÁƒ)7õñ¬¢Çx…@áÀ§Ç6gt´M7®öÀ‚Œ¡å¡ÈšHzãEºúDÁ¯7DeŠJ°‰Á¼>Éu8x-“áÉA³X¶‘ϐÎU[}XÇcATå¹ÿîüÎÓù §õRѽ½þó[ܸ˜†‡QÏÙâÏë«ÿ\ýrsLendstream +endobj +1364 0 obj<>/XObject<<>>>>/Annots 754 0 R>>endobj +1365 0 obj<>stream +x•X[Sã¸~çWôÃTªˆ;Wöi³d˜å`8$ÔîVåE±•Dƒmy-™LþýùZ²s[fª–ÛR÷×·¯[ü}R¯Fõ†gÝ ‹;û—/Q= GADõºãাJiÆëiÐïãY<Â÷ïRÒê"v±­?ˆ‚>oñÀ_ñ¶~· ÷Oûã^0>zÊBûýˆWœ +íã1Ð5嚡R4 +ƒ°^: ¼¹ª(¼Á kÆâ¯jÜÇv֒!c>ÕùÛü¢sק0¤ù +¾ŽG4Oœ‹º4[‰Ž«LæVX¥óàjþí¢Kíheó¤5ßH8Cð›VrK…V¹5d5[JcH,uei»–ìFoïÜEµ²V»½UvÓNQ‘ù‡ ’%Zʵ¥¢Ôï*‘A=L'Ïdª¢Ð¥­Ñ„=8hJ¹’e)Ö¯r§Ðn” #bU§U"a)HŽ½QÊ¤È émK%ßU¾¦ÊȒDë*·¾Òeæ\B«Rg$rúCå‰ÞŠºÈ°IlÕ»¤©*elu¹#ì~—¥ó_ç.®ÐcÎP`_DÃQížÆîa»1îU‘Š˜Au¤;…0f›ü+Ñíh„7“Ù±FÆ:OHY™Q {–*Ì͊T™ œºÜÁ¬ÔEài6ƒÑ =O)ÓI•JÐ×ç‚™©âü‡˜y¥T-K¯šF‹^Z¡rhpž|žLh¦WvËiµhm¬-~ét¶ÛmPˆ$ €¨³¸ +èw½•PuíœHˆHJ±RëªÒ3Å "~khgñK¹c›ñ„L¬ É1?I™Ú«7¢*¸<Ú½¾Oý™OAÀvþ˜¹øVy\Míh„*÷•R§®È’%Å:‘œ£QÀä³PdN LJ#q¾µÒX|õ^gŒ_ ™;mÌB>£ÜÂ8U¨Ð3s÷~öuƒ“^­Ùè*E<ße*¹X¶º|#.Ez’ÖÄ¢—æ(w½mGšh6ýï!gz“ÊÉD†¾9wÂΣi%|¸jÊ5°ï5#áñœòÃ̙1¢:QjÊRˆÉe ŠL.^ߊ=»NóYæe£:ŽoÉïU-M‡s©ãmô"NA´œ…Èù†ƒ­'má=Oç`ÖcÅû$¨•Bâ‚-b^°~/d©\IòFt”UpÿÎÅ L òñq#òg‘uHkw‘^~µÆ)ȏ€d ºÍ‰Û‘ãóÎ]—n¸bàߋ@tƒ`Œ¿(Äã}‹ž÷‚0àÝÇ{¨H¼èiòø™.U^Òìõ1,h6y½¿¾L„èÙ,œøgúyvK—>l5ÚˏÖ=¾Îæ 8ªTBŸ¨ÄçâêÃu“¿ˆ×Å9–¥Ù3Ó½Fæ~¢Ü]ÛäA;“–—éµÎçð8}úH¤ÃInÕjå—Ñ›Šßôþ +ÒnE~»ù2—•±ûkt{—Šµù©üDtªÝSÏ'2Ùòwí¾mðgZrƒÄݸTìù@M©9‰ýÕO€'ÒoCŸÁ.ǹŒR€ ‚T†ÊøRꪸŸâF¢34xØûøÀÑí&CF.Sjª>. +ruµOoßù™˜ÏKÍí×û)ؓ»‹ÞrWCßäðù0—‚‡…¤±­ž\Àÿ¦Š7œÈ©\‹”™\…N£<Šjé{0³1¿Ù +ˆÅWW]…~œ‘œr9Mg ž©5Õ2S~2;í—–ðäȀÎ诖Ռ‚ÿAz6°­ˆ´J¼ë`U†‰Še CÜø¼9|ۍ‚á<Ð¥’ ‚Ur@áCÖÀ…\ÓÖÑ°ãŸ4ƒR‹°¯Ü]£ÇœÍSè)q8D0öªÝÚקû?€†½€&¾C4 @œÂ<¢ËSš8¤\넼¸OÙfrþaLFÞªfG,ifÉCçåûu35< !q@¼iâƐ# ‹– ÖÍâªv¸ÆòT>SØGǽèx×D™œÑ¹¸qq¢Ãrü"¹Q‹jý“Á}Nà(ŒÌû s£åÀ~äWЛó;wYW(À uŒkoö5» *m¢!W…ÝUo"–ù#ãÐó¡ÃÇRåþ€s˜+‘Ä\H@Ÿ~Lu˜|~ž)õ|p@xWÂí=å ·äg³¢žbj­Ã³–¶Øæ"[´W×$m€Ù$ðfsq6û“Ô™nO.p.¢J™«Äyµ Xv¢ydo«hÒTÁîYU9Î+:ç9-Ö8BÅ6ÝÕAæDäy³Ü™Òã*ÎÄûg5mŒªÇJ_ìwMã§'¸ŸÁ]cܳµ£™¨ùD@ìÑ3?ñt?ã¼æiÖæÒº‰^sD‰1Ãۆ„Á9µ çP¢c–Ul1Öãܸ¦›ÿèŽ{4ìƒñpÀÝ}6yümBÏ¥æɃ¦Ç§J†Ùn¶´G]ÌXÿÃ#B8†ƒÈýÂpÀÛ?Ï/þwñLÂ,endstream +endobj +1366 0 obj<>/XObject<<>>>>>>endobj +1367 0 obj<>stream +xV]o£F}ϯ¸RB¤v°ó˜ì6U¤6»mÜ7KÕc{¶ÀXÇÿ¾g`c«Ý%’c ­Qˆž{¤-UŠë›^«cŒé€UæÔ&¬Ú+‘UŒ³â^çÀÓ!îM»´˜gè‰ýÖ,çŠrÌÞ .`(¬N?›]ÁF ½¼ìRŠ <7E‚‘džÞÑcðØöÿ‰¥å êóÚ +n,þesÔm7¬vMrT›EŽjï6,̑›†¸Ý¢„Ñ3†*¦0ëjÌ-2YeߙÈY‚…ƳHÚq–ýí¾ÖéŒÜ–2™˜_'f%ŒN zhM&ÓíN–µ×]z-?Ñ*^f7B˕¥UÆØS—3ŠãÀ¿‹0Æ2ïåþ÷‡{úªd»Â}–iczb¿NܕÉ"håߥätéœÇK?¾°­BwÆƽ_V\ü .Í_aendstream +endobj +1368 0 obj<>/XObject<<>>>>/Annots 769 0 R>>endobj +1369 0 obj<>stream +x¥WßoâH ~ï_aݕJ%!œÔVÝîm{½…·ã†d€´I&73Y–ÿþlO(b÷´j+“۟íÏöäß øïÃ$€aq~1ðø¤ýøúábz#úÌa<ò¦õ"ƒùÅÑ2‡pê öœÜ$ð¢VŽ¹z/y!„íž“Oñac¹z/{„íÞÑ2‡iD8Û=§sz£V'/:ë½hˆGÂvÏÉ ‡h¨Á‹ƒ\½7™z>„íž“ 0Ž­/rõÞdLöÚ=ߧøŽ§Cvޟø¨Õ­HràEæ¦ùÐJƒÐ›À(šàï!z<-a}šÈú°ñëà +ðÑw‹‹þý|k¢AM`‘0 °ˆ»Y"J0&»^<ãÁ¸>؛xÑg‘t—A8·Û¨á͞O‘ÃNƒÔߤ~£‘äiIñF5¦Z¯ÓïoT²N3ûf‡J¥í¯àè˜Á)ô"3†v±•F‚ÀD&ÒÄ:]É0Bv+Áä+/VÅzÙ/¯!”bƒg‹Œ‚]šeP( +‰4(¥°(¹•ZzðQí$¦ê‘—™$€hÓÙ(ŒrMi¨Ã.µ[T_îfO¤ZÆVé=ĪÊ%ZÐ ŒóuS"›ï†ú2ö"üFo:èWF÷3‹¬ÆW¢Ÿ¥«~c±‚U@ÇÿÞdj%²NýW:µ{¸%tÌ;r¡–ä#²ˆõ¾´cvJ'Ïî%CÄ£UˆFøh!í*U +‘K<µ˜Í?.ÞøóœaÔô²Ñª*ñÜãìëã§Y}ê•ÂpQh™qàK¡Q3Òé¬õ&w’Óz÷V¹ˆoe«´HÒbCÏ(é‡À£Ó˜ÄFß+Ç;€´iÝæ ÚmjUã'‘Â`î“šÐ{_ZА2aOƒÙ¼2Ì&#ñk ÖÊs|èíê&¸ìw1EZÚrGñéßלè^‘+lŸ:áC/·Z í²³.ãÙdÅ´D¸ŸÖ‘KtÓ8.á›Èª6É'a‰·¢ØHsƒ‚ˆ†u­H BãzA½sÐ^ÙB\ÆÅíœh ¢ÀêÓ7ªº-¥Â¢ºIâ[f8ýPzsyž&`J§ë=ûµå{e`«ŒeB.»ÈQeÖ@*ÚZ^ÿ¡SøÄV¬>/XObject<<>>>>/Annots 772 0 R>>endobj +1371 0 obj<>stream +x½X]sÛ¶}÷¯Øq_”ŽÄèæ¤ÌøÁuš63Ž“Fê$«>@$(1!¥èß÷,@J2“~Ü{;qü! öìî9»‹|ºÑÿF4Ó$¦¤¼FCŠ§q4¦«Ù¯Çø1’2^ÀÖ㯷?ù­×£YtE%ÅóhJáMA‹‹³·%†WÑìlqÍf8©ýe6|,çóèº1zG£¯Z=îFó.À–O_\ÑhDË >ų)-SxHˤWèD´1º®ìêIôdùÛç4Â.Þ>˜\Á‘eÚ[Ȥ6¹;P)YQ®Åm’èZ¹ðÄÉÀ`<b~b¹•ˆÀÛkÊËJ'”£JçÊYr®”²\KCû­T”æ6©­ÍՆÜV’m êì‘=’Ê™\ZÊïcó€9š 50šæF&N›CãIÜ8Ž,ÆqpåAî¤y »,|ê`a»(ßk÷Ú¤¤ )w|'v­k'i'Š 4ŽBH¨VR%æP9™ÒýóÛ7€W´j`$ ŒÁ4š1·€t5Ž§P´ ýâѕ¯ÂE¡÷¤´ˆ´Dj+å.—ûÿû?‚Öæu0žE£ù)†H®•TµQÚ +‹|²“B +CN~v$?Õ9℄a ´I¨µdÌ)§”x­ÂÉQg_hŸ»­®¥Ò仆 k“or֞™²È‹Ú؈^ a¥ér•iS +‡$¾Ù@*È $-£ûWO–]ü}° `ÃöŽÕîÞþöfùòõ%[D>‡]°?¿~·|=¸ÓE¶™3[Ö-ßӃ&ˍu'ŽçÖÖ²ïW.‹TTdmqI¶\G‰VpQJ6™ÊLÔE+ė%¦ ‰–| ï:àW½À´ë†‡½ÖÝ 8a­Muoõ©heØ„jc‡c(ÉËÀœ€§\ÂƒS¢ˆè‹:„¯+©X`\GÃ}Êå† œuJhf„Iûwá„qËûE(&U +.ið($:Ôª +‘HŸfX\DôÒ»xV&$X†h&Â"ê]{æ‚CZmŠƒ¯Dº6bxŠÂ$< -àËÒ_†4˾ˆ©—Û´§½pÞC͂*£NtÁqHe…Rm¤\é2±±Âñæ݄ŽÑø2ý¬÷\æúx3_ÛTP‘¯0²./ +6¾ËS¨Ø֕Ï6ôã±éb$ðo«kTc_™‘÷D—e­r€d‘­¥ÛK¤<)rV|Ç°ož¶‰%0áL͍¥-úÞ÷ڟ‹X€ +ø`‡cO¥/Gº`›ë†¥Ì蒶܃;×­M¼ÞÁÄÁ8ò6¢%ç·©Q©V|pËî ²Ö{~w{wÏùéňàÛjÏ¢J½VÃÂQKÏڍsèj2FI¸Žfø‹&ðÝw*:C Êu=U—$’M¤Oè7`ƒ:'ôÀÀdaå Ÿ6s¤¸GٛS ëŸúWëó ñ×|W7—‰ºñuŒn¹¯ôu}SI]²Ÿ&7S®>hÿZ›Í%í1 t´‡}Ï)ò‹§9bÐ8>¹öÜÐ#+™äùØV‘Fî|¼ð<:`Îç‹G;I¯? ô&š ìD-áòÊô)‡'sÇô„<žO §vS{ûðêöáIJQt; µNücüt†¸ãË¿¿Ú§÷º…ìL™ÀÏEs¤Ü °./ùMSDPÀr…ò?šO‡¡U±¸BÛ0õþ4»~Pélþ³0ž5”¥hÏc/HÈíÝýùƒ¨Ý‹Bl:"€û!ºLm0÷H1®Ý£¼ïŠ¶ýTóü*Ÿ|”þóû‰„\Ìp>ð”µ6Î<²u²eÿJ«WØՓ>½[õ0´ÁüÉûUO¡8·s ü\å¡ó"×üç+Ì侦ÇëÅÿÈæBo´Z"×!=§‹þˆà‡rÂEÅ@ehäµò4ll´;‚·Äx<‚³Å,û¦&?æÉÇom2»ên+ÔæÛÅF_ÕÖ}c«[]Êç¸Y|é§åf”ñÅҏ¼‡ +é¸p£©î·9ä€%†sÞðëÃhïPë›çRî¤þøGWÐ3EqÉJÏÏ-á?_ˆNG4ó+ß\èòý3tZ‰~ÏýŒ­6€šŽ  "zÛÜ]¾F÷¯tŒY3»Œ&³h6ŸPO£q|ͳÄâöÕ·ôÆhî§ô\'uÙv->|0ÂÖálBƒécÍßüßÀU<‹âëq¸ôŽF3>áÇåÅ/HWendstream +endobj +1372 0 obj<>/XObject<<>>>>/Annots 775 0 R>>endobj +1373 0 obj<>stream +xµXÛnÛF}÷W U‹!)Šº~%96×i¬ )ª>¬È•D›âª¼Xöß÷Ì.© ­¤qÚ&ˆ£ˆ»s9sÎÌ08dã·C—Z>«Û²ñÍöǧ÷ü yÏêҊÛ³:å¿bºÓÏÜ®m¹äu;8çâO*iŽÝ.ÌT?ÒÛ¤vÏj—'¶g9æìŤîÇß]zä84™s\~·C“P‡eÓ$häKI§±Z¨„Â4z”§´©XÉ\¦%ď³ÕÌ +T2Ÿ6ÚÓ·´ Ž,™Ji¥b”àãJä‘J¬·“û“w—€Aû³©é´Ñ$ldA­ó"_š#UH>MØÇö1­Sµ–iþLÙZÑ<’™Žb«¤æús‘Éô—ŒLØæêYÛ~Ž¿ŽÏH¥ìeϽu1˜Ð<Š¥eÜåi”,(@.3IIÇæ{í$ÊfŒ|%åJ;Ld^:[Š6>É9ð)–ð™8NkŽÿ4ƒÍfÇê:äú–Ç€N]¿C‡pëçÍVÏòùp䄏B¾ƒV ˜¶L¥¶¼Ê˜ŒG²ÂJh´(Ӟ‘@“˜e*.rù"û|ÉÕÀ¹Ï¿µ«ãàq¯§^ÍÛK"þ$t`ü•Zédvâ)™ºÄƒQ”Ê Wé󏐕/P¸½Á²aU1Ԛtµ$ ²܆š×sÒnY „Šd2'‘„{ +F½ËÊ=3Ç·>³¥*␩®ëÀ›{â`ð÷ø¿*²Üœí7*}ØÖ®Ò띦ø…eŠ¿YÓé6ˣ̩%Ê©•<:Î Nùõœ8ҎYPéã›j»hÐWè ÒÏrÝÛ8ü6HZÜ(˚•B)ÒT&yüLEaÙƒ@ïýŽ„«¦™Fá ¯Ì(Éå~S¹Neg:Àª:¥ˆ·=, +q‚iJÓƧëÑôí¿iF+‘>¿OU±¾î;Ž«K+´`3՗ZÆâ÷ÁªfGÓíZNšUKäA²÷*0=̨Èänže’’J¸2¨ m–2¡;±š Ö*É#Aà} ù>D¥VSpÚH÷>‡¸§m¡‰+Í«Û/“[=C™‹(Îà JÜpwå- +`<?L7C•ä©Šc(êí±Ö0Ç3µá(çª@OÍфghº{‰eèJœZÄ=ç*§7U$9hY‘™¡š¬æf¢’f(碈sÓì³>çˆma íAGü±ê˜iTQy7à_SáCzïæÙτ±m£¯‰âÏÀ«ÿ~‹._l0òI¬Ö±ÄÈͲe2¸»šŒßßÒTJ@²™·4 wLæI‘/EnRn—ÛD£\Ÿôx:×Ýü͇éôMaŽUkÐFdüÕãÁ•(Ë Œ(ÏjKH£ZëvÌöõ…E'ôô£{fH§3<<Ÿšp°ë™Ë(ïL“ØXr«ÀÍ&Æq×]”}8ª,ŸÖ¾`œÇV…Ýtª}[„«Õbæþ®´$Ÿ¢ )–›°P ŒÓ" +ϵ™3Uœ¯¥â"…Á¹VPéâ”óØnRø ç]©Äø<3’äT)ªN4Ëh’šcØLœr+þa˜övRJUÉu,l·¦Cm"ÌgÝ-7h¨X…áo ñlŠU l»T Ç,ðæ²ÌP9À6¦`“·!¬ál½êAӆ´–®ÔÍíÅïe•¶c«GÞaæxÙj¶<³ 8èÃèú’ÆhsüÖÀ›–8耡ŠÚ¸ïvÌ®<÷]wåJ/>£6¹í§QÄE†7jh­U=U VÍî±1$ª;(¿ õ8TÇòZ.ܵ­.þÆè“>1q…Ìr+ò>uP†(¹WšF`O/Þùj‚·¨,CxaŸºî¨k;žoûÃÑÀíùÎÀóƗ§Õn];µ«ëMxƒånÀ²O®ƒ—ÑnË÷^œ;ò}r\Û©™ŠW»(Úm·g»v˹Æ=xŒZ^«}Ñv<ۏkWÅ‘åw2‡e¿;=Çõj‡´È'Ñ +aÚµGå¡FùEy¹M•@ß>€k¢àAÍçÆü7QA_Æb‘õéÏ_©úõgÍGú¶°É!ٞmûµÛc(’ª":Õݒ٬xÓÑüAñ_51 5³)z‚¶3hK‹ê`àQð-Æʊ³Ý²Ñ:>þ¢Û"¿Ó²|¿ÍÜ»Ü\ ècª˜çX[L¢rû会ՕfÇïÃÆ+téù]Ëo»P5î9Ní''¿ü ƒŸ:µendstream +endobj +1374 0 obj<>/XObject<<>>>>/Annots 778 0 R>>endobj +1375 0 obj<>stream +x…TÛnÓ@}ÏWÌc‘go¾EªD®‰^hŒ@6öÆqj{Íz­ÿÎØM¨pC±¥Õ®æ̜™3;ûm@àOÁgÀ=ˆ‹q‚ž“⁀p}Çø¸g‚àÞ(Ø ˜ ûŸåÁèp +zw9`œ8>ðÐõNB'8œrXµ¡ûmÖc i4- „m€:‚3ð0-× Jº\DñYRŽ¡É’‹4–Æ*sº¹¨”®ružÄU.³r§»½6é«h7 0¤X69ËuªË(+ÔHϔd5úî¯ek¼TFæ Ì:†0/ne]?h“ŒÁuYHátº˜/ÂÅr2™ó©àîÔ¥‚ˆÅ¢çZ™¬fitS½2B{½Þ©ØÎr¤C¥ëìû$ŽuSڗpµ,Öò4NƱ]æ2ÅhŸ?|‚ã÷µ®©•y*ëglö•ý5­®˜Úw÷?P¶¾C†åZðÜtÝkeÆÒ×9Æö½(¯N³rµUy>†Ñ:+GkYo{ m7›Ç>2*|pOø=Pš%Ç4è³,î³øþÿ!ª‡ä¬íJYìÁßñj÷xL«=QéVjžl§6{,¦=,VcUªG§µCƙ,g[Y¦'î(Z¯šÚÍÿ,½´O½ ü`*<âÍæz¾?¯*å._Î:ÕF˨ߎÝðqî†ÜíæGf¦‹B•¶n«-PÚâp¦˜ïxíLÝæJÖ -§ 䔕¬ásÍT[(-wñƒäû´<aØ(íƒçMí…ãy0_Œi:šÔj¼<½øpJWFºÒ'U< y¼œ°~È/¡ó1õgC~¥<~V&O¦ó`:áœw |ò÷UïÏÞwӊ·endstream -endobj -1602 0 obj<>/XObject<<>>>>>>endobj -1603 0 obj<>stream -xmQ]o›0}çWœÇVJ(ÈcÚmÒe+ÓöêÚ7àìÌaû÷»NZMª&„mÁ9>÷WV¢à§DSaUCNY‘¨‹¯ë¶áµâ׎ÙC—Ý}Ú lЙR·%:†:ySÖy“ãÑ9F¯­¹í^¿FÉ°„_VM^3㦳6ÏÚ(ø?>д@œýÀ;!z‚=^Ž{1žÈµä}ÖA ÆØ÷ây$l#ãMÐRÄΪ8’_@•ÔY³\åUÒ§“³'§E ì´tÖÛcÀ×Ã#¤GAœ |²3)6€`Á„³VObâ[=´ Ô»«ûûwÍwNbg}÷NUÙIh“96(ðmÿùÇkè©G>ŽÚóÏޑüEEyÉÃÔԇP“6ڇ$Í.¥õ!õã¢1Úơ̂ôozø"Ä=°) -³u?óëDÚ׉”5O·]as­èi»{Øâàì ɀVƉ»½ÄMÄå~Ù›Téÿæ½®Û¼¾¯xÚ P‰ø±Ë¾dȄ¼»endstream -endobj -1604 0 obj<>/XObject<<>>>>>>endobj -1605 0 obj<>stream -xWûkãFþ=Å -v –Iœ”rÉ]¨! ¹ÆG 磬Þ[KZÝî*9ÿ÷ýf%ǏHI8…`!Í|;óÍ7³«ïcáoLg:žRŒ¼NO½s:9?Ãýÿ:¢øàj~0¼¹ Éˆæ1\¦gç4 æ#< úש(m¤i|æѽ0&ôéÏÕÃç[*³*‘Åáü?ç>>«ÝÇ'Þ}؏=ºªdÊ"©ÍNh„! Ç}¬²L=qz 5­YßÔ±¬%äciÐQ¿]Ë¢OBKágXÒ©©6ؔ2÷½Yîù¹p†7#ºX«ë¤.Úîjô}UˆIjíšo —Ãuù†Ví(ìR† Dư练SŠ4t¼åˆ‚üÈI„µ^X ™\FG$ dƒ'ø…B™¢g!1È#ŒèIÚÔQºA3,U—A8ìK¦~ídV‘óØè•f±[ߔQ ãåUfe ¾7&F2Ö®(Bo—Áޑs¬Š(rõCæk¹¢ä•‰ÐFq ÝÐÊ3{ææk«Ÿ É #2R%ßj¸Jäcč¬+—¾ijN±¬…Á“âk’)_dßÈ ‡×ÝÚ¦€M—njPªŒ¥¶kP¿*DŽÒ„Q,Àa÷XûõšÆ#ŒQ̄àÌ֓Òϼtف%Ý vWvmÿ檡°Â ~ÿú)´’›¼íÚE;>M»é@@(Vç5 ;ÐÌjæbÖÆèk+dÁ-Âô˜ŽþbG§jöD¯T9”ã?ƔCZôg½G´\FacAvUÂË¢ˆ'Œ³ -O*`Kmìâ°slU:S Ƽ•ˆ¿^~'Ëb±‹þÅⰛFˆ‘z;Ä{–2XvC¼•Š ½`"û"”w#pË©(Tq'w#äbhƒx …¶­„fÂ~h½èONO‡xPò‡“{uW(T9¤ØŽÚŠ{7Çüv>®µyh#åv*ž/'Æã+á·ÄŽ5ÖݑÇU–u0ÒykræhEïNù˜€3S;)-Ø_˜jöb§RØ´›-B±ß -¾íŠøñùäV;18-úQrI½?.{oµ^A&вt;-¦ÇVûn¯ÔæJØ ­·l8˜š?È$ïnSžRlVèhœ…¼ëN²ÔÊí`.Ú“£eé{N ui»‘Eàø™àMúš¤¸–®g3jDE¼‡t¯€=m‰sk³M»¡û:mo;¸–àIьN…b)Mw_no)Æ Îïլ*–…zBÕêóÓu-Äí:tg•W˜[8öJœAöP‘] ðïÝX•|Þk¶˜Yßnf`]c8NfÁ<_Ë>ùàD«ª6œ_ÃvA@Å-Ù·°VËÃìc7õâ]°-´µö©Q‡7ç[߉õIþŸ¡'Ósoz:Á7,~ŽÇá§ùÁçƒÿۜ„Ÿendstream -endobj -1606 0 obj<>/XObject<<>>>>>>endobj -1607 0 obj<>stream -xVÛnÚ@}ç+æÍDÂÆnÉK•¤¥ª”ÞúP ©ÚØkìf½K½kþ¾3‹iŒ¹D*a³»gΜ93øO/ßLCˆ&=ßóa]{#ͦxâ§äÚ…h6ÆÛ á(òf݅»Eo8÷á)ƘÌð"Ä÷}XÄý<áÒäiÎËÁdÁ$¬™Ö+QZ/6¬Œ3V.ûáx¼¼¸ŒËíÚðZGkU&W‹ß=ÜÀG6‹¤CšsøêbŒæh}}-X. 9äúáËÔYÔEšR‰c}\ÀÈËþµ©Vš—0ÃÎkQÉg©j Ñ1šÕ¢Øl=%ÔJIHòÍ©Ò¡®-¬wçQ2U•—o3º€²Ïkü6ʛyí±°)ŽI~iåÕÂÎG;ûá„<øaƒ>¯˜ÛlU19½2À¥[öo°t,5X6“q¬à Rà,Κب³ï4Ê$ÐkçéÖînÈÕ‹Î÷G^HÁë %µ+¹\Ù†= îÁφ Zý”Êd´ï‰ãW²ÇGŽ.]Kû9 ÒRöÛ Õ¹€‡;ÁŸxC*ñhe8¿†`Úhp Á`êEüÐö¸'4¨²Õì4 ö­r¨ôÔ³ZM"Wb‹ŽÔ1šŠ­¸%Š]A¢ž1€LÕ|ÃË×òÐfL¸¸i -';²ŸR[ÁÚVAäϸ uÇÍ'a57à\œr0”¹½çpJ9A1šóåÇæ©sƒn06¹?•2\“‹:p‡¼79ĺí4ºn|DS'Yc–NøC4*„¶…ŁÛQˆ4yÑû²é&®ó!l›äÅd=Xd¹îP̵…OxÊ*a.ÚnäÁGn ¥*•tím›…Bœv›Œ·VZçØS¤jÆ6ØÀ -›ÂBå¯]óÄPªPÁž)ªVØè*® “ÆéJ9'ë¿°b-ø«3»žJ+!ìÀØÑ·¥µ®ÎÇÍ êÃý×/÷·‹ež—Úü¢íœÁcUڛåÕq†á¿bStCbݟ‘±É‘x»XGaÉ©g‘ù®/?o¿?@¢âªÀ1iQ!ÅÌ …ø羪¨ƒ­He›á†óY“\0Ág”Y£q3Oo?ßÝ·Rýæø§ù¾K\ÜýwêÓãÈÿϟÑdæMÆ!>ØJú‡Eï{ï/ràwendstream -endobj -1608 0 obj<>/XObject<<>>>>>>endobj -1609 0 obj<>stream -xSËnÛ0¼û+æ¨1õ°,)>¦hO-Ð*ÚC€‚)‹­^áIþ¾KInl·@A„ Ý™]>nbDôÄÈì2Ôý&böùi‘әЫ%š9f)K®÷å&üp‡$BÙP­,/P -PˆþÔÁ»–OVjÄÃgnŒ¨ðýÓGL;ªá¦ü9'Çù’¼Ýù¥3Ü;Õ 5XŠ8^aIÎ2+[eЏÂu’X>:¥¥A§ªç¾K`GTj0–wÌW‰°M2–ιöõ1‰ê%ÜB»á°´Ú¯­ôü—D¥†pE13^² ¨l+!¨ymGý‚@¶Ît3:]Ëð*m¦ã;×>#í ÃWÏò2Ǔÿ#\ÂyÆæ$äŤ¥µ/0Vsulm3ê'®C9B>O£¶Üò[ʕI%…R(‹íܖšÅ»eˬ¡3:$sCÃûŠŸrhT'Þ_Ñ ð<µÒoÏ÷ ½Uë‰ûo󣚜]l$~déÍ×~9.Õ¿UZ÷ë œI.j§µì–¸t<À7/`¥ròãŸrH‚–\¼jhô؃â¼úI(¹¬†uŠ×µNó½ßÌÿ^™4+X¶Oè¶ù«ï<¿÷åæËæ7ˆCÂendstream -endobj -1610 0 obj<>/XObject<<>>>>/Annots 946 0 R>>endobj -1611 0 obj<>stream -xW]sÚF}çWÜñKñ $ÀàÎôÁ›Ö3IãÆ´é/‹´‚­%­º+™ðï{î®d’vÚN&¤ý¸_çžsõç ¦)þÅ´LhvCi9˜FS¼9ýùøãàv-h‘,¢„JJâYtÛ=ô4ˆ1?ÇI4Åê,^œžxu>nh¾ZàoI«)nð¼Ö{,)žÁdoq1‹bšÇ·î`|»€þÉÙ\ÆђæӛhîÄÆã¥7>žÍ=.€µ8¢ÇÖÔÚº«'oçÇÝ®d‰ø°k½W–2¶¥„±LÚÔ¨­´´×j4µVžLfÁ$Á#²ý@xŸ!ñ¥Ë]H€”ó©1"SŠ(Š£»BfU³—dËm-¬=d›ábsM¹*dDH€%¼†¶‰Æí5Rdl°àGÚ ì¡­°*¥¶ÂŠmD•qšu~áK^ª«TÖ UYwø Í38‰ˆ^z6T…K‹Bf½Eø¥âúµAyøî s ² *Õ$•Í…Â)iGTR ÃF氄tsr]úÀ¾Xœ´߈Æ'Ü ¨Ø‡ZV.Š1훦þv29‘ÆÛ"u¤ÍnÂG&oÓ®Úãe´bÀÙMr³$¿°àÇ¡@걕lN^éɧádLÕnG„]6µŒR]NNYû/–ÇÉ*Šoρý¬éKüᛏR1BÛm¡,zcÇ05BªíZ•a»öíÀˆ|:ÚF–t—•ªRPBqh¯Ò}Wdv½’;‰> 1髐 Ø×9IaœmYJ3BSOWîÌ®ëƒ&‘$û^F­nMŠ2{“¥8Rmô‹sr+i/‹:o Æuc¿¤k”ÝÂøñþ͘‹;þéçõ*…ªüö·GzØU"UšÞ趖¢u^ý¿2³ÁŸ×Tª²ÄÌÂmÏ ‘]ÒÃýwï~÷¥€·´CF¸û4ü©ÄNºn÷hÞøÂl[dYpfǽÔú Zï5ß«ÆáÀ;º0W»Ö{ðÕ`B…z° DÀ3ïx l—€.øò¬M9¦×0çêÊë“ÐՒÕÉFڕ¬Rs¬rt¤Mfé;:J{ÅqÞö·CW¡A^h„ʱ͙g‡ŽÅF¯Øñ|} -ñ9´n{%J9¢wï'(SðƒQ¼w´Á< Ç(݋ -õhTɯ™^ç…؁Å෕Ò%£W&ï3ó~Kˆ_§ÑG`08¬KŠÄiEö"×ZÀq3w€ºyÉ`>£ƒjö„3G*„ÙÑ ¥®Úr þæ>dM±´:<{ÛìukªÝ\;Ð\6R®@ÿLN-@ÙThýÜ֖Ê èÄZÖT\iåŸ-tO±Eô£z‚Ètñ¹>+(°+4}QÀp9.…Ž:Œz‡–Ú uÅl™¢Š%¼€9k¹Û€” -šàÏõ sL—0ÆÄ KæùÂVfà!áÆ3&ŠÍõî"TÎtK@Ûh«›¦0òì<@¦eÐúÄ*Š•”§•;ÐÎägOý>Õ/`»Q'ÚàKÍí$ꒈf<^ý“ä,Ìjna!%Ó嶅È/Þ%•kžP0†822².Tʤ-ÎÃë8GU,и¥"”óØËu1¬:…?0” ™c´ðüŒÜbDÁ³.lGmÖ7Â"t<{¬ÒÍ0Þ\û• ¨CîÃËÍÖîÿn+ _ -pêr„BŒà—}ÑôWi2ÈR&ƒ3^ÝC-îã\¹á‹ƒÄ•nÆD³õyÈëŠp¦ ¤ñ4Ÿ:†»W‚\€"MFC4tºG2=…Mƒ±²åö@1Kyž·0 V“ŸkÕé3ۈ–aÕÿ( šà!ã¾ÍÕj¾~|¸ï¨á“ÿ¨ '•wÜQô¶h˜‹,Ìiæ´TAÜð&üÌ2¯”RTŽ¶Â`ìGâsà®m âÈcFL¬b*0·e®¨½Ä±:ß=>tsŒb€;)f Ǭþf?l»ÞÇVê -ôäÉ®=`KlE™mQ^@:`†Í°6òEb…ûvèÙuTž¥nÐuǹ(8w¼¾8T`6#«‰5ê4¾¿ùí‰#%Ó2t¸Š¨òlÄ r<Ò¶u­Mãiñ/ÞÓ­HŸ%pºÊhuÃjºnœªüÛOjú/ŸÑóܾHü§RÏÙúëÁ/ƒ¿ Uýendstream -endobj -1612 0 obj<>/XObject<<>>>>/Annots 955 0 R>>endobj -1613 0 obj<>stream -x•Wßsâ8~Ï_ÑSR dŸŽ “ÙÜ%Ù\ µwU¼[MlËgÉaøïïkÉÃfçê&‰-©ûë__·þs1 >~4 i8¦(»è}¼9|½~»a0¤›ñ$)£aÜÖO)-x?݌FXM'ø;ħ””\„ã>ŽnÂ`ÄǦc,ø'>6ꏂñau4ÓÖ* BÞq*tp{ MaŸµdN¦îŸ,C'éôԯˋÞýˆZ&°v<Ð2vFöiubU™Ì­°JçÁÕòûEŸºá¢—qg¹•0Gð‡¹£B«Ü²šŒ-¥1$Öº²´Û -Kv+‰÷îÃZY§ÛÝ)»í¦±(ŒÈübƒ¤C±–†rm©(õ‡Še@PGóÙ ™ª(tik4ƒ!ÌšR&²,eÌúUîÚ­2Ô2á(VåQZÅò–‚ðŒšQ&EnH'ˆ•-•üPù†*#KQ¤«ÜBz¢Ë̹„’Rg$rúCå±Þx92‹¬ú4W¥Œ¬.÷„Ó²tþëÝGµº“`Ê9ì«p<©ÝÓxÀ-vãNP©ˆTOÚ¨Wcvñÿ%ºNƒÁíÑdv¬‘‘ÎcRVfÁž5‚ -s³"Uf §®÷ð+ux^,`tL/³'Êt\¥Òôøíå‘`¦Aª8ÿ!æFžE)UëRÀ«¦Ñ¢×V¨œ'_fóGZèÄî8­V­µÅ/½Þn· -§õVWý¦wª®]˜c ©S #µ©J =SìÀP!¢w±v¿–{¶+d"]HŽùIÊÔ^½¥ª‚Ë£;ùÔÜÀ>Þyeá¢lXq»¦ºáÕêë¥N`‘ÅkŠt,9SÀId+ ɜb–M첡vW£Þ!­ÝEzý¤¥ E’ ˆ8'nTŽé{÷}º­k9¬k¹}bÕ¡*{Üà3Âg2ß >ñCϳ§¯tÙVvI‹·IJ Åòõínùö:{l°õѵQóÄÿæ_wtéVã¼ülßÓÛb Ò£JÅô…J|¯®>Ý7û7ñ¾(Ƕ4{á ‘Ç_(·­‡b? -cÒò6½Ñù¾¦/Ÿ‰t8ÉíJ¿ÞUô®Ov'ò»­È7Ax|ªŒ=<£[ØûTlÌOåÇÊ {ퟙˆ¾ÉÖ¿i÷׿æ%7M¼JUÀPԔšÓ×?ýx,ý1ôœâvýÍøÁ˜ He¨‰o¥®Š‡9^Ä:Cぇ½OkìÀ×í* WH‡|öC³óymy¶ýýa -åF£wÜàÐB9ç},¥à¹!nLª‡4SE[ÎÜTnDÊDÂB;ÈQEµöí˜)˜äl‰Y¼âË©.;>ˆO æ‹†ÏԚj)?¤«´E€%j7Ÿ|˜å]'e6Fãâ¾Å‰ËñɍT›?]r5az>»-ö3¿‚՜߹ù»BN¨c\³¯ÙMPyìs ¼ë,ì®z›±Ì¿2j0¬Uîï:ÇI̅Ԙbðí'V‡Éçç™RoÀ'w…%Ü)°RóÜqG~@Û#ê)Ø:<i‹].²UguuMÒPßú`6Wg³¿Téöäç"ª”¹JL‘W[fe'ºÉ‘§÷F±Ê&MA잤ÊquÑ9k‘Æm*²é¾2'"öèΔ¶«8ïìK\Û´1ªž-}±sÜ=>ôŠ?]¤à~w™Ï֎f~æ˱GÏtþ…ˆç‡ç5´°6—֍µðš#JÌÞ6$ ®¬9‡À€²¬"‹É°žé¦5Ý p»ïO‡4×óÂböôëŒ^J̓ÍÛ×KÙmt'}ŒqçÝFãi0¾ ýMp0¸a!_—ÿ¼ø/kå"Õendstream -endobj -1614 0 obj<>/XObject<<>>>>/Annots 958 0 R>>endobj -1615 0 obj<>stream -xV]oÚH}çW\)!R0ˆÇ¤ÝT‘vÓnþ!Uc{Óµ=ŽÇ.áß﹞±1Nж% -²™;÷ãÜs?^>MðçÓbJ³€¢t0ñðêϽ€æËž§ø/$mù¢í××OƒYÀç7§”næÞÊ>'ô48¾¥¬¼Ùñän=߯È_Ðz ÃÁÒ§u\«Ð:ú+ïÆ£:ÛªçªPÙ3=‰4´WåŽþüxûåjýÝ*˜[£Ù®®c{Ó÷ès.3¤È)¥Ò™½6GdîÚÄõ&•EIK2Užë¢¤­.¨ÜáíÞF‘®²’tø]F%dIdG ±*ð«.ddñC×´U…)a9?°6:¡‘?ó¦l¬Öè™h'SÉDR©É$"/Í©·Ôjö¬ãœ’ÆqÆÚ -­Ë {zãN‡åÖïÆÊX–ÑX‘$ùؚ¿Å©|”¯åu ƒpjý$‚S-Cê_áø<ÎEï‚Gë3(C¸*3Tî5‰²,TX•ÒðýšûŠvKS•ëŒ4<.¨ƒ¯±6.+_‘2¸¶U™Œ9¡=#mpâð빌äÇïäõ2V&OÄáQ¤ò¼wà„!°ç9—…Ñٓ̏îé-7’Ò -$ e“©¸‡L(Áaë×óײmՐmnÉvqA=*¤i™ú¶ !ÙÍm†œiøè ùR¡nb -œQ%å檉`â-™ÛMMÒñÓ3_Ѹ£Úi踑Ià ×s·–ÛTLÅ_t÷\¾CU·—¼ ½Ê"¦«Üò†Imé +Ú þ}ǵ;fÉ×ûÓÙd\=>V‘4„j¯ßmIPªQ•‘Û*IŽ…n®ù¿|©®…­N½ÇHismY¾Š4OäuJÒ › ¡‹3” -Ì6÷vD‰0"›!÷…\£ÂäÀêµ8陫?F„¡½L’ÍÕùº£1RÖ@Ñ(tìCbº5ÕÎ? îž$Г¯n–ÕΣ¼ä‹êTNÍ<üö,KDžï3‘n†ïÔ)+D{=Ö)å…4×­Ö¦D¸-8Æåq£6ù¾PñYÅ8ë(nuv<í;£#¹@û3h­¼?œKǽNFP2…BJeÚ1ܤªèŅ…>/XObject<<>>>>/Annots 971 0 R>>endobj -1617 0 obj<>stream -x¥WßsÚH ~ç¯Ð„¹ƒÌ€Á@ ÜLèäÒö¦Éå -oÇ=,ö;±½¾Ýu)ÿýIZ›_C;×i˜ë]IŸ¤OÒòoˇ!¾|˜Ž`@˜·†ÞŸÞ>¿ooÁŒÞs¸›xóz‘Á²u²Ìa6ñ‚“='7y³ƒ/ŽrõÞìÎApØ;Yæ0Ÿ‘½ÃžÓy7GC ^uÖ{³±7à°çä&>läxq”«÷¦sχà°çäÆcØÈñâ(WïMïÈÞaÏ÷9NÀ÷§>iåIbxa„'F0™Mé;þk qëݪ5xœ€ïÃ*¦|³)¬"NÇVa7‹D Fê/Rß®^ñlXŸíO½¥ru×£` -n·Ñě}Ÿ¼À¬DDyZ@Tü¤SÅqúõ'•ÄifÚ¡Riû#8ú£™çÏ¡?"N`TV‰4¦!’&ÔéFF€²‰“o¼Pñº{·¾…\PŠ-ž-"0 -vi–A¡,l$&±”¢d"µôàƒÚILU‘—™$€C8d¢Q L¿ÒP!†]jTŸ/¥Z†Vé=„ªÊ"%ZÐ Œóus¢ -êMœí6 *£™ -E6@³1ÈÒÍ ±Õ@"3Ñí¿·™ÚˆìŸ‹Ç@F†•Níî 3ŽÀג|D¡Þ—bÌNéÈàÙ½dp„ÉÇ:E#|´v“*…È%žZ-–V¿¿ÿóšaÔô¶Õª*ñÜóâóóÇE}êLa˜ÉZfòRhԌDºj½iÓBrBžÁ*ëD°I‹(-¶ôŒÒ} ¹«´Fߙãm@ÂÜæÜÙ$5€ªñè`0kŽCMè=€Ï-hH™ª—ÁlC^摑ø±G„«ƒòßú»º²G.ï]L‘–¶ÜQ|5ºr…í“C×"Üfèe¢®¡9ë2ž6LH„û1æˆÜœµŒø"²êä‹°„‰(¶ÒôPÑ𢮉Ah\)è£w ڙ-$ÀMXÜ/‰Æð$ -¬;ÝSÕ})–S/ -ï™áôEéíÍuš€)e˜Æ{ö…«Ê%¶c QÆ2!×]䇨2k m­o¿‰Ð©@|"Qxá:‚‡#÷–ËO J›ªvD>l,Vø5þ]³Ý†u·£â¸ÓC^X¡-ØÌà{GGÜ­ýXß~¼ÉùAþ:蓂¡æJq¡öT³¥Ž£1äÉÁ*G/ÀÉE¾]ÇïÈd*n¾ƒ’­ÞÃx6¿ð4­"òE]ì”a‘=-ëk°˜tn˜å~”a[YH-²ÌQ¬Î€kO¶&ê ê퀺™ÕǺûëº[¥Ñý/¦²«6¯È’0Ã>ë(¿q ÈÐõ-Ó~ð8o < Æ<Ò|¼&yP4<¯ÞSW54ð’rYÔ#³¹(PϞºž½0ÜôQÌÂ/8 q¢+.'&~mN@ö`¯*0 ­\ET~ôD~M ‘½‰A}'áëîhÁ•a•Ê˜J‘™ˆg†„µ8¡++MÓBš1þ$(ãò°y´R?Óvû•Zp–¾É ÷O¦yj±sTå… Xä ~ԝßb9‚…#p¸Ä1Þ -,'-%¨˜…¸˜¨™R„ò·ÓØaÉ]"vº½,ž˜ š(Ò)k**„^Ó'҆*/¾BQ»c=.ÏtïYß^æðcKnø8Ú%ÕõÈycš(Ò9uÂ_0{ceN…E- ìF¥2é×Ú}ç4îå’nk6¶V‹·Ë¸V†nu˜²Ã:8ʧ¬öàm¡v ƒª Ï«>3†#Þ :ÖFÅݲ(dqåkZµŽÄàqVßêýÌÆøû‡ïjËÅÓ»¼hE­TXQs$Ik¿9ޟñVuÿoýO‚™܍ÜÏߟ’²ßW­¿Zÿûm€endstream -endobj -1618 0 obj<>/XObject<<>>>>/Annots 974 0 R>>endobj -1619 0 obj<>stream -x½X]sÛ8|÷¯˜ò¾(W#Z¶$§Ê^gs»UŽ“‹´•\î"A ((EÿþzRÌf+[{•$v,Â4fº§þ|‘ÒSš\ÑhLYu1L†4žÞ&×t=àç+|YI?ÀÒ÷wÿ KoFi2¦ŠÆ·É„â‹’f'/+J‡×Éôä!‡ yóNˆŸçÏ_ÝR:¡yTãñ >7ÏCÔ!ͳ^Š( ÍdV[å÷$tNNTKqŸe¦ÖþÙü#6¸¦4 ®&7Ï{óµÄ¾üΐª6Æz¡=mŒÒޑ78b%«¥´´[KM¹rYíœÒ+òkI® hŠ³x$µ·J:Rš×qø! ÒQrÅAseeæÝ'׸Á…<®ÆH0Ö<É­´ç°{À»n±Ëê­pnglNƒö‡WÂcÕ²ö’¶¢¬Â`+¤„j-uf÷/sz|yÿðq£Yc0I¦\} X\'t2<<åaŠ²4;ÒFD^!µ“6är«äî¯aÿ.hm]WÓ$½=æÅu’6m–ÖÂáP쬔’—_<ÉϵBžP0<m2$j)sÎå%ÞhtrÖù,´S~mjO¹´jÛp¡SccÕJiQÒI(‡ºè•Kè -VNéÂØJxðäÒ U¢h=¾~þ4ïâïƒ0–w¢þòôðîßo翽y¢l-PhËûð¶3VÃà×7ïço¦,AÀ¶ò`f˺yä{¾Ÿ)”uþÈqå\-ûáÉe™‹ 9W^’«–IftœVT’Cæ²uÙÊùe‰ih¢%_ûøE/2í¦áa¯ BwHN|֖º·x†R´2lBµÖóÇPR+€y“6r=‡²EBïYÔq# |³‘š…ÑƝ.~ Oʓrá,KPÂ0#BNÚÿg^X?œE‰bRçà’b¡cO M)2ʌˆ³„~ Gt"S[±Š8héE»ð¶uÇëhB?ýD±—3ˆ¨ùØÑs}I"Ë`}‚Ó€zO\Ê=C’¥;4¦a0ê^\Ì9bwrwGóꝫ=yóâ?K0]ß]fú.t0ºgGé›ún#ͦ”ý<»ƒ”þhÂÏÆ®.i‡   Ýì\œððt Œ‚ébŠ˜&5nd¦úðÁMQ=pítªôùÖXq¶’Ìò#:nV‹X7 %Zw…؝¥;†;T%–ït88f¯[ɨÓû§×÷OGr¥ãÁr!³BG0žœNÆaÑ!ËBvànãE‰¶Íв–_ ¼LUð´hdA"Ï_ íŒs29´Œ“Ck5çe?f±÷"œ¡k|Ôâ»ñÓ âÎYþø7»üQ8?“áø¹W`|”+$Ö«Š_4½}Kitýôv2ŒÅʊElÓÔûfuÃ|ÒYü­4žøȑR´ãi$dW÷¯~P´UŠUG8~Ì.SÌ=PŒ[¶µÆÙ ¡j÷¹æ±Í=û$1+üç¿GrÃþ<¹SÑÆ89‘«³53øwZô¸±.žõéý¢‡Yø“‹ æw>,z=¹ÿ䗍ŠÌ¹Õ¿\`¶™/žý½l”feôµŽå9¶VØz$B˜Å ÷ •Á¿k äy\~.¡îäÝã|òæˆEñCC~RÙ§2{úa-ôêÇåA_×Îÿà¨kSɗ¸P|}NÇfTð}2L¼†Jé¹qÃQwk9à‡ -39/øýé´÷èõÍç‚àÂög7ÏEqËÊO÷­p~¾·hÆV¾°Ð凰ÙpwþÀ~ÆQ@£ÅÍ"¨„Þ5W¦ûà$,î2h'F¿îöÑÄkï‹Þ fþ -Sú3oðâîê%Üú͉!M›‰(M“éíˆÆ7i¼˜Ïî_ÿ|Oo­a³¦—&««ÖòtŒßMLG4˜ 1*åßó[‡ëñ4ß\ÅëtšNyŸ_æÿºø¾ÛPendstream -endobj -1620 0 obj<>/XObject<<>>>>/Annots 977 0 R>>endobj -1621 0 obj<>stream -xµXmOÛHþί!U—JĵçUâCHBA*G¯¤jO—û°±7‰Áñæ¼vÿþžÙµ“`h ÷"{wfö™gžóבG.¾=êúÔêP¸>rwvŸÞó -z=|®És§[þ•Ðyæ÷[N€{]¬ðñ“IZMÞÃ°GÓ[îôº4Œa—¦aC‡Y¼É?Š|õvz‹¥A¹´1 éJÒþ1m2µ‘Yþ@z#ÃxKM9Vl°•ÔÂ\Zf¿hJÔR¥åÖrFWc|N¾NNHeìÅ¥¦×r|ÄÑpΆSZĉt¬»<‹Ó%…"¥¹¤´H{ß8‰5Ž”ˆ<þ&)WÆa*óÒÙJd°ñI.dV=<>Œã¸æx#2±–9VÇ©1¥×s'TébÖhÏÞÒlĪŒÖ -PÆ).×ð®RÇB–P5»NÏ#¿ðq¢™ßé’]PÁnž7[}§Ã €#øYÈ÷Ð - lyÎØr+c0¾‰¤V EÚxBIEBb®URäòÉéógë>ÿ:2®ž?ÆóׁUóöŸA‡]¨µ9̦®ð`g2ÌUöð²òŠv;8ÑÌg†Ú®v‹l·¥æ傌ی)‰Œh™“H£ƒ -™‡‰ÌÁµ»|çS¯T‘DLu“öØ<(ÿ€ÿëBçv-h¿UÙÝ.wUý1Ci†/œá›Ìð›Ëb6۝òYæÔÊG+yô<'øȯçÄO ¨ªïPÛwz\@œ¡/8¾ÎM5røØâÐ"äÒ.sVJ‘e2͓*R˜ˆž­bhâJ¸R­,ŽžxeîÄi.—ð›ÉM&5œ™«ì”E¼Ó°8 -ҌfO—ãÙÛÒ&‹×"{xŸ©bs9~6º8®B,­Ð’ÍT7MEX‹%¯VÕ;š~ÏñúÔ¬$‘ÉZܪ,F÷°­Bsã(EEHJ*åÌ /´]ɔnÄz.¸¦In Wôq<âý(*µÐíY#;|ñ zŒ…&¶4/®¿L¯’G2q¢á •¸åFÁ’/ `=Z?L[7#•æ™JTÔÛç¤agjËQ.TMÍ!ÂsˆîÁÁ4T‰£Y2S4o†ªHs Y±í¡†¬vgªÒf$¢Hr+özÀgDßAûH_–ۍ**ïük2ü؆é³û~öOÂØÉèk¢x†gàÕÿ¿CçO&y/֛D¢åj] £L‡7ÓÉûkZJ)H6— óŽfўÉÜ)ò•Èí‘ÛÕàUŽO¦=5óa6{SØeU5h+4ß:`<¸§`*#ÎumiTNݎ¾¾pÑ Óý(ÅdÑñ\†wÇ6ÌzvⲕwbHl-ùUàvÜâ¸ë.JŽëËû @€/ç¶Ua7›ß¡Ášj±}ŸZ’÷±ÆËÙÍP Œã"ŽN™Uœn¤â$Eá©©<¾PÙò˜Ï±›¤paú]¨­Dû<±%ÉTU4„U*Ô,``HkŽ9`ÛqÊ©øÅ0í‘uÏHa™ÉM"BL·V¡¶1ú³QË-£0üí´žm²jí¦€JpìowÀ£FædLÁ&OC‚Ùz¥A³†t–ŽÉÔÕõÙïe–vm«OÞ-xi¶; {}§ïÐĖ}_žÓbÇïFäCê qz« Àž -^׎%)Þ¢´F`рzÝÞ¸çzAÇíŒÆC¿ßév‡A09z­vë|Ô­mÝl£+ w#¾”ò½ ôZàɺGM~@žïz5SÉzE»í÷]ßmyg“ñ¤ïÃqë,hµÏÚ^à“Im+¢ø t~#sXvñÝí{~P[dŠ|¯¦[{dñ|Ÿ$–eª -øÈ\³p‡wj±°æ¿‹‚Ãü<K= ?>¥êëϚ1Žô§¶0Éá°}×íÔvŒ‘H«Œ˜£î‡Læ¦y—{ÊÌÔRÒ¶tæ8øžÎQR¦–5~îߣ¨|IC‘™·ŠŸ±ôÝy¯i¯ƒÿôZø7€Ï“îÍðêlH3ŕq'D+§VÆ£Y-ov]TJÔxu=žÓiûÐÞíõÙêdzôÛÑ߃í!endstream -endobj -1622 0 obj<>/XObject<<>>>>/Annots 980 0 R>>endobj -1623 0 obj<>stream -x…Tێ›@ }ÏWøqû2·pÉS $ÛJÝK7T­ÔöaB: JÓªÿ^“MºM» ÈÇ>ö±=ßFÞ<܅´‡€p™ã‚ð=üfø›Þ€Ð?¯‡ëãÄñ@P⨀“ÀñO%¬Ž8†Ã@ód4Y Ù µëãGv L I¯Jë:)*5ò*ٍŒ‘ÀGÌUV´M)·²7^+#Ë "i¬2`YÝ˶Ýk“Í`:ea„Óù"^‹eÆ|.øt>¥‚ˆÅbàژ¢’æpmt×¼g@¡ˆ^ïTj£)fÐè¶ø¦©îjû?\+«µ¼Œ“ij—¥Ì1ÚçŸà|}„ëZežËú™šCc͛¦vþÃã”mèP`ùyzI ®Èn»j­Ì B†:§õ ò꼨W[U–3˜¬‹z²–ív@Þ·q³yê#£Â>w…7åÏiп²x,ÒǗC4ûìlíJYìÁÛ p,<¦W‚^¨t«+Û©Í‹éÿ'«±*דËÚ!c$ëh+ëüŒ¢õ¦kíÙüÏÒkûÜKßócŸPá7ŠC¸ž -£Jù”/££j“eÔ{Z™1ý:ÐÀÁ̀HW•ªmÛ×>/XObject<<>>>>/Annots 987 0 R>>endobj -1625 0 obj<>stream -xV]oÛ6}÷¯¸ÈKS –mÙq>ž¶uK[ h·Æm0 /4EY¬%Q#)«þ÷;—”W °!pl‰äý8çÜ{ùÏdAsü-è:¥åšd5™'s¼9ýûôf’ޤɒ®–7Ɋ*Z¥7ÉuÿTÒï§+¼[Óêæ¿S|¬¢<,¬Vó$/¬—É--aîæÒÅ;âÓ`n™ÞÂÈÈÜrq izÿÅÇâûm3™ÝßR:§MŽ|Ö×7´ÉBx#/_¢ñÊb=¡·7éW)•sô ª­ gZ+I“©—›o“9MÓÎ_´ ×_ø[_\GëÓå -αs‹„ÞÕޚ¬•^›:n]ÑbÑo ñbkt¤eê JÓ¨ŒtM¢&ü¬IÕmM]©Ú'ô{¿Ã:jâèëåkSËÖZl /Ê:¸ÒõŽŽÎ«êëKò¦|±Œ¡]ÈBɽ®/pV”Îо6:º¦ª´¿À©Zuç¹'ŽŽÂjÓºà{kE cŽ$¢Ý*9ÄtFNEmêc5l‡è …L· À ]Æü}Dd$'鍁Ùþ†×2#[F…ð[Pe2kv! “ÿl?7m‘ðTxßÜÍfŽ)NŒÝÅ_3ypIá«2Rõ#«Á1XM“z/oèd$žz†à ò¬„,t­žv“mk¼i·¥–å±OoËÈ«UqÚ{¤ÜØ~d†¬ÎTɉ:ÈŠ6:ðܹ;å^dY¶C‚}EÖk ‰eôM{¨ÛîB˜¨Nï †;qtì ;pƲsÊÂ'™ñh7"»0ÎÎBi9.¼érÙ ¢8zûJêÔö¹”þ6mX â§üùüUJ¹8àK{E´µ¦Cœ ¤,ñÈûÂ3KÒÔ"â,GIè:ӝµ¢¤¢t\”¬Ø3bÀPA°Y³giÅ-ÍuHp䍱¶°o ›4>°wʚ+T¸}TAå9•0Ëdl•ïz„¨³^û°?u°>TÐgtŽôó§÷t÷s9ȝžnuÍqâåð,“(ˆ3&qâ¿h ÅË!œk™¹T[u˜"YêÐø‰;} ÌaÕÊ%©2֔dX¼„V4"23Ôi_0o¼2ƒ{¥¶RQ‹oC™€Ö8䧀G®™sœt½ -!Dθ±*WhØUÊ&{ª0ÒyH‚‹PœæªÞkãé[ë<¤p,ËAâ½ÓÛ "CC/È‚»aâÃy†õ+jŒF÷fv°4è÷Ut]—È#ˆ ҙ%!~ÜCf£|9»oMÇèìTðùj­÷±i"ÿh"ŒÜwœ#Ú1hãSo>|¦7¾ç‘„Jë§ïח }0Ù±²|žïw;+šBKà **ǁK ­4Ö –Ô§]È^Ù\`º#ZŽÁð¡+°]!0n 8|DÆ­.u838 ܍0Ì÷óܚj(²á×%¸Ûqãí;T¨‡Óädyìs¬¹áŽZºW v!Á­˜ÔwQ5pªãdtS’…¹>:ÒÇÓYšæÈ* (Œï=ƒmEëö\DOÍP~ W(V×nÑ«|Här…î¥ɦŸTT‹*ܲpݜj~‡ º7˜ÃA÷C¬@+œ•UØsÄ­…/­AÙ¢çëP*³ûáz0å›doå±@]èò±½…Op®3ÜBœÝ/ú.a:F5¼<%u•âúÌWЧ¼Ök~ñLV'–qóìþ¦÷0M¯0²ç¸Rãäÿ¿$‡~ˆ²áàVkÜý¯ÒåtÁïþØLþšü áËåæendstream -endobj -1626 0 obj<>/XObject<<>>>>>>endobj -1627 0 obj<>stream -xTMOã0¼÷WŒ8•CB’¦iéi eÅe«FË ¹ŽÓ%v±Vüû}vR(e«ªR>žç½™7“·QŒˆ~1f &x;ŠÂÓ( 3¤ó]'ô×åè&]ýœ"Ž‘—®6›Ï ú(BÎÇ|oXìŒÐ{¡tÿðvÃB¥·‹+ºÕJYpÿô2%¼tÀ "I¦„8ΫÚàP7 ¸Ì -0µÜ*ýΚF=aIËjYË-l%ÐP±±Ã;£:Í•Ïã:¡¯¹¿[®\kêOÂÄõ³l»%H7ÿF3É«çË~Þi-¤m¨­¢+³S²0°Ê#MH˜BìE£v-Áj!B}ÊåöÏzŠ†Ôp ‰€Ú¸ù©ùæ9òè¥IiƁþªÕLÔºì™3HÖÃ%ššPåÐô;S_hŽýKÕ”’žÐÅê“ÍvlKó•þ_bS[߆«¶¥cZ¼uNrZ˜UgÍznþü°˜„ôÖ¢Ìô{9ª¬º†(”_•(UÓ¨ƒÓÅ5$Ú^àOž¸æÿíh¬—¿n–/ÉKò//žXã©’DÑxWÌmY¡š¤©{ÑjÞf¼brK{óã·éQjՒµm՟>S¬—ùÃë‹~íÇȝqív…Ë%.xì ?²D\S€ÉÛiˆþå|pSœR çÄSŸ5/µz¥|a¥xç¼Ìl­¤;Ä}¨<˜E×ï¶b;Kz$Qˆû‡§üK΅1X»¤ã4tûšìï`Òlfӄ>4'‰{v—~þz”_Üendstream -endobj -1628 0 obj<>/XObject<<>>>>>>endobj -1629 0 obj<>stream -x•WÛnÛF}÷WLó"h™¾Æ/EÇmÑÔiA¿¬È•¸6Éew—–õ÷=³—ˆ"Ü4…aÃ"wvfÎ9sÑßG§´ÀÏ)]åtvIEs´Èðq±Èr:¿¾Âÿ9~¤õяˣ“»·”/h¹†ÉåÕ5-KÂñžÓw•èœ4”Ÿfô“Ñ}Gè:Õnè珟——0?§ÓÓ`>ϯábYN?9aÛ*WÑ'ѬÁ§¨»JP>#A­ÜÒæàÊußN閔%ñ,T-VµÌhYI*zcd먑®Ò%=Lkõ$ë9Í!,h~z•h7òáoj+6’ì½#ë/öŽ ÝàmI…¨kY†4.bS²ÍÊÈR¹Ã§Yô—_fçœ(·VÆ:RMƒóÂI+,²@½¸ÿÞ úýö݌ãq•pâ8†R7Bá`Ù௏f éuxfü $º?Sö×jÀ®[+>v€ -Š·Âr¼%ǽQÏ!ðZY‡Gxn,ÕpňŒÚTΧYIe"*ÉÿV›'ë“i3úÅùË­n$0ب‚¬ë×됺UM"ÙŽV½£R•íđ…3IÏÒ६kZkC ­«å YéúΎ¹ø Y $_ºš¡«©‚kŽ…½_ž|Νq~•ðù!ÿÏZ”’ÄVì2ú\I°EôuÍVl/FIr0=ÃA4Ñ€Jtà¤%Ÿw@%¤˜Ñ½vÐ7$ ãÉL3°6Âic'᪄σ ;r¼nü]ÁAgÔ³ªå¹6üµb¥jå¸J(ԅZ²Fùf§€PÅë'„E»ãà i-*Œá®5 Xë‡ãQ¦o[F'ð•Ñˆ¢RAYã”&^B¡þÙ¬“fŒÏ¦îª~œùDµ•4ÊM¾bŒ$ßÅ6yÔrB ¦ô¬$hÎ ªQ¶‡ô|a'ÜZ¡nä‹(\äÒ¢ž(–^lǚõrIeAÆéQJ_Œ‚B/˜QÙÝS>jeÞ›ÛÐ+^QÄy”º'£,ƒg"ñ4(éŒÞû² ¡¶"“¯‡1ò${Hcj&_Sm¹0k½Ù t7 *úIù/ݓÀˆã~·Õm Ñ:î {#P!¾.ûN÷†ÀFÃ*õõÜF¹Œÿ³J¸‰å PC˜;O8†ð<ÔÅõ­z …ŽjëmïMзØÉÉ]êêÓ銓×ÀÃñŒjÉîxŠq«c” ÛÏ10ÀË)æ6ÆÇ/#R”^V®‚ÊÌ~HÛK«é1ÎV’ÓËè-JçLÊㆾŽ¡Œâš=ê -M¥f7áäÆøF+ÿùaw@ZµÖO¾£Ý$\Þ¦]ã<ŒàõÍËÍÅ"¿I±Ì8Ž`‘Æcrv•]2,ù–‹E¸æ7Ñ¡²€I¸/AÝö«ÃÙw¨ý4†«¥&Éðƅ#&‘V ,.I݃æµ}Có~@ïÞ'•®8 IÍó š_äorS”ÁU€9ó<áπ(_!œ/hr#ˆ¾‹¦Ë?¤¡r;h6Q@3®!¨°û#¬†ÿs¯r˜ûe€(#ç­DmCMŽtçö©&óg~@ÇF™zyê¦SD–æ¸Aå…bÇNƒ66r™8Ûªv¥Ú’kŒsÛê¾.ã`ë‘(ü ä¤¨Æ1†¥2²À÷#w0÷·N†ý/¡1NámЍPtµˆ?ÁH9āöJûVu…Þ¸þ¦2h2ñÃ[ Ÿ·ÏÂ(ÝGÖ±NûíI÷_ °Xˆ¦RZ@T,ÿTûs(ÔëÁ" YC½ßðõãüò:»¼Èc·ËÏøª÷Ë£?Žþ¦)[endstream -endobj -1630 0 obj<>/XObject<<>>>>>>endobj -1631 0 obj<>stream -xWÑnÛ6}ÏWܗ¡)«¶ã&é€=¬ÅRØÒ1—¼\I”Í…"U’²æ¿ß¹¤Ûê0 E×"/Ï=çÜCåûłæø³ Û%]ßPÕ^̋9­–óâ†Vw·ø¼Ä_¯¨I‹Ûb5}ðq}ñîþ-ç´nPëæöŽÖ5¡ÎßT—Ÿ¶ÜEåi¹,è‘Û’©S¾q¾e[)Ò!ô*¼]ÿ•j,nsÙõªX¢Ê%6- -úäڎ½Ύ+W´XŒ+—·€Š•ë­Ëåw8¯*ÐúÓ7ŠŽ"›—ô‹*£•­·} ÝÐÞõÄè0ú½¶Yp5¤ãi A“V†­ëM-xç4[\g”^±1{ªLìR¥ónã¹ · >( -Ü*y]匀PÔºA1×5xÇÚpiÒ¢¼\Q£ñMôlC£üäô×úÒ¬tÒĎ°‡­Ã‰>qPrP5=þñÍ ;ÅXcy=ÁޗÌÃÀ6a -xÃÚâgp­Š[áÆèELk)ÿÔ& ÎNÐ+@âŸQ©=‚¤¯òlÐàNTjyŸ…(ø@Œc -x«uf ì+¹ô|újKèAÅRõúù-8™j—EKÞJ€4Bý]OYú¬¬òé8“­il5>sw  [Hé\ˆ&°çáUF -RuA_@qrÕÁnô½×DO˜*᫆ƒÌ$·ôpÿxEl"ön¶øJ‚²{j¥ëZuÊց\Ҍ6ô¨°ƒ v –„«…ljqPÐ7·éÁí0W‚ 9Aۇ5ú°É*TÁk!¯žt0>œ(r—0ÙiKɦ2'Šçfó …ìT0£,ԛ²á*ÂèSDÊpvàþÌ5Æ.“Ù°qrú–}=È|H µ×h=È\ÖB’œ³CÆ8„Bæ*ôkÐTÖìŒûóÉ£f•òs•ËéB¢Š:¢Š´™ä¦~?C’(’ §é—¦é‡ÐüÚW½3$gg×Ò9#SJ~EC;­iûÝýYDʲ±LÎ:¡Ӕ¢CR!‡b J¡×"–5Xi¼k1dc¢ÂÆ@’£Ž+”H©ä *G¬aˆ‘Ãê ùˆ2¨'8 í`:]×9{«CԕT~Á€B‡,FF$b7yŒ³W”N˜1 -x"¢9¡^,ËU¥€Z"|„6 ²c_Š(ÞxY #¶½Ô¹ '‘(»*cûŽ–²#*I"ŒŽ=Ý ì»Ê¸0µÁ)Ak™Ò -,lÄÊâǝވ%B¦Ñ1Û2":¡ ^…#׌3°(>‹;D#æbÀèzÉAc¡O ƒñ)ѐ*!{oó”HQÕpoâÕ¿0' ‘‹‡åM#S±1jFå~–>.E© b<ˆËמ×ÏٜïOîïñʶô ݳÉž›x\÷$`²ZÄ[ö‚d1Ÿ‡@¶uƒd|÷`7˜­¶-{¼ - Np©‹Î¸>Ê÷¬Z±™(3í¿Ãý·n9Š_˜®ç?‘nñÝN¬x6ÜШ9GŠ…(ÉÙ öVB/®=›Éy§µKl–Èw¾–Ì‚ð-o¬Ž}­F,4š_(Çyƒ¼sœÖ«Z‹+r|Ö˦wÁ7¯v)þÀAN¸ÑW(ƒÐ@$ӛ†ñ -0òüdðÇNó“Ð_@Õ$j ¨x‘™4Zrõ‚HÆ=•.œ¨KmtÜËې¼ì¥ ×ñMŠéœûƒô‰NÐ3®Î_åæô¸?ûº"šcçÎÔ¨Šck=½ógŒN‚÷5Rùu(/¢÷wxÈ,Ïø‡`Mƒ™ÃËrñ4Y…9äŽÇvfà"z¾”÷<döȺƒ]10ã¨bŸ/O®t¡Z–ÞF®ÜO–fbß$xhË¢rV,b©ÏÉûc­pI™ðüZaàG—Œ¨8ÉǑ>Ÿh ýáìÿœð»ã„¯®3©ÿ÷ÕÍ]qó~‰+·Öb¹’–[_üyñ ['Nendstream -endobj -1632 0 obj<>/XObject<<>>>>>>endobj -1633 0 obj<>stream -x•WMoÛF½ûW t‰H´¾,+‡ìÄ)‚ÖuZ됊%¹7"¹ìîҊúëûfHÉ­ŠÀˆ@jgÞ¼yófõ÷ńÆø7¡›)Í””ãhL‹é,šÓ|yƒÏSü9M™¼˜/¯£å¹Óé™w«‹«Ï×4™Ð*C’Åò†V)!ÁxL«ä²Ð/º˜’­ ›l<ýDÁ5úýê;͇FÓ ¬ÒKŸÛ¦HÉ×Z§”Ø*iœÓU •$Ú{ -–2Sh|Èqe¾W–¶*v´u&]ákCòM’“ò¤êº0‰ -ÆVäµ{1՚|Ž£žAŒi4™ESNý|itÔ½jã#P¦êâStÿí¾K?z O&qÖÛ,Ðc–™D·!žßsrEa·ž’ ® —Öi•ŽTÎÿQ¢’\#]mP¢Í€B{4…+ŽZÊ>Ð<1Ï£Ù¤¥l:¦Ñ,¢Gðö.S½çú>HÙ#Juí4HÐé[æ¹]—OªŒòWÀëAòQ˜!Å;Z;U¦NuÑi›ë -­uxÒֆzÑßÌ:²ˆ\åõ£pèlQ Ÿç(ªG/ã_ËöxÇé}Éhgt/ÐÉ+ˆi§ý€#Vò DÐEÑ¥Ù± ¥Úõ2«5tà ºëÈG,!œR”Tƒ˜®Ú€ø½Vï+Kª>ëLbqBcE–­ÜÌtŸ—´©ì–¶†3°~cÝ deΖÌdWD8„EÁ”Zê–^ã4ÅfMµvhC©*ˆÑ”µ³/ºä!ÂàᎫq2þÀ­æZ@7­S Ï˹9AãAsÙÁÔ8²6È}Å¿o@;¬ÂÏ&îyäø,»5š+”'Ö¹Ftû*yH´•üü yþ †‚S-\™æSK¹‰,í•àei(ªš2†d1Zþä0@™à؀V¨,ÓI ö˜NœT´úø•båÑ$6Ä+̦¯i(©àH1€r6q;}ÇÔ3N=H;brîSÆ&§ª¹ ‰­Á ~:zìê²¼àUxؓÊaº¸ç N¹ "¾Ñ: £ -ªÕZÃQ|âL Ä9$ _æéDrø£\c¦ú B ºB›aÆoÆégT½×Í)"rf·í)٘Z•§-Âr€È‘Ó䎅×j«j³Äv°°4¹GPªán)F%°Ó}oYTG#ÑK)Òê9uAK!tHÿ¨ Uµ›ø åꅕçfðb<Â@ç¯[H®¾|%T²a’<ö)”ÞËëÑQORÓíÇ_Žöåó˜Gôï[oþ‘iù/ßØ[á@Šæo:cèzªf?Ißˆåû+q:ßÎhׁ“7bºÜOUچm§±lzÅZÊÁÞõ¹ƒÙ`º=o\¬›Ì§‡»½/xz¾ì.Kp/¼Ãço2–xÎ¥ÄNmqA1ý -”[ÃΠ 6pý¢Š†åÈw*îì.ÖkS¡@8º`ıîX£•2G93£!€TNns åÕh!lBVâõ*î¸:r2 +üÅáʜöXI²'»ÃÁK˜Q 6F³Ú¸þ^bÁà |;°àۓ›\s©<ÕjæûOK -ßUåº&`÷Ûén­âé¦4 wȺçH⮫ EË®é:Ï$°3îcXS¯­I¨Ô½ÅÏF)ìꮕ8?Y̖óÖO@üÀPãB+¯˜ÿ°”óîØÝ-‚!iɈ‰åÍ[B¢’a?óGEBގФø úZeÉÅåEÁJ¥ ¹…-·Éï|`ÿƒomÕ.¢Û®î-®¯ñ3¡kk*0èûBæä;QتrGz¾Šó%˜J]Zälª -õ^9S섻«ÏËî7ÉdŸEË-n>´×ˆ§Û‡»[úêìwÞŸlÒ¸âÊGû£›ñ¾vüÿkù|±Œ×SÜíq|2½æ°÷«‹ß/þW,€iendstream -endobj -1634 0 obj<>/XObject<<>>>>>>endobj -1635 0 obj<>stream -xuWÑnÛ8|ÏW,ürNQ«¶+Î}h®-Pàšë!wð -QJTIʎûõ7KJ±£¸H$–¸;;;;Ëü¸˜Ñ_3º™ÓUJYu1M¦”.o“kº^Þà÷9~¬¤"r!L¦Àiaõ„ÖôðõŽQLi2»BÈ™ªB&—п¦¥LÔÈéÃñ>OãKáéATA{…@GD­Sõ6`d¡PzO#2W¦&Uºj“d¦.º7((ö¥r„o®þEZ d4ôG+Ãz‰Bd™lü[Ú´žjóö0+sÑå’ô&Rü&Ö£$´:r߃°2“j'à Ðqc¼é˜Øâ“~†©KS›ÖrqړtoÌSÈ=øâ)—…h57ÎPºX@ۛƒ—ŽÖãN֗±TåKcœSݕåLÕ+ǁÃ5ÒÆV´‘ÞCB{åKh®‚(ð°—µµò ¸§;¡Á:+HKÇø!ŽùôzÉɵz”ÐÐf¢u HB§’k€¨r¯*¬©2h`&"rI]Á}×7ÜÞ(™pöt®&Wב'ŒSšÐŸ&{<.åì4ÝžƒGÁæ9YªjŽ[è¼U™'Ct*†ÇJ‘¿Û[]f<.ë±Ð¾4í¶$pž«rFr§Lë\¢~Á»õeB_ -:`šd-¸?ƒdëq™Ñàó÷tn´¾dzêpžÛX(Ø@.GtmQ _¢ã{¡k¹¨3I%£¬ wpþLSXïÃ#a¸¹‹@~€vh NX?ˆuÿù]lk/sÀ‚&bبÉÌ´:ç?Z¦¯Tà š¨qp€¤ 2Ýc”ɯZ}“ÐC) ªÊä2°}¶Ý,üF´ö„,ÓȚ5p²ÈО9mö<çøߦðÀ·‘QÁ9ëräŽ9G”!5¼Næ(ٛA!E«ÁÑQTAÖ&qŒ€Þ£cGoEÕAÁ Bð^ 'gÞC¬£fèÇV¼rQƒ€~!jPÜË#Ó&r,œ1„¨$†7Èh=Ɖè<ŒQo{I{Sÿæ ¾±È`Ô9a¾í t%·ìœ>pÇ9à MLÍÌDF e1Û¥ç<âx—ÇlÆ,¡ÏÆ®j¬§¦Ñ*¼4‚×`Þ GUÐÞþŒ†Øð}äùfؕ`§‹rD ±HäÄa ³ýüƒa2{÷2W.)§RŠjý…•ï ™3c±<0ëÈ øÛÁX-¼ªXуŽšÀ 7±žgEË{>¾×"¨™z4tÐB ÚA#ct&w#³WÖ5rúYr›à‚b¥–h7Z«1:8®‹kßûOÅä#(úÚ½ôw²†9~ûƒÂ/•ˆ xc4¬.T^›=àÞ²ëKÀºìÏ32ÜUt¸›¼š­¾S÷«!÷­>ýN_bua©ð’†§÷Ì +fG]°4Úï®#kXWÊ0¬ÊTE·XÀ¡Â_¹à’ÞJÙIÍR<ëÝ¾éonº?˜3ôˆþÔ‘Œr¹i»h¼jئyÿ‡ÕÎX‹çyÕ C[ìkkš×—¹“õqôÕÞQ¹ôî[è֕Ýægt ÿµqñÂlýþËQ Hpmù„u¸†uD-»ô,ŅyEi—}øðõî}³æ;&“>š¬åeâ2u“þÀäfzË÷®××óëÿ0,æ¸Ìãñlžò±O«‹¿/þjñóendstream -endobj -1636 0 obj<>/XObject<<>>>>>>endobj -1637 0 obj<>stream -x½VÁnã6½ç+¾4 8ªe»vrÈ!A[`Ù¶‰E\h‰¶¸¦D…¤¬ª_ß7¤œh•lö°@$ !ç͛7oøt–Ò ?)­ç´XQVžÍ’­ÒU2§ååÿÏñk%í‡åò2Y½õa1Ÿ½ý!Í^_u»9ûù÷+J×´Ù!ûê2¥MNÈ<›Ñ&;ŸÏ“«„>«\’V•t6_¿¤a1_#Ù&?ß’&mwp2µW¦"å¨2-ÉJlµÌiÛQ.w¢Ñ~JÛƓÚQgʕãï¤<=žïŒ¥­ô^Zr2k¬òÝãò…¬Bl):FÜéõ ·kv; ª¥ÅáRT™¤w© -|9£ªÚÓNi (¥KˆÁcµqŽ‘j霬³‡Uˆ#ªÚKß攉 §®G©;é&Sj •§RôTcéz¡÷b±L– ¼¦³„î¥ÈɊö}ZmŤJ+N¼æÒ©=£õ|‘¨ç¥r2Ÿ’6í…^VY*Hõ|>¡k í5ŸYaŒ“|me<¹¦®™hYaZ‰3 ’åô Ê­ÀñƒtÏAÜ»É/ƒ)†<€r/^ä0â³G ŽÕµŠt}¬È™R¢ É2­dåå¦úÉS,Î +vÔJ­L‘ùFhÝúÈ´ äaïǀ€Ìã"VÙX]|,qg3S‘ž›ÐˆðÒy.:CÁèsãÁÖûjMaEù}¹¶§°Òk¼åÿìWˆßUìˆç;{Ý{ȵ„g°kòŒa -13“A*ÅtW±mi -_§ì[ÑRXï'Óù‚‡2ƒP÷ÐR¡‚Œ0zîû}œ÷®S[™«Œ‹ý¦ùÄg•ä&jýåË3Œ¤ÙñÐÐÃÝ-f£„÷æ0Ø{6›Ap)J}ïlp ÌôˆQù·‚rágà›µp>Z†4X ¸ÁÀ·B³åp\…£CL•°Ve.aa#Ô­('jTvÀ4´÷|gÈiåSƒ±éo|5ê4ƒ@¿È†‹.¡¿±á8}t½à‚]o)Ñ L]¯”±š> ^ /€Ä#§á™nàúÌo¹ži˜ì^‚/áŽo¾uʦÑ蝰^ewR×iæ½à;ÆɄ±~±ü„£Égü 5Uý´ÁҎ*†z´_›Ý¨ÙÁ¨„¯Àày"”0†¥Ø"sØI¡Q0vncÔËÉÀI”¦©°¸j™©âu»Évê_€ìG…MUèVt."Œ)@kz ­6þâê\X…gDœ›o,÷EBwØ:Ì~]Ãmcô/§XZ¿e# 6çØȣ†ýêÖeÉFŽFðJ|ööƒ ³=$Çz—Øb•c·™Qaƒ¥0eÙÜj¡`¬˜°Ïyñ犟UxAà6f [œ×>¢Câہ¶¼AÄàž˜Ëþ‘˜®ðv½\ÐjÝ?×nînoèOk¾ðŽúÕdM‰ž5Œòâtàb=»êßJ¯Þ Ë^¿¿ÌñÅc*¯ùào›³¿ÎþÛ˜Ðendstream -endobj -1638 0 obj<>/XObject<<>>>>>>endobj -1639 0 obj<>stream -x…VïoÚHýž¿bė¦Rq0BNꚐ -)$\ Šz—Ói±×؍íõí®1Ü_oÖv~Ц§@dÖ»3³oÞ¼™Ž|êáϧ³> FdG=¯G#¿çõi8>Ãs_-)r/†ãþ;/z¼÷àėÕÑÉՐ|ŸVœŒÆg´ - z=ZÇ+E2ëTÒ^•î‹­$«à/PY‘àÍRdkAUbc²±¤îåýrú÷|>Y*l¢r‡_\]O¾.)MrI*╏«ïG=êúÄ» -çâIF0è5ëý‘7äõeá1–2™)½§LE’o(10î©42d'|K…Ìñ[KÁ‹éþ‰<ä½¹²õÖõÞÅÓq[´¨:À‚¹G«¸4îڙØÃ> ýb’$£H66I䄉q¸½xsŽúy>øÍUÇÝýäêœ|äÒ kú}Ïz´LUEi"skøøëäuûgވ»ĸƒ&±0€¢PÚ¢‘Örœ’B+«•rB/n曆ëû%áî±Ô¼9§ëÉÍ|rÓ§ g]P¨Ed‚ƒÀM!a=É`n+3„FÇ‘Vù½§ÃÆýS~züx˜Û™§[Ç#M‹‹çã‘Ùù#Z d÷ñ#U( óÄ¡GJ“C=Vԁ"ä=ªLC -bYyôbYI²$ú§Q×gÖH…f´ð¼J˜Óq$êdbG»,±ô™ú½á¸ó‰’ÜXÇ´~E¾9D¶½pKòk…‹´›j&ùWv(K6±%‘E±L‹_á´!µ‚Ã÷yàȒº=$¾4S†Tbo(,]!;c*¥vƒØ&™ôèÞ1–w€vG -Àò@¤Ô)Ú3©ÜÊô°†ª$M[F C¸±Re=ú%©Qw·mô…tî¯.(ÐûÂvZíHjíx£ ïÖÇÈkJƒl™ÃåûY™#žš¸ -.£„,îÈÅ¢·¤ÀÕ+AûÌäåNdä猪*ãHù ôÓF«²ÕÙÜã”sË.J–(¶²F5¢ØV ®X¬d"~À¥t¬›h(TAí0”V$©Ýs*„FjJýØït:–IÕe¦J:d å;=D›`GžW"Œ@f7—·ËÙSGz¬,§_çӛ•[bœmdSè ô.+À Öß_\`¼†7BnTÆ -¥?g,R%´õ>]ÊH”©½ ¶5Â(5üŸó%Bú … -&ÂëO{ÉòÛr5{³›™ë -ë@ÙÝyôÐJ7kæä:A'y‘.VŽPå,=åÚ*Þ·%Üö£ùžT•#ÿ¸/t8T¡õýnøŒ6­« â6Ù¯pªÛf åV¤¨ÉÇc4¹£k¼5D”n‘EýÀ·/ò½«9‚ëúºÌ¹Jaq¬3Lº‡Åç–qàŝ¿t¶dB­ -F^P„äƒÇxô€6ƒ`÷×Ԁ|ìŸ÷ÿÚ+ŒZ£qî)”häa£L/L lÑa-«»:“Ùî 7P âw´V»—)¥a»r`ÁVCAž“º×èB±@‚»&H ÉÕBùX²C­h(¡+b^åé£~ׂ©Pó›@åAŠ¦¯ró[ƒjË¡چ€Bºjì£ç”…'wáx rÀUUåeI •jxpÀ„öˆ*°,Ðú°ȳ ¸3*x"ÅŽ¨´IšØDÖw' bÃ÷_Uì…Ê£dS¢k4ÎOY¥f a“‹9¬i•®Ás5½áw­c(&Lg  ÒºÁðQLSpl¾º_.¦ÓKA!ª㚊ܠH¹DßXó0…ïVè¼¥:³ÏW­ó €%"-%h$¶HžÄœÇm³¯}º;ðm×®Õ½Èq=p8ß.‘˜Â»m&çb‡ðé£éÖM´]ÌҘÃcß#v‡ŸÏ#î´õg[Q¼õäjÜLâþ3ýx€y¼Ž—“ù— -´úÎÃÒ¥ -Jž³Ü”Ê'»þÃ=tÏzçìüqq8{£Ó~`Ìg§«£ßþ§ñ¥endstream -endobj -1640 0 obj<>/XObject<<>>>>>>endobj -1641 0 obj<>stream -x…VÛrÛ6}÷WlŸìL-šÝì7_M£DÔI:u ”‘€–Õ¯ïYr&3M&˜^»çœ=‹¯'…øÑ$¦dLiy!%£Ë`HÃéëÿŒ¤üäfurñ0¤(¢Uαãé„V!> i•žÍW^7Nß)›ê'i ±.ä›Õ—“6!&;KâŸñã J‚˜?aÛM!ÒÝ[]È;édê~ºsøãΕ*%­4½SO’î+¾,ûî¶ÑÿìÐÛ‹%%ñw»Æ?îz7£[‘n%-Õ¿’Âïâ'mü Ñ 75#g”ÌèI׈¢8þ#“ÃÊÉÒR)+§t… UùϙNþH¢Êü]a"h¿Ué–J‘I”©<—FV©$§q -ç~ƒs/¬ßluº“Žt͗؀fŽ\cø:Ý8šÇ­¥s Jç9í•Ûò/Duø…ÿt§¾Ôƒ¥AÖ(Éåjl-ù4ÔdDe‘Ó9¸—²¢'a”n,N­.G” -eY_— »Ïñ`<¦8œß•†•Â—“è’Q×z³¾R]ÖÂ)PìÑEF³»{Ê sÿxö»Dik5HÂÇ7­€ó1/2ÂDl¤°Ú …rm( -i-¬\½jfŸç÷þˆ\m#‘º‘W´>¿ÓE„üÛ¢(¹Õ%¥ÂdW4ŒÃÁpîn.,Âp0ŠÛõ"âü=¯Â{Õ&—ص†XºõÝçá`r„°㊒I8H¦mt’`=òë^3_×’ÒBà±c‹Ü^S® -®Ž†Át8ùìü§Žªèø‘ÃZLFS0—¦:u8?3•U™4ªÚôjb­oÍèÑR”kA -4U…X¤Â¢<åۙjÈ;ݪJþD|ÌeSg ±×5‘Ï3¦µÑÍfëä¥ÿR!ón)7 èKÃÕ³ØÀ†§]g5 ¤Sg_×TÉý‘6¤-h‘$ W[Á¢|k |Äis&œ%à³Ù6럨¯ËÂmqÒÝK­³«^Ãxï²QµonjÆaø«Ïß6Òõ}§õŽñŽ¬ƒup"«ð¨à”óoà Z+ÄI mŽX458Ê,7ΌlSך³åD‘p©}Â?Œ„:ﲞÝÚh§S]À»Êát¬A¯"oώöù~„q´iJª¥Éu)ØÒö>|-ék›äŠ6¯-_öÅÃ%E˜:9¦É ¶^ÇAžèc+N†õÛ¤Bd< ÆìÊK滖º†‹ìœj¥d[(¨jʵ4–+‚ɽ¸P;FBÙs¨…<"ÀvnÐ3Èöƒö™Ží3«ÃwyÖ£à?åŸ6”˜}Þï¸;ø§5¹´¾P5ךî¼QoaU³ôÊäx*À4×ì¸F”¯—óÛޕ÷ÀDcš-¯Á…%ÉdV uÚêÓOŸ“k|CÎNQKÆóœ{d0‰e.ÐïÓ§OªÊô¾ã»wÝßóåêvñ°LyÚp†ö`1åU)>*'S pPÔ9¾o( –='< Ž½SUóì+à ^•Ü»•„âé¥Ü¶º¿tƒ:ÑÞ ¶|¹ 7? -V>‹2°˜ÓÙF^@õëL  †®Ô½û2e e£Ä~μÂaÜ;x€¢2ߔ4clŸ-é©®¨¯F½7Êq(ëm„—G´î\³­燜›ËXyΡFz+-´kû¬ñHؖÂìøEøF|½]Pÿr/OÏØ!ôQϜ`õ~unŽhí‚ò¸¬5Ï¢öýÐJÝÛGÛ=­:sS­ëQÐMQÐÐÇ3â¥||ʵåºûõQMàATš±¡‚…Ek qÍÅö2;Å"ãáÈ^wk¾Áy,dâ@AЙδ{ôFc<ˆ§ ð<öo×åõüæšFñÏÖÎ4ðNÑgŽl7 &á%ÐO­j8žãQÜ>£ø’wÞ¯Nþ8ùÏ•êendstream -endobj -1642 0 obj<>/XObject<<>>>>/Annots 1030 0 R>>endobj -1643 0 obj<>stream -x}˜[oÛF…ßý+æ­ PÓ¼_žŠÄiZmãÆJ݇¼Ðe³‘H•¤âäß÷Ì ÉÊBQ èñdz;—åîRÿ^ä㿀²¢”Öû ßóñ—ùŸ¿\‘—S%^J{Jc/Ŏî.’Üó) C/+|/…c~ÞòÀK(ÁÌÈ=~âeÊ I‘bhSŒ­b4ÉC„„ cf"˜‰ATh Õ yŽxœUrLÒBrŒeJ<¬‘ÈŸCÕ™‰p‚3ÆvF«Aã¥sT+p€~ƙˆâ9­f+wÄQµÆ‘T=+8"ì4’‡-¼ÈÀÀ—‚Eè=O&(q"J&5Z'EåE“Mü¥×hÐBJè¼Fï) }nÌL­3NÈQ£AóŒ«è¨Ñ w×P£÷….Î×jÐ$Xx­fZ,òµ4 ¹ÎsTVƒæþrd£÷£õ¶ Vƒ†Ñ\uŽÙjÐtóØß ÅˆsE™þNTûé¨ÑsÕþN^í§£FÏýéØßÑ;ö×QíïD“Ä+(qÔhŒœÉkë¨Ñ¨³n3µóøfd«AӔ_1ç5š;òštÔhPdî;j4z¼bgj5÷7]Œl5÷7^Tcì¯a=q}¦¢´¿NƒbOCFŽ ª#;j4(¶y¬IGF‚b1¯Õ ±ì*³×jî ¼ Ž Z„Ë‘F#Ù|g¯Õ q°ˆÙjPä‡:¯Ñ ™l¿Ž š'¼_9j4÷7_ÖYöØ“]öTUîœiT`dCæò»`¨ÑÜÁëÊP£¹ƒ æ7ÔhÔQY¯ÕÜ£9¯Õ¨FÀ§‡£VƒbäÔR£A±‹Ø¨¬æ:gxÜÈrÌÅÒ -$äók¤J -i4(^¯ÌR£A3¾ÞX/ƒüré1(…¥-rÞ8ç‘5KQ9j4 -‰R!ݙZ EÜ^Gæ&ÈҘ©¾ú±lØÏ"*Q³Ñ Ø4•£FƒbÓDöŽ Š#s1²Ñˆ -‡Ú;{­Ö˜#ë«ñµ#ã¯(‰ÙhŽJ2rT{6zC¼dˆj¦Vcޔ/ŽŽµ’ã#‡¼ñÇ¢´¿Nƒ¦9wÁQ£AqT##GÆ¼aÁý©.Xì÷|¬(™VìDÑ0c¦b -¾jOVUÎ:SÙR 5šó 0†¡Fs>|13ÔhЂW¤¡üÚDyŒq+æ«à˜ŒÄ>Aʎi2ØE¤íŸ‘(6*Ä¿ò9Á7•H3|LÑÈ;ì ±ruå;$!Fþ,QÉƌӘ¡£Pj‹)ªˆqÆIˆÃ86PXzr›Âþˆbg`4ÏÉU2Ôh8âøœ×hPÔMqÔhЂ—«£>§¸¸ØÕSŠDHLÜ0>D¹¶)ß+U03RÊg™ï“O¿¢œÑj„“„(ƒ£oV²æ¥×ªxN…¸JɪF?c¼«¬Äp\ݜ¯¹¡IDvŽÇ¡^t" ª„¢|“FD¸¤–ªWz ªÏŠ2މª×QõâSQÒQ¯(㝨zU¯?}\IŒ¢Œw¢êuT¼>„õâÎ^UÎ;Sñª^엮V¼›¦ReÍ_õT+CՋ§—™W”™w¢:¯£êŵÚÕ*e¼U¯£ê¦Xæe¼U¯£òÁė_­¿žªÔë4òCÔÁPõâ_­•<+Êx'ªÞ™Êb–ßö”ñO òÿìs -3ʖ>##Áp/l®8pññ‰÷§®¢íÅÛÕÅÕû‚BŸV[üp“f9­6ò{ þ²~uó—Go‡ªÙÔߪþõê<a^}ú2äëèjójU>ì*j·tÝ6CÕ ã“¨Æô¤¬\<‰UN·m7”õ®¾óˆøèÒàÀ£_o?ýÍäÒ_Ð£»ëô©©¿1]BŒû-AìÑÇjók9Ðousü±èÊf3\ÞÜÈ$‹ùñô]¹( OP;¿jÚašêóëu*\3~¤Æ½o'ó؂ó4èÅDÎÕ«PÈïc!ë¾?V==?UŽúùïU××móù5Õ=ûjc3:ŸºÄylZTê±èСþhÕ¦«1þþÜìÚrCÏm÷¥n%\©ãØFõ¤ˆú¾nàíåù{x»öxÅüâYtëS_Ñ®ª~ ÕõíÕÍ-õC¹þBÛ®ÝÓïõºkûv;¼\ -Øð±X«]5Täžw´­w¨K¹åeß#ì ­ŸÊæ±:çF X -ãò¸ßÞ;,›f×IóqæÁV"äé!~_§Ù$Ç˓$a˜ -òC‘\ýPä/£IÜ3¡_zïªîk½®è– J‹QñüÇê€ €Ûòöøø²¸øœð覺vs\X/’Á­Ì£_ª¦êÊÕͶ= ?‘pŽ´«¾V;ÍήR|°Ê$U×`ŒªëÚNZ>ƒ`ß hé;´xͺcÓ°8tíºêÏXRloå°~ÒÍrYQ°wuùØ´=ñ½=vÔË^Ó£hUÇY,j•ž«„×KDˆ·jàB½L3åB¬°@ Žk¢B -N È> ÍNmârVœ #ŒÎ9QZqÆç j*09Q!é9˜0;ó¾X¢œJ1ÂâœßÍ:iàŸÅs‘¤J§E®wC½Ûá­ú*«;ÎÂ^v˜«÷¸-È (6ùYgàËC5Ƈ`š„8€ƒHùyuñçÅä\‘¨endstream -endobj -1644 0 obj<>/XObject<<>>>>>>endobj -1645 0 obj<>stream -x}VïoÛ6ýž¿â€}ˆ 8ŠÅv¶O]Ò.ÚÆC,è<´DÙ\$R%©¸þï÷Ž”âDíÚ"€%‘wïÞ½{äד! ðH³§”–'ƒd@ÓÑE2§É|†ß#üYIyø0ž]âñFÓI2ê~ø}urþþ’FZåH2Íi• ð&í]íD奥Ñ8¡¥±^lT¡üáÍê_l›Ðp·æ½Êzw¢ÜÚûèÈhÂO•I²Bo%™œªBøÜØÒѦöäw’”Fø\¤’DQ„7Ç5•5O¼]9ÒÆcÁ^§ÐÙp¦¦¬„W›B&´ÚaeÚ NöBi÷œóÌU2U¹J‘“1`#Ü á((LoIèŒjÇ¿—’ÄJ/i8k*O’ W -F† Ý,ï¾'c–LyÉÍòԑ*«B–`B>àêª}e´µ¦®°ÌõIÚ> -ÕgÎ…°­{J»ƒG*š,œÑný†‹•h¹ÀŸß›)!&媐ˆz.}zßpqá±0[”È™ œ;NQR)€ä~qíÈÒu¹‘Ö5lp¯˜5ƈÞu*­|,dÝ[¿a˜b` ú ì }4ÎS“Ed%÷e¿3ô¨Í>¬³¦’ J4áñ%dé î¤^÷vLUؗéô©úc´-_(ǐóu¥2®lkXv†˜A¦²ƒ~¯ DVDýÊ!ä ^®'فp0õ)úÀ‹u-í—*<)–™v4HEö ºÇ;žDX‹ë>–©tG¥`ªä¥‘ŸNοI‚N}ùøöáÞÉbhžy^Ö½¶‚KtcŠYPZ[ žË›åÙýC30••iQg ÿlä?½¸Oúœ¹“³v54xªÍÆd‡SúB óqMãT,r$ujjžl´Zö!°G ý³h™f߶VÀÂÖs.â(‚£Ng@™­1³,Jf®Ðˆý7êâÓûG‡ìëO‹ÿ?œøc0'юg”-kù6jæçm|j„`qnx¥ÑžVæ­ü®UXӜhӁölZ…Ì='K…›p]ÁÏ7Vàxä¸bo¬¼;PïÃà€íx26jÙ(“¹¨ ´Zæ*‡.Ej }ºýònqÝNuHçš.‚ÒÑ “]cá.Óѝ˜%ŽÙX‡]*v ÜSBÑìùÀ– 5CE?ÖÃî¼Å‘çù´Ù›çc˪íÎwË\èáÛ«„H\I ;g¿m§ Î#K–CË _epC ¼ÖAªèZ„®Ibf`a" ¥”ÇNméØ pŽYì*Q0fòh/f¦ -cˆºãä{EïÀ-6Ü{ª’p;zJï×vÝe{±l®[ÔüK¶Î¢/M„ñ—a\¹Ú×!Tó¾Ý^š'ù¿LfýlÐÙüb2`Ñp0苟¬Š¡†ýlaÏ_\ˆ§ñø“ ôd:O¦#ܺ|81Þ­Nþ<ù&gÂ8endstream -endobj -1646 0 obj<>/XObject<<>>>>>>endobj -1647 0 obj<>stream -xÝVMoÛ8½ûW ’\ V$ٕ=$›k é~ć.P  )*fB‘.IÕ뿏”ä:Nì¹lKÔðÍÇ{3Ò·QF)ŽŒæ9M âõ(MpyµH -š-æ8Ïñµ‚ªxc:Mf§ë7«Ñ凔®hU©Xà¤$ ¤)­ø˜ºOm¾«p:û2vÛ/¯/Xözõ8Ji’¥É;†Þ²m0<¿0Xsî‚AöjÀ౎ąµÆže¯Þž¬¬ðáÊÆËtÀÀzî\~˜Q–µÙNò"ľm<ùt$5þQ,©µ¶(f´;áE#ËäcÃ9*à$Ÿ¡ÆGI”Y#²¯ÂItýòPZ(¼ø†ôÎgó‹ÁÔzvγ4½`C8@¥å}=Ò/É3«¼°Ä­`^ê‡H5[£¾‘pG{ӄ5MÌ9Q¯¡\ÕÔ8·jxs¬œ–fæè™4ÐyñìÖÃKÕù óä6¦Q%m­)Ýv! ˆÐ´ë½ÇÄtù3Á×'¶Ï\#א´¢$oˆ•øÛ‡L¬ÎÇåÍý)©Eß·Ÿ–Ÿ‘0÷Òh2U´ºgõšÑ{¡qúÇ4–~lí?MòÐ;©TئIóDÎÔ½:”| -©K7ØR-æ»Xð˜Ú¡ô†&J?/JL48D8}£[+B#ÄÈCfƒÞÎKäƒÌ?ýñõýòv¼²¦ŽP§…iíãCj®šR¸dÓÞ¸¢lÞÍ i70r ç„þåïPÄG©›qQ¯-¸õ“åòes yäw³'DÊåûÍÇÛ¨ll¨®ÔÎ3¥ |¢4CB{»d_ -Ï/7Æy,;ªŒRf7ÌCœ·øÉr>/XObject<<>>>>/Annots 1041 0 R>>endobj -1649 0 obj<>stream +™å óâƒ>©4IV¦`·Y on>F7`5ì”1û×ݝupDˆZs¢ã¦#‚YÞ M•H«ô9JÎÖRµÉQVŒ«`ÕÞ}`s82v¹8_¨û˜npH—zø¼8ŽðDc5¹šNàÖèvÞ`~`—6Óeë;<º }‚Òß:/p<—¡ +hÀ!nÑàýà7€ºendstream +endobj +1376 0 obj<>/XObject<<>>>>/Annots 785 0 R>>endobj +1377 0 obj<>stream +x­V]oÛ6}ϯ¸ÈKS –#ù#O뺥-´[ã6К¢,֒¨‘”5ÿûKJŽëÛ†À±d’÷ãœsïåŸg)]â/¥«ŒfK’õÙer‰_ÿ>½=Ë®³dF‹e–Ì©¦yv\ o=ð~Z,²dIóë+²EŠÿÅÇâûyu6½»¡ì’VòY^]Ó*iàyñîããê#½–R9G¢^ r¦³R‘4¹¢ôæËÃËÕ·`%½ŠV&3Ž~•_¼o¼5y'½6MÜ4§46eWˆ›¢Yí(W;U™Vå¤ á±!Õì´5M­ŸÐ/Ãë¨sŠ]Ó׋7¦‘µØ@_”up¥› =ìWõחä {¾¤I:‹AËRÉ­nÎqVTÎж1=::—¦®µ?Ç©FõǙ&1ùŽvÂjÓ¹à{mEcŽ$¢]+'Ä\NœŠÆ4ûz<Ø9ї +™:o#@ €ºŠùûˆÈR´^Ùd0îæŒØŠ×r#;F…ð,¨6¹.4»Ž)~´_˜®ÉIx*½oo§SDŽ&ÆnâÓTî\RúºŠTÝÐ1ŸÁ1>ˆÁ:ûŸ¡v… k!Kݨ§Ýd»†Cn»u¥eµ`Óë*2jUkœöÆî©0vX!Ÿcõ!EAX>b¸r+6ʽ¼²êr;ûŠ¬Û7âÊé›ö€vÝmB˜¨<ï †üz±wŒa¤td‹ówÊÂ'™ñhwBsiœlqQ¥ÀŒ‹j2K#otCÕôjý pÌï¦ ’ŠÎțÏïQ…Tˆ¾´WôøøHkkzÇé°$ª +¯¼¡;²$Mã!Îî$xÝäz§óNTT@†ŽË5zDj6+c¶,¦¸e§¹ò®s¼1Vöm”§æGUuyȚkR¸mdŸ ë‚*˜eÖÊ÷ +]A4ûÀÕ vØ? u´>ÖÌgô Žôó§{ºý±äFOÖºá8ðòÏ bç¿Ñ‰½“]k—9Ô[m˜"YéÐây½üÌ]ÝÉÅ i2oÖTdX}¼„¦sB`n¨×¾|ž´c9„h:O}iPuC`Þ*xeæ¶Jµl¥¦߆rqÈOŸ¸f®qÒ êƒ9ãÖªB¡5çT+_šü©¢H! .:qèü¨vxoŒ§oóXÂ±GiNGNWˆ ­»2"î*„‰c çÖ¯¨5}˜ÙÑÒ¨ÛïÔÐ÷}"÷ B&Hgš„`øu yäËÙ½xgzFg£‚ÏPi³MÂd@þÐD…ï9G4^ÐƧÞ~øLo»çრ+¦êח }0ٗ±¢|žïo+ÚRKà )*ǁK ­´Ö †Ô§]È^ÙB`j#ZŽÁð¡k°]#0î 8¼G"§­-u83: ܍ï0¶÷ïšz,®ïá<­Gp·áF;t¦P‡É ò€çX Ý,´p¯ZìC[/©¿DÝ©Ž3Ð9ÌCäúèH?ÃÒ´ûq6†‘p¬”Ѷ"Ïöxé© j 04rá’Åêº5z”ï‰\®Ð½ô'²&5¢V¼„«ãdTó{\еÁò`c ½Æ +geöìq?ákÑqcõÔHÍLØ}@}‚+nsùEš;Åëá2ô©‹s¨_^žÞ-Ž.iՃ-Orºmãø»ÅûO‡ùËmÓ”-z½¥2½¯ À1Åǽt¡»Çö<µÂ¹ÞXp·oUqz—1\ÀtŒj4xqH +·g¾®^dOy-ÕòÎJwïã`XÇÄf1‚éÝõö$[Ðd17Üÿ~‹ž/¯“å"èÊRöøëêì÷³¿ëÚðDendstream +endobj +1378 0 obj<>/XObject<<>>>>>>endobj +1379 0 obj<>stream +xu”Mo›@†ïüŠW=90`;>ÕiåR%UPs‰­—Á&‚]gw±•ßÙ·ùP…@†¯÷™¿FR¾2,rÌ +È.J“糌Ÿó傟9߆PG—e4½™#ËPÖÞ¶X.PV`û4E)'å®±86m iH8‚@Õ’N›7HѶTÁŠn# µr¢QÚÂí-[7žYÝIlRž&MBI°¹½^_•/QŠ8›%9'ž8±ÝrHy°Ø¡äîé,A(BöƐr-§ÕüË,œ‘f¬§¢µzß±œ!J|è˜cçE2÷±ü~ƒ’…æ" |,CaCÐ_?'ß¼¡·'>Èô& Mb3|8!›@¨ŠS׃r%:V¸FÛ0]I¿* †ö”¿Ö=‡Ò*úvõOÍ7ìŖë«ÃÉ@ûHØƅ4Rw»zí=rn˜ÓŸ’ ڂÿؘœyjIØ¡/'ʺo™¡ÒŠ>’¨uÛê£çâ²ìxzs>²yGÚ·/®°Ú[22+~ÿêN´Ù®¦üj´v±ÁÃúçåú9·aùÈ÷Ýh<îH1ƒ7Ýã(|—5:2Œ¦ Ò˜ɝP[îsÏúü<~©µÑ¶Û ޟˆ ˜ÿÎúj(ë?Zû}åwƒ%Ç÷ëy³fIáçož`8\ŽÄ²9ïár†,_ î~á Ֆ½Ÿfá­¼gœ¼¼ì/Ò ñöî±¼ÃZJ²a ߯ڡà¡÷®ób™ç9ÿ+°[–çþÛuýŠþXpEëendstream +endobj +1380 0 obj<>/XObject<<>>>>>>endobj +1381 0 obj<>stream +x•WßoÛ6~Ï_që‹ÀVl9Nœ¼ ÛúcźtC=òBK´ÅD5’Šãÿ~ߑb, Y·¡¨[K<ÞÝwßwwþëlN3ü™ÓuJ‹+ʪ³Y²ZÑñÃìð<™Ñb~Ìér¶Lnh¾H®ÉHÚâð æ/8Œ/ts,èruÿ¦øëOþ¸>»xCéŒÖ[8¼º^Ñ:÷¦x’?Ý6T‰¦QõŽ~þüuýù|ý“KšÏƒÉ4]%)ŒÆ_œ0Ží•+苨6‚ð#ʦ”NHP-÷´;¹rÛ֙Sº&eI< UŠM)Z’²ÖY;ª¤+tN÷ãR=Êò@Ns3š"_ï8+D½“÷çxƒPk±“ä`ïY±wœé +osÊDYÊ<¤±ìÒ“­6Þ@æʝ¦8N:éUrɉrp[e¬#UU8/œ˜Â" DÐڞûèðNÐoošp<®ŽCƐëJ(Ì+|úh‘Þ†' F„?¢€’L×݁XŸ1û«5`×µÇ_a@•†öÂr¼9ǽSO!ðRY‡Gxn,•puµ+œ%N³Êt¨Dÿ{m­\L›ÐGç/·º’À`§2²®ÝnCêVU +Ép´iå*¯GŽ,œIz’/eYÒVBٚR>“•®mì°Ÿ$„äsS2t2Upͱp w닯é/ί>?äâي\’Ø‹CB_ ֈ¾,™ÀÁŠíÅ I¦r¸$èLdcô R8iÉçdÊ*&t§ø +Ãxô—Xá´±£p*áó¨…¸F +ž7þ®à 1êI•r‡¬ ­Ø¨R9V ]ø§9s”ov +hU¼~T@XÔ>“ÖBa w©™ÀZߟ0m]3:¡þ3*‘*0k˜ÒÈS(诒Õ0i&ÀðÜiê®h‡™T]H£ÜèÆH"bòm!¶Ñƒ–ÇBarÁF¢Œ€ÄéE5Èö´þ¹±N=I'ôÎË2@mu•|=Œç@ÙÓ2Æfò-FО…Yêݮǻ~PŸØ˜ÿÔ- Œ5îw{]ç  ãžºW +ñºDìÝBÕ0¢– Ô×sä2ü{Ì*áF–'@ :`|Á1¶§1°À>0®­Õs:ÔÖÚ֛ o±“‹÷±«/¤Ë.^÷ç*%»ã)Æ­Žy’Wl?ÅHÀÐÎÇóÄ߇¯/#RäžV®ËB5¸ú!mO­ªÅ8ÛH:M/¡÷h `:·`R7ôu eˆkò  tH4•J˜Ãd€“Gã­üä‡Ýi•Z?úŽvq¹á]cž\.R€ºLVø‰†ÜoŸo—³ô6F4áh‚]‚ÓyêM7É,X¦Gˆ–Ø"®–|ݯ¢Î€P¸7Å}÷›£Ú÷«ãJ4î 7Š-“Áî֏.¥¸x`‰$éo 4ÍèDâö MÛ^±î¸ìñŠEH Ñt™&¼Ë!Š4ñ9ñUÃG¯l^/œ/Šõ}×U4^þ)Ž˜·½ÖÓÑiŠ'kp¡ñCE˜ÂhCùÿ8r2äs·%„༕(mPè€E|ºgÛb4ï±sâÇu×6cg½õ~ŒÈâT7Ða>64µËX³½ª7ªÎYqœÛ^·eލÙnY™›œeÒ8Æ0WFf˜ç~÷¶€}S(Ãqä W‹ K Wxëõ&H°]ÿG0`Nq #Óþ+»B' +÷M]· G¹ô8ëÃ;¡Ÿ¾OÂ(ÝvUÇríwA.ºÿ€5Cl0£â:¢:iü+۟‚`W½µv¶Jæ ¯Ë'¿^~„\^­’«eÚõ¼tÁW¼[Ÿý~ö7£@2fendstream +endobj +1382 0 obj<>/XObject<<>>>>>>endobj +1383 0 obj<>stream +x…VÑnã6|ÏW,ò”Çv|NúЇ»ômœkcàZà€‚’(‰‰ô‘”]÷ë;»”GI[I K$ggfgùýhBcüLèrJsÊÛ£ñhL³éx4§ÙÕ%>Oñë5•ò`2ãÁÇåÑùÍ4Ó²Ä^óË+Z„}Æø&?yTm¦h¥}é|«l®É„ÐéðnùMÖM.Óº³‹ÙhŠ•'×®])o‚³ý;3šLúw¦—†w–µ¦´qÐ~­=uAZ^¦è(ªæIþ㥼1ÚÆ-ë.)ië:R¨'ú­±¿4•dâc ny3Ô®k +F:¦³ÉEÂçµjš-åk#ï²ò®òª k >h +ªÕü(ºÜ5 BSëB¡ª0ØC­•iTÖÈKi=X¢Òà›è• ¥öƒÓ÷ûs±\IW„5Ê:œè…ƒL]ÐãýGÇìŒú=¦óьٻKÑ´q> 7ï(t`'‡ùESUlÈRåæ@,R‚³ÏðgÚ£¯R̆…ƒÓkå‹ ÷—PxƒÒ÷eÁ$ñ9kdŒC($®ÂˆnñŠJ:‚~}:¹×,×>¢O r6<IÔÑDìÂeŠÜ´ß_  " +çåaîIW>ºüIGr«hþ'ú¸*þ%Ûµ âJÐr¸Â~9lS!j"' ¦'ø0Š±RDF¦Üù:……¡¡– ñ­ƒeɌ3è%2h¿£taHPhbQÎúúOÙj ñµ°¡ÍF¹³¥¤ä[ˆŽ_B:Æù9SÊ4ñû p~Çí * +¹70)ÕMËcAìˆ0b”T•iôbp è;%‚ ¡Ü¢j1¯Iò¦ª“<­’Œ…ç÷™†‰ã9~—<4OÅæÕóž-m¼C(BäT…Æ$)d0e[úÖq¸ɉ4rç={eÀ ^’,I1±º ’Æå`È"œVøJ~vҟ‹‡Ÿ>ýòán\f›óE܈9ËãÑ!wQ3?Úu:‡;òhê €‡ ÊAe=ôê½²Û]Žy½ržÅ‚åUQ0ç Џ‡ÈŽ©pfnÂÇ£øèÁ‘Ò ÉÏ"‰B3Ò­eE|D˜¤)j´^òY(®õÞäÞWÊ\<¿ûL!ªü‰I + g†"øJܓ¯èÃõÏÿ¿qÁü-{~ó/—¥”*t,åòÛÇ}$ô*AÿFá"Qò’ J8ßxL&\‡8Äzî_è2]á҃NBlÃ6,€p‡¥ƒj´ºE£ÿÓÛԎ¯kQz×òªiz®2LÆ$ós€Ӑ//àö +;²{|¥ÚccDûŒë,xX@iÕó›«ç›óûyº9'/΀çëøl~5š¿ŸâKâd:ãÝ?-~=úÊ Èendstream +endobj +1384 0 obj<>/XObject<<>>>>>>endobj +1385 0 obj<>stream +xµVMoã6¼çW<øÒdakýçÐC‚vš~Å@Q J¢,n$RKRqÔ_ßy¤ìu§=E ÄÇyóf†üz1£)~ft=§Åš²úbšLi=›&sZn®ñÿVR^,ç7Éò܋Åjy~Ål³NÖçV¬6oŸßm/>~ZÒlFÛ¨Ö›kÚæDÓ)m³Ëm©™gi+Ñ4Jïho쓣T:OûRjò¥$×H™ã³‚råžH蜴ôü%‰,“Α@;NÕªvL¥xæJ(ÚQ¥¼¯$É¢™¿Ú~¹˜Òd¶@_Ûüòu}.o´$à©Û¬¤•ÂK "¢0€b“¾Æ| ÒPc x¹,D[yzUÖÏ֋ÍrLi‹g§ ^iU-µ^ œÜ(zÌyßNzòÅ°i­ð€;7Wµ¨béñ?ó <®Ô“¬:†ŠXè‹pöªâå "4„¯RPÇ»ºÎyYƒ;ÝíE—ÐmßOƒÖ«´ƒÒQ :wfóP;­zÓ2zQU&mTËÚ`ÏVkÉVU]àî㧚A,†ÉbY¼/ôR«0 SµLæ×Ph¾õä¼°¾mBY¥Àb‚“–ñj¹3^ñ΂FµxQu[“·B;”AÉ1¥0Ø +:ñ.ÔáÇDŠ?Ä^b•„¶è¡çþлÅ|Õ3»ËÐñ` „ÈDÊ¢<®aÁ†çƒ­K£Mk¹9ãÚì³?¸ _™^i祣ÇËN¯b«ÑqN¥°h˙ú€Á…±5‚¾W¾$1€æྊS —­<ˆ°]ˆv|&vo£i>]nN=i vˆ“Щ¤Æ ªÝ›5ȬCEné+ýԃ§9Œ~ßH?™Uبâ6Î:és¼zpuXEå =i³×„då2mûj£Ç+*Õù×÷Èu(ÄDºñjá<ÄïÀ­iÞªºg[èL²Ð~SÉá~{'UëʞFW( P‚†_ãe‰ˆ +ô° á„T²V¥^Népë^gg]ŒþÎãäÒ9¦rÂv´—P6¹È| ßàÌAR‚ÌîdüȂa0û!$^ö-5‘…ÏH•Ð‚ƒ9rúÆF&ªbÅÎ8™RlG¬ˆ^mFýÙ!q&àÌ,qù€npþój>MÂí"!äNKqcè£&Ž) &(Â#®?i6¡_4Ígž‹-07l½/Ó?¬Böÿ«N÷‡Ïþ“Pc•#«ÿ«R_!þG©ÆYòŽT8Ùk„®M1Ú ŽN¶rQ…Ap¡;Ux;FPõ÷NÞc¤í•+Y:¤ŽHã“içUoú îlûõfAëÅM¼¸<ÜÞßÝÒ¯Ö|Áý“~0Y{¼ÿq½ÉaÁäzzÝû“›ÐrûôjŽ‹^Ìæ+^ðãöⷋ¿TBÖ:endstream +endobj +1386 0 obj<>/XObject<<>>>>>>endobj +1387 0 obj<>stream +x…VÛrÚH}÷Wtñ§*V`Œ·jL6T›5r¹²ë}¤&–4ڙ‚ýú==’|!NR¾H=}9}NOÿ{R?!õ¨?¤8;ê]:=CŒÎð¹‡?#iU¿è†Áàðŧèèãçs +Ï(ZÁ×pR”üt»ÅNjTW4N•Ì}}ƒí€B˜°íIï ¢äø&—THcuNa°ÐÆɄÜF8²Ò9•¯ñFF;딜¦ñÍíd~u· #ðÊ°qNW׳‹ë­ÅV’ ÄˆL8sdÄ ûAãÙB»Êàn+3¤FÇ+£3 +»-;OùÓÃû 9Ù¢rœœ’-q:vunei>~gq¾?Ú]8¤¥°2yxO•nÂ>rê+m(Óøž'êD‘òžb]¦ ÅYôìYU™J…y3ëúÌR©„–û'x:FâýN¹îÈêdbG»L9<ëu£ÎR¹ul¨Wˆ+òõ!²mÁ-TW…´Fu «þ“ÊÔzãH¤VÓF¦…?÷’'ýA ™gÀ•F¤Àۤކã–fÚ²÷Jì-%¥äžxk+m–p#Œ…”´×¥i3Ht\L¤*µ xN…0èI jß7¬Ñè¦)3œ…òXð ðýê~Ý ëYóB¼Hä~z}ys¿˜þ5ñ4ǓÅäÙä:ò$ïmf-¹» ¡I?)à‚™œkÇ æ©£3žIšñóÎVº„¢^M¤K¹eênãmpˁ¿g ¤ô¤ +"*´†š^|]D“Y0½žó…à(ûºÑ×~#y­¶’ɸT떡<¬xV$:çè1Çp­6ûV´m3f{ÒUŽþ£^LÞXRå6ô}º àSZKGYoÚf¿À‰*…³-”[‘BŒÇá°?T®x¼ Æ&Ý bó +À×S]ä{/6Â6u¹Ò匼AXƒ`†M÷ðøtIąªóç;£•LbtÁÈ Z¡ùÈ Ÿû] c¬â©ïg¾‡ÂóÞ¯¡òhÑKL‚=%²yҌ ¦—À„®0Ä>xn2™Ý¾ŠßÑRïØ®ahÍvíÁ‚¯†*”ªüñ°©spÆ:Þ$øž dMT‡‘Ç94ÀªÄ‹˜ŸòU3Ÿ›±Ò) æ7±Îã´´ ©ý­AµåÐ…Àhäî{¸„Ë";¬LV\UUA¦b£-¦F€<‚p!â +, \v°òìᬎ NñŸ3*J•SòPßÕFˆÍåü3Ŏu¾Rë×Eàü”§Ôt2¬•uæérôW:«é¿ë91•–w´uuC1MerÀ±Yt·˜O&—‚:C¨Fc¨¬¼¸)—ÐeÎÃþ¶Â(ð–êÎ>•Z÷yJ¬Œ” ‘Øb@òÕân·Ÿ:¦¯«]ú;îy×+†í‰mîi4ÏÄéÓ­Ì 5v‚ ËYrÄßñõi5ºÅl}ËÒ84…Ó‹ÒéKec/b|à*^Eè¿yìS +|Ñ©¼”Žw©·N¾?ᪧHÓwrâocߧ§zNq愾ÜÌÔï½Êqøý©ëË)3Z`Ù¡î+û³ÚþãçQ³É†¬É£> OÁˆq]\Ì>]ÐÜèo¾:—<·±ˆjߞ„CìÖ8prÖ=÷öãË%y0ÃÓ^ӤސÃO¢£?þM®„endstream +endobj +1388 0 obj<>/XObject<<>>>>>>endobj +1389 0 obj<>stream +xmUMs›H½ëWôžâÔ<|˹ٱRe½¥­èC.#60df°Öÿ~_ÀÎ*AUØjš7¯_¿nýXE$ð‰¨ˆ)É©ìW"\¯éífø"(+â° t]àÿ4#2ŠêÕÍé¯7¤_Þ§E´«›¯ ÚUþ¹ ]y±!gZUÑskÜ$»î…p#]“kµNõ–z5¸VHj®t9qäPù€ð2èØ´eC½¬IªÚºVF ¥"§ò~÷¸DIƒÂÅQZÿ²Õå“r¤G>Ć´qä&ÃÇéÉц8o¯œS´j:¶®árxùƒ¯5ÎÔQ7 ¨ X£ý¬ WcGÅh¨ÉÈÁ‚Ó<*5г4­ž,P‡«ŒÊ®EYÖ×%éö[ä9Åâᆬ2ó‡“<+¤4r_èï»X@ùR÷£tí¾ƒGwmnï¨2í³¢ï_Jë(E˜ˆïïCÚAç…é " +6JZ=HF©µ¡HÐ^Zµ ùèË{AWÜÍ(L“˜‚8 ×ø‹â«n“Q¨Á¨ôzm¡Øÿ®Ï|©Þâ··ª=I@É'ÝS)Må1ÒXi*žn.í $"Èbø„5ð:ž$W‰~IÈN3ÛoiP,혅=“"HÖ?$ Ù+“7«‹:…W‰­á5ôŽµÐ\Y˜n™=Aî¨!^ÇÒQfhºSÿ:š -AN;uJO;Æ ïð+ô°m¥L;–ªfÃóD5ôˆÖÐWÙï%µèô4 ȶþ;> …!*›vP¿±8wy+Xål6#Ï3¦½ÑÓ¡qHòöZ!»ËRmÐÚlj«gKGâ¤&fÛê^-3à†i]æêšu\ ڒ¶I’pµƒ*_ A =°KØ:žM3íãñ™…k€tĎ ƒÖÕÇ3½Ò þ˜Ù¡Q£úŠr!þôNDì Ü9Ñ¿´~b=¥#ë0Lä~·…^ |x_Ò¾E^§Aùh1èQey<7d§qÔl˜†‰‚p¯=á_ B󆴾»£ÑN—ºÃº÷¶Æ>…`6xûîhß ?õXO'šŠFejÝK^œGŸ¾WôcÂ2æŠï­y¬çÅåøX'Waœg<Î_¯n®ikô#D·óÎÆjÒ ,¯…À6A>T O§ È i¾ó,ÆoFqÁ±»ÝêŸÕݧúZendstream +endobj +1390 0 obj<>/XObject<<>>>>/Annots 790 0 R>>endobj +1391 0 obj<>stream +xe‘Os‚0Åï|Š=ڃiÈŽÕ֎·V3½ƒDK‡€ìÔoß ¨Äé0dæå·o÷%ùŽPü(±„‹(¡¸s[6¯~d,ˆ‰"ê"*؎ˆs’ â)IA£@¢-%<`t Ä ¤Fa1ÔHcŽ¡¦‘CPêGáÄħ„OHR0o©ÄՁ`$¾o $MîJ~ó1*ðbÆ.ÞjÔwŸè0QKô'Z!áø·öÑÂD«8³Çg‘Jƒ)†×ÀÝlýAàéx´uQþÚîÁ|aµÆÆê9×ØÑ3“å•…f˦îmÝ_*åTÉâ±ò­iû,/«²?ûnæW²Í\žAVÐôŸ¶…åzµ…]U^Û¥{Ä6e}€Åé0Ì +às™ê¦óôܜZ膾ml;@O±Dª|þÿÇLðɤàx%ˆ×Þùb¢÷èþ¡£Öendstream +endobj +1392 0 obj<>/XObject<<>>>>>>endobj +1393 0 obj<>stream +x}VïoÛ6ýž¿â€}ˆ ؊Åv¶O]²®Ö&C,è<´DÙ\$R%©¸þï÷Ž”ìTi×¢i$‘wïÞ½{䗳 ñwDó1Mf”–gÃdH³ñe² ébŽßÇøg%åáÃd~…Çï|ϦÉøõ‡Å‚†IûÃnñ€€1†¸œ!MþëŠãÊñV_¼»¢ñV9Îæ Zeá;Þ¤½;c½Ø¨BùÛտgï¦4Å¥ƒñXVYï^”A{cŸMøUe’¬Ð[I&§ª>7¶t´©=ù$¥½´¹H%‰¢oNk*kžy»r¤Ç‚½88N=¤Áh¦¦¬„W›B&´ÚaeºBRj´J»c΁«dªr•"'cÀ.F¸1@ÂQP˜Þ’ÐՎs\J+½¢Ñ¼©t2M¦\éû»‡Ç×4̓YüxîH•U!K !ÊwuÕ¾²ÚZSWXæú$m%êóÈ/lFë ÒîàPŠJE– g´[¿á2%(ðÏïM‡Ž“rUHD½>½ˆo¸¬ðX˜-ŠãÌ¿¶§(©@ò°¼qä éºÜHë¸KÌcD×: •V>²î­ß0Ì 1°ö„>ç©É"²’;²ßzÒfÖYSI‡%èz @:ˆ;©×½SöeF:}îƒòmËÊ1ä|]©Œ+Ûœ!f©ì ß+hµP@9¤rH8Ȗë‰Ev L}Ž>ðbÝEK;Á¥ +OŠ¦¤ R‘}ƒîñŽgQÖò¦e*ÝQ)؁yi$‡§“óïa’ SŸ?¼}ü‡w²šgž”uo‰­àݘ ñ‡ÒÚZ¨°8ðD¾¿<<6£RY™uúã üÙåådÚç̝œµ«¡Ásm6&;œÓïJ˜ âxça™Ø ©SSóL3 Ÿ5Ͳ=IèŸE˔0£ø¶µ^Þ°žs‡u:ÊlieQ2‹ðƒD4@èãPí•ß˜ßÐ ‹1{™E?êܐ3“Ö<µX‡˜ ôýàkf [°Ukt’œ< + ®yÂ*áÜ>[÷¦ÐV¯¥ç–©x •5FuÐ6M Zmr¼…D'âÁY!sn¥<¾ŠN€mu}w±¼w>Ý¡2ÞxŠ`%$¯Š‚šS¨9¡¿Ðdvoæ/lïSd˜këÊS&¼ “Èå'o;yü %3ñ!\ˆ@C·7“Å%]­‘žë¼±ŠK¦û?îZ¢$Gâ +P<:gÊ@œÜW‰KMæû”)Fol8B_œcҏ¾MµÉI$ŸBÛÚ§ÂÛäS£+>¥_H7—?>øc0$юd”D,kÉ6 +æçm| +„HqVx¥ÑžPfM|Õ$ȪiË÷ 4è@{6ªBæžG’EÂm ¸®áá+p$r\7öÝ¢waXÀs< l”É\Ôš,ó•C—"µ†>Þ~þmyÓNrHçšþ‚Òѓ]c‰áæÒQœ˜ŽÙ؇]*v ÜJBÑìóÀ– »E?ÖμÅ1çù„Ù›ãQeÕvç»e® ”ðõ›„H\I gmçn#KCË ›_\p+ ¼ÖA¤èZ„®IbZ`[" ¥”ÄNméÔ pŽVì*Q0¦ñd/¦¥ +ˆº³ä»E×À%7Ü{ª’py;¹IïçvÝ_®FÉt2Ɓ‚‹0þÇ‹š?ɶÀ)Bô¹‰ÓâÆ=——µ¯C4©æ}»½4Ïò ~šÎûÙ°³ùÅ"dÀ¢ÑpØÿ³*†õ³Q¿hŠœàf¸,fÝûòt¶Hf—c\¬ñm4¾âí¿­Îþ<û0ÁÆ¿endstream +endobj +1394 0 obj<>/XObject<<>>>>>>endobj +1395 0 obj<>stream +xÝV]oâ8}çW\µóÀH%$0Ò>´Û-ÒtvwÊî4ÒÈ$Ü:1c;Ãòï÷ØIh²}_*Abߏsï9×Œ²„†)åe/Ž&zþ2+¼Ä”²i4¦Ñ$Ãs6Á£´„mL£Q¶ßaÃäåV’£QëĆQöì”$IÄ^Û˜(n¿ÚÔ I;Û Û̯¡dqMOÂÞÎ=УÈןbšÒ|I, J‘dœNh^1Íó>µŸRÿTþqô­o7ßÞ_qö~þ؋iÀÐ&xì áox9=c°Èsë Ø»3e@¹0F›##öîÃъå?¹2aŸ10ÎúëO#bÌW=hÊ$Y(EljGn--É +¿`W*AôœúV8QË": +Ö¸Ž::HÆѝ}џh¥ô@¿·qŽÀvËçªâª½eWg+íȺdq|ÅÏõc*¾*αÙEúÓΗNʍàNV«À<_ ÑK;]ûµŠ¸µ¢\@x+©¶0nÄ1nŁyHRŒ;øæ–”rºµ:Ñ #·æŽìZת ÑE‡´-¤3šÔÍz'ð>ñªxM¿>õ‘íAjÔꋮ„(Èiâ~ցÝù<»}¸'%+ÑMÊݗÙ_(8wRW¤—Áꁗ N÷üIø9Šèo]zví”?ŒÂ€l¥RÞ­"¥õY] +Œ"èPòɗ.íÖDþ%´=¸'@Ó@U‡­9} ëúPá$â }#ùe"ю/¿ÿ8»{+×Òè2D>n[ã¸?kd•«º6Z7Sb™?¹@ÖpÔèì«(~ƒR>˪þ‡¾Bžœ»ÁlvˆÁӛE©Wæ펖×ÊÁ>8¿t£¢6¾ë²²Ž+…‰¡€…–HTÎì¼®…˯×Ú:,[Zj¥ôö-~Â)/ ¸‹pŸè͂çOtáCU¼ÑE¡K.«ðrXÂ)esT缶ÂR#6@óA)DÕU+×}YaЗ<‡ç8ލ°¾ ¦­ ±äRaAS®Ë²®dΝð@ÐAÜßAª¹6RW;ÚJ·DnµÁ úqƒxŒXjC%ߑÖÄê<*±ÒN"&m׺I-`jý ´0袀ୣµV–ñ(ù97µ†Ý ôkƒRBÄ7a.?НP¸½à†ÊæädBÅ3!íý&:0á\Ü×ð2i=–‚ÏɐÒl±dè%öps{Cýˆ6ѝÎëù‚–¼ï sd1þÿ(úÿ)âQ:‰ÒqÑÒ ÃuöqÞû³÷/tž‹endstream +endobj +1396 0 obj<>/XObject<<>>>>>>endobj +1397 0 obj<>stream +x5ŽÑ +‚0…ïÿ§8—v¡mjs^* e{Û&(8I&ôøM"~Îù?8oâ`AEŠL@OÄ!Ë$G.‹p§Á‹EOµ¢ýY‚s¨\„Nf(X e Æ tô¬nu…û2V{g½NÖùγ۩‘â?ÿÀ¨µæÒy\·~ÐÚéµtÎø¸i¶ï\ÈDÒ°O™ˆg|ËNŠô¨-íendstream +endobj +1398 0 obj<>/XObject<<>>>>/Annots 801 0 R>>endobj +1399 0 obj<>stream x¥WÛn7}÷W ôbVÖź䥰]»_)q -(¸+JbÌ%7K®½ôÛ{†\I¶ -C‚–KrfΜ93þzÔ¡3üuhإހ²üè,9£AoŒïþhˆï.>¥¤¿ÀÖÝׇߎ:ãdLç£A2¢œÎÇI¯~Ð4 ×ô#Ω7Ä«øÀ¯ÎGÉ°~ÌiÔÅéý;¶Þïw’Žups§~Ú]Ùëðþ·žuÏ{8ÐëñU9õ‡Ýä¼~ÚƒsßÅs9;jߌ©{F³  G4›‡±’\­DáeIÝ~BS‘§‚„™“õ+¬]Mn¦”i%w§³/¸§ON¼§Õ%]Üt2[)GY}KfÊ`!œj¹Bfj¡2RfaË\xeM¯SgX_Õë'}¾ ->tº™2ÞºÕÖô/ßÛøKº„f«ªt醌]ÓJ¼HÑñ«àµi*ËD“ ­åœ~½øtM-rRòµgÔê¢õÙJnÈKçIyKÃÓ£2s»v4>oî~ßÍF. …°(³yÐR¥•ßr®b¿.<Eò*—d´.•WfÙ¬­vz¾àÎZ8žà¥@ÔIÎ8~ž‘·qªb.¼„ /Bi‘j„‹Z”R<5ڊ9žlŒo±YËôÀ®S¸çé„=D’€ \\ XÊJ:`é(•Òв”Âë I³&“óf'Q/Ÿ´Z¶êŽ(“éj.çO§!ɯÀ½Ð ™H/ØÖâÐêÃ~m£ó*/´ÌAµ@Çþ\Xš ýLŒ²“ÀGhz†—áõÇ»ÉgÊE¶2ÒŸC¬ä¶£\–™ÂûºNRQÚy•y@¨5ø³±ƒ]V`[ê¨ .sQ%x¹_ŠÑo ï\áø¶V~~’˜ÏAkà„«ŠÂ–šóµR%ãoBÆvgcþwð€boàðVï$ X1=W =®ÀªXÕv±€+t;ÝѸö ydDö,–4ìc àPºð?.`øx`óíáf´x¯Lõ ÛË ç«• -‡`ÝÆy™»§ÓWu¸­ˆ•÷Å»v{½^'àK¹¶æËþF®ÿ^+“¬|®ÙÖµ‰H7¡ûi—¢ì6BbX[½³(P›.—ÙïÈ{& MÀ³PË -l¹Ÿ¶»ô(ʂ®¬12óö‹ýPt[,¸1@Œ¢äªÈ$[¼ï"Ê¢¡%ŠP·FÕrÏRúâÁ >¥èH¶bA6T㒉Òê0¸¤z‰Ñí´”Õºô¨½†Ó Ã -¼N±nšå†kÞ¯X6ØÔDþ‡„þøZé† ³øø_ËêÓÉñäò–¤,ŸN#ÈYÝZÃdÄ Á>uCŠo·½#¼lm³=»zhOÀ“ã‰a‰¨°XÿïZèZq9¹Ÿ’eù†4/¡A%ÄÊåõÇÉOÚáÆ×ï!š MVH{¨ß…*Ñ6¸l½]JÉXýøEÌ}²TŒ;A]œZA©æy»Èo…FBŽTÔ&ã–puëȅ©„Nh²ˆTeÁb=ßDáæš^ícÚAöµ€Œnõëà6p_ÛÒ -·"üM‚@𻫍©Ô(€HuèòÀº¾ A6ýÂ%S{ޘ†bGöUÑÀf&sÈÎ (cà¦ Ðëi.]VªtOÄ"ÐôK…¤ÐGHsí‚5ÈÏa s›U»~ƒáÇ ÈñíÃlš\¾nòð‘=srîÿxõЀÔñþâaÚw[\,˜Ý]Ïï?]ؾ?”ÖÛÌjwÌràØOnïÀÝ@'^¸H-_Ue‰e5 -ÖCÄ™˜ ì†ÎóÑÃébïæ<³”dª<•etÝdA’1¡4 âHn£­"{‡9ï˜Õ±¿p§”åÓ kz$`‡~Z’¶ÐÐ*É¢ø°ÜÚ"vBd m‘ Fäu§ÅB) íˆm¸ÃÜEk€‰E“+=}¯œo4Yªã܉›éqr7 =;ÖüVàò1“„óÆ÷áæ -#`™+cµ]nösÌV®¸¾é <1äÓgÐS»ŸÁb=­ñð²Kö9…’.v@ÄþCº%iŒ+šËJ‡s(5ïÅ(W SSm)x’Ó¾íôÁ8ö¥Ÿ™ðù?”Áy7jw§×c_ώþ<ú¦5endstream -endobj -1650 0 obj<>/XObject<<>>>>/Annots 1050 0 R>>endobj -1651 0 obj<>stream -x­WQoÛ6~ϯ8äe)àP–ìØI`HÚdMѸYì5–a %ÚV+‘š(ÅõË~û¾#©ØqQtkZÕÉ»ï¾ûîxùû ¦>~b'4QZôEož÷¿ð%#Ç#„4ˎñ•¦¦©,çòg^Œ®‡ÇÅq2æM¿›Ö9m­¢f…èk¥è6OkcÍ¢¡º•Z.U ~’”޹ҍ³ë°-jSv~à &Mõ:ŠðegG¤¦Œ.[;ÝØÈ[°Lß^LÄÇi šÂëªqSY›B¬smEû$….¢ -¥ÚuTH]J-VMY°ÿ=¯¥]¹ÆB)›ÜhÂßm ÞÚFI‘3·”º@Ýh’¤ÛÆ®TQôHeyã‰È E€÷éê&ÜËژfÏo–×H‡©7dn£eŽTɺÉö,³Ì­¹VöµOGŸÎºl «âˆöþ$ýs«š¶ê«ê<÷}~÷v¶jÕ¬¿ Xa7ö?í~ʲnï q ‚†æ -„*Ú@%‹¬’Ž¼‹ÂšeFÿÔf9iÑf*£ÉUÒG-guþõÌU*™|Ð öçír¹4mlÏoíAº“é® ÖmՕføî”UµóÈØ$âðMý%ÒYn#XÉLxª·õw<ˆ=×®ð‚.!Pà)5ÒȁѶÊÒz¥´¯³Ç#^D$âz|ÅA ¤Õ’ì€Ò<;ß«¸6Ʉfʛ\ÍèÓÍÕÊ÷™ÁÃkÖkæ®ÎQl¾bè^YÓÖ©¢ËÚ¬­ª{¤¯nÂW†F–%µtˆ•³+½eŽ -Ï¿ö|ç•lÒJ´þ¨ø,7‘g]ý!sȚ?¾ÎQZ°Ûå}Ï5*GR!pÈãBq= Åא„„&ðˆÆ×V|ªÚÌ UÚÙHÁuU+Ž5×K*  P¥eRµçÛÌ?£6a©Íj¹\"p-kîJ© - >§\úÜ(øµCøüt†¾g#7´T¨wÎ⠊ÏÌZFfĚdÀ܌]wð±ßSÈu^Û¦Gi­@X±+ E þ?îîo&³·÷Ÿþ\éŠ ö‹ì»3 ¶®ˆjà - ÞfÊz šXæó{Œ1âêâ/Ç«¥²µ Ù&dØ*t4@B6ŒS°K½V@òºÄÔù2ײxnÎqÏé™/°”ÑAŠ¡Ÿ¨lB—U‰mŽ0´³F•ª1 ¸^yú:ƒžÌ:Ú̞ãÚñ’⫁‚»°C_“-çhzá*¡†ˆ¼¡‘t¦JYÑ9Ë®“íÅw÷\žßÐݬG‡«pgpød+•æ‹ÜÞK‹G„÷ìôˆÝsl¬ïîvÙÆéÞÑ2I|œoÿ€.Ðèv¡n¦(Ð5½s²¦#}f÷ȹãápçÕ¡8ÌÔSŽza›‡ß Ub)^Ó»;ú Q¡ïQ'èÄôêþýÕL¼\ h;ïݲ’O -ª+šœû€÷ʪuŽP42&ì-,œ".6l³8ùìD±Õ!3»PÏQíÅ#¨­Â`ФC»íî*Û#ځL›õ¹y¹?(Þú‘b§öɝj¸ïðU°5Î÷ -W‰|’yáËù£Ÿ=¬‚V÷‹% íñµêLr¯aŒcŠ{½ÍË -иåg7¢½Ð»ÖÇ4c-¸­W9zî®á½È1a±¥œm[&ÆKžva²Ám‹»ö!× ”õX»¼¬Ñòݬ²;"ú£y†åC± ß09ð%‚Êž½¹‹nîЕdúÅwóçqõ¥&áÛϸ|˜~×ÀóœJ¹—÷²]¤ÌªGâ; ð›Ãé€Føßž^Ü^^àÞ6|óÐ[“¶%æe7‘2: çþÀñ¸ÑÏøÿ ÿÏ÷Çý!ÿrt’ p† àjvðëÁ¿Ð? -endstream -endobj -1652 0 obj<>/XObject<<>>>>/Annots 1053 0 R>>endobj -1653 0 obj<>stream -xW]OÛH}çW\õ¥¬DòI¨´4 *„lâ6] i5±ÇÎÛãõŒIòï÷ܱ¨Åj¥UU°=s¿Ï=÷ò÷Y.ñ¯GW}Œ)HÏ.½K]_áçpÂ?ûø_HŠÜÁp8öúï †“w Ü»¬¬¾œõ EýÉØRJýËpo ­…þx€³–éÏþY÷vH½ù¼O®ÈæKòƒs'IŠ"9’?]vï–d¬ž íDH‰¶†tDÛ26ÞoþϳKêôÙ¼ž?¨ ÐFG7 ‚L¤02$‘‘Ê‚B¦2³"¡2 J²šìNª¢12èw>+Kß3 - õ" ã{’+mÔQu[Y[î %XŽt™…¤³Zcds2ÊJ–ð쥍c^ Ó Ä@g¯¨›ËBçæhº{•…zoºy¹MTеA®òî>ÚÛAߓé|Aݔi™†;eBŸg°¦D¶“¸iw°Jj+ ¤¼ÐÛD¦ü‚³=ߊÔA†-äÞÉNUR"=›»Åúqú՛Ýß_´LúóûÅÜ÷æ?æ´q—“ñ}_|ö=÷´Y£pÕ£¿º™ÎWõeH­ý›úEdaK/ä›cWÚîí5õPYÆHgЫŠÜzHºG3”öò}R{."+ ʅ1{]„ìD»B½ÅZ§ÏX;ßD›˜B¼”£4Gú©·´WvwR€òßA3êê²¥"¼V:)=žnqÑ%Ä`™3\fê@[} ]½/§­ù’#ÊîT3 C²º‡*&¾ó&.À„¿Ô¡P2°º8Vð\Nq’$då‰À]±Õ¥¥LۖeÅ„.†‰¹@,l4ˆ¥% ܓ²$’DÃbLG]²kè:Ä Pi’ÜîÀ»ÈÝuöØãC`¬!Ç7¹tÙç†L·h34hH¥©1ª“ð¤þ‚ä‹D÷VZ-¡CÁ…Vp:“m_‡Œœ)£Õè~pŠŠ3 à‹“ç`ŒŽgåœ@¤X$:æ:þMu©¸„F˜zÕ ð… òÇ~¾ƒ?ßµ(’7 - BJA,(„S4`sË×|XBežééÜýš<ýÆÈ ØÜnhàH݁‘ š20&´!{ÌÛd5ÿ±¼YÌèæÓÓÓÍìán1½ý‚^þ‹¦ø€®Ÿ=nÖ¿œÌ™‘–°¢ÒP‰o(QÂyña‰DڪɃÈD,‹ôìòdV2dt²Y@ Šm¡Ú齋˥¨hÀ††T’ ±–­eÓõS¸¶’6p^W®­«:Œê™sNFe¡ì‘~gèÕñ¿ÑÍeÆ(ÁX©ŠÊÙ?yU‰¾N³†a*>wNltñºÌ ¸Œ@YÍȍß[‰œ‚dÕ¤\97Ÿð¥@Ozô™ådôý1Äz;PÙÃp¶;]Æ;ø¾“Á³+”I·AYôt>†T›©° -ÕY;C-JЄɯQž³w&—ŠŽ´çaf,DŽhÏ'#Ò­ Wн¶8²ä) ²ö½òÚlàèŠô‡'ÒG 6uJ?^º¯'¿ºÄ{À•7väÎJKÃìՈ\èqþ@ëUßå!Ò ½U³}ˆäƒWuŠ-!Äl†cø²vα[Éڀ”°¡™fô/ݖA‹GÕÈ·%8ù¯§…cE`mG5: ܌ ë;ë[ ·ëÖ}µÓ,7c°›)¥‘„Éj<€ ñŠƒjÂvߣ?A½Ud‘, -|®Aõº)mä¶ZU¸¥ÑœT¤²‰MR@'hS¼•p罚ÖNQã@Ä;“ÃRô&ï._XEO[ÚWYd2¡oniùD_W‹ûoËol».Þ÷<âw¼žœYr nÕá-ï_ÞÂ^ÐZa@6¶ð¼òߓ·åêÕ³ý~·|O¨l ®d3¡Ov¿¯f«÷¤G•t§?zMÏMbô¼ -Àkz,í½ÖÏn:ÞèTáê€Z6DϘ{¼Ÿ×60i5ÓâÉÍ^cu^U+uÙæϨÐ)Ó[Ì)vPÀZsÀå^c)íZ‚?‚[p§qŠgw3à\çÅCßhy Z)ì˖!"Ã2çT½—k~Ò¸^ͤÅâöŒé®âÝV; £LÐWíúÝÛIMà½1þ–™ ð§C¯êùõÍÃçÂúÉm6ÓAéÖ}î¶Úi:W—× ¯ÿ±FÇo<ê×ðŒXïÜ?ûãì@¯+Zendstream -endobj -1654 0 obj<>/XObject<<>>>>/Annots 1056 0 R>>endobj -1655 0 obj<>stream -xVMSãF½ûWtqYSedYزÙ*/ Uم]»*‡8‡±4F³Œf!¿>o>d@–಍%u÷ô{¯ßÌ_ƒ ÅxMhžÐiJY9ˆ£˜ÒÅY4¥ébŽÿ¼kN{{>¾ý2˜&“(¥Ùt-¨¤é|ŽoÿKÒÚ%JN<ÑKt±Œ¯Îh2§ÍµÓt†¸MîrǴɆÉ4šEô»P¹~4”Ĩ»æõƒÈ8ݲ잒ãÍw¤˜ÒdâSœ$s”ÙäÃMÁ±V†·á¼f’˜Rú‰©ŒzMÑËz›Dt£8é=="+H+ùD¬ª8«PpE­êŽ­Y¹c¶pL'“Ó(±å VÅkj4Ú4x?ªZï…D9\}ÝÂmB™\5†„BÆîn®K&TD›BbÆ´¥.Xãk’½Ú+\òr‡ZXvSpò F´k÷KØI^¢a)IŠ{Žžt–µ5‰=‰Æ&Tº‰BÎ$×hæZ‘®sßNhìЋi3 hö­DªŸ5¶:Аžt ÛÕåöxôŸ0–-À+Ø÷¼Î¯CR ±L’i«J× cÙþ‘Žú!±<ç¹]’ÂO¦°ü{: N,˜œjÍJ»˜®§ˆ®-zÀÂÃõpF rÑW^Œ&=ę.+ -‰í4(°Íï¸k4ص1‡žKÊÓv¸ôW\ žo{•™Ê)«9k8•­lD…L™®ºë Q+ʅ¹G¢ÕÍçåõ—ȪÓ9Ñë Ɉx“EQ´=Ž0GXÐ0å.Ê´Úo‡³J—LQÅ©Ô3ç •-€KWÐPìRmÛµ9!W$þ9ƒ}ò*V³’7ÐÜ#3¶\ɬÀÝI½c²ÉóӀºæ’3ËmU , »…]ÙWˆì¤½±ÚÐRêGË -`-TëäàUóÑ/0¦³ÎW¦~6(üýèû³[Zì¬kØÝï¾+«9§1ÿÛ -w¢Þ êèf`õœâ4Žß ÈEͳF×OT†˜ù»1oŒ”5µ7zsï‹?Î’ÎxA 3PˆUSÉ®uXwÒ°~—ÜÓúyx‚ž9ìI4OšÉjQ¡«ˆ(r#ÝA†4•q¯ï] ­¯W#øîÒñ>i¯[³Å<97ÆX•V° Üt…×ËÏËíÖY:rôÊ¢U)þAˆwÓ\ì÷Øx€í¡Y˜‰õrq§¼=ù™ô #ú•cG²óò4NGÁ*rç -G½²Ø ³/ï À& ÛI«n$µQã«·lÔß}vÐÃXsöžf8€³ ô¬¨Ök*­Œ³µPêņøµåõÓ:p¹z¦²©™2Øþ0ÞÁ™3vpæ#l8 Ø3X-/ëk l’á‰:öy¡2ÙBC¯!p2õ“ü’:ºÂ†F—ÐP­¥{|•¾8U„ñËÍæ}ôû³u®Á¼Ûâܦúâ˜ÙáØbí(L3øÔ­ÝòwòàRî¸`eåö~wr0ŽÖñÕ",`’âøµ8¥)ÎGnƜ$é¶Öß1õˆÌpP€ú­ÛvOº€“y ÿÊÿß1jš.¢t–à†ˆÉij3}Ú ¾þRO†endstream -endobj -1656 0 obj<>/XObject<<>>>>/Annots 1065 0 R>>endobj -1657 0 obj<>stream -x}WێÛ6}߯(º6òý²‚¶iš´@ÚÄ@ /´4²˜¥D•¤Öë¿ïRòz•m¬­ 9,QU©sÏȁéd;òݾցÔEFýb¼½¡6ó̤K JyÊ+Õ¸@ˆpdŽ´] ò¿! =2Õꄑi’E0=R'Oj$¥íkR¼¸Àœ=Ÿ—.*¬¯»¼’oÉ!W|;Ϧ”l+6-§ò; >6ê}’’HmPÏ&àO9!ù‚ ¸Uáàlג-©e :èXYº·¦kCpÈFãxoÈßic<©¦ .Ánðý#‚ÈYßCûÊQ-œ'%ím„р܅'d0Z¹µÞ뽸ÆÙas­¢©”~¥`9 JKÃ#…b?HébÈ:¤ß³±-»Ñ’¥ÓdN/.J$†Ì19Æ HƇq…ÞYj,tä}'5”YýÊÈDM…Guä2·u›µÎ›[ã3_ï©á£ïéŽÌF¦D!FÇù¢Ž`y;j[´sŸiç[Î#·!ʂ°š³–ÂGŒ1¿=* ¤)õ¡sJ<à<)&@çâ-҄ Ô̎HBIYRÜrl¼BÍþ¾\  KB>_^Òj -?¶2Ô²ó‰ísÂ}ûDktbŽ¹ÿŒ¡±=Œ–Þ·d¬½C<ÛªH¹(± OYU.¯ Naké'#÷Ü@ Aėçp<èòŠ}4J=¥}ä=µêÛCŽUíëÉäì{éj1‹‹_zqô,xñ<£Ü°S†tSF~'ïŸñâ·É·’gE—¿ô-4£åÅ úºF«öÌ‰Ø9ëГ --:ù8:DCLn÷÷ÚBå5R–lF¹ÆÚ6&öS¼ÃR?¢kíÁPÄÄ`µP®˜ëÀûÐ*WKYäú)D1dÙRrëP#˜à Öô0®ñïÒ÷X/¬àK}] ­õÚÿD;1xü¿gw"]Ëo:µoÝä¦+…s!zǙ 4Y¨ÆG¯ 5â徃HˆjÐK°Li‰8T.š9Jï R؏8,¬ð’¤D¹•‰f¤ƒ’Fÿ¼ $¯°ëv$¿«£EFïX0±¸~ûFG @âÊHÙÓTsJCZØ]b6IÙ{†ß -d°•Ê#M!.ŠŽÍhëØoŽËÎË8D€³Â†£®ÐåBۈYúQyâhÑxÐåq³ŒÕƒ#”‘t­¸ mð2CÄ<¥zývL‹(ºÙ”p~8bÚ3Ksiñ u¥ÄÆOýž’Äâ¶U0¶KsÊÄBNâXÈÕ¦}¨ÐþŽ|«òoöíØfªoñX™-À&ïWýyëú"›7éÕP¶ës·¦ç8ÓÆ#Ú56LÚn4<£Ï—vXêäډP©ÏHJӔg˜žiɯšÕ6²kÃ(ñ-ò¼cn}#êG”äŒ!øŒ8”O\Xùõýv8\ÊÙçµ3zC³édŠ£vÿ2×ÞФónb,Î~½½Çý!û¡MÚúæ ¤õŸºl<ïŠ`)ǦŠä’Ši@ßÿ,˜sàžª4籈Ǹ¾èß¾›’>hN Ð/®‡DúpïÑH´ÇFEBrlÇp¸F䦕m¼9Ñ°>l´®Q¦t2<Âÿn¢»Âjœà¬gd÷êR{Œ@%¡¼â´q»UÆØcZ ùÇ*œakÑE -]–0-ÜzÎ;§€ž|à[.Ú.z³"¹8ã ¹„tûøƒd±Išùþϝåz›­WsüL‚‚f‹„ùmwõ÷ÕUÝåendstream -endobj -1658 0 obj<>/XObject<<>>>>>>endobj -1659 0 obj<>stream -x•WMo7½ûWLu© IJ¾,;zpP0Ф©£à w—»bÄ%U’kYÿ¾ofw-wmŠ @Â%93oޛGýs2£)þÌèrN‹åõÉt2¥‹«Å䊖W—ø÷ƒ¦R>̳Éò­³ùÇ·O,ß8ði}r~»¤ÙŒÖ%‚¯®.i]O§´ÎǵÊ7ÆéÉéúÇɔÎæ+„\ãõF/ß"_9:Žu6ɽ+ÛåþÆ1i—¡]¼è÷’õYý¨-ý:Üo"ŃóîPû&ÒÞ¤ %D{óšBgMõÎ=i£mT¤LkGMÔGÞ:pH3[Læ\Ì£ÑxɗôMՙ"尙OWð¤AA¥”©|»W¡ˆ”ûz§’ÉŒ5éÀG{¨4VÇ!bבËø8<*Ûhθ¹[TVû˜^ìö;do”°µ:ó‰œFˆ«Sâ;7¦Úè€Ê”£Å„¾h‡BŠh 0Âr¦) Æç©öýEÈt6ý€S‰ì‚Þ©ÐA®èï›ûïdU¨4=zÛԚáf -*)©åüö#ÍÀ\¦ðÙbْt~1YNèÎ%œ²¤Cð!þ—nLéËɊYpWJ¡•F’4ºû²¾¹ÿrý;ÝÜßÿq?¢ZǨB‚D—>“Iø¨À!\˟ -H¡ôÆ駝Î -áF);(~¿S(4ÎKdš¸Ý»à3•1Š@¹ªÁ{i•ª±|+`´Ò«\&&v¶ñcÎ ¶9<ŒJûq7êC„ï;@!¡¡i€îbÒ5E_&^z8íÎõªD,Å‹\¡eð8QgrŒ†0ô¹ -tSå¢g€CÆuõ þ|Ρ +ò@“c$ûíó§çà½6í5sBë(¤ô òF -óõ^6–Ñò1W ¿Çÿ?çf¥NÚYVÖ "g›½F?ºv3²à¤©—NÉwh2n|c¹/ÑwÕÐÆï)y>|ÑäÐÀ1ð2%í|ŒiLè«ä@µÚò.”Áj÷N8Ðb£‹·¢²$%di@ -aŸÂTb`Z©ÝjV¨„æBØÅ&+  L@AIœÚqaAk‘ÂV띰}€O”Éúk']Û Šìù6ágׂ何Ñùº@ôÜ,›Ç[áƒ_8äùmo/œ§*²–n\P»«÷š»TQpˁAð»`TB×UÚ ;ߞf Vh_ɓªÃQאb; -ï~f\xJc>hTdO#&Ÿvlد˜t )›S…éÈåñTPsܑ@<â\*°™…ž0 …©2ÚÚ𑞪>ϛ€fò8r -oz²ÖÓ0]A[Ç"P̉Q×l ¹~R9Þë„@ÀL^ CïnÖû­°!I"ô‚ä¾€oQ9òo È-gœŽI˜ -œé°æ‘Ó6ú8]é쯂tä=Ÿº˜Ðu ÀŠ+U½+0rLñ×Lïlë/võÔ8P€D‘Ü8ó¤#·Äõ!™¼y¶ßx‚ºDָ扶0Fm#@Æl–b~5õás¸0“Š[~N K„óWhUc -lº¸Aᑂ ä‡S¹È¡Ï¡Mi3Á:Óaìs£]³•àÁ`pøÎ$Ñ;p 0Æmô<¾Þý6êÈÁ÷²§céÙ« ·ÔÄV¿¢ÎQ.jÄó<Ç«‹UÚ¥‘+3Ë @V\Ö¬¸rïQý9ä*Áëx×ÑÈÑ2+¤kyŒø¬ó¶ßo?jVð ¾M¿ÏŠ5âdºå#GÅ(!f1ŒÎê":^š§Ÿú¹5Àë3“Ãt6ÉPµyõsy ß(K:kÚå~yÞã¥Ùiê÷67_ŽÇfÇΊّ>Dao02ߍ–/á&ô™ÍÂã -­‹°©!9Uá‘$Ài­<øµßÍ6¾éŨˆxÛÁ¬¹ÿ¤˜dç Šê~.HãcëÍç·Wݏ›Ù -¿Ô®´ºXáW–ß®?º¦¯Áÿ€åÒo>Ƕ{Ôqô³þÀÙåô#ï÷Ùº\]MVs>/XObject<<>>>>>>endobj -1661 0 obj<>stream -x•VÛnÜ6}÷W ö¥.h¯õ ÈÃÚ^' Ø»®%7 Š>p%Êb-‰ -Iy³ß3¤”:ªûPlq8—3gÎðëє&ø™ÒéŒæ'”VG“hB‹óóèŒg§ø{†_#)÷ÓÓI4{ë`~ ¿_&Gã›sšM(ÉãäôŒ’Œà‚/éñU!' ÍN"ºVâ©ÖVÕOtЭ!+ª +͋4?'y?ÓÓàçý|’짭kgtÖ¦Né:˜.h:íLg§H ¦I¡,媔”êÚ U[T*ëHçä¤u–ãR*jj¤Éµ©Èiz¥Ê„“!§øUNëH”VãrY†ËûB8r…„ßgY8— ½ŸÎC²©h­ôÑ`ѽ+eEHJå¤åBÁ‹¨¤ëÞ -æÖÉÆ"–·i„µFeÉQpòÆß5»€/v+våöÚ<ËA -¹ªeÔ}v æ ª¶…nˌ2MËÛ[_÷üŽTíÿÓ&C›`µ¯#ú,©/n”̤T™·%¢¦…ÖœVÊ€L äL—¤®ÿъFìT©œBahµÊÙiV -SªÞÃ0o@ ³²Î^AÖñ¦šL%n0£J’¿àðÀ_G+ÓÒÖ?9Ô™÷æ «5Ú¡ËRï¹>ðf€"cÃH§2k1~ŸJ@‘¯ïйÖ4FY¸À™éàvƒæFf¾Ž×¤ö Acf-­m«†)íÏoÞàôºö\`ƒR  J[…СY‚^“°—%Ž/×ãÕÃo«€ û«þdyu»^mÚiW ÊGs˜]OF· %«8ùø°}¼¶' $ï0BÝVUªÈ‚Snë¡Aӑ}Š.×Î]¬=¥ýŒ½®ç¹Ö{_p-*?)h¯xA{A|À^€L º­væ=ÇÑ^an‚#ßÕÞÔv5ʹªEô¥‘e ÿ±»ÈCN»á„IÅ-¬ñÿiêc_°ãñ̈́Î{IZ„Éûþì£N ·˜F¨SU ú€~V6¼lYZ6Â0ÃËðÈHÁC‰ü@ù‚$~ZÅ+ßÁ˜–qüx·"P!^o74x lèv™€ÛJ>­(^Þ].)~\'«ˆâ-쯶wwËÍuÜ'ÐI]üiûyC×ëkÚlZý¾ŽZohµ|«ú(ý­^‰îK) ¦ÎŸõ…‘•Æ€7•´V<4÷Dë{òÔ3Òê²õYÂiª 2r¸o¥£¶‰H>]НI aƒ bŽ¥KÇÞˋgiØOV.ÜG +°+e…PËo¶áÄ,± ÚAaÄRä%ízw»”DšE?†Ã*šÐ€Wå2ô(ǯp…‘TÑó {äšó#­hÌ~Rž:)Wš)î ÆıÆ*-ð©{ô9ùZߑiÃEZ^!o$ßï`ê?Ï[î/¶x j'ZüRÉÕSk„瘼¦\àðõíä«ötßߨ5ÖQ©Slc^­^IXÂ#éØÓп·~„瘶æMû֚1û+ÇþÖ¸T»póìŸw×â<ˆÜÿyã-Nð†üe†ö¡'Óù9;]%G¿ý ú)VÜendstream -endobj -1662 0 obj<>/XObject<<>>>>>>endobj -1663 0 obj<>stream -x½W[OÛH~çWùeA"! 4ÐJ}JWH,˖h¥J¼Œí1™bϤ36‰ÿý~çŒ ‰a·o[{n绝ÉϽ)Mð5¥ÓÏ)«ö&ã }˜Lñóäì?gøöšŠ½‹ÅÞÑ׏4=¡E)ó3ü’†O&´Èögóññx6¦…5Í?0ú„¦Ó8z4;Åèýo¥z©)sU¥lNÉÊØGº¸þýþêÛßWß*¼«dÄÝ%½8¿¼¹¾º]l½n¬ÙPê6cº.¨u åÎþVÓ£®yç ¦8 ï¨èY•&G aålм¸åž—wG×w\Q¯J4¬«q6ïuV—-jU–:w‹¢F.zÿÖÕ¼ªeëµ)K²ZçT; _“¢$wV¨fU'´66wkr±x”†Ppõõ»zP V©têQSP-•,ÀåC®±yBÎS0•)•ßªëËíýkQq¤ëìˆg*LÙ×9Àéµê ëf\kdåB0)&u'ªJ꩗®©‰wÒ¶öFciìÄÔퟵò²Òàí!¥zM*„¦ÒYƒÝ—ê™E!À¿YÑëJ@,ê -ނI„ȹs³Ä(¯UÔëe+Se—@L™’+2¢O%þ–±-Œ×k°ýݘ¾CW;äz]ª ap|ߔ@•`ÍD–×Î?A µÁQðègƒ#ã÷CZi¿T«@iKØÎA¤² LGõ«®ŒÐ¤Ë=ìccޘÏ›CùšžôͪX«¼bå=zUxô¶oGÇÓ(b1ìqgØã8ì׆ Ui¥ÑͶq;m¿ú’Á PI™³+¡åÒ@»`P=ƒ Ś -KØnXNª²§!³;žÐÞCj½32gk¨ƒAõAŒl” •Ó -Š ° ވç–[·$‚Ӑ±Huâ`+† ‘§ä0ú/P®m+ÞKb¶4Ð|HP ˆÕ.ÀiŒ³‡ìQyòÈ -`¦a]ñûXÓåRgOƒ½×]¾xz3³ R$»`¥|•ˆÛj]­œWÞ Ø=8‹EÄ`>Ã]®A Wdµ“¾·F„pƒæ¾ø¤5‚Ñ)BœÒAB|Š@zƒ¼Ù|ûPd›*M.v°ØS×K“-¥Jb§Dn9Tr FâÂ]] Òq֊¯ -LäìŠA(Œ(W"&¸p¤:#¶XÀÔ·¦»ˆe×í?ñzG_'ô±¿ÞÄ¦BÝ¿xÝà ¤Ït~sÓï?Ÿñjw˜dÆm6›ñÖ÷QÛþ˴לj*' -@æ}¦ï±™ìÞ;ç¼ßuìÉ*E*"mb¢+›it´bþP©×\àÀ©9€¢e Èe@5µ«Ð×3»¥Ú+Jv3Ú?`íOÜ]?KçVÜÑHåjÅàÿqh:Ãå_S°…[£ð ý}ŚϖÊâæ™b¢Ù8ÿîr¼Èñö•@°üâèöÏÂKGÉ{d$h¾ßqcƒÀ•¢ßµ K†ªŸÓ·ê®êˆ ٔ¦n%1:¿½\C¤}t—ïîÓqF Ü fJ-²‡Û+iMxďã@~ÞølHÝkr†12äwþO’¿¬8ׅɘYۏԍ÷Htü(ö­Å)œ(Y=²0ôµàœ}849úzÖ}̚Ρ©³cšŸ~Œ~îÏÿ¸8§;ï~ ®è‹ËpGô1 ñ¨Ÿ0:ÀÈù;ŸáNægãù‡>ïáõôdÂÓ®{íýw]¢Îendstream -endobj -1664 0 obj<>/XObject<<>>>>>>endobj -1665 0 obj<>stream -x…V]OãF}çWÜò[“/ô-°l…Ôݦ`Uª„„Æö8™eìIgƤüûž;3 Y/»hµû~œ{ι÷߃ ñoDçcšÌ¨l†ÙÎ.ÏñszÁ?Çøo%Õá‹ét–ßúb2eo}1;˦ýϯòƒÓOS(¯‘|vqNyEH<R^Ï[ãWÒRišÆ´TŠÎI25áCüâ7†¤µÆ:RŽVâYµKr¦‘~Å¿ m¥¨^ÈvmË#ÀÚXO£Éå ¹®\‘pt/šB|È¿ i0š £¼:~8Vò7rMQqÜíëµ5 ©Vújùá»—P«'IÕRy¡-„_mŒ}r]¯dùD/¦³1BVš¶¦ZiÙK]ÈÚbo_¸boÈy’C-¨VP%$8!åFKâÙ(ÔCÚxÆ¥¶óVxeÚ_Räñ ¨£©y[ыô$¤kãœ*´L "-ÕBéÙ(¿¹ÏiÂíoV²e¼Xæ©î A*:åæ kDU -‡¸Ue¥s½~œô rÄUmi¬•¥Ïh¡¥Àˀ‹_ R >†½´µ(%Ý.h#ßÕ.Ùëg÷±ªÏ¨êg©SâPxHæÎ8p+Ô¤_ÈÈ*qKŦµYfmS„QeœàôÓ%(³u0Elñ$›f”K1½’z0fRßu1$s™ñ;D\mÌS·¦Á]Ýþ~s÷÷Í=>ÞÏ?_Í3úÇtäV¦Ó-=ˆ$¨yNL©^ß±3'í3„Sˆò)ԍj·L¸ ¯QeÚ£²%T¨¾ÀP-¨§µ¬~Ä^Ã@LÆ Öª½ópŸP)­0Øcí7¬þ„õâ3ãìÖC{§Ç@¤ølpAY…O8ÕvÇ9Z 2íBà5í²OT·m¶22¤†Qý,éY úøåžCµÄ«…c~+°½N’%ˆÂàU©¿3®Y×ì{€ß2„ŸŒ«¢ñO•3A½ro ÇÁ渑µ•ÏÊtøƒªèàÚ¯CȇØótȑ_«d-:¶þۛXò£ŒæÔvMہ3}‘¾PƝæ× º2Îï䶵ùäl˜ÆÚ´®Ð^·\Å¥ ±K†~=ïj­{i‘„«‹¯; ‰F5#,Vf€=EsÁÞc³“’™CVã”Wh Ò¿´8BANRƒ&–²¿Õ‚b„Á -[{ƒtÁ5¶Œ[r -AN5J ËЄï·cAOÁ‘“V£v¢à=À5ïLøبø¢ó¦%–èª\‰V¹^ǐ>/XObject<<>>>>>>endobj -1667 0 obj<>stream -x}WïoÛ6ýž¿â `˜ Ôvì$Ž[tš®¬mÖd -ä -Q6‰TIɎÿû½;Q¶ì4KÀ±Èûñîݻӏ“ âwB—S:›QZžœŽNéì|:šÑùüŸ§øóšò“«»“ñÇW49§»Wfs|ÈÇOOé.Lg£³Ñåˆît¨éòÅÝwœ>§É¤==œ^âôàkc©^iJ]Y*›µ§.â©…r‘FۚÆã«ë?n?|ýçÃ×ñݧ›Csƒ}s …•kŠŒíYZhª¼+«Zg”;OŠ*ÂÆùLÎòýSNÎFS#Þl‚–hº£ärù_¥©kÄNr/Ür »ÆÖNž7Ö<ÒÂ=ÒÆÔ«]çrr£p…O0ü„”uÎ9ï¬KÜ*“hø7½¬*õrUmÀj=j›uÁEè¨0VH/_? â‘ßñxa–Aûµö㺬àò»[ÙÌéÖ@¿V³×vðÙÕú5]×dU.³(˜£PéÔäÛCìTáì²Í›+ l=gB*  Eá6áùHQîƒØŽ"ßEúKЩ×õ³±©–Z€BÚÆÇŌu_j -1&àÛÛ$gWÇÌÙ_å¹EáÝ©ö°ö¼*uj à¯ó£ MMAm%Æ®Ua2²ºÿˆQHØ_K}®€A˜ j0² úÁ{ÖŖ‚®› -Tã4<7Ä(u6Egh2© (·ó·Pَì=?…yа—*T"0~ôø°3ˆ¬ÔZ•¹Aú ÓàP<áïÎ:…m¨uyÿ‚MM™É(ð±2àBMU9_K"ßßqÜÃ~ç• éú!„¡ëÆɈø¾é‡æ)iqd&…~ln–WÒÀÍ؈šøÀmÈP6˜îuöwy**Í#9Uhü]ÓC‡„3 '¤­ÏÛ¶Lv§ -½ÖEÒµ%8¡he–«X—Ε¶®Y®HwauÏÎö‘uV -Rñ[" -(ƚ37v9ŽèýJ§\u‘™Jù²s"¹Ÿï=tN9÷.¡].Ú¦~ÛêK¿^«ºÄÛOW¸%‡Äî^Ž:8¼h§ûÒI¢X|Æe ¶4š‘eé”7ŠY`«ãûAOÜ¥UsÔìÒuŠ!³­¢líï¬tQÑÛhñMk±µs’¿êQÑØPû&e:…ƒ¢EßTÁÝ# ×«¨ª”¹€1‘{­Ñáb¨ÐÍHqc¹b‘“´á~çäë'¡öb@žGJ§÷çìðlÒö¼ Øy°óÃk0ÙØ/­Èܼ¿¢r‘öÂ.È­ÞÐ=~vÃöÐl´S3î GO$$šcÜ -ÑøŠ’ÌaFÈNØF/ǍÁÙ Ì¥](ÐYõ˜–T­•)„P#ÅâánÖOô±e;ðÝWZ‘ÓeÊЬP1S¬§V½E„qza­L'xrEÓI -K1k¶±KàÌY¡f/›&4-3XW3Zlò¯YîÈBßpՑØòÐÅvÀF]à9 Ym÷Œv.—Óq”‹8˜®œƒhí/C…Ÿzn1;5ᄱŠ`²9Ö\щžàv:Ñí!×7„@ÈiG‹nIPÌk’È -„œÙ¡ÊÖ -à I«±©â‹5¼y/õÛùÿ‰F·>1WžÖfmýþù–>ð†}@jí;?ȸ§½ýŒòC<åʅìæ‘öLøQfT/?_@Ǥ?¬[RöFvà} Eäy]Uàv'¤»åQÛ Õ#^ð -WæáŸ0Å»§Z€|ØP,”Û×&mÐ/©Tè¦ë¬$š´y‚nÓ͞½zÝô¡Æš3Kî_D×ÝðzW÷’Í]Ãt—mI´2W)/MPM‘A¶Ãm:Jµ¼þÑ PIŽç:ŠÞ² *’¬xEq”¶ª±‡Tðáºû)ÜHìJ[¦äfeҕ¨p\á¯ð’ÿ¿‘i¥JW²ICvÇXyä$%Ò­ðúê%R%6oû·cš1Џ ‡·Ýˆ±pt3õ„-i×lƒ¦‚`b£…"1ÚصYs¾”bÉaI‚šn±°*tìn‚qÕ£•£Q‡qŠs»¡—¤ØU1Ûíà1/L+_-ßX+ØãÆƃ¹Ø×^âå -”cdAÁX(j¿̾ÇçñÅo2ËæüŒf—s^ánß}ºzG7Þ}/èw—6%îöd,^ž¾’•ïɛçùl>š]L£ÚOÙ݇»“¿Nþð¾3endstream -endobj -1668 0 obj<>/XObject<<>>>>/Annots 1070 0 R>>endobj -1669 0 obj<>stream -xWÛnÛF}÷WLõˆiQ’%9€Ñ:møÁ®k3 ŠºVäRbBî²\Ҋþ¾gf©í^D¡HîÜΙ3£¿ŽBàoHÓ!&Gƒ`@“é$Òx6Åõÿ*M©<ÏNƒÙkFãÙë'†á ˜¼r^ƒAûñp}t6Äñp|ŠÏ‚Âé ^ü·œÂIˆ ‡RÐp2 ¦í7~ú!::¹SR”"•ÉlJQ"ÖÅý¥uµ TžÛ¥YŽLlEkÛTç™65=õqÃ5s£ëw¤ë8xzû6ú -›gÁÛ<….“þpŒ‚³€"íj:ó¯í\Ùuÿ¡1T/5Ŷ(”Iü[§m€}‚jœ¦ïïé >Ü\?^>üvùðôÝÞšìô»mÈ-m“'4×TV¶(kHŠJåÜÊV »3œTû*[Ðq8B9ÐõÚx8®2×lÅ5q¬K›<_÷¨À¥Zè€nR2¶Þ­èþgr6­W -DÈe&¶U¥ã:_ãÚÕ(.ŒÙªãVŠìŠy[“œ ¨Pß4ÜÞ¼Õ”HPêŠF)"œÌ”gF³[ÚZãHÚ ‚Ö-°Œnê7–œ¥Ò:—Íy½T’9]=³YeÞԄÊ}#Ûà‚’ŠŒ*ð¶e¿ùII•ÞG‘{ -S\ÇÅa4`½è¤­ÁC‚¦ž˜=§OÀøîâö²ÇÖùìuQþ £qYC6Ý¥¶Bâšz»­7¶ÄñuÜI\iM’™ÅÆú–̉z]êDPåoi†êJiöUÅ¥Y8É´Pk°Pr€w€ª,ñJÇ­-9𗵧"[,A7®?˖b¶ ‚uÛvր=N›Ä‘6qµZo ’Ã]ªgÉøäj×Aíû[ú;:ïDg,ßØÉBŸÉãoAHD)ú.uÞØMe(«i®bð½lQ´ï’ê?‹dΫB884ˆ>ü²PÌsk¿5%ßRtù]?üò©« *“cûxÃDá-HÄåfZ/* C\sfO -GUÌÕ¦¸ÐŸÁ »rèsÐr+D:Ж©{¸¹'¼‚\0qùN¡\ö™W°‚ÿ!±¿ÿ6²´IëÄr[ž×O·Ý>c™¥ -6V@Hm¦©¥eÛþÄ]ôË×ú<×ÜŽ…ßÛ¬Ö¤*3Ò Y·4®Îò\ìƒ})§³‘ CŒ µ"I²eß¾u˜¦¨(œïD* Û}•{•Êe¥S -•)±‡S[ÐsZkwȧ>óQÑN PÚV -©/5FB…,WuSþmà mÃC7[Ú^aäøÁ‰a†ñ€² ŽˆÁƒ-ð{YÂ`”]­*.³¥=™g Næ6Vy‡4[¾øÍG­‘‰A®Ôq–fЪ½‚?½=à,äG‰ú[JlÃWž¶¥aj¯g:~}:"A~tn"uKÌŒ HÖ¦v®fæYåY²•£QìèU?”‘|̓‹ç"[wÜV1Ì+tã]$Þ=™A‘Æñƒ]Ñ·Ý+ à¾0LŠ®ŒBzK5Ïò¬óÑç ÊÅÊÞqëgó4j*~·° ¯ŒŽˆ~ë å¸ZÚf_·§Î[IaÛûÒ{q÷ÑßÚ)øFçÛ/ô»¤/wї[cBµ3`³k‰ž o6*.}‡%eÔ_VÃÑÅUtù ûj‚‚2wš²´UW xG|ÍÀS_ú•‘`6róN âù ±2bä5ôx4Þ®Œã€E\ ‚#Ôtt?VJZË26¶ˆ[  -¨ŸðÄ~¢WN´]2ò–fh´Ê©Æá9“¥^›Û-}Îý“¦YœáUߥ­}ŽcO|Äv$à°/Ñf¬(ÜØ?Ég`« ò`­x‡*,ˆ­æ|éM3ߖ,½ˆ¥™»¸Êxðuû7·KÍ- -3œ¿7µÒs4×ökZÖuùþäd…¿jج€¼}ìk¶ß&K°åGQ©#†ð@à7‡¬á?|f#š †ÃNjÛt_Ù¯¼~´qSà—ƒâ ˆOoOg¯ÿLOfÁätbÝp<âc—ÑѯG;endstream -endobj -1670 0 obj<>endobj -1671 0 obj<>endobj -1672 0 obj<>endobj -1673 0 obj<>endobj -1674 0 obj<>endobj -1675 0 obj<>endobj -1676 0 obj<>endobj -1677 0 obj<>endobj -1678 0 obj<>endobj -1679 0 obj<>endobj -1680 0 obj<>endobj -1681 0 obj<>endobj -1682 0 obj<>endobj -1683 0 obj<>endobj -1684 0 obj<>endobj -1685 0 obj<>endobj -1686 0 obj<>endobj -1687 0 obj<>endobj -1688 0 obj<>endobj -1689 0 obj<>endobj -1690 0 obj<>endobj -1691 0 obj<>endobj -1692 0 obj<>endobj -1693 0 obj<>endobj -1694 0 obj<>endobj -1695 0 obj<>endobj -1696 0 obj<>endobj -1697 0 obj<>endobj -1698 0 obj<>endobj -1699 0 obj<>endobj -1700 0 obj<>endobj -1701 0 obj<>endobj -1702 0 obj<>endobj -1703 0 obj<>endobj -1704 0 obj<>endobj -1705 0 obj<>endobj -1706 0 obj<>endobj -1707 0 obj<>endobj -1708 0 obj<>endobj -1709 0 obj<>endobj -1710 0 obj<>endobj -1711 0 obj<>endobj -1712 0 obj<>endobj -1713 0 obj<>endobj -1714 0 obj<>endobj -1715 0 obj<>endobj -1716 0 obj<>endobj -1717 0 obj<>endobj -1718 0 obj<>endobj -1719 0 obj<>endobj -1720 0 obj<>endobj -1721 0 obj<>endobj -1722 0 obj<>endobj -1723 0 obj<>endobj -1724 0 obj<>endobj -1725 0 obj<>endobj -1726 0 obj<>endobj -1727 0 obj<>endobj -1728 0 obj<>endobj -1729 0 obj<>endobj -1730 0 obj<>endobj -1731 0 obj<>endobj -1732 0 obj<>endobj -1733 0 obj<>endobj -1734 0 obj<>endobj -1735 0 obj<>endobj -1736 0 obj<>endobj -1737 0 obj<>endobj -1738 0 obj<>endobj -1739 0 obj<>endobj -1740 0 obj<>endobj -1741 0 obj<>endobj -1742 0 obj<>endobj -1743 0 obj<>endobj -1744 0 obj<>endobj -1745 0 obj<>endobj -1746 0 obj<>endobj -1747 0 obj<>endobj -1748 0 obj<>endobj -1749 0 obj<>endobj -1750 0 obj<>endobj -1751 0 obj<>endobj -1752 0 obj<>endobj -1753 0 obj<>endobj -1754 0 obj<>endobj -1755 0 obj<>endobj -1756 0 obj<>endobj -1757 0 obj<>endobj -1758 0 obj<>endobj -1759 0 obj<>endobj -1760 0 obj<>endobj -1761 0 obj<>endobj -1762 0 obj<>endobj -1763 0 obj<>endobj -1764 0 obj<>endobj -1765 0 obj<>endobj -1766 0 obj<>endobj -1767 0 obj<>endobj -1768 0 obj<>endobj -1769 0 obj<>endobj -1770 0 obj<>endobj -1771 0 obj<>endobj -1772 0 obj<>endobj -1773 0 obj<>endobj -1774 0 obj<>endobj -1775 0 obj<>endobj -1776 0 obj<>endobj -1777 0 obj<>endobj -1778 0 obj<>endobj -1779 0 obj<>endobj -1780 0 obj<>endobj -1781 0 obj<>endobj -1782 0 obj<>endobj -1783 0 obj<>endobj -1784 0 obj<>endobj -1785 0 obj<>endobj -1786 0 obj<>endobj -1787 0 obj<>endobj -1788 0 obj<>endobj -1789 0 obj<>endobj -1790 0 obj<>endobj -1791 0 obj<>endobj -1792 0 obj<>endobj -1793 0 obj<>endobj -1794 0 obj<>endobj -1795 0 obj<>endobj -1796 0 obj<>endobj -1797 0 obj<>endobj -1798 0 obj<>endobj -1799 0 obj<>endobj -1800 0 obj<>endobj -1801 0 obj<>endobj -1802 0 obj<>endobj -1803 0 obj<>endobj -1804 0 obj<>endobj -1805 0 obj<>endobj -1806 0 obj<>endobj -1807 0 obj<>endobj -1808 0 obj<>endobj -1809 0 obj<>endobj -1810 0 obj<>endobj -1811 0 obj<>endobj -1812 0 obj<>endobj -1813 0 obj<>endobj -1814 0 obj<>endobj -1815 0 obj<>endobj -1816 0 obj<>endobj -1817 0 obj<>endobj -1818 0 obj<>endobj -1819 0 obj<>endobj -1820 0 obj<>endobj -1821 0 obj<>endobj -1822 0 obj<>endobj -1823 0 obj<>endobj -1824 0 obj<>endobj -1825 0 obj<>endobj -1826 0 obj<>endobj -1827 0 obj<>endobj -1828 0 obj<>endobj -1829 0 obj<>endobj -1830 0 obj<>endobj -1831 0 obj<>endobj -1832 0 obj<>endobj -1833 0 obj<>endobj -1834 0 obj<>endobj -1835 0 obj<>endobj -1836 0 obj<>endobj -1837 0 obj<>endobj -1838 0 obj<>endobj -1839 0 obj<>endobj -1840 0 obj<>endobj -1841 0 obj<>endobj -1842 0 obj<>endobj -1843 0 obj<>endobj -1844 0 obj<>endobj -1845 0 obj<>endobj -1846 0 obj<>endobj -1847 0 obj<>endobj -1848 0 obj<>endobj -1849 0 obj<>endobj -1850 0 obj<>endobj -1851 0 obj<>endobj -1852 0 obj<>endobj -1853 0 obj<>endobj -1854 0 obj<>endobj -1855 0 obj<>endobj -1856 0 obj<>endobj -1857 0 obj<>endobj -1858 0 obj<>endobj -1859 0 obj<>endobj -1860 0 obj<>endobj -1861 0 obj<>endobj -1862 0 obj<>endobj -1863 0 obj<>endobj -1864 0 obj<>endobj -1865 0 obj<>endobj -1866 0 obj<>endobj -1867 0 obj<>endobj -1868 0 obj<>endobj -1869 0 obj<>endobj -1870 0 obj<>endobj -1871 0 obj<>endobj -1872 0 obj<>endobj -1873 0 obj<>endobj -1874 0 obj<>endobj -1875 0 obj<>endobj -1876 0 obj<>endobj -1877 0 obj<>endobj -1878 0 obj<>endobj -1879 0 obj<>endobj -1880 0 obj<>endobj -1881 0 obj<>endobj -1882 0 obj<>endobj -1883 0 obj<>endobj -1884 0 obj<>endobj -1885 0 obj<>endobj -1886 0 obj<>endobj -1887 0 obj<>endobj -1888 0 obj<>endobj -1889 0 obj<>endobj -1890 0 obj<>endobj -1891 0 obj<>endobj -1892 0 obj<>endobj -1893 0 obj<>endobj -1894 0 obj<>endobj -1895 0 obj<>endobj -1896 0 obj<>endobj -1897 0 obj<>endobj -1898 0 obj<>endobj -1899 0 obj<>endobj -1900 0 obj<>endobj -1901 0 obj<>endobj -1902 0 obj<>endobj -1903 0 obj<>endobj -1904 0 obj<>endobj -1905 0 obj<>endobj -1906 0 obj<>endobj -1907 0 obj<>endobj -1908 0 obj<>endobj -1909 0 obj<>endobj -1910 0 obj<>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<>1<>8<>9<>13<>14<>16<>23<>32<>33<>37<>40<>41<>42<>59<>62<>65<>68<>69<>72<>82<>87<>90<>92<>103<>105<>118<>120<>121<>128<>130<>131<>137<>138<>140<>144<>146<>]>>>>endobj +¸+JbÌ%7K®½ôÛ{†\I¶( +C‚vÉá̜9s†þvÔ¡3üuhإހ²üè,9£AoŒïþhˆï.>¥¤/`ëîëÃoGq2¦óÑ QNçã¤W?hš†cúƒŒsê ±xé|” ëǜF]Xï×Ø{¿ßI0ëàäNý´;²×áýo#ëž÷`ÐëñQ9õ‡Ýä¼~ښ!¸ò¹œµoÆÔ=£Ù †#šÍC‚x“LEž +fNÖ¯dIW“›)eZIãÝéì+lûÔéDÛVw”ta}2[)GÙJ™5^(ƒÁªå +™©…ÊH™…-sá•5I]S‹œ”|쵺ƒèw¶’òÒyRžÄ’ðô¨ÌÜ®Ï›»ßw³€Ž 8!!ä›H*UZù )ç*ŽëÂð#¯rIvAëRye–ÍÚk§ ᬅ#á Q:@Cä,épb2ü<#oã;ªŠ¹ð.H¼¥Eª‘.hQJIˆÔh+æx²yp¾Åf-Ó¿NᜧŽå.qdCù +%°t”JihYJáõ†¤Y “Éy3¤Kt‡À'­–­…úe2]Íåüé4”÷¸Ä0éÛZœZmì×6¯òBË$ ôpÏEW3¡Ÿ‰QvøMψ2,¼›|¦\d+#]ˆé0ÅÚ ·ð…å²Ì°ØÐu’ŠÒΫÌB­ÁŸ­ì²2Ø:PGe™Û¡(ÁËý«˜ pñöÀñžÁ@lkåWà'‰ù$°A¸ª(lé¡0ß*U2þ&Tlg뿃{€?ðz'ÀŠå¹ºxHèqVÅ~¶‹B¡ÛéŽÆul¨#ã ²g±D¢ac€@€Ò €øqë"ÆŸo›ÑW à½2Õw0l/$\¯V*’uçeîžN_õá¶#VÞïÚíõz€w.Aåښû‚ZY+“¬|®9V±äã~Ú¥Øú»-ºVï,ÊÆï¨t& MX©jY÷Óv—EYЕ5Ffžùþe?¶Y4¦ãžP¢òτŠ/"„,Z¢í„qkô@ö,›ß ̊SŠ‰c+_C5™(­N¸Kª‘Ýþ[KY­ÛAÚk 9ì¹Ká‹Þ¦xm¸ËýŠ…‚#A@Ðßq˜¯Un˜ú\·‡ÀøZHŸNŽ'—·ô eyütÁÍêIÐ&#¨Hö©;R\ÝΉ°ØÚÖwvõО<€Çâ ÑS±þß±P²zàrr?%˂5h^BuJvˆ7—×'ÿѹÎxу°BÌCÇ.T‰AÁêíR²,Æ~Ç/b¶“- [¬ý5í¹´‚R-Ìóö X ¿35RQ ˜Œ[–ÕÃ"¦:¡É"R•%ZhÈó|¥šgVsM¨²eÙ׺ÕË!lྶ%ÄaEø›I൯©Ôh€HuêAu}@ƒlú•[¦Ž¼1 íÁë«¢Íc吝ÐÂÁ- 1ÖÓ\º¬T鞈E é× +H¡ˆã:kPŸÃDæ6«v&¡©àۇÙ4¹þ|ÝäëFöÌŹÿãÕCzPkÄû‹‡i#xÜmmpK°L`vw= D¼ÿtýaGDÄvüPZo3«Ý1 <’ã8y wxá&µt|U•%”Õ(xS6±Ø egÓÃûÄ>²+Lë¥$Så©,cØ˜Ï ŠŒN¸#ÔW è6ŠÄh«ˆÁßaÍÀ;fuœ(<eùtÂ*^ Øa‚–¤-t´JA²(>,·¶ˆ³U $h€y=[ñ¢”Î…Ä>Üaí¢7ÀĢɝLß+çM–êxÇÄÉô8¹›†){~+ Á „|Ì$ằÄ}¸¹Â¥¯Ì•±Ú.7û›ËV®x¾™ |GÈî›AOíþօëû_WöbÉ1§PÒ%È8~H·$ ŠæÁò“Vïs©C7.of31u1&@‘‚'¡8í›Ñþ2>¿F!»Ÿßàù¿ŽÁy7êu§¸{=;úóèZõ dendstream +endobj +1400 0 obj<>/XObject<<>>>>/Annots 810 0 R>>endobj +1401 0 obj<>stream +x­WÛnÛF}×W üR–"u±À(ìDnĊk©1Šº(VäJbBrY.iE/ýöžÙ]Z²£}h0¼ìΜ9sffõW'¤>þ†tÑ`LqÞé‹>Þ<_îâ74ŽÆ¸æ ÏDäŸ2šw¢ñDŒŸ¿Çcqvðµ/&Øj/՚ Óhp.BNÎp?ã¶R´ê„ý·£~àç<#ÿÄ~ö€ì·4<ï‹so)‚5gh8ÄaÄNrŒÎÄÀ?yC48¾ßÆÈÂÁ^²g{W‹Np}Ná+P5žà&± õiŸþ¬·˂n(ÖÅ*]7ñiDô «’ôxZèšÞé¢Pqýø¦ë>†"êRdº¢H|£•®Þ,¾túÔ Çb§s™/åü2¸R:ï½èŒ?þ¦ë´1Šê 諔¢Û4®´Ñ«š>^ÎèVr­ØzÓ»,UEÍ^œûU¥óÖßlÁäª.ß®"oíˆXçÁUcæ;8 &€éÛ˙ø4AsxÝÔvc,+‰mZÑNý¿¿â4Àãµ¼xwÜÜ¡Éø«ëÛÏçї*„7wˆåÍ íUÏQJp¸{"dÂc¥-`WÉ +„â2´A§Ï4¦ ¦0Æ31ñ¥Žñ£d2À!?Æ#q~y{u‰Ù®y:Ñ{79ŽÒö°Êqá¼î¶ôÎú8&ÿßï7Üìøò¯¬Q„DÁA8°ãé¢óKç¾p,Jendstream +endobj +1402 0 obj<>/XObject<<>>>>/Annots 813 0 R>>endobj +1403 0 obj<>stream +x•W[oÚH~ϯ8êK©Ìý’Jû©¢&„ºR¤Õ`aÛãõŒüûýÎØ&)aVQÛ3çþïœþsÑ¢&~Z4hS§O~|ÑôšÔow¼.u‡<·ñ/“ºƒî íõÏtݳPî5Ë_óo­nßP§Õö†S»Ùòâ-¢…³Ð^áìœi¾{òýfyѸíR«EËQô‡ZÎb“–~íAù™6:´´ADRHH%~&c™XQžn2H²šìVªŒ–£YãnFvýFYzڏ)Èԫ̌GË­¤HXil¥Ž|¨[Ë/Ë_Mª·:^.ÔB'é¤ÔڔŒ²’„%<{qå˜çëø’"íCg¯¨‘ÊL§æ`;•zgi¾Ž”ß°~ªÒÆ.ÜÙNۓ{é|A]”91 wò4€>ÏîaMEˆl+qÓna=ÆÏÔZþHi¦×‘Œùg;¾ª½ <šÊ“5œª(GzVwÓÅãè»7¾¿¿<1¹œÜO'KoòsrI+w©3ì_ÒÓôf鹧Õ9-—óëÑd^^†Ôby]¾ˆ$8Ñ ùêØã£ÆíµºE­ë ŠTQVdÖKwQé±­Ì(Æìt¿ÉÆè=VêmÆJm®6häC  ¹9Ð/½¦²Û£”ýšQO—%âµÐIñáx‹‹-!˜ÙsÜXŒ5Äâð.—.û܈ñí…Æ (7%6uÕ_’|•èÚB«å#t¦ ¸pœNä©/€CBΔ‹Ñjt}t µI4/ŽVœƒt:+ç"Å"Ò®ãão¤“Pmrh‚‰7]]!onß8ªÄÝÒµ$’ó™Å TO1.Üp‹—üÂHe^è¹æþ Ÿ¿V·+êx @w`¤€¢ÄpŒ‡=¤§ä4ù9»žŽéúëóóõøán:ºý†Þý›Fø€.?®¿L˜öŽ  N k(UÂyñi†D|R‹‘ˆÌ>Ñ'°É'zIÎPEÐUÈ\0-(¶™Žh«wÄq¹ ÈЈJr ¤ubkVuûHø®¤õ—À“k碽rVÔÈH?ϔ=Ð ¹¬8>C/#ŒŒÂndýèM!ò¡²«‚·ñ•Î^6™ÎSN³ûPV2oåïZ"— Y4%WÌÍ!|ÉЃý`&9=?nXo*0c¾v«óÍÖ£ÑVú/®@&^cÔ$ás­ì¨6ca*©“ÓÌT¶(BÓE¿GYcïL*}hÇCL˜ œp:‡Œˆ×‚ \A·ÚìÀ’Ç$@ˆòÙ?¤õ­¹ÀÉ<ÈënÁ#U2?_õŸ¯†¿;Ã|3ÀÖÁ4ÎêrÃ%ªD®zô8y Å¼í2êŠÈŠéˆÎCÚÁ :Æ`úÂ%|Y8·ÑµdmÀFPJ5Ügn éãrÕȳ2Ø™/ç‚ã†àgG*:ñÝ”*ë[ëk ·Ëf}³S‘hÁìfÌ©$a²à:C¼Ä ŽðŸÝ÷è/lY(³ ŸK8½íB+¹.–nbt 'õÝꂶȠ)^…Š¸×ÞLk'+ |â­È¡(|—w—/,“Çið]f‰Œè‡[K¾Ò÷ùôþÇlÌûÛ®ƒ½°®µ–GüŽ×ã5ãܪýWšÝM¿jšcV¶ð<_ž“ë|”+÷¾JôénvN°ûQp.«Y|´û4ÏÏI÷ +éz»÷–žëÈèKn€ô˜Û{­_Ü2¼³©ÌÕµ¬¨1÷x?)m`¦îKnœ›²Æê´¨Vì(ñ”1ÃLÇLlN±ƒ˜=F%÷¸Ji×ü¬‚;•S<¥«Q.à:¯ +øF³c¤ªPa#¶ äé ¸\Û ß—Æõj"-V´ÌqµÙ®u¶Õ0ÊÄ}¦d…aIÙ­>þ72ìP¿×+vìÅõÃÍ5aòüâ6k?w =wC«R >h^ýÏE±Ûzý^»„e§Ëú&ˋ?/þ¦xendstream +endobj +1404 0 obj<>/XObject<<>>>>/Annots 816 0 R>>endobj +1405 0 obj<>stream +x…V]Sã6}ϯ¸³/ 3àÄ&_ì ,-3» Ûd¦M[ÁZlɵl(ýõ=W’xËB†€eݯsÏ=Ò߃˜ÆøÄ4OètFi9Gc¬¾~ÿu0IâhFÓ©¤É|-ÂSAkì_,°¿ûªïؘ&É4Ši²˜ãÿÙ<šS-iß÷ö&“Itö&Øï¶^l£«3Šç´Ù#ÁÙ"¦MæòÓ&þ¡tf-%cd»–õƒJ%݊ôž’£Íw˜N(†›ž$s¤¿É†›\µÀ¯•² ­Í“Щ´ô¨šœ^{½M"ºÑ’Ìžs•ædtñD¢ª¤¨aKM­UúŽ­E¹áâÓ(ápYɚC¹± ¶â¡ªÍ^‡Õ~0J %ucIixìÞf¦JG´É•%am[²u.“xµ¸”屐v“KòŽi×6î)ì +Y¢à¢ BÝKÔdÒ´­IíI5ìP›& +>“Y4áb®5™:ó儵Ø6‚vßpõ³Â¶Cܓ©Ð€Æ‡èvu¹=:þ_ËàåâAú¾NC_‡¤iA¶­*S7tŽ´ý–®õCY&3N‰`àÉæÜßÎÜ ' ¦¤Úˆ’“éjŠèšÑ ¨åqgjgÝõʓñ6 ô§¦¬ +´ÄΠ\üNºÂÑÎM8ôœ£ž¶Ã¥_\I­d¶=êE:£´–¢‘T¶E£*xJM¥P ºŽ&M™²÷p´ºù²¼þ1û0Óñ1½^HŽI6iEÛ£s„„€†-wQjô~;œþºš*q8MM¥˜™l„*™Á\¦j”c—…5\.û]áøçì7¯µ(eÎ= +ËáJÁtW˜(z<ïÔµ,¤àÞVµBšÙ (%‚eGí sÃ…yä® Aà‚B´Žž5}‚c:c]‰£Éim™F üńPøù34ñ¯.AhãË÷ݾJ@pÎi$ÿaúŽ‚Õ;F]Óz{NãÙxüŽA¦j™6¦~¢2ØÌßµyc°XÚÞ¨T̼:þ8…'Rs‡˜×atHX†IäH³kôSXþ’{Z?ÏR ·£§„Z©æ ̳i­*”ÉCÇ܄wØA¥ÁTí'ÞÂKÙ/–Ö׫c™›Oâe“×Y{1^Nœ1e%˜T/]àõòËÅr»u +½°(µPÿÂċk¦ö{œCùP,´…¥]Ýi¯V~D½Ãˆ~“8 x|^ƒ&éCPŽÌ‰Ä‡^XœsÚgû`SVì +&;œ²Õèê-UõoŸõ0eA«½ÄY à8Aßµ•@¾¶2Ú:• ¡^œßZY?­C/WÏ­lj¡-4Ó„:¡¾1ÑVBÿA½€ÒòòsŸáÌ ;zèð~¥Ó¢‡^CÀ†pè½ì}¸ÂùF—àPm +öèjöâ’l¾Þl>ÑG\3©3ƒÎ»ϝ±/n ›n1¬Na¬ÑOÓò ÀI© ¢ån<(+wp ëÚ:ºZ„bܱƋSšLÁõٔõƑ’nkóÛ7🵙 >éLNæcZöލj2[D³i‚ûöƧSöñi3ø6ø©‡½endstream +endobj +1406 0 obj<>/XObject<<>>>>/Annots 825 0 R>>endobj +1407 0 obj<>stream +xuWïoÛ6ýî¿âP`X +$òoÇ)Pl+ºnöak ú…–ÎJÔH*Žÿû½#%ÇUR´‘-éx|w÷îýßdN3ü›Ó킖ÊëÉ,›áÉùòéÉby—mi3_g ªi¹ØdËþÎÐçÉz•­h3[d3¼œo7bïäåö.[Ój¶J/ï¶X™îä%6¡åÝ +^WÛ[|Žé0™Ï—ò +^Vâs}‹eénX¶X‹ÅhÙ,Ûn|¸¸R í:›÷–Ë5ÅÞíÆqÂzúáŽ3ڐÍí–vEÌžäWŸ¸µ.覤w]é_ï¾MÄz~›¬o–Å®¸úØg‹.Ú6ÉhEóyo´¸Í6b´«˜¸Vڐ* +ÇÞÓÁ:Úw%°É.éÞµ7ŒG†•gOړWõ^ý¯™ue&X¾[£L[©ó0£$3bó•íLA¥¥`“«›ÀyÕè\™ §ý*Ty%`ÿŽÛSP÷LÀƒ®q±ØDxT ˜{F L'ۑïöµ¤."Êè7ãí5µÉ™g&} UÊS^©¦ä.‘9¦íõÿ5ÁôÈT«,Ó")‡`zJ<©”j´¯IòVàsör\ +¸¨°â¼îòJ>%†\5òé<›ƒD[±i)8•ßÃøØ »fôYJ"µA=›€? ä„à .ØÀŨ +¥³]Kö@-[¤ƒŽ•¥kº&0;ñ«qÞkò÷ÚOª)ˆÈnðý+„ÈY? M”£Zrž˜´·]ŒÄ.yB£[ë½Þ€kü‘6°1ÖJÁ›JáWº¬C˜³ „³dq(ûQJëÌ@Ö ½*ømٍ¶<8 #szuQ"AÈ0hŽÅÑ_@0>Œ+ôÞRcÁ#ï;©¡¬êwF$h*<ª#_s[·Yël°¹5>óõž>ú>Ý1³1S£ãz8D¢ŽÈòvä¶}ì#í|ËyÌmˆ´ l„欥ðcŒo +(iºìœ 8b#åÁðÜ·O”–×(æ8÷_ÐbÛÃhé}KÆÚ{ø³]YŔ ›ð}V•Ë+°Ó_ƒØZú @‘‘nÀ„ äËs(xzÅ>…žÂ>òžZUBöcBûf:=ë^ú6˜Ç*5ënØ)Cº9ÄÌN?¼ Âï’b%µŠÊ~©XhF³‹ô"íA–±sÖ¡ÿ’„è¤ÈN¥0©·Ý?h ~×VâE«ؘØIñ[ýŒF¬µ)ù‚È‚³"®CÆ؇V¹Z +"ß¿‡(R,Ã$·Ձü Jãêþ)ý’à +ŠÔW´Ðªl¬×þډ´ãÿ»éZæ’jžõhß ºÉMW0JæBTs6Ð^¡JŸTZØӈŠûô@ ªAA,¥â~T¹°å(]/H!X<Êaa%/‰D”ᗰEz' hTÎKGò +ó¶3Ðqøc½gAkDÖúaÿƒ¼xK™cª9¥R! L”Gb󞡱yJ…‘FåD—"ÁhåØcŽ;x€šBz#£Ðْ°Qø²õçDŢؠ³ã€Œuƒ +:“Ñ{†·â"]ƒ~©è"Æ)uëG0-#Ýæ3™áˆe/l=x¥ÅƒÖiÞú9’—"qTŒi®‘2‘“¨bµiöÚߓoUþlVïD*Se‹§ÂÈj6ý°îÏXWѼM¯†²]û4=Ǒ7Ë®0(2i¸‘yF_.%ð “R§„J}@R‚¦8¸8·ôfüÖ¡Mm#“âˆO!æ=s 'èá=¼$Ý`˜ v!p0)ž²°ó›ú(çÙj¹ ›Å:Ûâ'µ3zKóÙçááe<¨½¥içÝÔXœúz!5zû2û©-Úúk†Ôõ ŸTöfÀv1›ð—rÌUĚHMC0}^DuÞ¡Ï\ZóTÓc†¯ú·¯D¯¤-…èŒïCDý¸—‰¨(ÚcŒ!ÁÂ(Œú~TÆ$µ2ɛ ûCOëUK‡Ã#„ð:Ê,dªÆ!.Áz…ÏH˜ºe*‘ +ÕɍWci3 äGœ¬p$„¾EQ)ôáõ­ç¼s:èÉ®1uхñÔkqÈE" +&¤Û§ß$øá²^®…!Ïá¬6Ûl³^à×^ϗYüûnòÏäóŅ#endstream +endobj +1408 0 obj<>/XObject<<>>>>>>endobj +1409 0 obj<>stream +x•WÁn7½û+¦ºTbY²lÙ)ЃƒÚ€&uµ@_¸»Ü#.©’\Ëúû¾îZ®lŠ @Â%93oޛGýs4£)þÌèâ”æ *Û£édJç—óÉ%]^àߧø4Õòát>›œ½õavúéígoø¼<:¹9£ÙŒ–5‚/./hYO§´,Ç­*WÆéɇ口)Ÿ.rY—+M¼trƒ|åè8¶Å¤ô®ÎËÍcÒ.…]^<ö’õ Yý¨-ýz¸ßDŠ;çÝ®õ]¤­I+Jˆöæ5•.ºæ{ÒJ%Z©H…ÖŽº¨+2Ž¼­tà(f6Ÿœr1:Dã]$_Ó7ÕŠ”Ãf>i\À“Õ>P¡ÊõV…*RéۍJ¦0Ö¤ ÚX»Š\ÆÿÀáQÙNsƕA+Îç;b-R*}¨HQ43µ)•Kv7ìä¤3(ÈJ jxÉ8Ð"eï†änPYëcz±Ûot½Q¶jGÎ'ry ®N‰ï\™f¥*SŽæúªU@ +)¢1À˅¦€ŸK¤°.B¦³éGœJ|`ôF…rE_ß'«B£éÑÛ®Õ 7S¨RII-'7Ÿhæ2…çg™¤·.éà”%‚ñ¿Dc2_LÜÿÛZJl4Ò£Ñí×åõý׫ßéúþþûµ:F…È ðW:L&á£o„j™9 0BѝÓO]&”À-Rö ìí +¡Ð9't›¸Ñ›à U0~À·iÁxiÕª³|+´Ò¥R¦$væøŠÑæsã΁Ò¸ƒ¸+õˆñÁ÷í PÊ3@q1関¯/=|èÏ zD,‹R¡uð8ÑrŒ†pó¹ +ôQ•¢g€CÁu  þr¶¡ +Â@{c:HöۗÏÏÀxmó5sB˕h£ö òF +òŽ•^w–ÑÚ1K+¿Åÿ?çf¥NÚXÖÔADHÍvz~ôífdÁFÒ š“ïPc\ùÎr_¢ï«¡•ßRò|&øª+Áþ}àdjÚø ҘНä@­Zó.”Á:÷N8±ÑÕ[QYŒ²6 …°Oa±30­Ôf+ÔBó!ìˆbWTP&  !Nm¿°…”µHa­õFØ~€O”éÈÊË3.7A‚"{¾MøÙ· yoeh¾nPE=7‹ÁæÁVyÁàyr3XÅ Ïiª"Ӎ Ê»—y±KU·¿ F%t]¥²óù4ëH°BËøJžQ=Žº…ó0¨¼û™íráM(ù´£QU<˜|Ú`ÃNŤcHٖÌE. ‚–ãŽâçҀÍ,ô„Ñ(L•¡–[ÀGªú²ìš‰Ì29 +o²¶Ó!aú‚ÖŽE ˜£nyÌX嚎Gâ9Æd©LÄ÷Ñ@Žà;ÌyMïçEcpÚ$ö©WÓݚ"( 6\“IN!ƒ³ÿ(áÌÜôðA&c´¶>¬ ¹~R%[Ýë„@ÀBÞ ÃàkÖûµ°!I"ô‚”¾‚¯Q9òÏä–3N{ˆ$aL…NÎôXóÈɍÞ‡ƒ®ôƗ… yÓ¡®ÚÖ4\£ü€{_b~¿æxoX±“§ÎÜ€"z ãΙ'¹|ɔ 3ãÙéYãº'Zõ€SAø‰ÉÕµ„ßO ÂL*®ù uXܾA“:S!`åâ•G +2Š>ˆ¼Eà ŠH›©ÕÛ £^ÊíÛ¬ƒÃ÷öx½ÚbÜFÏSáîö·QO ¾—ÝKÏ.¡¥.fåŠ.G¥èOV0/-ÖgŸF©ÌAXNH°rpY³àʽ{Ý÷¶Pª—ã]{ GˬÐ-3ÃïYá¹ßo–ˆPh<ß|÷¼s„€Å$z{‹èumž~f]Ô(omÌIÓ[#ƒ”3fñ^Q×tÜååaøŽyÆã]Ùëè×5·]ŽÇnÃnŠy‘>’8ak0&ߍVž„›Ð6LˆYÌ*dç`#CrªÁÃH€Í0WyðÛ¾Ÿg|ӋññžƒAsç-è‰ú÷3Eõ?¤eÈ1ûñÉÍeÿSf¶Àï²Ë9-ÎøͅÇä·«/Ÿ¯è.ø°Yú͗x®ö9Ž~<8¾˜~’ÇçëGêÙâr²8?ÅS÷Íæ|îzyôçÑ¿ ³‹©endstream +endobj +1410 0 obj<>/XObject<<>>>>>>endobj +1411 0 obj<>stream +x…VÛnÛF}÷W ôRˆ©«%Ù@”XNؒk2Mƒ¢+r)nMr™]Ҋþ¾gvÉÄa †m‰;;—3gÎðë٘FøÓbBÓ9ÅÅÙ(Ñìê*XÒl¹Àç ~¤Ë%ýøcø2¢éh\µ¦³y0îlGptZÛñ|Lu '—Á¢ÿü]t6¼½¢Éˆ¢ÎKŠçOâó%¥¶ª<ÐI7†¬(ö‚¬4ÏÒüýëîŽþîÅtLpû|SÖF'M\+]z£Ç­ÑdÌÙ(ʔ¥Tå’b]ÖB•–åÊÖ¤Sª¥­-G¤X”TI“jSP­éYä*µôل/² hS“È­Æå<÷—™¨©Î$ü>ÉüŌèb<õiÆ¢±ÒEƒEeô>—!)•’ª) +^Dy"]vV0·µ¬,b9›JX+a”ç§>o|.Ù|±[±ÏOtÔæ (öRHU)ƒöÙd̘/¨ÚfºÉJ4­îî\ÎóR¥û¦M"ьLˀ>KÊÄ3‚%)F¦MŽ¨q¦5§•¡2 “9Ó&©Ë_a8bQ‰½ÊU­Pš¬Rvچ•ÂäªóÐϐpì,“µŒ)€&“ˆ̨’ä'8<ñÓÀJ´´åoµj‹Äys…•íÐy®\xÓC‘±a¤c™4˜!¿KÅ£È×÷è\c*£,\àÌ´ p»Ap#WÂK:»†¬¬mŠŠÉìo_aó¦t,`ê‚Lžž HSø ¾M‚^Ò€ç9Žßm>„ëÇ?׏®tAﻓÕû»ÍzÑ^×Y¯p´…yu0º©(Z‡Ñ‡Çݧ‡~c"OïTlU¡ra€©!8冞*´ÙÇèoYÛ¾‹#³›®—õ<•úè +.EáfÏh,(À3ð©ãð¶Å>À¤§˜:*LŒwäúٙڶæ^™ƒº¨}iå@$ ¤Â=l/òxÓþD8a:q <_Ü7M]ìkv<¼Ñ‹Ñ8˜M't1¹ –øÉûqþébC‚ùÔ©( ½EW‹JaNN¶,õ-+Qg0ÂKÿÈHÁC‰|K'Ù£ÑE—ÈÂ%ÄÚøq®]CCZ…á§û5áf·¥iÀë`÷Hw«dÙÝŒ)\Ý¿[Qøi­ +w°¿»¿_moÂ.“Vó»Ï[ºÙÜÐvÑú¯MÑfKëÕ#HöØEénu’ôKm¨ ®k Y`¡a ¥1 Q!­pˆçÎÈXªgéT’ô'œEˆ@Íâì©áÖ Ëå^¢c½”›2…°• Àcç­4¦Ê`èãLÆOß=Ñ恍´:o\–pkƒŒjÜ·²¦¦ +H®é^€3пJz1‡²Ž‡Î˳#­_T•V˜ .ÜEñ[°-fÁ…bËoиþ­°˜ Þ^"aĚä´íf¶ë”DE7•ý**߀å2ô(§^þ +#Ù«¢£½Ïå49ÒÇ@l[æ7æc©1[ÜíYFè1¯XÖG‹y³¬j•Àîü8Þ«’ñþþ~ +åw‹‹é¨]ýhìÒR8()ז(î™Æ°±Èe*Î|÷ñ¨]þ]®º7d‘ç•·Ç+évk»c ¸ÙCÌ1•;Šî©Ùª¿¤¤êÐáXåÞ[L*é©ßì­®å5ËVtwßÝ(.6Q®c,bÞª×NDX‘üûѹ#ž{ÉúžsڙWík†ì/º[Ã\íýÍåW.¼0^N/Üÿ{›Í—Áür‚fÁx<]²«utöÇÙâZÙendstream +endobj +1412 0 obj<>/XObject<<>>>>>>endobj +1413 0 obj<>stream +x½WMOãH½ó+J¾,#ç BiÀ0+$–e‡h¥‘¸´ív҃íÎtÛ$ù÷ûªÚ&ÁÌîÜDBìvwÕ{õ^U~i„ß1Oh:£´<Å#:ñz:?ÇëNSŽó9í_Üðäì,·K§gñ´[;"<}ÑíqŸ…W >G¾¾`Ÿá— ŸÒ"G$³9þÉäþˆéñBûš&ߏ†_Ni<«“s¬:þÚTT¯4¥¶,U•Q´6Ւ®n¼ùú÷Í׈rgKYñpMû—×w·7÷‹ƒÛMe¶”ØmL·9ílC™­~«i©k>yDƒñ4žð‰Š^Ta2$ã׶òš7¯ø G‹ë‡áíy›×ȧÊֈÍ9ÖŎLåkU:‹ÛM'³˜“=¾·5o¤j9zcŠ‚*­3ª-á W“¢(³žÖÈf]G´1Uf7dCòH  àìû{·ù ìRjïÕR“W;*ZY€ËA涩²ˆ¬#oJS(w×çûÇ}RX1Ôu:ä'=å¦èòìá´ÏÚëºYךY[ïM‚‡Úˆ½*…|ê•mjâ“tU;£±5Nbj½v/Ú yiap÷„,½%å}SꖬÞé+õÂE!À¿ÛÑéR@ljs>‚ID‘ù>r—f…UN+¨7«L¥Y®€˜2gd¤^ ”ø *Æ67NoÀö+t1}C]½!×éBm9„^ø®)€ *Àš ,o¬{F1Ô¡àҏ!ãÿZk·RkOɎpœEm,I¥)˜Õ¯Ú4|“TØîéܙªáƒ9~ß;•¯éÅ(A߬óÊJ®¼¥SeüôWêu0‡"¡NÃí_ ՗I “w‡‚mkz¯GÍ£:ŠŒÕˆ. jÌ©0 ¸–ü +r맑¨ô¹Ïè-hçPb"R[Õ¨ +OªEȹR­Qi@òÀÑ:ÑàèI¡i”¯”(ˆi‹®‡©Í~¢“ ;O™®v¢¹(xJƒZ÷ XL8ň-?amʕ%3Ï C²¢)Ö¯lÓõJ§Ï½³7­¯8z÷dã%I®þµre$*«u¹¶N9ƒô  %©j×Å,%ÖK Éù½ƒÛtwdªw¾“Ûr"ä\Á5¹ÚÎ±àë¹BS™dC”j'V–èNƒ¯fþj¼dXO½8w È?!Xg¦f'fƒÛu»Ÿï¯À3e +ȉp+J™”°ß/ÔÖ0N‚Åí×r~ˆ,1Ö¼‡¹[4l…ýïn7÷ÜÐ9Z±˜?Ó@EÿYø‘‡7`ÅEÄÊ_)o5xn <_‡™v|HÖH=ÄSy¢g„õ¯q¢¹Ðš*‡µWYª—³ ZÈ«”*ð,†.²êŠ¦kî¢ Ô©*u ¡Hwÿ¢ Õõ­ÞÁ¹BǕ3 +]JŸ‘l ôÚà†t×fÍv¡e1]Þ¶„‰ØXz†Í6ót܉ñ郴'¿ƒglIŒÄËæ½Ó£ž²¸ˆÌ¨Ë60ôˆ´¶Òï6°nÌÜŸµ†¡3:……™c°),Jˆ£ð¤·0À>Á yš§EUS&¡¹…ÎzéfeҕdI¬”À-›J¦aÄp@ø¶.b®TòˆÀ œmÞKɀ1e Ø7¶T‹0BkL]Kê° X¶]þ#ï7ü2¢ ëÐH¦LÎâ9Þ1Qû† ¶KúD—ww]Fß/‡Âºívü w»y,Á0€PS¹BÛDp¾Oô-´”ýÔ9èâ;—8ßmhÍ*IžÀ|‚Á«*Õh èÈí¢T†gÀÂ&ÚC5Ì%!3jj[¢½§ˆGµS•/Xܘ€rz;…Ö®¹Á‘ÊÔ„÷ îèi<ÁȎß1ÈÃð(´H›g™±ҕª0â˜wÖÑÿKƒˆïæ„÷Ð~¶tÿçÖ&±Rô3’"´æÖ 0±| Y©îñ+F®{<Ȫkä-=LA¾)L½?iÕø:¤HsiGòv¸‚$ÙA`}|3Ãœ‰›”-i\¸Ä—ÃB¾Þ¸´ÏäÞW} ‡¹Ç7â¿Ì8Ó¹Ia§é®Mž¦KÌA›ÔÑð˼ý5ž¡ZæSšãó)Kéñò«Kzpö;Œ‰>Û#6LŽÓa¸Ýƒó$›|;;ÍãÙÙßàpy<½àå7‹£¿Žþ[H¥endstream +endobj +1414 0 obj<>/XObject<<>>>>>>endobj +1415 0 obj<>stream +x…VkOã8ýί¸Ë˜ }Qè~ã¹BÚa»­´r§ñØۡÿßsí´t2Ì „Ô¦ñ}œ{Îñýº7¢!þFt:¦ÉŒòfo˜ éät˜ÌhzvŠÏcü[Ieøa:š'gïý0žŸ$Ó÷~˜Ìq¾é"Ý;¾™ÒhDi‰ä³³SJ BâáÒü°6f•‰ü™DQXé­U]S†Ô7Y3F?~J>¥_ö†4ϐ7-ϵñ•´”›¦1šrÑ:I¦$<Ä¿6$­5֑rT‰¥—ÔH_ñ'Q[)ŠW²­ÖüVÆzMæGäÚ¼"áèA4™è²Ž&ɘ³>*ù¹&+8îæxiMCJK_l"?~"cwÖêYҕZ*/êG ᫵±Ï.¡ËJ¢óWÓÚ!ɍ.Ñy-{©3YÌÅÛW®Ør^ äP ªT $ŽHy ¡I¼…z¨6žq)më¼^ýÛPô*=‰ҕqNeµì@EZ*…ª[dG ôú!¥ ·¿®¤f¼X†æ©3Ôsó™5¢È…CÜ8Ö^?NzNP9â*keîZÔR`‚yÀÅW‡ˆÏ€áE/m)rI· :ïørLÛdoÏbUŸQÕ¯Rw‰Cá!]˜;8ãÀ­PSýJ@LŒÜR±éÚ,ÝdaTœÇ7s›LñÁdišJ0åü» +ŒY‡÷m ÅfÜöbxnW4¸ ‹Û?®ïÿ½¾§§§‡óÏçOOû ýgZr•i낖Àœáå`>L¥^¿±#'í ÃJë‹é6£ÂèƒR* ß ( ÊÕµ,~ÆZÃ@L  +Ôgåóa3Ê^m‘µ»jb$jå¼ ÒÑÛbµ‘çi¿ò¿5¨-`e H !º˜ rͬJÕ¬ð‹Ô>ðƒ¡QQ†·V +xƒ„]À +ÓÍHjHè¶ìU  Î^eºâL®â%4g´ðIr¹U+†4†°½†!¾UËÊÓN^ ¯¾ÊÌ:ù ³b¤mñ­“΁yºo<;¿üëöú.¥ƒß~ŒÖ¹í;¬[\º]æZ(æß.‘Bµö°ÃÒ¯YíƋK̊±%Vå­þâ»Áõdžpª%ìsh °óBàµ5zÙ' ªÛ4[Rã¾1õ‹¤%èêîCi⫄c~/¬N: ™ÁQ‰0¦ÙÀ¾g¿SAã_(eBz Ö àÎ=6C;ãVV¾(Óâ S֝ß^†h±ãݐ+d)Ú6>ۛTç? “n› 6'º“>SƧ— Yç·òÚØyçd˜ÂÊh UÔÞ¶¬âå që…^=ßÉuÝK‹$\]<î$$Ջ°¸è)š îÚ;)iŸ¹#`-Ny…A +}m¥Åb +rrŸ,$b)]/sP¨“0TQÇÖÞ![p‰ ӖœBSª…å h‡ï÷cAOÁ;FâoÅÀ¾Ï7g\>˜ð±PðEëM ÌÑU^ ­\ocÈ@\Õ2ˆ·›‰ü¶’„‚p7zØßÞ¾nŸÌŠw ÞC IÜaÐ̵ÅÔ^ÙûJµä šµ;Â:z£T¸A ^#Þ3„²Ù(»« Ôeûèì$м[E‚la•Ô’/o\$®q¹vÕã!ö@¢ŒJþÜñŽ-0&ì×åÈ ðÕ$2àÀ{ÅkëaomÚV°½ÎY›X=_·=ÞËêBÝÝƛIŸœÁ—º•ùø欳ýÑ ëýلf'ó¸Ì†¥‚Ö|ÁâEW&o·W$Ït°908Îy]yÛe¦³³dv2Æ¢ƒÇ£é_¿N÷þÙû¨¢ú9endstream +endobj +1416 0 obj<>/XObject<<>>>>>>endobj +1417 0 obj<>stream +x}WÛnÛF}÷W U€H²äk‚4@’&…&qcµE¿¬È¥¸1¹Ë쒒õ÷=3\J”׆Yܝ˙3g†ßOftŠß]Íéì’ÒêätrJgçóÉ%__áó^S~òvq2ýð‚fç´Èqåò2ÂñÓSZ¤£… ]=[|ésšÍºSãùN¾´–šBSêªJÙ¬;uO(TË´4Ú64¾½ùãîý—Þ™.>ÞšMè«k)®-3¶gi©©ö®ªQî<)ªUç39Ë÷Oi<;›Ì9Œx³ Z¢é’Ë啦®E[8Qȹt«ìÛ8yÞZóHK÷HÓºÉåäFá +Ÿ`ø )ëœ?rÞ[—¸U& ÐøozXUéWäêÆ8€ÕyÔ6냋ÐQi¬ž^½|Ä#¿ÓéÒ¬‚ökí§MUÃå7WØÌéÎÀ°V—®éè“kôKºiȪ]fY0G¡Ö©É·‡Ø©ÒÙU—7WØz΄T@AÊÒmÂӑ¢Ü±E¾‹ô— S¯›'þlS-µ…´?Œ‹ë¾Ò(bLÀ·×I$ގ™³¿Ês‹Â»RÝaí=xUéÔ +ÀßäGAš†‚ÚJŒ]«Òdduþ=£°¿Žú\ƒ0Ô adAôƒ÷:mÊ-Ý´5¨ÆixnˆIêl>‰Îæ±2 ÜÎßRe;²ü”æAÃ^ªP‰À4øÑÛãÞ#R¨µ,*s1‚† t?B¦Á¡xÂߝu +ÛÐèêþ-ۆ2“1PàcmÀ „Úºv¾‘D¾¾ã¸ÇÃΫ–ÒõcCߍ³ ñ1|3 ÍSÒáÈL + üØܬZ¯¤/€›±5ñÛŸl4ßëíïòTT™G4rªÐø»¦‡ g +NH[žwm™ìN•z­Ë¤oKpBQaVE¬KïJ[×® +’Ã}Xý³³}d}„„µ‚Tü–HC Š±æ̍]ŽzWèô«.ÒÂ"S+_õN$÷ó½‡Þ)çÞ'´ËEÛÔo;}ÒkÕt‚x÷ñ-nÉ!±»—£Î/:‡ãùžt҃(–Ÿq™ˆmfdYAzåbØêôÃ~dÆwiÝ5ûˆt“Nh±­£líﺬéu´øª³Ø‹Úˆ9É_ ¨hlh|›2ÂÁ@Ñ¢oªäîЛ"j€ªd.`Lä^kt@x€*t3RÜX®Xä$m¸ß9ùæ‡P1 Ï£@¥Ó‡óu|6ëÔXëõáq˜êëçN\n߉?Q·ˆDwad‰ÖFoè?»!{h6؍)KÈ÷‚£Œ'Ì1f…ƒhxEIæ0dò&lcÛÆ`¸lå’.h¬ÀvLI©ÖʔB ¨‡RñЃ6wƒê'ºÇ˜²ø*¬ÈhŽòdhR¨—©`ÖS§Ú"¾8½4ˆV¦<¹²í¥„%˜µÚظÅY¡ä ›6´#XO3ZnòŸYæÈB×pՑÃxòÐÃnÀ&à9 9íö‹n”–ÓqT‹8˜ÎA¬ö—¡¾?yn135ᄱŠP²9ÖZчÐöúÐï7·„@ÈiG‹~ÿHPÌk’Èꃜ١ÊÖ +C Ië©©ãøŠ5¼}'õÛùÿ‰6wÚ>1W~¬ÍÚ(úýÓ#|à {€Ô.:t~ñ@s‡ä‡ +x*«Â…ìæQöDøQ^Ô.î~‘?ý c2Ò)£:ðž„"òœ®kp;ÒÝòˆí‡é/xu‰«òøO˜âS-A>l&Ší“¶h€çT©tS‹5VMº<Á·égÎ^µîGºÆPc=‡™•÷Ï¢ë~h½)ƒ{Όæ®aºË–$™«”—%¨¥ÈÛᶥZ^o¨$ÇóœGÄ`É KIÖ º²>/XObject<<>>>>/Annots 830 0 R>>endobj +1419 0 obj<>stream +xWÛnÛF}×WLõˆhQ–%9€Ñ:møÁ®k+ ŠªVäRbBî²\Ҋþ¾gf©í^D¡Hî™Û™3£¿:! ð7¤ÉNÇåA0 ñd i4àzˆ¥¦DŒ¦gÁôµ§£éë'†á ¿rVƒAóñxÓ9âx8:ÃgNád ++þ[FOp‰ð”]Éi8“æ?ý0ëœ\( i– ”ñtB³XÐ4‹z+ë*¨,³kJÒ ‘Ø’6¶.)ÊRm*š÷pÃÕ £«w¤«(˜¿};û +Ìs¸à1û§a€Ë¸7Ó®¢sÿxo²?d“½ÇÚPµÒÙÜÞ<]=þvõ8ŸÏîŽ!{ýnkr+[g1-4¥Í‹JÇâ¼¢B9·¶eÌæ Ó¼Ê(ꇧH#Z¢¢nãûUdšQ\EÚ¹¤Î²M—r\ª¥è6!c«hI?“³IµV @ê(5‘-KUÙ×®BRf˖YI®ËAdMrt. \}Ó0H—p8[µ0ĕ¡F:$HFöÌ÷ÃìDFa|¯MÝŠÛ« .JhH¨ ‡ƒ:5 ½ vÇ|ê1 µÉ•¡]¦úJcBÀU¨qYÕű5>endobj +1421 0 obj<>endobj +1422 0 obj<>endobj +1423 0 obj<>endobj +1424 0 obj<>endobj +1425 0 obj<>endobj +1426 0 obj<>endobj +1427 0 obj<>endobj +1428 0 obj<>endobj +1429 0 obj<>endobj +1430 0 obj<>endobj +1431 0 obj<>endobj +1432 0 obj<>endobj +1433 0 obj<>endobj +1434 0 obj<>endobj +1435 0 obj<>endobj +1436 0 obj<>endobj +1437 0 obj<>endobj +1438 0 obj<>endobj +1439 0 obj<>endobj +1440 0 obj<>endobj +1441 0 obj<>endobj +1442 0 obj<>endobj +1443 0 obj<>endobj +1444 0 obj<>endobj +1445 0 obj<>endobj +1446 0 obj<>endobj +1447 0 obj<>endobj +1448 0 obj<>endobj +1449 0 obj<>endobj +1450 0 obj<>endobj +1451 0 obj<>endobj +1452 0 obj<>endobj +1453 0 obj<>endobj +1454 0 obj<>endobj +1455 0 obj<>endobj +1456 0 obj<>endobj +1457 0 obj<>endobj +1458 0 obj<>endobj +1459 0 obj<>endobj +1460 0 obj<>endobj +1461 0 obj<>endobj +1462 0 obj<>endobj +1463 0 obj<>endobj +1464 0 obj<>endobj +1465 0 obj<>endobj +1466 0 obj<>endobj +1467 0 obj<>endobj +1468 0 obj<>endobj +1469 0 obj<>endobj +1470 0 obj<>endobj +1471 0 obj<>endobj +1472 0 obj<>endobj +1473 0 obj<>endobj +1474 0 obj<>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<>endobj +1482 0 obj<>endobj +1483 0 obj<>endobj +1484 0 obj<>endobj +1485 0 obj<>endobj +1486 0 obj<>endobj +1487 0 obj<>endobj +1488 0 obj<>endobj +1489 0 obj<>endobj +1490 0 obj<>endobj +1491 0 obj<>endobj +1492 0 obj<>endobj +1493 0 obj<>endobj +1494 0 obj<>endobj +1495 0 obj<>endobj +1496 0 obj<>endobj +1497 0 obj<>endobj +1498 0 obj<>endobj +1499 0 obj<>endobj +1500 0 obj<>endobj +1501 0 obj<>endobj +1502 0 obj<>endobj +1503 0 obj<>endobj +1504 0 obj<>endobj +1505 0 obj<>endobj +1506 0 obj<>endobj +1507 0 obj<>endobj +1508 0 obj<>endobj +1509 0 obj<>endobj +1510 0 obj<>endobj +1511 0 obj<>endobj +1512 0 obj<>endobj +1513 0 obj<>endobj +1514 0 obj<>endobj +1515 0 obj<>endobj +1516 0 obj<>endobj +1517 0 obj<>endobj +1518 0 obj<>endobj +1519 0 obj<>endobj +1520 0 obj<>endobj +1521 0 obj<>endobj +1522 0 obj<>endobj +1523 0 obj<>endobj +1524 0 obj<>endobj +1525 0 obj<>endobj +1526 0 obj<>endobj +1527 0 obj<>endobj +1528 0 obj<>endobj +1529 0 obj<>endobj +1530 0 obj<>endobj +1531 0 obj<>endobj +1532 0 obj<>endobj +1533 0 obj<>endobj +1534 0 obj<>endobj +1535 0 obj<>endobj +1536 0 obj<>endobj +1537 0 obj<>endobj +1538 0 obj<>endobj +1539 0 obj<>endobj +1540 0 obj<>endobj +1541 0 obj<>endobj +1542 0 obj<>endobj +1543 0 obj<>endobj +1544 0 obj<>endobj +1545 0 obj<>endobj +1546 0 obj<>endobj +1547 0 obj<>endobj +1548 0 obj<>endobj +1549 0 obj<>endobj +1550 0 obj<>endobj +1551 0 obj<>endobj +1552 0 obj<>endobj +1553 0 obj<>endobj +1554 0 obj<>endobj +1555 0 obj<>endobj +1556 0 obj<>endobj +1557 0 obj<>endobj +1558 0 obj<>endobj +1559 0 obj<>endobj +1560 0 obj<>endobj +1561 0 obj<>endobj +1562 0 obj<>endobj +1563 0 obj<>endobj +1564 0 obj<>endobj +1565 0 obj<>endobj +1566 0 obj<>endobj +1567 0 obj<>endobj +1568 0 obj<>endobj +1569 0 obj<>endobj +1570 0 obj<>endobj +1571 0 obj<>endobj +1572 0 obj<>endobj +1573 0 obj<>endobj +1574 0 obj<>endobj +1575 0 obj<>endobj +1576 0 obj<>endobj +1577 0 obj<>endobj +1578 0 obj<>endobj +1579 0 obj<>endobj +1580 0 obj<>endobj +1581 0 obj<>endobj +1582 0 obj<>endobj +1583 0 obj<>endobj +1584 0 obj<>endobj +1585 0 obj<>endobj +1586 0 obj<>endobj +1587 0 obj<>endobj +1588 0 obj<>endobj +1589 0 obj<>endobj +1590 0 obj<>endobj +1591 0 obj<>endobj +1592 0 obj<>endobj +1593 0 obj<>endobj +1594 0 obj<>endobj +1595 0 obj<>endobj +1596 0 obj<>endobj +1597 0 obj<>endobj +1598 0 obj<>endobj +1599 0 obj<>endobj +1600 0 obj<>endobj +1601 0 obj<>endobj +1602 0 obj<>endobj +1603 0 obj<>endobj +1604 0 obj<>endobj +1605 0 obj<>endobj +1606 0 obj<>endobj +1607 0 obj<>endobj +1608 0 obj<>endobj +1609 0 obj<>endobj +1610 0 obj<>endobj +1611 0 obj<>endobj +1612 0 obj<>endobj +1613 0 obj<>endobj +1614 0 obj<>endobj +1615 0 obj<>endobj +1616 0 obj<>endobj +1617 0 obj<>endobj +1618 0 obj<>endobj +1619 0 obj<>endobj +1620 0 obj<>endobj +1621 0 obj<>endobj +1622 0 obj<>endobj +1623 0 obj<>endobj +1624 0 obj<>endobj +1625 0 obj<>endobj +1626 0 obj<>endobj +1627 0 obj<>endobj +1628 0 obj<>endobj +1629 0 obj<>endobj +1630 0 obj<>endobj +1631 0 obj<>endobj +1632 0 obj<>endobj +1633 0 obj<>endobj +1634 0 obj<>endobj +1635 0 obj<>endobj +1636 0 obj<>endobj +1637 0 obj<>endobj +1638 0 obj<>endobj +1639 0 obj<>endobj +1640 0 obj<>endobj +1641 0 obj<>endobj +1642 0 obj<>endobj +1643 0 obj<>endobj +1644 0 obj<>endobj +1645 0 obj<>endobj +1646 0 obj<>endobj +1647 0 obj<>endobj +1648 0 obj<>endobj +1649 0 obj<>endobj +1650 0 obj<>endobj +1651 0 obj<>endobj +1652 0 obj<>endobj +1653 0 obj<>endobj +1654 0 obj<>endobj +1655 0 obj<>endobj +1656 0 obj<>endobj +1657 0 obj<>endobj +1658 0 obj<>endobj +1659 0 obj<>endobj +1660 0 obj<>endobj +1661 0 obj<>endobj +1662 0 obj<>endobj +1663 0 obj<>endobj +1664 0 obj<>endobj +1665 0 obj<>endobj +1666 0 obj<>endobj +1667 0 obj<>endobj +1668 0 obj<>endobj +1669 0 obj<>endobj +1670 0 obj<>endobj +1671 0 obj<>endobj +1672 0 obj<>endobj +1673 0 obj<>endobj +1674 0 obj<>endobj +1675 0 obj<>endobj +1676 0 obj<>endobj +1677 0 obj<>endobj +1678 0 obj<>endobj +1679 0 obj<>endobj +1680 0 obj<>endobj +1681 0 obj<>1<>8<>9<>13<>14<>15<>22<>31<>35<>38<>39<>40<>42<>59<>62<>65<>68<>69<>70<>81<>86<>89<>91<>102<>115<>117<>118<>121<>128<>130<>131<>135<>136<>139<>143<>145<>]>>>>endobj xref -0 1937 +0 1682 0000000000 65535 f 0000000015 00000 n -0000000248 00000 n -0000001814 00000 n -0000001888 00000 n -0000001967 00000 n -0000002049 00000 n -0000002135 00000 n -0000002213 00000 n -0000002290 00000 n -0000002369 00000 n -0000002453 00000 n -0000002530 00000 n -0000002612 00000 n -0000002671 00000 n -0000002773 00000 n -0000002876 00000 n -0000002978 00000 n -0000003080 00000 n -0000003182 00000 n -0000003284 00000 n -0000003387 00000 n -0000003490 00000 n -0000003593 00000 n -0000003696 00000 n -0000003799 00000 n -0000003902 00000 n -0000004005 00000 n -0000004108 00000 n -0000004211 00000 n -0000004314 00000 n -0000004417 00000 n -0000004520 00000 n -0000004623 00000 n -0000004726 00000 n -0000004829 00000 n -0000004932 00000 n -0000005035 00000 n -0000005138 00000 n -0000005240 00000 n -0000005343 00000 n -0000005446 00000 n -0000005549 00000 n -0000005652 00000 n -0000005755 00000 n -0000005858 00000 n -0000005961 00000 n -0000006064 00000 n -0000006167 00000 n -0000006270 00000 n -0000006373 00000 n -0000006476 00000 n -0000006578 00000 n -0000006681 00000 n -0000006970 00000 n -0000007072 00000 n -0000007175 00000 n -0000007278 00000 n -0000007381 00000 n -0000007484 00000 n -0000007587 00000 n -0000007690 00000 n -0000007792 00000 n -0000007895 00000 n -0000007998 00000 n -0000008101 00000 n -0000008204 00000 n -0000008307 00000 n -0000008409 00000 n -0000008511 00000 n -0000008613 00000 n -0000008716 00000 n -0000008819 00000 n -0000008922 00000 n -0000009025 00000 n -0000009128 00000 n -0000009231 00000 n -0000009334 00000 n -0000009437 00000 n -0000009540 00000 n -0000009643 00000 n -0000009746 00000 n -0000009849 00000 n -0000009952 00000 n -0000010055 00000 n -0000010157 00000 n -0000010260 00000 n -0000010363 00000 n -0000010466 00000 n -0000010569 00000 n -0000010672 00000 n -0000010775 00000 n -0000010878 00000 n -0000010981 00000 n -0000011082 00000 n -0000011183 00000 n -0000011284 00000 n -0000011594 00000 n -0000011696 00000 n -0000011799 00000 n -0000011902 00000 n -0000012006 00000 n -0000012110 00000 n -0000012214 00000 n -0000012318 00000 n -0000012422 00000 n -0000012525 00000 n -0000012629 00000 n -0000012733 00000 n -0000012837 00000 n -0000012940 00000 n -0000013043 00000 n -0000013146 00000 n -0000013250 00000 n -0000013354 00000 n -0000013458 00000 n -0000013562 00000 n -0000013666 00000 n -0000013770 00000 n -0000013874 00000 n -0000013978 00000 n -0000014082 00000 n -0000014186 00000 n -0000014290 00000 n -0000014394 00000 n -0000014498 00000 n -0000014602 00000 n -0000014706 00000 n -0000014810 00000 n -0000014914 00000 n -0000015018 00000 n -0000015121 00000 n -0000015225 00000 n -0000015329 00000 n -0000015433 00000 n -0000015537 00000 n -0000015641 00000 n -0000015745 00000 n -0000015848 00000 n -0000015950 00000 n -0000016052 00000 n +0000000250 00000 n +0000001816 00000 n +0000001890 00000 n +0000001969 00000 n +0000002051 00000 n +0000002137 00000 n +0000002215 00000 n +0000002292 00000 n +0000002371 00000 n +0000002455 00000 n +0000002532 00000 n +0000002614 00000 n +0000002673 00000 n +0000002775 00000 n +0000002878 00000 n +0000002980 00000 n +0000003082 00000 n +0000003184 00000 n +0000003286 00000 n +0000003389 00000 n +0000003492 00000 n +0000003595 00000 n +0000003698 00000 n +0000003801 00000 n +0000003904 00000 n +0000004007 00000 n +0000004110 00000 n +0000004213 00000 n +0000004316 00000 n +0000004419 00000 n +0000004522 00000 n +0000004625 00000 n +0000004728 00000 n +0000004831 00000 n +0000004934 00000 n +0000005037 00000 n +0000005140 00000 n +0000005242 00000 n +0000005345 00000 n +0000005448 00000 n +0000005551 00000 n +0000005654 00000 n +0000005757 00000 n +0000005860 00000 n +0000005963 00000 n +0000006066 00000 n +0000006169 00000 n +0000006272 00000 n +0000006375 00000 n +0000006478 00000 n +0000006580 00000 n +0000006683 00000 n +0000006785 00000 n +0000006886 00000 n +0000006987 00000 n +0000007297 00000 n +0000007399 00000 n +0000007502 00000 n +0000007605 00000 n +0000007707 00000 n +0000007810 00000 n +0000007913 00000 n +0000008016 00000 n +0000008119 00000 n +0000008222 00000 n +0000008324 00000 n +0000008426 00000 n +0000008528 00000 n +0000008630 00000 n +0000008733 00000 n +0000008836 00000 n +0000008939 00000 n +0000009042 00000 n +0000009145 00000 n +0000009248 00000 n +0000009351 00000 n +0000009454 00000 n +0000009557 00000 n +0000009660 00000 n +0000009763 00000 n +0000009866 00000 n +0000009969 00000 n +0000010072 00000 n +0000010174 00000 n +0000010277 00000 n +0000010380 00000 n +0000010483 00000 n +0000010586 00000 n +0000010689 00000 n +0000010792 00000 n +0000010895 00000 n +0000010998 00000 n +0000011100 00000 n +0000011203 00000 n +0000011305 00000 n +0000011406 00000 n +0000011507 00000 n +0000011810 00000 n +0000011912 00000 n +0000012016 00000 n +0000012120 00000 n +0000012224 00000 n +0000012328 00000 n +0000012432 00000 n +0000012535 00000 n +0000012639 00000 n +0000012743 00000 n +0000012847 00000 n +0000012950 00000 n +0000013053 00000 n +0000013156 00000 n +0000013260 00000 n +0000013364 00000 n +0000013468 00000 n +0000013572 00000 n +0000013676 00000 n +0000013780 00000 n +0000013884 00000 n +0000013988 00000 n +0000014092 00000 n +0000014196 00000 n +0000014300 00000 n +0000014404 00000 n +0000014508 00000 n +0000014612 00000 n +0000014716 00000 n +0000014820 00000 n +0000014924 00000 n +0000015028 00000 n +0000015131 00000 n +0000015235 00000 n +0000015339 00000 n +0000015443 00000 n +0000015547 00000 n +0000015651 00000 n +0000015755 00000 n +0000015859 00000 n +0000015963 00000 n +0000016066 00000 n 0000016410 00000 n 0000016513 00000 n 0000016617 00000 n @@ -4301,102 +3779,102 @@ xref 0000019630 00000 n 0000019734 00000 n 0000019838 00000 n -0000019941 00000 n -0000020045 00000 n -0000020149 00000 n -0000020253 00000 n -0000020357 00000 n -0000020461 00000 n -0000020565 00000 n -0000020669 00000 n -0000020772 00000 n -0000020874 00000 n -0000020976 00000 n -0000021345 00000 n -0000021448 00000 n -0000021552 00000 n -0000021656 00000 n -0000021760 00000 n -0000021864 00000 n -0000021968 00000 n -0000022072 00000 n -0000022175 00000 n -0000022279 00000 n -0000022383 00000 n -0000022487 00000 n -0000022591 00000 n -0000022694 00000 n -0000022798 00000 n -0000022902 00000 n -0000023005 00000 n -0000023109 00000 n -0000023213 00000 n -0000023317 00000 n -0000023421 00000 n -0000023525 00000 n -0000023629 00000 n -0000023733 00000 n -0000023837 00000 n -0000023941 00000 n -0000024045 00000 n -0000024149 00000 n -0000024253 00000 n -0000024356 00000 n -0000024460 00000 n -0000024564 00000 n -0000024668 00000 n -0000024772 00000 n -0000024875 00000 n -0000024978 00000 n -0000025082 00000 n -0000025186 00000 n -0000025290 00000 n -0000025394 00000 n -0000025497 00000 n -0000025599 00000 n -0000025701 00000 n -0000026054 00000 n -0000026157 00000 n -0000026261 00000 n -0000026365 00000 n -0000026469 00000 n -0000026573 00000 n -0000026677 00000 n -0000026781 00000 n -0000026885 00000 n -0000026989 00000 n -0000027093 00000 n -0000027197 00000 n -0000027301 00000 n -0000027405 00000 n -0000027509 00000 n -0000027612 00000 n -0000027715 00000 n -0000027819 00000 n -0000027923 00000 n -0000028027 00000 n -0000028131 00000 n -0000028234 00000 n -0000028338 00000 n -0000028442 00000 n -0000028546 00000 n -0000028650 00000 n -0000028754 00000 n -0000028858 00000 n -0000028962 00000 n -0000029066 00000 n -0000029170 00000 n -0000029274 00000 n -0000029378 00000 n -0000029482 00000 n -0000029586 00000 n -0000029689 00000 n -0000029793 00000 n -0000029897 00000 n -0000030001 00000 n -0000030105 00000 n -0000030209 00000 n -0000030313 00000 n +0000019942 00000 n +0000020046 00000 n +0000020150 00000 n +0000020254 00000 n +0000020358 00000 n +0000020462 00000 n +0000020566 00000 n +0000020670 00000 n +0000020774 00000 n +0000020877 00000 n +0000020979 00000 n +0000021081 00000 n +0000021458 00000 n +0000021561 00000 n +0000021665 00000 n +0000021769 00000 n +0000021872 00000 n +0000021976 00000 n +0000022080 00000 n +0000022184 00000 n +0000022288 00000 n +0000022391 00000 n +0000022495 00000 n +0000022599 00000 n +0000022702 00000 n +0000022806 00000 n +0000022910 00000 n +0000023014 00000 n +0000023118 00000 n +0000023222 00000 n +0000023326 00000 n +0000023430 00000 n +0000023534 00000 n +0000023637 00000 n +0000023741 00000 n +0000023845 00000 n +0000023949 00000 n +0000024053 00000 n +0000024157 00000 n +0000024261 00000 n +0000024365 00000 n +0000024469 00000 n +0000024573 00000 n +0000024677 00000 n +0000024781 00000 n +0000024885 00000 n +0000024988 00000 n +0000025092 00000 n +0000025196 00000 n +0000025300 00000 n +0000025404 00000 n +0000025507 00000 n +0000025836 00000 n +0000025939 00000 n +0000026043 00000 n +0000026147 00000 n +0000026251 00000 n +0000026355 00000 n +0000026459 00000 n +0000026563 00000 n +0000026667 00000 n +0000026771 00000 n +0000026875 00000 n +0000026979 00000 n +0000027082 00000 n +0000027185 00000 n +0000027289 00000 n +0000027393 00000 n +0000027497 00000 n +0000027601 00000 n +0000027704 00000 n +0000027808 00000 n +0000027912 00000 n +0000028016 00000 n +0000028120 00000 n +0000028224 00000 n +0000028328 00000 n +0000028432 00000 n +0000028536 00000 n +0000028640 00000 n +0000028744 00000 n +0000028848 00000 n +0000028952 00000 n +0000029056 00000 n +0000029159 00000 n +0000029263 00000 n +0000029367 00000 n +0000029471 00000 n +0000029575 00000 n +0000029679 00000 n +0000029783 00000 n +0000029886 00000 n +0000029990 00000 n +0000030093 00000 n +0000030195 00000 n +0000030297 00000 n 0000030658 00000 n 0000030761 00000 n 0000030865 00000 n @@ -4410,1661 +3888,1406 @@ xref 0000031697 00000 n 0000031801 00000 n 0000031905 00000 n -0000032009 00000 n -0000032113 00000 n -0000032217 00000 n -0000032321 00000 n -0000032466 00000 n -0000032519 00000 n -0000032606 00000 n -0000032660 00000 n -0000032746 00000 n -0000032813 00000 n -0000032899 00000 n -0000033002 00000 n -0000033106 00000 n -0000033210 00000 n -0000033314 00000 n -0000033418 00000 n -0000033522 00000 n -0000033626 00000 n -0000033730 00000 n -0000033834 00000 n -0000033938 00000 n -0000034042 00000 n -0000034146 00000 n -0000034250 00000 n -0000034354 00000 n -0000034458 00000 n -0000034562 00000 n -0000034666 00000 n -0000034770 00000 n -0000034874 00000 n -0000034978 00000 n -0000035082 00000 n -0000035186 00000 n -0000035290 00000 n -0000035394 00000 n -0000035498 00000 n -0000035602 00000 n -0000035706 00000 n -0000035810 00000 n -0000035914 00000 n -0000036018 00000 n -0000036122 00000 n -0000036225 00000 n -0000036327 00000 n -0000036429 00000 n -0000036742 00000 n -0000036846 00000 n -0000036950 00000 n -0000037054 00000 n -0000037157 00000 n -0000037261 00000 n -0000037365 00000 n -0000037469 00000 n -0000037573 00000 n -0000037677 00000 n -0000037781 00000 n -0000037885 00000 n -0000037989 00000 n -0000038093 00000 n -0000038197 00000 n -0000038301 00000 n -0000038405 00000 n -0000038509 00000 n -0000038613 00000 n -0000038717 00000 n -0000038821 00000 n -0000038925 00000 n -0000039029 00000 n -0000039133 00000 n -0000039237 00000 n -0000039341 00000 n -0000039445 00000 n -0000039549 00000 n -0000039653 00000 n -0000039757 00000 n -0000039861 00000 n -0000039965 00000 n -0000040069 00000 n -0000040173 00000 n -0000040276 00000 n -0000040380 00000 n -0000040484 00000 n -0000040588 00000 n -0000040692 00000 n -0000040796 00000 n -0000040900 00000 n -0000041004 00000 n -0000041108 00000 n -0000041212 00000 n -0000041316 00000 n -0000041420 00000 n -0000041524 00000 n -0000041628 00000 n -0000041732 00000 n -0000041835 00000 n -0000041937 00000 n -0000042039 00000 n -0000042464 00000 n -0000042568 00000 n -0000042672 00000 n -0000042776 00000 n -0000042880 00000 n -0000042984 00000 n -0000043088 00000 n -0000043192 00000 n -0000043296 00000 n -0000043400 00000 n -0000043504 00000 n -0000043608 00000 n -0000043712 00000 n -0000043816 00000 n -0000043920 00000 n -0000044024 00000 n -0000044128 00000 n -0000044232 00000 n -0000044336 00000 n -0000044440 00000 n -0000044544 00000 n -0000044648 00000 n -0000044752 00000 n -0000044856 00000 n -0000044960 00000 n -0000045064 00000 n -0000045168 00000 n -0000045272 00000 n -0000045376 00000 n -0000045480 00000 n -0000045584 00000 n -0000045688 00000 n -0000045792 00000 n -0000045896 00000 n -0000046000 00000 n -0000046104 00000 n -0000046208 00000 n -0000046312 00000 n -0000046416 00000 n -0000046520 00000 n -0000046624 00000 n -0000046728 00000 n -0000046832 00000 n -0000046936 00000 n -0000047040 00000 n -0000047144 00000 n -0000047248 00000 n -0000047352 00000 n -0000047456 00000 n -0000047559 00000 n -0000047661 00000 n -0000047763 00000 n -0000048188 00000 n -0000048292 00000 n -0000048396 00000 n -0000048500 00000 n -0000048604 00000 n -0000048708 00000 n -0000048812 00000 n -0000048916 00000 n -0000049020 00000 n -0000049124 00000 n -0000049228 00000 n -0000049332 00000 n -0000049435 00000 n -0000049539 00000 n -0000049643 00000 n -0000049747 00000 n -0000049851 00000 n -0000049955 00000 n -0000050059 00000 n -0000050163 00000 n -0000050267 00000 n -0000050371 00000 n -0000050475 00000 n -0000050579 00000 n -0000050683 00000 n -0000050787 00000 n -0000050891 00000 n -0000050995 00000 n -0000051099 00000 n -0000051203 00000 n -0000051307 00000 n -0000051411 00000 n -0000051515 00000 n -0000051619 00000 n -0000051723 00000 n -0000051827 00000 n -0000052124 00000 n -0000052227 00000 n -0000052331 00000 n -0000052435 00000 n -0000052539 00000 n -0000052643 00000 n -0000052747 00000 n -0000052851 00000 n -0000052955 00000 n -0000053059 00000 n -0000053163 00000 n -0000053267 00000 n -0000053371 00000 n -0000053475 00000 n -0000053579 00000 n -0000053683 00000 n -0000053787 00000 n -0000053891 00000 n -0000053995 00000 n -0000054099 00000 n -0000054202 00000 n -0000054306 00000 n -0000054410 00000 n -0000054514 00000 n -0000054618 00000 n -0000054722 00000 n -0000054826 00000 n -0000054930 00000 n -0000055034 00000 n -0000055138 00000 n -0000055242 00000 n -0000055346 00000 n -0000055450 00000 n -0000055553 00000 n -0000055657 00000 n -0000055760 00000 n -0000055864 00000 n -0000055968 00000 n -0000056072 00000 n -0000056176 00000 n -0000056280 00000 n -0000056384 00000 n -0000056486 00000 n -0000056588 00000 n -0000056690 00000 n -0000057059 00000 n -0000057163 00000 n -0000057267 00000 n -0000057371 00000 n -0000057412 00000 n -0000057465 00000 n -0000057552 00000 n -0000057577 00000 n -0000057624 00000 n -0000057711 00000 n -0000057736 00000 n -0000057839 00000 n -0000057943 00000 n +0000032018 00000 n +0000032071 00000 n +0000032158 00000 n +0000032212 00000 n +0000032298 00000 n +0000032353 00000 n +0000032440 00000 n +0000032507 00000 n +0000032593 00000 n +0000032696 00000 n +0000032800 00000 n +0000032904 00000 n +0000033008 00000 n +0000033112 00000 n +0000033216 00000 n +0000033320 00000 n +0000033424 00000 n +0000033528 00000 n +0000033632 00000 n +0000033736 00000 n +0000033840 00000 n +0000033944 00000 n +0000034048 00000 n +0000034152 00000 n +0000034256 00000 n +0000034360 00000 n +0000034464 00000 n +0000034568 00000 n +0000034672 00000 n +0000034776 00000 n +0000034880 00000 n +0000034984 00000 n +0000035088 00000 n +0000035192 00000 n +0000035296 00000 n +0000035400 00000 n +0000035504 00000 n +0000035608 00000 n +0000035712 00000 n +0000035816 00000 n +0000035919 00000 n +0000036021 00000 n +0000036123 00000 n +0000036444 00000 n +0000036548 00000 n +0000036651 00000 n +0000036755 00000 n +0000036859 00000 n +0000036963 00000 n +0000037067 00000 n +0000037171 00000 n +0000037275 00000 n +0000037379 00000 n +0000037483 00000 n +0000037587 00000 n +0000037691 00000 n +0000037795 00000 n +0000037899 00000 n +0000038003 00000 n +0000038107 00000 n +0000038211 00000 n +0000038315 00000 n +0000038419 00000 n +0000038523 00000 n +0000038627 00000 n +0000038731 00000 n +0000038835 00000 n +0000038939 00000 n +0000039043 00000 n +0000039147 00000 n +0000039251 00000 n +0000039355 00000 n +0000039459 00000 n +0000039563 00000 n +0000039667 00000 n +0000039771 00000 n +0000039874 00000 n +0000039978 00000 n +0000040082 00000 n +0000040186 00000 n +0000040290 00000 n +0000040394 00000 n +0000040498 00000 n +0000040602 00000 n +0000040706 00000 n +0000040810 00000 n +0000040914 00000 n +0000041018 00000 n +0000041122 00000 n +0000041226 00000 n +0000041330 00000 n +0000041434 00000 n +0000041537 00000 n +0000041639 00000 n +0000041741 00000 n +0000042166 00000 n +0000042270 00000 n +0000042374 00000 n +0000042478 00000 n +0000042582 00000 n +0000042686 00000 n +0000042790 00000 n +0000042894 00000 n +0000042998 00000 n +0000043102 00000 n +0000043206 00000 n +0000043310 00000 n +0000043414 00000 n +0000043518 00000 n +0000043622 00000 n +0000043726 00000 n +0000043830 00000 n +0000043934 00000 n +0000044038 00000 n +0000044142 00000 n +0000044246 00000 n +0000044350 00000 n +0000044454 00000 n +0000044558 00000 n +0000044662 00000 n +0000044766 00000 n +0000044870 00000 n +0000044974 00000 n +0000045078 00000 n +0000045182 00000 n +0000045286 00000 n +0000045390 00000 n +0000045494 00000 n +0000045598 00000 n +0000045702 00000 n +0000045806 00000 n +0000045910 00000 n +0000046014 00000 n +0000046118 00000 n +0000046222 00000 n +0000046326 00000 n +0000046430 00000 n +0000046534 00000 n +0000046638 00000 n +0000046742 00000 n +0000046846 00000 n +0000046950 00000 n +0000047054 00000 n +0000047158 00000 n +0000047261 00000 n +0000047363 00000 n +0000047465 00000 n +0000047890 00000 n +0000047994 00000 n +0000048098 00000 n +0000048202 00000 n +0000048305 00000 n +0000048409 00000 n +0000048513 00000 n +0000048617 00000 n +0000048721 00000 n +0000048825 00000 n +0000048929 00000 n +0000049033 00000 n +0000049137 00000 n +0000049241 00000 n +0000049345 00000 n +0000049449 00000 n +0000049553 00000 n +0000049657 00000 n +0000049761 00000 n +0000049865 00000 n +0000049969 00000 n +0000050073 00000 n +0000050177 00000 n +0000050281 00000 n +0000050385 00000 n +0000050489 00000 n +0000050593 00000 n +0000050697 00000 n +0000050930 00000 n +0000051033 00000 n +0000051136 00000 n +0000051239 00000 n +0000051342 00000 n +0000051391 00000 n +0000051444 00000 n +0000051531 00000 n +0000051556 00000 n +0000051603 00000 n +0000051690 00000 n +0000051715 00000 n +0000051818 00000 n +0000051921 00000 n +0000052024 00000 n +0000052127 00000 n +0000052230 00000 n +0000052287 00000 n +0000052335 00000 n +0000052422 00000 n +0000052470 00000 n +0000052557 00000 n +0000052607 00000 n +0000052694 00000 n +0000052742 00000 n +0000052829 00000 n +0000052878 00000 n +0000052926 00000 n +0000053013 00000 n +0000053061 00000 n +0000053146 00000 n +0000053191 00000 n +0000053277 00000 n +0000053320 00000 n +0000053406 00000 n +0000053447 00000 n +0000053533 00000 n +0000053582 00000 n +0000053668 00000 n +0000053714 00000 n +0000053800 00000 n +0000053845 00000 n +0000053931 00000 n +0000053983 00000 n +0000054069 00000 n +0000054119 00000 n +0000054205 00000 n +0000054251 00000 n +0000054337 00000 n +0000054380 00000 n +0000054466 00000 n +0000054510 00000 n +0000054596 00000 n +0000054639 00000 n +0000054725 00000 n +0000054770 00000 n +0000054856 00000 n +0000054894 00000 n +0000054980 00000 n +0000055022 00000 n +0000055108 00000 n +0000055151 00000 n +0000055237 00000 n +0000055275 00000 n +0000055361 00000 n +0000055403 00000 n +0000055489 00000 n +0000055533 00000 n +0000055619 00000 n +0000055666 00000 n +0000055752 00000 n +0000055800 00000 n +0000055885 00000 n +0000056086 00000 n +0000056136 00000 n +0000056223 00000 n +0000056273 00000 n +0000056359 00000 n +0000056392 00000 n +0000056441 00000 n +0000056527 00000 n +0000056574 00000 n +0000056661 00000 n +0000056694 00000 n +0000056809 00000 n +0000056896 00000 n +0000056978 00000 n +0000057065 00000 n +0000057150 00000 n +0000057237 00000 n +0000057278 00000 n +0000057333 00000 n +0000057420 00000 n +0000057476 00000 n +0000057563 00000 n +0000057596 00000 n +0000057644 00000 n +0000057731 00000 n +0000057805 00000 n +0000057892 00000 n +0000057960 00000 n 0000058047 00000 n -0000058151 00000 n -0000058255 00000 n -0000058359 00000 n -0000058463 00000 n -0000058567 00000 n -0000058671 00000 n -0000058775 00000 n -0000058879 00000 n -0000058983 00000 n +0000058101 00000 n +0000058188 00000 n +0000058256 00000 n +0000058343 00000 n +0000058417 00000 n +0000058504 00000 n +0000058552 00000 n +0000058639 00000 n +0000058696 00000 n +0000058783 00000 n +0000058864 00000 n +0000058919 00000 n +0000059006 00000 n 0000059087 00000 n -0000059191 00000 n -0000059295 00000 n -0000059398 00000 n -0000059502 00000 n -0000059606 00000 n -0000059710 00000 n -0000059814 00000 n -0000059918 00000 n -0000060022 00000 n -0000060126 00000 n -0000060230 00000 n -0000060333 00000 n -0000060437 00000 n -0000060541 00000 n -0000060645 00000 n -0000060749 00000 n -0000060853 00000 n -0000060957 00000 n -0000061061 00000 n -0000061165 00000 n -0000061269 00000 n -0000061372 00000 n -0000061476 00000 n -0000061580 00000 n -0000061684 00000 n -0000062005 00000 n -0000062053 00000 n -0000062140 00000 n -0000062188 00000 n -0000062275 00000 n -0000062325 00000 n -0000062412 00000 n -0000062460 00000 n -0000062547 00000 n -0000062596 00000 n -0000062644 00000 n -0000062731 00000 n -0000062779 00000 n -0000062864 00000 n -0000062909 00000 n -0000062995 00000 n -0000063038 00000 n -0000063124 00000 n -0000063165 00000 n -0000063251 00000 n -0000063300 00000 n -0000063386 00000 n -0000063432 00000 n -0000063518 00000 n -0000063563 00000 n -0000063649 00000 n -0000063701 00000 n -0000063787 00000 n -0000063837 00000 n -0000063923 00000 n -0000063969 00000 n -0000064055 00000 n -0000064098 00000 n -0000064184 00000 n -0000064228 00000 n -0000064314 00000 n -0000064357 00000 n -0000064443 00000 n -0000064488 00000 n -0000064574 00000 n -0000064612 00000 n -0000064698 00000 n -0000064740 00000 n -0000064826 00000 n -0000064869 00000 n -0000064955 00000 n -0000064993 00000 n -0000065079 00000 n -0000065121 00000 n -0000065207 00000 n -0000065251 00000 n -0000065337 00000 n -0000065384 00000 n -0000065470 00000 n -0000065518 00000 n -0000065603 00000 n -0000065804 00000 n -0000065854 00000 n -0000065941 00000 n -0000065991 00000 n -0000066077 00000 n -0000066110 00000 n -0000066159 00000 n -0000066245 00000 n -0000066292 00000 n -0000066379 00000 n -0000066412 00000 n -0000066527 00000 n -0000066614 00000 n -0000066696 00000 n -0000066783 00000 n -0000066868 00000 n -0000066955 00000 n -0000066996 00000 n -0000067051 00000 n -0000067138 00000 n -0000067194 00000 n -0000067281 00000 n -0000067314 00000 n -0000067362 00000 n -0000067449 00000 n -0000067523 00000 n -0000067610 00000 n -0000067678 00000 n -0000067765 00000 n -0000067819 00000 n -0000067906 00000 n -0000067974 00000 n -0000068061 00000 n -0000068135 00000 n -0000068222 00000 n -0000068270 00000 n -0000068357 00000 n -0000068414 00000 n -0000068501 00000 n -0000068582 00000 n -0000068637 00000 n -0000068724 00000 n -0000068805 00000 n -0000068892 00000 n -0000068925 00000 n -0000068978 00000 n -0000069065 00000 n -0000069090 00000 n -0000069139 00000 n -0000069226 00000 n -0000069274 00000 n -0000069361 00000 n -0000069403 00000 n -0000069489 00000 n -0000069530 00000 n -0000069573 00000 n -0000069660 00000 n -0000069710 00000 n -0000069797 00000 n -0000069845 00000 n -0000069932 00000 n -0000069986 00000 n -0000070071 00000 n -0000070120 00000 n -0000070165 00000 n -0000070252 00000 n -0000070309 00000 n -0000070396 00000 n -0000070492 00000 n -0000070578 00000 n -0000070619 00000 n -0000070722 00000 n -0000070826 00000 n -0000070930 00000 n -0000071034 00000 n -0000071138 00000 n -0000071242 00000 n -0000071346 00000 n -0000071450 00000 n -0000071554 00000 n -0000071658 00000 n -0000071762 00000 n -0000071866 00000 n -0000071970 00000 n -0000072074 00000 n -0000072178 00000 n -0000072282 00000 n -0000072386 00000 n -0000072490 00000 n -0000072594 00000 n -0000072697 00000 n -0000072801 00000 n -0000072905 00000 n -0000073009 00000 n -0000073113 00000 n -0000073217 00000 n -0000073321 00000 n -0000073425 00000 n -0000073529 00000 n -0000073633 00000 n -0000073736 00000 n -0000073840 00000 n -0000073944 00000 n -0000074048 00000 n -0000074151 00000 n -0000074255 00000 n -0000074359 00000 n -0000074462 00000 n -0000074566 00000 n -0000074670 00000 n -0000074774 00000 n -0000074878 00000 n -0000074981 00000 n -0000075083 00000 n -0000075185 00000 n -0000075554 00000 n -0000075658 00000 n -0000075762 00000 n -0000075866 00000 n -0000075970 00000 n -0000076074 00000 n -0000076178 00000 n -0000076282 00000 n -0000076386 00000 n +0000059174 00000 n +0000059207 00000 n +0000059260 00000 n +0000059347 00000 n +0000059372 00000 n +0000059421 00000 n +0000059508 00000 n +0000059556 00000 n +0000059643 00000 n +0000059685 00000 n +0000059771 00000 n +0000059812 00000 n +0000059855 00000 n +0000059942 00000 n +0000059992 00000 n +0000060079 00000 n +0000060127 00000 n +0000060214 00000 n +0000060268 00000 n +0000060353 00000 n +0000060402 00000 n +0000060447 00000 n +0000060534 00000 n +0000060591 00000 n +0000060678 00000 n +0000060774 00000 n +0000060860 00000 n +0000060901 00000 n +0000061004 00000 n +0000061107 00000 n +0000061210 00000 n +0000061313 00000 n +0000061416 00000 n +0000061519 00000 n +0000061622 00000 n +0000061725 00000 n +0000061828 00000 n +0000061931 00000 n +0000062034 00000 n +0000062137 00000 n +0000062240 00000 n +0000062361 00000 n +0000062409 00000 n +0000062496 00000 n +0000062543 00000 n +0000062629 00000 n +0000062676 00000 n +0000062762 00000 n +0000062803 00000 n +0000062848 00000 n +0000062935 00000 n +0000062980 00000 n +0000063066 00000 n +0000063099 00000 n +0000063145 00000 n +0000063232 00000 n +0000063257 00000 n +0000063303 00000 n +0000063390 00000 n +0000063436 00000 n +0000063521 00000 n +0000063565 00000 n +0000063652 00000 n +0000063703 00000 n +0000063790 00000 n +0000063839 00000 n +0000063926 00000 n +0000063974 00000 n +0000064060 00000 n +0000064125 00000 n +0000064180 00000 n +0000064265 00000 n +0000064290 00000 n +0000064343 00000 n +0000064430 00000 n +0000064480 00000 n +0000064567 00000 n +0000064600 00000 n +0000064719 00000 n +0000064805 00000 n +0000064848 00000 n +0000064935 00000 n +0000064978 00000 n +0000065065 00000 n +0000065106 00000 n +0000065169 00000 n +0000065256 00000 n +0000065314 00000 n +0000065401 00000 n +0000065495 00000 n +0000065581 00000 n +0000065622 00000 n +0000065665 00000 n +0000065751 00000 n +0000065799 00000 n +0000065886 00000 n +0000065927 00000 n +0000066014 00000 n +0000066058 00000 n +0000066145 00000 n +0000066189 00000 n +0000066275 00000 n +0000066332 00000 n +0000066378 00000 n +0000066465 00000 n +0000066514 00000 n +0000066600 00000 n +0000066633 00000 n +0000066687 00000 n +0000066774 00000 n +0000066825 00000 n +0000066912 00000 n +0000066963 00000 n +0000067049 00000 n +0000067103 00000 n +0000067190 00000 n +0000067240 00000 n +0000067327 00000 n +0000067384 00000 n +0000067434 00000 n +0000067521 00000 n +0000067571 00000 n +0000067657 00000 n +0000067690 00000 n +0000067754 00000 n +0000067841 00000 n +0000067866 00000 n +0000067928 00000 n +0000068015 00000 n +0000068040 00000 n +0000068089 00000 n +0000068176 00000 n +0000068201 00000 n +0000068249 00000 n +0000068336 00000 n +0000068386 00000 n +0000068473 00000 n +0000068517 00000 n +0000068604 00000 n +0000068648 00000 n +0000068735 00000 n +0000068785 00000 n +0000068871 00000 n +0000068921 00000 n +0000069006 00000 n +0000069055 00000 n +0000069140 00000 n +0000069213 00000 n +0000069260 00000 n +0000069347 00000 n +0000069372 00000 n +0000069461 00000 n +0000069547 00000 n +0000069610 00000 n +0000069696 00000 n +0000069729 00000 n +0000069790 00000 n +0000069876 00000 n +0000069901 00000 n +0000069957 00000 n +0000070044 00000 n +0000070113 00000 n +0000070200 00000 n +0000070251 00000 n +0000070338 00000 n +0000070423 00000 n +0000070510 00000 n +0000070566 00000 n +0000070653 00000 n +0000070703 00000 n +0000070790 00000 n +0000070855 00000 n +0000070907 00000 n +0000070994 00000 n +0000071050 00000 n +0000071137 00000 n +0000071185 00000 n +0000071272 00000 n +0000071320 00000 n +0000071407 00000 n +0000071456 00000 n +0000071497 00000 n +0000071584 00000 n +0000071628 00000 n +0000071715 00000 n +0000071760 00000 n +0000071847 00000 n +0000071891 00000 n +0000071978 00000 n +0000072022 00000 n +0000072109 00000 n +0000072151 00000 n +0000072238 00000 n +0000072286 00000 n +0000072373 00000 n +0000072446 00000 n +0000072494 00000 n +0000072580 00000 n +0000072605 00000 n +0000072658 00000 n +0000072744 00000 n +0000072769 00000 n +0000072823 00000 n +0000072910 00000 n +0000072935 00000 n +0000072998 00000 n +0000073085 00000 n +0000073148 00000 n +0000073235 00000 n +0000073289 00000 n +0000073376 00000 n +0000073417 00000 n +0000073520 00000 n +0000073623 00000 n +0000073726 00000 n +0000073829 00000 n +0000073878 00000 n +0000073933 00000 n +0000074019 00000 n +0000074087 00000 n +0000074173 00000 n +0000074248 00000 n +0000074335 00000 n +0000074405 00000 n +0000074491 00000 n +0000074570 00000 n +0000074657 00000 n +0000074714 00000 n +0000074796 00000 n +0000074882 00000 n +0000074957 00000 n +0000075044 00000 n +0000075117 00000 n +0000075204 00000 n +0000075282 00000 n +0000075369 00000 n +0000075418 00000 n +0000075466 00000 n +0000075553 00000 n +0000075578 00000 n +0000075626 00000 n +0000075713 00000 n +0000075738 00000 n +0000075786 00000 n +0000075873 00000 n +0000075937 00000 n +0000076024 00000 n +0000076079 00000 n +0000076166 00000 n +0000076213 00000 n +0000076300 00000 n +0000076349 00000 n +0000076403 00000 n 0000076490 00000 n -0000076594 00000 n +0000076544 00000 n +0000076631 00000 n +0000076664 00000 n 0000076698 00000 n -0000076802 00000 n -0000076906 00000 n -0000077010 00000 n -0000077114 00000 n -0000077217 00000 n -0000077321 00000 n -0000077425 00000 n -0000077528 00000 n -0000077632 00000 n -0000077736 00000 n -0000077840 00000 n -0000077944 00000 n -0000078048 00000 n -0000078152 00000 n -0000078256 00000 n -0000078360 00000 n -0000078464 00000 n -0000078568 00000 n -0000078672 00000 n -0000078776 00000 n -0000078880 00000 n -0000078984 00000 n -0000079088 00000 n -0000079192 00000 n -0000079295 00000 n -0000079399 00000 n -0000079503 00000 n -0000079607 00000 n -0000079711 00000 n -0000079814 00000 n -0000079918 00000 n -0000080022 00000 n -0000080125 00000 n -0000080229 00000 n -0000080333 00000 n -0000080437 00000 n -0000080541 00000 n -0000080644 00000 n -0000080746 00000 n -0000080848 00000 n -0000081273 00000 n -0000081377 00000 n -0000081481 00000 n -0000081585 00000 n -0000081689 00000 n -0000081793 00000 n -0000081896 00000 n -0000082000 00000 n -0000082104 00000 n -0000082208 00000 n -0000082312 00000 n -0000082415 00000 n -0000082518 00000 n -0000082622 00000 n -0000082726 00000 n -0000082830 00000 n -0000082934 00000 n -0000083038 00000 n -0000083142 00000 n -0000083246 00000 n -0000083350 00000 n -0000083454 00000 n +0000076732 00000 n +0000081490 00000 n +0000081534 00000 n +0000081578 00000 n +0000081622 00000 n +0000081666 00000 n +0000081710 00000 n +0000081754 00000 n +0000081798 00000 n +0000081842 00000 n +0000081886 00000 n +0000081930 00000 n +0000081974 00000 n +0000082018 00000 n +0000082062 00000 n +0000082106 00000 n +0000082150 00000 n +0000082194 00000 n +0000082238 00000 n +0000082282 00000 n +0000082326 00000 n +0000082370 00000 n +0000082414 00000 n +0000082458 00000 n +0000082502 00000 n +0000082546 00000 n +0000082590 00000 n +0000082634 00000 n +0000082678 00000 n +0000082722 00000 n +0000082766 00000 n +0000082810 00000 n +0000082854 00000 n +0000082898 00000 n +0000082942 00000 n +0000082986 00000 n +0000083030 00000 n +0000083074 00000 n +0000083118 00000 n +0000083162 00000 n +0000083206 00000 n +0000083250 00000 n +0000083294 00000 n +0000083338 00000 n +0000083382 00000 n +0000083426 00000 n +0000083470 00000 n +0000083514 00000 n 0000083558 00000 n -0000083662 00000 n -0000083766 00000 n -0000083870 00000 n -0000083974 00000 n -0000084078 00000 n -0000084182 00000 n -0000084286 00000 n -0000084390 00000 n -0000084494 00000 n -0000084598 00000 n -0000084871 00000 n -0000084919 00000 n -0000085006 00000 n -0000085053 00000 n -0000085139 00000 n +0000083602 00000 n +0000083646 00000 n +0000083690 00000 n +0000083734 00000 n +0000083778 00000 n +0000083822 00000 n +0000083866 00000 n +0000083910 00000 n +0000083954 00000 n +0000083998 00000 n +0000084042 00000 n +0000084086 00000 n +0000084130 00000 n +0000084174 00000 n +0000084218 00000 n +0000084262 00000 n +0000084306 00000 n +0000084350 00000 n +0000084394 00000 n +0000084438 00000 n +0000084482 00000 n +0000084526 00000 n +0000084570 00000 n +0000084614 00000 n +0000084658 00000 n +0000084702 00000 n +0000084746 00000 n +0000084790 00000 n +0000084834 00000 n +0000084878 00000 n +0000084922 00000 n +0000084966 00000 n +0000085010 00000 n +0000085054 00000 n +0000085098 00000 n +0000085142 00000 n 0000085186 00000 n -0000085272 00000 n -0000085313 00000 n -0000085358 00000 n -0000085445 00000 n -0000085490 00000 n -0000085576 00000 n -0000085609 00000 n -0000085655 00000 n -0000085742 00000 n -0000085767 00000 n -0000085813 00000 n -0000085900 00000 n -0000085946 00000 n -0000086031 00000 n -0000086075 00000 n -0000086162 00000 n -0000086213 00000 n -0000086300 00000 n -0000086349 00000 n -0000086436 00000 n -0000086484 00000 n -0000086570 00000 n -0000086635 00000 n -0000086690 00000 n -0000086776 00000 n -0000086801 00000 n -0000086854 00000 n -0000086941 00000 n -0000086991 00000 n +0000085230 00000 n +0000085274 00000 n +0000085318 00000 n +0000085362 00000 n +0000085406 00000 n +0000085450 00000 n +0000085494 00000 n +0000085538 00000 n +0000085582 00000 n +0000085626 00000 n +0000085670 00000 n +0000085714 00000 n +0000085758 00000 n +0000085802 00000 n +0000085846 00000 n +0000085890 00000 n +0000085934 00000 n +0000085978 00000 n +0000086022 00000 n +0000086066 00000 n +0000086110 00000 n +0000086154 00000 n +0000086198 00000 n +0000086242 00000 n +0000086286 00000 n +0000086330 00000 n +0000086374 00000 n +0000086418 00000 n +0000086462 00000 n +0000086506 00000 n +0000086550 00000 n +0000086594 00000 n +0000086638 00000 n +0000086682 00000 n +0000086726 00000 n +0000086770 00000 n +0000086814 00000 n +0000086858 00000 n +0000086902 00000 n +0000086946 00000 n +0000086990 00000 n +0000087034 00000 n 0000087078 00000 n -0000087111 00000 n -0000087230 00000 n -0000087316 00000 n -0000087359 00000 n -0000087446 00000 n -0000087489 00000 n -0000087576 00000 n -0000087617 00000 n -0000087680 00000 n -0000087767 00000 n -0000087825 00000 n -0000087912 00000 n -0000088006 00000 n -0000088092 00000 n -0000088133 00000 n -0000088176 00000 n -0000088262 00000 n +0000087122 00000 n +0000087166 00000 n +0000087210 00000 n +0000087254 00000 n +0000087298 00000 n +0000087342 00000 n +0000087386 00000 n +0000087430 00000 n +0000087474 00000 n +0000087518 00000 n +0000087562 00000 n +0000087606 00000 n +0000087650 00000 n +0000087694 00000 n +0000087738 00000 n +0000087782 00000 n +0000087826 00000 n +0000087870 00000 n +0000087914 00000 n +0000087958 00000 n +0000088002 00000 n +0000088046 00000 n +0000088090 00000 n +0000088134 00000 n +0000088178 00000 n +0000088222 00000 n +0000088266 00000 n 0000088310 00000 n -0000088397 00000 n -0000088438 00000 n -0000088525 00000 n -0000088569 00000 n -0000088656 00000 n -0000088700 00000 n -0000088786 00000 n -0000088843 00000 n -0000088889 00000 n -0000088976 00000 n -0000089025 00000 n -0000089111 00000 n -0000089144 00000 n -0000089198 00000 n -0000089285 00000 n -0000089336 00000 n -0000089423 00000 n -0000089474 00000 n -0000089560 00000 n -0000089614 00000 n -0000089701 00000 n -0000089751 00000 n -0000089838 00000 n -0000089895 00000 n -0000089945 00000 n -0000090032 00000 n -0000090082 00000 n -0000090168 00000 n -0000090201 00000 n -0000090265 00000 n -0000090352 00000 n -0000090377 00000 n -0000090419 00000 n -0000090505 00000 n -0000090556 00000 n -0000090643 00000 n -0000090690 00000 n -0000090777 00000 n -0000090818 00000 n -0000090880 00000 n -0000090967 00000 n -0000090992 00000 n -0000091041 00000 n -0000091128 00000 n -0000091153 00000 n -0000091201 00000 n -0000091288 00000 n -0000091338 00000 n -0000091424 00000 n -0000091468 00000 n -0000091554 00000 n -0000091598 00000 n -0000091684 00000 n -0000091734 00000 n -0000091820 00000 n -0000091870 00000 n -0000091955 00000 n -0000092004 00000 n -0000092088 00000 n -0000092135 00000 n -0000092219 00000 n -0000092300 00000 n -0000092356 00000 n -0000092443 00000 n -0000092512 00000 n -0000092599 00000 n -0000092650 00000 n -0000092737 00000 n -0000092824 00000 n -0000092911 00000 n -0000092967 00000 n -0000093054 00000 n -0000093104 00000 n -0000093191 00000 n -0000093256 00000 n -0000093308 00000 n -0000093395 00000 n -0000093451 00000 n -0000093538 00000 n -0000093586 00000 n -0000093673 00000 n -0000093721 00000 n -0000093808 00000 n -0000093857 00000 n -0000093898 00000 n -0000093983 00000 n -0000094008 00000 n -0000094052 00000 n -0000094139 00000 n -0000094184 00000 n -0000094271 00000 n -0000094315 00000 n -0000094402 00000 n -0000094446 00000 n -0000094533 00000 n -0000094575 00000 n -0000094662 00000 n -0000094710 00000 n -0000094797 00000 n -0000094862 00000 n -0000094910 00000 n -0000094996 00000 n -0000095021 00000 n -0000095074 00000 n -0000095160 00000 n -0000095185 00000 n -0000095239 00000 n -0000095326 00000 n -0000095351 00000 n -0000095414 00000 n -0000095501 00000 n -0000095564 00000 n -0000095651 00000 n -0000095705 00000 n -0000095792 00000 n -0000095833 00000 n -0000095936 00000 n -0000096040 00000 n -0000096144 00000 n -0000096248 00000 n -0000096352 00000 n -0000096455 00000 n -0000096559 00000 n -0000096663 00000 n -0000096767 00000 n -0000096871 00000 n -0000096975 00000 n -0000097079 00000 n -0000097184 00000 n -0000097289 00000 n -0000097394 00000 n -0000097499 00000 n -0000097604 00000 n -0000097709 00000 n -0000097814 00000 n -0000097918 00000 n -0000098023 00000 n -0000098128 00000 n -0000098233 00000 n -0000098338 00000 n -0000098443 00000 n -0000098548 00000 n -0000098652 00000 n -0000098757 00000 n -0000098862 00000 n -0000098967 00000 n -0000099072 00000 n -0000099177 00000 n -0000099282 00000 n -0000099387 00000 n -0000099492 00000 n -0000099597 00000 n -0000099702 00000 n -0000099807 00000 n -0000099912 00000 n -0000100017 00000 n -0000100122 00000 n -0000100227 00000 n -0000100611 00000 n -0000100667 00000 n -0000100755 00000 n -0000100824 00000 n -0000100912 00000 n -0000100988 00000 n -0000101077 00000 n -0000101148 00000 n -0000101236 00000 n -0000101316 00000 n -0000101405 00000 n -0000101468 00000 n -0000101551 00000 n -0000101639 00000 n -0000101715 00000 n -0000101804 00000 n -0000101878 00000 n -0000101967 00000 n -0000102046 00000 n -0000102135 00000 n -0000102189 00000 n -0000102238 00000 n -0000102327 00000 n -0000102354 00000 n -0000102403 00000 n -0000102492 00000 n -0000102519 00000 n -0000102568 00000 n -0000102657 00000 n -0000102722 00000 n -0000102811 00000 n -0000102867 00000 n -0000102956 00000 n -0000103004 00000 n -0000103093 00000 n -0000103147 00000 n -0000103202 00000 n -0000103291 00000 n -0000103346 00000 n -0000103435 00000 n -0000103471 00000 n -0000103507 00000 n -0000103543 00000 n -0000108581 00000 n -0000108626 00000 n -0000108671 00000 n -0000108716 00000 n -0000108761 00000 n -0000108806 00000 n -0000108851 00000 n -0000108896 00000 n -0000108941 00000 n -0000108986 00000 n -0000109031 00000 n -0000109076 00000 n -0000109121 00000 n -0000109166 00000 n -0000109211 00000 n -0000109256 00000 n -0000109301 00000 n -0000109346 00000 n -0000109391 00000 n -0000109436 00000 n -0000109481 00000 n -0000109526 00000 n -0000109571 00000 n -0000109616 00000 n -0000109661 00000 n -0000109706 00000 n -0000109751 00000 n -0000109796 00000 n -0000109841 00000 n -0000109886 00000 n -0000109931 00000 n -0000109976 00000 n -0000110021 00000 n -0000110066 00000 n -0000110111 00000 n -0000110156 00000 n -0000110201 00000 n -0000110246 00000 n -0000110291 00000 n -0000110336 00000 n -0000110381 00000 n -0000110426 00000 n -0000110471 00000 n -0000110516 00000 n -0000110561 00000 n -0000110606 00000 n -0000110651 00000 n -0000110696 00000 n -0000110741 00000 n -0000110786 00000 n -0000110831 00000 n -0000110876 00000 n -0000110921 00000 n -0000110966 00000 n -0000111011 00000 n -0000111056 00000 n -0000111101 00000 n -0000111146 00000 n -0000111191 00000 n -0000111236 00000 n -0000111281 00000 n -0000111326 00000 n -0000111371 00000 n -0000111416 00000 n -0000111461 00000 n -0000111506 00000 n -0000111551 00000 n -0000111596 00000 n -0000111641 00000 n -0000111686 00000 n -0000111731 00000 n -0000111776 00000 n -0000111821 00000 n -0000111866 00000 n -0000111911 00000 n -0000111956 00000 n -0000112001 00000 n -0000112046 00000 n -0000112091 00000 n -0000112136 00000 n -0000112181 00000 n -0000112226 00000 n -0000112271 00000 n -0000112316 00000 n -0000112361 00000 n -0000112406 00000 n -0000112451 00000 n -0000112496 00000 n -0000112541 00000 n -0000112586 00000 n -0000112631 00000 n -0000112676 00000 n -0000112721 00000 n -0000112766 00000 n -0000112811 00000 n -0000112856 00000 n -0000112901 00000 n -0000112946 00000 n -0000112991 00000 n -0000113036 00000 n -0000113081 00000 n -0000113126 00000 n -0000113171 00000 n -0000113216 00000 n -0000113261 00000 n -0000113306 00000 n -0000113351 00000 n -0000113396 00000 n -0000113441 00000 n -0000113486 00000 n -0000113531 00000 n -0000113576 00000 n -0000113621 00000 n -0000113666 00000 n -0000113711 00000 n -0000113756 00000 n -0000113801 00000 n -0000113846 00000 n -0000113891 00000 n -0000113936 00000 n -0000113981 00000 n -0000114026 00000 n -0000114071 00000 n -0000114116 00000 n -0000114161 00000 n -0000114206 00000 n -0000114251 00000 n -0000114296 00000 n -0000114341 00000 n -0000114386 00000 n -0000114431 00000 n -0000114476 00000 n -0000114521 00000 n -0000114566 00000 n -0000114611 00000 n -0000114656 00000 n -0000114701 00000 n -0000114746 00000 n -0000114791 00000 n -0000114836 00000 n -0000114881 00000 n -0000114926 00000 n -0000114971 00000 n -0000115016 00000 n -0000115061 00000 n -0000115106 00000 n -0000115151 00000 n -0000115196 00000 n -0000115241 00000 n -0000115286 00000 n -0000115331 00000 n -0000115376 00000 n -0000115421 00000 n -0000115466 00000 n -0000115511 00000 n -0000115556 00000 n -0000115601 00000 n -0000115646 00000 n -0000115691 00000 n -0000115736 00000 n -0000115781 00000 n -0000115826 00000 n -0000115871 00000 n -0000115916 00000 n -0000115961 00000 n -0000116006 00000 n -0000116051 00000 n -0000116096 00000 n -0000116141 00000 n -0000116186 00000 n -0000116231 00000 n -0000116276 00000 n -0000116321 00000 n -0000116366 00000 n -0000116411 00000 n -0000116456 00000 n -0000116501 00000 n -0000116546 00000 n -0000116591 00000 n -0000116636 00000 n -0000116681 00000 n -0000116726 00000 n -0000116771 00000 n -0000116816 00000 n -0000116861 00000 n -0000116906 00000 n -0000116951 00000 n -0000116996 00000 n -0000117041 00000 n -0000117086 00000 n -0000117131 00000 n -0000117176 00000 n -0000117221 00000 n -0000117266 00000 n -0000117311 00000 n -0000117356 00000 n -0000117401 00000 n -0000117446 00000 n -0000117491 00000 n -0000117536 00000 n -0000117581 00000 n -0000117626 00000 n -0000117671 00000 n -0000117716 00000 n -0000117761 00000 n -0000117806 00000 n -0000117851 00000 n -0000117896 00000 n -0000117941 00000 n -0000117986 00000 n -0000118031 00000 n -0000118076 00000 n -0000118121 00000 n -0000118166 00000 n -0000118211 00000 n -0000118256 00000 n -0000118301 00000 n -0000118346 00000 n -0000118391 00000 n -0000118436 00000 n -0000118481 00000 n -0000118526 00000 n -0000118571 00000 n -0000118616 00000 n -0000118661 00000 n -0000118706 00000 n -0000118751 00000 n -0000118796 00000 n -0000118841 00000 n -0000118886 00000 n -0000118931 00000 n -0000118976 00000 n -0000119021 00000 n -0000119066 00000 n -0000119111 00000 n -0000119156 00000 n -0000119201 00000 n -0000119246 00000 n -0000119291 00000 n -0000119336 00000 n -0000119381 00000 n -0000119426 00000 n -0000119471 00000 n -0000119516 00000 n -0000119561 00000 n -0000119606 00000 n -0000119651 00000 n -0000119696 00000 n -0000119741 00000 n -0000119786 00000 n -0000119831 00000 n -0000119876 00000 n -0000119921 00000 n -0000119966 00000 n -0000120011 00000 n -0000120056 00000 n -0000120101 00000 n -0000120146 00000 n -0000120191 00000 n -0000120236 00000 n -0000120281 00000 n -0000120326 00000 n -0000120371 00000 n -0000120416 00000 n -0000120461 00000 n -0000120506 00000 n -0000120551 00000 n -0000120596 00000 n -0000120641 00000 n -0000120686 00000 n -0000120731 00000 n -0000120776 00000 n -0000120821 00000 n -0000120866 00000 n -0000120911 00000 n -0000120956 00000 n -0000121001 00000 n -0000121046 00000 n -0000121091 00000 n -0000121136 00000 n -0000121181 00000 n -0000121226 00000 n -0000121271 00000 n -0000121316 00000 n -0000121361 00000 n -0000121406 00000 n -0000121451 00000 n -0000121496 00000 n -0000121541 00000 n -0000121586 00000 n -0000121631 00000 n -0000121676 00000 n -0000121721 00000 n -0000121766 00000 n -0000123174 00000 n -0000123335 00000 n -0000123504 00000 n -0000123697 00000 n -0000127450 00000 n -0000127643 00000 n -0000132340 00000 n -0000132534 00000 n -0000136913 00000 n -0000137107 00000 n -0000140959 00000 n -0000141153 00000 n -0000144725 00000 n -0000144919 00000 n -0000148558 00000 n -0000148752 00000 n -0000149730 00000 n -0000149891 00000 n -0000150125 00000 n -0000150329 00000 n -0000153103 00000 n -0000153278 00000 n -0000156898 00000 n -0000157073 00000 n -0000159486 00000 n -0000159661 00000 n -0000161080 00000 n -0000161241 00000 n -0000161429 00000 n -0000161633 00000 n -0000164580 00000 n -0000164755 00000 n -0000165173 00000 n -0000165385 00000 n -0000166546 00000 n -0000166734 00000 n -0000168196 00000 n -0000168393 00000 n -0000169763 00000 n -0000169978 00000 n -0000171214 00000 n -0000171408 00000 n -0000172987 00000 n -0000173157 00000 n -0000174973 00000 n -0000175124 00000 n -0000175365 00000 n -0000175535 00000 n -0000177210 00000 n -0000177389 00000 n -0000179202 00000 n -0000179371 00000 n -0000181209 00000 n -0000181378 00000 n -0000182365 00000 n -0000182544 00000 n -0000184190 00000 n -0000184378 00000 n -0000185867 00000 n -0000186055 00000 n -0000187476 00000 n -0000187646 00000 n -0000189312 00000 n -0000189482 00000 n -0000190038 00000 n -0000190208 00000 n -0000191940 00000 n -0000192119 00000 n -0000193825 00000 n -0000194013 00000 n -0000195668 00000 n -0000195856 00000 n -0000197573 00000 n -0000197742 00000 n -0000198490 00000 n -0000198697 00000 n -0000200340 00000 n -0000200547 00000 n -0000202154 00000 n -0000202323 00000 n -0000202655 00000 n -0000202816 00000 n -0000203006 00000 n -0000203210 00000 n -0000206041 00000 n -0000206254 00000 n -0000208022 00000 n -0000208235 00000 n -0000209737 00000 n -0000209959 00000 n -0000211786 00000 n -0000212007 00000 n -0000213663 00000 n -0000213870 00000 n -0000215562 00000 n -0000215778 00000 n -0000217711 00000 n -0000217933 00000 n -0000219945 00000 n -0000220157 00000 n -0000222240 00000 n -0000222443 00000 n -0000224709 00000 n -0000224931 00000 n -0000227140 00000 n -0000227338 00000 n -0000229347 00000 n -0000229535 00000 n -0000231059 00000 n -0000231238 00000 n -0000233230 00000 n -0000233418 00000 n -0000235438 00000 n -0000235626 00000 n -0000237518 00000 n -0000237715 00000 n -0000239427 00000 n -0000239587 00000 n -0000240580 00000 n -0000240774 00000 n -0000242353 00000 n -0000242533 00000 n -0000244296 00000 n -0000244475 00000 n -0000245334 00000 n -0000245513 00000 n -0000246598 00000 n -0000246795 00000 n -0000248294 00000 n -0000248473 00000 n -0000249289 00000 n -0000249519 00000 n -0000251018 00000 n -0000251230 00000 n -0000252983 00000 n -0000253176 00000 n -0000254533 00000 n -0000254694 00000 n -0000254885 00000 n -0000255098 00000 n -0000258048 00000 n -0000258223 00000 n -0000260654 00000 n -0000260829 00000 n -0000262285 00000 n -0000262483 00000 n -0000263845 00000 n -0000264043 00000 n -0000265732 00000 n -0000265920 00000 n -0000267601 00000 n -0000267780 00000 n -0000269882 00000 n -0000270061 00000 n -0000271834 00000 n -0000272013 00000 n -0000273695 00000 n -0000273883 00000 n -0000275737 00000 n -0000275949 00000 n -0000277979 00000 n -0000278192 00000 n -0000279744 00000 n -0000279933 00000 n -0000281207 00000 n -0000281428 00000 n -0000283204 00000 n -0000283410 00000 n -0000285295 00000 n -0000285492 00000 n -0000287077 00000 n -0000287288 00000 n -0000288808 00000 n -0000288996 00000 n -0000289898 00000 n -0000290086 00000 n -0000291612 00000 n -0000291815 00000 n -0000293523 00000 n -0000293726 00000 n -0000294543 00000 n -0000294755 00000 n -0000296233 00000 n -0000296413 00000 n -0000297172 00000 n -0000297403 00000 n -0000299126 00000 n -0000299338 00000 n -0000301264 00000 n -0000301495 00000 n -0000303505 00000 n -0000303727 00000 n -0000305447 00000 n -0000305650 00000 n -0000306909 00000 n -0000307131 00000 n -0000308724 00000 n -0000308903 00000 n -0000310451 00000 n -0000310630 00000 n -0000312247 00000 n -0000312426 00000 n -0000313824 00000 n -0000314003 00000 n -0000315669 00000 n -0000315839 00000 n -0000316585 00000 n -0000316788 00000 n -0000318657 00000 n -0000318817 00000 n -0000319941 00000 n -0000320130 00000 n -0000321823 00000 n -0000322002 00000 n -0000323747 00000 n -0000323935 00000 n -0000325838 00000 n -0000326051 00000 n -0000327916 00000 n -0000328156 00000 n -0000330231 00000 n -0000330443 00000 n -0000332011 00000 n -0000332217 00000 n -0000333381 00000 n -0000333569 00000 n -0000334765 00000 n -0000334944 00000 n -0000335949 00000 n -0000336137 00000 n -0000337764 00000 n -0000337952 00000 n -0000339220 00000 n -0000339409 00000 n -0000340717 00000 n -0000340887 00000 n -0000341360 00000 n -0000341548 00000 n -0000342939 00000 n -0000343127 00000 n -0000344098 00000 n -0000344286 00000 n -0000344835 00000 n -0000345057 00000 n -0000347130 00000 n -0000347343 00000 n -0000349364 00000 n -0000349586 00000 n -0000350797 00000 n -0000351010 00000 n -0000352572 00000 n -0000352794 00000 n -0000354603 00000 n -0000354825 00000 n -0000356545 00000 n -0000356739 00000 n -0000357449 00000 n -0000357652 00000 n -0000359191 00000 n -0000359369 00000 n -0000360054 00000 n -0000360242 00000 n -0000361727 00000 n -0000361906 00000 n -0000363512 00000 n -0000363691 00000 n -0000365361 00000 n -0000365531 00000 n -0000367080 00000 n -0000367250 00000 n -0000368551 00000 n -0000368721 00000 n -0000370347 00000 n -0000370517 00000 n -0000372097 00000 n -0000372293 00000 n -0000374483 00000 n -0000374662 00000 n -0000376189 00000 n -0000376377 00000 n -0000377345 00000 n -0000377541 00000 n -0000379272 00000 n -0000379485 00000 n -0000381167 00000 n -0000381362 00000 n -0000383112 00000 n -0000383325 00000 n -0000384590 00000 n -0000384794 00000 n -0000386531 00000 n -0000386719 00000 n -0000388462 00000 n -0000388641 00000 n -0000390039 00000 n -0000390218 00000 n -0000391915 00000 n -0000392094 00000 n -0000393575 00000 n -0000393754 00000 n -0000395546 00000 n -0000395750 00000 n -0000397401 00000 n -0000397460 00000 n -0000397563 00000 n -0000397728 00000 n -0000397810 00000 n -0000397918 00000 n -0000398041 00000 n -0000398153 00000 n -0000398332 00000 n -0000398441 00000 n -0000398567 00000 n -0000398694 00000 n -0000398833 00000 n -0000398973 00000 n -0000399142 00000 n -0000399259 00000 n -0000399388 00000 n -0000399540 00000 n -0000399680 00000 n -0000399858 00000 n -0000400014 00000 n -0000400127 00000 n -0000400244 00000 n -0000400379 00000 n -0000400520 00000 n -0000400635 00000 n -0000400746 00000 n -0000400922 00000 n -0000401033 00000 n -0000401163 00000 n -0000401286 00000 n -0000401452 00000 n -0000401568 00000 n -0000401697 00000 n -0000401836 00000 n -0000401972 00000 n -0000402107 00000 n -0000402242 00000 n -0000402378 00000 n -0000402489 00000 n -0000402645 00000 n -0000402739 00000 n -0000402948 00000 n -0000403049 00000 n -0000403192 00000 n -0000403338 00000 n -0000403454 00000 n -0000403621 00000 n -0000403733 00000 n -0000403924 00000 n -0000404027 00000 n -0000404200 00000 n -0000404321 00000 n -0000404451 00000 n -0000404563 00000 n -0000404687 00000 n -0000404799 00000 n -0000405005 00000 n -0000405116 00000 n -0000405231 00000 n -0000405375 00000 n -0000405583 00000 n -0000405717 00000 n -0000405871 00000 n -0000405996 00000 n -0000406127 00000 n -0000406260 00000 n -0000406391 00000 n -0000406566 00000 n -0000406701 00000 n -0000406854 00000 n -0000406999 00000 n -0000407224 00000 n -0000407335 00000 n -0000407450 00000 n -0000407643 00000 n -0000407786 00000 n -0000407902 00000 n -0000408047 00000 n -0000408204 00000 n -0000408321 00000 n -0000408498 00000 n -0000408632 00000 n -0000408780 00000 n -0000408898 00000 n -0000409028 00000 n -0000409198 00000 n -0000409292 00000 n -0000409419 00000 n -0000409546 00000 n -0000409642 00000 n -0000409819 00000 n -0000409945 00000 n -0000410080 00000 n -0000410213 00000 n -0000410340 00000 n -0000410452 00000 n -0000410644 00000 n -0000410742 00000 n -0000410928 00000 n -0000411032 00000 n -0000411156 00000 n -0000411278 00000 n -0000411390 00000 n -0000411586 00000 n -0000411702 00000 n -0000411826 00000 n -0000411944 00000 n -0000412062 00000 n -0000412167 00000 n -0000412356 00000 n -0000412579 00000 n -0000412718 00000 n -0000412881 00000 n -0000413018 00000 n -0000413121 00000 n -0000413327 00000 n -0000413486 00000 n -0000413634 00000 n -0000413762 00000 n -0000413943 00000 n -0000414053 00000 n -0000414168 00000 n -0000414313 00000 n -0000414477 00000 n -0000414627 00000 n -0000414845 00000 n -0000414950 00000 n -0000415082 00000 n -0000415203 00000 n -0000415410 00000 n -0000415538 00000 n -0000415623 00000 n -0000415789 00000 n -0000415893 00000 n -0000416050 00000 n -0000416161 00000 n -0000416306 00000 n -0000416448 00000 n -0000416598 00000 n -0000416715 00000 n -0000416879 00000 n -0000416990 00000 n -0000417130 00000 n -0000417257 00000 n -0000417374 00000 n -0000417513 00000 n -0000417619 00000 n -0000417753 00000 n -0000417885 00000 n -0000418030 00000 n -0000418157 00000 n -0000418289 00000 n -0000418419 00000 n -0000418544 00000 n -0000418652 00000 n -0000418817 00000 n -0000418921 00000 n -0000419057 00000 n -0000419263 00000 n -0000419363 00000 n -0000419481 00000 n -0000419646 00000 n -0000419737 00000 n -0000419898 00000 n -0000420024 00000 n -0000420151 00000 n -0000420291 00000 n -0000420427 00000 n -0000420535 00000 n -0000420709 00000 n -0000420815 00000 n -0000420935 00000 n -0000421047 00000 n -0000421164 00000 n -0000421266 00000 n -0000421435 00000 n -0000421535 00000 n -0000421652 00000 n -0000421805 00000 n -0000421935 00000 n -0000422102 00000 n -0000422202 00000 n -0000422299 00000 n -0000422519 00000 n -0000422618 00000 n -0000422736 00000 n -0000422864 00000 n -0000423022 00000 n -0000423193 00000 n -0000423309 00000 n -0000423420 00000 n -0000423556 00000 n -0000423687 00000 n -0000423835 00000 n -0000423980 00000 n -0000424081 00000 n -0000424269 00000 n -0000424373 00000 n -0000424526 00000 n -0000424637 00000 n -0000424745 00000 n -0000424876 00000 n -0000425051 00000 n -0000425154 00000 n -0000425305 00000 n -0000425407 00000 n -0000425529 00000 n -0000425661 00000 n -0000425781 00000 n -0000425896 00000 n -0000426010 00000 n -0000426123 00000 n -0000426240 00000 n -0000426355 00000 n -0000426471 00000 n -0000426586 00000 n -0000426702 00000 n -0000426824 00000 n -0000426945 00000 n -0000427064 00000 n -0000427182 00000 n -0000427302 00000 n -0000427405 00000 n -0000427519 00000 n -0000427680 00000 n -0000427776 00000 n -0000427890 00000 n -0000428000 00000 n -0000428117 00000 n -0000428295 00000 n -0000428405 00000 n -0000428559 00000 n -0000428728 00000 n -0000428916 00000 n -0000429097 00000 n -0000429253 00000 n -0000429419 00000 n -0000429551 00000 n -0000429698 00000 n -0000429837 00000 n -0000429957 00000 n -0000430078 00000 n -0000430197 00000 n -0000430361 00000 n -0000430465 00000 n -0000430583 00000 n -0000430701 00000 n -0000430822 00000 n -0000430958 00000 n -0000431057 00000 n -0000431221 00000 n -0000431325 00000 n -0000431442 00000 n -0000431592 00000 n -0000431692 00000 n -0000431806 00000 n -0000431920 00000 n -0000432034 00000 n -0000432148 00000 n -0000432262 00000 n -0000432376 00000 n -0000432490 00000 n -0000432604 00000 n -0000432720 00000 n -0000432822 00000 n -0000432936 00000 n +0000088354 00000 n +0000088398 00000 n +0000088442 00000 n +0000088486 00000 n +0000088530 00000 n +0000088574 00000 n +0000088618 00000 n +0000088662 00000 n +0000088706 00000 n +0000088750 00000 n +0000088794 00000 n +0000088839 00000 n +0000088884 00000 n +0000088929 00000 n +0000088974 00000 n +0000089019 00000 n +0000089064 00000 n +0000089109 00000 n +0000089154 00000 n +0000089199 00000 n +0000089244 00000 n +0000089289 00000 n +0000089334 00000 n +0000089379 00000 n +0000089424 00000 n +0000089469 00000 n +0000089514 00000 n +0000089559 00000 n +0000089604 00000 n +0000089649 00000 n +0000089694 00000 n +0000089739 00000 n +0000089784 00000 n +0000089829 00000 n +0000089874 00000 n +0000089919 00000 n +0000089964 00000 n +0000090009 00000 n +0000090054 00000 n +0000090099 00000 n +0000090144 00000 n +0000090189 00000 n +0000090234 00000 n +0000090279 00000 n +0000090324 00000 n +0000090369 00000 n +0000090414 00000 n +0000090459 00000 n +0000090504 00000 n +0000090549 00000 n +0000090594 00000 n +0000090639 00000 n +0000090684 00000 n +0000090729 00000 n +0000090774 00000 n +0000090819 00000 n +0000090864 00000 n +0000090909 00000 n +0000090954 00000 n +0000090999 00000 n +0000091044 00000 n +0000091089 00000 n +0000091134 00000 n +0000091179 00000 n +0000091224 00000 n +0000091269 00000 n +0000091314 00000 n +0000091359 00000 n +0000091404 00000 n +0000091449 00000 n +0000091494 00000 n +0000091539 00000 n +0000091584 00000 n +0000091629 00000 n +0000091674 00000 n +0000091719 00000 n +0000091764 00000 n +0000091809 00000 n +0000091854 00000 n +0000091899 00000 n +0000091944 00000 n +0000091989 00000 n +0000092034 00000 n +0000092079 00000 n +0000092124 00000 n +0000092169 00000 n +0000092214 00000 n +0000092259 00000 n +0000092304 00000 n +0000092349 00000 n +0000092394 00000 n +0000092439 00000 n +0000092484 00000 n +0000092529 00000 n +0000092574 00000 n +0000092619 00000 n +0000092664 00000 n +0000092709 00000 n +0000092754 00000 n +0000092799 00000 n +0000092844 00000 n +0000092889 00000 n +0000092934 00000 n +0000092979 00000 n +0000093024 00000 n +0000093069 00000 n +0000093114 00000 n +0000093159 00000 n +0000093204 00000 n +0000093249 00000 n +0000093294 00000 n +0000093339 00000 n +0000093384 00000 n +0000093429 00000 n +0000093474 00000 n +0000093519 00000 n +0000093564 00000 n +0000093609 00000 n +0000093654 00000 n +0000093699 00000 n +0000093744 00000 n +0000093789 00000 n +0000093834 00000 n +0000093879 00000 n +0000093924 00000 n +0000093969 00000 n +0000094014 00000 n +0000094059 00000 n +0000094104 00000 n +0000094149 00000 n +0000095548 00000 n +0000095709 00000 n +0000095878 00000 n +0000096071 00000 n +0000099760 00000 n +0000099953 00000 n +0000104259 00000 n +0000104453 00000 n +0000108285 00000 n +0000108479 00000 n +0000111850 00000 n +0000112044 00000 n +0000114896 00000 n +0000115090 00000 n +0000118370 00000 n +0000118564 00000 n +0000119223 00000 n +0000119384 00000 n +0000119618 00000 n +0000119822 00000 n +0000122520 00000 n +0000122695 00000 n +0000126304 00000 n +0000126479 00000 n +0000128781 00000 n +0000128956 00000 n +0000130064 00000 n +0000130225 00000 n +0000130413 00000 n +0000130617 00000 n +0000131272 00000 n +0000131484 00000 n +0000132628 00000 n +0000132816 00000 n +0000134311 00000 n +0000134508 00000 n +0000135923 00000 n +0000136138 00000 n +0000137366 00000 n +0000137560 00000 n +0000139126 00000 n +0000139296 00000 n +0000141097 00000 n +0000141248 00000 n +0000141484 00000 n +0000141654 00000 n +0000143312 00000 n +0000143491 00000 n +0000145323 00000 n +0000145492 00000 n +0000147346 00000 n +0000147515 00000 n +0000148624 00000 n +0000148812 00000 n +0000150513 00000 n +0000150701 00000 n +0000152179 00000 n +0000152367 00000 n +0000153852 00000 n +0000154022 00000 n +0000155683 00000 n +0000155853 00000 n +0000156594 00000 n +0000156773 00000 n +0000158506 00000 n +0000158694 00000 n +0000160494 00000 n +0000160682 00000 n +0000162327 00000 n +0000162496 00000 n +0000163266 00000 n +0000163473 00000 n +0000165095 00000 n +0000165302 00000 n +0000166898 00000 n +0000167067 00000 n +0000167394 00000 n +0000167555 00000 n +0000167745 00000 n +0000167949 00000 n +0000168761 00000 n +0000168931 00000 n +0000170877 00000 n +0000171037 00000 n +0000171709 00000 n +0000171922 00000 n +0000173683 00000 n +0000173896 00000 n +0000175434 00000 n +0000175656 00000 n +0000177485 00000 n +0000177706 00000 n +0000179399 00000 n +0000179606 00000 n +0000181291 00000 n +0000181507 00000 n +0000183486 00000 n +0000183708 00000 n +0000185716 00000 n +0000185928 00000 n +0000188008 00000 n +0000188211 00000 n +0000190473 00000 n +0000190695 00000 n +0000192900 00000 n +0000193098 00000 n +0000195105 00000 n +0000195293 00000 n +0000196839 00000 n +0000197018 00000 n +0000199003 00000 n +0000199191 00000 n +0000201155 00000 n +0000201343 00000 n +0000203299 00000 n +0000203496 00000 n +0000205246 00000 n +0000205406 00000 n +0000206395 00000 n +0000206589 00000 n +0000208179 00000 n +0000208359 00000 n +0000210106 00000 n +0000210285 00000 n +0000211182 00000 n +0000211361 00000 n +0000212427 00000 n +0000212624 00000 n +0000214136 00000 n +0000214315 00000 n +0000215120 00000 n +0000215350 00000 n +0000216838 00000 n +0000217050 00000 n +0000218798 00000 n +0000218991 00000 n +0000220345 00000 n +0000220506 00000 n +0000220697 00000 n +0000220901 00000 n +0000222168 00000 n +0000222366 00000 n +0000223796 00000 n +0000223984 00000 n +0000225675 00000 n +0000225863 00000 n +0000227642 00000 n +0000227821 00000 n +0000229885 00000 n +0000230064 00000 n +0000231881 00000 n +0000232060 00000 n +0000233798 00000 n +0000233986 00000 n +0000235835 00000 n +0000236057 00000 n +0000238068 00000 n +0000238281 00000 n +0000239834 00000 n +0000240023 00000 n +0000241415 00000 n +0000241585 00000 n +0000241928 00000 n +0000242149 00000 n +0000243909 00000 n +0000244115 00000 n +0000245988 00000 n +0000246185 00000 n +0000247764 00000 n +0000247975 00000 n +0000249490 00000 n +0000249678 00000 n +0000250563 00000 n +0000250751 00000 n +0000252274 00000 n +0000252477 00000 n +0000254181 00000 n +0000254384 00000 n +0000255331 00000 n +0000255543 00000 n +0000257053 00000 n +0000257233 00000 n +0000257988 00000 n +0000258219 00000 n +0000259925 00000 n +0000260137 00000 n +0000262121 00000 n +0000262352 00000 n +0000264309 00000 n +0000264531 00000 n +0000266309 00000 n +0000266512 00000 n +0000267818 00000 n +0000268040 00000 n +0000269631 00000 n +0000269810 00000 n +0000271432 00000 n +0000271611 00000 n +0000273196 00000 n +0000273375 00000 n +0000274933 00000 n +0000275112 00000 n +0000276728 00000 n +0000276898 00000 n +0000277772 00000 n +0000277961 00000 n +0000279632 00000 n +0000279811 00000 n +0000281542 00000 n +0000281730 00000 n +0000283624 00000 n +0000283837 00000 n +0000285690 00000 n +0000285930 00000 n +0000288023 00000 n +0000288235 00000 n +0000289815 00000 n +0000290036 00000 n +0000291285 00000 n +0000291473 00000 n +0000292752 00000 n +0000292931 00000 n +0000293992 00000 n +0000294180 00000 n +0000295744 00000 n +0000295932 00000 n +0000297348 00000 n +0000297537 00000 n +0000298800 00000 n +0000298980 00000 n +0000299631 00000 n +0000299828 00000 n +0000301303 00000 n +0000301491 00000 n +0000302586 00000 n +0000302774 00000 n +0000303307 00000 n +0000303504 00000 n +0000304723 00000 n +0000304926 00000 n +0000306256 00000 n +0000306441 00000 n +0000306911 00000 n +0000307133 00000 n +0000309200 00000 n +0000309413 00000 n +0000311462 00000 n +0000311659 00000 n +0000312859 00000 n +0000313072 00000 n +0000314687 00000 n +0000314909 00000 n +0000316732 00000 n +0000316954 00000 n +0000318723 00000 n +0000318917 00000 n +0000319693 00000 n +0000319896 00000 n +0000321414 00000 n +0000321592 00000 n +0000322258 00000 n +0000322446 00000 n +0000323974 00000 n +0000324144 00000 n +0000325636 00000 n +0000325806 00000 n +0000327192 00000 n +0000327362 00000 n +0000328904 00000 n +0000329073 00000 n +0000330058 00000 n +0000330253 00000 n +0000330674 00000 n +0000330853 00000 n +0000332401 00000 n +0000332589 00000 n +0000333633 00000 n +0000333784 00000 n +0000334018 00000 n +0000334213 00000 n +0000335926 00000 n +0000336138 00000 n +0000337853 00000 n +0000338047 00000 n +0000339761 00000 n +0000339973 00000 n +0000341258 00000 n +0000341461 00000 n +0000343216 00000 n +0000343404 00000 n +0000345138 00000 n +0000345317 00000 n +0000346736 00000 n +0000346915 00000 n +0000348641 00000 n +0000348820 00000 n +0000350305 00000 n +0000350484 00000 n +0000352265 00000 n +0000352468 00000 n +0000354100 00000 n +0000354159 00000 n +0000354262 00000 n +0000354427 00000 n +0000354509 00000 n +0000354617 00000 n +0000354740 00000 n +0000354852 00000 n +0000355020 00000 n +0000355124 00000 n +0000355245 00000 n +0000355367 00000 n +0000355501 00000 n +0000355636 00000 n +0000355800 00000 n +0000355910 00000 n +0000356032 00000 n +0000356179 00000 n +0000356314 00000 n +0000356487 00000 n +0000356637 00000 n +0000356742 00000 n +0000356851 00000 n +0000356978 00000 n +0000357111 00000 n +0000357218 00000 n +0000357321 00000 n +0000357486 00000 n +0000357592 00000 n +0000357717 00000 n +0000357835 00000 n +0000357996 00000 n +0000358105 00000 n +0000358229 00000 n +0000358363 00000 n +0000358494 00000 n +0000358624 00000 n +0000358754 00000 n +0000358884 00000 n +0000358989 00000 n +0000359187 00000 n +0000359283 00000 n +0000359421 00000 n +0000359562 00000 n +0000359673 00000 n +0000359835 00000 n +0000359942 00000 n +0000360122 00000 n +0000360220 00000 n +0000360388 00000 n +0000360502 00000 n +0000360625 00000 n +0000360732 00000 n +0000360856 00000 n +0000360968 00000 n +0000361129 00000 n +0000361324 00000 n +0000361430 00000 n +0000361540 00000 n +0000361679 00000 n +0000361882 00000 n +0000362009 00000 n +0000362156 00000 n +0000362274 00000 n +0000362400 00000 n +0000362528 00000 n +0000362654 00000 n +0000362824 00000 n +0000362952 00000 n +0000363098 00000 n +0000363238 00000 n +0000363452 00000 n +0000363558 00000 n +0000363668 00000 n +0000363856 00000 n +0000363992 00000 n +0000364101 00000 n +0000364241 00000 n +0000364393 00000 n +0000364503 00000 n +0000364669 00000 n +0000364798 00000 n +0000364941 00000 n +0000365054 00000 n +0000365179 00000 n +0000365344 00000 n +0000365431 00000 n +0000365553 00000 n +0000365675 00000 n +0000365766 00000 n +0000365932 00000 n +0000366053 00000 n +0000366183 00000 n +0000366311 00000 n +0000366438 00000 n +0000366550 00000 n +0000366730 00000 n +0000366822 00000 n +0000367002 00000 n +0000367098 00000 n +0000367214 00000 n +0000367328 00000 n +0000367432 00000 n +0000367622 00000 n +0000367730 00000 n +0000367846 00000 n +0000367956 00000 n +0000368066 00000 n +0000368163 00000 n +0000368346 00000 n +0000368563 00000 n +0000368694 00000 n +0000368849 00000 n +0000368978 00000 n +0000369075 00000 n +0000369269 00000 n +0000369422 00000 n +0000369564 00000 n +0000369686 00000 n +0000369861 00000 n +0000369963 00000 n +0000370070 00000 n +0000370209 00000 n +0000370367 00000 n +0000370511 00000 n +0000370717 00000 n +0000370816 00000 n +0000370942 00000 n +0000371057 00000 n +0000371252 00000 n +0000371374 00000 n +0000371451 00000 n +0000371605 00000 n +0000371703 00000 n +0000371854 00000 n +0000371957 00000 n +0000372094 00000 n +0000372228 00000 n +0000372370 00000 n +0000372479 00000 n +0000372637 00000 n +0000372740 00000 n +0000372872 00000 n +0000372991 00000 n +0000373100 00000 n +0000373233 00000 n +0000373331 00000 n +0000373457 00000 n +0000373581 00000 n +0000373718 00000 n +0000373837 00000 n +0000373961 00000 n +0000374083 00000 n +0000374200 00000 n +0000374300 00000 n +0000374494 00000 n +0000374588 00000 n +0000374700 00000 n +0000374859 00000 n +0000374942 00000 n +0000375097 00000 n +0000375215 00000 n +0000375334 00000 n +0000375466 00000 n +0000375594 00000 n +0000375694 00000 n +0000375862 00000 n +0000375960 00000 n +0000376072 00000 n +0000376176 00000 n +0000376287 00000 n +0000376383 00000 n +0000376540 00000 n +0000376634 00000 n +0000376745 00000 n +0000376892 00000 n +0000377016 00000 n +0000377171 00000 n +0000377265 00000 n +0000377356 00000 n +0000377515 00000 n +0000377631 00000 n +0000377785 00000 n +0000377876 00000 n +0000377983 00000 n +0000378077 00000 n +0000378232 00000 n +0000378328 00000 n +0000378419 00000 n +0000378627 00000 n +0000378720 00000 n +0000378832 00000 n +0000378954 00000 n +0000379106 00000 n +0000379271 00000 n +0000379379 00000 n +0000379482 00000 n +0000379612 00000 n +0000379737 00000 n +0000379879 00000 n +0000380018 00000 n +0000380112 00000 n +0000380288 00000 n +0000380386 00000 n +0000380533 00000 n +0000380636 00000 n +0000380736 00000 n +0000380855 00000 n +0000381018 00000 n +0000381115 00000 n +0000381229 00000 n +0000381338 00000 n +0000381446 00000 n +0000381555 00000 n +0000381663 00000 n +0000381772 00000 n +0000381884 00000 n +0000381995 00000 n +0000382094 00000 n +0000382208 00000 n +0000382357 00000 n +0000382447 00000 n +0000382555 00000 n +0000382659 00000 n +0000382770 00000 n +0000382936 00000 n +0000383040 00000 n +0000383188 00000 n +0000383349 00000 n +0000383529 00000 n +0000383702 00000 n +0000383850 00000 n +0000384010 00000 n +0000384134 00000 n +0000384273 00000 n +0000384404 00000 n +0000384516 00000 n +0000384631 00000 n +0000384744 00000 n +0000384896 00000 n +0000384994 00000 n +0000385106 00000 n +0000385218 00000 n +0000385333 00000 n +0000385463 00000 n +0000385556 00000 n +0000385708 00000 n +0000385806 00000 n +0000385917 00000 n +0000386061 00000 n +0000386153 00000 n +0000386259 00000 n +0000386365 00000 n +0000386471 00000 n +0000386577 00000 n +0000386683 00000 n +0000386789 00000 n +0000386895 00000 n +0000387001 00000 n +0000387108 00000 n +0000387201 00000 n +0000387309 00000 n trailer -<]>> +<]>> startxref -433845 +388219 %%EOF diff --git a/docs/docbook/devdoc/NetBIOS.sgml b/docs/docbook/devdoc/NetBIOS.sgml index 6b4eb34b769..ec9d3af563a 100644 --- a/docs/docbook/devdoc/NetBIOS.sgml +++ b/docs/docbook/devdoc/NetBIOS.sgml @@ -101,7 +101,7 @@ rfc1001.txt describes, amongst other things, the implementation and use of, a 'NetBIOS Name Service'. NT/AS offers 'Windows Internet Name Service' which is fully rfc1001/2 compliant, but has had to take specific action with certain NetBIOS names in order to make it useful. (for example, it -deals with the registration of <1c> <1d> <1e> names all in different ways. +deals with the registration of <1c> <1d> <1e> names all in different ways. I recommend the reading of the Microsoft WINS Server Help files for full details). diff --git a/docs/docbook/devdoc/Tracing.sgml b/docs/docbook/devdoc/Tracing.sgml index ccf1e1c3c84..3a0e4ba1a97 100644 --- a/docs/docbook/devdoc/Tracing.sgml +++ b/docs/docbook/devdoc/Tracing.sgml @@ -80,11 +80,11 @@ stderr output from this command to a file for later perusal. For example, if I'm using a csh style shell: -strace -f -p 3872 >& strace.out +strace -f -p 3872 >& strace.out or with a sh style shell: -strace -f -p 3872 > strace.out 2>&1 +strace -f -p 3872 > strace.out 2>&1 Note the "-f" option. This is only available on some systems, and diff --git a/docs/docbook/devdoc/cifsntdomain.sgml b/docs/docbook/devdoc/cifsntdomain.sgml index 0197f4e1bef..f64e1b37d63 100644 --- a/docs/docbook/devdoc/cifsntdomain.sgml +++ b/docs/docbook/devdoc/cifsntdomain.sgml @@ -2175,7 +2175,7 @@ return 0 - indicates success - +LSA SAM Logon @@ -2279,7 +2279,7 @@ Note: presumably, the SAM_INFO structure is validated, and a (currently Note: mailslots will contain a response mailslot, to which the response - should be sent. the target NetBIOS name is REQUEST_NAME<20>, where + should be sent. the target NetBIOS name is REQUEST_NAME<20>, where REQUEST_NAME is the name of the machine that sent the request. @@ -2361,7 +2361,7 @@ Note: mailslots will contain a response mailslot, to which the response - + SAM Logon @@ -2663,16 +2663,16 @@ pwdump(machine$) (initially) == md4(lmowf(unicode(machine))) Protocol -C->S ReqChal,Cc S->C Cs +C->S ReqChal,Cc S->C Cs -C & S compute session key Ks = E(PW[9..15],E(PW[0..6],Add(Cc,Cs))) +C & S compute session key Ks = E(PW[9..15],E(PW[0..6],Add(Cc,Cs))) C: Rc = Cred(Ks,Cc) C->S Authenticate,Rc S: Rs = Cred(Ks,Cs), -assert(Rc == Cred(Ks,Cc)) S->C Rs C: assert(Rs == Cred(Ks,Cs)) +assert(Rc == Cred(Ks,Cc)) S->C Rs C: assert(Rs == Cred(Ks,Cs)) @@ -2682,7 +2682,7 @@ on registry settings. This will also occur weekly afterwards. -C: Tc = Time(), Rc' = Cred(Ks,Rc+Tc) C->S ServerPasswordSet,Rc',Tc, +C: Tc = Time(), Rc' = Cred(Ks,Rc+Tc) C->S ServerPasswordSet,Rc',Tc, arc4(Ks[0..7,16],lmowf(randompassword()) C: Rc = Cred(Ks,Rc+Tc+1) S: assert(Rc' == Cred(Ks,Rc+Tc)), Ts = Time() S: Rs' = Cred(Ks,Rs+Tc+1) S->C Rs',Ts C: assert(Rs' == Cred(Ks,Rs+Tc+1)) S: Rs = Rs' @@ -2694,7 +2694,7 @@ such as workstation and domain omitted) -C: Tc = Time(), Rc' = Cred(Ks,Rc+Tc) C->S NetLogonSamLogon,Rc',Tc,U, +C: Tc = Time(), Rc' = Cred(Ks,Rc+Tc) C->S NetLogonSamLogon,Rc',Tc,U, arc4(Ks[0..7,16],16,ntowf(P),16), arc4(Ks[0..7,16],16,lmowf(P),16) S: assert(Rc' == Cred(Ks,Rc+Tc)) assert(passwords match those in SAM) S: Ts = Time() diff --git a/docs/docbook/devdoc/encryption.sgml b/docs/docbook/devdoc/encryption.sgml index 3ca8aa109c0..7d95edd34a0 100644 --- a/docs/docbook/devdoc/encryption.sgml +++ b/docs/docbook/devdoc/encryption.sgml @@ -90,7 +90,7 @@ - <anchor id="SMBPASSWDFILEFORMAT"/>The smbpasswd file + <anchor id="SMBPASSWDFILEFORMAT">The smbpasswd file In order for Samba to participate in the above protocol it must be able to look up the 16 byte hashed values given a user name. @@ -102,11 +102,11 @@ /etc/passwd and the smbpasswd file, a utility, mksmbpasswd.sh, is provided to generate a smbpasswd file from a UNIX /etc/passwd file. - + To generate the smbpasswd file from your /etc/passwd - file use the following command: + file use the following command : $ cat /etc/passwd | mksmbpasswd.sh > /usr/local/samba/private/smbpasswd diff --git a/docs/docbook/devdoc/printing.sgml b/docs/docbook/devdoc/printing.sgml index 363b9fb6e50..2ef64353e1e 100644 --- a/docs/docbook/devdoc/printing.sgml +++ b/docs/docbook/devdoc/printing.sgml @@ -28,7 +28,7 @@ Printing Interface to Various Back ends Samba uses a table of function pointers to seven functions. The -function prototypes are defined in the printif structure declared +function prototypes are defined in the printif structure declared in printing.h. @@ -199,7 +199,7 @@ object when the client issues a GetJob(level == 2) request. -ChangeID and Client Caching of Printer Information +ChangeID & Client Caching of Printer Information @@ -345,7 +345,7 @@ information -A SPOOL_NOTIFY_INFO contains: +A SPOOL_NOTIFY_INFO contains: @@ -359,7 +359,7 @@ in the SPOOL_NOTIFY_INFO_DATA array -The SPOOL_NOTIFY_INFO_DATA entries contain: +The SPOOL_NOTIFY_INFO_DATA entries contain: diff --git a/docs/docbook/devdoc/sam.sgml b/docs/docbook/devdoc/sam.sgml index 84c17d65e26..654bd5fe9c3 100644 --- a/docs/docbook/devdoc/sam.sgml +++ b/docs/docbook/devdoc/sam.sgml @@ -27,7 +27,7 @@ accessed. For example, when you call - +< NTSTATUS sam_get_account_by_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *domain, const char *name, SAM_ACCOUNT_HANDLE **account) @@ -182,7 +182,7 @@ This is where smbd, samtest and whatever end-user replacement we have for pdbedit sits. They use only the SAM interface, and do not get 'special knowledge' of what is below them. - + SAM Interface diff --git a/docs/docbook/devdoc/unix-smb.sgml b/docs/docbook/devdoc/unix-smb.sgml index d6a658089c4..aae96edfb70 100644 --- a/docs/docbook/devdoc/unix-smb.sgml +++ b/docs/docbook/devdoc/unix-smb.sgml @@ -13,7 +13,7 @@ This is a short document that describes some of the issues that confront a SMB implementation on unix, and how Samba copes with -them. They may help people who are looking at unix<->PC +them. They may help people who are looking at unix<->PC interoperability. diff --git a/docs/docbook/faq/clientapp.sgml b/docs/docbook/faq/clientapp.sgml index 3d44dd44c03..6d687bf772f 100644 --- a/docs/docbook/faq/clientapp.sgml +++ b/docs/docbook/faq/clientapp.sgml @@ -1,8 +1,8 @@ - + Specific client application problems -MS Office Setup reports "Cannot change properties of '\\MSOFFICE\\SETUP.INI'" +MS Office Setup reports "Cannot change properties of '\MSOFFICE\SETUP.INI'" When installing MS Office on a Samba drive for which you have admin user permissions, ie. admin users = username, you will find the @@ -60,16 +60,16 @@ set the following parameters on the share containing it: -[MSOP95] - path = /where_you_put_it - comment = Your comment - volume = "The_CD_ROM_Label" - read only = yes - available = yes - share modes = no - locking = no - browseable = yes - public = yes + [MSOP95] + path = /where_you_put_it + comment = Your comment + volume = "The_CD_ROM_Label" + read only = yes + available = yes + share modes = no + locking = no + browseable = yes + public = yes diff --git a/docs/docbook/faq/config.sgml b/docs/docbook/faq/config.sgml index a95ac84d2fd..78f73252a23 100644 --- a/docs/docbook/faq/config.sgml +++ b/docs/docbook/faq/config.sgml @@ -1,4 +1,4 @@ - + Configuration problems diff --git a/docs/docbook/faq/errors.sgml b/docs/docbook/faq/errors.sgml index 905e7c92c22..6476ec064e4 100644 --- a/docs/docbook/faq/errors.sgml +++ b/docs/docbook/faq/errors.sgml @@ -1,4 +1,4 @@ - + Common errors @@ -49,6 +49,7 @@ the samba HOWTO Collection Windows NT in the chapter "Portability" of the samba HOWTO collection + @@ -62,6 +63,7 @@ the program always prompts for the password if the server is a Samba server. It also ignores the "-N" argument when querying some (but not all) of our NT servers. + No, it does not ignore -N, it is just that your server rejected the diff --git a/docs/docbook/faq/features.sgml b/docs/docbook/faq/features.sgml index 66b05379cce..d464885f9e2 100644 --- a/docs/docbook/faq/features.sgml +++ b/docs/docbook/faq/features.sgml @@ -1,4 +1,4 @@ - + Features @@ -83,7 +83,9 @@ manual carefully. Tools for printing faxes Your incomed faxes are in: -/var/spool/fax/incoming. Print it with: +/var/spool/fax/incoming + +print it with: for i in * @@ -139,7 +141,7 @@ lp3|fax:\ :sd=/usr/spool/lp3:\ :if=/usr/local/etc/mgetty+sendfax/faxfilter:sh:sf:mx#0:\ :lf=/usr/spool/lp3/fax-log: - + Now, edit your smb.conf so you have a smb based printer named "fax" diff --git a/docs/docbook/faq/general.sgml b/docs/docbook/faq/general.sgml index 3f7c2074f95..38bcdf49e37 100644 --- a/docs/docbook/faq/general.sgml +++ b/docs/docbook/faq/general.sgml @@ -1,4 +1,4 @@ - + General Information diff --git a/docs/docbook/faq/install.sgml b/docs/docbook/faq/install.sgml index f8341dc65ac..88520fc71d4 100644 --- a/docs/docbook/faq/install.sgml +++ b/docs/docbook/faq/install.sgml @@ -1,4 +1,4 @@ - + Compiling and installing Samba on a Unix host @@ -22,7 +22,7 @@ client to client - check your client's documentation. -Some files that I KNOW are on the server don't show up when I view the files from my client! +Some files that I KNOW are on the server doesn't show up when I view the files from my client! See the next question. diff --git a/docs/docbook/manpages/findsmb.1.sgml b/docs/docbook/manpages/findsmb.1.sgml index 090b1c8388d..0b3bbca0176 100644 --- a/docs/docbook/manpages/findsmb.1.sgml +++ b/docs/docbook/manpages/findsmb.1.sgml @@ -1,5 +1,5 @@ - + findsmb @@ -23,16 +23,15 @@ DESCRIPTION - This perl script is part of the - Samba7 - suite. + This perl script is part of the + Samba suite. findsmb is a perl script that prints out several pieces of information about machines on a subnet that respond to SMB name query requests. - It uses nmblookup1 - and smbclient1 - to obtain this information. + It uses + nmblookup(1) and + smbclient(1) to obtain this information. @@ -46,17 +45,16 @@ bugs in Windows95 into account when trying to find a Netbios name registered of the remote machine. This option is disabled by default because it is specific to Windows 95 and Windows 95 machines only. - If set, nmblookup1 + If set, nmblookup will be called with -B option. subnet broadcast address Without this option, findsmb will probe the subnet of the machine where - findsmb1 - is run. This value is passed to - nmblookup1 - as part of the -B option. + findsmb is run. This value is passed + to nmblookup as part of the + -B option. @@ -78,21 +76,19 @@ version. The command with -r option - must be run on a system without - nmbd8 - running. - + must be run on a system without nmbd running. If nmbd is running on the system, you will only get the IP address and the DNS name of the machine. To get proper responses from Windows 95 and Windows 98 machines, the command must be run as root and with -r option on a machine without nmbd running. - For example, running findsmb - without -r option set would yield output similar + For example, running findsmb without + -r option set would yield output similar to the following - + IP ADDR NETBIOS NAME WORKGROUP/OS/VERSION --------------------------------------------------------------------- 192.168.35.10 MINESET-TEST1 [DMVENGR] @@ -105,7 +101,7 @@ IP ADDR NETBIOS NAME WORKGROUP/OS/VERSION 192.168.35.88 SCNT2 +[MVENGR] [Windows NT 4.0] [NT LAN Manager 4.0] 192.168.35.93 FROGSTAR-PC [MVENGR] [Windows 5.0] [Windows 2000 LAN Manager] 192.168.35.97 HERBNT1 *[HERB-NT] [Windows NT 4.0] [NT LAN Manager 4.0] - + @@ -119,12 +115,10 @@ IP ADDR NETBIOS NAME WORKGROUP/OS/VERSION SEE ALSO - - nmbd8 - , - smbclient1 - , and nmblookup - 1 + nmbd(8), + smbclient(1) + , and + nmblookup(1) @@ -138,11 +132,11 @@ IP ADDR NETBIOS NAME WORKGROUP/OS/VERSION The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at ftp://ftp.icce.rug.nl/pub/unix/) - and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook - XML 4.2 for Samba 3.0 was done by Alexander Bokovoy. + excellent piece of Open Source software, available at + + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 + release by Jeremy Allison. The conversion to DocBook for + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/lmhosts.5.sgml b/docs/docbook/manpages/lmhosts.5.sgml index a8a5f2c0728..7934c18e8ec 100644 --- a/docs/docbook/manpages/lmhosts.5.sgml +++ b/docs/docbook/manpages/lmhosts.5.sgml @@ -1,5 +1,5 @@ - + lmhosts @@ -13,15 +13,15 @@ - lmhosts is the Samba - 7 NetBIOS name to IP address mapping file. + lmhosts is the + Samba NetBIOS name to IP address mapping file. DESCRIPTION - This file is part of the Samba - 7 suite. + This file is part of the + Samba suite. lmhosts is the Samba NetBIOS name to IP address mapping file. It @@ -35,7 +35,7 @@ It is an ASCII file containing one line for NetBIOS name. The two fields on each line are separated from each other by white space. Any entry beginning with '#' is ignored. Each line - in the lmhosts file contains the following information: + in the lmhosts file contains the following information : IP Address - in dotted decimal format. @@ -52,16 +52,16 @@ - An example follows: + An example follows : - + # # Sample Samba lmhosts file. # 192.9.200.1 TESTPC 192.9.200.20 NTSERVER#20 192.9.200.21 SAMBASERVER - + Contains three IP to NetBIOS name mappings. The first and third will be returned for any queries for the names "TESTPC" @@ -73,24 +73,24 @@ be resolved. The default location of the lmhosts file - is in the same directory as the smb.conf - 5 file. + is in the same directory as the + smb.conf(5)> file. VERSION - This man page is correct for version 3.0 of the Samba suite. + This man page is correct for version 2.2 of + the Samba suite. SEE ALSO - - smbclient1 - , smb.conf5 - , and smbpasswd - 8 + smbclient(1) + , + smb.conf(5), and + smbpasswd(8) @@ -108,8 +108,7 @@ ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook - XML 4.2 was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/net.8.sgml b/docs/docbook/manpages/net.8.sgml index 62cee8c1d72..aab9032f147 100644 --- a/docs/docbook/manpages/net.8.sgml +++ b/docs/docbook/manpages/net.8.sgml @@ -1,5 +1,5 @@ - + net @@ -42,8 +42,8 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. The samba net utility is meant to work just like the net utility available for windows and DOS. @@ -65,8 +65,7 @@ -w target-workgroup - Sets target workgroup or domain. You have to specify - either this option or the IP address or the name of a server. + Sets target workgroup or domain. You have to specify either this option or the IP address or the name of a server. @@ -87,8 +86,7 @@ -I ip-address - IP address of target server to use. You have to - specify either this option or a target workgroup or a target server. + IP address of target server to use. You have to specify either this option or a target workgroup or a target server. @@ -116,8 +114,7 @@ -S server - Name of target server. You should specify either - this option or a target workgroup or a target IP address. + Name of target server. You should specify either this option or a target workgroup or a target IP address. @@ -214,7 +211,7 @@ SYSTEM - Displays the time on the remote server in a format ready for /bin/date + Displays the time on the remote server in a format ready for /bin/date @@ -222,7 +219,7 @@ SET Tries to set the date and time of the local server to that on - the remote server using /bin/date. + the remote server using /bin/date. @@ -279,7 +276,7 @@ - USER ADD <name> [password] [-F user flags] [misc. options] + USER ADD <name> [password] [-F user flags] [misc. options Add specified user diff --git a/docs/docbook/manpages/nmbd.8.sgml b/docs/docbook/manpages/nmbd.8.sgml index 6c7ecce4e9d..db920c79a1c 100644 --- a/docs/docbook/manpages/nmbd.8.sgml +++ b/docs/docbook/manpages/nmbd.8.sgml @@ -1,5 +1,5 @@ - + nmbd @@ -35,8 +35,7 @@ DESCRIPTION - This program is part of the Samba - 7 suite. + This program is part of the Samba suite. nmbd is a server that understands and can reply to NetBIOS over IP name service requests, like @@ -58,8 +57,8 @@ option (see OPTIONS below). Thus nmbd will reply to broadcast queries for its own name(s). Additional names for nmbd to respond on can be set - via parameters in the smb.conf - 5 configuration file. + via parameters in the + smb.conf(5) configuration file. nmbd can also be used as a WINS (Windows Internet Name Server) server. What this basically means @@ -125,7 +124,7 @@ server is executed on the command line of a shell. Setting this parameter negates the implicit daemon mode when run from the command line. nmbd also logs to standard - output, as if the -S parameter had been + output, as if the -S parameter had been given. @@ -148,10 +147,10 @@ NetBIOS lmhosts file. The lmhosts file is a list of NetBIOS names to IP addresses that is loaded by the nmbd server and used via the name - resolution mechanism name resolve - order described in smb.conf - 5 to resolve any - NetBIOS name queries needed by the server. Note + resolution mechanism + name resolve order described in smb.conf(5) + to resolve any NetBIOS name queries needed by the server. Note that the contents of this file are NOT used by nmbd to answer any name queries. Adding a line to this file affects name NetBIOS resolution @@ -161,8 +160,9 @@ Samba as part of the build process. Common defaults are /usr/local/samba/lib/lmhosts, /usr/samba/lib/lmhosts or - /etc/samba/lmhosts. See the lmhosts - 5 man page for details on the contents of this file. + /etc/lmhosts. See the + lmhosts(5) + man page for details on the contents of this file. @@ -191,9 +191,9 @@ cryptic. Note that specifying this parameter here will override - the log level - parameter in the smb.conf - 5 file. + the log level + parameter in the + smb.conf(5) file. @@ -216,12 +216,11 @@ -n <primary NetBIOS name> This option allows you to override the NetBIOS name that Samba uses for itself. This is identical - to setting the NetBIOS - name parameter in the smb.conf - 5 file. However, a command + to setting the + NetBIOS name parameter in the + smb.conf file. However, a command line setting will take precedence over settings in - smb.conf - 5. + smb.conf. @@ -242,8 +241,8 @@ this may be changed when Samba is autoconfigured. The file specified contains the configuration details - required by the server. See smb.conf - 5 for more information. + required by the server. See + smb.conf(5) for more information. @@ -259,7 +258,7 @@ inetd meta-daemon, this file must contain suitable startup information for the meta-daemon. See the install document + url="UNIX_INSTALL.html">UNIX_INSTALL.html document for details. @@ -272,7 +271,7 @@ If running the server as a daemon at startup, this file will need to contain an appropriate startup sequence for the server. See the "How to Install and Test SAMBA" document + url="UNIX_INSTALL.html">UNIX_INSTALL.html document for details. @@ -282,23 +281,21 @@ meta-daemon inetd, this file must contain a mapping of service name (e.g., netbios-ssn) to service port (e.g., 139) and protocol type (e.g., tcp). - See the "How to Install and Test SAMBA" + See the UNIX_INSTALL.html document for details. /usr/local/samba/lib/smb.conf - This is the default location of - the smb.conf - 5 server - configuration file. Other common places that systems + This is the default location of the + smb.conf + server configuration file. Other common places that systems install this file are /usr/samba/lib/smb.conf - and /etc/samba/smb.conf. + and /etc/smb.conf. When run as a WINS server (see the - wins support - parameter in the smb.conf - 5 man page), + wins support + parameter in the smb.conf(5) man page), nmbd will store the WINS database in the file wins.dat in the var/locks directory configured under @@ -306,9 +303,9 @@ If nmbd is acting as a browse master (see the local master - parameter in the smb.conf - 5 man page, nmbd + url="smb.conf.5.html#LOCALMASTER">local master + parameter in the smb.conf(5) man page, + nmbd will store the browsing database in the file browse.dat in the var/locks directory configured under wherever Samba was configured to install itself. @@ -334,11 +331,10 @@ cause nmbd to dump out its server database in the log.nmb file. - The debug log level of nmbd may be raised or lowered - using smbcontrol - 1 (SIGUSR[1|2] signals - are no longer used since Samba 2.2). This is to allow - transient problems to be diagnosed, whilst still running + The debug log level of nmbd may be raised or lowered using + smbcontrol(1) + (SIGUSR[1|2] signals are no longer used in Samba 2.2). This is + to allow transient problems to be diagnosed, whilst still running at a normally low log level. @@ -352,15 +348,14 @@ SEE ALSO - - inetd - 8, smbd - 8, smb.conf - 5, smbclient - 1, testparm - 1, testprns - 1, and the Internet - RFC's rfc1001.txt, rfc1002.txt. + inetd(8), smbd(8), + smb.conf(5) + , smbclient(1) + , + testparm(1), + testprns(1), and the Internet RFC's + rfc1001.txt, rfc1002.txt. In addition the CIFS (formerly SMB) specification is available as a link from the Web page http://samba.org/cifs/. @@ -376,11 +371,11 @@ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at + excellent piece of Open Source software, available at + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook - XML 4.2 for Samba 3.0 was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/nmblookup.1.sgml b/docs/docbook/manpages/nmblookup.1.sgml index 7dd7f105d75..33ae631ed96 100644 --- a/docs/docbook/manpages/nmblookup.1.sgml +++ b/docs/docbook/manpages/nmblookup.1.sgml @@ -36,8 +36,8 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. nmblookup is used to query NetBIOS names and map them to IP addresses in a network using NetBIOS over TCP/IP @@ -66,7 +66,7 @@ query to a machine running a WINS server and the user wishes to query the names in the WINS server. If this bit is unset the normal (broadcast responding) NetBIOS processing code - on a machine is used instead. See RFC1001, RFC1002 for details. + on a machine is used instead. See rfc1001, rfc1002 for details. @@ -86,8 +86,8 @@ where it ignores the source port of the requesting packet and only replies to UDP port 137. Unfortunately, on most UNIX systems root privilege is needed to bind to this port, and - in addition, if the nmbd - 8 daemon is running on this machine it also binds to this port. + in addition, if the nmbd(8) + daemon is running on this machine it also binds to this port. @@ -115,8 +115,7 @@ query to the broadcast address of the network interfaces as either auto-detected or defined in the interfaces - parameter of the smb.conf - 5 file. + parameter of the smb.conf (5) file. @@ -199,7 +198,7 @@ This is the NetBIOS name being queried. Depending upon the previous options this may be a NetBIOS name or IP address. If a NetBIOS name then the different name types may be specified - by appending '#<type>' to the name. This name may also be + by appending '#<type>' to the name. This name may also be '*', which will return all registered names within a broadcast area. @@ -212,8 +211,8 @@ nmblookup can be used to query a WINS server (in the same way nslookup is - used to query DNS servers). To query a WINS server, nmblookup - must be called like this: + used to query DNS servers). To query a WINS server, + nmblookup must be called like this: nmblookup -U server -R 'name' @@ -234,10 +233,10 @@ SEE ALSO - nmbd - 8, samba - 7, and smb.conf - 5. + nmbd(8), + samba(7), and smb.conf(5) + @@ -250,11 +249,11 @@ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at + excellent piece of Open Source software, available at + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook - XML 4.2 for Samba 3.0 was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/pdbedit.8.sgml b/docs/docbook/manpages/pdbedit.8.sgml index e6231bfa8c8..1484bfec9a8 100644 --- a/docs/docbook/manpages/pdbedit.8.sgml +++ b/docs/docbook/manpages/pdbedit.8.sgml @@ -1,7 +1,7 @@ %globalentities; ]> - + pdbedit @@ -42,8 +42,8 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. The pdbedit program is used to manage the users accounts stored in the sam database and can only be run by root. @@ -67,11 +67,12 @@ present in the users database. This option prints a list of user/uid pairs separated by the ':' character. + Example: pdbedit -l - -sorce:500:Simo Sorce -samba:45:Test User - + + sorce:500:Simo Sorce + samba:45:Test User + @@ -84,26 +85,26 @@ samba:45:Test User out the account fields in a descriptive format. Example: pdbedit -l -v - ---------------- -username: sorce -user ID/Group: 500/500 -user RID/GRID: 2000/2001 -Full Name: Simo Sorce -Home Directory: \\BERSERKER\sorce -HomeDir Drive: H: -Logon Script: \\BERSERKER\netlogon\sorce.bat -Profile Path: \\BERSERKER\profile ---------------- -username: samba -user ID/Group: 45/45 -user RID/GRID: 1090/1091 -Full Name: Test User -Home Directory: \\BERSERKER\samba -HomeDir Drive: -Logon Script: -Profile Path: \\BERSERKER\profile - + + --------------- + username: sorce + user ID/Group: 500/500 + user RID/GRID: 2000/2001 + Full Name: Simo Sorce + Home Directory: \\BERSERKER\sorce + HomeDir Drive: H: + Logon Script: \\BERSERKER\netlogon\sorce.bat + Profile Path: \\BERSERKER\profile + --------------- + username: samba + user ID/Group: 45/45 + user RID/GRID: 1090/1091 + Full Name: Test User + Home Directory: \\BERSERKER\samba + HomeDir Drive: + Logon Script: + Profile Path: \\BERSERKER\profile + @@ -114,15 +115,14 @@ Profile Path: \\BERSERKER\profile This option sets the "smbpasswd" listing format. It will make pdbedit list the users in the database, printing out the account fields in a format compatible with the - smbpasswd file format. (see the - smbpasswd - 5 for details) + smbpasswd file format. (see the smbpasswd(5) for details) Example: pdbedit -l -w - -sorce:500:508818B733CE64BEAAD3B435B51404EE:D2A2418EFC466A8A0F6B1DBB5C3DB80C:[UX ]:LCT-00000000: -samba:45:0F2B255F7B67A7A9AAD3B435B51404EE:BC281CE3F53B6A5146629CD4751D3490:[UX ]:LCT-3BFA1E8D: - + + sorce:500:508818B733CE64BEAAD3B435B51404EE:D2A2418EFC466A8A0F6B1DBB5C3DB80C:[UX ]:LCT-00000000: + samba:45:0F2B255F7B67A7A9AAD3B435B51404EE:BC281CE3F53B6A5146629CD4751D3490:[UX ]:LCT-3BFA1E8D: + @@ -136,6 +136,8 @@ samba:45:0F2B255F7B67A7A9AAD3B435B51404EE:BC281CE3F53B6A5146629CD4751D3490:[UX operations. + + -f fullname @@ -160,6 +162,7 @@ samba:45:0F2B255F7B67A7A9AAD3B435B51404EE:BC281CE3F53B6A5146629CD4751D3490:[UX + -D drive This option can be used while adding or @@ -204,10 +207,9 @@ samba:45:0F2B255F7B67A7A9AAD3B435B51404EE:BC281CE3F53B6A5146629CD4751D3490:[UX ask for the password to be used. Example: pdbedit -a -u sorce -new password: -retype new password - - + new password: + retype new password + @@ -279,9 +281,9 @@ retype new password maximum password age and bad lockout attempt. Example: pdbedit -P "bad lockout attempt" - -account policy value for bad lockout attempt is 0 - + + account policy value for bad lockout attempt is 0 + @@ -294,10 +296,10 @@ account policy value for bad lockout attempt is 0 Example: pdbedit -P "bad lockout attempt" -V 3 - -account policy value for bad lockout attempt was 0 -account policy value for bad lockout attempt is now 3 - + + account policy value for bad lockout attempt was 0 + account policy value for bad lockout attempt is now 3 + @@ -325,9 +327,9 @@ account policy value for bad lockout attempt is now 3 SEE ALSO - smbpasswd - 5, samba - 7 + smbpasswd(8), + samba(7) + @@ -340,11 +342,11 @@ account policy value for bad lockout attempt is now 3 The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at + excellent piece of Open Source software, available at + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook - XML 4.2 for Samba 3.0 was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/rpcclient.1.sgml b/docs/docbook/manpages/rpcclient.1.sgml index 933938d438d..10e0ff438d5 100644 --- a/docs/docbook/manpages/rpcclient.1.sgml +++ b/docs/docbook/manpages/rpcclient.1.sgml @@ -1,7 +1,7 @@ %globalentities; ]> - + rpcclient @@ -36,8 +36,8 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. rpcclient is a utility initially developed to test MS-RPC functionality in Samba itself. It has undergone @@ -56,8 +56,8 @@ NetBIOS name of Server to which to connect. The server can be any SMB/CIFS server. The name is resolved using the - name resolve order line from smb.conf - 5. + name resolve order line from + smb.conf(5). @@ -68,11 +68,11 @@ password used in the connection. The format of the file is - -username = <value> -password = <value> -domain = <value> - + + username = <value> + password = <value> + domain = <value> + Make certain that the permissions on the file restrict access from unwanted users. @@ -85,10 +85,13 @@ domain = <value> execute semicolon separated commands (listed below)) + + + - &stdarg.help; &stdarg.debuglevel; - + &stdarg.help; + -I IP-address IP address is the address of the server to connect to. @@ -160,6 +163,9 @@ domain = <value> it in directly. + + + -W|--workgroup=domain Set the SMB domain of the username. This @@ -169,6 +175,7 @@ domain = <value> opposed to the Domain SAM). + @@ -207,10 +214,12 @@ domain = <value> + + SPOOLSS - adddriver <arch> <config> + adddriver <arch> <config> - Execute an AddPrinterDriver() RPC to install the printer driver information on the server. Note that the driver files should already exist in the directory returned by @@ -220,16 +229,16 @@ domain = <value> The config parameter is defined as follows: - -Long Printer Name:\ -Driver File Name:\ -Data File Name:\ -Config File Name:\ -Help File Name:\ -Language Monitor Name:\ -Default Data Type:\ -Comma Separated list of Files - + + Long Printer Name:\ + Driver File Name:\ + Data File Name:\ + Config File Name:\ + Help File Name:\ + Language Monitor Name:\ + Default Data Type:\ + Comma Separated list of Files + Any empty fields should be enter as the string "NULL". @@ -239,7 +248,10 @@ Comma Separated list of Files be "NULL". On a remote NT print server, the Print Monitor for a driver must already be installed prior to adding the driver or else the RPC will fail. - + + + + addprinter <printername> <sharename> <drivername> <port> - Add a printer on the remote server. This printer @@ -375,7 +387,7 @@ Comma Separated list of Files From Luke Leighton's original rpcclient man page: - WARNING! The MSRPC over SMB code has + "WARNING! The MSRPC over SMB code has been developed from examining Network traces. No documentation is available from the original creators (Microsoft) on how MSRPC over SMB works, or how the individual MSRPC services work. Microsoft's @@ -383,13 +395,12 @@ Comma Separated list of Files to be... a bit flaky in places. The development of Samba's implementation is also a bit rough, - and as more of the services are understood, it can even result in - versions of smbd - 8 and rpcclient - 1 that are incompatible for some commands or services. Additionally, + and as more of the services are understood, it can even result in + versions of smbd(8) and rpcclient(1) + that are incompatible for some commands or services. Additionally, the developers are sending reports to Microsoft, and problems found or reported to Microsoft are fixed in Service Packs, which may - result in incompatibilities. + result in incompatibilities." @@ -411,8 +422,7 @@ Comma Separated list of Files The original rpcclient man page was written by Matthew Geddes, Luke Kenneth Casson Leighton, and rewritten by Gerald Carter. The conversion to DocBook for Samba 2.2 was done by Gerald - Carter. The conversion to DocBook XML 4.2 for Samba 3.0 was - done by Alexander Bokovoy. + Carter. diff --git a/docs/docbook/manpages/samba.7.sgml b/docs/docbook/manpages/samba.7.sgml index a352a6a7c66..17865edd81e 100644 --- a/docs/docbook/manpages/samba.7.sgml +++ b/docs/docbook/manpages/samba.7.sgml @@ -1,5 +1,5 @@ - + samba @@ -8,7 +8,7 @@ - Samba + SAMBA A Windows SMB/CIFS fileserver for UNIX @@ -29,30 +29,26 @@ - smbd - 8 - The smbd daemon provides the file and print services to + smbd + The smbd + daemon provides the file and print services to SMB clients, such as Windows 95/98, Windows NT, Windows for Workgroups or LanManager. The configuration file - for this daemon is described in smb.conf - 5 + for this daemon is described in smb.conf - nmbd - 8 + nmbd The nmbd daemon provides NetBIOS nameservice and browsing support. The configuration file for this daemon - is described in smb.conf - 5 + is described in smb.conf - smbclient - 1 + smbclient The smbclient program implements a simple ftp-like client. This is useful for accessing SMB shares on other compatible @@ -63,17 +59,15 @@ - testparm - 1 + testparm The testparm - utility is a simple syntax checker for Samba's smb.conf - 5 configuration file. + utility is a simple syntax checker for Samba's + smb.confconfiguration file. - testprns - 1 + testprns The testprns utility supports testing printer names defined in your printcap file used @@ -82,8 +76,7 @@ - smbstatus - 1 + smbstatus The smbstatus tool provides access to information about the current connections to smbd. @@ -91,8 +84,7 @@ - nmblookup - 1 + nmblookup The nmblookup tools allows NetBIOS name queries to be made from a UNIX host. @@ -100,18 +92,15 @@ - smbgroupedit - 8 - The smbgroupedit - tool allows for mapping unix groups to NT Builtin, - Domain, or Local groups. Also it allows setting - priviledges for that group, such as saAddUser, etc. + make_smbcodepage + The make_smbcodepage + utility provides a means of creating SMB code page + definition files for your smbd server. - smbpasswd - 8 + smbpasswd The smbpasswd command is a tool for changing LanMan and Windows NT password hashes on Samba and Windows NT servers. @@ -158,8 +147,8 @@ list. Details on how to join the mailing list are given in the README file that comes with Samba. - If you have access to a WWW viewer (such as Mozilla - or Konqueror) then you will also find lots of useful information, + If you have access to a WWW viewer (such as Netscape + or Mosaic) then you will also find lots of useful information, including back issues of the Samba mailing list, at http://lists.samba.org. @@ -167,7 +156,7 @@ VERSION - This man page is correct for version 3.0 of the + This man page is correct for version 2.2 of the Samba suite. @@ -181,8 +170,8 @@ If you have patches to submit, visit http://devel.samba.org/ - for information on how to do it properly. We prefer patches - in diff -u format. + for information on how to do it properly. We prefer patches in + diff -u format. @@ -217,11 +206,11 @@ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at + excellent piece of Open Source software, available at + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook XML - 4.2 for Samba 3.0 was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/smb.conf.5.sgml b/docs/docbook/manpages/smb.conf.5.sgml index b483a97b317..01f767d2565 100644 --- a/docs/docbook/manpages/smb.conf.5.sgml +++ b/docs/docbook/manpages/smb.conf.5.sgml @@ -1,5 +1,5 @@ - + smb.conf @@ -15,13 +15,14 @@ SYNOPSIS - The smb.conf file is a configuration - file for the Samba suite. smb.conf contains - runtime configuration information for the Samba programs. The smb.conf file - is designed to be configured and administered by the swat - 8 program. The complete - description of the file format and possible parameters held within - are here for reference purposes. + The smb.conf file is a configuration + file for the Samba suite. smb.conf contains + runtime configuration information for the Samba programs. The + smb.conf file is designed to be configured and + administered by the swat(8) + program. The complete description of the file format and + possible parameters held within are here for reference purposes. + FILE FORMAT @@ -104,13 +105,13 @@ The user has write access to the path /home/bar. The share is accessed via the share name "foo": - - -[foo] - path = /home/bar - read only = no - - + + + [foo] + path = /home/bar + read only = no + + The following sample section defines a printable share. The share is readonly, but printable. That is, the only write @@ -119,15 +120,15 @@ access will be permitted as the default guest user (specified elsewhere): - - -[aprinter] - path = /usr/spool/public - read only = yes - printable = yes - guest ok = yes - - + + + [aprinter] + path = /usr/spool/public + read only = yes + printable = yes + guest ok = yes + + @@ -191,12 +192,12 @@ than others. The following is a typical and suitable [homes] section: - - -[homes] - read only = no - - + + + [homes] + read only = no + + An important point is that if guest access is specified in the [homes] section, all home directories will be @@ -256,12 +257,12 @@ it. A typical [printers] entry would look like this: - -[printers] - path = /usr/spool/public - guest ok = yes - printable = yes - + + [printers] + path = /usr/spool/public + guest ok = yes + printable = yes + All aliases given for a printer in the printcap file are legitimate printer names as far as the server is concerned. @@ -269,11 +270,11 @@ to set up a pseudo-printcap. This is a file consisting of one or more lines like this: - - -alias|alias|alias|alias... - - + + + alias|alias|alias|alias... + + Each alias should be an acceptable printer name for your printing subsystem. In the [global] section, specify @@ -471,7 +472,7 @@ alias|alias|alias|alias... There are some quite creative things that can be done - with these substitutions and other smb.conf options. + with these substitutions and other smb.conf options. @@ -551,7 +552,7 @@ alias|alias|alias|alias... then steps 1 to 5 are skipped. - + If the client has passed a username/password pair and that username/password pair is validated by the UNIX system's password programs then the connection is made as that @@ -804,7 +805,7 @@ alias|alias|alias|alias... allow hosts available blocking locks - block size +block size browsable browseable case sensitive @@ -936,10 +937,10 @@ alias|alias|alias|alias... - abort shutdown script (G) + abort shutdown script (G) This parameter only exists in the HEAD cvs branch - This a full path name to a script called by smbd - 8 that + This a full path name to a script called by + smbd(8) that should stop a shutdown procedure issued by the shutdown script. @@ -951,7 +952,7 @@ alias|alias|alias|alias... - addprinter command (G) + addprinter command (G) With the introduction of MS-RPC based printing support for Windows NT/2000 clients in Samba 2.2, The MS Add Printer Wizard (APW) icon is now also available in the @@ -965,12 +966,12 @@ alias|alias|alias|alias... will perform the necessary operations for adding the printer to the print system and to add the appropriate service definition to the smb.conf file in order that it can be - shared by smbd - 8. + shared by smbd(8) + . The addprinter command is automatically invoked with the following parameter (in - order): + order: printer name @@ -996,7 +997,7 @@ alias|alias|alias|alias... See also deleteprinter command, printing, + linkend="printing">printing, show add printer wizard @@ -1009,7 +1010,7 @@ alias|alias|alias|alias... - add share command (G) + add share command (G) Samba 2.2.0 introduced the ability to dynamically add and delete shares via the Windows NT 4.0 Server Manager. The add share command is used to define an @@ -1063,10 +1064,9 @@ alias|alias|alias|alias... - add machine script (G) + add machine script (G) This is the full pathname to a script that will - be run by smbd - 8 when a machine is added + be run by smbd(8) when a machine is added to it's domain using the administrator username and password method. This option is only required when using sam back-ends tied to the @@ -1082,7 +1082,7 @@ alias|alias|alias|alias... - ads server (G) + ads server (G) If this option is specified, samba does not try to figure out what ads server to use itself, but uses the specified ads server. Either one DNS name or IP @@ -1095,10 +1095,10 @@ alias|alias|alias|alias... - add user script (G) + add user script (G) This is the full pathname to a script that will - be run AS ROOT by smbd - 8 under special circumstances described below. + be run AS ROOT by smbd(8) + under special circumstances described below. Normally, a Samba server requires that UNIX users are created for all users accessing files on this server. For sites @@ -1108,16 +1108,16 @@ alias|alias|alias|alias... url="smbd.8.html">smbd to create the required UNIX users ON DEMAND when a user accesses the Samba server. - In order to use this option, smbd - 8 must NOT be set to security = share + In order to use this option, smbd + must NOT be set to security = share and add user script must be set to a full pathname for a script that will create a UNIX user given one argument of %u, which expands into the UNIX user name to create. When the Windows user attempts to access the Samba server, - at login (session setup in the SMB protocol) time, smbd - 8 contacts the password server and + at login (session setup in the SMB protocol) time, + smbd contacts the password server and attempts to authenticate the given user with the given password. If the authentication succeeds then smbd attempts to find a UNIX user in the UNIX password database to map the @@ -1145,10 +1145,10 @@ alias|alias|alias|alias... - add group script (G) + add group script (G) This is the full pathname to a script that will - be run AS ROOT by smbd - 8 when a new group is + be run AS ROOT by smbd(8) when a new group is requested. It will expand any %g to the group name passed. This script is only useful for installations using the @@ -1161,7 +1161,7 @@ alias|alias|alias|alias... - admin users (S) + admin users (S) This is a list of users who will be granted administrative privileges on the share. This means that they will do all file operations as the super-user (root). @@ -1177,13 +1177,13 @@ alias|alias|alias|alias... - add user to group script (G) + add user to group script (G) Full path to the script that will be called when a user is added to a group using the Windows NT domain administration - tools. It will be run by smbd - 8 AS ROOT. - Any %g will be replaced with the group name and - any %u will be replaced with the user name. + tools. It will be run by smbd(8) + AS ROOT. Any %g will be + replaced with the group name and any %u will + be replaced with the user name. Default: add user to group script = @@ -1194,13 +1194,13 @@ alias|alias|alias|alias... - allow hosts (S) + allow hosts (S) Synonym for hosts allow. - algorithmic rid base (G) + algorithmic rid base (G) This determines how Samba will use its algorithmic mapping from uids/gid to the RIDs needed to construct NT Security Identifiers. @@ -1223,7 +1223,7 @@ alias|alias|alias|alias... - allow trusted domains (G) + allow trusted domains (G) This option only takes effect when the security option is set to server or domain. @@ -1247,9 +1247,10 @@ alias|alias|alias|alias... - announce as (G) - This specifies what type of server nmbd - 8 will announce itself as, to a network neighborhood browse + announce as (G) + This specifies what type of server + nmbd + will announce itself as, to a network neighborhood browse list. By default this is set to Windows NT. The valid options are : "NT Server" (which can also be written as "NT"), "NT Workstation", "Win95" or "WfW" meaning Windows NT Server, @@ -1268,7 +1269,7 @@ alias|alias|alias|alias... - announce version (G) + announce version (G) This specifies the major and minor version numbers that nmbd will use when announcing itself as a server. The default is 4.9. Do not change this parameter unless you have a specific @@ -1283,7 +1284,7 @@ alias|alias|alias|alias... - auto services (G) + auto services (G) This is a synonym for the preload. @@ -1292,7 +1293,7 @@ alias|alias|alias|alias... - auth methods (G) + auth methods (G) This option allows the administrator to chose what authentication methods smbd will use when authenticating a user. This option defaults to sensible values based on @@ -1310,7 +1311,7 @@ alias|alias|alias|alias... - available (S) + available (S) This parameter lets you "turn off" a service. If available = no, then ALL attempts to connect to the service will fail. Such failures are @@ -1324,12 +1325,12 @@ alias|alias|alias|alias... - bind interfaces only (G) + bind interfaces only (G) This global parameter allows the Samba admin to limit what interfaces on a machine will serve SMB requests. It - affects file service smbd - 8 and name service nmbd - 8 in a slightly different ways. + affects file service smbd(8) and + name service nmbd(8) in slightly + different ways. For name service it causes nmbd to bind to ports 137 and 138 on the interfaces listed in the nmbd. - For file service it causes smbd - 8 to bind only to the interface list - given in the + For file service it causes smbd(8) + to bind only to the interface list given in the interfaces parameter. This restricts the networks that smbd will serve to packets coming in those interfaces. Note that you should not use this parameter for machines @@ -1360,9 +1360,10 @@ alias|alias|alias|alias... If bind interfaces only is set then unless the network address 127.0.0.1 is added - to the interfaces parameter list smbpasswd - 8 and swat - 8 may not work as expected due to the reasons covered below. + to the interfaces parameter list smbpasswd(8) + and swat(8) may + not work as expected due to the reasons covered below. To change a users SMB password, the smbpasswd by default connects to the localhost - 127.0.0.1 @@ -1372,9 +1373,9 @@ alias|alias|alias|alias... interfaces parameter list then smbpasswd will fail to connect in it's default mode. smbpasswd can be forced to use the primary IP interface - of the local host by using its smbpasswd - 8 -r remote machine - parameter, with remote machine set + of the local host by using its + -r remote machine + parameter, with remote machine set to the IP name of the primary interface of the local host. The swat status page tries to connect with @@ -1394,10 +1395,9 @@ alias|alias|alias|alias... - blocking locks (S) - This parameter controls the behavior - of smbd - 8 when given a request by a client + blocking locks (S) + This parameter controls the behavior of smbd(8) when given a request by a client to obtain a byte range lock on a region of an open file, and the request has a time limit associated with it. @@ -1417,9 +1417,9 @@ alias|alias|alias|alias... - block size (S) - This parameter controls the behavior of smbd - 8 when reporting disk free + block size (S) + This parameter controls the behavior of + smbd(8) when reporting disk free sizes. By default, this reports a disk block size of 1024 bytes. @@ -1433,19 +1433,27 @@ alias|alias|alias|alias... Changing this option does not change the disk free reporting size, just the block size unit reported to the client. - - + + Default: block size = 1024 + Example: block size = 65536 + + + + + - browsable (S) + browsable (S) See the browseable. + + - browse list (G) - This controls whether smbd - 8 will serve a browse list to + browse list (G) + This controls whether + smbd(8) will serve a browse list to a client doing a NetServerEnum call. Normally set to yes. You should never need to change this. @@ -1456,7 +1464,7 @@ alias|alias|alias|alias... - browseable (S) + browseable (S) This controls whether this share is seen in the list of available shares in a net view and in the browse list. @@ -1467,7 +1475,7 @@ alias|alias|alias|alias... - case sensitive (S) + case sensitive (S) See the discussion in the section NAME MANGLING. @@ -1478,7 +1486,7 @@ alias|alias|alias|alias... - casesignames (S) + casesignames (S) Synonym for case sensitive. @@ -1486,12 +1494,12 @@ alias|alias|alias|alias... - change notify timeout (G) + change notify timeout (G) This SMB allows a client to tell a server to "watch" a particular directory for any changes and only reply to the SMB request when a change has occurred. Such constant scanning of - a directory is expensive under UNIX, hence an smbd - 8 daemon only performs such a scan + a directory is expensive under UNIX, hence an + smbd(8) daemon only performs such a scan on each requested directory once every change notify timeout seconds. @@ -1504,7 +1512,7 @@ alias|alias|alias|alias... - change share command (G) + change share command (G) Samba 2.2.0 introduced the ability to dynamically add and delete shares via the Windows NT 4.0 Server Manager. The change share command is used to define an @@ -1554,8 +1562,12 @@ alias|alias|alias|alias... + + + + - comment (S) + comment (S) This is a text field that is seen next to a share when a client does a queries the server, either via the network neighborhood or via net view to list what shares @@ -1572,7 +1584,7 @@ alias|alias|alias|alias... - config file (G) + config file (G) This allows you to override the config file to use, instead of the default (usually smb.conf). There is a chicken and egg problem here as this option is set @@ -1596,7 +1608,7 @@ alias|alias|alias|alias... - copy (S) + copy (S) This parameter allows you to "clone" service entries. The specified service is simply duplicated under the current service's name. Any parameters specified in the current @@ -1614,7 +1626,7 @@ alias|alias|alias|alias... - create mask (S) + create mask (S) A synonym for this parameter is create mode . @@ -1658,14 +1670,14 @@ alias|alias|alias|alias... - create mode (S) + create mode (S) This is a synonym for create mask. - csc policy (S) + csc policy (S) This stands for client-side caching policy, and specifies how clients capable of offline caching will cache the files in the share. The valid values @@ -1684,7 +1696,7 @@ alias|alias|alias|alias... - deadtime (G) + deadtime (G) The value of the parameter (a decimal integer) represents the number of minutes of inactivity before a connection is considered dead, and it is disconnected. The deadtime only takes @@ -1710,7 +1722,7 @@ alias|alias|alias|alias... - debug hires timestamp (G) + debug hires timestamp (G) Sometimes the timestamps in the log messages are needed with a resolution of higher that seconds, this boolean parameter adds microsecond resolution to the timestamp @@ -1727,7 +1739,7 @@ alias|alias|alias|alias... - debug pid (G) + debug pid (G) When using only one log file for more then one forked smbd-process there may be hard to follow which process outputs which message. This boolean parameter is adds the process-id @@ -1742,7 +1754,7 @@ alias|alias|alias|alias... - debug timestamp (G) + debug timestamp (G) Samba debug log messages are timestamped by default. If you are running at a high debug level these timestamps @@ -1755,7 +1767,7 @@ alias|alias|alias|alias... - debug uid (G) + debug uid (G) Samba is sometimes run as root and sometime run as the connected user, this boolean parameter inserts the current euid, egid, uid and gid to the timestamp message headers @@ -1771,7 +1783,7 @@ alias|alias|alias|alias... - debuglevel (G) + debuglevel (G) Synonym for log level. @@ -1780,7 +1792,7 @@ alias|alias|alias|alias... - default (G) + default (G) A synonym for default service. @@ -1788,7 +1800,7 @@ alias|alias|alias|alias... - default case (S) + default case (S) See the section on NAME MANGLING. Also note the short preserve case parameter. @@ -1800,7 +1812,7 @@ alias|alias|alias|alias... - default devmode (S) + default devmode (S) This parameter is only applicable to printable services. When smbd is serving Printer Drivers to Windows NT/2k/XP clients, each printer on the Samba @@ -1838,7 +1850,7 @@ alias|alias|alias|alias... - default service (G) + default service (G) This parameter specifies the name of a service which will be connected to if the service actually requested cannot be found. Note that the square brackets are NOT @@ -1864,27 +1876,24 @@ alias|alias|alias|alias... Example: - + [global] default service = pub [pub] path = /%S - + - delete group script (G) + delete group script (G) This is the full pathname to a script that will - be run AS ROOT smbd - 8 when a group is requested to be deleted. - It will expand any %g to the group name passed. - This script is only useful for installations using the Windows NT domain administration tools. + be run AS ROOT by smbd(8) when a group is requested to be deleted. It will expand any %g to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. - deleteprinter command (G) + deleteprinter command (G) With the introduction of MS-RPC based printer support for Windows NT/2000 clients in Samba 2.2, it is now possible to delete printer at run time by issuing the @@ -1910,7 +1919,7 @@ alias|alias|alias|alias... See also addprinter command, printing, + linkend="printing">printing, show add printer wizard @@ -1926,7 +1935,7 @@ alias|alias|alias|alias... - delete readonly (S) + delete readonly (S) This parameter allows readonly files to be deleted. This is not normal DOS semantics, but is allowed by UNIX. @@ -1940,7 +1949,7 @@ alias|alias|alias|alias... - delete share command (G) + delete share command (G) Samba 2.2.0 introduced the ability to dynamically add and delete shares via the Windows NT 4.0 Server Manager. The delete share command is used to define an @@ -1988,11 +1997,10 @@ alias|alias|alias|alias... - delete user script (G) + delete user script (G) This is the full pathname to a script that will - be run by smbd - 8 when managing users - with remote RPC (NT) tools. + be run by smbd(8) + when managing user's with remote RPC (NT) tools. This script is called when a remote client removes a user @@ -2010,13 +2018,13 @@ alias|alias|alias|alias... - delete user from group script (G) + delete user from group script (G) Full path to the script that will be called when a user is removed from a group using the Windows NT domain administration - tools. It will be run by smbd - 8 AS ROOT. - Any %g will be replaced with the group name and - any %u will be replaced with the user name. + tools. It will be run by smbd(8) + AS ROOT. Any %g will be + replaced with the group name and any %u will + be replaced with the user name. Default: delete user from group script = @@ -2027,7 +2035,7 @@ alias|alias|alias|alias... - delete veto files (S) + delete veto files (S) This option is used when Samba is attempting to delete a directory that contains one or more vetoed directories (see the veto files @@ -2056,7 +2064,7 @@ alias|alias|alias|alias... - deny hosts (S) + deny hosts (S) Synonym for hosts deny. @@ -2065,7 +2073,7 @@ alias|alias|alias|alias... - dfree command (G) + dfree command (G) The dfree command setting should only be used on systems where a problem occurs with the internal disk space calculations. This has been known to happen with Ultrix, @@ -2098,17 +2106,17 @@ alias|alias|alias|alias... Where the script dfree (which must be made executable) could be: - -#!/bin/sh -df $1 | tail -1 | awk '{print $2" "$4}' - + + #!/bin/sh + df $1 | tail -1 | awk '{print $2" "$4}' + or perhaps (on Sys V based systems): - -#!/bin/sh -/usr/bin/df -k $1 | tail -1 | awk '{print $3" "$5}' - + + #!/bin/sh + /usr/bin/df -k $1 | tail -1 | awk '{print $3" "$5}' + Note that you may have to replace the command names with full path names on some systems. @@ -2119,7 +2127,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - directory (S) + directory (S) Synonym for path . @@ -2127,7 +2135,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - directory mask (S) + directory mask (S) This parameter is the octal modes which are used when converting DOS modes to UNIX modes when creating UNIX directories. @@ -2175,7 +2183,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - directory mode (S) + directory mode (S) Synonym for directory mask @@ -2183,7 +2191,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - directory security mask (S) + directory security mask (S) This parameter controls what UNIX permission bits can be modified when a Windows NT client is manipulating the UNIX permission on a directory using the native NT security dialog @@ -2218,7 +2226,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - disable netbios (G) + disable netbios (G) Enabling this parameter will disable netbios support in Samba. Netbios is the only available form of browsing in all windows versions except for 2000 and XP. @@ -2233,7 +2241,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - disable spoolss (G) + disable spoolss (G) Enabling this parameter will disable Samba's support for the SPOOLSS set of MS-RPC's and will yield identical behavior as Samba 2.0.x. Windows NT/2000 clients will downgrade to using @@ -2254,7 +2262,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - display charset (G) + display charset (G) Specifies the charset that samba will use to print messages to stdout and stderr and SWAT will use. Should generally be the same as the unix charset. @@ -2269,12 +2277,12 @@ df $1 | tail -1 | awk '{print $2" "$4}' - dns proxy (G) - Specifies that nmbd - 8 when acting as a WINS server and - finding that a NetBIOS name has not been registered, should treat the - NetBIOS name word-for-word as a DNS name and do a lookup with the DNS server - for that name on behalf of the name-querying client. + dns proxy (G) + Specifies that nmbd(8) + when acting as a WINS server and finding that a NetBIOS name has not + been registered, should treat the NetBIOS name word-for-word as a DNS + name and do a lookup with the DNS server for that name on behalf of + the name-querying client. Note that the maximum length for a NetBIOS name is 15 characters, so the DNS name (or DNS alias) can likewise only be @@ -2292,7 +2300,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - domain logons (G) + domain logons (G) If set to yes, the Samba server will serve Windows 95/98 Domain logons for the workgroup it is in. Samba 2.2 @@ -2307,20 +2315,20 @@ df $1 | tail -1 | awk '{print $2" "$4}' - domain master (G) - Tell smbd - 8 to enable WAN-wide browse list + domain master (G) + Tell + nmbd(8) to enable WAN-wide browse list collation. Setting this option causes nmbd to claim a special domain specific NetBIOS name that identifies it as a domain master browser for its given workgroup. Local master browsers in the same workgroup on broadcast-isolated subnets will give this nmbd their local browse lists, - and then ask smbd - 8 for a complete copy of the browse - list for the whole wide area network. Browser clients will then contact - their local master browser, and will receive the domain-wide browse list, - instead of just the list for their broadcast-isolated subnet. + and then ask smbd(8) + for a complete copy of the browse list for the whole wide area + network. Browser clients will then contact their local master browser, + and will receive the domain-wide browse list, instead of just the list + for their broadcast-isolated subnet. Note that Windows NT Primary Domain Controllers expect to be able to claim this workgroup specific special @@ -2345,7 +2353,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - dont descend (S) + dont descend (S) There are certain directories on some systems (e.g., the /proc tree under Linux) that are either not of interest to clients or are infinitely deep (recursive). This @@ -2364,7 +2372,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - dos charset (G) + dos charset (G) DOS SMB clients assume the server has the same charset as they do. This option specifies which charset Samba should talk to DOS clients. @@ -2372,14 +2380,14 @@ df $1 | tail -1 | awk '{print $2" "$4}' The default depends on which charsets you have instaled. Samba tries to use charset 850 but falls back to ASCII in - case it is not available. Run testparm - 1 to check the default on your system. + case it is not available. Run testparm(1) + to check the default on your system. - dos filemode (S) + dos filemode (S) The default behavior in Samba is to provide UNIX-like behavior where only the owner of a file/directory is able to change the permissions on it. However, this behavior @@ -2398,13 +2406,13 @@ df $1 | tail -1 | awk '{print $2" "$4}' - dos filetime resolution (S) + dos filetime resolution (S) Under the DOS and Windows FAT filesystem, the finest granularity on time resolution is two seconds. Setting this parameter for a share causes Samba to round the reported time down to the nearest two second boundary when a query call that requires one second - resolution is made to smbd - 8. + resolution is made to smbd(8) + . This option is mainly used as a compatibility option for Visual C++ when used against Samba shares. If oplocks are enabled on a @@ -2424,15 +2432,14 @@ df $1 | tail -1 | awk '{print $2" "$4}' - dos filetimes (S) + dos filetimes (S) Under DOS and Windows, if a user can write to a file they can change the timestamp on it. Under POSIX semantics, only the owner of the file or root may change the timestamp. By default, Samba runs with POSIX semantics and refuses to change the timestamp on a file if the user smbd is acting on behalf of is not the file owner. Setting this option to - yes allows DOS semantics and smbd - 8 will change the file + yes allows DOS semantics and smbd will change the file timestamp as DOS requires. Default: dos filetimes = no @@ -2441,7 +2448,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - encrypt passwords (G) + encrypt passwords (G) This boolean controls whether encrypted passwords will be negotiated with the client. Note that Windows NT 4.0 SP3 and above and also Windows 98 will by default expect encrypted passwords @@ -2450,11 +2457,10 @@ df $1 | tail -1 | awk '{print $2" "$4}' directory docs/ shipped with the source code. In order for encrypted passwords to work correctly - smbd - 8 must either - have access to a local smbpasswd - 5 file (see the smbpasswd - 8 program for information on how to set up + smbd(8) must either + have access to a local smbpasswd(5) + file (see the + smbpasswd(8) program for information on how to set up and maintain this file), or set the security = [server|domain|ads] parameter which causes smbd to authenticate against another @@ -2465,7 +2471,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - enhanced browsing (G) + enhanced browsing (G) This option enables a couple of enhancements to cross-subnet browse propagation that have been added in Samba but which are not standard in Microsoft implementations. @@ -2491,7 +2497,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - enumports command (G) + enumports command (G) The concept of a "port" is fairly foreign to UNIX hosts. Under Windows NT/2000 print servers, a port is associated with a port monitor and generally takes the form of @@ -2514,7 +2520,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - exec (S) + exec (S) This is a synonym for preexec. @@ -2522,7 +2528,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - fake directory create times (S) + fake directory create times (S) NTFS and Windows VFAT file systems keep a create time for all files and directories. This is not the same as the ctime - status change time - that Unix keeps, so Samba by default @@ -2556,7 +2562,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - fake oplocks (S) + fake oplocks (S) Oplocks are the way that SMB clients get permission from a server to locally cache file operations. If a server grants an oplock (opportunistic lock) then the client is free to assume @@ -2588,11 +2594,10 @@ df $1 | tail -1 | awk '{print $2" "$4}' - follow symlinks (S) + follow symlinks (S) This parameter allows the Samba administrator - to stop smbd - 8 from following symbolic - links in a particular share. Setting this + to stop smbd(8) + from following symbolic links in a particular share. Setting this parameter to no prevents any file or directory that is a symbolic link from being followed (the user will get an error). This option is very useful to stop users from adding a @@ -2609,7 +2614,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - force create mode (S) + force create mode (S) This parameter specifies a set of UNIX mode bit permissions that will always be set on a file created by Samba. This is done by bitwise 'OR'ing these bits onto @@ -2637,7 +2642,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - force directory mode (S) + force directory mode (S) This parameter specifies a set of UNIX mode bit permissions that will always be set on a directory created by Samba. This is done by bitwise 'OR'ing these bits onto the @@ -2666,7 +2671,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - force directory security mode (S) + force directory security mode (S) This parameter controls what UNIX permission bits can be modified when a Windows NT client is manipulating the UNIX permission on a directory using the native NT security dialog box. @@ -2702,7 +2707,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - force group (S) + force group (S) This specifies a UNIX group name that will be assigned as the default primary group for all users connecting to this service. This is useful for sharing files by ensuring @@ -2738,7 +2743,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - force security mode (S) + force security mode (S) This parameter controls what UNIX permission bits can be modified when a Windows NT client is manipulating the UNIX permission on a file using the native NT security dialog @@ -2776,7 +2781,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - force user (S) + force user (S) This specifies a UNIX user name that will be assigned as the default user for all users connecting to this service. This is useful for sharing files. You should also use it carefully @@ -2804,11 +2809,11 @@ df $1 | tail -1 | awk '{print $2" "$4}' - fstype (S) + fstype (S) This parameter allows the administrator to configure the string that specifies the type of filesystem a share - is using that is reported by smbd - 8 when a client queries the filesystem type + is using that is reported by smbd(8) + when a client queries the filesystem type for a share. The default type is NTFS for compatibility with Windows NT but this can be changed to other strings such as Samba or FAT @@ -2821,7 +2826,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - getwd cache (G) + getwd cache (G) This is a tuning option. When this is enabled a caching algorithm will be used to reduce the time taken for getwd() calls. This can have a significant impact on performance, especially @@ -2835,7 +2840,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - group (S) + group (S) Synonym for force group. @@ -2843,7 +2848,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - guest account (S) + guest account (S) This is a username which will be used for access to services which are specified as guest ok (see below). Whatever privileges this @@ -2873,16 +2878,12 @@ df $1 | tail -1 | awk '{print $2" "$4}' - guest ok (S) + guest ok (S) If this parameter is yes for a service, then no password is required to connect to the service. Privileges will be those of the guest account. - This paramater nullifies the benifits of setting - restrict - anonymous = 2 - See the section below on security for more information about this option. @@ -2893,7 +2894,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - guest only (S) + guest only (S) If this parameter is yes for a service, then only guest connections to the service are permitted. This parameter will have no effect if @@ -2909,7 +2910,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - hide dot files (S) + hide dot files (S) This is a boolean parameter that controls whether files starting with a dot appear as hidden files. @@ -2919,7 +2920,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - hide files(S) + hide files(S) This is a list of files or directories that are not visible but are accessible. The DOS 'hidden' attribute is applied to any files or directories that match. @@ -2957,7 +2958,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - hide local users(G) + hide local users(G) This parameter toggles the hiding of local UNIX users (root, wheel, floppy, etc) from remote clients. @@ -2967,7 +2968,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - hide unreadable (G) + hide unreadable (G) This parameter prevents clients from seeing the existance of files that cannot be read. Defaults to off. @@ -2976,7 +2977,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - hide unwriteable files (G) + hide unwriteable files (G) This parameter prevents clients from seeing the existance of files that cannot be written to. Defaults to off. Note that unwriteable directories are shown as usual. @@ -2987,7 +2988,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - hide special files (G) + hide special files (G) This parameter prevents clients from seeing special files such as sockets, devices and fifo's in directory listings. @@ -2998,10 +2999,10 @@ df $1 | tail -1 | awk '{print $2" "$4}' - homedir map (G) + homedir map (G) Ifnis homedir - is yes, and smbd - 8 is also acting + is yes, and smbd(8) is also acting as a Win95/98 logon server then this parameter specifies the NIS (or YP) map from which the server for the user's home directory should be extracted. At present, only the Sun @@ -3031,7 +3032,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - host msdfs (G) + host msdfs (G) This boolean parameter is only available if Samba has been configured and compiled with the --with-msdfs option. If set to yes, @@ -3049,7 +3050,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - hostname lookups (G) + hostname lookups (G) Specifies whether samba should use (expensive) hostname lookups or use the ip addresses instead. An example place where hostname lookups are currently used is when checking @@ -3065,7 +3066,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - hosts allow (S) + hosts allow (S) A synonym for this parameter is allow hosts. @@ -3114,9 +3115,9 @@ df $1 | tail -1 | awk '{print $2" "$4}' Note that access still requires suitable user-level passwords. - See testparm - 1 for a way of testing your host access - to see if it does what you expect. + See testparm(1) + for a way of testing your host access to see if it does + what you expect. Default: none (i.e., all hosts permitted access) @@ -3129,7 +3130,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - hosts deny (S) + hosts deny (S) The opposite of hosts allow - hosts listed here are NOT permitted access to services unless the specific services have their own lists to override @@ -3146,7 +3147,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - hosts equiv (G) + hosts equiv (G) If this global parameter is a non-null string, it specifies the name of a file to read for the names of hosts and users who will be allowed access without specifying a password. @@ -3175,7 +3176,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - include (G) + include (G) This allows you to include one config file inside another. The file is included literally, as though typed in place. @@ -3192,7 +3193,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - inherit acls (S) + inherit acls (S) This parameter can be used to ensure that if default acls exist on parent directories, they are always honored when creating a subdirectory. @@ -3210,7 +3211,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - inherit permissions (S) + inherit permissions (S) The permissions on new files and directories are normally governed by create mask, @@ -3251,7 +3252,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - interfaces (G) + interfaces (G) This option allows you to override the default network interfaces list that Samba will use for browsing, name registration and other NBT traffic. By default Samba will query @@ -3303,7 +3304,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - invalid users (S) + invalid users (S) This is a list of users that should not be allowed to login to this service. This is really a paranoid check to absolutely ensure an improper setting does not breach @@ -3315,12 +3316,12 @@ df $1 | tail -1 | awk '{print $2" "$4}' A name starting with '+' is interpreted only by looking in the UNIX group database. A name starting with - '&' is interpreted only by looking in the NIS netgroup database + '&' is interpreted only by looking in the NIS netgroup database (this requires NIS to be working on your system). The characters - '+' and '&' may be used at the start of the name in either order + '+' and '&' may be used at the start of the name in either order so the value +&group means check the UNIX group database, followed by the NIS netgroup database, and - the value &+group means check the NIS + the value &+group means check the NIS netgroup database, followed by the UNIX group database (the same as the '@' prefix). @@ -3339,7 +3340,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - keepalive (G) + keepalive (G) The value of the parameter (an integer) represents the number of seconds between keepalive packets. If this parameter is zero, no keepalive packets will be @@ -3359,7 +3360,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - kernel oplocks (G) + kernel oplocks (G) For UNIXes that support kernel based oplocks (currently only IRIX and the Linux 2.4 kernel), this parameter @@ -3367,10 +3368,10 @@ df $1 | tail -1 | awk '{print $2" "$4}' Kernel oplocks support allows Samba oplocks to be broken whenever a local UNIX process or NFS operation - accesses a file that smbd - 8 has oplocked. This allows complete - data consistency between SMB/CIFS, NFS and local file access (and is - a very cool feature :-). + accesses a file that smbd(8) + has oplocked. This allows complete data consistency between + SMB/CIFS, NFS and local file access (and is a very + cool feature :-). This parameter defaults to on, but is translated to a no-op on systems that no not have the necessary kernel support. @@ -3388,12 +3389,12 @@ df $1 | tail -1 | awk '{print $2" "$4}' - lanman auth (G) - This parameter determines whether or not smbd - 8 will attempt to authenticate users - using the LANMAN password hash. If disabled, only clients which support NT - password hashes (e.g. Windows NT/2000 clients, smbclient, etc... but not - Windows 95/98 or the MS DOS network client) will be able to connect to the Samba host. + lanman auth (G) + This parameter determines whether or not smbd will + attempt to authenticate users using the LANMAN password hash. + If disabled, only clients which support NT password hashes (e.g. Windows + NT/2000 clients, smbclient, etc... but not Windows 95/98 or the MS DOS + network client) will be able to connect to the Samba host. Default : lanman auth = yes @@ -3404,10 +3405,9 @@ df $1 | tail -1 | awk '{print $2" "$4}' - large readwrite (G) - This parameter determines whether or not smbd - 8 supports the new 64k streaming - read and write varient SMB requests introduced + large readwrite (G) + This parameter determines whether or not smbd + supports the new 64k streaming read and write varient SMB requests introduced with Windows 2000. Note that due to Windows 2000 client redirector bugs this requires Samba to be running on a 64-bit capable operating system such as IRIX, Solaris or a Linux 2.4 kernel. Can improve performance by 10% with @@ -3422,15 +3422,14 @@ df $1 | tail -1 | awk '{print $2" "$4}' - ldap admin dn (G) + ldap admin dn (G) The ldap admin dn defines the Distinguished Name (DN) name used by Samba to contact the ldap server when retreiving user account information. The ldap admin dn is used in conjunction with the admin dn password stored in the private/secrets.tdb file. See the - smbpasswd - 8 man page for more information on how - to accmplish this. + smbpasswd(8) man + page for more information on how to accmplish this. @@ -3442,7 +3441,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - ldap filter (G) + ldap filter (G) This parameter specifies the RFC 2254 compliant LDAP search filter. The default is to match the login name with the uid attribute for all entries matching the sambaAccount @@ -3456,7 +3455,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - ldap port (G) + ldap port (G) This parameter is only available if Samba has been configure to include the --with-ldapsam option at compile time. @@ -3478,7 +3477,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - ldap server (G) + ldap server (G) This parameter is only available if Samba has been configure to include the --with-ldapsam option at compile time. @@ -3495,7 +3494,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - ldap ssl (G) + ldap ssl (G) This option is used to define whether or not Samba should use SSL when connecting to the ldap server This is NOT related to @@ -3529,7 +3528,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - ldap suffix (G) + ldap suffix (G) Specifies where user and machine accounts are added to the tree. Can be overriden by ldap user suffix and ldap machine suffix. It also used as the base dn for all ldap searches. @@ -3540,7 +3539,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - ldap user suffix (G) + ldap user suffix (G) It specifies where users are added to the tree. @@ -3553,7 +3552,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - ldap machine suffix (G) + ldap machine suffix (G) It specifies where machines should be added to the ldap tree. @@ -3565,7 +3564,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - ldap passwd sync (G) + ldap passwd sync (G) This option is used to define whether or not Samba should sync the LDAP password with the NT and LM hashes for normal accounts (NOT for @@ -3589,7 +3588,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - ldap trust ids (G) + ldap trust ids (G) Normally, Samba validates each entry in the LDAP server against getpwnam(). This allows LDAP to be used for Samba with the unix system using @@ -3608,7 +3607,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - level2 oplocks (S) + level2 oplocks (S) This parameter controls whether Samba supports level2 (read-only) oplocks on a share. @@ -3652,9 +3651,9 @@ df $1 | tail -1 | awk '{print $2" "$4}' - lm announce (G) - This parameter determines if nmbd - 8 will produce Lanman announce + lm announce (G) + This parameter determines if + nmbd(8) will produce Lanman announce broadcasts that are needed by OS/2 clients in order for them to see the Samba server in their browse list. This parameter can have three values, yes, no, or @@ -3679,7 +3678,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - lm interval (G) + lm interval (G) If Samba is set to produce Lanman announce broadcasts needed by OS/2 clients (see the lm announce parameter) then this @@ -3699,7 +3698,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - load printers (G) + load printers (G) A boolean variable that controls whether all printers in the printcap will be loaded for browsing by default. See the printers section for @@ -3712,9 +3711,9 @@ df $1 | tail -1 | awk '{print $2" "$4}' - local master (G) - This option allows nmbd - 8 to try and become a local master browser + local master (G) + This option allows + nmbd(8) to try and become a local master browser on a subnet. If set to no then nmbd will not attempt to become a local master browser on a subnet and will also lose in all browsing elections. By @@ -3733,7 +3732,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - lock dir (G) + lock dir (G) Synonym for lock directory. @@ -3741,7 +3740,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - lock directory (G) + lock directory (G) This option specifies the directory where lock files will be placed. The lock files are used to implement the max connections @@ -3755,7 +3754,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - lock spin count (G) + lock spin count (G) This parameter controls the number of times that smbd should attempt to gain a byte range lock on the behalf of a client request. Experiments have shown that @@ -3774,7 +3773,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - lock spin time (G) + lock spin time (G) The time in microseconds that smbd should pause before attempting to gain a failed lock. See lock spin @@ -3788,7 +3787,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - locking (S) + locking (S) This controls whether or not locking will be performed by the server in response to lock requests from the client. @@ -3816,7 +3815,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - log file (G) + log file (G) This option allows you to override the name of the Samba log file (also known as the debug file). @@ -3830,7 +3829,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - log level (G) + log level (G) The value of the parameter (a astring) allows the debug level (logging level) to be specified in the smb.conf file. This parameter has been @@ -3848,7 +3847,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - logon drive (G) + logon drive (G) This parameter specifies the local path to which the home directory will be connected (see logon home) @@ -3865,7 +3864,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - logon home (G) + logon home (G) This parameter specifies the home directory location when a Win95/98 or NT Workstation logs into a Samba PDC. It allows you to do @@ -3907,7 +3906,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - logon path (G) + logon path (G) This parameter specifies the home directory where roaming profiles (NTuser.dat etc files for Windows NT) are stored. Contrary to previous versions of these manual pages, it has @@ -3955,7 +3954,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - logon script (G) + logon script (G) This parameter specifies the batch file (.bat) or NT command file (.cmd) to be downloaded and run on a machine when a user successfully logs in. The file must contain the DOS @@ -3997,7 +3996,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - lppause command (S) + lppause command (S) This parameter specifies the command to be executed on the server host in order to stop printing or spooling a specific print job. @@ -4041,7 +4040,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - lpq cache time (G) + lpq cache time (G) This controls how long lpq info will be cached for to prevent the lpq command being called too often. A separate cache is kept for each variation of the @@ -4070,7 +4069,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - lpq command (S) + lpq command (S) This parameter specifies the command to be executed on the server host in order to obtain lpq -style printer status information. @@ -4114,7 +4113,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - lpresume command (S) + lpresume command (S) This parameter specifies the command to be executed on the server host in order to restart or continue printing or spooling a specific print job. @@ -4154,7 +4153,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - lprm command (S) + lprm command (S) This parameter specifies the command to be executed on the server host in order to delete a print job. @@ -4184,7 +4183,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - machine password timeout (G) + machine password timeout (G) If a Samba server is a member of a Windows NT Domain (see the security = domain) parameter) then periodically a running @@ -4194,8 +4193,8 @@ df $1 | tail -1 | awk '{print $2" "$4}' will be changed, in seconds. The default is one week (expressed in seconds), the same as a Windows NT Domain member server. - See also smbpasswd - 8, and the + See also smbpasswd(8) + , and the security = domain) parameter. Default: machine password timeout = 604800 @@ -4204,7 +4203,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - magic output (S) + magic output (S) This parameter specifies the name of a file which will contain output created by a magic script (see the magic script @@ -4224,7 +4223,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - magic script (S) + magic script (S) This parameter specifies the name of a file which, if opened, will be executed by the server when the file is closed. This allows a UNIX script to be sent to the Samba host and @@ -4255,7 +4254,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - mangle case (S) + mangle case (S) See the section on NAME MANGLING @@ -4265,7 +4264,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - mangled map (S) + mangled map (S) This is for those who want to directly map UNIX file names which cannot be represented on Windows/DOS. The mangling of names is not always what is needed. In particular you may have @@ -4290,7 +4289,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - mangled names (S) + mangled names (S) This controls whether non-DOS names under UNIX should be mapped to DOS-compatible names ("mangled") and made visible, or whether non-DOS names should simply be ignored. @@ -4349,7 +4348,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - mangling method (G) + mangling method (G) controls the algorithm used for the generating the mangled names. Can take two different values, "hash" and "hash2". "hash" is the default and is the algorithm that has been @@ -4364,7 +4363,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - mangle prefix (G) + mangle prefix (G) controls the number of prefix characters from the original name used when generating the mangled names. A larger value will give a weaker @@ -4376,10 +4375,10 @@ df $1 | tail -1 | awk '{print $2" "$4}' - mangled stack (G) + mangled stack (G) This parameter controls the number of mangled names - that should be cached in the Samba server smbd - 8. + that should be cached in the Samba server + smbd(8). This stack is a list of recently mangled base names (extensions are only maintained if they are longer than 3 characters @@ -4403,7 +4402,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - mangling char (S) + mangling char (S) This controls what character is used as the magic character in name mangling. The default is a '~' @@ -4420,7 +4419,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - map archive (S) + map archive (S) This controls whether the DOS archive attribute should be mapped to the UNIX owner execute bit. The DOS archive bit is set when a file has been modified since its last backup. One @@ -4440,7 +4439,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - map hidden (S) + map hidden (S) This controls whether DOS style hidden files should be mapped to the UNIX world execute bit. @@ -4455,7 +4454,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - map system (S) + map system (S) This controls whether DOS style system files should be mapped to the UNIX group execute bit. @@ -4470,15 +4469,14 @@ df $1 | tail -1 | awk '{print $2" "$4}' - map to guest (G) + map to guest (G) This parameter is only useful in security modes other than security = share - i.e. user, server, and domain. This parameter can take three different values, which tell - smbd - 8 what to do with user + smbd(8) what to do with user login requests that don't match a valid UNIX user in some way. The three settings are : @@ -4526,7 +4524,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - max connections (S) + max connections (S) This option allows the number of simultaneous connections to a service to be limited. If max connections is greater than 0 then connections will be refused if @@ -4546,7 +4544,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - max disk size (G) + max disk size (G) This option allows you to put an upper limit on the apparent size of disks. If you set this option to 100 then all shares will appear to be not larger than 100 MB in @@ -4573,7 +4571,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - max log size (G) + max log size (G) This option (an integer in kilobytes) specifies the max size the log file should grow to. Samba periodically checks the size and if it is exceeded it will rename the file, adding @@ -4589,7 +4587,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - max mux (G) + max mux (G) This option controls the maximum number of outstanding simultaneous SMB operations that Samba tells the client it will allow. You should never need to set this parameter. @@ -4601,10 +4599,9 @@ df $1 | tail -1 | awk '{print $2" "$4}' - max open files (G) + max open files (G) This parameter limits the maximum number of - open files that one smbd - 8 file + open files that one smbd(8) file serving process may have open for a client at any one time. The default for this parameter is set very high (10,000) as Samba uses only one bit per unopened file. @@ -4620,11 +4617,11 @@ df $1 | tail -1 | awk '{print $2" "$4}' - max print jobs (S) + max print jobs (S) This parameter limits the maximum number of jobs allowable in a Samba printer queue at any given moment. - If this number is exceeded, smbd - 8 will remote "Out of Space" to the client. + If this number is exceeded, + smbd(8) will remote "Out of Space" to the client. See all total print jobs. @@ -4636,7 +4633,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - max protocol (G) + max protocol (G) The value of the parameter (a string) is the highest protocol level that will be supported by the server. @@ -4674,15 +4671,14 @@ df $1 | tail -1 | awk '{print $2" "$4}' - max smbd processes (G) + max smbd processes (G) This parameter limits the maximum number of smbd(8) processes concurrently running on a system and is intended as a stopgap to prevent degrading service to clients in the event that the server has insufficient resources to handle more than this number of connections. Remember that under normal operating - conditions, each user will have an smbd - 8 associated with him or her + conditions, each user will have an smbd associated with him or her to handle connections to all shares from a given host. @@ -4695,9 +4691,8 @@ df $1 | tail -1 | awk '{print $2" "$4}' - max ttl (G) - This option tells nmbd - 8 + max ttl (G) + This option tells nmbd(8) what the default 'time to live' of NetBIOS names should be (in seconds) when nmbd is requesting a name using either a broadcast packet or from a WINS server. You should never need to @@ -4710,9 +4705,9 @@ df $1 | tail -1 | awk '{print $2" "$4}' - max wins ttl (G) - This option tells smbd - 8 when acting as a WINS server ( + max wins ttl (G) + This option tells nmbd(8) + when acting as a WINS server ( wins support = yes) what the maximum 'time to live' of NetBIOS names that nmbd will grant will be (in seconds). You should never need to change this @@ -4728,7 +4723,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - max xmit (G) + max xmit (G) This option controls the maximum packet size that will be negotiated by Samba. The default is 65535, which is the maximum. In some cases you may find you get better performance @@ -4743,7 +4738,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - message command (G) + message command (G) This specifies what command to run when the server receives a WinPopup style message. @@ -4753,13 +4748,13 @@ df $1 | tail -1 | awk '{print $2" "$4}' An example is: - message command = csh -c 'xedit %s;rm %s' & + message command = csh -c 'xedit %s;rm %s' & This delivers the message using xedit, then removes it afterwards. NOTE THAT IT IS VERY IMPORTANT THAT THIS COMMAND RETURN IMMEDIATELY. That's why I - have the '&' on the end. If it doesn't return immediately then + have the '&' on the end. If it doesn't return immediately then your PCs may freeze when sending messages (they should recover after 30 seconds, hopefully). @@ -4804,7 +4799,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' Default: no message command Example: message command = csh -c 'xedit %s; - rm %s' & + rm %s' & @@ -4812,7 +4807,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - min passwd length (G) + min passwd length (G) Synonym for min password length. @@ -4821,7 +4816,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - min password length (G) + min password length (G) This option sets the minimum length in characters of a plaintext password that smbd will accept when performing UNIX password changing. @@ -4839,7 +4834,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - min print space (S) + min print space (S) This sets the minimum amount of free disk space that must be available before a user will be able to spool a print job. It is specified in kilobytes. The default is 0, which @@ -4857,7 +4852,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - min protocol (G) + min protocol (G) The value of the parameter (a string) is the lowest SMB protocol dialect than Samba will support. Please refer to the max protocol @@ -4881,9 +4876,8 @@ df $1 | tail -1 | awk '{print $2" "$4}' - min wins ttl (G) - This option tells nmbd - 8 + min wins ttl (G) + This option tells nmbd(8) when acting as a WINS server ( wins support = yes) what the minimum 'time to live' of NetBIOS names that nmbd will grant will be (in @@ -4896,7 +4890,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - msdfs proxy (S) + msdfs proxy (S) This parameter indicates that the share is a stand-in for another CIFS share whose location is specified by the value of the parameter. When clients attempt to connect to @@ -4907,7 +4901,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' and host msdfs options to find out how to set up a Dfs root share. - Example: msdfs proxy = \\\\otherserver\\someshare + Example: msdfs proxy = \otherserver\someshare @@ -4915,17 +4909,17 @@ df $1 | tail -1 | awk '{print $2" "$4}' - msdfs root (S) + msdfs root (S) This boolean parameter is only available if Samba is configured and compiled with the --with-msdfs option. If set to yes, Samba treats the share as a Dfs root and allows clients to browse the distributed file system tree rooted at the share directory. Dfs links are specified in the share directory by symbolic - links of the form msdfs:serverA\\shareA,serverB\\shareB + links of the form msdfs:serverA\shareA,serverB\shareB and so on. For more information on setting up a Dfs tree - on Samba, refer to "Hosting a Microsoft - Distributed File System tree on Samba" document. + on Samba, refer to msdfs_setup.html + . See also host msdfs @@ -4935,7 +4929,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - name cache timeout (G) + name cache timeout (G) Specifies the number of seconds it takes before entries in samba's hostname resolve cache time out. If the timeout is set to 0. the caching is disabled. @@ -4948,7 +4942,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - name resolve order (G) + name resolve order (G) This option is used by the programs in the Samba suite to determine what naming services to use and in what order to resolve host names to IP addresses. The option takes a space @@ -5001,7 +4995,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - netbios aliases (G) + netbios aliases (G) This is a list of NetBIOS names that nmbd(8) will advertise as additional names by which the Samba server is known. This allows one machine @@ -5022,7 +5016,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - netbios name (G) + netbios name (G) This sets the NetBIOS name by which a Samba server is known. By default it is the same as the first component of the host's DNS name. If a machine is a browse server or @@ -5041,7 +5035,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - netbios scope (G) + netbios scope (G) This sets the NetBIOS scope that Samba will operate under. This should not be set unless every machine on your LAN also sets this value. @@ -5050,7 +5044,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - nis homedir (G) + nis homedir (G) Get the home share server from a NIS map. For UNIX systems that use an automounter, the user's home directory will often be mounted on a workstation on demand from a remote @@ -5083,7 +5077,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - non unix account range (G) + non unix account range (G) The non unix account range parameter specifies the range of 'user ids' that are allocated by the various 'non unix account' passdb backends. These backends allow @@ -5107,7 +5101,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - nt acl support (S) + nt acl support (S) This boolean parameter controls whether smbd(8) will attempt to map UNIX permissions into Windows NT access control lists. @@ -5121,10 +5115,9 @@ df $1 | tail -1 | awk '{print $2" "$4}' - nt pipe support (G) + nt pipe support (G) This boolean parameter controls whether - smbd - 8 will allow Windows NT + smbd(8) will allow Windows NT clients to connect to the NT SMB specific IPC$ pipes. This is a developer debugging option and can be left alone. @@ -5136,7 +5129,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - nt status support (G) + nt status support (G) This boolean parameter controls whether smbd(8) will negotiate NT specific status support with Windows NT/2k/XP clients. This is a developer @@ -5153,12 +5146,11 @@ df $1 | tail -1 | awk '{print $2" "$4}' - null passwords (G) + null passwords (G) Allow or disallow client access to accounts that have null passwords. - See also smbpasswd - 5. + See also smbpasswd (5). Default: null passwords = no @@ -5168,7 +5160,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - obey pam restrictions (G) + obey pam restrictions (G) When Samba 2.2 is configured to enable PAM support (i.e. --with-pam), this parameter will control whether or not Samba should obey PAM's account and session management directives. The @@ -5189,7 +5181,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - only user (S) + only user (S) This is a boolean option that controls whether connections with usernames not in the user list will be allowed. By default this option is disabled so that a @@ -5217,7 +5209,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - only guest (S) + only guest (S) A synonym for guest only. @@ -5226,7 +5218,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - oplock break wait time (G) + oplock break wait time (G) This is a tuning parameter added due to bugs in both Windows 9x and WinNT. If Samba responds to a client too quickly when that client issues an SMB that can cause an oplock @@ -5244,15 +5236,15 @@ df $1 | tail -1 | awk '{print $2" "$4}' - oplock contention limit (S) + oplock contention limit (S) This is a very advanced smbd(8) tuning option to improve the efficiency of the granting of oplocks under multiple client contention for the same file. - In brief it specifies a number, which causes smbd - 8not to grant an oplock even when requested - if the approximate number of clients contending for an oplock on the same file goes over this + In brief it specifies a number, which causes smbd not to + grant an oplock even when requested if the approximate number of + clients contending for an oplock on the same file goes over this limit. This causes smbd to behave in a similar way to Windows NT. @@ -5268,7 +5260,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - oplocks (S) + oplocks (S) This boolean option tells smbd whether to issue oplocks (opportunistic locks) to file open requests on this share. The oplock code can dramatically (approx. 30% or more) improve @@ -5296,16 +5288,13 @@ df $1 | tail -1 | awk '{print $2" "$4}' - ntlm auth (G) - This parameter determines - whether or not smbd - 8 will + ntlm auth (G) + This parameter determines whether or not smbd will attempt to authenticate users using the NTLM password hash. If disabled, only the lanman password hashes will be used. - Please note that at least this option or lanman auth should - be enabled in order to be able to log in. + Please note that at least this option or lanman auth should be enabled in order to be able to log in. Default : ntlm auth = yes @@ -5313,11 +5302,10 @@ df $1 | tail -1 | awk '{print $2" "$4}' - os level (G) + os level (G) This integer value controls what level Samba advertises itself as for browse elections. The value of this - parameter determines whether nmbd - 8 + parameter determines whether nmbd(8) has a chance of becoming a local master browser for the WORKGROUP in the local broadcast area. @@ -5337,7 +5325,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - os2 driver map (G) + os2 driver map (G) The parameter is used to define the absolute path to a file containing a mapping of Windows NT printer driver names to OS/2 printer driver names. The format is: @@ -5350,9 +5338,10 @@ df $1 | tail -1 | awk '{print $2" "$4}' LaserJet 5L. The need for the file is due to the printer driver namespace - problem described in the Samba + problem described in the Samba Printing HOWTO. For more details on OS/2 clients, please - refer to the OS2-Client-HOWTO containing in the Samba documentation. + refer to the OS2-Client-HOWTO + containing in the Samba documentation. Default: os2 driver map = <empty string> @@ -5361,7 +5350,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - pam password change (G) + pam password change (G) With the addition of better PAM support in Samba 2.2, this parameter, it is possible to use PAM's password change control flag for Samba. If enabled, then PAM will be used for password @@ -5379,12 +5368,12 @@ df $1 | tail -1 | awk '{print $2" "$4}' - panic action (G) + panic action (G) This is a Samba developer option that allows a - system command to be called when either smbd - 8 or smbd - 8 crashes. This is usually used to - draw attention to the fact that a problem occurred. + system command to be called when either + smbd(8) or nmbd(8) + crashes. This is usually used to draw attention to the fact that + a problem occurred. Default: panic action = <empty string> Example: panic action = "/bin/sleep 90000" @@ -5392,24 +5381,20 @@ df $1 | tail -1 | awk '{print $2" "$4}' - paranoid server security (G) + paranoid server security (G) Some version of NT 4.x allow non-guest users with a bad passowrd. When this option is enabled, samba will not use a broken NT 4.x server as password server, but instead complain - to the logs and exit. + to the logs and exit. - Disabling this option prevents Samba from making - this check, which involves deliberatly attempting a - bad logon to the remote server. - Default: paranoid server security = yes - passdb backend (G) + passdb backend (G) This option allows the administrator to chose which backends to retrieve and store passwords with. This allows (for example) both smbpasswd and tdbsam to be used without a recompile. Multiple backends can be specified, separated by spaces. The backends will be searched in the order they are specified. New users are always added to the first backend specified. @@ -5502,13 +5487,13 @@ df $1 | tail -1 | awk '{print $2" "$4}' - passwd chat (G) + passwd chat (G) This string controls the "chat" - conversation that takes places between smbd - 8 and the local password changing + conversation that takes places between smbd and the local password changing program to change the user's password. The string describes a - sequence of response-receive pairs that smbd - 8 uses to determine what to send to the + sequence of response-receive pairs that + smbd(8) uses to determine what to send to the passwd program and what to expect back. If the expected output is not received then the password is not changed. @@ -5530,8 +5515,8 @@ df $1 | tail -1 | awk '{print $2" "$4}' The string can contain the macro %n which is substituted for the new password. The chat sequence can also contain the standard - macros \\n, \\r, - \\t and \\s to give line-feed, + macros \n, \r, + \t and \s to give line-feed, carriage-return, tab and space. The chat sequence string can also contain a '*' which matches any sequence of characters. Double quotes can be used to collect strings with spaces @@ -5553,10 +5538,10 @@ df $1 | tail -1 | awk '{print $2" "$4}' passwd chat debug and pam password change. - Default: passwd chat = *new*password* %n\\n - *new*password* %n\\n *changed* - Example: passwd chat = "*Enter OLD password*" %o\\n - "*Enter NEW password*" %n\\n "*Reenter NEW password*" %n\\n "*Password + Default: passwd chat = *new*password* %n\n + *new*password* %n\n *changed* + Example: passwd chat = "*Enter OLD password*" %o\n + "*Enter NEW password*" %n\n "*Reenter NEW password*" %n\n "*Password changed*" @@ -5564,12 +5549,11 @@ df $1 | tail -1 | awk '{print $2" "$4}' - passwd chat debug (G) + passwd chat debug (G) This boolean specifies if the passwd chat script parameter is run in debug mode. In this mode the strings passed to and received from the passwd chat are printed - in the smbd - 8 log with a + in the smbd(8) log with a debug level of 100. This is a dangerous option as it will allow plaintext passwords to be seen in the smbd log. It is available to help @@ -5592,7 +5576,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - passwd program (G) + passwd program (G) The name of a program that can be used to set UNIX user passwords. Any occurrences of %u will be replaced with the user name. The user name is checked for @@ -5630,7 +5614,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - password level (G) + password level (G) Some client/server combinations have difficulty with mixed-case passwords. One offending client is Windows for Workgroups, which for some reason forces passwords to upper @@ -5673,7 +5657,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - password server (G) + password server (G) By specifying the name of another SMB server (such as a WinNT box) with this option, and using security = domain or security = server you can get Samba @@ -5768,7 +5752,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - path (S) + path (S) This parameter specifies a directory to which the user of the service is to be given access. In the case of printable services, this is where print data will spool prior to @@ -5799,7 +5783,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - pid directory (G) + pid directory (G) This option specifies the directory where pid files will be placed. @@ -5811,9 +5795,8 @@ df $1 | tail -1 | awk '{print $2" "$4}' - posix locking (S) - The smbd - 8 + posix locking (S) + The smbd(8) daemon maintains an database of file locks obtained by SMB clients. The default behavior is to map this internal database to POSIX locks. This means that file locks obtained by SMB clients are @@ -5829,7 +5812,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - postexec (S) + postexec (S) This option specifies a command to be run whenever the service is disconnected. It takes the usual substitutions. The command may be run as the root on some @@ -5854,7 +5837,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - postscript (S) + postscript (S) This parameter forces a printer to interpret the print files as PostScript. This is done by adding a %! to the start of print output. @@ -5870,7 +5853,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - preexec (S) + preexec (S) This option specifies a command to be run whenever the service is connected to. It takes the usual substitutions. @@ -5879,12 +5862,12 @@ df $1 | tail -1 | awk '{print $2" "$4}' is an example: preexec = csh -c 'echo \"Welcome to %S!\" | - /usr/local/samba/bin/smbclient -M %m -I %I' & + /usr/local/samba/bin/smbclient -M %m -I %I' & Of course, this could get annoying after a while :-) See also preexec close - and postexec + and postexec . Default: none (no command executed) @@ -5896,7 +5879,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - preexec close (S) + preexec close (S) This boolean option controls whether a non-zero return code from preexec should close the service being connected to. @@ -5907,7 +5890,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - preferred master (G) + preferred master (G) This boolean parameter controls if nmbd(8) is a preferred master browser for its workgroup. @@ -5936,7 +5919,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - prefered master (G) + prefered master (G) Synonym for preferred master for people who cannot spell :-). @@ -5945,7 +5928,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - preload (G) + preload (G) This is a list of services that you want to be automatically added to the browse lists. This is most useful for homes and printers services that would otherwise not be @@ -5963,7 +5946,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - preserve case (S) + preserve case (S) This controls if new filenames are created with the case that the client passes, or if they are forced to be the default case @@ -5979,7 +5962,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - print command (S) + print command (S) After a print job has finished spooling to a service, this command will be used via a system() call to process the spool file. Typically the command specified will @@ -6069,7 +6052,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - print ok (S) + print ok (S) Synonym for printable. @@ -6079,7 +6062,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - printable (S) + printable (S) If this parameter is yes, then clients may open, write to and submit spool files on the directory specified for the service. @@ -6097,7 +6080,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - printcap (G) + printcap (G) Synonym for printcap name. @@ -6107,7 +6090,7 @@ df $1 | tail -1 | awk '{print $2" "$4}' - printcap name (G) + printcap name (G) This parameter may be used to override the compiled-in default printcap name used by the server (usually /etc/printcap). See the discussion of the A minimal printcap file would look something like this: - -print1|My Printer 1 -print2|My Printer 2 -print3|My Printer 3 -print4|My Printer 4 -print5|My Printer 5 - + + print1|My Printer 1 + print2|My Printer 2 + print3|My Printer 3 + print4|My Printer 4 + print5|My Printer 5 + where the '|' separates aliases of a printer. The fact that the second alias has a space in it gives a hint to Samba @@ -6160,7 +6143,7 @@ print5|My Printer 5 - printer admin (S) + printer admin (S) This is a list of users that can do anything to printers via the remote administration interfaces offered by MS-RPC (usually using a NT workstation). Note that the root user always @@ -6177,11 +6160,11 @@ print5|My Printer 5 - printer driver (S) + printer driver (S) Note :This is a deprecated parameter and will be removed in the next major release following version 2.2. Please see the instructions in - the Samba 2.2. Printing + the Samba 2.2. Printing HOWTO for more information on the new method of loading printer drivers onto a Samba server. @@ -6210,11 +6193,11 @@ print5|My Printer 5 - printer driver file (G) + printer driver file (G) Note :This is a deprecated parameter and will be removed in the next major release following version 2.2. Please see the instructions in - the Samba 2.2. Printing + the Samba 2.2. Printing HOWTO for more information on the new method of loading printer drivers onto a Samba server. @@ -6246,11 +6229,11 @@ print5|My Printer 5 - printer driver location (S) + printer driver location (S) Note :This is a deprecated parameter and will be removed in the next major release following version 2.2. Please see the instructions in - the Samba 2.2. Printing + the Samba 2.2. Printing HOWTO for more information on the new method of loading printer drivers onto a Samba server. @@ -6280,7 +6263,7 @@ print5|My Printer 5 - printer name (S) + printer name (S) This parameter specifies the name of the printer to which print jobs spooled through a printable service will be sent. @@ -6297,7 +6280,7 @@ print5|My Printer 5 - printer (S) + printer (S) Synonym for printer name. @@ -6306,7 +6289,7 @@ print5|My Printer 5 - printing (S) + printing (S) This parameters controls how printer status information is interpreted on your system. It also affects the default values for the print command, @@ -6337,7 +6320,7 @@ print5|My Printer 5 - private dir (G) + private dir (G) This parameters defines the directory smbd will use for storing such files as smbpasswd and secrets.tdb. @@ -6351,7 +6334,7 @@ print5|My Printer 5 - protocol (G) + protocol (G) Synonym for max protocol. @@ -6360,7 +6343,7 @@ print5|My Printer 5 - public (S) + public (S) Synonym for guest ok. @@ -6369,7 +6352,7 @@ print5|My Printer 5 - queuepause command (S) + queuepause command (S) This parameter specifies the command to be executed on the server host in order to pause the printer queue. @@ -6398,7 +6381,7 @@ print5|My Printer 5 - queueresume command (S) + queueresume command (S) This parameter specifies the command to be executed on the server host in order to resume the printer queue. It is the command to undo the behavior that is caused by the @@ -6433,7 +6416,7 @@ print5|My Printer 5 - read bmpx (G) + read bmpx (G) This boolean parameter controls whether smbd(8) will support the "Read Block Multiplex" SMB. This is now rarely used and defaults to @@ -6448,7 +6431,7 @@ print5|My Printer 5 - read list (S) + read list (S) This is a list of users that are given read-only access to a service. If the connecting user is in this list then they will not be given write access, no matter what the - read only (S) + read only (S) An inverted synonym is writeable. @@ -6489,7 +6472,7 @@ print5|My Printer 5 - read raw (G) + read raw (G) This parameter controls whether or not the server will support the raw read SMB requests when transferring data to clients. @@ -6512,7 +6495,7 @@ print5|My Printer 5 - read size (G) + read size (G) The option read size affects the overlap of disk reads/writes with network reads/writes. If the amount of data being transferred in several of the SMB @@ -6539,7 +6522,7 @@ print5|My Printer 5 - realm (G) + realm (G) This option specifies the kerberos realm to use. The realm is used as the ADS equivalent of the NT4domain. It @@ -6552,7 +6535,7 @@ print5|My Printer 5 - remote announce (G) + remote announce (G) This option allows you to setup nmbd(8) to periodically announce itself to arbitrary IP addresses with an arbitrary workgroup name. @@ -6577,7 +6560,7 @@ print5|My Printer 5 addresses of the remote networks, but can also be the IP addresses of known browse masters if your network config is that stable. - See the documentation file BROWSING + See the documentation file BROWSING.txt in the docs/ directory. Default: remote announce = <empty string> @@ -6588,7 +6571,7 @@ print5|My Printer 5 - remote browse sync (G) + remote browse sync (G) This option allows you to setup nmbd(8) to periodically request synchronization of browse lists with the master browser of a Samba @@ -6626,7 +6609,7 @@ print5|My Printer 5 - restrict anonymous (G) + restrict anonymous (G) This is a integer parameter, and mirrors as much as possible the functinality the RestrictAnonymous @@ -6639,7 +6622,7 @@ print5|My Printer 5 - root (G) + root (G) Synonym for root directory". @@ -6648,7 +6631,7 @@ print5|My Printer 5 - root dir (G) + root dir (G) Synonym for root directory". @@ -6656,7 +6639,7 @@ print5|My Printer 5 - root directory (G) + root directory (G) The server will chroot() (i.e. Change its root directory) to this directory on startup. This is not strictly necessary for secure operation. Even without it the @@ -6688,7 +6671,7 @@ print5|My Printer 5 - root postexec (S) + root postexec (S) This is the same as the postexec parameter except that the command is run as root. This is useful for unmounting filesystems @@ -6703,7 +6686,7 @@ print5|My Printer 5 - root preexec (S) + root preexec (S) This is the same as the preexec parameter except that the command is run as root. This is useful for mounting filesystems (such as CDROMs) when a @@ -6721,7 +6704,7 @@ print5|My Printer 5 - root preexec close (S) + root preexec close (S) This is the same as the preexec close parameter except that the command is run as root. @@ -6735,14 +6718,14 @@ print5|My Printer 5 - security (G) + security (G) This option affects how clients respond to Samba and is one of the most important settings in the smb.conf file. The option sets the "security mode bit" in replies to - protocol negotiations with smbd - 8 to turn share level security on or off. Clients decide + protocol negotiations with smbd(8) + to turn share level security on or off. Clients decide based on this bit whether (and how) to transfer user and password information to the server. @@ -6787,7 +6770,7 @@ print5|My Printer 5 The different settings will now be explained. - SECURITY = SHARE + SECURITY = SHARE When clients connect to a share level security server they @@ -6856,10 +6839,10 @@ print5|My Printer 5 See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION. - SECURITY = USER + SECURITY = USER - This is the default security setting in Samba 3.0. + This is the default security setting in Samba 2.2. With user-level security a client must first "log-on" with a valid username and password (which can be mapped using the username map @@ -6883,27 +6866,24 @@ print5|My Printer 5 See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION. - SECURITY = DOMAIN - + SECURITY = SERVER - This mode will only work correctly if net - 8 has been used to add this - machine into a Windows NT Domain. It expects the encrypted passwords - parameter to be set to yes. In this - mode Samba will try to validate the username/password by passing - it to a Windows NT Primary or Backup Domain Controller, in exactly - the same way that a Windows NT Server would do. - - Note that a valid UNIX user must still - exist as well as the account on the Domain Controller to allow - Samba to have a valid UNIX account to map file access to. + In this mode Samba will try to validate the username/password + by passing it to another SMB server, such as an NT box. If this + fails it will revert to security = user, but note + that if encrypted passwords have been negotiated then Samba cannot + revert back to checking the UNIX password file, it must have a valid + smbpasswd file to check users against. See the + documentation file in the docs/ directory + ENCRYPTION.txt for details on how to set this + up. - Note that from the client's point - of view security = domain is the same as security = user - . It only affects how the server deals with the authentication, - it does not in any way affect what the client sees. + Note that from the client's point of + view security = server is the same as + security = user. It only affects how the server deals + with the authentication, it does not in any way affect what the + client sees. Note that the name of the resource being requested is not sent to the server until after @@ -6921,42 +6901,27 @@ print5|My Printer 5 server parameter and the encrypted passwords parameter. - - SECURITY = SERVER + + SECURITY = DOMAIN - In this mode Samba will try to validate the username/password - by passing it to another SMB server, such as an NT box. If this - fails it will revert to security = - user. It expects the This mode will only work correctly if smbpasswd(8) has been used to add this + machine into a Windows NT Domain. It expects the encrypted passwords - parameter to be set to - yes, unless the remote server - does not support them. However note - that if encrypted passwords have been negotiated then Samba cannot - revert back to checking the UNIX password file, it must have a valid - smbpasswd file to check users against. See the - documentation file in the docs/ directory - ENCRYPTION.txt for details on how to set this - up. + parameter to be set to yes. In this + mode Samba will try to validate the username/password by passing + it to a Windows NT Primary or Backup Domain Controller, in exactly + the same way that a Windows NT Server would do. - Note this mode of operation - has significant pitfalls, due to the fact that is - activly initiates a man-in-the-middle attack on the - remote SMB server. In particular, this mode of - operation can cause significant resource consuption on - the PDC, as it must maintain an active connection for - the duration of the user's session. Furthermore, if - this connection is lost, there is no way to - reestablish it, and futher authenticaions to the Samba - server may fail. (From a single client, till it - disconnects). + Note that a valid UNIX user must still + exist as well as the account on the Domain Controller to allow + Samba to have a valid UNIX account to map file access to. - Note that from the client's point of - view security = server is the same as - security = user. It only affects how the server deals - with the authentication, it does not in any way affect what the - client sees. + Note that from the client's point + of view security = domain is the same as security = user + . It only affects how the server deals with the authentication, + it does not in any way affect what the client sees. Note that the name of the resource being requested is not sent to the server until after @@ -6967,6 +6932,14 @@ print5|My Printer 5 See the map to guest parameter for details on doing this. + BUG: There is currently a bug in the + implementation of security = domain with respect + to multi-byte character set usernames. The communication with a + Domain Controller must be done in UNICODE and Samba currently + does not widen multi-byte user names to UNICODE correctly, thus + a multi-byte username will not be recognized correctly at the + Domain Controller. This issue will be addressed in a future release. + See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION. @@ -6974,17 +6947,16 @@ print5|My Printer 5 server parameter and the encrypted passwords parameter. - + Default: security = USER Example: security = DOMAIN - - security mask (S) + security mask (S) This parameter controls what UNIX permission bits can be modified when a Windows NT client is manipulating the UNIX permission on a file using the native NT security @@ -7019,7 +6991,7 @@ print5|My Printer 5 - server string (G) + server string (G) This controls what string will show up in the printer comment box in print manager and next to the IPC connection in net view. It can be any string that you wish @@ -7044,7 +7016,7 @@ print5|My Printer 5 - set directory (S) + set directory (S) If set directory = no, then users of the service may not use the setdir command to change directory. @@ -7060,7 +7032,7 @@ print5|My Printer 5 - share modes (S) + share modes (S) This enables or disables the honoring of the share modes during a file open. These modes are used by clients to gain exclusive read or write access @@ -7089,7 +7061,7 @@ print5|My Printer 5 - short preserve case (S) + short preserve case (S) This boolean parameter controls if new files which conform to 8.3 syntax, that is all in upper case and of suitable length, are created upper case, or if they are forced @@ -7109,7 +7081,7 @@ print5|My Printer 5 - show add printer wizard (G) + show add printer wizard (G) With the introduction of MS-RPC based printing support for Windows NT/2000 client in Samba 2.2, a "Printers..." folder will appear on Samba hosts in the share listing. Normally this folder will @@ -7144,7 +7116,7 @@ print5|My Printer 5 - shutdown script (G) + shutdown script (G) This parameter only exists in the HEAD cvs branch This a full path name to a script called by smbd(8) that @@ -7170,15 +7142,15 @@ print5|My Printer 5 Default: None. Example: abort shutdown script = /usr/local/samba/sbin/shutdown %m %t %r %f Shutdown script example: - -#!/bin/bash + + #!/bin/bash -$time=0 -let "time/60" -let "time++" + $time=0 + let "time/60" + let "time++" -/sbin/shutdown $3 $4 +$time $1 & - + /sbin/shutdown $3 $4 +$time $1 & + Shutdown does not return so we need to launch it in background. @@ -7188,7 +7160,7 @@ let "time++" - smb passwd file (G) + smb passwd file (G) This option sets the path to the encrypted smbpasswd file. By default the path to the smbpasswd file is compiled into Samba. @@ -7203,7 +7175,7 @@ let "time++" - smb ports (G) + smb ports (G) Specifies which ports the server should listen on for SMB traffic. @@ -7214,7 +7186,7 @@ let "time++" - socket address (G) + socket address (G) This option allows you to control what address Samba will listen for connections on. This is used to support multiple virtual interfaces on the one server, each @@ -7231,7 +7203,7 @@ let "time++" - socket options (G) + socket options (G) This option allows you to set socket options to be used when talking with the client. @@ -7304,7 +7276,7 @@ let "time++" - source environment (G) + source environment (G) This parameter causes Samba to set environment variables as per the content of the file named. @@ -7326,23 +7298,17 @@ let "time++" /usr/local/smb_env_vars + +use spnego (G) + This variable controls controls whether samba will try to use Simple and Protected NEGOciation (as specified by rfc2478) with WindowsXP and Windows2000sp2 clients to agree upon an authentication mechanism. As of samba 3.0alpha it must be set to "no" for these clients to join a samba domain controller. It can be set to "yes" to allow samba to participate in an AD domain controlled by a Windows2000 domain controller. +Default: use spnego = yes + + - use spnego (G) - This variable controls controls whether samba will try - to use Simple and Protected NEGOciation (as specified by rfc2478) with - WindowsXP and Windows2000sp2 clients to agree upon an authentication mechanism. - Unless further issues are discovered with our SPNEGO - implementation, there is no reason this should ever be - disabled. - Default: use spnego = yes - - - - - stat cache (G) - This parameter determines if smbd - 8 will use a cache in order to + stat cache (G) + This parameter determines if smbd(8) will use a cache in order to speed up case insensitive name mappings. You should never need to change this parameter. @@ -7351,7 +7317,7 @@ let "time++" - stat cache size (G) + stat cache size (G) This parameter determines the number of entries in the stat cache. You should never need to change this parameter. @@ -7363,7 +7329,7 @@ let "time++" - strict allocate (S) + strict allocate (S) This is a boolean that controls the handling of disk space allocation in the server. When this is set to yes the server will change from UNIX behaviour of not committing real @@ -7387,7 +7353,7 @@ let "time++" - strict locking (S) + strict locking (S) This is a boolean that controls the handling of file locking in the server. When this is set to yes the server will check every read and write access for file locks, and @@ -7407,7 +7373,7 @@ let "time++" - strict sync (S) + strict sync (S) Many Windows applications (including the Windows 98 explorer shell) seem to confuse flushing buffer contents to disk with doing a sync to disk. Under UNIX, a sync call forces @@ -7415,8 +7381,7 @@ let "time++" all outstanding data in kernel disk buffers has been safely stored onto stable storage. This is very slow and should only be done rarely. Setting this parameter to no (the - default) means that smbd - 8 ignores the Windows applications requests for + default) means that smbd ignores the Windows applications requests for a sync call. There is only a possibility of losing data if the operating system itself that Samba is running on crashes, so there is little danger in this default setting. In addition, this fixes many @@ -7432,7 +7397,7 @@ let "time++" - strip dot (G) + strip dot (G) This is a boolean that controls whether to strip trailing dots off UNIX filenames. This helps with some CDROMs that have filenames ending in a single dot. @@ -7444,7 +7409,7 @@ let "time++" - sync always (S) + sync always (S) This is a boolean parameter that controls whether writes will always be written to stable storage before the write call returns. If this is no then the server will be @@ -7466,7 +7431,7 @@ let "time++" - syslog (G) + syslog (G) This parameter maps how Samba debug messages are logged onto the system syslog logging levels. Samba debug level zero maps onto syslog LOG_ERR, debug @@ -7486,7 +7451,7 @@ let "time++" - syslog only (G) + syslog only (G) If this parameter is set then Samba debug messages are logged into the system syslog only, and not to the debug log files. @@ -7498,7 +7463,7 @@ let "time++" - template homedir (G) + template homedir (G) When filling out the user information for a Windows NT user, the winbindd(8) daemon uses this parameter to fill in the home directory for that user. @@ -7514,10 +7479,9 @@ let "time++" - template shell (G) + template shell (G) When filling out the user information for a Windows NT - user, the winbindd - 8 daemon + user, the winbindd(8) daemon uses this parameter to fill in the login shell for that user. Default: template shell = /bin/false @@ -7527,7 +7491,7 @@ let "time++" - time offset (G) + time offset (G) This parameter is a setting in minutes to add to the normal GMT to local time conversion. This is useful if you are serving a lot of PCs that have incorrect daylight @@ -7541,9 +7505,9 @@ let "time++" - time server (G) - This parameter determines if nmbd - 8 advertises itself as a time server to Windows + time server (G) + This parameter determines if + nmbd(8) advertises itself as a time server to Windows clients. Default: time server = no @@ -7552,7 +7516,7 @@ let "time++" - timestamp logs (G) + timestamp logs (G) Synonym for debug timestamp. @@ -7563,17 +7527,16 @@ let "time++" - total print jobs (G) + total print jobs (G) This parameter accepts an integer value which defines a limit on the maximum number of print jobs that will be accepted system wide at any given time. If a print job is submitted - by a client which will exceed this number, then smbd - 8 will return an + by a client which will exceed this number, then smbd will return an error indicating that no space is available on the server. The default value of 0 means that no such limit exists. This parameter can be used to prevent a server from exceeding its capacity and is designed as a printing throttle. See also - max print jobs. + max print jobs. Default: total print jobs = 0 @@ -7582,7 +7545,7 @@ let "time++" - unicode (G) + unicode (G) Specifies whether Samba should try to use unicode on the wire by default. Note: This does NOT mean that samba will assume that the unix machine uses unicode! @@ -7594,19 +7557,19 @@ let "time++" - unix charset (G) + unix charset (G) Specifies the charset the unix machine Samba runs on uses. Samba needs to know this in order to be able to convert text to the charsets other SMB clients use. - Default: unix charset = UTF8 - Example: unix charset = ASCII + Default: unix charset = ASCII + Example: unix charset = UTF8 - unix extensions(G) + unix extensions(G) This boolean parameter controls whether Samba implments the CIFS UNIX extensions, as defined by HP. These extensions enable Samba to better serve UNIX CIFS clients @@ -7622,7 +7585,7 @@ let "time++" - unix password sync (G) + unix password sync (G) This boolean parameter controls whether Samba attempts to synchronize the UNIX password with the SMB password when the encrypted SMB password in the smbpasswd file is changed. @@ -7643,7 +7606,7 @@ let "time++" - update encrypted (G) + update encrypted (G) This boolean parameter allows a user logging on with a plaintext password to have their encrypted (hashed) password in the smbpasswd file to be updated automatically as @@ -7674,7 +7637,7 @@ let "time++" - use client driver (S) + use client driver (S) This parameter applies only to Windows NT/2000 clients. It has no affect on Windows 95/98/ME clients. When serving a printer to Windows NT/2000 clients without first installing @@ -7712,7 +7675,7 @@ let "time++" - use mmap (G) + use mmap (G) This global parameter determines if the tdb internals of Samba can depend on mmap working correctly on the running system. Samba requires a coherent mmap/read-write system memory cache. Currently only HPUX does not have such a @@ -7730,7 +7693,7 @@ let "time++" - use rhosts (G) + use rhosts (G) If this global parameter is yes, it specifies that the UNIX user's .rhosts file in their home directory will be read to find the names of hosts and users who will be allowed @@ -7750,7 +7713,7 @@ let "time++" - user (S) + user (S) Synonym for username. @@ -7759,7 +7722,7 @@ let "time++" - users (S) + users (S) Synonym for username. @@ -7767,7 +7730,7 @@ let "time++" - username (S) + username (S) Multiple users may be specified in a comma-delimited list, in which case the supplied password will be tested against each username in turn (left to right). @@ -7808,7 +7771,7 @@ let "time++" will be looked up only in the UNIX groups database and will expand to a list of all users in the group of that name. - If any of the usernames begin with a '&' then the name + If any of the usernames begin with a '&'then the name will be looked up only in the NIS netgroups database (if Samba is compiled with netgroup support) and will expand to a list of all users in the netgroup group of that name. @@ -7832,7 +7795,7 @@ let "time++" - username level (G) + username level (G) This option helps Samba to try and 'guess' at the real UNIX username, as many DOS clients send an all-uppercase username. By default Samba tries all lowercase, followed by the @@ -7855,7 +7818,7 @@ let "time++" - username map (G) + username map (G) This option allows you to specify a file containing a mapping of usernames from the clients to the server. This can be used for several purposes. The most common is to map usernames @@ -7918,10 +7881,10 @@ let "time++" '!' to tell Samba to stop processing if it gets a match on that line. - -!sys = mary fred -guest = * - + + !sys = mary fred + guest = * + Note that the remapping is applied to all occurrences of usernames. Thus if you connect to \\server\fred and @@ -7947,7 +7910,7 @@ guest = * - use sendfile (S) + use sendfile (S) If this parameter is yes, and Samba was built with the --with-sendfile-support option, and the underlying operating system supports sendfile system call, then some SMB read calls (mainly ReadAndX @@ -7964,7 +7927,7 @@ guest = * - utmp (G) + utmp (G) This boolean parameter is only available if Samba has been configured and compiled with the option --with-utmp. If set to yes then Samba will attempt @@ -7986,7 +7949,7 @@ guest = * - utmp directory(G) + utmp directory(G) This parameter is only available if Samba has been configured and compiled with the option --with-utmp. It specifies a directory pathname that is @@ -8003,7 +7966,7 @@ guest = * - wtmp directory(G) + wtmp directory(G) This parameter is only available if Samba has been configured and compiled with the option --with-utmp. It specifies a directory pathname that is @@ -8025,9 +7988,9 @@ guest = * - valid users (S) + valid users (S) This is a list of users that should be allowed - to login to this service. Names starting with '@', '+' and '&' + to login to this service. Names starting with '@', '+' and '&' are interpreted using the same rules as described in the invalid users parameter. @@ -8052,7 +8015,7 @@ guest = * - veto files(S) + veto files(S) This is a list of files and directories that are neither visible nor accessible. Each entry in the list must be separated by a '/', which allows spaces to be included @@ -8100,7 +8063,7 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - veto oplock files (S) + veto oplock files (S) This parameter is only valid when the oplocks parameter is turned on for a share. It allows the Samba administrator @@ -8126,7 +8089,7 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - vfs path (S) + vfs path (S) This parameter specifies the directory to look in for vfs modules. The name of every vfs object will be prepended by this directory @@ -8139,7 +8102,7 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - vfs object (S) + vfs object (S) This parameter specifies a shared object files that are used for Samba VFS I/O operations. By default, normal disk I/O operations are used but these can be overloaded @@ -8153,7 +8116,7 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - vfs options (S) + vfs options (S) This parameter allows parameters to be passed to the vfs layer at initialization time. See also @@ -8166,7 +8129,7 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - volume (S) + volume (S) This allows you to override the volume label returned for a share. Useful for CDROMs with installation programs that insist on a particular volume label. @@ -8178,7 +8141,7 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - wide links (S) + wide links (S) This parameter controls whether or not links in the UNIX file system may be followed by the server. Links that point to areas within the directory tree exported by the @@ -8197,10 +8160,9 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - winbind cache time (G) - This parameter specifies the number of - seconds the winbindd - 8 daemon will cache + winbind cache time (G) + This parameter specifies the number of seconds the + winbindd(8) daemon will cache user and group information before querying a Windows NT server again. @@ -8210,10 +8172,11 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - winbind enum users (G) - On large installations using winbindd - 8 it may be - necessary to suppress the enumeration of users through the setpwent(), + winbind enum users (G) + On large installations using + winbindd(8) it may be + necessary to suppress the enumeration of users through the + setpwent(), getpwent() and endpwent() group of system calls. If the winbind enum users parameter is @@ -8231,10 +8194,11 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - winbind enum groups (G) - On large installations using winbindd - 8 it may be necessary to suppress - the enumeration of groups through the setgrent(), + winbind enum groups (G) + On large installations using + winbindd(8) it may be + necessary to suppress the enumeration of groups through the + setgrent(), getgrent() and endgrent() group of system calls. If the winbind enum groups parameter is @@ -8251,10 +8215,10 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - winbind gid (G) + winbind gid (G) The winbind gid parameter specifies the range of group - ids that are allocated by the winbindd - 8 daemon. This range of group ids should have no + ids that are allocated by the + winbindd(8) daemon. This range of group ids should have no existing local or NIS groups within it as strange conflicts can occur otherwise. @@ -8267,7 +8231,7 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - winbind separator (G) + winbind separator (G) This parameter allows an admin to define the character used when listing a username of the form of DOMAIN \user. This parameter @@ -8288,10 +8252,10 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - winbind uid (G) + winbind uid (G) The winbind gid parameter specifies the range of group - ids that are allocated by the winbindd - 8 daemon. This range of ids should have no + ids that are allocated by the + winbindd(8) daemon. This range of ids should have no existing local or NIS users within it as strange conflicts can occur otherwise. @@ -8304,10 +8268,12 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - winbind use default domain (G) - This parameter specifies whether the winbindd - 8 daemon should operate on users - without domain component in their username. + winbind use default domain + + winbind use default domain (G) + This parameter specifies whether the + winbindd(8) + daemon should operate on users without domain component in their username. Users without a domain component are treated as is part of the winbindd server's own domain. While this does not benifit Windows users, it makes SSH, FTP and e-mail function in a way much closer to the way they would in a native unix system. @@ -8320,7 +8286,7 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - wins hook (G) + wins hook (G) When Samba is running as a WINS server this allows you to call an external program for all changes to the WINS database. The primary use for this option is to allow the @@ -8368,7 +8334,7 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - wins proxy (G) + wins proxy (G) This is a boolean that controls if nmbd(8) will respond to broadcast name queries on behalf of other hosts. You may need to set this @@ -8382,10 +8348,10 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - wins server (G) + wins server (G) This specifies the IP address (or DNS name: IP - address for preference) of the WINS server that nmbd - 8 should register with. If you have a WINS server on + address for preference) of the WINS server that + nmbd(8) should register with. If you have a WINS server on your network then you should set this to the WINS server's IP. You should point this at your WINS server if you have a @@ -8395,7 +8361,7 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ to a WINS server if you have multiple subnets and wish cross-subnet browsing to work correctly. - See the documentation file BROWSING + See the documentation file BROWSING.txt in the docs/ directory of your Samba source distribution. Default: not enabled @@ -8406,9 +8372,9 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - wins support (G) - This boolean controls if the nmbd - 8 process in Samba will act as a WINS server. You should + wins support (G) + This boolean controls if the + nmbd(8) process in Samba will act as a WINS server. You should not set this to yes unless you have a multi-subnetted network and you wish a particular nmbd to be your WINS server. Note that you should NEVER set this to yes @@ -8421,7 +8387,7 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - workgroup (G) + workgroup (G) This controls what workgroup your server will appear to be in when queried by clients. Note that this parameter also controls the Domain name used with the - writable (S) + writable (S) Synonym for writeable for people who can't spell :-). @@ -8446,7 +8412,7 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - write cache size (S) + write cache size (S) If this integer parameter is set to non-zero value, Samba will create an in-memory cache for each oplocked file (it does not do this for @@ -8478,7 +8444,7 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - write list (S) + write list (S) This is a list of users that are given read-write access to a service. If the connecting user is in this list then they will be given write access, no matter what the - wins partners (G) + wins partners (G) A space separated list of partners' IP addresses for WINS replication. WINS partners are always defined as push/pull partners as defining only one way WINS replication is unreliable. @@ -8519,7 +8485,7 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - write ok (S) + write ok (S) Inverted synonym for read only. @@ -8528,7 +8494,7 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - write raw (G) + write raw (G) This parameter controls whether or not the server will support raw write SMB's when transferring data from clients. You should never need to change this parameter. @@ -8540,7 +8506,7 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ - writeable (S) + writeable (S) Inverted synonym for read only. @@ -8560,8 +8526,8 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ problem - but be aware of the possibility. On a similar note, many clients - especially DOS clients - - limit service names to eight characters. smbd - 8 has no such limitation, but attempts to connect from such + limit service names to eight characters. smbd(8) + has no such limitation, but attempts to connect from such clients will fail if they truncate the service names. For this reason you should probably keep your service names down to eight characters in length. @@ -8576,22 +8542,22 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ VERSION - This man page is correct for version 3.0 of the Samba suite. + This man page is correct for version 3.0 of + the Samba suite. SEE ALSO - - samba - 7, smbpasswd - 8, swat - 8, smbd - 8, nmbd - 8, smbclient - 1, nmblookup - 1, testparm - 1, testprns - 1. + samba(7), + smbpasswd(8), + swat(8), + smbd(8), + nmbd(8), + smbclient(1), + nmblookup(1), + testparm(1), + testprns(1) + @@ -8604,11 +8570,11 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at + excellent piece of Open Source software, available at + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook XML 4.2 - for Samba 3.0 was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/smbcacls.1.sgml b/docs/docbook/manpages/smbcacls.1.sgml index 5e0e6c80e9c..766d2a78b11 100644 --- a/docs/docbook/manpages/smbcacls.1.sgml +++ b/docs/docbook/manpages/smbcacls.1.sgml @@ -1,5 +1,5 @@ - + smbcacls @@ -32,8 +32,8 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. The smbcacls program manipulates NT Access Control Lists (ACLs) on SMB file shares. @@ -90,8 +90,7 @@ Specifies a username used to connect to the specified service. The username may be of the form "username" in which case the user is prompted to enter in a password and the - workgroup specified in the smb.conf - 5 file is + workgroup specified in the smb.conf file is used, or "username%password" or "DOMAIN\username%password" and the password and workgroup names are used as provided. @@ -148,12 +147,12 @@ The format of an ACL is one or more ACL entries separated by either commas or newlines. An ACL entry is one of the following: - + REVISION:<revision number> OWNER:<sid or name> GROUP:<sid or name> ACL:<sid or name>:<type>/<flags>/<mask> - + The revision of the ACL specifies the internal Windows @@ -166,22 +165,24 @@ ACL:<sid or name>:<type>/<flags>/<mask> otherwise the name specified is resolved using the server on which the file or directory resides. - ACLs specify permissions granted to the SID. This SID again - can be specified in CWS-1-x-y-z format or as a name in which case - it is resolved against the server on which the file or directory - resides. The type, flags and mask values determine the type of - access granted to the SID. - - The type can be either 0 or 1 corresponding to ALLOWED or - DENIED access to the SID. The flags values are generally - zero for file ACLs and either 9 or 2 for directory ACLs. Some - common flags are: - - - #define SEC_ACE_FLAG_OBJECT_INHERIT 0x1 - #define SEC_ACE_FLAG_CONTAINER_INHERIT 0x2 - #define SEC_ACE_FLAG_NO_PROPAGATE_INHERIT 0x4 - #define SEC_ACE_FLAG_INHERIT_ONLY 0x8 + ACLs specify permissions granted to the SID. This SID again + can be specified in CWS-1-x-y-z format or as a name in which case + it is resolved against the server on which the file or directory + resides. The type, flags and mask values determine the type of + access granted to the SID. + + The type can be either 0 or 1 corresponding to ALLOWED or + DENIED access to the SID. The flags values are generally + zero for file ACLs and either 9 or 2 for directory ACLs. Some + common flags are: + + + #define SEC_ACE_FLAG_OBJECT_INHERIT 0x1 + #define SEC_ACE_FLAG_CONTAINER_INHERIT 0x2 + #define SEC_ACE_FLAG_NO_PROPAGATE_INHERIT 0x4 + + #define SEC_ACE_FLAG_INHERIT_ONLY 0x8 + At present flags can only be specified as decimal or @@ -232,7 +233,8 @@ ACL:<sid or name>:<type>/<flags>/<mask> VERSION - This man page is correct for version 2.2 of the Samba suite. + This man page is correct for version 2.2 of + the Samba suite. @@ -247,8 +249,7 @@ ACL:<sid or name>:<type>/<flags>/<mask> and Tim Potter. The conversion to DocBook for Samba 2.2 was done - by Gerald Carter. The conversion to DocBook XML 4.2 for Samba 3.0 was done - by Alexander Bokovoy. + by Gerald Carter diff --git a/docs/docbook/manpages/smbclient.1.sgml b/docs/docbook/manpages/smbclient.1.sgml index 7e908e5d702..43994a4529f 100644 --- a/docs/docbook/manpages/smbclient.1.sgml +++ b/docs/docbook/manpages/smbclient.1.sgml @@ -1,5 +1,5 @@ - + smbclient @@ -44,13 +44,12 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. smbclient is a client that can 'talk' to an SMB/CIFS server. It offers an interface - similar to that of the ftp program (see ftp - 1). + similar to that of the ftp program (see ftp(1)). Operations include things like getting files from the server to the local machine, putting files from the local machine to the server, retrieving directory information from the server @@ -82,9 +81,7 @@ The server name is looked up according to either the -R parameter to smbclient or - using the name resolve order parameter in - the smb.conf - 5 file, + using the name resolve order parameter in the smb.conf file, allowing an administrator to change the order and methods by which server names are looked up. @@ -116,17 +113,15 @@ -s smb.conf - Specifies the location of the all - important smb.conf - 5 file. + Specifies the location of the all important + smb.conf file. -O socket options TCP socket options to set on the client - socket. See the socket options parameter in - the smb.conf - 5 manual page for the list of valid + socket. See the socket options parameter in the + smb.conf (5) manpage for the list of valid options. @@ -139,51 +134,44 @@ string of different name resolution options. The options are :"lmhosts", "host", "wins" and "bcast". They - cause names to be resolved as follows: + cause names to be resolved as follows : - lmhosts: Lookup an IP + lmhosts : Lookup an IP address in the Samba lmhosts file. If the line in lmhosts has - no name type attached to the NetBIOS name (see - the lmhosts - 5 for details) then - any name type matches for lookup. - - - host: Do a standard host + no name type attached to the NetBIOS name (see the lmhosts(5) for details) then + any name type matches for lookup. + + host : Do a standard host name to IP address resolution, using the system /etc/hosts , NIS, or DNS lookups. This method of name resolution is operating system dependent, for instance on IRIX or Solaris this may be controlled by the /etc/nsswitch.conf file). Note that this method is only used if the NetBIOS name type being queried is the 0x20 (server) name type, otherwise - it is ignored. - - - wins: Query a name with + it is ignored. + + wins : Query a name with the IP address listed in the wins server parameter. If no WINS server has - been specified this method will be ignored. - - - bcast: Do a broadcast on + been specified this method will be ignored. + + bcast : Do a broadcast on each of the known local interfaces listed in the interfaces parameter. This is the least reliable of the name resolution methods as it depends on the target host being on a locally - connected subnet. - + connected subnet. If this parameter is not set then the name resolve order - defined in the smb.conf - 5 file parameter + defined in the smb.conf file parameter (name resolve order) will be used. The default order is lmhosts, host, wins, bcast and without this parameter or any entry in the name resolve order - parameter of the smb.conf - 5 file the name resolution + parameter of the smb.conf file the name resolution methods will be attempted in this order. @@ -214,8 +202,8 @@ -I options useful, as they allow you to control the FROM and TO parts of the message. - See the message command parameter in the smb.conf - 5 for a description of how to handle incoming + See the message command parameter in the + smb.conf(5) for a description of how to handle incoming WinPopup messages in Samba. Note: Copy WinPopup into the startup group @@ -391,11 +379,11 @@ password used in the connection. The format of the file is - + username = <value> password = <value> domain = <value> - + If the domain parameter is missing the current workgroup name @@ -447,9 +435,9 @@ domain = <value> -W WORKGROUP Override the default workgroup (domain) specified - in the workgroup parameter of the smb.conf - 5 file for this connection. This may be - needed to connect to some servers. + in the workgroup parameter of the smb.conf + file for this connection. This may be needed to connect to some + servers. @@ -531,7 +519,7 @@ domain = <value> Tar Filenames - All file names can be given as DOS path names (with '\\' + All file names can be given as DOS path names (with '\' as the component separator) or as UNIX path names (with '/' as the component separator). @@ -599,7 +587,7 @@ domain = <value> smb:\> - The backslash ("\\") indicates the current working directory + The backslash ("\") indicates the current working directory on the server, and will change if the current working directory is changed. @@ -1052,8 +1040,8 @@ domain = <value> and writeable only by the user. To test the client, you will need to know the name of a - running SMB/CIFS server. It is possible to run smbd - 8 as an ordinary user - running that server as a daemon + running SMB/CIFS server. It is possible to run smbd(8) + as an ordinary user - running that server as a daemon on a user-accessible port (typically any port number over 1024) would provide a suitable test server. @@ -1075,7 +1063,8 @@ domain = <value> VERSION - This man page is correct for version 2.2 of the Samba suite. + This man page is correct for version 2.2 of + the Samba suite. @@ -1089,11 +1078,11 @@ domain = <value> The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at + excellent piece of Open Source software, available at + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook XML 4.2 for Samba 3.0 - was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/smbcontrol.1.sgml b/docs/docbook/manpages/smbcontrol.1.sgml index 6632e072693..166ef63e87f 100644 --- a/docs/docbook/manpages/smbcontrol.1.sgml +++ b/docs/docbook/manpages/smbcontrol.1.sgml @@ -1,5 +1,5 @@ - + smbcontrol @@ -29,14 +29,14 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. smbcontrol is a very small program, which - sends messages to a smbd - 8, a nmbd - 8, or a winbindd - 8 daemon running on the system. + sends messages to an smbd(8), + an nmbd(8) + or a winbindd(8) + daemon running on the system. @@ -54,7 +54,8 @@ destination - One of nmbd, smbd or a process ID. + One of nmbd + smbd or a process ID. The smbd destination causes the message to "broadcast" to all smbd daemons. @@ -189,9 +190,9 @@ SEE ALSO - nmbd - 8 and smbd - 8. + nmbd(8), + and smbd(8). + @@ -204,11 +205,11 @@ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at + excellent piece of Open Source software, available at + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook XML 4.2 for - Samba 3.0 was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/smbd.8.sgml b/docs/docbook/manpages/smbd.8.sgml index 32837ba903d..9fb80901be1 100644 --- a/docs/docbook/manpages/smbd.8.sgml +++ b/docs/docbook/manpages/smbd.8.sgml @@ -1,5 +1,5 @@ - + smbd @@ -32,8 +32,7 @@ DESCRIPTION - This program is part of the Samba - 7 suite. + This program is part of the Samba suite. smbd is the server daemon that provides filesharing and printing services to Windows clients. @@ -47,14 +46,15 @@ An extensive description of the services that the server can provide is given in the man page for the configuration file controlling the attributes of those - services (see smb.conf - 5. This man page will not describe the + services (see smb.conf(5) + . This man page will not describe the services, but will concentrate on the administrative aspects of running the server. Please note that there are significant security - implications to running this server, and the smb.conf - 5 manual page should be regarded as mandatory reading before + implications to running this server, and the smb.conf(5) + manpage should be regarded as mandatory reading before proceeding with installation. A session is created whenever a client requests one. @@ -160,9 +160,9 @@ data, most of which is extremely cryptic. Note that specifying this parameter here will - override the log - level parameter in the smb.conf - 5 file. + override the log + level parameter in the + smb.conf(5) file. @@ -175,9 +175,9 @@ messages from the running server. The log file generated is never removed by the server although its size may be controlled by the max log size - option in the smb.conf - 5 file. Beware: + url="smb.conf.5.html#maxlogsize">max log size + option in the + smb.conf(5) file. Beware: If the directory specified does not exist, smbd will log to the default debug log location defined at compile time. @@ -189,9 +189,9 @@ -O <socket options> See the socket options - parameter in the smb.conf - 5 file for details. + url="smb.conf.5.html#socketoptions">socket options + parameter in the smb.conf(5) + file for details. @@ -226,8 +226,8 @@ information in this file includes server-specific information such as what printcap file to use, as well as descriptions of all the services that the server is - to provide. See smb.conf - 5 for more information. + to provide. See + smb.conf(5) for more information. The default configuration file name is determined at compile time. @@ -243,7 +243,7 @@ If the server is to be run by the inetd meta-daemon, this file must contain suitable startup information for the - meta-daemon. See the "How to Install and Test SAMBA" + meta-daemon. See the UNIX_INSTALL.html document for details. @@ -255,7 +255,7 @@ If running the server as a daemon at startup, this file will need to contain an appropriate startup - sequence for the server. See the "How to Install and Test SAMBA" + sequence for the server. See the UNIX_INSTALL.html document for details. @@ -265,20 +265,21 @@ meta-daemon inetd, this file must contain a mapping of service name (e.g., netbios-ssn) to service port (e.g., 139) and protocol type (e.g., tcp). - See the "How to Install and Test SAMBA" + See the UNIX_INSTALL.html document for details. /usr/local/samba/lib/smb.conf - This is the default location of the smb.conf - 5 server configuration file. Other common places that systems + This is the default location of the + smb.conf + server configuration file. Other common places that systems install this file are /usr/samba/lib/smb.conf - and /etc/samba/smb.conf. + and /etc/smb.conf. This file describes all the services the server - is to make available to clients. See smb.conf - 5 for more information. + is to make available to clients. See + smb.conf(5) for more information. @@ -316,9 +317,9 @@ Samba uses PAM for authentication (when presented with a plaintext password), for account checking (is this account disabled?) and for session management. The degree too which samba supports PAM is restricted - by the limitations of the SMB protocol and the obey - pam restricions smb.conf - 5 paramater. When this is set, the following restrictions apply: + by the limitations of the SMB protocol and the + obey pam restricions + smb.conf paramater. When this is set, the following restrictions apply: @@ -378,9 +379,9 @@ it to die on its own. The debug log level of smbd may be raised - or lowered using smbcontrol - 1 program (SIGUSR[1|2] signals are no longer - used since Samba 2.2). This is to allow transient problems to be diagnosed, + or lowered using smbcontrol(1) + program (SIGUSR[1|2] signals are no longer used in + Samba 2.2). This is to allow transient problems to be diagnosed, whilst still running at a normally low log level. Note that as the signal handlers send a debug write, @@ -393,15 +394,14 @@ SEE ALSO - hosts_access - 5, inetd - 8, nmbd - 8, smb.conf - 5, smbclient - 1, testparm - 1, testprns - 1, and the - Internet RFC's rfc1001.txt, rfc1002.txt. + hosts_access(5), inetd(8), + nmbd(8), + smb.conf(5) + , smbclient(1) + , + testparm(1), + testprns(1), and the Internet RFC's + rfc1001.txt, rfc1002.txt. In addition the CIFS (formerly SMB) specification is available as a link from the Web page http://samba.org/cifs/. @@ -417,11 +417,11 @@ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at + excellent piece of Open Source software, available at + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook XML 4.2 for - Samba 3.0 was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/smbgroupedit.8.sgml b/docs/docbook/manpages/smbgroupedit.8.sgml index 6c489bb7855..188218c249c 100644 --- a/docs/docbook/manpages/smbgroupedit.8.sgml +++ b/docs/docbook/manpages/smbgroupedit.8.sgml @@ -1,11 +1,15 @@ - + smbgroupedit 8 + + smbgroupedit Query/set/change UNIX - Windows NT group mapping @@ -21,13 +25,17 @@ + DESCRIPTION -This program is part of the Samba -7 suite. +This program is part of the Samba +suite. + The smbgroupedit command allows for mapping unix groups @@ -62,8 +70,8 @@ etc. Privilege : -For example: - +For examples, + Users SID : S-1-5-32-545 Unix group: -1 @@ -83,8 +91,9 @@ Users NTGroupName(SID) -> UnixGroupName -For example: - +For example, + + Users (S-1-5-32-545) -> -1 @@ -100,6 +109,8 @@ Users (S-1-5-32-545) -> -1 + FILES @@ -109,6 +120,8 @@ Users (S-1-5-32-545) -> -1 + EXIT STATUS @@ -150,45 +163,65 @@ the 'Domain Admins' Global group: domadm:x:502:joe,john,mary - map this domadm group to the 'domain admins' group: + map this domadm group to the 'domain admins' group: + - Get the SID for the Windows NT "Domain Admins" group: + Get the SID for the Windows NT "Domain Admins" + group: + root# smbgroupedit -vs | grep "Domain Admins" Domain Admins (S-1-5-21-1108995562-3116817432-1375597819-512) -> -1 - + + map the unix domadm group to the Windows NT "Domain Admins" group, by running the command: - + + + root# smbgroupedit \ -c S-1-5-21-1108995562-3116817432-1375597819-512 \ -u domadm -td - warning: don't copy and paste this sample, the + + warning: don't copy and paste this sample, the Domain Admins SID (the S-1-5-21-...-512) is different for every PDC. - + + To verify that your mapping has taken effect: - + + + root# smbgroupedit -vs|grep "Domain Admins" Domain Admins (S-1-5-21-1108995562-3116817432-1375597819-512) -> domadm -To give access to a certain directory on a domain member machine (an + +To give access to a certain directory on a domain member machine (an NT/W2K or a samba server running winbind) to some users who are member of a group on your samba PDC, flag that group as a domain group: - + + + root# smbgroupedit -a unixgroup -td + + + + + + VERSION @@ -199,16 +232,22 @@ the Samba suite. + + SEE ALSO -smb.conf -5 +smb.conf(5) + + + AUTHOR @@ -222,8 +261,7 @@ to the way the Linux kernel is developed. smbgroupedit was written by Jean Francois Micouleau. The current set of manpages and documentation is maintained -by the Samba Team in the same fashion as the Samba source code. The conversion -to DocBook XML 4.2 for Samba 3.0 was done by Alexander Bokovoy. +by the Samba Team in the same fashion as the Samba source code. diff --git a/docs/docbook/manpages/smbmnt.8.sgml b/docs/docbook/manpages/smbmnt.8.sgml index 6d48b12b9bc..55b66d5d25b 100644 --- a/docs/docbook/manpages/smbmnt.8.sgml +++ b/docs/docbook/manpages/smbmnt.8.sgml @@ -1,5 +1,5 @@ - + smbmnt @@ -38,8 +38,8 @@ by the user, and that the user has write permission on. The smbmnt program is normally invoked - by smbmount - 8. It should not be invoked directly by users. + by smbmount(8) + . It should not be invoked directly by users. smbmount searches the normal PATH for smbmnt. You must ensure that the smbmnt version in your path matches the smbmount used. @@ -107,8 +107,7 @@ The conversion of this manpage for Samba 2.2 was performed - by Gerald Carter. The conversion to DocBook XML 4.2 for Samba 3.0 - was done by Alexander Bokovoy. + by Gerald Carter diff --git a/docs/docbook/manpages/smbmount.8.sgml b/docs/docbook/manpages/smbmount.8.sgml index d17e4e6bcf7..c4b91a5572d 100644 --- a/docs/docbook/manpages/smbmount.8.sgml +++ b/docs/docbook/manpages/smbmount.8.sgml @@ -1,5 +1,5 @@ - + smbmount @@ -26,8 +26,7 @@ smbmount mounts a Linux SMB filesystem. It is usually invoked as mount.smbfs by - the mount - 8 command when using the + the mount(8) command when using the "-t smbfs" option. This command only works in Linux, and the kernel must support the smbfs filesystem. @@ -40,12 +39,11 @@ smbmount is a daemon. After mounting it keeps running until the mounted smbfs is umounted. It will log things that happen when in daemon mode using the "machine name" smbmount, so - typically this output will end up in log.smbmount. The - smbmount process may also be called mount.smbfs. + typically this output will end up in log.smbmount. The + smbmount process may also be called mount.smbfs. NOTE: smbmount - calls smbmnt - 8 to do the actual mount. You + calls smbmnt(8) to do the actual mount. You must make sure that smbmnt is in the path so that it can be found. @@ -86,12 +84,15 @@ credentials=<filename> - specifies a file that contains a username and/or password. -The format of the file is: - -username = <value> -password = <value> - + specifies a file that contains a username + and/or password. The format of the file is: + + + + username = <value> + password = <value> + + This is preferred over having passwords in plaintext in a shared file, such as /etc/fstab. Be sure to protect any @@ -173,8 +174,8 @@ password = <value> sockopt=<arg> sets the TCP socket options. See the smb.conf - 5 socket options option. + url="smb.conf.5.html#SOCKETOPTIONS">smb.conf + socket options option. @@ -297,9 +298,10 @@ password = <value> FreeBSD also has a smbfs, but it is not related to smbmount - For Solaris, HP-UX and others you may want to look at smbsh - 1 or at other solutions, such as - Sharity or perhaps replacing the SMB server with a NFS server. + For Solaris, HP-UX and others you may want to look at + smbsh(1) or at other + solutions, such as sharity or perhaps replacing the SMB server with + a NFS server. @@ -319,8 +321,7 @@ password = <value> The conversion of this manpage for Samba 2.2 was performed - by Gerald Carter. The conversion to DocBook XML 4.2 for Samba 3.0 - was done by Alexander Bokovoy. + by Gerald Carter diff --git a/docs/docbook/manpages/smbpasswd.5.sgml b/docs/docbook/manpages/smbpasswd.5.sgml index f78e986bef9..5c80ac4c06c 100644 --- a/docs/docbook/manpages/smbpasswd.5.sgml +++ b/docs/docbook/manpages/smbpasswd.5.sgml @@ -1,5 +1,5 @@ - + smbpasswd @@ -19,8 +19,8 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. smbpasswd is the Samba encrypted password file. It contains the username, Unix user id and the SMB hashed passwords of the @@ -122,7 +122,7 @@ the attributes of the users account. In the Samba 2.2 release this field is bracketed by '[' and ']' characters and is always 13 characters in length (including the '[' and ']' characters). - The contents of this field may be any of the following characters: + The contents of this field may be any of the characters. @@ -136,11 +136,12 @@ Password Hash and NT Password Hash are ignored). Note that this will only allow users to log on with no password if the null passwords parameter is set in the smb.conf - 5 config file. + url="smb.conf.5.html#NULLPASSWORDS">smb.conf(5) + config file. D - This means the account - is disabled and no SMB/CIFS logins will be allowed for this user. + is disabled and no SMB/CIFS logins will be allowed for + this user. W - This means this account is a "Workstation Trust" account. This kind of account is used @@ -177,9 +178,8 @@ SEE ALSO - smbpasswd - 8, Samba - 7, and + smbpasswd(8), + samba(7), and the Internet RFC1321 for details on the MD4 algorithm. @@ -194,11 +194,11 @@ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at + excellent piece of Open Source software, available at + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook XML 4.2 - for Samba 3.0 was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/smbpasswd.8.sgml b/docs/docbook/manpages/smbpasswd.8.sgml index 5d475cf08c7..8e6d925ae03 100644 --- a/docs/docbook/manpages/smbpasswd.8.sgml +++ b/docs/docbook/manpages/smbpasswd.8.sgml @@ -1,5 +1,5 @@ - + smbpasswd @@ -37,27 +37,25 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. The smbpasswd program has several different - functions, depending on whether it is run by the root user - or not. When run as a normal user it allows the user to change + functions, depending on whether it is run by the root + user or not. When run as a normal user it allows the user to change the password used for their SMB sessions on any machines that store SMB passwords. By default (when run with no arguments) it will attempt to change the current user's SMB password on the local machine. This is - similar to the way the passwd(1) program works. - smbpasswd differs from how the passwd program works + similar to the way the passwd(1) program works. + smbpasswd differs from how the passwd program works however in that it is not setuid root but works in - a client-server mode and communicates with a - locally running smbd - 8. As a consequence in order for this to + a client-server mode and communicates with a locally running + smbd(8). As a consequence in order for this to succeed the smbd daemon must be running on the local machine. On a UNIX machine the encrypted SMB passwords are usually stored in - the smbpasswd - 5 file. + the smbpasswd(5) file. When run by an ordinary user with no options, smbpasswd will prompt them for their old SMB password and then ask them @@ -69,13 +67,12 @@ smbpasswd can also be used by a normal user to change their SMB password on remote machines, such as Windows NT Primary Domain - Controllers. See the (-r) and -U options - below. + Controllers. See the (-r) and -U options below. When run by root, smbpasswd allows new users to be added and deleted in the smbpasswd file, as well as allows changes to - the attributes of the user in this file to be made. When run by root, - smbpasswd accesses the local smbpasswd file + the attributes of the user in this file to be made. When run by root, + smbpasswd accesses the local smbpasswd file directly, thus enabling changes to be made even if smbd is not running. @@ -124,8 +121,8 @@ If the smbpasswd file is in the 'old' format (pre-Samba 2.0 format) there is no space in the user's password entry to write - this information and the command will FAIL. See smbpasswd - 5 for details on the 'old' and new password file formats. + this information and the command will FAIL. See smbpasswd(5) + for details on the 'old' and new password file formats. This option is only available when running smbpasswd as @@ -143,8 +140,7 @@ If the smbpasswd file is in the 'old' format, then smbpasswd will FAIL to enable the account. - See smbpasswd - 5 for + See smbpasswd (5) for details on the 'old' and new password file formats. This option is only available when running smbpasswd as root. @@ -230,15 +226,15 @@ name of the host being connected to. The options are :"lmhosts", "host", "wins" and "bcast". They - cause names to be resolved as follows: + cause names to be resolved as follows : - lmhosts: Lookup an IP + lmhosts : Lookup an IP address in the Samba lmhosts file. If the line in lmhosts has - no name type attached to the NetBIOS name (see the lmhosts - 5 for details) then + no name type attached to the NetBIOS name (see the lmhosts(5) for details) then any name type matches for lookup. - host: Do a standard host + host : Do a standard host name to IP address resolution, using the system /etc/hosts , NIS, or DNS lookups. This method of name resolution is operating system depended for instance on IRIX or Solaris this @@ -247,12 +243,12 @@ type being queried is the 0x20 (server) name type, otherwise it is ignored. - wins: Query a name with + wins : Query a name with the IP address listed in the wins server parameter. If no WINS server has been specified this method will be ignored. - bcast: Do a broadcast on + bcast : Do a broadcast on each of the known local interfaces listed in the interfaces parameter. This is the least reliable of the name resolution methods as it depends on the @@ -260,8 +256,8 @@ The default order is lmhosts, host, wins, bcast - and without this parameter or any entry in the smb.conf - 5 file the name resolution methods will + and without this parameter or any entry in the + smb.conf file the name resolution methods will be attempted in this order. @@ -296,6 +292,7 @@ + -s This option causes smbpasswd to be silent (i.e. @@ -315,7 +312,7 @@ switch is used to specify the password to be used with the ldap admin dn. Note that the password is stored in - the secrets.tdb and is keyed off + the private/secrets.tdb and is keyed off of the admin's DN. This means that if the value of ldap admin dn ever changes, the password will need to be manually updated as well. @@ -358,15 +355,14 @@ mode communicating with a local smbd for a non-root user then the smbd daemon must be running for this to work. A common problem is to add a restriction to the hosts that may access the - smbd running on the local machine by specifying either allow - hosts or deny hosts entry in - the smb.conf - 5 file and neglecting to + smbd running on the local machine by specifying a + allow hosts or deny hosts + entry in the smb.conf file and neglecting to allow "localhost" access to the smbd. In addition, the smbpasswd command is only useful if Samba - has been set up to use encrypted passwords. See the document - "LanMan and NT Password Encryption in Samba" in the docs directory for details + has been set up to use encrypted passwords. See the file + ENCRYPTION.txt in the docs directory for details on how to do this. @@ -374,14 +370,15 @@ VERSION - This man page is correct for version 3.0 of the Samba suite. + This man page is correct for version 3.0 of + the Samba suite. SEE ALSO - smbpasswd - 5, Samba - 7. + smbpasswd(5), + samba(7) + @@ -394,11 +391,11 @@ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at + excellent piece of Open Source software, available at + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook XML 4.2 - for Samba 3.0 was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/smbsh.1.sgml b/docs/docbook/manpages/smbsh.1.sgml index af080c298c9..c40609be4fd 100644 --- a/docs/docbook/manpages/smbsh.1.sgml +++ b/docs/docbook/manpages/smbsh.1.sgml @@ -1,5 +1,5 @@ - + smbsh @@ -29,8 +29,8 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. smbsh allows you to access an NT filesystem using UNIX commands such as ls, @@ -46,8 +46,7 @@ -W WORKGROUP Override the default workgroup specified in the - workgroup parameter of the smb.conf - 5 file + workgroup parameter of the smb.conf file for this session. This may be needed to connect to some servers. @@ -62,8 +61,7 @@ - -P prefix - This option allows + -P prefixThis option allows the user to set the directory prefix for SMB access. The default value if this option is not specified is smb. @@ -77,20 +75,19 @@ host names to IP addresses. The option takes a space-separated string of different name resolution options. - The options are: "lmhosts", "host", "wins" and "bcast". + The options are :"lmhosts", "host", "wins" and "bcast". They cause names to be resolved as follows : - lmhosts: + lmhosts : Lookup an IP address in the Samba lmhosts file. If the line in lmhosts has no name type attached to the NetBIOS name - (see the lmhosts - 5 for details) - then any name type matches for lookup. + (see the lmhosts(5) + for details) then any name type matches for lookup. - host: + host : Do a standard host name to IP address resolution, using the system /etc/hosts, NIS, or DNS lookups. This method of name resolution is operating @@ -101,14 +98,14 @@ (server) name type, otherwise it is ignored. - wins: + wins : Query a name with the IP address listed in the wins server parameter. If no WINS server has been specified this method will be ignored. - bcast: + bcast : Do a broadcast on each of the known local interfaces listed in the interfaces parameter. This is the least reliable of the name @@ -118,15 +115,14 @@ If this parameter is not set then the name resolve order - defined in the smb.conf - 5 file parameter - (name resolve order) will be used. + defined in the smb.conf file parameter + (name resolve order) will be used. The default order is lmhosts, host, wins, bcast. Without this parameter or any entry in the name resolve order - parameter of the smb.conf - 5 file, the name resolution methods - will be attempted in this order. + parameter of the smb.conf + file, the name resolution methods will be attempted in this + order. @@ -137,8 +133,7 @@ is zero. The higher this value, the more detail will be logged - about the activities of nmblookup - 1. At level + about the activities of nmblookup. At level 0, only critical errors and serious warnings will be logged. @@ -169,12 +164,13 @@ To use the smbsh command, execute smbsh from the prompt and enter the username and password that authenticates you to the machine running the Windows NT - operating system. - -system% smbsh -Username: user -Password: XXXXXXX - + operating system. + + + system% smbsh + Username: user + Password: XXXXXXX + Any dynamically linked command you execute from @@ -192,7 +188,8 @@ VERSION - This man page is correct for version 3.0 of the Samba suite. + This man page is correct for version 3.0 of + the Samba suite. @@ -213,9 +210,9 @@ SEE ALSO - smbd - 8, smb.conf - 5 + smbd(8), + smb.conf(5) + @@ -228,11 +225,11 @@ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at + excellent piece of Open Source software, available at + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook XML 4.2 - for Samba 3.0 was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/smbspool.8.sgml b/docs/docbook/manpages/smbspool.8.sgml index f30539601e9..d164cb0864e 100644 --- a/docs/docbook/manpages/smbspool.8.sgml +++ b/docs/docbook/manpages/smbspool.8.sgml @@ -1,5 +1,5 @@ - + smbspool @@ -27,8 +27,8 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. smbspool is a very small print spooling program that sends a print file to an SMB printer. The command-line arguments @@ -45,8 +45,10 @@ smb://server/printer smb://workgroup/server/printer - smb://username:password@server/printer - smb://username:password@workgroup/server/printer + smb://username:password@server/printer + + smb://username:password@workgroup/server/printer + smbspool tries to get the URI from argv[0]. If argv[0] @@ -95,14 +97,15 @@ VERSION - This man page is correct for version 2.2 of the Samba suite. + This man page is correct for version 2.2 of + the Samba suite. SEE ALSO - smbd - 8 and Samba - 7. + smbd(8), + and samba(7). + @@ -118,11 +121,11 @@ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at + excellent piece of Open Source software, available at + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook XML 4.2 - for Samba 3.0 was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/smbstatus.1.sgml b/docs/docbook/manpages/smbstatus.1.sgml index 67d39f25860..99963a4bec6 100644 --- a/docs/docbook/manpages/smbstatus.1.sgml +++ b/docs/docbook/manpages/smbstatus.1.sgml @@ -1,5 +1,5 @@ - + smbstatus @@ -31,8 +31,8 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. smbstatus is a very simple program to list the current Samba connections. @@ -84,8 +84,8 @@ -p|--processes - print a list of smbd - 8 processes and exit. + print a list of + smbd(8) processes and exit. Useful for scripting. @@ -102,9 +102,9 @@ -s|--conf=<configuration file> The default configuration file name is determined at compile time. The file specified contains the - configuration details required by the server. See - smb.conf5 - for more information. + configuration details required by the server. See smb.conf(5) + for more information. @@ -128,9 +128,8 @@ SEE ALSO - smbd - 8 and smb.conf - 5. + smbd(8) and + smb.conf(5). @@ -143,11 +142,11 @@ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at + excellent piece of Open Source software, available at + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook XML 4.2 - for Samba 3.0 was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/smbtar.1.sgml b/docs/docbook/manpages/smbtar.1.sgml index ffb50873478..bd70493b6bf 100644 --- a/docs/docbook/manpages/smbtar.1.sgml +++ b/docs/docbook/manpages/smbtar.1.sgml @@ -1,5 +1,5 @@ - + smbtar @@ -37,12 +37,12 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. smbtar is a very small shell script on top - of smbclient1 - which dumps SMB shares directly to tape. + of smbclient(1) + which dumps SMB shares directly to tape. @@ -144,9 +144,8 @@ -l log level Log (debug) level. Corresponds to the - -d flag of - smbclient1 - . + -d flag of smbclient(1) + . @@ -182,9 +181,9 @@ DIAGNOSTICS - See the DIAGNOSTICS section for the - smbclient1 - command. + See the DIAGNOSTICS section for the + smbclient(1) + command. @@ -197,11 +196,10 @@ SEE ALSO - smbd - 8, - smbclient1 - , smb.conf - 5. + smbd(8), + smbclient(1), + smb.conf(5), + @@ -218,11 +216,11 @@ url="mailto:Martin.Kraemer@mch.sni.de">Martin Kraemer. Many thanks to everyone who suggested extensions, improvements, bug fixes, etc. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at + excellent piece of Open Source software, available at + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook XML 4.2 for - Samba 3.0 was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter. diff --git a/docs/docbook/manpages/smbumount.8.sgml b/docs/docbook/manpages/smbumount.8.sgml index 089ede79ea6..d6a1b65b578 100644 --- a/docs/docbook/manpages/smbumount.8.sgml +++ b/docs/docbook/manpages/smbumount.8.sgml @@ -1,5 +1,5 @@ - + smbumount @@ -47,8 +47,8 @@ SEE ALSO - smbmount - 8 + smbmount(8) + @@ -67,8 +67,7 @@ The conversion of this manpage for Samba 2.2 was performed - by Gerald Carter. The conversion to DocBook XML 4.2 for Samba 3.0 - was done by Alexander Bokovoy. + by Gerald Carter diff --git a/docs/docbook/manpages/swat.8.sgml b/docs/docbook/manpages/swat.8.sgml index 9c4daad6d07..c0052f3d53d 100644 --- a/docs/docbook/manpages/swat.8.sgml +++ b/docs/docbook/manpages/swat.8.sgml @@ -1,5 +1,5 @@ - + swat @@ -23,13 +23,13 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. swat allows a Samba administrator to - configure the complex smb.conf - 5 file via a Web browser. In addition, + configure the complex + smb.conf(5) file via a Web browser. In addition, a swat configuration page has help links to all the configurable options in the smb.conf file allowing an administrator to easily look up the effects of any change. @@ -46,9 +46,8 @@ -s smb configuration file The default configuration file path is determined at compile time. The file specified contains - the configuration details required by the smbd - 8 server. This is the file - that swat will modify. + the configuration details required by the smbd + server. This is the file that swat will modify. The information in this file includes server-specific information such as what printcap file to use, as well as descriptions of all the services that the server is to provide. @@ -153,9 +152,8 @@ /usr/local/samba/lib/smb.conf - This is the default location of the - smb.conf5 - server configuration file that swat edits. Other + This is the default location of the smb.conf(5) + server configuration file that swat edits. Other common places that systems install this file are /usr/samba/lib/smb.conf and /etc/smb.conf . This file describes all the services the server @@ -168,9 +166,8 @@ WARNINGS - swat will rewrite your - smb.conf5 - file. It will rearrange the entries and delete all + swat will rewrite your smb.conf + file. It will rearrange the entries and delete all comments, include= and copy= options. If you have a carefully crafted smb.conf then back it up or don't use swat! @@ -180,15 +177,16 @@ VERSION - This man page is correct for version 2.2 of the Samba suite. + This man page is correct for version 2.2 of + the Samba suite. SEE ALSO - inetd(5), - smbd8 - , smb.conf - 5 + inetd(5), + smbd(8), + smb.conf(5) + @@ -201,11 +199,11 @@ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at + excellent piece of Open Source software, available at + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook XML 4.2 for - Samba 3.0 was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/testparm.1.sgml b/docs/docbook/manpages/testparm.1.sgml index ec8092a9264..f34528a43d2 100644 --- a/docs/docbook/manpages/testparm.1.sgml +++ b/docs/docbook/manpages/testparm.1.sgml @@ -1,5 +1,5 @@ - + testparm @@ -29,12 +29,11 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. testparm is a very simple test program - to check an smbd - 8 configuration file for + to check an smbd configuration file for internal correctness. If this program reports no problems, you can use the configuration file with confidence that smbd will successfully load the configuration file. @@ -83,9 +82,9 @@ -v If this option is specified, testparm - will also output all options that were not used in - smb.conf5 - and are thus set to their defaults. + will also output all options that were not used in + smb.conf and are thus set to + their defaults. @@ -99,8 +98,7 @@ configfilename This is the name of the configuration file to check. If this parameter is not present then the - default smb.conf5 - file will be checked. + default smb.conf file will be checked. @@ -110,9 +108,7 @@ If this parameter and the following are specified, then testparm will examine the hosts allow and hosts deny - parameters in the - smb.conf5 - file to + parameters in the smb.conf file to determine if the hostname with this IP address would be allowed access to the smbd server. If this parameter is supplied, the hostIP parameter must also @@ -134,11 +130,9 @@ - smb.conf5 - + smb.conf This is usually the name of the configuration - file used by smbd8 - . + file used by smbd. @@ -164,11 +158,9 @@ SEE ALSO - - smb.conf5 - , - smbd8 - + smb.conf(5), + smbd(8) + @@ -181,11 +173,11 @@ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at + excellent piece of Open Source software, available at + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook XML 4.2 - for Samba 3.0 was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/testprns.1.sgml b/docs/docbook/manpages/testprns.1.sgml index 85cc860c4a1..cd99494a9af 100644 --- a/docs/docbook/manpages/testprns.1.sgml +++ b/docs/docbook/manpages/testprns.1.sgml @@ -1,5 +1,5 @@ - + testprns @@ -23,13 +23,13 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. testprns is a very simple test program to determine whether a given printer name is valid for use in - a service to be provided by smbd - 8. + a service to be provided by + smbd(8). "Valid" in this context means "can be found in the printcap specified". This program is very stupid - so stupid in @@ -54,9 +54,8 @@ done beyond that required to extract the printer name. It may be that the print spooling system is more forgiving or less forgiving than testprns. However, if - testprns finds the printer then - smbd8 - should do so as well. + testprns finds the printer then + smbd should do so as well. @@ -118,9 +117,9 @@ SEE ALSO printcap(5), - smbd - 8, smbclient - 1 + smbd(8), + smbclient(1) + @@ -133,11 +132,11 @@ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another - excellent piece of Open Source software, available at + excellent piece of Open Source software, available at + ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for - Samba 2.2 was done by Gerald Carter. The conversion to DocBook XML 4.2 - for Samba 3.0 was done by Alexander Bokovoy. + Samba 2.2 was done by Gerald Carter diff --git a/docs/docbook/manpages/vfstest.1.sgml b/docs/docbook/manpages/vfstest.1.sgml index c89035d814c..d6c7e5f142c 100644 --- a/docs/docbook/manpages/vfstest.1.sgml +++ b/docs/docbook/manpages/vfstest.1.sgml @@ -1,7 +1,8 @@ %globalentities; ]> - + + vfstest @@ -27,8 +28,8 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. vfstest is a small command line utility that has the ability to test dso samba VFS modules. It gives the diff --git a/docs/docbook/manpages/wbinfo.1.sgml b/docs/docbook/manpages/wbinfo.1.sgml index 5003c847a4d..a6ca2442437 100644 --- a/docs/docbook/manpages/wbinfo.1.sgml +++ b/docs/docbook/manpages/wbinfo.1.sgml @@ -1,5 +1,5 @@ - + wbinfo @@ -37,15 +37,14 @@ DESCRIPTION - This tool is part of the Samba - 7 suite. + This tool is part of the + Samba suite. The wbinfo program queries and returns information - created and used by the winbindd - 8 daemon. + created and used by the + winbindd(8) daemon. - The winbindd - 8 daemon must be configured + The winbindd(8) daemon must be configured and running for the wbinfo program to be able to return information. @@ -57,30 +56,27 @@ -u This option will list all users available - in the Windows NT domain for which the winbindd - 8 daemon is operating in. Users in all trusted domains + in the Windows NT domain for which the winbindd(8) + daemon is operating in. Users in all trusted domains will also be listed. Note that this operation does not assign - user ids to any users that have not already been seen by - winbindd8 - . + user ids to any users that have not already been seen by + winbindd(8). -g This option will list all groups available - in the Windows NT domain for which the Samba - 7 daemon is operating in. Groups in all trusted domains + in the Windows NT domain for which the winbindd(8) + daemon is operating in. Groups in all trusted domains will also be listed. Note that this operation does not assign - group ids to any groups that have not already been - seen by winbindd - 8. + group ids to any groups that have not already been seen by + winbindd(8). -N name The -N option - queries winbindd - 8 to query the WINS + queries winbindd(8) to query the WINS server for the IP address associated with the NetBIOS name specified by the name parameter. @@ -90,8 +86,7 @@ -I ip The -I option - queries winbindd - 8 to send a node status + queries winbindd(8) to send a node status request to get the NetBIOS name associated with the IP address specified by the ip parameter. @@ -101,15 +96,13 @@ -n name The -n option - queries winbindd - 8 for the SID + queries winbindd(8) for the SID associated with the name specified. Domain names can be specified before the user name by using the winbind separator character. For example CWDOM1/Administrator refers to the Administrator user in the domain CWDOM1. If no domain is specified then the - domain used is the one specified in the smb.conf - 5 workgroup - parameter. + domain used is the one specified in the smb.conf + workgroup parameter. @@ -142,18 +135,16 @@ -S sid Convert a SID to a UNIX user id. If the SID - does not correspond to a UNIX user mapped by - winbindd8 - then the operation will fail. + does not correspond to a UNIX user mapped by + winbindd(8) then the operation will fail. -Y sid Convert a SID to a UNIX group id. If the SID - does not correspond to a UNIX group mapped by - winbindd8 then - the operation will fail. + does not correspond to a UNIX group mapped by + winbindd(8) then the operation will fail. @@ -169,8 +160,7 @@ -m Produce a list of domains trusted by the - Windows NT server winbindd - 8 contacts + Windows NT server winbindd(8) contacts when resolving names. This list does not include the Windows NT domain the server is a Primary Domain Controller for. @@ -211,9 +201,8 @@ EXIT STATUS The wbinfo program returns 0 if the operation - succeeded, or 1 if the operation failed. If the - winbindd8 - daemon is not working wbinfo will always return + succeeded, or 1 if the operation failed. If the winbindd(8) + daemon is not working wbinfo will always return failure. @@ -227,8 +216,8 @@ SEE ALSO - winbindd - 8 + winbindd(8) + @@ -243,8 +232,7 @@ were written by Tim Potter. The conversion to DocBook for Samba 2.2 was done - by Gerald Carter. The conversion to DocBook XML 4.2 for Samba - 3.0 was done by Alexander Bokovoy. + by Gerald Carter diff --git a/docs/docbook/manpages/winbindd.8.sgml b/docs/docbook/manpages/winbindd.8.sgml index a44e195d8ca..ccef2fa6231 100644 --- a/docs/docbook/manpages/winbindd.8.sgml +++ b/docs/docbook/manpages/winbindd.8.sgml @@ -1,5 +1,5 @@ - + winbindd @@ -29,8 +29,8 @@ DESCRIPTION - This program is part of the Samba - 7 suite. + This program is part of the + Samba suite. winbindd is a daemon that provides a service for the Name Service Switch capability that is present @@ -88,11 +88,12 @@ /etc/nsswitch.conf file can be used to initially resolve user and group information from /etc/passwd and /etc/group and then from the - Windows NT server. - + Windows NT server. + + passwd: files winbind group: files winbind - + The following simple configuration in the /etc/nsswitch.conf file can be used to initially @@ -171,8 +172,7 @@ group: files winbind -s|--conf=smb.conf Specifies the location of the all-important - smb.conf - 5 file. + smb.conf file. @@ -208,9 +208,8 @@ group: files winbind CONFIGURATION Configuration of the winbindd daemon - is done through configuration parameters in the - smb.conf5 - file. All parameters should be specified in the + is done through configuration parameters in the smb.conf(5) + file. All parameters should be specified in the [global] section of smb.conf. @@ -244,24 +243,27 @@ group: files winbind following setup. This was tested on a RedHat 6.2 Linux box. In /etc/nsswitch.conf put the - following: - + following: + + passwd: files winbind group: files winbind - + + + In /etc/pam.d/* replace the + auth lines with something like this: - In /etc/pam.d/* replace the - auth lines with something like this: - + + auth required /lib/security/pam_securetty.so auth required /lib/security/pam_nologin.so auth sufficient /lib/security/pam_winbind.so auth required /lib/security/pam_pwdb.so use_first_pass shadow nullok - + - Note in particular the use of the sufficient - keyword and the use_first_pass keyword. + Note in particular the use of the sufficient + keyword and the use_first_pass keyword. Now replace the account lines with this: @@ -271,24 +273,26 @@ auth required /lib/security/pam_pwdb.so use_first_pass shadow nullok The next step is to join the domain. To do that use the smbpasswd program like this: - net join -S PDC -U Administrator + smbpasswd -j DOMAIN -r PDC -U + Administrator The username after the -U can be any Domain user that has administrator privileges on the machine. - Substitute the name or IP of your PDC for "PDC". + Substitute your domain name for "DOMAIN" and the name of your PDC + for "PDC". Next copy libnss_winbind.so to - /lib and pam_winbind.so - to /lib/security. A symbolic link needs to be + /lib and pam_winbind.so + to /lib/security. A symbolic link needs to be made from /lib/libnss_winbind.so to /lib/libnss_winbind.so.2. If you are using an older version of glibc then the target of the link should be /lib/libnss_winbind.so.1. - Finally, setup a smb.conf - 5 containing directives like the - following: - + Finally, setup a smb.conf containing directives like the + following: + + [global] winbind separator = + winbind cache time = 10 @@ -299,7 +303,7 @@ auth required /lib/security/pam_pwdb.so use_first_pass shadow nullok workgroup = DOMAIN security = domain password server = * - + Now start winbindd and you should find that your user and @@ -317,10 +321,9 @@ auth required /lib/security/pam_pwdb.so use_first_pass shadow nullok The following notes are useful when configuring and running winbindd: - nmbd - 8 must be running on the local machine - for winbindd to work. winbindd queries - the list of trusted domains for the Windows NT server + nmbd must be running on the local machine + for winbindd to work. winbindd + queries the list of trusted domains for the Windows NT server on startup and when a SIGHUP is received. Thus, for a running winbindd to become aware of new trust relationships between servers, it must be sent a SIGHUP signal. @@ -354,9 +357,8 @@ auth required /lib/security/pam_pwdb.so use_first_pass shadow nullok SIGHUP - Reload the smb.conf - 5 file and - apply any parameter changes to the running + Reload the smb.conf(5) + file and apply any parameter changes to the running version of winbindd. This signal also clears any cached user and group information. The list of other domains trusted by winbindd is also reloaded. @@ -429,13 +431,10 @@ auth required /lib/security/pam_pwdb.so use_first_pass shadow nullok SEE ALSO - nsswitch.conf(5), - Samba - 7, - wbinfo - 8, - smb.conf - 5 + nsswitch.conf(5), + samba(7), + wbinfo(1), + smb.conf(5) @@ -446,12 +445,11 @@ auth required /lib/security/pam_pwdb.so use_first_pass shadow nullok by the Samba Team as an Open Source project similar to the way the Linux kernel is developed. - wbinfo and winbindd were - written by Tim Potter. + wbinfo and winbindd + were written by Tim Potter. The conversion to DocBook for Samba 2.2 was done - by Gerald Carter. The conversion to DocBook XML 4.2 for - Samba 3.0 was done by Alexander Bokovoy. + by Gerald Carter diff --git a/docs/docbook/projdoc/ADS-HOWTO.sgml b/docs/docbook/projdoc/ADS-HOWTO.sgml index 887ecd74c27..3e34d53c0af 100644 --- a/docs/docbook/projdoc/ADS-HOWTO.sgml +++ b/docs/docbook/projdoc/ADS-HOWTO.sgml @@ -14,8 +14,7 @@ This is a rough guide to setting up Samba 3.0 with kerberos authentication again Windows2000 KDC. -Pieces you need before you begin: - +Pieces you need before you begin: a Windows 2000 server. samba 3.0 or higher. @@ -27,8 +26,7 @@ Windows2000 KDC. Installing the required packages for Debian -On Debian you need to install the following packages: - +On Debian you need to install the following packages: libkrb5-dev krb5-user @@ -39,8 +37,7 @@ Windows2000 KDC. Installing the required packages for RedHat -On RedHat this means you should have at least: - +On RedHat this means you should have at least: krb5-workstation (for kinit) krb5-libs (for linking with) @@ -60,8 +57,7 @@ to get them off CD2. If your kerberos libraries are in a non-standard location then remember to add the configure option --with-krb5=DIR. -After you run configure make sure that include/config.h it - generates contains +After you run configure make sure that include/config.h contains lines like this: @@ -90,10 +86,9 @@ In case samba can't figure out your ads server using your realm name, use the -You do *not* need a smbpasswd file, and older clients will - be authenticated as if "security = domain", although it won't do any harm - and allows you to have local users not in the domain. - I expect that the above +You do *not* need a smbpasswd file, although it won't do any harm + and if you have one then Samba will be able to fall back to normal + password security for older clients. I expect that the above required options will change soon when we get better active directory integration. @@ -104,7 +99,7 @@ In case samba can't figure out your ads server using your realm name, use the The minimal configuration for krb5.conf is: -[realms] + [realms] YOUR.KERBEROS.REALM = { kdc = your.kerberos.server } @@ -133,7 +128,7 @@ to join the realm. If all you want is kerberos support in smbclient then you can skip straight to step 5 now. Step 3 is only needed if you want kerberos -support for smbd and winbindd. +support in smbd. @@ -142,7 +137,9 @@ support for smbd and winbindd. Create the computer account -As a user that has write permission on the Samba private directory +Do a "kinit" as a user that has authority to change arbitrary +passwords on the KDC ("Administrator" is a good choice). Then as a +user that has write permission on the Samba private directory (usually root) run: net ads join @@ -152,6 +149,8 @@ As a user that has write permission on the Samba private directory +"bash: kinit: command not found" +kinit is in the krb5-workstation RPM on RedHat systems, and is in /usr/kerberos/bin, so it won't be in the path until you log in again (or open a new terminal) "ADS support not compiled in" Samba must be reconfigured (remove config.cache) and recompiled (make clean all install) after the kerberos libs and headers are installed. diff --git a/docs/docbook/projdoc/Browsing-Quickguide.sgml b/docs/docbook/projdoc/Browsing-Quickguide.sgml index 8e3fbce6d3c..8ecc7959661 100644 --- a/docs/docbook/projdoc/Browsing-Quickguide.sgml +++ b/docs/docbook/projdoc/Browsing-Quickguide.sgml @@ -126,9 +126,8 @@ simultaneously the LMB on it's network segment. The syntax of the "remote browse sync" parameter is: - -remote browse sync = a.b.c.d + remote browse sync = a.b.c.d where a.b.c.d is either the IP address of the remote LMB or else is the network broadcast address of the remote segment. @@ -244,35 +243,36 @@ The safest rule of all to follow it this - USE ONLY ONE PROTOCOL! Resolution of NetBIOS names to IP addresses can take place using a number of methods. The only ones that can provide NetBIOS name_type information -are: - +are: WINS: the best tool! LMHOSTS: is static and hard to maintain. Broadcast: uses UDP and can not resolve names across remote segments. + -Alternative means of name resolution includes: +Alternative means of name resolution includes: /etc/hosts: is static, hard to maintain, and lacks name_type info DNS: is a good choice but lacks essential name_type info. + Many sites want to restrict DNS lookups and want to avoid broadcast name resolution traffic. The "name resolve order" parameter is of great help here. The syntax of the "name resolve order" parameter is: -name resolve order = wins lmhosts bcast host + name resolve order = wins lmhosts bcast host _or_ -name resolve order = wins lmhosts (eliminates bcast and host) + name resolve order = wins lmhosts (eliminates bcast and host) The default is: -name resolve order = host lmhost wins bcast + name resolve order = host lmhost wins bcast . where "host" refers the the native methods used by the Unix system to implement the gethostbyname() function call. This is normally diff --git a/docs/docbook/projdoc/DOMAIN_MEMBER.sgml b/docs/docbook/projdoc/DOMAIN_MEMBER.sgml index b178bfd2c26..8a30a5527df 100644 --- a/docs/docbook/projdoc/DOMAIN_MEMBER.sgml +++ b/docs/docbook/projdoc/DOMAIN_MEMBER.sgml @@ -25,29 +25,79 @@ -Samba as a NT4 or Win2k domain member +Samba as a NT4 domain member - Joining an NT Domain with Samba 3.0 + Joining an NT Domain with Samba 2.2 - Assume you have a Samba 3.0 server with a NetBIOS name of - SERV1 and are joining an or Win2k NT domain called + Assume you have a Samba 2.x server with a NetBIOS name of + SERV1 and are joining an NT domain called DOM, which has a PDC with a NetBIOS name of DOMPDC and two backup domain controllers with NetBIOS names DOMBDC1 and DOMBDC2 . - Firstly, you must edit your smb.conf(5) + In order to join the domain, first stop all Samba daemons + and run the command: + + root# smbpasswd -j DOM -r DOMPDC + -UAdministrator%password + + as we are joining the domain DOM and the PDC for that domain + (the only machine that has write access to the domain SAM database) + is DOMPDC. The Administrator%password is + the login name and password for an account which has the necessary + privilege to add machines to the domain. If this is successful + you will see the message: + + smbpasswd: Joined domain DOM. + + + in your terminal window. See the + smbpasswd(8) man page for more details. + + There is existing development code to join a domain + without having to create the machine trust account on the PDC + beforehand. This code will hopefully be available soon + in release branches as well. + + This command goes through the machine account password + change protocol, then writes the new (random) machine account + password for this Samba server into a file in the same directory + in which an smbpasswd file would be stored - normally : + + /usr/local/samba/private + + In Samba 2.0.x, the filename looks like this: + + <NT DOMAIN NAME>.<Samba + Server Name>.mac + + The .mac suffix stands for machine account + password file. So in our example above, the file would be called: + + DOM.SERV1.mac + + In Samba 2.2, this file has been replaced with a TDB + (Trivial Database) file named secrets.tdb. + + + + This file is created and owned by root and is not + readable by any other user. It is the key to the domain-level + security for your system, and should be treated as carefully + as a shadow password file. + + Now, before restarting the Samba daemons you must + edit your smb.conf(5) file to tell Samba it should now use domain security. Change (or add) your security = line in the [global] section of your smb.conf to read: - security = domain or - security = ads depending on if the PDC is - NT4 or running Active Directory respectivly. + security = domain Next change the workgroup = line in the [global] section to read: @@ -78,47 +128,11 @@ password server = * - This method, allows Samba to use exactly the same - mechanism that NT does. This + This method, which was introduced in Samba 2.0.6, + allows Samba to use exactly the same mechanism that NT does. This method either broadcasts or uses a WINS database in order to find domain controllers to authenticate against. - In order to actually join the domain, you must run this - command: - - root# net join -S DOMPDC - -UAdministrator%password - - as we are joining the domain DOM and the PDC for that domain - (the only machine that has write access to the domain SAM database) - is DOMPDC. The Administrator%password is - the login name and password for an account which has the necessary - privilege to add machines to the domain. If this is successful - you will see the message: - - Joined domain DOM. - or Joined 'SERV1' to realm 'MYREALM' - - - in your terminal window. See the - net(8) man page for more details. - - This process joins the server to thedomain - without having to create the machine trust account on the PDC - beforehand. - - This command goes through the machine account password - change protocol, then writes the new (random) machine account - password for this Samba server into a file in the same directory - in which an smbpasswd file would be stored - normally : - - /usr/local/samba/private/secrets.tdb - - This file is created and owned by root and is not - readable by any other user. It is the key to the domain-level - security for your system, and should be treated as carefully - as a shadow password file. - Finally, restart your Samba daemons and get ready for clients to begin using domain security! @@ -130,8 +144,23 @@ Many people have asked regarding the state of Samba's ability to participate in a Windows 2000 Domain. Samba 3.0 is able to act as a member server of a Windows -2000 domain operating in mixed or native mode. The steps above apply -to both NT4 and Windows 2000. +2000 domain operating in mixed or native mode. + + + +There is much confusion between the circumstances that require a "mixed" mode +Win2k DC and a when this host can be switched to "native" mode. A "mixed" mode +Win2k domain controller is only needed if Windows NT BDCs must exist in the same +domain. By default, a Win2k DC in "native" mode will still support +NetBIOS and NTLMv1 for authentication of legacy clients such as Windows 9x and +NT 4.0. Samba has the same requirements as a Windows NT 4.0 member server. + + + +The steps for adding a Samba 2.2 host to a Win2k domain are the same as those +for adding a Samba server to a Windows NT 4.0 domain. The only exception is that +the "Server Manager" from NT 4 has been replaced by the "Active Directory Users and +Computers" MMC (Microsoft Management Console) plugin. @@ -176,7 +205,13 @@ to both NT4 and Windows 2000. And finally, acting in the same manner as an NT server authenticating to a PDC means that as part of the authentication reply, the Samba server gets the user identification information such - as the user SID, the list of NT groups the user belongs to, etc. + as the user SID, the list of NT groups the user belongs to, etc. All + this information will allow Samba to be extended in the future into + a mode the developers currently call appliance mode. In this mode, + no local Unix users will be necessary, and Samba will generate Unix + uids and gids from the information passed back from the PDC when a + user is authenticated, making a Samba server truly plug and play + in an NT domain environment. Watch for this code soon. NOTE: Much of the text of this document was first published in the Web magazine diff --git a/docs/docbook/projdoc/GROUP-MAPPING-HOWTO.sgml b/docs/docbook/projdoc/GROUP-MAPPING-HOWTO.sgml index 06c1d3a87ee..6d5a019fcbe 100644 --- a/docs/docbook/projdoc/GROUP-MAPPING-HOWTO.sgml +++ b/docs/docbook/projdoc/GROUP-MAPPING-HOWTO.sgml @@ -1,4 +1,3 @@ - diff --git a/docs/docbook/projdoc/Integrating-with-Windows.sgml b/docs/docbook/projdoc/Integrating-with-Windows.sgml index a4e79fd42bb..3b0faf81af9 100644 --- a/docs/docbook/projdoc/Integrating-with-Windows.sgml +++ b/docs/docbook/projdoc/Integrating-with-Windows.sgml @@ -295,16 +295,16 @@ The following are typical NetBIOS name/service type registrations: Unique NetBIOS Names: - MACHINENAME<00> = Server Service is running on MACHINENAME - MACHINENAME<03> = Generic Machine Name (NetBIOS name) - MACHINENAME<20> = LanMan Server service is running on MACHINENAME - WORKGROUP<1b> = Domain Master Browser + MACHINENAME<00> = Server Service is running on MACHINENAME + MACHINENAME<03> = Generic Machine Name (NetBIOS name) + MACHINENAME<20> = LanMan Server service is running on MACHINENAME + WORKGROUP<1b> = Domain Master Browser Group Names: - WORKGROUP<03> = Generic Name registered by all members of WORKGROUP - WORKGROUP<1c> = Domain Controllers / Netlogon Servers - WORKGROUP<1d> = Local Master Browsers - WORKGROUP<1e> = Internet Name Resolvers + WORKGROUP<03> = Generic Name registered by all members of WORKGROUP + WORKGROUP<1c> = Domain Controllers / Netlogon Servers + WORKGROUP<1d> = Local Master Browsers + WORKGROUP<1e> = Internet Name Resolvers @@ -323,7 +323,7 @@ be needed. An example of this is what happens when an MS Windows client wants to locate a domain logon server. It find this service and the IP address of a server that provides it by performing a lookup (via a NetBIOS broadcast) for enumeration of all machines that have -registered the name type *<1c>. A logon request is then sent to each +registered the name type *<1c>. A logon request is then sent to each IP address that is returned in the enumerated list of IP addresses. Which ever machine first replies then ends up providing the logon services. diff --git a/docs/docbook/projdoc/Samba-BDC-HOWTO.sgml b/docs/docbook/projdoc/Samba-BDC-HOWTO.sgml index e3bee32db01..7653e3d1c03 100644 --- a/docs/docbook/projdoc/Samba-BDC-HOWTO.sgml +++ b/docs/docbook/projdoc/Samba-BDC-HOWTO.sgml @@ -128,7 +128,7 @@ the password change is done. -Can Samba be a Backup Domain Controller to an NT PDC? +Can Samba be a Backup Domain Controller? With version 2.2, no. The native NT SAM replication protocols have @@ -137,12 +137,6 @@ understanding and implementing the protocols, but this work has not been finished for version 2.2. - -With version 3.0, the work on both the replication protocols and a -suitable storage mechanism has progressed, and some form of NT4 BDC -support is expected soon. - - Can I get the benefits of a BDC with Samba? Yes. The main reason for implementing a BDC is availability. If the PDC is a Samba machine, @@ -184,8 +178,7 @@ whenever changes are made, or the PDC is set up as a NIS master server and the BDC as a NIS slave server. To set up the BDC as a mere NIS client would not be enough, as the BDC would not be able to access its user database in case of a PDC failure. - - + The Samba password database in the file private/smbpasswd has to be @@ -243,15 +236,5 @@ password. - -Can I do this all with LDAP? -The simple answer is YES. Samba's pdb_ldap code supports -binding to a replica LDAP server, and will also follow referrals and -rebind to the master if it ever needs to make a modification to the -database. (Normally BDCs are read only, so this will not occur -often). - - - diff --git a/docs/docbook/projdoc/Samba-PDC-HOWTO.sgml b/docs/docbook/projdoc/Samba-PDC-HOWTO.sgml index e6d65739247..7cf3e5735c3 100644 --- a/docs/docbook/projdoc/Samba-PDC-HOWTO.sgml +++ b/docs/docbook/projdoc/Samba-PDC-HOWTO.sgml @@ -142,7 +142,7 @@ Implementing a Samba PDC can basically be divided into 2 broad steps. - + Configuring the Samba PDC @@ -426,7 +426,7 @@ be created manually. [global] - # <...remainder of parameters...> + # <...remainder of parameters...> add user script = /usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -M %u @@ -496,7 +496,7 @@ version of Windows. - A 'machine name' in (typically) /etc/passwd + A 'machine name' in (typically) /etc/passwd of the machine name with a '$' appended. FreeBSD (and other BSD systems?) won't create a user with a '$' in their name. @@ -504,7 +504,7 @@ version of Windows. The problem is only in the program used to make the entry, once made, it works perfectly. So create a user without the '$' and - use vipw to edit the entry, adding the '$'. Or create + use vipw to edit the entry, adding the '$'. Or create the whole entry with vipw if you like, make sure you use a unique User ID ! @@ -673,8 +673,8 @@ Here are some additional details: Policy Editor can be installed on an NT Workstation/Server, it will not work with NT policies because the registry key that are set by the policy templates. However, the files from the NT Server will run happily enough on an NTws. - You need poledit.exe, common.adm and winnt.adm. It is convenient - to put the two *.adm files in c:\winnt\inf which is where + You need poledit.exe, common.adm and winnt.adm. It is convenient + to put the two *.adm files in c:\winnt\inf which is where the binary will look for them unless told otherwise. Note also that that directory is 'hidden'. @@ -928,7 +928,7 @@ general SMB topics such as browsing. See how Scott Merrill simulates a BDC behavior at - http://www.skippy.net/linux/smb-howto.html. + http://www.skippy.net/linux/smb-howto.html. Although 2.0.7 has almost had its day as a PDC, David Bannon will keep the 2.0.7 PDC pages at @@ -958,8 +958,8 @@ general SMB topics such as browsing. There are a number of Samba related mailing lists. Go to http://samba.org, click on your nearest mirror - and then click on Support and then click on - Samba related mailing lists. + and then click on Support and then click on + Samba related mailing lists. @@ -1028,8 +1028,8 @@ general SMB topics such as browsing. To have your name removed from a samba mailing list, go to the same place you went to to get on it. Go to http://lists.samba.org, - click on your nearest mirror and then click on Support and - then click on Samba related mailing lists. Or perhaps see + click on your nearest mirror and then click on Support and + then click on Samba related mailing lists. Or perhaps see here @@ -1112,7 +1112,7 @@ worthwhile lookingat how a Windows 9x/ME client performs a logon: The client broadcasts (to the IP broadcast address of the subnet it is in) - a NetLogon request. This is sent to the NetBIOS name DOMAIN<1c> at the + a NetLogon request. This is sent to the NetBIOS name DOMAIN<1c> at the NetBIOS layer. The client chooses the first response it receives, which contains the NetBIOS name of the logon server to use in the format of \\SERVER. @@ -1704,7 +1704,7 @@ contrast to w95, where it _does_ transfer / update profiles correctly]. -DOMAIN_CONTROL.txt : Windows NT Domain Control & Samba +DOMAIN_CONTROL.txt : Windows NT Domain Control & Samba diff --git a/docs/docbook/projdoc/msdfs_setup.sgml b/docs/docbook/projdoc/msdfs_setup.sgml index a86cd74235c..6e1609460fc 100644 --- a/docs/docbook/projdoc/msdfs_setup.sgml +++ b/docs/docbook/projdoc/msdfs_setup.sgml @@ -4,7 +4,7 @@ ShirishKalele - Samba Team & Veritas Software + Samba Team & Veritas Software
samba@samba.org
diff --git a/docs/docbook/projdoc/printer_driver2.sgml b/docs/docbook/projdoc/printer_driver2.sgml index 8d15e437b27..7bca8dc6f57 100644 --- a/docs/docbook/projdoc/printer_driver2.sgml +++ b/docs/docbook/projdoc/printer_driver2.sgml @@ -409,8 +409,8 @@ echo " :sd=/var/spool/lpd/$2:\\" >> $PRINTCAP echo " :mx=0:ml=0:sh:\\" >> $PRINTCAP echo " :lp=/usr/local/samba/var/print/$5.prn:" >> $PRINTCAP -touch "/usr/local/samba/var/print/$5.prn" >> /tmp/printadd.$$ 2>&1 -chown $LP "/usr/local/samba/var/print/$5.prn" >> /tmp/printadd.$$ 2>&1 +touch "/usr/local/samba/var/print/$5.prn" >> /tmp/printadd.$$ 2>&1 +chown $LP "/usr/local/samba/var/print/$5.prn" >> /tmp/printadd.$$ 2>&1 mkdir /var/spool/lpd/$2 chmod 700 /var/spool/lpd/$2 @@ -757,7 +757,7 @@ be: /usr/bin/id -p >/tmp/tmp.print # we run the command and save the error messages # replace the command with the one appropriate for your system - /usr/bin/lpr -r -P$1 $2 2>>&/tmp/tmp.print + /usr/bin/lpr -r -P$1 $2 2>>&/tmp/tmp.print
diff --git a/docs/docbook/projdoc/winbind.sgml b/docs/docbook/projdoc/winbind.sgml index 06579617f5c..d2bfb8ab679 100644 --- a/docs/docbook/projdoc/winbind.sgml +++ b/docs/docbook/projdoc/winbind.sgml @@ -2,7 +2,6 @@ - TimPotter @@ -11,7 +10,7 @@ - AndrewTridgell + AndrewTrigdell Samba Team
tridge@linuxcare.com.au
@@ -36,7 +35,6 @@
jelmer@nl.linux.org
-
27 June 2002
@@ -175,7 +173,7 @@ Microsoft Remote Procedure Calls - Over the last few years, efforts have been underway + Over the last two years, efforts have been underway by various Samba Team members to decode various aspects of the Microsoft Remote Procedure Call (MSRPC) system. This system is used for most network related operations between @@ -193,21 +191,6 @@ NT account information onto UNIX user and group names. - - Microsoft Active Directory Services - - - Since late 2001, Samba has gained the ability to - interact with Microsoft Windows 2000 using its 'Native - Mode' protocols, rather than the NT4 RPC services. - Using LDAP and Kerberos, a domain member running - winbind can enumerate users and groups in exactly the - same way as a Win2k client would, and in so doing - provide a much more efficient and - effective winbind implementation. - - - Name Service Switch @@ -481,7 +464,7 @@ whether or not you have previously built the Samba binaries. root# autoconf root# make clean root# rm config.cache -root# ./configure +root# ./configure --with-winbind root# make root# make install
@@ -569,7 +552,7 @@ include the following entries in the [global] section: [global] - <...> + <...> # separate domain and username with '+', like DOMAIN+username winbind separator = + # use uids from 10000 to 20000 for domain users @@ -599,7 +582,7 @@ a domain user who has administrative privileges in the domain. -root# /usr/local/samba/bin/net join -S PDC -U Administrator +root# /usr/local/samba/bin/net rpc join -S PDC -U Administrator @@ -750,7 +733,7 @@ start() { daemon /usr/local/samba/bin/winbindd RETVAL3=$? echo - [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 -a $RETVAL3 -eq 0 ] && touch /var/lock/subsys/smb || \ + [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 -a $RETVAL3 -eq 0 ] && touch /var/lock/subsys/smb || \ RETVAL=1 return $RETVAL } @@ -777,7 +760,7 @@ stop() { echo -n $"Shutting down $KIND services: " killproc winbindd RETVAL3=$? - [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 -a $RETVAL3 -eq 0 ] && rm -f /var/lock/subsys/smb + [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 -a $RETVAL3 -eq 0 ] && rm -f /var/lock/subsys/smb echo "" return $RETVAL } @@ -808,7 +791,7 @@ killproc() { # kill the named process(es) pid=`/usr/bin/ps -e | /usr/bin/grep -w $1 | /usr/bin/sed -e 's/^ *//' -e 's/ .*//'` - [ "$pid" != "" ] && kill $pid + [ "$pid" != "" ] && kill $pid } # Start/stop processes required for samba server @@ -1059,7 +1042,7 @@ annoying double prompts for passwords. -Now restart your Samba and try connecting through your application that you +Now restart your Samba & try connecting through your application that you configured in the pam.conf. @@ -1080,7 +1063,7 @@ configured in the pam.conf. Winbind is currently only available for - the Linux, Solaris and IRIX operating systems, although ports to other operating + the Linux operating system, although ports to other operating systems are certainly possible. For such ports to be feasible, we require the C library of the target operating system to support the Name Service Switch and Pluggable Authentication @@ -1096,8 +1079,7 @@ configured in the pam.conf. Currently the winbind PAM module does not take into account possible workstation and logon time restrictions - that may be been set for Windows NT users, this is - instead up to the PDC to enforce. + that may be been set for Windows NT users. diff --git a/docs/faq/clientapp.html b/docs/faq/clientapp.html index b48e2363778..d24e778b2af 100644 --- a/docs/faq/clientapp.html +++ b/docs/faq/clientapp.html @@ -5,7 +5,8 @@ >Specific client application problems

Chapter 4. Specific client application problems

Chapter 4. Specific client application problems

4.1. MS Office Setup reports "Cannot change properties of '\MSOFFICE\SETUP.INI'"

4.1. MS Office Setup reports "Cannot change properties of '\MSOFFICE\SETUP.INI'"

When installing MS Office on a Samba drive for which you have admin user permissions, ie. admin users = username, you will find the @@ -98,9 +95,7 @@ CLASS="SECT1" >

4.2. How to use a Samba share as an administrative share for MS Office, etc.

4.2. How to use a Samba share as an administrative share for MS Office, etc.

Microsoft Office products can be installed as an administrative installation from which the application can either be run off the administratively installed @@ -160,9 +155,7 @@ CLASS="SECT1" >

4.3. Microsoft Access database opening errors

4.3. Microsoft Access database opening errors

Here are some notes on running MS-Access on a Samba drive from Common errors

Chapter 5. Common errors

Chapter 5. Common errors

5.1. Not listening for calling name

5.1. Not listening for calling name

5.2. System Error 1240

5.2. System Error 1240

System error 1240 means that the client is refusing to talk to a non-encrypting server. Microsoft changed WinNT in service @@ -139,9 +134,7 @@ CLASS="SECT1" >

5.3. smbclient ignores -N !

5.3. smbclient ignores -N !

+ +

No, it does not ignore -N, it is just that your server rejected the null password in the connection, so smbclient prompts for a password to try again.

+ +

To get the behaviour that you probably want use smbclient -L host -U%

+ +

This will set both the username and password to null, which is an anonymous login for SMB. Using -N would only set the password to null, and this is not accepted as an anonymous login for most SMB servers.

5.4. The data on the CD-Drive I've shared seems to be corrupted!

5.4. The data on the CD-Drive I've shared seems to be corrupted!

Some OSes (notably Linux) default to auto detection of file type on cdroms and do cr/lf translation. This is a very bad idea when use with @@ -190,9 +187,7 @@ CLASS="SECT1" >

5.5. Why can users access home directories of other users?

5.5. Why can users access home directories of other users?

5.6. Until a few minutes after samba has started, clients get the error "Domain Controller Unavailable"

5.6. Until a few minutes after samba has started, clients get the error "Domain Controller Unavailable"

A domain controller has to announce on the network who it is. This usually takes a while.

Chapter 1. General Information

Chapter 1. General Information

1.1. Where can I get it?

1.1. Where can I get it?

The Samba suite is available at the

1.2. What do the version numbers mean?

1.2. What do the version numbers mean?

It is not recommended that you run a version of Samba with the word "alpha" in its name unless you know what you are doing and are willing @@ -141,7 +136,7 @@ levels are released which give us the pXX series, for example 1.9.16p2.

So the progression goes: @@ -166,9 +161,7 @@ CLASS="SECT1" >

1.3. What platforms are supported?

1.3. What platforms are supported?

Many different platforms have run Samba successfully. The platforms most widely used and thus best tested are Linux and SunOS.

1.4. How do I subscribe to the Samba Mailing Lists?

1.4. How do I subscribe to the Samba Mailing Lists?

Look at

1.5. Pizza supply details

1.5. Pizza supply details

Those who have registered in the Samba survey as "Pizza Factory" will already know this, but the rest may need some help. Andrew doesn't ask for payment, but he does appreciate it when people give him pizza. This calls for a little organisation when the pizza donor is -twenty thousand kilometres away, but it has been done.

Method 1: Ring up your local branch of an international pizza chain and see if they honour their vouchers internationally. Pizza Hut do, diff --git a/docs/faq/install.html b/docs/faq/install.html index 23403ab96b9..e647aef6d4f 100644 --- a/docs/faq/install.html +++ b/docs/faq/install.html @@ -5,7 +5,8 @@ >Compiling and installing Samba on a Unix host

Chapter 2. Compiling and installing Samba on a Unix host

Chapter 2. Compiling and installing Samba on a Unix host

2.1. I can't see the Samba server in any browse lists!

2.1. I can't see the Samba server in any browse lists!

See Browsing.html in the docs directory of the samba source for more information on browsing.

2.2. Some files that I KNOW are on the server doesn't show up when I view the files from my client!

2.2. Some files that I KNOW are on the server doesn't show up when I view the files from my client!

See the next question.

2.3. Some files on the server show up with really wierd filenames when I view the files from my client!

2.3. Some files on the server show up with really wierd filenames when I view the files from my client!

If you check what files are not showing up, you will note that they are files which contain upper case letters or which are otherwise not @@ -131,9 +124,7 @@ CLASS="SECT1" >

2.4. My client reports "cannot locate specified computer" or similar

2.4. My client reports "cannot locate specified computer" or similar

This indicates one of three things: You supplied an incorrect server name, the underlying TCP/IP layer is not working correctly, or the @@ -166,9 +157,7 @@ CLASS="SECT1" >

2.5. My client reports "cannot locate specified share name" or similar

2.5. My client reports "cannot locate specified share name" or similar

This message indicates that your client CAN locate the specified server, which is a good start, but that it cannot find a service of @@ -209,9 +198,7 @@ CLASS="SECT1" >

2.6. Printing doesn't work

2.6. Printing doesn't work

Make sure that the specified print command for the service you are connecting to is correct and that it has a fully-qualified path (eg., @@ -245,9 +232,7 @@ CLASS="SECT1" >

2.7. My client reports "This server is not configured to list shared resources"

2.7. My client reports "This server is not configured to list shared resources"

Your guest account is probably invalid for some reason. Samba uses the guest account for browsing in smbd. Check that your guest account is @@ -260,9 +245,7 @@ CLASS="SECT1" >

2.8. Log message "you appear to have a trapdoor uid system"

2.8. Log message "you appear to have a trapdoor uid system"

This can have several causes. It might be because you are using a uid or gid of 65535 or -1. This is a VERY bad idea, and is a big security @@ -301,9 +284,7 @@ CLASS="SECT1" >

2.9. Why are my file's timestamps off by an hour, or by a few hours?

2.9. Why are my file's timestamps off by an hour, or by a few hours?

This is from Paul Eggert eggert@twinsun.com.

2.10. How do I set the printer driver name correctly?

2.10. How do I set the printer driver name correctly?

Question:

Question: +" On NT, I opened "Printer Manager" and "Connect to Printer". Enter ["\\ptdi270\ps1"] in the box of printer. I got the following error message " -

Samba FAQ

Samba FAQ

Samba FAQ

Samba Team

Samba Team

Dedication

Dedication

This is the Frequently Asked Questions (FAQ) document for Samba, the free and very popular SMB server product. An SMB server @@ -163,7 +156,7 @@ HREF="config.html" >

3.1. I have set 'force user' and samba still makes 'root' the owner of all the files I touch!
4.1. MS Office Setup reports "Cannot change properties of '\MSOFFICE\SETUP.INI'"
4.2. How to use a Samba share as an administrative share for MS Office, etc.
4.3. Microsoft Access database opening errors
5.1. Not listening for calling name
5.2. System Error 1240
5.3. smbclient ignores -N !
5.4. The data on the CD-Drive I've shared seems to be corrupted!
5.5. Why can users access home directories of other users?
5.6. Until a few minutes after samba has started, clients get the error "Domain Controller Unavailable"
5.7. I'm getting "open_oplock_ipc: Failed to get local UDP socket for address 100007f. Error was Cannot assign requested" in the logs
6.1. How can I prevent my samba server from being used to distribute the Nimda worm?
6.2. How can I use samba as a fax server?
6.2.1. Tools for printing faxes
6.2.2. Making the fax-server
6.2.3. Installing the client drivers
6.2.4. Example smb.conf
6.3. Samba doesn't work well together with DHCP!
6.4. How can I assign NetBIOS names to clients with DHCP?
6.5. How do I convert between unix and dos text formats?
6.6. Does samba have wins replication support?
-SAMBA Project Documentation

SAMBA Project Documentation

SAMBA Team



Abstract

Last Update : Thu Aug 15 12:48:45 CDT 2002

This book is a collection of HOWTOs added to Samba documentation over the years. -I try to ensure that all are current, but sometimes the is a larger job -than one person can maintain. The most recent version of this document -can be found at http://www.samba.org/ -on the "Documentation" page. Please send updates to jerry@samba.org.

This documentation is distributed under the GNU General Public License (GPL) -version 2. A copy of the license is included with the Samba source -distribution. A copy can be found on-line at http://www.fsf.org/licenses/gpl.txt

Cheers, jerry

Table of Contents
I. General installation
1. How to Install and Test SAMBA
1.1. Read the man pages
1.2. Building the Binaries
1.3. The all important step
1.4. Create the smb configuration file.
1.5. Test your config file with - testparm
1.6. Starting the smbd and nmbd
1.7. Try listing the shares available on your - server
1.8. Try connecting with the unix client
1.9. Try connecting from a DOS, WfWg, Win9x, WinNT, - Win2k, OS/2, etc... client
1.10. What If Things Don't Work?
2. Improved browsing in samba
2.1. Overview of browsing
2.2. Browsing support in samba
2.3. Problem resolution
2.4. Browsing across subnets
2.5. Setting up a WINS server
2.6. Setting up Browsing in a WORKGROUP
2.7. Setting up Browsing in a DOMAIN
2.8. Forcing samba to be the master
2.9. Making samba the domain master
2.10. Note about broadcast addresses
2.11. Multiple interfaces
3. Oplocks
3.1. What are oplocks?
4. Quick Cross Subnet Browsing / Cross Workgroup Browsing guide
4.1. Discussion
4.2. Use of the "Remote Announce" parameter
4.3. Use of the "Remote Browse Sync" parameter
4.4. Use of WINS
4.5. Do NOT use more than one (1) protocol on MS Windows machines
4.6. Name Resolution Order
5. LanMan and NT Password Encryption in Samba
5.1. Introduction
5.2. Important Notes About Security
5.3. The smbpasswd Command
II. Type of installation
6. How to Configure Samba as a NT4 Primary Domain Controller
6.1. Prerequisite Reading
6.2. Background
6.3. Configuring the Samba Domain Controller
6.4. Creating Machine Trust Accounts and Joining Clients to the -Domain
6.5. Common Problems and Errors
6.6. System Policies and Profiles
6.7. What other help can I get?
6.8. Domain Control for Windows 9x/ME
6.9. DOMAIN_CONTROL.txt : Windows NT Domain Control & Samba
7. How to Act as a Backup Domain Controller in a Purely Samba Controlled Domain
7.1. Prerequisite Reading
7.2. Background
7.3. What qualifies a Domain Controller on the network?
7.4. Can Samba be a Backup Domain Controller?
7.5. How do I set up a Samba BDC?
8. Samba as a ADS domain member
8.1. Installing the required packages for Debian
8.2. Installing the required packages for RedHat
8.3. Compile Samba
8.4. Setup your /etc/krb5.conf
8.5. Create the computer account
8.6. Test your server setup
8.7. Testing with smbclient
8.8. Notes
9. Samba as a NT4 domain member
9.1. Joining an NT Domain with Samba 2.2
9.2. Samba and Windows 2000 Domains
9.3. Why is this better than security = server?
III. Optional configuration
10. Integrating MS Windows networks with Samba
10.1. Agenda
10.2. Name Resolution in a pure Unix/Linux world
10.3. Name resolution as used within MS Windows networking
10.4. How browsing functions and how to deploy stable and -dependable browsing using Samba
10.5. MS Windows security options and how to configure -Samba for seemless integration
10.6. Conclusions
11. UNIX Permission Bits and Windows NT Access Control Lists
11.1. Viewing and changing UNIX permissions using the NT - security dialogs
11.2. How to view file security on a Samba share
11.3. Viewing file ownership
11.4. Viewing file or directory permissions
11.5. Modifying file or directory permissions
11.6. Interaction with the standard Samba create mask - parameters
11.7. Interaction with the standard Samba file attribute - mapping
12. Configuring PAM for distributed but centrally -managed authentication
12.1. Samba and PAM
12.2. Distributed Authentication
12.3. PAM Configuration in smb.conf
13. Hosting a Microsoft Distributed File System tree on Samba
13.1. Instructions
14. Printing Support
14.1. Introduction
14.2. Configuration
14.3. The Imprints Toolset
14.4. Diagnosis
15. Security levels
15.1. Introduction
15.2. More complete description of security levels
16. Unified Logons between Windows NT and UNIX using Winbind
16.1. Abstract
16.2. Introduction
16.3. What Winbind Provides
16.4. How Winbind Works
16.5. Installation and Configuration
16.6. Limitations
16.7. Conclusion
17. Passdb MySQL plugin
17.1. Building
17.2. Configuring
17.3. Using plaintext passwords or encrypted password
17.4. Getting non-column data from the table
18. Passdb XML plugin
18.1. Building
18.2. Usage
19. Storing Samba's User/Machine Account information in an LDAP Directory
19.1. Purpose
19.2. Introduction
19.3. Supported LDAP Servers
19.4. Schema and Relationship to the RFC 2307 posixAccount
19.5. Configuring Samba with LDAP
19.6. Accounts and Groups management
19.7. Security and sambaAccount
19.8. LDAP specials attributes for sambaAccounts
19.9. Example LDIF Entries for a sambaAccount
19.10. Comments
20. HOWTO Access Samba source code via CVS
20.1. Introduction
20.2. CVS Access to samba.org
21. Group mapping HOWTO
22. Samba performance issues
22.1. Comparisons
22.2. Oplocks
22.3. Socket options
22.4. Read size
22.5. Max xmit
22.6. Locking
22.7. Share modes
22.8. Log level
22.9. Wide lines
22.10. Read raw
22.11. Write raw
22.12. Read prediction
22.13. Memory mapping
22.14. Slow Clients
22.15. Slow Logins
22.16. Client tuning
22.17. My Results
IV. Appendixes
23. Portability
23.1. HPUX
23.2. SCO Unix
23.3. DNIX
23.4. RedHat Linux Rembrandt-II
24. Samba and other CIFS clients
24.1. Macintosh clients?
24.2. OS2 Client
24.3. Windows for Workgroups
24.4. Windows '95/'98
24.5. Windows 2000 Service Pack 2
25. Reporting Bugs
25.1. Introduction
25.2. General info
25.3. Debug levels
25.4. Internal errors
25.5. Attaching to a running process
25.6. Patches
26. Diagnosing your samba server
26.1. Introduction
26.2. Assumptions
26.3. Tests
26.4. Still having troubles?

I. General installation

Introduction

This part contains general info on how to install samba -and how to configure the parts of samba you will most likely need. -PLEASE read this.

Table of Contents
1. How to Install and Test SAMBA
1.1. Read the man pages
1.2. Building the Binaries
1.3. The all important step
1.4. Create the smb configuration file.
1.5. Test your config file with - testparm
1.6. Starting the smbd and nmbd
1.6.1. Starting from inetd.conf
1.6.2. Alternative: starting it as a daemon
1.7. Try listing the shares available on your - server
1.8. Try connecting with the unix client
1.9. Try connecting from a DOS, WfWg, Win9x, WinNT, - Win2k, OS/2, etc... client
1.10. What If Things Don't Work?
1.10.1. Diagnosing Problems
1.10.2. Scope IDs
1.10.3. Choosing the Protocol Level
1.10.4. Printing from UNIX to a Client PC
1.10.5. Locking
1.10.6. Mapping Usernames
2. Improved browsing in samba
2.1. Overview of browsing
2.2. Browsing support in samba
2.3. Problem resolution
2.4. Browsing across subnets
2.4.1. How does cross subnet browsing work ?
2.5. Setting up a WINS server
2.6. Setting up Browsing in a WORKGROUP
2.7. Setting up Browsing in a DOMAIN
2.8. Forcing samba to be the master
2.9. Making samba the domain master
2.10. Note about broadcast addresses
2.11. Multiple interfaces
3. Oplocks
3.1. What are oplocks?
4. Quick Cross Subnet Browsing / Cross Workgroup Browsing guide
4.1. Discussion
4.2. Use of the "Remote Announce" parameter
4.3. Use of the "Remote Browse Sync" parameter
4.4. Use of WINS
4.5. Do NOT use more than one (1) protocol on MS Windows machines
4.6. Name Resolution Order
5. LanMan and NT Password Encryption in Samba
5.1. Introduction
5.2. Important Notes About Security
5.2.1. Advantages of SMB Encryption
5.2.2. Advantages of non-encrypted passwords
5.3. The smbpasswd Command

Chapter 1. How to Install and Test SAMBA

1.1. Read the man pages

The man pages distributed with SAMBA contain - lots of useful info that will help to get you started. - If you don't know how to read man pages then try - something like:

$ man smbd.8 - or - $ nroff -man smbd.8 | more - on older unixes.

Other sources of information are pointed to - by the Samba web site, http://www.samba.org


1.2. Building the Binaries

To do this, first run the program ./configure - in the source directory. This should automatically - configure Samba for your operating system. If you have unusual - needs then you may wish to run

root# ./configure --help -

first to see what special options you can enable. - Then executing

root# make

will create the binaries. Once it's successfully - compiled you can use

root# make install

to install the binaries and manual pages. You can - separately install the binaries and/or man pages using

root# make installbin -

and

root# make installman -

Note that if you are upgrading for a previous version - of Samba you might like to know that the old versions of - the binaries will be renamed with a ".old" extension. You - can go back to the previous version with

root# make revert -

if you find this version a disaster!


1.3. The all important step

At this stage you must fetch yourself a - coffee or other drink you find stimulating. Getting the rest - of the install right can sometimes be tricky, so you will - probably need it.

If you have installed samba before then you can skip - this step.


1.4. Create the smb configuration file.

There are sample configuration files in the examples - subdirectory in the distribution. I suggest you read them - carefully so you can see how the options go together in - practice. See the man page for all the options.

The simplest useful configuration file would be - something like this:

	[global]
-	   workgroup = MYGROUP
-
-	   [homes]
-	      guest ok = no
-	      read only = no
-	

which would allow connections by anyone with an - account on the server, using either their login name or - "homes" as the service name. (Note that I also set the - workgroup that Samba is part of. See BROWSING.txt for details)

Note that make install will not install - a smb.conf file. You need to create it - yourself.

Make sure you put the smb.conf file in the same place - you specified in theMakefile (the default is to - look for it in /usr/local/samba/lib/).

For more information about security settings for the - [homes] share please refer to the document UNIX_SECURITY.txt.


1.5. Test your config file with - testparm

It's important that you test the validity of your - smb.conf file using the testparm program. - If testparm runs OK then it will list the loaded services. If - not it will give an error message.

Make sure it runs OK and that the services look - reasonable before proceeding.

Always run testparm again when you change - smb.conf!


1.6. Starting the smbd and nmbd

You must choose to start smbd and nmbd either - as daemons or from inetd. Don't try - to do both! Either you can put them in inetd.conf and have them started on demand - by inetd, or you can start them as - daemons either from the command line or in /etc/rc.local. See the man pages for details - on the command line options. Take particular care to read - the bit about what user you need to be in order to start - Samba. In many cases you must be root.

The main advantage of starting smbd - and nmbd using the recommended daemon method - is that they will respond slightly more quickly to an initial connection - request.


1.6.1. Starting from inetd.conf

NOTE; The following will be different if - you use NIS or NIS+ to distributed services maps.

Look at your /etc/services. - What is defined at port 139/tcp. If nothing is defined - then add a line like this:

netbios-ssn 139/tcp

similarly for 137/udp you should have an entry like:

netbios-ns 137/udp

Next edit your /etc/inetd.conf - and add two lines something like this:

		netbios-ssn stream tcp nowait root /usr/local/samba/bin/smbd smbd 
-		netbios-ns dgram udp wait root /usr/local/samba/bin/nmbd nmbd 
-		

The exact syntax of /etc/inetd.conf - varies between unixes. Look at the other entries in inetd.conf - for a guide.

NOTE: Some unixes already have entries like netbios_ns - (note the underscore) in /etc/services. - You must either edit /etc/services or - /etc/inetd.conf to make them consistent.

NOTE: On many systems you may need to use the - "interfaces" option in smb.conf to specify the IP address - and netmask of your interfaces. Run ifconfig - as root if you don't know what the broadcast is for your - net. nmbd tries to determine it at run - time, but fails on some unixes. See the section on "testing nmbd" - for a method of finding if you need to do this.

!!!WARNING!!! Many unixes only accept around 5 - parameters on the command line in inetd.conf. - This means you shouldn't use spaces between the options and - arguments, or you should use a script, and start the script - from inetd.

Restart inetd, perhaps just send - it a HUP. If you have installed an earlier version of nmbd then you may need to kill nmbd as well.


1.6.2. Alternative: starting it as a daemon

To start the server as a daemon you should create - a script something like this one, perhaps calling - it startsmb.

		#!/bin/sh
-		/usr/local/samba/bin/smbd -D 
-		/usr/local/samba/bin/nmbd -D 
-		

then make it executable with chmod - +x startsmb

You can then run startsmb by - hand or execute it from /etc/rc.local -

To kill it send a kill signal to the processes - nmbd and smbd.

NOTE: If you use the SVR4 style init system then - you may like to look at the examples/svr4-startup - script to make Samba fit into that system.


1.7. Try listing the shares available on your - server

$ smbclient -L - yourhostname

You should get back a list of shares available on - your server. If you don't then something is incorrectly setup. - Note that this method can also be used to see what shares - are available on other LanManager clients (such as WfWg).

If you choose user level security then you may find - that Samba requests a password before it will list the shares. - See the smbclient man page for details. (you - can force it to list the shares without a password by - adding the option -U% to the command line. This will not work - with non-Samba servers)


1.8. Try connecting with the unix client

$ smbclient //yourhostname/aservice

Typically the yourhostname - would be the name of the host where you installed smbd. The aservice is - any service you have defined in the smb.conf - file. Try your user name if you just have a [homes] section - in smb.conf.

For example if your unix host is bambi and your login - name is fred you would type:

$ smbclient //bambi/fred -


1.9. Try connecting from a DOS, WfWg, Win9x, WinNT, - Win2k, OS/2, etc... client

Try mounting disks. eg:

C:\WINDOWS\> net use d: \\servername\service -

Try printing. eg:

C:\WINDOWS\> net use lpt1: - \\servername\spoolservice

C:\WINDOWS\> print filename -

Celebrate, or send me a bug report!


1.10. What If Things Don't Work?

If nothing works and you start to think "who wrote - this pile of trash" then I suggest you do step 2 again (and - again) till you calm down.

Then you might read the file DIAGNOSIS.txt and the - FAQ. If you are still stuck then try the mailing list or - newsgroup (look in the README for details). Samba has been - successfully installed at thousands of sites worldwide, so maybe - someone else has hit your problem and has overcome it. You could - also use the WWW site to scan back issues of the samba-digest.

When you fix the problem PLEASE send me some updates to the - documentation (or source code) so that the next person will find it - easier.


1.10.1. Diagnosing Problems

If you have installation problems then go to the - Diagnosis chapter to try to find the - problem.


1.10.2. Scope IDs

By default Samba uses a blank scope ID. This means - all your windows boxes must also have a blank scope ID. - If you really want to use a non-blank scope ID then you will - need to use the 'netbios scope' smb.conf option. - All your PCs will need to have the same setting for - this to work. I do not recommend scope IDs.


1.10.3. Choosing the Protocol Level

The SMB protocol has many dialects. Currently - Samba supports 5, called CORE, COREPLUS, LANMAN1, - LANMAN2 and NT1.

You can choose what maximum protocol to support - in the smb.conf file. The default is - NT1 and that is the best for the vast majority of sites.

In older versions of Samba you may have found it - necessary to use COREPLUS. The limitations that led to - this have mostly been fixed. It is now less likely that you - will want to use less than LANMAN1. The only remaining advantage - of COREPLUS is that for some obscure reason WfWg preserves - the case of passwords in this protocol, whereas under LANMAN1, - LANMAN2 or NT1 it uppercases all passwords before sending them, - forcing you to use the "password level=" option in some cases.

The main advantage of LANMAN2 and NT1 is support for - long filenames with some clients (eg: smbclient, Windows NT - or Win95).

See the smb.conf(5) manual page for more details.

Note: To support print queue reporting you may find - that you have to use TCP/IP as the default protocol under - WfWg. For some reason if you leave Netbeui as the default - it may break the print queue reporting on some systems. - It is presumably a WfWg bug.


1.10.4. Printing from UNIX to a Client PC

To use a printer that is available via a smb-based - server from a unix host with LPR you will need to compile the - smbclient program. You then need to install the script - "smbprint". Read the instruction in smbprint for more details. -

There is also a SYSV style script that does much - the same thing called smbprint.sysv. It contains instructions.

See the CUPS manual for information about setting up - printing from a unix host with CUPS to a smb-based server.


1.10.5. Locking

One area which sometimes causes trouble is locking.

There are two types of locking which need to be - performed by a SMB server. The first is "record locking" - which allows a client to lock a range of bytes in a open file. - The second is the "deny modes" that are specified when a file - is open.

Record locking semantics under Unix is very - different from record locking under Windows. Versions - of Samba before 2.2 have tried to use the native - fcntl() unix system call to implement proper record - locking between different Samba clients. This can not - be fully correct due to several reasons. The simplest - is the fact that a Windows client is allowed to lock a - byte range up to 2^32 or 2^64, depending on the client - OS. The unix locking only supports byte ranges up to - 2^31. So it is not possible to correctly satisfy a - lock request above 2^31. There are many more - differences, too many to be listed here.

Samba 2.2 and above implements record locking - completely independent of the underlying unix - system. If a byte range lock that the client requests - happens to fall into the range 0-2^31, Samba hands - this request down to the Unix system. All other locks - can not be seen by unix anyway.

Strictly a SMB server should check for locks before - every read and write call on a file. Unfortunately with the - way fcntl() works this can be slow and may overstress the - rpc.lockd. It is also almost always unnecessary as clients - are supposed to independently make locking calls before reads - and writes anyway if locking is important to them. By default - Samba only makes locking calls when explicitly asked - to by a client, but if you set "strict locking = yes" then it will - make lock checking calls on every read and write.

You can also disable by range locking completely - using "locking = no". This is useful for those shares that - don't support locking or don't need it (such as cdroms). In - this case Samba fakes the return codes of locking calls to - tell clients that everything is OK.

The second class of locking is the "deny modes". These - are set by an application when it opens a file to determine - what types of access should be allowed simultaneously with - its open. A client may ask for DENY_NONE, DENY_READ, DENY_WRITE - or DENY_ALL. There are also special compatibility modes called - DENY_FCB and DENY_DOS.


1.10.6. Mapping Usernames

If you have different usernames on the PCs and - the unix server then take a look at the "username map" option. - See the smb.conf man page for details.


Chapter 2. Improved browsing in samba

2.1. Overview of browsing

SMB networking provides a mechanism by which clients can access a list -of machines in a network, a so-called "browse list". This list -contains machines that are ready to offer file and/or print services -to other machines within the network. Thus it does not include -machines which aren't currently able to do server tasks. The browse -list is heavily used by all SMB clients. Configuration of SMB -browsing has been problematic for some Samba users, hence this -document.

Browsing will NOT work if name resolution from NetBIOS names to IP -addresses does not function correctly. Use of a WINS server is highly -recommended to aid the resolution of NetBIOS (SMB) names to IP addresses. -WINS allows remote segment clients to obtain NetBIOS name_type information -that can NOT be provided by any other means of name resolution.


2.2. Browsing support in samba

Samba now fully supports browsing. The browsing is supported by nmbd -and is also controlled by options in the smb.conf file (see smb.conf(5)).

Samba can act as a local browse master for a workgroup and the ability -for samba to support domain logons and scripts is now available. See -DOMAIN.txt for more information on domain logons.

Samba can also act as a domain master browser for a workgroup. This -means that it will collate lists from local browse masters into a -wide area network server list. In order for browse clients to -resolve the names they may find in this list, it is recommended that -both samba and your clients use a WINS server.

Note that you should NOT set Samba to be the domain master for a -workgroup that has the same name as an NT Domain: on each wide area -network, you must only ever have one domain master browser per workgroup, -regardless of whether it is NT, Samba or any other type of domain master -that is providing this service.

[Note that nmbd can be configured as a WINS server, but it is not -necessary to specifically use samba as your WINS server. NTAS can -be configured as your WINS server. In a mixed NT server and -samba environment on a Wide Area Network, it is recommended that -you use the NT server's WINS server capabilities. In a samba-only -environment, it is recommended that you use one and only one nmbd -as your WINS server].

To get browsing to work you need to run nmbd as usual, but will need -to use the "workgroup" option in smb.conf to control what workgroup -Samba becomes a part of.

Samba also has a useful option for a Samba server to offer itself for -browsing on another subnet. It is recommended that this option is only -used for 'unusual' purposes: announcements over the internet, for -example. See "remote announce" in the smb.conf man page.


2.3. Problem resolution

If something doesn't work then hopefully the log.nmb file will help -you track down the problem. Try a debug level of 2 or 3 for finding -problems. Also note that the current browse list usually gets stored -in text form in a file called browse.dat.

Note that if it doesn't work for you, then you should still be able to -type the server name as \\SERVER in filemanager then hit enter and -filemanager should display the list of available shares.

Some people find browsing fails because they don't have the global -"guest account" set to a valid account. Remember that the IPC$ -connection that lists the shares is done as guest, and thus you must -have a valid guest account.

Also, a lot of people are getting bitten by the problem of too many -parameters on the command line of nmbd in inetd.conf. This trick is to -not use spaces between the option and the parameter (eg: -d2 instead -of -d 2), and to not use the -B and -N options. New versions of nmbd -are now far more likely to correctly find your broadcast and network -address, so in most cases these aren't needed.

The other big problem people have is that their broadcast address, -netmask or IP address is wrong (specified with the "interfaces" option -in smb.conf)


2.4. Browsing across subnets

With the release of Samba 1.9.17(alpha1 and above) Samba has been -updated to enable it to support the replication of browse lists -across subnet boundaries. New code and options have been added to -achieve this. This section describes how to set this feature up -in different settings.

To see browse lists that span TCP/IP subnets (ie. networks separated -by routers that don't pass broadcast traffic) you must set up at least -one WINS server. The WINS server acts as a DNS for NetBIOS names, allowing -NetBIOS name to IP address translation to be done by doing a direct -query of the WINS server. This is done via a directed UDP packet on -port 137 to the WINS server machine. The reason for a WINS server is -that by default, all NetBIOS name to IP address translation is done -by broadcasts from the querying machine. This means that machines -on one subnet will not be able to resolve the names of machines on -another subnet without using a WINS server.

Remember, for browsing across subnets to work correctly, all machines, -be they Windows 95, Windows NT, or Samba servers must have the IP address -of a WINS server given to them by a DHCP server, or by manual configuration -(for Win95 and WinNT, this is in the TCP/IP Properties, under Network -settings) for Samba this is in the smb.conf file.


2.4.1. How does cross subnet browsing work ?

Cross subnet browsing is a complicated dance, containing multiple -moving parts. It has taken Microsoft several years to get the code -that achieves this correct, and Samba lags behind in some areas. -However, with the 1.9.17 release, Samba is capable of cross subnet -browsing when configured correctly.

Consider a network set up as follows :

                                   (DMB)
-             N1_A      N1_B        N1_C       N1_D        N1_E
-              |          |           |          |           |
-          -------------------------------------------------------
-            |          subnet 1                       |
-          +---+                                      +---+
-          |R1 | Router 1                  Router 2   |R2 |
-          +---+                                      +---+
-            |                                          |
-            |  subnet 2              subnet 3          |
-  --------------------------       ------------------------------------
-  |     |     |      |               |        |         |           |
- N2_A  N2_B  N2_C   N2_D           N3_A     N3_B      N3_C        N3_D 
-                    (WINS)

Consisting of 3 subnets (1, 2, 3) connected by two routers -(R1, R2) - these do not pass broadcasts. Subnet 1 has 5 machines -on it, subnet 2 has 4 machines, subnet 3 has 4 machines. Assume -for the moment that all these machines are configured to be in the -same workgroup (for simplicities sake). Machine N1_C on subnet 1 -is configured as Domain Master Browser (ie. it will collate the -browse lists for the workgroup). Machine N2_D is configured as -WINS server and all the other machines are configured to register -their NetBIOS names with it.

As all these machines are booted up, elections for master browsers -will take place on each of the three subnets. Assume that machine -N1_C wins on subnet 1, N2_B wins on subnet 2, and N3_D wins on -subnet 3 - these machines are known as local master browsers for -their particular subnet. N1_C has an advantage in winning as the -local master browser on subnet 1 as it is set up as Domain Master -Browser.

On each of the three networks, machines that are configured to -offer sharing services will broadcast that they are offering -these services. The local master browser on each subnet will -receive these broadcasts and keep a record of the fact that -the machine is offering a service. This list of records is -the basis of the browse list. For this case, assume that -all the machines are configured to offer services so all machines -will be on the browse list.

For each network, the local master browser on that network is -considered 'authoritative' for all the names it receives via -local broadcast. This is because a machine seen by the local -master browser via a local broadcast must be on the same -network as the local master browser and thus is a 'trusted' -and 'verifiable' resource. Machines on other networks that -the local master browsers learn about when collating their -browse lists have not been directly seen - these records are -called 'non-authoritative'.

At this point the browse lists look as follows (these are -the machines you would see in your network neighborhood if -you looked in it on a particular network right now).

Subnet           Browse Master   List
-------           -------------   ----
-Subnet1          N1_C            N1_A, N1_B, N1_C, N1_D, N1_E
-
-Subnet2          N2_B            N2_A, N2_B, N2_C, N2_D
-
-Subnet3          N3_D            N3_A, N3_B, N3_C, N3_D

Note that at this point all the subnets are separate, no -machine is seen across any of the subnets.

Now examine subnet 2. As soon as N2_B has become the local -master browser it looks for a Domain master browser to synchronize -its browse list with. It does this by querying the WINS server -(N2_D) for the IP address associated with the NetBIOS name -WORKGROUP>1B<. This name was registerd by the Domain master -browser (N1_C) with the WINS server as soon as it was booted.

Once N2_B knows the address of the Domain master browser it -tells it that is the local master browser for subnet 2 by -sending a MasterAnnouncement packet as a UDP port 138 packet. -It then synchronizes with it by doing a NetServerEnum2 call. This -tells the Domain Master Browser to send it all the server -names it knows about. Once the domain master browser receives -the MasterAnnouncement packet it schedules a synchronization -request to the sender of that packet. After both synchronizations -are done the browse lists look like :

Subnet           Browse Master   List
-------           -------------   ----
-Subnet1          N1_C            N1_A, N1_B, N1_C, N1_D, N1_E, 
-                                 N2_A(*), N2_B(*), N2_C(*), N2_D(*)
-
-Subnet2          N2_B            N2_A, N2_B, N2_C, N2_D
-                                 N1_A(*), N1_B(*), N1_C(*), N1_D(*), N1_E(*)
-
-Subnet3          N3_D            N3_A, N3_B, N3_C, N3_D
-
-Servers with a (*) after them are non-authoritative names.

At this point users looking in their network neighborhood on -subnets 1 or 2 will see all the servers on both, users on -subnet 3 will still only see the servers on their own subnet.

The same sequence of events that occured for N2_B now occurs -for the local master browser on subnet 3 (N3_D). When it -synchronizes browse lists with the domain master browser (N1_A) -it gets both the server entries on subnet 1, and those on -subnet 2. After N3_D has synchronized with N1_C and vica-versa -the browse lists look like.

Subnet           Browse Master   List
-------           -------------   ----
-Subnet1          N1_C            N1_A, N1_B, N1_C, N1_D, N1_E, 
-                                 N2_A(*), N2_B(*), N2_C(*), N2_D(*),
-                                 N3_A(*), N3_B(*), N3_C(*), N3_D(*)
-
-Subnet2          N2_B            N2_A, N2_B, N2_C, N2_D
-                                 N1_A(*), N1_B(*), N1_C(*), N1_D(*), N1_E(*)
-
-Subnet3          N3_D            N3_A, N3_B, N3_C, N3_D
-                                 N1_A(*), N1_B(*), N1_C(*), N1_D(*), N1_E(*),
-                                 N2_A(*), N2_B(*), N2_C(*), N2_D(*)
-
-Servers with a (*) after them are non-authoritative names.

At this point users looking in their network neighborhood on -subnets 1 or 3 will see all the servers on all sunbets, users on -subnet 2 will still only see the servers on subnets 1 and 2, but not 3.

Finally, the local master browser for subnet 2 (N2_B) will sync again -with the domain master browser (N1_C) and will recieve the missing -server entries. Finally - and as a steady state (if no machines -are removed or shut off) the browse lists will look like :

Subnet           Browse Master   List
-------           -------------   ----
-Subnet1          N1_C            N1_A, N1_B, N1_C, N1_D, N1_E, 
-                                 N2_A(*), N2_B(*), N2_C(*), N2_D(*),
-                                 N3_A(*), N3_B(*), N3_C(*), N3_D(*)
-
-Subnet2          N2_B            N2_A, N2_B, N2_C, N2_D
-                                 N1_A(*), N1_B(*), N1_C(*), N1_D(*), N1_E(*)
-                                 N3_A(*), N3_B(*), N3_C(*), N3_D(*)
-
-Subnet3          N3_D            N3_A, N3_B, N3_C, N3_D
-                                 N1_A(*), N1_B(*), N1_C(*), N1_D(*), N1_E(*),
-                                 N2_A(*), N2_B(*), N2_C(*), N2_D(*)
-	
-Servers with a (*) after them are non-authoritative names.

Synchronizations between the domain master browser and local -master browsers will continue to occur, but this should be a -steady state situation.

If either router R1 or R2 fails the following will occur:

  1. Names of computers on each side of the inaccessible network fragments - will be maintained for as long as 36 minutes, in the network neighbourhood - lists. -

  2. Attempts to connect to these inaccessible computers will fail, but the - names will not be removed from the network neighbourhood lists. -

  3. If one of the fragments is cut off from the WINS server, it will only - be able to access servers on its local subnet, by using subnet-isolated - broadcast NetBIOS name resolution. The effects are similar to that of - losing access to a DNS server. -


2.5. Setting up a WINS server

Either a Samba machine or a Windows NT Server machine may be set up -as a WINS server. To set a Samba machine to be a WINS server you must -add the following option to the smb.conf file on the selected machine : -in the [globals] section add the line

wins support = yes

Versions of Samba previous to 1.9.17 had this parameter default to -yes. If you have any older versions of Samba on your network it is -strongly suggested you upgrade to 1.9.17 or above, or at the very -least set the parameter to 'no' on all these machines.

Machines with "wins support = yes" will keep a list of -all NetBIOS names registered with them, acting as a DNS for NetBIOS names.

You should set up only ONE wins server. Do NOT set the -"wins support = yes" option on more than one Samba -server.

To set up a Windows NT Server as a WINS server you need to set up -the WINS service - see your NT documentation for details. Note that -Windows NT WINS Servers can replicate to each other, allowing more -than one to be set up in a complex subnet environment. As Microsoft -refuse to document these replication protocols Samba cannot currently -participate in these replications. It is possible in the future that -a Samba->Samba WINS replication protocol may be defined, in which -case more than one Samba machine could be set up as a WINS server -but currently only one Samba server should have the "wins support = yes" -parameter set.

After the WINS server has been configured you must ensure that all -machines participating on the network are configured with the address -of this WINS server. If your WINS server is a Samba machine, fill in -the Samba machine IP address in the "Primary WINS Server" field of -the "Control Panel->Network->Protocols->TCP->WINS Server" dialogs -in Windows 95 or Windows NT. To tell a Samba server the IP address -of the WINS server add the following line to the [global] section of -all smb.conf files :

wins server = >name or IP address<

where >name or IP address< is either the DNS name of the WINS server -machine or its IP address.

Note that this line MUST NOT BE SET in the smb.conf file of the Samba -server acting as the WINS server itself. If you set both the -"wins support = yes" option and the -"wins server = >name<" option then -nmbd will fail to start.

There are two possible scenarios for setting up cross subnet browsing. -The first details setting up cross subnet browsing on a network containing -Windows 95, Samba and Windows NT machines that are not configured as -part of a Windows NT Domain. The second details setting up cross subnet -browsing on networks that contain NT Domains.


2.6. Setting up Browsing in a WORKGROUP

To set up cross subnet browsing on a network containing machines -in up to be in a WORKGROUP, not an NT Domain you need to set up one -Samba server to be the Domain Master Browser (note that this is *NOT* -the same as a Primary Domain Controller, although in an NT Domain the -same machine plays both roles). The role of a Domain master browser is -to collate the browse lists from local master browsers on all the -subnets that have a machine participating in the workgroup. Without -one machine configured as a domain master browser each subnet would -be an isolated workgroup, unable to see any machines on any other -subnet. It is the presense of a domain master browser that makes -cross subnet browsing possible for a workgroup.

In an WORKGROUP environment the domain master browser must be a -Samba server, and there must only be one domain master browser per -workgroup name. To set up a Samba server as a domain master browser, -set the following option in the [global] section of the smb.conf file :

domain master = yes

The domain master browser should also preferrably be the local master -browser for its own subnet. In order to achieve this set the following -options in the [global] section of the smb.conf file :

        domain master = yes
-        local master = yes
-        preferred master = yes
-        os level = 65

The domain master browser may be the same machine as the WINS -server, if you require.

Next, you should ensure that each of the subnets contains a -machine that can act as a local master browser for the -workgroup. Any NT machine should be able to do this, as will -Windows 95 machines (although these tend to get rebooted more -often, so it's not such a good idea to use these). To make a -Samba server a local master browser set the following -options in the [global] section of the smb.conf file :

        domain master = no
-        local master = yes
-        preferred master = yes
-        os level = 65

Do not do this for more than one Samba server on each subnet, -or they will war with each other over which is to be the local -master browser.

The "local master" parameter allows Samba to act as a local master -browser. The "preferred master" causes nmbd to force a browser -election on startup and the "os level" parameter sets Samba high -enough so that it should win any browser elections.

If you have an NT machine on the subnet that you wish to -be the local master browser then you can disable Samba from -becoming a local master browser by setting the following -options in the [global] section of the smb.conf file :

        domain master = no
-        local master = no
-        preferred master = no
-        os level = 0


2.7. Setting up Browsing in a DOMAIN

If you are adding Samba servers to a Windows NT Domain then -you must not set up a Samba server as a domain master browser. -By default, a Windows NT Primary Domain Controller for a Domain -name is also the Domain master browser for that name, and many -things will break if a Samba server registers the Domain master -browser NetBIOS name (DOMAIN>1B<) with WINS instead of the PDC.

For subnets other than the one containing the Windows NT PDC -you may set up Samba servers as local master browsers as -described. To make a Samba server a local master browser set -the following options in the [global] section of the smb.conf -file :

        domain master = no
-        local master = yes
-        preferred master = yes
-        os level = 65

If you wish to have a Samba server fight the election with machines -on the same subnet you may set the "os level" parameter to lower -levels. By doing this you can tune the order of machines that -will become local master browsers if they are running. For -more details on this see the section "FORCING SAMBA TO BE THE MASTER" -below.

If you have Windows NT machines that are members of the domain -on all subnets, and you are sure they will always be running then -you can disable Samba from taking part in browser elections and -ever becoming a local master browser by setting following options -in the [global] section of the smb.conf file :

domain master = no - local master = no - preferred master = no - os level = 0


2.8. Forcing samba to be the master

Who becomes the "master browser" is determined by an election process -using broadcasts. Each election packet contains a number of parameters -which determine what precedence (bias) a host should have in the -election. By default Samba uses a very low precedence and thus loses -elections to just about anyone else.

If you want Samba to win elections then just set the "os level" global -option in smb.conf to a higher number. It defaults to 0. Using 34 -would make it win all elections over every other system (except other -samba systems!)

A "os level" of 2 would make it beat WfWg and Win95, but not NTAS. A -NTAS domain controller uses level 32.

The maximum os level is 255

If you want samba to force an election on startup, then set the -"preferred master" global option in smb.conf to "yes". Samba will -then have a slight advantage over other potential master browsers -that are not preferred master browsers. Use this parameter with -care, as if you have two hosts (whether they are windows 95 or NT or -samba) on the same local subnet both set with "preferred master" to -"yes", then periodically and continually they will force an election -in order to become the local master browser.

If you want samba to be a "domain master browser", then it is -recommended that you also set "preferred master" to "yes", because -samba will not become a domain master browser for the whole of your -LAN or WAN if it is not also a local master browser on its own -broadcast isolated subnet.

It is possible to configure two samba servers to attempt to become -the domain master browser for a domain. The first server that comes -up will be the domain master browser. All other samba servers will -attempt to become the domain master browser every 5 minutes. They -will find that another samba server is already the domain master -browser and will fail. This provides automatic redundancy, should -the current domain master browser fail.


2.9. Making samba the domain master

The domain master is responsible for collating the browse lists of -multiple subnets so that browsing can occur between subnets. You can -make samba act as the domain master by setting "domain master = yes" -in smb.conf. By default it will not be a domain master.

Note that you should NOT set Samba to be the domain master for a -workgroup that has the same name as an NT Domain.

When samba is the domain master and the master browser it will listen -for master announcements (made roughly every twelve minutes) from local -master browsers on other subnets and then contact them to synchronise -browse lists.

If you want samba to be the domain master then I suggest you also set -the "os level" high enough to make sure it wins elections, and set -"preferred master" to "yes", to get samba to force an election on -startup.

Note that all your servers (including samba) and clients should be -using a WINS server to resolve NetBIOS names. If your clients are only -using broadcasting to resolve NetBIOS names, then two things will occur:

  1. your local master browsers will be unable to find a domain master - browser, as it will only be looking on the local subnet. -

  2. if a client happens to get hold of a domain-wide browse list, and - a user attempts to access a host in that list, it will be unable to - resolve the NetBIOS name of that host. -

If, however, both samba and your clients are using a WINS server, then:

  1. your local master browsers will contact the WINS server and, as long as - samba has registered that it is a domain master browser with the WINS - server, your local master browser will receive samba's ip address - as its domain master browser. -

  2. when a client receives a domain-wide browse list, and a user attempts - to access a host in that list, it will contact the WINS server to - resolve the NetBIOS name of that host. as long as that host has - registered its NetBIOS name with the same WINS server, the user will - be able to see that host. -


2.10. Note about broadcast addresses

If your network uses a "0" based broadcast address (for example if it -ends in a 0) then you will strike problems. Windows for Workgroups -does not seem to support a 0's broadcast and you will probably find -that browsing and name lookups won't work.


2.11. Multiple interfaces

Samba now supports machines with multiple network interfaces. If you -have multiple interfaces then you will need to use the "interfaces" -option in smb.conf to configure them. See smb.conf(5) for details.


Chapter 3. Oplocks

3.1. What are oplocks?

When a client opens a file it can request an "oplock" or file -lease. This is (to simplify a bit) a guarentee that no one else -has the file open simultaneously. It allows the client to not -send any updates on the file to the server, thus reducing a -network file access to local access (once the file is in -client cache). An "oplock break" is when the server sends -a request to the client to flush all its changes back to -the server, so the file is in a consistent state for other -opens to succeed. If a client fails to respond to this -asynchronous request then the file can be corrupted. Hence -the "turn off oplocks" answer if people are having multi-user -file access problems.

Unless the kernel is "oplock aware" (SGI IRIX and Linux are -the only two UNIXes that are at the moment) then if a local -UNIX process accesses the file simultaneously then Samba -has no way of telling this is occuring, so the guarentee -to the client is broken. This can corrupt the file. Short -answer - it you have UNIX clients accessing the same file -as smbd locally or via NFS and you're not running Linux or -IRIX then turn off oplocks for that file or share.

"Share modes". These are modes of opening a file, that -guarentee an invarient - such as DENY_WRITE - which means -that if any other opens are requested with write access after -this current open has succeeded then they should be denied -with a "sharing violation" error message. Samba handles these -internally inside smbd. UNIX clients accessing the same file -ignore these invarients. Just proving that if you need simultaneous -file access from a Windows and UNIX client you *must* have an -application that is written to lock records correctly on both -sides. Few applications are written like this, and even fewer -are cross platform (UNIX and Windows) so in practice this isn't -much of a problem.

"Locking". This really means "byte range locking" - such as -lock 10 bytes at file offset 24 for write access. This is the -area in which well written UNIX and Windows apps will cooperate. -Windows locks (at least from NT or above) are 64-bit unsigned -offsets. UNIX locks are either 31 bit or 63 bit and are signed -(the top bit is used for the sign). Samba handles these by -first ensuring that all the Windows locks don't conflict (ie. -if other Windows clients have competing locks then just reject -immediately) - this allows us to support 64-bit Windows locks -on 32-bit filesystems. Secondly any locks that are valid are -then mapped onto UNIX fcntl byte range locks. These are the -locks that will be seen by UNIX processes. If there is a conflict -here the lock is rejected.

Note that if a client has an oplock then it "knows" that no -other client can have the file open so usually doesn't bother -to send to lock request to the server - this means once again -if you need to share files between UNIX and Windows processes -either use IRIX or Linux, or turn off oplocks for these -files/shares.


Chapter 4. Quick Cross Subnet Browsing / Cross Workgroup Browsing guide

This document should be read in conjunction with Browsing and may -be taken as the fast track guide to implementing browsing across subnets -and / or across workgroups (or domains). WINS is the best tool for resolution -of NetBIOS names to IP addesses. WINS is NOT involved in browse list handling -except by way of name to address mapping.


4.1. Discussion

Firstly, all MS Windows networking is based on SMB (Server Message -Block) based messaging. SMB messaging is implemented using NetBIOS. Samba -implements NetBIOS by encapsulating it over TCP/IP. MS Windows products can -do likewise. NetBIOS based networking uses broadcast messaging to affect -browse list management. When running NetBIOS over TCP/IP this uses UDP -based messaging. UDP messages can be broadcast or unicast.

Normally, only unicast UDP messaging can be forwarded by routers. The -"remote announce" parameter to smb.conf helps to project browse announcements -to remote network segments via unicast UDP. Similarly, the "remote browse sync" -parameter of smb.conf implements browse list collation using unicast UDP.

Secondly, in those networks where Samba is the only SMB server technology -wherever possible nmbd should be configured on one (1) machine as the WINS -server. This makes it easy to manage the browsing environment. If each network -segment is configured with it's own Samba WINS server, then the only way to -get cross segment browsing to work is by using the "remote announce" and -the "remote browse sync" parameters to your smb.conf file.

If only one WINS server is used then the use of the "remote announce" and the -"remote browse sync" parameters should NOT be necessary.

Samba WINS does not support MS-WINS replication. This means that when setting up -Samba as a WINS server there must only be one nmbd configured as a WINS server -on the network. Some sites have used multiple Samba WINS servers for redundancy -(one server per subnet) and then used "remote browse sync" and "remote announce" -to affect browse list collation across all segments. Note that this means -clients will only resolve local names, and must be configured to use DNS to -resolve names on other subnets in order to resolve the IP addresses of the -servers they can see on other subnets. This setup is not recommended, but is -mentioned as a practical consideration (ie: an 'if all else fails' scenario).

Lastly, take note that browse lists are a collection of unreliable broadcast -messages that are repeated at intervals of not more than 15 minutes. This means -that it will take time to establish a browse list and it can take up to 45 -minutes to stabilise, particularly across network segments.


4.2. Use of the "Remote Announce" parameter

The "remote announce" parameter of smb.conf can be used to forcibly ensure -that all the NetBIOS names on a network get announced to a remote network. -The syntax of the "remote announce" parameter is: -

	remote announce = a.b.c.d [e.f.g.h] ...
-_or_ -
	remote announce = a.b.c.d/WORKGROUP [e.f.g.h/WORKGROUP] ...
- -where: -

a.b.c.d and e.f.g.h

is either the LMB (Local Master Browser) IP address -or the broadcst address of the remote network. -ie: the LMB is at 192.168.1.10, or the address -could be given as 192.168.1.255 where the netmask -is assumed to be 24 bits (255.255.255.0). -When the remote announcement is made to the broadcast -address of the remote network every host will receive -our announcements. This is noisy and therefore -undesirable but may be necessary if we do NOT know -the IP address of the remote LMB.

WORKGROUP

is optional and can be either our own workgroup -or that of the remote network. If you use the -workgroup name of the remote network then our -NetBIOS machine names will end up looking like -they belong to that workgroup, this may cause -name resolution problems and should be avoided.


4.3. Use of the "Remote Browse Sync" parameter

The "remote browse sync" parameter of smb.conf is used to announce to -another LMB that it must synchronise it's NetBIOS name list with our -Samba LMB. It works ONLY if the Samba server that has this option is -simultaneously the LMB on it's network segment.

The syntax of the "remote browse sync" parameter is: -

	remote browse sync = a.b.c.d
- -where a.b.c.d is either the IP address of the remote LMB or else is the network broadcast address of the remote segment.


4.4. Use of WINS

Use of WINS (either Samba WINS _or_ MS Windows NT Server WINS) is highly -recommended. Every NetBIOS machine registers it's name together with a -name_type value for each of of several types of service it has available. -eg: It registers it's name directly as a unique (the type 0x03) name. -It also registers it's name if it is running the lanmanager compatible -server service (used to make shares and printers available to other users) -by registering the server (the type 0x20) name.

All NetBIOS names are up to 15 characters in length. The name_type variable -is added to the end of the name - thus creating a 16 character name. Any -name that is shorter than 15 characters is padded with spaces to the 15th -character. ie: All NetBIOS names are 16 characters long (including the -name_type information).

WINS can store these 16 character names as they get registered. A client -that wants to log onto the network can ask the WINS server for a list -of all names that have registered the NetLogon service name_type. This saves -broadcast traffic and greatly expedites logon processing. Since broadcast -name resolution can not be used across network segments this type of -information can only be provided via WINS _or_ via statically configured -"lmhosts" files that must reside on all clients in the absence of WINS.

WINS also serves the purpose of forcing browse list synchronisation by all -LMB's. LMB's must synchronise their browse list with the DMB (domain master -browser) and WINS helps the LMB to identify it's DMB. By definition this -will work only within a single workgroup. Note that the domain master browser -has NOTHING to do with what is referred to as an MS Windows NT Domain. The -later is a reference to a security environment while the DMB refers to the -master controller for browse list information only.

Use of WINS will work correctly only if EVERY client TCP/IP protocol stack -has been configured to use the WINS server/s. Any client that has not been -configured to use the WINS server will continue to use only broadcast based -name registration so that WINS may NEVER get to know about it. In any case, -machines that have not registered with a WINS server will fail name to address -lookup attempts by other clients and will therefore cause workstation access -errors.

To configure Samba as a WINS server just add "wins support = yes" to the -smb.conf file [globals] section.

To configure Samba to register with a WINS server just add -"wins server = a.b.c.d" to your smb.conf file [globals] section.

DO NOT EVER use both "wins support = yes" together with "wins server = a.b.c.d" -particularly not using it's own IP address.


4.5. Do NOT use more than one (1) protocol on MS Windows machines

A very common cause of browsing problems results from installing more than -one protocol on an MS Windows machine.

Every NetBIOS machine take part in a process of electing the LMB (and DMB) -every 15 minutes. A set of election criteria is used to determine the order -of precidence for winning this election process. A machine running Samba or -Windows NT will be biased so that the most suitable machine will predictably -win and thus retain it's role.

The election process is "fought out" so to speak over every NetBIOS network -interface. In the case of a Windows 9x machine that has both TCP/IP and IPX -installed and has NetBIOS enabled over both protocols the election will be -decided over both protocols. As often happens, if the Windows 9x machine is -the only one with both protocols then the LMB may be won on the NetBIOS -interface over the IPX protocol. Samba will then lose the LMB role as Windows -9x will insist it knows who the LMB is. Samba will then cease to function -as an LMB and thus browse list operation on all TCP/IP only machines will -fail.

The safest rule of all to follow it this - USE ONLY ONE PROTOCOL!


4.6. Name Resolution Order

Resolution of NetBIOS names to IP addresses can take place using a number -of methods. The only ones that can provide NetBIOS name_type information -are: -

WINS: the best tool!
LMHOSTS: is static and hard to maintain.
Broadcast: uses UDP and can not resolve names across remote segments.

Alternative means of name resolution includes: -

/etc/hosts: is static, hard to maintain, and lacks name_type info
DNS: is a good choice but lacks essential name_type info.

Many sites want to restrict DNS lookups and want to avoid broadcast name -resolution traffic. The "name resolve order" parameter is of great help here. -The syntax of the "name resolve order" parameter is: -

	name resolve order = wins lmhosts bcast host
-_or_ -
	name resolve order = wins lmhosts  	(eliminates bcast and host)
-The default is: -
	name  resolve order = host lmhost wins bcast
. -where "host" refers the the native methods used by the Unix system -to implement the gethostbyname() function call. This is normally -controlled by /etc/host.conf, /etc/nsswitch.conf and /etc/resolv.conf.


Chapter 5. LanMan and NT Password Encryption in Samba

5.1. Introduction

Newer windows clients send encrypted passwords over - the wire, instead of plain text passwords. The newest clients - will only send encrypted passwords and refuse to send plain text - passwords, unless their registry is tweaked.

These passwords can't be converted to unix style encrypted - passwords. Because of that you can't use the standard unix - user database, and you have to store the Lanman and NT hashes - somewhere else. For more information, see the documentation - about the passdb backend = parameter. -


5.2. Important Notes About Security

The unix and SMB password encryption techniques seem similar - on the surface. This similarity is, however, only skin deep. The unix - scheme typically sends clear text passwords over the network when - logging in. This is bad. The SMB encryption scheme never sends the - cleartext password over the network but it does store the 16 byte - hashed values on disk. This is also bad. Why? Because the 16 byte hashed - values are a "password equivalent". You cannot derive the user's - password from them, but they could potentially be used in a modified - client to gain access to a server. This would require considerable - technical knowledge on behalf of the attacker but is perfectly possible. - You should thus treat the smbpasswd file as though it contained the - cleartext passwords of all your users. Its contents must be kept - secret, and the file should be protected accordingly.

Ideally we would like a password scheme which neither requires - plain text passwords on the net or on disk. Unfortunately this - is not available as Samba is stuck with being compatible with - other SMB systems (WinNT, WfWg, Win95 etc).

Note that Windows NT 4.0 Service pack 3 changed the - default for permissible authentication so that plaintext - passwords are never sent over the wire. - The solution to this is either to switch to encrypted passwords - with Samba or edit the Windows NT registry to re-enable plaintext - passwords. See the document WinNT.txt for details on how to do - this.

Other Microsoft operating systems which also exhibit - this behavior includes

  • MS DOS Network client 3.0 with - the basic network redirector installed

  • Windows 95 with the network redirector - update installed

  • Windows 98 [se]

  • Windows 2000

Note :All current release of - Microsoft SMB/CIFS clients support authentication via the - SMB Challenge/Response mechanism described here. Enabling - clear text authentication does not disable the ability - of the client to participate in encrypted authentication.


5.2.1. Advantages of SMB Encryption

  • plain text passwords are not passed across - the network. Someone using a network sniffer cannot just - record passwords going to the SMB server.

  • WinNT doesn't like talking to a server - that isn't using SMB encrypted passwords. It will refuse - to browse the server if the server is also in user level - security mode. It will insist on prompting the user for the - password on each connection, which is very annoying. The - only things you can do to stop this is to use SMB encryption. -


5.2.2. Advantages of non-encrypted passwords

  • plain text passwords are not kept - on disk.

  • uses same password file as other unix - services such as login and ftp

  • you are probably already using other - services (such as telnet and ftp) which send plain text - passwords over the net, so sending them for SMB isn't - such a big deal.


5.3. The smbpasswd Command

The smbpasswd command maintains the two 32 byte password fields - in the smbpasswd file. If you wish to make it similar to the unix - passwd or yppasswd programs, - install it in /usr/local/samba/bin/ (or your - main Samba binary directory).

smbpasswd now works in a client-server mode - where it contacts the local smbd to change the user's password on its - behalf. This has enormous benefits - as follows.

smbpasswd now has the capability - to change passwords on Windows NT servers (this only works when - the request is sent to the NT Primary Domain Controller if you - are changing an NT Domain user's password).

To run smbpasswd as a normal user just type :

$ smbpasswd

Old SMB password: <type old value here - - or hit return if there was no old password>

New SMB Password: <type new value> -

Repeat New SMB Password: <re-type new value -

If the old value does not match the current value stored for - that user, or the two new values do not match each other, then the - password will not be changed.

If invoked by an ordinary user it will only allow the user - to change his or her own Samba password.

If run by the root user smbpasswd may take an optional - argument, specifying the user name whose SMB password you wish to - change. Note that when run as root smbpasswd does not prompt for - or check the old password value, thus allowing root to set passwords - for users who have forgotten their passwords.

smbpasswd is designed to work in the same way - and be familiar to UNIX users who use the passwd or - yppasswd commands.

For more details on using smbpasswd refer - to the man page which will always be the definitive reference.

II. Type of installation

Introduction

This part contains information on using samba in a (NT 4 or ADS) domain. -If you wish to run samba as a domain member or DC, read the appropriate chapter in -this part.

Table of Contents
6. How to Configure Samba as a NT4 Primary Domain Controller
6.1. Prerequisite Reading
6.2. Background
6.3. Configuring the Samba Domain Controller
6.4. Creating Machine Trust Accounts and Joining Clients to the -Domain
6.4.1. Manual Creation of Machine Trust Accounts
6.4.2. "On-the-Fly" Creation of Machine Trust Accounts
6.4.3. Joining the Client to the Domain
6.5. Common Problems and Errors
6.6. System Policies and Profiles
6.7. What other help can I get?
6.8. Domain Control for Windows 9x/ME
6.8.1. Configuration Instructions: Network Logons
6.8.2. Configuration Instructions: Setting up Roaming User Profiles
6.9. DOMAIN_CONTROL.txt : Windows NT Domain Control & Samba
7. How to Act as a Backup Domain Controller in a Purely Samba Controlled Domain
7.1. Prerequisite Reading
7.2. Background
7.3. What qualifies a Domain Controller on the network?
7.3.1. How does a Workstation find its domain controller?
7.3.2. When is the PDC needed?
7.4. Can Samba be a Backup Domain Controller?
7.5. How do I set up a Samba BDC?
7.5.1. How do I replicate the smbpasswd file?
8. Samba as a ADS domain member
8.1. Installing the required packages for Debian
8.2. Installing the required packages for RedHat
8.3. Compile Samba
8.4. Setup your /etc/krb5.conf
8.5. Create the computer account
8.5.1. Possible errors
8.6. Test your server setup
8.7. Testing with smbclient
8.8. Notes
9. Samba as a NT4 domain member
9.1. Joining an NT Domain with Samba 2.2
9.2. Samba and Windows 2000 Domains
9.3. Why is this better than security = server?

Chapter 6. How to Configure Samba as a NT4 Primary Domain Controller

6.1. Prerequisite Reading

Before you continue reading in this chapter, please make sure -that you are comfortable with configuring basic files services -in smb.conf and how to enable and administer password -encryption in Samba. Theses two topics are covered in the -smb.conf(5) -manpage and the Encryption chapter -of this HOWTO Collection.


6.2. Background

Author's Note: This document is a combination -of David Bannon's "Samba 2.2 PDC HOWTO" and "Samba NT Domain FAQ". -Both documents are superseded by this one.

Versions of Samba prior to release 2.2 had marginal capabilities to act -as a Windows NT 4.0 Primary Domain Controller - -(PDC). With Samba 2.2.0, we are proud to announce official support for -Windows NT 4.0-style domain logons from Windows NT 4.0 and Windows -2000 clients. This article outlines the steps -necessary for configuring Samba as a PDC. It is necessary to have a -working Samba server prior to implementing the PDC functionality. If -you have not followed the steps outlined in UNIX_INSTALL.html, please make sure -that your server is configured correctly before proceeding. Another -good resource in the smb.conf(5) man -page. The following functionality should work in 2.2:

  • domain logons for Windows NT 4.0/2000 clients. -

  • placing a Windows 9x client in user level security -

  • retrieving a list of users and groups from a Samba PDC to - Windows 9x/NT/2000 clients -

  • roving (roaming) user profiles -

  • Windows NT 4.0-style system policies -

The following pieces of functionality are not included in the 2.2 release:

  • Windows NT 4 domain trusts -

  • SAM replication with Windows NT 4.0 Domain Controllers - (i.e. a Samba PDC and a Windows NT BDC or vice versa) -

  • Adding users via the User Manager for Domains -

  • Acting as a Windows 2000 Domain Controller (i.e. Kerberos and - Active Directory) -

Please note that Windows 9x clients are not true members of a domain -for reasons outlined in this article. Therefore the protocol for -support Windows 9x-style domain logons is completely different -from NT4 domain logons and has been officially supported for some -time.

Implementing a Samba PDC can basically be divided into 2 broad -steps.

  1. Configuring the Samba PDC -

  2. Creating machine trust accounts and joining clients - to the domain -

There are other minor details such as user profiles, system -policies, etc... However, these are not necessarily specific -to a Samba PDC as much as they are related to Windows NT networking -concepts. They will be mentioned only briefly here.


6.3. Configuring the Samba Domain Controller

The first step in creating a working Samba PDC is to -understand the parameters necessary in smb.conf. I will not -attempt to re-explain the parameters here as they are more that -adequately covered in the smb.conf -man page. For convenience, the parameters have been -linked with the actual smb.conf description.

Here is an example smb.conf for acting as a PDC:

[global]
-    ; Basic server settings
-    netbios name = POGO
-    workgroup = NARNIA
-
-    ; we should act as the domain and local master browser
-    os level = 64
-    preferred master = yes
-    domain master = yes
-    local master = yes
-    
-    ; security settings (must user security = user)
-    security = user
-    
-    ; encrypted passwords are a requirement for a PDC
-    encrypt passwords = yes
-    
-    ; support domain logons
-    domain logons = yes
-    
-    ; where to store user profiles?
-    logon path = \\%N\profiles\%u
-    
-    ; where is a user's home directory and where should it
-    ; be mounted at?
-    logon drive = H:
-    logon home = \\homeserver\%u
-    
-    ; specify a generic logon script for all users
-    ; this is a relative **DOS** path to the [netlogon] share
-    logon script = logon.cmd
-
-; necessary share for domain controller
-[netlogon]
-    path = /usr/local/samba/lib/netlogon
-    read only = yes
-    write list = ntadmin
-    
-; share for storing user profiles
-[profiles]
-    path = /export/smb/ntprofile
-    read only = no
-    create mask = 0600
-    directory mask = 0700

There are a couple of points to emphasize in the above configuration.

  • Encrypted passwords must be enabled. For more details on how - to do this, refer to ENCRYPTION.html. -

  • The server must support domain logons and a - [netlogon] share -

  • The server must be the domain master browser in order for Windows - client to locate the server as a DC. Please refer to the various - Network Browsing documentation included with this distribution for - details. -

As Samba 2.2 does not offer a complete implementation of group mapping -between Windows NT groups and Unix groups (this is really quite -complicated to explain in a short space), you should refer to the -domain admin -group smb.conf parameter for information of creating "Domain -Admins" style accounts.


6.4. Creating Machine Trust Accounts and Joining Clients to the -Domain

A machine trust account is a Samba account that is used to -authenticate a client machine (rather than a user) to the Samba -server. In Windows terminology, this is known as a "Computer -Account."

The password of a machine trust account acts as the shared secret for -secure communication with the Domain Controller. This is a security -feature to prevent an unauthorized machine with the same NetBIOS name -from joining the domain and gaining access to domain user/group -accounts. Windows NT and 2000 clients use machine trust accounts, but -Windows 9x clients do not. Hence, a Windows 9x client is never a true -member of a domain because it does not possess a machine trust -account, and thus has no shared secret with the domain controller.

A Windows PDC stores each machine trust account in the Windows -Registry. A Samba PDC, however, stores each machine trust account -in two parts, as follows: - -

  • A Samba account, stored in the same location as user - LanMan and NT password hashes (currently - smbpasswd). The Samba account - possesses and uses only the NT password hash.

  • A corresponding Unix account, typically stored in - /etc/passwd. (Future releases will alleviate the need to - create /etc/passwd entries.)

There are two ways to create machine trust accounts:

  • Manual creation. Both the Samba and corresponding - Unix account are created by hand.

  • "On-the-fly" creation. The Samba machine trust - account is automatically created by Samba at the time the client - is joined to the domain. (For security, this is the - recommended method.) The corresponding Unix account may be - created automatically or manually.


6.4.1. Manual Creation of Machine Trust Accounts

The first step in manually creating a machine trust account is to -manually create the corresponding Unix account in -/etc/passwd. This can be done using -vipw or other 'add user' command that is normally -used to create new Unix accounts. The following is an example for a -Linux based Samba server:

root# /usr/sbin/useradd -g 100 -d /dev/null -c "machine -nickname" -s /bin/false machine_name$

root# passwd -l machine_name$

On *BSD systems, this can be done using the 'chpass' utility:

root# chpass -a "machine_name$:*:101:100::0:0:Workstation machine_name:/dev/null:/sbin/nologin"

The /etc/passwd entry will list the machine name -with a "$" appended, won't have a password, will have a null shell and no -home directory. For example a machine named 'doppy' would have an -/etc/passwd entry like this:

doppy$:x:505:501:machine_nickname:/dev/null:/bin/false

Above, machine_nickname can be any -descriptive name for the client, i.e., BasementComputer. -machine_name absolutely must be the NetBIOS -name of the client to be joined to the domain. The "$" must be -appended to the NetBIOS name of the client or Samba will not recognize -this as a machine trust account.

Now that the corresponding Unix account has been created, the next step is to create -the Samba account for the client containing the well-known initial -machine trust account password. This can be done using the smbpasswd(8) command -as shown here:

root# smbpasswd -a -m machine_name

where machine_name is the machine's NetBIOS -name. The RID of the new machine account is generated from the UID of -the corresponding Unix account.

Join the client to the domain immediately
 

Manually creating a machine trust account using this method is the - equivalent of creating a machine trust account on a Windows NT PDC using - the "Server Manager". From the time at which the account is created - to the time which the client joins the domain and changes the password, - your domain is vulnerable to an intruder joining your domain using a - a machine with the same NetBIOS name. A PDC inherently trusts - members of the domain and will serve out a large degree of user - information to such clients. You have been warned! -


6.4.2. "On-the-Fly" Creation of Machine Trust Accounts

The second (and recommended) way of creating machine trust accounts is -simply to allow the Samba server to create them as needed when the client -is joined to the domain.

Since each Samba machine trust account requires a corresponding -Unix account, a method for automatically creating the -Unix account is usually supplied; this requires configuration of the -add user script -option in smb.conf. This -method is not required, however; corresponding Unix accounts may also -be created manually.

Below is an example for a RedHat 6.2 Linux system.

[global]
-   # <...remainder of parameters...>
-   add user script = /usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -M %u 


6.4.3. Joining the Client to the Domain

The procedure for joining a client to the domain varies with the -version of Windows.

  • Windows 2000

    When the user elects to join the client to a domain, Windows prompts for - an account and password that is privileged to join the domain. A - Samba administrative account (i.e., a Samba account that has root - privileges on the Samba server) must be entered here; the - operation will fail if an ordinary user account is given. - The password for this account should be - set to a different password than the associated - /etc/passwd entry, for security - reasons.

    The session key of the Samba administrative account acts as an - encryption key for setting the password of the machine trust - account. The machine trust account will be created on-the-fly, or - updated if it already exists.

  • Windows NT

    If the machine trust account was created manually, on the - Identification Changes menu enter the domain name, but do not - check the box "Create a Computer Account in the Domain." In this case, - the existing machine trust account is used to join the machine to - the domain.

    If the machine trust account is to be created - on-the-fly, on the Identification Changes menu enter the domain - name, and check the box "Create a Computer Account in the Domain." In - this case, joining the domain proceeds as above for Windows 2000 - (i.e., you must supply a Samba administrative account when - prompted).


6.5. Common Problems and Errors

  • I cannot include a '$' in a machine name. -

    A 'machine name' in (typically) /etc/passwd - of the machine name with a '$' appended. FreeBSD (and other BSD - systems?) won't create a user with a '$' in their name. -

    The problem is only in the program used to make the entry, once - made, it works perfectly. So create a user without the '$' and - use vipw to edit the entry, adding the '$'. Or create - the whole entry with vipw if you like, make sure you use a - unique User ID ! -

  • I get told "You already have a connection to the Domain...." - or "Cannot join domain, the credentials supplied conflict with an - existing set.." when creating a machine trust account. -

    This happens if you try to create a machine trust account from the - machine itself and already have a connection (e.g. mapped drive) - to a share (or IPC$) on the Samba PDC. The following command - will remove all network drive connections: -

    C:\WINNT\> net use * /d -

    Further, if the machine is a already a 'member of a workgroup' that - is the same name as the domain you are joining (bad idea) you will - get this message. Change the workgroup name to something else, it - does not matter what, reboot, and try again. -

  • The system can not log you on (C000019B).... -

    I joined the domain successfully but after upgrading - to a newer version of the Samba code I get the message, "The system - can not log you on (C000019B), Please try a gain or consult your - system administrator" when attempting to logon. -

    This occurs when the domain SID stored in - private/WORKGROUP.SID is - changed. For example, you remove the file and smbd automatically - creates a new one. Or you are swapping back and forth between - versions 2.0.7, TNG and the HEAD branch code (not recommended). The - only way to correct the problem is to restore the original domain - SID or remove the domain client from the domain and rejoin. -

  • The machine trust account for this computer either does not - exist or is not accessible. -

    When I try to join the domain I get the message "The machine account - for this computer either does not exist or is not accessible". What's - wrong? -

    This problem is caused by the PDC not having a suitable machine trust account. - If you are using the add user script method to create - accounts then this would indicate that it has not worked. Ensure the domain - admin user system is working. -

    Alternatively if you are creating account entries manually then they - have not been created correctly. Make sure that you have the entry - correct for the machine trust account in smbpasswd file on the Samba PDC. - If you added the account using an editor rather than using the smbpasswd - utility, make sure that the account name is the machine NetBIOS name - with a '$' appended to it ( i.e. computer_name$ ). There must be an entry - in both /etc/passwd and the smbpasswd file. Some people have reported - that inconsistent subnet masks between the Samba server and the NT - client have caused this problem. Make sure that these are consistent - for both client and server. -

  • When I attempt to login to a Samba Domain from a NT4/W2K workstation, - I get a message about my account being disabled. -

    This problem is caused by a PAM related bug in Samba 2.2.0. This bug is - fixed in 2.2.1. Other symptoms could be unaccessible shares on - NT/W2K member servers in the domain or the following error in your smbd.log: - passdb/pampass.c:pam_account(268) PAM: UNKNOWN ERROR for User: %user% -

    At first be ensure to enable the useraccounts with smbpasswd -e - %user%, this is normally done, when you create an account. -

    In order to work around this problem in 2.2.0, configure the - account control flag in - /etc/pam.d/samba file as follows: -

    	account required        pam_permit.so
    -	

    If you want to remain backward compatibility to samba 2.0.x use - pam_permit.so, it's also possible to use - pam_pwdb.so. There are some bugs if you try to - use pam_unix.so, if you need this, be ensure to use - the most recent version of this file. -


6.6. System Policies and Profiles

Much of the information necessary to implement System Policies and -Roving User Profiles in a Samba domain is the same as that for -implementing these same items in a Windows NT 4.0 domain. -You should read the white paper Implementing -Profiles and Policies in Windows NT 4.0 available from Microsoft.

Here are some additional details:

  • What about Windows NT Policy Editor? -

    To create or edit ntconfig.pol you must use - the NT Server Policy Editor, poledit.exe which - is included with NT Server but not NT Workstation. - There is a Policy Editor on a NTws - but it is not suitable for creating Domain Policies. - Further, although the Windows 95 - Policy Editor can be installed on an NT Workstation/Server, it will not - work with NT policies because the registry key that are set by the policy templates. - However, the files from the NT Server will run happily enough on an NTws. - You need poledit.exe, common.adm and winnt.adm. It is convenient - to put the two *.adm files in c:\winnt\inf which is where - the binary will look for them unless told otherwise. Note also that that - directory is 'hidden'. -

    The Windows NT policy editor is also included with the Service Pack 3 (and - later) for Windows NT 4.0. Extract the files using servicepackname /x, - i.e. that's Nt4sp6ai.exe /x for service pack 6a. The policy editor, - poledit.exe and the associated template files (*.adm) should - be extracted as well. It is also possible to downloaded the policy template - files for Office97 and get a copy of the policy editor. Another possible - location is with the Zero Administration Kit available for download from Microsoft. -

  • Can Win95 do Policies? -

    Install the group policy handler for Win9x to pick up group - policies. Look on the Win98 CD in \tools\reskit\netadmin\poledit. - Install group policies on a Win9x client by double-clicking - grouppol.inf. Log off and on again a couple of - times and see if Win98 picks up group policies. Unfortunately this needs - to be done on every Win9x machine that uses group policies.... -

    If group policies don't work one reports suggests getting the updated - (read: working) grouppol.dll for Windows 9x. The group list is grabbed - from /etc/group. -

  • How do I get 'User Manager' and 'Server Manager' -

    Since I don't need to buy an NT Server CD now, how do I get - the 'User Manager for Domains', the 'Server Manager'? -

    Microsoft distributes a version of these tools called nexus for - installation on Windows 95 systems. The tools set includes -

    • Server Manager

    • User Manager for Domains

    • Event Viewer

    Click here to download the archived file ftp://ftp.microsoft.com/Softlib/MSLFILES/NEXUS.EXE -

    The Windows NT 4.0 version of the 'User Manager for - Domains' and 'Server Manager' are available from Microsoft via ftp - from ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE -


6.7. What other help can I get?

There are many sources of information available in the form -of mailing lists, RFC's and documentation. The docs that come -with the samba distribution contain very good explanations of -general SMB topics such as browsing.

  • What are some diagnostics tools I can use to debug the domain logon - process and where can I find them? -

    One of the best diagnostic tools for debugging problems is Samba itself. - You can use the -d option for both smbd and nmbd to specify what - 'debug level' at which to run. See the man pages on smbd, nmbd and - smb.conf for more information on debugging options. The debug - level can range from 1 (the default) to 10 (100 for debugging passwords). -

    Another helpful method of debugging is to compile samba using the - gcc -g flag. This will include debug - information in the binaries and allow you to attach gdb to the - running smbd / nmbd process. In order to attach gdb to an smbd - process for an NT workstation, first get the workstation to make the - connection. Pressing ctrl-alt-delete and going down to the domain box - is sufficient (at least, on the first time you join the domain) to - generate a 'LsaEnumTrustedDomains'. Thereafter, the workstation - maintains an open connection, and therefore there will be an smbd - process running (assuming that you haven't set a really short smbd - idle timeout) So, in between pressing ctrl alt delete, and actually - typing in your password, you can gdb attach and continue. -

    Some useful samba commands worth investigating: -

    • testparam | more

    • smbclient -L //{netbios name of server}

    An SMB enabled version of tcpdump is available from - http://www.tcpdup.org/. - Ethereal, another good packet sniffer for Unix and Win32 - hosts, can be downloaded from http://www.ethereal.com. -

    For tracing things on the Microsoft Windows NT, Network Monitor - (aka. netmon) is available on the Microsoft Developer Network CD's, - the Windows NT Server install CD and the SMS CD's. The version of - netmon that ships with SMS allows for dumping packets between any two - computers (i.e. placing the network interface in promiscuous mode). - The version on the NT Server install CD will only allow monitoring - of network traffic directed to the local NT box and broadcasts on the - local subnet. Be aware that Ethereal can read and write netmon - formatted files. -

  • How do I install 'Network Monitor' on an NT Workstation - or a Windows 9x box? -

    Installing netmon on an NT workstation requires a couple - of steps. The following are for installing Netmon V4.00.349, which comes - with Microsoft Windows NT Server 4.0, on Microsoft Windows NT - Workstation 4.0. The process should be similar for other version of - Windows NT / Netmon. You will need both the Microsoft Windows - NT Server 4.0 Install CD and the Workstation 4.0 Install CD. -

    Initially you will need to install 'Network Monitor Tools and Agent' - on the NT Server. To do this -

    • Goto Start - Settings - Control Panel - - Network - Services - Add

    • Select the 'Network Monitor Tools and Agent' and - click on 'OK'.

    • Click 'OK' on the Network Control Panel. -

    • Insert the Windows NT Server 4.0 install CD - when prompted.

    At this point the Netmon files should exist in - %SYSTEMROOT%\System32\netmon\*.*. - Two subdirectories exist as well, parsers\ - which contains the necessary DLL's for parsing the netmon packet - dump, and captures\. -

    In order to install the Netmon tools on an NT Workstation, you will - first need to install the 'Network Monitor Agent' from the Workstation - install CD. -

    • Goto Start - Settings - Control Panel - - Network - Services - Add

    • Select the 'Network Monitor Agent' and click - on 'OK'.

    • Click 'OK' on the Network Control Panel. -

    • Insert the Windows NT Workstation 4.0 install - CD when prompted.

    Now copy the files from the NT Server in %SYSTEMROOT%\System32\netmon\*.* - to %SYSTEMROOT%\System32\netmon\*.* on the Workstation and set - permissions as you deem appropriate for your site. You will need - administrative rights on the NT box to run netmon. -

    To install Netmon on a Windows 9x box install the network monitor agent - from the Windows 9x CD (\admin\nettools\netmon). There is a readme - file located with the netmon driver files on the CD if you need - information on how to do this. Copy the files from a working - Netmon installation. -

  • The following is a list if helpful URLs and other links: -

  • How do I get help from the mailing lists? -

    There are a number of Samba related mailing lists. Go to http://samba.org, click on your nearest mirror - and then click on Support and then click on Samba related mailing lists. -

    For questions relating to Samba TNG go to - http://www.samba-tng.org/ - It has been requested that you don't post questions about Samba-TNG to the - main stream Samba lists.

    If you post a message to one of the lists please observe the following guide lines : -

    • Always remember that the developers are volunteers, they are - not paid and they never guarantee to produce a particular feature at - a particular time. Any time lines are 'best guess' and nothing more. -

    • Always mention what version of samba you are using and what - operating system its running under. You should probably list the - relevant sections of your smb.conf file, at least the options - in [global] that affect PDC support.

    • In addition to the version, if you obtained Samba via - CVS mention the date when you last checked it out.

    • Try and make your question clear and brief, lots of long, - convoluted questions get deleted before they are completely read ! - Don't post html encoded messages (if you can select colour or font - size its html).

    • If you run one of those nifty 'I'm on holidays' things when - you are away, make sure its configured to not answer mailing lists. -

    • Don't cross post. Work out which is the best list to post to - and see what happens, i.e. don't post to both samba-ntdom and samba-technical. - Many people active on the lists subscribe to more - than one list and get annoyed to see the same message two or more times. - Often someone will see a message and thinking it would be better dealt - with on another, will forward it on for you.

    • You might include partial - log files written at a debug level set to as much as 20. - Please don't send the entire log but enough to give the context of the - error messages.

    • (Possibly) If you have a complete netmon trace ( from the opening of - the pipe to the error ) you can send the *.CAP file as well.

    • Please think carefully before attaching a document to an email. - Consider pasting the relevant parts into the body of the message. The samba - mailing lists go to a huge number of people, do they all need a copy of your - smb.conf in their attach directory?

  • How do I get off the mailing lists? -

    To have your name removed from a samba mailing list, go to the - same place you went to to get on it. Go to http://lists.samba.org, - click on your nearest mirror and then click on Support and - then click on Samba related mailing lists. Or perhaps see - here -

    Please don't post messages to the list asking to be removed, you will just - be referred to the above address (unless that process failed in some way...) -


6.8. Domain Control for Windows 9x/ME

The following section contains much of the original -DOMAIN.txt file previously included with Samba. Much of -the material is based on what went into the book Special -Edition, Using Samba, by Richard Sharpe.

A domain and a workgroup are exactly the same thing in terms of network -browsing. The difference is that a distributable authentication -database is associated with a domain, for secure login access to a -network. Also, different access rights can be granted to users if they -successfully authenticate against a domain logon server (NT server and -other systems based on NT server support this, as does at least Samba TNG now).

The SMB client logging on to a domain has an expectation that every other -server in the domain should accept the same authentication information. -Network browsing functionality of domains and workgroups is -identical and is explained in BROWSING.txt. It should be noted, that browsing -is totally orthogonal to logon support.

Issues related to the single-logon network model are discussed in this -section. Samba supports domain logons, network logon scripts, and user -profiles for MS Windows for workgroups and MS Windows 9X/ME clients -which will be the focus of this section.

When an SMB client in a domain wishes to logon it broadcast requests for a -logon server. The first one to reply gets the job, and validates its -password using whatever mechanism the Samba administrator has installed. -It is possible (but very stupid) to create a domain where the user -database is not shared between servers, i.e. they are effectively workgroup -servers advertising themselves as participating in a domain. This -demonstrates how authentication is quite different from but closely -involved with domains.

Using these features you can make your clients verify their logon via -the Samba server; make clients run a batch file when they logon to -the network and download their preferences, desktop and start menu.

Before launching into the configuration instructions, it is -worthwhile lookingat how a Windows 9x/ME client performs a logon:

  1. The client broadcasts (to the IP broadcast address of the subnet it is in) - a NetLogon request. This is sent to the NetBIOS name DOMAIN<1c> at the - NetBIOS layer. The client chooses the first response it receives, which - contains the NetBIOS name of the logon server to use in the format of - \\SERVER. -

  2. The client then connects to that server, logs on (does an SMBsessetupX) and - then connects to the IPC$ share (using an SMBtconX). -

  3. The client then does a NetWkstaUserLogon request, which retrieves the name - of the user's logon script. -

  4. The client then connects to the NetLogon share and searches for this - and if it is found and can be read, is retrieved and executed by the client. - After this, the client disconnects from the NetLogon share. -

  5. The client then sends a NetUserGetInfo request to the server, to retrieve - the user's home share, which is used to search for profiles. Since the - response to the NetUserGetInfo request does not contain much more - the user's home share, profiles for Win9X clients MUST reside in the user - home directory. -

  6. The client then connects to the user's home share and searches for the - user's profile. As it turns out, you can specify the user's home share as - a sharename and path. For example, \\server\fred\.profile. - If the profiles are found, they are implemented. -

  7. The client then disconnects from the user's home share, and reconnects to - the NetLogon share and looks for CONFIG.POL, the policies file. If this is - found, it is read and implemented. -


6.8.1. Configuration Instructions: Network Logons

The main difference between a PDC and a Windows 9x logon -server configuration is that

  • Password encryption is not required for a Windows 9x logon server.

  • Windows 9x/ME clients do not possess machine trust accounts.

Therefore, a Samba PDC will also act as a Windows 9x logon -server.

security mode and master browsers
 

There are a few comments to make in order to tie up some -loose ends. There has been much debate over the issue of whether -or not it is ok to configure Samba as a Domain Controller in security -modes other than USER. The only security mode -which will not work due to technical reasons is SHARE -mode security. DOMAIN and SERVER -mode security is really just a variation on SMB user level security.

Actually, this issue is also closely tied to the debate on whether -or not Samba must be the domain master browser for its workgroup -when operating as a DC. While it may technically be possible -to configure a server as such (after all, browsing and domain logons -are two distinctly different functions), it is not a good idea to -so. You should remember that the DC must register the DOMAIN#1b NetBIOS -name. This is the name used by Windows clients to locate the DC. -Windows clients do not distinguish between the DC and the DMB. -For this reason, it is very wise to configure the Samba DC as the DMB.

Now back to the issue of configuring a Samba DC to use a mode other -than "security = user". If a Samba host is configured to use -another SMB server or DC in order to validate user connection -requests, then it is a fact that some other machine on the network -(the "password server") knows more about user than the Samba host. -99% of the time, this other host is a domain controller. Now -in order to operate in domain mode security, the "workgroup" parameter -must be set to the name of the Windows NT domain (which already -has a domain controller, right?)

Therefore configuring a Samba box as a DC for a domain that -already by definition has a PDC is asking for trouble. -Therefore, you should always configure the Samba DC to be the DMB -for its domain.


6.8.2. Configuration Instructions: Setting up Roaming User Profiles

NOTE! Roaming profiles support is different -for Win9X and WinNT.

Before discussing how to configure roaming profiles, it is useful to see how -Win9X and WinNT clients implement these features.

Win9X clients send a NetUserGetInfo request to the server to get the user's -profiles location. However, the response does not have room for a separate -profiles location field, only the user's home share. This means that Win9X -profiles are restricted to being in the user's home directory.

WinNT clients send a NetSAMLogon RPC request, which contains many fields, -including a separate field for the location of the user's profiles. -This means that support for profiles is different for Win9X and WinNT.


6.8.2.1. Windows NT Configuration

To support WinNT clients, in the [global] section of smb.conf set the -following (for example):

logon path = \\profileserver\profileshare\profilepath\%U\moreprofilepath

The default for this option is \\%N\%U\profile, namely -\\sambaserver\username\profile. The \\N%\%U service is created -automatically by the [homes] service. -If you are using a samba server for the profiles, you _must_ make the -share specified in the logon path browseable.

[lkcl 26aug96 - we have discovered a problem where Windows clients can -maintain a connection to the [homes] share in between logins. The -[homes] share must NOT therefore be used in a profile path.]


6.8.2.2. Windows 9X Configuration

To support Win9X clients, you must use the "logon home" parameter. Samba has -now been fixed so that "net use/home" now works as well, and it, too, relies -on the "logon home" parameter.

By using the logon home parameter, you are restricted to putting Win9X -profiles in the user's home directory. But wait! There is a trick you -can use. If you set the following in the [global] section of your -smb.conf file:

logon home = \\%L\%U\.profiles

then your Win9X clients will dutifully put their clients in a subdirectory -of your home directory called .profiles (thus making them hidden).

Not only that, but 'net use/home' will also work, because of a feature in -Win9X. It removes any directory stuff off the end of the home directory area -and only uses the server and share portion. That is, it looks like you -specified \\%L\%U for "logon home".


6.8.2.3. Win9X and WinNT Configuration

You can support profiles for both Win9X and WinNT clients by setting both the -"logon home" and "logon path" parameters. For example:

logon home = \\%L\%U\.profiles
-logon path = \\%L\profiles\%U

I have not checked what 'net use /home' does on NT when "logon home" is -set as above.


6.8.2.4. Windows 9X Profile Setup

When a user first logs in on Windows 9X, the file user.DAT is created, -as are folders "Start Menu", "Desktop", "Programs" and "Nethood". -These directories and their contents will be merged with the local -versions stored in c:\windows\profiles\username on subsequent logins, -taking the most recent from each. You will need to use the [global] -options "preserve case = yes", "short preserve case = yes" and -"case sensitive = no" in order to maintain capital letters in shortcuts -in any of the profile folders.

The user.DAT file contains all the user's preferences. If you wish to -enforce a set of preferences, rename their user.DAT file to user.MAN, -and deny them write access to this file.

  1. On the Windows 95 machine, go to Control Panel | Passwords and - select the User Profiles tab. Select the required level of - roaming preferences. Press OK, but do _not_ allow the computer - to reboot. -

  2. On the Windows 95 machine, go to Control Panel | Network | - Client for Microsoft Networks | Preferences. Select 'Log on to - NT Domain'. Then, ensure that the Primary Logon is 'Client for - Microsoft Networks'. Press OK, and this time allow the computer - to reboot. -

Under Windows 95, Profiles are downloaded from the Primary Logon. -If you have the Primary Logon as 'Client for Novell Networks', then -the profiles and logon script will be downloaded from your Novell -Server. If you have the Primary Logon as 'Windows Logon', then the -profiles will be loaded from the local machine - a bit against the -concept of roaming profiles, if you ask me.

You will now find that the Microsoft Networks Login box contains -[user, password, domain] instead of just [user, password]. Type in -the samba server's domain name (or any other domain known to exist, -but bear in mind that the user will be authenticated against this -domain and profiles downloaded from it, if that domain logon server -supports it), user name and user's password.

Once the user has been successfully validated, the Windows 95 machine -will inform you that 'The user has not logged on before' and asks you -if you wish to save the user's preferences? Select 'yes'.

Once the Windows 95 client comes up with the desktop, you should be able -to examine the contents of the directory specified in the "logon path" -on the samba server and verify that the "Desktop", "Start Menu", -"Programs" and "Nethood" folders have been created.

These folders will be cached locally on the client, and updated when -the user logs off (if you haven't made them read-only by then :-). -You will find that if the user creates further folders or short-cuts, -that the client will merge the profile contents downloaded with the -contents of the profile directory already on the local client, taking -the newest folders and short-cuts from each set.

If you have made the folders / files read-only on the samba server, -then you will get errors from the w95 machine on logon and logout, as -it attempts to merge the local and the remote profile. Basically, if -you have any errors reported by the w95 machine, check the Unix file -permissions and ownership rights on the profile directory contents, -on the samba server.

If you have problems creating user profiles, you can reset the user's -local desktop cache, as shown below. When this user then next logs in, -they will be told that they are logging in "for the first time".

  1. instead of logging in under the [user, password, domain] dialog, - press escape. -

  2. run the regedit.exe program, and look in: -

    HKEY_LOCAL_MACHINE\Windows\CurrentVersion\ProfileList -

    you will find an entry, for each user, of ProfilePath. Note the - contents of this key (likely to be c:\windows\profiles\username), - then delete the key ProfilePath for the required user. -

    [Exit the registry editor]. -

  3. WARNING - before deleting the contents of the - directory listed in - the ProfilePath (this is likely to be c:\windows\profiles\username), - ask them if they have any important files stored on their desktop - or in their start menu. delete the contents of the directory - ProfilePath (making a backup if any of the files are needed). -

    This will have the effect of removing the local (read-only hidden - system file) user.DAT in their profile directory, as well as the - local "desktop", "nethood", "start menu" and "programs" folders. -

  4. search for the user's .PWL password-caching file in the c:\windows - directory, and delete it. -

  5. log off the windows 95 client. -

  6. check the contents of the profile path (see "logon path" described - above), and delete the user.DAT or user.MAN file for the user, - making a backup if required. -

If all else fails, increase samba's debug log levels to between 3 and 10, -and / or run a packet trace program such as tcpdump or netmon.exe, and -look for any error reports.

If you have access to an NT server, then first set up roaming profiles -and / or netlogons on the NT server. Make a packet trace, or examine -the example packet traces provided with NT server, and see what the -differences are with the equivalent samba trace.


6.8.2.5. Windows NT Workstation 4.0

When a user first logs in to a Windows NT Workstation, the profile -NTuser.DAT is created. The profile location can be now specified -through the "logon path" parameter.

[lkcl 10aug97 - i tried setting the path to -\\samba-server\homes\profile, and discovered that this fails because -a background process maintains the connection to the [homes] share -which does _not_ close down in between user logins. you have to -have \\samba-server\%L\profile, where user is the username created -from the [homes] share].

There is a parameter that is now available for use with NT Profiles: -"logon drive". This should be set to "h:" or any other drive, and -should be used in conjunction with the new "logon home" parameter.

The entry for the NT 4.0 profile is a _directory_ not a file. The NT -help on profiles mentions that a directory is also created with a .PDS -extension. The user, while logging in, must have write permission to -create the full profile path (and the folder with the .PDS extension) -[lkcl 10aug97 - i found that the creation of the .PDS directory failed, -and had to create these manually for each user, with a shell script. -also, i presume, but have not tested, that the full profile path must -be browseable just as it is for w95, due to the manner in which they -attempt to create the full profile path: test existence of each path -component; create path component].

In the profile directory, NT creates more folders than 95. It creates -"Application Data" and others, as well as "Desktop", "Nethood", -"Start Menu" and "Programs". The profile itself is stored in a file -NTuser.DAT. Nothing appears to be stored in the .PDS directory, and -its purpose is currently unknown.

You can use the System Control Panel to copy a local profile onto -a samba server (see NT Help on profiles: it is also capable of firing -up the correct location in the System Control Panel for you). The -NT Help file also mentions that renaming NTuser.DAT to NTuser.MAN -turns a profile into a mandatory one.

[lkcl 10aug97 - i notice that NT Workstation tells me that it is -downloading a profile from a slow link. whether this is actually the -case, or whether there is some configuration issue, as yet unknown, -that makes NT Workstation _think_ that the link is a slow one is a -matter to be resolved].

[lkcl 20aug97 - after samba digest correspondence, one user found, and -another confirmed, that profiles cannot be loaded from a samba server -unless "security = user" and "encrypt passwords = yes" (see the file -ENCRYPTION.txt) or "security = server" and "password server = ip.address. -of.yourNTserver" are used. Either of these options will allow the NT -workstation to access the samba server using LAN manager encrypted -passwords, without the user intervention normally required by NT -workstation for clear-text passwords].

[lkcl 25aug97 - more comments received about NT profiles: the case of -the profile _matters_. the file _must_ be called NTuser.DAT or, for -a mandatory profile, NTuser.MAN].


6.8.2.6. Windows NT Server

There is nothing to stop you specifying any path that you like for the -location of users' profiles. Therefore, you could specify that the -profile be stored on a samba server, or any other SMB server, as long as -that SMB server supports encrypted passwords.


6.8.2.7. Sharing Profiles between W95 and NT Workstation 4.0

Potentially outdated or incorrect material follows
 

I think this is all bogus, but have not deleted it. (Richard Sharpe)

The default logon path is \\%N\%U. NT Workstation will attempt to create -a directory "\\samba-server\username.PDS" if you specify the logon path -as "\\samba-server\username" with the NT User Manager. Therefore, you -will need to specify (for example) "\\samba-server\username\profile". -NT 4.0 will attempt to create "\\samba-server\username\profile.PDS", which -is more likely to succeed.

If you then want to share the same Start Menu / Desktop with W95, you will -need to specify "logon path = \\samba-server\username\profile" [lkcl 10aug97 -this has its drawbacks: i created a shortcut to telnet.exe, which attempts -to run from the c:\winnt\system32 directory. this directory is obviously -unlikely to exist on a Win95-only host].

If you have this set up correctly, you will find separate user.DAT and -NTuser.DAT files in the same profile directory.

[lkcl 25aug97 - there are some issues to resolve with downloading of -NT profiles, probably to do with time/date stamps. i have found that -NTuser.DAT is never updated on the workstation after the first time that -it is copied to the local workstation profile directory. this is in -contrast to w95, where it _does_ transfer / update profiles correctly].


6.9. DOMAIN_CONTROL.txt : Windows NT Domain Control & Samba

Possibly Outdated Material
 

This appendix was originally authored by John H Terpstra of - the Samba Team and is included here for posterity. -

NOTE : -The term "Domain Controller" and those related to it refer to one specific -method of authentication that can underly an SMB domain. Domain Controllers -prior to Windows NT Server 3.1 were sold by various companies and based on -private extensions to the LAN Manager 2.1 protocol. Windows NT introduced -Microsoft-specific ways of distributing the user authentication database. -See DOMAIN.txt for examples of how Samba can participate in or create -SMB domains based on shared authentication database schemes other than the -Windows NT SAM.

Windows NT Server can be installed as either a plain file and print server -(WORKGROUP workstation or server) or as a server that participates in Domain -Control (DOMAIN member, Primary Domain controller or Backup Domain controller). -The same is true for OS/2 Warp Server, Digital Pathworks and other similar -products, all of which can participate in Domain Control along with Windows NT.

To many people these terms can be confusing, so let's try to clear the air.

Every Windows NT system (workstation or server) has a registry database. -The registry contains entries that describe the initialization information -for all services (the equivalent of Unix Daemons) that run within the Windows -NT environment. The registry also contains entries that tell application -software where to find dynamically loadable libraries that they depend upon. -In fact, the registry contains entries that describes everything that anything -may need to know to interact with the rest of the system.

The registry files can be located on any Windows NT machine by opening a -command prompt and typing:

C:\WINNT\> dir %SystemRoot%\System32\config

The environment variable %SystemRoot% value can be obtained by typing:

C:\WINNT>echo %SystemRoot%

The active parts of the registry that you may want to be familiar with are -the files called: default, system, software, sam and security.

In a domain environment, Microsoft Windows NT domain controllers participate -in replication of the SAM and SECURITY files so that all controllers within -the domain have an exactly identical copy of each.

The Microsoft Windows NT system is structured within a security model that -says that all applications and services must authenticate themselves before -they can obtain permission from the security manager to do what they set out -to do.

The Windows NT User database also resides within the registry. This part of -the registry contains the user's security identifier, home directory, group -memberships, desktop profile, and so on.

Every Windows NT system (workstation as well as server) will have its own -registry. Windows NT Servers that participate in Domain Security control -have a database that they share in common - thus they do NOT own an -independent full registry database of their own, as do Workstations and -plain Servers.

The User database is called the SAM (Security Access Manager) database and -is used for all user authentication as well as for authentication of inter- -process authentication (i.e. to ensure that the service action a user has -requested is permitted within the limits of that user's privileges).

The Samba team have produced a utility that can dump the Windows NT SAM into -smbpasswd format: see ENCRYPTION.txt for information on smbpasswd and -/pub/samba/pwdump on your nearest Samba mirror for the utility. This -facility is useful but cannot be easily used to implement SAM replication -to Samba systems.

Windows for Workgroups, Windows 95, and Windows NT Workstations and Servers -can participate in a Domain security system that is controlled by Windows NT -servers that have been correctly configured. Almost every domain will have -ONE Primary Domain Controller (PDC). It is desirable that each domain will -have at least one Backup Domain Controller (BDC).

The PDC and BDCs then participate in replication of the SAM database so that -each Domain Controlling participant will have an up to date SAM component -within its registry.


Chapter 7. How to Act as a Backup Domain Controller in a Purely Samba Controlled Domain

7.1. Prerequisite Reading

Before you continue reading in this chapter, please make sure -that you are comfortable with configuring a Samba PDC -as described in the Samba-PDC-HOWTO.


7.2. Background

What is a Domain Controller? It is a machine that is able to answer -logon requests from workstations in a Windows NT Domain. Whenever a -user logs into a Windows NT Workstation, the workstation connects to a -Domain Controller and asks him whether the username and password the -user typed in is correct. The Domain Controller replies with a lot of -information about the user, for example the place where the users -profile is stored, the users full name of the user. All this -information is stored in the NT user database, the so-called SAM.

There are two kinds of Domain Controller in a NT 4 compatible Domain: -A Primary Domain Controller (PDC) and one or more Backup Domain -Controllers (BDC). The PDC contains the master copy of the -SAM. Whenever the SAM has to change, for example when a user changes -his password, this change has to be done on the PDC. A Backup Domain -Controller is a machine that maintains a read-only copy of the -SAM. This way it is able to reply to logon requests and authenticate -users in case the PDC is not available. During this time no changes to -the SAM are possible. Whenever changes to the SAM are done on the PDC, -all BDC receive the changes from the PDC.

Since version 2.2 Samba officially supports domain logons for all -current Windows Clients, including Windows 2000 and XP. This text -assumes the domain to be named SAMBA. To be able to act as a PDC, some -parameters in the [global]-section of the smb.conf have to be set:

workgroup = SAMBA
-domain master = yes
-domain logons = yes

Several other things like a [homes] and a [netlogon] share also may be -set along with settings for the profile path, the users home drive and -others. This will not be covered in this document.


7.3. What qualifies a Domain Controller on the network?

Every machine that is a Domain Controller for the domain SAMBA has to -register the NetBIOS group name SAMBA#1c with the WINS server and/or -by broadcast on the local network. The PDC also registers the unique -NetBIOS name SAMBA#1b with the WINS server. The name type #1b is -normally reserved for the domain master browser, a role that has -nothing to do with anything related to authentication, but the -Microsoft Domain implementation requires the domain master browser to -be on the same machine as the PDC.


7.3.1. How does a Workstation find its domain controller?

A NT workstation in the domain SAMBA that wants a local user to be -authenticated has to find the domain controller for SAMBA. It does -this by doing a NetBIOS name query for the group name SAMBA#1c. It -assumes that each of the machines it gets back from the queries is a -domain controller and can answer logon requests. To not open security -holes both the workstation and the selected (TODO: How is the DC -chosen) domain controller authenticate each other. After that the -workstation sends the user's credentials (his name and password) to -the domain controller, asking for approval.


7.3.2. When is the PDC needed?

Whenever a user wants to change his password, this has to be done on -the PDC. To find the PDC, the workstation does a NetBIOS name query -for SAMBA#1b, assuming this machine maintains the master copy of the -SAM. The workstation contacts the PDC, both mutually authenticate and -the password change is done.


7.4. Can Samba be a Backup Domain Controller?

With version 2.2, no. The native NT SAM replication protocols have -not yet been fully implemented. The Samba Team is working on -understanding and implementing the protocols, but this work has not -been finished for version 2.2.

Can I get the benefits of a BDC with Samba? Yes. The main reason for -implementing a BDC is availability. If the PDC is a Samba machine, -a second Samba machine can be set up to -service logon requests whenever the PDC is down.


7.5. How do I set up a Samba BDC?

Several things have to be done:

  • The domain SID has to be the same on the PDC and the BDC. This used to -be stored in the file private/MACHINE.SID. This file is not created -anymore since Samba 2.2.5 or even earlier. Nowadays the domain SID is -stored in the file private/secrets.tdb. Simply copying the secrets.tdb -from the PDC to the BDC does not work, as the BDC would -generate a new SID for itself and override the domain SID with this -new BDC SID.

    To retrieve the domain SID from the PDC or an existing BDC and store it in the -secrets.tdb, execute 'net rpc getsid' on the BDC.

  • The Unix user database has to be synchronized from the PDC to the -BDC. This means that both the /etc/passwd and /etc/group have to be -replicated from the PDC to the BDC. This can be done manually -whenever changes are made, or the PDC is set up as a NIS master -server and the BDC as a NIS slave server. To set up the BDC as a -mere NIS client would not be enough, as the BDC would not be able to -access its user database in case of a PDC failure.

  • The Samba password database in the file private/smbpasswd has to be -replicated from the PDC to the BDC. This is a bit tricky, see the -next section.

  • Any netlogon share has to be replicated from the PDC to the -BDC. This can be done manually whenever login scripts are changed, -or it can be done automatically together with the smbpasswd -synchronization.

Finally, the BDC has to be found by the workstations. This can be done -by setting

workgroup = samba
-domain master = no
-domain logons = yes

in the [global]-section of the smb.conf of the BDC. This makes the BDC -only register the name SAMBA#1c with the WINS server. This is no -problem as the name SAMBA#1c is a NetBIOS group name that is meant to -be registered by more than one machine. The parameter 'domain master = -no' forces the BDC not to register SAMBA#1b which as a unique NetBIOS -name is reserved for the Primary Domain Controller.


7.5.1. How do I replicate the smbpasswd file?

Replication of the smbpasswd file is sensitive. It has to be done -whenever changes to the SAM are made. Every user's password change is -done in the smbpasswd file and has to be replicated to the BDC. So -replicating the smbpasswd file very often is necessary.

As the smbpasswd file contains plain text password equivalents, it -must not be sent unencrypted over the wire. The best way to set up -smbpasswd replication from the PDC to the BDC is to use the utility -rsync. rsync can use ssh as a transport. ssh itself can be set up to -accept *only* rsync transfer without requiring the user to type a -password.


Chapter 8. Samba as a ADS domain member

This is a VERY ROUGH guide to setting up the current (November 2001) -pre-alpha version of Samba 3.0 with kerberos authentication against a -Windows2000 KDC. The procedures listed here are likely to change as -the code develops.

Pieces you need before you begin: -

a Windows 2000 server.
samba 3.0 or higher.
the MIT kerberos development libraries (either install from the above sources or use a package). The heimdal libraries will not work.
the OpenLDAP development libraries.


8.1. Installing the required packages for Debian

On Debian you need to install the following packages: -

libkrb5-dev
krb5-user


8.2. Installing the required packages for RedHat

On RedHat this means you should have at least: -

krb5-workstation (for kinit)
krb5-libs (for linking with)
krb5-devel (because you are compiling from source)

in addition to the standard development environment.

Note that these are not standard on a RedHat install, and you may need -to get them off CD2.


8.3. Compile Samba

If your kerberos libraries are in a non-standard location then - remember to add the configure option --with-krb5=DIR.

After you run configure make sure that include/config.h contains - lines like this:

#define HAVE_KRB5 1
-#define HAVE_LDAP 1

If it doesn't then configure did not find your krb5 libraries or - your ldap libraries. Look in config.log to figure out why and fix - it.

Then compile and install Samba as usual. You must use at least the - following 3 options in smb.conf:

  realm = YOUR.KERBEROS.REALM
-  ads server = your.kerberos.server
-  security = ADS
-  encrypt passwords = yes

Strictly speaking, you can omit the realm name and you can use an IP - address for the ads server. In that case Samba will auto-detect these.

You do *not* need a smbpasswd file, although it won't do any harm - and if you have one then Samba will be able to fall back to normal - password security for older clients. I expect that the above - required options will change soon when we get better active - directory integration.


8.4. Setup your /etc/krb5.conf

The minimal configuration for krb5.conf is:

	[realms]
-    YOUR.KERBEROS.REALM = {
-	kdc = your.kerberos.server
-    }

Test your config by doing a "kinit USERNAME@REALM" and making sure that - your password is accepted by the Win2000 KDC.

NOTE: The realm must be uppercase.

You also must ensure that you can do a reverse DNS lookup on the IP -address of your KDC. Also, the name that this reverse lookup maps to -must either be the netbios name of the KDC (ie. the hostname with no -domain attached) or it can alternatively be the netbios name -followed by the realm.

The easiest way to ensure you get this right is to add a /etc/hosts -entry mapping the IP address of your KDC to its netbios name. If you -don't get this right then you will get a "local error" when you try -to join the realm.

If all you want is kerberos support in smbclient then you can skip -straight to step 5 now. Step 3 is only needed if you want kerberos -support in smbd.


8.5. Create the computer account

Do a "kinit" as a user that has authority to change arbitrary -passwords on the KDC ("Administrator" is a good choice). Then as a -user that has write permission on the Samba private directory -(usually root) run: -net ads join


8.5.1. Possible errors

"bash: kinit: command not found"

kinit is in the krb5-workstation RPM on RedHat systems, and is in /usr/kerberos/bin, so it won't be in the path until you log in again (or open a new terminal)

"ADS support not compiled in"

Samba must be reconfigured (remove config.cache) and recompiled (make clean all install) after the kerberos libs and headers are installed.


8.6. Test your server setup

On a Windows 2000 client try net use * \\server\share. You should -be logged in with kerberos without needing to know a password. If -this fails then run klist tickets. Did you get a ticket for the -server? Does it have an encoding type of DES-CBC-MD5 ?


8.7. Testing with smbclient

On your Samba server try to login to a Win2000 server or your Samba -server using smbclient and kerberos. Use smbclient as usual, but -specify the -k option to choose kerberos authentication.


8.8. Notes

You must change administrator password at least once after DC install, - to create the right encoding types

w2k doesn't seem to create the _kerberos._udp and _ldap._tcp in - their defaults DNS setup. Maybe fixed in service packs?


Chapter 9. Samba as a NT4 domain member

9.1. Joining an NT Domain with Samba 2.2

Assume you have a Samba 2.x server with a NetBIOS name of - SERV1 and are joining an NT domain called - DOM, which has a PDC with a NetBIOS name - of DOMPDC and two backup domain controllers - with NetBIOS names DOMBDC1 and DOMBDC2 - .

In order to join the domain, first stop all Samba daemons - and run the command:

root# smbpasswd -j DOM -r DOMPDC - -UAdministrator%password

as we are joining the domain DOM and the PDC for that domain - (the only machine that has write access to the domain SAM database) - is DOMPDC. The Administrator%password is - the login name and password for an account which has the necessary - privilege to add machines to the domain. If this is successful - you will see the message:

smbpasswd: Joined domain DOM. -

in your terminal window. See the smbpasswd(8) man page for more details.

There is existing development code to join a domain - without having to create the machine trust account on the PDC - beforehand. This code will hopefully be available soon - in release branches as well.

This command goes through the machine account password - change protocol, then writes the new (random) machine account - password for this Samba server into a file in the same directory - in which an smbpasswd file would be stored - normally :

/usr/local/samba/private

In Samba 2.0.x, the filename looks like this:

<NT DOMAIN NAME>.<Samba - Server Name>.mac

The .mac suffix stands for machine account - password file. So in our example above, the file would be called:

DOM.SERV1.mac

In Samba 2.2, this file has been replaced with a TDB - (Trivial Database) file named secrets.tdb. -

This file is created and owned by root and is not - readable by any other user. It is the key to the domain-level - security for your system, and should be treated as carefully - as a shadow password file.

Now, before restarting the Samba daemons you must - edit your smb.conf(5) - file to tell Samba it should now use domain security.

Change (or add) your security = line in the [global] section - of your smb.conf to read:

security = domain

Next change the workgroup = line in the [global] section to read:

workgroup = DOM

as this is the name of the domain we are joining.

You must also have the parameter encrypt passwords set to yes - in order for your users to authenticate to the NT PDC.

Finally, add (or modify) a password server = line in the [global] - section to read:

password server = DOMPDC DOMBDC1 DOMBDC2

These are the primary and backup domain controllers Samba - will attempt to contact in order to authenticate users. Samba will - try to contact each of these servers in order, so you may want to - rearrange this list in order to spread out the authentication load - among domain controllers.

Alternatively, if you want smbd to automatically determine - the list of Domain controllers to use for authentication, you may - set this line to be :

password server = *

This method, which was introduced in Samba 2.0.6, - allows Samba to use exactly the same mechanism that NT does. This - method either broadcasts or uses a WINS database in order to - find domain controllers to authenticate against.

Finally, restart your Samba daemons and get ready for - clients to begin using domain security!


9.2. Samba and Windows 2000 Domains

Many people have asked regarding the state of Samba's ability to participate in -a Windows 2000 Domain. Samba 3.0 is able to act as a member server of a Windows -2000 domain operating in mixed or native mode.

There is much confusion between the circumstances that require a "mixed" mode -Win2k DC and a when this host can be switched to "native" mode. A "mixed" mode -Win2k domain controller is only needed if Windows NT BDCs must exist in the same -domain. By default, a Win2k DC in "native" mode will still support -NetBIOS and NTLMv1 for authentication of legacy clients such as Windows 9x and -NT 4.0. Samba has the same requirements as a Windows NT 4.0 member server.

The steps for adding a Samba 2.2 host to a Win2k domain are the same as those -for adding a Samba server to a Windows NT 4.0 domain. The only exception is that -the "Server Manager" from NT 4 has been replaced by the "Active Directory Users and -Computers" MMC (Microsoft Management Console) plugin.


9.3. Why is this better than security = server?

Currently, domain security in Samba doesn't free you from - having to create local Unix users to represent the users attaching - to your server. This means that if domain user DOM\fred - attaches to your domain security Samba server, there needs - to be a local Unix user fred to represent that user in the Unix - filesystem. This is very similar to the older Samba security mode - security = server, - where Samba would pass through the authentication request to a Windows - NT server in the same way as a Windows 95 or Windows 98 server would. -

Please refer to the Winbind - paper for information on a system to automatically - assign UNIX uids and gids to Windows NT Domain users and groups. - This code is available in development branches only at the moment, - but will be moved to release branches soon.

The advantage to domain-level security is that the - authentication in domain-level security is passed down the authenticated - RPC channel in exactly the same way that an NT server would do it. This - means Samba servers now participate in domain trust relationships in - exactly the same way NT servers do (i.e., you can add Samba servers into - a resource domain and have the authentication passed on from a resource - domain PDC to an account domain PDC.

In addition, with security = server every Samba - daemon on a server has to keep a connection open to the - authenticating server for as long as that daemon lasts. This can drain - the connection resources on a Microsoft NT server and cause it to run - out of available connections. With security = domain, - however, the Samba daemons connect to the PDC/BDC only for as long - as is necessary to authenticate the user, and then drop the connection, - thus conserving PDC connection resources.

And finally, acting in the same manner as an NT server - authenticating to a PDC means that as part of the authentication - reply, the Samba server gets the user identification information such - as the user SID, the list of NT groups the user belongs to, etc. All - this information will allow Samba to be extended in the future into - a mode the developers currently call appliance mode. In this mode, - no local Unix users will be necessary, and Samba will generate Unix - uids and gids from the information passed back from the PDC when a - user is authenticated, making a Samba server truly plug and play - in an NT domain environment. Watch for this code soon.

NOTE: Much of the text of this document - was first published in the Web magazine - LinuxWorld as the article Doing - the NIS/NT Samba.

III. Optional configuration

Introduction

Samba has several features that you might want or might not want to use. The chapters in this -part each cover one specific feature.

Table of Contents
10. Integrating MS Windows networks with Samba
10.1. Agenda
10.2. Name Resolution in a pure Unix/Linux world
10.2.1. /etc/hosts
10.2.2. /etc/resolv.conf
10.2.3. /etc/host.conf
10.2.4. /etc/nsswitch.conf
10.3. Name resolution as used within MS Windows networking
10.3.1. The NetBIOS Name Cache
10.3.2. The LMHOSTS file
10.3.3. HOSTS file
10.3.4. DNS Lookup
10.3.5. WINS Lookup
10.4. How browsing functions and how to deploy stable and -dependable browsing using Samba
10.5. MS Windows security options and how to configure -Samba for seemless integration
10.5.1. Use MS Windows NT as an authentication server
10.5.2. Make Samba a member of an MS Windows NT security domain
10.5.3. Configure Samba as an authentication server
10.6. Conclusions
11. UNIX Permission Bits and Windows NT Access Control Lists
11.1. Viewing and changing UNIX permissions using the NT - security dialogs
11.2. How to view file security on a Samba share
11.3. Viewing file ownership
11.4. Viewing file or directory permissions
11.4.1. File Permissions
11.4.2. Directory Permissions
11.5. Modifying file or directory permissions
11.6. Interaction with the standard Samba create mask - parameters
11.7. Interaction with the standard Samba file attribute - mapping
12. Configuring PAM for distributed but centrally -managed authentication
12.1. Samba and PAM
12.2. Distributed Authentication
12.3. PAM Configuration in smb.conf
13. Hosting a Microsoft Distributed File System tree on Samba
13.1. Instructions
13.1.1. Notes
14. Printing Support
14.1. Introduction
14.2. Configuration
14.2.1. Creating [print$]
14.2.2. Setting Drivers for Existing Printers
14.2.3. Support a large number of printers
14.2.4. Adding New Printers via the Windows NT APW
14.2.5. Samba and Printer Ports
14.3. The Imprints Toolset
14.3.1. What is Imprints?
14.3.2. Creating Printer Driver Packages
14.3.3. The Imprints server
14.3.4. The Installation Client
14.4. Diagnosis
14.4.1. Introduction
14.4.2. Debugging printer problems
14.4.3. What printers do I have?
14.4.4. Setting up printcap and print servers
14.4.5. Job sent, no output
14.4.6. Job sent, strange output
14.4.7. Raw PostScript printed
14.4.8. Advanced Printing
14.4.9. Real debugging
15. Security levels
15.1. Introduction
15.2. More complete description of security levels
16. Unified Logons between Windows NT and UNIX using Winbind
16.1. Abstract
16.2. Introduction
16.3. What Winbind Provides
16.3.1. Target Uses
16.4. How Winbind Works
16.4.1. Microsoft Remote Procedure Calls
16.4.2. Name Service Switch
16.4.3. Pluggable Authentication Modules
16.4.4. User and Group ID Allocation
16.4.5. Result Caching
16.5. Installation and Configuration
16.5.1. Introduction
16.5.2. Requirements
16.5.3. Testing Things Out
16.6. Limitations
16.7. Conclusion
17. Passdb MySQL plugin
17.1. Building
17.2. Configuring
17.3. Using plaintext passwords or encrypted password
17.4. Getting non-column data from the table
18. Passdb XML plugin
18.1. Building
18.2. Usage
19. Storing Samba's User/Machine Account information in an LDAP Directory
19.1. Purpose
19.2. Introduction
19.3. Supported LDAP Servers
19.4. Schema and Relationship to the RFC 2307 posixAccount
19.5. Configuring Samba with LDAP
19.5.1. OpenLDAP configuration
19.5.2. Configuring Samba
19.6. Accounts and Groups management
19.7. Security and sambaAccount
19.8. LDAP specials attributes for sambaAccounts
19.9. Example LDIF Entries for a sambaAccount
19.10. Comments
20. HOWTO Access Samba source code via CVS
20.1. Introduction
20.2. CVS Access to samba.org
20.2.1. Access via CVSweb
20.2.2. Access via cvs
21. Group mapping HOWTO
22. Samba performance issues
22.1. Comparisons
22.2. Oplocks
22.2.1. Overview
22.2.2. Level2 Oplocks
22.2.3. Old 'fake oplocks' option - deprecated
22.3. Socket options
22.4. Read size
22.5. Max xmit
22.6. Locking
22.7. Share modes
22.8. Log level
22.9. Wide lines
22.10. Read raw
22.11. Write raw
22.12. Read prediction
22.13. Memory mapping
22.14. Slow Clients
22.15. Slow Logins
22.16. Client tuning
22.17. My Results

Chapter 10. Integrating MS Windows networks with Samba

10.1. Agenda

To identify the key functional mechanisms of MS Windows networking -to enable the deployment of Samba as a means of extending and/or -replacing MS Windows NT/2000 technology.

We will examine:

  1. Name resolution in a pure Unix/Linux TCP/IP - environment -

  2. Name resolution as used within MS Windows - networking -

  3. How browsing functions and how to deploy stable - and dependable browsing using Samba -

  4. MS Windows security options and how to - configure Samba for seemless integration -

  5. Configuration of Samba as:

    1. A stand-alone server

    2. An MS Windows NT 3.x/4.0 security domain member -

    3. An alternative to an MS Windows NT 3.x/4.0 Domain Controller -


10.2. Name Resolution in a pure Unix/Linux world

The key configuration files covered in this section are:

  • /etc/hosts

  • /etc/resolv.conf

  • /etc/host.conf

  • /etc/nsswitch.conf


10.2.1. /etc/hosts

Contains a static list of IP Addresses and names. -eg:

	127.0.0.1	localhost localhost.localdomain
-	192.168.1.1	bigbox.caldera.com	bigbox	alias4box

The purpose of /etc/hosts is to provide a -name resolution mechanism so that uses do not need to remember -IP addresses.

Network packets that are sent over the physical network transport -layer communicate not via IP addresses but rather using the Media -Access Control address, or MAC address. IP Addresses are currently -32 bits in length and are typically presented as four (4) decimal -numbers that are separated by a dot (or period). eg: 168.192.1.1

MAC Addresses use 48 bits (or 6 bytes) and are typically represented -as two digit hexadecimal numbers separated by colons. eg: -40:8e:0a:12:34:56

Every network interfrace must have an MAC address. Associated with -a MAC address there may be one or more IP addresses. There is NO -relationship between an IP address and a MAC address, all such assignments -are arbitary or discretionary in nature. At the most basic level all -network communications takes place using MAC addressing. Since MAC -addresses must be globally unique, and generally remains fixed for -any particular interface, the assignment of an IP address makes sense -from a network management perspective. More than one IP address can -be assigned per MAC address. One address must be the primary IP address, -this is the address that will be returned in the ARP reply.

When a user or a process wants to communicate with another machine -the protocol implementation ensures that the "machine name" or "host -name" is resolved to an IP address in a manner that is controlled -by the TCP/IP configuration control files. The file -/etc/hosts is one such file.

When the IP address of the destination interface has been -determined a protocol called ARP/RARP is used to identify -the MAC address of the target interface. ARP stands for Address -Resolution Protocol, and is a broadcast oriented method that -uses UDP (User Datagram Protocol) to send a request to all -interfaces on the local network segment using the all 1's MAC -address. Network interfaces are programmed to respond to two -MAC addresses only; their own unique address and the address -ff:ff:ff:ff:ff:ff. The reply packet from an ARP request will -contain the MAC address and the primary IP address for each -interface.

The /etc/hosts file is foundational to all -Unix/Linux TCP/IP installations and as a minumum will contain -the localhost and local network interface IP addresses and the -primary names by which they are known within the local machine. -This file helps to prime the pump so that a basic level of name -resolution can exist before any other method of name resolution -becomes available.


10.2.2. /etc/resolv.conf

This file tells the name resolution libraries:

  • The name of the domain to which the machine - belongs -

  • The name(s) of any domains that should be - automatically searched when trying to resolve unqualified - host names to their IP address -

  • The name or IP address of available Domain - Name Servers that may be asked to perform name to address - translation lookups -


10.2.3. /etc/host.conf

/etc/host.conf is the primary means by -which the setting in /etc/resolv.conf may be affected. It is a -critical configuration file. This file controls the order by -which name resolution may procede. The typical structure is:

	order hosts,bind
-	multi on

then both addresses should be returned. Please refer to the -man page for host.conf for further details.


10.2.4. /etc/nsswitch.conf

This file controls the actual name resolution targets. The -file typically has resolver object specifications as follows:

	# /etc/nsswitch.conf
-	#
-	# Name Service Switch configuration file.
-	#
-
-	passwd:		compat
-	# Alternative entries for password authentication are:
-	# passwd:	compat files nis ldap winbind
-	shadow:		compat
-	group:		compat
-
-	hosts:		files nis dns
-	# Alternative entries for host name resolution are:
-	# hosts:	files dns nis nis+ hesoid db compat ldap wins
-	networks:	nis files dns
-
-	ethers:		nis files
-	protocols:	nis files
-	rpc:		nis files
-	services:	nis files

Of course, each of these mechanisms requires that the appropriate -facilities and/or services are correctly configured.

It should be noted that unless a network request/message must be -sent, TCP/IP networks are silent. All TCP/IP communications assumes a -principal of speaking only when necessary.

Starting with version 2.2.0 samba has Linux support for extensions to -the name service switch infrastructure so that linux clients will -be able to obtain resolution of MS Windows NetBIOS names to IP -Addresses. To gain this functionality Samba needs to be compiled -with appropriate arguments to the make command (ie: make -nsswitch/libnss_wins.so). The resulting library should -then be installed in the /lib directory and -the "wins" parameter needs to be added to the "hosts:" line in -the /etc/nsswitch.conf file. At this point it -will be possible to ping any MS Windows machine by it's NetBIOS -machine name, so long as that machine is within the workgroup to -which both the samba machine and the MS Windows machine belong.


10.3. Name resolution as used within MS Windows networking

MS Windows networking is predicated about the name each machine -is given. This name is known variously (and inconsistently) as -the "computer name", "machine name", "networking name", "netbios name", -"SMB name". All terms mean the same thing with the exception of -"netbios name" which can apply also to the name of the workgroup or the -domain name. The terms "workgroup" and "domain" are really just a -simply name with which the machine is associated. All NetBIOS names -are exactly 16 characters in length. The 16th character is reserved. -It is used to store a one byte value that indicates service level -information for the NetBIOS name that is registered. A NetBIOS machine -name is therefore registered for each service type that is provided by -the client/server.

The following are typical NetBIOS name/service type registrations:

	Unique NetBIOS Names:
-		MACHINENAME<00>	= Server Service is running on MACHINENAME
-		MACHINENAME<03> = Generic Machine Name (NetBIOS name)
-		MACHINENAME<20> = LanMan Server service is running on MACHINENAME
-		WORKGROUP<1b> = Domain Master Browser
-
-	Group Names:
-		WORKGROUP<03> = Generic Name registered by all members of WORKGROUP
-		WORKGROUP<1c> = Domain Controllers / Netlogon Servers
-		WORKGROUP<1d> = Local Master Browsers
-		WORKGROUP<1e> = Internet Name Resolvers

It should be noted that all NetBIOS machines register their own -names as per the above. This is in vast contrast to TCP/IP -installations where traditionally the system administrator will -determine in the /etc/hosts or in the DNS database what names -are associated with each IP address.

One further point of clarification should be noted, the /etc/hosts -file and the DNS records do not provide the NetBIOS name type information -that MS Windows clients depend on to locate the type of service that may -be needed. An example of this is what happens when an MS Windows client -wants to locate a domain logon server. It find this service and the IP -address of a server that provides it by performing a lookup (via a -NetBIOS broadcast) for enumeration of all machines that have -registered the name type *<1c>. A logon request is then sent to each -IP address that is returned in the enumerated list of IP addresses. Which -ever machine first replies then ends up providing the logon services.

The name "workgroup" or "domain" really can be confusing since these -have the added significance of indicating what is the security -architecture of the MS Windows network. The term "workgroup" indicates -that the primary nature of the network environment is that of a -peer-to-peer design. In a WORKGROUP all machines are responsible for -their own security, and generally such security is limited to use of -just a password (known as SHARE MODE security). In most situations -with peer-to-peer networking the users who control their own machines -will simply opt to have no security at all. It is possible to have -USER MODE security in a WORKGROUP environment, thus requiring use -of a user name and a matching password.

MS Windows networking is thus predetermined to use machine names -for all local and remote machine message passing. The protocol used is -called Server Message Block (SMB) and this is implemented using -the NetBIOS protocol (Network Basic Input Output System). NetBIOS can -be encapsulated using LLC (Logical Link Control) protocol - in which case -the resulting protocol is called NetBEUI (Network Basic Extended User -Interface). NetBIOS can also be run over IPX (Internetworking Packet -Exchange) protocol as used by Novell NetWare, and it can be run -over TCP/IP protocols - in which case the resulting protocol is called -NBT or NetBT, the NetBIOS over TCP/IP.

MS Windows machines use a complex array of name resolution mechanisms. -Since we are primarily concerned with TCP/IP this demonstration is -limited to this area.


10.3.1. The NetBIOS Name Cache

All MS Windows machines employ an in memory buffer in which is -stored the NetBIOS names and IP addresses for all external -machines that that machine has communicated with over the -past 10-15 minutes. It is more efficient to obtain an IP address -for a machine from the local cache than it is to go through all the -configured name resolution mechanisms.

If a machine whose name is in the local name cache has been shut -down before the name had been expired and flushed from the cache, then -an attempt to exchange a message with that machine will be subject -to time-out delays. i.e.: Its name is in the cache, so a name resolution -lookup will succeed, but the machine can not respond. This can be -frustrating for users - but it is a characteristic of the protocol.

The MS Windows utility that allows examination of the NetBIOS -name cache is called "nbtstat". The Samba equivalent of this -is called "nmblookup".


10.3.2. The LMHOSTS file

This file is usually located in MS Windows NT 4.0 or -2000 in C:\WINNT\SYSTEM32\DRIVERS\ETC and contains -the IP Address and the machine name in matched pairs. The -LMHOSTS file performs NetBIOS name -to IP address mapping oriented.

It typically looks like:

	# Copyright (c) 1998 Microsoft Corp.
-	#
-	# This is a sample LMHOSTS file used by the Microsoft Wins Client (NetBIOS
-	# over TCP/IP) stack for Windows98
-	#
-	# This file contains the mappings of IP addresses to NT computernames
-	# (NetBIOS) names.  Each entry should be kept on an individual line.
-	# The IP address should be placed in the first column followed by the
-	# corresponding computername. The address and the comptername
-	# should be separated by at least one space or tab. The "#" character
-	# is generally used to denote the start of a comment (see the exceptions
-	# below).
-	#
-	# This file is compatible with Microsoft LAN Manager 2.x TCP/IP lmhosts
-	# files and offers the following extensions:
-	#
-	#      #PRE
-	#      #DOM:<domain>
-	#      #INCLUDE <filename>
-	#      #BEGIN_ALTERNATE
-	#      #END_ALTERNATE
-	#      \0xnn (non-printing character support)
-	#
-	# Following any entry in the file with the characters "#PRE" will cause
-	# the entry to be preloaded into the name cache. By default, entries are
-	# not preloaded, but are parsed only after dynamic name resolution fails.
-	#
-	# Following an entry with the "#DOM:<domain>" tag will associate the
-	# entry with the domain specified by <domain>. This affects how the
-	# browser and logon services behave in TCP/IP environments. To preload
-	# the host name associated with #DOM entry, it is necessary to also add a
-	# #PRE to the line. The <domain> is always preloaded although it will not
-	# be shown when the name cache is viewed.
-	#
-	# Specifying "#INCLUDE <filename>" will force the RFC NetBIOS (NBT)
-	# software to seek the specified <filename> and parse it as if it were
-	# local. <filename> is generally a UNC-based name, allowing a
-	# centralized lmhosts file to be maintained on a server.
-	# It is ALWAYS necessary to provide a mapping for the IP address of the
-	# server prior to the #INCLUDE. This mapping must use the #PRE directive.
-	# In addtion the share "public" in the example below must be in the
-	# LanManServer list of "NullSessionShares" in order for client machines to
-	# be able to read the lmhosts file successfully. This key is under
-	# \machine\system\currentcontrolset\services\lanmanserver\parameters\nullsessionshares
-	# in the registry. Simply add "public" to the list found there.
-	#
-	# The #BEGIN_ and #END_ALTERNATE keywords allow multiple #INCLUDE
-	# statements to be grouped together. Any single successful include
-	# will cause the group to succeed.
-	#
-	# Finally, non-printing characters can be embedded in mappings by
-	# first surrounding the NetBIOS name in quotations, then using the
-	# \0xnn notation to specify a hex value for a non-printing character.
-	#
-	# The following example illustrates all of these extensions:
-	#
-	# 102.54.94.97     rhino         #PRE #DOM:networking  #net group's DC
-	# 102.54.94.102    "appname  \0x14"                    #special app server
-	# 102.54.94.123    popular            #PRE             #source server
-	# 102.54.94.117    localsrv           #PRE             #needed for the include
-	#
-	# #BEGIN_ALTERNATE
-	# #INCLUDE \\localsrv\public\lmhosts
-	# #INCLUDE \\rhino\public\lmhosts
-	# #END_ALTERNATE
-	#
-	# In the above example, the "appname" server contains a special
-	# character in its name, the "popular" and "localsrv" server names are
-	# preloaded, and the "rhino" server name is specified so it can be used
-	# to later #INCLUDE a centrally maintained lmhosts file if the "localsrv"
-	# system is unavailable.
-	#
-	# Note that the whole file is parsed including comments on each lookup,
-	# so keeping the number of comments to a minimum will improve performance.
-	# Therefore it is not advisable to simply add lmhosts file entries onto the
-	# end of this file.


10.3.3. HOSTS file

This file is usually located in MS Windows NT 4.0 or 2000 in -C:\WINNT\SYSTEM32\DRIVERS\ETC and contains -the IP Address and the IP hostname in matched pairs. It can be -used by the name resolution infrastructure in MS Windows, depending -on how the TCP/IP environment is configured. This file is in -every way the equivalent of the Unix/Linux /etc/hosts file.


10.3.4. DNS Lookup

This capability is configured in the TCP/IP setup area in the network -configuration facility. If enabled an elaborate name resolution sequence -is followed the precise nature of which isdependant on what the NetBIOS -Node Type parameter is configured to. A Node Type of 0 means use -NetBIOS broadcast (over UDP broadcast) is first used if the name -that is the subject of a name lookup is not found in the NetBIOS name -cache. If that fails then DNS, HOSTS and LMHOSTS are checked. If set to -Node Type 8, then a NetBIOS Unicast (over UDP Unicast) is sent to the -WINS Server to obtain a lookup before DNS, HOSTS, LMHOSTS, or broadcast -lookup is used.


10.3.5. WINS Lookup

A WINS (Windows Internet Name Server) service is the equivaent of the -rfc1001/1002 specified NBNS (NetBIOS Name Server). A WINS server stores -the names and IP addresses that are registered by a Windows client -if the TCP/IP setup has been given at least one WINS Server IP Address.

To configure Samba to be a WINS server the following parameter needs -to be added to the smb.conf file:

	wins support = Yes

To configure Samba to use a WINS server the following parameters are -needed in the smb.conf file:

	wins support = No
-	wins server = xxx.xxx.xxx.xxx

where xxx.xxx.xxx.xxx is the IP address -of the WINS server.


10.4. How browsing functions and how to deploy stable and -dependable browsing using Samba

As stated above, MS Windows machines register their NetBIOS names -(i.e.: the machine name for each service type in operation) on start -up. Also, as stated above, the exact method by which this name registration -takes place is determined by whether or not the MS Windows client/server -has been given a WINS server address, whether or not LMHOSTS lookup -is enabled, or if DNS for NetBIOS name resolution is enabled, etc.

In the case where there is no WINS server all name registrations as -well as name lookups are done by UDP broadcast. This isolates name -resolution to the local subnet, unless LMHOSTS is used to list all -names and IP addresses. In such situations Samba provides a means by -which the samba server name may be forcibly injected into the browse -list of a remote MS Windows network (using the "remote announce" parameter).

Where a WINS server is used, the MS Windows client will use UDP -unicast to register with the WINS server. Such packets can be routed -and thus WINS allows name resolution to function across routed networks.

During the startup process an election will take place to create a -local master browser if one does not already exist. On each NetBIOS network -one machine will be elected to function as the domain master browser. This -domain browsing has nothing to do with MS security domain control. -Instead, the domain master browser serves the role of contacting each local -master browser (found by asking WINS or from LMHOSTS) and exchanging browse -list contents. This way every master browser will eventually obtain a complete -list of all machines that are on the network. Every 11-15 minutes an election -is held to determine which machine will be the master browser. By the nature of -the election criteria used, the machine with the highest uptime, or the -most senior protocol version, or other criteria, will win the election -as domain master browser.

Clients wishing to browse the network make use of this list, but also depend -on the availability of correct name resolution to the respective IP -address/addresses.

Any configuration that breaks name resolution and/or browsing intrinsics -will annoy users because they will have to put up with protracted -inability to use the network services.

Samba supports a feature that allows forced synchonisation -of browse lists across routed networks using the "remote -browse sync" parameter in the smb.conf file. This causes Samba -to contact the local master browser on a remote network and -to request browse list synchronisation. This effectively bridges -two networks that are separated by routers. The two remote -networks may use either broadcast based name resolution or WINS -based name resolution, but it should be noted that the "remote -browse sync" parameter provides browse list synchronisation - and -that is distinct from name to address resolution, in other -words, for cross subnet browsing to function correctly it is -essential that a name to address resolution mechanism be provided. -This mechanism could be via DNS, /etc/hosts, -and so on.


10.5. MS Windows security options and how to configure -Samba for seemless integration

MS Windows clients may use encrypted passwords as part of a -challenege/response authentication model (a.k.a. NTLMv1) or -alone, or clear text strings for simple password based -authentication. It should be realized that with the SMB -protocol the password is passed over the network either -in plain text or encrypted, but not both in the same -authentication requets.

When encrypted passwords are used a password that has been -entered by the user is encrypted in two ways:

  • An MD4 hash of the UNICODE of the password - string. This is known as the NT hash. -

  • The password is converted to upper case, - and then padded or trucated to 14 bytes. This string is - then appended with 5 bytes of NULL characters and split to - form two 56 bit DES keys to encrypt a "magic" 8 byte value. - The resulting 16 bytes for the LanMan hash. -

You should refer to the Password Encryption chapter in this HOWTO collection -for more details on the inner workings

MS Windows 95 pre-service pack 1, MS Windows NT versions 3.x -and version 4.0 pre-service pack 3 will use either mode of -password authentication. All versions of MS Windows that follow -these versions no longer support plain text passwords by default.

MS Windows clients have a habit of dropping network mappings that -have been idle for 10 minutes or longer. When the user attempts to -use the mapped drive connection that has been dropped, the client -re-establishes the connection using -a cached copy of the password.

When Microsoft changed the default password mode, they dropped support for -caching of the plain text password. This means that when the registry -parameter is changed to re-enable use of plain text passwords it appears to -work, but when a dropped mapping attempts to revalidate it will fail if -the remote authentication server does not support encrypted passwords. -This means that it is definitely not a good idea to re-enable plain text -password support in such clients.

The following parameters can be used to work around the -issue of Windows 9x client upper casing usernames and -password before transmitting them to the SMB server -when using clear text authentication.

	passsword level = integer
-	username level = integer

By default Samba will lower case the username before attempting -to lookup the user in the database of local system accounts. -Because UNIX usernames conventionally only contain lower case -character, the username level parameter -is rarely even needed.

However, password on UNIX systems often make use of mixed case -characters. This means that in order for a user on a Windows 9x -client to connect to a Samba server using clear text authentication, -the password level must be set to the maximum -number of upper case letter which could appear -is a password. Note that is the server OS uses the traditional -DES version of crypt(), then a password level -of 8 will result in case insensitive passwords as seen from Windows -users. This will also result in longer login times as Samba -hash to compute the permutations of the password string and -try them one by one until a match is located (or all combinations fail).

The best option to adopt is to enable support for encrypted passwords -where ever Samba is used. There are three configuration possibilities -for support of encrypted passwords:


10.5.1. Use MS Windows NT as an authentication server

This method involves the additions of the following parameters -in the smb.conf file:

	encrypt passwords = Yes
-	security = server
-	password server = "NetBIOS_name_of_PDC"

There are two ways of identifying whether or not a username and -password pair was valid or not. One uses the reply information provided -as part of the authentication messaging process, the other uses -just and error code.

The down-side of this mode of configuration is the fact that -for security reasons Samba will send the password server a bogus -username and a bogus password and if the remote server fails to -reject the username and password pair then an alternative mode -of identification of validation is used. Where a site uses password -lock out after a certain number of failed authentication attempts -this will result in user lockouts.

Use of this mode of authentication does require there to be -a standard Unix account for the user, this account can be blocked -to prevent logons by other than MS Windows clients.


10.5.2. Make Samba a member of an MS Windows NT security domain

This method involves additon of the following paramters in the smb.conf file:

	encrypt passwords = Yes
-	security = domain
-	workgroup = "name of NT domain"
-	password server = *

The use of the "*" argument to "password server" will cause samba -to locate the domain controller in a way analogous to the way -this is done within MS Windows NT.

In order for this method to work the Samba server needs to join the -MS Windows NT security domain. This is done as follows:

  • On the MS Windows NT domain controller using - the Server Manager add a machine account for the Samba server. -

  • Next, on the Linux system execute: - smbpasswd -r PDC_NAME -j DOMAIN_NAME -

Use of this mode of authentication does require there to be -a standard Unix account for the user in order to assign -a uid once the account has been authenticated by the remote -Windows DC. This account can be blocked to prevent logons by -other than MS Windows clients by things such as setting an invalid -shell in the /etc/passwd entry.

An alternative to assigning UIDs to Windows users on a -Samba member server is presented in the Winbind Overview chapter in -this HOWTO collection.


10.5.3. Configure Samba as an authentication server

This mode of authentication demands that there be on the -Unix/Linux system both a Unix style account as well as an -smbpasswd entry for the user. The Unix system account can be -locked if required as only the encrypted password will be -used for SMB client authentication.

This method involves addition of the following parameters to -the smb.conf file:

## please refer to the Samba PDC HOWTO chapter later in 
-## this collection for more details
-[global]
-	encrypt passwords = Yes
-	security = user
-	domain logons = Yes
-	; an OS level of 33 or more is recommended
-	os level = 33
-
-[NETLOGON]
-	path = /somewhare/in/file/system
-	read only = yes

in order for this method to work a Unix system account needs -to be created for each user, as well as for each MS Windows NT/2000 -machine. The following structure is required.


10.5.3.1. Users

A user account that may provide a home directory should be -created. The following Linux system commands are typical of -the procedure for creating an account.

	# useradd -s /bin/bash -d /home/"userid" -m "userid"
-	# passwd "userid"
-	  Enter Password: <pw>
-	  
-	# smbpasswd -a "userid"
-	  Enter Password: <pw>


10.5.3.2. MS Windows NT Machine Accounts

These are required only when Samba is used as a domain -controller. Refer to the Samba-PDC-HOWTO for more details.

	# useradd -s /bin/false -d /dev/null "machine_name"\$
-	# passwd -l "machine_name"\$
-	# smbpasswd -a -m "machine_name"


10.6. Conclusions

Samba provides a flexible means to operate as...

  • A Stand-alone server - No special action is needed - other than to create user accounts. Stand-alone servers do NOT - provide network logon services, meaning that machines that use this - server do NOT perform a domain logon but instead make use only of - the MS Windows logon which is local to the MS Windows - workstation/server. -

  • An MS Windows NT 3.x/4.0 security domain member. -

  • An alternative to an MS Windows NT 3.x/4.0 - Domain Controller. -


Chapter 11. UNIX Permission Bits and Windows NT Access Control Lists

11.1. Viewing and changing UNIX permissions using the NT - security dialogs

New in the Samba 2.0.4 release is the ability for Windows - NT clients to use their native security settings dialog box to - view and modify the underlying UNIX permissions.

Note that this ability is careful not to compromise - the security of the UNIX host Samba is running on, and - still obeys all the file permission rules that a Samba - administrator can set.

In Samba 2.0.4 and above the default value of the - parameter nt acl support has been changed from - false to true, so - manipulation of permissions is turned on by default.


11.2. How to view file security on a Samba share

From an NT 4.0 client, single-click with the right - mouse button on any file or directory in a Samba mounted - drive letter or UNC path. When the menu pops-up, click - on the Properties entry at the bottom of - the menu. This brings up the normal file properties dialog - box, but with Samba 2.0.4 this will have a new tab along the top - marked Security. Click on this tab and you - will see three buttons, Permissions, - Auditing, and Ownership. - The Auditing button will cause either - an error message A requested privilege is not held - by the client to appear if the user is not the - NT Administrator, or a dialog which is intended to allow an - Administrator to add auditing requirements to a file if the - user is logged on as the NT Administrator. This dialog is - non-functional with a Samba share at this time, as the only - useful button, the Add button will not currently - allow a list of users to be seen.


11.3. Viewing file ownership

Clicking on the "Ownership" button - brings up a dialog box telling you who owns the given file. The - owner name will be of the form :

"SERVER\user (Long name)"

Where SERVER is the NetBIOS name of - the Samba server, user is the user name of - the UNIX user who owns the file, and (Long name) - is the descriptive string identifying the user (normally found in the - GECOS field of the UNIX password database). Click on the Close - button to remove this dialog.

If the parameter nt acl support - is set to false then the file owner will - be shown as the NT user "Everyone".

The Take Ownership button will not allow - you to change the ownership of this file to yourself (clicking on - it will display a dialog box complaining that the user you are - currently logged onto the NT client cannot be found). The reason - for this is that changing the ownership of a file is a privileged - operation in UNIX, available only to the root - user. As clicking on this button causes NT to attempt to change - the ownership of a file to the current user logged into the NT - client this will not work with Samba at this time.

There is an NT chown command that will work with Samba - and allow a user with Administrator privilege connected - to a Samba 2.0.4 server as root to change the ownership of - files on both a local NTFS filesystem or remote mounted NTFS - or Samba drive. This is available as part of the Seclib - NT security library written by Jeremy Allison of - the Samba Team, available from the main Samba ftp site.


11.4. Viewing file or directory permissions

The third button is the "Permissions" - button. Clicking on this brings up a dialog box that shows both - the permissions and the UNIX owner of the file or directory. - The owner is displayed in the form :

"SERVER\user (Long name)"

Where SERVER is the NetBIOS name of - the Samba server, user is the user name of - the UNIX user who owns the file, and (Long name) - is the descriptive string identifying the user (normally found in the - GECOS field of the UNIX password database).

If the parameter nt acl support - is set to false then the file owner will - be shown as the NT user "Everyone" and the - permissions will be shown as NT "Full Control".

The permissions field is displayed differently for files - and directories, so I'll describe the way file permissions - are displayed first.


11.4.1. File Permissions

The standard UNIX user/group/world triple and - the corresponding "read", "write", "execute" permissions - triples are mapped by Samba into a three element NT ACL - with the 'r', 'w', and 'x' bits mapped into the corresponding - NT permissions. The UNIX world permissions are mapped into - the global NT group Everyone, followed - by the list of permissions allowed for UNIX world. The UNIX - owner and group permissions are displayed as an NT - user icon and an NT local - group icon respectively followed by the list - of permissions allowed for the UNIX user and group.

As many UNIX permission sets don't map into common - NT names such as "read", "change" or "full control" then - usually the permissions will be prefixed by the words "Special Access" in the NT display list.

But what happens if the file has no permissions allowed - for a particular UNIX user group or world component ? In order - to allow "no permissions" to be seen and modified then Samba - overloads the NT "Take Ownership" ACL attribute - (which has no meaning in UNIX) and reports a component with - no permissions as having the NT "O" bit set. - This was chosen of course to make it look like a zero, meaning - zero permissions. More details on the decision behind this will - be given below.


11.4.2. Directory Permissions

Directories on an NT NTFS file system have two - different sets of permissions. The first set of permissions - is the ACL set on the directory itself, this is usually displayed - in the first set of parentheses in the normal "RW" - NT style. This first set of permissions is created by Samba in - exactly the same way as normal file permissions are, described - above, and is displayed in the same way.

The second set of directory permissions has no real meaning - in the UNIX permissions world and represents the "inherited" permissions that any file created within - this directory would inherit.

Samba synthesises these inherited permissions for NT by - returning as an NT ACL the UNIX permission mode that a new file - created by Samba on this share would receive.


11.5. Modifying file or directory permissions

Modifying file and directory permissions is as simple - as changing the displayed permissions in the dialog box, and - clicking the OK button. However, there are - limitations that a user needs to be aware of, and also interactions - with the standard Samba permission masks and mapping of DOS - attributes that need to also be taken into account.

If the parameter nt acl support - is set to false then any attempt to set - security permissions will fail with an "Access Denied" - message.

The first thing to note is that the "Add" - button will not return a list of users in Samba 2.0.4 (it will give - an error message of "The remote procedure call failed - and did not execute"). This means that you can only - manipulate the current user/group/world permissions listed in - the dialog box. This actually works quite well as these are the - only permissions that UNIX actually has.

If a permission triple (either user, group, or world) - is removed from the list of permissions in the NT dialog box, - then when the "OK" button is pressed it will - be applied as "no permissions" on the UNIX side. If you then - view the permissions again the "no permissions" entry will appear - as the NT "O" flag, as described above. This - allows you to add permissions back to a file or directory once - you have removed them from a triple component.

As UNIX supports only the "r", "w" and "x" bits of - an NT ACL then if other NT security attributes such as "Delete - access" are selected then they will be ignored when applied on - the Samba server.

When setting permissions on a directory the second - set of permissions (in the second set of parentheses) is - by default applied to all files within that directory. If this - is not what you want you must uncheck the "Replace - permissions on existing files" checkbox in the NT - dialog before clicking "OK".

If you wish to remove all permissions from a - user/group/world component then you may either highlight the - component and click the "Remove" button, - or set the component to only have the special "Take - Ownership" permission (displayed as "O" - ) highlighted.


11.6. Interaction with the standard Samba create mask - parameters

Note that with Samba 2.0.5 there are four new parameters - to control this interaction. These are :

security mask

force security mode

directory security mask

force directory security mode

Once a user clicks "OK" to apply the - permissions Samba maps the given permissions into a user/group/world - r/w/x triple set, and then will check the changed permissions for a - file against the bits set in the - security mask parameter. Any bits that - were changed that are not set to '1' in this parameter are left alone - in the file permissions.

Essentially, zero bits in the security mask - mask may be treated as a set of bits the user is not - allowed to change, and one bits are those the user is allowed to change. -

If not set explicitly this parameter is set to the same value as - the create mask - parameter to provide compatibility with Samba 2.0.4 - where this permission change facility was introduced. To allow a user to - modify all the user/group/world permissions on a file, set this parameter - to 0777.

Next Samba checks the changed permissions for a file against - the bits set in the force security mode parameter. Any bits - that were changed that correspond to bits set to '1' in this parameter - are forced to be set.

Essentially, bits set in the force security mode - parameter may be treated as a set of bits that, when - modifying security on a file, the user has always set to be 'on'.

If not set explicitly this parameter is set to the same value - as the force - create mode parameter to provide compatibility - with Samba 2.0.4 where the permission change facility was introduced. - To allow a user to modify all the user/group/world permissions on a file - with no restrictions set this parameter to 000.

The security mask and force - security mode parameters are applied to the change - request in that order.

For a directory Samba will perform the same operations as - described above for a file except using the parameter directory security mask instead of security - mask, and force directory security mode - parameter instead of force security mode - .

The directory security mask parameter - by default is set to the same value as the directory mask - parameter and the force directory security - mode parameter by default is set to the same value as - the force directory mode parameter to provide - compatibility with Samba 2.0.4 where the permission change facility - was introduced.

In this way Samba enforces the permission restrictions that - an administrator can set on a Samba share, whilst still allowing users - to modify the permission bits within that restriction.

If you want to set up a share that allows users full control - in modifying the permission bits on their files and directories and - doesn't force any particular bits to be set 'on', then set the following - parameters in the smb.conf(5) - file in that share specific section :

security mask = 0777

force security mode = 0

directory security mask = 0777

force directory security mode = 0

As described, in Samba 2.0.4 the parameters :

create mask

force create mode

directory mask

force directory mode

were used instead of the parameters discussed here.


11.7. Interaction with the standard Samba file attribute - mapping

Samba maps some of the DOS attribute bits (such as "read - only") into the UNIX permissions of a file. This means there can - be a conflict between the permission bits set via the security - dialog and the permission bits set by the file attribute mapping. -

One way this can show up is if a file has no UNIX read access - for the owner it will show up as "read only" in the standard - file attributes tabbed dialog. Unfortunately this dialog is - the same one that contains the security info in another tab.

What this can mean is that if the owner changes the permissions - to allow themselves read access using the security dialog, clicks - "OK" to get back to the standard attributes tab - dialog, and then clicks "OK" on that dialog, then - NT will set the file permissions back to read-only (as that is what - the attributes still say in the dialog). This means that after setting - permissions and clicking "OK" to get back to the - attributes dialog you should always hit "Cancel" - rather than "OK" to ensure that your changes - are not overridden.


Chapter 12. Configuring PAM for distributed but centrally -managed authentication

12.1. Samba and PAM

A number of Unix systems (eg: Sun Solaris), as well as the -xxxxBSD family and Linux, now utilize the Pluggable Authentication -Modules (PAM) facility to provide all authentication, -authorization and resource control services. Prior to the -introduction of PAM, a decision to use an alternative to -the system password database (/etc/passwd) -would require the provision of alternatives for all programs that provide -security services. Such a choice would involve provision of -alternatives to such programs as: login, -passwd, chown, etc.

PAM provides a mechanism that disconnects these security programs -from the underlying authentication/authorization infrastructure. -PAM is configured either through one file /etc/pam.conf (Solaris), -or by editing individual files that are located in /etc/pam.d.

The following is an example /etc/pam.d/login configuration file. -This example had all options been uncommented is probably not usable -as it stacks many conditions before allowing successful completion -of the login process. Essentially all conditions can be disabled -by commenting them out except the calls to pam_pwdb.so.

#%PAM-1.0
-# The PAM configuration file for the `login' service
-#
-auth 		required	pam_securetty.so
-auth 		required	pam_nologin.so
-# auth 		required	pam_dialup.so
-# auth 		optional	pam_mail.so
-auth		required	pam_pwdb.so shadow md5
-# account    	requisite  	pam_time.so
-account		required	pam_pwdb.so
-session		required	pam_pwdb.so
-# session 	optional	pam_lastlog.so
-# password   	required   	pam_cracklib.so retry=3
-password	required	pam_pwdb.so shadow md5

PAM allows use of replacable modules. Those available on a -sample system include:

$ /bin/ls /lib/security
-pam_access.so    pam_ftp.so          pam_limits.so     
-pam_ncp_auth.so  pam_rhosts_auth.so  pam_stress.so     
-pam_cracklib.so  pam_group.so        pam_listfile.so   
-pam_nologin.so   pam_rootok.so       pam_tally.so      
-pam_deny.so      pam_issue.so        pam_mail.so       
-pam_permit.so    pam_securetty.so    pam_time.so       
-pam_dialup.so    pam_lastlog.so      pam_mkhomedir.so  
-pam_pwdb.so      pam_shells.so       pam_unix.so       
-pam_env.so       pam_ldap.so         pam_motd.so       
-pam_radius.so    pam_smbpass.so      pam_unix_acct.so  
-pam_wheel.so     pam_unix_auth.so    pam_unix_passwd.so
-pam_userdb.so    pam_warn.so         pam_unix_session.so

The following example for the login program replaces the use of -the pam_pwdb.so module which uses the system -password database (/etc/passwd, -/etc/shadow, /etc/group) with -the module pam_smbpass.so which uses the Samba -database which contains the Microsoft MD4 encrypted password -hashes. This database is stored in either -/usr/local/samba/private/smbpasswd, -/etc/samba/smbpasswd, or in -/etc/samba.d/smbpasswd, depending on the -Samba implementation for your Unix/Linux system. The -pam_smbpass.so module is provided by -Samba version 2.2.1 or later. It can be compiled by specifying the ---with-pam_smbpass options when running Samba's -configure script. For more information -on the pam_smbpass module, see the documentation -in the source/pam_smbpass directory of the Samba -source distribution.

#%PAM-1.0
-# The PAM configuration file for the `login' service
-#
-auth		required	pam_smbpass.so nodelay
-account		required	pam_smbpass.so nodelay
-session		required	pam_smbpass.so nodelay
-password	required	pam_smbpass.so nodelay

The following is the PAM configuration file for a particular -Linux system. The default condition uses pam_pwdb.so.

#%PAM-1.0
-# The PAM configuration file for the `samba' service
-#
-auth       required     /lib/security/pam_pwdb.so nullok nodelay shadow audit
-account    required     /lib/security/pam_pwdb.so audit nodelay
-session    required     /lib/security/pam_pwdb.so nodelay
-password   required     /lib/security/pam_pwdb.so shadow md5

In the following example the decision has been made to use the -smbpasswd database even for basic samba authentication. Such a -decision could also be made for the passwd program and would -thus allow the smbpasswd passwords to be changed using the passwd -program.

#%PAM-1.0
-# The PAM configuration file for the `samba' service
-#
-auth       required     /lib/security/pam_smbpass.so nodelay
-account    required     /lib/security/pam_pwdb.so audit nodelay
-session    required     /lib/security/pam_pwdb.so nodelay
-password   required     /lib/security/pam_smbpass.so nodelay smbconf=/etc/samba.d/smb.conf

Note: PAM allows stacking of authentication mechanisms. It is -also possible to pass information obtained within one PAM module through -to the next module in the PAM stack. Please refer to the documentation for -your particular system implementation for details regarding the specific -capabilities of PAM in this environment. Some Linux implmentations also -provide the pam_stack.so module that allows all -authentication to be configured in a single central file. The -pam_stack.so method has some very devoted followers -on the basis that it allows for easier administration. As with all issues in -life though, every decision makes trade-offs, so you may want examine the -PAM documentation for further helpful information.


12.2. Distributed Authentication

The astute administrator will realize from this that the -combination of pam_smbpass.so, -winbindd, and rsync (see -http://rsync.samba.org/) -will allow the establishment of a centrally managed, distributed -user/password database that can also be used by all -PAM (eg: Linux) aware programs and applications. This arrangement -can have particularly potent advantages compared with the -use of Microsoft Active Directory Service (ADS) in so far as -reduction of wide area network authentication traffic.


12.3. PAM Configuration in smb.conf

There is an option in smb.conf called obey pam restrictions. -The following is from the on-line help for this option in SWAT;

When Samba 2.2 is configure to enable PAM support (i.e. ---with-pam), this parameter will -control whether or not Samba should obey PAM's account -and session management directives. The default behavior -is to use PAM for clear text authentication only and to -ignore any account or session management. Note that Samba always -ignores PAM for authentication in the case of -encrypt passwords = yes. -The reason is that PAM modules cannot support the challenge/response -authentication mechanism needed in the presence of SMB -password encryption.

Default: obey pam restrictions = no


Chapter 13. Hosting a Microsoft Distributed File System tree on Samba

13.1. Instructions

The Distributed File System (or Dfs) provides a means of - separating the logical view of files and directories that users - see from the actual physical locations of these resources on the - network. It allows for higher availability, smoother storage expansion, - load balancing etc. For more information about Dfs, refer to Microsoft documentation.

This document explains how to host a Dfs tree on a Unix - machine (for Dfs-aware clients to browse) using Samba.

To enable SMB-based DFS for Samba, configure it with the - --with-msdfs option. Once built, a - Samba server can be made a Dfs server by setting the global - boolean host msdfs parameter in the smb.conf - file. You designate a share as a Dfs root using the share - level boolean msdfs root parameter. A Dfs root directory on - Samba hosts Dfs links in the form of symbolic links that point - to other servers. For example, a symbolic link - junction->msdfs:storage1\share1 in - the share directory acts as the Dfs junction. When Dfs-aware - clients attempt to access the junction link, they are redirected - to the storage location (in this case, \\storage1\share1).

Dfs trees on Samba work with all Dfs-aware clients ranging - from Windows 95 to 2000.

Here's an example of setting up a Dfs tree on a Samba - server.

# The smb.conf file:
-[global]
-	netbios name = SAMBA
-	host msdfs   = yes
-
-[dfs]
-	path = /export/dfsroot
-	msdfs root = yes
-	

In the /export/dfsroot directory we set up our dfs links to - other servers on the network.

root# cd /export/dfsroot

root# chown root /export/dfsroot

root# chmod 755 /export/dfsroot

root# ln -s msdfs:storageA\\shareA linka

root# ln -s msdfs:serverB\\share,serverC\\share linkb

You should set up the permissions and ownership of - the directory acting as the Dfs root such that only designated - users can create, delete or modify the msdfs links. Also note - that symlink names should be all lowercase. This limitation exists - to have Samba avoid trying all the case combinations to get at - the link name. Finally set up the symbolic links to point to the - network shares you want, and start Samba.

Users on Dfs-aware clients can now browse the Dfs tree - on the Samba server at \\samba\dfs. Accessing - links linka or linkb (which appear as directories to the client) - takes users directly to the appropriate shares on the network.


13.1.1. Notes

  • Windows clients need to be rebooted - if a previously mounted non-dfs share is made a dfs - root or vice versa. A better way is to introduce a - new share and make it the dfs root.

  • Currently there's a restriction that msdfs - symlink names should all be lowercase.

  • For security purposes, the directory - acting as the root of the Dfs tree should have ownership - and permissions set so that only designated users can - modify the symbolic links in the directory.


Chapter 14. Printing Support

14.1. Introduction

Beginning with the 2.2.0 release, Samba supports -the native Windows NT printing mechanisms implemented via -MS-RPC (i.e. the SPOOLSS named pipe). Previous versions of -Samba only supported LanMan printing calls.

The additional functionality provided by the new -SPOOLSS support includes:

  • Support for downloading printer driver - files to Windows 95/98/NT/2000 clients upon demand. -

  • Uploading of printer drivers via the - Windows NT Add Printer Wizard (APW) or the - Imprints tool set (refer to http://imprints.sourceforge.net). -

  • Support for the native MS-RPC printing - calls such as StartDocPrinter, EnumJobs(), etc... (See - the MSDN documentation at http://msdn.microsoft.com/ - for more information on the Win32 printing API) -

  • Support for NT Access Control Lists (ACL) - on printer objects

  • Improved support for printer queue manipulation - through the use of an internal databases for spooled job - information

There has been some initial confusion about what all this means -and whether or not it is a requirement for printer drivers to be -installed on a Samba host in order to support printing from Windows -clients. As a side note, Samba does not use these drivers in any way to process -spooled files. They are utilized entirely by the clients.

The following MS KB article, may be of some help if you are dealing with -Windows 2000 clients: How to Add Printers with No User -Interaction in Windows 2000

http://support.microsoft.com/support/kb/articles/Q189/1/05.ASP


14.2. Configuration

[print$] vs. [printer$]
 

Previous versions of Samba recommended using a share named [printer$]. -This name was taken from the printer$ service created by Windows 9x -clients when a printer was shared. Windows 9x printer servers always have -a printer$ service which provides read-only access via no -password in order to support printer driver downloads.

However, the initial implementation allowed for a -parameter named printer driver location -to be used on a per share basis to specify the location of -the driver files associated with that printer. Another -parameter named printer driver provided -a means of defining the printer driver name to be sent to -the client.


14.2.1. Creating [print$]

In order to support the uploading of printer driver -files, you must first configure a file share named [print$]. -The name of this share is hard coded in Samba's internals so -the name is very important (print$ is the service used by -Windows NT print servers to provide support for printer driver -download).

You should modify the server's smb.conf file to add the global -parameters and to create the -following file share (of course, some of the parameter values, -such as 'path' are arbitrary and should be replaced with -appropriate values for your site):

[global]
-    ; members of the ntadmin group should be able
-    ; to add drivers and set printer properties
-    ; root is implicitly a 'printer admin'
-    printer admin = @ntadmin
-
-[print$]
-    path = /usr/local/samba/printers
-    guest ok = yes
-    browseable = yes
-    read only = yes
-    ; since this share is configured as read only, then we need
-    ; a 'write list'.  Check the file system permissions to make
-    ; sure this account can copy files to the share.  If this
-    ; is setup to a non-root account, then it should also exist
-    ; as a 'printer admin'
-    write list = @ntadmin,root

The write list is used to allow administrative -level user accounts to have write access in order to update files -on the share. See the smb.conf(5) -man page for more information on configuring file shares.

The requirement for guest -ok = yes depends upon how your -site is configured. If users will be guaranteed to have -an account on the Samba host, then this is a non-issue.

Author's Note
 

The non-issue is that if all your Windows NT users are guaranteed to be -authenticated by the Samba server (such as a domain member server and the NT -user has already been validated by the Domain Controller in -order to logon to the Windows NT console), then guest access -is not necessary. Of course, in a workgroup environment where -you just want to be able to print without worrying about -silly accounts and security, then configure the share for -guest access. You'll probably want to add map to guest = Bad User in the [global] section as well. Make sure -you understand what this parameter does before using it -though. --jerry

In order for a Windows NT print server to support -the downloading of driver files by multiple client architectures, -it must create subdirectories within the [print$] service -which correspond to each of the supported client architectures. -Samba follows this model as well.

Next create the directory tree below the [print$] share -for each architecture you wish to support.

[print$]-----
-        |-W32X86           ; "Windows NT x86"
-        |-WIN40            ; "Windows 95/98"
-        |-W32ALPHA         ; "Windows NT Alpha_AXP"
-        |-W32MIPS          ; "Windows NT R4000"
-        |-W32PPC           ; "Windows NT PowerPC"

ATTENTION! REQUIRED PERMISSIONS
 

In order to currently add a new driver to you Samba host, -one of two conditions must hold true:

  • The account used to connect to the Samba host - must have a uid of 0 (i.e. a root account)

  • The account used to connect to the Samba host - must be a member of the printer - admin list.

Of course, the connected account must still possess access -to add files to the subdirectories beneath [print$]. Remember -that all file shares are set to 'read only' by default.

Once you have created the required [print$] service and -associated subdirectories, simply log onto the Samba server using -a root (or printer admin) account -from a Windows NT 4.0/2k client. Open "Network Neighbourhood" or -"My Network Places" and browse for the Samba host. Once you have located -the server, navigate to the "Printers..." folder. -You should see an initial listing of printers -that matches the printer shares defined on your Samba host.


14.2.2. Setting Drivers for Existing Printers

The initial listing of printers in the Samba host's -Printers folder will have no real printer driver assigned -to them. This defaults to a NULL string to allow the use -of the local Add Printer Wizard on NT/2000 clients. -Attempting to view the printer properties for a printer -which has this default driver assigned will result in -the error message:

Device settings cannot be displayed. The driver -for the specified printer is not installed, only spooler -properties will be displayed. Do you want to install the -driver now?

Click "No" in the error dialog and you will be presented with -the printer properties window. The way to assign a driver to a -printer is to either

  • Use the "New Driver..." button to install - a new printer driver, or

  • Select a driver from the popup list of - installed drivers. Initially this list will be empty.

If you wish to install printer drivers for client -operating systems other than "Windows NT x86", you will need -to use the "Sharing" tab of the printer properties dialog.

Assuming you have connected with a root account, you -will also be able modify other printer properties such as -ACLs and device settings using this dialog box.

A few closing comments for this section, it is possible -on a Windows NT print server to have printers -listed in the Printers folder which are not shared. Samba does -not make this distinction. By definition, the only printers of -which Samba is aware are those which are specified as shares in -smb.conf.

Another interesting side note is that Windows NT clients do -not use the SMB printer share, but rather can print directly -to any printer on another Windows NT host using MS-RPC. This -of course assumes that the printing client has the necessary -privileges on the remote host serving the printer. The default -permissions assigned by Windows NT to a printer gives the "Print" -permissions to the "Everyone" well-known group.


14.2.3. Support a large number of printers

One issue that has arisen during the development -phase of Samba 2.2 is the need to support driver downloads for -100's of printers. Using the Windows NT APW is somewhat -awkward to say the list. If more than one printer are using the -same driver, the rpcclient's -setdriver command can be used to set the driver -associated with an installed driver. The following is example -of how this could be accomplished:

 
-$ rpcclient pogo -U root%secret -c "enumdrivers"
-Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
- 
-[Windows NT x86]
-Printer Driver Info 1:
-     Driver Name: [HP LaserJet 4000 Series PS]
- 
-Printer Driver Info 1:
-     Driver Name: [HP LaserJet 2100 Series PS]
- 
-Printer Driver Info 1:
-     Driver Name: [HP LaserJet 4Si/4SiMX PS]
-				  
-$ rpcclient pogo -U root%secret -c "enumprinters"
-Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
-     flags:[0x800000]
-     name:[\\POGO\hp-print]
-     description:[POGO\\POGO\hp-print,NO DRIVER AVAILABLE FOR THIS PRINTER,]
-     comment:[]
-				  
-$ rpcclient pogo -U root%secret \
->  -c "setdriver hp-print \"HP LaserJet 4000 Series PS\""
-Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
-Successfully set hp-print to driver HP LaserJet 4000 Series PS.


14.2.4. Adding New Printers via the Windows NT APW

By default, Samba offers all printer shares defined in smb.conf -in the "Printers..." folder. Also existing in this folder is the Windows NT -Add Printer Wizard icon. The APW will be show only if

  • The connected user is able to successfully - execute an OpenPrinterEx(\\server) with administrative - privileges (i.e. root or printer admin). -

  • show - add printer wizard = yes (the default). -

In order to be able to use the APW to successfully add a printer to a Samba -server, the add -printer command must have a defined value. The program -hook must successfully add the printer to the system (i.e. -/etc/printcap or appropriate files) and -smb.conf if necessary.

When using the APW from a client, if the named printer share does -not exist, smbd will execute the add printer -command and reparse to the smb.conf -to attempt to locate the new printer share. If the share is still not defined, -an error of "Access Denied" is returned to the client. Note that the -add printer program is executed under the context -of the connected user, not necessarily a root account.

There is a complementary delete -printer command for removing entries from the "Printers..." -folder.

The following is an example add printer command script. It adds the appropriate entries to /etc/printcap.local (change that to what you need) and returns a line of 'Done' which is needed for the whole process to work.

#!/bin/sh
-
-# Script to insert a new printer entry into printcap.local
-#
-# $1, printer name, used as the descriptive name
-# $2, share name, used as the printer name for Linux
-# $3, port name
-# $4, driver name
-# $5, location, used for the device file of the printer
-# $6, win9x location
-
-#
-# Make sure we use the location that RedHat uses for local printer defs
-PRINTCAP=/etc/printcap.local
-DATE=`date +%Y%m%d-%H%M%S`
-LP=lp
-RESTART="service lpd restart"
-
-# Keep a copy
-cp $PRINTCAP $PRINTCAP.$DATE
-# Add the printer to $PRINTCAP
-echo ""				 			>> $PRINTCAP
-echo "$2|$1:\\" 					>> $PRINTCAP
-echo "  :sd=/var/spool/lpd/$2:\\" 			>> $PRINTCAP
-echo "  :mx=0:ml=0:sh:\\" 				>> $PRINTCAP
-echo "  :lp=/usr/local/samba/var/print/$5.prn:" 	>> $PRINTCAP
-
-touch "/usr/local/samba/var/print/$5.prn" >> /tmp/printadd.$$ 2>&1
-chown $LP "/usr/local/samba/var/print/$5.prn" >> /tmp/printadd.$$ 2>&1
-
-mkdir /var/spool/lpd/$2
-chmod 700 /var/spool/lpd/$2
-chown $LP /var/spool/lpd/$2
-#echo $1 >> "/usr/local/samba/var/print/$5.prn"
-#echo $2 >> "/usr/local/samba/var/print/$5.prn"
-#echo $3 >> "/usr/local/samba/var/print/$5.prn"
-#echo $4 >> "/usr/local/samba/var/print/$5.prn"
-#echo $5 >> "/usr/local/samba/var/print/$5.prn"
-#echo $6 >> "/usr/local/samba/var/print/$5.prn"
-$RESTART >> "/usr/local/samba/var/print/$5.prn"
-# Not sure if this is needed
-touch /usr/local/samba/lib/smb.conf
-#
-# You need to return a value, but I am not sure what it means.
-#
-echo "Done"
-exit 0

14.2.5. Samba and Printer Ports

Windows NT/2000 print servers associate a port with each printer. These normally -take the form of LPT1:, COM1:, FILE:, etc... Samba must also support the -concept of ports associated with a printer. By default, only one printer port, -named "Samba Printer Port", exists on a system. Samba does not really a port in -order to print, rather it is a requirement of Windows clients.

Note that Samba does not support the concept of "Printer Pooling" internally -either. This is when a logical printer is assigned to multiple ports as -a form of load balancing or fail over.

If you require that multiple ports be defined for some reason, -smb.conf possesses a enumports -command which can be used to define an external program -that generates a listing of ports on a system.


14.3. The Imprints Toolset

The Imprints tool set provides a UNIX equivalent of the - Windows NT Add Printer Wizard. For complete information, please - refer to the Imprints web site at http://imprints.sourceforge.net/ as well as the documentation - included with the imprints source distribution. This section will - only provide a brief introduction to the features of Imprints.


14.3.1. What is Imprints?

Imprints is a collection of tools for supporting the goals - of

  • Providing a central repository information - regarding Windows NT and 95/98 printer driver packages

  • Providing the tools necessary for creating - the Imprints printer driver packages.

  • Providing an installation client which - will obtain and install printer drivers on remote Samba - and Windows NT 4 print servers.


14.3.2. Creating Printer Driver Packages

The process of creating printer driver packages is beyond - the scope of this document (refer to Imprints.txt also included - with the Samba distribution for more information). In short, - an Imprints driver package is a gzipped tarball containing the - driver files, related INF files, and a control file needed by the - installation client.


14.3.3. The Imprints server

The Imprints server is really a database server that - may be queried via standard HTTP mechanisms. Each printer - entry in the database has an associated URL for the actual - downloading of the package. Each package is digitally signed - via GnuPG which can be used to verify that package downloaded - is actually the one referred in the Imprints database. It is - not recommended that this security check - be disabled.


14.3.4. The Installation Client

More information regarding the Imprints installation client - is available in the Imprints-Client-HOWTO.ps - file included with the imprints source package.

The Imprints installation client comes in two forms.

  • a set of command line Perl scripts

  • a GTK+ based graphical interface to - the command line perl scripts

The installation client (in both forms) provides a means - of querying the Imprints database server for a matching - list of known printer model names as well as a means to - download and install the drivers on remote Samba and Windows - NT print servers.

The basic installation process is in four steps and - perl code is wrapped around smbclient - and rpcclient.

	
-foreach (supported architecture for a given driver)
-{
-     1.  rpcclient: Get the appropriate upload directory 
-         on the remote server
-     2.  smbclient: Upload the driver files
-     3.  rpcclient: Issues an AddPrinterDriver() MS-RPC
-}
-	
-4.  rpcclient: Issue an AddPrinterEx() MS-RPC to actually
-    create the printer

One of the problems encountered when implementing - the Imprints tool set was the name space issues between - various supported client architectures. For example, Windows - NT includes a driver named "Apple LaserWriter II NTX v51.8" - and Windows 95 calls its version of this driver "Apple - LaserWriter II NTX"

The problem is how to know what client drivers have - been uploaded for a printer. As astute reader will remember - that the Windows NT Printer Properties dialog only includes - space for one printer driver name. A quick look in the - Windows NT 4.0 system registry at

HKLM\System\CurrentControlSet\Control\Print\Environment -

will reveal that Windows NT always uses the NT driver - name. This is ok as Windows NT always requires that at least - the Windows NT version of the printer driver is present. - However, Samba does not have the requirement internally. - Therefore, how can you use the NT driver name if is has not - already been installed?

The way of sidestepping this limitation is to require - that all Imprints printer driver packages include both the Intel - Windows NT and 95/98 printer drivers and that NT driver is - installed first.


14.4. Diagnosis

14.4.1. Introduction

This is a short description of how to debug printing problems with -Samba. This describes how to debug problems with printing from a SMB -client to a Samba server, not the other way around. For the reverse -see the examples/printing directory.

Ok, so you want to print to a Samba server from your PC. The first -thing you need to understand is that Samba does not actually do any -printing itself, it just acts as a middleman between your PC client -and your Unix printing subsystem. Samba receives the file from the PC -then passes the file to a external "print command". What print command -you use is up to you.

The whole things is controlled using options in smb.conf. The most -relevant options (which you should look up in the smb.conf man page) -are:

      [global]
-        print command     - send a file to a spooler
-        lpq command       - get spool queue status
-        lprm command      - remove a job
-      [printers]
-        path = /var/spool/lpd/samba

The following are nice to know about:

        queuepause command   - stop a printer or print queue
-        queueresume command  - start a printer or print queue

Example:

        print command = /usr/bin/lpr -r -P%p %s
-        lpq command   = /usr/bin/lpq    -P%p %s
-        lprm command  = /usr/bin/lprm   -P%p %j
-        queuepause command = /usr/sbin/lpc -P%p stop
-        queuepause command = /usr/sbin/lpc -P%p start

Samba should set reasonable defaults for these depending on your -system type, but it isn't clairvoyant. It is not uncommon that you -have to tweak these for local conditions. The commands should -always have fully specified pathnames, as the smdb may not have -the correct PATH values.

When you send a job to Samba to be printed, it will make a temporary -copy of it in the directory specified in the [printers] section. -and it should be periodically cleaned out. The lpr -r option -requests that the temporary copy be removed after printing; If -printing fails then you might find leftover files in this directory, -and it should be periodically cleaned out. Samba used the lpq -command to determine the "job number" assigned to your print job -by the spooler.

The %>letter< are "macros" that get dynamically replaced with appropriate -values when they are used. The %s gets replaced with the name of the spool -file that Samba creates and the %p gets replaced with the name of the -printer. The %j gets replaced with the "job number" which comes from -the lpq output.


14.4.2. Debugging printer problems

One way to debug printing problems is to start by replacing these -command with shell scripts that record the arguments and the contents -of the print file. A simple example of this kind of things might -be:

	print command = /tmp/saveprint %p %s
-
-    #!/bin/saveprint
-    # we make sure that we are the right user
-    /usr/bin/id -p >/tmp/tmp.print
-    # we run the command and save the error messages
-    # replace the command with the one appropriate for your system
-    /usr/bin/lpr -r -P$1 $2 2>>&/tmp/tmp.print

Then you print a file and try removing it. You may find that the -print queue needs to be stopped in order to see the queue status -and remove the job:


h4: {42} % echo hi >/tmp/hi
-h4: {43} % smbclient //localhost/lw4
-added interface ip=10.0.0.4 bcast=10.0.0.255 nmask=255.255.255.0
-Password: 
-Domain=[ASTART] OS=[Unix] Server=[Samba 2.0.7]
-smb: \> print /tmp/hi
-putting file /tmp/hi as hi-17534 (0.0 kb/s) (average 0.0 kb/s)
-smb: \> queue
-1049     3            hi-17534
-smb: \> cancel 1049
-Error cancelling job 1049 : code 0
-smb: \> cancel 1049
-Job 1049 cancelled
-smb: \> queue
-smb: \> exit

The 'code 0' indicates that the job was removed. The comment -by the smbclient is a bit misleading on this. -You can observe the command output and then and look at the -/tmp/tmp.print file to see what the results are. You can quickly -find out if the problem is with your printing system. Often people -have problems with their /etc/printcap file or permissions on -various print queues.


14.4.3. What printers do I have?

You can use the 'testprns' program to check to see if the printer -name you are using is recognized by Samba. For example, you can -use:

    testprns printer /etc/printcap

Samba can get its printcap information from a file or from a program. -You can try the following to see the format of the extracted -information:

    testprns -a printer /etc/printcap
-
-    testprns -a printer '|/bin/cat printcap'


14.4.4. Setting up printcap and print servers

You may need to set up some printcaps for your Samba system to use. -It is strongly recommended that you use the facilities provided by -the print spooler to set up queues and printcap information.

Samba requires either a printcap or program to deliver printcap -information. This printcap information has the format:

  name|alias1|alias2...:option=value:...

For almost all printing systems, the printer 'name' must be composed -only of alphanumeric or underscore '_' characters. Some systems also -allow hyphens ('-') as well. An alias is an alternative name for the -printer, and an alias with a space in it is used as a 'comment' -about the printer. The printcap format optionally uses a \ at the end of lines -to extend the printcap to multiple lines.

Here are some examples of printcap files:

  1. pr just printer name

  2. pr|alias printer name and alias

  3. pr|My Printer printer name, alias used as comment

  4. pr:sh:\ Same as pr:sh:cm= testing - :cm= \ - testing

  5. pr:sh Same as pr:sh:cm= testing - :cm= testing

Samba reads the printcap information when first started. If you make -changes in the printcap information, then you must do the following:

  1. make sure that the print spooler is aware of these changes. -The LPRng system uses the 'lpc reread' command to do this.

  2. make sure that the spool queues, etc., exist and have the -correct permissions. The LPRng system uses the 'checkpc -f' -command to do this.

  3. You now should send a SIGHUP signal to the smbd server to have -it reread the printcap information.


14.4.5. Job sent, no output

This is the most frustrating part of printing. You may have sent the -job, verified that the job was forwarded, set up a wrapper around -the command to send the file, but there was no output from the printer.

First, check to make sure that the job REALLY is getting to the -right print queue. If you are using a BSD or LPRng print spooler, -you can temporarily stop the printing of jobs. Jobs can still be -submitted, but they will not be printed. Use:

  lpc -Pprinter stop

Now submit a print job and then use 'lpq -Pprinter' to see if the -job is in the print queue. If it is not in the print queue then -you will have to find out why it is not being accepted for printing.

Next, you may want to check to see what the format of the job really -was. With the assistance of the system administrator you can view -the submitted jobs files. You may be surprised to find that these -are not in what you would expect to call a printable format. -You can use the UNIX 'file' utitily to determine what the job -format actually is:

    cd /var/spool/lpd/printer   # spool directory of print jobs
-    ls                          # find job files
-    file dfA001myhost

You should make sure that your printer supports this format OR that -your system administrator has installed a 'print filter' that will -convert the file to a format appropriate for your printer.


14.4.6. Job sent, strange output

Once you have the job printing, you can then start worrying about -making it print nicely.

The most common problem is extra pages of output: banner pages -OR blank pages at the end.

If you are getting banner pages, check and make sure that the -printcap option or printer option is configured for no banners. -If you have a printcap, this is the :sh (suppress header or banner -page) option. You should have the following in your printer.

   printer: ... :sh

If you have this option and are still getting banner pages, there -is a strong chance that your printer is generating them for you -automatically. You should make sure that banner printing is disabled -for the printer. This usually requires using the printer setup software -or procedures supplied by the printer manufacturer.

If you get an extra page of output, this could be due to problems -with your job format, or if you are generating PostScript jobs, -incorrect setting on your printer driver on the MicroSoft client. -For example, under Win95 there is a option:

  Printers|Printer Name|(Right Click)Properties|Postscript|Advanced|

that allows you to choose if a Ctrl-D is appended to all jobs. -This is a very bad thing to do, as most spooling systems will -automatically add a ^D to the end of the job if it is detected as -PostScript. The multiple ^D may cause an additional page of output.


14.4.7. Raw PostScript printed

This is a problem that is usually caused by either the print spooling -system putting information at the start of the print job that makes -the printer think the job is a text file, or your printer simply -does not support PostScript. You may need to enable 'Automatic -Format Detection' on your printer.


14.4.8. Advanced Printing

Note that you can do some pretty magic things by using your -imagination with the "print command" option and some shell scripts. -Doing print accounting is easy by passing the %U option to a print -command shell script. You could even make the print command detect -the type of output and its size and send it to an appropriate -printer.


14.4.9. Real debugging

If the above debug tips don't help, then maybe you need to bring in -the bug guns, system tracing. See Tracing.txt in this directory.


Chapter 15. Security levels

15.1. Introduction

Samba supports the following options to the global smb.conf parameter

[global]
-security = [share|user(default)|server|domain|ads]

Please refer to the smb.conf man page for usage information and to the document -DOMAIN_MEMBER.html for further background details -on domain mode security. The Windows 2000 Kerberos domain security model -(security = ads) is described in the ADS-HOWTO.html.

Of the above, "security = server" means that Samba reports to clients that -it is running in "user mode" but actually passes off all authentication -requests to another "user mode" server. This requires an additional -parameter "password server =" that points to the real authentication server. -That real authentication server can be another Samba server or can be a -Windows NT server, the later natively capable of encrypted password support.


15.2. More complete description of security levels

A SMB server tells the client at startup what "security level" it is -running. There are two options "share level" and "user level". Which -of these two the client receives affects the way the client then tries -to authenticate itself. It does not directly affect (to any great -extent) the way the Samba server does security. I know this is -strange, but it fits in with the client/server approach of SMB. In SMB -everything is initiated and controlled by the client, and the server -can only tell the client what is available and whether an action is -allowed.

I'll describe user level security first, as its simpler. In user level -security the client will send a "session setup" command directly after -the protocol negotiation. This contains a username and password. The -server can either accept or reject that username/password -combination. Note that at this stage the server has no idea what -share the client will eventually try to connect to, so it can't base -the "accept/reject" on anything other than:

  1. the username/password

  2. the machine that the client is coming from

If the server accepts the username/password then the client expects to -be able to mount any share (using a "tree connection") without -specifying a password. It expects that all access rights will be as -the username/password specified in the "session setup".

It is also possible for a client to send multiple "session setup" -requests. When the server responds it gives the client a "uid" to use -as an authentication tag for that username/password. The client can -maintain multiple authentication contexts in this way (WinDD is an -example of an application that does this)

Ok, now for share level security. In share level security the client -authenticates itself separately for each share. It will send a -password along with each "tree connection" (share mount). It does not -explicitly send a username with this operation. The client is -expecting a password to be associated with each share, independent of -the user. This means that samba has to work out what username the -client probably wants to use. It is never explicitly sent the -username. Some commercial SMB servers such as NT actually associate -passwords directly with shares in share level security, but samba -always uses the unix authentication scheme where it is a -username/password that is authenticated, not a "share/password".

Many clients send a "session setup" even if the server is in share -level security. They normally send a valid username but no -password. Samba records this username in a list of "possible -usernames". When the client then does a "tree connection" it also adds -to this list the name of the share they try to connect to (useful for -home directories) and any users listed in the "user =" smb.conf -line. The password is then checked in turn against these "possible -usernames". If a match is found then the client is authenticated as -that user.

Finally "server level" security. In server level security the samba -server reports to the client that it is in user level security. The -client then does a "session setup" as described earlier. The samba -server takes the username/password that the client sends and attempts -to login to the "password server" by sending exactly the same -username/password that it got from the client. If that server is in -user level security and accepts the password then samba accepts the -clients connection. This allows the samba server to use another SMB -server as the "password server".

You should also note that at the very start of all this, where the -server tells the client what security level it is in, it also tells -the client if it supports encryption. If it does then it supplies the -client with a random "cryptkey". The client will then send all -passwords in encrypted form. You have to compile samba with encryption -enabled to support this feature, and you have to maintain a separate -smbpasswd file with SMB style encrypted passwords. It is -cryptographically impossible to translate from unix style encryption -to SMB style encryption, although there are some fairly simple management -schemes by which the two could be kept in sync.


Chapter 16. Unified Logons between Windows NT and UNIX using Winbind

16.1. Abstract

Integration of UNIX and Microsoft Windows NT through - a unified logon has been considered a "holy grail" in heterogeneous - computing environments for a long time. We present - winbind, a component of the Samba suite - of programs as a solution to the unified logon problem. Winbind - uses a UNIX implementation - of Microsoft RPC calls, Pluggable Authentication Modules, and the Name - Service Switch to allow Windows NT domain users to appear and operate - as UNIX users on a UNIX machine. This paper describes the winbind - system, explaining the functionality it provides, how it is configured, - and how it works internally.


16.2. Introduction

It is well known that UNIX and Microsoft Windows NT have - different models for representing user and group information and - use different technologies for implementing them. This fact has - made it difficult to integrate the two systems in a satisfactory - manner.

One common solution in use today has been to create - identically named user accounts on both the UNIX and Windows systems - and use the Samba suite of programs to provide file and print services - between the two. This solution is far from perfect however, as - adding and deleting users on both sets of machines becomes a chore - and two sets of passwords are required both of which - can lead to synchronization problems between the UNIX and Windows - systems and confusion for users.

We divide the unified logon problem for UNIX machines into - three smaller problems:

  • Obtaining Windows NT user and group information -

  • Authenticating Windows NT users -

  • Password changing for Windows NT users -

Ideally, a prospective solution to the unified logon problem - would satisfy all the above components without duplication of - information on the UNIX machines and without creating additional - tasks for the system administrator when maintaining users and - groups on either system. The winbind system provides a simple - and elegant solution to all three components of the unified logon - problem.


16.3. What Winbind Provides

Winbind unifies UNIX and Windows NT account management by - allowing a UNIX box to become a full member of a NT domain. Once - this is done the UNIX box will see NT users and groups as if - they were native UNIX users and groups, allowing the NT domain - to be used in much the same manner that NIS+ is used within - UNIX-only environments.

The end result is that whenever any - program on the UNIX machine asks the operating system to lookup - a user or group name, the query will be resolved by asking the - NT domain controller for the specified domain to do the lookup. - Because Winbind hooks into the operating system at a low level - (via the NSS name resolution modules in the C library) this - redirection to the NT domain controller is completely - transparent.

Users on the UNIX machine can then use NT user and group - names as they would use "native" UNIX names. They can chown files - so that they are owned by NT domain users or even login to the - UNIX machine and run a UNIX X-Window session as a domain user.

The only obvious indication that Winbind is being used is - that user and group names take the form DOMAIN\user and - DOMAIN\group. This is necessary as it allows Winbind to determine - that redirection to a domain controller is wanted for a particular - lookup and which trusted domain is being referenced.

Additionally, Winbind provides an authentication service - that hooks into the Pluggable Authentication Modules (PAM) system - to provide authentication via a NT domain to any PAM enabled - applications. This capability solves the problem of synchronizing - passwords between systems since all passwords are stored in a single - location (on the domain controller).


16.3.1. Target Uses

Winbind is targeted at organizations that have an - existing NT based domain infrastructure into which they wish - to put UNIX workstations or servers. Winbind will allow these - organizations to deploy UNIX workstations without having to - maintain a separate account infrastructure. This greatly - simplifies the administrative overhead of deploying UNIX - workstations into a NT based organization.

Another interesting way in which we expect Winbind to - be used is as a central part of UNIX based appliances. Appliances - that provide file and print services to Microsoft based networks - will be able to use Winbind to provide seamless integration of - the appliance into the domain.


16.4. How Winbind Works

The winbind system is designed around a client/server - architecture. A long running winbindd daemon - listens on a UNIX domain socket waiting for requests - to arrive. These requests are generated by the NSS and PAM - clients and processed sequentially.

The technologies used to implement winbind are described - in detail below.


16.4.1. Microsoft Remote Procedure Calls

Over the last two years, efforts have been underway - by various Samba Team members to decode various aspects of - the Microsoft Remote Procedure Call (MSRPC) system. This - system is used for most network related operations between - Windows NT machines including remote management, user authentication - and print spooling. Although initially this work was done - to aid the implementation of Primary Domain Controller (PDC) - functionality in Samba, it has also yielded a body of code which - can be used for other purposes.

Winbind uses various MSRPC calls to enumerate domain users - and groups and to obtain detailed information about individual - users or groups. Other MSRPC calls can be used to authenticate - NT domain users and to change user passwords. By directly querying - a Windows PDC for user and group information, winbind maps the - NT account information onto UNIX user and group names.


16.4.2. Name Service Switch

The Name Service Switch, or NSS, is a feature that is - present in many UNIX operating systems. It allows system - information such as hostnames, mail aliases and user information - to be resolved from different sources. For example, a standalone - UNIX workstation may resolve system information from a series of - flat files stored on the local filesystem. A networked workstation - may first attempt to resolve system information from local files, - and then consult a NIS database for user information or a DNS server - for hostname information.

The NSS application programming interface allows winbind - to present itself as a source of system information when - resolving UNIX usernames and groups. Winbind uses this interface, - and information obtained from a Windows NT server using MSRPC - calls to provide a new source of account enumeration. Using standard - UNIX library calls, one can enumerate the users and groups on - a UNIX machine running winbind and see all users and groups in - a NT domain plus any trusted domain as though they were local - users and groups.

The primary control file for NSS is - /etc/nsswitch.conf. - When a UNIX application makes a request to do a lookup - the C library looks in /etc/nsswitch.conf - for a line which matches the service type being requested, for - example the "passwd" service type is used when user or group names - are looked up. This config line species which implementations - of that service should be tried and in what order. If the passwd - config line is:

passwd: files example

then the C library will first load a module called - /lib/libnss_files.so followed by - the module /lib/libnss_example.so. The - C library will dynamically load each of these modules in turn - and call resolver functions within the modules to try to resolve - the request. Once the request is resolved the C library returns the - result to the application.

This NSS interface provides a very easy way for Winbind - to hook into the operating system. All that needs to be done - is to put libnss_winbind.so in /lib/ - then add "winbind" into /etc/nsswitch.conf at - the appropriate place. The C library will then call Winbind to - resolve user and group names.


16.4.3. Pluggable Authentication Modules

Pluggable Authentication Modules, also known as PAM, - is a system for abstracting authentication and authorization - technologies. With a PAM module it is possible to specify different - authentication methods for different system applications without - having to recompile these applications. PAM is also useful - for implementing a particular policy for authorization. For example, - a system administrator may only allow console logins from users - stored in the local password file but only allow users resolved from - a NIS database to log in over the network.

Winbind uses the authentication management and password - management PAM interface to integrate Windows NT users into a - UNIX system. This allows Windows NT users to log in to a UNIX - machine and be authenticated against a suitable Primary Domain - Controller. These users can also change their passwords and have - this change take effect directly on the Primary Domain Controller. -

PAM is configured by providing control files in the directory - /etc/pam.d/ for each of the services that - require authentication. When an authentication request is made - by an application the PAM code in the C library looks up this - control file to determine what modules to load to do the - authentication check and in what order. This interface makes adding - a new authentication service for Winbind very easy, all that needs - to be done is that the pam_winbind.so module - is copied to /lib/security/ and the PAM - control files for relevant services are updated to allow - authentication via winbind. See the PAM documentation - for more details.


16.4.4. User and Group ID Allocation

When a user or group is created under Windows NT - is it allocated a numerical relative identifier (RID). This is - slightly different to UNIX which has a range of numbers that are - used to identify users, and the same range in which to identify - groups. It is winbind's job to convert RIDs to UNIX id numbers and - vice versa. When winbind is configured it is given part of the UNIX - user id space and a part of the UNIX group id space in which to - store Windows NT users and groups. If a Windows NT user is - resolved for the first time, it is allocated the next UNIX id from - the range. The same process applies for Windows NT groups. Over - time, winbind will have mapped all Windows NT users and groups - to UNIX user ids and group ids.

The results of this mapping are stored persistently in - an ID mapping database held in a tdb database). This ensures that - RIDs are mapped to UNIX IDs in a consistent way.


16.4.5. Result Caching

An active system can generate a lot of user and group - name lookups. To reduce the network cost of these lookups winbind - uses a caching scheme based on the SAM sequence number supplied - by NT domain controllers. User or group information returned - by a PDC is cached by winbind along with a sequence number also - returned by the PDC. This sequence number is incremented by - Windows NT whenever any user or group information is modified. If - a cached entry has expired, the sequence number is requested from - the PDC and compared against the sequence number of the cached entry. - If the sequence numbers do not match, then the cached information - is discarded and up to date information is requested directly - from the PDC.


16.5. Installation and Configuration

Many thanks to John Trostel jtrostel@snapserver.com -for providing the HOWTO for this section.

This HOWTO describes how to get winbind services up and running -to control access and authenticate users on your Linux box using -the winbind services which come with SAMBA 2.2.2.

There is also some Solaris specific information in -docs/textdocs/Solaris-Winbind-HOWTO.txt. -Future revisions of this document will incorporate that -information.


16.5.1. Introduction

This HOWTO describes the procedures used to get winbind up and -running on my RedHat 7.1 system. Winbind is capable of providing access -and authentication control for Windows Domain users through an NT -or Win2K PDC for 'regular' services, such as telnet a nd ftp, as -well for SAMBA services.

This HOWTO has been written from a 'RedHat-centric' perspective, so if -you are using another distribution, you may have to modify the instructions -somewhat to fit the way your distribution works.

  • Why should I to this? -

    This allows the SAMBA administrator to rely on the - authentication mechanisms on the NT/Win2K PDC for the authentication - of domain members. NT/Win2K users no longer need to have separate - accounts on the SAMBA server. -

  • Who should be reading this document? -

    This HOWTO is designed for system administrators. If you are - implementing SAMBA on a file server and wish to (fairly easily) - integrate existing NT/Win2K users from your PDC onto the - SAMBA server, this HOWTO is for you. That said, I am no NT or PAM - expert, so you may find a better or easier way to accomplish - these tasks. -


16.5.2. Requirements

If you have a samba configuration file that you are currently -using... BACK IT UP! If your system already uses PAM, -back up the /etc/pam.d directory -contents! If you haven't already made a boot disk, -MAKE ONE NOW!

Messing with the pam configuration files can make it nearly impossible -to log in to yourmachine. That's why you want to be able to boot back -into your machine in single user mode and restore your -/etc/pam.d back to the original state they were in if -you get frustrated with the way things are going. ;-)

The latest version of SAMBA (version 3.0 as of this writing), now -includes a functioning winbindd daemon. Please refer to the -main SAMBA web page or, -better yet, your closest SAMBA mirror site for instructions on -downloading the source code.

To allow Domain users the ability to access SAMBA shares and -files, as well as potentially other services provided by your -SAMBA machine, PAM (pluggable authentication modules) must -be setup properly on your machine. In order to compile the -winbind modules, you should have at least the pam libraries resident -on your system. For recent RedHat systems (7.1, for instance), that -means pam-0.74-22. For best results, it is helpful to also -install the development packages in pam-devel-0.74-22.


16.5.3. Testing Things Out

Before starting, it is probably best to kill off all the SAMBA -related daemons running on your server. Kill off all smbd, -nmbd, and winbindd processes that may -be running. To use PAM, you will want to make sure that you have the -standard PAM package (for RedHat) which supplies the /etc/pam.d -directory structure, including the pam modules are used by pam-aware -services, several pam libraries, and the /usr/doc -and /usr/man entries for pam. Winbind built better -in SAMBA if the pam-devel package was also installed. This package includes -the header files needed to compile pam-aware applications. For instance, -my RedHat system has both pam-0.74-22 and -pam-devel-0.74-22 RPMs installed.


16.5.3.1. Configure and compile SAMBA

The configuration and compilation of SAMBA is pretty straightforward. -The first three steps may not be necessary depending upon -whether or not you have previously built the Samba binaries.

root# autoconf
-root# make clean
-root# rm config.cache
-root# ./configure --with-winbind
-root# make
-root# make install

This will, by default, install SAMBA in /usr/local/samba. -See the main SAMBA documentation if you want to install SAMBA somewhere else. -It will also build the winbindd executable and libraries.


16.5.3.2. Configure nsswitch.conf and the -winbind libraries

The libraries needed to run the winbindd daemon -through nsswitch need to be copied to their proper locations, so

root# cp ../samba/source/nsswitch/libnss_winbind.so /lib

I also found it necessary to make the following symbolic link:

root# ln -s /lib/libnss_winbind.so /lib/libnss_winbind.so.2

And, in the case of Sun solaris:

root# ln -s /usr/lib/libnss_winbind.so /usr/lib/libnss_winbind.so.1 -root# ln -s /usr/lib/libnss_winbind.so /usr/lib/nss_winbind.so.1 -root# ln -s /usr/lib/libnss_winbind.so /usr/lib/nss_winbind.so.2

Now, as root you need to edit /etc/nsswitch.conf to -allow user and group entries to be visible from the winbindd -daemon. My /etc/nsswitch.conf file look like -this after editing:

	passwd:     files winbind
-	shadow:     files 
-	group:      files winbind

-The libraries needed by the winbind daemon will be automatically -entered into the ldconfig cache the next time -your system reboots, but it -is faster (and you don't need to reboot) if you do it manually:

root# /sbin/ldconfig -v | grep winbind

This makes libnss_winbind available to winbindd -and echos back a check to you.


16.5.3.3. Configure smb.conf

Several parameters are needed in the smb.conf file to control -the behavior of winbindd. Configure -smb.conf These are described in more detail in -the winbindd(8) man page. My -smb.conf file was modified to -include the following entries in the [global] section:

[global]
-     <...>
-     # separate domain and username with '+', like DOMAIN+username
-     winbind separator = +
-     # use uids from 10000 to 20000 for domain users
-     winbind uid = 10000-20000
-     # use gids from 10000 to 20000 for domain groups
-     winbind gid = 10000-20000
-     # allow enumeration of winbind users and groups
-     winbind enum users = yes
-     winbind enum groups = yes
-     # give winbind users a real shell (only needed if they have telnet access)
-     template homedir = /home/winnt/%D/%U
-     template shell = /bin/bash


16.5.3.4. Join the SAMBA server to the PDC domain

Enter the following command to make the SAMBA server join the -PDC domain, where DOMAIN is the name of -your Windows domain and Administrator is -a domain user who has administrative privileges in the domain.

root# /usr/local/samba/bin/net rpc join -S PDC -U Administrator

The proper response to the command should be: "Joined the domain -DOMAIN" where DOMAIN -is your DOMAIN name.


16.5.3.5. Start up the winbindd daemon and test it!

Eventually, you will want to modify your smb startup script to -automatically invoke the winbindd daemon when the other parts of -SAMBA start, but it is possible to test out just the winbind -portion first. To start up winbind services, enter the following -command as root:

root# /usr/local/samba/bin/winbindd

I'm always paranoid and like to make sure the daemon -is really running...

root# ps -ae | grep winbindd

This command should produce output like this, if the daemon is running

3025 ? 00:00:00 winbindd

Now... for the real test, try to get some information about the -users on your PDC

root# /usr/local/samba/bin/wbinfo -u

-This should echo back a list of users on your Windows users on -your PDC. For example, I get the following response:

CEO+Administrator
-CEO+burdell
-CEO+Guest
-CEO+jt-ad
-CEO+krbtgt
-CEO+TsInternetUser

Obviously, I have named my domain 'CEO' and my winbind -separator is '+'.

You can do the same sort of thing to get group information from -the PDC:

root# /usr/local/samba/bin/wbinfo -g
-CEO+Domain Admins
-CEO+Domain Users
-CEO+Domain Guests
-CEO+Domain Computers
-CEO+Domain Controllers
-CEO+Cert Publishers
-CEO+Schema Admins
-CEO+Enterprise Admins
-CEO+Group Policy Creator Owners

The function 'getent' can now be used to get unified -lists of both local and PDC users and groups. -Try the following command:

root# getent passwd

You should get a list that looks like your /etc/passwd -list followed by the domain users with their new uids, gids, home -directories and default shells.

The same thing can be done for groups with the command

root# getent group


16.5.3.6. Fix the init.d startup scripts

16.5.3.6.1. Linux

The winbindd daemon needs to start up after the -smbd and nmbd daemons are running. -To accomplish this task, you need to modify the startup scripts of your system. They are located at /etc/init.d/smb in RedHat and -/etc/init.d/samba in Debian. -script to add commands to invoke this daemon in the proper sequence. My -startup script starts up smbd, -nmbd, and winbindd from the -/usr/local/samba/bin directory directly. The 'start' -function in the script looks like this:

start() {
-        KIND="SMB"
-        echo -n $"Starting $KIND services: "
-        daemon /usr/local/samba/bin/smbd $SMBDOPTIONS
-        RETVAL=$?
-        echo
-        KIND="NMB"
-        echo -n $"Starting $KIND services: "
-        daemon /usr/local/samba/bin/nmbd $NMBDOPTIONS
-        RETVAL2=$?
-        echo
-        KIND="Winbind"
-        echo -n $"Starting $KIND services: "
-        daemon /usr/local/samba/bin/winbindd
-        RETVAL3=$?
-        echo
-        [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 -a $RETVAL3 -eq 0 ] && touch /var/lock/subsys/smb || \
-           RETVAL=1
-        return $RETVAL
-}

The 'stop' function has a corresponding entry to shut down the -services and look s like this:

stop() {
-        KIND="SMB"
-        echo -n $"Shutting down $KIND services: "
-        killproc smbd
-        RETVAL=$?
-        echo
-        KIND="NMB"
-        echo -n $"Shutting down $KIND services: "
-        killproc nmbd
-        RETVAL2=$?
-        echo
-        KIND="Winbind"
-        echo -n $"Shutting down $KIND services: "
-        killproc winbindd
-        RETVAL3=$?
-        [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 -a $RETVAL3 -eq 0 ] && rm -f /var/lock/subsys/smb
-        echo ""
-        return $RETVAL
-}


16.5.3.6.2. Solaris

On solaris, you need to modify the -/etc/init.d/samba.server startup script. It usually -only starts smbd and nmbd but should now start winbindd too. If you -have samba installed in /usr/local/samba/bin, -the file could contains something like this:

##
-## samba.server
-##
-
-if [ ! -d /usr/bin ]
-then                    # /usr not mounted
-        exit
-fi
-
-killproc() {            # kill the named process(es)
-        pid=`/usr/bin/ps -e |
-             /usr/bin/grep -w $1 |
-             /usr/bin/sed -e 's/^  *//' -e 's/ .*//'`
-        [ "$pid" != "" ] && kill $pid
-}
- 
-# Start/stop processes required for samba server
-
-case "$1" in
-
-'start')
-#
-# Edit these lines to suit your installation (paths, workgroup, host)
-#
-echo Starting SMBD
-   /usr/local/samba/bin/smbd -D -s \
-	/usr/local/samba/smb.conf
-
-echo Starting NMBD
-   /usr/local/samba/bin/nmbd -D -l \
-	/usr/local/samba/var/log -s /usr/local/samba/smb.conf
-
-echo Starting Winbind Daemon
-   /usr/local/samba/bin/winbindd
-   ;;
-
-'stop')
-   killproc nmbd
-   killproc smbd
-   killproc winbindd
-   ;;
-
-*)
-   echo "Usage: /etc/init.d/samba.server { start | stop }"
-   ;;
-esac


16.5.3.6.3. Restarting

If you restart the smbd, nmbd, -and winbindd daemons at this point, you -should be able to connect to the samba server as a domain member just as -if you were a local user.


16.5.3.7. Configure Winbind and PAM

If you have made it this far, you know that winbindd and samba are working -together. If you want to use winbind to provide authentication for other -services, keep reading. The pam configuration files need to be altered in -this step. (Did you remember to make backups of your original -/etc/pam.d files? If not, do it now.)

You will need a pam module to use winbindd with these other services. This -module will be compiled in the ../source/nsswitch directory -by invoking the command

root# make nsswitch/pam_winbind.so

from the ../source directory. The -pam_winbind.so file should be copied to the location of -your other pam security modules. On my RedHat system, this was the -/lib/security directory. On Solaris, the pam security -modules reside in /usr/lib/security.

root# cp ../samba/source/nsswitch/pam_winbind.so /lib/security


16.5.3.7.1. Linux/FreeBSD-specific PAM configuration

The /etc/pam.d/samba file does not need to be changed. I -just left this fileas it was:

auth    required        /lib/security/pam_stack.so service=system-auth
-account required        /lib/security/pam_stack.so service=system-auth

The other services that I modified to allow the use of winbind -as an authentication service were the normal login on the console (or a terminal -session), telnet logins, and ftp service. In order to enable these -services, you may first need to change the entries in -/etc/xinetd.d (or /etc/inetd.conf). -RedHat 7.1 uses the new xinetd.d structure, in this case you need -to change the lines in /etc/xinetd.d/telnet -and /etc/xinetd.d/wu-ftp from

enable = no

to

enable = yes

-For ftp services to work properly, you will also need to either -have individual directories for the domain users already present on -the server, or change the home directory template to a general -directory for all domain users. These can be easily set using -the smb.conf global entry -template homedir.

The /etc/pam.d/ftp file can be changed -to allow winbind ftp access in a manner similar to the -samba file. My /etc/pam.d/ftp file was -changed to look like this:

auth       required     /lib/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
-auth       sufficient   /lib/security/pam_winbind.so
-auth       required     /lib/security/pam_stack.so service=system-auth
-auth       required     /lib/security/pam_shells.so
-account    sufficient   /lib/security/pam_winbind.so
-account    required     /lib/security/pam_stack.so service=system-auth
-session    required     /lib/security/pam_stack.so service=system-auth

The /etc/pam.d/login file can be changed nearly the -same way. It now looks like this:

auth       required     /lib/security/pam_securetty.so
-auth       sufficient   /lib/security/pam_winbind.so
-auth       sufficient   /lib/security/pam_unix.so use_first_pass
-auth       required     /lib/security/pam_stack.so service=system-auth
-auth       required     /lib/security/pam_nologin.so
-account    sufficient   /lib/security/pam_winbind.so
-account    required     /lib/security/pam_stack.so service=system-auth
-password   required     /lib/security/pam_stack.so service=system-auth
-session    required     /lib/security/pam_stack.so service=system-auth
-session    optional     /lib/security/pam_console.so

In this case, I added the auth sufficient /lib/security/pam_winbind.so -lines as before, but also added the required pam_securetty.so -above it, to disallow root logins over the network. I also added a -sufficient /lib/security/pam_unix.so use_first_pass -line after the winbind.so line to get rid of annoying -double prompts for passwords.


16.5.3.7.2. Solaris-specific configuration

The /etc/pam.conf needs to be changed. I changed this file so that my Domain -users can logon both locally as well as telnet.The following are the changes -that I made.You can customize the pam.conf file as per your requirements,but -be sure of those changes because in the worst case it will leave your system -nearly impossible to boot.

#
-#ident	"@(#)pam.conf	1.14	99/09/16 SMI"
-#
-# Copyright (c) 1996-1999, Sun Microsystems, Inc.
-# All Rights Reserved.
-#
-# PAM configuration
-#
-# Authentication management
-#
-login   auth required   /usr/lib/security/pam_winbind.so
-login	auth required 	/usr/lib/security/$ISA/pam_unix.so.1 try_first_pass 
-login	auth required 	/usr/lib/security/$ISA/pam_dial_auth.so.1 try_first_pass 
-#
-rlogin  auth sufficient /usr/lib/security/pam_winbind.so
-rlogin  auth sufficient /usr/lib/security/$ISA/pam_rhosts_auth.so.1
-rlogin	auth required 	/usr/lib/security/$ISA/pam_unix.so.1 try_first_pass
-#
-dtlogin auth sufficient /usr/lib/security/pam_winbind.so
-dtlogin	auth required 	/usr/lib/security/$ISA/pam_unix.so.1 try_first_pass
-#
-rsh	auth required	/usr/lib/security/$ISA/pam_rhosts_auth.so.1
-other   auth sufficient /usr/lib/security/pam_winbind.so
-other	auth required	/usr/lib/security/$ISA/pam_unix.so.1 try_first_pass
-#
-# Account management
-#
-login   account sufficient      /usr/lib/security/pam_winbind.so
-login	account requisite	/usr/lib/security/$ISA/pam_roles.so.1 
-login	account required	/usr/lib/security/$ISA/pam_unix.so.1 
-#
-dtlogin account sufficient      /usr/lib/security/pam_winbind.so
-dtlogin	account requisite	/usr/lib/security/$ISA/pam_roles.so.1 
-dtlogin	account required	/usr/lib/security/$ISA/pam_unix.so.1 
-#
-other   account sufficient      /usr/lib/security/pam_winbind.so
-other	account requisite	/usr/lib/security/$ISA/pam_roles.so.1 
-other	account required	/usr/lib/security/$ISA/pam_unix.so.1 
-#
-# Session management
-#
-other	session required	/usr/lib/security/$ISA/pam_unix.so.1 
-#
-# Password management
-#
-#other   password sufficient     /usr/lib/security/pam_winbind.so
-other	password required	/usr/lib/security/$ISA/pam_unix.so.1 
-dtsession auth required	/usr/lib/security/$ISA/pam_unix.so.1
-#
-# Support for Kerberos V5 authentication (uncomment to use Kerberos)
-#
-#rlogin	auth optional	/usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass
-#login	auth optional	/usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass
-#dtlogin	auth optional	/usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass
-#other	auth optional	/usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass
-#dtlogin	account optional /usr/lib/security/$ISA/pam_krb5.so.1
-#other	account optional /usr/lib/security/$ISA/pam_krb5.so.1
-#other	session optional /usr/lib/security/$ISA/pam_krb5.so.1
-#other	password optional /usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass

I also added a try_first_pass line after the winbind.so line to get rid of -annoying double prompts for passwords.

Now restart your Samba & try connecting through your application that you -configured in the pam.conf.


16.6. Limitations

Winbind has a number of limitations in its current - released version that we hope to overcome in future - releases:

  • Winbind is currently only available for - the Linux operating system, although ports to other operating - systems are certainly possible. For such ports to be feasible, - we require the C library of the target operating system to - support the Name Service Switch and Pluggable Authentication - Modules systems. This is becoming more common as NSS and - PAM gain support among UNIX vendors.

  • The mappings of Windows NT RIDs to UNIX ids - is not made algorithmically and depends on the order in which - unmapped users or groups are seen by winbind. It may be difficult - to recover the mappings of rid to UNIX id mapping if the file - containing this information is corrupted or destroyed.

  • Currently the winbind PAM module does not take - into account possible workstation and logon time restrictions - that may be been set for Windows NT users.


16.7. Conclusion

The winbind system, through the use of the Name Service - Switch, Pluggable Authentication Modules, and appropriate - Microsoft RPC calls have allowed us to provide seamless - integration of Microsoft Windows NT domain users on a - UNIX system. The result is a great reduction in the administrative - cost of running a mixed UNIX and NT network.


Chapter 17. Passdb MySQL plugin

17.1. Building

To build the plugin, run make bin/pdb_mysql.so -in the source/ directory of samba distribution.

Next, copy pdb_mysql.so to any location you want. I -strongly recommend installing it in $PREFIX/lib or /usr/lib/samba/


17.2. Configuring

This plugin lacks some good documentation, but here is some short info:

Add a the following to the passdb backend variable in your smb.conf: -

passdb backend = [other-plugins] plugin:/location/to/pdb_mysql.so:identifier [other-plugins]

The identifier can be any string you like, as long as it doesn't collide with -the identifiers of other plugins or other instances of pdb_mysql. If you -specify multiple pdb_mysql.so entries in 'passdb backend', you also need to -use different identifiers!

Additional options can be given thru the smb.conf file in the [global] section.

identifier:mysql host                     - host name, defaults to 'localhost'
-identifier:mysql password
-identifier:mysql user                     - defaults to 'samba'
-identifier:mysql database                 - defaults to 'samba'
-identifier:mysql port                     - defaults to 3306
-identifier:table                          - Name of the table containing users

Names of the columns in this table(I've added column types those columns should have first):

identifier:logon time column             - int(9)
-identifier:logoff time column            - int(9)
-identifier:kickoff time column           - int(9)
-identifier:pass last set time column     - int(9)
-identifier:pass can change time column   - int(9)
-identifier:pass must change time column  - int(9)
-identifier:username column               - varchar(255) - unix username
-identifier:domain column                 - varchar(255) - NT domain user is part of
-identifier:nt username column            - varchar(255) - NT username
-identifier:fullname column            - varchar(255) - Full name of user
-identifier:home dir column               - varchar(255) - Unix homedir path
-identifier:dir drive column              - varchar(2) - Directory drive path (eg: 'H:')
-identifier:logon script column           - varchar(255) - Batch file to run on client side when logging on
-identifier:profile path column           - varchar(255) - Path of profile
-identifier:acct desc column              - varchar(255) - Some ASCII NT user data
-identifier:workstations column           - varchar(255) - Workstations user can logon to (or NULL for all)
-identifier:unknown string column         - varchar(255) - unknown string
-identifier:munged dial column            - varchar(255) - ?
-identifier:uid column                    - int(9) - Unix user ID (uid)
-identifier:gid column                    - int(9) - Unix user group (gid)
-identifier:user sid column               - varchar(255) - NT user SID
-identifier:group sid column              - varchar(255) - NT group ID
-identifier:lanman pass column            - varchar(255) - encrypted lanman password
-identifier:nt pass column                - varchar(255) - encrypted nt passwd
-identifier:plaintext pass column         - varchar(255) - plaintext password
-identifier:acct control column           - int(9) - nt user data
-identifier:unknown 3 column              - int(9) - unknown
-identifier:logon divs column             - int(9) - ?
-identifier:hours len column              - int(9) - ?
-identifier:unknown 5 column              - int(9) - unknown
-identifier:unknown 6 column              - int(9) - unknown

Eventually, you can put a colon (:) after the name of each column, which -should specify the column to update when updating the table. You can also -specify nothing behind the colon - then the data from the field will not be -updated.


17.3. Using plaintext passwords or encrypted password

I strongly discourage the use of plaintext passwords, however, you can use them:

If you would like to use plaintext passwords, set 'identifier:lanman pass column' and 'identifier:nt pass column' to 'NULL' (without the quotes) and 'identifier:plaintext pass column' to the name of the column containing the plaintext passwords.

If you use encrypted passwords, set the 'identifier:plaintext pass column' to 'NULL' (without the quotes). This is the default.


17.4. Getting non-column data from the table

It is possible to have not all data in the database and making some 'constant'.

For example, you can set 'identifier:fullname column' to : -CONCAT(First_name,' ',Sur_name)

Or, set 'identifier:workstations column' to : -NULL

See the MySQL documentation for more language constructs.


Chapter 18. Passdb XML plugin

18.1. Building

This module requires libxml2 to be installed.

To build pdb_xml, run: make bin/pdb_xml.so in -the directory source/.


18.2. Usage

The usage of pdb_xml is pretty straightforward. To export data, use: - -pdbedit -e plugin:/usr/lib/samba/pdb_xml.so:filename - -(where filename is the name of the file to put the data in)

To import data, use: -pdbedit -i plugin:/usr/lib/samba/pdb_xml.so:filename -e current-pdb - -Where filename is the name to read the data from and current-pdb to put it in.


Chapter 19. Storing Samba's User/Machine Account information in an LDAP Directory

19.1. Purpose

This document describes how to use an LDAP directory for storing Samba user -account information traditionally stored in the smbpasswd(5) file. It is -assumed that the reader already has a basic understanding of LDAP concepts -and has a working directory server already installed. For more information -on LDAP architectures and Directories, please refer to the following sites.

Note that O'Reilly Publishing is working on -a guide to LDAP for System Administrators which has a planned release date of -early summer, 2002.

Two additional Samba resources which may prove to be helpful are

  • The Samba-PDC-LDAP-HOWTO - maintained by Ignacio Coupeau.

  • The NT migration scripts from IDEALX that are - geared to manage users and group in such a Samba-LDAP Domain Controller configuration. -


19.2. Introduction

Traditionally, when configuring "encrypt -passwords = yes" in Samba's smb.conf file, user account -information such as username, LM/NT password hashes, password change times, and account -flags have been stored in the smbpasswd(5) file. There are several -disadvantages to this approach for sites with very large numbers of users (counted -in the thousands).

  • The first is that all lookups must be performed sequentially. Given that -there are approximately two lookups per domain logon (one for a normal -session connection such as when mapping a network drive or printer), this -is a performance bottleneck for lareg sites. What is needed is an indexed approach -such as is used in databases.

  • The second problem is that administrators who desired to replicate a -smbpasswd file to more than one Samba server were left to use external -tools such as rsync(1) and ssh(1) -and wrote custom, in-house scripts.

  • And finally, the amount of information which is stored in an -smbpasswd entry leaves no room for additional attributes such as -a home directory, password expiration time, or even a Relative -Identified (RID).

As a result of these defeciencies, a more robust means of storing user attributes -used by smbd was developed. The API which defines access to user accounts -is commonly referred to as the samdb interface (previously this was called the passdb -API, and is still so named in the CVS trees). In Samba 2.2.3, enabling support -for a samdb backend (e.g. --with-ldapsam or ---with-tdbsam) requires compile time support.

When compiling Samba to include the --with-ldapsam autoconf -option, smbd (and associated tools) will store and lookup user accounts in -an LDAP directory. In reality, this is very easy to understand. If you are -comfortable with using an smbpasswd file, simply replace "smbpasswd" with -"LDAP directory" in all the documentation.

There are a few points to stress about what the --with-ldapsam -does not provide. The LDAP support referred to in the this documentation does not -include:

  • A means of retrieving user account information from - an Windows 2000 Active Directory server.

  • A means of replacing /etc/passwd.

The second item can be accomplished by using LDAP NSS and PAM modules. LGPL -versions of these libraries can be obtained from PADL Software -(http://www.padl.com/). However, -the details of configuring these packages are beyond the scope of this document.


19.3. Supported LDAP Servers

The LDAP samdb code in 2.2.3 has been developed and tested using the OpenLDAP -2.0 server and client libraries. The same code should be able to work with -Netscape's Directory Server and client SDK. However, due to lack of testing -so far, there are bound to be compile errors and bugs. These should not be -hard to fix. If you are so inclined, please be sure to forward all patches to -samba-patches@samba.org and -jerry@samba.org.


19.4. Schema and Relationship to the RFC 2307 posixAccount

Samba 2.2.3 includes the necessary schema file for OpenLDAP 2.0 in -examples/LDAP/samba.schema. (Note that this schema -file has been modified since the experimental support initially included -in 2.2.2). The sambaAccount objectclass is given here:

objectclass ( 1.3.1.5.1.4.1.7165.2.2.2 NAME 'sambaAccount' SUP top STRUCTURAL
-     DESC 'Samba Account'
-     MUST ( uid $ rid )
-     MAY  ( cn $ lmPassword $ ntPassword $ pwdLastSet $ logonTime $
-            logoffTime $ kickoffTime $ pwdCanChange $ pwdMustChange $ acctFlags $
-            displayName $ smbHome $ homeDrive $ scriptPath $ profilePath $
-            description $ userWorkstations $ primaryGroupID $ domain ))

The samba.schema file has been formatted for OpenLDAP 2.0. The OID's are -owned by the Samba Team and as such is legal to be openly published. -If you translate the schema to be used with Netscape DS, please -submit the modified schema file as a patch to jerry@samba.org

Just as the smbpasswd file is mean to store information which supplements a -user's /etc/passwd entry, so is the sambaAccount object -meant to supplement the UNIX user account information. A sambaAccount is a -STRUCTURAL objectclass so it can be stored individually -in the directory. However, there are several fields (e.g. uid) which overlap -with the posixAccount objectclass outlined in RFC2307. This is by design.

In order to store all user account information (UNIX and Samba) in the directory, -it is necessary to use the sambaAccount and posixAccount objectclasses in -combination. However, smbd will still obtain the user's UNIX account -information via the standard C library calls (e.g. getpwnam(), et. al.). -This means that the Samba server must also have the LDAP NSS library installed -and functioning correctly. This division of information makes it possible to -store all Samba account information in LDAP, but still maintain UNIX account -information in NIS while the network is transitioning to a full LDAP infrastructure.


19.5. Configuring Samba with LDAP

19.5.1. OpenLDAP configuration

To include support for the sambaAccount object in an OpenLDAP directory -server, first copy the samba.schema file to slapd's configuration directory.

root# cp samba.schema /etc/openldap/schema/

Next, include the samba.schema file in slapd.conf. -The sambaAccount object contains two attributes which depend upon other schema -files. The 'uid' attribute is defined in cosine.schema and -the 'displayName' attribute is defined in the inetorgperson.schema -file. Both of these must be included before the samba.schema file.

## /etc/openldap/slapd.conf
-
-## schema files (core.schema is required by default)
-include	           /etc/openldap/schema/core.schema
-
-## needed for sambaAccount
-include            /etc/openldap/schema/cosine.schema
-include            /etc/openldap/schema/inetorgperson.schema
-include            /etc/openldap/schema/samba.schema
-
-## uncomment this line if you want to support the RFC2307 (NIS) schema
-## include         /etc/openldap/schema/nis.schema
-
-....

It is recommended that you maintain some indices on some of the most usefull attributes, -like in the following example, to speed up searches made on sambaAccount objectclasses -(and possibly posixAccount and posixGroup as well).

# Indices to maintain
-## required by OpenLDAP 2.0
-index objectclass   eq
-
-## support pb_getsampwnam()
-index uid           pres,eq
-## support pdb_getsambapwrid()
-index rid           eq
-
-## uncomment these if you are storing posixAccount and
-## posixGroup entries in the directory as well
-##index uidNumber     eq
-##index gidNumber     eq
-##index cn            eq
-##index memberUid     eq


19.5.2. Configuring Samba

The following parameters are available in smb.conf only with --with-ldapsam -was included with compiling Samba.

These are described in the smb.conf(5) man -page and so will not be repeated here. However, a sample smb.conf file for -use with an LDAP directory could appear as

## /usr/local/samba/lib/smb.conf
-[global]
-     security = user
-     encrypt passwords = yes
-
-     netbios name = TASHTEGO
-     workgroup = NARNIA
-
-     # ldap related parameters
-
-     # define the DN to use when binding to the directory servers
-     # The password for this DN is not stored in smb.conf.  Rather it
-     # must be set by using 'smbpasswd -w secretpw' to store the
-     # passphrase in the secrets.tdb file.  If the "ldap admin dn" values
-     # changes, this password will need to be reset.
-     ldap admin dn = "cn=Samba Manager,ou=people,dc=samba,dc=org"
-
-     #  specify the LDAP server's hostname (defaults to locahost)
-     ldap server = ahab.samba.org
-
-     # Define the SSL option when connecting to the directory
-     # ('off', 'start tls', or 'on' (default))
-     ldap ssl = start tls
-
-     # define the port to use in the LDAP session (defaults to 636 when
-     # "ldap ssl = on")
-     ldap port = 389
-
-     # specify the base DN to use when searching the directory
-     ldap suffix = "ou=people,dc=samba,dc=org"
-
-     # generally the default ldap search filter is ok
-     # ldap filter = "(&(uid=%u)(objectclass=sambaAccount))"


19.6. Accounts and Groups management

As users accounts are managed thru the sambaAccount objectclass, you should -modify you existing administration tools to deal with sambaAccount attributes.

Machines accounts are managed with the sambaAccount objectclass, just -like users accounts. However, it's up to you to stored thoses accounts -in a different tree of you LDAP namespace: you should use -"ou=Groups,dc=plainjoe,dc=org" to store groups and -"ou=People,dc=plainjoe,dc=org" to store users. Just configure your -NSS and PAM accordingly (usually, in the /etc/ldap.conf configuration -file).

In Samba release 2.2.3, the group management system is based on posix -groups. This meand that Samba make usage of the posixGroup objectclass. -For now, there is no NT-like group system management (global and local -groups).


19.7. Security and sambaAccount

There are two important points to remember when discussing the security -of sambaAccount entries in the directory.

  • Never retrieve the lmPassword or - ntPassword attribute values over an unencrypted LDAP session.

  • Never allow non-admin users to - view the lmPassword or ntPassword attribute values.

These password hashes are clear text equivalents and can be used to impersonate -the user without deriving the original clear text strings. For more information -on the details of LM/NT password hashes, refer to the ENCRYPTION chapter of the Samba-HOWTO-Collection.

To remedy the first security issue, the "ldap ssl" smb.conf parameter defaults -to require an encrypted session (ldap ssl = on) using -the default port of 636 -when contacting the directory server. When using an OpenLDAP 2.0 server, it -is possible to use the use the StartTLS LDAP extended operation in the place of -LDAPS. In either case, you are strongly discouraged to disable this security -(ldap ssl = off).

Note that the LDAPS protocol is deprecated in favor of the LDAPv3 StartTLS -extended operation. However, the OpenLDAP library still provides support for -the older method of securing communication between clients and servers.

The second security precaution is to prevent non-administrative users from -harvesting password hashes from the directory. This can be done using the -following ACL in slapd.conf:

## allow the "ldap admin dn" access, but deny everyone else
-access to attrs=lmPassword,ntPassword
-     by dn="cn=Samba Admin,ou=people,dc=plainjoe,dc=org" write
-     by * none


19.8. LDAP specials attributes for sambaAccounts

The sambaAccount objectclass is composed of the following attributes:

  • lmPassword: the LANMAN password 16-byte hash stored as a character - representation of a hexidecimal string.

  • ntPassword: the NT password hash 16-byte stored as a character - representation of a hexidecimal string.

  • pwdLastSet: The integer time in seconds since 1970 when the - lmPassword and ntPassword attributes were last set. -

  • acctFlags: string of 11 characters surrounded by square brackets [] - representing account flags such as U (user), W(workstation), X(no password expiration), and - D(disabled).

  • logonTime: Integer value currently unused

  • logoffTime: Integer value currently unused

  • kickoffTime: Integer value currently unused

  • pwdCanChange: Integer value currently unused

  • pwdMustChange: Integer value currently unused

  • homeDrive: specifies the drive letter to which to map the - UNC path specified by homeDirectory. The drive letter must be specified in the form "X:" - where X is the letter of the drive to map. Refer to the "logon drive" parameter in the - smb.conf(5) man page for more information.

  • scriptPath: The scriptPath property specifies the path of - the user's logon script, .CMD, .EXE, or .BAT file. The string can be null. The path - is relative to the netlogon share. Refer to the "logon script" parameter in the - smb.conf(5) man page for more information.

  • profilePath: specifies a path to the user's profile. - This value can be a null string, a local absolute path, or a UNC path. Refer to the - "logon path" parameter in the smb.conf(5) man page for more information.

  • smbHome: The homeDirectory property specifies the path of - the home directory for the user. The string can be null. If homeDrive is set and specifies - a drive letter, homeDirectory should be a UNC path. The path must be a network - UNC path of the form \\server\share\directory. This value can be a null string. - Refer to the "logon home" parameter in the smb.conf(5) man page for more information. -

  • userWorkstation: character string value currently unused. -

  • rid: the integer representation of the user's relative identifier - (RID).

  • primaryGroupID: the relative identifier (RID) of the primary group - of the user.

The majority of these parameters are only used when Samba is acting as a PDC of -a domain (refer to the Samba-PDC-HOWTO for details on -how to configure Samba as a Primary Domain Controller). The following four attributes -are only stored with the sambaAccount entry if the values are non-default values:

  • smbHome

  • scriptPath

  • logonPath

  • homeDrive

These attributes are only stored with the sambaAccount entry if -the values are non-default values. For example, assume TASHTEGO has now been -configured as a PDC and that logon home = \\%L\%u was defined in -its smb.conf file. When a user named "becky" logons to the domain, -the logon home string is expanded to \\TASHTEGO\becky. -If the smbHome attribute exists in the entry "uid=becky,ou=people,dc=samba,dc=org", -this value is used. However, if this attribute does not exist, then the value -of the logon home parameter is used in its place. Samba -will only write the attribute value to the directory entry is the value is -something other than the default (e.g. \\MOBY\becky).


19.9. Example LDIF Entries for a sambaAccount

The following is a working LDIF with the inclusion of the posixAccount objectclass:

dn: uid=guest2, ou=people,dc=plainjoe,dc=org
-ntPassword: 878D8014606CDA29677A44EFA1353FC7
-pwdMustChange: 2147483647
-primaryGroupID: 1201
-lmPassword: 552902031BEDE9EFAAD3B435B51404EE
-pwdLastSet: 1010179124
-logonTime: 0
-objectClass: sambaAccount
-uid: guest2
-kickoffTime: 2147483647
-acctFlags: [UX         ]
-logoffTime: 2147483647
-rid: 19006
-pwdCanChange: 0

The following is an LDIF entry for using both the sambaAccount and -posixAccount objectclasses:

dn: uid=gcarter, ou=people,dc=plainjoe,dc=org
-logonTime: 0
-displayName: Gerald Carter
-lmPassword: 552902031BEDE9EFAAD3B435B51404EE
-primaryGroupID: 1201
-objectClass: posixAccount
-objectClass: sambaAccount
-acctFlags: [UX         ]
-userPassword: {crypt}BpM2ej8Rkzogo
-uid: gcarter
-uidNumber: 9000
-cn: Gerald Carter
-loginShell: /bin/bash
-logoffTime: 2147483647
-gidNumber: 100
-kickoffTime: 2147483647
-pwdLastSet: 1010179230
-rid: 19000
-homeDirectory: /home/tashtego/gcarter
-pwdCanChange: 0
-pwdMustChange: 2147483647
-ntPassword: 878D8014606CDA29677A44EFA1353FC7


19.10. Comments

Please mail all comments regarding this HOWTO to jerry@samba.org. This documents was -last updated to reflect the Samba 2.2.3 release.


Chapter 20. HOWTO Access Samba source code via CVS

20.1. Introduction

Samba is developed in an open environment. Developers use CVS -(Concurrent Versioning System) to "checkin" (also known as -"commit") new source code. Samba's various CVS branches can -be accessed via anonymous CVS using the instructions -detailed in this chapter.

This document is a modified version of the instructions found at -http://samba.org/samba/cvs.html


20.2. CVS Access to samba.org

The machine samba.org runs a publicly accessible CVS -repository for access to the source code of several packages, -including samba, rsync and jitterbug. There are two main ways of -accessing the CVS server on this host.


20.2.1. Access via CVSweb

You can access the source code via your -favourite WWW browser. This allows you to access the contents of -individual files in the repository and also to look at the revision -history and commit logs of individual files. You can also ask for a diff -listing between any two versions on the repository.

Use the URL : http://samba.org/cgi-bin/cvsweb


20.2.2. Access via cvs

You can also access the source code via a -normal cvs client. This gives you much more control over you can -do with the repository and allows you to checkout whole source trees -and keep them up to date via normal cvs commands. This is the -preferred method of access if you are a developer and not -just a casual browser.

To download the latest cvs source code, point your -browser at the URL : http://www.cyclic.com/. -and click on the 'How to get cvs' link. CVS is free software under -the GNU GPL (as is Samba). Note that there are several graphical CVS clients -which provide a graphical interface to the sometimes mundane CVS commands. -Links to theses clients are also available from http://www.cyclic.com.

To gain access via anonymous cvs use the following steps. -For this example it is assumed that you want a copy of the -samba source code. For the other source code repositories -on this system just substitute the correct package name

  1. Install a recent copy of cvs. All you really need is a - copy of the cvs client binary. -

  2. Run the command -

    cvs -d :pserver:cvs@samba.org:/cvsroot login -

    When it asks you for a password type cvs. -

  3. Run the command -

    cvs -d :pserver:cvs@samba.org:/cvsroot co samba -

    This will create a directory called samba containing the - latest samba source code (i.e. the HEAD tagged cvs branch). This - currently corresponds to the 3.0 development tree. -

    CVS branches other HEAD can be obtained by using the -r - and defining a tag name. A list of branch tag names can be found on the - "Development" page of the samba web site. A common request is to obtain the - latest 2.2 release code. This could be done by using the following command. -

    cvs -d :pserver:cvs@samba.org:/cvsroot co -r SAMBA_2_2 samba -

  4. Whenever you want to merge in the latest code changes use - the following command from within the samba directory: -

    cvs update -d -P -


Chapter 21. Group mapping HOWTO

-Starting with Samba 3.0 alpha 2, a new group mapping function is available. The -current method (likely to change) to manage the groups is a new command called -smbgroupedit.

The first immediate reason to use the group mapping on a PDC, is that -the domain admin group of smb.conf is -now gone. This parameter was used to give the listed users local admin rights -on their workstations. It was some magic stuff that simply worked but didn't -scale very well for complex setups.

Let me explain how it works on NT/W2K, to have this magic fade away. -When installing NT/W2K on a computer, the installer program creates some users -and groups. Notably the 'Administrators' group, and gives to that group some -privileges like the ability to change the date and time or to kill any process -(or close too) running on the local machine. The 'Administrator' user is a -member of the 'Administrators' group, and thus 'inherit' the 'Administrators' -group privileges. If a 'joe' user is created and become a member of the -'Administrator' group, 'joe' has exactly the same rights as 'Administrator'.

When a NT/W2K machine is joined to a domain, during that phase, the "Domain -Administrators' group of the PDC is added to the 'Administrators' group of the -workstation. Every members of the 'Domain Administrators' group 'inherit' the -rights of the 'Administrators' group when logging on the workstation.

You are now wondering how to make some of your samba PDC users members of the -'Domain Administrators' ? That's really easy.

  1. create a unix group (usually in /etc/group), let's call it domadm

  2. add to this group the users that must be Administrators. For example if you want joe,john and mary, your entry in /etc/group will look like:

    domadm:x:502:joe,john,mary

  3. Map this domadm group to the domain admins group by running the command:

    smbgroupedit -c "Domain Admins" -u domadm

You're set, joe, john and mary are domain administrators !

Like the Domain Admins group, you can map any arbitrary Unix group to any NT -group. You can also make any Unix group a domain group. For example, on a domain -member machine (an NT/W2K or a samba server running winbind), you would like to -give access to a certain directory to some users who are member of a group on -your samba PDC. Flag that group as a domain group by running:

smbgroupedit -a unixgroup -td

You can list the various groups in the mapping database like this

smbgroupedit -v


Chapter 22. Samba performance issues

22.1. Comparisons

The Samba server uses TCP to talk to the client. Thus if you are -trying to see if it performs well you should really compare it to -programs that use the same protocol. The most readily available -programs for file transfer that use TCP are ftp or another TCP based -SMB server.

If you want to test against something like a NT or WfWg server then -you will have to disable all but TCP on either the client or -server. Otherwise you may well be using a totally different protocol -(such as Netbeui) and comparisons may not be valid.

Generally you should find that Samba performs similarly to ftp at raw -transfer speed. It should perform quite a bit faster than NFS, -although this very much depends on your system.

Several people have done comparisons between Samba and Novell, NFS or -WinNT. In some cases Samba performed the best, in others the worst. I -suspect the biggest factor is not Samba vs some other system but the -hardware and drivers used on the various systems. Given similar -hardware Samba should certainly be competitive in speed with other -systems.


22.2. Oplocks

22.2.1. Overview

Oplocks are the way that SMB clients get permission from a server to -locally cache file operations. If a server grants an oplock -(opportunistic lock) then the client is free to assume that it is the -only one accessing the file and it will agressively cache file -data. With some oplock types the client may even cache file open/close -operations. This can give enormous performance benefits.

With the release of Samba 1.9.18 we now correctly support opportunistic -locks. This is turned on by default, and can be turned off on a share- -by-share basis by setting the parameter :

oplocks = False

We recommend that you leave oplocks on however, as current benchmark -tests with NetBench seem to give approximately a 30% improvement in -speed with them on. This is on average however, and the actual -improvement seen can be orders of magnitude greater, depending on -what the client redirector is doing.

Previous to Samba 1.9.18 there was a 'fake oplocks' option. This -option has been left in the code for backwards compatibility reasons -but it's use is now deprecated. A short summary of what the old -code did follows.


22.2.2. Level2 Oplocks

With Samba 2.0.5 a new capability - level2 (read only) oplocks is -supported (although the option is off by default - see the smb.conf -man page for details). Turning on level2 oplocks (on a share-by-share basis) -by setting the parameter :

level2 oplocks = true

should speed concurrent access to files that are not commonly written -to, such as application serving shares (ie. shares that contain common -.EXE files - such as a Microsoft Office share) as it allows clients to -read-ahread cache copies of these files.


22.2.3. Old 'fake oplocks' option - deprecated

Samba can also fake oplocks, by granting a oplock whenever a client -asks for one. This is controlled using the smb.conf option "fake -oplocks". If you set "fake oplocks = yes" then you are telling the -client that it may agressively cache the file data for all opens.

Enabling 'fake oplocks' on all read-only shares or shares that you know -will only be accessed from one client at a time you will see a big -performance improvement on many operations. If you enable this option -on shares where multiple clients may be accessing the files read-write -at the same time you can get data corruption.


22.3. Socket options

There are a number of socket options that can greatly affect the -performance of a TCP based server like Samba.

The socket options that Samba uses are settable both on the command -line with the -O option, or in the smb.conf file.

The "socket options" section of the smb.conf manual page describes how -to set these and gives recommendations.

Getting the socket options right can make a big difference to your -performance, but getting them wrong can degrade it by just as -much. The correct settings are very dependent on your local network.

The socket option TCP_NODELAY is the one that seems to make the -biggest single difference for most networks. Many people report that -adding "socket options = TCP_NODELAY" doubles the read performance of -a Samba drive. The best explanation I have seen for this is that the -Microsoft TCP/IP stack is slow in sending tcp ACKs.


22.4. Read size

The option "read size" affects the overlap of disk reads/writes with -network reads/writes. If the amount of data being transferred in -several of the SMB commands (currently SMBwrite, SMBwriteX and -SMBreadbraw) is larger than this value then the server begins writing -the data before it has received the whole packet from the network, or -in the case of SMBreadbraw, it begins writing to the network before -all the data has been read from disk.

This overlapping works best when the speeds of disk and network access -are similar, having very little effect when the speed of one is much -greater than the other.

The default value is 16384, but very little experimentation has been -done yet to determine the optimal value, and it is likely that the best -value will vary greatly between systems anyway. A value over 65536 is -pointless and will cause you to allocate memory unnecessarily.


22.5. Max xmit

At startup the client and server negotiate a "maximum transmit" size, -which limits the size of nearly all SMB commands. You can set the -maximum size that Samba will negotiate using the "max xmit = " option -in smb.conf. Note that this is the maximum size of SMB request that -Samba will accept, but not the maximum size that the *client* will accept. -The client maximum receive size is sent to Samba by the client and Samba -honours this limit.

It defaults to 65536 bytes (the maximum), but it is possible that some -clients may perform better with a smaller transmit unit. Trying values -of less than 2048 is likely to cause severe problems.

In most cases the default is the best option.


22.6. Locking

By default Samba does not implement strict locking on each read/write -call (although it did in previous versions). If you enable strict -locking (using "strict locking = yes") then you may find that you -suffer a severe performance hit on some systems.

The performance hit will probably be greater on NFS mounted -filesystems, but could be quite high even on local disks.


22.7. Share modes

Some people find that opening files is very slow. This is often -because of the "share modes" code needed to fully implement the dos -share modes stuff. You can disable this code using "share modes = -no". This will gain you a lot in opening and closing files but will -mean that (in some cases) the system won't force a second user of a -file to open the file read-only if the first has it open -read-write. For many applications that do their own locking this -doesn't matter, but for some it may. Most Windows applications -depend heavily on "share modes" working correctly and it is -recommended that the Samba share mode support be left at the -default of "on".

The share mode code in Samba has been re-written in the 1.9.17 -release following tests with the Ziff-Davis NetBench PC Benchmarking -tool. It is now believed that Samba 1.9.17 implements share modes -similarly to Windows NT.

NOTE: In the most recent versions of Samba there is an option to use -shared memory via mmap() to implement the share modes. This makes -things much faster. See the Makefile for how to enable this.


22.8. Log level

If you set the log level (also known as "debug level") higher than 2 -then you may suffer a large drop in performance. This is because the -server flushes the log file after each operation, which can be very -expensive.


22.9. Wide lines

The "wide links" option is now enabled by default, but if you disable -it (for better security) then you may suffer a performance hit in -resolving filenames. The performance loss is lessened if you have -"getwd cache = yes", which is now the default.


22.10. Read raw

The "read raw" operation is designed to be an optimised, low-latency -file read operation. A server may choose to not support it, -however. and Samba makes support for "read raw" optional, with it -being enabled by default.

In some cases clients don't handle "read raw" very well and actually -get lower performance using it than they get using the conventional -read operations.

So you might like to try "read raw = no" and see what happens on your -network. It might lower, raise or not affect your performance. Only -testing can really tell.


22.11. Write raw

The "write raw" operation is designed to be an optimised, low-latency -file write operation. A server may choose to not support it, -however. and Samba makes support for "write raw" optional, with it -being enabled by default.

Some machines may find "write raw" slower than normal write, in which -case you may wish to change this option.


22.12. Read prediction

Samba can do read prediction on some of the SMB commands. Read -prediction means that Samba reads some extra data on the last file it -read while waiting for the next SMB command to arrive. It can then -respond more quickly when the next read request arrives.

This is disabled by default. You can enable it by using "read -prediction = yes".

Note that read prediction is only used on files that were opened read -only.

Read prediction should particularly help for those silly clients (such -as "Write" under NT) which do lots of very small reads on a file.

Samba will not read ahead more data than the amount specified in the -"read size" option. It always reads ahead on 1k block boundaries.


22.13. Memory mapping

Samba supports reading files via memory mapping them. One some -machines this can give a large boost to performance, on others it -makes not difference at all, and on some it may reduce performance.

To enable you you have to recompile Samba with the -DUSE_MMAP option -on the FLAGS line of the Makefile.

Note that memory mapping is only used on files opened read only, and -is not used by the "read raw" operation. Thus you may find memory -mapping is more effective if you disable "read raw" using "read raw = -no".


22.14. Slow Clients

One person has reported that setting the protocol to COREPLUS rather -than LANMAN2 gave a dramatic speed improvement (from 10k/s to 150k/s).

I suspect that his PC's (386sx16 based) were asking for more data than -they could chew. I suspect a similar speed could be had by setting -"read raw = no" and "max xmit = 2048", instead of changing the -protocol. Lowering the "read size" might also help.


22.15. Slow Logins

Slow logins are almost always due to the password checking time. Using -the lowest practical "password level" will improve things a lot. You -could also enable the "UFC crypt" option in the Makefile.


22.16. Client tuning

Often a speed problem can be traced to the client. The client (for -example Windows for Workgroups) can often be tuned for better TCP -performance.

See your client docs for details. In particular, I have heard rumours -that the WfWg options TCPWINDOWSIZE and TCPSEGMENTSIZE can have a -large impact on performance.

Also note that some people have found that setting DefaultRcvWindow in -the [MSTCP] section of the SYSTEM.INI file under WfWg to 3072 gives a -big improvement. I don't know why.

My own experience wth DefaultRcvWindow is that I get much better -performance with a large value (16384 or larger). Other people have -reported that anything over 3072 slows things down enourmously. One -person even reported a speed drop of a factor of 30 when he went from -3072 to 8192. I don't know why.

It probably depends a lot on your hardware, and the type of unix box -you have at the other end of the link.

Paul Cochrane has done some testing on client side tuning and come -to the following conclusions:

Install the W2setup.exe file from www.microsoft.com. This is an -update for the winsock stack and utilities which improve performance.

Configure the win95 TCPIP registry settings to give better -perfomance. I use a program called MTUSPEED.exe which I got off the -net. There are various other utilities of this type freely available. -The setting which give the best performance for me are:

  1. MaxMTU Remove

  2. RWIN Remove

  3. MTUAutoDiscover Disable

  4. MTUBlackHoleDetect Disable

  5. Time To Live Enabled

  6. Time To Live - HOPS 32

  7. NDI Cache Size 0

I tried virtually all of the items mentioned in the document and -the only one which made a difference to me was the socket options. It -turned out I was better off without any!!!!!

In terms of overall speed of transfer, between various win95 clients -and a DX2-66 20MB server with a crappy NE2000 compatible and old IDE -drive (Kernel 2.0.30). The transfer rate was reasonable for 10 baseT.

FIXME -The figures are: Put Get -P166 client 3Com card: 420-440kB/s 500-520kB/s -P100 client 3Com card: 390-410kB/s 490-510kB/s -DX4-75 client NE2000: 370-380kB/s 330-350kB/s

I based these test on transfer two files a 4.5MB text file and a 15MB -textfile. The results arn't bad considering the hardware Samba is -running on. It's a crap machine!!!!

The updates mentioned in 1 and 2 brought up the transfer rates from -just over 100kB/s in some clients.

A new client is a P333 connected via a 100MB/s card and hub. The -transfer rates from this were good: 450-500kB/s on put and 600+kB/s -on get.

Looking at standard FTP throughput, Samba is a bit slower (100kB/s -upwards). I suppose there is more going on in the samba protocol, but -if it could get up to the rate of FTP the perfomance would be quite -staggering.


22.17. My Results

Some people want to see real numbers in a document like this, so here -they are. I have a 486sx33 client running WfWg 3.11 with the 3.11b -tcp/ip stack. It has a slow IDE drive and 20Mb of ram. It has a SMC -Elite-16 ISA bus ethernet card. The only WfWg tuning I've done is to -set DefaultRcvWindow in the [MSTCP] section of system.ini to 16384. My -server is a 486dx3-66 running Linux. It also has 20Mb of ram and a SMC -Elite-16 card. You can see my server config in the examples/tridge/ -subdirectory of the distribution.

I get 490k/s on reading a 8Mb file with copy. -I get 441k/s writing the same file to the samba server.

Of course, there's a lot more to benchmarks than 2 raw throughput -figures, but it gives you a ballpark figure.

I've also tested Win95 and WinNT, and found WinNT gave me the best -speed as a samba client. The fastest client of all (for me) is -smbclient running on another linux box. Maybe I'll add those results -here someday ...

IV. Appendixes

Table of Contents
23. Portability
23.1. HPUX
23.2. SCO Unix
23.3. DNIX
23.4. RedHat Linux Rembrandt-II
24. Samba and other CIFS clients
24.1. Macintosh clients?
24.2. OS2 Client
24.2.1. How can I configure OS/2 Warp Connect or - OS/2 Warp 4 as a client for Samba?
24.2.2. How can I configure OS/2 Warp 3 (not Connect), - OS/2 1.2, 1.3 or 2.x for Samba?
24.2.3. Are there any other issues when OS/2 (any version) - is used as a client?
24.2.4. How do I get printer driver download working - for OS/2 clients?
24.3. Windows for Workgroups
24.3.1. Use latest TCP/IP stack from Microsoft
24.3.2. Delete .pwl files after password change
24.3.3. Configure WfW password handling
24.3.4. Case handling of passwords
24.4. Windows '95/'98
24.5. Windows 2000 Service Pack 2
25. Reporting Bugs
25.1. Introduction
25.2. General info
25.3. Debug levels
25.4. Internal errors
25.5. Attaching to a running process
25.6. Patches
26. Diagnosing your samba server
26.1. Introduction
26.2. Assumptions
26.3. Tests
26.3.1. Test 1
26.3.2. Test 2
26.3.3. Test 3
26.3.4. Test 4
26.3.5. Test 5
26.3.6. Test 6
26.3.7. Test 7
26.3.8. Test 8
26.3.9. Test 9
26.3.10. Test 10
26.3.11. Test 11
26.4. Still having troubles?

Chapter 23. Portability

Samba works on a wide range of platforms but the interface all the -platforms provide is not always compatible. This chapter contains -platform-specific information about compiling and using samba.


23.1. HPUX

HP's implementation of supplementary groups is, er, non-standard (for -hysterical reasons). There are two group files, /etc/group and -/etc/logingroup; the system maps UIDs to numbers using the former, but -initgroups() reads the latter. Most system admins who know the ropes -symlink /etc/group to /etc/logingroup (hard link doesn't work for reasons -too stupid to go into here). initgroups() will complain if one of the -groups you're in in /etc/logingroup has what it considers to be an invalid -ID, which means outside the range [0..UID_MAX], where UID_MAX is (I think) -60000 currently on HP-UX. This precludes -2 and 65534, the usual 'nobody' -GIDs.

If you encounter this problem, make sure that the programs that are failing -to initgroups() be run as users not in any groups with GIDs outside the -allowed range.

This is documented in the HP manual pages under setgroups(2) and passwd(4).

On HPUX you must use gcc or the HP Ansi compiler. The free compiler -that comes with HP-UX is not Ansi compliant and cannot compile -Samba.


23.2. SCO Unix

-If you run an old version of SCO Unix then you may need to get important -TCP/IP patches for Samba to work correctly. Without the patch, you may -encounter corrupt data transfers using samba.

The patch you need is UOD385 Connection Drivers SLS. It is available from -SCO (ftp.sco.com, directory SLS, files uod385a.Z and uod385a.ltr.Z).


23.3. DNIX

DNIX has a problem with seteuid() and setegid(). These routines are -needed for Samba to work correctly, but they were left out of the DNIX -C library for some reason.

For this reason Samba by default defines the macro NO_EID in the DNIX -section of includes.h. This works around the problem in a limited way, -but it is far from ideal, some things still won't work right.

-To fix the problem properly you need to assemble the following two -functions and then either add them to your C library or link them into -Samba.

-put this in the file setegid.s:

        .globl  _setegid
-_setegid:
-        moveq   #47,d0
-        movl    #100,a0
-        moveq   #1,d1
-        movl    4(sp),a1
-        trap    #9
-        bccs    1$
-        jmp     cerror
-1$:
-        clrl    d0
-        rts

put this in the file seteuid.s:

        .globl  _seteuid
-_seteuid:
-        moveq   #47,d0
-        movl    #100,a0
-        moveq   #0,d1
-        movl    4(sp),a1
-        trap    #9
-        bccs    1$
-        jmp     cerror
-1$:
-        clrl    d0
-        rts

after creating the above files you then assemble them using

as seteuid.s

as setegid.s

that should produce the files seteuid.o and -setegid.o

then you need to add these to the LIBSM line in the DNIX section of -the Samba Makefile. Your LIBSM line will then look something like this:

LIBSM = setegid.o seteuid.o -ln

-You should then remove the line:

#define NO_EID

from the DNIX section of includes.h


23.4. RedHat Linux Rembrandt-II

By default RedHat Rembrandt-II during installation adds an -entry to /etc/hosts as follows: -

	127.0.0.1 loopback "hostname"."domainname"

This causes Samba to loop back onto the loopback interface. -The result is that Samba fails to communicate correctly with -the world and therefor may fail to correctly negotiate who -is the master browse list holder and who is the master browser.

Corrective Action: Delete the entry after the word loopback - in the line starting 127.0.0.1


Chapter 24. Samba and other CIFS clients

This chapter contains client-specific information.


24.1. Macintosh clients?

Yes. Thursby now have a CIFS Client / Server called DAVE - see

They test it against Windows 95, Windows NT and samba for -compatibility issues. At the time of writing, DAVE was at version -1.0.1. The 1.0.0 to 1.0.1 update is available as a free download from -the Thursby web site (the speed of finder copies has been greatly -enhanced, and there are bug-fixes included).

-Alternatives - There are two free implementations of AppleTalk for -several kinds of UNIX machnes, and several more commercial ones. -These products allow you to run file services and print services -natively to Macintosh users, with no additional support required on -the Macintosh. The two free omplementations are -Netatalk, and -CAP. -What Samba offers MS -Windows users, these packages offer to Macs. For more info on these -packages, Samba, and Linux (and other UNIX-based systems) see -http://www.eats.com/linux_mac_win.html


24.2. OS2 Client

24.2.1. How can I configure OS/2 Warp Connect or - OS/2 Warp 4 as a client for Samba?

A more complete answer to this question can be - found on http://carol.wins.uva.nl/~leeuw/samba/warp.html.

Basically, you need three components:

  • The File and Print Client ('IBM Peer') -

  • TCP/IP ('Internet support') -

  • The "NetBIOS over TCP/IP" driver ('TCPBEUI') -

Installing the first two together with the base operating - system on a blank system is explained in the Warp manual. If Warp - has already been installed, but you now want to install the - networking support, use the "Selective Install for Networking" - object in the "System Setup" folder.

Adding the "NetBIOS over TCP/IP" driver is not described - in the manual and just barely in the online documentation. Start - MPTS.EXE, click on OK, click on "Configure LAPS" and click - on "IBM OS/2 NETBIOS OVER TCP/IP" in 'Protocols'. This line - is then moved to 'Current Configuration'. Select that line, - click on "Change number" and increase it from 0 to 1. Save this - configuration.

If the Samba server(s) is not on your local subnet, you - can optionally add IP names and addresses of these servers - to the "Names List", or specify a WINS server ('NetBIOS - Nameserver' in IBM and RFC terminology). For Warp Connect you - may need to download an update for 'IBM Peer' to bring it on - the same level as Warp 4. See the webpage mentioned above.


24.2.2. How can I configure OS/2 Warp 3 (not Connect), - OS/2 1.2, 1.3 or 2.x for Samba?

You can use the free Microsoft LAN Manager 2.2c Client - for OS/2 from - ftp://ftp.microsoft.com/BusSys/Clients/LANMAN.OS2/. - See http://carol.wins.uva.nl/~leeuw/lanman.html for - more information on how to install and use this client. In - a nutshell, edit the file \OS2VER in the root directory of - the OS/2 boot partition and add the lines:

		20=setup.exe
-		20=netwksta.sys
-		20=netvdd.sys
-		

before you install the client. Also, don't use the - included NE2000 driver because it is buggy. Try the NE2000 - or NS2000 driver from - ftp://ftp.cdrom.com/pub/os2/network/ndis/ instead. -


24.2.3. Are there any other issues when OS/2 (any version) - is used as a client?

When you do a NET VIEW or use the "File and Print - Client Resource Browser", no Samba servers show up. This can - be fixed by a patch from http://carol.wins.uva.nl/~leeuw/samba/fix.html. - The patch will be included in a later version of Samba. It also - fixes a couple of other problems, such as preserving long - filenames when objects are dragged from the Workplace Shell - to the Samba server.


24.2.4. How do I get printer driver download working - for OS/2 clients?

First, create a share called [PRINTDRV] that is - world-readable. Copy your OS/2 driver files there. Note - that the .EA_ files must still be separate, so you will need - to use the original install files, and not copy an installed - driver from an OS/2 system.

Install the NT driver first for that printer. Then, - add to your smb.conf a parameter, os2 driver map = - filename". Then, in the file - specified by filename, map the - name of the NT driver name to the OS/2 driver name as - follows:

nt driver name = os2 "driver - name"."device name", e.g.: - HP LaserJet 5L = LASERJET.HP LaserJet 5L

You can have multiple drivers mapped in this file.

If you only specify the OS/2 driver name, and not the - device name, the first attempt to download the driver will - actually download the files, but the OS/2 client will tell - you the driver is not available. On the second attempt, it - will work. This is fixed simply by adding the device name - to the mapping, after which it will work on the first attempt. -


24.3. Windows for Workgroups

24.3.1. Use latest TCP/IP stack from Microsoft

Use the latest TCP/IP stack from microsoft if you use Windows -for workgroups.

The early TCP/IP stacks had lots of bugs.

-Microsoft has released an incremental upgrade to their TCP/IP 32-Bit -VxD drivers. The latest release can be found on their ftp site at -ftp.microsoft.com, located in /peropsys/windows/public/tcpip/wfwt32.exe. -There is an update.txt file there that describes the problems that were -fixed. New files include WINSOCK.DLL, TELNET.EXE, WSOCK.386, VNBT.386, -WSTCP.386, TRACERT.EXE, NETSTAT.EXE, and NBTSTAT.EXE.


24.3.2. Delete .pwl files after password change

WfWg does a lousy job with passwords. I find that if I change my -password on either the unix box or the PC the safest thing to do is to -delete the .pwl files in the windows directory. The PC will complain about not finding the files, but will soon get over it, allowing you to enter the new password.

-If you don't do this you may find that WfWg remembers and uses the old -password, even if you told it a new one.

-Often WfWg will totally ignore a password you give it in a dialog box.


24.3.3. Configure WfW password handling

There is a program call admincfg.exe -on the last disk (disk 8) of the WFW 3.11 disk set. To install it -type EXPAND A:\ADMINCFG.EX_ C:\WINDOWS\ADMINCFG.EXE Then add an icon -for it via the "Progam Manager" "New" Menu. This program allows you -to control how WFW handles passwords. ie disable Password Caching etc -for use with security = user


24.3.4. Case handling of passwords

Windows for Workgroups uppercases the password before sending it to the server. Unix passwords can be case-sensitive though. Check the smb.conf(5) information on password level to specify what characters samba should try to uppercase when checking.


24.4. Windows '95/'98

When using Windows 95 OEM SR2 the following updates are recommended where Samba -is being used. Please NOTE that the above change will affect you once these -updates have been installed.

-There are more updates than the ones mentioned here. You are referred to the -Microsoft Web site for all currently available updates to your specific version -of Windows 95.

  1. Kernel Update: KRNLUPD.EXE

  2. Ping Fix: PINGUPD.EXE

  3. RPC Update: RPCRTUPD.EXE

  4. TCP/IP Update: VIPUPD.EXE

  5. Redirector Update: VRDRUPD.EXE

Also, if using MS OutLook it is desirable to install the OLEUPD.EXE fix. This -fix may stop your machine from hanging for an extended period when exiting -OutLook and you may also notice a significant speedup when accessing network -neighborhood services.


24.5. Windows 2000 Service Pack 2

-There are several annoyances with Windows 2000 SP2. One of which -only appears when using a Samba server to host user profiles -to Windows 2000 SP2 clients in a Windows domain. This assumes -that Samba is a member of the domain, but the problem will -likely occur if it is not.

-In order to server profiles successfully to Windows 2000 SP2 -clients (when not operating as a PDC), Samba must have -nt acl support = no -added to the file share which houses the roaming profiles. -If this is not done, then the Windows 2000 SP2 client will -complain about not being able to access the profile (Access -Denied) and create multiple copies of it on disk (DOMAIN.user.001, -DOMAIN.user.002, etc...). See the -smb.conf(5) man page -for more details on this option. Also note that the -nt acl support parameter was formally a global parameter in -releases prior to Samba 2.2.2.

-The following is a minimal profile share:

	[profile]
-		path = /export/profile
-		create mask = 0600
-		directory mask = 0700
-		nt acl support = no
-		read only = no

The reason for this bug is that the Win2k SP2 client copies -the security descriptor for the profile which contains -the Samba server's SID, and not the domain SID. The client -compares the SID for SAMBA\user and realizes it is -different that the one assigned to DOMAIN\user. Hence the reason -for the "access denied" message.

By disabling the nt acl support parameter, Samba will send -the Win2k client a response to the QuerySecurityDescriptor -trans2 call which causes the client to set a default ACL -for the profile. This default ACL includes

DOMAIN\user "Full Control"

NOTE : This bug does not occur when using winbind to -create accounts on the Samba host for Domain users.


Chapter 25. Reporting Bugs

25.1. Introduction

The email address for bug reports for stable releases is samba@samba.org. -Bug reports for alpha releases should go to samba-technical@samba.org.

Please take the time to read this file before you submit a bug -report. Also, please see if it has changed between releases, as we -may be changing the bug reporting mechanism at some time.

Please also do as much as you can yourself to help track down the -bug. Samba is maintained by a dedicated group of people who volunteer -their time, skills and efforts. We receive far more mail about it than -we can possibly answer, so you have a much higher chance of an answer -and a fix if you send us a "developer friendly" bug report that lets -us fix it fast.

Do not assume that if you post the bug to the comp.protocols.smb -newsgroup or the mailing list that we will read it. If you suspect that your -problem is not a bug but a configuration problem then it is better to send -it to the Samba mailing list, as there are (at last count) 5000 other users on -that list that may be able to help you.

You may also like to look though the recent mailing list archives, -which are conveniently accessible on the Samba web pages -at http://samba.org/samba/.


25.2. General info

Before submitting a bug report check your config for silly -errors. Look in your log files for obvious messages that tell you that -you've misconfigured something and run testparm to test your config -file for correct syntax.

Have you run through the diagnosis? -This is very important.

If you include part of a log file with your bug report then be sure to -annotate it with exactly what you were doing on the client at the -time, and exactly what the results were.


25.3. Debug levels

If the bug has anything to do with Samba behaving incorrectly as a -server (like refusing to open a file) then the log files will probably -be very useful. Depending on the problem a log level of between 3 and -10 showing the problem may be appropriate. A higher level givesmore -detail, but may use too much disk space.

To set the debug level use log level = in your -smb.conf. You may also find it useful to set the log -level higher for just one machine and keep separate logs for each machine. -To do this use:

log level = 10
-log file = /usr/local/samba/lib/log.%m
-include = /usr/local/samba/lib/smb.conf.%m

then create a file -/usr/local/samba/lib/smb.conf.machine where -"machine" is the name of the client you wish to debug. In that file -put any smb.conf commands you want, for example -log level= may be useful. This also allows you to -experiment with different security systems, protocol levels etc on just -one machine.

The smb.conf entry log level = -is synonymous with the entry debuglevel = that has been -used in older versions of Samba and is being retained for backwards -compatibility of smb.conf files.

As the log level = value is increased you will record -a significantly increasing level of debugging information. For most -debugging operations you may not need a setting higher than 3. Nearly -all bugs can be tracked at a setting of 10, but be prepared for a VERY -large volume of log data.


25.4. Internal errors

If you get a "INTERNAL ERROR" message in your log files it means that -Samba got an unexpected signal while running. It is probably a -segmentation fault and almost certainly means a bug in Samba (unless -you have faulty hardware or system software)

If the message came from smbd then it will probably be accompanied by -a message which details the last SMB message received by smbd. This -info is often very useful in tracking down the problem so please -include it in your bug report.

You should also detail how to reproduce the problem, if -possible. Please make this reasonably detailed.

You may also find that a core file appeared in a "corefiles" -subdirectory of the directory where you keep your samba log -files. This file is the most useful tool for tracking down the bug. To -use it you do this:

gdb smbd core

adding appropriate paths to smbd and core so gdb can find them. If you -don't have gdb then try "dbx". Then within the debugger use the -command "where" to give a stack trace of where the problem -occurred. Include this in your mail.

If you known any assembly language then do a "disass" of the routine -where the problem occurred (if its in a library routine then -disassemble the routine that called it) and try to work out exactly -where the problem is by looking at the surrounding code. Even if you -don't know assembly then incuding this info in the bug report can be -useful.


25.5. Attaching to a running process

Unfortunately some unixes (in particular some recent linux kernels) -refuse to dump a core file if the task has changed uid (which smbd -does often). To debug with this sort of system you could try to attach -to the running process using "gdb smbd PID" where you get PID from -smbstatus. Then use "c" to continue and try to cause the core dump -using the client. The debugger should catch the fault and tell you -where it occurred.


25.6. Patches

The best sort of bug report is one that includes a fix! If you send us -patches please use diff -u format if your version of -diff supports it, otherwise use diff -c4. Make sure -your do the diff against a clean version of the source and let me know -exactly what version you used.


Chapter 26. Diagnosing your samba server

26.1. Introduction

This file contains a list of tests you can perform to validate your -Samba server. It also tells you what the likely cause of the problem -is if it fails any one of these steps. If it passes all these tests -then it is probably working fine.

You should do ALL the tests, in the order shown. We have tried to -carefully choose them so later tests only use capabilities verified in -the earlier tests.

If you send one of the samba mailing lists an email saying "it doesn't work" -and you have not followed this test procedure then you should not be surprised -your email is ignored.


26.2. Assumptions

In all of the tests it is assumed you have a Samba server called -BIGSERVER and a PC called ACLIENT both in workgroup TESTGROUP.

The procedure is similar for other types of clients.

It is also assumed you know the name of an available share in your -smb.conf. I will assume this share is called "tmp". You can add a -"tmp" share like by adding the following to smb.conf:


[tmp]
- comment = temporary files 
- path = /tmp
- read only = yes

THESE TESTS ASSUME VERSION 3.0.0 OR LATER OF THE SAMBA SUITE. SOME -COMMANDS SHOWN DID NOT EXIST IN EARLIER VERSIONS

Please pay attention to the error messages you receive. If any error message -reports that your server is being unfriendly you should first check that you -IP name resolution is correctly set up. eg: Make sure your /etc/resolv.conf -file points to name servers that really do exist.

Also, if you do not have DNS server access for name resolution please check -that the settings for your smb.conf file results in "dns proxy = no". The -best way to check this is with "testparm smb.conf"


26.3. Tests

26.3.1. Test 1

In the directory in which you store your smb.conf file, run the command -"testparm smb.conf". If it reports any errors then your smb.conf -configuration file is faulty.

Note: Your smb.conf file may be located in: /etc/samba - Or in: /usr/local/samba/lib


26.3.2. Test 2

Run the command "ping BIGSERVER" from the PC and "ping ACLIENT" from -the unix box. If you don't get a valid response then your TCP/IP -software is not correctly installed.

Note that you will need to start a "dos prompt" window on the PC to -run ping.

If you get a message saying "host not found" or similar then your DNS -software or /etc/hosts file is not correctly setup. It is possible to -run samba without DNS entries for the server and client, but I assume -you do have correct entries for the remainder of these tests.

Another reason why ping might fail is if your host is running firewall -software. You will need to relax the rules to let in the workstation -in question, perhaps by allowing access from another subnet (on Linux -this is done via the ipfwadm program.)


26.3.3. Test 3

Run the command "smbclient -L BIGSERVER" on the unix box. You -should get a list of available shares back.

If you get a error message containing the string "Bad password" then -you probably have either an incorrect "hosts allow", "hosts deny" or -"valid users" line in your smb.conf, or your guest account is not -valid. Check what your guest account is using "testparm" and -temporarily remove any "hosts allow", "hosts deny", "valid users" or -"invalid users" lines.

If you get a "connection refused" response then the smbd server may -not be running. If you installed it in inetd.conf then you probably edited -that file incorrectly. If you installed it as a daemon then check that -it is running, and check that the netbios-ssn port is in a LISTEN -state using "netstat -a".

If you get a "session request failed" then the server refused the -connection. If it says "Your server software is being unfriendly" then -its probably because you have invalid command line parameters to smbd, -or a similar fatal problem with the initial startup of smbd. Also -check your config file (smb.conf) for syntax errors with "testparm" -and that the various directories where samba keeps its log and lock -files exist.

There are a number of reasons for which smbd may refuse or decline -a session request. The most common of these involve one or more of -the following smb.conf file entries:

	hosts deny = ALL
-	hosts allow = xxx.xxx.xxx.xxx/yy
-	bind interfaces only = Yes

In the above, no allowance has been made for any session requests that -will automatically translate to the loopback adaptor address 127.0.0.1. -To solve this problem change these lines to:

	hosts deny = ALL
-	hosts allow = xxx.xxx.xxx.xxx/yy 127.

Do NOT use the "bind interfaces only" parameter where you may wish to -use the samba password change facility, or where smbclient may need to -access local service for name resolution or for local resource -connections. (Note: the "bind interfaces only" parameter deficiency -where it will not allow connections to the loopback address will be -fixed soon).

Another common cause of these two errors is having something already running -on port 139, such as Samba (ie: smbd is running from inetd already) or -something like Digital's Pathworks. Check your inetd.conf file before trying -to start smbd as a daemon, it can avoid a lot of frustration!

And yet another possible cause for failure of TEST 3 is when the subnet mask -and / or broadcast address settings are incorrect. Please check that the -network interface IP Address / Broadcast Address / Subnet Mask settings are -correct and that Samba has correctly noted these in the log.nmb file.


26.3.4. Test 4

Run the command "nmblookup -B BIGSERVER __SAMBA__". You should get the -IP address of your Samba server back.

If you don't then nmbd is incorrectly installed. Check your inetd.conf -if you run it from there, or that the daemon is running and listening -to udp port 137.

One common problem is that many inetd implementations can't take many -parameters on the command line. If this is the case then create a -one-line script that contains the right parameters and run that from -inetd.


26.3.5. Test 5

run the command nmblookup -B ACLIENT '*'

You should get the PCs IP address back. If you don't then the client -software on the PC isn't installed correctly, or isn't started, or you -got the name of the PC wrong.

If ACLIENT doesn't resolve via DNS then use the IP address of the -client in the above test.


26.3.6. Test 6

Run the command nmblookup -d 2 '*'

This time we are trying the same as the previous test but are trying -it via a broadcast to the default broadcast address. A number of -Netbios/TCPIP hosts on the network should respond, although Samba may -not catch all of the responses in the short time it listens. You -should see "got a positive name query response" messages from several -hosts.

If this doesn't give a similar result to the previous test then -nmblookup isn't correctly getting your broadcast address through its -automatic mechanism. In this case you should experiment use the -"interfaces" option in smb.conf to manually configure your IP -address, broadcast and netmask.

If your PC and server aren't on the same subnet then you will need to -use the -B option to set the broadcast address to the that of the PCs -subnet.

This test will probably fail if your subnet mask and broadcast address are -not correct. (Refer to TEST 3 notes above).


26.3.7. Test 7

Run the command smbclient //BIGSERVER/TMP. You should -then be prompted for a password. You should use the password of the account -you are logged into the unix box with. If you want to test with -another account then add the -U >accountname< option to the end of -the command line. eg: -smbclient //bigserver/tmp -Ujohndoe

Note: It is possible to specify the password along with the username -as follows: -smbclient //bigserver/tmp -Ujohndoe%secret

Once you enter the password you should get the "smb>" prompt. If you -don't then look at the error message. If it says "invalid network -name" then the service "tmp" is not correctly setup in your smb.conf.

If it says "bad password" then the likely causes are:

  1. you have shadow passords (or some other password system) but didn't - compile in support for them in smbd -

  2. your "valid users" configuration is incorrect -

  3. you have a mixed case password and you haven't enabled the "password - level" option at a high enough level -

  4. the "path =" line in smb.conf is incorrect. Check it with testparm -

  5. you enabled password encryption but didn't create the SMB encrypted - password file -

Once connected you should be able to use the commands -dir get put etc. -Type help >command< for instructions. You should -especially check that the amount of free disk space shown is correct -when you type dir.


26.3.8. Test 8

On the PC type the command net view \\BIGSERVER. You will -need to do this from within a "dos prompt" window. You should get back a -list of available shares on the server.

If you get a "network name not found" or similar error then netbios -name resolution is not working. This is usually caused by a problem in -nmbd. To overcome it you could do one of the following (you only need -to choose one of them):

  1. fixup the nmbd installation

  2. add the IP address of BIGSERVER to the "wins server" box in the - advanced tcp/ip setup on the PC.

  3. enable windows name resolution via DNS in the advanced section of - the tcp/ip setup

  4. add BIGSERVER to your lmhosts file on the PC.

If you get a "invalid network name" or "bad password error" then the -same fixes apply as they did for the "smbclient -L" test above. In -particular, make sure your "hosts allow" line is correct (see the man -pages)

Also, do not overlook that fact that when the workstation requests the -connection to the samba server it will attempt to connect using the -name with which you logged onto your Windows machine. You need to make -sure that an account exists on your Samba server with that exact same -name and password.

If you get "specified computer is not receiving requests" or similar -it probably means that the host is not contactable via tcp services. -Check to see if the host is running tcp wrappers, and if so add an entry in -the hosts.allow file for your client (or subnet, etc.)


26.3.9. Test 9

Run the command net use x: \\BIGSERVER\TMP. You should -be prompted for a password then you should get a "command completed -successfully" message. If not then your PC software is incorrectly -installed or your smb.conf is incorrect. make sure your "hosts allow" -and other config lines in smb.conf are correct.

It's also possible that the server can't work out what user name to -connect you as. To see if this is the problem add the line "user = -USERNAME" to the [tmp] section of smb.conf where "USERNAME" is the -username corresponding to the password you typed. If you find this -fixes things you may need the username mapping option.

It might also be the case that your client only sends encrypted passwords -and you have encrypt passwords = no in smb.conf. -Turn it back on to fix.


26.3.10. Test 10

Run the command nmblookup -M TESTGROUP where -TESTGROUP is the name of the workgroup that your Samba server and -Windows PCs belong to. You should get back the IP address of the -master browser for that workgroup.

If you don't then the election process has failed. Wait a minute to -see if it is just being slow then try again. If it still fails after -that then look at the browsing options you have set in smb.conf. Make -sure you have preferred master = yes to ensure that -an election is held at startup.


26.3.11. Test 11

From file manager try to browse the server. Your samba server should -appear in the browse list of your local workgroup (or the one you -specified in smb.conf). You should be able to double click on the name -of the server and get a list of shares. If you get a "invalid -password" error when you do then you are probably running WinNT and it -is refusing to browse a server that has no encrypted password -capability and is in user level security mode. In this case either set -security = server AND -password server = Windows_NT_Machine in your -smb.conf file, or enable encrypted passwords AFTER compiling in support -for encrypted passwords (refer to the Makefile).


26.4. Still having troubles?

Try the mailing list or newsgroup, or use the ethereal utility to -sniff the problem. The official samba mailing list can be reached at -samba@samba.org. To find -out more about samba and how to subscribe to the mailing list check -out the samba web page at -http://samba.org/samba

Also look at the other docs in the Samba package!

\ No newline at end of file diff --git a/docs/roadmap-3.html b/docs/roadmap-3.html index 4028a7bbdca..00fd31b32e3 100644 --- a/docs/roadmap-3.html +++ b/docs/roadmap-3.html @@ -56,7 +56,7 @@

Roadmap to 3.0

-

Page Last Updated : $Date: 2003/01/16 02:20:24 $ +

Page Last Updated : $Date: 2002/11/01 15:24:20 $

Estimated shipdate : When it is ready.

Current Alpha Release : Samba-3.0alpha20

Goals for 3.0alpha21 Release : diff --git a/docs/textdocs/RPC_PLUGIN.txt b/docs/textdocs/RPC_PLUGIN.txt deleted file mode 100644 index b8e59ecdd2e..00000000000 --- a/docs/textdocs/RPC_PLUGIN.txt +++ /dev/null @@ -1,34 +0,0 @@ -RPC Pluggable Modules How-To ----------------------------- - -About ------ -This document describes how to make use the new RPC Pluggable Modules features -of Samba 3.0. This architecture was added to increase the maintainability of -Samba allowing RPC Pipes to be worked on separately from the main CVS branch. -The RPM architecture will also allow third-party vendors to add functionality -to Samba through plug-ins. - -General Overview ----------------- -When an RPC call is sent to smbd, smbd tries to load a shared library by the -name librpc_.so to handle the call if it doesn't know how to handle -the call internally. For instance, LSA calls are handled by librpc_lsass.so. -These shared libraries should be located in the /lib/rpc. smbd then -attempts to call the rpc_pipe_init function within the shared library. - -In the rpc_pipe_init function, the library should call -rpc_pipe_register_commands(). This function takes the following arguments: - -int rpc_pipe_register_commands(const char *clnt, const char *srv, - const struct api_struct *cmds, int size); - -clnt - the Client name of the named pipe. -srv - the Server name of the named pipe. -cmds - a list of api_structs that map RPC ordinal numbers to function calls. -size - the number of api_structs contained in cmds. - -See rpc_server/srv_reg.c and rpc_server/srv_reg_nt.c for a small example of -how to use this library. - -- Anthony Liguori diff --git a/examples/LDAP/export_smbpasswd.pl b/examples/LDAP/export_smbpasswd.pl new file mode 100644 index 00000000000..3f67dc62427 --- /dev/null +++ b/examples/LDAP/export_smbpasswd.pl @@ -0,0 +1,63 @@ +#!/usr/bin/perl +## +## Example script to export ldap entries into an smbpasswd file format +## using the Mozilla PerLDAP module. +## +## writen by jerry@samba.org +## + +use Mozilla::LDAP::Conn; +use Mozilla::LDAP::Entry; + +###################################################### +## Set these values to whatever you need for your site +## + +$DN="ou=people,dc=plainjoe,dc=org"; +$ROOTDN="cn=Manager,dc=plainjoe,dc=org"; +$rootpw = "secret"; +$LDAPSERVER="localhost"; + +## +## end local site variables +###################################################### + + +$conn = new Mozilla::LDAP::Conn ("$LDAPSERVER", "389", $ROOTDN, $rootpw ); +die "Unable to connect to LDAP server $LDAPSERVER" unless $conn; + +print "##\n"; +print "## Autogenerated smbpasswd file via ldapsearch\n"; +print "## from $LDAPSERVER ($DN)\n"; +print "##\n"; + +## scheck for the existence of the posixAccount first +$result = $conn->search ("$DN", "sub", "(objectclass=smbPasswordEntry)"); + + +## loop over the entries we found +while ($result) { + + @uid = $result->getValue("uid"); + @uidNumber = $result->getValue("uidNumber"); + @lm_pw = $result->getValue("lmpassword"); + @nt_pw = $result->getValue("ntpassword"); + @acct = $result->getValue("acctFlags"); + @pwdLastSet = $result->getValue("pwdLastSet"); + + if (($#uid+1) && ($#uidNumber+1)) { + + $lm_pw[0] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" if (! ($#lm_pw+1)); + $nt_pw[0] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" if (! ($#nt_pw+1)); + $acct[0] = "[DU ]" if (! ($#acct+1)); + $pwdLastSet[0] = "FFFFFFFF" if (! ($#pwdLastSet+1)); + + print "$uid[0]:$uidNumber[0]:$lm_pw[0]:$nt_pw[0]:$acct[0]:LCT-$pwdLastSet[0]\n"; + } + + $result = $conn->nextEntry(); + +} + +$conn->close(); +exit 0; diff --git a/examples/LDAP/import_smbpasswd.pl b/examples/LDAP/import_smbpasswd.pl new file mode 100644 index 00000000000..14aeff967f1 --- /dev/null +++ b/examples/LDAP/import_smbpasswd.pl @@ -0,0 +1,65 @@ +#!/usr/bin/perl +## +## Example script of how you could import and smbpasswd file into an LDAP +## directory using the Mozilla PerLDAP module. +## +## writen by jerry@samba.org +## + +use Mozilla::LDAP::Conn; +use Mozilla::LDAP::Entry; + +################################################# +## set these to a value appropriate for your site +## + +$DN="ou=people,dc=plainjoe,dc=org"; +$ROOTDN="cn=Manager,dc=plainjoe,dc=org"; +$rootpw = "secret"; +$LDAPSERVER="localhost"; + +## +## end local site variables +################################################# + +$conn = new Mozilla::LDAP::Conn ("$LDAPSERVER", "389", $ROOTDN, $rootpw ); +die "Unable to connect to LDAP server $LDAPSERVER" unless $conn; + + +while ( $string = ) { + chop ($string); + + ## get the account information + @smbentry = split (/:/, $string); + + ## check for the existence of the posixAccount first + + ## FIXME!! Should do a getownam() and let the NSS modules lookup the account + ## This way you can have a UNIX account in /etc/passwd and the smbpasswd i + ## entry in LDAP. + $result = $conn->search ("$DN", "sub", "(&(uid=$smbentry[0])(objectclass=posixAccount))"); + if ( ! $result ) { + print STDERR "uid=$smbentry[0] does not have a posixAccount entry in the directory!\n"; + next; + } + + print "Updating [" . $result->getDN() . "]\n"; + + ## Do we need to add the 'objectclass: smbPasswordEntry' attribute? + if (! $result->hasValue("objectclass", "smbPasswordEntry")) { + $result->addValue("objectclass", "smbPasswordEntry"); + } + + ## Set other attribute values + $result->setValues ("lmPassword", $smbentry[2]); + $result->setValues ("ntPassword", $smbentry[3]); + $result->setValues ("acctFlags", $smbentry[4]); + $result->setValues ("pwdLastSet", substr($smbentry[5],4)); + + if (! $conn->update($result)) { + print "Error updating!\n"; + } +} + +$conn->close(); +exit 0; diff --git a/examples/pdb/README b/examples/pdb/README index 7fe45248824..561473129b0 100644 --- a/examples/pdb/README +++ b/examples/pdb/README @@ -1,7 +1,46 @@ README for Samba Password Database (PDB) examples ==================================================== -Jelmer Vernooij -Stefan (metze) Metzmacher +8-8-2002 Jelmer Vernooij + +Added mysql and xml modules. See README in xml/ and mysql/ for details. + +21-6-2002 Stefan (metze) Metzmacher + +I have added an interface versioning. + +Every module MUST have a pdb_version() function. + +this is defined in include/passdb.h: +#define PDB_MODULE_VERSIONING_MAGIC \ +int pdb_version(void)\ +{\ + return PASSDB_INTERFACE_VERSION;\ +} + +You MUST add this line inside a module: +PDB_MODULE_VERSIONING_MAGIC + +21-6-2002 Stefan (metze) Metzmacher + +The pdb_interface was changed: + +this function are deleted: +static BOOL testsam_getsampwrid (struct pdb_methods *methods, SAM_ACCOUNT *user, uint32 rid) + +this function are added: +static BOOL testsam_getsampwsid (struct pdb_methods *methods, SAM_ACCOUNT *user, DOM_SID sid) + +In the SAM_ACCOUNT struct: + +this fields are deleted: +uint32 user_rid; +uint32 group_rid; + +this fields are added: +DOM_SID user_sid; +DOM_SID group_sid; + +15-2-2002 Jelmer Vernooij The pdb_test.c file in this directory contains a very basic example of a pdb plugin. It just prints the name of the function that is executed using @@ -11,5 +50,6 @@ future too.. To debug passdb backends, try to run gdb on the 'pdbedit' executable. That's really much easier than restarting smbd constantly and attaching with your debugger. New passdb plugins should go into the samba lib directory, (/usr/lib/samba/ for -most distributions). An example would be: /usr/lib/samba/test.so +most distributions) and should be prefixed with 'pdb_'. An example would be: +/usr/lib/samba/pdb_test.so diff --git a/examples/pdb/pdb_test.c b/examples/pdb/pdb_test.c index f5fb57ddb20..c5ba094e42c 100644 --- a/examples/pdb/pdb_test.c +++ b/examples/pdb/pdb_test.c @@ -25,6 +25,9 @@ static int testsam_debug_level = DBGC_ALL; #undef DBGC_CLASS #define DBGC_CLASS testsam_debug_level +/* define the version of the passdb interface */ +PDB_MODULE_VERSIONING_MAGIC + /*************************************************************** Start enumeration of the passwd list. ****************************************************************/ @@ -104,7 +107,7 @@ static NTSTATUS testsam_add_sam_account (struct pdb_methods *methods, SAM_ACCOUN return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS testsam_init(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location) +NTSTATUS pdb_init(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location) { NTSTATUS nt_status; @@ -138,12 +141,3 @@ NTSTATUS testsam_init(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const return NT_STATUS_OK; } - -int init_module(void); - -int init_module() { - if(smb_register_passdb("testsam", testsam_init, PASSDB_INTERFACE_VERSION)) - return 0; - - return 1; -} diff --git a/examples/printing/smbprint.old b/examples/printing/smbprint.old deleted file mode 100755 index 5a00a2a8aa8..00000000000 --- a/examples/printing/smbprint.old +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/sh - -# This script is an input filter for printcap printing on a unix machine. It -# uses the smbclient program to print the file to the specified smb-based -# server and service. -# For example you could have a printcap entry like this -# -# smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint -# -# which would create a unix printer called "smb" that will print via this -# script. You will need to create the spool directory /usr/spool/smb with -# appropriate permissions and ownerships for your system. - -# Set these to the server and service you wish to print to -# In this example I have a WfWg PC called "lapland" that has a printer -# exported called "printer" with no password. - -# -# Script further altered by hamiltom@ecnz.co.nz (Michael Hamilton) -# so that the server, service, and password can be read from -# a /usr/var/spool/lpd/PRINTNAME/.config file. -# -# Script further modified by Richard Sharpe to fix some things. -# Get rid of the -x on the first line, and add parameters -# -# -t now causes translate to be used when sending files -# -# In order for this to work the /etc/printcap entry must include an -# accounting file (af=...): -# -# cdcolour:\ -# :cm=CD IBM Colorjet on 6th:\ -# :sd=/var/spool/lpd/cdcolour:\ -# :af=/var/spool/lpd/cdcolour/acct:\ -# :if=/usr/local/etc/smbprint:\ -# :mx=0:\ -# :lp=/dev/null: -# -# The /usr/var/spool/lpd/PRINTNAME/.config file should contain: -# server=PC_SERVER -# service=PR_SHARENAME -# password="password" -# -# E.g. -# server=PAULS_PC -# service=CJET_371 -# password="" - -# -# Debugging log file, change to /dev/null if you like. -# -logfile=/tmp/smb-print.log -# logfile=/dev/null - - -# -# The last parameter to the filter is the accounting file name. -# Extract the directory name from the file name. -# Concat this with /.config to get the config file. -# -TRANS=0 -eval acct_file=\${$#} -spool_dir=`dirname $acct_file` -config_file=$spool_dir/.config - -# Should read the following variables set in the config file: -# server -# service -# password -eval `cat $config_file` - -while getopts t c; do - case $c in - t) - TRANS=1 - ;; - - '?') # Bad parameters, ignore it ... - ;; - esac -done -# -# Some debugging help, change the >> to > if you want to same space. -# -echo "server $server, service $service" >> $logfile - -( -# NOTE You may wish to add the line `echo translate' if you want automatic -# CR/LF translation when printing. - if [ $TRANS -eq 1 ]; then - echo translate - fi - echo "print -" - cat -) | /usr/local/samba/bin/smbclient "\\\\$server\\$service" $password -U $server -N -P >> $logfile diff --git a/examples/sam/.cvsignore b/examples/sam/.cvsignore deleted file mode 100644 index f3c7a7c5da6..00000000000 --- a/examples/sam/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -Makefile diff --git a/examples/sam/Makefile.in b/examples/sam/Makefile.in deleted file mode 100644 index d5df346a8c4..00000000000 --- a/examples/sam/Makefile.in +++ /dev/null @@ -1,28 +0,0 @@ -CC = @CC@ -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ -LDFLAGS = @LDFLAGS@ -LDSHFLAGS = -shared -srcdir = @builddir@ -FLAGS = $(CFLAGS) -Iinclude -I$(srcdir)/include -I$(srcdir)/ubiqx -I$(srcdir)/smbwrapper -I. $(CPPFLAGS) -I$(srcdir) - -SAM_OBJS = sam_skel.so - -# Default target - -default: $(SAM_OBJS) - -# Pattern rules - -%.so: %.o - $(CC) $(LDSHFLAGS) $(LDFLAGS) -o $@ $< - -%.o: %.c - $(CC) $(FLAGS) -c $< - -# Misc targets - -clean: - rm -rf .libs - rm -f core *~ *% *.bak \ - $(SAM_OBJ) $(SAM_OBJS) diff --git a/examples/sam/README b/examples/sam/README deleted file mode 100644 index 9e9fbb26db3..00000000000 --- a/examples/sam/README +++ /dev/null @@ -1,29 +0,0 @@ -README for Samba SAM Database examples -==================================================== -26-08-2002 Stefan (metze) Metzmacher - -Every module MUST have a sam_version() function. - -this is defined in include/sam.h: -#define SAM_MODULE_VERSIONING_MAGIC \ -int sam_version(void)\ -{\ - return SAM_INTERFACE_VERSION;\ -} - -You MUST add this line inside a module: -SAM_MODULE_VERSIONING_MAGIC - - -The sam_skel.c file in this directory contains a very basic example of -a SAM plugin. It just prints the name of the function that is executed using -DEBUG. Maybe it's nice to include some of the arguments to the function in the -future too.. - -New SAM plugins should go into the samba lib directory, (/usr/lib/samba/ -for most distributions) and should be prefixed with 'sam_' and should go into the -subdir sam/. The SAM subsystem will search in /usr/lib/samba/sam and fall back to -/usr/lib/samba/ . -An example path would be: -/usr/lib/samba/sam/sam_skel.so - diff --git a/examples/sam/sam_skel.c b/examples/sam/sam_skel.c deleted file mode 100644 index da3a3758947..00000000000 --- a/examples/sam/sam_skel.c +++ /dev/null @@ -1,250 +0,0 @@ -/* - Unix SMB/CIFS implementation. - this is a skeleton for SAM backend modules. - - Copyright (C) Stefan (metze) Metzmacher 2002 - Copyright (C) Jelmer Vernooij 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -static int sam_skel_debug_level = DBGC_SAM; - -#undef DBGC_CLASS -#define DBGC_CLASS sam_skel_debug_level - -/* define the version of the SAM interface */ -SAM_MODULE_VERSIONING_MAGIC - -/* General API */ - -NTSTATUS sam_skel_get_sec_desc(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_skel_set_sec_desc(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - - -NTSTATUS sam_skel_lookup_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_skel_lookup_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const char *name, DOM_SID **sid, uint32 *type) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - - -/* Domain API */ - -NTSTATUS sam_skel_update_domain(const SAM_METHODS *sam_methods, const SAM_DOMAIN_HANDLE *domain) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_skel_get_domain_handle(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, SAM_DOMAIN_HANDLE **domain) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - - -/* Account API */ - -NTSTATUS sam_skel_create_account(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *group_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_skel_add_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_skel_update_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_skel_delete_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_skel_enum_accounts(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - - -NTSTATUS sam_skel_get_account_by_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_skel_get_account_by_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - - -/* Group API */ - -NTSTATUS sam_skel_create_group(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_skel_add_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_skel_update_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_skel_delete_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_skel_enum_groups(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_skel_get_group_by_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_skel_get_group_by_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - - -NTSTATUS sam_skel_add_member_to_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_skel_delete_member_from_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_skel_enum_groupmembers(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - - -NTSTATUS sam_skel_get_groups_of_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) -{ - DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_init(SAM_METHODS *sam_methods, const char *module_params) -{ - /* Functions your SAM module doesn't provide should be set - * to NULL */ - - sam_methods->sam_get_sec_desc = sam_skel_get_sec_desc; - sam_methods->sam_set_sec_desc = sam_skel_set_sec_desc; - - sam_methods->sam_lookup_sid = sam_skel_lookup_sid; - sam_methods->sam_lookup_name = sam_skel_lookup_name; - - /* Domain API */ - - sam_methods->sam_update_domain = sam_skel_update_domain; - sam_methods->sam_get_domain_handle = sam_skel_get_domain_handle; - - /* Account API */ - - sam_methods->sam_create_account = sam_skel_create_account; - sam_methods->sam_add_account = sam_skel_add_account; - sam_methods->sam_update_account = sam_skel_update_account; - sam_methods->sam_delete_account = sam_skel_delete_account; - sam_methods->sam_enum_accounts = sam_skel_enum_accounts; - - sam_methods->sam_get_account_by_sid = sam_skel_get_account_by_sid; - sam_methods->sam_get_account_by_name = sam_skel_get_account_by_name; - - /* Group API */ - - sam_methods->sam_create_group = sam_skel_create_group; - sam_methods->sam_add_group = sam_skel_add_group; - sam_methods->sam_update_group = sam_skel_update_group; - sam_methods->sam_delete_group = sam_skel_delete_group; - sam_methods->sam_enum_groups = sam_skel_enum_groups; - sam_methods->sam_get_group_by_sid = sam_skel_get_group_by_sid; - sam_methods->sam_get_group_by_name = sam_skel_get_group_by_name; - - sam_methods->sam_add_member_to_group = sam_skel_add_member_to_group; - sam_methods->sam_delete_member_from_group = sam_skel_delete_member_from_group; - sam_methods->sam_enum_groupmembers = sam_skel_enum_groupmembers; - - sam_methods->sam_get_groups_of_sid = sam_skel_get_groups_of_sid; - - sam_methods->free_private_data = NULL; - - - sam_skel_debug_level = debug_add_class("sam_skel"); - if (sam_skel_debug_level == -1) { - sam_skel_debug_level = DBGC_SAM; - DEBUG(0, ("sam_skel: Couldn't register custom debugging class!\n")); - } else DEBUG(2, ("sam_skel: Debug class number of 'sam_skel': %d\n", sam_skel_debug_level)); - - if(module_params) - DEBUG(0, ("Starting 'sam_skel' with parameters '%s' for domain %s\n", module_params, sam_methods->domain_name)); - else - DEBUG(0, ("Starting 'sam_skel' for domain %s without paramters\n", sam_methods->domain_name)); - - return NT_STATUS_OK; -} diff --git a/source/Makefile.in b/source/Makefile.in index d36a476583b..40210e5a94e 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -3,7 +3,6 @@ # Copyright Andrew Tridgell 1992-1998 # Copyright (C) 2001 by Martin Pool # Copyright Andrew Barteltt 2002 -# Copyright (C) 2003 Anthony Liguori ########################################################################### prefix=@prefix@ @@ -52,7 +51,6 @@ SBINDIR = @sbindir@ LIBDIR = @libdir@ VFSLIBDIR = $(LIBDIR)/vfs PDBLIBDIR = $(LIBDIR)/pdb -RPCLIBDIR = $(LIBDIR)/rpc CONFIGDIR = @configdir@ VARDIR = @localstatedir@ MANDIR = @mandir@ @@ -101,8 +99,7 @@ PATH_FLAGS1 = -DCONFIGFILE=\"$(CONFIGFILE)\" -DSBINDIR=\"$(SBINDIR)\" PATH_FLAGS2 = $(PATH_FLAGS1) -DBINDIR=\"$(BINDIR)\" -DDRIVERFILE=\"$(DRIVERFILE)\" PATH_FLAGS3 = $(PATH_FLAGS2) -DLMHOSTSFILE=\"$(LMHOSTSFILE)\" PATH_FLAGS4 = $(PATH_FLAGS3) -DSWATDIR=\"$(SWATDIR)\" -DLOCKDIR=\"$(LOCKDIR)\" -DPIDDIR=\"$(PIDDIR)\" -PATH_FLAGS5 = $(PATH_FLAGS4) -DLIBDIR=\"$(LIBDIR)\" \ - -DLOGFILEBASE=\"$(LOGFILEBASE)\" -DSHLIBEXT=\"@SHLIBEXT@\" +PATH_FLAGS5 = $(PATH_FLAGS4) -DLIBDIR=\"$(LIBDIR)\" -DLOGFILEBASE=\"$(LOGFILEBASE)\" PATH_FLAGS6 = $(PATH_FLAGS5) -DCONFIGDIR=\"$(CONFIGDIR)\" PATH_FLAGS = $(PATH_FLAGS6) $(PASSWD_FLAGS) @@ -117,7 +114,6 @@ BIN_PROGS2 = bin/smbcontrol@EXEEXT@ bin/smbtree@EXEEXT@ bin/tdbbackup@EXEEXT@ \ bin/nmblookup@EXEEXT@ bin/pdbedit@EXEEXT@ BIN_PROGS3 = bin/smbpasswd@EXEEXT@ bin/rpcclient@EXEEXT@ bin/smbcacls@EXEEXT@ \ bin/profiles@EXEEXT@ bin/smbgroupedit@EXEEXT@ bin/ntlm_auth@EXEEXT@ \ - bin/editreg@EXEEXT@ TORTURE_PROGS = bin/smbtorture@EXEEXT@ bin/msgtest@EXEEXT@ \ bin/masktest@EXEEXT@ bin/locktest@EXEEXT@ \ @@ -132,9 +128,8 @@ SCRIPTS = $(srcdir)/script/smbtar $(srcdir)/script/addtosmbpass $(srcdir)/script QUOTAOBJS=@QUOTAOBJS@ -VFS_MODULES = bin/vfs_audit.@SHLIBEXT@ bin/vfs_recycle.@SHLIBEXT@ bin/vfs_netatalk.@SHLIBEXT@ bin/vfs_fake_perms.@SHLIBEXT@ +VFS_MODULES = bin/vfs_audit.@SHLIBEXT@ bin/vfs_recycle.@SHLIBEXT@ bin/vfs_netatalk.@SHLIBEXT@ PDB_MODULES = @MODULE_MYSQL@ @MODULE_XML@ -MODULES = bin/developer.@SHLIBEXT@ ###################################################################### # object file lists @@ -160,8 +155,7 @@ LIB_OBJ = lib/charcnv.o lib/debug.o lib/fault.o \ lib/md5.o lib/hmacmd5.o lib/iconv.o lib/smbpasswd.o \ nsswitch/wb_client.o nsswitch/wb_common.o \ lib/pam_errors.o intl/lang_tdb.o lib/account_pol.o \ - lib/adt_tree.o lib/gencache.o $(TDB_OBJ) \ - lib/module.o lib/genparser.o lib/genparser_samba.o + lib/adt_tree.o lib/gencache.o $(TDB_OBJ) LIB_SMBD_OBJ = lib/system_smbd.o lib/util_smbd.o @@ -170,7 +164,7 @@ READLINE_OBJ = lib/readline.o POPT_LIB_OBJ = lib/popt_common.o UBIQX_OBJ = ubiqx/ubi_BinTree.o ubiqx/ubi_Cache.o ubiqx/ubi_SplayTree.o \ - ubiqx/ubi_dLinkList.o ubiqx/ubi_sLinkList.o + ubiqx/ubi_dLinkList.o ubiqx/ubi_sLinkList.o ubiqx/debugparse.o PARAM_OBJ = param/loadparm.o param/params.o dynconfig.o @@ -194,7 +188,7 @@ LIBSMB_OBJ = libsmb/clientgen.o libsmb/cliconnect.o libsmb/clifile.o \ libsmb/smberr.o libsmb/credentials.o libsmb/pwd_cache.o \ libsmb/clioplock.o libsmb/errormap.o libsmb/clirap2.o \ libsmb/passchange.o libsmb/unexpected.o libsmb/doserr.o \ - libsmb/namecache.o libsmb/trustdom_cache.o libsmb/ntlmssp.o \ + libsmb/namecache.o libsmb/ntlmssp.o \ $(RPC_PARSE_OBJ1) LIBMSRPC_OBJ = rpc_client/cli_lsarpc.o rpc_client/cli_samr.o \ @@ -206,52 +200,20 @@ LIBMSRPC_OBJ = rpc_client/cli_lsarpc.o rpc_client/cli_samr.o \ LIBMSRPC_SERVER_OBJ = libsmb/trust_passwd.o +LIBMSRPC_PICOBJ = $(LIBMSRPC_OBJ:.o=.po) + REGOBJS_OBJ = registry/reg_objects.o REGISTRY_OBJ = registry/reg_frontend.o registry/reg_cachehook.o registry/reg_printing.o \ registry/reg_db.o -RPC_LSA_OBJ = rpc_server/srv_lsa.o rpc_server/srv_lsa_nt.o - -RPC_NETLOG_OBJ = rpc_server/srv_netlog.o rpc_server/srv_netlog_nt.o - -RPC_SAMR_OBJ = rpc_server/srv_samr.o rpc_server/srv_samr_nt.o \ - rpc_server/srv_samr_util.o - -RPC_REG_OBJ = rpc_server/srv_reg.o rpc_server/srv_reg_nt.o - -RPC_SVC_OBJ = rpc_server/srv_srvsvc.o rpc_server/srv_srvsvc_nt.o - -RPC_WKS_OBJ = rpc_server/srv_wkssvc.o rpc_server/srv_wkssvc_nt.o - -RPC_DFS_OBJ = rpc_server/srv_dfs.o rpc_server/srv_dfs_nt.o -RPC_SPOOLSS_OBJ = rpc_server/srv_spoolss.o rpc_server/srv_spoolss_nt.o - -RPC_PIPE_OBJ = rpc_server/srv_pipe_hnd.o rpc_server/srv_util.o \ - rpc_server/srv_pipe.o rpc_server/srv_lsa_hnd.o - -# These are like they are to avoid a dependency on GNU MAKE -@LSA_DYNAMIC_YES@RPC_MODULES1 = bin/librpc_lsarpc.@SHLIBEXT@ -@NETLOG_DYNAMIC_YES@RPC_MODULES2 = bin/librpc_NETLOGON.@SHLIBEXT@ -@SAMR_DYNAMIC_YES@RPC_MODULES3 = bin/librpc_samr.@SHLIBEXT@ -@SVC_DYNAMIC_YES@RPC_MODULES4 = bin/librpc_srvsvc.@SHLIBEXT@ -@WKS_DYNAMIC_YES@RPC_MODULES5 = bin/librpc_wkssvc.@SHLIBEXT@ -@REG_DYNAMIC_YES@RPC_MODULES6 = bin/librpc_winreg.@SHLIBEXT@ -@SPOOLSS_DYNAMIC_YES@RPC_MODULES7 = bin/librpc_spoolss.@SHLIBEXT@ -@DFS_DYNAMIC_YES@RPC_MODULES8 = bin/librpc_netdfs.@SHLIBEXT@ -RPC_MODULES = $(RPC_MODULES1) $(RPC_MODULES2) $(RPC_MODULES3) $(RPC_MODULES4) \ - $(RPC_MODULES5) $(RPC_MODULES6) $(RPC_MODULES7) $(RPC_MODULES8) - -@LSA_DYNAMIC_NO@RPC_PIPE_OBJ1 = $(RPC_LSA_OBJ) -@NETLOG_DYNAMIC_NO@RPC_PIPE_OBJ2 = $(RPC_NETLOG_OBJ) -@SAMR_DYNAMIC_NO@RPC_PIPE_OBJ3 = $(RPC_SAMR_OBJ) -@SVC_DYNAMIC_NO@RPC_PIPE_OBJ4 = $(RPC_SVC_OBJ) -@WKS_DYNAMIC_NO@RPC_PIPE_OBJ5 = $(RPC_WKS_OBJ) -@REG_DYNAMIC_NO@RPC_PIPE_OBJ6 = $(RPC_REG_OBJ) -@SPOOLSS_DYNAMIC_NO@RPC_PIPE_OBJ7 = $(RPC_SPOOLSS_OBJ) -@DFS_DYNAMIC_NO@RPC_PIPE_OBJ8 = $(RPC_DFS_OBJ) -RPC_SERVER_OBJ = $(RPC_PIPE_OBJ1) $(RPC_PIPE_OBJ2) $(RPC_PIPE_OBJ3) \ - $(RPC_PIPE_OBJ4) $(RPC_PIPE_OBJ5) $(RPC_PIPE_OBJ6) $(RPC_PIPE_OBJ7) \ - $(RPC_PIPE_OBJ8) $(RPC_PIPE_OBJ) +RPC_SERVER_OBJ = rpc_server/srv_lsa.o rpc_server/srv_lsa_nt.o \ + rpc_server/srv_lsa_hnd.o rpc_server/srv_netlog.o rpc_server/srv_netlog_nt.o \ + rpc_server/srv_pipe_hnd.o rpc_server/srv_reg.o rpc_server/srv_reg_nt.o \ + rpc_server/srv_samr.o rpc_server/srv_samr_nt.o rpc_server/srv_samr_util.o \ + rpc_server/srv_srvsvc.o rpc_server/srv_srvsvc_nt.o \ + rpc_server/srv_util.o rpc_server/srv_wkssvc.o rpc_server/srv_wkssvc_nt.o \ + rpc_server/srv_pipe.o rpc_server/srv_dfs.o rpc_server/srv_dfs_nt.o \ + rpc_server/srv_spoolss.o rpc_server/srv_spoolss_nt.o # this includes only the low level parse code, not stuff # that requires knowledge of security contexts @@ -266,7 +228,7 @@ RPC_PARSE_OBJ = rpc_parse/parse_lsa.o rpc_parse/parse_net.o \ $(REGOBJS_OBJ) -RPC_CLIENT_OBJ = rpc_client/cli_pipe.o +RPC_CLIENT_OBJ = rpc_client/cli_pipe.o LOCKING_OBJ = locking/locking.o locking/brlock.o locking/posix.o @@ -274,20 +236,12 @@ PASSDB_GET_SET_OBJ = passdb/pdb_get_set.o PASSDB_OBJ = $(PASSDB_GET_SET_OBJ) passdb/passdb.o passdb/pdb_interface.o \ passdb/machine_sid.o passdb/pdb_smbpasswd.o \ - passdb/pdb_tdb.o passdb/pdb_ldap.o \ + passdb/pdb_tdb.o passdb/pdb_ldap.o passdb/pdb_plugin.o \ passdb/pdb_unix.o passdb/util_sam_sid.o \ passdb/pdb_compat.o passdb/pdb_nisplus.o -XML_OBJ = modules/xml.o -MYSQL_OBJ = modules/mysql.o -DEVEL_HELP_OBJ = modules/developer.o - -SAM_STATIC_MODULES = sam/sam_plugin.o sam/sam_skel.o sam/sam_ads.o - -SAM_OBJ = sam/account.o sam/get_set_account.o sam/get_set_group.o \ - sam/get_set_domain.o sam/interface.o $(SAM_STATIC_MODULES) - -SAMTEST_OBJ = torture/samtest.o torture/cmd_sam.o $(SAM_OBJ) $(LIB_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(READLINE_OBJ) lib/util_seaccess.o $(LIBADS_OBJ) $(PASSDB_OBJ) $(SECRETS_OBJ) $(GROUPDB_OBJ) +PDB_XML_OBJ = passdb/pdb_xml.o +PDB_MYSQL_OBJ = passdb/pdb_mysql.o GROUPDB_OBJ = groupdb/mapping.o @@ -501,7 +455,6 @@ VFSTEST_OBJ = torture/cmd_vfs.o torture/vfstest.o $(SMBD_OBJ_BASE) $(READLINE_OB VFS_AUDIT_OBJ = modules/vfs_audit.o VFS_RECYCLE_OBJ = modules/vfs_recycle.o VFS_NETATALK_OBJ = modules/vfs_netatalk.o -VFS_FAKE_PERMS_OBJ = modules/vfs_fake_perms.o LOCKTEST2_OBJ = torture/locktest2.o $(LOCKING_OBJ) $(LIBSMB_OBJ) $(PARAM_OBJ) \ $(UBIQX_OBJ) $(LIB_OBJ) @@ -531,14 +484,12 @@ PROTO_OBJ = $(SMBD_OBJ_MAIN) \ $(SMBD_OBJ_SRV) $(NMBD_OBJ1) $(SWAT_OBJ1) $(LIB_OBJ) $(LIBSMB_OBJ) \ $(SMBW_OBJ1) $(SMBWRAPPER_OBJ1) $(SMBTORTURE_OBJ1) $(RPCCLIENT_OBJ1) \ $(LIBMSRPC_OBJ) $(LIBMSRPC_SERVER_OBJ) $(RPC_CLIENT_OBJ) \ - $(RPC_PIPE_OBJ) $(RPC_PARSE_OBJ) \ + $(RPC_SERVER_OBJ) $(RPC_PARSE_OBJ) \ $(AUTH_OBJ) $(PARAM_OBJ) $(LOCKING_OBJ) $(SECRETS_OBJ) \ $(PRINTING_OBJ) $(PRINTBACKEND_OBJ) $(OPLOCK_OBJ) $(NOTIFY_OBJ) \ $(QUOTAOBJS) $(PASSDB_OBJ) $(GROUPDB_OBJ) $(MSDFS_OBJ) \ $(READLINE_OBJ) $(PROFILE_OBJ) $(LIBADS_OBJ) $(LIBADS_SERVER_OBJ) \ - $(LIB_SMBD_OBJ) $(SAM_OBJ) $(REGISTRY_OBJ) $(POPT_LIB_OBJ) \ - $(RPC_LSA_OBJ) $(RPC_NETLOG_OBJ) $(RPC_SAMR_OBJ) $(RPC_REG_OBJ) \ - $(RPC_SVC_OBJ) $(RPC_WKS_OBJ) $(RPC_DFS_OBJ) $(RPC_SPOOLSS_OBJ) + $(LIB_SMBD_OBJ) $(REGISTRY_OBJ) $(POPT_LIB_OBJ) NSS_OBJ_0 = nsswitch/wins.o $(PARAM_OBJ) $(UBIQX_OBJ) $(LIBSMB_OBJ) \ $(LIB_OBJ) $(NSSWINS_OBJ) @@ -597,7 +548,7 @@ NTLM_AUTH_OBJ = utils/ntlm_auth.o $(LIBSMB_OBJ) $(POPT_LIB_OBJ) # now the rules... ###################################################################### all : SHOWFLAGS proto_exists $(SBIN_PROGS) $(BIN_PROGS) $(SHLIBS) \ - $(TORTURE_PROGS) @EXTRA_ALL_TARGETS@ + @EXTRA_ALL_TARGETS@ pam_smbpass : SHOWFLAGS bin/pam_smbpass.@SHLIBEXT@ @@ -629,9 +580,9 @@ nsswitch : SHOWFLAGS bin/winbindd@EXEEXT@ bin/wbinfo@EXEEXT@ nsswitch/libnss_win wins : SHOWFLAGS nsswitch/libnss_wins.@SHLIBEXT@ -modules: SHOWFLAGS proto_exists $(VFS_MODULES) $(PDB_MODULES) $(MODULES) \ - $(RPC_MODULES) -everything: all libsmbclient debug2html smbfilter talloctort +modules: SHOWFLAGS proto_exists $(VFS_MODULES) $(PDB_MODULES) + +everything: all libsmbclient debug2html smbfilter talloctort modules torture .SUFFIXES: .SUFFIXES: .c .o .po .po32 .lo @@ -702,7 +653,7 @@ bin/.dummy: bin/smbd@EXEEXT@: $(SMBD_OBJ) @BUILD_POPT@ bin/.dummy @echo Linking $@ - $(CC) $(FLAGS) -o $@ $(SMBD_OBJ) $(LDFLAGS) $(DYNEXP) $(PRINTLIBS) \ + @$(CC) $(FLAGS) -o $@ $(SMBD_OBJ) $(LDFLAGS) $(DYNEXP) $(PRINTLIBS) \ $(AUTHLIBS) $(LIBS) @BUILD_POPT@ bin/nmbd@EXEEXT@: $(NMBD_OBJ) @BUILD_POPT@ bin/.dummy @@ -734,10 +685,6 @@ bin/profiles@EXEEXT@: utils/profiles.o bin/.dummy @echo Linking $@ @$(CC) $(FLAGS) -o $@ utils/profiles.o $(LDFLAGS) $(LIBS) -bin/editreg@EXEEXT@: utils/editreg.o bin/.dummy - @echo Linking $@ - @$(CC) $(FLAGS) -o $@ utils/editreg.o $(LDFLAGS) $(LIBS) - bin/smbspool@EXEEXT@: $(CUPS_OBJ) bin/.dummy @echo Linking $@ @$(CC) $(FLAGS) -o $@ $(CUPS_OBJ) $(LDFLAGS) $(LIBS) @@ -782,10 +729,6 @@ bin/pdbedit@EXEEXT@: $(PDBEDIT_OBJ) @BUILD_POPT@ bin/.dummy @echo Linking $@ @$(CC) $(FLAGS) -o $@ $(PDBEDIT_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) @BUILD_POPT@ -bin/samtest@EXEEXT@: $(SAMTEST_OBJ) @BUILD_POPT@ bin/.dummy - @echo Linking $@ - @$(CC) $(FLAGS) -o $@ $(SAMTEST_OBJ) $(LDFLAGS) $(DYNEXP) $(TERMLDFLAGS) $(TERMLIBS) $(DYNEXP) $(LIBS) @BUILD_POPT@ - bin/smbgroupedit@EXEEXT@: $(SMBGROUPEDIT_OBJ) bin/.dummy @echo Linking $@ @$(CC) $(FLAGS) -o $@ $(SMBGROUPEDIT_OBJ) $(LDFLAGS) $(LIBS) @@ -876,46 +819,6 @@ bin/libbigballofmud.@SHLIBEXT@: $(LIBBIGBALLOFMUD_PICOBJS) libsmbclient: bin/libsmbclient.a @LIBSMBCLIENT_SHARED@ -bin/librpc_lsarpc.@SHLIBEXT@: $(RPC_LSA_OBJ) - @echo "Linking $@" - @$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_LSA_OBJ) -lc \ - @SONAMEFLAG@`basename $@` - -bin/librpc_samr.@SHLIBEXT@: $(RPC_SAMR_OBJ) - @echo "Linking $@" - @$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_SAMR_OBJ) -lc \ - @SONAMEFLAG@`basename $@` - -bin/librpc_srvsvc.@SHLIBEXT@: $(RPC_SVC_OBJ) - @echo "Linking $@" - @$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_SVC_OBJ) -lc \ - @SONAMEFLAG@`basename $@` - -bin/librpc_wkssvc.@SHLIBEXT@: $(RPC_WKS_OBJ) - @echo "Linking $@" - @$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_WKS_OBJ) -lc \ - @SONAMEFLAG@`basename $@` - -bin/librpc_NETLOGON.@SHLIBEXT@: $(RPC_NETLOG_OBJ) - @echo "Linking $@" - @$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_NETLOG_OBJ) -lc \ - @SONAMEFLAG@`basename $@` - -bin/librpc_winreg.@SHLIBEXT@: $(RPC_REG_OBJ) - @echo "Linking $@" - @$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_REG_OBJ) -lc \ - @SONAMEFLAG@`basename $@` - -bin/librpc_spoolss.@SHLIBEXT@: $(RPC_SPOOLSS_OBJ) - @echo "Linking $@" - @$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_SPOOLSS_OBJ) -lc \ - @SONAMEFLAG@`basename $@` - -bin/librpc_netdfs.@SHLIBEXT@: $(RPC_DFS_OBJ) - @echo "Linking $@" - @$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_DFS_OBJ) -lc \ - @SONAMEFLAG@`basename $@` - nsswitch/libnss_wins.@SHLIBEXT@: $(NSS_OBJ) @echo "Linking $@" @$(SHLD) $(LDSHFLAGS) -o $@ $(NSS_OBJ) -lc \ @@ -940,19 +843,14 @@ nsswitch/pam_winbind.@SHLIBEXT@: $(PAM_WINBIND_OBJ) bin/.dummy @$(SHLD) $(LDSHFLAGS) -o $@ $(PAM_WINBIND_OBJ) \ @SONAMEFLAG@`basename $@` -lpam -bin/mysql.@SHLIBEXT@: $(MYSQL_OBJ) - @echo "Building plugin $@" - @$(SHLD) $(LDSHFLAGS) -o $@ $(MYSQL_OBJ) @MYSQL_LIBS@ \ - @SONAMEFLAG@`basename $@` - -bin/developer.@SHLIBEXT@: $(DEVEL_HELP_OBJ) +bin/pdb_mysql.@SHLIBEXT@: $(PDB_MYSQL_OBJ) @echo "Building plugin $@" - @$(SHLD) $(LDSHFLAGS) -o $@ $(DEVEL_HELP_OBJ) \ + @$(SHLD) $(LDSHFLAGS) -o $@ $(PDB_MYSQL_OBJ) @MYSQL_LIBS@ \ @SONAMEFLAG@`basename $@` -bin/xml.@SHLIBEXT@: $(XML_OBJ) +bin/pdb_xml.@SHLIBEXT@: $(PDB_XML_OBJ) @echo "Building plugin $@" - @$(SHLD) $(LDSHFLAGS) -o $@ $(XML_OBJ) @XML_LIBS@ \ + @$(SHLD) $(LDSHFLAGS) -o $@ $(PDB_XML_OBJ) @XML_LIBS@ \ @SONAMEFLAG@`basename $@` bin/vfs_audit.@SHLIBEXT@: $(VFS_AUDIT_OBJ) @@ -970,11 +868,6 @@ bin/vfs_netatalk.@SHLIBEXT@: $(VFS_NETATALK_OBJ) @$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_NETATALK_OBJ) \ @SONAMEFLAG@`basename $@` -bin/vfs_fake_perms.@SHLIBEXT@: $(VFS_FAKE_PERMS_OBJ) - @echo "Building plugin $@" - @$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_FAKE_PERMS_OBJ) \ - @SONAMEFLAG@`basename $@` - bin/wbinfo@EXEEXT@: $(WBINFO_OBJ) $(PARAM_OBJ) $(LIB_OBJ) \ $(UBIQX_OBJ) $(SECRETS_OBJ) @BUILD_POPT@ bin/.dummy @echo Linking $@ @@ -1000,6 +893,8 @@ bin/tdbbackup@EXEEXT@: $(TDBBACKUP_OBJ) bin/.dummy install: installbin installman installscripts installdat installswat +install-everything: install installmodules + # DESTDIR is used here to prevent packagers wasting their time # duplicating the Makefile. Remove it and you will have the privelege # of package each samba release for muliple versions of multiple @@ -1021,7 +916,6 @@ installbin: all installdirs installmodules: all installdirs @$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(VFSLIBDIR) $(VFS_MODULES) @$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(PDBLIBDIR) $(PDB_MODULES) - @$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(RPCLIBDIR) $(RPC_MODULES) installscripts: installdirs @$(SHELL) $(srcdir)/script/installscripts.sh $(INSTALLPERMS) $(DESTDIR)$(BINDIR) $(SCRIPTS) @@ -1121,9 +1015,8 @@ uninstallbin: @$(SHELL) $(srcdir)/script/uninstallbin.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(BINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(VARDIR) $(DESTDIR)$(BIN_PROGS) uninstallmodules: - @$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(VFSLIBDIR) $(DESTDIR)$(VFS_MODULES) - @$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(PDBLIBDIR) $(DESTDIR)$(PDB_MODULES) - @$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(MODULES) + @$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(PDBLIBDIR) $(DESTDIR)$(VFS_MODULES) + @$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(VFSLIBDIR) $(DESTDIR)$(PDB_MODULES) uninstallscripts: @$(SHELL) $(srcdir)/script/uninstallscripts.sh $(INSTALLPERMS) $(DESTDIR)$(BINDIR) $(SCRIPTS) @@ -1133,7 +1026,7 @@ TOPFILES=dynconfig.o dynconfig.po clean: delheaders python_clean -rm -f core */*~ *~ */*.o */*.po */*.po32 */*.@SHLIBEXT@ \ - $(TOPFILES) $(BIN_PROGS) $(SBIN_PROGS) $(MODULES) $(TORTURE_PROGS) .headers.stamp + $(TOPFILES) $(BIN_PROGS) $(SBIN_PROGS) $(VFS_MODULES) $(PDB_MODULES) $(TORTURE_PROGS) .headers.stamp # Making this target will just make sure that the prototype files # exist, not necessarily that they are up to date. Since they're @@ -1141,8 +1034,7 @@ clean: delheaders python_clean # afterwards. proto_exists: include/proto.h include/wrepld_proto.h include/build_env.h \ nsswitch/winbindd_proto.h web/swat_proto.h \ - client/client_proto.h utils/net_proto.h \ - include/tdbsam2_parse_info.h + client/client_proto.h utils/net_proto.h delheaders: @echo Removing prototype headers @@ -1150,12 +1042,10 @@ delheaders: @/bin/rm -f $(srcdir)/include/wrepld_proto.h $(srcdir)/nsswitch/winbindd_proto.h @/bin/rm -f $(srcdir)/web/swat_proto.h @/bin/rm -f $(srcdir)/client/client_proto.h $(srcdir)/utils/net_proto.h - @/bin/rm -f $(srcdir)/include/tdbsam2_parse_info.h @/bin/rm -f include/proto.h include/build_env.h include/wrepld_proto.h \ nsswitch/winbindd_proto.h web/swat_proto.h \ - client/client_proto.h utils/net_proto.h \ - include/tdbsam2_parse_info.h + client/client_proto.h utils/net_proto.h include/proto.h: @echo Building include/proto.h @@ -1193,11 +1083,6 @@ utils/net_proto.h: -h _CLIENT_PROTO_H_ utils/net_proto.h \ $(NET_OBJ1) -include/tdbsam2_parse_info.h: - @cd $(srcdir) && script/genstruct.pl \ - -o include/tdbsam2_parse_info.h $(CC) -E -O2 -g \ - include/tdbsam2.h - # "make headers" or "make proto" calls a subshell because we need to # make sure these commands are executed in sequence even for a # parallel make. @@ -1209,8 +1094,7 @@ headers: $(MAKE) nsswitch/winbindd_proto.h; \ $(MAKE) web/swat_proto.h; \ $(MAKE) client/client_proto.h; \ - $(MAKE) utils/net_proto.h; \ - $(MAKE) include/tdbsam2_parse_info.h + $(MAKE) utils/net_proto.h proto: headers @@ -1223,7 +1107,7 @@ ctags: ctags `find $(srcdir) -name "*.[ch]" | grep -v /CVS/` realclean: clean delheaders - -rm -f config.log $(BIN_PROGS) $(MODULES) $(SBIN_PROGS) bin/.dummy script/findsmb + -rm -f config.log $(BIN_PROGS) $(SBIN_PROGS) bin/.dummy script/findsmb distclean: realclean -rm -f include/stamp-h diff --git a/source/auth/auth.c b/source/auth/auth.c index 2abdec3a395..5d56603b9fd 100644 --- a/source/auth/auth.c +++ b/source/auth/auth.c @@ -31,7 +31,6 @@ static const struct auth_init_function_entry builtin_auth_init_functions[] = { { "hostsequiv", auth_init_hostsequiv }, { "sam", auth_init_sam }, { "samstrict", auth_init_samstrict }, - { "samstrict_dc", auth_init_samstrict_dc }, { "unix", auth_init_unix }, { "smbserver", auth_init_smbserver }, { "ntdomain", auth_init_ntdomain }, diff --git a/source/auth/auth_sam.c b/source/auth/auth_sam.c index 9650dc09401..79fded870e9 100644 --- a/source/auth/auth_sam.c +++ b/source/auth/auth_sam.c @@ -480,8 +480,6 @@ static NTSTATUS check_samstrict_security(const struct auth_context *auth_context unless it is one of our aliases. */ if (!is_myname(user_info->domain.str)) { - DEBUG(7,("The requested user domain is not the local server name. [%s]\\[%s]\n", - user_info->domain.str,user_info->internal_username.str)); return NT_STATUS_NO_SUCH_USER; } @@ -500,45 +498,4 @@ NTSTATUS auth_init_samstrict(struct auth_context *auth_context, const char *para return NT_STATUS_OK; } -/**************************************************************************** -Check SAM security (above) but with a few extra checks if we're a DC. -****************************************************************************/ - -static NTSTATUS check_samstrict_dc_security(const struct auth_context *auth_context, - void *my_private_data, - TALLOC_CTX *mem_ctx, - const auth_usersupplied_info *user_info, - auth_serversupplied_info **server_info) -{ - if (!user_info || !auth_context) { - return NT_STATUS_LOGON_FAILURE; - } - - /* If we are a domain member, we must not - attempt to check the password locally, - unless it is one of our aliases, empty - or our domain if we are a logon server.*/ - - - if ((!is_myworkgroup(user_info->domain.str))&& - (!is_myname(user_info->domain.str))) { - DEBUG(7,("The requested user domain is not the local server name or our domain. [%s]\\[%s]\n", - user_info->domain.str,user_info->internal_username.str)); - return NT_STATUS_NO_SUCH_USER; - } - - return check_sam_security(auth_context, my_private_data, mem_ctx, user_info, server_info); -} - -/* module initialisation */ -NTSTATUS auth_init_samstrict_dc(struct auth_context *auth_context, const char *param, auth_methods **auth_method) -{ - if (!make_auth_methods(auth_context, auth_method)) { - return NT_STATUS_NO_MEMORY; - } - - (*auth_method)->auth = check_samstrict_dc_security; - (*auth_method)->name = "samstrict_dc"; - return NT_STATUS_OK; -} diff --git a/source/client/smbmount.c b/source/client/smbmount.c index f90c56859f2..2c70f3ff50a 100644 --- a/source/client/smbmount.c +++ b/source/client/smbmount.c @@ -687,17 +687,6 @@ static void parse_mount_smb(int argc, char **argv) int val; char *p; - /* FIXME: This function can silently fail if the arguments are - * not in the expected order. - - > The arguments syntax of smbmount 2.2.3a (smbfs of Debian stable) - > requires that one gives "-o" before further options like username=... - > . Without -o, the username=.. setting is *silently* ignored. I've - > spent about an hour trying to find out why I couldn't log in now.. - - */ - - if (argc < 2 || argv[1][0] == '-') { usage(); exit(1); diff --git a/source/configure b/source/configure index 2d3f76dbe0f..7fffc052d53 100755 --- a/source/configure +++ b/source/configure @@ -34,8 +34,6 @@ ac_help="$ac_help --enable-krb5developer Turn on developer warnings and debugging, except -Wstrict-prototypes (default=no)" ac_help="$ac_help --enable-dmalloc Enable heap debugging [default=no]" -ac_help="$ac_help - --enable-dynrpc Enable dynamic RPC modules [default=no]" ac_help="$ac_help --enable-cups Turn on CUPS support (default=auto)" ac_help="$ac_help @@ -74,8 +72,6 @@ ac_help="$ac_help --with-pam Include PAM support (default=no)" ac_help="$ac_help --with-pam_smbpass Build a PAM module to allow other applications to use our smbpasswd file (default=no)" -ac_help="$ac_help - --with-sam Build new (experimental) SAM database (default=no)" ac_help="$ac_help --with-ldapsam Include LDAP SAM 2.2 compatible configuration (default=no)" ac_help="$ac_help @@ -789,38 +785,6 @@ fi - - -LSA_DYNAMIC_YES="#" -LSA_DYNAMIC_NO= - - -NETLOG_DYNAMIC_YES="#" -NETLOG_DYNAMIC_NO= - - -SAMR_DYNAMIC_YES="#" -SAMR_DYNAMIC_NO= - - -SVC_DYNAMIC_YES="#" -SVC_DYNAMIC_NO= - - -WKS_DYNAMIC_YES="#" -WKS_DYNAMIC_NO= - - -REG_DYNAMIC_YES="#" -REG_DYNAMIC_NO= - - -SPOOLSS_DYNAMIC_YES="#" -SPOOLSS_DYNAMIC_NO= - - -DFS_DYNAMIC_YES="#" -DFS_DYNAMIC_NO= # compile with optimization and without debugging by default CFLAGS="-O ${CFLAGS}" @@ -872,85 +836,10 @@ EOF LIBS="$LIBS -ldmalloc" fi -# Check whether --enable-dynrpc or --disable-dynrpc was given. -if test "${enable_dynrpc+set}" = set; then - enableval="$enable_dynrpc" - : -fi - - -if test x$enable_dynrpc = xyes -then - enable_dynrpc=lsa,samr,reg,wks,netlog,dfs -fi - -if test x$enable_dynrpc != xno -then - for i in `echo $enable_dynrpc | sed -e's/,/ /g'` - do case $i in lsa) - LSA_DYNAMIC_YES= - LSA_DYNAMIC_NO="#" - cat >> confdefs.h <<\EOF -#define RPC_LSA_DYNAMIC 1 -EOF - - ;; samr) - SAMR_DYNAMIC_YES= - SAMR_DYNAMIC_NO="#" - cat >> confdefs.h <<\EOF -#define RPC_SAMR_DYNAMIC 1 -EOF - - ;; svc) - SVC_DYNAMIC_YES= - SVC_DYNAMIC_NO="#" - cat >> confdefs.h <<\EOF -#define RPC_SVC_DYNAMIC 1 -EOF - - ;; wks) - WKS_DYNAMIC_YES= - WKS_DYNAMIC_NO="#" - cat >> confdefs.h <<\EOF -#define RPC_WKS_DYNAMIC 1 -EOF - - ;; netlog) - NETLOG_DYNAMIC_YES= - NETLOG_DYNAMIC_NO="#" - cat >> confdefs.h <<\EOF -#define RPC_NETLOG_DYNAMIC 1 -EOF - - ;; reg) - REG_DYNAMIC_YES= - REG_DYNAMIC_NO="#" - cat >> confdefs.h <<\EOF -#define RPC_REG_DYNAMIC 1 -EOF - - ;; spoolss) - SPOOLSS_DYNAMIC_YES= - SPOOLSS_DYNAMIC_NO="#" - cat >> confdefs.h <<\EOF -#define RPC_SPOOLSS_DYNAMIC 1 -EOF - - ;; dfs) - DFS_DYNAMIC_YES= - DFS_DYNAMIC_NO="#" - cat >> confdefs.h <<\EOF -#define RPC_DFS_DYNAMIC 1 -EOF - - ;; esac - done -fi - # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:954: checking for $ac_word" >&5 +echo "configure:843: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -980,7 +869,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:984: checking for $ac_word" >&5 +echo "configure:873: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1031,7 +920,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1035: checking for $ac_word" >&5 +echo "configure:924: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1063,7 +952,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:1067: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:956: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -1074,12 +963,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 1078 "configure" +#line 967 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:1083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -1105,12 +994,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:1109: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:998: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:1114: checking whether we are using GNU C" >&5 +echo "configure:1003: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1119,7 +1008,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1123: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1012: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1138,7 +1027,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1142: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1031: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1200,7 +1089,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1204: checking for a BSD compatible install" >&5 +echo "configure:1093: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1257,7 +1146,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1261: checking for $ac_word" >&5 +echo "configure:1150: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1289,7 +1178,7 @@ done LD=ld echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 -echo "configure:1293: checking if the linker ($LD) is GNU ld" >&5 +echo "configure:1182: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1305,7 +1194,7 @@ echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:1309: checking for POSIXized ISC" >&5 +echo "configure:1198: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then @@ -1327,12 +1216,12 @@ fi echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6 -echo "configure:1331: checking for Cygwin environment" >&5 +echo "configure:1220: checking for Cygwin environment" >&5 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1236: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_cygwin=yes else @@ -1360,19 +1249,19 @@ echo "$ac_t""$ac_cv_cygwin" 1>&6 CYGWIN= test "$ac_cv_cygwin" = yes && CYGWIN=yes echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6 -echo "configure:1364: checking for mingw32 environment" >&5 +echo "configure:1253: checking for mingw32 environment" >&5 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1265: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_mingw32=yes else @@ -1391,7 +1280,7 @@ test "$ac_cv_mingw32" = yes && MINGW32=yes echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 -echo "configure:1395: checking for executable suffix" >&5 +echo "configure:1284: checking for executable suffix" >&5 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1401,7 +1290,7 @@ else rm -f conftest* echo 'int main () { return 0; }' > conftest.$ac_ext ac_cv_exeext= - if { (eval echo configure:1405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then + if { (eval echo configure:1294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then for file in conftest.*; do case $file in *.c | *.o | *.obj) ;; @@ -1424,10 +1313,10 @@ ac_exeext=$EXEEXT if test "x$CC" != xcc; then echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 -echo "configure:1428: checking whether $CC and cc understand -c and -o together" >&5 +echo "configure:1317: checking whether $CC and cc understand -c and -o together" >&5 else echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 -echo "configure:1431: checking whether cc understands -c and -o together" >&5 +echo "configure:1320: checking whether cc understands -c and -o together" >&5 fi set dummy $CC; ac_cc="`echo $2 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" @@ -1439,16 +1328,16 @@ else # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' -if { (eval echo configure:1443: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1444: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; +if { (eval echo configure:1332: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1333: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. - if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1449: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1338: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ac_try='cc -c conftest.c -o conftest.o 1>&5' - if { (eval echo configure:1451: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1452: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + if { (eval echo configure:1340: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1341: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then # cc works too. : @@ -1482,20 +1371,20 @@ fi echo $ac_n "checking that the C compiler understands volatile""... $ac_c" 1>&6 -echo "configure:1486: checking that the C compiler understands volatile" >&5 +echo "configure:1375: checking that the C compiler understands volatile" >&5 if eval "test \"`echo '$''{'samba_cv_volatile'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { volatile int i = 0 ; return 0; } EOF -if { (eval echo configure:1499: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1388: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_volatile=yes else @@ -1544,7 +1433,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1548: checking host system type" >&5 +echo "configure:1437: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -1565,7 +1454,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:1569: checking target system type" >&5 +echo "configure:1458: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -1583,7 +1472,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1587: checking build system type" >&5 +echo "configure:1476: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1617,7 +1506,7 @@ esac echo $ac_n "checking config.cache system type""... $ac_c" 1>&6 -echo "configure:1621: checking config.cache system type" >&5 +echo "configure:1510: checking config.cache system type" >&5 if { test x"${ac_cv_host_system_type+set}" = x"set" && test x"$ac_cv_host_system_type" != x"$host"; } || { test x"${ac_cv_build_system_type+set}" = x"set" && @@ -1645,7 +1534,7 @@ case "$host_os" in *hpux*) echo $ac_n "checking whether ${CC-cc} accepts -Ae""... $ac_c" 1>&6 -echo "configure:1649: checking whether ${CC-cc} accepts -Ae" >&5 +echo "configure:1538: checking whether ${CC-cc} accepts -Ae" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_Ae'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1832,14 +1721,14 @@ EOF *sysv4*) if test $host = mips-sni-sysv4 ; then echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1836: checking for LFS support" >&5 +echo "configure:1725: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then SINIX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1851,7 +1740,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1855: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1744: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then SINIX_LFS_SUPPORT=yes else @@ -1882,14 +1771,14 @@ EOF # *linux*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1886: checking for LFS support" >&5 +echo "configure:1775: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then LINUX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1927,7 +1816,7 @@ main() { } EOF -if { (eval echo configure:1931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then LINUX_LFS_SUPPORT=yes else @@ -1960,14 +1849,14 @@ EOF *hurd*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1964: checking for LFS support" >&5 +echo "configure:1853: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then GLIBC_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1979,7 +1868,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1983: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then GLIBC_LFS_SUPPORT=yes else @@ -2009,21 +1898,21 @@ EOF esac echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:2013: checking for inline" >&5 +echo "configure:1902: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1916: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -2049,7 +1938,7 @@ EOF esac echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:2053: checking how to run the C preprocessor" >&5 +echo "configure:1942: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -2064,13 +1953,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2074: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1963: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -2081,13 +1970,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2091: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1980: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -2098,13 +1987,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2108: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1997: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -2129,12 +2018,12 @@ fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:2133: checking for ANSI C header files" >&5 +echo "configure:2022: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2142,7 +2031,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2146: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2035: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2159,7 +2048,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -2177,7 +2066,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -2198,7 +2087,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -2209,7 +2098,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:2213: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2102: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -2237,12 +2126,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:2241: checking for $ac_hdr that defines DIR" >&5 +echo "configure:2130: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -2250,7 +2139,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:2254: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2143: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -2275,7 +2164,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:2279: checking for opendir in -ldir" >&5 +echo "configure:2168: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2283,7 +2172,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2316,7 +2205,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:2320: checking for opendir in -lx" >&5 +echo "configure:2209: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2324,7 +2213,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2358,12 +2247,12 @@ fi fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:2362: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:2251: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2372,7 +2261,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:2376: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2265: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -2393,12 +2282,12 @@ EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:2397: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:2286: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2414,7 +2303,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:2418: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2307: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -2438,17 +2327,17 @@ for ac_hdr in arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2442: checking for $ac_hdr" >&5 +echo "configure:2331: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2452: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2341: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2478,17 +2367,17 @@ for ac_hdr in unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2482: checking for $ac_hdr" >&5 +echo "configure:2371: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2492: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2381: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2518,17 +2407,17 @@ for ac_hdr in compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2522: checking for $ac_hdr" >&5 +echo "configure:2411: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2532: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2421: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2558,17 +2447,17 @@ for ac_hdr in sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2562: checking for $ac_hdr" >&5 +echo "configure:2451: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2572: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2461: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2598,17 +2487,17 @@ for ac_hdr in sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h std do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2602: checking for $ac_hdr" >&5 +echo "configure:2491: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2612: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2501: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2638,17 +2527,17 @@ for ac_hdr in sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h term do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2642: checking for $ac_hdr" >&5 +echo "configure:2531: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2652: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2541: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2678,17 +2567,17 @@ for ac_hdr in sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2682: checking for $ac_hdr" >&5 +echo "configure:2571: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2692: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2581: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2718,17 +2607,17 @@ for ac_hdr in security/pam_modules.h security/_pam_macros.h ldap.h lber.h dlfcn. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2722: checking for $ac_hdr" >&5 +echo "configure:2611: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2732: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2621: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2758,17 +2647,17 @@ for ac_hdr in sys/syslog.h syslog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2762: checking for $ac_hdr" >&5 +echo "configure:2651: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2772: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2661: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2802,14 +2691,14 @@ done case "$host_os" in *hpux*) cat > conftest.$ac_ext < int main() { struct spwd testme ; return 0; } EOF -if { (eval echo configure:2813: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2702: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_shadow_h=yes else @@ -2831,17 +2720,17 @@ for ac_hdr in shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2835: checking for $ac_hdr" >&5 +echo "configure:2724: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2845: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2734: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2871,17 +2760,17 @@ for ac_hdr in nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h sec do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2875: checking for $ac_hdr" >&5 +echo "configure:2764: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2885: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2774: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2911,17 +2800,17 @@ for ac_hdr in stropts.h poll.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2915: checking for $ac_hdr" >&5 +echo "configure:2804: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2925: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2814: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2951,17 +2840,17 @@ for ac_hdr in sys/capability.h syscall.h sys/syscall.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2955: checking for $ac_hdr" >&5 +echo "configure:2844: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2965: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2854: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2991,17 +2880,17 @@ for ac_hdr in sys/acl.h sys/cdefs.h glob.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2995: checking for $ac_hdr" >&5 +echo "configure:2884: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3005: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2894: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3033,17 +2922,17 @@ for ac_hdr in utmp.h utmpx.h lastlog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3037: checking for $ac_hdr" >&5 +echo "configure:2926: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3047: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2936: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3075,17 +2964,17 @@ for ac_hdr in sys/fs/vx_quota.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3079: checking for $ac_hdr" >&5 +echo "configure:2968: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3089: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2978: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3117,17 +3006,17 @@ for ac_hdr in linux/xqm.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3121: checking for $ac_hdr" >&5 +echo "configure:3010: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3131: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3020: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3157,17 +3046,17 @@ for ac_hdr in xfs/xqm.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3161: checking for $ac_hdr" >&5 +echo "configure:3050: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3171: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3060: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3195,7 +3084,7 @@ done echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:3199: checking size of int" >&5 +echo "configure:3088: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3203,7 +3092,7 @@ else ac_cv_sizeof_int=cross else cat > conftest.$ac_ext < int main() @@ -3214,7 +3103,7 @@ int main() return(0); } EOF -if { (eval echo configure:3218: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3107: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -3234,7 +3123,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:3238: checking size of long" >&5 +echo "configure:3127: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3242,7 +3131,7 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < int main() @@ -3253,7 +3142,7 @@ int main() return(0); } EOF -if { (eval echo configure:3257: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3146: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -3273,7 +3162,7 @@ EOF echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:3277: checking size of short" >&5 +echo "configure:3166: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3281,7 +3170,7 @@ else ac_cv_sizeof_short=cross else cat > conftest.$ac_ext < int main() @@ -3292,7 +3181,7 @@ int main() return(0); } EOF -if { (eval echo configure:3296: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -3313,12 +3202,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3317: checking for working const" >&5 +echo "configure:3206: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3260: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3388,21 +3277,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3392: checking for inline" >&5 +echo "configure:3281: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3295: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3428,14 +3317,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3432: checking whether byte ordering is bigendian" >&5 +echo "configure:3321: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3446,11 +3335,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3450: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3339: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3461,7 +3350,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3465: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3354: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3481,7 +3370,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3387: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3518,14 +3407,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3522: checking whether char is unsigned" >&5 +echo "configure:3411: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3450: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3582,12 +3471,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3586: checking return type of signal handlers" >&5 +echo "configure:3475: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3604,7 +3493,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3608: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3497: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3623,12 +3512,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3627: checking for uid_t in sys/types.h" >&5 +echo "configure:3516: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3657,12 +3546,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3661: checking for mode_t" >&5 +echo "configure:3550: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3690,12 +3579,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3694: checking for off_t" >&5 +echo "configure:3583: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3723,12 +3612,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3727: checking for size_t" >&5 +echo "configure:3616: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3756,12 +3645,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3760: checking for pid_t" >&5 +echo "configure:3649: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3789,12 +3678,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3793: checking for st_rdev in struct stat" >&5 +echo "configure:3682: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3802,7 +3691,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3806: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3695: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3823,12 +3712,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3827: checking for d_off in dirent" >&5 +echo "configure:3716: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3838,7 +3727,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3842: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3731: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3859,12 +3748,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3863: checking for ino_t" >&5 +echo "configure:3752: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3892,12 +3781,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3896: checking for loff_t" >&5 +echo "configure:3785: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3925,12 +3814,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3929: checking for offset_t" >&5 +echo "configure:3818: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3958,12 +3847,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3962: checking for ssize_t" >&5 +echo "configure:3851: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3991,12 +3880,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3995: checking for wchar_t" >&5 +echo "configure:3884: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -4038,7 +3927,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4042: checking for $ac_word" >&5 +echo "configure:3931: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4086,14 +3975,14 @@ fi # we need dlopen/dlclose/dlsym/dlerror for PAM, the password database plugins and the plugin loading code echo $ac_n "checking for library containing dlopen""... $ac_c" 1>&6 -echo "configure:4090: checking for library containing dlopen" >&5 +echo "configure:3979: checking for library containing dlopen" >&5 if eval "test \"`echo '$''{'ac_cv_search_dlopen'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_dlopen="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3997: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_dlopen="none required" else @@ -4115,7 +4004,7 @@ rm -f conftest* test "$ac_cv_search_dlopen" = "no" && for i in dl; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_dlopen="-l$i" break @@ -4151,13 +4040,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:4155: checking for immediate structures" >&5 +echo "configure:4044: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4175,7 +4064,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:4179: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4068: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -4198,13 +4087,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:4202: checking for unix domain sockets" >&5 +echo "configure:4091: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4219,7 +4108,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:4223: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4112: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -4241,13 +4130,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:4245: checking for socklen_t type" >&5 +echo "configure:4134: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4260,7 +4149,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:4264: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4153: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -4281,13 +4170,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:4285: checking for sig_atomic_t type" >&5 +echo "configure:4174: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4300,7 +4189,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4304: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4323,20 +4212,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4327: checking for errno declaration" >&5 +echo "configure:4216: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4340: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4229: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4358,20 +4247,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4362: checking for setresuid declaration" >&5 +echo "configure:4251: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4375: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4264: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4393,20 +4282,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4397: checking for setresgid declaration" >&5 +echo "configure:4286: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4410: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4299: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4428,20 +4317,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4432: checking for asprintf declaration" >&5 +echo "configure:4321: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4445: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4334: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4463,20 +4352,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4467: checking for vasprintf declaration" >&5 +echo "configure:4356: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4480: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4369: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4498,20 +4387,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4502: checking for vsnprintf declaration" >&5 +echo "configure:4391: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4515: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4404: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4533,20 +4422,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4537: checking for snprintf declaration" >&5 +echo "configure:4426: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4550: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4439: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4570,7 +4459,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4574: checking for real setresuid" >&5 +echo "configure:4463: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4579,12 +4468,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4588: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4477: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4609,7 +4498,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4613: checking for real setresgid" >&5 +echo "configure:4502: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4618,13 +4507,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4628: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4517: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4647,7 +4536,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4651: checking for 8-bit clean memcmp" >&5 +echo "configure:4540: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4655,7 +4544,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4558: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4687,14 +4576,14 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" # test for where we get crypt() from echo $ac_n "checking for library containing crypt""... $ac_c" 1>&6 -echo "configure:4691: checking for library containing crypt" >&5 +echo "configure:4580: checking for library containing crypt" >&5 if eval "test \"`echo '$''{'ac_cv_search_crypt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_crypt="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4598: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_crypt="none required" else @@ -4716,7 +4605,7 @@ rm -f conftest* test "$ac_cv_search_crypt" = "no" && for i in crypt; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4620: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_crypt="-l$i" break @@ -4758,7 +4647,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4762: checking whether to use readline" >&5 +echo "configure:4651: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4770,17 +4659,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4774: checking for $ac_hdr" >&5 +echo "configure:4663: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4784: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4673: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4810,17 +4699,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4814: checking for $ac_hdr" >&5 +echo "configure:4703: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4824: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4713: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4851,17 +4740,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4855: checking for $ac_hdr" >&5 +echo "configure:4744: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4865: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4754: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4884,7 +4773,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4888: checking for tgetent in -l${termlib}" >&5 +echo "configure:4777: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4892,7 +4781,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4925,7 +4814,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4929: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4818: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4933,7 +4822,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4837: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4995,17 +4884,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4999: checking for $ac_hdr" >&5 +echo "configure:4888: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5009: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4898: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5035,17 +4924,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5039: checking for $ac_hdr" >&5 +echo "configure:4928: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5049: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4938: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5076,17 +4965,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5080: checking for $ac_hdr" >&5 +echo "configure:4969: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5090: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4979: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5109,7 +4998,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:5113: checking for tgetent in -l${termlib}" >&5 +echo "configure:5002: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5117,7 +5006,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5150,7 +5039,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:5154: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:5043: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5158,7 +5047,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5062: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5219,7 +5108,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:5223: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:5112: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5227,7 +5116,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5271,12 +5160,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5275: checking for $ac_func" >&5 +echo "configure:5164: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5327,7 +5216,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5331: checking for printf in -lnsl_s" >&5 +echo "configure:5220: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5335,7 +5224,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5377,7 +5266,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5381: checking for printf in -lnsl" >&5 +echo "configure:5270: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5385,7 +5274,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5427,7 +5316,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5431: checking for connect in -lsocket" >&5 +echo "configure:5320: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5435,7 +5324,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5339: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5477,7 +5366,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5481: checking for connect in -linet" >&5 +echo "configure:5370: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5485,7 +5374,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5539,14 +5428,14 @@ fi # test for where we get yp_get_default_domain() from echo $ac_n "checking for library containing yp_get_default_domain""... $ac_c" 1>&6 -echo "configure:5543: checking for library containing yp_get_default_domain" >&5 +echo "configure:5432: checking for library containing yp_get_default_domain" >&5 if eval "test \"`echo '$''{'ac_cv_search_yp_get_default_domain'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_yp_get_default_domain="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5450: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_yp_get_default_domain="none required" else @@ -5568,7 +5457,7 @@ rm -f conftest* test "$ac_cv_search_yp_get_default_domain" = "no" && for i in nsl; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_yp_get_default_domain="-l$i" break @@ -5602,12 +5491,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5606: checking for $ac_func" >&5 +echo "configure:5495: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5659,12 +5548,12 @@ done for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5663: checking for $ac_func" >&5 +echo "configure:5552: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5718,12 +5607,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5722: checking for $ac_func" >&5 +echo "configure:5611: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5773,12 +5662,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5777: checking for $ac_func" >&5 +echo "configure:5666: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5694: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5828,12 +5717,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5832: checking for $ac_func" >&5 +echo "configure:5721: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5749: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5883,12 +5772,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5887: checking for $ac_func" >&5 +echo "configure:5776: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5938,12 +5827,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5942: checking for $ac_func" >&5 +echo "configure:5831: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5859: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5993,12 +5882,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5997: checking for $ac_func" >&5 +echo "configure:5886: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5914: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6048,12 +5937,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6052: checking for $ac_func" >&5 +echo "configure:5941: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6103,12 +5992,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6107: checking for $ac_func" >&5 +echo "configure:5996: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6158,12 +6047,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6162: checking for $ac_func" >&5 +echo "configure:6051: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6079: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6213,12 +6102,12 @@ done for ac_func in syslog vsyslog getgrouplist timegm do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6217: checking for $ac_func" >&5 +echo "configure:6106: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6269,12 +6158,12 @@ done for ac_func in setbuffer shmget shm_open do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6273: checking for $ac_func" >&5 +echo "configure:6162: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6326,12 +6215,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6330: checking for $ac_func" >&5 +echo "configure:6219: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6247: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6382,12 +6271,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6386: checking for $ac_func" >&5 +echo "configure:6275: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6437,12 +6326,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6441: checking for $ac_func" >&5 +echo "configure:6330: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6492,12 +6381,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6496: checking for $ac_func" >&5 +echo "configure:6385: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6547,12 +6436,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6551: checking for $ac_func" >&5 +echo "configure:6440: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6602,12 +6491,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6606: checking for $ac_func" >&5 +echo "configure:6495: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6657,12 +6546,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6661: checking for $ac_func" >&5 +echo "configure:6550: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6712,12 +6601,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6716: checking for $ac_func" >&5 +echo "configure:6605: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6633: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6767,12 +6656,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6771: checking for $ac_func" >&5 +echo "configure:6660: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6688: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6819,15 +6708,15 @@ else fi done -for ac_func in getdirentries _write __write _fork __fork +for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6826: checking for $ac_func" >&5 +echo "configure:6715: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6743: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6877,12 +6766,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6881: checking for $ac_func" >&5 +echo "configure:6770: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6798: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6932,12 +6821,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6936: checking for $ac_func" >&5 +echo "configure:6825: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6853: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6987,12 +6876,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6991: checking for $ac_func" >&5 +echo "configure:6880: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7042,12 +6931,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7046: checking for $ac_func" >&5 +echo "configure:6935: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7097,12 +6986,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7101: checking for $ac_func" >&5 +echo "configure:6990: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7018: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7156,9 +7045,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:7160: checking for stat64 in " >&5 +echo "configure:7049: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7063: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -7189,9 +7078,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:7193: checking for lstat64 in " >&5 +echo "configure:7082: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7096: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -7222,9 +7111,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:7226: checking for fstat64 in " >&5 +echo "configure:7115: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7129: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -7256,7 +7145,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:7260: checking for dn_expand in -lresolv" >&5 +echo "configure:7149: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7264,7 +7153,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7168: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7313,12 +7202,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7317: checking for $ac_func" >&5 +echo "configure:7206: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7366,7 +7255,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7370: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7259: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7374,7 +7263,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7415,12 +7304,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7419: checking for $ac_func" >&5 +echo "configure:7308: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7474,12 +7363,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7478: checking for $ac_func" >&5 +echo "configure:7367: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7395: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7527,7 +7416,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7531: checking for putprpwnam in -lsec" >&5 +echo "configure:7420: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7535,7 +7424,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7576,12 +7465,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7580: checking for $ac_func" >&5 +echo "configure:7469: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7497: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7636,12 +7525,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7640: checking for $ac_func" >&5 +echo "configure:7529: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7557: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7689,7 +7578,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7693: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7582: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7697,7 +7586,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7601: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7738,12 +7627,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7742: checking for $ac_func" >&5 +echo "configure:7631: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7659: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7797,12 +7686,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7801: checking for $ac_func" >&5 +echo "configure:7690: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7718: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7850,7 +7739,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7854: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7743: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7858,7 +7747,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7899,12 +7788,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7903: checking for $ac_func" >&5 +echo "configure:7792: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7960,12 +7849,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7964: checking for $ac_func" >&5 +echo "configure:7853: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7881: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8013,7 +7902,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:8017: checking for getspnam in -lgen" >&5 +echo "configure:7906: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8021,7 +7910,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8062,12 +7951,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8066: checking for $ac_func" >&5 +echo "configure:7955: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7983: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8122,12 +8011,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8126: checking for $ac_func" >&5 +echo "configure:8015: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8043: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8175,7 +8064,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8179: checking for getspnam in -lsecurity" >&5 +echo "configure:8068: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8183,7 +8072,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8224,12 +8113,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8228: checking for $ac_func" >&5 +echo "configure:8117: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8145: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8283,12 +8172,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8287: checking for $ac_func" >&5 +echo "configure:8176: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8204: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8336,7 +8225,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8340: checking for getspnam in -lsec" >&5 +echo "configure:8229: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8344,7 +8233,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8248: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8385,12 +8274,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8389: checking for $ac_func" >&5 +echo "configure:8278: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8445,12 +8334,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8449: checking for $ac_func" >&5 +echo "configure:8338: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8498,7 +8387,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8502: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8391: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8506,7 +8395,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8410: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8547,12 +8436,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8551: checking for $ac_func" >&5 +echo "configure:8440: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8606,12 +8495,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8610: checking for $ac_func" >&5 +echo "configure:8499: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8659,7 +8548,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8663: checking for bigcrypt in -lsec" >&5 +echo "configure:8552: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8667,7 +8556,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8571: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8708,12 +8597,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8712: checking for $ac_func" >&5 +echo "configure:8601: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8629: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8768,12 +8657,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8772: checking for $ac_func" >&5 +echo "configure:8661: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8821,7 +8710,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8825: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8714: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8829,7 +8718,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8870,12 +8759,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8874: checking for $ac_func" >&5 +echo "configure:8763: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8791: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8929,12 +8818,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8933: checking for $ac_func" >&5 +echo "configure:8822: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8982,7 +8871,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8986: checking for getprpwnam in -lsec" >&5 +echo "configure:8875: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8990,7 +8879,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8894: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9031,12 +8920,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9035: checking for $ac_func" >&5 +echo "configure:8924: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9103,7 +8992,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:9107: checking ability to build shared libraries" >&5 +echo "configure:8996: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -9298,7 +9187,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9302: checking for $ac_word" >&5 +echo "configure:9191: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9387,17 +9276,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9391: checking linker flags for shared libraries" >&5 +echo "configure:9280: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9394: checking compiler flags for position-independent code" >&5 +echo "configure:9283: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9401: checking whether building shared libraries actually works" >&5 +echo "configure:9290: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9427,7 +9316,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9431: checking for long long" >&5 +echo "configure:9320: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9436,12 +9325,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9468,20 +9357,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9472: checking for LL suffix on long long integers" >&5 +echo "configure:9361: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9485: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9374: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9503,7 +9392,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9507: checking for 64 bit off_t" >&5 +echo "configure:9396: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9512,13 +9401,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9541,7 +9430,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9545: checking for off64_t" >&5 +echo "configure:9434: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9550,7 +9439,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9564: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9453: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9583,7 +9472,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9587: checking for 64 bit ino_t" >&5 +echo "configure:9476: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9592,13 +9481,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9602: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9491: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9621,7 +9510,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9625: checking for ino64_t" >&5 +echo "configure:9514: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9630,7 +9519,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9644: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9533: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9663,7 +9552,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9667: checking for dev64_t" >&5 +echo "configure:9556: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9672,7 +9561,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9686: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9705,13 +9594,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9709: checking for struct dirent64" >&5 +echo "configure:9598: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9616: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9744,7 +9633,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9748: checking for major macro" >&5 +echo "configure:9637: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9753,7 +9642,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9655: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9785,7 +9674,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9789: checking for minor macro" >&5 +echo "configure:9678: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9794,7 +9683,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9807: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9826,7 +9715,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9830: checking for unsigned char" >&5 +echo "configure:9719: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9835,12 +9724,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9863,13 +9752,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9867: checking for sin_len in sock" >&5 +echo "configure:9756: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9878,7 +9767,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9882: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9771: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9899,13 +9788,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9903: checking whether seekdir returns void" >&5 +echo "configure:9792: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9914,7 +9803,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9918: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9807: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9935,20 +9824,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9939: checking for __FUNCTION__ macro" >&5 +echo "configure:9828: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9952: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9841: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9969,7 +9858,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9973: checking if gettimeofday takes tz argument" >&5 +echo "configure:9862: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9978,14 +9867,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9989: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9878: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -10008,13 +9897,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:10012: checking for __va_copy" >&5 +echo "configure:9901: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -10022,7 +9911,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:10026: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -10043,7 +9932,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:10047: checking for C99 vsnprintf" >&5 +echo "configure:9936: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10052,7 +9941,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -10079,7 +9968,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:10083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -10102,7 +9991,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:10106: checking for broken readdir" >&5 +echo "configure:9995: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10111,7 +10000,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -10119,7 +10008,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:10123: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10012: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -10142,13 +10031,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:10146: checking for utimbuf" >&5 +echo "configure:10035: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10156,7 +10045,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:10160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10049: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -10180,12 +10069,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:10184: checking for $ac_func" >&5 +echo "configure:10073: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10101: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -10234,13 +10123,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:10238: checking for ut_name in utmp" >&5 +echo "configure:10127: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10248,7 +10137,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10252: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10141: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10269,13 +10158,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10273: checking for ut_user in utmp" >&5 +echo "configure:10162: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10283,7 +10172,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10287: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10176: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10304,13 +10193,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10308: checking for ut_id in utmp" >&5 +echo "configure:10197: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10318,7 +10207,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10322: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10211: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10339,13 +10228,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10343: checking for ut_host in utmp" >&5 +echo "configure:10232: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10353,7 +10242,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10357: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10246: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10374,13 +10263,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10378: checking for ut_time in utmp" >&5 +echo "configure:10267: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10388,7 +10277,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10392: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10281: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10409,13 +10298,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10413: checking for ut_tv in utmp" >&5 +echo "configure:10302: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10423,7 +10312,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10427: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10316: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10444,13 +10333,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10448: checking for ut_type in utmp" >&5 +echo "configure:10337: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10458,7 +10347,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10462: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10351: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10479,13 +10368,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10483: checking for ut_pid in utmp" >&5 +echo "configure:10372: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10493,7 +10382,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10497: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10386: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10514,13 +10403,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10518: checking for ut_exit in utmp" >&5 +echo "configure:10407: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10528,7 +10417,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10532: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10421: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10549,13 +10438,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10553: checking for ut_addr in utmp" >&5 +echo "configure:10442: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10563,7 +10452,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10567: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10456: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10585,13 +10474,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10589: checking whether pututline returns pointer" >&5 +echo "configure:10478: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10599,7 +10488,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10603: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10492: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10621,13 +10510,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10625: checking for ut_syslen in utmpx" >&5 +echo "configure:10514: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10635,7 +10524,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10639: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10528: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10659,7 +10548,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10663: checking whether to use libiconv" >&5 +echo "configure:10552: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10672,7 +10561,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10676: checking for iconv_open in -liconv" >&5 +echo "configure:10565: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10680,7 +10569,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10584: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10734,7 +10623,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10738: checking for working iconv" >&5 +echo "configure:10627: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10743,7 +10632,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10754,7 +10643,7 @@ main() { } EOF -if { (eval echo configure:10758: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10647: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10778,7 +10667,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10782: checking for Linux kernel oplocks" >&5 +echo "configure:10671: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10787,7 +10676,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10801,7 +10690,7 @@ main() { } EOF -if { (eval echo configure:10805: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10694: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10824,7 +10713,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10828: checking for kernel change notify support" >&5 +echo "configure:10717: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10833,7 +10722,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10847,7 +10736,7 @@ main() { } EOF -if { (eval echo configure:10851: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10740: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10870,7 +10759,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10874: checking for kernel share modes" >&5 +echo "configure:10763: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10879,7 +10768,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10895,7 +10784,7 @@ main() { } EOF -if { (eval echo configure:10899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10788: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10921,13 +10810,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10925: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10814: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10935,7 +10824,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10939: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10828: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10956,7 +10845,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10960: checking for irix specific capabilities" >&5 +echo "configure:10849: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10965,7 +10854,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10980,7 +10869,7 @@ main() { } EOF -if { (eval echo configure:10984: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10873: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -11008,13 +10897,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:11012: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10901: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -11024,7 +10913,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:11028: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10917: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -11045,13 +10934,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:11049: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10938: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -11061,7 +10950,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:11065: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10954: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -11082,13 +10971,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:11086: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10975: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -11098,7 +10987,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:11102: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10991: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -11119,13 +11008,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:11123: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:11012: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -11135,7 +11024,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:11139: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11028: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -11157,13 +11046,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:11161: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:11050: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -11177,7 +11066,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:11181: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11070: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -11198,16 +11087,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:11202: checking for test routines" >&5 +echo "configure:11091: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11100: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -11221,7 +11110,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:11225: checking for ftruncate extend" >&5 +echo "configure:11114: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11230,11 +11119,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -11257,7 +11146,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:11261: checking for AF_LOCAL socket support" >&5 +echo "configure:11150: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11266,11 +11155,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11163: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11294,7 +11183,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11298: checking for broken getgroups" >&5 +echo "configure:11187: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11303,11 +11192,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11200: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11330,7 +11219,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11334: checking whether getpass should be replaced" >&5 +echo "configure:11223: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11338,7 +11227,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11244: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11374,7 +11263,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11378: checking for broken inet_ntoa" >&5 +echo "configure:11267: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11383,7 +11272,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11397,7 +11286,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11420,7 +11309,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11424: checking for secure mkstemp" >&5 +echo "configure:11313: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11429,7 +11318,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11446,7 +11335,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11450: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11339: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11469,7 +11358,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11473: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11362: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11478,12 +11367,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11506,7 +11395,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11510: checking for root" >&5 +echo "configure:11399: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11515,11 +11404,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11547,7 +11436,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11551: checking for iface AIX" >&5 +echo "configure:11440: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11556,7 +11445,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11588,7 +11477,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11592: checking for iface ifconf" >&5 +echo "configure:11481: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11597,7 +11486,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11630,7 +11519,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11634: checking for iface ifreq" >&5 +echo "configure:11523: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11639,7 +11528,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11540: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11676,7 +11565,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11680: checking for setresuid" >&5 +echo "configure:11569: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11685,7 +11574,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11586: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11719,7 +11608,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11723: checking for setreuid" >&5 +echo "configure:11612: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11728,7 +11617,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11629: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11761,7 +11650,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11765: checking for seteuid" >&5 +echo "configure:11654: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11770,7 +11659,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11671: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11803,7 +11692,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11807: checking for setuidx" >&5 +echo "configure:11696: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11812,7 +11701,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11713: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11845,7 +11734,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11849: checking for working mmap" >&5 +echo "configure:11738: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11854,11 +11743,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11751: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11881,7 +11770,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11885: checking for ftruncate needs root" >&5 +echo "configure:11774: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11890,11 +11779,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11787: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11917,7 +11806,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11921: checking for fcntl locking" >&5 +echo "configure:11810: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11926,11 +11815,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11823: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11953,7 +11842,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11957: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11846: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11962,11 +11851,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11859: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11991,7 +11880,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11995: checking for 64 bit fcntl locking" >&5 +echo "configure:11884: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12000,7 +11889,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11917: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -12049,13 +11938,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:12053: checking for st_blocks in struct stat" >&5 +echo "configure:11942: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -12064,7 +11953,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:12068: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11957: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -12085,13 +11974,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:12089: checking for st_blksize in struct stat" >&5 +echo "configure:11978: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -12100,7 +11989,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:12104: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11993: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -12123,13 +12012,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:12127: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:12016: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12036: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -12166,13 +12055,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:12170: checking for broken nisplus include files" >&5 +echo "configure:12059: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -12182,7 +12071,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:12186: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12075: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -12206,7 +12095,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:12210: checking whether to use smbwrapper" >&5 +echo "configure:12099: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -12255,7 +12144,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12259: checking whether to use AFS clear-text auth" >&5 +echo "configure:12148: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12281,7 +12170,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12285: checking whether to use DFS clear-text auth" >&5 +echo "configure:12174: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12308,7 +12197,7 @@ fi with_ads_support=yes echo $ac_n "checking whether to use Active Directory""... $ac_c" 1>&6 -echo "configure:12312: checking whether to use Active Directory" >&5 +echo "configure:12201: checking whether to use Active Directory" >&5 # Check whether --with-ads or --without-ads was given. if test "${with_ads+set}" = set; then @@ -12336,7 +12225,7 @@ if test x"$with_ads_support" = x"yes"; then ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12340: checking for kerberos 5 install path" >&5 +echo "configure:12229: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12364,7 +12253,7 @@ if test x$FOUND_KRB5 = x"no"; then ################################################# # see if this box has the SuSE location for the heimdal kerberos implementation echo $ac_n "checking for /usr/include/heimdal""... $ac_c" 1>&6 -echo "configure:12368: checking for /usr/include/heimdal" >&5 +echo "configure:12257: checking for /usr/include/heimdal" >&5 if test -d /usr/include/heimdal; then LIBS="$LIBS -lkrb5" CFLAGS="$CFLAGS -I/usr/include/heimdal" @@ -12380,7 +12269,7 @@ if test x$FOUND_KRB5 = x"no"; then ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12384: checking for /usr/kerberos" >&5 +echo "configure:12273: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LIBS="$LIBS -lkrb5" LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" @@ -12392,6 +12281,7 @@ else fi fi + # now check for krb5.h. Some systems have the libraries without the headers! # note that this check is done here to allow for different kerberos # include paths @@ -12399,17 +12289,17 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12403: checking for $ac_hdr" >&5 +echo "configure:12293: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12413: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12303: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12442,17 +12332,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12446: checking for $ac_hdr" >&5 +echo "configure:12336: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12456: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12346: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12482,7 +12372,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12486: checking for _et_list in -lcom_err" >&5 +echo "configure:12376: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12490,7 +12380,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12395: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12522,7 +12412,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12526: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12416: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12530,7 +12420,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12563,7 +12453,7 @@ fi # Heimdal checks. echo $ac_n "checking for des_set_key in -lcrypto""... $ac_c" 1>&6 -echo "configure:12567: checking for des_set_key in -lcrypto" >&5 +echo "configure:12457: checking for des_set_key in -lcrypto" >&5 ac_lib_var=`echo crypto'_'des_set_key | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12571,7 +12461,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12476: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12603,7 +12493,7 @@ else fi echo $ac_n "checking for copy_Authenticator in -lasn1""... $ac_c" 1>&6 -echo "configure:12607: checking for copy_Authenticator in -lasn1" >&5 +echo "configure:12497: checking for copy_Authenticator in -lasn1" >&5 ac_lib_var=`echo asn1'_'copy_Authenticator | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12611,7 +12501,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lasn1 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12516: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12644,7 +12534,7 @@ fi # Heimdal checks. On static Heimdal gssapi must be linked before krb5. echo $ac_n "checking for gss_display_status in -lgssapi""... $ac_c" 1>&6 -echo "configure:12648: checking for gss_display_status in -lgssapi" >&5 +echo "configure:12538: checking for gss_display_status in -lgssapi" >&5 ac_lib_var=`echo gssapi'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12652,7 +12542,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12557: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12679,7 +12569,7 @@ fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="$LIBS -lgssapi -lkrb5 -lasn1"; - cat >> confdefs.h <<\EOF + cat >> confdefs.h <<\EOF #define HAVE_GSSAPI 1 EOF @@ -12689,7 +12579,7 @@ fi echo $ac_n "checking for krb5_set_real_time in -lkrb5""... $ac_c" 1>&6 -echo "configure:12693: checking for krb5_set_real_time in -lkrb5" >&5 +echo "configure:12583: checking for krb5_set_real_time in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_set_real_time | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12697,7 +12587,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12602: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12732,7 +12622,7 @@ else fi echo $ac_n "checking for krb5_set_default_in_tkt_etypes in -lkrb5""... $ac_c" 1>&6 -echo "configure:12736: checking for krb5_set_default_in_tkt_etypes in -lkrb5" >&5 +echo "configure:12626: checking for krb5_set_default_in_tkt_etypes in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_set_default_in_tkt_etypes | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12740,7 +12630,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12645: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12775,7 +12665,7 @@ else fi echo $ac_n "checking for krb5_set_default_tgs_ktypes in -lkrb5""... $ac_c" 1>&6 -echo "configure:12779: checking for krb5_set_default_tgs_ktypes in -lkrb5" >&5 +echo "configure:12669: checking for krb5_set_default_tgs_ktypes in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_set_default_tgs_ktypes | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12783,7 +12673,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12688: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12819,7 +12709,7 @@ fi echo $ac_n "checking for krb5_principal2salt in -lkrb5""... $ac_c" 1>&6 -echo "configure:12823: checking for krb5_principal2salt in -lkrb5" >&5 +echo "configure:12713: checking for krb5_principal2salt in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_principal2salt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12827,7 +12717,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12732: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12862,7 +12752,7 @@ else fi echo $ac_n "checking for krb5_use_enctype in -lkrb5""... $ac_c" 1>&6 -echo "configure:12866: checking for krb5_use_enctype in -lkrb5" >&5 +echo "configure:12756: checking for krb5_use_enctype in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_use_enctype | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12870,7 +12760,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12775: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12905,7 +12795,7 @@ else fi echo $ac_n "checking for krb5_string_to_key in -lkrb5""... $ac_c" 1>&6 -echo "configure:12909: checking for krb5_string_to_key in -lkrb5" >&5 +echo "configure:12799: checking for krb5_string_to_key in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_string_to_key | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12913,7 +12803,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12818: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12948,7 +12838,7 @@ else fi echo $ac_n "checking for krb5_get_pw_salt in -lkrb5""... $ac_c" 1>&6 -echo "configure:12952: checking for krb5_get_pw_salt in -lkrb5" >&5 +echo "configure:12842: checking for krb5_get_pw_salt in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_get_pw_salt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12956,7 +12846,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12861: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12991,7 +12881,7 @@ else fi echo $ac_n "checking for krb5_string_to_key_salt in -lkrb5""... $ac_c" 1>&6 -echo "configure:12995: checking for krb5_string_to_key_salt in -lkrb5" >&5 +echo "configure:12885: checking for krb5_string_to_key_salt in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_string_to_key_salt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12999,7 +12889,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12904: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13034,7 +12924,7 @@ else fi echo $ac_n "checking for krb5_auth_con_setkey in -lkrb5""... $ac_c" 1>&6 -echo "configure:13038: checking for krb5_auth_con_setkey in -lkrb5" >&5 +echo "configure:12928: checking for krb5_auth_con_setkey in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_auth_con_setkey | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13042,7 +12932,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12947: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13077,7 +12967,7 @@ else fi echo $ac_n "checking for krb5_auth_con_setuseruserkey in -lkrb5""... $ac_c" 1>&6 -echo "configure:13081: checking for krb5_auth_con_setuseruserkey in -lkrb5" >&5 +echo "configure:12971: checking for krb5_auth_con_setuseruserkey in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_auth_con_setuseruserkey | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13085,7 +12975,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12990: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13120,7 +13010,7 @@ else fi echo $ac_n "checking for krb5_locate_kdc in -lkrb5""... $ac_c" 1>&6 -echo "configure:13124: checking for krb5_locate_kdc in -lkrb5" >&5 +echo "configure:13014: checking for krb5_locate_kdc in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_locate_kdc | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13128,7 +13018,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13164,20 +13054,20 @@ fi echo $ac_n "checking for addrtype in krb5_address""... $ac_c" 1>&6 -echo "configure:13168: checking for addrtype in krb5_address" >&5 +echo "configure:13058: checking for addrtype in krb5_address" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET; ; return 0; } EOF -if { (eval echo configure:13181: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13071: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes else @@ -13198,20 +13088,20 @@ EOF fi echo $ac_n "checking for addr_type in krb5_address""... $ac_c" 1>&6 -echo "configure:13202: checking for addr_type in krb5_address" >&5 +echo "configure:13092: checking for addr_type in krb5_address" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET; ; return 0; } EOF -if { (eval echo configure:13215: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13105: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes else @@ -13232,20 +13122,20 @@ EOF fi echo $ac_n "checking for enc_part2 in krb5_ticket""... $ac_c" 1>&6 -echo "configure:13236: checking for enc_part2 in krb5_ticket" >&5 +echo "configure:13126: checking for enc_part2 in krb5_ticket" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KRB5_TKT_ENC_PART2'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL; ; return 0; } EOF -if { (eval echo configure:13249: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13139: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes else @@ -13269,7 +13159,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:13273: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:13163: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13277,7 +13167,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13304,7 +13194,7 @@ fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="$LIBS -lkrb5"; - cat >> confdefs.h <<\EOF + cat >> confdefs.h <<\EOF #define HAVE_KRB5 1 EOF @@ -13316,7 +13206,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:13320: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:13210: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13324,7 +13214,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13351,7 +13241,7 @@ fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBS="$LIBS -lgssapi_krb5"; - cat >> confdefs.h <<\EOF + cat >> confdefs.h <<\EOF #define HAVE_GSSAPI 1 EOF @@ -13359,7 +13249,6 @@ else echo "$ac_t""no" 1>&6 fi - fi ######################################################## @@ -13367,7 +13256,7 @@ fi with_ldap_support=yes echo $ac_n "checking whether to use LDAP""... $ac_c" 1>&6 -echo "configure:13371: checking whether to use LDAP" >&5 +echo "configure:13260: checking whether to use LDAP" >&5 # Check whether --with-ldap or --without-ldap was given. if test "${with_ldap+set}" = set; then @@ -13388,7 +13277,7 @@ if test x"$with_ldap_support" = x"yes"; then # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:13392: checking for ber_scanf in -llber" >&5 +echo "configure:13281: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13396,7 +13285,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13432,7 +13321,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:13436: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:13325: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13440,7 +13329,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13344: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13482,12 +13371,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:13486: checking for $ac_func" >&5 +echo "configure:13375: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -13535,13 +13424,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:13539: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:13428: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -13550,7 +13439,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:13554: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13443: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -13614,7 +13503,7 @@ fi # Extract the first word of "mysql_config", so it can be a program name with args. set dummy mysql_config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:13618: checking for $ac_word" >&5 +echo "configure:13507: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MYSQL_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13649,7 +13538,7 @@ fi min_mysql_version=0.11.0 echo $ac_n "checking for MYSQL - version >= $min_mysql_version""... $ac_c" 1>&6 -echo "configure:13653: checking for MYSQL - version >= $min_mysql_version" >&5 +echo "configure:13542: checking for MYSQL - version >= $min_mysql_version" >&5 no_mysql="" if test "$MYSQL_CONFIG" = "no" ; then no_mysql=yes @@ -13673,7 +13562,7 @@ echo "configure:13653: checking for MYSQL - version >= $min_mysql_version" >&5 echo $ac_n "cross compiling; assumed OK... $ac_c" else cat > conftest.$ac_ext < @@ -13734,7 +13623,7 @@ int major, minor, micro; EOF -if { (eval echo configure:13738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -13752,7 +13641,7 @@ fi fi if test "x$no_mysql" = x ; then echo "$ac_t""yes" 1>&6 - MODULE_MYSQL=bin/mysql.so + MODULE_MYSQL=bin/pdb_mysql.so else echo "$ac_t""no" 1>&6 if test "$MYSQL_CONFIG" = "no" ; then @@ -13768,7 +13657,7 @@ fi CFLAGS="$CFLAGS $MYSQL_CFLAGS" LIBS="$LIBS $MYSQL_LIBS" cat > conftest.$ac_ext < @@ -13783,7 +13672,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:13787: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding MYSQL or finding the wrong" @@ -13863,7 +13752,7 @@ fi # Extract the first word of "xml2-config", so it can be a program name with args. set dummy xml2-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:13867: checking for $ac_word" >&5 +echo "configure:13756: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XML2_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13898,7 +13787,7 @@ fi min_xml_version=2.0.0 echo $ac_n "checking for libxml - version >= $min_xml_version""... $ac_c" 1>&6 -echo "configure:13902: checking for libxml - version >= $min_xml_version" >&5 +echo "configure:13791: checking for libxml - version >= $min_xml_version" >&5 no_xml="" if test "$XML2_CONFIG" = "no" ; then no_xml=yes @@ -13921,7 +13810,7 @@ echo "configure:13902: checking for libxml - version >= $min_xml_version" >&5 echo $ac_n "cross compiling; assumed OK... $ac_c" else cat > conftest.$ac_ext < @@ -14000,7 +13889,7 @@ main() } EOF -if { (eval echo configure:14004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13893: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -14019,7 +13908,7 @@ fi if test "x$no_xml" = x ; then echo "$ac_t""yes (version $xml_config_major_version.$xml_config_minor_version.$xml_config_micro_version)" 1>&6 - MODULE_XML=bin/xml.so + MODULE_XML=bin/pdb_xml.so else echo "$ac_t""no" 1>&6 if test "$XML2_CONFIG" = "no" ; then @@ -14035,7 +13924,7 @@ fi CFLAGS="$CFLAGS $XML_CFLAGS" LIBS="$LIBS $XML_LIBS" cat > conftest.$ac_ext < @@ -14045,7 +13934,7 @@ int main() { LIBXML_TEST_VERSION; return 0; ; return 0; } EOF -if { (eval echo configure:14049: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13938: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding LIBXML or finding the wrong" @@ -14085,7 +13974,7 @@ CFLAGS="$CFLAGS $XML_CFLAGS" ################################################# # check for automount support echo $ac_n "checking whether to use automount""... $ac_c" 1>&6 -echo "configure:14089: checking whether to use automount" >&5 +echo "configure:13978: checking whether to use automount" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -14110,7 +13999,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use smbmount""... $ac_c" 1>&6 -echo "configure:14114: checking whether to use smbmount" >&5 +echo "configure:14003: checking whether to use smbmount" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -14145,7 +14034,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:14149: checking whether to use PAM" >&5 +echo "configure:14038: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -14171,7 +14060,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:14175: checking for pam_get_data in -lpam" >&5 +echo "configure:14064: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14179,7 +14068,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14217,7 +14106,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:14221: checking whether to use pam_smbpass" >&5 +echo "configure:14110: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -14253,12 +14142,12 @@ if test x"$with_pam_for_crypt" = x"no"; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:14257: checking for $ac_func" >&5 +echo "configure:14146: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -14307,7 +14196,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:14311: checking for crypt in -lcrypt" >&5 +echo "configure:14200: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14315,7 +14204,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14219: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14361,7 +14250,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:14365: checking for a crypt that needs truncated salt" >&5 +echo "configure:14254: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -14372,11 +14261,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -14400,32 +14289,6 @@ EOF fi fi -# New experimental SAM system - -echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:14407: checking whether to build the new (experimental) SAM database" >&5 -# Check whether --with-sam or --without-sam was given. -if test "${with_sam+set}" = set; then - withval="$with_sam" - case "$withval" in - yes) - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define WITH_SAM 1 -EOF - - ;; - *) - echo "$ac_t""no" 1>&6 - ;; - esac -else - echo "$ac_t""no" 1>&6 - -fi - - - ######################################################################################## ## ## TESTS FOR SAM BACKENDS. KEEP THESE GROUPED TOGETHER @@ -14435,7 +14298,7 @@ fi ################################################# # check for a LDAP password database configuration backwards compatibility echo $ac_n "checking whether to use LDAP SAM 2.2 compatible configuration""... $ac_c" 1>&6 -echo "configure:14439: checking whether to use LDAP SAM 2.2 compatible configuration" >&5 +echo "configure:14302: checking whether to use LDAP SAM 2.2 compatible configuration" >&5 # Check whether --with-ldapsam or --without-ldapsam was given. if test "${with_ldapsam+set}" = set; then withval="$with_ldapsam" @@ -14460,7 +14323,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:14464: checking whether to use TDB SAM database" >&5 +echo "configure:14327: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -14485,7 +14348,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:14489: checking whether to use NISPLUS SAM database" >&5 +echo "configure:14352: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -14516,7 +14379,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:14520: checking whether to use NISPLUS_HOME" >&5 +echo "configure:14383: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -14541,7 +14404,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:14545: checking whether to use syslog logging" >&5 +echo "configure:14408: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -14566,7 +14429,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:14570: checking whether to use profiling" >&5 +echo "configure:14433: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -14594,7 +14457,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:14598: checking whether to support disk-quotas" >&5 +echo "configure:14461: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -14605,13 +14468,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:14609: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:14472: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -14623,7 +14486,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:14627: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14490: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -14672,7 +14535,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:14676: checking whether to support utmp accounting" >&5 +echo "configure:14539: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -14697,7 +14560,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:14701: checking chosen man pages' language(s)" >&5 +echo "configure:14564: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -14730,7 +14593,7 @@ INSTALLCLIENTCMD_A=: LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:14734: checking whether to build the libsmbclient shared library" >&5 +echo "configure:14597: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -14772,14 +14635,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:14776: checking how to get filesystem space usage" >&5 +echo "configure:14639: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:14783: checking statvfs64 function (SVR4)" >&5 +echo "configure:14646: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -14787,7 +14650,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14668: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -14834,12 +14697,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:14838: checking statvfs function (SVR4)" >&5 +echo "configure:14701: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -14847,7 +14710,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:14851: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14714: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -14872,7 +14735,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:14876: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:14739: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -14880,7 +14743,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -14893,7 +14756,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:14897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -14920,7 +14783,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:14924: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:14787: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -14928,7 +14791,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14814: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -14974,7 +14837,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:14978: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:14841: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -14982,7 +14845,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -14992,7 +14855,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:14996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14859: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -15019,7 +14882,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:15023: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:14886: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -15027,7 +14890,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -15043,7 +14906,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:15047: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14910: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -15070,7 +14933,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:15074: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:14937: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -15078,7 +14941,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -15098,7 +14961,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:15102: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -15131,9 +14994,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:15135: checking if large file support can be enabled" >&5 +echo "configure:14998: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:15013: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -15211,7 +15074,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:15215: checking whether to support ACLs" >&5 +echo "configure:15078: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -15264,7 +15127,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:15268: checking for acl_get_file in -lacl" >&5 +echo "configure:15131: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -15272,7 +15135,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:15150: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -15311,13 +15174,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:15315: checking for ACL support" >&5 +echo "configure:15178: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -15325,7 +15188,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:15329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:15192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -15345,13 +15208,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:15349: checking for acl_get_perm_np" >&5 +echo "configure:15212: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -15359,7 +15222,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:15363: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:15226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -15405,7 +15268,7 @@ fi with_sendfile_support=yes echo $ac_n "checking whether to check to support sendfile""... $ac_c" 1>&6 -echo "configure:15409: checking whether to check to support sendfile" >&5 +echo "configure:15272: checking whether to check to support sendfile" >&5 # Check whether --with-sendfile-support or --without-sendfile-support was given. if test "${with_sendfile_support+set}" = set; then withval="$with_sendfile_support" @@ -15417,13 +15280,13 @@ if test "${with_sendfile_support+set}" = set; then case "$host_os" in *linux*) echo $ac_n "checking for linux sendfile64 support""... $ac_c" 1>&6 -echo "configure:15421: checking for linux sendfile64 support" >&5 +echo "configure:15284: checking for linux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -15435,7 +15298,7 @@ ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:15439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:15302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -15450,13 +15313,13 @@ fi echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 echo $ac_n "checking for linux sendfile support""... $ac_c" 1>&6 -echo "configure:15454: checking for linux sendfile support" >&5 +echo "configure:15317: checking for linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -15468,7 +15331,7 @@ ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:15472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:15335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -15484,13 +15347,13 @@ echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 # Try and cope with broken Linux sendfile.... echo $ac_n "checking for broken linux sendfile support""... $ac_c" 1>&6 -echo "configure:15488: checking for broken linux sendfile support" >&5 +echo "configure:15351: checking for broken linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_LINUX_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:15373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes else @@ -15562,13 +15425,13 @@ EOF ;; *freebsd*) echo $ac_n "checking for freebsd sendfile support""... $ac_c" 1>&6 -echo "configure:15566: checking for freebsd sendfile support" >&5 +echo "configure:15429: checking for freebsd sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -15591,7 +15454,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:15595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:15458: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -15625,13 +15488,13 @@ EOF *hpux*) echo $ac_n "checking for hpux sendfile64 support""... $ac_c" 1>&6 -echo "configure:15629: checking for hpux sendfile64 support" >&5 +echo "configure:15492: checking for hpux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -15651,7 +15514,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:15655: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:15518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -15682,13 +15545,13 @@ EOF fi echo $ac_n "checking for hpux sendfile support""... $ac_c" 1>&6 -echo "configure:15686: checking for hpux sendfile support" >&5 +echo "configure:15549: checking for hpux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -15708,7 +15571,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:15712: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:15575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -15741,7 +15604,7 @@ EOF *solaris*) echo $ac_n "checking for sendfilev in -lsendfile""... $ac_c" 1>&6 -echo "configure:15745: checking for sendfilev in -lsendfile" >&5 +echo "configure:15608: checking for sendfilev in -lsendfile" >&5 ac_lib_var=`echo sendfile'_'sendfilev | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -15749,7 +15612,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsendfile $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:15627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -15788,13 +15651,13 @@ else fi echo $ac_n "checking for solaris sendfilev64 support""... $ac_c" 1>&6 -echo "configure:15792: checking for solaris sendfilev64 support" >&5 +echo "configure:15655: checking for solaris sendfilev64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILEV64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -15821,7 +15684,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:15825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:15688: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILEV64=yes else @@ -15853,13 +15716,13 @@ EOF fi echo $ac_n "checking for solaris sendfilev support""... $ac_c" 1>&6 -echo "configure:15857: checking for solaris sendfilev support" >&5 +echo "configure:15720: checking for solaris sendfilev support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILEV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -15886,7 +15749,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:15890: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:15753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILEV=yes else @@ -15938,7 +15801,7 @@ fi # build and install client programs, sbin programs and shared libraries echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:15942: checking whether to build winbind" >&5 +echo "configure:15805: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -16029,20 +15892,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:16033: checking whether struct passwd has pw_comment" >&5 +echo "configure:15896: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:16046: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:15909: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -16067,20 +15930,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:16071: checking whether struct passwd has pw_age" >&5 +echo "configure:15934: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:16084: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:15947: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -16119,7 +15982,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:16123: checking for poptGetContext in -lpopt" >&5 +echo "configure:15986: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -16127,7 +15990,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:16005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -16162,7 +16025,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:16166: checking whether to use included popt" >&5 +echo "configure:16029: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -16216,16 +16079,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:16220: checking configure summary" >&5 +echo "configure:16083: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:16092: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -16399,22 +16262,6 @@ s%@SMBWRAPPER@%$SMBWRAPPER%g s%@EXTRA_BIN_PROGS@%$EXTRA_BIN_PROGS%g s%@EXTRA_SBIN_PROGS@%$EXTRA_SBIN_PROGS%g s%@EXTRA_ALL_TARGETS@%$EXTRA_ALL_TARGETS%g -s%@LSA_DYNAMIC_YES@%$LSA_DYNAMIC_YES%g -s%@LSA_DYNAMIC_NO@%$LSA_DYNAMIC_NO%g -s%@NETLOG_DYNAMIC_YES@%$NETLOG_DYNAMIC_YES%g -s%@NETLOG_DYNAMIC_NO@%$NETLOG_DYNAMIC_NO%g -s%@SAMR_DYNAMIC_YES@%$SAMR_DYNAMIC_YES%g -s%@SAMR_DYNAMIC_NO@%$SAMR_DYNAMIC_NO%g -s%@SVC_DYNAMIC_YES@%$SVC_DYNAMIC_YES%g -s%@SVC_DYNAMIC_NO@%$SVC_DYNAMIC_NO%g -s%@WKS_DYNAMIC_YES@%$WKS_DYNAMIC_YES%g -s%@WKS_DYNAMIC_NO@%$WKS_DYNAMIC_NO%g -s%@REG_DYNAMIC_YES@%$REG_DYNAMIC_YES%g -s%@REG_DYNAMIC_NO@%$REG_DYNAMIC_NO%g -s%@SPOOLSS_DYNAMIC_YES@%$SPOOLSS_DYNAMIC_YES%g -s%@SPOOLSS_DYNAMIC_NO@%$SPOOLSS_DYNAMIC_NO%g -s%@DFS_DYNAMIC_YES@%$DFS_DYNAMIC_YES%g -s%@DFS_DYNAMIC_NO@%$DFS_DYNAMIC_NO%g s%@CC@%$CC%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g diff --git a/source/configure.in b/source/configure.in index 31f6b36282a..0336e581b39 100644 --- a/source/configure.in +++ b/source/configure.in @@ -151,41 +151,6 @@ AC_SUBST(SMBWRAPPER) AC_SUBST(EXTRA_BIN_PROGS) AC_SUBST(EXTRA_SBIN_PROGS) AC_SUBST(EXTRA_ALL_TARGETS) -dnl For the DYNAMIC RPC stuff -dnl The complicated _YES and _NO stuff allows us to avoid a dependency -dnl on GNU Make. -AC_SUBST(LSA_DYNAMIC_YES) -AC_SUBST(LSA_DYNAMIC_NO) -LSA_DYNAMIC_YES="#" -LSA_DYNAMIC_NO= -AC_SUBST(NETLOG_DYNAMIC_YES) -AC_SUBST(NETLOG_DYNAMIC_NO) -NETLOG_DYNAMIC_YES="#" -NETLOG_DYNAMIC_NO= -AC_SUBST(SAMR_DYNAMIC_YES) -AC_SUBST(SAMR_DYNAMIC_NO) -SAMR_DYNAMIC_YES="#" -SAMR_DYNAMIC_NO= -AC_SUBST(SVC_DYNAMIC_YES) -AC_SUBST(SVC_DYNAMIC_NO) -SVC_DYNAMIC_YES="#" -SVC_DYNAMIC_NO= -AC_SUBST(WKS_DYNAMIC_YES) -AC_SUBST(WKS_DYNAMIC_NO) -WKS_DYNAMIC_YES="#" -WKS_DYNAMIC_NO= -AC_SUBST(REG_DYNAMIC_YES) -AC_SUBST(REG_DYNAMIC_NO) -REG_DYNAMIC_YES="#" -REG_DYNAMIC_NO= -AC_SUBST(SPOOLSS_DYNAMIC_YES) -AC_SUBST(SPOOLSS_DYNAMIC_NO) -SPOOLSS_DYNAMIC_YES="#" -SPOOLSS_DYNAMIC_NO= -AC_SUBST(DFS_DYNAMIC_YES) -AC_SUBST(DFS_DYNAMIC_NO) -DFS_DYNAMIC_YES="#" -DFS_DYNAMIC_NO= # compile with optimization and without debugging by default CFLAGS="-O ${CFLAGS}" @@ -216,60 +181,6 @@ then LIBS="$LIBS -ldmalloc" fi -AC_ARG_ENABLE(dynrpc, [ --enable-dynrpc Enable dynamic RPC modules [default=no]]) - -if test x$enable_dynrpc = xyes -then - enable_dynrpc=lsa,samr,reg,wks,netlog,dfs -fi - -if test x$enable_dynrpc != xno -then - for i in `echo $enable_dynrpc | sed -e's/,/ /g'` - do case $i in lsa) - LSA_DYNAMIC_YES= - LSA_DYNAMIC_NO="#" - AC_DEFINE(RPC_LSA_DYNAMIC, 1, - [Define to make the LSA pipe dynamic]) - ;; samr) - SAMR_DYNAMIC_YES= - SAMR_DYNAMIC_NO="#" - AC_DEFINE(RPC_SAMR_DYNAMIC, 1, - [Define to make the SAMR pipe dynamic]) - ;; svc) - SVC_DYNAMIC_YES= - SVC_DYNAMIC_NO="#" - AC_DEFINE(RPC_SVC_DYNAMIC, 1, - [Define to make the SRVSVC pipe dynamic]) - ;; wks) - WKS_DYNAMIC_YES= - WKS_DYNAMIC_NO="#" - AC_DEFINE(RPC_WKS_DYNAMIC, 1, - [Define to make the WKSSVC pipe dynamic]) - ;; netlog) - NETLOG_DYNAMIC_YES= - NETLOG_DYNAMIC_NO="#" - AC_DEFINE(RPC_NETLOG_DYNAMIC, 1, - [Define to make the NETLOGON pipe dynamic]) - ;; reg) - REG_DYNAMIC_YES= - REG_DYNAMIC_NO="#" - AC_DEFINE(RPC_REG_DYNAMIC, 1, - [Define to make the WINREG pipe dynamic]) - ;; spoolss) - SPOOLSS_DYNAMIC_YES= - SPOOLSS_DYNAMIC_NO="#" - AC_DEFINE(RPC_SPOOLSS_DYNAMIC, 1, - [Define to make the SPOOLSS pipe dynamic]) - ;; dfs) - DFS_DYNAMIC_YES= - DFS_DYNAMIC_NO="#" - AC_DEFINE(RPC_DFS_DYNAMIC, 1, - [Define to make the NETDFS pipe dynamic]) - ;; esac - done -fi - dnl Checks for programs. AC_PROG_CC AC_PROG_INSTALL @@ -866,7 +777,7 @@ AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat) AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir) AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl) AC_CHECK_FUNCS(getdents _getdents __getdents _lseek __lseek _read __read) -AC_CHECK_FUNCS(getdirentries _write __write _fork __fork) +AC_CHECK_FUNCS(_write __write _fork __fork) AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64) AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64) AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64) @@ -2133,6 +2044,7 @@ else fi fi + # now check for krb5.h. Some systems have the libraries without the headers! # note that this check is done here to allow for different kerberos # include paths @@ -2151,7 +2063,7 @@ fi AC_CHECK_LIB(asn1, copy_Authenticator, [LIBS="$LIBS -lasn1 -lroken"]) # Heimdal checks. On static Heimdal gssapi must be linked before krb5. AC_CHECK_LIB(gssapi, gss_display_status, [LIBS="$LIBS -lgssapi -lkrb5 -lasn1"; - AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])]) + AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])]) AC_CHECK_LIB(krb5, krb5_set_real_time, [AC_DEFINE(HAVE_KRB5_SET_REAL_TIME,1,[Whether krb5_set_real_time is available])]) AC_CHECK_LIB(krb5, krb5_set_default_in_tkt_etypes, [AC_DEFINE(HAVE_KRB5_SET_DEFAULT_IN_TKT_ETYPES,1,[Whether krb5_set_default_in_tkt_etypes, is available])]) @@ -2194,13 +2106,12 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above AC_CHECK_LIB(krb5, krb5_mk_req_extended, [LIBS="$LIBS -lkrb5"; - AC_DEFINE(HAVE_KRB5,1,[Whether KRB5 is available])]) + AC_DEFINE(HAVE_KRB5,1,[Whether KRB5 is available])]) ######################################################## # now see if we can find the gssapi libs in standard paths AC_CHECK_LIB(gssapi_krb5, gss_display_status, [LIBS="$LIBS -lgssapi_krb5"; - AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])]) - + AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])]) fi ######################################################## @@ -2246,13 +2157,13 @@ fi ######################################################## # Compile with MySQL support? -AM_PATH_MYSQL([0.11.0],[MODULE_MYSQL=bin/mysql.so],[MODULE_MYSQL=]) +AM_PATH_MYSQL([0.11.0],[MODULE_MYSQL=bin/pdb_mysql.so],[MODULE_MYSQL=]) CFLAGS="$CFLAGS $MYSQL_CFLAGS" AC_SUBST(MODULE_MYSQL) ######################################################## # Compile with XML support? -AM_PATH_XML2([2.0.0],[MODULE_XML=bin/xml.so],[MODULE_XML=]) +AM_PATH_XML2([2.0.0],[MODULE_XML=bin/pdb_xml.so],[MODULE_XML=]) CFLAGS="$CFLAGS $XML_CFLAGS" AC_SUBST(MODULE_XML) @@ -2378,24 +2289,6 @@ if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then fi fi -# New experimental SAM system - -AC_MSG_CHECKING([whether to build the new (experimental) SAM database]) -AC_ARG_WITH(sam, -[ --with-sam Build new (experimental) SAM database (default=no)], -[ case "$withval" in - yes) - AC_MSG_RESULT(yes) - AC_DEFINE(WITH_SAM,1,[Whether to build the new (experimental) SAM database]) - ;; - *) - AC_MSG_RESULT(no) - ;; - esac ], - AC_MSG_RESULT(no) -) - - ######################################################################################## ## ## TESTS FOR SAM BACKENDS. KEEP THESE GROUPED TOGETHER diff --git a/source/dynconfig.c b/source/dynconfig.c index 4577c3947c8..18a280f7d0b 100644 --- a/source/dynconfig.c +++ b/source/dynconfig.c @@ -1,7 +1,6 @@ /* Unix SMB/CIFS implementation. Copyright (C) 2001 by Martin Pool - Copyright (C) 2003 by Anthony Liguori 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 @@ -57,8 +56,7 @@ pstring dyn_LMHOSTSFILE = LMHOSTSFILE; * * @sa lib_path() to get the path to a file inside the LIBDIR. **/ -pstring dyn_LIBDIR = LIBDIR; -const fstring dyn_SHLIBEXT = SHLIBEXT; +pstring dyn_LIBDIR = LIBDIR; /** * @brief Directory holding lock files. diff --git a/source/include/.cvsignore b/source/include/.cvsignore index a96c335c315..60afd373158 100644 --- a/source/include/.cvsignore +++ b/source/include/.cvsignore @@ -3,4 +3,3 @@ config.h stamp-h proto.h wrepld_proto.h -tdbsam2_parse_info.h diff --git a/source/include/charset.h b/source/include/charset.h index c56984ca7b2..07d5e2d5993 100644 --- a/source/include/charset.h +++ b/source/include/charset.h @@ -2,7 +2,6 @@ Unix SMB/CIFS implementation. charset defines Copyright (C) Andrew Tridgell 2001 - Copyright (C) Jelmer Vernooij 2002 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 @@ -23,18 +22,3 @@ typedef enum {CH_UCS2=0, CH_UNIX=1, CH_DISPLAY=2, CH_DOS=3, CH_UTF8=4} charset_t; #define NUM_CHARSETS 5 - -/* - * for each charset we have a function that pulls from that charset to - * a ucs2 buffer, and a function that pushes to a ucs2 buffer - * */ - -struct charset_functions { - const char *name; - size_t (*pull)(void *, char **inbuf, size_t *inbytesleft, - char **outbuf, size_t *outbytesleft); - size_t (*push)(void *, char **inbuf, size_t *inbytesleft, - char **outbuf, size_t *outbytesleft); - struct charset_functions *prev, *next; -}; - diff --git a/source/include/config.h.in b/source/include/config.h.in index fb5840c3c01..2848414c408 100644 --- a/source/include/config.h.in +++ b/source/include/config.h.in @@ -602,9 +602,6 @@ /* Define if you have the getdents function. */ #undef HAVE_GETDENTS -/* Define if you have the getdirentries function. */ -#undef HAVE_GETDIRENTRIES - /* Define if you have the getgrent function. */ #undef HAVE_GETGRENT @@ -1181,30 +1178,6 @@ /* Define to check invariants around some common functions */ #undef DMALLOC_FUNC_CHECK -/* Define to make the LSA pipe dynamic */ -#undef RPC_LSA_DYNAMIC - -/* Define to make the SAMR pipe dynamic */ -#undef RPC_SAMR_DYNAMIC - -/* Define to make the SRVSVC pipe dynamic */ -#undef RPC_SVC_DYNAMIC - -/* Define to make the WKSSVC pipe dynamic */ -#undef RPC_WKS_DYNAMIC - -/* Define to make the NETLOGON pipe dynamic */ -#undef RPC_NETLOG_DYNAMIC - -/* Define to make the WINREG pipe dynamic */ -#undef RPC_REG_DYNAMIC - -/* Define to make the SPOOLSS pipe dynamic */ -#undef RPC_SPOOLSS_DYNAMIC - -/* Define to make the NETDFS pipe dynamic */ -#undef RPC_DFS_DYNAMIC - /* Whether the C compiler understands volatile */ #undef HAVE_VOLATILE @@ -1262,12 +1235,6 @@ /* File offset bits */ #undef _FILE_OFFSET_BITS -/* Whether to enable POSIX support */ -#undef _POSIX_C_SOURCE - -/* Whether to enable System V compatibility */ -#undef _SYSV - /* Whether to enable large file support */ #undef _LARGEFILE64_SOURCE @@ -1712,9 +1679,6 @@ /* Whether crypt needs truncated salt */ #undef HAVE_TRUNCATED_SALT -/* Whether to build the new (experimental) SAM database */ -#undef WITH_SAM - /* Whether to include 2.2 compatibel LDAP SAM configuration */ #undef WITH_LDAP_SAMCONFIG diff --git a/source/include/dynconfig.h b/source/include/dynconfig.h index ce256f06130..fcc4c88b2b9 100644 --- a/source/include/dynconfig.h +++ b/source/include/dynconfig.h @@ -1,7 +1,6 @@ /* Unix SMB/CIFS implementation. Copyright (C) 2001 by Martin Pool - Copyright (C) 2003 by Anthony Liguori 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 @@ -31,7 +30,6 @@ extern char const *dyn_SBINDIR, extern pstring dyn_CONFIGFILE; extern pstring dyn_LOGFILEBASE, dyn_LMHOSTSFILE; extern pstring dyn_LIBDIR; -extern const fstring dyn_SHLIBEXT; extern const pstring dyn_LOCKDIR; extern const pstring dyn_PIDDIR; extern const pstring dyn_SMB_PASSWD_FILE; diff --git a/source/include/genparser.h b/source/include/genparser.h deleted file mode 100644 index 002d79f8f96..00000000000 --- a/source/include/genparser.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - Copyright (C) Andrew Tridgell 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#ifndef _GENPARSER_H -#define _GENPARSER_H - -/* these macros are needed for genstruct auto-parsers */ -#ifndef GENSTRUCT -#define GENSTRUCT -#define _LEN(x) -#define _NULLTERM -#endif - -/* - automatic marshalling/unmarshalling system for C structures -*/ - -/* flag to mark a fixed size array as actually being null terminated */ -#define FLAG_NULLTERM 1 -#define FLAG_ALWAYS 2 - -struct enum_struct { - const char *name; - unsigned value; -}; - -/* intermediate dumps are stored in one of these */ -struct parse_string { - unsigned allocated; - unsigned length; - char *s; -}; - -typedef int (*gen_dump_fn)(struct parse_string *, const char *ptr, unsigned indent); -typedef int (*gen_parse_fn)(char *ptr, const char *str); - -/* genstruct.pl generates arrays of these */ -struct parse_struct { - const char *name; - unsigned ptr_count; - unsigned size; - unsigned offset; - unsigned array_len; - const char *dynamic_len; - unsigned flags; - gen_dump_fn dump_fn; - gen_parse_fn parse_fn; -}; - -#define DUMP_PARSE_DECL(type) \ - int gen_dump_ ## type(struct parse_string *, const char *, unsigned); \ - int gen_parse_ ## type(char *, const char *); - -DUMP_PARSE_DECL(char) -DUMP_PARSE_DECL(int) -DUMP_PARSE_DECL(unsigned) -DUMP_PARSE_DECL(double) -DUMP_PARSE_DECL(float) - -#define gen_dump_unsigned_char gen_dump_char -#define gen_parse_unsigned_char gen_parse_char - -#endif /* _GENPARSER_H */ diff --git a/source/include/genparser_samba.h b/source/include/genparser_samba.h deleted file mode 100644 index 172ff2362c4..00000000000 --- a/source/include/genparser_samba.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright (C) Simo Sorce 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#ifndef _GENPARSER_SAMBA_H -#define _GENPARSER_SAMBA_H - -const struct parse_struct pinfo_security_ace_info[] = { -{"type", 0, sizeof(uint8), offsetof(struct security_ace_info, type), 0, NULL, 0, gen_dump_uint8, gen_parse_uint8}, -{"flags", 0, sizeof(uint8), offsetof(struct security_ace_info, flags), 0, NULL, 0, gen_dump_uint8, gen_parse_uint8}, -{"size", 0, sizeof(uint16), offsetof(struct security_ace_info, size), 0, NULL, 0, gen_dump_uint16, gen_parse_uint16}, -{"info", 0, sizeof(char), offsetof(struct security_ace_info, info), 0, NULL, 0, gen_dump_SEC_ACCESS, gen_parse_SEC_ACCESS}, -{"obj_flags", 0, sizeof(uint32), offsetof(struct security_ace_info, obj_flags), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32}, -{"obj_guid", 0, sizeof(char), offsetof(struct security_ace_info, obj_guid), 0, NULL, 0, gen_dump_GUID, gen_parse_GUID}, -{"inh_guid", 0, sizeof(char), offsetof(struct security_ace_info, inh_guid), 0, NULL, 0, gen_dump_GUID, gen_parse_GUID}, -{"trustee", 0, sizeof(char), offsetof(struct security_ace_info, trustee), 0, NULL, 0, gen_dump_DOM_SID, gen_parse_DOM_SID}, -{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}}; - -const struct parse_struct pinfo_security_acl_info[] = { -{"revision", 0, sizeof(uint16), offsetof(struct security_acl_info, revision), 0, NULL, 0, gen_dump_uint16, gen_parse_uint16}, -{"size", 0, sizeof(uint16), offsetof(struct security_acl_info, size), 0, NULL, 0, gen_dump_uint16, gen_parse_uint16}, -{"num_aces", 0, sizeof(uint32), offsetof(struct security_acl_info, num_aces), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32}, -{"ace", 1, sizeof(struct security_ace_info), offsetof(struct security_acl_info, ace), 0, "size", 0, gen_dump_SEC_ACE, gen_parse_SEC_ACE}, -{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}}; - -const struct parse_struct pinfo_security_descriptor_info[] = { -{"revision", 0, sizeof(uint16), offsetof(struct security_descriptor_info, revision), 0, NULL, 0, gen_dump_uint16, gen_parse_uint16}, -{"type", 0, sizeof(uint16), offsetof(struct security_descriptor_info, type), 0, NULL, 0, gen_dump_uint16, gen_parse_uint16}, -{"off_owner_sid", 0, sizeof(uint32), offsetof(struct security_descriptor_info, off_owner_sid), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32}, -{"off_grp_sid", 0, sizeof(uint32), offsetof(struct security_descriptor_info, off_grp_sid), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32}, -{"off_sacl", 0, sizeof(uint32), offsetof(struct security_descriptor_info, off_sacl), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32}, -{"off_dacl", 0, sizeof(uint32), offsetof(struct security_descriptor_info, off_dacl), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32}, -{"dacl", 1, sizeof(struct security_acl_info), offsetof(struct security_descriptor_info, dacl), 0, NULL, 0, gen_dump_SEC_ACL, gen_parse_SEC_ACL}, -{"sacl", 1, sizeof(struct security_acl_info), offsetof(struct security_descriptor_info, sacl), 0, NULL, 0, gen_dump_SEC_ACL, gen_parse_SEC_ACL}, -{"owner_sid", 1, sizeof(char), offsetof(struct security_descriptor_info, owner_sid), 0, NULL, 0, gen_dump_DOM_SID, gen_parse_DOM_SID}, -{"grp_sid", 1, sizeof(char), offsetof(struct security_descriptor_info, grp_sid), 0, NULL, 0, gen_dump_DOM_SID, gen_parse_DOM_SID}, -{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}}; - -const struct parse_struct pinfo_luid_attr_info[] = { -{"attr", 0, sizeof(uint32), offsetof(struct LUID_ATTR, attr), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32}, -{"luid", 1, sizeof(LUID), offsetof(struct LUID_ATTR, luid), 0, NULL, 0, gen_dump_LUID, gen_parse_LUID}, -{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}}; - -#endif /* _GENPARSER_SAMBA_H */ diff --git a/source/include/gums.h b/source/include/gums.h deleted file mode 100644 index ca124d74423..00000000000 --- a/source/include/gums.h +++ /dev/null @@ -1,230 +0,0 @@ -/* - Unix SMB/CIFS implementation. - GUMS structures - Copyright (C) Simo Sorce 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#ifndef _GUMS_H -#define _GUMS_H - -#define GUMS_VERSION_MAJOR 0 -#define GUMS_VERSION_MINOR 1 -#define GUMS_OBJECT_VERSION 1 - -#define GUMS_OBJ_DOMAIN 1 -#define GUMS_OBJ_NORMAL_USER 2 -#define GUMS_OBJ_GROUP 3 -#define GUMS_OBJ_ALIAS 4 -#define GUMS_OBJ_WORKSTATION_TRUST 5 -#define GUMS_OBJ_SERVER_TRUST 6 -#define GUMS_OBJ_DOMAIN_TRUST 7 - -typedef struct gums_user -{ - DOM_SID *group_sid; /* Primary Group SID */ - - NTTIME logon_time; /* logon time */ - NTTIME logoff_time; /* logoff time */ - NTTIME kickoff_time; /* kickoff time */ - NTTIME pass_last_set_time; /* password last set time */ - NTTIME pass_can_change_time; /* password can change time */ - NTTIME pass_must_change_time; /* password must change time */ - - char *full_name; /* user's full name string */ - char *home_dir; /* home directory string */ - char *dir_drive; /* home directory drive string */ - char *logon_script; /* logon script string */ - char *profile_path; /* profile path string */ - char *workstations; /* login from workstations string */ - char *unknown_str; /* don't know what this is, yet. */ - char *munged_dial; /* munged path name and dial-back tel number */ - - DATA_BLOB lm_pw; /* .data is Null if no password */ - DATA_BLOB nt_pw; /* .data is Null if no password */ - - uint32 unknown_3; /* 0x00ff ffff */ - - uint16 logon_divs; /* 168 - number of hours in a week */ - uint32 hours_len; /* normally 21 bytes */ - uint8 *hours; - - uint32 unknown_5; /* 0x0002 0000 */ - uint32 unknown_6; /* 0x0000 04ec */ - -} GUMS_USER; - -typedef struct gums_group -{ - uint32 count; /* Number of SIDs */ - DOM_SID **members; /* SID array */ - -} GUMS_GROUP; - -union gums_obj_p { - gums_user *user; - gums_group *group; -} - -typedef struct gums_object -{ - TALLOC_CTX *mem_ctx; - - uint32 type; /* Object Type */ - uint32 version; /* Object Version */ - uint32 seq_num; /* Object Sequence Number */ - - SEC_DESC *sec_desc; /* Security Descriptor */ - - DOM_SID *sid; /* Object Sid */ - char *name; /* Object Name */ - char *description; /* Object Description */ - - union gums_obj_p data; /* Object Specific data */ - -} GUMS_OBJECT; - -typedef struct gums_data_set -{ - int type; /* GUMS_SET_xxx */ - void *data; - -} GUMS_DATA_SET; - -typedef struct gums_commit_set -{ - TALLOC_CTX *mem_ctx; - - uint32 type; /* Object type */ - DOM_SID sid; /* Object Sid */ - uint32 count; /* number of changes */ - GUMS_DATA_SET **data; -} GUMS_COMMIT_SET; - -typedef struct gums_privilege -{ - TALLOC_CTX *mem_ctx; - - uint32 type; /* Object Type */ - uint32 version; /* Object Version */ - uint32 seq_num; /* Object Sequence Number */ - - LUID_ATTR *privilege; /* Privilege Type */ - char *name; /* Object Name */ - char *description; /* Object Description */ - - uint32 count; - DOM_SID **members; - -} GUMS_PRIVILEGE; - - -typedef struct gums_functions -{ - /* Generic object functions */ - - NTSTATUS (*get_domain_sid) (DOM_SID **sid, const char* name); - NTSTATUS (*set_domain_sid) (const DOM_SID *sid); - - NTSTATUS (*get_sequence_number) (void); - - NTSTATUS (*new_object) (DOM_SID **sid, const char *name, const int obj_type); - NTSTATUS (*delete_object) (const DOM_SID *sid); - - NTSTATUS (*get_object_from_sid) (GUMS_OBJECT **object, const DOM_SID *sid, const int obj_type); - NTSTATUS (*get_sid_from_name) (GUMS_OBJECT **object, const char *name); - /* This function is used to get the list of all objects changed since b_time, it is - used to support PDC<->BDC synchronization */ - NTSTATUS (*get_updated_objects) (GUMS_OBJECT **objects, const NTTIME base_time); - - NTSTATUS (*enumerate_objects_start) (void *handle, const DOM_SID *sid, const int obj_type); - NTSTATUS (*enumerate_objects_get_next) (GUMS_OBJECT **object, void *handle); - NTSTATUS (*enumerate_objects_stop) (void *handle); - - /* This function MUST be used ONLY by PDC<->BDC replication code or recovery tools. - Never use this function to update an object in the database, use set_object_values() */ - NTSTATUS (*set_object) (const GUMS_OBJECT *object); - - /* set object values function */ - NTSTATUS (*set_object_values) (DOM_SID *sid, uint32 count, GUMS_DATA_SET *data_set); - - /* Group related functions */ - NTSTATUS (*add_memberss_to_group) (const DOM_SID *group, const DOM_SID **members); - NTSTATUS (*delete_members_from_group) (const DOM_SID *group, const DOM_SID **members); - NTSTATUS (*enumerate_group_members) (DOM_SID **members, const DOM_SID *sid, const int type); - - NTSTATUS (*get_sid_groups) (DOM_SID **groups, const DOM_SID *sid); - - NTSTATUS (*lock_sid) (const DOM_SID *sid); - NTSTATUS (*unlock_sid) (const DOM_SID *sid); - - /* privileges related functions */ - - NTSTATUS (*add_members_to_privilege) (const LUID_ATTR *priv, const DOM_SID **members); - NTSTATUS (*delete_members_from_privilege) (const LUID_ATTR *priv, const DOM_SID **members); - NTSTATUS (*enumerate_privilege_members) (DOM_SID **members, const LUID_ATTR *priv); - NTSTATUS (*get_sid_privileges) (DOM_SID **privs, const DOM_SID *sid); - /* warning!: set_privilege will overwrite a prior existing privilege if such exist */ - NTSTATUS (*set_privilege) (GUMS_PRIVILEGE *priv); - -} GUMS_FUNCTIONS; - -/* define value types */ - -#define GUMS_SET_PRIMARY_GROUP 1 -#define GUMS_SET_SEC_DESC 2 - -/* user specific type values */ -#define GUMS_SET_LOGON_TIME 10 /* keep NTTIME consecutive */ -#define GUMS_SET_LOGOFF_TIME 11 /* too ease checking */ -#define GUMS_SET_KICKOFF_TIME 13 -#define GUMS_SET_PASS_LAST_SET_TIME 14 -#define GUMS_SET_PASS_CAN_CHANGE_TIME 15 -#define GUMS_SET_PASS_MUST_CHANGE_TIME 16 /* NTTIME end */ - -#define GUMS_SET_NAME 20 /* keep strings consecutive */ -#define GUMS_SET_DESCRIPTION 21 /* too ease checking */ -#define GUMS_SET_FULL_NAME 22 -#define GUMS_SET_HOME_DIRECTORY 23 -#define GUMS_SET_DRIVE 24 -#define GUMS_SET_LOGON_SCRIPT 25 -#define GUMS_SET_PROFILE_PATH 26 -#define GUMS_SET_WORKSTATIONS 27 -#define GUMS_SET_UNKNOWN_STRING 28 -#define GUMS_SET_MUNGED_DIAL 29 /* strings end */ - -#define GUMS_SET_LM_PASSWORD 40 -#define GUMS_SET_NT_PASSWORD 41 -#define GUMS_SET_PLAINTEXT_PASSWORD 42 -#define GUMS_SET_UNKNOWN_3 43 -#define GUMS_SET_LOGON_DIVS 44 -#define GUMS_SET_HOURS_LEN 45 -#define GUMS_SET_HOURS 46 -#define GUMS_SET_UNKNOWN_5 47 -#define GUMS_SET_UNKNOWN_6 48 - -#define GUMS_SET_MUST_CHANGE_PASS 50 -#define GUMS_SET_CANNOT_CHANGE_PASS 51 -#define GUMS_SET_PASS_NEVER_EXPIRE 52 -#define GUMS_SET_ACCOUNT_DISABLED 53 -#define GUMS_SET_ACCOUNT_LOCKOUT 54 - -/*group specific type values */ -#define GUMS_ADD_SID_LIST 60 -#define GUMS_DEL_SID_LIST 61 -#define GUMS_SET_SID_LIST 62 - -#endif /* _GUMS_H */ diff --git a/source/include/includes.h b/source/include/includes.h index 988913d16c7..d48103cbe31 100644 --- a/source/include/includes.h +++ b/source/include/includes.h @@ -768,8 +768,6 @@ extern int errno; #include "passdb.h" -#include "sam.h" - #include "session.h" #include "asn_1.h" @@ -780,8 +778,6 @@ extern int errno; #include "nsswitch/winbind_client.h" -#include "genparser.h" - /* * Type for wide character dirent structure. * Only d_name is defined by POSIX. diff --git a/source/include/passdb.h b/source/include/passdb.h index 06409aa34eb..fa80b263ffa 100644 --- a/source/include/passdb.h +++ b/source/include/passdb.h @@ -34,6 +34,13 @@ #define PASSDB_INTERFACE_VERSION 4 +/* use this inside a passdb module */ +#define PDB_MODULE_VERSIONING_MAGIC \ +int pdb_version(void)\ +{\ + return PASSDB_INTERFACE_VERSION;\ +} + typedef struct pdb_context { struct pdb_methods *pdb_methods; @@ -149,7 +156,6 @@ struct pdb_init_function_entry { const char *name; /* Function to create a member of the pdb_methods list */ pdb_init_function init; - struct pdb_init_function_entry *prev, *next; }; #endif /* _PASSDB_H */ diff --git a/source/include/rpc_client_proto.h b/source/include/rpc_client_proto.h deleted file mode 100644 index 0ecb1956913..00000000000 --- a/source/include/rpc_client_proto.h +++ /dev/null @@ -1,231 +0,0 @@ -#ifndef _RPC_CLIENT_PROTO_H_ -#define _RPC_CLIENT_PROTO_H_ -/* This file is automatically generated with "make proto". DO NOT EDIT */ - - -/*The following definitions come from lib/util_list.c */ - -BOOL copy_policy_hnd (POLICY_HND *dest, const POLICY_HND *src); -BOOL compare_rpc_hnd_node(const RPC_HND_NODE *x, - const RPC_HND_NODE *y); -BOOL RpcHndList_set_connection(const POLICY_HND *hnd, - struct cli_connection *con); -BOOL RpcHndList_del_connection(const POLICY_HND *hnd); -struct cli_connection* RpcHndList_get_connection(const POLICY_HND *hnd); - -/*The following definitions come from rpc_client/cli_connect.c */ - -void init_connections(void); -void free_connections(void); -void cli_connection_free(struct cli_connection *con); -void cli_connection_unlink(struct cli_connection *con); -BOOL cli_connection_init(const char *srv_name, char *pipe_name, - struct cli_connection **con); -BOOL cli_connection_init_auth(const char *srv_name, char *pipe_name, - struct cli_connection **con, - cli_auth_fns * auth, void *auth_creds); -struct _cli_auth_fns *cli_conn_get_authfns(struct cli_connection *con); -void *cli_conn_get_auth_creds(struct cli_connection *con); -BOOL rpc_hnd_pipe_req(const POLICY_HND * hnd, uint8 op_num, - prs_struct * data, prs_struct * rdata); -BOOL rpc_con_pipe_req(struct cli_connection *con, uint8 op_num, - prs_struct * data, prs_struct * rdata); -BOOL rpc_con_ok(struct cli_connection *con); - -/*The following definitions come from rpc_client/cli_login.c */ - -BOOL cli_nt_setup_creds(struct cli_state *cli, unsigned char mach_pwd[16]); -BOOL cli_nt_srv_pwset(struct cli_state *cli, unsigned char *new_hashof_mach_pwd); -BOOL cli_nt_login_interactive(struct cli_state *cli, char *domain, char *username, - uint32 smb_userid_low, char *password, - NET_ID_INFO_CTR *ctr, NET_USER_INFO_3 *user_info3); -BOOL cli_nt_login_network(struct cli_state *cli, char *domain, char *username, - uint32 smb_userid_low, char lm_chal[8], - char *lm_chal_resp, char *nt_chal_resp, - NET_ID_INFO_CTR *ctr, NET_USER_INFO_3 *user_info3); -BOOL cli_nt_logoff(struct cli_state *cli, NET_ID_INFO_CTR *ctr); - -/*The following definitions come from rpc_client/cli_lsarpc.c */ - -BOOL do_lsa_open_policy(struct cli_state *cli, - char *system_name, POLICY_HND *hnd, - BOOL sec_qos); -BOOL do_lsa_query_info_pol(struct cli_state *cli, - POLICY_HND *hnd, uint16 info_class, - fstring domain_name, DOM_SID *domain_sid); -BOOL do_lsa_close(struct cli_state *cli, POLICY_HND *hnd); -BOOL cli_lsa_get_domain_sid(struct cli_state *cli, char *server); -uint32 lsa_open_policy(const char *system_name, POLICY_HND *hnd, - BOOL sec_qos, uint32 des_access); -uint32 lsa_lookup_sids(POLICY_HND *hnd, int num_sids, DOM_SID *sids, - char ***names, uint32 **types, int *num_names); -uint32 lsa_lookup_names(POLICY_HND *hnd, int num_names, char **names, - DOM_SID **sids, uint32 **types, int *num_sids); - -/*The following definitions come from rpc_client/cli_netlogon.c */ - -BOOL cli_net_logon_ctrl2(struct cli_state *cli, uint32 status_level); -BOOL cli_net_auth2(struct cli_state *cli, uint16 sec_chan, - uint32 neg_flags, DOM_CHAL *srv_chal); -BOOL cli_net_req_chal(struct cli_state *cli, DOM_CHAL *clnt_chal, DOM_CHAL *srv_chal); -BOOL cli_net_srv_pwset(struct cli_state *cli, uint8 hashed_mach_pwd[16]); -BOOL cli_net_sam_logon(struct cli_state *cli, NET_ID_INFO_CTR *ctr, NET_USER_INFO_3 *user_info3); -BOOL cli_net_sam_logoff(struct cli_state *cli, NET_ID_INFO_CTR *ctr); -BOOL change_trust_account_password( char *domain, char *remote_machine_list); - -/*The following definitions come from rpc_client/cli_pipe.c */ - -BOOL rpc_api_pipe_req(struct cli_state *cli, uint8 op_num, - prs_struct *data, prs_struct *rdata); -BOOL rpc_pipe_bind(struct cli_state *cli, char *pipe_name, char *my_name); -void cli_nt_set_ntlmssp_flgs(struct cli_state *cli, uint32 ntlmssp_flgs); -BOOL cli_nt_session_open(struct cli_state *cli, char *pipe_name); -void cli_nt_session_close(struct cli_state *cli); - -/*The following definitions come from rpc_client/cli_reg.c */ - -BOOL do_reg_connect(struct cli_state *cli, char *full_keyname, char *key_name, - POLICY_HND *reg_hnd); -BOOL do_reg_open_hklm(struct cli_state *cli, uint16 unknown_0, uint32 level, - POLICY_HND *hnd); -BOOL do_reg_open_hku(struct cli_state *cli, uint16 unknown_0, uint32 level, - POLICY_HND *hnd); -BOOL do_reg_flush_key(struct cli_state *cli, POLICY_HND *hnd); -BOOL do_reg_query_key(struct cli_state *cli, POLICY_HND *hnd, - char *class, uint32 *class_len, - uint32 *num_subkeys, uint32 *max_subkeylen, - uint32 *max_subkeysize, uint32 *num_values, - uint32 *max_valnamelen, uint32 *max_valbufsize, - uint32 *sec_desc, NTTIME *mod_time); -BOOL do_reg_unknown_1a(struct cli_state *cli, POLICY_HND *hnd, uint32 *unk); -BOOL do_reg_query_info(struct cli_state *cli, POLICY_HND *hnd, - char *key_value, uint32* key_type); -BOOL do_reg_set_key_sec(struct cli_state *cli, POLICY_HND *hnd, SEC_DESC_BUF *sec_desc_buf); -BOOL do_reg_get_key_sec(struct cli_state *cli, POLICY_HND *hnd, uint32 *sec_buf_size, SEC_DESC_BUF **ppsec_desc_buf); -BOOL do_reg_delete_val(struct cli_state *cli, POLICY_HND *hnd, char *val_name); -BOOL do_reg_delete_key(struct cli_state *cli, POLICY_HND *hnd, char *key_name); -BOOL do_reg_create_key(struct cli_state *cli, POLICY_HND *hnd, - char *key_name, char *key_class, - SEC_ACCESS *sam_access, - POLICY_HND *key); -BOOL do_reg_enum_key(struct cli_state *cli, POLICY_HND *hnd, - int key_index, char *key_name, - uint32 *unk_1, uint32 *unk_2, - time_t *mod_time); -BOOL do_reg_create_val(struct cli_state *cli, POLICY_HND *hnd, - char *val_name, uint32 type, BUFFER3 *data); -BOOL do_reg_enum_val(struct cli_state *cli, POLICY_HND *hnd, - int val_index, int max_valnamelen, int max_valbufsize, - fstring val_name, - uint32 *val_type, BUFFER2 *value); -BOOL do_reg_open_entry(struct cli_state *cli, POLICY_HND *hnd, - char *key_name, uint32 unk_0, - POLICY_HND *key_hnd); -BOOL do_reg_close(struct cli_state *cli, POLICY_HND *hnd); - -/*The following definitions come from rpc_client/cli_samr.c */ - -BOOL get_samr_query_usergroups(struct cli_state *cli, - POLICY_HND *pol_open_domain, uint32 user_rid, - uint32 *num_groups, DOM_GID *gid); -BOOL get_samr_query_userinfo(struct cli_state *cli, - POLICY_HND *pol_open_domain, - uint32 info_level, - uint32 user_rid, SAM_USER_INFO_21 *usr); -BOOL do_samr_chgpasswd_user(struct cli_state *cli, - char *srv_name, char *user_name, - char nt_newpass[516], uchar nt_oldhash[16], - char lm_newpass[516], uchar lm_oldhash[16]); -BOOL do_samr_unknown_38(struct cli_state *cli, char *srv_name); -BOOL do_samr_query_dom_info(struct cli_state *cli, - POLICY_HND *domain_pol, uint16 switch_value); -BOOL do_samr_enum_dom_users(struct cli_state *cli, - POLICY_HND *pol, uint16 num_entries, uint16 unk_0, - uint16 acb_mask, uint16 unk_1, uint32 size, - struct acct_info **sam, - int *num_sam_users); -BOOL do_samr_connect(struct cli_state *cli, - char *srv_name, uint32 unknown_0, - POLICY_HND *connect_pol); -BOOL do_samr_open_user(struct cli_state *cli, - POLICY_HND *pol, uint32 unk_0, uint32 rid, - POLICY_HND *user_pol); -BOOL do_samr_open_domain(struct cli_state *cli, - POLICY_HND *connect_pol, uint32 rid, DOM_SID *sid, - POLICY_HND *domain_pol); -BOOL do_samr_query_unknown_12(struct cli_state *cli, - POLICY_HND *pol, uint32 rid, uint32 num_gids, uint32 *gids, - uint32 *num_aliases, - fstring als_names [MAX_LOOKUP_SIDS], - uint32 num_als_users[MAX_LOOKUP_SIDS]); -BOOL do_samr_query_usergroups(struct cli_state *cli, - POLICY_HND *pol, uint32 *num_groups, DOM_GID *gid); -BOOL do_samr_query_userinfo(struct cli_state *cli, - POLICY_HND *pol, uint16 switch_value, void* usr); -BOOL do_samr_close(struct cli_state *cli, POLICY_HND *hnd); - -/*The following definitions come from rpc_client/cli_spoolss_notify.c */ - -BOOL spoolss_disconnect_from_client( struct cli_state *cli); -BOOL spoolss_connect_to_client( struct cli_state *cli, char *remote_machine); -BOOL cli_spoolss_reply_open_printer(struct cli_state *cli, char *printer, uint32 localprinter, uint32 type, uint32 *status, POLICY_HND *handle); -BOOL cli_spoolss_reply_rrpcn(struct cli_state *cli, POLICY_HND *handle, - uint32 change_low, uint32 change_high, uint32 *status); -BOOL cli_spoolss_reply_close_printer(struct cli_state *cli, POLICY_HND *handle, uint32 *status); - -/*The following definitions come from rpc_client/cli_srvsvc.c */ - -BOOL do_srv_net_srv_conn_enum(struct cli_state *cli, - char *server_name, char *qual_name, - uint32 switch_value, SRV_CONN_INFO_CTR *ctr, - uint32 preferred_len, - ENUM_HND *hnd); -BOOL do_srv_net_srv_sess_enum(struct cli_state *cli, - char *server_name, char *qual_name, - uint32 switch_value, SRV_SESS_INFO_CTR *ctr, - uint32 preferred_len, - ENUM_HND *hnd); -BOOL do_srv_net_srv_share_enum(struct cli_state *cli, - char *server_name, - uint32 switch_value, SRV_R_NET_SHARE_ENUM *r_o, - uint32 preferred_len, ENUM_HND *hnd); -BOOL do_srv_net_srv_file_enum(struct cli_state *cli, - char *server_name, char *qual_name, - uint32 switch_value, SRV_FILE_INFO_CTR *ctr, - uint32 preferred_len, - ENUM_HND *hnd); -BOOL do_srv_net_srv_get_info(struct cli_state *cli, - char *server_name, uint32 switch_value, SRV_INFO_CTR *ctr); - -/*The following definitions come from rpc_client/cli_use.c */ - -void init_cli_use(void); -void free_cli_use(void); -struct cli_state *cli_net_use_add(const char *srv_name, - const struct ntuser_creds *usr_creds, - BOOL reuse, BOOL *is_new); -BOOL cli_net_use_del(const char *srv_name, - const struct ntuser_creds *usr_creds, - BOOL force_close, BOOL *connection_closed); -void cli_net_use_enum(uint32 *num_cons, struct use_info ***use); -void cli_use_wait_keyboard(void); - -/*The following definitions come from rpc_client/cli_wkssvc.c */ - -BOOL do_wks_query_info(struct cli_state *cli, - char *server_name, uint32 switch_value, - WKS_INFO_100 *wks100); - -/*The following definitions come from rpc_client/ncacn_np_use.c */ - -BOOL ncacn_np_use_del(const char *srv_name, const char *pipe_name, - const vuser_key * key, - BOOL force_close, BOOL *connection_closed); -struct ncacn_np *ncacn_np_initialise(struct ncacn_np *msrpc, - const vuser_key * key); -struct ncacn_np *ncacn_np_use_add(const char *pipe_name, - const vuser_key * key, - const char *srv_name, - const struct ntuser_creds *ntc, - BOOL reuse, BOOL *is_new_connection); -#endif /* _PROTO_H_ */ diff --git a/source/include/sam.h b/source/include/sam.h deleted file mode 100644 index f46a6e7bcb7..00000000000 --- a/source/include/sam.h +++ /dev/null @@ -1,238 +0,0 @@ -/* - Unix SMB/CIFS implementation. - SAM structures - Copyright (C) Kai Krueger 2002 - Copyright (C) Stefan (metze) Metzmacher 2002 - Copyright (C) Simo Sorce 2002 - Copyright (C) Andrew Bartlett 2002 - Copyright (C) Jelmer Vernooij 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#ifndef _SAM_H -#define _SAM_H - -/* We want to track down bugs early */ -#if 1 -#define SAM_ASSERT(x) SMB_ASSERT(x) -#else -#define SAM_ASSERT(x) while (0) { \ - if (!(x)) { - DEBUG(0, ("SAM_ASSERT failed!\n")) - return NT_STATUS_FAIL_CHECK;\ - } \ - } -#endif - - -/* let it be 0 until we have a stable interface --metze */ -#define SAM_INTERFACE_VERSION 0 - -/* use this inside a passdb module */ -#define SAM_MODULE_VERSIONING_MAGIC \ -int sam_version(void)\ -{\ - return SAM_INTERFACE_VERSION;\ -} - -/* Backend to use by default when no backend was specified */ -#define SAM_DEFAULT_BACKEND "plugin" - -typedef struct sam_domain_handle { - TALLOC_CTX *mem_ctx; - uint32 access_granted; - const struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ - void (*free_fn)(struct sam_domain_handle **); - struct domain_data { - DOM_SID sid; /*SID of the domain. Should not be changed */ - char *name; /* Name of the domain */ - char *servername; /* */ - NTTIME max_passwordage; /* time till next password expiration */ - NTTIME min_passwordage; /* time till password can be changed again */ - NTTIME lockout_duration; /* time till login is allowed again after lockout*/ - NTTIME reset_count; /* time till bad login counter is reset */ - uint16 min_passwordlength; /* minimum number of characters for a password */ - uint16 password_history; /* number of passwords stored in history */ - uint16 lockout_count; /* number of bad login attempts before lockout */ - BOOL force_logoff; /* force logoff after logon hours have expired */ - BOOL login_pwdchange; /* Users need to logon to change their password */ - uint32 num_accounts; /* number of accounts in the domain */ - uint32 num_groups; /* number of global groups */ - uint32 num_aliases; /* number of local groups */ - uint32 sam_sequence_number; /* global sequence number */ - } private; -} SAM_DOMAIN_HANDLE; - -typedef struct sam_account_handle { - TALLOC_CTX *mem_ctx; - uint32 access_granted; - const struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ - void (*free_fn)(struct sam_account_handle **); - struct sam_account_data { - uint32 init_flag; - NTTIME logon_time; /* logon time */ - NTTIME logoff_time; /* logoff time */ - NTTIME kickoff_time; /* kickoff time */ - NTTIME pass_last_set_time; /* password last set time */ - NTTIME pass_can_change_time; /* password can change time */ - NTTIME pass_must_change_time; /* password must change time */ - char * account_name; /* account_name string */ - SAM_DOMAIN_HANDLE * domain; /* domain of account */ - char *full_name; /* account's full name string */ - char *unix_home_dir; /* UNIX home directory string */ - char *home_dir; /* home directory string */ - char *dir_drive; /* home directory drive string */ - char *logon_script; /* logon script string */ - char *profile_path; /* profile path string */ - char *acct_desc; /* account description string */ - char *workstations; /* login from workstations string */ - char *unknown_str; /* don't know what this is, yet. */ - char *munged_dial; /* munged path name and dial-back tel number */ - DOM_SID account_sid; /* Primary Account SID */ - DOM_SID group_sid; /* Primary Group SID */ - DATA_BLOB lm_pw; /* .data is Null if no password */ - DATA_BLOB nt_pw; /* .data is Null if no password */ - char *plaintext_pw; /* if Null not available */ - uint16 acct_ctrl; /* account info (ACB_xxxx bit-mask) */ - uint32 unknown_1; /* 0x00ff ffff */ - uint16 logon_divs; /* 168 - number of hours in a week */ - uint32 hours_len; /* normally 21 bytes */ - uint8 hours[MAX_HOURS_LEN]; - uint32 unknown_2; /* 0x0002 0000 */ - uint32 unknown_3; /* 0x0000 04ec */ - } private; -} SAM_ACCOUNT_HANDLE; - -typedef struct sam_group_handle { - TALLOC_CTX *mem_ctx; - uint32 access_granted; - const struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ - void (*free_fn)(struct sam_group_handle **); - struct sam_group_data { - char *group_name; - char *group_desc; - DOM_SID sid; - uint16 group_ctrl; /* specifies if the group is a local group or a global group */ - uint32 num_members; - } private; -} SAM_GROUP_HANDLE; - - -typedef struct sam_group_member { - DOM_SID sid; - BOOL group; /* specifies if it is a group or a account */ -} SAM_GROUP_MEMBER; - -typedef struct sam_account_enum { - DOM_SID sid; - char *account_name; - char *full_name; - char *account_desc; - uint16 acct_ctrl; -} SAM_ACCOUNT_ENUM; - -typedef struct sam_group_enum { - DOM_SID sid; - char *group_name; - char *group_desc; - uint16 group_ctrl; -} SAM_GROUP_ENUM; - - -/* bits for group_ctrl: to spezify if the group is global group or alias */ -#define GCB_LOCAL_GROUP 0x0001 -#define GCB_ALIAS_GROUP (GCB_LOCAL_GROUP |GCB_BUILTIN) -#define GCB_GLOBAL_GROUP 0x0002 -#define GCB_BUILTIN 0x1000 - -typedef struct sam_context -{ - struct sam_methods *methods; - TALLOC_CTX *mem_ctx; - - void (*free_fn)(struct sam_context **); -} SAM_CONTEXT; - -typedef struct sam_methods -{ - struct sam_context *parent; - struct sam_methods *next; - struct sam_methods *prev; - const char *backendname; - const char *domain_name; - DOM_SID domain_sid; - void *private_data; - - /* General API */ - - NTSTATUS (*sam_get_sec_desc) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd); - NTSTATUS (*sam_set_sec_desc) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd); - - NTSTATUS (*sam_lookup_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, TALLOC_CTX *mem_ctx, const DOM_SID *sid, char **name, uint32 *type); - NTSTATUS (*sam_lookup_name) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const char *name, DOM_SID *sid, uint32 *type); - - /* Domain API */ - - NTSTATUS (*sam_update_domain) (const struct sam_methods *, const SAM_DOMAIN_HANDLE *domain); - NTSTATUS (*sam_get_domain_handle) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, SAM_DOMAIN_HANDLE **domain); - - /* Account API */ - - NTSTATUS (*sam_create_account) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account); - NTSTATUS (*sam_add_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account); - NTSTATUS (*sam_update_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account); - NTSTATUS (*sam_delete_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account); - NTSTATUS (*sam_enum_accounts) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts); - - NTSTATUS (*sam_get_account_by_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account); - NTSTATUS (*sam_get_account_by_name) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account); - - /* Group API */ - - NTSTATUS (*sam_create_group) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group); - NTSTATUS (*sam_add_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group); - NTSTATUS (*sam_update_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group); - NTSTATUS (*sam_delete_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group); - NTSTATUS (*sam_enum_groups) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups); - NTSTATUS (*sam_get_group_by_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group); - NTSTATUS (*sam_get_group_by_name) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group); - - NTSTATUS (*sam_add_member_to_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member); - NTSTATUS (*sam_delete_member_from_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member); - NTSTATUS (*sam_enum_groupmembers) (const struct sam_methods *, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members); - - NTSTATUS (*sam_get_groups_of_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups); - - void (*free_private_data)(void **); -} SAM_METHODS; - -typedef NTSTATUS (*sam_init_function)(SAM_METHODS *, const char *); - -struct sam_init_function_entry { - char *module_name; - /* Function to create a member of the sam_methods list */ - sam_init_function init; -}; - -typedef struct sam_backend_entry { - char *module_name; - char *module_params; - char *domain_name; - DOM_SID *domain_sid; -} SAM_BACKEND_ENTRY; - - -#endif /* _SAM_H */ diff --git a/source/include/tdbsam2.h b/source/include/tdbsam2.h deleted file mode 100644 index 0ca9d346182..00000000000 --- a/source/include/tdbsam2.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Unix SMB/CIFS implementation. - * tdbsam2 genstruct enabled header file - * Copyright (C) Simo Sorce 2002 - * - * 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 2 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, write to the Free Software Foundation, Inc., 675 - * Mass Ave, Cambridge, MA 02139, USA. - */ - - -/* ALL strings assumes UTF8 as encoding */ - -GENSTRUCT struct tdbsam2_domain_data { - uint32 xcounter; /* counter to be updated at any change */ - - SEC_DESC *sec_desc; /* Security Descriptor */ - DOM_SID *user_sid; /* The User SID */ - char *name; _NULLTERM /* NT User Name */ - char *description; _NULLTERM /* Descritpion (Gecos) */ -}; - -GENSTRUCT struct tdbsam2_user_data { - uint32 xcounter; /* counter to be updated at any change */ - - SEC_DESC *sec_desc; /* Security Descriptor */ - DOM_SID *user_sid; /* The User SID */ - char *name; _NULLTERM /* NT User Name */ - char *description; _NULLTERM /* Descritpion (Gecos) */ - - DOM_SID *group_sid; /* The Primary Group SID */ - - NTTIME *logon_time; - NTTIME *logoff_time; - NTTIME *kickoff_time; - NTTIME *pass_last_set_time; - NTTIME *pass_can_change_time; - NTTIME *pass_must_change_time; - - char *full_name; _NULLTERM /* The Full Name */ - char *home_dir; _NULLTERM /* Home Directory */ - char *dir_drive; _NULLTERM /* Drive Letter the home should be mapped to */ - char *logon_script; _NULLTERM /* Logon script path */ - char *profile_path; _NULLTERM /* Profile is stored here */ - char *workstations; _NULLTERM /* List of Workstation names the user is allowed to LogIn */ - char *unknown_str; _NULLTERM /* Guess ... Unknown */ - char *munged_dial; _NULLTERM /* Callback Number */ - - /* passwords are 16 byte leght, pointer is null if no password */ - uint8 *lm_pw_ptr; _LEN(16) /* Lanman hashed password */ - uint8 *nt_pw_ptr; _LEN(16) /* NT hashed password */ - - uint16 logon_divs; /* 168 - num of hours in a week */ - uint32 hours_len; /* normally 21 */ - uint8 *hours; _LEN(hours_len) /* normally 21 bytes (depends on hours_len) */ - - uint32 unknown_3; /* 0x00ff ffff */ - uint32 unknown_5; /* 0x0002 0000 */ - uint32 unknown_6; /* 0x0000 04ec */ -}; - -GENSTRUCT struct tdbsam2_group_data { - uint32 xcounter; /* counter to be updated at any change */ - - SEC_DESC *sec_desc; /* Security Descriptor */ - DOM_SID *group_sid; /* The Group SID */ - char *name; _NULLTERM /* NT User Name */ - char *description; _NULLTERM /* Descritpion (Gecos) */ - - uint32 count; /* number of sids */ - DOM_SID **members; _LEN(count) /* SID array */ -}; - -GENSTRUCT struct tdbsam2_privilege_data { - uint32 xcounter; /* counter to be updated at any change */ - - LUID_ATTR *privilege; /* Privilege */ - char *name; _NULLTERM /* NT User Name */ - char *description; _NULLTERM /* Descritpion (Gecos) */ - - uint32 count; /* number of sids */ - DOM_SID **members; _LEN(count) /* SID array */ -}; - diff --git a/source/include/version.h b/source/include/version.h index c0a1c702f29..15d223fd7f9 100644 --- a/source/include/version.h +++ b/source/include/version.h @@ -1 +1 @@ -#define VERSION "post3.0-HEAD" +#define VERSION "3.0alpha22cvs" diff --git a/source/lib/charcnv.c b/source/lib/charcnv.c index 6dd3cd52d97..3428377d952 100644 --- a/source/lib/charcnv.c +++ b/source/lib/charcnv.c @@ -139,7 +139,7 @@ size_t convert_string(charset_t from, charset_t to, i_len=srclen; o_len=destlen; retval = smb_iconv(descriptor, &inbuf, &i_len, &outbuf, &o_len); - if(retval==(size_t)-1) { + if(retval==-1) { const char *reason="unknown error"; switch(errno) { case EINVAL: @@ -214,7 +214,7 @@ convert: retval = smb_iconv(descriptor, &inbuf, &i_len, &outbuf, &o_len); - if(retval == (size_t)-1) { + if(retval == -1) { const char *reason="unknown error"; switch(errno) { case EINVAL: diff --git a/source/lib/domain_namemap.c b/source/lib/domain_namemap.c deleted file mode 100644 index 988f5e5d659..00000000000 --- a/source/lib/domain_namemap.c +++ /dev/null @@ -1,1317 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 1.9. - Groupname handling - Copyright (C) Jeremy Allison 1998. - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -/* - * UNIX gid and Local or Domain SID resolution. This module resolves - * only those entries in the map files, it is *NOT* responsible for - * resolving UNIX groups not listed: that is an entirely different - * matter, altogether... - */ - -/* - * - * - - format of the file is: - - unixname NT Group name - unixname Domain Admins (well-known Domain Group) - unixname DOMAIN_NAME\NT Group name - unixname OTHER_DOMAIN_NAME\NT Group name - unixname DOMAIN_NAME\Domain Admins (well-known Domain Group) - .... - - if the DOMAIN_NAME\ component is left off, then your own domain is assumed. - - * - * - */ - - -#include "includes.h" -extern int DEBUGLEVEL; - -extern fstring global_myworkgroup; -extern DOM_SID global_member_sid; -extern fstring global_sam_name; -extern DOM_SID global_sam_sid; -extern DOM_SID global_sid_S_1_5_20; - -/******************************************************************* - converts UNIX uid to an NT User RID. NOTE: IS SOMETHING SPECIFIC TO SAMBA - ********************************************************************/ -static uid_t pwdb_user_rid_to_uid(uint32 user_rid) -{ - return ((user_rid & (~RID_TYPE_USER))- 1000)/RID_MULTIPLIER; -} - -/******************************************************************* - converts NT Group RID to a UNIX uid. NOTE: IS SOMETHING SPECIFIC TO SAMBA - ********************************************************************/ -static uint32 pwdb_group_rid_to_gid(uint32 group_rid) -{ - return ((group_rid & (~RID_TYPE_GROUP))- 1000)/RID_MULTIPLIER; -} - -/******************************************************************* - converts NT Alias RID to a UNIX uid. NOTE: IS SOMETHING SPECIFIC TO SAMBA - ********************************************************************/ -static uint32 pwdb_alias_rid_to_gid(uint32 alias_rid) -{ - return ((alias_rid & (~RID_TYPE_ALIAS))- 1000)/RID_MULTIPLIER; -} - -/******************************************************************* - converts NT Group RID to a UNIX uid. NOTE: IS SOMETHING SPECIFIC TO SAMBA - ********************************************************************/ -static uint32 pwdb_gid_to_group_rid(uint32 gid) -{ - uint32 grp_rid = ((((gid)*RID_MULTIPLIER) + 1000) | RID_TYPE_GROUP); - return grp_rid; -} - -/****************************************************************** - converts UNIX gid to an NT Alias RID. NOTE: IS SOMETHING SPECIFIC TO SAMBA - ********************************************************************/ -static uint32 pwdb_gid_to_alias_rid(uint32 gid) -{ - uint32 alias_rid = ((((gid)*RID_MULTIPLIER) + 1000) | RID_TYPE_ALIAS); - return alias_rid; -} - -/******************************************************************* - converts UNIX uid to an NT User RID. NOTE: IS SOMETHING SPECIFIC TO SAMBA - ********************************************************************/ -static uint32 pwdb_uid_to_user_rid(uint32 uid) -{ - uint32 user_rid = ((((uid)*RID_MULTIPLIER) + 1000) | RID_TYPE_USER); - return user_rid; -} - -/****************************************************************** - converts SID + SID_NAME_USE type to a UNIX id. the Domain SID is, - and can only be, our own SID. - ********************************************************************/ -static BOOL pwdb_sam_sid_to_unixid(DOM_SID *sid, uint8 type, uint32 *id) -{ - DOM_SID tmp_sid; - uint32 rid; - - sid_copy(&tmp_sid, sid); - sid_split_rid(&tmp_sid, &rid); - if (!sid_equal(&global_sam_sid, &tmp_sid)) - { - return False; - } - - switch (type) - { - case SID_NAME_USER: - { - *id = pwdb_user_rid_to_uid(rid); - return True; - } - case SID_NAME_ALIAS: - { - *id = pwdb_alias_rid_to_gid(rid); - return True; - } - case SID_NAME_DOM_GRP: - case SID_NAME_WKN_GRP: - { - *id = pwdb_group_rid_to_gid(rid); - return True; - } - } - return False; -} - -/****************************************************************** - converts UNIX gid + SID_NAME_USE type to a SID. the Domain SID is, - and can only be, our own SID. - ********************************************************************/ -static BOOL pwdb_unixid_to_sam_sid(uint32 id, uint8 type, DOM_SID *sid) -{ - sid_copy(sid, &global_sam_sid); - switch (type) - { - case SID_NAME_USER: - { - sid_append_rid(sid, pwdb_uid_to_user_rid(id)); - return True; - } - case SID_NAME_ALIAS: - { - sid_append_rid(sid, pwdb_gid_to_alias_rid(id)); - return True; - } - case SID_NAME_DOM_GRP: - case SID_NAME_WKN_GRP: - { - sid_append_rid(sid, pwdb_gid_to_group_rid(id)); - return True; - } - } - return False; -} - -/******************************************************************* - Decides if a RID is a well known RID. - ********************************************************************/ -static BOOL pwdb_rid_is_well_known(uint32 rid) -{ - return (rid < 1000); -} - -/******************************************************************* - determines a rid's type. NOTE: THIS IS SOMETHING SPECIFIC TO SAMBA - ********************************************************************/ -static uint32 pwdb_rid_type(uint32 rid) -{ - /* lkcl i understand that NT attaches an enumeration to a RID - * such that it can be identified as either a user, group etc - * type: SID_ENUM_TYPE. - */ - if (pwdb_rid_is_well_known(rid)) - { - /* - * The only well known user RIDs are DOMAIN_USER_RID_ADMIN - * and DOMAIN_USER_RID_GUEST. - */ - if (rid == DOMAIN_USER_RID_ADMIN || rid == DOMAIN_USER_RID_GUEST) - { - return RID_TYPE_USER; - } - if (DOMAIN_GROUP_RID_ADMINS <= rid && rid <= DOMAIN_GROUP_RID_GUESTS) - { - return RID_TYPE_GROUP; - } - if (BUILTIN_ALIAS_RID_ADMINS <= rid && rid <= BUILTIN_ALIAS_RID_REPLICATOR) - { - return RID_TYPE_ALIAS; - } - } - return (rid & RID_TYPE_MASK); -} - -/******************************************************************* - checks whether rid is a user rid. NOTE: THIS IS SOMETHING SPECIFIC TO SAMBA - ********************************************************************/ -BOOL pwdb_rid_is_user(uint32 rid) -{ - return pwdb_rid_type(rid) == RID_TYPE_USER; -} - -/************************************************************************** - Groupname map functionality. The code loads a groupname map file and - (currently) loads it into a linked list. This is slow and memory - hungry, but can be changed into a more efficient storage format - if the demands on it become excessive. -***************************************************************************/ - -typedef struct name_map -{ - ubi_slNode next; - DOM_NAME_MAP grp; - -} name_map_entry; - -static ubi_slList groupname_map_list; -static ubi_slList aliasname_map_list; -static ubi_slList ntusrname_map_list; - -static void delete_name_entry(name_map_entry *gmep) -{ - if (gmep->grp.nt_name) - { - free(gmep->grp.nt_name); - } - if (gmep->grp.nt_domain) - { - free(gmep->grp.nt_domain); - } - if (gmep->grp.unix_name) - { - free(gmep->grp.unix_name); - } - free((char*)gmep); -} - -/************************************************************************** - Delete all the entries in the name map list. -***************************************************************************/ - -static void delete_map_list(ubi_slList *map_list) -{ - name_map_entry *gmep; - - while ((gmep = (name_map_entry *)ubi_slRemHead(map_list )) != NULL) - { - delete_name_entry(gmep); - } -} - - -/************************************************************************** - makes a group sid out of a domain sid and a _unix_ gid. -***************************************************************************/ -static BOOL make_mydomain_sid(DOM_NAME_MAP *grp, DOM_MAP_TYPE type) -{ - int ret = False; - fstring sid_str; - - if (!map_domain_name_to_sid(&grp->sid, &(grp->nt_domain))) - { - DEBUG(0,("make_mydomain_sid: unknown domain %s\n", - grp->nt_domain)); - return False; - } - - if (sid_equal(&grp->sid, &global_sid_S_1_5_20)) - { - /* - * only builtin aliases are recognised in S-1-5-20 - */ - DEBUG(10,("make_mydomain_sid: group %s in builtin domain\n", - grp->nt_name)); - - if (lookup_builtin_alias_name(grp->nt_name, "BUILTIN", &grp->sid, &grp->type) != 0x0) - { - DEBUG(0,("unix group %s mapped to an unrecognised BUILTIN domain name %s\n", - grp->unix_name, grp->nt_name)); - return False; - } - ret = True; - } - else if (lookup_wk_user_name(grp->nt_name, grp->nt_domain, &grp->sid, &grp->type) == 0x0) - { - if (type != DOM_MAP_USER) - { - DEBUG(0,("well-known NT user %s\\%s listed in wrong map file\n", - grp->nt_domain, grp->nt_name)); - return False; - } - ret = True; - } - else if (lookup_wk_group_name(grp->nt_name, grp->nt_domain, &grp->sid, &grp->type) == 0x0) - { - if (type != DOM_MAP_DOMAIN) - { - DEBUG(0,("well-known NT group %s\\%s listed in wrong map file\n", - grp->nt_domain, grp->nt_name)); - return False; - } - ret = True; - } - else - { - switch (type) - { - case DOM_MAP_USER: - { - grp->type = SID_NAME_USER; - break; - } - case DOM_MAP_DOMAIN: - { - grp->type = SID_NAME_DOM_GRP; - break; - } - case DOM_MAP_LOCAL: - { - grp->type = SID_NAME_ALIAS; - break; - } - } - - ret = pwdb_unixid_to_sam_sid(grp->unix_id, grp->type, &grp->sid); - } - - sid_to_string(sid_str, &grp->sid); - DEBUG(10,("nt name %s\\%s gid %d mapped to %s\n", - grp->nt_domain, grp->nt_name, grp->unix_id, sid_str)); - return ret; -} - -/************************************************************************** - makes a group sid out of an nt domain, nt group name or a unix group name. -***************************************************************************/ -static BOOL unix_name_to_nt_name_info(DOM_NAME_MAP *map, DOM_MAP_TYPE type) -{ - /* - * Attempt to get the unix gid_t for this name. - */ - - DEBUG(5,("unix_name_to_nt_name_info: unix_name:%s\n", map->unix_name)); - - if (type == DOM_MAP_USER) - { - const struct passwd *pwptr = Get_Pwnam(map->unix_name, False); - if (pwptr == NULL) - { - DEBUG(0,("unix_name_to_nt_name_info: Get_Pwnam for user %s\ -failed. Error was %s.\n", map->unix_name, strerror(errno) )); - return False; - } - - map->unix_id = (uint32)pwptr->pw_uid; - } - else - { - struct group *gptr = getgrnam(map->unix_name); - if (gptr == NULL) - { - DEBUG(0,("unix_name_to_nt_name_info: getgrnam for group %s\ -failed. Error was %s.\n", map->unix_name, strerror(errno) )); - return False; - } - - map->unix_id = (uint32)gptr->gr_gid; - } - - DEBUG(5,("unix_name_to_nt_name_info: unix gid:%d\n", map->unix_id)); - - /* - * Now map the name to an NT SID+RID. - */ - - if (map->nt_domain != NULL && !strequal(map->nt_domain, global_sam_name)) - { - /* Must add client-call lookup code here, to - * resolve remote domain's sid and the group's rid, - * in that domain. - * - * NOTE: it is _incorrect_ to put code here that assumes - * we are responsible for lookups for foriegn domains' RIDs. - * - * for foriegn domains for which we are *NOT* the PDC, all - * we can be responsible for is the unix gid_t to which - * the foriegn SID+rid maps to, on this _local_ machine. - * we *CANNOT* make any short-cuts or assumptions about - * RIDs in a foriegn domain. - */ - - if (!map_domain_name_to_sid(&map->sid, &(map->nt_domain))) - { - DEBUG(0,("unix_name_to_nt_name_info: no known sid for %s\n", - map->nt_domain)); - return False; - } - } - - return make_mydomain_sid(map, type); -} - -static BOOL make_name_entry(name_map_entry **new_ep, - char *nt_domain, char *nt_group, char *unix_group, - DOM_MAP_TYPE type) -{ - /* - * Create the list entry and add it onto the list. - */ - - DEBUG(5,("make_name_entry:%s,%s,%s\n", nt_domain, nt_group, unix_group)); - - (*new_ep) = (name_map_entry *)malloc(sizeof(name_map_entry)); - if ((*new_ep) == NULL) - { - DEBUG(0,("make_name_entry: malloc fail for name_map_entry.\n")); - return False; - } - - ZERO_STRUCTP(*new_ep); - - (*new_ep)->grp.nt_name = strdup(nt_group ); - (*new_ep)->grp.nt_domain = strdup(nt_domain ); - (*new_ep)->grp.unix_name = strdup(unix_group); - - if ((*new_ep)->grp.nt_name == NULL || - (*new_ep)->grp.unix_name == NULL) - { - DEBUG(0,("make_name_entry: malloc fail for names in name_map_entry.\n")); - delete_name_entry((*new_ep)); - return False; - } - - /* - * look up the group names, make the Group-SID and unix gid - */ - - if (!unix_name_to_nt_name_info(&(*new_ep)->grp, type)) - { - delete_name_entry((*new_ep)); - return False; - } - - return True; -} - -/************************************************************************** - Load a name map file. Sets last accessed timestamp. -***************************************************************************/ -static ubi_slList *load_name_map(DOM_MAP_TYPE type) -{ - static time_t groupmap_file_last_modified = (time_t)0; - static time_t aliasmap_file_last_modified = (time_t)0; - static time_t ntusrmap_file_last_modified = (time_t)0; - static BOOL initialised_group = False; - static BOOL initialised_alias = False; - static BOOL initialised_ntusr = False; - char *groupname_map_file = lp_groupname_map(); - char *aliasname_map_file = lp_aliasname_map(); - char *ntusrname_map_file = lp_ntusrname_map(); - - FILE *fp; - char *s; - pstring buf; - name_map_entry *new_ep; - - time_t *file_last_modified = NULL; - int *initialised = NULL; - char *map_file = NULL; - ubi_slList *map_list = NULL; - - switch (type) - { - case DOM_MAP_DOMAIN: - { - file_last_modified = &groupmap_file_last_modified; - initialised = &initialised_group; - map_file = groupname_map_file; - map_list = &groupname_map_list; - - break; - } - case DOM_MAP_LOCAL: - { - file_last_modified = &aliasmap_file_last_modified; - initialised = &initialised_alias; - map_file = aliasname_map_file; - map_list = &aliasname_map_list; - - break; - } - case DOM_MAP_USER: - { - file_last_modified = &ntusrmap_file_last_modified; - initialised = &initialised_ntusr; - map_file = ntusrname_map_file; - map_list = &ntusrname_map_list; - - break; - } - } - - if (!(*initialised)) - { - DEBUG(10,("initialising map %s\n", map_file)); - ubi_slInitList(map_list); - (*initialised) = True; - } - - if (!*map_file) - { - return map_list; - } - - /* - * Load the file. - */ - - fp = open_file_if_modified(map_file, "r", file_last_modified); - if (!fp) - { - return map_list; - } - - /* - * Throw away any previous list. - */ - delete_map_list(map_list); - - DEBUG(4,("load_name_map: Scanning name map %s\n",map_file)); - - while ((s = fgets_slash(buf, sizeof(buf), fp)) != NULL) - { - pstring unixname; - pstring nt_name; - fstring nt_domain; - fstring ntname; - char *p; - - DEBUG(10,("Read line |%s|\n", s)); - - memset(nt_name, 0, sizeof(nt_name)); - - if (!*s || strchr("#;",*s)) - continue; - - if (!next_token(&s,unixname, "\t\n\r=", sizeof(unixname))) - continue; - - if (!next_token(&s,nt_name, "\t\n\r=", sizeof(nt_name))) - continue; - - trim_string(unixname, " ", " "); - trim_string(nt_name, " ", " "); - - if (!*nt_name) - continue; - - if (!*unixname) - continue; - - p = strchr(nt_name, '\\'); - - if (p == NULL) - { - memset(nt_domain, 0, sizeof(nt_domain)); - fstrcpy(ntname, nt_name); - } - else - { - *p = 0; - p++; - fstrcpy(nt_domain, nt_name); - fstrcpy(ntname , p); - } - - if (make_name_entry(&new_ep, nt_domain, ntname, unixname, type)) - { - ubi_slAddTail(map_list, (ubi_slNode *)new_ep); - DEBUG(5,("unixname = %s, ntname = %s\\%s type = %d\n", - new_ep->grp.unix_name, - new_ep->grp.nt_domain, - new_ep->grp.nt_name, - new_ep->grp.type)); - } - } - - DEBUG(10,("load_name_map: Added %ld entries to name map.\n", - ubi_slCount(map_list))); - - fclose(fp); - - return map_list; -} - -static void copy_grp_map_entry(DOM_NAME_MAP *grp, const DOM_NAME_MAP *from) -{ - sid_copy(&grp->sid, &from->sid); - grp->unix_id = from->unix_id; - grp->nt_name = from->nt_name; - grp->nt_domain = from->nt_domain; - grp->unix_name = from->unix_name; - grp->type = from->type; -} - -#if 0 -/*********************************************************** - Lookup unix name. -************************************************************/ -static BOOL map_unixname(DOM_MAP_TYPE type, - char *unixname, DOM_NAME_MAP *grp_info) -{ - name_map_entry *gmep; - ubi_slList *map_list; - - /* - * Initialise and load if not already loaded. - */ - map_list = load_name_map(type); - - for (gmep = (name_map_entry *)ubi_slFirst(map_list); - gmep != NULL; - gmep = (name_map_entry *)ubi_slNext(gmep )) - { - if (strequal(gmep->grp.unix_name, unixname)) - { - copy_grp_map_entry(grp_info, &gmep->grp); - DEBUG(7,("map_unixname: Mapping unix name %s to nt group %s.\n", - gmep->grp.unix_name, gmep->grp.nt_name )); - return True; - } - } - - return False; -} - -#endif - -/*********************************************************** - Lookup nt name. -************************************************************/ -static BOOL map_ntname(DOM_MAP_TYPE type, char *ntname, char *ntdomain, - DOM_NAME_MAP *grp_info) -{ - name_map_entry *gmep; - ubi_slList *map_list; - - /* - * Initialise and load if not already loaded. - */ - map_list = load_name_map(type); - - for (gmep = (name_map_entry *)ubi_slFirst(map_list); - gmep != NULL; - gmep = (name_map_entry *)ubi_slNext(gmep )) - { - if (strequal(gmep->grp.nt_name , ntname) && - strequal(gmep->grp.nt_domain, ntdomain)) - { - copy_grp_map_entry(grp_info, &gmep->grp); - DEBUG(7,("map_ntname: Mapping unix name %s to nt name %s.\n", - gmep->grp.unix_name, gmep->grp.nt_name )); - return True; - } - } - - return False; -} - - -/*********************************************************** - Lookup by SID -************************************************************/ -static BOOL map_sid(DOM_MAP_TYPE type, - DOM_SID *psid, DOM_NAME_MAP *grp_info) -{ - name_map_entry *gmep; - ubi_slList *map_list; - - /* - * Initialise and load if not already loaded. - */ - map_list = load_name_map(type); - - for (gmep = (name_map_entry *)ubi_slFirst(map_list); - gmep != NULL; - gmep = (name_map_entry *)ubi_slNext(gmep )) - { - if (sid_equal(&gmep->grp.sid, psid)) - { - copy_grp_map_entry(grp_info, &gmep->grp); - DEBUG(7,("map_sid: Mapping unix name %s to nt name %s.\n", - gmep->grp.unix_name, gmep->grp.nt_name )); - return True; - } - } - - return False; -} - -/*********************************************************** - Lookup by gid_t. -************************************************************/ -static BOOL map_unixid(DOM_MAP_TYPE type, uint32 unix_id, DOM_NAME_MAP *grp_info) -{ - name_map_entry *gmep; - ubi_slList *map_list; - - /* - * Initialise and load if not already loaded. - */ - map_list = load_name_map(type); - - for (gmep = (name_map_entry *)ubi_slFirst(map_list); - gmep != NULL; - gmep = (name_map_entry *)ubi_slNext(gmep )) - { - fstring sid_str; - sid_to_string(sid_str, &gmep->grp.sid); - DEBUG(10,("map_unixid: enum entry unix group %s %d nt %s %s\n", - gmep->grp.unix_name, gmep->grp.unix_id, gmep->grp.nt_name, sid_str)); - if (gmep->grp.unix_id == unix_id) - { - copy_grp_map_entry(grp_info, &gmep->grp); - DEBUG(7,("map_unixid: Mapping unix name %s to nt name %s type %d\n", - gmep->grp.unix_name, gmep->grp.nt_name, gmep->grp.type)); - return True; - } - } - - return False; -} - -/*********************************************************** - * - * Call four functions to resolve unix group ids and either - * local group SIDs or domain group SIDs listed in the local group - * or domain group map files. - * - * Note that it is *NOT* the responsibility of these functions to - * resolve entries that are not in the map files. - * - * Any SID can be in the map files (i.e from any Domain). - * - ***********************************************************/ - -#if 0 - -/*********************************************************** - Lookup a UNIX Group entry by name. -************************************************************/ -BOOL map_unix_group_name(char *group_name, DOM_NAME_MAP *grp_info) -{ - return map_unixname(DOM_MAP_DOMAIN, group_name, grp_info); -} - -/*********************************************************** - Lookup a UNIX Alias entry by name. -************************************************************/ -BOOL map_unix_alias_name(char *alias_name, DOM_NAME_MAP *grp_info) -{ - return map_unixname(DOM_MAP_LOCAL, alias_name, grp_info); -} - -/*********************************************************** - Lookup an Alias name entry -************************************************************/ -BOOL map_nt_alias_name(char *ntalias_name, char *nt_domain, DOM_NAME_MAP *grp_info) -{ - return map_ntname(DOM_MAP_LOCAL, ntalias_name, nt_domain, grp_info); -} - -/*********************************************************** - Lookup a Group entry -************************************************************/ -BOOL map_nt_group_name(char *ntgroup_name, char *nt_domain, DOM_NAME_MAP *grp_info) -{ - return map_ntname(DOM_MAP_DOMAIN, ntgroup_name, nt_domain, grp_info); -} - -#endif - -/*********************************************************** - Lookup a Username entry by name. -************************************************************/ -static BOOL map_nt_username(char *nt_name, char *nt_domain, DOM_NAME_MAP *grp_info) -{ - return map_ntname(DOM_MAP_USER, nt_name, nt_domain, grp_info); -} - -/*********************************************************** - Lookup a Username entry by SID. -************************************************************/ -static BOOL map_username_sid(DOM_SID *sid, DOM_NAME_MAP *grp_info) -{ - return map_sid(DOM_MAP_USER, sid, grp_info); -} - -/*********************************************************** - Lookup a Username SID entry by uid. -************************************************************/ -static BOOL map_username_uid(uid_t gid, DOM_NAME_MAP *grp_info) -{ - return map_unixid(DOM_MAP_USER, (uint32)gid, grp_info); -} - -/*********************************************************** - Lookup an Alias SID entry by name. -************************************************************/ -BOOL map_alias_sid(DOM_SID *psid, DOM_NAME_MAP *grp_info) -{ - return map_sid(DOM_MAP_LOCAL, psid, grp_info); -} - -/*********************************************************** - Lookup a Group entry by sid. -************************************************************/ -BOOL map_group_sid(DOM_SID *psid, DOM_NAME_MAP *grp_info) -{ - return map_sid(DOM_MAP_DOMAIN, psid, grp_info); -} - -/*********************************************************** - Lookup an Alias SID entry by gid_t. -************************************************************/ -static BOOL map_alias_gid(gid_t gid, DOM_NAME_MAP *grp_info) -{ - return map_unixid(DOM_MAP_LOCAL, (uint32)gid, grp_info); -} - -/*********************************************************** - Lookup a Group SID entry by gid_t. -************************************************************/ -static BOOL map_group_gid( gid_t gid, DOM_NAME_MAP *grp_info) -{ - return map_unixid(DOM_MAP_DOMAIN, (uint32)gid, grp_info); -} - - -/************************************************************************ - Routine to look up User details by UNIX name -*************************************************************************/ -BOOL lookupsmbpwnam(const char *unix_usr_name, DOM_NAME_MAP *grp) -{ - uid_t uid; - DEBUG(10,("lookupsmbpwnam: unix user name %s\n", unix_usr_name)); - if (nametouid(unix_usr_name, &uid)) - { - return lookupsmbpwuid(uid, grp); - } - else - { - return False; - } -} - -/************************************************************************ - Routine to look up a remote nt name -*************************************************************************/ -static BOOL lookup_remote_ntname(const char *ntname, DOM_SID *sid, uint8 *type) -{ - struct cli_state cli; - POLICY_HND lsa_pol; - fstring srv_name; - extern struct ntuser_creds *usr_creds; - struct ntuser_creds usr; - - BOOL res3 = True; - BOOL res4 = True; - uint32 num_sids; - DOM_SID *sids; - uint8 *types; - char *names[1]; - - usr_creds = &usr; - - ZERO_STRUCT(usr); - pwd_set_nullpwd(&usr.pwd); - - DEBUG(5,("lookup_remote_ntname: %s\n", ntname)); - - if (!cli_connect_serverlist(&cli, lp_passwordserver())) - { - return False; - } - - names[0] = ntname; - - fstrcpy(srv_name, "\\\\"); - fstrcat(srv_name, cli.desthost); - strupper(srv_name); - - /* lookup domain controller; receive a policy handle */ - res3 = res3 ? lsa_open_policy( srv_name, - &lsa_pol, True) : False; - - /* send lsa lookup sids call */ - res4 = res3 ? lsa_lookup_names( &lsa_pol, - 1, names, - &sids, &types, &num_sids) : False; - - res3 = res3 ? lsa_close(&lsa_pol) : False; - - if (res4 && res3 && sids != NULL && types != NULL) - { - sid_copy(sid, &sids[0]); - *type = types[0]; - } - else - { - res3 = False; - } - if (types != NULL) - { - free(types); - } - - if (sids != NULL) - { - free(sids); - } - - return res3 && res4; -} - -/************************************************************************ - Routine to look up a remote nt name -*************************************************************************/ -static BOOL get_sid_and_type(const char *fullntname, uint8 expected_type, - DOM_NAME_MAP *gmep) -{ - /* - * check with the PDC to see if it owns the name. if so, - * the SID is resolved with the PDC database. - */ - - if (lp_server_role() == ROLE_DOMAIN_MEMBER) - { - if (lookup_remote_ntname(fullntname, &gmep->sid, &gmep->type)) - { - if (sid_front_equal(&gmep->sid, &global_member_sid) && - strequal(gmep->nt_domain, global_myworkgroup) && - gmep->type == expected_type) - { - return True; - } - return False; - } - } - - /* - * ... otherwise, it's one of ours. map the sid ourselves, - * which can only happen in our own SAM database. - */ - - if (!strequal(gmep->nt_domain, global_sam_name)) - { - return False; - } - if (!pwdb_unixid_to_sam_sid(gmep->unix_id, gmep->type, &gmep->sid)) - { - return False; - } - - return True; -} - -/* - * used by lookup functions below - */ - -static fstring nt_name; -static fstring unix_name; -static fstring nt_domain; - -/************************************************************************* - looks up a uid, returns User Information. -*************************************************************************/ -BOOL lookupsmbpwuid(uid_t uid, DOM_NAME_MAP *gmep) -{ - DEBUG(10,("lookupsmbpwuid: unix uid %d\n", uid)); - if (map_username_uid(uid, gmep)) - { - return True; - } -#if 0 - if (lp_server_role() != ROLE_DOMAIN_NONE) -#endif - { - gmep->nt_name = nt_name; - gmep->unix_name = unix_name; - gmep->nt_domain = nt_domain; - - gmep->unix_id = (uint32)uid; - - /* - * ok, assume it's one of ours. then double-check it - * if we are a member of a domain - */ - - gmep->type = SID_NAME_USER; - fstrcpy(gmep->nt_name, uidtoname(uid)); - fstrcpy(gmep->unix_name, gmep->nt_name); - - /* - * here we should do a LsaLookupNames() call - * to check the status of the name with the PDC. - * if the PDC know nothing of the name, it's ours. - */ - - if (lp_server_role() == ROLE_DOMAIN_MEMBER) - { -#if 0 - lsa_lookup_names(global_myworkgroup, gmep->nt_name, &gmep->sid...); -#endif - } - - /* - * ok, it's one of ours. - */ - - gmep->nt_domain = global_sam_name; - pwdb_unixid_to_sam_sid(gmep->unix_id, gmep->type, &gmep->sid); - - return True; - } - - /* oops. */ - - return False; -} - -/************************************************************************* - looks up by NT name, returns User Information. -*************************************************************************/ -BOOL lookupsmbpwntnam(const char *fullntname, DOM_NAME_MAP *gmep) -{ - DEBUG(10,("lookupsmbpwntnam: nt user name %s\n", fullntname)); - - if (!split_domain_name(fullntname, nt_domain, nt_name)) - { - return False; - } - - if (map_nt_username(nt_name, nt_domain, gmep)) - { - return True; - } - if (lp_server_role() != ROLE_DOMAIN_NONE) - { - uid_t uid; - gmep->nt_name = nt_name; - gmep->unix_name = unix_name; - gmep->nt_domain = nt_domain; - - /* - * ok, it's one of ours. we therefore "create" an nt user named - * after the unix user. this is the point where "appliance mode" - * should get its teeth in, as unix users won't really exist, - * they will only be numbers... - */ - - gmep->type = SID_NAME_USER; - fstrcpy(gmep->unix_name, gmep->nt_name); - if (!nametouid(gmep->unix_name, &uid)) - { - return False; - } - gmep->unix_id = (uint32)uid; - - return get_sid_and_type(fullntname, gmep->type, gmep); - } - - /* oops. */ - - return False; -} - -/************************************************************************* - looks up by RID, returns User Information. -*************************************************************************/ -BOOL lookupsmbpwsid(DOM_SID *sid, DOM_NAME_MAP *gmep) -{ - fstring sid_str; - sid_to_string(sid_str, sid); - DEBUG(10,("lookupsmbpwsid: nt sid %s\n", sid_str)); - - if (map_username_sid(sid, gmep)) - { - return True; - } - if (lp_server_role() != ROLE_DOMAIN_NONE) - { - gmep->nt_name = nt_name; - gmep->unix_name = unix_name; - gmep->nt_domain = nt_domain; - - /* - * here we should do a LsaLookupNames() call - * to check the status of the name with the PDC. - * if the PDC know nothing of the name, it's ours. - */ - - if (lp_server_role() == ROLE_DOMAIN_MEMBER) - { -#if 0 - if (lookup_remote_sid(global_myworkgroup, gmep->sid, gmep->nt_name, gmep->nt_domain...); -#endif - } - - /* - * ok, it's one of ours. we therefore "create" an nt user named - * after the unix user. this is the point where "appliance mode" - * should get its teeth in, as unix users won't really exist, - * they will only be numbers... - */ - - gmep->type = SID_NAME_USER; - sid_copy(&gmep->sid, sid); - if (!pwdb_sam_sid_to_unixid(&gmep->sid, gmep->type, &gmep->unix_id)) - { - return False; - } - fstrcpy(gmep->nt_name, uidtoname((uid_t)gmep->unix_id)); - fstrcpy(gmep->unix_name, gmep->nt_name); - gmep->nt_domain = global_sam_name; - - return True; - } - - /* oops. */ - - return False; -} - -/************************************************************************ - Routine to look up group / alias / well-known group RID by UNIX name -*************************************************************************/ -BOOL lookupsmbgrpnam(const char *unix_grp_name, DOM_NAME_MAP *grp) -{ - gid_t gid; - DEBUG(10,("lookupsmbgrpnam: unix user group %s\n", unix_grp_name)); - if (nametogid(unix_grp_name, &gid)) - { - return lookupsmbgrpgid(gid, grp); - } - else - { - return False; - } -} - -/************************************************************************* - looks up a SID, returns name map entry -*************************************************************************/ -BOOL lookupsmbgrpsid(DOM_SID *sid, DOM_NAME_MAP *gmep) -{ - fstring sid_str; - sid_to_string(sid_str, sid); - DEBUG(10,("lookupsmbgrpsid: nt sid %s\n", sid_str)); - - if (map_alias_sid(sid, gmep)) - { - return True; - } - if (map_group_sid(sid, gmep)) - { - return True; - } - if (lp_server_role() != ROLE_DOMAIN_NONE) - { - gmep->nt_name = nt_name; - gmep->unix_name = unix_name; - gmep->nt_domain = nt_domain; - - /* - * here we should do a LsaLookupNames() call - * to check the status of the name with the PDC. - * if the PDC know nothing of the name, it's ours. - */ - - if (lp_server_role() == ROLE_DOMAIN_MEMBER) - { -#if 0 - lsa_lookup_sids(global_myworkgroup, gmep->sid, gmep->nt_name, gmep->nt_domain...); -#endif - } - - /* - * ok, it's one of ours. we therefore "create" an nt group or - * alias name named after the unix group. this is the point - * where "appliance mode" should get its teeth in, as unix - * groups won't really exist, they will only be numbers... - */ - - /* name is not explicitly mapped - * with map files or the PDC - * so we are responsible for it... - */ - - if (lp_server_role() == ROLE_DOMAIN_MEMBER) - { - /* ... as a LOCAL group. */ - gmep->type = SID_NAME_ALIAS; - } - else - { - /* ... as a DOMAIN group. */ - gmep->type = SID_NAME_DOM_GRP; - } - - sid_copy(&gmep->sid, sid); - if (!pwdb_sam_sid_to_unixid(&gmep->sid, gmep->type, &gmep->unix_id)) - { - return False; - } - fstrcpy(gmep->nt_name, gidtoname((gid_t)gmep->unix_id)); - fstrcpy(gmep->unix_name, gmep->nt_name); - gmep->nt_domain = global_sam_name; - - return True; - } - - /* oops */ - return False; -} - -/************************************************************************* - looks up a gid, returns RID and type local, domain or well-known domain group -*************************************************************************/ -BOOL lookupsmbgrpgid(gid_t gid, DOM_NAME_MAP *gmep) -{ - DEBUG(10,("lookupsmbgrpgid: unix gid %d\n", (int)gid)); - if (map_alias_gid(gid, gmep)) - { - return True; - } - if (map_group_gid(gid, gmep)) - { - return True; - } - if (lp_server_role() != ROLE_DOMAIN_NONE) - { - gmep->nt_name = nt_name; - gmep->unix_name = unix_name; - gmep->nt_domain = nt_domain; - - gmep->unix_id = (uint32)gid; - - /* - * here we should do a LsaLookupNames() call - * to check the status of the name with the PDC. - * if the PDC know nothing of the name, it's ours. - */ - - if (lp_server_role() == ROLE_DOMAIN_MEMBER) - { -#if 0 - if (lsa_lookup_names(global_myworkgroup, gmep->nt_name, &gmep->sid...); - { - return True; - } -#endif - } - - /* - * ok, it's one of ours. we therefore "create" an nt group or - * alias name named after the unix group. this is the point - * where "appliance mode" should get its teeth in, as unix - * groups won't really exist, they will only be numbers... - */ - - /* name is not explicitly mapped - * with map files or the PDC - * so we are responsible for it... - */ - - if (lp_server_role() == ROLE_DOMAIN_MEMBER) - { - /* ... as a LOCAL group. */ - gmep->type = SID_NAME_ALIAS; - } - else - { - /* ... as a DOMAIN group. */ - gmep->type = SID_NAME_DOM_GRP; - } - fstrcpy(gmep->nt_name, gidtoname(gid)); - fstrcpy(gmep->unix_name, gmep->nt_name); - - return get_sid_and_type(gmep->nt_name, gmep->type, gmep); - } - - /* oops */ - return False; -} - diff --git a/source/lib/gencache.c b/source/lib/gencache.c index 2c356d24e8e..a844d8c014d 100644 --- a/source/lib/gencache.c +++ b/source/lib/gencache.c @@ -67,7 +67,7 @@ BOOL gencache_init(void) SAFE_FREE(cache_fname); if (!cache) { - DEBUG(5, ("Attempt to open gencache.tdb has failed.\n")); + DEBUG(0, ("Attempt to open the cache file has failed.\n")); return False; } return True; diff --git a/source/lib/genparser.c b/source/lib/genparser.c deleted file mode 100644 index 9fa9dbd33bd..00000000000 --- a/source/lib/genparser.c +++ /dev/null @@ -1,775 +0,0 @@ -/* - Copyright (C) Andrew Tridgell 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -/* - automatic marshalling/unmarshalling system for C structures -*/ - -#include "includes.h" - -/* see if a range of memory is all zero. Used to prevent dumping of zero elements */ -static int all_zero(const char *ptr, unsigned size) -{ - int i; - if (!ptr) return 1; - for (i=0;i>4]; - p[2] = hexdig[c&0xF]; - p += 3; - } - } - - *p = 0; - - return ret; -} - -/* decode an escaped string from encode_bytes() into a buffer */ -static char *decode_bytes(const char *s, unsigned *len) -{ - char *ret, *p; - unsigned i; - ret = calloc(1, strlen(s)+1); /* worst case length */ - - if (*s == '{') s++; - - for (p=ret,i=0;s[i];i++) { - if (s[i] == '}') { - break; - } else if (s[i] == '\\') { - unsigned v; - if (sscanf(&s[i+1], "%02x", &v) != 1 || v > 255) { - free(ret); - return NULL; - } - *(unsigned char *)p = v; - p++; - i += 2; - } else { - *p++ = s[i]; - } - } - *p = 0; - - (*len) = (unsigned)(p - ret); - - return ret; -} - -/* the add*() functions deal with adding things to a struct - parse_string */ - -/* allocate more space if needed */ -static int addgen_alloc(struct parse_string *p, int n) -{ - if (p->length + n <= p->allocated) return 0; - p->allocated = p->length + n + 200; - p->s = realloc(p->s, p->allocated); - if (!p->s) { - errno = ENOMEM; - return -1; - } - return 0; -} - -/* add a character to the buffer */ -static int addchar(struct parse_string *p, char c) -{ - if (addgen_alloc(p, 2) != 0) { - return -1; - } - p->s[p->length++] = c; - p->s[p->length] = 0; - return 0; -} - -/* add a string to the buffer */ -int addstr(struct parse_string *p, const char *s) -{ - int len = strlen(s); - if (addgen_alloc(p, len+1) != 0) { - return -1; - } - memcpy(p->s + p->length, s, len+1); - p->length += len; - return 0; -} - -/* add a string to the buffer with a tab prefix */ -static int addtabbed(struct parse_string *p, const char *s, unsigned indent) -{ - int len = strlen(s); - if (addgen_alloc(p, indent+len+1) != 0) { - return -1; - } - while (indent--) { - p->s[p->length++] = '\t'; - } - memcpy(p->s + p->length, s, len+1); - p->length += len; - return 0; -} - -/* note! this can only be used for results up to 60 chars wide! */ -int addshort(struct parse_string *p, const char *fmt, ...) -{ - char buf[60]; - int n; - va_list ap; - va_start(ap, fmt); - n = vsnprintf(buf, sizeof(buf), fmt, ap); - va_end(ap); - if (addgen_alloc(p, n + 1) != 0) { - return -1; - } - if (n != 0) { - memcpy(p->s + p->length, buf, n); - } - p->length += n; - p->s[p->length] = 0; - return 0; -} - -/* - this is here to make it easier for people to write dump functions - for their own types - */ -int gen_addgen(struct parse_string *p, const char *fmt, ...) -{ - char *buf = NULL; - int n; - va_list ap; - va_start(ap, fmt); - n = vasprintf(&buf, fmt, ap); - va_end(ap); - if (addgen_alloc(p, n + 1) != 0) { - if (buf) free(buf); - return -1; - } - if (n != 0) { - memcpy(p->s + p->length, buf, n); - } - p->length += n; - p->s[p->length] = 0; - if (buf) free(buf); - return 0; -} - -/* dump a enumerated type */ -int gen_dump_enum(const struct enum_struct *einfo, - struct parse_string *p, - const char *ptr, - unsigned indent) -{ - unsigned v = *(unsigned *)ptr; - int i; - for (i=0;einfo[i].name;i++) { - if (v == einfo[i].value) { - addstr(p, einfo[i].name); - return 0; - } - } - /* hmm, maybe we should just fail? */ - return gen_dump_unsigned(p, ptr, indent); -} - -/* dump a single non-array element, hanlding struct and enum */ -static int gen_dump_one(struct parse_string *p, - const struct parse_struct *pinfo, - const char *ptr, - unsigned indent) -{ - if (pinfo->dump_fn == gen_dump_char && pinfo->ptr_count == 1) { - char *s = encode_bytes(ptr, strlen(ptr)); - if (addchar(p,'{') || - addstr(p, s) || - addstr(p, "}")) { - free(s); - return -1; - } - return 0; - } - - return pinfo->dump_fn(p, ptr, indent); -} - -/* handle dumping of an array of arbitrary type */ -static int gen_dump_array(struct parse_string *p, - const struct parse_struct *pinfo, - const char *ptr, - int array_len, - int indent) -{ - int i, count=0; - - /* special handling of fixed length strings */ - if (array_len != 0 && - pinfo->ptr_count == 0 && - pinfo->dump_fn == gen_dump_char) { - char *s = encode_bytes(ptr, array_len); - if (!s) return -1; - if (addtabbed(p, pinfo->name, indent) || - addstr(p, " = {") || - addstr(p, s) || - addstr(p, "}\n")) { - free(s); - return -1; - } - free(s); - return 0; - } - - for (i=0;isize; - - /* generic pointer dereference */ - if (pinfo->ptr_count) { - p2 = *(const char **)ptr; - size = sizeof(void *); - } - - if ((count || pinfo->ptr_count) && - !(pinfo->flags & FLAG_ALWAYS) && - all_zero(ptr, size)) { - ptr += size; - continue; - } - if (count == 0) { - if (addtabbed(p, pinfo->name, indent) || - addshort(p, " = %u:", i)) { - return -1; - } - } else { - if (addshort(p, ", %u:", i) != 0) { - return -1; - } - } - if (gen_dump_one(p, pinfo, p2, indent) != 0) { - return -1; - } - ptr += size; - count++; - } - if (count) { - return addstr(p, "\n"); - } - return 0; -} - -/* find a variable by name in a loaded structure and return its value - as an integer. Used to support dynamic arrays */ -static int find_var(const struct parse_struct *pinfo, - const char *data, - const char *var) -{ - int i; - const char *ptr; - - /* this allows for constant lengths */ - if (isdigit(*var)) { - return atoi(var); - } - - for (i=0;pinfo[i].name;i++) { - if (strcmp(pinfo[i].name, var) == 0) break; - } - if (!pinfo[i].name) return -1; - - ptr = data + pinfo[i].offset; - - switch (pinfo[i].size) { - case sizeof(int): - return *(int *)ptr; - case sizeof(char): - return *(char *)ptr; - } - - return -1; -} - - -int gen_dump_struct(const struct parse_struct *pinfo, - struct parse_string *p, - const char *ptr, - unsigned indent) -{ - char *s = gen_dump(pinfo, ptr, indent+1); - if (!s) return -1; - if (addstr(p, "{\n") || - addstr(p,s) || - addtabbed(p,"}", indent)) { - free(s); - return -1; - } - free(s); - return 0; -} - -static int gen_dump_string(struct parse_string *p, - const struct parse_struct *pinfo, - const char *data, - unsigned indent) -{ - const char *ptr = *(char **)data; - char *s = encode_bytes(ptr, strlen(ptr)); - if (addtabbed(p, pinfo->name, indent) || - addstr(p, " = ") || - addchar(p,'{') || - addstr(p, s) || - addstr(p, "}\n")) { - free(s); - return -1; - } - return 0; -} - -/* - find the length of a nullterm array -*/ -static int len_nullterm(const char *ptr, int size, int array_len) -{ - int len; - - if (size == 1) { - len = strnlen(ptr, array_len); - } else { - for (len=0;len 0) { - if (pinfo[i].flags & FLAG_NULLTERM) { - len = len_nullterm(*(char **)ptr, - pinfo[i].size, len); - } - p2.ptr_count--; - p2.dynamic_len = NULL; - if (gen_dump_array(&p, &p2, *(char **)ptr, - len, indent) != 0) { - goto failed; - } - } - continue; - } - - /* don't dump zero elements */ - if (!(pinfo[i].flags & FLAG_ALWAYS) && all_zero(ptr, size)) continue; - - /* assume char* is a null terminated string */ - if (pinfo[i].size == 1 && pinfo[i].ptr_count == 1 && - pinfo[i].dump_fn == gen_dump_char) { - if (gen_dump_string(&p, &pinfo[i], ptr, indent) != 0) { - goto failed; - } - continue; - } - - /* generic pointer dereference */ - if (pinfo[i].ptr_count) { - ptr = *(const char **)ptr; - } - - if (addtabbed(&p, pinfo[i].name, indent) || - addstr(&p, " = ") || - gen_dump_one(&p, &pinfo[i], ptr, indent) || - addstr(&p, "\n")) { - goto failed; - } - } - return p.s; - -failed: - free(p.s); - return NULL; -} - -/* search for a character in a string, skipping over sections within - matching braces */ -static char *match_braces(char *s, char c) -{ - int depth = 0; - while (*s) { - switch (*s) { - case '}': - depth--; - break; - case '{': - depth++; - break; - } - if (depth == 0 && *s == c) { - return s; - } - s++; - } - return s; -} - -/* parse routine for enumerated types */ -int gen_parse_enum(const struct enum_struct *einfo, - char *ptr, - const char *str) -{ - unsigned v; - int i; - - if (isdigit(*str)) { - if (sscanf(str, "%u", &v) != 1) { - errno = EINVAL; - return -1; - } - *(unsigned *)ptr = v; - return 0; - } - - for (i=0;einfo[i].name;i++) { - if (strcmp(einfo[i].name, str) == 0) { - *(unsigned *)ptr = einfo[i].value; - return 0; - } - } - - /* unknown enum value?? */ - return -1; -} - - -/* parse all base types */ -static int gen_parse_base(const struct parse_struct *pinfo, - char *ptr, - const char *str) -{ - if (pinfo->parse_fn == gen_parse_char && pinfo->ptr_count==1) { - unsigned len; - char *s = decode_bytes(str, &len); - if (!s) return -1; - *(char **)ptr = s; - return 0; - } - - if (pinfo->ptr_count) { - struct parse_struct p2 = *pinfo; - *(void **)ptr = calloc(1, pinfo->ptr_count>1?sizeof(void *):pinfo->size); - if (! *(void **)ptr) { - return -1; - } - ptr = *(char **)ptr; - p2.ptr_count--; - return gen_parse_base(&p2, ptr, str); - } - - return pinfo->parse_fn(ptr, str); -} - -/* parse a generic array */ -static int gen_parse_array(const struct parse_struct *pinfo, - char *ptr, - const char *str, - int array_len) -{ - char *p, *p2; - unsigned size = pinfo->size; - - /* special handling of fixed length strings */ - if (array_len != 0 && - pinfo->ptr_count == 0 && - pinfo->dump_fn == gen_dump_char) { - unsigned len = 0; - char *s = decode_bytes(str, &len); - if (!s) return -1; - memset(ptr, 0, array_len); - memcpy(ptr, s, len); - free(s); - return 0; - } - - if (pinfo->ptr_count) { - size = sizeof(void *); - } - - while (*str) { - unsigned idx; - int done; - - idx = atoi(str); - p = strchr(str,':'); - if (!p) break; - p++; - p2 = match_braces(p, ','); - done = (*p2 != ','); - *p2 = 0; - - if (*p == '{') { - p++; - p[strlen(p)-1] = 0; - } - - if (gen_parse_base(pinfo, ptr + idx*size, p) != 0) { - return -1; - } - - if (done) break; - str = p2+1; - } - - return 0; -} - -/* parse one element, hanlding dynamic and static arrays */ -static int gen_parse_one(const struct parse_struct *pinfo, - const char *name, - char *data, - const char *str) -{ - int i; - for (i=0;pinfo[i].name;i++) { - if (strcmp(pinfo[i].name, name) == 0) { - break; - } - } - if (pinfo[i].name == NULL) { - return 0; - } - - if (pinfo[i].array_len) { - return gen_parse_array(&pinfo[i], data+pinfo[i].offset, - str, pinfo[i].array_len); - } - - if (pinfo[i].dynamic_len) { - int len = find_var(pinfo, data, pinfo[i].dynamic_len); - if (len < 0) { - errno = EINVAL; - return -1; - } - if (len > 0) { - unsigned size; - struct parse_struct p2 = pinfo[i]; - char *ptr; - size = pinfo[i].ptr_count>1?sizeof(void*):pinfo[i].size; - ptr = calloc(len, size); - if (!ptr) { - errno = ENOMEM; - return -1; - } - *((char **)(data + pinfo[i].offset)) = ptr; - p2.ptr_count--; - p2.dynamic_len = NULL; - return gen_parse_array(&p2, ptr, str, len); - } - return 0; - } - - return gen_parse_base(&pinfo[i], data + pinfo[i].offset, str); -} - -int gen_parse_struct(const struct parse_struct *pinfo, char *ptr, const char *str) -{ - return gen_parse(pinfo, ptr, str); -} - -/* the main parse routine */ -int gen_parse(const struct parse_struct *pinfo, char *data, const char *s) -{ - char *str, *s0; - - s0 = strdup(s); - str = s0; - - while (*str) { - char *p; - char *name; - char *value; - - /* skip leading whitespace */ - while (isspace(*str)) str++; - - p = strchr(str, '='); - if (!p) break; - value = p+1; - while (p > str && isspace(*(p-1))) { - p--; - } - - *p = 0; - name = str; - - while (isspace(*value)) value++; - - if (*value == '{') { - str = match_braces(value, '}'); - value++; - } else { - str = match_braces(value, '\n'); - } - - *str++ = 0; - - if (gen_parse_one(pinfo, name, data, value) != 0) { - free(s0); - return -1; - } - } - - free(s0); - return 0; -} - - - -/* for convenience supply some standard dumpers and parsers here */ - -int gen_parse_char(char *ptr, const char *str) -{ - *(unsigned char *)ptr = atoi(str); - return 0; -} - -int gen_parse_int(char *ptr, const char *str) -{ - *(int *)ptr = atoi(str); - return 0; -} - -int gen_parse_unsigned(char *ptr, const char *str) -{ - *(unsigned *)ptr = strtoul(str, NULL, 10); - return 0; -} - -int gen_parse_time_t(char *ptr, const char *str) -{ - *(time_t *)ptr = strtoul(str, NULL, 10); - return 0; -} - -int gen_parse_double(char *ptr, const char *str) -{ - *(double *)ptr = atof(str); - return 0; -} - -int gen_parse_float(char *ptr, const char *str) -{ - *(float *)ptr = atof(str); - return 0; -} - -int gen_dump_char(struct parse_string *p, const char *ptr, unsigned indent) -{ - return addshort(p, "%u", *(unsigned char *)(ptr)); -} - -int gen_dump_int(struct parse_string *p, const char *ptr, unsigned indent) -{ - return addshort(p, "%d", *(int *)(ptr)); -} - -int gen_dump_unsigned(struct parse_string *p, const char *ptr, unsigned indent) -{ - return addshort(p, "%u", *(unsigned *)(ptr)); -} - -int gen_dump_time_t(struct parse_string *p, const char *ptr, unsigned indent) -{ - return addshort(p, "%u", *(time_t *)(ptr)); -} - -int gen_dump_double(struct parse_string *p, const char *ptr, unsigned indent) -{ - return addshort(p, "%lg", *(double *)(ptr)); -} - -int gen_dump_float(struct parse_string *p, const char *ptr, unsigned indent) -{ - return addshort(p, "%g", *(float *)(ptr)); -} diff --git a/source/lib/genparser_samba.c b/source/lib/genparser_samba.c deleted file mode 100644 index 6c700d10947..00000000000 --- a/source/lib/genparser_samba.c +++ /dev/null @@ -1,200 +0,0 @@ -/* - Copyright (C) Andrew Tridgell 2002 - Copyright (C) Simo Sorce 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" -#include "genparser_samba.h" - -/* PARSE functions */ - -int gen_parse_uint8(char *ptr, const char *str) -{ - *(uint8 *)ptr = atoi(str); - return 0; -} - -int gen_parse_uint16(char *ptr, const char *str) -{ - *(uint16 *)ptr = atoi(str); - return 0; -} - -int gen_parse_uint32(char *ptr, const char *str) -{ - *(uint32 *)ptr = strtoul(str, NULL, 10); - return 0; -} - -int gen_parse_NTTIME(char *ptr, const char *str) -{ - if(sscanf(str, "%u,%u", &(((NTTIME *)(ptr))->high), &(((NTTIME *)(ptr))->low)) != 2) { - errno = EINVAL; - return -1; - } - return 0; -} - -int gen_parse_DOM_SID(char *ptr, const char *str) -{ - if(!string_to_sid((DOM_SID *)ptr, str)) return -1; - return 0; -} - -int gen_parse_SEC_ACCESS(char *ptr, const char *str) -{ - ((SEC_ACCESS *)ptr)->mask = strtoul(str, NULL, 10); - return 0; -} - -int gen_parse_GUID(char *ptr, const char *str) -{ - int info[GUID_SIZE]; - int i; - char *sc; - char *p; - char *m; - - m = strdup(str); - if (!m) return -1; - sc = m; - - memset(info, 0, sizeof(info)); - for (i = 0; i < GUID_SIZE; i++) { - p = strchr(sc, ','); - if (p != NULL) p = '\0'; - info[i] = atoi(sc); - if (p != NULL) sc = p + 1; - } - free(m); - - for (i = 0; i < GUID_SIZE; i++) { - ((GUID *)ptr)->info[i] = info[i]; - } - - return 0; -} - -int gen_parse_SEC_ACE(char *ptr, const char *str) -{ - return gen_parse_struct(pinfo_security_ace_info, ptr, str); -} - -int gen_parse_SEC_ACL(char *ptr, const char *str) -{ - return gen_parse_struct(pinfo_security_acl_info, ptr, str); -} - -int gen_parse_SEC_DESC(char *ptr, const char *str) -{ - return gen_parse_struct(pinfo_security_descriptor_info, ptr, str); -} - -int gen_parse_LUID_ATTR(char *ptr, const char *str) -{ - return gen_parse_struct(pinfo_luid_attr_info, ptr, str); -} - -int gen_parse_LUID(char *ptr, const char *str) -{ - if(sscanf(str, "%u,%u", &(((LUID *)(ptr))->high), &(((LUID *)(ptr))->low)) != 2) { - errno = EINVAL; - return -1; - } - return 0; -} - - - -/* DUMP functions */ - -int gen_dump_uint8(struct parse_string *p, const char *ptr, unsigned indent) -{ - return addshort(p, "%u", *(uint8 *)(ptr)); -} - -int gen_dump_uint16(struct parse_string *p, const char *ptr, unsigned indent) -{ - return addshort(p, "%u", *(uint16 *)(ptr)); -} - -int gen_dump_uint32(struct parse_string *p, const char *ptr, unsigned indent) -{ - return addshort(p, "%u", *(uint32 *)(ptr)); -} - -int gen_dump_NTTIME(struct parse_string *p, const char *ptr, unsigned indent) -{ - uint32 low, high; - - high = ((NTTIME *)(ptr))->high; - low = ((NTTIME *)(ptr))->low; - return addshort(p, "%u,%u", high, low); -} - -int gen_dump_DOM_SID(struct parse_string *p, const char *ptr, unsigned indent) -{ - fstring sidstr; - - sid_to_string(sidstr, (DOM_SID *)ptr); - return addstr(p, sidstr); -} - -int gen_dump_SEC_ACCESS(struct parse_string *p, const char *ptr, unsigned indent) -{ - return addshort(p, "%u", ((SEC_ACCESS *)ptr)->mask); -} - -int gen_dump_GUID(struct parse_string *p, const char *ptr, unsigned indent) -{ - int i, r; - - for (i = 0; i < (GUID_SIZE - 1); i++) { - if (!(r = addshort(p, "%d,", ((GUID *)ptr)->info[i]))) return r; - } - return addshort(p, "%d", ((GUID *)ptr)->info[i]); -} - -int gen_dump_SEC_ACE(struct parse_string *p, const char *ptr, unsigned indent) -{ - return gen_dump_struct(pinfo_security_ace_info, p, ptr, indent); -} - -int gen_dump_SEC_ACL(struct parse_string *p, const char *ptr, unsigned indent) -{ - return gen_dump_struct(pinfo_security_acl_info, p, ptr, indent); -} - -int gen_dump_SEC_DESC(struct parse_string *p, const char *ptr, unsigned indent) -{ - return gen_dump_struct(pinfo_security_descriptor_info, p, ptr, indent); -} - -int gen_dump_LUID_ATTR(struct parse_string *p, const char *ptr, unsigned indent) -{ - return gen_dump_struct(pinfo_luid_attr_info, p, ptr, indent); -} - -int gen_dump_LUID(struct parse_string *p, const char *ptr, unsigned indent) -{ - uint32 low, high; - - high = ((LUID *)(ptr))->high; - low = ((LUID *)(ptr))->low; - return addshort(p, "%u,%u", high, low); -} - diff --git a/source/lib/iconv.c b/source/lib/iconv.c index 5292e9cf0a6..43350d93492 100644 --- a/source/lib/iconv.c +++ b/source/lib/iconv.c @@ -2,7 +2,6 @@ Unix SMB/CIFS implementation. minimal iconv implementation Copyright (C) Andrew Tridgell 2001 - Copyright (C) Jelmer Vernooij 2002 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 @@ -25,51 +24,31 @@ static size_t ascii_pull(void *,char **, size_t *, char **, size_t *); static size_t ascii_push(void *,char **, size_t *, char **, size_t *); static size_t utf8_pull(void *,char **, size_t *, char **, size_t *); static size_t utf8_push(void *,char **, size_t *, char **, size_t *); +static size_t weird_pull(void *,char **, size_t *, char **, size_t *); +static size_t weird_push(void *,char **, size_t *, char **, size_t *); static size_t ucs2hex_pull(void *,char **, size_t *, char **, size_t *); static size_t ucs2hex_push(void *,char **, size_t *, char **, size_t *); static size_t iconv_copy(void *,char **, size_t *, char **, size_t *); -static struct charset_functions builtin_functions[] = { +/* + for each charset we have a function that pulls from that charset to + a ucs2 buffer, and a function that pushes to a ucs2 buffer +*/ +static struct { + char *name; + size_t (*pull)(void *, char **inbuf, size_t *inbytesleft, + char **outbuf, size_t *outbytesleft); + size_t (*push)(void *, char **inbuf, size_t *inbytesleft, + char **outbuf, size_t *outbytesleft); +} charsets[] = { {"UCS-2LE", iconv_copy, iconv_copy}, {"UTF8", utf8_pull, utf8_push}, {"ASCII", ascii_pull, ascii_push}, + {"WEIRD", weird_pull, weird_push}, {"UCS2-HEX", ucs2hex_pull, ucs2hex_push}, {NULL, NULL, NULL} }; -static struct charset_functions *charsets = NULL; - -BOOL smb_register_charset(struct charset_functions *funcs) -{ - struct charset_functions *c = charsets; - - DEBUG(5, ("Attempting to register new charset %s\n", funcs->name)); - /* Check whether we already have this charset... */ - while(c) { - if(!strcasecmp(c->name, funcs->name)){ - DEBUG(2, ("Duplicate charset %s, not registering\n", funcs->name)); - return False; - } - c = c->next; - } - - funcs->next = funcs->prev = NULL; - DEBUG(5, ("Registered charset %s\n", funcs->name)); - DLIST_ADD(charsets, funcs); - return True; -} - -void lazy_initialize_iconv(void) -{ - static BOOL initialized = False; - int i; - - if (!initialized) { - initialized = True; - for(i = 0; builtin_functions[i].name; i++) - smb_register_charset(&builtin_functions[i]); - } -} /* if there was an error then reset the internal state, this ensures that we don't have a shift state remaining for @@ -136,11 +115,7 @@ size_t smb_iconv(smb_iconv_t cd, smb_iconv_t smb_iconv_open(const char *tocode, const char *fromcode) { smb_iconv_t ret; - struct charset_functions *from, *to; - - lazy_initialize_iconv(); - from = charsets; - to = charsets; + int from, to; ret = (smb_iconv_t)malloc(sizeof(*ret)); if (!ret) { @@ -158,52 +133,48 @@ smb_iconv_t smb_iconv_open(const char *tocode, const char *fromcode) return ret; } - while (from) { - if (strcasecmp(from->name, fromcode) == 0) break; - from = from->next; + for (from=0; charsets[from].name; from++) { + if (strcasecmp(charsets[from].name, fromcode) == 0) break; } - - while (to) { - if (strcasecmp(to->name, tocode) == 0) break; - to = to->next; + for (to=0; charsets[to].name; to++) { + if (strcasecmp(charsets[to].name, tocode) == 0) break; } #ifdef HAVE_NATIVE_ICONV - if (!from) { + if (!charsets[from].name) { ret->pull = sys_iconv; ret->cd_pull = iconv_open("UCS-2LE", fromcode); if (ret->cd_pull == (iconv_t)-1) goto failed; } - - if (!to) { + if (!charsets[to].name) { ret->push = sys_iconv; ret->cd_push = iconv_open(tocode, "UCS-2LE"); if (ret->cd_push == (iconv_t)-1) goto failed; } #else - if (!from || !to) { + if (!charsets[from].name || !charsets[to].name) { goto failed; } #endif /* check for conversion to/from ucs2 */ - if (strcasecmp(fromcode, "UCS-2LE") == 0 && to) { - ret->direct = to->push; + if (from == 0 && charsets[to].name) { + ret->direct = charsets[to].push; return ret; } - if (strcasecmp(tocode, "UCS-2LE") == 0 && from) { - ret->direct = from->pull; + if (to == 0 && charsets[from].name) { + ret->direct = charsets[from].pull; return ret; } #ifdef HAVE_NATIVE_ICONV - if (strcasecmp(fromcode, "UCS-2LE") == 0) { + if (from == 0) { ret->direct = sys_iconv; ret->cd_direct = ret->cd_push; ret->cd_push = NULL; return ret; } - if (strcasecmp(tocode, "UCS-2LE") == 0) { + if (to == 0) { ret->direct = sys_iconv; ret->cd_direct = ret->cd_pull; ret->cd_pull = NULL; @@ -212,8 +183,8 @@ smb_iconv_t smb_iconv_open(const char *tocode, const char *fromcode) #endif /* the general case has to go via a buffer */ - if (!ret->pull) ret->pull = from->pull; - if (!ret->push) ret->push = to->push; + if (!ret->pull) ret->pull = charsets[from].pull; + if (!ret->push) ret->push = charsets[to].push; return ret; failed: @@ -381,6 +352,111 @@ static size_t ucs2hex_push(void *cd, char **inbuf, size_t *inbytesleft, } +/* the "weird" character set is very useful for testing multi-byte + support and finding bugs. Don't use on a production system! +*/ +static struct { + char from; + char *to; + int len; +} weird_table[] = { + {'q', "^q^", 3}, + {'Q', "^Q^", 3}, + {0, NULL} +}; + +static size_t weird_pull(void *cd, char **inbuf, size_t *inbytesleft, + char **outbuf, size_t *outbytesleft) +{ + while (*inbytesleft >= 1 && *outbytesleft >= 2) { + int i; + int done = 0; + for (i=0;weird_table[i].from;i++) { + if (strncmp((*inbuf), + weird_table[i].to, + weird_table[i].len) == 0) { + if (*inbytesleft < weird_table[i].len) { + DEBUG(0,("ERROR: truncated weird string\n")); + /* smb_panic("weird_pull"); */ + + } else { + (*outbuf)[0] = weird_table[i].from; + (*outbuf)[1] = 0; + (*inbytesleft) -= weird_table[i].len; + (*outbytesleft) -= 2; + (*inbuf) += weird_table[i].len; + (*outbuf) += 2; + done = 1; + break; + } + } + } + if (done) continue; + (*outbuf)[0] = (*inbuf)[0]; + (*outbuf)[1] = 0; + (*inbytesleft) -= 1; + (*outbytesleft) -= 2; + (*inbuf) += 1; + (*outbuf) += 2; + } + + if (*inbytesleft > 0) { + errno = E2BIG; + return -1; + } + + return 0; +} + +static size_t weird_push(void *cd, char **inbuf, size_t *inbytesleft, + char **outbuf, size_t *outbytesleft) +{ + int ir_count=0; + + while (*inbytesleft >= 2 && *outbytesleft >= 1) { + int i; + int done=0; + for (i=0;weird_table[i].from;i++) { + if ((*inbuf)[0] == weird_table[i].from && + (*inbuf)[1] == 0) { + if (*outbytesleft < weird_table[i].len) { + DEBUG(0,("No room for weird character\n")); + /* smb_panic("weird_push"); */ + } else { + memcpy(*outbuf, weird_table[i].to, + weird_table[i].len); + (*inbytesleft) -= 2; + (*outbytesleft) -= weird_table[i].len; + (*inbuf) += 2; + (*outbuf) += weird_table[i].len; + done = 1; + break; + } + } + } + if (done) continue; + + (*outbuf)[0] = (*inbuf)[0]; + if ((*inbuf)[1]) ir_count++; + (*inbytesleft) -= 2; + (*outbytesleft) -= 1; + (*inbuf) += 2; + (*outbuf) += 1; + } + + if (*inbytesleft == 1) { + errno = EINVAL; + return -1; + } + + if (*inbytesleft > 1) { + errno = E2BIG; + return -1; + } + + return ir_count; +} + static size_t iconv_copy(void *cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft) { diff --git a/source/lib/util.c b/source/lib/util.c index 13f5b177817..d13d993da7c 100644 --- a/source/lib/util.c +++ b/source/lib/util.c @@ -4,7 +4,6 @@ Copyright (C) Andrew Tridgell 1992-1998 Copyright (C) Jeremy Allison 2001-2002 Copyright (C) Simo Sorce 2001 - Copyright (C) Anthony Liguori 2003 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 @@ -249,7 +248,13 @@ BOOL init_names(void) int n; if (global_myname() == NULL || *global_myname() == '\0') { - if (!set_global_myname(myhostname())) { + fstring name; + + fstrcpy( name, myhostname() ); + p = strchr( name, '.' ); + if (p) + *p = 0; + if (!set_global_myname(name)) { DEBUG( 0, ( "init_structs: malloc fail.\n" ) ); return False; } @@ -1008,7 +1013,7 @@ BOOL get_myfullname(char *my_name) Get my own domain name. ****************************************************************************/ -BOOL get_mydomname(fstring my_domname) +BOOL get_mydomname(char *my_domname) { pstring hostname; char *p; @@ -1723,23 +1728,6 @@ BOOL is_myname_or_ipaddr(const char *s) return False; } -/******************************************************************* - Is the name specified our workgroup/domain. - Returns true if it is equal, false otherwise. -********************************************************************/ - -BOOL is_myworkgroup(const char *s) -{ - BOOL ret = False; - - if (strequal(s, lp_workgroup())) { - ret=True; - } - - DEBUG(8, ("is_myworkgroup(\"%s\") returns %d\n", s, ret)); - return(ret); -} - /******************************************************************* Set the horrid remote_arch string based on an enum. ********************************************************************/ @@ -2194,17 +2182,6 @@ char *lib_path(const char *name) return fname; } -/** - * @brief Returns the platform specific shared library extension. - * - * @retval Pointer to a static #fstring containing the extension. - **/ - -const char *shlib_ext(void) -{ - return dyn_SHLIBEXT; -} - /******************************************************************* Given a filename - get its directory name NB: Returned in static storage. Caveats: diff --git a/source/lib/util_str.c b/source/lib/util_str.c index 3c34df6f339..2a9ee0a868e 100644 --- a/source/lib/util_str.c +++ b/source/lib/util_str.c @@ -1593,7 +1593,7 @@ char * base64_encode_data_blob(DATA_BLOB data) { int bits = 0; int char_count = 0; - int out_cnt = 0; + size_t out_cnt = 0; size_t len = data.length; size_t output_len = data.length * 2; char *result = malloc(output_len); /* get us plenty of space */ diff --git a/source/libads/ads_ldap.c b/source/libads/ads_ldap.c index 97f12de0f7f..05b016539e2 100644 --- a/source/libads/ads_ldap.c +++ b/source/libads/ads_ldap.c @@ -37,16 +37,9 @@ NTSTATUS ads_name_to_sid(ADS_STRUCT *ads, char *exp; uint32 t; NTSTATUS status = NT_STATUS_UNSUCCESSFUL; - char *escaped_name = escape_ldap_string_alloc(name); - char *escaped_realm = escape_ldap_string_alloc(ads->config.realm); - - if (!escaped_name || !escaped_realm) { - status = NT_STATUS_NO_MEMORY; - goto done; - } if (asprintf(&exp, "(|(sAMAccountName=%s)(userPrincipalName=%s@%s))", - escaped_name, escaped_name, escaped_realm) == -1) { + name, name, ads->config.realm) == -1) { DEBUG(1,("ads_name_to_sid: asprintf failed!\n")); status = NT_STATUS_NO_MEMORY; goto done; @@ -84,9 +77,6 @@ NTSTATUS ads_name_to_sid(ADS_STRUCT *ads, done: if (res) ads_msgfree(ads, res); - SAFE_FREE(escaped_name); - SAFE_FREE(escaped_realm); - return status; } diff --git a/source/libads/ads_utils.c b/source/libads/ads_utils.c index 626c1779266..750940e336b 100644 --- a/source/libads/ads_utils.c +++ b/source/libads/ads_utils.c @@ -88,52 +88,6 @@ uint32 ads_uf2atype(uint32 uf) return atype; } -/* -translated the GROUP_CTRL Flags to GroupType (groupType) -*/ -uint32 ads_gcb2gtype(uint16 gcb) -{ - uint32 gtype = 0x00000000; - - if (gcb & GCB_ALIAS_GROUP) gtype |= GTYPE_SECURITY_BUILTIN_LOCAL_GROUP; - else if(gcb & GCB_LOCAL_GROUP) gtype |= GTYPE_SECURITY_DOMAIN_LOCAL_GROUP; - if (gcb & GCB_GLOBAL_GROUP) gtype |= GTYPE_SECURITY_GLOBAL_GROUP; - - return gtype; -} - -/* -translated the GroupType (groupType) to GROUP_CTRL Flags -*/ -uint16 ads_gtype2gcb(uint32 gtype) -{ - uint16 gcb = 0x0000; - - switch(gtype) { - case GTYPE_SECURITY_BUILTIN_LOCAL_GROUP: - gcb = GCB_ALIAS_GROUP; - break; - case GTYPE_SECURITY_DOMAIN_LOCAL_GROUP: - gcb = GCB_LOCAL_GROUP; - break; - case GTYPE_SECURITY_GLOBAL_GROUP: - gcb = GCB_GLOBAL_GROUP; - break; - - case GTYPE_DISTRIBUTION_GLOBAL_GROUP: - gcb = GCB_GLOBAL_GROUP; - break; - case GTYPE_DISTRIBUTION_DOMAIN_LOCAL_GROUP: - gcb = GCB_LOCAL_GROUP; - break; - case GTYPE_DISTRIBUTION_UNIVERSAL_GROUP: - gcb = GCB_GLOBAL_GROUP; - break; - } - - return gcb; -} - /* get the accountType from the groupType */ diff --git a/source/libads/kerberos_verify.c b/source/libads/kerberos_verify.c index c1402b13700..268326fca94 100644 --- a/source/libads/kerberos_verify.c +++ b/source/libads/kerberos_verify.c @@ -36,17 +36,13 @@ NTSTATUS ads_verify_ticket(ADS_STRUCT *ads, const DATA_BLOB *ticket, krb5_keytab keytab = NULL; krb5_data packet; krb5_ticket *tkt = NULL; - krb5_data salt; - krb5_encrypt_block eblock; - int ret, i; + int ret; krb5_keyblock * key; krb5_principal host_princ; char *host_princ_s; fstring myname; char *password_s; krb5_data password; - krb5_enctype *enctypes = NULL; - BOOL auth_ok = False; if (!secrets_init()) { DEBUG(1,("secrets_init failed\n")); @@ -71,6 +67,7 @@ NTSTATUS ads_verify_ticket(ADS_STRUCT *ads, const DATA_BLOB *ticket, ret = krb5_set_default_realm(context, ads->auth.realm); if (ret) { DEBUG(1,("krb5_set_default_realm failed (%s)\n", error_message(ret))); + ads_destroy(&ads); return NT_STATUS_LOGON_FAILURE; } @@ -92,59 +89,32 @@ NTSTATUS ads_verify_ticket(ADS_STRUCT *ads, const DATA_BLOB *ticket, return NT_STATUS_LOGON_FAILURE; } - ret = krb5_principal2salt(context, host_princ, &salt); - if (ret) { - DEBUG(1,("krb5_principal2salt failed (%s)\n", error_message(ret))); - return NT_STATUS_LOGON_FAILURE; - } - if (!(key = (krb5_keyblock *)malloc(sizeof(*key)))) { return NT_STATUS_NO_MEMORY; } - if ((ret = krb5_get_permitted_enctypes(context, &enctypes))) { - DEBUG(1,("krb5_get_permitted_enctypes failed (%s)\n", - error_message(ret))); + if (create_kerberos_key_from_string(context, host_princ, &password, key)) { + SAFE_FREE(key); return NT_STATUS_LOGON_FAILURE; } + + krb5_auth_con_setuseruserkey(context, auth_context, key); - /* we need to setup a auth context with each possible encoding type in turn */ - for (i=0;enctypes[i];i++) { - krb5_use_enctype(context, &eblock, enctypes[i]); - - ret = krb5_string_to_key(context, &eblock, key, &password, &salt); - if (ret) { - continue; - } - - krb5_auth_con_setuseruserkey(context, auth_context, key); - - packet.length = ticket->length; - packet.data = (krb5_pointer)ticket->data; + packet.length = ticket->length; + packet.data = (krb5_pointer)ticket->data; - if (!(ret = krb5_rd_req(context, &auth_context, &packet, - NULL, keytab, NULL, &tkt))) { - krb5_free_ktypes(context, enctypes); - auth_ok = True; - break; - } - } +#if 0 + file_save("/tmp/ticket.dat", ticket->data, ticket->length); +#endif - if (!auth_ok) { + if ((ret = krb5_rd_req(context, &auth_context, &packet, + NULL, keytab, NULL, &tkt))) { DEBUG(3,("krb5_rd_req with auth failed (%s)\n", error_message(ret))); return NT_STATUS_LOGON_FAILURE; } -#if 0 - file_save("/tmp/ticket.dat", ticket->data, ticket->length); -#endif - - - if (tkt->enc_part2) { - *auth_data = data_blob(tkt->enc_part2->authorization_data[0]->contents, - tkt->enc_part2->authorization_data[0]->length); - } + get_auth_data_from_tkt(auth_data, tkt); #if 0 if (tkt->enc_part2) { @@ -154,7 +124,7 @@ NTSTATUS ads_verify_ticket(ADS_STRUCT *ads, const DATA_BLOB *ticket, } #endif - if ((ret = krb5_unparse_name(context, tkt->enc_part2->client, principal))) { + if ((ret = krb5_unparse_name(context, get_principal_from_tkt(tkt), principal))) { DEBUG(3,("krb5_unparse_name failed (%s)\n", error_message(ret))); return NT_STATUS_LOGON_FAILURE; diff --git a/source/libads/ldap.c b/source/libads/ldap.c index 603f17c9948..0a95e019bfb 100644 --- a/source/libads/ldap.c +++ b/source/libads/ldap.c @@ -974,7 +974,7 @@ ADS_STATUS ads_gen_add(ADS_STRUCT *ads, const char *new_dn, ADS_MODLIST mods) /* make sure the end of the list is NULL */ mods[i] = NULL; - ret = ldap_add_s(ads->ld, utf8_dn, mods); + ret = ldap_add_s(ads->ld, utf8_dn ? utf8_dn : new_dn, mods); SAFE_FREE(utf8_dn); return ADS_ERROR(ret); } @@ -994,7 +994,7 @@ ADS_STATUS ads_del_dn(ADS_STRUCT *ads, char *del_dn) return ADS_ERROR_NT(NT_STATUS_NO_MEMORY); } - ret = ldap_delete(ads->ld, utf8_dn); + ret = ldap_delete(ads->ld, utf8_dn ? utf8_dn : del_dn); return ADS_ERROR(ret); } @@ -1029,8 +1029,8 @@ static ADS_STATUS ads_add_machine_acct(ADS_STRUCT *ads, const char *hostname, ADS_MODLIST mods; const char *objectClass[] = {"top", "person", "organizationalPerson", "user", "computer", NULL}; - const char *servicePrincipalName[5] = {NULL, NULL, NULL, NULL, NULL}; - char *psp, *psp2; + const char *servicePrincipalName[3] = {NULL, NULL, NULL}; + char *psp; unsigned acct_control; if (!(ctx = talloc_init("machine_account"))) @@ -1051,16 +1051,10 @@ static ADS_STATUS ads_add_machine_acct(ADS_STRUCT *ads, const char *hostname, ads->config.bind_path); servicePrincipalName[0] = talloc_asprintf(ctx, "HOST/%s", hostname); psp = talloc_asprintf(ctx, "HOST/%s.%s", - hostname, - ads->config.realm); + hostname, + ads->config.realm); strlower(&psp[5]); servicePrincipalName[1] = psp; - servicePrincipalName[2] = talloc_asprintf(ctx, "CIFS/%s", hostname); - psp2 = talloc_asprintf(ctx, "CIFS/%s.%s", - hostname, - ads->config.realm); - strlower(&psp2[5]); - servicePrincipalName[3] = psp2; free(ou_str); if (!new_dn) @@ -1411,7 +1405,6 @@ ADS_STATUS ads_set_machine_sd(ADS_STRUCT *ads, const char *hostname, char *dn) size_t sd_size = 0; struct berval bval = {0, NULL}; prs_struct ps_wire; - char *escaped_hostname = escape_ldap_string_alloc(hostname); LDAPMessage *res = 0; LDAPMessage *msg = 0; @@ -1427,18 +1420,11 @@ ADS_STATUS ads_set_machine_sd(ADS_STRUCT *ads, const char *hostname, char *dn) ret = ADS_ERROR(LDAP_SUCCESS); - if (!escaped_hostname) { - return ADS_ERROR_NT(NT_STATUS_NO_MEMORY); - } - - if (asprintf(&exp, "(samAccountName=%s$)", escaped_hostname) == -1) { + if (asprintf(&exp, "(samAccountName=%s$)", hostname) == -1) { DEBUG(1, ("ads_set_machine_sd: asprintf failed!\n")); - SAFE_FREE(escaped_hostname); return ADS_ERROR_NT(NT_STATUS_NO_MEMORY); } - SAFE_FREE(escaped_hostname); - ret = ads_search(ads, (void *) &res, exp, attrs); if (!ADS_ERR_OK(ret)) return ret; diff --git a/source/libads/ldap_user.c b/source/libads/ldap_user.c index 7efe5338f37..2e38e7a00d1 100644 --- a/source/libads/ldap_user.c +++ b/source/libads/ldap_user.c @@ -30,15 +30,10 @@ ADS_STATUS ads_find_user_acct(ADS_STRUCT *ads, void **res, const char *user) ADS_STATUS status; char *exp; const char *attrs[] = {"*", NULL}; - char *escaped_user = escape_ldap_string_alloc(user); - if (!escaped_user) { - return ADS_ERROR(LDAP_NO_MEMORY); - } - asprintf(&exp, "(samAccountName=%s)", escaped_user); + asprintf(&exp, "(samAccountName=%s)", user); status = ads_search(ads, res, exp, attrs); - SAFE_FREE(exp); - SAFE_FREE(escaped_user); + free(exp); return status; } diff --git a/source/modules/developer.c b/source/modules/developer.c deleted file mode 100644 index c12bbc562ad..00000000000 --- a/source/modules/developer.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Samba module with developer tools - Copyright (C) Andrew Tridgell 2001 - Copyright (C) Jelmer Vernooij 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -static struct { - char from; - char *to; - int len; -} weird_table[] = { - {'q', "^q^", 3}, - {'Q', "^Q^", 3}, - {0, NULL} -}; - -static size_t weird_pull(void *cd, char **inbuf, size_t *inbytesleft, - char **outbuf, size_t *outbytesleft) -{ - while (*inbytesleft >= 1 && *outbytesleft >= 2) { - int i; - int done = 0; - for (i=0;weird_table[i].from;i++) { - if (strncmp((*inbuf), - weird_table[i].to, - weird_table[i].len) == 0) { - if (*inbytesleft < weird_table[i].len) { - DEBUG(0,("ERROR: truncated weird string\n")); - /* smb_panic("weird_pull"); */ - - } else { - (*outbuf)[0] = weird_table[i].from; - (*outbuf)[1] = 0; - (*inbytesleft) -= weird_table[i].len; - (*outbytesleft) -= 2; - (*inbuf) += weird_table[i].len; - (*outbuf) += 2; - done = 1; - break; - } - } - } - if (done) continue; - (*outbuf)[0] = (*inbuf)[0]; - (*outbuf)[1] = 0; - (*inbytesleft) -= 1; - (*outbytesleft) -= 2; - (*inbuf) += 1; - (*outbuf) += 2; - } - - if (*inbytesleft > 0) { - errno = E2BIG; - return -1; - } - - return 0; -} - -static size_t weird_push(void *cd, char **inbuf, size_t *inbytesleft, - char **outbuf, size_t *outbytesleft) -{ - int ir_count=0; - - while (*inbytesleft >= 2 && *outbytesleft >= 1) { - int i; - int done=0; - for (i=0;weird_table[i].from;i++) { - if ((*inbuf)[0] == weird_table[i].from && - (*inbuf)[1] == 0) { - if (*outbytesleft < weird_table[i].len) { - DEBUG(0,("No room for weird character\n")); - /* smb_panic("weird_push"); */ - } else { - memcpy(*outbuf, weird_table[i].to, - weird_table[i].len); - (*inbytesleft) -= 2; - (*outbytesleft) -= weird_table[i].len; - (*inbuf) += 2; - (*outbuf) += weird_table[i].len; - done = 1; - break; - } - } - } - if (done) continue; - - (*outbuf)[0] = (*inbuf)[0]; - if ((*inbuf)[1]) ir_count++; - (*inbytesleft) -= 2; - (*outbytesleft) -= 1; - (*inbuf) += 2; - (*outbuf) += 1; - } - - if (*inbytesleft == 1) { - errno = EINVAL; - return -1; - } - - if (*inbytesleft > 1) { - errno = E2BIG; - return -1; - } - - return ir_count; -} - -struct charset_functions weird_functions = {"WEIRD", weird_pull, weird_push}; - -int init_module(void) -{ - smb_register_charset(&weird_functions); - return 0; -} diff --git a/source/modules/vfs_fake_perms.c b/source/modules/vfs_fake_perms.c deleted file mode 100644 index 7fbf27e9078..00000000000 --- a/source/modules/vfs_fake_perms.c +++ /dev/null @@ -1,471 +0,0 @@ -/* - * Fake Perms VFS module. Implements passthrough operation of all VFS - * calls to disk functions, except for file permissions, which are now - * mode 0700 for the current uid/gid. - * - * Copyright (C) Tim Potter, 1999-2000 - * Copyright (C) Alexander Bokovoy, 2002 - * Copyright (C) Andrew Bartlett, 2002 - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "config.h" - -#include -#include -#ifdef HAVE_UTIME_H -#include -#endif -#ifdef HAVE_DIRENT_H -#include -#endif -#ifdef HAVE_FCNTL_H -#include -#endif -#include -#include - -#include -#include - -static struct vfs_ops default_vfs_ops; /* For passthrough operation */ -static struct smb_vfs_handle_struct *fake_perms_handle; /* use fake_perms_handle->data for storing per-instance private data */ - -static int fake_perms_connect(struct connection_struct *conn, const char *service, const char *user) -{ - return default_vfs_ops.connect(conn, service, user); -} - -static void fake_perms_disconnect(struct connection_struct *conn) -{ - default_vfs_ops.disconnect(conn); -} - -static SMB_BIG_UINT fake_perms_disk_free(struct connection_struct *conn, const char *path, - BOOL small_query, SMB_BIG_UINT *bsize, - SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize) -{ - return default_vfs_ops.disk_free(conn, path, small_query, bsize, - dfree, dsize); -} - -static DIR *fake_perms_opendir(struct connection_struct *conn, const char *fname) -{ - return default_vfs_ops.opendir(conn, fname); -} - -static struct dirent *fake_perms_readdir(struct connection_struct *conn, DIR *dirp) -{ - return default_vfs_ops.readdir(conn, dirp); -} - -static int fake_perms_mkdir(struct connection_struct *conn, const char *path, mode_t mode) -{ - return default_vfs_ops.mkdir(conn, path, mode); -} - -static int fake_perms_rmdir(struct connection_struct *conn, const char *path) -{ - return default_vfs_ops.rmdir(conn, path); -} - -static int fake_perms_closedir(struct connection_struct *conn, DIR *dir) -{ - return default_vfs_ops.closedir(conn, dir); -} - -static int fake_perms_open(struct connection_struct *conn, const char *fname, int flags, mode_t mode) -{ - return default_vfs_ops.open(conn, fname, flags, mode); -} - -static int fake_perms_close(struct files_struct *fsp, int fd) -{ - return default_vfs_ops.close(fsp, fd); -} - -static ssize_t fake_perms_read(struct files_struct *fsp, int fd, void *data, size_t n) -{ - return default_vfs_ops.read(fsp, fd, data, n); -} - -static ssize_t fake_perms_write(struct files_struct *fsp, int fd, const void *data, size_t n) -{ - return default_vfs_ops.write(fsp, fd, data, n); -} - -static SMB_OFF_T fake_perms_lseek(struct files_struct *fsp, int filedes, SMB_OFF_T offset, int whence) -{ - return default_vfs_ops.lseek(fsp, filedes, offset, whence); -} - -static int fake_perms_rename(struct connection_struct *conn, const char *old, const char *new) -{ - return default_vfs_ops.rename(conn, old, new); -} - -static int fake_perms_fsync(struct files_struct *fsp, int fd) -{ - return default_vfs_ops.fsync(fsp, fd); -} - -static int fake_perms_stat(struct connection_struct *conn, const char *fname, SMB_STRUCT_STAT *sbuf) -{ - int ret = default_vfs_ops.stat(conn, fname, sbuf); - extern struct current_user current_user; - - if (S_ISDIR(sbuf->st_mode)) { - sbuf->st_mode = S_IFDIR | S_IRWXU; - } else { - sbuf->st_mode = S_IRWXU; - } - sbuf->st_uid = current_user.uid; - sbuf->st_gid = current_user.gid; - return ret; -} - -static int fake_perms_fstat(struct files_struct *fsp, int fd, SMB_STRUCT_STAT *sbuf) -{ - return default_vfs_ops.fstat(fsp, fd, sbuf); -} - -static int fake_perms_lstat(struct connection_struct *conn, const char *path, SMB_STRUCT_STAT *sbuf) -{ - return default_vfs_ops.lstat(conn, path, sbuf); -} - -static int fake_perms_unlink(struct connection_struct *conn, const char *path) -{ - return default_vfs_ops.unlink(conn, path); -} - -static int fake_perms_chmod(struct connection_struct *conn, const char *path, mode_t mode) -{ - return default_vfs_ops.chmod(conn, path, mode); -} - -static int fake_perms_fchmod(struct files_struct *fsp, int fd, mode_t mode) -{ - return default_vfs_ops.fchmod(fsp, fd, mode); -} - -static int fake_perms_chown(struct connection_struct *conn, const char *path, uid_t uid, gid_t gid) -{ - return default_vfs_ops.chown(conn, path, uid, gid); -} - -static int fake_perms_fchown(struct files_struct *fsp, int fd, uid_t uid, gid_t gid) -{ - return default_vfs_ops.fchown(fsp, fd, uid, gid); -} - -static int fake_perms_chdir(struct connection_struct *conn, const char *path) -{ - return default_vfs_ops.chdir(conn, path); -} - -static char *fake_perms_getwd(struct connection_struct *conn, char *buf) -{ - return default_vfs_ops.getwd(conn, buf); -} - -static int fake_perms_utime(struct connection_struct *conn, const char *path, struct utimbuf *times) -{ - return default_vfs_ops.utime(conn, path, times); -} - -static int fake_perms_ftruncate(struct files_struct *fsp, int fd, SMB_OFF_T offset) -{ - return default_vfs_ops.ftruncate(fsp, fd, offset); -} - -static BOOL fake_perms_lock(struct files_struct *fsp, int fd, int op, SMB_OFF_T offset, SMB_OFF_T count, int type) -{ - return default_vfs_ops.lock(fsp, fd, op, offset, count, type); -} - -static BOOL fake_perms_symlink(struct connection_struct *conn, const char *oldpath, const char *newpath) -{ - return default_vfs_ops.symlink(conn, oldpath, newpath); -} - -static BOOL fake_perms_readlink(struct connection_struct *conn, const char *path, char *buf, size_t bufsiz) -{ - return default_vfs_ops.readlink(conn, path, buf, bufsiz); -} - -static int fake_perms_link(struct connection_struct *conn, const char *oldpath, const char *newpath) -{ - return default_vfs_ops.link(conn, oldpath, newpath); -} - -static int fake_perms_mknod(struct connection_struct *conn, const char *path, mode_t mode, SMB_DEV_T dev) -{ - return default_vfs_ops.mknod(conn, path, mode, dev); -} - -static char *fake_perms_realpath(struct connection_struct *conn, const char *path, char *resolved_path) -{ - return default_vfs_ops.realpath(conn, path, resolved_path); -} - -static size_t fake_perms_fget_nt_acl(struct files_struct *fsp, int fd, struct security_descriptor_info **ppdesc) -{ - return default_vfs_ops.fget_nt_acl(fsp, fd, ppdesc); -} - -static size_t fake_perms_get_nt_acl(struct files_struct *fsp, const char *name, struct security_descriptor_info **ppdesc) -{ - return default_vfs_ops.get_nt_acl(fsp, name, ppdesc); -} - -static BOOL fake_perms_fset_nt_acl(struct files_struct *fsp, int fd, uint32 security_info_sent, struct security_descriptor_info *psd) -{ - return default_vfs_ops.fset_nt_acl(fsp, fd, security_info_sent, psd); -} - -static BOOL fake_perms_set_nt_acl(struct files_struct *fsp, const char *name, uint32 security_info_sent, struct security_descriptor_info *psd) -{ - return default_vfs_ops.set_nt_acl(fsp, name, security_info_sent, psd); -} - -static BOOL fake_perms_chmod_acl(struct connection_struct *conn, const char *name, mode_t mode) -{ - return default_vfs_ops.chmod_acl(conn, name, mode); -} - -static BOOL fake_perms_fchmod_acl(struct files_struct *fsp, int fd, mode_t mode) -{ - return default_vfs_ops.fchmod_acl(fsp, fd, mode); -} - -static int fake_perms_sys_acl_get_entry(struct connection_struct *conn, SMB_ACL_T theacl, int entry_id, SMB_ACL_ENTRY_T *entry_p) -{ - return default_vfs_ops.sys_acl_get_entry(conn, theacl, entry_id, entry_p); -} - -static int fake_perms_sys_acl_get_tag_type(struct connection_struct *conn, SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T *tag_type_p) -{ - return default_vfs_ops.sys_acl_get_tag_type(conn, entry_d, tag_type_p); -} - -static int fake_perms_sys_acl_get_permset(struct connection_struct *conn, SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T *permset_p) -{ - return default_vfs_ops.sys_acl_get_permset(conn, entry_d, permset_p); -} - -static void *fake_perms_sys_acl_get_qualifier(struct connection_struct *conn, SMB_ACL_ENTRY_T entry_d) -{ - return default_vfs_ops.sys_acl_get_qualifier(conn, entry_d); -} - -static SMB_ACL_T fake_perms_sys_acl_get_file(struct connection_struct *conn, const char *path_p, SMB_ACL_TYPE_T type) -{ - return default_vfs_ops.sys_acl_get_file(conn, path_p, type); -} - -static SMB_ACL_T fake_perms_sys_acl_get_fd(struct files_struct *fsp, int fd) -{ - return default_vfs_ops.sys_acl_get_fd(fsp, fd); -} - -static int fake_perms_sys_acl_clear_perms(struct connection_struct *conn, SMB_ACL_PERMSET_T permset) -{ - return default_vfs_ops.sys_acl_clear_perms(conn, permset); -} - -static int fake_perms_sys_acl_add_perm(struct connection_struct *conn, SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm) -{ - return default_vfs_ops.sys_acl_add_perm(conn, permset, perm); -} - -static char *fake_perms_sys_acl_to_text(struct connection_struct *conn, SMB_ACL_T theacl, ssize_t *plen) -{ - return default_vfs_ops.sys_acl_to_text(conn, theacl, plen); -} - -static SMB_ACL_T fake_perms_sys_acl_init(struct connection_struct *conn, int count) -{ - return default_vfs_ops.sys_acl_init(conn, count); -} - -static int fake_perms_sys_acl_create_entry(struct connection_struct *conn, SMB_ACL_T *pacl, SMB_ACL_ENTRY_T *pentry) -{ - return default_vfs_ops.sys_acl_create_entry(conn, pacl, pentry); -} - -static int fake_perms_sys_acl_set_tag_type(struct connection_struct *conn, SMB_ACL_ENTRY_T entry, SMB_ACL_TAG_T tagtype) -{ - return default_vfs_ops.sys_acl_set_tag_type(conn, entry, tagtype); -} - -static int fake_perms_sys_acl_set_qualifier(struct connection_struct *conn, SMB_ACL_ENTRY_T entry, void *qual) -{ - return default_vfs_ops.sys_acl_set_qualifier(conn, entry, qual); -} - -static int fake_perms_sys_acl_set_permset(struct connection_struct *conn, SMB_ACL_ENTRY_T entry, SMB_ACL_PERMSET_T permset) -{ - return default_vfs_ops.sys_acl_set_permset(conn, entry, permset); -} - -static int fake_perms_sys_acl_valid(struct connection_struct *conn, SMB_ACL_T theacl ) -{ - return default_vfs_ops.sys_acl_valid(conn, theacl ); -} - -static int fake_perms_sys_acl_set_file(struct connection_struct *conn, const char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl) -{ - return default_vfs_ops.sys_acl_set_file(conn, name, acltype, theacl); -} - -static int fake_perms_sys_acl_set_fd(struct files_struct *fsp, int fd, SMB_ACL_T theacl) -{ - return default_vfs_ops.sys_acl_set_fd(fsp, fd, theacl); -} - -static int fake_perms_sys_acl_delete_def_file(struct connection_struct *conn, const char *path) -{ - return default_vfs_ops.sys_acl_delete_def_file(conn, path); -} - -static int fake_perms_sys_acl_get_perm(struct connection_struct *conn, SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm) -{ - return default_vfs_ops.sys_acl_get_perm(conn, permset, perm); -} - -static int fake_perms_sys_acl_free_text(struct connection_struct *conn, char *text) -{ - return default_vfs_ops.sys_acl_free_text(conn, text); -} - -static int fake_perms_sys_acl_free_acl(struct connection_struct *conn, SMB_ACL_T posix_acl) -{ - return default_vfs_ops.sys_acl_free_acl(conn, posix_acl); -} - -static int fake_perms_sys_acl_free_qualifier(struct connection_struct *conn, void *qualifier, SMB_ACL_TAG_T tagtype) -{ - return default_vfs_ops.sys_acl_free_qualifier(conn, qualifier, tagtype); -} - - -/* VFS operations structure */ - -static vfs_op_tuple fake_perms_ops[] = { - - /* Disk operations */ - - {fake_perms_connect, SMB_VFS_OP_CONNECT, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_disconnect, SMB_VFS_OP_DISCONNECT, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_disk_free, SMB_VFS_OP_DISK_FREE, SMB_VFS_LAYER_TRANSPARENT}, - - /* Directory operations */ - - {fake_perms_opendir, SMB_VFS_OP_OPENDIR, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_readdir, SMB_VFS_OP_READDIR, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_mkdir, SMB_VFS_OP_MKDIR, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_rmdir, SMB_VFS_OP_RMDIR, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_closedir, SMB_VFS_OP_CLOSEDIR, SMB_VFS_LAYER_TRANSPARENT}, - - /* File operations */ - - {fake_perms_open, SMB_VFS_OP_OPEN, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_close, SMB_VFS_OP_CLOSE, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_read, SMB_VFS_OP_READ, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_write, SMB_VFS_OP_WRITE, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_lseek, SMB_VFS_OP_LSEEK, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_rename, SMB_VFS_OP_RENAME, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_fsync, SMB_VFS_OP_FSYNC, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_stat, SMB_VFS_OP_STAT, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_fstat, SMB_VFS_OP_FSTAT, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_lstat, SMB_VFS_OP_LSTAT, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_unlink, SMB_VFS_OP_UNLINK, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_chmod, SMB_VFS_OP_CHMOD, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_fchmod, SMB_VFS_OP_FCHMOD, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_chown, SMB_VFS_OP_CHOWN, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_fchown, SMB_VFS_OP_FCHOWN, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_chdir, SMB_VFS_OP_CHDIR, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_getwd, SMB_VFS_OP_GETWD, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_utime, SMB_VFS_OP_UTIME, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_ftruncate, SMB_VFS_OP_FTRUNCATE, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_lock, SMB_VFS_OP_LOCK, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_symlink, SMB_VFS_OP_SYMLINK, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_readlink, SMB_VFS_OP_READLINK, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_link, SMB_VFS_OP_LINK, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_mknod, SMB_VFS_OP_MKNOD, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_realpath, SMB_VFS_OP_REALPATH, SMB_VFS_LAYER_TRANSPARENT}, - - /* NT File ACL operations */ - - {fake_perms_fget_nt_acl, SMB_VFS_OP_FGET_NT_ACL, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_get_nt_acl, SMB_VFS_OP_GET_NT_ACL, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_fset_nt_acl, SMB_VFS_OP_FSET_NT_ACL, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_set_nt_acl, SMB_VFS_OP_SET_NT_ACL, SMB_VFS_LAYER_TRANSPARENT}, - - /* POSIX ACL operations */ - - {fake_perms_chmod_acl, SMB_VFS_OP_CHMOD_ACL, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_fchmod_acl, SMB_VFS_OP_FCHMOD_ACL, SMB_VFS_LAYER_TRANSPARENT}, - - {fake_perms_sys_acl_get_entry, SMB_VFS_OP_SYS_ACL_GET_ENTRY, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_get_tag_type, SMB_VFS_OP_SYS_ACL_GET_TAG_TYPE, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_get_permset, SMB_VFS_OP_SYS_ACL_GET_PERMSET, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_get_qualifier, SMB_VFS_OP_SYS_ACL_GET_QUALIFIER, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_get_file, SMB_VFS_OP_SYS_ACL_GET_FILE, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_get_fd, SMB_VFS_OP_SYS_ACL_GET_FD, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_clear_perms, SMB_VFS_OP_SYS_ACL_CLEAR_PERMS, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_add_perm, SMB_VFS_OP_SYS_ACL_ADD_PERM, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_to_text, SMB_VFS_OP_SYS_ACL_TO_TEXT, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_init, SMB_VFS_OP_SYS_ACL_INIT, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_create_entry, SMB_VFS_OP_SYS_ACL_CREATE_ENTRY, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_set_tag_type, SMB_VFS_OP_SYS_ACL_SET_TAG_TYPE, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_set_qualifier, SMB_VFS_OP_SYS_ACL_SET_QUALIFIER, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_set_permset, SMB_VFS_OP_SYS_ACL_SET_PERMSET, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_valid, SMB_VFS_OP_SYS_ACL_VALID, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_set_file, SMB_VFS_OP_SYS_ACL_SET_FILE, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_set_fd, SMB_VFS_OP_SYS_ACL_SET_FD, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_delete_def_file, SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_get_perm, SMB_VFS_OP_SYS_ACL_GET_PERM, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_free_text, SMB_VFS_OP_SYS_ACL_FREE_TEXT, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_free_acl, SMB_VFS_OP_SYS_ACL_FREE_ACL, SMB_VFS_LAYER_TRANSPARENT}, - {fake_perms_sys_acl_free_qualifier, SMB_VFS_OP_SYS_ACL_FREE_QUALIFIER, SMB_VFS_LAYER_TRANSPARENT}, - - {NULL, SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} -}; - -/* VFS initialisation - return initialized vfs_op_tuple array back to Samba */ - -vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops, - struct smb_vfs_handle_struct *vfs_handle) -{ - DEBUG(3, ("Initialising default vfs hooks\n")); - - *vfs_version = SMB_VFS_INTERFACE_VERSION; - memcpy(&default_vfs_ops, def_vfs_ops, sizeof(struct vfs_ops)); - - /* Remember vfs_handle for further allocation and referencing of private - information in vfs_handle->data - */ - fake_perms_handle = vfs_handle; - return fake_perms_ops; -} - -/* VFS finalization function */ -void vfs_done(connection_struct *conn) -{ - DEBUG(3, ("Finalizing default vfs hooks\n")); -} diff --git a/source/modules/vfs_recycle.c b/source/modules/vfs_recycle.c index dcd83b7acdf..eedb65cd9d1 100644 --- a/source/modules/vfs_recycle.c +++ b/source/modules/vfs_recycle.c @@ -37,7 +37,7 @@ static const char *delimiter = "|"; /* delimiter for options */ typedef struct recycle_bin_struct { - TALLOC_CTX *mem_ctx; + TALLOC_CTX *ctx; char *repository; /* name of the recycle bin directory */ BOOL keep_dir_tree; /* keep directory structure of deleted file in recycle bin */ BOOL versions; /* create versions of deleted files with identical name */ @@ -48,19 +48,6 @@ typedef struct recycle_bin_struct SMB_OFF_T maxsize; /* maximum file size to be saved */ } recycle_bin_struct; -typedef struct recycle_bin_connections { - int conn; - recycle_bin_struct *data; - struct recycle_bin_connections *next; -} recycle_bin_connections; - -typedef struct recycle_bin_private_data { - TALLOC_CTX *mem_ctx; - recycle_bin_connections *conns; -} recycle_bin_private_data; - -struct smb_vfs_handle_struct *recycle_bin_private_handle; - /* VFS operations */ static struct vfs_ops default_vfs_ops; /* For passthrough operation */ @@ -82,6 +69,16 @@ static vfs_op_tuple recycle_ops[] = { {NULL, SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} }; +static BOOL check_bool_param(const char *value) +{ + if (strwicmp(value, "yes") == 0 || + strwicmp(value, "true") == 0 || + strwicmp(value, "1") == 0) + return True; + + return False; +} + /** * VFS initialisation function. * @@ -90,8 +87,6 @@ static vfs_op_tuple recycle_ops[] = { vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops, struct smb_vfs_handle_struct *vfs_handle) { - TALLOC_CTX *mem_ctx = NULL; - DEBUG(10, ("Initializing VFS module recycle\n")); *vfs_version = SMB_VFS_INTERFACE_VERSION; memcpy(&default_vfs_ops, def_vfs_ops, sizeof(struct vfs_ops)); @@ -103,20 +98,6 @@ vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops, DEBUG(0, ("vfs_recycle: Debug class number of 'vfs_recycle': %d\n", vfs_recycle_debug_level)); } - recycle_bin_private_handle = vfs_handle; - if (!(mem_ctx = talloc_init("recycle bin data"))) { - DEBUG(0, ("Failed to allocate memory in VFS module recycle_bin\n")); - return NULL; - } - - recycle_bin_private_handle->data = talloc(mem_ctx, sizeof(recycle_bin_private_data)); - if (recycle_bin_private_handle->data == NULL) { - DEBUG(0, ("Failed to allocate memory in VFS module recycle_bin\n")); - return NULL; - } - ((recycle_bin_private_data *)(recycle_bin_private_handle->data))->mem_ctx = mem_ctx; - ((recycle_bin_private_data *)(recycle_bin_private_handle->data))->conns = NULL; - return recycle_ops; } @@ -124,67 +105,34 @@ vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops, * VFS finalization function. * **/ -void vfs_done(void) +void vfs_done(connection_struct *conn) { - recycle_bin_private_data *recdata; - recycle_bin_connections *recconn; - - DEBUG(10, ("Unloading/Cleaning VFS module recycle bin\n")); - - if (recycle_bin_private_handle) - recdata = (recycle_bin_private_data *)(recycle_bin_private_handle->data); - else { - DEBUG(0, ("Recycle bin not initialized!\n")); - return; - } - - if (recdata) { - if (recdata->conns) { - recconn = recdata->conns; - while (recconn) { - talloc_destroy(recconn->data->mem_ctx); - recconn = recconn->next; - } - } - if (recdata->mem_ctx) { - talloc_destroy(recdata->mem_ctx); - } - recdata = NULL; - } + DEBUG(10,("Called for connection %d\n", SNUM(conn))); } static int recycle_connect(struct connection_struct *conn, const char *service, const char *user) { TALLOC_CTX *ctx = NULL; recycle_bin_struct *recbin; - recycle_bin_connections *recconn; - recycle_bin_connections *recconnbase; - recycle_bin_private_data *recdata; + char *servicename; char *tmp_str; DEBUG(10, ("Called for service %s (%d) as user %s\n", service, SNUM(conn), user)); - if (recycle_bin_private_handle) - recdata = (recycle_bin_private_data *)(recycle_bin_private_handle->data); - else { - DEBUG(0, ("Recycle bin not initialized!\n")); - return -1; - } - - if (!(ctx = talloc_init("recycle bin connection"))) { + if (!(ctx = talloc_init("recycle bin"))) { DEBUG(0, ("Failed to allocate memory in VFS module recycle_bin\n")); - return -1; + return 0; } - recbin = talloc(ctx, sizeof(recycle_bin_struct)); - if (recbin == NULL) { + recbin = talloc(ctx,sizeof(recycle_bin_struct)); + if ( recbin == NULL) { DEBUG(0, ("Failed to allocate memory in VFS module recycle_bin\n")); return -1; } - recbin->mem_ctx = ctx; + recbin->ctx = ctx; /* Set defaults */ - recbin->repository = talloc_strdup(recbin->mem_ctx, ".recycle"); + recbin->repository = talloc_strdup(ctx, ".recycle"); ALLOC_CHECK(recbin->repository, error); recbin->keep_dir_tree = False; recbin->versions = False; @@ -195,61 +143,55 @@ static int recycle_connect(struct connection_struct *conn, const char *service, recbin->maxsize = 0; /* parse configuration options */ - if ((tmp_str = lp_parm_string(SNUM(conn), "vfs_recycle_bin", "repository")) != NULL) { - recbin->repository = talloc_sub_conn(recbin->mem_ctx, conn, tmp_str); + servicename = talloc_strdup(recbin->ctx, lp_servicename(SNUM(conn))); + DEBUG(10, ("servicename = %s\n",servicename)); + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "repository")) != NULL) { + recbin->repository = talloc_sub_conn(ctx, conn, tmp_str); ALLOC_CHECK(recbin->repository, error); trim_string(recbin->repository, "/", "/"); DEBUG(5, ("recycle.bin: repository = %s\n", recbin->repository)); } - - recbin->keep_dir_tree = lp_parm_bool(SNUM(conn), "vfs_recycle_bin", "keeptree"); - DEBUG(5, ("recycle.bin: keeptree = %d\n", recbin->keep_dir_tree)); - - recbin->versions = lp_parm_bool(SNUM(conn), "vfs_recycle_bin", "versions"); - DEBUG(5, ("recycle.bin: versions = %d\n", recbin->versions)); - - recbin->touch = lp_parm_bool(SNUM(conn), "vfs_recycle_bin", "touch"); - DEBUG(5, ("recycle.bin: touch = %d\n", recbin->touch)); - - recbin->maxsize = lp_parm_ulong(SNUM(conn), "vfs_recycle_bin", "maxsize"); - if (recbin->maxsize == 0) { - recbin->maxsize = -1; - DEBUG(5, ("recycle.bin: maxsize = -infinite-\n")); - } else { - DEBUG(5, ("recycle.bin: maxsize = %ld\n", (long int)recbin->maxsize)); + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "keeptree")) != NULL) { + if (check_bool_param(tmp_str) == True) + recbin->keep_dir_tree = True; + DEBUG(5, ("recycle.bin: keeptree = %s\n", tmp_str)); + } + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "versions")) != NULL) { + if (check_bool_param(tmp_str) == True) + recbin->versions = True; + DEBUG(5, ("recycle.bin: versions = %s\n", tmp_str)); + } + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "touch")) != NULL) { + if (check_bool_param(tmp_str) == True) + recbin->touch = True; + DEBUG(5, ("recycle.bin: touch = %s\n", tmp_str)); + } + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "maxsize")) != NULL) { + recbin->maxsize = strtoul(tmp_str, NULL, 10); + if (recbin->maxsize == 0) { + recbin->maxsize = -1; + DEBUG(5, ("recycle.bin: maxsize = -infinite-\n")); + } else { + DEBUG(5, ("recycle.bin: maxsize = %ld\n", (long int)recbin->maxsize)); + } } - - if ((tmp_str = lp_parm_string(SNUM(conn), "vfs_recycle_bin", "exclude")) != NULL) { - recbin->exclude = talloc_strdup(recbin->mem_ctx, tmp_str); + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "exclude")) != NULL) { + recbin->exclude = talloc_strdup(ctx, tmp_str); ALLOC_CHECK(recbin->exclude, error); DEBUG(5, ("recycle.bin: exclude = %s\n", recbin->exclude)); } - if ((tmp_str = lp_parm_string(SNUM(conn), "vfs_recycle_bin", "exclude_dir")) != NULL) { - recbin->exclude_dir = talloc_strdup(recbin->mem_ctx, tmp_str); + if ((tmp_str = lp_parm_string(servicename,"vfs_recycle_bin", "exclude_dir")) != NULL) { + recbin->exclude_dir = talloc_strdup(ctx, tmp_str); ALLOC_CHECK(recbin->exclude_dir, error); DEBUG(5, ("recycle.bin: exclude_dir = %s\n", recbin->exclude_dir)); } - if ((tmp_str = lp_parm_string(SNUM(conn), "vfs_recycle_bin", "noversions")) != NULL) { - recbin->noversions = talloc_strdup(recbin->mem_ctx, tmp_str); + if ((tmp_str = lp_parm_string(servicename,"vfs_recycle_bin", "noversions")) != NULL) { + recbin->noversions = talloc_strdup(ctx, tmp_str); ALLOC_CHECK(recbin->noversions, error); DEBUG(5, ("recycle.bin: noversions = %s\n", recbin->noversions)); } - recconn = talloc(recdata->mem_ctx, sizeof(recycle_bin_connections)); - if (recconn == NULL) { - DEBUG(0, ("Failed to allocate memory in VFS module recycle_bin\n")); - goto error; - } - recconn->conn = SNUM(conn); - recconn->data = recbin; - recconn->next = NULL; - if (recdata->conns) { - recconnbase = recdata->conns; - while (recconnbase->next != NULL) recconnbase = recconnbase->next; - recconnbase->next = recconn; - } else { - recdata->conns = recconn; - } + conn->vfs_private = (void *)recbin; return default_vfs_ops.connect(conn, service, user); error: @@ -259,35 +201,10 @@ error: static void recycle_disconnect(struct connection_struct *conn) { - recycle_bin_private_data *recdata; - recycle_bin_connections *recconn; - DEBUG(10, ("Disconnecting VFS module recycle bin\n")); - - if (recycle_bin_private_handle) - recdata = (recycle_bin_private_data *)(recycle_bin_private_handle->data); - else { - DEBUG(0, ("Recycle bin not initialized!\n")); - return; - } - - if (recdata) { - if (recdata->conns) { - if (recdata->conns->conn == SNUM(conn)) { - talloc_destroy(recdata->conns->data->mem_ctx); - recdata->conns = recdata->conns->next; - } else { - recconn = recdata->conns; - while (recconn->next) { - if (recconn->next->conn == SNUM(conn)) { - talloc_destroy(recconn->next->data->mem_ctx); - recconn->next = recconn->next->next; - break; - } - recconn = recconn->next; - } - } - } + if (conn->vfs_private) { + talloc_destroy(((recycle_bin_struct *)conn->vfs_private)->ctx); + conn->vfs_private = NULL; } default_vfs_ops.disconnect(conn); } @@ -474,8 +391,6 @@ static void recycle_touch(connection_struct *conn, const char *fname) **/ static int recycle_unlink(connection_struct *conn, const char *inname) { - recycle_bin_private_data *recdata; - recycle_bin_connections *recconn; recycle_bin_struct *recbin; char *file_name = NULL; char *path_name = NULL; @@ -483,28 +398,17 @@ static int recycle_unlink(connection_struct *conn, const char *inname) char *final_name = NULL; char *base; int i; -/* SMB_BIG_UINT dfree, dsize, bsize; */ - SMB_OFF_T file_size; /* space_avail; */ + SMB_BIG_UINT dfree, dsize, bsize; + SMB_OFF_T file_size, space_avail; BOOL exist; int rc = -1; file_name = strdup(inname); ALLOC_CHECK(file_name, done); - recbin = NULL; - if (recycle_bin_private_handle) { - recdata = (recycle_bin_private_data *)(recycle_bin_private_handle->data); - if (recdata) { - if (recdata->conns) { - recconn = recdata->conns; - while (recconn && recconn->conn != SNUM(conn)) recconn = recconn->next; - if (recconn != NULL) { - recbin = recconn->data; - } - } - } - } - if (recbin == NULL) { + if (conn->vfs_private) + recbin = (recycle_bin_struct *)conn->vfs_private; + else { DEBUG(0, ("Recycle bin not initialized!\n")); rc = default_vfs_ops.unlink(conn, file_name); goto done; diff --git a/source/nsswitch/winbindd.c b/source/nsswitch/winbindd.c index c99bb39f7d5..b70a4dd3b40 100644 --- a/source/nsswitch/winbindd.c +++ b/source/nsswitch/winbindd.c @@ -902,7 +902,6 @@ static void usage(void) process_loop(); - trustdom_cache_shutdown(); uni_group_cache_shutdown(); return 0; } diff --git a/source/nsswitch/winbindd_ads.c b/source/nsswitch/winbindd_ads.c index 7cea4aa716e..261c2f2237a 100644 --- a/source/nsswitch/winbindd_ads.c +++ b/source/nsswitch/winbindd_ads.c @@ -346,17 +346,10 @@ static BOOL dn_lookup(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, ADS_STATUS rc; uint32 atype; DOM_SID sid; - char *escaped_dn = escape_ldap_string_alloc(dn); - - if (!escaped_dn) { - return False; - } asprintf(&exp, "(distinguishedName=%s)", dn); rc = ads_search_retry(ads, &res, exp, attrs); - SAFE_FREE(exp); - SAFE_FREE(escaped_dn); - + free(exp); if (!ADS_ERR_OK(rc)) { goto failed; } diff --git a/source/nsswitch/winbindd_util.c b/source/nsswitch/winbindd_util.c index 6d39df9c0ad..7a5fa3be209 100644 --- a/source/nsswitch/winbindd_util.c +++ b/source/nsswitch/winbindd_util.c @@ -178,7 +178,7 @@ void rescan_trusted_domains(void) int i; result = domain->methods->trusted_domains(domain, mem_ctx, &num_domains, - &names, &alt_names, &dom_sids); + &names, &alt_names, &dom_sids); if (!NT_STATUS_IS_OK(result)) { continue; } @@ -187,12 +187,9 @@ void rescan_trusted_domains(void) the access methods of its parent */ for(i = 0; i < num_domains; i++) { DEBUG(10,("Found domain %s\n", names[i])); - add_trusted_domain(names[i], alt_names?alt_names[i]:NULL, - domain->methods, &dom_sids[i]); - - /* store trusted domain in the cache */ - trustdom_cache_store(names[i], alt_names ? alt_names[i] : NULL, - &dom_sids[i], t + WINBINDD_RESCAN_FREQ); + add_trusted_domain(names[i], + alt_names?alt_names[i]:NULL, + domain->methods, &dom_sids[i]); } } diff --git a/source/param/loadparm.c b/source/param/loadparm.c index 73456bbd113..1455f881569 100644 --- a/source/param/loadparm.c +++ b/source/param/loadparm.c @@ -81,13 +81,6 @@ extern int extra_time_offset; static BOOL defaults_saved = False; -typedef struct _param_opt_struct param_opt_struct; -struct _param_opt_struct { - param_opt_struct *prev, *next; - char *key; - char *value; -}; - /* * This structure describes global (ie., server-wide) parameters. */ @@ -118,8 +111,6 @@ typedef struct char *szSMBPasswdFile; char *szPrivateDir; char **szPassdbBackend; - char **szSamBackend; - char **szModules; char *szPasswordServer; char *szSocketOptions; char *szRealm; @@ -278,7 +269,6 @@ typedef struct BOOL bKernelChangeNotify; int restrict_anonymous; int name_cache_timeout; - param_opt_struct *param_opt; } global; @@ -400,7 +390,6 @@ typedef struct BOOL bNTAclSupport; BOOL bUseSendfile; BOOL bProfileAcls; - param_opt_struct *param_opt; char dummy[3]; /* for alignment */ } @@ -520,8 +509,6 @@ static service sDefault = { True, /* bNTAclSupport */ False, /* bUseSendfile */ False, /* bProfileAcls */ - - NULL, /* Parametric options */ "" /* dummy */ }; @@ -751,8 +738,7 @@ static struct parm_struct parm_table[] = { {"password server", P_STRING, P_GLOBAL, &Globals.szPasswordServer, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, {"smb passwd file", P_STRING, P_GLOBAL, &Globals.szSMBPasswdFile, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"private dir", P_STRING, P_GLOBAL, &Globals.szPrivateDir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"passdb backend", P_LIST, P_GLOBAL, &Globals.szPassdbBackend, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"sam backend", P_LIST, P_GLOBAL, &Globals.szSamBackend, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"passdb backend", P_LIST, P_GLOBAL, &Globals.szPassdbBackend, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, {"non unix account range", P_STRING, P_GLOBAL, &Globals.szNonUnixAccountRange, handle_non_unix_account_range, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"algorithmic rid base", P_INTEGER, P_GLOBAL, &Globals.bAlgorithmicRidBase, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"root directory", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, @@ -814,7 +800,6 @@ static struct parm_struct parm_table[] = { {"allow hosts", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, FLAG_HIDE}, {"hosts deny", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER}, {"deny hosts", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_HIDE}, - {"modules", P_LIST, P_GLOBAL, &Globals.szModules, NULL, NULL, FLAG_BASIC | FLAG_GLOBAL}, {"Logging Options", P_SEP, P_SEPARATOR}, @@ -1592,8 +1577,6 @@ FN_GLOBAL_STRING(lp_nis_home_map_name, &Globals.szNISHomeMapName) static FN_GLOBAL_STRING(lp_announce_version, &Globals.szAnnounceVersion) FN_GLOBAL_LIST(lp_netbios_aliases, &Globals.szNetbiosAliases) FN_GLOBAL_LIST(lp_passdb_backend, &Globals.szPassdbBackend) -FN_GLOBAL_LIST(lp_sam_backend, &Globals.szSamBackend) -FN_GLOBAL_LIST(lp_modules, &Globals.szModules) FN_GLOBAL_STRING(lp_panic_action, &Globals.szPanicAction) FN_GLOBAL_STRING(lp_adduser_script, &Globals.szAddUserScript) FN_GLOBAL_STRING(lp_deluser_script, &Globals.szDelUserScript) @@ -1828,6 +1811,49 @@ FN_GLOBAL_BOOL(lp_hide_local_users, &Globals.bHideLocalUsers) FN_GLOBAL_BOOL(lp_algorithmic_rid_base, &Globals.bAlgorithmicRidBase) FN_GLOBAL_INTEGER(lp_name_cache_timeout, &Globals.name_cache_timeout) +typedef struct _param_opt_struct param_opt_struct; +struct _param_opt_struct { + char *key; + char *value; + param_opt_struct *prev, *next; +}; + +static param_opt_struct *param_opt = NULL; + +/* Return parametric option from given service. Type is a part of option before ':' */ +/* Parametric option has following syntax: 'Type: option = value' */ +/* Returned value is allocated in 'lp_talloc' context */ + +char *lp_parm_string(const char *servicename, const char *type, const char *option) +{ + param_opt_struct *data; + pstring vfskey; + + if (param_opt != NULL) { + ZERO_STRUCT(vfskey); + pstr_sprintf(vfskey, "%s:%s:%s", (servicename==NULL) ? "global" : servicename, + type, option); + data = param_opt; + while (data) { + if (strcmp(data->key, vfskey) == 0) { + return lp_string(data->value); + } + data = data->next; + } + /* Try to fetch the same option but from globals */ + pstr_sprintf(vfskey, "global:%s:%s", type, option); + data = param_opt; + while (data) { + if (strcmp(data->key, vfskey) == 0) { + return lp_string(data->value); + } + data = data->next; + } + + } + return NULL; +} + /* local prototypes */ static int map_parameter(const char *pszParmName); @@ -1841,198 +1867,6 @@ static BOOL do_parameter(const char *pszParmName, const char *pszParmValue); static BOOL do_section(const char *pszSectionName); static void init_copymap(service * pservice); -/* This is a helper function for parametrical options support. */ -/* It returns a pointer to parametrical option value if it exists or NULL otherwise */ -/* Actual parametrical functions are quite simple */ -static const char *get_parametrics(int lookup_service, const char *type, const char *option) -{ - char* vfskey; - param_opt_struct *data; - - if (lookup_service >= iNumServices) return NULL; - - data = (lookup_service < 0) ? - Globals.param_opt : ServicePtrs[lookup_service]->param_opt; - - asprintf(&vfskey, "%s:%s", type, option); - while (data) { - if (strcmp(data->key, vfskey) == 0) { - string_free(&vfskey); - return data->value; - } - data = data->next; - } - - if (lookup_service >= 0) { - /* Try to fetch the same option but from globals */ - /* but only if we are not already working with Globals */ - data = Globals.param_opt; - while (data) { - if (strcmp(data->key, vfskey) == 0) { - string_free(&vfskey); - return data->value; - } - data = data->next; - } - } - - string_free(&vfskey); - - return NULL; -} - - -/******************************************************************* -convenience routine to return int parameters. -********************************************************************/ -static int lp_int(const char *s) -{ - - if (!s) { - DEBUG(0,("lp_int(%s): is called with NULL!\n",s)); - return (-1); - } - - return atoi(s); -} - -/******************************************************************* -convenience routine to return unsigned long parameters. -********************************************************************/ -static int lp_ulong(const char *s) -{ - - if (!s) { - DEBUG(0,("lp_int(%s): is called with NULL!\n",s)); - return (-1); - } - - return strtoul(s, NULL, 10); -} - -/******************************************************************* -convenience routine to return boolean parameters. -********************************************************************/ -static BOOL lp_bool(const char *s) -{ - BOOL ret = False; - - if (!s) { - DEBUG(0,("lp_bool(%s): is called with NULL!\n",s)); - return False; - } - - if (!set_boolean(&ret,s)) { - DEBUG(0,("lp_bool(%s): value is not boolean!\n",s)); - return False; - } - - return ret; -} - -/******************************************************************* -convenience routine to return enum parameters. -********************************************************************/ -static int lp_enum(const char *s,const struct enum_list *_enum) -{ - int i; - - if (!s || !_enum) { - DEBUG(0,("lp_enum(%s,enum): is called with NULL!\n",s)); - return False; - } - - for (i=0; _enum[i].name; i++) { - if (strcasecmp(_enum[i].name,s)==0) - return _enum[i].value; - } - - DEBUG(0,("lp_enum(%s,enum): value is not in enum_list!\n",s)); - return (-1); -} - -/* Return parametric option from a given service. Type is a part of option before ':' */ -/* Parametric option has following syntax: 'Type: option = value' */ -/* Returned value is allocated in 'lp_talloc' context */ - -char *lp_parm_string(int lookup_service, const char *type, const char *option) -{ - const char *value = get_parametrics(lookup_service, type, option); - - if (value) - return lp_string(value); - - return NULL; -} - -/* Return parametric option from a given service. Type is a part of option before ':' */ -/* Parametric option has following syntax: 'Type: option = value' */ -/* Returned value is allocated in 'lp_talloc' context */ - -char **lp_parm_string_list(int lookup_service, const char *type, const char *option, - const char *separator) -{ - const char *value = get_parametrics(lookup_service, type, option); - - if (value) - return str_list_make(value, separator); - - return NULL; -} - -/* Return parametric option from a given service. Type is a part of option before ':' */ -/* Parametric option has following syntax: 'Type: option = value' */ - -int lp_parm_int(int lookup_service, const char *type, const char *option) -{ - const char *value = get_parametrics(lookup_service, type, option); - - if (value) - return lp_int(value); - - return (-1); -} - -/* Return parametric option from a given service. Type is a part of option before ':' */ -/* Parametric option has following syntax: 'Type: option = value' */ - -unsigned long lp_parm_ulong(int lookup_service, const char *type, const char *option) -{ - const char *value = get_parametrics(lookup_service, type, option); - - if (value) - return lp_ulong(value); - - return (0); -} - -/* Return parametric option from a given service. Type is a part of option before ':' */ -/* Parametric option has following syntax: 'Type: option = value' */ - -BOOL lp_parm_bool(int lookup_service, const char *type, const char *option) -{ - const char *value = get_parametrics(lookup_service, type, option); - - if (value) - return lp_bool(value); - - return False; -} - -/* Return parametric option from a given service. Type is a part of option before ':' */ -/* Parametric option has following syntax: 'Type: option = value' */ - -int lp_parm_enum(int lookup_service, const char *type, const char *option, - const struct enum_list *_enum) -{ - const char *value = get_parametrics(lookup_service, type, option); - - if (value) - return lp_enum(value, _enum); - - return (-1); -} - /*************************************************************************** Initialise a service to the defaults. @@ -2051,7 +1885,6 @@ static void init_service(service * pservice) static void free_service(service *pservice) { int i; - param_opt_struct *data, *pdata; if (!pservice) return; @@ -2076,16 +1909,6 @@ static void free_service(service *pservice) PTR_DIFF(parm_table[i].ptr, &sDefault))); } - DEBUG(5,("Freeing parametrics:\n")); - data = pservice->param_opt; - while (data) { - DEBUG(5,("[%s = %s]\n", data->key, data->value)); - string_free(&data->key); - string_free(&data->value); - pdata = data->next; - SAFE_FREE(data); - data = pdata; - } ZERO_STRUCTP(pservice); } @@ -2100,27 +1923,14 @@ static int add_a_service(const service *pservice, const char *name) int i; service tservice; int num_to_alloc = iNumServices + 1; - param_opt_struct *data, *pdata; tservice = *pservice; /* it might already exist */ if (name) { i = getservicebyname(name, NULL); - if (i >= 0) { - /* Clean all parametric options for service */ - /* They will be added during parsing again */ - data = ServicePtrs[i]->param_opt; - while (data) { - string_free(&data->key); - string_free(&data->value); - pdata = data->next; - SAFE_FREE(data); - data = pdata; - } - ServicePtrs[i]->param_opt = NULL; + if (i >= 0) return (i); - } } /* find an invalid one */ @@ -2363,8 +2173,6 @@ static void copy_service(service * pserviceDest, service * pserviceSource, BOOL { int i; BOOL bcopyall = (pcopymapDest == NULL); - param_opt_struct *data, *pdata, *paramo; - BOOL not_added; for (i = 0; parm_table[i].label; i++) if (parm_table[i].ptr && parm_table[i].class == P_LOCAL && @@ -2418,30 +2226,6 @@ static void copy_service(service * pserviceDest, service * pserviceSource, BOOL (void *)pserviceSource->copymap, sizeof(BOOL) * NUMPARAMETERS); } - - data = pserviceSource->param_opt; - while (data) { - not_added = True; - pdata = pserviceDest->param_opt; - /* Traverse destination */ - while (pdata) { - /* If we already have same option, override it */ - if (strcmp(pdata->key, data->key) == 0) { - string_free(&pdata->value); - pdata->value = strdup(data->value); - not_added = False; - break; - } - pdata = pdata->next; - } - if (not_added) { - paramo = smb_xmalloc(sizeof(param_opt_struct)); - paramo->key = strdup(data->key); - paramo->value = strdup(data->value); - DLIST_ADD(pserviceDest->param_opt, paramo); - } - data = data->next; - } } /*************************************************************************** @@ -3056,8 +2840,7 @@ BOOL lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue void *def_ptr = NULL; pstring vfskey; char *sep; - param_opt_struct *paramo, *data; - BOOL not_added; + param_opt_struct *paramo; parmnum = map_parameter(pszParmName); @@ -3065,35 +2848,15 @@ BOOL lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue if ((sep=strchr(pszParmName, ':')) != NULL) { *sep = 0; ZERO_STRUCT(vfskey); - pstr_sprintf(vfskey, "%s:", pszParmName); + pstr_sprintf(vfskey, "%s:%s:", + (snum >= 0) ? lp_servicename(snum) : "global", pszParmName); slen = strlen(vfskey); safe_strcat(vfskey, sep+1, sizeof(pstring)); trim_string(vfskey+slen, " ", " "); - not_added = True; - data = (snum < 0) ? Globals.param_opt : - ServicePtrs[snum]->param_opt; - /* Traverse destination */ - while (data) { - /* If we already have same option, override it */ - if (strcmp(data->key, vfskey) == 0) { - string_free(&data->value); - data->value = strdup(pszParmValue); - not_added = False; - break; - } - data = data->next; - } - if (not_added) { - paramo = smb_xmalloc(sizeof(param_opt_struct)); - paramo->key = strdup(vfskey); - paramo->value = strdup(pszParmValue); - if (snum < 0) { - DLIST_ADD(Globals.param_opt, paramo); - } else { - DLIST_ADD(ServicePtrs[snum]->param_opt, paramo); - } - } - + paramo = smb_xmalloc(sizeof(param_opt_struct)); + paramo->key = strdup(vfskey); + paramo->value = strdup(pszParmValue); + DLIST_ADD(param_opt, paramo); *sep = ':'; return (True); } @@ -3442,6 +3205,7 @@ static void dump_globals(FILE *f) { int i; param_opt_struct *data; + char *s; fprintf(f, "# Global parameters\n[global]\n"); @@ -3455,11 +3219,14 @@ static void dump_globals(FILE *f) print_parameter(&parm_table[i], parm_table[i].ptr, f); fprintf(f, "\n"); } - if (Globals.param_opt != NULL) { - data = Globals.param_opt; + if (param_opt != NULL) { + data = param_opt; while(data) { - fprintf(f, "\t%s = %s\n", data->key, data->value); - data = data->next; + if (((s=strstr(data->key, "global")) == data->key) && + (*(s+strlen("global")) == ':')) { + fprintf(f, "\t%s = %s\n", s+strlen("global")+1, data->value); + } + data = data->next; } } @@ -3486,6 +3253,7 @@ static void dump_a_service(service * pService, FILE * f) { int i; param_opt_struct *data; + char *s, *sn; if (pService != &sDefault) fprintf(f, "\n[%s]\n", pService->szService); @@ -3514,11 +3282,15 @@ static void dump_a_service(service * pService, FILE * f) ((char *)pService) + pdiff, f); fprintf(f, "\n"); } - if (pService->param_opt != NULL) { - data = pService->param_opt; + if (param_opt != NULL) { + data = param_opt; + sn = (pService == &sDefault) ? "global" : pService->szService; while(data) { - fprintf(f, "\t%s = %s\n", data->key, data->value); - data = data->next; + if (((s=strstr(data->key, sn)) == data->key) && + (*(s+strlen(sn)) == ':')) { + fprintf(f, "\t%s = %s\n", s+strlen(sn)+1, data->value); + } + data = data->next; } } } @@ -3853,16 +3625,16 @@ BOOL lp_load(const char *pszFname, BOOL global_only, BOOL save_defaults, lp_save_defaults(); } - if (Globals.param_opt != NULL) { - data = Globals.param_opt; + if (param_opt != NULL) { + data = param_opt; while (data) { - string_free(&data->key); - string_free(&data->value); + SAFE_FREE(data->key); + SAFE_FREE(data->value); pdata = data->next; SAFE_FREE(data); data = pdata; } - Globals.param_opt = NULL; + param_opt = NULL; } /* We get sections first, so have to start 'behind' to make up */ diff --git a/source/passdb/pdb_interface.c b/source/passdb/pdb_interface.c index 778cb9425c1..d21cc1d355c 100644 --- a/source/passdb/pdb_interface.c +++ b/source/passdb/pdb_interface.c @@ -25,11 +25,8 @@ #define DBGC_CLASS DBGC_PASSDB /** List of various built-in passdb modules */ -static const struct { - const char *name; - /* Function to create a member of the pdb_methods list */ - pdb_init_function init; -} builtin_pdb_init_functions[] = { + +const struct pdb_init_function_entry builtin_pdb_init_functions[] = { { "smbpasswd", pdb_init_smbpasswd }, { "smbpasswd_nua", pdb_init_smbpasswd_nua }, { "tdbsam", pdb_init_tdbsam }, @@ -38,53 +35,10 @@ static const struct { { "ldapsam_nua", pdb_init_ldapsam_nua }, { "unixsam", pdb_init_unixsam }, { "nisplussam", pdb_init_nisplussam }, + { "plugin", pdb_init_plugin }, { NULL, NULL} }; -static struct pdb_init_function_entry *backends; -static void lazy_initialize_passdb(void); - -static void lazy_initialize_passdb() -{ - int i; - static BOOL initialised = False; - - if(!initialised) { - initialised = True; - - for(i = 0; builtin_pdb_init_functions[i].name; i++) { - smb_register_passdb(builtin_pdb_init_functions[i].name, builtin_pdb_init_functions[i].init, PASSDB_INTERFACE_VERSION); - } - } -} - -BOOL smb_register_passdb(const char *name, pdb_init_function init, int version) -{ - struct pdb_init_function_entry *entry = backends; - - if(version != PASSDB_INTERFACE_VERSION) - return False; - - DEBUG(5,("Attempting to register passdb backend %s\n", name)); - - /* Check for duplicates */ - while(entry) { - if(strcasecmp(name, entry->name) == 0) { - DEBUG(0,("There already is a passdb backend registered with the name %s!\n", name)); - return False; - } - entry = entry->next; - } - - entry = smb_xmalloc(sizeof(struct pdb_init_function_entry)); - entry->name = name; - entry->init = init; - - DLIST_ADD(backends, entry); - DEBUG(5,("Successfully added passdb backend '%s'\n", name)); - return True; -} - static NTSTATUS context_setsampwent(struct pdb_context *context, BOOL update) { NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; @@ -417,12 +371,8 @@ static NTSTATUS make_pdb_methods_name(struct pdb_methods **methods, struct pdb_c { char *module_name = smb_xstrdup(selected); char *module_location = NULL, *p; - struct pdb_init_function_entry *entry; NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; - - lazy_initialize_passdb(); - - entry = backends; + int i; p = strchr(module_name, ':'); @@ -435,11 +385,12 @@ static NTSTATUS make_pdb_methods_name(struct pdb_methods **methods, struct pdb_c trim_string(module_name, " ", " "); DEBUG(5,("Attempting to find an passdb backend to match %s (%s)\n", selected, module_name)); - while(entry) { - if (strequal(entry->name, module_name)) + for (i = 0; builtin_pdb_init_functions[i].name; i++) + { + if (strequal(builtin_pdb_init_functions[i].name, module_name)) { - DEBUG(5,("Found pdb backend %s\n", module_name)); - nt_status = entry->init(context, methods, module_location); + DEBUG(5,("Found pdb backend %s (at pos %d)\n", module_name, i)); + nt_status = builtin_pdb_init_functions[i].init(context, methods, module_location); if (NT_STATUS_IS_OK(nt_status)) { DEBUG(5,("pdb backend %s has a valid init\n", selected)); } else { @@ -449,7 +400,6 @@ static NTSTATUS make_pdb_methods_name(struct pdb_methods **methods, struct pdb_c return nt_status; break; /* unreached */ } - entry = entry->next; } /* No such backend found */ diff --git a/source/passdb/pdb_ldap.c b/source/passdb/pdb_ldap.c index 6f46201d8dd..7e443a97c61 100644 --- a/source/passdb/pdb_ldap.c +++ b/source/passdb/pdb_ldap.c @@ -218,7 +218,7 @@ static int ldapsam_open_connection (struct ldapsam_privates *ldap_state, LDAP ** DEBUG(3,("LDAPS option set...!\n")); #else - DEBUG(0,("ldapsam_open_connection: Secure connection not supported by LDAP client libraries!\n")); + DEBUG(0,("ldap_open_connection: Secure connection not supported by LDAP client libraries!\n")); return LDAP_OPERATIONS_ERROR; #endif } @@ -254,12 +254,12 @@ static int ldapsam_open_connection (struct ldapsam_privates *ldap_state, LDAP ** return LDAP_OPERATIONS_ERROR; } #else - DEBUG(0,("ldapsam_open_connection: StartTLS not supported by LDAP client libraries!\n")); + DEBUG(0,("ldap_open_connection: StartTLS not supported by LDAP client libraries!\n")); return LDAP_OPERATIONS_ERROR; #endif } - DEBUG(2, ("ldapsam_open_connection: connection opened\n")); + DEBUG(2, ("ldap_open_connection: connection opened\n")); return rc; } @@ -284,7 +284,7 @@ static int rebindproc_with_state (LDAP * ld, char **whop, char **credp, memset(*credp, '\0', strlen(*credp)); SAFE_FREE(*credp); } else { - DEBUG(5,("rebind_proc_with_state: Rebinding as \"%s\"\n", + DEBUG(5,("ldap_connect_system: Rebinding as \"%s\"\n", ldap_state->bind_dn)); *whop = strdup(ldap_state->bind_dn); @@ -315,7 +315,7 @@ static int rebindproc_connect_with_state (LDAP *ldap_struct, { struct ldapsam_privates *ldap_state = arg; int rc; - DEBUG(5,("rebindproc_connect_with_state: Rebinding as \"%s\"\n", + DEBUG(5,("ldap_connect_system: Rebinding as \"%s\"\n", ldap_state->bind_dn)); /** @TODO Should we be doing something to check what servers we rebind to? @@ -385,8 +385,8 @@ static int ldapsam_connect_system(struct ldapsam_privates *ldap_state, LDAP * ld /* removed the sasl_bind_s "EXTERNAL" stuff, as my testsuite (OpenLDAP) doesnt' seem to support it */ - DEBUG(10,("ldap_connect_system: Binding to ldap server %s as \"%s\"\n", - ldap_state->uri, ldap_dn)); + DEBUG(10,("ldap_connect_system: Binding to ldap server as \"%s\"\n", + ldap_dn)); #if defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000) # if LDAP_SET_REBIND_PROC_ARGS == 2 @@ -407,14 +407,7 @@ static int ldapsam_connect_system(struct ldapsam_privates *ldap_state, LDAP * ld rc = ldap_simple_bind_s(ldap_struct, ldap_dn, ldap_secret); if (rc != LDAP_SUCCESS) { - char *ld_error; - ldap_get_option(ldap_state->ldap_struct, LDAP_OPT_ERROR_STRING, - &ld_error); - DEBUG(0, - ("failed to bind to server with dn= %s Error: %s\n\t%s\n", - ldap_dn, ldap_err2string(rc), - ld_error)); - free(ld_error); + DEBUG(0, ("Bind failed: %s\n", ldap_err2string(rc))); return rc; } @@ -666,12 +659,7 @@ static int ldapsam_search_one_user_by_name (struct ldapsam_privates *ldap_state, LDAPMessage ** result) { pstring filter; - char *escape_user = escape_ldap_string_alloc(user); - - if (!escape_user) { - return LDAP_NO_MEMORY; - } - + /* * in the filter expression, replace %u with the real name * so in ldap filter, %u MUST exist :-) @@ -682,10 +670,7 @@ static int ldapsam_search_one_user_by_name (struct ldapsam_privates *ldap_state, * have to use this here because $ is filtered out * in pstring_sub */ - - - all_string_sub(filter, "%u", escape_user, sizeof(pstring)); - SAFE_FREE(escape_user); + all_string_sub(filter, "%u", user, sizeof(pstring)); return ldapsam_search_one_user(ldap_state, filter, result); } @@ -699,7 +684,6 @@ static int ldapsam_search_one_user_by_uid(struct ldapsam_privates *ldap_state, { struct passwd *user; pstring filter; - char *escape_user; /* Get the username from the system and look that up in the LDAP */ @@ -710,16 +694,9 @@ static int ldapsam_search_one_user_by_uid(struct ldapsam_privates *ldap_state, pstrcpy(filter, lp_ldap_filter()); - escape_user = escape_ldap_string_alloc(user->pw_name); - if (!escape_user) { - passwd_free(&user); - return LDAP_NO_MEMORY; - } - - all_string_sub(filter, "%u", escape_user, sizeof(pstring)); + all_string_sub(filter, "%u", user->pw_name, sizeof(pstring)); passwd_free(&user); - SAFE_FREE(escape_user); return ldapsam_search_one_user(ldap_state, filter, result); } @@ -1876,8 +1853,7 @@ static NTSTATUS ldapsam_add_sam_account(struct pdb_methods *my_methods, SAM_ACCO } if (ldap_count_entries(ldap_state->ldap_struct, result) != 0) { - DEBUG(0,("User '%s' already in the base, with samba properties\n", - username)); + DEBUG(0,("User already in the base, with samba properties\n")); ldap_msgfree(result); return NT_STATUS_UNSUCCESSFUL; } diff --git a/source/modules/mysql.c b/source/passdb/pdb_mysql.c similarity index 99% rename from source/modules/mysql.c rename to source/passdb/pdb_mysql.c index 1d5819295b0..d0f30c63946 100644 --- a/source/modules/mysql.c +++ b/source/passdb/pdb_mysql.c @@ -1,4 +1,3 @@ - /* * MySQL password backend for samba * Copyright (C) Jelmer Vernooij 2002 @@ -64,10 +63,12 @@ static int mysqlsam_debug_level = DBGC_ALL; #undef DBGC_CLASS #define DBGC_CLASS mysqlsam_debug_level +PDB_MODULE_VERSIONING_MAGIC + typedef struct pdb_mysql_data { MYSQL *handle; MYSQL_RES *pwent; - const char *location; + char *location; } pdb_mysql_data; /* Used to construct insert and update queries */ @@ -946,8 +947,8 @@ static NTSTATUS mysqlsam_enum_group_mapping(struct pdb_methods *methods, } -static NTSTATUS mysqlsam_init(struct pdb_context * pdb_context, struct pdb_methods ** pdb_method, - const char *location) +NTSTATUS pdb_init(PDB_CONTEXT * pdb_context, PDB_METHODS ** pdb_method, + char *location) { NTSTATUS nt_status; struct pdb_mysql_data *data; @@ -1031,13 +1032,3 @@ static NTSTATUS mysqlsam_init(struct pdb_context * pdb_context, struct pdb_metho return NT_STATUS_OK; } - -int init_module(void); - -int init_module() -{ - if(smb_register_passdb("mysql", mysqlsam_init, PASSDB_INTERFACE_VERSION)) - return 0; - - return 1; -} diff --git a/source/sam/sam_plugin.c b/source/passdb/pdb_plugin.c similarity index 57% rename from source/sam/sam_plugin.c rename to source/passdb/pdb_plugin.c index fd26c4b8d3c..ea67da23a55 100644 --- a/source/sam/sam_plugin.c +++ b/source/passdb/pdb_plugin.c @@ -1,9 +1,8 @@ /* Unix SMB/CIFS implementation. - Loadable san module interface. - Copyright (C) Jelmer Vernooij 2002 - Copyright (C) Andrew Bartlett 2002 - Copyright (C) Stefan (metze) Metzmacher 2002 + Loadable passdb module interface. + Copyright (C) Jelmer Vernooij 2002 + Copyright (C) Andrew Bartlett 2002 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 @@ -23,57 +22,57 @@ #include "includes.h" #undef DBGC_CLASS -#define DBGC_CLASS DBGC_SAM +#define DBGC_CLASS DBGC_PASSDB -NTSTATUS sam_init_plugin(SAM_METHODS *sam_methods, const char *module_params) +NTSTATUS pdb_init_plugin(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location) { - void *dl_handle; - char *plugin_params, *plugin_name, *p; - sam_init_function plugin_init; + void * dl_handle; + char *plugin_location, *plugin_name, *p; + pdb_init_function plugin_init; int (*plugin_version)(void); - if (module_params == NULL) { + if (location == NULL) { DEBUG(0, ("The plugin module needs an argument!\n")); return NT_STATUS_UNSUCCESSFUL; } - plugin_name = smb_xstrdup(module_params); + plugin_name = smb_xstrdup(location); p = strchr(plugin_name, ':'); if (p) { *p = 0; - plugin_params = p+1; - trim_string(plugin_params, " ", " "); - } else plugin_params = NULL; + plugin_location = p+1; + trim_string(plugin_location, " ", " "); + } else plugin_location = NULL; trim_string(plugin_name, " ", " "); DEBUG(5, ("Trying to load sam plugin %s\n", plugin_name)); - dl_handle = sys_dlopen(plugin_name, RTLD_NOW); + dl_handle = sys_dlopen(plugin_name, RTLD_NOW ); if (!dl_handle) { DEBUG(0, ("Failed to load sam plugin %s using sys_dlopen (%s)\n", plugin_name, sys_dlerror())); return NT_STATUS_UNSUCCESSFUL; } - plugin_version = sys_dlsym(dl_handle, "sam_version"); + plugin_version = sys_dlsym(dl_handle, "pdb_version"); if (!plugin_version) { sys_dlclose(dl_handle); - DEBUG(0, ("Failed to find function 'sam_version' using sys_dlsym in sam plugin %s (%s)\n", plugin_name, sys_dlerror())); + DEBUG(0, ("Failed to find function 'pdb_version' using sys_dlsym in sam plugin %s (%s)\n", plugin_name, sys_dlerror())); return NT_STATUS_UNSUCCESSFUL; } - if (plugin_version()!=SAM_INTERFACE_VERSION) { + if (plugin_version() != PASSDB_INTERFACE_VERSION) { sys_dlclose(dl_handle); - DEBUG(0, ("Wrong SAM_INTERFACE_VERSION! sam plugin has version %d and version %d is needed! Please update!\n", - plugin_version(),SAM_INTERFACE_VERSION)); + DEBUG(0, ("Wrong PASSDB_INTERFACE_VERSION! sam plugin has version %d and version %d is needed! Please update!\n", + plugin_version(),PASSDB_INTERFACE_VERSION)); return NT_STATUS_UNSUCCESSFUL; } - plugin_init = sys_dlsym(dl_handle, "sam_init"); + plugin_init = sys_dlsym(dl_handle, "pdb_init"); if (!plugin_init) { sys_dlclose(dl_handle); - DEBUG(0, ("Failed to find function 'sam_init' using sys_dlsym in sam plugin %s (%s)\n", plugin_name, sys_dlerror())); + DEBUG(0, ("Failed to find function 'pdb_init' using sys_dlsym in sam plugin %s (%s)\n", plugin_name, sys_dlerror())); return NT_STATUS_UNSUCCESSFUL; } - DEBUG(5, ("Starting sam plugin %s with parameters %s for domain %s\n", plugin_name, plugin_params, sam_methods->domain_name)); - return plugin_init(sam_methods, plugin_params); + DEBUG(5, ("Starting sam plugin %s with location %s\n", plugin_name, plugin_location)); + return plugin_init(pdb_context, pdb_method, plugin_location); } diff --git a/source/modules/xml.c b/source/passdb/pdb_xml.c similarity index 98% rename from source/modules/xml.c rename to source/passdb/pdb_xml.c index ead3e3a8748..edf70250e22 100644 --- a/source/modules/xml.c +++ b/source/passdb/pdb_xml.c @@ -40,6 +40,8 @@ static int xmlsam_debug_level = DBGC_ALL; #undef DBGC_CLASS #define DBGC_CLASS xmlsam_debug_level +PDB_MODULE_VERSIONING_MAGIC + static char * iota(int a) { static char tmp[10]; @@ -512,7 +514,7 @@ static NTSTATUS xmlsam_add_sam_account(struct pdb_methods *methods, SAM_ACCOUNT return NT_STATUS_OK; } -NTSTATUS xmlsam_init(PDB_CONTEXT * pdb_context, PDB_METHODS ** pdb_method, +NTSTATUS pdb_init(PDB_CONTEXT * pdb_context, PDB_METHODS ** pdb_method, const char *location) { NTSTATUS nt_status; @@ -563,13 +565,3 @@ NTSTATUS xmlsam_init(PDB_CONTEXT * pdb_context, PDB_METHODS ** pdb_method, return NT_STATUS_OK; } - -int init_module(void); - -int init_module() -{ - if(smb_register_passdb("xml", xmlsam_init, PASSDB_INTERFACE_VERSION)) - return 0; - - return 1; -} diff --git a/source/passdb/secrets.c b/source/passdb/secrets.c index a58ea492eac..a52e2642705 100644 --- a/source/passdb/secrets.c +++ b/source/passdb/secrets.c @@ -468,12 +468,12 @@ BOOL secrets_store_ldap_pw(const char* dn, char* pw) * @return nt status code of rpc response **/ -NTSTATUS secrets_get_trusted_domains(TALLOC_CTX* ctx, int* enum_ctx, unsigned int max_num_domains, int *num_domains, TRUSTDOM ***domains) +NTSTATUS secrets_get_trusted_domains(TALLOC_CTX* ctx, int* enum_ctx, int max_num_domains, int *num_domains, TRUSTDOM ***domains) { TDB_LIST_NODE *keys, *k; TRUSTDOM *dom = NULL; char *pattern; - unsigned int start_idx; + int start_idx; uint32 idx = 0; size_t size; fstring dom_name; diff --git a/source/rpc_server/srv_dfs.c b/source/rpc_server/srv_dfs.c index f6e9ca3d567..676ad8e3f3f 100644 --- a/source/rpc_server/srv_dfs.c +++ b/source/rpc_server/srv_dfs.c @@ -3,9 +3,8 @@ * RPC Pipe client / server routines for Dfs * Copyright (C) Andrew Tridgell 1992-1997, * Copyright (C) Luke Kenneth Casson Leighton 1996-1997, - * Copyright (C) Shirish Kalele 2000, - * Copyright (C) Jeremy Allison 2001, - * Copyright (C) Anthony Liguori 2003. + * Copyright (C) Shirish Kalele 2000. + * Copyright (C) Jeremy Allison 2001. * * 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 @@ -158,20 +157,21 @@ static BOOL api_dfs_enum(pipes_struct *p) \pipe\netdfs commands ********************************************************************/ -#ifdef RPC_DFS_DYNAMIC -int rpc_pipe_init(void) -#else -int rpc_dfs_init(void) -#endif +struct api_struct api_netdfs_cmds[] = { - struct api_struct api_netdfs_cmds[] = - { - {"DFS_EXIST", DFS_EXIST, api_dfs_exist }, - {"DFS_ADD", DFS_ADD, api_dfs_add }, - {"DFS_REMOVE", DFS_REMOVE, api_dfs_remove }, - {"DFS_GET_INFO", DFS_GET_INFO, api_dfs_get_info }, - {"DFS_ENUM", DFS_ENUM, api_dfs_enum } - }; - return rpc_pipe_register_commands("netdfs", "netdfs", api_netdfs_cmds, - sizeof(api_netdfs_cmds) / sizeof(struct api_struct)); + {"DFS_EXIST", DFS_EXIST, api_dfs_exist }, + {"DFS_ADD", DFS_ADD, api_dfs_add }, + {"DFS_REMOVE", DFS_REMOVE, api_dfs_remove }, + {"DFS_GET_INFO", DFS_GET_INFO, api_dfs_get_info }, + {"DFS_ENUM", DFS_ENUM, api_dfs_enum }, + {NULL, 0, NULL } +}; + +/******************************************************************* +receives a netdfs pipe and responds. +********************************************************************/ + +BOOL api_netdfs_rpc(pipes_struct *p) +{ + return api_rpcTNP(p, "api_netdfs_rpc", api_netdfs_cmds); } diff --git a/source/rpc_server/srv_lsa.c b/source/rpc_server/srv_lsa.c index 815de390ecd..a2c2290fb7d 100644 --- a/source/rpc_server/srv_lsa.c +++ b/source/rpc_server/srv_lsa.c @@ -5,8 +5,7 @@ * Copyright (C) Luke Kenneth Casson Leighton 1996-1997, * Copyright (C) Paul Ashton 1997, * Copyright (C) Jeremy Allison 2001, - * Copyright (C) Jim McDonough 2002, - * Copyright (C) Anthony Liguori 2003. + * Copyright (C) Jim McDonough 2002. * * 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 @@ -646,36 +645,35 @@ static BOOL api_lsa_query_info2(pipes_struct *p) \PIPE\ntlsa commands ***************************************************************************/ -#ifdef RPC_LSA_DYNAMIC -int rpc_pipe_init(void) -#else -int rpc_lsa_init(void) -#endif +static const struct api_struct api_lsa_cmds[] = { - static const struct api_struct api_lsa_cmds[] = - { - { "LSA_OPENPOLICY2" , LSA_OPENPOLICY2 , api_lsa_open_policy2 }, - { "LSA_OPENPOLICY" , LSA_OPENPOLICY , api_lsa_open_policy }, - { "LSA_QUERYINFOPOLICY" , LSA_QUERYINFOPOLICY , api_lsa_query_info }, - { "LSA_ENUMTRUSTDOM" , LSA_ENUMTRUSTDOM , api_lsa_enum_trust_dom }, - { "LSA_CLOSE" , LSA_CLOSE , api_lsa_close }, - { "LSA_OPENSECRET" , LSA_OPENSECRET , api_lsa_open_secret }, - { "LSA_LOOKUPSIDS" , LSA_LOOKUPSIDS , api_lsa_lookup_sids }, - { "LSA_LOOKUPNAMES" , LSA_LOOKUPNAMES , api_lsa_lookup_names }, - { "LSA_ENUM_PRIVS" , LSA_ENUM_PRIVS , api_lsa_enum_privs }, - { "LSA_PRIV_GET_DISPNAME",LSA_PRIV_GET_DISPNAME,api_lsa_priv_get_dispname}, - { "LSA_ENUM_ACCOUNTS" , LSA_ENUM_ACCOUNTS , api_lsa_enum_accounts }, - { "LSA_UNK_GET_CONNUSER", LSA_UNK_GET_CONNUSER, api_lsa_unk_get_connuser }, - { "LSA_OPENACCOUNT" , LSA_OPENACCOUNT , api_lsa_open_account }, - { "LSA_ENUMPRIVSACCOUNT", LSA_ENUMPRIVSACCOUNT, api_lsa_enum_privsaccount}, - { "LSA_GETSYSTEMACCOUNT", LSA_GETSYSTEMACCOUNT, api_lsa_getsystemaccount }, - { "LSA_SETSYSTEMACCOUNT", LSA_SETSYSTEMACCOUNT, api_lsa_setsystemaccount }, - { "LSA_ADDPRIVS" , LSA_ADDPRIVS , api_lsa_addprivs }, - { "LSA_REMOVEPRIVS" , LSA_REMOVEPRIVS , api_lsa_removeprivs }, - { "LSA_QUERYSECOBJ" , LSA_QUERYSECOBJ , api_lsa_query_secobj }, - { "LSA_QUERYINFO2" , LSA_QUERYINFO2 , api_lsa_query_info2 } - }; - - return rpc_pipe_register_commands("lsarpc", "lsass", api_lsa_cmds, - sizeof(api_lsa_cmds) / sizeof(struct api_struct)); + { "LSA_OPENPOLICY2" , LSA_OPENPOLICY2 , api_lsa_open_policy2 }, + { "LSA_OPENPOLICY" , LSA_OPENPOLICY , api_lsa_open_policy }, + { "LSA_QUERYINFOPOLICY" , LSA_QUERYINFOPOLICY , api_lsa_query_info }, + { "LSA_ENUMTRUSTDOM" , LSA_ENUMTRUSTDOM , api_lsa_enum_trust_dom }, + { "LSA_CLOSE" , LSA_CLOSE , api_lsa_close }, + { "LSA_OPENSECRET" , LSA_OPENSECRET , api_lsa_open_secret }, + { "LSA_LOOKUPSIDS" , LSA_LOOKUPSIDS , api_lsa_lookup_sids }, + { "LSA_LOOKUPNAMES" , LSA_LOOKUPNAMES , api_lsa_lookup_names }, + { "LSA_ENUM_PRIVS" , LSA_ENUM_PRIVS , api_lsa_enum_privs }, + { "LSA_PRIV_GET_DISPNAME",LSA_PRIV_GET_DISPNAME,api_lsa_priv_get_dispname}, + { "LSA_ENUM_ACCOUNTS" , LSA_ENUM_ACCOUNTS , api_lsa_enum_accounts }, + { "LSA_UNK_GET_CONNUSER", LSA_UNK_GET_CONNUSER, api_lsa_unk_get_connuser }, + { "LSA_OPENACCOUNT" , LSA_OPENACCOUNT , api_lsa_open_account }, + { "LSA_ENUMPRIVSACCOUNT", LSA_ENUMPRIVSACCOUNT, api_lsa_enum_privsaccount}, + { "LSA_GETSYSTEMACCOUNT", LSA_GETSYSTEMACCOUNT, api_lsa_getsystemaccount }, + { "LSA_SETSYSTEMACCOUNT", LSA_SETSYSTEMACCOUNT, api_lsa_setsystemaccount }, + { "LSA_ADDPRIVS" , LSA_ADDPRIVS , api_lsa_addprivs }, + { "LSA_REMOVEPRIVS" , LSA_REMOVEPRIVS , api_lsa_removeprivs }, + { "LSA_QUERYSECOBJ" , LSA_QUERYSECOBJ , api_lsa_query_secobj }, + { "LSA_QUERYINFO2" , LSA_QUERYINFO2 , api_lsa_query_info2 }, + { NULL , 0 , NULL } +}; + +/*************************************************************************** + api_ntLsarpcTNP + ***************************************************************************/ +BOOL api_ntlsa_rpc(pipes_struct *p) +{ + return api_rpcTNP(p, "api_ntlsa_rpc", api_lsa_cmds); } diff --git a/source/rpc_server/srv_netlog.c b/source/rpc_server/srv_netlog.c index f377d3952bf..f96a0e2f2da 100644 --- a/source/rpc_server/srv_netlog.c +++ b/source/rpc_server/srv_netlog.c @@ -3,9 +3,8 @@ * RPC Pipe client / server routines * Copyright (C) Andrew Tridgell 1992-1997, * Copyright (C) Luke Kenneth Casson Leighton 1996-1997, - * Copyright (C) Paul Ashton 1997, - * Copyright (C) Jeremy Allison 1998-2001, - * Copyright (C) Anthony Liguori 2003. + * Copyright (C) Paul Ashton 1997. + * Copyright (C) Jeremy Allison 1998-2001. * * 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 @@ -320,26 +319,25 @@ static BOOL api_net_logon_ctrl(pipes_struct *p) /******************************************************************* array of \PIPE\NETLOGON operations ********************************************************************/ +static struct api_struct api_net_cmds [] = +{ + { "NET_REQCHAL" , NET_REQCHAL , api_net_req_chal }, + { "NET_AUTH" , NET_AUTH , api_net_auth }, + { "NET_AUTH2" , NET_AUTH2 , api_net_auth_2 }, + { "NET_SRVPWSET" , NET_SRVPWSET , api_net_srv_pwset }, + { "NET_SAMLOGON" , NET_SAMLOGON , api_net_sam_logon }, + { "NET_SAMLOGOFF" , NET_SAMLOGOFF , api_net_sam_logoff }, + { "NET_LOGON_CTRL2" , NET_LOGON_CTRL2 , api_net_logon_ctrl2 }, + { "NET_TRUST_DOM_LIST", NET_TRUST_DOM_LIST, api_net_trust_dom_list }, + { "NET_LOGON_CTRL" , NET_LOGON_CTRL , api_net_logon_ctrl }, + { NULL , 0 , NULL } +}; + +/******************************************************************* + receives a netlogon pipe and responds. + ********************************************************************/ -#ifdef RPC_NETLOG_DYNAMIC -int rpc_pipe_init(void) -#else -int rpc_net_init(void) -#endif +BOOL api_netlog_rpc(pipes_struct *p) { - static struct api_struct api_net_cmds [] = - { - { "NET_REQCHAL" , NET_REQCHAL , api_net_req_chal }, - { "NET_AUTH" , NET_AUTH , api_net_auth }, - { "NET_AUTH2" , NET_AUTH2 , api_net_auth_2 }, - { "NET_SRVPWSET" , NET_SRVPWSET , api_net_srv_pwset }, - { "NET_SAMLOGON" , NET_SAMLOGON , api_net_sam_logon }, - { "NET_SAMLOGOFF" , NET_SAMLOGOFF , api_net_sam_logoff }, - { "NET_LOGON_CTRL2" , NET_LOGON_CTRL2 , api_net_logon_ctrl2 }, - { "NET_TRUST_DOM_LIST", NET_TRUST_DOM_LIST, api_net_trust_dom_list }, - { "NET_LOGON_CTRL" , NET_LOGON_CTRL , api_net_logon_ctrl } - }; - - return rpc_pipe_register_commands("NETLOGON", "lsass", api_net_cmds, - sizeof(api_net_cmds) / sizeof(struct api_struct)); + return api_rpcTNP(p, "api_netlog_rpc", api_net_cmds); } diff --git a/source/rpc_server/srv_pipe.c b/source/rpc_server/srv_pipe.c index 4c4b3e7af37..8aaab43461a 100644 --- a/source/rpc_server/srv_pipe.c +++ b/source/rpc_server/srv_pipe.c @@ -3,9 +3,8 @@ * RPC Pipe client / server routines * Copyright (C) Andrew Tridgell 1992-1998 * Copyright (C) Luke Kenneth Casson Leighton 1996-1998, - * Copyright (C) Paul Ashton 1997-1998, - * Copyright (C) Jeremy Allison 1999, - * Copyright (C) Anthony Liguori 2003. + * Copyright (C) Paul Ashton 1997-1998. + * Copyright (C) Jeremy Allison 1999. * * 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 @@ -458,53 +457,24 @@ failed authentication on named pipe %s.\n", domain, user_name, wks, p->name )); struct api_cmd { - const char *name; - int (*init)(void); + const char * pipe_clnt_name; + const char * pipe_srv_name; + BOOL (*fn) (pipes_struct *); }; static struct api_cmd api_fd_commands[] = { -#ifndef RPC_LSA_DYNAMIC - { "lsarpc", rpc_lsa_init }, -#endif -#ifndef RPC_SAMR_DYNAMIC - { "samr", rpc_samr_init }, -#endif -#ifndef RPC_SVC_DYNAMIC - { "srvsvc", rpc_srv_init }, -#endif -#ifndef RPC_WKS_DYNAMIC - { "wkssvc", rpc_wks_init }, -#endif -#ifndef RPC_NETLOG_DYNAMIC - { "NETLOGON", rpc_net_init }, -#endif -#ifndef RPC_REG_DYNAMIC - { "winreg", rpc_reg_init }, -#endif -#ifndef RPC_SPOOLSS_DYNAMIC - { "spoolss", rpc_spoolss_init }, -#endif -#ifndef RPC_DFS_DYNAMIC - { "netdfs", rpc_dfs_init }, -#endif - { NULL, NULL } + { "lsarpc", "lsass", api_ntlsa_rpc }, + { "samr", "lsass", api_samr_rpc }, + { "srvsvc", "ntsvcs", api_srvsvc_rpc }, + { "wkssvc", "ntsvcs", api_wkssvc_rpc }, + { "NETLOGON", "lsass", api_netlog_rpc }, + { "winreg", "winreg", api_reg_rpc }, + { "spoolss", "spoolss", api_spoolss_rpc }, + { "netdfs", "netdfs" , api_netdfs_rpc }, + { NULL, NULL, NULL } }; -struct rpc_table -{ - struct - { - const char *clnt; - const char *srv; - } pipe; - struct api_struct *cmds; - int n_cmds; -}; - -static struct rpc_table *rpc_lookup; -static int rpc_lookup_size; - /******************************************************************* This is the client reply to our challenge for an authenticated bind request. The challenge we sent is in p->challenge. @@ -711,7 +681,6 @@ BOOL check_bind_req(char* pipe_name, RPC_IFACE* abstract, fstrcpy(pname,"\\PIPE\\"); fstrcat(pname,pipe_name); - DEBUG(3,("check_bind_req for %s\n", pname)); #ifndef SUPPORT_NEW_LSARPC_UUID @@ -758,82 +727,6 @@ BOOL check_bind_req(char* pipe_name, RPC_IFACE* abstract, return True; } -/******************************************************************* - Register commands to an RPC pipe -*******************************************************************/ -int rpc_pipe_register_commands(const char *clnt, const char *srv, const struct api_struct *cmds, int size) -{ - struct rpc_table *rpc_entry; - - - /* We use a temporary variable because this call can fail and - rpc_lookup will still be valid afterwards. It could then succeed if - called again later */ - rpc_entry = realloc(rpc_lookup, - ++rpc_lookup_size*sizeof(struct rpc_table)); - if (NULL == rpc_entry) { - rpc_lookup_size--; - DEBUG(0, ("rpc_pipe_register_commands: memory allocation failed\n")); - return 0; - } else { - rpc_lookup = rpc_entry; - } - - rpc_entry = rpc_lookup + (rpc_lookup_size - 1); - ZERO_STRUCTP(rpc_entry); - rpc_entry->pipe.clnt = strdup(clnt); - rpc_entry->pipe.srv = strdup(srv); - rpc_entry->cmds = realloc(rpc_entry->cmds, - (rpc_entry->n_cmds + size) * - sizeof(struct api_struct)); - memcpy(rpc_entry->cmds + rpc_entry->n_cmds, cmds, - size * sizeof(struct api_struct)); - rpc_entry->n_cmds += size; - - return size; -} - -/******************************************************************* - Register commands to an RPC pipe -*******************************************************************/ -int rpc_load_module(const char *module) -{ -#ifdef HAVE_DLOPEN - void *handle; - int (*module_init)(void); - pstring full_path; - char *error; - - pstrcpy(full_path, lib_path("rpc")); - pstrcat(full_path, "/librpc_"); - pstrcat(full_path, module); - pstrcat(full_path, "."); - pstrcat(full_path, shlib_ext()); - - handle = sys_dlopen(full_path, RTLD_LAZY); - if (!handle) { - DEBUG(0, ("Could not load requested pipe %s as %s\n", - module, full_path)); - DEBUG(0, (" Error: %s\n", dlerror())); - return 0; - } - - DEBUG(3, ("Module '%s' loaded\n", full_path)); - - module_init = sys_dlsym(handle, "rpc_pipe_init"); - if ((error = sys_dlerror()) != NULL) { - DEBUG(0, ("Error trying to resolve symbol 'rpc_pipe_init' in %s: %s\n", - full_path, error)); - return 0; - } - - return module_init(); -#else - DEBUG(0,("Attempting to load a dynamic RPC pipe when dlopen isn't available\n")); - return 0; -#endif -} - /******************************************************************* Respond to a pipe bind request. *******************************************************************/ @@ -861,40 +754,23 @@ BOOL api_pipe_bind_req(pipes_struct *p, prs_struct *rpc_in_p) * that this is a pipe name we support. */ - - for (i = 0; i < rpc_lookup_size; i++) { - if (strequal(rpc_lookup[i].pipe.clnt, p->name)) { - DEBUG(3, ("api_pipe_bind_req: \\PIPE\\%s -> \\PIPE\\%s\n", - rpc_lookup[i].pipe.clnt, rpc_lookup[i].pipe.srv)); - fstrcpy(p->pipe_srv_name, rpc_lookup[i].pipe.srv); - break; - } + for (i = 0; api_fd_commands[i].pipe_clnt_name; i++) { + if (strequal(api_fd_commands[i].pipe_clnt_name, p->name) && + api_fd_commands[i].fn != NULL) { + DEBUG(3,("api_pipe_bind_req: \\PIPE\\%s -> \\PIPE\\%s\n", + api_fd_commands[i].pipe_clnt_name, + api_fd_commands[i].pipe_srv_name)); + fstrcpy(p->pipe_srv_name, api_fd_commands[i].pipe_srv_name); + break; + } } - if (i == rpc_lookup_size) { - for (i = 0; api_fd_commands[i].name; i++) { - if (strequal(api_fd_commands[i].name, p->name)) { - api_fd_commands[i].init(); - break; - } - } - - if (!api_fd_commands[i].name && !rpc_load_module(p->name)) { - DEBUG(3,("api_pipe_bind_req: Unknown pipe name %s in bind request.\n", - p->name )); - if(!setup_bind_nak(p)) - return False; - return True; - } - - for (i = 0; i < rpc_lookup_size; i++) { - if (strequal(rpc_lookup[i].pipe.clnt, p->name)) { - DEBUG(3, ("api_pipe_bind_req: \\PIPE\\%s -> \\PIPE\\%s\n", - rpc_lookup[i].pipe.clnt, rpc_lookup[i].pipe.srv)); - fstrcpy(p->pipe_srv_name, rpc_lookup[i].pipe.srv); - break; - } - } + if (api_fd_commands[i].fn == NULL) { + DEBUG(3,("api_pipe_bind_req: Unknown pipe name %s in bind request.\n", + p->name )); + if(!setup_bind_nak(p)) + return False; + return True; } /* decode the bind request */ @@ -1277,46 +1153,14 @@ BOOL api_pipe_request(pipes_struct *p) } } - DEBUG(5, ("Requested \\PIPE\\%s\n", p->name)); - - for (i = 0; i < rpc_lookup_size; i++) { - if (strequal(rpc_lookup[i].pipe.clnt, p->name)) { - DEBUG(3,("Doing \\PIPE\\%s\n", - rpc_lookup[i].pipe.clnt)); - set_current_rpc_talloc(p->mem_ctx); - ret = api_rpcTNP(p, rpc_lookup[i].pipe.clnt, - rpc_lookup[i].cmds, - rpc_lookup[i].n_cmds); - set_current_rpc_talloc(NULL); - break; - } - } - - - if (i == rpc_lookup_size) { - for (i = 0; api_fd_commands[i].name; i++) { - if (strequal(api_fd_commands[i].name, p->name)) { - api_fd_commands[i].init(); - break; - } - } - - if (!api_fd_commands[i].name) { - rpc_load_module(p->name); - } - - for (i = 0; i < rpc_lookup_size; i++) { - if (strequal(rpc_lookup[i].pipe.clnt, p->name)) { - DEBUG(3,("Doing \\PIPE\\%s\n", - rpc_lookup[i].pipe.clnt)); - set_current_rpc_talloc(p->mem_ctx); - ret = api_rpcTNP(p, rpc_lookup[i].pipe.clnt, - rpc_lookup[i].cmds, - rpc_lookup[i].n_cmds); - set_current_rpc_talloc(NULL); - break; - } - } + for (i = 0; api_fd_commands[i].pipe_clnt_name; i++) { + if (strequal(api_fd_commands[i].pipe_clnt_name, p->name) && + api_fd_commands[i].fn != NULL) { + DEBUG(3,("Doing \\PIPE\\%s\n", api_fd_commands[i].pipe_clnt_name)); + set_current_rpc_talloc(p->mem_ctx); + ret = api_fd_commands[i].fn(p); + set_current_rpc_talloc(NULL); + } } if(p->ntlmssp_auth_validated) @@ -1330,7 +1174,7 @@ BOOL api_pipe_request(pipes_struct *p) ********************************************************************/ BOOL api_rpcTNP(pipes_struct *p, const char *rpc_name, - const struct api_struct *api_rpc_cmds, int n_cmds) + const struct api_struct *api_rpc_cmds) { int fn_num; fstring name; @@ -1342,14 +1186,14 @@ BOOL api_rpcTNP(pipes_struct *p, const char *rpc_name, slprintf(name, sizeof(name)-1, "in_%s", rpc_name); prs_dump(name, p->hdr_req.opnum, &p->in_data.data); - for (fn_num = 0; fn_num < n_cmds; fn_num++) { + for (fn_num = 0; api_rpc_cmds[fn_num].name; fn_num++) { if (api_rpc_cmds[fn_num].opnum == p->hdr_req.opnum && api_rpc_cmds[fn_num].fn != NULL) { DEBUG(3,("api_rpcTNP: rpc command: %s\n", api_rpc_cmds[fn_num].name)); break; } } - if (fn_num == n_cmds) { + if (api_rpc_cmds[fn_num].name == NULL) { /* * For an unknown RPC just return a fault PDU but * return True to allow RPC's on the pipe to continue @@ -1362,8 +1206,6 @@ BOOL api_rpcTNP(pipes_struct *p, const char *rpc_name, offset1 = prs_offset(&p->out_data.rdata); - DEBUG(6, ("api_rpc_cmds[%d].fn == %p\n", - fn_num, api_rpc_cmds[fn_num].fn)); /* do the actual command */ if(!api_rpc_cmds[fn_num].fn(p)) { DEBUG(0,("api_rpcTNP: %s: %s failed.\n", rpc_name, api_rpc_cmds[fn_num].name)); diff --git a/source/rpc_server/srv_reg.c b/source/rpc_server/srv_reg.c index 04960f8e3a3..d0aaf0199bd 100644 --- a/source/rpc_server/srv_reg.c +++ b/source/rpc_server/srv_reg.c @@ -3,11 +3,10 @@ * RPC Pipe client / server routines * Copyright (C) Andrew Tridgell 1992-1997, * Copyright (C) Luke Kenneth Casson Leighton 1996-1997, - * Copyright (C) Paul Ashton 1997, - * Copyright (C) Marc Jacobsen 2000, - * Copyright (C) Jeremy Allison 2001, - * Copyright (C) Gerald Carter 2002, - * Copyright (C) Anthony Liguori 2003. + * Copyright (C) Paul Ashton 1997. + * Copyright (C) Marc Jacobsen 2000. + * Copyright (C) Jeremy Allison 2001. + * Copyright (C) Gerald Carter 2002. * * 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 @@ -372,29 +371,29 @@ static BOOL api_reg_save_key(pipes_struct *p) /******************************************************************* array of \PIPE\reg operations ********************************************************************/ +static struct api_struct api_reg_cmds[] = +{ + { "REG_CLOSE" , REG_CLOSE , api_reg_close }, + { "REG_OPEN_ENTRY" , REG_OPEN_ENTRY , api_reg_open_entry }, + { "REG_OPEN_HKCR" , REG_OPEN_HKCR , api_reg_open_hkcr }, + { "REG_OPEN_HKLM" , REG_OPEN_HKLM , api_reg_open_hklm }, + { "REG_OPEN_HKU" , REG_OPEN_HKU , api_reg_open_hku }, + { "REG_ENUM_KEY" , REG_ENUM_KEY , api_reg_enum_key }, + { "REG_ENUM_VALUE" , REG_ENUM_VALUE , api_reg_enum_value }, + { "REG_QUERY_KEY" , REG_QUERY_KEY , api_reg_query_key }, + { "REG_INFO" , REG_INFO , api_reg_info }, + { "REG_SHUTDOWN" , REG_SHUTDOWN , api_reg_shutdown }, + { "REG_ABORT_SHUTDOWN" , REG_ABORT_SHUTDOWN , api_reg_abort_shutdown }, + { "REG_UNKNOWN_1A" , REG_UNKNOWN_1A , api_reg_unknown_1a }, + { "REG_SAVE_KEY" , REG_SAVE_KEY , api_reg_save_key }, + { NULL , 0 , NULL } +}; + +/******************************************************************* + receives a reg pipe and responds. + ********************************************************************/ -#ifdef RPC_REG_DYNAMIC -int rpc_pipe_init(void) -#else -int rpc_reg_init(void) -#endif +BOOL api_reg_rpc(pipes_struct *p) { - static struct api_struct api_reg_cmds[] = - { - { "REG_CLOSE" , REG_CLOSE , api_reg_close }, - { "REG_OPEN_ENTRY" , REG_OPEN_ENTRY , api_reg_open_entry }, - { "REG_OPEN_HKCR" , REG_OPEN_HKCR , api_reg_open_hkcr }, - { "REG_OPEN_HKLM" , REG_OPEN_HKLM , api_reg_open_hklm }, - { "REG_OPEN_HKU" , REG_OPEN_HKU , api_reg_open_hku }, - { "REG_ENUM_KEY" , REG_ENUM_KEY , api_reg_enum_key }, - { "REG_ENUM_VALUE" , REG_ENUM_VALUE , api_reg_enum_value }, - { "REG_QUERY_KEY" , REG_QUERY_KEY , api_reg_query_key }, - { "REG_INFO" , REG_INFO , api_reg_info }, - { "REG_SHUTDOWN" , REG_SHUTDOWN , api_reg_shutdown }, - { "REG_ABORT_SHUTDOWN" , REG_ABORT_SHUTDOWN , api_reg_abort_shutdown }, - { "REG_UNKNOWN_1A" , REG_UNKNOWN_1A , api_reg_unknown_1a }, - { "REG_SAVE_KEY" , REG_SAVE_KEY , api_reg_save_key } - }; - return rpc_pipe_register_commands("winreg", "winreg", api_reg_cmds, - sizeof(api_reg_cmds) / sizeof(struct api_struct)); + return api_rpcTNP(p, "api_reg_rpc", api_reg_cmds); } diff --git a/source/rpc_server/srv_samr.c b/source/rpc_server/srv_samr.c index 3a31ec82e14..ab3d94cf752 100644 --- a/source/rpc_server/srv_samr.c +++ b/source/rpc_server/srv_samr.c @@ -6,7 +6,7 @@ * Copyright (C) Paul Ashton 1997, * Copyright (C) Marc Jacobsen 1999, * Copyright (C) Jean François Micouleau 1998-2001, - * Copyright (C) Anthony Liguori 2002-2003, + * Copyright (C) Anthony Liguori 2002, * Copyright (C) Jim McDonough 2002. * * Split into interface and implementation modules by, @@ -1443,68 +1443,68 @@ static BOOL api_samr_set_dom_info(pipes_struct *p) array of \PIPE\samr operations ********************************************************************/ -#ifdef RPC_SAMR_DYNAMIC -int rpc_pipe_init(void) -#else -int rpc_samr_init(void) -#endif +static struct api_struct api_samr_cmds [] = { - static struct api_struct api_samr_cmds [] = - { - {"SAMR_CLOSE_HND" , SAMR_CLOSE_HND , api_samr_close_hnd }, - {"SAMR_CONNECT" , SAMR_CONNECT , api_samr_connect }, - {"SAMR_CONNECT_ANON" , SAMR_CONNECT_ANON , api_samr_connect_anon }, - {"SAMR_ENUM_DOMAINS" , SAMR_ENUM_DOMAINS , api_samr_enum_domains }, - {"SAMR_ENUM_DOM_USERS" , SAMR_ENUM_DOM_USERS , api_samr_enum_dom_users }, - - {"SAMR_ENUM_DOM_GROUPS" , SAMR_ENUM_DOM_GROUPS , api_samr_enum_dom_groups }, - {"SAMR_ENUM_DOM_ALIASES" , SAMR_ENUM_DOM_ALIASES , api_samr_enum_dom_aliases }, - {"SAMR_QUERY_USERALIASES" , SAMR_QUERY_USERALIASES, api_samr_query_useraliases}, - {"SAMR_QUERY_ALIASMEM" , SAMR_QUERY_ALIASMEM , api_samr_query_aliasmem }, - {"SAMR_QUERY_GROUPMEM" , SAMR_QUERY_GROUPMEM , api_samr_query_groupmem }, - {"SAMR_ADD_ALIASMEM" , SAMR_ADD_ALIASMEM , api_samr_add_aliasmem }, - {"SAMR_DEL_ALIASMEM" , SAMR_DEL_ALIASMEM , api_samr_del_aliasmem }, - {"SAMR_ADD_GROUPMEM" , SAMR_ADD_GROUPMEM , api_samr_add_groupmem }, - {"SAMR_DEL_GROUPMEM" , SAMR_DEL_GROUPMEM , api_samr_del_groupmem }, - - {"SAMR_DELETE_DOM_USER" , SAMR_DELETE_DOM_USER , api_samr_delete_dom_user }, - {"SAMR_DELETE_DOM_GROUP" , SAMR_DELETE_DOM_GROUP , api_samr_delete_dom_group }, - {"SAMR_DELETE_DOM_ALIAS" , SAMR_DELETE_DOM_ALIAS , api_samr_delete_dom_alias }, - {"SAMR_CREATE_DOM_GROUP" , SAMR_CREATE_DOM_GROUP , api_samr_create_dom_group }, - {"SAMR_CREATE_DOM_ALIAS" , SAMR_CREATE_DOM_ALIAS , api_samr_create_dom_alias }, - {"SAMR_LOOKUP_NAMES" , SAMR_LOOKUP_NAMES , api_samr_lookup_names }, - {"SAMR_OPEN_USER" , SAMR_OPEN_USER , api_samr_open_user }, - {"SAMR_QUERY_USERINFO" , SAMR_QUERY_USERINFO , api_samr_query_userinfo }, - {"SAMR_SET_USERINFO" , SAMR_SET_USERINFO , api_samr_set_userinfo }, - {"SAMR_SET_USERINFO2" , SAMR_SET_USERINFO2 , api_samr_set_userinfo2 }, - - {"SAMR_QUERY_DOMAIN_INFO" , SAMR_QUERY_DOMAIN_INFO, api_samr_query_dom_info }, - {"SAMR_QUERY_USERGROUPS" , SAMR_QUERY_USERGROUPS , api_samr_query_usergroups }, - {"SAMR_QUERY_DISPINFO" , SAMR_QUERY_DISPINFO , api_samr_query_dispinfo }, - {"SAMR_QUERY_DISPINFO3" , SAMR_QUERY_DISPINFO3 , api_samr_query_dispinfo }, - {"SAMR_QUERY_DISPINFO4" , SAMR_QUERY_DISPINFO4 , api_samr_query_dispinfo }, - - {"SAMR_QUERY_ALIASINFO" , SAMR_QUERY_ALIASINFO , api_samr_query_aliasinfo }, - {"SAMR_QUERY_GROUPINFO" , SAMR_QUERY_GROUPINFO , api_samr_query_groupinfo }, - {"SAMR_SET_GROUPINFO" , SAMR_SET_GROUPINFO , api_samr_set_groupinfo }, - {"SAMR_SET_ALIASINFO" , SAMR_SET_ALIASINFO , api_samr_set_aliasinfo }, - {"SAMR_CREATE_USER" , SAMR_CREATE_USER , api_samr_create_user }, - {"SAMR_LOOKUP_RIDS" , SAMR_LOOKUP_RIDS , api_samr_lookup_rids }, - {"SAMR_GET_DOM_PWINFO" , SAMR_GET_DOM_PWINFO , api_samr_get_dom_pwinfo }, - {"SAMR_CHGPASSWD_USER" , SAMR_CHGPASSWD_USER , api_samr_chgpasswd_user }, - {"SAMR_OPEN_ALIAS" , SAMR_OPEN_ALIAS , api_samr_open_alias }, - {"SAMR_OPEN_GROUP" , SAMR_OPEN_GROUP , api_samr_open_group }, - {"SAMR_OPEN_DOMAIN" , SAMR_OPEN_DOMAIN , api_samr_open_domain }, - {"SAMR_UNKNOWN_2D" , SAMR_UNKNOWN_2D , api_samr_unknown_2d }, - {"SAMR_LOOKUP_DOMAIN" , SAMR_LOOKUP_DOMAIN , api_samr_lookup_domain }, - - {"SAMR_QUERY_SEC_OBJECT" , SAMR_QUERY_SEC_OBJECT , api_samr_query_sec_obj }, - {"SAMR_SET_SEC_OBJECT" , SAMR_SET_SEC_OBJECT , api_samr_set_sec_obj }, - {"SAMR_GET_USRDOM_PWINFO" , SAMR_GET_USRDOM_PWINFO, api_samr_get_usrdom_pwinfo}, - {"SAMR_UNKNOWN_2E" , SAMR_UNKNOWN_2E , api_samr_unknown_2e }, - {"SAMR_SET_DOMAIN_INFO" , SAMR_SET_DOMAIN_INFO , api_samr_set_dom_info }, - {"SAMR_CONNECT4" , SAMR_CONNECT4 , api_samr_connect4 } - }; - return rpc_pipe_register_commands("samr", "lsass", api_samr_cmds, - sizeof(api_samr_cmds) / sizeof(struct api_struct)); + {"SAMR_CLOSE_HND" , SAMR_CLOSE_HND , api_samr_close_hnd }, + {"SAMR_CONNECT" , SAMR_CONNECT , api_samr_connect }, + {"SAMR_CONNECT_ANON" , SAMR_CONNECT_ANON , api_samr_connect_anon }, + {"SAMR_ENUM_DOMAINS" , SAMR_ENUM_DOMAINS , api_samr_enum_domains }, + {"SAMR_ENUM_DOM_USERS" , SAMR_ENUM_DOM_USERS , api_samr_enum_dom_users }, + + {"SAMR_ENUM_DOM_GROUPS" , SAMR_ENUM_DOM_GROUPS , api_samr_enum_dom_groups }, + {"SAMR_ENUM_DOM_ALIASES" , SAMR_ENUM_DOM_ALIASES , api_samr_enum_dom_aliases }, + {"SAMR_QUERY_USERALIASES" , SAMR_QUERY_USERALIASES, api_samr_query_useraliases}, + {"SAMR_QUERY_ALIASMEM" , SAMR_QUERY_ALIASMEM , api_samr_query_aliasmem }, + {"SAMR_QUERY_GROUPMEM" , SAMR_QUERY_GROUPMEM , api_samr_query_groupmem }, + {"SAMR_ADD_ALIASMEM" , SAMR_ADD_ALIASMEM , api_samr_add_aliasmem }, + {"SAMR_DEL_ALIASMEM" , SAMR_DEL_ALIASMEM , api_samr_del_aliasmem }, + {"SAMR_ADD_GROUPMEM" , SAMR_ADD_GROUPMEM , api_samr_add_groupmem }, + {"SAMR_DEL_GROUPMEM" , SAMR_DEL_GROUPMEM , api_samr_del_groupmem }, + + {"SAMR_DELETE_DOM_USER" , SAMR_DELETE_DOM_USER , api_samr_delete_dom_user }, + {"SAMR_DELETE_DOM_GROUP" , SAMR_DELETE_DOM_GROUP , api_samr_delete_dom_group }, + {"SAMR_DELETE_DOM_ALIAS" , SAMR_DELETE_DOM_ALIAS , api_samr_delete_dom_alias }, + {"SAMR_CREATE_DOM_GROUP" , SAMR_CREATE_DOM_GROUP , api_samr_create_dom_group }, + {"SAMR_CREATE_DOM_ALIAS" , SAMR_CREATE_DOM_ALIAS , api_samr_create_dom_alias }, + {"SAMR_LOOKUP_NAMES" , SAMR_LOOKUP_NAMES , api_samr_lookup_names }, + {"SAMR_OPEN_USER" , SAMR_OPEN_USER , api_samr_open_user }, + {"SAMR_QUERY_USERINFO" , SAMR_QUERY_USERINFO , api_samr_query_userinfo }, + {"SAMR_SET_USERINFO" , SAMR_SET_USERINFO , api_samr_set_userinfo }, + {"SAMR_SET_USERINFO2" , SAMR_SET_USERINFO2 , api_samr_set_userinfo2 }, + + {"SAMR_QUERY_DOMAIN_INFO" , SAMR_QUERY_DOMAIN_INFO, api_samr_query_dom_info }, + {"SAMR_QUERY_USERGROUPS" , SAMR_QUERY_USERGROUPS , api_samr_query_usergroups }, + {"SAMR_QUERY_DISPINFO" , SAMR_QUERY_DISPINFO , api_samr_query_dispinfo }, + {"SAMR_QUERY_DISPINFO3" , SAMR_QUERY_DISPINFO3 , api_samr_query_dispinfo }, + {"SAMR_QUERY_DISPINFO4" , SAMR_QUERY_DISPINFO4 , api_samr_query_dispinfo }, + + {"SAMR_QUERY_ALIASINFO" , SAMR_QUERY_ALIASINFO , api_samr_query_aliasinfo }, + {"SAMR_QUERY_GROUPINFO" , SAMR_QUERY_GROUPINFO , api_samr_query_groupinfo }, + {"SAMR_SET_GROUPINFO" , SAMR_SET_GROUPINFO , api_samr_set_groupinfo }, + {"SAMR_SET_ALIASINFO" , SAMR_SET_ALIASINFO , api_samr_set_aliasinfo }, + {"SAMR_CREATE_USER" , SAMR_CREATE_USER , api_samr_create_user }, + {"SAMR_LOOKUP_RIDS" , SAMR_LOOKUP_RIDS , api_samr_lookup_rids }, + {"SAMR_GET_DOM_PWINFO" , SAMR_GET_DOM_PWINFO , api_samr_get_dom_pwinfo }, + {"SAMR_CHGPASSWD_USER" , SAMR_CHGPASSWD_USER , api_samr_chgpasswd_user }, + {"SAMR_OPEN_ALIAS" , SAMR_OPEN_ALIAS , api_samr_open_alias }, + {"SAMR_OPEN_GROUP" , SAMR_OPEN_GROUP , api_samr_open_group }, + {"SAMR_OPEN_DOMAIN" , SAMR_OPEN_DOMAIN , api_samr_open_domain }, + {"SAMR_UNKNOWN_2D" , SAMR_UNKNOWN_2D , api_samr_unknown_2d }, + {"SAMR_LOOKUP_DOMAIN" , SAMR_LOOKUP_DOMAIN , api_samr_lookup_domain }, + + {"SAMR_QUERY_SEC_OBJECT" , SAMR_QUERY_SEC_OBJECT , api_samr_query_sec_obj }, + {"SAMR_SET_SEC_OBJECT" , SAMR_SET_SEC_OBJECT , api_samr_set_sec_obj }, + {"SAMR_GET_USRDOM_PWINFO" , SAMR_GET_USRDOM_PWINFO, api_samr_get_usrdom_pwinfo}, + {"SAMR_UNKNOWN_2E" , SAMR_UNKNOWN_2E , api_samr_unknown_2e }, + {"SAMR_SET_DOMAIN_INFO" , SAMR_SET_DOMAIN_INFO , api_samr_set_dom_info }, + {"SAMR_CONNECT4" , SAMR_CONNECT4 , api_samr_connect4 }, + {NULL , 0 , NULL } +}; + +/******************************************************************* + receives a samr pipe and responds. + ********************************************************************/ +BOOL api_samr_rpc(pipes_struct *p) +{ + return api_rpcTNP(p, "api_samr_rpc", api_samr_cmds); } diff --git a/source/rpc_server/srv_spoolss.c b/source/rpc_server/srv_spoolss.c index 5832ae876bf..5924c5831bc 100755 --- a/source/rpc_server/srv_spoolss.c +++ b/source/rpc_server/srv_spoolss.c @@ -3,10 +3,9 @@ * RPC Pipe client / server routines * Copyright (C) Andrew Tridgell 1992-2000, * Copyright (C) Luke Kenneth Casson Leighton 1996-2000, - * Copyright (C) Jean François Micouleau 1998-2000, - * Copyright (C) Jeremy Allison 2001, - * Copyright (C) Gerald Carter 2001-2002, - * Copyright (C) Anthony Liguori 2003. + * Copyright (C) Jean François Micouleau 1998-2000. + * Copyright (C) Jeremy Allison 2001. + * Copyright (C) Gerald Carter 2001-2002. * * 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 @@ -1580,14 +1579,8 @@ static BOOL api_spoolss_replycloseprinter(pipes_struct *p) \pipe\spoolss commands ********************************************************************/ -#ifdef RPC_SPOOLSS_DYNAMIC -int rpc_pipe_init(void) -#else -int rpc_spoolss_init(void) -#endif +struct api_struct api_spoolss_cmds[] = { - struct api_struct api_spoolss_cmds[] = - { {"SPOOLSS_OPENPRINTER", SPOOLSS_OPENPRINTER, api_spoolss_open_printer }, {"SPOOLSS_OPENPRINTEREX", SPOOLSS_OPENPRINTEREX, api_spoolss_open_printer_ex }, {"SPOOLSS_GETPRINTERDATA", SPOOLSS_GETPRINTERDATA, api_spoolss_getprinterdata }, @@ -1641,9 +1634,15 @@ int rpc_spoolss_init(void) {"SPOOLSS_DELETEPRINTERDRIVEREX", SPOOLSS_DELETEPRINTERDRIVEREX, api_spoolss_deleteprinterdriverex }, #if 0 {"SPOOLSS_REPLYOPENPRINTER", SPOOLSS_REPLYOPENPRINTER, api_spoolss_replyopenprinter }, - {"SPOOLSS_REPLYCLOSEPRINTER", SPOOLSS_REPLYCLOSEPRINTER, api_spoolss_replycloseprinter } + {"SPOOLSS_REPLYCLOSEPRINTER", SPOOLSS_REPLYCLOSEPRINTER, api_spoolss_replycloseprinter }, #endif - }; - return rpc_pipe_register_commands("spoolss", "spoolss", api_spoolss_cmds, - sizeof(api_spoolss_cmds) / sizeof(struct api_struct)); + { NULL, 0, NULL } +}; + +/******************************************************************* +receives a spoolss pipe and responds. +********************************************************************/ +BOOL api_spoolss_rpc(pipes_struct *p) +{ + return api_rpcTNP(p, "api_spoolss_rpc", api_spoolss_cmds); } diff --git a/source/rpc_server/srv_srvsvc.c b/source/rpc_server/srv_srvsvc.c index 983c6609651..4a372de0897 100644 --- a/source/rpc_server/srv_srvsvc.c +++ b/source/rpc_server/srv_srvsvc.c @@ -3,9 +3,8 @@ * RPC Pipe client / server routines * Copyright (C) Andrew Tridgell 1992-1997, * Copyright (C) Luke Kenneth Casson Leighton 1996-1997, - * Copyright (C) Paul Ashton 1997, - * Copyright (C) Jeremy Allison 2001, - * Copyright (C) Anthony Liguori 2003. + * Copyright (C) Paul Ashton 1997. + * Copyright (C) Jeremy Allison 2001. * * 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 @@ -526,32 +525,32 @@ static BOOL api_srv_net_file_set_secdesc(pipes_struct *p) \PIPE\srvsvc commands ********************************************************************/ -#ifdef RPC_SVC_DYNAMIC -int rpc_pipe_init(void) -#else -int rpc_srv_init(void) -#endif +static const struct api_struct api_srv_cmds[] = { - static const struct api_struct api_srv_cmds[] = - { - { "SRV_NET_CONN_ENUM" , SRV_NET_CONN_ENUM , api_srv_net_conn_enum }, - { "SRV_NET_SESS_ENUM" , SRV_NET_SESS_ENUM , api_srv_net_sess_enum }, - { "SRV_NET_SHARE_ENUM_ALL" , SRV_NET_SHARE_ENUM_ALL , api_srv_net_share_enum_all }, - { "SRV_NET_SHARE_ENUM" , SRV_NET_SHARE_ENUM , api_srv_net_share_enum }, - { "SRV_NET_SHARE_ADD" , SRV_NET_SHARE_ADD , api_srv_net_share_add }, - { "SRV_NET_SHARE_DEL" , SRV_NET_SHARE_DEL , api_srv_net_share_del }, - { "SRV_NET_SHARE_DEL_STICKY" , SRV_NET_SHARE_DEL_STICKY , api_srv_net_share_del_sticky }, - { "SRV_NET_SHARE_GET_INFO" , SRV_NET_SHARE_GET_INFO , api_srv_net_share_get_info }, - { "SRV_NET_SHARE_SET_INFO" , SRV_NET_SHARE_SET_INFO , api_srv_net_share_set_info }, - { "SRV_NET_FILE_ENUM" , SRV_NET_FILE_ENUM , api_srv_net_file_enum }, - { "SRV_NET_SRV_GET_INFO" , SRV_NET_SRV_GET_INFO , api_srv_net_srv_get_info }, - { "SRV_NET_SRV_SET_INFO" , SRV_NET_SRV_SET_INFO , api_srv_net_srv_set_info }, - { "SRV_NET_REMOTE_TOD" , SRV_NET_REMOTE_TOD , api_srv_net_remote_tod }, - { "SRV_NET_DISK_ENUM" , SRV_NET_DISK_ENUM , api_srv_net_disk_enum }, - { "SRV_NET_NAME_VALIDATE" , SRV_NET_NAME_VALIDATE , api_srv_net_name_validate }, - { "SRV_NET_FILE_QUERY_SECDESC", SRV_NET_FILE_QUERY_SECDESC, api_srv_net_file_query_secdesc }, - { "SRV_NET_FILE_SET_SECDESC" , SRV_NET_FILE_SET_SECDESC , api_srv_net_file_set_secdesc } - }; - return rpc_pipe_register_commands("srvsvc", "ntsvcs", api_srv_cmds, - sizeof(api_srv_cmds) / sizeof(struct api_struct)); + { "SRV_NET_CONN_ENUM" , SRV_NET_CONN_ENUM , api_srv_net_conn_enum }, + { "SRV_NET_SESS_ENUM" , SRV_NET_SESS_ENUM , api_srv_net_sess_enum }, + { "SRV_NET_SHARE_ENUM_ALL" , SRV_NET_SHARE_ENUM_ALL , api_srv_net_share_enum_all }, + { "SRV_NET_SHARE_ENUM" , SRV_NET_SHARE_ENUM , api_srv_net_share_enum }, + { "SRV_NET_SHARE_ADD" , SRV_NET_SHARE_ADD , api_srv_net_share_add }, + { "SRV_NET_SHARE_DEL" , SRV_NET_SHARE_DEL , api_srv_net_share_del }, + { "SRV_NET_SHARE_DEL_STICKY", SRV_NET_SHARE_DEL_STICKY, api_srv_net_share_del_sticky }, + { "SRV_NET_SHARE_GET_INFO", SRV_NET_SHARE_GET_INFO, api_srv_net_share_get_info }, + { "SRV_NET_SHARE_SET_INFO", SRV_NET_SHARE_SET_INFO, api_srv_net_share_set_info }, + { "SRV_NET_FILE_ENUM" , SRV_NET_FILE_ENUM , api_srv_net_file_enum }, + { "SRV_NET_SRV_GET_INFO" , SRV_NET_SRV_GET_INFO , api_srv_net_srv_get_info }, + { "SRV_NET_SRV_SET_INFO" , SRV_NET_SRV_SET_INFO , api_srv_net_srv_set_info }, + { "SRV_NET_REMOTE_TOD" , SRV_NET_REMOTE_TOD , api_srv_net_remote_tod }, + { "SRV_NET_DISK_ENUM" , SRV_NET_DISK_ENUM , api_srv_net_disk_enum }, + { "SRV_NET_NAME_VALIDATE" , SRV_NET_NAME_VALIDATE , api_srv_net_name_validate}, + { "SRV_NET_FILE_QUERY_SECDESC",SRV_NET_FILE_QUERY_SECDESC, api_srv_net_file_query_secdesc}, + { "SRV_NET_FILE_SET_SECDESC" , SRV_NET_FILE_SET_SECDESC , api_srv_net_file_set_secdesc}, + { NULL , 0 , NULL } +}; + +/******************************************************************* +receives a srvsvc pipe and responds. +********************************************************************/ +BOOL api_srvsvc_rpc(pipes_struct *p) +{ + return api_rpcTNP(p, "api_srvsvc_rpc", api_srv_cmds); } diff --git a/source/rpc_server/srv_wkssvc.c b/source/rpc_server/srv_wkssvc.c index 1fed2cc6db0..c783becbbeb 100644 --- a/source/rpc_server/srv_wkssvc.c +++ b/source/rpc_server/srv_wkssvc.c @@ -3,8 +3,7 @@ * RPC Pipe client / server routines * Copyright (C) Andrew Tridgell 1992-1997, * Copyright (C) Luke Kenneth Casson Leighton 1996-1997, - * Copyright (C) Paul Ashton 1997, - * Copyright (C) Anthony Liguori 2003. + * Copyright (C) Paul Ashton 1997. * * 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 @@ -59,17 +58,16 @@ static BOOL api_wks_query_info(pipes_struct *p) /******************************************************************* \PIPE\wkssvc commands ********************************************************************/ +static struct api_struct api_wks_cmds[] = +{ + { "WKS_Q_QUERY_INFO", WKS_QUERY_INFO, api_wks_query_info }, + { NULL , 0 , NULL } +}; -#ifdef RPC_WKS_DYNAMIC -int rpc_pipe_init(void) -#else -int rpc_wks_init(void) -#endif +/******************************************************************* + receives a wkssvc pipe and responds. + ********************************************************************/ +BOOL api_wkssvc_rpc(pipes_struct *p) { - static struct api_struct api_wks_cmds[] = - { - { "WKS_Q_QUERY_INFO", WKS_QUERY_INFO, api_wks_query_info } - }; - return rpc_pipe_register_commands("wkssvc", "ntsvcs", api_wks_cmds, - sizeof(api_wks_cmds) / sizeof(struct api_struct)); + return api_rpcTNP(p, "api_wkssvc_rpc", api_wks_cmds); } diff --git a/source/sam/SAM-interface_handles.txt b/source/sam/SAM-interface_handles.txt deleted file mode 100644 index 1c164bd198b..00000000000 --- a/source/sam/SAM-interface_handles.txt +++ /dev/null @@ -1,123 +0,0 @@ -SAM API - -NTSTATUS sam_get_sec_obj(NT_USER_TOKEN *access, DOM_SID *sid, SEC_DESC **sd) -NTSTATUS sam_set_sec_obj(NT_USER_TOKEN *access, DOM_SID *sid, SEC_DESC *sd) - -NTSTATUS sam_lookup_name(NT_USER_TOKEN *access, DOM_SID *domain, char *name, DOM_SID **sid, uint32 *type) -NTSTATUS sam_lookup_sid(NT_USER_TOKEN *access, DOM_SID *sid, char **name, uint32 *type) - - -Domain API - -NTSTATUS sam_update_domain(SAM_DOMAIN_HANDLE *domain) - -NTSTATUS sam_enum_domains(NT_USER_TOKEN *access, int32 *domain_count, DOM_SID **domains, char **domain_names) -NTSTATUS sam_lookup_domain(NT_USER_TOKEN *access, char *domain, DOM_SID **domainsid) - -NTSTATUS sam_get_domain_by_sid(NT_USER_TOKEN *access, uint32 access_desired, DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain) - - -User API - -NTSTATUS sam_create_user(NT_USER_TOKEN *access, uint32 access_desired, SAM_USER_HANDLE **user) -NTSTATUS sam_add_user(SAM_USER_HANDLE *user) -NTSTATUS sam_update_user(SAM_USER_HANDLE *user) -NTSTATUS sam_delete_user(SAM_USER_HANDLE * user) - -NTSTATUS sam_enum_users(NT_USER_TOKEN *access, DOM_SID *domain, int32 *user_count, SAM_USER_ENUM **users) - -NTSTATUS sam_get_user_by_sid(NT_USER_TOKEN *access, uint32 access_desired, DOM_SID *usersid, SAM_USER_HANDLE **user) -NTSTATUS sam_get_user_by_name(NT_USER_TOKEN *access, uint32 access_desired, char *domain, char *name, SAM_USER_HANDLE **user) - - -Group API - -NTSTATUS sam_create_group(NT_USER_TOKEN *access, uint32 access_desired, uint32 typ, SAM_GROUP_HANDLE **group) -NTSTATUS sam_add_group(SAM_GROUP_HANDLE *samgroup) -NTSTATUS sam_update_group(SAM_GROUP_HANDLE *samgroup) -NTSTATUS sam_delete_group(SAM_GROUP_HANDLE *groupsid) - -NTSTATUS sam_enum_groups(NT_USER_TOKEN *access, DOM_SID *domainsid, uint32 typ, uint32 *groups_count, SAM_GROUP_ENUM **groups) - -NTSTATUS sam_get_group_by_sid(NT_USER_TOKEN *access, uint32 access_desired, DOM_SID *groupsid, SAM_GROUP_HANDLE **group) -NTSTATUS sam_get_group_by_name(NT_USER_TOKEN *access, uint32 access_desired, char *domain, char *name, SAM_GROUP_HANDLE **group) - -NTSTATUS sam_add_member_to_group(SAM_GROUP_HANDLE *group, SAM_GROUP_MEMBER *member) -NTSTATUS sam_delete_member_from_group(SAM_GROUP_HANDLE *group, SAM_GROUP_MEMBER *member) -NTSTATUS sam_enum_groupmembers(SAM_GROUP_HANLDE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) - -NTSTATUS sam_get_groups_of_user(SAM_USER_HANDLE *user, uint32 typ, uint32 *group_count, SAM_GROUP_ENUM **groups) - - - -structures - -typedef _SAM_GROUP_MEMBER { - DOM_SID sid; - BOOL group; /* specifies if it is a group or a user */ - -} SAM_GROUP_MEMBER - -typedef struct sam_user_enum { - DOM_SID sid; - char *username; - char *full_name; - char *user_desc; - uint16 acc_ctrl; -} SAM_USER_ENUM; - -typedef struct sam_group_enum { - DOM_SID sid; - char *groupname; - char *comment; -} SAM_GROUP_ENUM - -NTSTATUS sam_get_domain_sid(SAM_DOMAIN_HANDLE *domain, DOM_SID **sid) -NTSTATUS sam_get_domain_num_users(SAM_DOMAIN_HANDLE *domain, uint32 *num_users) -NTSTATUS sam_get_domain_num_groups(SAM_DOMAIN_HANDLE *domain, uint32 *num_groups) -NTSTATUS sam_get_domain_num_aliases(SAM_DOMAIN_HANDLE *domain, uint32 *num_aliases) -NTSTATUS sam_{get,set}_domain_name(SAM_DOMAIN_HANDLE *domain, char **domain_name) -NTSTATUS sam_{get,set}_domain_server(SAM_DOMAIN_HANDLE *domain, char **server_name) -NTSTATUS sam_{get,set}_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *max_passwordage) -NTSTATUS sam_{get,set}_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *min_passwordage) -NTSTATUS sam_{get,set}_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME *lockout_duration) -NTSTATUS sam_{get,set}_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME *reset_lockout_count) -NTSTATUS sam_{get,set}_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 *min_passwordlength) -NTSTATUS sam_{get,set}_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uin16 *password_history) -NTSTATUS sam_{get,set}_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 *lockout_count) -NTSTATUS sam_{get,set}_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL *force_logoff) -NTSTATUS sam_{get,set}_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL *login_pwdchange) - -NTSTATUS sam_get_user_sid(SAM_USER_HANDLE *user, DOM_SID **sid) -NTSTATUS sam_{get,set}_user_pgroup(SAM_USER_HANDLE *user, DOM_SID **pgroup) -NTSTATUS sam_{get,set}_user_name(SAM_USER_HANDLE *user, char **username) -NTSTATUS sam_{get,set}_user_fullname(SAM_USER_HANDLE *user, char** fullname) -NTSTATUS sam_{get,set}_user_description(SAM_USER_HANDLE *user, char **description) -NTSTATUS sam_{get,set}_user_home_dir(SAM_USER_HANDLE *user, char **home_dir) -NTSTATUS sam_{get,set}_user_dir_drive(SAM_USER_HANDLE *user, char **dir_drive) -NTSTATUS sam_{get,set}_user_logon_script(SAM_USER_HANDLE *user, char **logon_script) -NTSTATUS sam_{get,set}_user_profile_path(SAM_USER_HANDLE *user, char **profile_path) -NTSTATUS sam_{get,set}_user_workstations(SAM_USER_HANDLE *user, char **workstations) -NTSTATUS sam_{get,set}_user_munged_dial(SAM_USER_HANDLE *user, char **munged_dial) -NTSTATUS sam_{get,set}_user_lm_pwd(SAM_USER_HANDLE *user, DATA_BLOB *lm_pwd) -NTSTATUS sam_{get,set}_user_nt_pwd(SAM_USER_HANDLE *user, DATA_BLOB *nt_pwd) -NTSTATUS sam_{get,set}_user_plain_pwd(SAM_USER_HANDLE *user, DATA_BLOB *plaintext_pwd) -NTSTATUS sam_{get,set}_user_acct_ctrl(SAM_USER_HANDLE *user, uint16 *acct_ctrl) -NTSTATUS sam_{get,set}_user_logon_divs(SAM_USER_HANDLE *user, uint16 *logon_divs) -NTSTATUS sam_{get,set}_user_hours(SAM_USER_HANDLE *user, uint32 *hours_len, uint8 **hours) -NTSTATUS sam_{get,set}_user_logon_time(SAM_USER_HANDLE *user, NTTIME *logon_time) -NTSTATUS sam_{get,set}_user_logoff_time(SAM_USER_HANDLE *user, NTTIME *logoff_time) -NTSTATUS sam_{get,set}_user_kickoff_time(SAM_USER_HANDLE *user, NTTIME kickoff_time) -NTSTATUS sam_{get,set}_user_pwd_last_set(SAM_USER_HANDLE *user, NTTIME pwd_last_set) -NTSTATUS sam_{get,set}_user_pwd_can_change(SAM_USER_HANDLE *user, NTTIME pwd_can_change) -NTSTATUS sam_{get,set}_user_pwd_must_change(SAM_USER_HANDLE *user, NTTIME pwd_must_change) -NTSTATUS sam_{get,set}_user_unknown_1(SAM_USER_HANDLE *user, char **unknown_1) -NTSTATUS sam_{get,set}_user_unknown_2(SAM_USER_HANDLE *user, uint32 *unknown_2) -NTSTATUS sam_{get,set}_user_unknown_3(SAM_USER_HANDLE *user, uint32 *unknown_3) -NTSTATUS sam_{get,set}_user_unknown_4(SAM_USER_HANDLE *user, uint32 *unknown_4) - -NTSTATUS sam_get_group_sid(SAM_GROUP_HANDLE *group, DOM_SID **sid) -NTSTATUS sam_get_group_typ(SAM_GROUP_HANDLE *group, uint32 *typ) -NTSTATUS sam_{get,set}_group_name(SAM_GROUP_HANDLE *group, char **group_name) -NTSTATUS sam_{get,set}_group_comment(SAM_GROUP_HANDLE *group, char **comment) -NTSTATUS sam_{get,set}_group_priv_set(SAM_GROUP_HANDLE *group, PRIVILEGE_SET *priv_set) \ No newline at end of file diff --git a/source/sam/account.c b/source/sam/account.c deleted file mode 100644 index b8336146cda..00000000000 --- a/source/sam/account.c +++ /dev/null @@ -1,305 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Password and authentication handling - Copyright (C) Jeremy Allison 1996-2001 - Copyright (C) Luke Kenneth Casson Leighton 1996-1998 - Copyright (C) Gerald (Jerry) Carter 2000-2001 - Copyright (C) Andrew Bartlett 2001-2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -#undef DBGC_CLASS -#define DBGC_CLASS DBGC_SAM - -/************************************************************ - Fill the SAM_ACCOUNT_HANDLE with default values. - ***********************************************************/ - -static void sam_fill_default_account(SAM_ACCOUNT_HANDLE *account) -{ - ZERO_STRUCT(account->private); /* Don't touch the talloc context */ - - /* Don't change these timestamp settings without a good reason. - They are important for NT member server compatibility. */ - - /* FIXME: We should actually call get_nt_time_max() or sthng - * here */ - unix_to_nt_time(&(account->private.logoff_time),get_time_t_max()); - unix_to_nt_time(&(account->private.kickoff_time),get_time_t_max()); - unix_to_nt_time(&(account->private.pass_must_change_time),get_time_t_max()); - account->private.unknown_1 = 0x00ffffff; /* don't know */ - account->private.logon_divs = 168; /* hours per week */ - account->private.hours_len = 21; /* 21 times 8 bits = 168 */ - memset(account->private.hours, 0xff, account->private.hours_len); /* available at all hours */ - account->private.unknown_2 = 0x00000000; /* don't know */ - account->private.unknown_3 = 0x000004ec; /* don't know */ -} - -static void destroy_sam_talloc(SAM_ACCOUNT_HANDLE **account) -{ - if (*account) { - data_blob_clear_free(&((*account)->private.lm_pw)); - data_blob_clear_free(&((*account)->private.nt_pw)); - if((*account)->private.plaintext_pw!=NULL) - memset((*account)->private.plaintext_pw,'\0',strlen((*account)->private.plaintext_pw)); - - talloc_destroy((*account)->mem_ctx); - *account = NULL; - } -} - - -/********************************************************************** - Alloc memory and initialises a SAM_ACCOUNT_HANDLE on supplied mem_ctx. -***********************************************************************/ - -NTSTATUS sam_init_account_talloc(TALLOC_CTX *mem_ctx, SAM_ACCOUNT_HANDLE **account) -{ - SMB_ASSERT(*account != NULL); - - if (!mem_ctx) { - DEBUG(0,("sam_init_account_talloc: mem_ctx was NULL!\n")); - return NT_STATUS_UNSUCCESSFUL; - } - - *account=(SAM_ACCOUNT_HANDLE *)talloc(mem_ctx, sizeof(SAM_ACCOUNT_HANDLE)); - - if (*account==NULL) { - DEBUG(0,("sam_init_account_talloc: error while allocating memory\n")); - return NT_STATUS_NO_MEMORY; - } - - (*account)->mem_ctx = mem_ctx; - - (*account)->free_fn = NULL; - - sam_fill_default_account(*account); - - return NT_STATUS_OK; -} - - -/************************************************************* - Alloc memory and initialises a struct sam_passwd. - ************************************************************/ - -NTSTATUS sam_init_account(SAM_ACCOUNT_HANDLE **account) -{ - TALLOC_CTX *mem_ctx; - NTSTATUS nt_status; - - mem_ctx = talloc_init("sam internal SAM_ACCOUNT_HANDLE allocation"); - - if (!mem_ctx) { - DEBUG(0,("sam_init_account: error while doing talloc_init()\n")); - return NT_STATUS_NO_MEMORY; - } - - if (!NT_STATUS_IS_OK(nt_status = sam_init_account_talloc(mem_ctx, account))) { - talloc_destroy(mem_ctx); - return nt_status; - } - - (*account)->free_fn = destroy_sam_talloc; - - return NT_STATUS_OK; -} - -/** - * Free the contents of the SAM_ACCOUNT_HANDLE, but not the structure. - * - * Also wipes the LM and NT hashes and plaintext password from - * memory. - * - * @param account SAM_ACCOUNT_HANDLE to free members of. - **/ - -static void sam_free_account_contents(SAM_ACCOUNT_HANDLE *account) -{ - - /* Kill off sensitive data. Free()ed by the - talloc mechinism */ - - data_blob_clear_free(&(account->private.lm_pw)); - data_blob_clear_free(&(account->private.nt_pw)); - if (account->private.plaintext_pw) - memset(account->private.plaintext_pw,'\0',strlen(account->private.plaintext_pw)); -} - - -/************************************************************ - Reset the SAM_ACCOUNT_HANDLE and free the NT/LM hashes. - ***********************************************************/ - -NTSTATUS sam_reset_sam(SAM_ACCOUNT_HANDLE *account) -{ - SMB_ASSERT(account != NULL); - - sam_free_account_contents(account); - - sam_fill_default_account(account); - - return NT_STATUS_OK; -} - - -/************************************************************ - Free the SAM_ACCOUNT_HANDLE and the member pointers. - ***********************************************************/ - -NTSTATUS sam_free_account(SAM_ACCOUNT_HANDLE **account) -{ - SMB_ASSERT(*account != NULL); - - sam_free_account_contents(*account); - - if ((*account)->free_fn) { - (*account)->free_fn(account); - } - - return NT_STATUS_OK; -} - - -/********************************************************** - Encode the account control bits into a string. - length = length of string to encode into (including terminating - null). length *MUST BE MORE THAN 2* ! - **********************************************************/ - -char *sam_encode_acct_ctrl(uint16 acct_ctrl, size_t length) -{ - static fstring acct_str; - size_t i = 0; - - acct_str[i++] = '['; - - if (acct_ctrl & ACB_PWNOTREQ ) acct_str[i++] = 'N'; - if (acct_ctrl & ACB_DISABLED ) acct_str[i++] = 'D'; - if (acct_ctrl & ACB_HOMDIRREQ) acct_str[i++] = 'H'; - if (acct_ctrl & ACB_TEMPDUP ) acct_str[i++] = 'T'; - if (acct_ctrl & ACB_NORMAL ) acct_str[i++] = 'U'; - if (acct_ctrl & ACB_MNS ) acct_str[i++] = 'M'; - if (acct_ctrl & ACB_WSTRUST ) acct_str[i++] = 'W'; - if (acct_ctrl & ACB_SVRTRUST ) acct_str[i++] = 'S'; - if (acct_ctrl & ACB_AUTOLOCK ) acct_str[i++] = 'L'; - if (acct_ctrl & ACB_PWNOEXP ) acct_str[i++] = 'X'; - if (acct_ctrl & ACB_DOMTRUST ) acct_str[i++] = 'I'; - - for ( ; i < length - 2 ; i++ ) - acct_str[i] = ' '; - - i = length - 2; - acct_str[i++] = ']'; - acct_str[i++] = '\0'; - - return acct_str; -} - -/********************************************************** - Decode the account control bits from a string. - **********************************************************/ - -uint16 sam_decode_acct_ctrl(const char *p) -{ - uint16 acct_ctrl = 0; - BOOL finished = False; - - /* - * Check if the account type bits have been encoded after the - * NT password (in the form [NDHTUWSLXI]). - */ - - if (*p != '[') - return 0; - - for (p++; *p && !finished; p++) { - switch (*p) { - case 'N': { acct_ctrl |= ACB_PWNOTREQ ; break; /* 'N'o password. */ } - case 'D': { acct_ctrl |= ACB_DISABLED ; break; /* 'D'isabled. */ } - case 'H': { acct_ctrl |= ACB_HOMDIRREQ; break; /* 'H'omedir required. */ } - case 'T': { acct_ctrl |= ACB_TEMPDUP ; break; /* 'T'emp account. */ } - case 'U': { acct_ctrl |= ACB_NORMAL ; break; /* 'U'ser account (normal). */ } - case 'M': { acct_ctrl |= ACB_MNS ; break; /* 'M'NS logon user account. What is this ? */ } - case 'W': { acct_ctrl |= ACB_WSTRUST ; break; /* 'W'orkstation account. */ } - case 'S': { acct_ctrl |= ACB_SVRTRUST ; break; /* 'S'erver account. */ } - case 'L': { acct_ctrl |= ACB_AUTOLOCK ; break; /* 'L'ocked account. */ } - case 'X': { acct_ctrl |= ACB_PWNOEXP ; break; /* No 'X'piry on password */ } - case 'I': { acct_ctrl |= ACB_DOMTRUST ; break; /* 'I'nterdomain trust account. */ } - case ' ': { break; } - case ':': - case '\n': - case '\0': - case ']': - default: { finished = True; } - } - } - - return acct_ctrl; -} - -/************************************************************* - Routine to set 32 hex password characters from a 16 byte array. -**************************************************************/ - -void sam_sethexpwd(char *p, const unsigned char *pwd, uint16 acct_ctrl) -{ - if (pwd != NULL) { - int i; - for (i = 0; i < 16; i++) - slprintf(&p[i*2], 3, "%02X", pwd[i]); - } else { - if (acct_ctrl & ACB_PWNOTREQ) - safe_strcpy(p, "NO PASSWORDXXXXXXXXXXXXXXXXXXXXX", 33); - else - safe_strcpy(p, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 33); - } -} - -/************************************************************* - Routine to get the 32 hex characters and turn them - into a 16 byte array. -**************************************************************/ - -BOOL sam_gethexpwd(const char *p, unsigned char *pwd) -{ - int i; - unsigned char lonybble, hinybble; - char *hexchars = "0123456789ABCDEF"; - char *p1, *p2; - - if (!p) - return (False); - - for (i = 0; i < 32; i += 2) { - hinybble = toupper(p[i]); - lonybble = toupper(p[i + 1]); - - p1 = strchr(hexchars, hinybble); - p2 = strchr(hexchars, lonybble); - - if (!p1 || !p2) - return (False); - - hinybble = PTR_DIFF(p1, hexchars); - lonybble = PTR_DIFF(p2, hexchars); - - pwd[i / 2] = (hinybble << 4) | lonybble; - } - return (True); -} diff --git a/source/sam/get_set_account.c b/source/sam/get_set_account.c deleted file mode 100644 index acac281d21a..00000000000 --- a/source/sam/get_set_account.c +++ /dev/null @@ -1,845 +0,0 @@ -/* - Unix SMB/CIFS implementation. - SAM_ACCOUNT_HANDLE access routines - Copyright (C) Andrew Bartlett 2002 - Copyright (C) Stefan (metze) Metzmacher 2002 - Copyright (C) Jelmer Vernooij 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -#undef DBGC_CLASS -#define DBGC_CLASS DBGC_SAM - -NTSTATUS sam_get_account_domain_sid(const SAM_ACCOUNT_HANDLE *sampass, const DOM_SID **sid) -{ - NTSTATUS status; - SAM_DOMAIN_HANDLE *domain; - SAM_ASSERT(!sampass || !sid); - - if (!NT_STATUS_IS_OK(status = sam_get_account_domain(sampass, &domain))){ - DEBUG(0, ("sam_get_account_domain_sid: Can't get domain for account\n")); - return status; - } - - return sam_get_domain_sid(domain, sid); -} - -NTSTATUS sam_get_account_domain_name(const SAM_ACCOUNT_HANDLE *sampass, const char **domain_name) -{ - NTSTATUS status; - SAM_DOMAIN_HANDLE *domain; - SAM_ASSERT(sampass && domain_name); - - if (!NT_STATUS_IS_OK(status = sam_get_account_domain(sampass, &domain))){ - DEBUG(0, ("sam_get_account_domain_name: Can't get domain for account\n")); - return status; - } - - return sam_get_domain_name(domain, domain_name); -} - -NTSTATUS sam_get_account_acct_ctrl(const SAM_ACCOUNT_HANDLE *sampass, uint16 *acct_ctrl) -{ - SAM_ASSERT(sampass && acct_ctrl); - - *acct_ctrl = sampass->private.acct_ctrl; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_logon_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *logon_time) -{ - SAM_ASSERT(sampass && logon_time) ; - - *logon_time = sampass->private.logon_time; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_logoff_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *logoff_time) -{ - SAM_ASSERT(sampass && logoff_time) ; - - *logoff_time = sampass->private.logoff_time; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_kickoff_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *kickoff_time) -{ - SAM_ASSERT(sampass && kickoff_time); - - *kickoff_time = sampass->private.kickoff_time; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_pass_last_set_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *pass_last_set_time) -{ - SAM_ASSERT(sampass && pass_last_set_time); - - *pass_last_set_time = sampass->private.pass_last_set_time; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_pass_can_change_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *pass_can_change_time) -{ - SAM_ASSERT(sampass && pass_can_change_time); - - *pass_can_change_time = sampass->private.pass_can_change_time; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_pass_must_change_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *pass_must_change_time) -{ - SAM_ASSERT(sampass && pass_must_change_time); - - *pass_must_change_time = sampass->private.pass_must_change_time; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_logon_divs(const SAM_ACCOUNT_HANDLE *sampass, uint16 *logon_divs) -{ - SAM_ASSERT(sampass && logon_divs); - - *logon_divs = sampass->private.logon_divs; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_hours_len(const SAM_ACCOUNT_HANDLE *sampass, uint32 *hours_len) -{ - SAM_ASSERT(sampass && hours_len); - - *hours_len = sampass->private.hours_len; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_hours(const SAM_ACCOUNT_HANDLE *sampass, const uint8 **hours) -{ - SAM_ASSERT(sampass && hours); - - *hours = sampass->private.hours; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_nt_pwd(const SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB *nt_pwd) -{ - SAM_ASSERT(sampass); - - SMB_ASSERT((!sampass->private.nt_pw.data) - || sampass->private.nt_pw.length == NT_HASH_LEN); - - *nt_pwd = sampass->private.nt_pw; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_lm_pwd(const SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB *lm_pwd) -{ - SAM_ASSERT(sampass); - - SMB_ASSERT((!sampass->private.lm_pw.data) - || sampass->private.lm_pw.length == LM_HASH_LEN); - - *lm_pwd = sampass->private.lm_pw; - - return NT_STATUS_OK; -} - -/* Return the plaintext password if known. Most of the time - it isn't, so don't assume anything magic about this function. - - Used to pass the plaintext to sam backends that might - want to store more than just the NTLM hashes. -*/ - -NTSTATUS sam_get_account_plaintext_pwd(const SAM_ACCOUNT_HANDLE *sampass, char **plain_pwd) -{ - SAM_ASSERT(sampass && plain_pwd); - - *plain_pwd = sampass->private.plaintext_pw; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_sid(const SAM_ACCOUNT_HANDLE *sampass, const DOM_SID **sid) -{ - SAM_ASSERT(sampass); - - *sid = &(sampass->private.account_sid); - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_pgroup(const SAM_ACCOUNT_HANDLE *sampass, const DOM_SID **sid) -{ - SAM_ASSERT(sampass); - - *sid = &(sampass->private.group_sid); - - return NT_STATUS_OK; -} - -/** - * Get flags showing what is initalised in the SAM_ACCOUNT_HANDLE - * @param sampass the SAM_ACCOUNT_HANDLE in question - * @return the flags indicating the members initialised in the struct. - **/ - -NTSTATUS sam_get_account_init_flag(const SAM_ACCOUNT_HANDLE *sampass, uint32 *initflag) -{ - SAM_ASSERT(sampass); - - *initflag = sampass->private.init_flag; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_name(const SAM_ACCOUNT_HANDLE *sampass, char **account_name) -{ - SAM_ASSERT(sampass); - - *account_name = sampass->private.account_name; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_domain(const SAM_ACCOUNT_HANDLE *sampass, SAM_DOMAIN_HANDLE **domain) -{ - SAM_ASSERT(sampass); - - *domain = sampass->private.domain; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_fullname(const SAM_ACCOUNT_HANDLE *sampass, char **fullname) -{ - SAM_ASSERT(sampass); - - *fullname = sampass->private.full_name; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_homedir(const SAM_ACCOUNT_HANDLE *sampass, char **homedir) -{ - SAM_ASSERT(sampass); - - *homedir = sampass->private.home_dir; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_unix_home_dir(const SAM_ACCOUNT_HANDLE *sampass, char **uhomedir) -{ - SAM_ASSERT(sampass); - - *uhomedir = sampass->private.unix_home_dir; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_dir_drive(const SAM_ACCOUNT_HANDLE *sampass, char **dirdrive) -{ - SAM_ASSERT(sampass); - - *dirdrive = sampass->private.dir_drive; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_logon_script(const SAM_ACCOUNT_HANDLE *sampass, char **logon_script) -{ - SAM_ASSERT(sampass); - - *logon_script = sampass->private.logon_script; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_profile_path(const SAM_ACCOUNT_HANDLE *sampass, char **profile_path) -{ - SAM_ASSERT(sampass); - - *profile_path = sampass->private.profile_path; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_description(const SAM_ACCOUNT_HANDLE *sampass, char **description) -{ - SAM_ASSERT(sampass); - - *description = sampass->private.acct_desc; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_workstations(const SAM_ACCOUNT_HANDLE *sampass, char **workstations) -{ - SAM_ASSERT(sampass); - - *workstations = sampass->private.workstations; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_unknown_str(const SAM_ACCOUNT_HANDLE *sampass, char **unknown_str) -{ - SAM_ASSERT(sampass); - - *unknown_str = sampass->private.unknown_str; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_munged_dial(const SAM_ACCOUNT_HANDLE *sampass, char **munged_dial) -{ - SAM_ASSERT(sampass); - - *munged_dial = sampass->private.munged_dial; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_unknown_1(const SAM_ACCOUNT_HANDLE *sampass, uint32 *unknown1) -{ - SAM_ASSERT(sampass && unknown1); - - *unknown1 = sampass->private.unknown_1; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_unknown_2(const SAM_ACCOUNT_HANDLE *sampass, uint32 *unknown2) -{ - SAM_ASSERT(sampass && unknown2); - - *unknown2 = sampass->private.unknown_2; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_unknown_3(const SAM_ACCOUNT_HANDLE *sampass, uint32 *unknown3) -{ - SAM_ASSERT(sampass && unknown3); - - *unknown3 = sampass->private.unknown_3; - - return NT_STATUS_OK; -} - -/********************************************************************* - Collection of set...() functions for SAM_ACCOUNT_HANDLE_INFO. - ********************************************************************/ - -NTSTATUS sam_set_account_acct_ctrl(SAM_ACCOUNT_HANDLE *sampass, uint16 acct_ctrl) -{ - SAM_ASSERT(sampass); - - sampass->private.acct_ctrl = acct_ctrl; - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_account_logon_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store) -{ - SAM_ASSERT(sampass); - - sampass->private.logon_time = mytime; - - - return NT_STATUS_UNSUCCESSFUL; -} - -NTSTATUS sam_set_account_logoff_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store) -{ - SAM_ASSERT(sampass); - - sampass->private.logoff_time = mytime; - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_account_kickoff_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store) -{ - SAM_ASSERT(sampass); - - sampass->private.kickoff_time = mytime; - - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_account_pass_can_change_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store) -{ - SAM_ASSERT(sampass); - - sampass->private.pass_can_change_time = mytime; - - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_account_pass_must_change_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store) -{ - SAM_ASSERT(sampass); - - sampass->private.pass_must_change_time = mytime; - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_account_pass_last_set_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime) -{ - SAM_ASSERT(sampass); - - sampass->private.pass_last_set_time = mytime; - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_account_hours_len(SAM_ACCOUNT_HANDLE *sampass, uint32 len) -{ - SAM_ASSERT(sampass); - - sampass->private.hours_len = len; - return NT_STATUS_OK; -} - -NTSTATUS sam_set_account_logon_divs(SAM_ACCOUNT_HANDLE *sampass, uint16 hours) -{ - SAM_ASSERT(sampass); - - sampass->private.logon_divs = hours; - return NT_STATUS_OK; -} - -/** - * Set flags showing what is initalised in the SAM_ACCOUNT_HANDLE - * @param sampass the SAM_ACCOUNT_HANDLE in question - * @param flag The *new* flag to be set. Old flags preserved - * this flag is only added. - **/ - -NTSTATUS sam_set_account_init_flag(SAM_ACCOUNT_HANDLE *sampass, uint32 flag) -{ - SAM_ASSERT(sampass); - - sampass->private.init_flag |= flag; - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_account_sid(SAM_ACCOUNT_HANDLE *sampass, const DOM_SID *u_sid) -{ - SAM_ASSERT(sampass && u_sid); - - sid_copy(&sampass->private.account_sid, u_sid); - - DEBUG(10, ("sam_set_account_sid: setting account sid %s\n", - sid_string_static(&sampass->private.account_sid))); - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_account_sid_from_string(SAM_ACCOUNT_HANDLE *sampass, const char *u_sid) -{ - DOM_SID new_sid; - SAM_ASSERT(sampass && u_sid); - - DEBUG(10, ("sam_set_account_sid_from_string: setting account sid %s\n", - u_sid)); - - if (!string_to_sid(&new_sid, u_sid)) { - DEBUG(1, ("sam_set_account_sid_from_string: %s isn't a valid SID!\n", u_sid)); - return NT_STATUS_UNSUCCESSFUL; - } - - if (!NT_STATUS_IS_OK(sam_set_account_sid(sampass, &new_sid))) { - DEBUG(1, ("sam_set_account_sid_from_string: could not set sid %s on SAM_ACCOUNT_HANDLE!\n", u_sid)); - return NT_STATUS_UNSUCCESSFUL; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_account_pgroup_sid(SAM_ACCOUNT_HANDLE *sampass, const DOM_SID *g_sid) -{ - SAM_ASSERT(sampass && g_sid); - - sid_copy(&sampass->private.group_sid, g_sid); - - DEBUG(10, ("sam_set_group_sid: setting group sid %s\n", - sid_string_static(&sampass->private.group_sid))); - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_account_pgroup_string(SAM_ACCOUNT_HANDLE *sampass, const char *g_sid) -{ - DOM_SID new_sid; - SAM_ASSERT(sampass && g_sid); - - DEBUG(10, ("sam_set_group_sid_from_string: setting group sid %s\n", - g_sid)); - - if (!string_to_sid(&new_sid, g_sid)) { - DEBUG(1, ("sam_set_group_sid_from_string: %s isn't a valid SID!\n", g_sid)); - return NT_STATUS_UNSUCCESSFUL; - } - - if (!NT_STATUS_IS_OK(sam_set_account_pgroup_sid(sampass, &new_sid))) { - DEBUG(1, ("sam_set_group_sid_from_string: could not set sid %s on SAM_ACCOUNT_HANDLE!\n", g_sid)); - return NT_STATUS_UNSUCCESSFUL; - } - return NT_STATUS_OK; -} - -/********************************************************************* - Set the domain name. - ********************************************************************/ - -NTSTATUS sam_set_account_domain(SAM_ACCOUNT_HANDLE *sampass, SAM_DOMAIN_HANDLE *domain) -{ - SAM_ASSERT(sampass); - - sampass->private.domain = domain; - - return NT_STATUS_OK; -} - -/********************************************************************* - Set the account's NT name. - ********************************************************************/ - -NTSTATUS sam_set_account_name(SAM_ACCOUNT_HANDLE *sampass, const char *account_name) -{ - SAM_ASSERT(sampass); - - DEBUG(10, ("sam_set_account_name: setting nt account_name %s, was %s\n", account_name, sampass->private.account_name)); - - sampass->private.account_name = talloc_strdup(sampass->mem_ctx, account_name); - - return NT_STATUS_OK; -} - -/********************************************************************* - Set the account's full name. - ********************************************************************/ - -NTSTATUS sam_set_account_fullname(SAM_ACCOUNT_HANDLE *sampass, const char *full_name) -{ - SAM_ASSERT(sampass); - - DEBUG(10, ("sam_set_account_fullname: setting full name %s, was %s\n", full_name, sampass->private.full_name)); - - sampass->private.full_name = talloc_strdup(sampass->mem_ctx, full_name); - - return NT_STATUS_OK; -} - -/********************************************************************* - Set the account's logon script. - ********************************************************************/ - -NTSTATUS sam_set_account_logon_script(SAM_ACCOUNT_HANDLE *sampass, const char *logon_script, BOOL store) -{ - SAM_ASSERT(sampass); - - DEBUG(10, ("sam_set_logon_script: from %s to %s\n", logon_script, sampass->private.logon_script)); - - sampass->private.logon_script = talloc_strdup(sampass->mem_ctx, logon_script); - - - return NT_STATUS_OK; -} - -/********************************************************************* - Set the account's profile path. - ********************************************************************/ - -NTSTATUS sam_set_account_profile_path(SAM_ACCOUNT_HANDLE *sampass, const char *profile_path, BOOL store) -{ - SAM_ASSERT(sampass); - - DEBUG(10, ("sam_set_profile_path: setting profile path %s, was %s\n", profile_path, sampass->private.profile_path)); - - sampass->private.profile_path = talloc_strdup(sampass->mem_ctx, profile_path); - - return NT_STATUS_OK; -} - -/********************************************************************* - Set the account's directory drive. - ********************************************************************/ - -NTSTATUS sam_set_account_dir_drive(SAM_ACCOUNT_HANDLE *sampass, const char *dir_drive, BOOL store) -{ - SAM_ASSERT(sampass); - - DEBUG(10, ("sam_set_dir_drive: setting dir drive %s, was %s\n", dir_drive, - sampass->private.dir_drive)); - - sampass->private.dir_drive = talloc_strdup(sampass->mem_ctx, dir_drive); - - return NT_STATUS_OK; -} - -/********************************************************************* - Set the account's home directory. - ********************************************************************/ - -NTSTATUS sam_set_account_homedir(SAM_ACCOUNT_HANDLE *sampass, const char *home_dir, BOOL store) -{ - SAM_ASSERT(sampass); - - DEBUG(10, ("sam_set_homedir: setting home dir %s, was %s\n", home_dir, - sampass->private.home_dir)); - - sampass->private.home_dir = talloc_strdup(sampass->mem_ctx, home_dir); - - return NT_STATUS_OK; -} - -/********************************************************************* - Set the account's unix home directory. - ********************************************************************/ - -NTSTATUS sam_set_account_unix_homedir(SAM_ACCOUNT_HANDLE *sampass, const char *unix_home_dir) -{ - SAM_ASSERT(sampass); - - DEBUG(10, ("sam_set_unix_homedir: setting home dir %s, was %s\n", unix_home_dir, - sampass->private.unix_home_dir)); - - sampass->private.unix_home_dir = talloc_strdup(sampass->mem_ctx, unix_home_dir); - - return NT_STATUS_OK; -} - -/********************************************************************* - Set the account's account description. - ********************************************************************/ - -NTSTATUS sam_set_account_acct_desc(SAM_ACCOUNT_HANDLE *sampass, const char *acct_desc) -{ - SAM_ASSERT(sampass); - - sampass->private.acct_desc = talloc_strdup(sampass->mem_ctx, acct_desc); - - return NT_STATUS_OK; -} - -/********************************************************************* - Set the account's workstation allowed list. - ********************************************************************/ - -NTSTATUS sam_set_account_workstations(SAM_ACCOUNT_HANDLE *sampass, const char *workstations) -{ - SAM_ASSERT(sampass); - - DEBUG(10, ("sam_set_workstations: setting workstations %s, was %s\n", workstations, - sampass->private.workstations)); - - sampass->private.workstations = talloc_strdup(sampass->mem_ctx, workstations); - - return NT_STATUS_OK; -} - -/********************************************************************* - Set the account's 'unknown_str', whatever the heck this actually is... - ********************************************************************/ - -NTSTATUS sam_set_account_unknown_str(SAM_ACCOUNT_HANDLE *sampass, const char *unknown_str) -{ - SAM_ASSERT(sampass); - - sampass->private.unknown_str = talloc_strdup(sampass->mem_ctx, unknown_str); - - return NT_STATUS_OK; -} - -/********************************************************************* - Set the account's dial string. - ********************************************************************/ - -NTSTATUS sam_set_account_munged_dial(SAM_ACCOUNT_HANDLE *sampass, const char *munged_dial) -{ - SAM_ASSERT(sampass); - - sampass->private.munged_dial = talloc_strdup(sampass->mem_ctx, munged_dial); - - return NT_STATUS_OK; -} - -/********************************************************************* - Set the account's NT hash. - ********************************************************************/ - -NTSTATUS sam_set_account_nt_pwd(SAM_ACCOUNT_HANDLE *sampass, const DATA_BLOB data) -{ - SAM_ASSERT(sampass); - - sampass->private.nt_pw = data; - - return NT_STATUS_OK; -} - -/********************************************************************* - Set the account's LM hash. - ********************************************************************/ - -NTSTATUS sam_set_account_lm_pwd(SAM_ACCOUNT_HANDLE *sampass, const DATA_BLOB data) -{ - SAM_ASSERT(sampass); - - sampass->private.lm_pw = data; - - return NT_STATUS_OK; -} - -/********************************************************************* - Set the account's plaintext password only (base procedure, see helper - below) - ********************************************************************/ - -NTSTATUS sam_set_account_plaintext_pwd(SAM_ACCOUNT_HANDLE *sampass, const char *plain_pwd) -{ - SAM_ASSERT(sampass); - - sampass->private.plaintext_pw = talloc_strdup(sampass->mem_ctx, plain_pwd); - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_account_unknown_1(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn) -{ - SAM_ASSERT(sampass); - - sampass->private.unknown_1 = unkn; - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_account_unknown_2(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn) -{ - SAM_ASSERT(sampass); - - sampass->private.unknown_2 = unkn; - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_account_unknown_3(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn) -{ - SAM_ASSERT(sampass); - - sampass->private.unknown_3 = unkn; - return NT_STATUS_OK; -} - -NTSTATUS sam_set_account_hours(SAM_ACCOUNT_HANDLE *sampass, const uint8 *hours) -{ - SAM_ASSERT(sampass); - - if (!hours) { - memset ((char *)sampass->private.hours, 0, MAX_HOURS_LEN); - return NT_STATUS_OK; - } - - memcpy(sampass->private.hours, hours, MAX_HOURS_LEN); - - return NT_STATUS_OK; -} - -/* Helpful interfaces to the above */ - -/********************************************************************* - Sets the last changed times and must change times for a normal - password change. - ********************************************************************/ - -NTSTATUS sam_set_account_pass_changed_now(SAM_ACCOUNT_HANDLE *sampass) -{ - uint32 expire; - NTTIME temptime; - - SAM_ASSERT(sampass); - - unix_to_nt_time(&temptime, time(NULL)); - if (!NT_STATUS_IS_OK(sam_set_account_pass_last_set_time(sampass, temptime))) - return NT_STATUS_UNSUCCESSFUL; - - if (!account_policy_get(AP_MAX_PASSWORD_AGE, &expire) - || (expire==(uint32)-1)) { - - get_nttime_max(&temptime); - if (!NT_STATUS_IS_OK(sam_set_account_pass_must_change_time(sampass, temptime, False))) - return NT_STATUS_UNSUCCESSFUL; - - } else { - /* FIXME: Add expire to temptime */ - - if (!NT_STATUS_IS_OK(sam_get_account_pass_last_set_time(sampass,&temptime)) || !NT_STATUS_IS_OK(sam_set_account_pass_must_change_time(sampass, temptime,True))) - return NT_STATUS_UNSUCCESSFUL; - } - - return NT_STATUS_OK; -} - -/********************************************************************* - Set the account's PLAINTEXT password. Used as an interface to the above. - Also sets the last change time to NOW. - ********************************************************************/ - -NTSTATUS sam_set_account_passwd(SAM_ACCOUNT_HANDLE *sampass, const char *plaintext) -{ - DATA_BLOB data; - uchar new_lanman_p16[16]; - uchar new_nt_p16[16]; - - SAM_ASSERT(sampass && plaintext); - - nt_lm_owf_gen(plaintext, new_nt_p16, new_lanman_p16); - - data = data_blob(new_nt_p16, 16); - if (!NT_STATUS_IS_OK(sam_set_account_nt_pwd(sampass, data))) - return NT_STATUS_UNSUCCESSFUL; - - data = data_blob(new_lanman_p16, 16); - - if (!NT_STATUS_IS_OK(sam_set_account_lm_pwd(sampass, data))) - return NT_STATUS_UNSUCCESSFUL; - - if (!NT_STATUS_IS_OK(sam_set_account_plaintext_pwd(sampass, plaintext))) - return NT_STATUS_UNSUCCESSFUL; - - if (!NT_STATUS_IS_OK(sam_set_account_pass_changed_now(sampass))) - return NT_STATUS_UNSUCCESSFUL; - - return NT_STATUS_OK; -} - diff --git a/source/sam/get_set_domain.c b/source/sam/get_set_domain.c deleted file mode 100644 index c70a4a3f097..00000000000 --- a/source/sam/get_set_domain.c +++ /dev/null @@ -1,263 +0,0 @@ -/* - Unix SMB/CIFS implementation. - SAM_DOMAIN access routines - Copyright (C) Andrew Bartlett 2002 - Copyright (C) Stefan (metze) Metzmacher 2002 - Copyright (C) Jelmer Vernooij 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -#undef DBGC_CLASS -#define DBGC_CLASS DBGC_SAM - -NTSTATUS sam_get_domain_sid(SAM_DOMAIN_HANDLE *domain, const DOM_SID **sid) -{ - SAM_ASSERT(domain &&sid); - - *sid = &(domain->private.sid); - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_domain_num_accounts(SAM_DOMAIN_HANDLE *domain, uint32 *num_accounts) -{ - SAM_ASSERT(domain &&num_accounts); - - *num_accounts = domain->private.num_accounts; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_domain_num_groups(SAM_DOMAIN_HANDLE *domain, uint32 *num_groups) -{ - SAM_ASSERT(domain &&num_groups); - - *num_groups = domain->private.num_groups; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_domain_num_aliases(SAM_DOMAIN_HANDLE *domain, uint32 *num_aliases) -{ - SAM_ASSERT(domain &&num_aliases); - - *num_aliases = domain->private.num_aliases; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_domain_name(SAM_DOMAIN_HANDLE *domain, const char **domain_name) -{ - SAM_ASSERT(domain &&domain_name); - - *domain_name = domain->private.name; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_domain_server(SAM_DOMAIN_HANDLE *domain, const char **server_name) -{ - SAM_ASSERT(domain &&server_name); - - *server_name = domain->private.servername; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *max_passwordage) -{ - SAM_ASSERT(domain &&max_passwordage); - - *max_passwordage = domain->private.max_passwordage; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *min_passwordage) -{ - SAM_ASSERT(domain &&min_passwordage); - - *min_passwordage = domain->private.min_passwordage; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME *lockout_duration) -{ - SAM_ASSERT(domain &&lockout_duration); - - *lockout_duration = domain->private.lockout_duration; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME *reset_lockout_count) -{ - SAM_ASSERT(domain &&reset_lockout_count); - - *reset_lockout_count = domain->private.reset_count; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 *min_passwordlength) -{ - SAM_ASSERT(domain &&min_passwordlength); - - *min_passwordlength = domain->private.min_passwordlength; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 *password_history) -{ - SAM_ASSERT(domain &&password_history); - - *password_history = domain->private.password_history; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 *lockout_count) -{ - SAM_ASSERT(domain &&lockout_count); - - *lockout_count = domain->private.lockout_count; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL *force_logoff) -{ - SAM_ASSERT(domain &&force_logoff); - - *force_logoff = domain->private.force_logoff; - - return NT_STATUS_OK; -} - - -NTSTATUS sam_get_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL *login_pwdchange) -{ - SAM_ASSERT(domain && login_pwdchange); - - *login_pwdchange = domain->private.login_pwdchange; - - return NT_STATUS_OK; -} - -/* Set */ - -NTSTATUS sam_set_domain_name(SAM_DOMAIN_HANDLE *domain, const char *domain_name) -{ - SAM_ASSERT(domain); - - domain->private.name = talloc_strdup(domain->mem_ctx, domain_name); - - return NT_STATUS_OK; -} - - -NTSTATUS sam_set_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME max_passwordage) -{ - SAM_ASSERT(domain); - - domain->private.max_passwordage = max_passwordage; - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME min_passwordage) -{ - SAM_ASSERT(domain); - - domain->private.min_passwordage = min_passwordage; - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME lockout_duration) -{ - SAM_ASSERT(domain); - - domain->private.lockout_duration = lockout_duration; - - return NT_STATUS_OK; -} -NTSTATUS sam_set_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME reset_lockout_count) -{ - SAM_ASSERT(domain); - - domain->private.reset_count = reset_lockout_count; - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 min_passwordlength) -{ - SAM_ASSERT(domain); - - domain->private.min_passwordlength = min_passwordlength; - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 password_history) -{ - SAM_ASSERT(domain); - - domain->private.password_history = password_history; - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 lockout_count) -{ - SAM_ASSERT(domain); - - domain->private.lockout_count = lockout_count; - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL force_logoff) -{ - SAM_ASSERT(domain); - - domain->private.force_logoff = force_logoff; - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL login_pwdchange) -{ - SAM_ASSERT(domain); - - domain->private.login_pwdchange = login_pwdchange; - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_domain_server(SAM_DOMAIN_HANDLE *domain, const char *server_name) -{ - SAM_ASSERT(domain); - - domain->private.servername = talloc_strdup(domain->mem_ctx, server_name); - - return NT_STATUS_OK; -} diff --git a/source/sam/get_set_group.c b/source/sam/get_set_group.c deleted file mode 100644 index 11ea9258a70..00000000000 --- a/source/sam/get_set_group.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - Unix SMB/CIFS implementation. - SAM_USER_HANDLE access routines - Copyright (C) Andrew Bartlett 2002 - Copyright (C) Stefan (metze) Metzmacher 2002 - Copyright (C) Jelmer Vernooij 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -#undef DBGC_CLASS -#define DBGC_CLASS DBGC_SAM - -/* sam group get functions */ - -NTSTATUS sam_get_group_sid(const SAM_GROUP_HANDLE *group, const DOM_SID **sid) -{ - SAM_ASSERT(group && sid); - - *sid = &(group->private.sid); - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_group_ctrl(const SAM_GROUP_HANDLE *group, uint32 *group_ctrl) -{ - SAM_ASSERT(group && group_ctrl); - - *group_ctrl = group->private.group_ctrl; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_group_name(const SAM_GROUP_HANDLE *group, const char **group_name) -{ - SAM_ASSERT(group); - - *group_name = group->private.group_name; - - return NT_STATUS_OK; - -} -NTSTATUS sam_get_group_comment(const SAM_GROUP_HANDLE *group, const char **group_desc) -{ - SAM_ASSERT(group); - - *group_desc = group->private.group_desc; - - return NT_STATUS_OK; -} - -/* sam group set functions */ - -NTSTATUS sam_set_group_sid(SAM_GROUP_HANDLE *group, const DOM_SID *sid) -{ - SAM_ASSERT(group); - - if (!sid) - ZERO_STRUCT(group->private.sid); - else - sid_copy(&(group->private.sid), sid); - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_group_group_ctrl(SAM_GROUP_HANDLE *group, uint32 group_ctrl) -{ - SAM_ASSERT(group); - - group->private.group_ctrl = group_ctrl; - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_group_name(SAM_GROUP_HANDLE *group, const char *group_name) -{ - SAM_ASSERT(group); - - group->private.group_name = talloc_strdup(group->mem_ctx, group_name); - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_group_description(SAM_GROUP_HANDLE *group, const char *group_desc) -{ - SAM_ASSERT(group); - - group->private.group_desc = talloc_strdup(group->mem_ctx, group_desc); - - return NT_STATUS_OK; - -} diff --git a/source/sam/group.c b/source/sam/group.c deleted file mode 100644 index 101e3dd7ce1..00000000000 --- a/source/sam/group.c +++ /dev/null @@ -1,193 +0,0 @@ -/* - Unix SMB/CIFS implementation. - SAM_GROUP_HANDLE /SAM_GROUP_ENUM helpers - - Copyright (C) Stefan (metze) Metzmacher 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -#undef DBGC_CLASS -#define DBGC_CLASS DBGC_SAM - -/************************************************************ - Fill the SAM_GROUP_HANDLE with default values. - ***********************************************************/ - -static void sam_fill_default_group(SAM_GROUP_HANDLE *group) -{ - ZERO_STRUCT(group->private); /* Don't touch the talloc context */ - -} - -static void destroy_sam_group_handle_talloc(SAM_GROUP_HANDLE **group) -{ - if (*group) { - - talloc_destroy((*group)->mem_ctx); - *group = NULL; - } -} - - -/********************************************************************** - Alloc memory and initialises a SAM_GROUP_HANDLE on supplied mem_ctx. -***********************************************************************/ - -NTSTATUS sam_init_group_talloc(TALLOC_CTX *mem_ctx, SAM_GROUP_HANDLE **group) -{ - SMB_ASSERT(*group != NULL); - - if (!mem_ctx) { - DEBUG(0,("sam_init_group_talloc: mem_ctx was NULL!\n")); - return NT_STATUS_UNSUCCESSFUL; - } - - *group=(SAM_GROUP_HANDLE *)talloc(mem_ctx, sizeof(SAM_GROUP_HANDLE)); - - if (*group==NULL) { - DEBUG(0,("sam_init_group_talloc: error while allocating memory\n")); - return NT_STATUS_NO_MEMORY; - } - - (*group)->mem_ctx = mem_ctx; - - (*group)->free_fn = NULL; - - sam_fill_default_group(*group); - - return NT_STATUS_OK; -} - - -/************************************************************* - Alloc memory and initialises a struct SAM_GROUP_HANDLE. - ************************************************************/ - -NTSTATUS sam_init_group(SAM_GROUP_HANDLE **group) -{ - TALLOC_CTX *mem_ctx; - NTSTATUS nt_status; - - mem_ctx = talloc_init("sam internal SAM_GROUP_HANDLE allocation"); - - if (!mem_ctx) { - DEBUG(0,("sam_init_group: error while doing talloc_init()\n")); - return NT_STATUS_NO_MEMORY; - } - - if (!NT_STATUS_IS_OK(nt_status = sam_init_group_talloc(mem_ctx, group))) { - talloc_destroy(mem_ctx); - return nt_status; - } - - (*group)->free_fn = destroy_sam_group_handle_talloc; - - return NT_STATUS_OK; -} - - -/************************************************************ - Reset the SAM_GROUP_HANDLE. - ***********************************************************/ - -NTSTATUS sam_reset_group(SAM_GROUP_HANDLE *group) -{ - SMB_ASSERT(group != NULL); - - sam_fill_default_group(group); - - return NT_STATUS_OK; -} - - -/************************************************************ - Free the SAM_GROUP_HANDLE and the member pointers. - ***********************************************************/ - -NTSTATUS sam_free_group(SAM_ACCOUNT_HANDLE **group) -{ - SMB_ASSERT(*group != NULL); - - if ((*group)->free_fn) { - (*group)->free_fn(group); - } - - return NT_STATUS_OK; -} - - -/********************************************************** - Encode the group control bits into a string. - length = length of string to encode into (including terminating - null). length *MUST BE MORE THAN 2* ! - **********************************************************/ - -char *sam_encode_acct_ctrl(uint16 group_ctrl, size_t length) -{ - static fstring group_str; - size_t i = 0; - - group_str[i++] = '['; - - if (group_ctrl & GCB_LOCAL_GROUP ) group_str[i++] = 'L'; - if (group_ctrl & GCB_GLOBAL_GROUP ) group_str[i++] = 'G'; - - for ( ; i < length - 2 ; i++ ) - group_str[i] = ' '; - - i = length - 2; - group_str[i++] = ']'; - group_str[i++] = '\0'; - - return group_str; -} - -/********************************************************** - Decode the group control bits from a string. - **********************************************************/ - -uint16 sam_decode_group_ctrl(const char *p) -{ - uint16 group_ctrl = 0; - BOOL finished = False; - - /* - * Check if the account type bits have been encoded after the - * NT password (in the form [NDHTUWSLXI]). - */ - - if (*p != '[') - return 0; - - for (p++; *p && !finished; p++) { - switch (*p) { - case 'L': { group_ctrl |= GCB_LOCAL_GROUP; break; /* 'L'ocal Aliases Group. */ } - case 'G': { group_ctrl |= GCB_GLOBAL_GROUP; break; /* 'G'lobal Domain Group. */ } - - case ' ': { break; } - case ':': - case '\n': - case '\0': - case ']': - default: { finished = True; } - } - } - - return group_ctrl; -} - diff --git a/source/sam/gumm_tdb.c b/source/sam/gumm_tdb.c deleted file mode 100644 index 52eaab9e172..00000000000 --- a/source/sam/gumm_tdb.c +++ /dev/null @@ -1,562 +0,0 @@ -/* - * Unix SMB/CIFS implementation. - * SMB parameters and setup - * Copyright (C) Andrew Tridgell 1992-1998 - * Copyright (C) Simo Sorce 2000-2002 - * Copyright (C) Gerald Carter 2000 - * Copyright (C) Jeremy Allison 2001 - * Copyright (C) Andrew Bartlett 2002 - * - * 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 2 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, write to the Free Software Foundation, Inc., 675 - * Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "includes.h" -#include "gums.h" -#include "tdbsam2.h" -#include "tdbsam2_parse_info.h" - -static int tdbgumm_debug_level = DBGC_ALL; -#undef DBGC_CLASS -#define DBGC_CLASS tdbgumm_debug_level - -#define TDBSAM_VERSION "20021215" -#define TDB_FILE_NAME "tdbsam2.tdb" -#define DOMAINPREFIX "DOMAIN_" -#define OBJECTPREFIX "OBJECT_" -#define SIDPREFIX "SID_" -#define PRIVILEGEPREFIX "PRIV_" - -#define TDB_FORMAT_STRING "ddB" - -union tdbsam2_data { - struct tdbsam2_domain_data *domain; - struct tdbsam2_user_data *user; - struct tdbsam2_group_data *group; -}; - -struct tdbsam2_object { - uint32 type; - union tdbsam2_data data; -}; - -static TDB_CONTEXT *tdbsam2_db; - -#define TALLOC_CHECK(ptr, err, label) do { if ((ptr) == NULL) { DEBUG(0, ("%s: Out of memory!\n", __FUNCTION__)); err = NT_STATUS_NO_MEMORY; goto label; } } while(0) -#define SET_OR_FAIL(func, label) do { if (NT_STATUS_IS_ERR(func)) { DEBUG(0, ("%s: Setting gums object data failed!\n", __FUNCTION__)); goto label; } } while(0) - -static NTSTATUS init_tdbsam2_object_from_buffer(struct tdbsam2_object *object, TALLOC_CTX *mem_ctx, char *buffer, int size) { - - return NT_STATUS_OK; -} - -static NTSTATUS tdbsam2_opentdb(void) { - - return NT_STATUS_OK; -} - -static NTSTATUS tdbsam2_get_object_by_name(struct tdbsam2_object *obj, TALLOC_CTX *mem_ctx, const char* name) { - - NTSTATUS ret; - TDB_DATA data, key; - fstring keystr; - fstring objname; - - if (!obj || !mem_ctx || !name) - return NT_STATUS_INVALID_PARAMETER; - - if (tdbsam2_db == NULL) { - if (NT_STATUS_IS_ERR(ret = tdbsam2_opentdb())) { - goto done; - } - } - - unix_strlower(name, -1, objname, sizeof(objname)); - - slprintf(keystr, sizeof(keystr)-1, "%s%s", OBJECTPREFIX, objname); - key.dptr = keystr; - key.dsize = strlen(keystr) + 1; - - data = tdb_fetch(tdbsam2_db, key); - if (!data.dptr) { - DEBUG(5, ("get_domain_sid: Error fetching database, domain entry not found!\n")); - DEBUGADD(5, (" Error: %s\n", tdb_errorstr(tdbsam2_db))); - DEBUGADD(5, (" Key: %s\n", keystr)); - ret = NT_STATUS_UNSUCCESSFUL; - goto done; - } - - if (NT_STATUS_IS_ERR(init_tdbsam2_object_from_buffer(obj, mem_ctx, data.dptr, data.dsize))) { - SAFE_FREE(data.dptr); - DEBUG(0, ("get_domain_sid: Error fetching database, malformed entry!\n")); - ret = NT_STATUS_UNSUCCESSFUL; - goto done; - } - SAFE_FREE(data.dptr); - - ret = NT_STATUS_OK; - -done: - return ret; -} - - -static NTSTATUS tdbsam2_store(struct tdbsam2_object *object) { - - NTSTATUS ret; - - return NT_STATUS_OK; -} - -static NTSTATUS tdbsam2_get_next_sid(TALLOC_CTX *mem_ctx, DOM_SID *sid) { - - NTSTATUS ret; - - return NT_STATUS_OK; -} - -static NTSTATUS tdbsam2_user_data_to_gums_object(GUMS_OBJECT **object, struct tdbsam2_user_data *userdata, uint32 type) { - - NTSTATUS ret; - - if (!object || !userdata) { - DEBUG(0, ("tdbsam2_user_data_to_gums_object: no NULL pointers are accepted here!\n")); - return NT_STATUS_UNSUCCESSFUL; - } - - /* userdata->xcounter */ - /* userdata->sec_desc */ - - SET_OR_FAIL(gums_set_object_sid(*object, userdata->user_sid), error); - SET_OR_FAIL(gums_set_object_name(*object, userdata->name), error); - - SET_OR_FAIL(gums_set_user_pri_group(*object, userdata->group_sid), error); - - if (userdata->description) - SET_OR_FAIL(gums_set_object_description(*object, userdata->description), error); - - if (userdata->full_name) - SET_OR_FAIL(gums_set_user_fullname(*object, userdata->full_name), error); - - if (userdata->home_dir) - SET_OR_FAIL(gums_set_user_homedir(*object, userdata->home_dir), error); - - if (userdata->dir_drive) - SET_OR_FAIL(gums_set_user_dir_drive(*object, userdata->dir_drive), error); - - if (userdata->logon_script) - SET_OR_FAIL(gums_set_user_logon_script(*object, userdata->logon_script), error); - - if (userdata->profile_path) - SET_OR_FAIL(gums_set_user_profile_path(*object, userdata->profile_path), error); - - if (userdata->workstations) - SET_OR_FAIL(gums_set_user_workstations(*object, userdata->workstations), error); - - if (userdata->unknown_str) - SET_OR_FAIL(gums_set_user_unknown_str(*object, userdata->unknown_str), error); - - if (userdata->munged_dial) - SET_OR_FAIL(gums_set_user_munged_dial(*object, userdata->munged_dial), error); - - SET_OR_FAIL(gums_set_user_logon_divs(*object, userdata->logon_divs), error); - SET_OR_FAIL(gums_set_user_hours_len(*object, userdata->hours_len), error); - - if (userdata->hours) - SET_OR_FAIL(gums_set_user_hours(*object, userdata->hours), error); - - SET_OR_FAIL(gums_set_user_unknown_3(*object, userdata->unknown_3), error); - SET_OR_FAIL(gums_set_user_unknown_5(*object, userdata->unknown_5), error); - SET_OR_FAIL(gums_set_user_unknown_6(*object, userdata->unknown_6), error); - - SET_OR_FAIL(gums_set_user_logon_time(*object, userdata->logon_time), error); - SET_OR_FAIL(gums_set_user_logoff_time(*object, userdata->logoff_time), error); - SET_OR_FAIL(gums_set_user_kickoff_time(*object, userdata->kickoff_time), error); - SET_OR_FAIL(gums_set_user_pass_last_set_time(*object, userdata->pass_last_set_time), error); - SET_OR_FAIL(gums_set_user_pass_can_change_time(*object, userdata->pass_can_change_time), error); - SET_OR_FAIL(gums_set_user_pass_must_change_time(*object, userdata->pass_must_change_time), error); - - ret = NT_STATUS_OK; - return ret; - -error: - talloc_destroy((*object)->mem_ctx); - *object = NULL; - return ret; -} - -static NTSTATUS tdbsam2_group_data_to_gums_object(GUMS_OBJECT **object, struct tdbsam2_group_data *groupdata, uint32 type) { - - NTSTATUS ret; - - if (!object || !groupdata) { - DEBUG(0, ("tdbsam2_group_data_to_gums_object: no NULL pointers are accepted here!\n")); - return NT_STATUS_UNSUCCESSFUL; - } - - /* groupdata->xcounter */ - /* groupdata->sec_desc */ - - SET_OR_FAIL(gums_set_object_sid(*object, groupdata->group_sid), error); - SET_OR_FAIL(gums_set_object_name(*object, groupdata->name), error); - - if (groupdata->description) - SET_OR_FAIL(gums_set_object_description(*object, groupdata->description), error); - - if (groupdata->count) - SET_OR_FAIL(gums_set_group_members(*object, groupdata->count, groupdata->members), error); - - ret = NT_STATUS_OK; - return ret; - -error: - talloc_destroy((*object)->mem_ctx); - *object = NULL; - return ret; -} - -static NTSTATUS tdbsam2_domain_data_to_gums_object(GUMS_OBJECT **object, struct tdbsam2_domain_data *domdata, uint32 type) { - - NTSTATUS ret; - - if (!object || !domdata) { - DEBUG(0, ("tdbsam2_domain_data_to_gums_object: no NULL pointers are accepted here!\n")); - return NT_STATUS_UNSUCCESSFUL; - } - - /* domdata->xcounter */ - /* domdata->sec_desc */ - - SET_OR_FAIL(gums_set_object_sid(*object, domdata->dom_sid), error); - SET_OR_FAIL(gums_set_object_name(*object, domdata->name), error); - - if (domdata->description) - SET_OR_FAIL(gums_set_object_description(*object, domdata->description), error); - - ret = NT_STATUS_OK; - return ret; - -error: - talloc_destroy((*object)->mem_ctx); - *object = NULL; - return ret; -} - -static NTSTATUS tdbsam2_data_to_gums_object(GUMS_OBJECT **object, struct tdbsam2_object *data) { - - NTSTATUS ret; - - if (!object || !data) { - DEBUG(0, ("tdbsam2_user_data_to_gums_object: no NULL structure pointers are accepted here!\n")); - ret = NT_STATUS_INVALID_PARAMETER; - goto done; - } - - ret = gums_create_object(object, data->type); - if (NT_STATUS_IS_ERR(ret)) { - DEBUG(5, ("tdbsam2_user_data_to_gums_object: error creating gums object!\n")); - goto done; - } - - switch (data->type) { - case GUMS_OBJ_DOMAIN: - ret = tdbsam2_domain_data_to_gums_object(object, data->data.domain, data->type); - break; - - case GUMS_OBJ_NORMAL_USER: - ret = tdbsam2_user_data_to_gums_object(object, data->data.user, data->type); - break; - - case GUMS_OBJ_GROUP: - case GUMS_OBJ_ALIAS: - ret = tdbsam2_group_data_to_gums_object(object, data->data.group, data->type); - break; - - default: - ret = NT_STATUS_UNSUCCESSFUL; - } - -done: - return ret; -} - - - - - -/* GUMM object functions */ - -static NTSTATUS get_domain_sid(DOM_SID *sid, const char* name) { - - NTSTATUS ret; - struct tdbsam2_object obj; - TALLOC_CTX *mem_ctx; - TDB_DATA data, key; - fstring keystr; - fstring domname; - - if (!sid || !name) - return NT_STATUS_INVALID_PARAMETER; - - mem_ctx = talloc_init("get_domain_sid"); - if (!mem_ctx) { - DEBUG(0, ("tdbsam2_new_object: Out of memory!\n")); - return NT_STATUS_NO_MEMORY; - } - - if (tdbsam2_db == NULL) { - if (NT_STATUS_IS_ERR(ret = tdbsam2_opentdb())) { - goto done; - } - } - - unix_strlower(name, -1, domname, sizeof(domname)); - - slprintf(keystr, sizeof(keystr)-1, "%s%s", DOMAINPREFIX, domname); - key.dptr = keystr; - key.dsize = strlen(keystr) + 1; - - data = tdb_fetch(tdbsam2_db, key); - if (!data.dptr) { - DEBUG(5, ("get_domain_sid: Error fetching database, domain entry not found!\n")); - DEBUGADD(5, (" Error: %s\n", tdb_errorstr(tdbsam2_db))); - DEBUGADD(5, (" Key: %s\n", keystr)); - ret = NT_STATUS_UNSUCCESSFUL; - goto done; - } - - if (NT_STATUS_IS_ERR(init_tdbsam2_object_from_buffer(&obj, mem_ctx, data.dptr, data.dsize))) { - SAFE_FREE(data.dptr); - DEBUG(0, ("get_domain_sid: Error fetching database, malformed entry!\n")); - ret = NT_STATUS_UNSUCCESSFUL; - goto done; - } - SAFE_FREE(data.dptr); - - if (obj.type != GUMS_OBJ_DOMAIN) { - DEBUG(5, ("get_domain_sid: Requested object is not a domain!\n")); - ret = NT_STATUS_UNSUCCESSFUL; - goto done; - } - - sid_copy(sid, obj.data.domain->dom_sid); - - ret = NT_STATUS_OK; - -done: - if (mem_ctx) talloc_destroy(mem_ctx); - return ret; -} - - NTSTATUS (*set_domain_sid) (const DOM_SID *sid, const char *name); - - NTSTATUS (*get_sequence_number) (void); - - -static NTSTATUS tdbsam2_new_object(DOM_SID **sid, const char *name, const int obj_type) { - - NTSTATUS ret; - struct tdbsam2_object obj; - TALLOC_CTX *mem_ctx; - - if (!sid || !name) { - DEBUG(0, ("tdbsam2_new_object: no NULL pointers are accepted here!\n")); - return NT_STATUS_INVALID_PARAMETER; - } - - mem_ctx = talloc_init("tdbsam2_new_object"); - if (!mem_ctx) { - DEBUG(0, ("tdbsam2_new_object: Out of memory!\n")); - return NT_STATUS_NO_MEMORY; - } - - switch (obj_type) { - case GUMS_OBJ_NORMAL_USER: - obj.data.user = (struct tdbsam2_user_data *)talloc_zero(mem_ctx, sizeof(struct tdbsam2_user_data)); - TALLOC_CHECK(obj.data.user, ret, done); - - /*obj.data.user->sec_desc*/ - - tdbsam2_get_next_sid(mem_ctx, obj.data.user->user_sid); - TALLOC_CHECK(obj.data.user->user_sid, ret, done); - - obj.data.user->name = talloc_strdup(mem_ctx, name); - TALLOC_CHECK(obj.data.user, ret, done); - - break; - - case GUMS_OBJ_GROUP: - case GUMS_OBJ_ALIAS: - obj.data.group = (struct tdbsam2_group_data *)talloc_zero(mem_ctx, sizeof(struct tdbsam2_group_data)); - TALLOC_CHECK(obj.data.group, ret, done); - - /*obj.data.user->sec_desc*/ - - tdbsam2_get_next_sid(mem_ctx, obj.data.group->group_sid); - TALLOC_CHECK(obj.data.group->group_sid, ret, done); - - obj.data.group->name = talloc_strdup(mem_ctx, name); - TALLOC_CHECK(obj.data.group, ret, done); - - break; - - case GUMS_OBJ_DOMAIN: - /* TODO: SHOULD WE ALLOW TO CREATE NEW DOMAINS ? */ - - default: - ret = NT_STATUS_UNSUCCESSFUL; - goto done; - } - - ret = tdbsam2_store(&obj); - -done: - talloc_destroy(mem_ctx); - return ret; -} - -static NTSTATUS tdbsam2_delete_object(const DOM_SID *sid) { - - NTSTATUS ret; - struct tdbsam2_object obj; - TALLOC_CTX *mem_ctx; - TDB_DATA data, key; - fstring keystr; - fstring sidstr; - char *obj_name = NULL; - int obj_type, obj_version, len; - - if (!sid) { - DEBUG(0, ("tdbsam2_new_object: no NULL pointers are accepted here!\n")); - return NT_STATUS_INVALID_PARAMETER; - } - - mem_ctx = talloc_init("tdbsam2_delete_object"); - if (!mem_ctx) { - DEBUG(0, ("tdbsam2_new_object: Out of memory!\n")); - return NT_STATUS_NO_MEMORY; - } - - if (tdbsam2_db == NULL) { - if (NT_STATUS_IS_ERR(ret = tdbsam2_opentdb())) { - goto done; - } - } - - sid_to_string(sidstr, sid); - - slprintf(keystr, sizeof(keystr)-1, "%s%s", SIDPREFIX, sidstr); - key.dptr = keystr; - key.dsize = strlen(keystr) + 1; - - data = tdb_fetch(tdbsam2_db, key); - if (!data.dptr) { - DEBUG(5, ("get_domain_sid: Error fetching database, SID entry not found!\n")); - DEBUGADD(5, (" Error: %s\n", tdb_errorstr(tdbsam2_db))); - DEBUGADD(5, (" Key: %s\n", keystr)); - ret = NT_STATUS_UNSUCCESSFUL; - goto done; - } - - len = tdb_unpack(data.dptr, data.dsize, TDB_FORMAT_STRING, - &obj_version, - &obj_type, - &obj_name); - - if (len == -1) { - ret = NT_STATUS_UNSUCCESSFUL; - goto done; - } - - if (tdb_delete(tdbsam2_db, key) != TDB_SUCCESS) { - DEBUG(5, ("tdbsam2_object_delete: Error deleting object!\n")); - DEBUGADD(5, (" Error: %s\n", tdb_errorstr(tdbsam2_db))); - DEBUGADD(5, (" Key: %s\n", keystr)); - ret = NT_STATUS_UNSUCCESSFUL; - goto done; - } - - switch (obj_type) { - case GUMS_OBJ_NORMAL_USER: - case GUMS_OBJ_GROUP: - case GUMS_OBJ_ALIAS: - - slprintf(keystr, sizeof(keystr)-1, "%s%s", OBJECTPREFIX, obj_name); - key.dptr = keystr; - key.dsize = strlen(keystr) + 1; - - if (tdb_delete(tdbsam2_db, key) != TDB_SUCCESS) { - DEBUG(5, ("tdbsam2_object_delete: Error deleting object!\n")); - DEBUGADD(5, (" Error: %s\n", tdb_errorstr(tdbsam2_db))); - DEBUGADD(5, (" Key: %s\n", keystr)); - ret = NT_STATUS_UNSUCCESSFUL; - goto done; - } - break; - - case GUMS_OBJ_DOMAIN: - /* TODO: SHOULD WE ALLOW TO DELETE DOMAINS ? */ - - default: - ret = NT_STATUS_UNSUCCESSFUL; - goto done; - } - -done: - SAFE_FREE(obj_name); - talloc_destroy(mem_ctx); - return ret; -} - - NTSTATUS (*get_object_from_sid) (GUMS_OBJECT **object, const DOM_SID *sid, const int obj_type); - NTSTATUS (*get_sid_from_name) (GUMS_OBJECT **object, const char *name); - /* This function is used to get the list of all objects changed since b_time, it is - used to support PDC<->BDC synchronization */ - NTSTATUS (*get_updated_objects) (GUMS_OBJECT **objects, const NTTIME base_time); - - NTSTATUS (*enumerate_objects_start) (void *handle, const DOM_SID *sid, const int obj_type); - NTSTATUS (*enumerate_objects_get_next) (GUMS_OBJECT **object, void *handle); - NTSTATUS (*enumerate_objects_stop) (void *handle); - - /* This function MUST be used ONLY by PDC<->BDC replication code or recovery tools. - Never use this function to update an object in the database, use set_object_values() */ - NTSTATUS (*set_object) (const GUMS_OBJECT *object); - - /* set object values function */ - NTSTATUS (*set_object_values) (DOM_SID *sid, uint32 count, GUMS_DATA_SET *data_set); - - /* Group related functions */ - NTSTATUS (*add_memberss_to_group) (const DOM_SID *group, const DOM_SID **members); - NTSTATUS (*delete_members_from_group) (const DOM_SID *group, const DOM_SID **members); - NTSTATUS (*enumerate_group_members) (DOM_SID **members, const DOM_SID *sid, const int type); - - NTSTATUS (*get_sid_groups) (DOM_SID **groups, const DOM_SID *sid); - - NTSTATUS (*lock_sid) (const DOM_SID *sid); - NTSTATUS (*unlock_sid) (const DOM_SID *sid); - - /* privileges related functions */ - - NTSTATUS (*add_members_to_privilege) (const LUID_ATTR *priv, const DOM_SID **members); - NTSTATUS (*delete_members_from_privilege) (const LUID_ATTR *priv, const DOM_SID **members); - NTSTATUS (*enumerate_privilege_members) (DOM_SID **members, const LUID_ATTR *priv); - NTSTATUS (*get_sid_privileges) (DOM_SID **privs, const DOM_SID *sid); - /* warning!: set_privilege will overwrite a prior existing privilege if such exist */ - NTSTATUS (*set_privilege) (GUMS_PRIVILEGE *priv); - - -int gumm_init(GUMS_FUNCTIONS **storage) { - - return 0; -} diff --git a/source/sam/gums.c b/source/sam/gums.c deleted file mode 100644 index 3a20ef6fc96..00000000000 --- a/source/sam/gums.c +++ /dev/null @@ -1,131 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Grops and Users Management System initializations. - Copyright (C) Simo Sorce 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -/*#undef DBGC_CLASS -#define DBGC_CLASS DBGC_GUMS*/ - -#define GMV_MAJOR 0 -#define GMV_MINOR 1 - -GUMS_FUNCTIONS *gums_storage; -static void *dl_handle; - -PRIVS privs[] = { - {PRIV_NONE, "no_privs", "No privilege"}, /* this one MUST be first */ - {PRIV_CREATE_TOKEN, "SeCreateToken", "Create Token"}, - {PRIV_ASSIGNPRIMARYTOKEN, "SeAssignPrimaryToken", "Assign Primary Token"}, - {PRIV_LOCK_MEMORY, "SeLockMemory", "Lock Memory"}, - {PRIV_INCREASE_QUOTA, "SeIncreaseQuotaPrivilege", "Increase Quota Privilege"}, - {PRIV_MACHINE_ACCOUNT, "SeMachineAccount", "Machine Account"}, - {PRIV_TCB, "SeTCB", "TCB"}, - {PRIV_SECURITY, "SeSecurityPrivilege", "Security Privilege"}, - {PRIV_TAKE_OWNERSHIP, "SeTakeOwnershipPrivilege", "Take Ownership Privilege"}, - {PRIV_LOAD_DRIVER, "SeLocalDriverPrivilege", "Local Driver Privilege"}, - {PRIV_SYSTEM_PROFILE, "SeSystemProfilePrivilege", "System Profile Privilege"}, - {PRIV_SYSTEMTIME, "SeSystemtimePrivilege", "System Time"}, - {PRIV_PROF_SINGLE_PROCESS, "SeProfileSingleProcessPrivilege", "Profile Single Process Privilege"}, - {PRIV_INC_BASE_PRIORITY, "SeIncreaseBasePriorityPrivilege", "Increase Base Priority Privilege"}, - {PRIV_CREATE_PAGEFILE, "SeCreatePagefilePrivilege", "Create Pagefile Privilege"}, - {PRIV_CREATE_PERMANENT, "SeCreatePermanent", "Create Permanent"}, - {PRIV_BACKUP, "SeBackupPrivilege", "Backup Privilege"}, - {PRIV_RESTORE, "SeRestorePrivilege", "Restore Privilege"}, - {PRIV_SHUTDOWN, "SeShutdownPrivilege", "Shutdown Privilege"}, - {PRIV_DEBUG, "SeDebugPrivilege", "Debug Privilege"}, - {PRIV_AUDIT, "SeAudit", "Audit"}, - {PRIV_SYSTEM_ENVIRONMENT, "SeSystemEnvironmentPrivilege", "System Environment Privilege"}, - {PRIV_CHANGE_NOTIFY, "SeChangeNotify", "Change Notify"}, - {PRIV_REMOTE_SHUTDOWN, "SeRemoteShutdownPrivilege", "Remote Shutdown Privilege"}, - {PRIV_UNDOCK, "SeUndock", "Undock"}, - {PRIV_SYNC_AGENT, "SeSynchronizationAgent", "Synchronization Agent"}, - {PRIV_ENABLE_DELEGATION, "SeEnableDelegation", "Enable Delegation"}, - {PRIV_ALL, "SaAllPrivs", "All Privileges"} -}; - -NTSTATUS gums_init(const char *module_name) -{ - int (*module_version)(int); - NTSTATUS (*module_init)(); -/* gums_module_init module_init;*/ - NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; - - DEBUG(5, ("Opening gums module %s\n", module_name)); - dl_handle = sys_dlopen(module_name, RTLD_NOW); - if (!dl_handle) { - DEBUG(0, ("ERROR: Failed to load gums module %s, error: %s\n", module_name, sys_dlerror())); - return NT_STATUS_UNSUCCESSFUL; - } - - module_version = sys_dlsym(dl_handle, "gumm_version"); - if (!module_version) { - DEBUG(0, ("ERROR: Failed to find gums module version!\n")); - goto error; - } - - if (module_version(GMV_MAJOR) != GUMS_VERSION_MAJOR) { - DEBUG(0, ("ERROR: Module's major version does not match gums version!\n")); - goto error; - } - - if (module_version(GMV_MINOR) != GUMS_VERSION_MINOR) { - DEBUG(1, ("WARNING: Module's minor version does not match gums version!\n")); - } - - module_init = sys_dlsym(dl_handle, "gumm_init"); - if (!module_init) { - DEBUG(0, ("ERROR: Failed to find gums module's init function!\n")); - goto error; - } - - DEBUG(5, ("Initializing module %s\n", module_name)); - - ret = module_init(&gums_storage); - goto done; - -error: - ret = NT_STATUS_UNSUCCESSFUL; - sys_dlclose(dl_handle); - -done: - return ret; -} - -NTSTATUS gums_unload(void) -{ - NSTATUS ret; - NTSTATUS (*module_finalize)(); - - if (!dl_handle) - return NT_STATUS_UNSUCCESSFUL; - - module_close = sys_dlsym(dl_handle, "gumm_finalize"); - if (!module_finalize) { - DEBUG(0, ("ERROR: Failed to find gums module's init function!\n")); - return NT_STATUS_UNSUCCESSFUL; - } - - DEBUG(5, ("Finalizing module %s\n", module_name)); - - ret = module_finalize(); - sys_dlclose(dl_handle); - - return ret; -} diff --git a/source/sam/gums_api.c b/source/sam/gums_api.c deleted file mode 100644 index 75e32fa8614..00000000000 --- a/source/sam/gums_api.c +++ /dev/null @@ -1,1268 +0,0 @@ -/* - Unix SMB/CIFS implementation. - GUMS structures - Copyright (C) Simo Sorce 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -extern GUMS_FUNCTIONS *gums_storage; - -/* Functions to get/set info from a GUMS object */ - -NTSTATUS gums_get_object_type(uint32 *type, const GUMS_OBJECT *obj) -{ - if (!obj) - return NT_STATUS_INVALID_PARAMETER; - - *type = obj->type; - return NT_STATUS_OK; -} - -NTSTATUS gums_create_object(GUMS_OBJECT **obj, uint32 type) -{ - TALLOC_CTX *mem_ctx = talloc_init("gums_create_object"); - GUMS_OBJECT *go; - NT_STATUS ret; - - go = talloc_zero(mem_ctx, sizeof(GUMS_OBJECT)); - go->mem_ctx = mem_ctx; - go->type = type; - go->version = GUMS_OBJECT_VERSION; - - switch(type) { - case GUMS_OBJ_DOMAIN: - break; - -/* - case GUMS_OBJ_WORKSTATION_TRUST: - case GUMS_OBJ_SERVER_TRUST: - case GUMS_OBJ_DOMAIN_TRUST: -*/ - case GUMS_OBJ_NORMAL_USER: - go->data = (GUMS_USER *)talloc_zero(mem_ctx, sizeof(GUMS_USER)); - break; - - case GUMS_OBJ_GROUP: - case GUMS_OBJ_ALIAS: - go->data = (GUMS_GROUP *)talloc_zero(mem_ctx, sizeof(GUMS_GROUP)); - break; - - default: - /* TODO: throw error */ - ret = NT_STATUS_OBJECT_TYPE_MISMATCH; - goto error; - } - - if (!(go->data)) { - ret = NT_STATUS_NO_MEMORY; - DEBUG(0, ("gums_create_object: Out of memory!\n")); - goto error; - } - - *obj = go; - return NT_STATUS_OK; - -error: - talloc_destroy(go->mem_ctx); - *obj = NULL; - return ret; -} - -NTSTATUS gums_get_object_seq_num(uint32 *version, const GUMS_OBJECT *obj) -{ - if (!version || !obj) - return NT_STATUS_INVALID_PARAMETER; - - *version = obj->version; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_object_seq_num(GUMS_OBJECT *obj, uint32 version) -{ - if (!obj) - return NT_STATUS_INVALID_PARAMETER; - - obj->version = version; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_sec_desc(SEC_DESC **sec_desc, const GUMS_OBJECT *obj) -{ - if (!sec_desc || !obj) - return NT_STATUS_INVALID_PARAMETER; - - *sec_desc = obj->sec_desc; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_sec_desc(GUMS_OBJECT *obj, const SEC_DESC *sec_desc) -{ - if (!obj || !sec_desc) - return NT_STATUS_INVALID_PARAMETER; - - obj->sec_desc = dup_sec_desc(obj->mem_ctx, sec_desc); - if (!(obj->sec_desc)) return NT_STATUS_UNSUCCESSFUL; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_object_sid(DOM_SID **sid, const GUMS_OBJECT *obj) -{ - if (!sid || !obj) - return NT_STATUS_INVALID_PARAMETER; - - *sid = obj->sid; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_object_sid(GUMS_OBJECT *obj, const DOM_SID *sid) -{ - if (!obj || !sid) - return NT_STATUS_INVALID_PARAMETER; - - obj->sid = sid_dup_talloc(obj->mem_ctx, sid); - if (!(obj->sid)) return NT_STATUS_UNSUCCESSFUL; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_object_name(char **name, const GUMS_OBJECT *obj) -{ - if (!name || !obj) - return NT_STATUS_INVALID_PARAMETER; - - *name = obj->name; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_object_name(GUMS_OBJECT *obj, const char *name) -{ - if (!obj || !name) - return NT_STATUS_INVALID_PARAMETER; - - obj->name = (char *)talloc_strdup(obj->mem_ctx, name); - if (!(obj->name)) return NT_STATUS_UNSUCCESSFUL; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_object_description(char **description, const GUMS_OBJECT *obj) -{ - if (!description || !obj) - return NT_STATUS_INVALID_PARAMETER; - - *description = obj->description; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_object_description(GUMS_OBJECT *obj, const char *description) -{ - if (!obj || !description) - return NT_STATUS_INVALID_PARAMETER; - - obj->description = (char *)talloc_strdup(obj->mem_ctx, description); - if (!(obj->description)) return NT_STATUS_UNSUCCESSFUL; - return NT_STATUS_OK; -} - -/* User specific functions */ - -/* -NTSTATUS gums_get_object_privileges(PRIVILEGE_SET **priv_set, const GUMS_OBJECT *obj) -{ - if (!priv_set) - return NT_STATUS_INVALID_PARAMETER; - - *priv_set = obj->priv_set; - return NT_STATUS_OK; -} -*/ - -NTSTATUS gums_get_user_pri_group(DOM_SID **sid, const GUMS_OBJECT *obj) -{ - if (!sid || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *sid = obj->data.user->group_sid; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_pri_group(GUMS_OBJECT *obj, const DOM_SID *sid) -{ - if (!obj || !sid) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->group_sid = sid_dup_talloc(obj->mem_ctx, sid); - if (!(obj->data.user->group_sid)) return NT_STATUS_NO_MEMORY; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_nt_pwd(DATA_BLOB **nt_pwd, const GUMS_OBJECT *obj) -{ - if (!nt_pwd || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *nt_pwd = obj->data.user->nt_pw; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_nt_pwd(GUMS_OBJECT *obj, const DATA_BLOB nt_pwd) -{ - if (!obj || !nt_pwd || nt_pwd != NT_HASH_LEN) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->nt_pwd = data_blob_talloc(obj->mem_ctx, nt_pwd.data, nt_pwd.lenght); - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_lm_pwd(DATA_BLOB **lm_pwd, const GUMS_OBJECT *obj) -{ - if (!lm_pwd || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *lm_pwd = obj->data.user->lm_pw; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_lm_pwd(GUMS_OBJECT *obj, const DATA_BLOB lm_pwd) -{ - if (!obj || !lm_pwd || lm_pwd != LM_HASH_LEN) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->lm_pwd = data_blob_talloc(obj->mem_ctx, lm_pwd.data, lm_pwd.lenght); - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_fullname(char **fullname, const GUMS_OBJECT *obj) -{ - if (!fullname || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *fullname = obj->data.user->full_name; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_fullname(GUMS_OBJECT *obj, const char *fullname) -{ - if (!obj || !fullname) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->full_name = (char *)talloc_strdup(obj->mem_ctx, fullname); - if (!(obj->data.user->full_name)) return NT_STATUS_NO_MEMORY; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_homedir(char **homedir, const GUMS_OBJECT *obj) -{ - if (!homedir || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *homedir = obj->data.user->home_dir; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_homedir(GUMS_OBJECT *obj, const char *homedir) -{ - if (!obj || !homedir) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->home_dir = (char *)talloc_strdup(obj->mem_ctx, homedir); - if (!(obj->data.user->home_dir)) return NT_STATUS_NO_MEMORY; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_dir_drive(char **dirdrive, const GUMS_OBJECT *obj) -{ - if (!dirdrive || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *dirdrive = obj->data.user->dir_drive; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_dir_drive(GUMS_OBJECT *obj, const char *dir_drive) -{ - if (!obj || !dir_drive) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->dir_drive = (char *)talloc_strdup(obj->mem_ctx, dir_drive); - if (!(obj->data.user->dir_drive)) return NT_STATUS_NO_MEMORY; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_logon_script(char **logon_script, const GUMS_OBJECT *obj) -{ - if (!logon_script || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *logon_script = obj->data.user->logon_script; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_logon_script(GUMS_OBJECT *obj, const char *logon_script) -{ - if (!obj || !logon_script) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->logon_script = (char *)talloc_strdup(obj->mem_ctx, logon_script); - if (!(obj->data.user->logon_script)) return NT_STATUS_NO_MEMORY; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_profile_path(char **profile_path, const GUMS_OBJECT *obj) -{ - if (!profile_path || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *profile_path = obj->data.user->profile_path; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_profile_path(GUMS_OBJECT *obj, const char *profile_path) -{ - if (!obj || !profile_path) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->profile_path = (char *)talloc_strdup(obj->mem_ctx, profile_path); - if (!(obj->data.user->profile_path)) return NT_STATUS_NO_MEMORY; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_workstations(char **workstations, const GUMS_OBJECT *obj) -{ - if (!workstations || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *workstations = obj->data.user->workstations; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_workstations(GUMS_OBJECT *obj, const char *workstations) -{ - if (!obj || !workstations) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->workstations = (char *)talloc_strdup(obj->mem_ctx, workstations); - if (!(obj->data.user->workstations)) return NT_STATUS_NO_MEMORY; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_unknown_str(char **unknown_str, const GUMS_OBJECT *obj) -{ - if (!unknown_str || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *unknown_str = obj->data.user->unknown_str; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_unknown_str(GUMS_OBJECT *obj, const char *unknown_str) -{ - if (!obj || !unknown_str) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->unknown_str = (char *)talloc_strdup(obj->mem_ctx, unknown_str); - if (!(obj->data.user->unknown_str)) return NT_STATUS_NO_MEMORY; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_munged_dial(char **munged_dial, const GUMS_OBJECT *obj) -{ - if (!munged_dial || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *munged_dial = obj->data.user->munged_dial; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_munged_dial(GUMS_OBJECT *obj, const char *munged_dial) -{ - if (!obj || !munged_dial) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->munged_dial = (char *)talloc_strdup(obj->mem_ctx, munged_dial); - if (!(obj->data.user->munged_dial)) return NT_STATUS_NO_MEMORY; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_logon_time(NTTIME *logon_time, const GUMS_OBJECT *obj) -{ - if (!logon_time || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *logon_time = obj->data.user->logon_time; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_logon_time(GUMS_OBJECT *obj, NTTIME logon_time) -{ - if (!obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->logon_time = logon_time; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_logoff_time(NTTIME *logoff_time, const GUMS_OBJECT *obj) -{ - if (!logoff_time || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *logoff_time = obj->data.user->logoff_time; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_logoff_time(GUMS_OBJECT *obj, NTTIME logoff_time) -{ - if (!obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->logoff_time = logoff_time; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_kickoff_time(NTTIME *kickoff_time, const GUMS_OBJECT *obj) -{ - if (!kickoff_time || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *kickoff_time = obj->data.user->kickoff_time; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_kickoff_time(GUMS_OBJECT *obj, NTTIME kickoff_time) -{ - if (!obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->kickoff_time = kickoff_time; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_pass_last_set_time(NTTIME *pass_last_set_time, const GUMS_OBJECT *obj) -{ - if (!pass_last_set_time || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *pass_last_set_time = obj->data.user->pass_last_set_time; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_pass_last_set_time(GUMS_OBJECT *obj, NTTIME pass_last_set_time) -{ - if (!obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->pass_last_set_time = pass_last_set_time; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_pass_can_change_time(NTTIME *pass_can_change_time, const GUMS_OBJECT *obj) -{ - if (!pass_can_change_time || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *pass_can_change_time = obj->data.user->pass_can_change_time; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_pass_can_change_time(GUMS_OBJECT *obj, NTTIME pass_can_change_time) -{ - if (!obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->pass_can_change_time = pass_can_change_time; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_pass_must_change_time(NTTIME *pass_must_change_time, const GUMS_OBJECT *obj) -{ - if (!pass_must_change_time || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *pass_must_change_time = obj->data-user->pass_must_change_time; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_pass_must_change_time(GUMS_OBJECT *obj, NTTIME pass_must_change_time) -{ - if (!obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->pass_must_change_time = pass_must_change_time; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_logon_divs(uint16 *logon_divs, const GUMS_OBJECT *obj) -{ - if (!logon_divs || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *logon_divs = obj->data.user->logon_divs; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_logon_divs(GUMS_OBJECT *obj, uint16 logon_divs) -{ - if (!obj || !logon_divs) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->logon_divs = logon_divs; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_hours_len(uint32 *hours_len, const GUMS_OBJECT *obj) -{ - if (!hours_len || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *hours_len = obj->data.user->hours_len; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_hours_len(GUMS_OBJECT *obj, uint32 hours_len) -{ - if (!obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->hours_len = hours_len; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_hours(uint8 **hours, const GUMS_OBJECT *obj) -{ - if (!hours || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *hours = obj->data.user->hours; - return NT_STATUS_OK; -} - -/* WARNING: always set hours_len before hours */ -NTSTATUS gums_set_user_hours(GUMS_OBJECT *obj, const uint8 *hours) -{ - if (!obj || !hours) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - if (obj->data.user->hours_len == 0) - DEBUG(10, ("gums_set_user_hours: Warning, hours_len is zero!\n")); - - obj->data.user->hours = (uint8 *)talloc_memdup(obj->mem_ctx, hours, obj->data.user->hours_len); - if (!(obj->data.user->hours) & (obj->data.user->hours_len != 0)) return NT_STATUS_NO_MEMORY; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_unknown_3(uint32 *unknown_3, const GUMS_OBJECT *obj) -{ - if (!unknown_3 || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *unknown_3 = obj->data.user->unknown_3; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_unknown_3(GUMS_OBJECT *obj, uint32 unknown_3) -{ - if (!obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->unknown_3 = unknown_3; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_unknown_5(uint32 *unknown_5, const GUMS_OBJECT *obj) -{ - if (!unknown_5 || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *unknown_5 = obj->data.user->unknown_5; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_unknown_5(GUMS_OBJECT *obj, uint32 unknown_5) -{ - if (!obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->unknown_5 = unknown_5; - return NT_STATUS_OK; -} - -NTSTATUS gums_get_user_unknown_6(uint32 *unknown_6, const GUMS_OBJECT *obj) -{ - if (!unknown_6 || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *unknown_6 = obj->data.user->unknown_6; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_user_unknown_6(GUMS_OBJECT *obj, uint32 unknown_6) -{ - if (!obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.user->unknown_6 = unknown_6; - return NT_STATUS_OK; -} - -/* Group specific functions */ - -NTSTATUS gums_get_group_members(uint32 *count, DOM_SID **members, const GUMS_OBJECT *obj) -{ - if (!count || !members || !obj) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_GROUP && - obj->type != GUMS_OBJ_ALIAS) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - *count = obj->data.group->count; - *members = obj->data.group->members; - return NT_STATUS_OK; -} - -NTSTATUS gums_set_group_members(GUMS_OBJECT *obj, uint32 count, DOM_SID **members) -{ - uint32 n; - - if (!obj || !members || !members) - return NT_STATUS_INVALID_PARAMETER; - - if (obj->type != GUMS_OBJ_GROUP && - obj->type != GUMS_OBJ_ALIAS) - return NT_STATUS_OBJECT_TYPE_MISMATCH; - - obj->data.group->count = count; - n = 0; - do { - obj->data.group->members[n] = dup_sec_desc(obj->mem_ctx, members[n]); - if (!(obj->data.group->members[n])) return NT_STATUS_NO_MEMORY; - n++; - } while (n < count); - return NT_STATUS_OK; -} - -/* data_store set functions */ - -NTSTATUS gums_create_commit_set(GUMS_COMMIT_SET **com_set, TALLOC_CTX *ctx, DOM_SID *sid, uint32 type) -{ - TALLOC_CTX *mem_ctx; - GUMS_COMMIT_SET *set; - - mem_ctx = talloc_init("commit_set"); - if (mem_ctx == NULL) - return NT_STATUS_NO_MEMORY; - set = (GUMS_COMMIT_SET *)talloc(mem_ctx, sizeof(GUMS_COMMIT_SET)); - if (set == NULL) { - talloc_destroy(mem_ctx); - return NT_STATUS_NO_MEMORY; - } - - set->mem_ctx = mem_ctx; - set->type = type; - sid_copy(&(set->sid), sid); - set->count = 0; - set->data = NULL; - *com_set = set; - - return NT_STATUS_OK; -} - -NTSTATUS gums_cs_set_sec_desc(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, SEC_DESC *sec_desc) -{ - GUMS_DATA_SET *data_set; - SEC_DESC *new_sec_desc; - - if (!mem_ctx || !com_set || !sec_desc) - return NT_STATUS_INVALID_PARAMETER; - - com_set->count = com_set->count + 1; - if (com_set->count == 1) { /* first data set */ - data_set = (GUMS_DATA_SET *)talloc(mem_ctx, sizeof(GUMS_DATA_SET)); - } else { - data_set = (GUMS_DATA_SET *)talloc_realloc(mem_ctx, com_set->data, sizeof(GUMS_DATA_SET) * com_set->count); - } - if (data_set == NULL) - return NT_STATUS_NO_MEMORY; - - com_set->data = data_set; - data_set = &((com_set->data)[com_set->count - 1]); - - data_set->type = GUMS_SET_SEC_DESC; - new_sec_desc = dup_sec_desc(mem_ctx, sec_desc); - if (new_sec_desc == NULL) - return NT_STATUS_NO_MEMORY; - - (SEC_DESC *)(data_set->data) = new_sec_desc; - - return NT_STATUS_OK; -} - -NTSTATUS gums_cs_add_privilege(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, LUID_ATTR priv) -{ - GUMS_DATA_SET *data_set; - LUID_ATTR *new_priv; - - if (!mem_ctx || !com_set) - return NT_STATUS_INVALID_PARAMETER; - - com_set->count = com_set->count + 1; - if (com_set->count == 1) { /* first data set */ - data_set = (GUMS_DATA_SET *)talloc(mem_ctx, sizeof(GUMS_DATA_SET)); - } else { - data_set = (GUMS_DATA_SET *)talloc_realloc(mem_ctx, com_set->data, sizeof(GUMS_DATA_SET) * com_set->count); - } - if (data_set == NULL) - return NT_STATUS_NO_MEMORY; - - com_set->data = data_set; - data_set = &((com_set->data)[com_set->count - 1]); - - data_set->type = GUMS_ADD_PRIVILEGE; - if (NT_STATUS_IS_ERR(dupalloc_luid_attr(mem_ctx, &new_priv, priv))) - return NT_STATUS_NO_MEMORY; - - (SEC_DESC *)(data_set->data) = new_priv; - - return NT_STATUS_OK; -} - -NTSTATUS gums_cs_del_privilege(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, LUID_ATTR priv) -{ - GUMS_DATA_SET *data_set; - LUID_ATTR *new_priv; - - if (!mem_ctx || !com_set) - return NT_STATUS_INVALID_PARAMETER; - - com_set->count = com_set->count + 1; - if (com_set->count == 1) { /* first data set */ - data_set = (GUMS_DATA_SET *)talloc(mem_ctx, sizeof(GUMS_DATA_SET)); - } else { - data_set = (GUMS_DATA_SET *)talloc_realloc(mem_ctx, com_set->data, sizeof(GUMS_DATA_SET) * com_set->count); - } - if (data_set == NULL) - return NT_STATUS_NO_MEMORY; - - com_set->data = data_set; - data_set = &((com_set->data)[com_set->count - 1]); - - data_set->type = GUMS_DEL_PRIVILEGE; - if (NT_STATUS_IS_ERR(dupalloc_luid_attr(mem_ctx, &new_priv, priv))) - return NT_STATUS_NO_MEMORY; - - (SEC_DESC *)(data_set->data) = new_priv; - - return NT_STATUS_OK; -} - -NTSTATUS gums_cs_set_privilege_set(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, PRIVILEGE_SET *priv_set) -{ - GUMS_DATA_SET *data_set; - PRIVILEGE_SET *new_priv_set; - - if (!mem_ctx || !com_set || !priv_set) - return NT_STATUS_INVALID_PARAMETER; - - com_set->count = com_set->count + 1; - if (com_set->count == 1) { /* first data set */ - data_set = (GUMS_DATA_SET *)talloc(mem_ctx, sizeof(GUMS_DATA_SET)); - } else { - data_set = (GUMS_DATA_SET *)talloc_realloc(mem_ctx, com_set->data, sizeof(GUMS_DATA_SET) * com_set->count); - } - if (data_set == NULL) - return NT_STATUS_NO_MEMORY; - - com_set->data = data_set; - data_set = &((com_set->data)[com_set->count - 1]); - - data_set->type = GUMS_SET_SEC_DESC; - if (NT_STATUS_IS_ERR(dup_priv_set(&new_priv_set, mem_ctx, priv_set))) - return NT_STATUS_NO_MEMORY; - - (SEC_DESC *)(data_set->data) = new_priv_set; - - return NT_STATUS_OK; -} - -NTSTATUS gums_cs_set_string(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, uint32 type, char *str) -{ - GUMS_DATA_SET *data_set; - char *new_str; - - if (!mem_ctx || !com_set || !str || type < GUMS_SET_NAME || type > GUMS_SET_MUNGED_DIAL) - return NT_STATUS_INVALID_PARAMETER; - - com_set->count = com_set->count + 1; - if (com_set->count == 1) { /* first data set */ - data_set = (GUMS_DATA_SET *)talloc(mem_ctx, sizeof(GUMS_DATA_SET)); - } else { - data_set = (GUMS_DATA_SET *)talloc_realloc(mem_ctx, com_set->data, sizeof(GUMS_DATA_SET) * com_set->count); - } - if (data_set == NULL) - return NT_STATUS_NO_MEMORY; - - com_set->data = data_set; - data_set = &((com_set->data)[com_set->count - 1]); - - data_set->type = type; - new_str = talloc_strdup(mem_ctx, str); - if (new_str == NULL) - return NT_STATUS_NO_MEMORY; - - (char *)(data_set->data) = new_str; - - return NT_STATUS_OK; -} - -NTSTATUS gums_cs_set_name(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, char *name) -{ - return gums_set_string(mem_ctx, com_set, GUMS_SET_NAME, name); -} - -NTSTATUS gums_cs_set_description(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, char *desc) -{ - return gums_set_string(mem_ctx, com_set, GUMS_SET_DESCRIPTION, desc); -} - -NTSTATUS gums_cs_set_full_name(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, char *full_name) -{ - if (com_set->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_INVALID_PARAMETER; - - return gums_set_string(mem_ctx, com_set, GUMS_SET_NAME, full_name); -} - -NTSTATUS gums_cs_set_home_directory(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, char *home_dir) -{ - if (com_set->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_INVALID_PARAMETER; - - return gums_set_string(mem_ctx, com_set, GUMS_SET_NAME, home_dir); -} - -NTSTATUS gums_cs_set_drive(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, char *drive) -{ - if (com_set->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_INVALID_PARAMETER; - - return gums_set_string(mem_ctx, com_set, GUMS_SET_NAME, drive); -} - -NTSTATUS gums_cs_set_logon_script(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, char *logon_script) -{ - if (com_set->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_INVALID_PARAMETER; - - return gums_set_string(mem_ctx, com_set, GUMS_SET_NAME, logon_script); -} - -NTSTATUS gums_cs_set_profile_path(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, char *prof_path) -{ - if (com_set->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_INVALID_PARAMETER; - - return gums_set_string(mem_ctx, com_set, GUMS_SET_NAME, prof_path); -} - -NTSTATUS gums_cs_set_workstations(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, char *wks) -{ - if (com_set->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_INVALID_PARAMETER; - - return gums_set_string(mem_ctx, com_set, GUMS_SET_NAME, wks); -} - -NTSTATUS gums_cs_set_unknown_string(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, char *unkn_str) -{ - if (com_set->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_INVALID_PARAMETER; - - return gums_set_string(mem_ctx, com_set, GUMS_SET_NAME, unkn_str); -} - -NTSTATUS gums_cs_set_munged_dial(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, char *munged_dial) -{ - if (com_set->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_INVALID_PARAMETER; - - return gums_set_string(mem_ctx, com_set, GUMS_SET_NAME, munged_dial); -} - -NTSTATUS gums_cs_set_nttime(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, uint32 type, NTTIME *nttime) -{ - GUMS_DATA_SET *data_set; - NTTIME *new_time; - - if (!mem_ctx || !com_set || !nttime || type < GUMS_SET_LOGON_TIME || type > GUMS_SET_PASS_MUST_CHANGE_TIME) - return NT_STATUS_INVALID_PARAMETER; - - com_set->count = com_set->count + 1; - if (com_set->count == 1) { /* first data set */ - data_set = (GUMS_DATA_SET *)talloc(mem_ctx, sizeof(GUMS_DATA_SET)); - } else { - data_set = (GUMS_DATA_SET *)talloc_realloc(mem_ctx, com_set->data, sizeof(GUMS_DATA_SET) * com_set->count); - } - if (data_set == NULL) - return NT_STATUS_NO_MEMORY; - - com_set->data = data_set; - data_set = &((com_set->data)[com_set->count - 1]); - - data_set->type = type; - new_time = talloc(mem_ctx, sizeof(NTTIME)); - if (new_time == NULL) - return NT_STATUS_NO_MEMORY; - - new_time->low = nttime->low; - new_time->high = nttime->high; - (char *)(data_set->data) = new_time; - - return NT_STATUS_OK; -} - -NTSTATUS gums_cs_set_logon_time(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, NTTIME *logon_time) -{ - if (com_set->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_INVALID_PARAMETER; - - return gums_set_nttime(mem_ctx, com_set, GUMS_SET_LOGON_TIME, logon_time); -} - -NTSTATUS gums_cs_set_logoff_time(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, NTTIME *logoff_time) -{ - if (com_set->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_INVALID_PARAMETER; - - return gums_set_nttime(mem_ctx, com_set, GUMS_SET_LOGOFF_TIME, logoff_time); -} - -NTSTATUS gums_cs_set_kickoff_time(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, NTTIME *kickoff_time) -{ - if (com_set->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_INVALID_PARAMETER; - - return gums_set_nttime(mem_ctx, com_set, GUMS_SET_KICKOFF_TIME, kickoff_time); -} - -NTSTATUS gums_cs_set_pass_last_set_time(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, NTTIME *pls_time) -{ - if (com_set->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_INVALID_PARAMETER; - - return gums_set_nttime(mem_ctx, com_set, GUMS_SET_LOGON_TIME, pls_time); -} - -NTSTATUS gums_cs_set_pass_can_change_time(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, NTTIME *pcc_time) -{ - if (com_set->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_INVALID_PARAMETER; - - return gums_set_nttime(mem_ctx, com_set, GUMS_SET_LOGON_TIME, pcc_time); -} - -NTSTATUS gums_cs_set_pass_must_change_time(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, NTTIME *pmc_time) -{ - if (com_set->type != GUMS_OBJ_NORMAL_USER) - return NT_STATUS_INVALID_PARAMETER; - - return gums_set_nttime(mem_ctx, com_set, GUMS_SET_LOGON_TIME, pmc_time); -} - -NTSTATUS gums_cs_add_sids_to_group(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, const DOM_SID **sids, const uint32 count) -{ - GUMS_DATA_SET *data_set; - DOM_SID **new_sids; - int i; - - if (!mem_ctx || !com_set || !sids) - return NT_STATUS_INVALID_PARAMETER; - - com_set->count = com_set->count + 1; - if (com_set->count == 1) { /* first data set */ - data_set = (GUMS_DATA_SET *)talloc(mem_ctx, sizeof(GUMS_DATA_SET)); - } else { - data_set = (GUMS_DATA_SET *)talloc_realloc(mem_ctx, com_set->data, sizeof(GUMS_DATA_SET) * com_set->count); - } - if (data_set == NULL) - return NT_STATUS_NO_MEMORY; - - com_set->data = data_set; - data_set = &((com_set->data)[com_set->count - 1]); - - data_set->type = GUMS_ADD_SID_LIST; - new_sids = (DOM_SID **)talloc(mem_ctx, (sizeof(void *) * count)); - if (new_sids == NULL) - return NT_STATUS_NO_MEMORY; - for (i = 0; i < count; i++) { - new_sids[i] = sid_dup_talloc(mem_ctx, sids[i]); - if (new_sids[i] == NULL) - return NT_STATUS_NO_MEMORY; - } - - (SEC_DESC *)(data_set->data) = new_sids; - - return NT_STATUS_OK; -} - -NTSTATUS gums_cs_add_users_to_group(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, const DOM_SID **sids, const uint32 count) -{ - if (!mem_ctx || !com_set || !sids) - return NT_STATUS_INVALID_PARAMETER; - if (com_set->type != GUMS_OBJ_GROUP || com_set->type != GUMS_OBJ_ALIAS) - return NT_STATUS_INVALID_PARAMETER; - - return gums_add_sids_to_group(mem_ctx, com_set, sids, count); -} - -NTSTATUS gums_cs_add_groups_to_group(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, const DOM_SID **sids, const uint32 count) -{ - if (!mem_ctx || !com_set || !sids) - return NT_STATUS_INVALID_PARAMETER; - if (com_set->type != GUMS_OBJ_ALIAS) - return NT_STATUS_INVALID_PARAMETER; - - return gums_add_sids_to_group(mem_ctx, com_set, sids, count); -} - -NTSTATUS gums_cs_del_sids_from_group(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, const DOM_SID **sids, const uint32 count) -{ - GUMS_DATA_SET *data_set; - DOM_SID **new_sids; - int i; - - if (!mem_ctx || !com_set || !sids) - return NT_STATUS_INVALID_PARAMETER; - if (com_set->type != GUMS_OBJ_GROUP || com_set->type != GUMS_OBJ_ALIAS) - return NT_STATUS_INVALID_PARAMETER; - - com_set->count = com_set->count + 1; - if (com_set->count == 1) { /* first data set */ - data_set = (GUMS_DATA_SET *)talloc(mem_ctx, sizeof(GUMS_DATA_SET)); - } else { - data_set = (GUMS_DATA_SET *)talloc_realloc(mem_ctx, com_set->data, sizeof(GUMS_DATA_SET) * com_set->count); - } - if (data_set == NULL) - return NT_STATUS_NO_MEMORY; - - com_set->data = data_set; - data_set = &((com_set->data)[com_set->count - 1]); - - data_set->type = GUMS_DEL_SID_LIST; - new_sids = (DOM_SID **)talloc(mem_ctx, (sizeof(void *) * count)); - if (new_sids == NULL) - return NT_STATUS_NO_MEMORY; - for (i = 0; i < count; i++) { - new_sids[i] = sid_dup_talloc(mem_ctx, sids[i]); - if (new_sids[i] == NULL) - return NT_STATUS_NO_MEMORY; - } - - (SEC_DESC *)(data_set->data) = new_sids; - - return NT_STATUS_OK; -} - -NTSTATUS gums_ds_set_sids_in_group(TALLOC_CTX *mem_ctx, GUMS_COMMIT_SET *com_set, const DOM_SID **sids, const uint32 count) -{ - GUMS_DATA_SET *data_set; - DOM_SID **new_sids; - int i; - - if (!mem_ctx || !com_set || !sids) - return NT_STATUS_INVALID_PARAMETER; - if (com_set->type != GUMS_OBJ_GROUP || com_set->type != GUMS_OBJ_ALIAS) - return NT_STATUS_INVALID_PARAMETER; - - com_set->count = com_set->count + 1; - if (com_set->count == 1) { /* first data set */ - data_set = (GUMS_DATA_SET *)talloc(mem_ctx, sizeof(GUMS_DATA_SET)); - } else { - data_set = (GUMS_DATA_SET *)talloc_realloc(mem_ctx, com_set->data, sizeof(GUMS_DATA_SET) * com_set->count); - } - if (data_set == NULL) - return NT_STATUS_NO_MEMORY; - - com_set->data = data_set; - data_set = &((com_set->data)[com_set->count - 1]); - - data_set->type = GUMS_SET_SID_LIST; - new_sids = (DOM_SID **)talloc(mem_ctx, (sizeof(void *) * count)); - if (new_sids == NULL) - return NT_STATUS_NO_MEMORY; - for (i = 0; i < count; i++) { - new_sids[i] = sid_dup_talloc(mem_ctx, sids[i]); - if (new_sids[i] == NULL) - return NT_STATUS_NO_MEMORY; - } - - (SEC_DESC *)(data_set->data) = new_sids; - - return NT_STATUS_OK; -} - - -NTSTATUS gums_commit_data(GUMS_COMMIT_SET *set) -{ - return gums_storage->set_object_values(set->sid, set->count, set->data); -} - -NTSTATUS gums_destroy_commit_set(GUMS_COMMIT_SET **com_set) -{ - talloc_destroy((*com_set)->mem_ctx); - *com_set = NULL; - - return NT_STATUS_OK; -} - diff --git a/source/sam/gums_helper.c b/source/sam/gums_helper.c deleted file mode 100644 index 8526a2f1cc0..00000000000 --- a/source/sam/gums_helper.c +++ /dev/null @@ -1,607 +0,0 @@ -/* - Unix SMB/CIFS implementation. - GUMS backends helper functions - Copyright (C) Simo Sorce 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -extern GUMS_FUNCTIONS *gums_storage; - -extern DOM_SID global_sid_World; -extern DOM_SID global_sid_Builtin_Administrators; -extern DOM_SID global_sid_Builtin_Power_Users; -extern DOM_SID global_sid_Builtin_Account_Operators; -extern DOM_SID global_sid_Builtin_Server_Operators; -extern DOM_SID global_sid_Builtin_Print_Operators; -extern DOM_SID global_sid_Builtin_Backup_Operators; -extern DOM_SID global_sid_Builtin_Replicator; -extern DOM_SID global_sid_Builtin_Users; -extern DOM_SID global_sid_Builtin_Guests; - - -/* defines */ - -#define ALLOC_CHECK(str, ptr, err, label) do { if ((ptr) == NULL) { DEBUG(0, ("%s: out of memory!\n", str)); err = NT_STATUS_NO_MEMORY; goto label; } } while(0) -#define NTSTATUS_CHECK(str1, str2, err, label) do { if (NT_STATUS_IS_ERR(err)) { DEBUG(0, ("%s: %s failed!\n", str1, str2)); } } while(0) - -/**************************************************************************** - Check if a user is a mapped group. - - This function will check if the group SID is mapped onto a - system managed gid or onto a winbind manged sid. - In the first case it will be threated like a mapped group - and the backend should take the member list with a getgrgid - and ignore any user that have been possibly set into the group - object. - - In the second case, the group is a fully SAM managed group - served back to the system through winbind. In this case the - members of a Local group are "unrolled" to cope with the fact - that unix cannot contain groups inside groups. - The backend MUST never call any getgr* / getpw* function or - loops with winbind may happen. - ****************************************************************************/ - -/* -NTSTATUS is_mapped_group(BOOL *mapped, const DOM_SID *sid) -{ - NTSTATUS result; - gid_t id; - - /* look if mapping exist, do not make idmap alloc an uid if SID is not found * / - result = idmap_get_gid_from_sid(&id, sid, False); - if (NT_STATUS_IS_OK(result)) { - *mapped = gid_is_in_winbind_range(id); - } else { - *mapped = False; - } - - return result; -} -*/ - -/**************************************************************************** - duplicate alloc luid_attr - ****************************************************************************/ -NTSTATUS dupalloc_luid_attr(TALLOC_CTX *ctx, LUID_ATTR **new_la, LUID_ATTR old_la) -{ - *new_la = (LUID_ATTR *)talloc(ctx, sizeof(LUID_ATTR)); - if (*new_la == NULL) { - DEBUG(0,("dupalloc_luid_attr: could not Alloc memory to duplicate LUID_ATTR\n")); - return NT_STATUS_NO_MEMORY; - } - - (*new_la)->luid.high = old_la.luid.high; - (*new_la)->luid.low = old_la.luid.low; - (*new_la)->attr = old_la.attr; - - return NT_STATUS_OK; -} - -/**************************************************************************** - initialise a privilege list - ****************************************************************************/ -void init_privilege(PRIVILEGE_SET *priv_set) -{ - priv_set->count=0; - priv_set->control=0; - priv_set->set=NULL; -} - -/**************************************************************************** - add a privilege to a privilege array - ****************************************************************************/ -NTSTATUS add_privilege(PRIVILEGE_SET *priv_set, TALLOC_CTX *ctx, LUID_ATTR set) -{ - LUID_ATTR *new_set; - - /* check if the privilege is not already in the list */ - if (check_priv_in_privilege(priv_set, set)) - return NT_STATUS_UNSUCCESSFUL; - - /* we can allocate memory to add the new privilege */ - - new_set=(LUID_ATTR *)talloc_realloc(ctx, priv_set->set, (priv_set->count+1)*(sizeof(LUID_ATTR))); - if (new_set==NULL) { - DEBUG(0,("add_privilege: could not Realloc memory to add a new privilege\n")); - return NT_STATUS_NO_MEMORY; - } - - new_set[priv_set->count].luid.high=set.luid.high; - new_set[priv_set->count].luid.low=set.luid.low; - new_set[priv_set->count].attr=set.attr; - - priv_set->count++; - priv_set->set=new_set; - - return NT_STATUS_OK; -} - -/**************************************************************************** - add all the privileges to a privilege array - ****************************************************************************/ -NTSTATUS add_all_privilege(PRIVILEGE_SET *priv_set, TALLOC_CTX *ctx) -{ - NTSTATUS result = NT_STATUS_OK; - LUID_ATTR set; - - set.attr=0; - set.luid.high=0; - - set.luid.low=SE_PRIV_ADD_USERS; - result = add_privilege(priv_set, ctx, set); - NTSTATUS_CHECK("add_all_privilege", "add_privilege", result, done); - - set.luid.low=SE_PRIV_ADD_MACHINES; - result = add_privilege(priv_set, ctx, set); - NTSTATUS_CHECK("add_all_privilege", "add_privilege", result, done); - - set.luid.low=SE_PRIV_PRINT_OPERATOR; - result = add_privilege(priv_set, ctx, set); - NTSTATUS_CHECK("add_all_privilege", "add_privilege", result, done); - -done: - return result; -} - -/**************************************************************************** - check if the privilege list is empty - ****************************************************************************/ -BOOL check_empty_privilege(PRIVILEGE_SET *priv_set) -{ - return (priv_set->count == 0); -} - -/**************************************************************************** - check if the privilege is in the privilege list - ****************************************************************************/ -BOOL check_priv_in_privilege(PRIVILEGE_SET *priv_set, LUID_ATTR set) -{ - int i; - - /* if the list is empty, obviously we can't have it */ - if (check_empty_privilege(priv_set)) - return False; - - for (i=0; icount; i++) { - LUID_ATTR *cur_set; - - cur_set=&priv_set->set[i]; - /* check only the low and high part. Checking the attr field has no meaning */ - if( (cur_set->luid.low==set.luid.low) && (cur_set->luid.high==set.luid.high) ) - return True; - } - - return False; -} - -/**************************************************************************** - remove a privilege from a privilege array - ****************************************************************************/ -NTSTATUS remove_privilege(PRIVILEGE_SET *priv_set, TALLOC_CTX *ctx, LUID_ATTR set) -{ - LUID_ATTR *new_set; - LUID_ATTR *old_set; - int i,j; - - /* check if the privilege is in the list */ - if (!check_priv_in_privilege(priv_set, set)) - return NT_STATUS_UNSUCCESSFUL; - - /* special case if it's the only privilege in the list */ - if (priv_set->count==1) { - init_privilege(priv_set); - return NT_STATUS_OK; - } - - /* - * the privilege is there, create a new list, - * and copy the other privileges - */ - - old_set = priv_set->set; - - new_set=(LUID_ATTR *)talloc(ctx, (priv_set->count - 1) * (sizeof(LUID_ATTR))); - if (new_set==NULL) { - DEBUG(0,("remove_privilege: could not malloc memory for new privilege list\n")); - return NT_STATUS_NO_MEMORY; - } - - for (i=0, j=0; icount; i++) { - if ((old_set[i].luid.low == set.luid.low) && - (old_set[i].luid.high == set.luid.high)) { - continue; - } - - new_set[j].luid.low = old_set[i].luid.low; - new_set[j].luid.high = old_set[i].luid.high; - new_set[j].attr = old_set[i].attr; - - j++; - } - - if (j != priv_set->count - 1) { - DEBUG(0,("remove_privilege: mismatch ! difference is not -1\n")); - DEBUGADD(0,("old count:%d, new count:%d\n", priv_set->count, j)); - return NT_STATUS_INTERNAL_ERROR; - } - - /* ok everything is fine */ - - priv_set->count--; - priv_set->set=new_set; - - return NT_STATUS_OK; -} - -/**************************************************************************** - duplicates a privilege array - ****************************************************************************/ -NTSTATUS dup_priv_set(PRIVILEGE_SET **new_priv_set, TALLOC_CTX *mem_ctx, PRIVILEGE_SET *priv_set) -{ - LUID_ATTR *new_set; - LUID_ATTR *old_set; - int i; - - *new_priv_set = (PRIVILEGE_SET *)talloc(mem_ctx, sizeof(PRIVILEGE_SET)); - init_privilege(*new_priv_set); - - /* special case if there are no privileges in the list */ - if (priv_set->count == 0) { - return NT_STATUS_OK; - } - - /* - * create a new list, - * and copy the other privileges - */ - - old_set = priv_set->set; - - new_set = (LUID_ATTR *)talloc(mem_ctx, (priv_set->count - 1) * (sizeof(LUID_ATTR))); - if (new_set==NULL) { - DEBUG(0,("remove_privilege: could not malloc memory for new privilege list\n")); - return NT_STATUS_NO_MEMORY; - } - - for (i=0; i < priv_set->count; i++) { - - new_set[i].luid.low = old_set[i].luid.low; - new_set[i].luid.high = old_set[i].luid.high; - new_set[i].attr = old_set[i].attr; - } - - (*new_priv_set)->count = priv_set->count; - (*new_priv_set)->control = priv_set->control; - (*new_priv_set)->set = new_set; - - return NT_STATUS_OK; -} - -#define ALIAS_DEFAULT_SACL_SA_RIGHTS 0x01050013 -#define ALIAS_DEFAULT_DACL_SA_RIGHTS \ - (READ_CONTROL_ACCESS | \ - SA_RIGHT_ALIAS_LOOKUP_INFO | \ - SA_RIGHT_ALIAS_GET_MEMBERS) /* 0x0002000c */ - -#define ALIAS_DEFAULT_SACL_SEC_ACE_FLAG (SEC_ACE_FLAG_FAILED_ACCESS | SEC_ACE_FLAG_SUCCESSFUL_ACCESS) /* 0xc0 */ - -NTSTATUS create_builtin_alias_default_sec_desc(SEC_DESC **sec_desc, TALLOC_CTX *ctx) -{ - DOM_SID *world = &global_sid_World; - DOM_SID *admins = &global_sid_Builtin_Administrators; - SEC_ACCESS sa; - SEC_ACE sacl_ace; - SEC_ACE dacl_aces[2]; - SEC_ACL *sacl = NULL; - SEC_ACL *dacl = NULL; - size_t psize; - - init_sec_access(&sa, ALIAS_DEFAULT_SACL_SA_RIGHTS); - init_sec_ace(&sacl_ace, world, SEC_ACE_TYPE_SYSTEM_AUDIT, sa, ALIAS_DEFAULT_SACL_SEC_ACE_FLAG); - - sacl = make_sec_acl(ctx, NT4_ACL_REVISION, 1, &sacl_ace); - if (!sacl) { - DEBUG(0, ("build_init_sec_desc: Failed to make SEC_ACL.\n")); - return NT_STATUS_NO_MEMORY; - } - - init_sec_access(&sa, ALIAS_DEFAULT_DACL_SA_RIGHTS); - init_sec_ace(&(dacl_aces[0]), world, SEC_ACE_TYPE_ACCESS_ALLOWED, sa, 0); - init_sec_access(&sa, SA_RIGHT_ALIAS_ALL_ACCESS); - init_sec_ace(&(dacl_aces[1]), admins, SEC_ACE_TYPE_ACCESS_ALLOWED, sa, 0); - - dacl = make_sec_acl(ctx, NT4_ACL_REVISION, 2, dacl_aces); - if (!sacl) { - DEBUG(0, ("build_init_sec_desc: Failed to make SEC_ACL.\n")); - return NT_STATUS_NO_MEMORY; - } - - *sec_desc = make_sec_desc(ctx, SEC_DESC_REVISION, admins, admins, sacl, dacl, &psize); - if (!(*sec_desc)) { - DEBUG(0,("get_share_security: Failed to make SEC_DESC.\n")); - return NT_STATUS_NO_MEMORY; - } - - return NT_STATUS_OK; -} - -NTSTATUS sec_desc_add_ace_to_dacl(SEC_DESC *sec_desc, TALLOC_CTX *ctx, DOM_SID *sid, uint32 mask) -{ - NTSTATUS result; - SEC_ACE *new_aces; - unsigned num_aces; - int i; - - num_aces = sec_desc->dacl->num_aces + 1; - result = sec_ace_add_sid(ctx, &new_aces, sec_desc->dacl->ace, &num_aces, sid, mask); - if (NT_STATUS_IS_OK(result)) { - sec_desc->dacl->ace = new_aces; - sec_desc->dacl->num_aces = num_aces; - sec_desc->dacl->size = SEC_ACL_HEADER_SIZE; - for (i = 0; i < num_aces; i++) { - sec_desc->dacl->size += sec_desc->dacl->ace[i].size; - } - } - return result; -} - -NTSTATUS gums_init_builtin_groups(void) -{ - NTSTATUS result; - GUMS_OBJECT g_obj; - GUMS_GROUP *g_grp; - GUMS_PRIVILEGE g_priv; - - /* Build the well known Builtin Local Groups */ - g_obj.type = GUMS_OBJ_GROUP; - g_obj.version = 1; - g_obj.seq_num = 0; - g_obj.mem_ctx = talloc_init("gums_init_backend_acct"); - if (g_obj.mem_ctx == NULL) { - DEBUG(0, ("gums_init_backend: Out of Memory!\n")); - return NT_STATUS_NO_MEMORY; - } - - /* Administrators */ - - /* alloc group structure */ - g_obj.data = (void *)talloc(g_obj.mem_ctx, sizeof(GUMS_OBJ_GROUP)); - ALLOC_CHECK("gums_init_backend", g_obj.data, result, done); - - /* make admins sid */ - g_grp = (GUMS_GROUP *)g_obj.data; - sid_copy(g_obj.sid, &global_sid_Builtin_Administrators); - - /* make security descriptor */ - result = create_builtin_alias_default_sec_desc(&(g_obj.sec_desc), g_obj.mem_ctx); - NTSTATUS_CHECK("gums_init_backend", "create_builtin_alias_default_sec_desc", result, done); - - /* make privilege set */ - /* From BDC join trace: - SeSecurityPrivilege - SeBackupPrivilege - SeRestorePrivilege - SeSystemtimePrivilege - SeShutdownPrivilege - SeRemoteShutdownPrivilege - SeTakeOwnershipPrivilege - SeDebugPrivilege - SeSystemEnvironmentPrivilege - SeSystemProfilePrivilege - SeProfileSingleProcessPrivilege - SeIncreaseBasePriorityPrivilege - SeLocalDriverPrivilege - SeCreatePagefilePrivilege - SeIncreaseQuotaPrivilege - */ - - /* set name */ - g_obj.name = talloc_strdup(g_obj.mem_ctx, "Administrators"); - ALLOC_CHECK("gums_init_backend", g_obj.name, result, done); - - /* set description */ - g_obj.description = talloc_strdup(g_obj.mem_ctx, "Members can fully administer the computer/domain"); - ALLOC_CHECK("gums_init_backend", g_obj.description, result, done); - - /* numebr of group members */ - g_grp->count = 0; - g_grp->members = NULL; - - /* store Administrators group */ - result = gums_storage->set_object(&g_obj); - - /* Power Users */ - /* Domain Controllers Does NOT have power Users */ - - sid_copy(g_obj.sid, &global_sid_Builtin_Power_Users); - - /* make privilege set */ - /* SE_PRIV_??? */ - - /* set name */ - g_obj.name = talloc_strdup(g_obj.mem_ctx, "Power Users"); - ALLOC_CHECK("gums_init_backend", g_obj.name, result, done); - - /* set description */ -/* > */ g_obj.description = talloc_strdup(g_obj.mem_ctx, "Power Users"); - ALLOC_CHECK("gums_init_backend", g_obj.description, result, done); - - /* store Power Users group */ - result = gums_storage->set_object(&g_obj); - - /* Account Operators */ - - sid_copy(g_obj.sid, &global_sid_Builtin_Account_Operators); - - /* make privilege set */ - /* From BDC join trace: - SeShutdownPrivilege - */ - - /* set name */ - g_obj.name = talloc_strdup(g_obj.mem_ctx, "Account Operators"); - ALLOC_CHECK("gums_init_backend", g_obj.name, result, done); - - /* set description */ - g_obj.description = talloc_strdup(g_obj.mem_ctx, "Members can administer domain user and group accounts"); - ALLOC_CHECK("gums_init_backend", g_obj.description, result, done); - - /* store Account Operators group */ - result = gums_storage->set_object(&g_obj); - - /* Server Operators */ - - sid_copy(g_obj.sid, &global_sid_Builtin_Server_Operators); - - /* make privilege set */ - /* From BDC join trace: - SeBackupPrivilege - SeRestorePrivilege - SeSystemtimePrivilege - SeShutdownPrivilege - SeRemoteShutdownPrivilege - */ - - /* set name */ - g_obj.name = talloc_strdup(g_obj.mem_ctx, "Server Operators"); - ALLOC_CHECK("gums_init_backend", g_obj.name, result, done); - - /* set description */ - g_obj.description = talloc_strdup(g_obj.mem_ctx, "Members can administer domain servers"); - ALLOC_CHECK("gums_init_backend", g_obj.description, result, done); - - /* store Server Operators group */ - result = gums_storage->set_object(&g_obj); - - /* Print Operators */ - - sid_copy(g_obj.sid, &global_sid_Builtin_Print_Operators); - - /* make privilege set */ - /* From BDC join trace: - SeShutdownPrivilege - */ - - /* set name */ - g_obj.name = talloc_strdup(g_obj.mem_ctx, "Print Operators"); - ALLOC_CHECK("gums_init_backend", g_obj.name, result, done); - - /* set description */ - g_obj.description = talloc_strdup(g_obj.mem_ctx, "Members can administer domain printers"); - ALLOC_CHECK("gums_init_backend", g_obj.description, result, done); - - /* store Print Operators group */ - result = gums_storage->set_object(&g_obj); - - /* Backup Operators */ - - sid_copy(g_obj.sid, &global_sid_Builtin_Backup_Operators); - - /* make privilege set */ - /* From BDC join trace: - SeBackupPrivilege - SeRestorePrivilege - SeShutdownPrivilege - */ - - /* set name */ - g_obj.name = talloc_strdup(g_obj.mem_ctx, "Backup Operators"); - ALLOC_CHECK("gums_init_backend", g_obj.name, result, done); - - /* set description */ - g_obj.description = talloc_strdup(g_obj.mem_ctx, "Members can bypass file security to backup files"); - ALLOC_CHECK("gums_init_backend", g_obj.description, result, done); - - /* store Backup Operators group */ - result = gums_storage->set_object(&g_obj); - - /* Replicator */ - - sid_copy(g_obj.sid, &global_sid_Builtin_Replicator); - - /* make privilege set */ - /* From BDC join trace: - SeBackupPrivilege - SeRestorePrivilege - SeShutdownPrivilege - */ - - /* set name */ - g_obj.name = talloc_strdup(g_obj.mem_ctx, "Replicator"); - ALLOC_CHECK("gums_init_backend", g_obj.name, result, done); - - /* set description */ - g_obj.description = talloc_strdup(g_obj.mem_ctx, "Supports file replication in a domain"); - ALLOC_CHECK("gums_init_backend", g_obj.description, result, done); - - /* store Replicator group */ - result = gums_storage->set_object(&g_obj); - - /* Users */ - - sid_copy(g_obj.sid, &global_sid_Builtin_Users); - - /* add ACE to sec dsec dacl */ - sec_desc_add_ace_to_dacl(g_obj.sec_desc, g_obj.mem_ctx, &global_sid_Builtin_Account_Operators, ALIAS_DEFAULT_DACL_SA_RIGHTS); - sec_desc_add_ace_to_dacl(g_obj.sec_desc, g_obj.mem_ctx, &global_sid_Builtin_Power_Users, ALIAS_DEFAULT_DACL_SA_RIGHTS); - - /* set name */ - g_obj.name = talloc_strdup(g_obj.mem_ctx, "Users"); - ALLOC_CHECK("gums_init_backend", g_obj.name, result, done); - - /* set description */ - g_obj.description = talloc_strdup(g_obj.mem_ctx, "Ordinary users"); - ALLOC_CHECK("gums_init_backend", g_obj.description, result, done); - - /* store Users group */ - result = gums_storage->set_object(&g_obj); - - /* Guests */ - - sid_copy(g_obj.sid, &global_sid_Builtin_Guests); - - /* set name */ - g_obj.name = talloc_strdup(g_obj.mem_ctx, "Guests"); - ALLOC_CHECK("gums_init_backend", g_obj.name, result, done); - - /* set description */ - g_obj.description = talloc_strdup(g_obj.mem_ctx, "Users granted guest access to the computer/domain"); - ALLOC_CHECK("gums_init_backend", g_obj.description, result, done); - - /* store Guests group */ - result = gums_storage->set_object(&g_obj); - - /* set default privileges */ - g_priv.type = GUMS_OBJ_GROUP; - g_priv.version = 1; - g_priv.seq_num = 0; - g_priv.mem_ctx = talloc_init("gums_init_backend_priv"); - if (g_priv.mem_ctx == NULL) { - DEBUG(0, ("gums_init_backend: Out of Memory!\n")); - return NT_STATUS_NO_MEMORY; - } - - - -done: - talloc_destroy(g_obj.mem_ctx); - talloc_destroy(g_priv.mem_ctx); - return result; -} - diff --git a/source/sam/interface.c b/source/sam/interface.c deleted file mode 100644 index 51ae561999c..00000000000 --- a/source/sam/interface.c +++ /dev/null @@ -1,1338 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Password and authentication handling - Copyright (C) Andrew Bartlett 2002 - Copyright (C) Jelmer Vernooij 2002 - Copyright (C) Stefan (metze) Metzmacher 2002 - Copyright (C) Kai Krüger 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -#undef DBGC_CLASS -#define DBGC_CLASS DBGC_SAM - -extern DOM_SID global_sid_Builtin; - -/** List of various built-in sam modules */ - -const struct sam_init_function_entry builtin_sam_init_functions[] = { - { "plugin", sam_init_plugin }, -#ifdef HAVE_LDAP - { "ads", sam_init_ads }, -#endif - { "skel", sam_init_skel }, - { NULL, NULL} -}; - - -static NTSTATUS sam_get_methods_by_sid(const SAM_CONTEXT *context, SAM_METHODS **sam_method, const DOM_SID *domainsid) -{ - SAM_METHODS *tmp_methods; - - DEBUG(5,("sam_get_methods_by_sid: %d\n", __LINE__)); - - /* invalid sam_context specified */ - SAM_ASSERT(context && context->methods); - - tmp_methods = context->methods; - - while (tmp_methods) { - if (sid_equal(domainsid, &(tmp_methods->domain_sid))) - { - (*sam_method) = tmp_methods; - return NT_STATUS_OK; - } - tmp_methods = tmp_methods->next; - } - - DEBUG(3,("sam_get_methods_by_sid: There is no backend specified for domain %s\n", sid_string_static(domainsid))); - - return NT_STATUS_NO_SUCH_DOMAIN; -} - -static NTSTATUS sam_get_methods_by_name(const SAM_CONTEXT *context, SAM_METHODS **sam_method, const char *domainname) -{ - SAM_METHODS *tmp_methods; - - DEBUG(5,("sam_get_methods_by_name: %d\n", __LINE__)); - - /* invalid sam_context specified */ - SAM_ASSERT(context && context->methods); - - tmp_methods = context->methods; - - while (tmp_methods) { - if (strequal(domainname, tmp_methods->domain_name)) - { - (*sam_method) = tmp_methods; - return NT_STATUS_OK; - } - tmp_methods = tmp_methods->next; - } - - DEBUG(3,("sam_get_methods_by_sid: There is no backend specified for domain %s\n", domainname)); - - return NT_STATUS_NO_SUCH_DOMAIN; -} - -static NTSTATUS make_sam_methods(TALLOC_CTX *mem_ctx, SAM_METHODS **methods) -{ - *methods = talloc(mem_ctx, sizeof(SAM_METHODS)); - - if (!*methods) { - return NT_STATUS_NO_MEMORY; - } - - ZERO_STRUCTP(*methods); - - return NT_STATUS_OK; -} - -/****************************************************************** - Free and cleanup a sam context, any associated data and anything - that the attached modules might have associated. - *******************************************************************/ - -void free_sam_context(SAM_CONTEXT **context) -{ - SAM_METHODS *sam_selected = (*context)->methods; - - while (sam_selected) { - if (sam_selected->free_private_data) { - sam_selected->free_private_data(&(sam_selected->private_data)); - } - sam_selected = sam_selected->next; - } - - talloc_destroy((*context)->mem_ctx); - *context = NULL; -} - -/****************************************************************** - Make a backend_entry from scratch - *******************************************************************/ - -static NTSTATUS make_backend_entry(SAM_BACKEND_ENTRY *backend_entry, char *sam_backend_string) -{ - char *tmp = NULL; - char *tmp_string = sam_backend_string; - - DEBUG(5,("make_backend_entry: %d\n", __LINE__)); - - SAM_ASSERT(sam_backend_string && backend_entry); - - backend_entry->module_name = sam_backend_string; - - DEBUG(5,("makeing backend_entry for %s\n", backend_entry->module_name)); - - if ((tmp = strrchr(tmp_string, '|')) != NULL) { - DEBUGADD(20,("a domain name has been specified\n")); - *tmp = 0; - backend_entry->domain_name = smb_xstrdup(tmp + 1); - tmp_string = tmp + 1; - } - - if ((tmp = strchr(tmp_string, ':')) != NULL) { - DEBUG(20,("options for the backend have been specified\n")); - *tmp = 0; - backend_entry->module_params = smb_xstrdup(tmp + 1); - tmp_string = tmp + 1; - } - - if (backend_entry->domain_name == NULL) { - DEBUG(10,("make_backend_entry: no domain was specified for sam module %s. Using default domain %s\n", - backend_entry->module_name, lp_workgroup())); - backend_entry->domain_name = smb_xstrdup(lp_workgroup()); - } - - if ((backend_entry->domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID))) == NULL) { - DEBUG(0,("make_backend_entry: failed to malloc domain_sid\n")); - return NT_STATUS_NO_MEMORY; - } - - DEBUG(10,("looking up sid for domain %s\n", backend_entry->domain_name)); - - if (!secrets_fetch_domain_sid(backend_entry->domain_name, backend_entry->domain_sid)) { - DEBUG(2,("make_backend_entry: There is no SID stored for domain %s. Creating a new one.\n", - backend_entry->domain_name)); - DEBUG(0, ("FIXME in %s:%d\n", __FILE__, __LINE__)); - ZERO_STRUCTP(backend_entry->domain_sid); - } - - DEBUG(5,("make_backend_entry: module name: %s, module parameters: %s, domain name: %s, domain sid: %s\n", - backend_entry->module_name, backend_entry->module_params, backend_entry->domain_name, sid_string_static(backend_entry->domain_sid))); - - return NT_STATUS_OK; -} - -/****************************************************************** - create sam_methods struct based on sam_backend_entry - *****************************************************************/ - -static NTSTATUS make_sam_methods_backend_entry(SAM_CONTEXT *context, SAM_METHODS **methods_ptr, SAM_BACKEND_ENTRY *backend_entry) -{ - NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; - SAM_METHODS *methods; - int i; - - DEBUG(5,("make_sam_methods_backend_entry: %d\n", __LINE__)); - - if (!NT_STATUS_IS_OK(nt_status = make_sam_methods(context->mem_ctx, methods_ptr))) { - return nt_status; - } - - methods = *methods_ptr; - methods->backendname = talloc_strdup(context->mem_ctx, backend_entry->module_name); - methods->domain_name = talloc_strdup(context->mem_ctx, backend_entry->domain_name); - sid_copy(&methods->domain_sid, backend_entry->domain_sid); - methods->parent = context; - - DEBUG(5,("Attempting to find sam backend %s\n", backend_entry->module_name)); - for (i = 0; builtin_sam_init_functions[i].module_name; i++) - { - if (strequal(builtin_sam_init_functions[i].module_name, backend_entry->module_name)) - { - DEBUG(5,("Found sam backend %s (at pos %d)\n", backend_entry->module_name, i)); - DEBUGADD(5,("initialising it with options=%s for domain %s\n", backend_entry->module_params, sid_string_static(backend_entry->domain_sid))); - nt_status = builtin_sam_init_functions[i].init(methods, backend_entry->module_params); - if (NT_STATUS_IS_OK(nt_status)) { - DEBUG(5,("sam backend %s has a valid init\n", backend_entry->module_name)); - } else { - DEBUG(2,("sam backend %s did not correctly init (error was %s)\n", - backend_entry->module_name, nt_errstr(nt_status))); - } - return nt_status; - } - } - - DEBUG(2,("could not find backend %s\n", backend_entry->module_name)); - - return NT_STATUS_INVALID_PARAMETER; -} - -static NTSTATUS sam_context_check_default_backends(SAM_CONTEXT *context) -{ - SAM_BACKEND_ENTRY entry; - DOM_SID *global_sam_sid = get_global_sam_sid(); /* lp_workgroup doesn't play nicely with multiple domains */ - SAM_METHODS *methods, *tmpmethods; - NTSTATUS ntstatus; - - DEBUG(5,("sam_context_check_default_backends: %d\n", __LINE__)); - - /* Make sure domain lp_workgroup() is available */ - - ntstatus = sam_get_methods_by_sid(context, &methods, &global_sid_Builtin); - - if (NT_STATUS_EQUAL(ntstatus, NT_STATUS_NO_SUCH_DOMAIN)) { - DEBUG(4,("There was no backend specified for domain %s(%s); using %s\n", - lp_workgroup(), sid_string_static(global_sam_sid), SAM_DEFAULT_BACKEND)); - - SAM_ASSERT(global_sam_sid); - - entry.module_name = SAM_DEFAULT_BACKEND; - entry.module_params = NULL; - entry.domain_name = lp_workgroup(); - entry.domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); - sid_copy(entry.domain_sid, global_sam_sid); - - if (!NT_STATUS_IS_OK(ntstatus = make_sam_methods_backend_entry(context, &methods, &entry))) { - DEBUG(4,("make_sam_methods_backend_entry failed\n")); - return ntstatus; - } - - DLIST_ADD_END(context->methods, methods, tmpmethods); - - } else if (!NT_STATUS_IS_OK(ntstatus)) { - DEBUG(2, ("sam_get_methods_by_sid failed for %s\n", lp_workgroup())); - return ntstatus; - } - - /* Make sure the BUILTIN domain is available */ - - ntstatus = sam_get_methods_by_sid(context, &methods, global_sam_sid); - - if (NT_STATUS_EQUAL(ntstatus, NT_STATUS_NO_SUCH_DOMAIN)) { - DEBUG(4,("There was no backend specified for domain BUILTIN; using %s\n", - SAM_DEFAULT_BACKEND)); - entry.module_name = SAM_DEFAULT_BACKEND; - entry.module_params = NULL; - entry.domain_name = "BUILTIN"; - entry.domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); - sid_copy(entry.domain_sid, &global_sid_Builtin); - - if (!NT_STATUS_IS_OK(ntstatus = make_sam_methods_backend_entry(context, &methods, &entry))) { - DEBUG(4,("make_sam_methods_backend_entry failed\n")); - return ntstatus; - } - - DLIST_ADD_END(context->methods, methods, tmpmethods); - } else if (!NT_STATUS_IS_OK(ntstatus)) { - DEBUG(2, ("sam_get_methods_by_sid failed for BUILTIN\n")); - return ntstatus; - } - - return NT_STATUS_OK; -} - -static NTSTATUS check_duplicate_backend_entries(SAM_BACKEND_ENTRY **backend_entries, int *nBackends) -{ - int i, j; - - DEBUG(5,("check_duplicate_backend_entries: %d\n", __LINE__)); - - for (i = 0; i < *nBackends; i++) { - for (j = i + 1; j < *nBackends; j++) { - if (sid_equal((*backend_entries)[i].domain_sid, (*backend_entries)[j].domain_sid)) { - DEBUG(0,("two backend modules claim the same domain %s\n", - sid_string_static((*backend_entries)[j].domain_sid))); - return NT_STATUS_INVALID_PARAMETER; - } - } - } - - return NT_STATUS_OK; -} - -NTSTATUS make_sam_context_list(SAM_CONTEXT **context, char **sam_backends_param) -{ - int i = 0, j = 0; - SAM_METHODS *curmethods, *tmpmethods; - int nBackends = 0; - SAM_BACKEND_ENTRY *backends = NULL; - NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; - - DEBUG(5,("make_sam_context_from_conf: %d\n", __LINE__)); - - if (!sam_backends_param) { - DEBUG(1, ("no SAM backeds specified!\n")); - return NT_STATUS_INVALID_PARAMETER; - } - - if (!NT_STATUS_IS_OK(nt_status = make_sam_context(context))) { - DEBUG(4,("make_sam_context failed\n")); - return nt_status; - } - - while (sam_backends_param[nBackends]) - nBackends++; - - DEBUG(6,("There are %d domains listed with their backends\n", nBackends)); - - if ((backends = (SAM_BACKEND_ENTRY *)malloc(sizeof(*backends)*nBackends)) == NULL) { - DEBUG(0,("make_sam_context_list: failed to allocate backends\n")); - return NT_STATUS_NO_MEMORY; - } - - memset(backends, '\0', sizeof(*backends)*nBackends); - - for (i = 0; i < nBackends; i++) { - DEBUG(8,("processing %s\n",sam_backends_param[i])); - if (!NT_STATUS_IS_OK(nt_status = make_backend_entry(&backends[i], sam_backends_param[i]))) { - DEBUG(4,("make_backend_entry failed\n")); - for (j = 0; j < nBackends; j++) SAFE_FREE(backends[j].domain_sid); - SAFE_FREE(backends); - free_sam_context(context); - return nt_status; - } - } - - if (!NT_STATUS_IS_OK(nt_status = check_duplicate_backend_entries(&backends, &nBackends))) { - DEBUG(4,("check_duplicate_backend_entries failed\n")); - for (j = 0; j < nBackends; j++) SAFE_FREE(backends[j].domain_sid); - SAFE_FREE(backends); - free_sam_context(context); - return nt_status; - } - - for (i = 0; i < nBackends; i++) { - if (!NT_STATUS_IS_OK(nt_status = make_sam_methods_backend_entry(*context, &curmethods, &backends[i]))) { - DEBUG(4,("make_sam_methods_backend_entry failed\n")); - for (j = 0; j < nBackends; j++) SAFE_FREE(backends[j].domain_sid); - SAFE_FREE(backends); - free_sam_context(context); - return nt_status; - } - DLIST_ADD_END((*context)->methods, curmethods, tmpmethods); - } - - for (i = 0; i < nBackends; i++) SAFE_FREE(backends[i].domain_sid); - - SAFE_FREE(backends); - return NT_STATUS_OK; -} - -/****************************************************************** - Make a sam_context from scratch. - *******************************************************************/ - -NTSTATUS make_sam_context(SAM_CONTEXT **context) -{ - TALLOC_CTX *mem_ctx; - - mem_ctx = talloc_init("sam_context internal allocation context"); - - if (!mem_ctx) { - DEBUG(0, ("make_sam_context: talloc init failed!\n")); - return NT_STATUS_NO_MEMORY; - } - - *context = talloc(mem_ctx, sizeof(**context)); - if (!*context) { - DEBUG(0, ("make_sam_context: talloc failed!\n")); - return NT_STATUS_NO_MEMORY; - } - - ZERO_STRUCTP(*context); - - (*context)->mem_ctx = mem_ctx; - - (*context)->free_fn = free_sam_context; - - return NT_STATUS_OK; -} - -/****************************************************************** - Return an already initialised sam_context, to facilitate backward - compatibility (see functions below). - *******************************************************************/ - -static struct sam_context *sam_get_static_context(BOOL reload) -{ - static SAM_CONTEXT *sam_context = NULL; - - if ((sam_context) && (reload)) { - sam_context->free_fn(&sam_context); - sam_context = NULL; - } - - if (!sam_context) { - if (!NT_STATUS_IS_OK(make_sam_context_list(&sam_context, lp_sam_backend()))) { - DEBUG(4,("make_sam_context_list failed\n")); - return NULL; - } - - /* Make sure the required domains (default domain, builtin) are available */ - if (!NT_STATUS_IS_OK(sam_context_check_default_backends(sam_context))) { - DEBUG(4,("sam_context_check_default_backends failed\n")); - return NULL; - } - } - - return sam_context; -} - -/*************************************************************** - Initialize the static context (at smbd startup etc). - - If uninitialised, context will auto-init on first use. - ***************************************************************/ - -BOOL initialize_sam(BOOL reload) -{ - return (sam_get_static_context(reload) != NULL); -} - - -/************************************************************** - External API. This is what the rest of the world calls... -***************************************************************/ - -/****************************************************************** - sam_* functions are used to link the external SAM interface - with the internal backends. These functions lookup the appropriate - backends for the domain and pass on to the function in sam_methods - in the selected backend - - When the context parmater is NULL, the default is used. - *******************************************************************/ - -#define SAM_SETUP_CONTEXT if (!context) \ - context = sam_get_static_context(False);\ - if (!context) {\ - return NT_STATUS_UNSUCCESSFUL; \ - }\ - - - -NTSTATUS sam_get_sec_desc(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd) -{ - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("sam_get_sec_desc: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, sid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } - - if (!tmp_methods->sam_get_sec_desc) { - DEBUG(3, ("sam_get_sec_desc: sam_methods of the domain did not specify sam_get_sec_desc\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_sec_desc(tmp_methods, access_token, sid, sd))) { - DEBUG(4,("sam_get_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_set_sec_desc(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd) -{ - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("sam_set_sec_desc: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, sid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } - - if (!tmp_methods->sam_set_sec_desc) { - DEBUG(3, ("sam_set_sec_desc: sam_methods of the domain did not specify sam_set_sec_desc\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_set_sec_desc(tmp_methods, access_token, sid, sd))) { - DEBUG(4,("sam_set_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - - -NTSTATUS sam_lookup_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const char *domain, const char *name, DOM_SID *sid, uint32 *type) -{ - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("sam_lookup_name: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_name(context, &tmp_methods, domain))) { - DEBUG(4,("sam_get_methods_by_name failed\n")); - return nt_status; - } - - if (!tmp_methods->sam_lookup_name) { - DEBUG(3, ("sam_lookup_name: sam_methods of the domain did not specify sam_lookup_name\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_name(tmp_methods, access_token, name, sid, type))) { - DEBUG(4,("sam_lookup_name for %s\\%s in backend %s failed\n", - tmp_methods->domain_name, name, tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_lookup_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, TALLOC_CTX *mem_ctx, const DOM_SID *sid, char **name, uint32 *type) -{ - SAM_METHODS *tmp_methods; - uint32 rid; - NTSTATUS nt_status; - DOM_SID domainsid; - - DEBUG(5,("sam_lookup_sid: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - sid_copy(&domainsid, sid); - if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("sam_lookup_sid: failed to split the sid\n")); - return NT_STATUS_INVALID_SID; - } - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } - - if (!tmp_methods->sam_lookup_sid) { - DEBUG(3, ("sam_lookup_sid: sam_methods of the domain did not specify sam_lookup_sid\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_sid(tmp_methods, access_token, mem_ctx, sid, name, type))) { - DEBUG(4,("sam_lookup_name for %s in backend %s failed\n", - sid_string_static(sid), tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - - -NTSTATUS sam_update_domain(const SAM_CONTEXT *context, const SAM_DOMAIN_HANDLE *domain) -{ - const SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("sam_update_domain: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - /* invalid domain specified */ - SAM_ASSERT(domain && domain->current_sam_methods); - - tmp_methods = domain->current_sam_methods; - - if (!tmp_methods->sam_update_domain) { - DEBUG(3, ("sam_update_domain: sam_methods of the domain did not specify sam_update_domain\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_update_domain(tmp_methods, domain))){ - DEBUG(4,("sam_update_domain in backend %s failed\n", - tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, int32 *domain_count, DOM_SID **domains, char ***domain_names) -{ - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - SEC_DESC *sd; - size_t sd_size; - uint32 acc_granted; - int i = 0; - - DEBUG(5,("sam_enum_domains: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - /* invalid parmaters specified */ - SAM_ASSERT(domain_count && domains && domain_names); - - if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { - DEBUG(4,("samr_make_sam_obj_sd failed\n")); - return nt_status; - } - - if (!se_access_check(sd, access_token, SA_RIGHT_SAM_ENUM_DOMAINS, &acc_granted, &nt_status)) { - DEBUG(3,("sam_enum_domains: ACCESS DENIED\n")); - return nt_status; - } - - tmp_methods= context->methods; - *domain_count = 0; - - while (tmp_methods) { - (*domain_count)++; - tmp_methods= tmp_methods->next; - } - - DEBUG(6,("sam_enum_domains: enumerating %d domains\n", (*domain_count))); - - tmp_methods = context->methods; - - if (((*domains) = malloc( sizeof(DOM_SID) * (*domain_count))) == NULL) { - DEBUG(0,("sam_enum_domains: Out of memory allocating domain SID list\n")); - return NT_STATUS_NO_MEMORY; - } - - if (((*domain_names) = malloc( sizeof(char*) * (*domain_count))) == NULL) { - DEBUG(0,("sam_enum_domains: Out of memory allocating domain name list\n")); - SAFE_FREE((*domains)); - return NT_STATUS_NO_MEMORY; - } - - while (tmp_methods) { - DEBUGADD(7,(" [%d] %s: %s\n", i, tmp_methods->domain_name, sid_string_static(&tmp_methods->domain_sid))); - sid_copy(domains[i],&tmp_methods->domain_sid); - *domain_names[i] = smb_xstrdup(tmp_methods->domain_name); - i++; - tmp_methods= tmp_methods->next; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_lookup_domain(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const char *domain, DOM_SID **domainsid) -{ - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - SEC_DESC *sd; - size_t sd_size; - uint32 acc_granted; - - DEBUG(5,("sam_lookup_domain: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - /* invalid paramters */ - SAM_ASSERT(access_token && domain && domainsid); - - if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { - DEBUG(4,("samr_make_sam_obj_sd failed\n")); - return nt_status; - } - - if (!se_access_check(sd, access_token, SA_RIGHT_SAM_OPEN_DOMAIN, &acc_granted, &nt_status)) { - DEBUG(3,("sam_lookup_domain: ACCESS DENIED\n")); - return nt_status; - } - - tmp_methods= context->methods; - - while (tmp_methods) { - if (strcmp(domain, tmp_methods->domain_name) == 0) { - (*domainsid) = (DOM_SID *)malloc(sizeof(DOM_SID)); - sid_copy((*domainsid), &tmp_methods->domain_sid); - return NT_STATUS_OK; - } - tmp_methods= tmp_methods->next; - } - - return NT_STATUS_NO_SUCH_DOMAIN; -} - - -NTSTATUS sam_get_domain_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain) -{ - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("sam_get_domain_by_sid: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - SAM_ASSERT(access_token && domainsid && domain); - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } - - if (!tmp_methods->sam_get_domain_handle) { - DEBUG(3, ("sam_get_domain_by_sid: sam_methods of the domain did not specify sam_get_domain_handle\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_domain_handle(tmp_methods, access_token, access_desired, domain))) { - DEBUG(4,("sam_get_domain_handle for %s in backend %s failed\n", - sid_string_static(domainsid), tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_create_account(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) -{ - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("sam_create_account: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - /* invalid parmaters */ - SAM_ASSERT(access_token && domainsid && account_name && account); - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } - - if (!tmp_methods->sam_create_account) { - DEBUG(3, ("sam_create_account: sam_methods of the domain did not specify sam_create_account\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_account(tmp_methods, access_token, access_desired, account_name, acct_ctrl, account))) { - DEBUG(4,("sam_create_account in backend %s failed\n", - tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_add_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) -{ - DOM_SID domainsid; - const DOM_SID *accountsid; - SAM_METHODS *tmp_methods; - uint32 rid; - NTSTATUS nt_status; - - DEBUG(5,("sam_add_account: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - /* invalid parmaters */ - SAM_ASSERT(account); - - if (!NT_STATUS_IS_OK(nt_status = sam_get_account_sid(account, &accountsid))) { - DEBUG(0,("Can't get account SID\n")); - return nt_status; - } - - sid_copy(&domainsid, accountsid); - if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("sam_get_account_by_sid: failed to split the sid\n")); - return NT_STATUS_INVALID_SID; - } - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } - - if (!tmp_methods->sam_add_account) { - DEBUG(3, ("sam_add_account: sam_methods of the domain did not specify sam_add_account\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_add_account(tmp_methods, account))){ - DEBUG(4,("sam_add_account in backend %s failed\n", - tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_update_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) -{ - const SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("sam_update_account: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - /* invalid account specified */ - SAM_ASSERT(account && account->current_sam_methods); - - tmp_methods = account->current_sam_methods; - - if (!tmp_methods->sam_update_account) { - DEBUG(3, ("sam_update_account: sam_methods of the domain did not specify sam_update_account\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_update_account(tmp_methods, account))){ - DEBUG(4,("sam_update_account in backend %s failed\n", - tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_delete_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) -{ - const SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("sam_delete_account: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - /* invalid account specified */ - SAM_ASSERT(account && account->current_sam_methods); - - tmp_methods = account->current_sam_methods; - - if (!tmp_methods->sam_delete_account) { - DEBUG(3, ("sam_delete_account: sam_methods of the domain did not specify sam_delete_account\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_delete_account(tmp_methods, account))){ - DEBUG(4,("sam_delete_account in backend %s failed\n", - tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, uint16 acct_ctrl, int32 *account_count, SAM_ACCOUNT_ENUM **accounts) -{ - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("sam_enum_accounts: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - SAM_ASSERT(access_token && domainsid && account_count && accounts); - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } - - if (!tmp_methods->sam_enum_accounts) { - DEBUG(3, ("sam_enum_accounts: sam_methods of the domain did not specify sam_enum_accounts\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_accounts(tmp_methods, access_token, acct_ctrl, account_count, accounts))) { - DEBUG(4,("sam_enum_accounts for domain %s in backend %s failed\n", - tmp_methods->domain_name, tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - - -NTSTATUS sam_get_account_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) -{ - SAM_METHODS *tmp_methods; - uint32 rid; - DOM_SID domainsid; - NTSTATUS nt_status; - - DEBUG(5,("sam_get_account_by_sid: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - SAM_ASSERT(access_token && accountsid && account); - - sid_copy(&domainsid, accountsid); - if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("sam_get_account_by_sid: failed to split the sid\n")); - return NT_STATUS_INVALID_SID; - } - - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } - - if (!tmp_methods->sam_get_account_by_sid) { - DEBUG(3, ("sam_get_account_by_sid: sam_methods of the domain did not specify sam_get_account_by_sid\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_account_by_sid(tmp_methods, access_token, access_desired, accountsid, account))) { - DEBUG(4,("sam_get_account_by_sid for %s in backend %s failed\n", - sid_string_static(accountsid), tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_account_by_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *domain, const char *name, SAM_ACCOUNT_HANDLE **account) -{ - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("sam_get_account_by_name: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - SAM_ASSERT(access_token && domain && name && account); - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_name(context, &tmp_methods, domain))) { - DEBUG(4,("sam_get_methods_by_name failed\n")); - return nt_status; - } - - if (!tmp_methods->sam_get_account_by_name) { - DEBUG(3, ("sam_get_account_by_name: sam_methods of the domain did not specify sam_get_account_by_name\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_account_by_name(tmp_methods, access_token, access_desired, name, account))) { - DEBUG(4,("sam_get_account_by_name for %s\\%s in backend %s failed\n", - domain, name, tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) -{ - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("sam_create_group: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - SAM_ASSERT(access_token && domainsid && group_name && group); - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } - - if (!tmp_methods->sam_create_group) { - DEBUG(3, ("sam_create_group: sam_methods of the domain did not specify sam_create_group\n")); - return NT_STATUS_UNSUCCESSFUL; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_group(tmp_methods, access_token, access_desired, group_name, group_ctrl, group))) { - DEBUG(4,("sam_create_group in backend %s failed\n", - tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) -{ - DOM_SID domainsid; - const DOM_SID *groupsid; - SAM_METHODS *tmp_methods; - uint32 rid; - NTSTATUS nt_status; - - DEBUG(5,("sam_add_group: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - SAM_ASSERT(group); - - if (!NT_STATUS_IS_OK(nt_status = sam_get_group_sid(group, &groupsid))) { - DEBUG(0,("Can't get group SID\n")); - return nt_status; - } - - sid_copy(&domainsid, groupsid); - if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("sam_get_group_by_sid: failed to split the sid\n")); - return NT_STATUS_INVALID_SID; - } - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } - - if (!tmp_methods->sam_add_group) { - DEBUG(3, ("sam_add_group: sam_methods of the domain did not specify sam_add_group\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_add_group(tmp_methods, group))){ - DEBUG(4,("sam_add_group in backend %s failed\n", - tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_update_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) -{ - const SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("sam_update_group: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - /* invalid group specified */ - SAM_ASSERT(group && group->current_sam_methods); - - tmp_methods = group->current_sam_methods; - - if (!tmp_methods->sam_update_group) { - DEBUG(3, ("sam_update_group: sam_methods of the domain did not specify sam_update_group\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_update_group(tmp_methods, group))){ - DEBUG(4,("sam_update_group in backend %s failed\n", - tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_delete_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) -{ - const SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("sam_delete_group: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - /* invalid group specified */ - SAM_ASSERT(group && group->current_sam_methods); - - tmp_methods = group->current_sam_methods; - - if (!tmp_methods->sam_delete_group) { - DEBUG(3, ("sam_delete_group: sam_methods of the domain did not specify sam_delete_group\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_delete_group(tmp_methods, group))){ - DEBUG(4,("sam_delete_group in backend %s failed\n", - tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) -{ - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("sam_enum_groups: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - SAM_ASSERT(access_token && domainsid && groups_count && groups); - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } - - if (!tmp_methods->sam_enum_accounts) { - DEBUG(3, ("sam_enum_groups: sam_methods of the domain did not specify sam_enum_groups\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_groups(tmp_methods, access_token, group_ctrl, groups_count, groups))) { - DEBUG(4,("sam_enum_groups for domain %s in backend %s failed\n", - tmp_methods->domain_name, tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_group_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) -{ - SAM_METHODS *tmp_methods; - uint32 rid; - NTSTATUS nt_status; - DOM_SID domainsid; - - DEBUG(5,("sam_get_group_by_sid: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - SAM_ASSERT(access_token && groupsid && group); - - sid_copy(&domainsid, groupsid); - if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("sam_get_group_by_sid: failed to split the sid\n")); - return NT_STATUS_INVALID_SID; - } - - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } - - if (!tmp_methods->sam_get_group_by_sid) { - DEBUG(3, ("sam_get_group_by_sid: sam_methods of the domain did not specify sam_get_group_by_sid\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_group_by_sid(tmp_methods, access_token, access_desired, groupsid, group))) { - DEBUG(4,("sam_get_group_by_sid for %s in backend %s failed\n", - sid_string_static(groupsid), tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_group_by_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group) -{ - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("sam_get_group_by_name: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - SAM_ASSERT(access_token && domain && name && group); - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_name(context, &tmp_methods, domain))) { - DEBUG(4,("sam_get_methods_by_name failed\n")); - return nt_status; - } - - if (!tmp_methods->sam_get_group_by_name) { - DEBUG(3, ("sam_get_group_by_name: sam_methods of the domain did not specify sam_get_group_by_name\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_group_by_name(tmp_methods, access_token, access_desired, name, group))) { - DEBUG(4,("sam_get_group_by_name for %s\\%s in backend %s failed\n", - domain, name, tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_add_member_to_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) -{ - const SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - SAM_SETUP_CONTEXT; - - /* invalid group or member specified */ - SAM_ASSERT(group && group->current_sam_methods && member); - - tmp_methods = group->current_sam_methods; - - if (!tmp_methods->sam_add_member_to_group) { - DEBUG(3, ("sam_add_member_to_group: sam_methods of the domain did not specify sam_add_member_to_group\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_add_member_to_group(tmp_methods, group, member))) { - DEBUG(4,("sam_add_member_to_group in backend %s failed\n", tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; - -} - -NTSTATUS sam_delete_member_from_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) -{ - const SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - SAM_SETUP_CONTEXT; - - /* invalid group or member specified */ - SAM_ASSERT(group && group->current_sam_methods && member); - - tmp_methods = group->current_sam_methods; - - if (!tmp_methods->sam_delete_member_from_group) { - DEBUG(3, ("sam_delete_member_from_group: sam_methods of the domain did not specify sam_delete_member_from_group\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_delete_member_from_group(tmp_methods, group, member))) { - DEBUG(4,("sam_delete_member_from_group in backend %s failed\n", tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_enum_groupmembers(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) -{ - const SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - SAM_SETUP_CONTEXT; - - /* invalid group specified */ - SAM_ASSERT(group && group->current_sam_methods && members_count && members); - - tmp_methods = group->current_sam_methods; - - if (!tmp_methods->sam_enum_groupmembers) { - DEBUG(3, ("sam_enum_groupmembers: sam_methods of the domain did not specify sam_enum_group_members\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_groupmembers(tmp_methods, group, members_count, members))) { - DEBUG(4,("sam_enum_groupmembers in backend %s failed\n", tmp_methods->backendname)); - return nt_status; - } - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_groups_of_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) -{ - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - uint32 tmp_group_count; - SAM_GROUP_ENUM *tmp_groups; - - DEBUG(5,("sam_get_groups_of_sid: %d\n", __LINE__)); - - SAM_SETUP_CONTEXT; - - /* invalid sam_context specified */ - SAM_ASSERT(access_token && sids && context && context->methods); - - *group_count = 0; - - *groups = NULL; - - tmp_methods= context->methods; - - while (tmp_methods) { - DEBUG(5,("getting groups from domain \n")); - if (!tmp_methods->sam_get_groups_of_sid) { - DEBUG(3, ("sam_get_groups_of_sid: sam_methods of domain did not specify sam_get_groups_of_sid\n")); - SAFE_FREE(*groups); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_groups_of_sid(tmp_methods, access_token, sids, group_ctrl, &tmp_group_count, &tmp_groups))) { - DEBUG(4,("sam_get_groups_of_sid in backend %s failed\n", tmp_methods->backendname)); - SAFE_FREE(*groups); - return nt_status; - } - - *groups = Realloc(*groups, ((*group_count) + tmp_group_count) * sizeof(SAM_GROUP_ENUM)); - - memcpy(&(*groups)[*group_count], tmp_groups, tmp_group_count); - - SAFE_FREE(tmp_groups); - - *group_count += tmp_group_count; - - tmp_methods = tmp_methods->next; - } - - return NT_STATUS_OK; -} - - diff --git a/source/sam/sam_ads.c b/source/sam/sam_ads.c deleted file mode 100755 index 13e03690049..00000000000 --- a/source/sam/sam_ads.c +++ /dev/null @@ -1,1378 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Active Directory SAM backend, for simulate a W2K DC in mixed mode. - - Copyright (C) Stefan (metze) Metzmacher 2002 - Copyright (C) Andrew Bartlett 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - - -#ifdef HAVE_LDAP - -static int sam_ads_debug_level = DBGC_SAM; - -#undef DBGC_CLASS -#define DBGC_CLASS sam_ads_debug_level - -#ifndef FIXME -#define FIXME( body ) { DEBUG(0,("FIXME: "));\ - DEBUGADD(0,(body));} -#endif - -#define ADS_STATUS_OK ADS_ERROR(0) -#define ADS_STATUS_UNSUCCESSFUL ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL) -#define ADS_STATUS_NOT_IMPLEMENTED ADS_ERROR_NT(NT_STATUS_NOT_IMPLEMENTED) - - -#define ADS_SUBTREE_BUILTIN "CN=Builtin," -#define ADS_SUBTREE_COMPUTERS "CN=Computers," -#define ADS_SUBTREE_DC "CN=Domain Controllers," -#define ADS_SUBTREE_USERS "CN=Users," -#define ADS_ROOT_TREE "" -/* Here are private module structs and functions */ - -typedef struct sam_ads_privates { - ADS_STRUCT *ads_struct; - TALLOC_CTX *mem_ctx; - BOOL bind_plaintext; - char *ads_bind_dn; - char *ads_bind_pw; - char *ldap_uri; - /* did we need something more? */ -}SAM_ADS_PRIVATES; - - -/* get only these LDAP attributes, witch we really need for an account */ -const char *account_attrs[] = { "objectSid", - "objectGUID", - "sAMAccountType", - "sAMAcountName", - "userPrincipalName", - "accountExpires", - "badPasswordTime", - "badPwdCount", - "lastLogoff", - "lastLogon", - "userWorkstations", - "dBCSPwd", - "unicodePwd", - "pwdLastSet", - "userAccountControl", - "profilePath", - "homeDrive", - "scriptPath", - "homeDirectory", - "cn", - "primaryGroupID",/* 513 */ - "nsNPAllowDialIn",/* TRUE */ - "userParameters",/* Dial Back number ...*/ - "codePage",/* 0 */ - "countryCode",/* 0 */ - "adminCount",/* 1 or 0 */ - "logonCount",/* 0 */ - "managedObjects", - "memberOf",/* dn */ - "instanceType",/* 4 */ - "name", /* sync with cn */ - "description", - /* "nTSecurityDescriptor", */ - NULL}; - -/* get only these LDAP attributes, witch we really need for a group */ -const char *group_attrs[] = {"objectSid", - /* "objectGUID", */ - "sAMAccountType", - "sAMAcountName", - "groupType", - /* "member", */ - "description", - "name", /* sync with cn */ - /* "nTSecurityDescriptor", */ - NULL}; - - -/*************************************************** - return our ads connection. We keep the connection - open to make things faster -****************************************************/ -static ADS_STATUS sam_ads_cached_connection(SAM_ADS_PRIVATES *privates) -{ - ADS_STRUCT *ads_struct; - ADS_STATUS ads_status; - - if (!privates->ads_struct) { - privates->ads_struct = ads_init_simple(); - ads_struct = privates->ads_struct; - ads_struct->server.ldap_uri = smb_xstrdup(privates->ldap_uri); - if ((!privates->ads_bind_dn) || (!*privates->ads_bind_dn)) { - ads_struct->auth.flags |= ADS_AUTH_ANON_BIND; - } else { - ads_struct->auth.user_name - = smb_xstrdup(privates->ads_bind_dn); - if (privates->ads_bind_pw) { - ads_struct->auth.password - = smb_xstrdup(privates->ads_bind_pw); - } - } - if (privates->bind_plaintext) { - ads_struct->auth.flags |= ADS_AUTH_SIMPLE_BIND; - } - } else { - ads_struct = privates->ads_struct; - } - - if (ads_struct->ld != NULL) { - /* connection has been opened. ping server. */ - struct sockaddr_un addr; - socklen_t len; - int sd; - if (ldap_get_option(ads_struct->ld, LDAP_OPT_DESC, &sd) == 0 && - getpeername(sd, (struct sockaddr *) &addr, &len) < 0) { - /* the other end has died. reopen. */ - ldap_unbind_ext(ads_struct->ld, NULL, NULL); - ads_struct->ld = NULL; - } - } - - if (ads_struct->ld != NULL) { - DEBUG(5,("sam_ads_cached_connection: allready connected to the LDAP server\n")); - return ADS_SUCCESS; - } - - ads_status = ads_connect(ads_struct); - - ads_status = ads_server_info(ads_struct); - if (!ADS_ERR_OK(ads_status)) { - DEBUG(0,("Can't set server info: %s\n",ads_errstr(ads_status))); - /* return ads_status; */ FIXME("for now we only warn!\n"); - } - - DEBUG(2, ("sam_ads_cached_connection: succesful connection to the LDAP server\n")); - return ADS_SUCCESS; -} - -static ADS_STATUS sam_ads_do_search(SAM_ADS_PRIVATES *privates, const char *bind_path, int scope, const char *exp, const char **attrs, void **res) -{ - ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL); - - ads_status = sam_ads_cached_connection(privates); - if (!ADS_ERR_OK(ads_status)) - return ads_status; - - return ads_do_search_retry(privates->ads_struct, bind_path, scope, exp, attrs, res); -} - - -/********************************************* -here we have to check the update serial number - - this is the core of the ldap cache -*********************************************/ -static ADS_STATUS sam_ads_usn_is_valid(SAM_ADS_PRIVATES *privates, uint32 usn_in, uint32 *usn_out) -{ - ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL); - - SAM_ASSERT(privates && privates->ads_struct && usn_out); - - ads_status = ads_USN(privates->ads_struct, usn_out); - if (!ADS_ERR_OK(ads_status)) - return ads_status; - - if (*usn_out == usn_in) - return ADS_SUCCESS; - - return ads_status; -} - -/*********************************************** -Initialize SAM_ACCOUNT_HANDLE from an ADS query -************************************************/ -/* not ready :-( */ -static ADS_STATUS ads_entry2sam_account_handle(SAM_ADS_PRIVATES *privates, SAM_ACCOUNT_HANDLE *account ,void *msg) -{ - ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_NO_SUCH_USER); - NTSTATUS nt_status = NT_STATUS_NO_SUCH_USER; - ADS_STRUCT *ads_struct = privates->ads_struct; - TALLOC_CTX *mem_ctx = account->mem_ctx; - char *tmp_str = NULL; - - SAM_ASSERT(privates && ads_struct && account && mem_ctx && msg); - - FIXME("should we really use ads_pull_username()(or ads_pull_string())?\n"); - if ((account->private.account_name = ads_pull_username(ads_struct, mem_ctx, msg))==NULL) { - DEBUG(0,("ads_pull_username failed\n")); - return ADS_ERROR_NT(NT_STATUS_NO_SUCH_USER); - } - - if ((account->private.full_name = ads_pull_string(ads_struct, mem_ctx, msg,"name"))==NULL) { - DEBUG(3,("ads_pull_string for 'name' failed - skip\n")); - } - - if ((account->private.acct_desc = ads_pull_string(ads_struct, mem_ctx, msg,"description"))!=NULL) { - DEBUG(3,("ads_pull_string for 'acct_desc' failed - skip\n")); - } - - if ((account->private.home_dir = ads_pull_string(ads_struct, mem_ctx, msg,"homeDirectory"))!=NULL) { - DEBUG(3,("ads_pull_string for 'homeDirectory' failed - skip\n")); - } - - if ((account->private.dir_drive = ads_pull_string(ads_struct, mem_ctx, msg,"homeDrive"))!=NULL) { - DEBUG(3,("ads_pull_string for 'homeDrive' failed - skip\n")); - } - - if ((account->private.profile_path = ads_pull_string(ads_struct, mem_ctx, msg,"profilePath"))!=NULL) { - DEBUG(3,("ads_pull_string for 'profilePath' failed - skip\n")); - } - - if ((account->private.logon_script = ads_pull_string(ads_struct, mem_ctx, msg,"scriptPath"))!=NULL) { - DEBUG(3,("ads_pull_string for 'scriptPath' failed - skip\n")); - } - - FIXME("check 'nsNPAllowDialIn' for munged_dial!\n"); - if ((account->private.munged_dial = ads_pull_string(ads_struct, mem_ctx, msg,"userParameters"))!=NULL) { - DEBUG(3,("ads_pull_string for 'userParameters' failed - skip\n")); - } - - if ((account->private.unix_home_dir = ads_pull_string(ads_struct, mem_ctx, msg,"msSFUHomeDrirectory"))!=NULL) { - DEBUG(3,("ads_pull_string for 'msSFUHomeDrirectory' failed - skip\n")); - } - -#if 0 - FIXME("use function intern mem_ctx for pwdLastSet\n"); - if ((tmp_str = ads_pull_string(ads_struct, mem_ctx, msg,"pwdLastSet"))!=NULL) { - DEBUG(3,("ads_pull_string for 'pwdLastSet' failed - skip\n")); - } else { - account->private.pass_last_set_time = ads_parse_nttime(tmp_str); - tmp_str = NULL; - - } -#endif - -#if 0 -typedef struct sam_account_handle { - TALLOC_CTX *mem_ctx; - uint32 access_granted; - const struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ - void (*free_fn)(struct sam_account_handle **); - struct sam_account_data { - uint32 init_flag; - NTTIME logon_time; /* logon time */ - NTTIME logoff_time; /* logoff time */ - NTTIME kickoff_time; /* kickoff time */ - NTTIME pass_last_set_time; /* password last set time */ - NTTIME pass_can_change_time; /* password can change time */ - NTTIME pass_must_change_time; /* password must change time */ - char * account_name; /* account_name string */ - SAM_DOMAIN_HANDLE * domain; /* domain of account */ - char *full_name; /* account's full name string */ - char *unix_home_dir; /* UNIX home directory string */ - char *home_dir; /* home directory string */ - char *dir_drive; /* home directory drive string */ - char *logon_script; /* logon script string */ - char *profile_path; /* profile path string */ - char *acct_desc; /* account description string */ - char *workstations; /* login from workstations string */ - char *unknown_str; /* don't know what this is, yet. */ - char *munged_dial; /* munged path name and dial-back tel number */ - DOM_SID account_sid; /* Primary Account SID */ - DOM_SID group_sid; /* Primary Group SID */ - DATA_BLOB lm_pw; /* .data is Null if no password */ - DATA_BLOB nt_pw; /* .data is Null if no password */ - char *plaintext_pw; /* if Null not available */ - uint16 acct_ctrl; /* account info (ACB_xxxx bit-mask) */ - uint32 unknown_1; /* 0x00ff ffff */ - uint16 logon_divs; /* 168 - number of hours in a week */ - uint32 hours_len; /* normally 21 bytes */ - uint8 hours[MAX_HOURS_LEN]; - uint32 unknown_2; /* 0x0002 0000 */ - uint32 unknown_3; /* 0x0000 04ec */ - } private; -} SAM_ACCOUNT_HANDLE; -#endif - - return ads_status; -} - - -/*********************************************** -Initialize SAM_GROUP_ENUM from an ads entry -************************************************/ -/* not ready :-( */ -static ADS_STATUS ads_entry2sam_group_enum(SAM_ADS_PRIVATES *privates, TALLOC_CTX *mem_ctx, SAM_GROUP_ENUM **group_enum,const void *entry) -{ - ADS_STATUS ads_status = ADS_STATUS_UNSUCCESSFUL; - ADS_STRUCT *ads_struct = privates->ads_struct; - SAM_GROUP_ENUM __group_enum; - SAM_GROUP_ENUM *_group_enum = &__group_enum; - - SAM_ASSERT(privates && ads_struct && mem_ctx && group_enum && entry); - - *group_enum = _group_enum; - - DEBUG(3,("sam_ads: ads_entry2sam_account_handle\n")); - - if (!ads_pull_sid(ads_struct, &entry, "objectSid", &(_group_enum->sid))) { - DEBUG(0,("No sid for!?\n")); - return ADS_STATUS_UNSUCCESSFUL; - } - - if (!(_group_enum->group_name = ads_pull_string(ads_struct, mem_ctx, &entry, "sAMAccountName"))) { - DEBUG(0,("No groupname found")); - return ADS_STATUS_UNSUCCESSFUL; - } - - if (!(_group_enum->group_desc = ads_pull_string(ads_struct, mem_ctx, &entry, "desciption"))) { - DEBUG(0,("No description found")); - return ADS_STATUS_UNSUCCESSFUL; - } - - DEBUG(0,("sAMAccountName: %s\ndescription: %s\nobjectSid: %s\n", - _group_enum->group_name, - _group_enum->group_desc, - sid_string_static(&(_group_enum->sid)) - )); - - return ads_status; -} - -static ADS_STATUS sam_ads_access_check(SAM_ADS_PRIVATES *privates, const SEC_DESC *sd, const NT_USER_TOKEN *access_token, uint32 access_desired, uint32 *acc_granted) -{ - ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_ACCESS_DENIED); - NTSTATUS nt_status; - uint32 my_acc_granted; - - SAM_ASSERT(privates && sd && access_token); - /* acc_granted can be set to NULL */ - - /* the steps you need are: - 1. get_sec_desc for sid - 2. se_map_generic(accessdesired, generic_mapping) - 3. se_access_check() */ - - if (!se_access_check(sd, access_token, access_desired, (acc_granted)?acc_granted:&my_acc_granted, &nt_status)) { - DEBUG(3,("sam_ads_access_check: ACCESS DENIED\n")); - ads_status = ADS_ERROR_NT(nt_status); - return ads_status; - } - ads_status = ADS_ERROR_NT(nt_status); - return ads_status; -} - -static ADS_STATUS sam_ads_get_tree_sec_desc(SAM_ADS_PRIVATES *privates, const char *subtree, SEC_DESC **sd) -{ - ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_INVALID_PARAMETER); - ADS_STRUCT *ads_struct = privates->ads_struct; - TALLOC_CTX *mem_ctx = privates->mem_ctx; - char *search_path; - void *sec_desc_res; - void *sec_desc_msg; - const char *sec_desc_attrs[] = {"nTSecurityDescriptor",NULL}; - - SAM_ASSERT(privates && ads_struct && mem_ctx && sd); - *sd = NULL; - - if (subtree) { - asprintf(&search_path, "%s%s",subtree,ads_struct->config.bind_path); - } else { - asprintf(&search_path, "%s",""); - } - ads_status = sam_ads_do_search(privates, search_path, LDAP_SCOPE_BASE, "(objectClass=*)", sec_desc_attrs, &sec_desc_res); - SAFE_FREE(search_path); - if (!ADS_ERR_OK(ads_status)) - return ads_status; - - if ((sec_desc_msg = ads_first_entry(ads_struct, sec_desc_res))==NULL) { - ads_status = ADS_ERROR_NT(NT_STATUS_INVALID_PARAMETER); - return ads_status; - } - - if (!ads_pull_sd(ads_struct, mem_ctx, sec_desc_msg, sec_desc_attrs[0], sd)) { - *sd = NULL; - ads_status = ADS_ERROR_NT(NT_STATUS_INVALID_PARAMETER); - return ads_status; - } - - return ads_status; -} - -static ADS_STATUS sam_ads_account_policy_get(SAM_ADS_PRIVATES *privates, int field, uint32 *value) -{ - ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_INVALID_PARAMETER); - ADS_STRUCT *ads_struct = privates->ads_struct; - void *ap_res; - void *ap_msg; - const char *ap_attrs[] = {"minPwdLength",/* AP_MIN_PASSWORD_LEN */ - "pwdHistoryLength",/* AP_PASSWORD_HISTORY */ - "AP_USER_MUST_LOGON_TO_CHG_PASS",/* AP_USER_MUST_LOGON_TO_CHG_PASS */ - "maxPwdAge",/* AP_MAX_PASSWORD_AGE */ - "minPwdAge",/* AP_MIN_PASSWORD_AGE */ - "lockoutDuration",/* AP_LOCK_ACCOUNT_DURATION */ - "AP_RESET_COUNT_TIME",/* AP_RESET_COUNT_TIME */ - "AP_BAD_ATTEMPT_LOCKOUT",/* AP_BAD_ATTEMPT_LOCKOUT */ - "AP_TIME_TO_LOGOUT",/* AP_TIME_TO_LOGOUT */ - NULL}; - /*lockOutObservationWindow - lockoutThreshold $ pwdProperties*/ - static uint32 ap[9]; - static uint32 ap_usn = 0; - uint32 tmp_usn = 0; - - SAM_ASSERT(privates && ads_struct && value); - - FIXME("We need to decode all account_policy attributes!\n"); - - ads_status = sam_ads_usn_is_valid(privates,ap_usn,&tmp_usn); - if (!ADS_ERR_OK(ads_status)) { - ads_status = sam_ads_do_search(privates, ads_struct->config.bind_path, LDAP_SCOPE_BASE, "(objectClass=*)", ap_attrs, &ap_res); - if (!ADS_ERR_OK(ads_status)) - return ads_status; - - if (ads_count_replies(ads_struct, ap_res) != 1) { - ads_msgfree(ads_struct, ap_res); - return ADS_ERROR(LDAP_NO_RESULTS_RETURNED); - } - - if (!(ap_msg = ads_first_entry(ads_struct, ap_res))) { - ads_msgfree(ads_struct, ap_res); - return ADS_ERROR(LDAP_NO_RESULTS_RETURNED); - } - - if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[0], &ap[0])) { - /* AP_MIN_PASSWORD_LEN */ - ap[0] = MINPASSWDLENGTH;/* 5 chars minimum */ - } - if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[1], &ap[1])) { - /* AP_PASSWORD_HISTORY */ - ap[1] = 0;/* don't keep any old password */ - } - if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[2], &ap[2])) { - /* AP_USER_MUST_LOGON_TO_CHG_PASS */ - ap[2] = 0;/* don't force user to logon */ - } - if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[3], &ap[3])) { - /* AP_MAX_PASSWORD_AGE */ - ap[3] = MAX_PASSWORD_AGE;/* 21 days */ - } - if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[4], &ap[4])) { - /* AP_MIN_PASSWORD_AGE */ - ap[4] = 0;/* 0 days */ - } - if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[5], &ap[5])) { - /* AP_LOCK_ACCOUNT_DURATION */ - ap[5] = 0;/* lockout for 0 minutes */ - } - if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[6], &ap[6])) { - /* AP_RESET_COUNT_TIME */ - ap[6] = 0;/* reset immediatly */ - } - if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[7], &ap[7])) { - /* AP_BAD_ATTEMPT_LOCKOUT */ - ap[7] = 0;/* don't lockout */ - } - if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[8], &ap[8])) { - /* AP_TIME_TO_LOGOUT */ - ap[8] = -1;/* don't force logout */ - } - - ads_msgfree(ads_struct, ap_res); - ap_usn = tmp_usn; - } - - switch(field) { - case AP_MIN_PASSWORD_LEN: - *value = ap[0]; - ads_status = ADS_ERROR_NT(NT_STATUS_OK); - break; - case AP_PASSWORD_HISTORY: - *value = ap[1]; - ads_status = ADS_ERROR_NT(NT_STATUS_OK); - break; - case AP_USER_MUST_LOGON_TO_CHG_PASS: - *value = ap[2]; - ads_status = ADS_ERROR_NT(NT_STATUS_OK); - break; - case AP_MAX_PASSWORD_AGE: - *value = ap[3]; - ads_status = ADS_ERROR_NT(NT_STATUS_OK); - break; - case AP_MIN_PASSWORD_AGE: - *value = ap[4]; - ads_status = ADS_ERROR_NT(NT_STATUS_OK); - break; - case AP_LOCK_ACCOUNT_DURATION: - *value = ap[5]; - ads_status = ADS_ERROR_NT(NT_STATUS_OK); - break; - case AP_RESET_COUNT_TIME: - *value = ap[6]; - ads_status = ADS_ERROR_NT(NT_STATUS_OK); - break; - case AP_BAD_ATTEMPT_LOCKOUT: - *value = ap[7]; - ads_status = ADS_ERROR_NT(NT_STATUS_OK); - break; - case AP_TIME_TO_LOGOUT: - *value = ap[8]; - ads_status = ADS_ERROR_NT(NT_STATUS_OK); - break; - default: *value = 0; break; - } - - return ads_status; -} - - -/********************************** -Now the functions off the SAM API -***********************************/ - -/* General API */ -static NTSTATUS sam_ads_get_sec_desc(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, - const DOM_SID *sid, SEC_DESC **sd) -{ - ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL); - SAM_ADS_PRIVATES *privates = (struct sam_ads_privates *)sam_method->private_data; - ADS_STRUCT *ads_struct = privates->ads_struct; - TALLOC_CTX *mem_ctx; - char *sidstr,*filter; - void *sec_desc_res; - void *sec_desc_msg; - const char *sec_desc_attrs[] = {"nTSecurityDescriptor",NULL}; - fstring sid_str; - SEC_DESC *my_sd; - - SAM_ASSERT(sam_method && access_token && sid && sd); - - ads_status = sam_ads_get_tree_sec_desc(privates, ADS_ROOT_TREE, &my_sd); - if (!ADS_ERR_OK(ads_status)) - return ads_ntstatus(ads_status); - - ads_status = sam_ads_access_check(privates, my_sd, access_token, GENERIC_RIGHTS_DOMAIN_READ, NULL); - - if (!ADS_ERR_OK(ads_status)) - return ads_ntstatus(ads_status); - - sidstr = sid_binstring(sid); - if (asprintf(&filter, "(objectSid=%s)", sidstr) == -1) { - SAFE_FREE(sidstr); - return NT_STATUS_NO_MEMORY; - } - - SAFE_FREE(sidstr); - - ads_status = sam_ads_do_search(privates,ads_struct->config.bind_path, - LDAP_SCOPE_SUBTREE, filter, sec_desc_attrs, - &sec_desc_res); - SAFE_FREE(filter); - - if (!ADS_ERR_OK(ads_status)) { - return ads_ntstatus(ads_status); - } - - if (!(mem_ctx = talloc_init("sec_desc parse in sam_ads"))) { - DEBUG(1, ("talloc_init() failed for sec_desc parse context in sam_ads")); - ads_msgfree(ads_struct, sec_desc_res); - return NT_STATUS_NO_MEMORY; - } - - if (ads_count_replies(ads_struct, sec_desc_res) != 1) { - DEBUG(1,("sam_ads_get_sec_desc: duplicate or 0 results for sid %s\n", - sid_to_string(sid_str, sid))); - talloc_destroy(mem_ctx); - ads_msgfree(ads_struct, sec_desc_res); - return NT_STATUS_UNSUCCESSFUL; - } - - if (!(sec_desc_msg = ads_first_entry(ads_struct, sec_desc_res))) { - talloc_destroy(mem_ctx); - ads_msgfree(ads_struct, sec_desc_res); - return NT_STATUS_INVALID_PARAMETER; - } - - if (!ads_pull_sd(ads_struct, mem_ctx, sec_desc_msg, sec_desc_attrs[0], sd)) { - ads_status = ADS_ERROR_NT(NT_STATUS_INVALID_PARAMETER); - talloc_destroy(mem_ctx); - ads_msgfree(ads_struct, sec_desc_res); - return ads_ntstatus(ads_status); - } - - /* now, were we allowed to see the SD we just got? */ - - ads_msgfree(ads_struct, sec_desc_res); - talloc_destroy(mem_ctx); - return ads_ntstatus(ads_status); -} - -static NTSTATUS sam_ads_set_sec_desc(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, - const DOM_SID *sid, const SEC_DESC *sd) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - DEBUG(0,("sam_ads: %s was called!\n",FUNCTION_MACRO)); - SAM_ASSERT(sam_method); - return ads_ntstatus(ads_status); -} - - -static NTSTATUS sam_ads_lookup_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, - TALLOC_CTX *mem_ctx, const DOM_SID *sid, char **name, - enum SID_NAME_USE *type) -{ - ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL); - SAM_ADS_PRIVATES *privates = (struct sam_ads_privates *)sam_method->private_data; - ADS_STRUCT *ads_struct = privates->ads_struct; - SEC_DESC *my_sd; - - SAM_ASSERT(sam_method && access_token && mem_ctx && sid && name && type); - - ads_status = sam_ads_get_tree_sec_desc(privates, ADS_ROOT_TREE, &my_sd); - if (!ADS_ERR_OK(ads_status)) - return ads_ntstatus(ads_status); - - ads_status = sam_ads_access_check(privates, my_sd, access_token, GENERIC_RIGHTS_DOMAIN_READ, NULL); - if (!ADS_ERR_OK(ads_status)) - return ads_ntstatus(ads_status); - - return ads_sid_to_name(ads_struct, mem_ctx, sid, name, type); -} - -static NTSTATUS sam_ads_lookup_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, - const char *name, DOM_SID *sid, enum SID_NAME_USE *type) -{ - ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL); - SAM_ADS_PRIVATES *privates = (struct sam_ads_privates *)sam_method->private_data; - ADS_STRUCT *ads_struct = privates->ads_struct; - SEC_DESC *my_sd; - - SAM_ASSERT(sam_method && access_token && name && sid && type); - - ads_status = sam_ads_get_tree_sec_desc(privates, ADS_ROOT_TREE, &my_sd); - if (!ADS_ERR_OK(ads_status)) - return ads_ntstatus(ads_status); - - ads_status = sam_ads_access_check(privates, my_sd, access_token, GENERIC_RIGHTS_DOMAIN_READ, NULL); - if (!ADS_ERR_OK(ads_status)) - return ads_ntstatus(ads_status); - - return ads_name_to_sid(ads_struct, name, sid, type); -} - - -/* Domain API */ - -static NTSTATUS sam_ads_update_domain(const SAM_METHODS *sam_method, const SAM_DOMAIN_HANDLE *domain) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - DEBUG(0,("sam_ads: %s was called!\n",FUNCTION_MACRO)); - SAM_ASSERT(sam_method); - return ads_ntstatus(ads_status); -} - -static NTSTATUS sam_ads_get_domain_handle(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, - const uint32 access_desired, SAM_DOMAIN_HANDLE **domain) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - SAM_ADS_PRIVATES *privates = (struct sam_ads_privates *)sam_method->private_data; - TALLOC_CTX *mem_ctx = privates->mem_ctx; /*Fix me is this right??? */ - SAM_DOMAIN_HANDLE *dom_handle = NULL; - SEC_DESC *sd; - uint32 acc_granted; - uint32 tmp_value; - - DEBUG(5,("sam_ads_get_domain_handle: %d\n",__LINE__)); - - SAM_ASSERT(sam_method && access_token && domain); - - (*domain) = NULL; - - if ((dom_handle = talloc(mem_ctx, sizeof(SAM_DOMAIN_HANDLE))) == NULL) { - DEBUG(0,("failed to talloc dom_handle\n")); - ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); - return ads_ntstatus(ads_status); - } - - ZERO_STRUCTP(dom_handle); - - dom_handle->mem_ctx = mem_ctx; /*Fix me is this right??? */ - dom_handle->free_fn = NULL; - dom_handle->current_sam_methods = sam_method; - - /* check if access can be granted as requested */ - - ads_status = sam_ads_get_tree_sec_desc(privates, ADS_ROOT_TREE, &sd); - if (!ADS_ERR_OK(ads_status)) - return ads_ntstatus(ads_status); - - ads_status = sam_ads_access_check(privates, sd, access_token, access_desired, &acc_granted); - if (!ADS_ERR_OK(ads_status)) - return ads_ntstatus(ads_status); - - dom_handle->access_granted = acc_granted; - - /* fill all the values of dom_handle */ - sid_copy(&dom_handle->private.sid, &sam_method->domain_sid); - dom_handle->private.name = smb_xstrdup(sam_method->domain_name); - dom_handle->private.servername = "WHOKNOWS"; /* what is the servername */ - - /*Fix me: sam_ads_account_policy_get() return ADS_STATUS! */ - ads_status = sam_ads_account_policy_get(privates, AP_MAX_PASSWORD_AGE, &tmp_value); - if (!ADS_ERR_OK(ads_status)) { - DEBUG(4,("sam_ads_account_policy_get failed for max password age. Useing default\n")); - tmp_value = MAX_PASSWORD_AGE; - } - unix_to_nt_time_abs(&dom_handle->private.max_passwordage,tmp_value); - - ads_status = sam_ads_account_policy_get(privates, AP_MIN_PASSWORD_AGE, &tmp_value); - if (!ADS_ERR_OK(ads_status)) { - DEBUG(4,("sam_ads_account_policy_get failed for min password age. Useing default\n")); - tmp_value = 0; - } - unix_to_nt_time_abs(&dom_handle->private.min_passwordage, tmp_value); - - ads_status = sam_ads_account_policy_get(privates, AP_LOCK_ACCOUNT_DURATION, &tmp_value); - if (!ADS_ERR_OK(ads_status)) { - DEBUG(4,("sam_ads_account_policy_get failed for lockout duration. Useing default\n")); - tmp_value = 0; - } - unix_to_nt_time_abs(&dom_handle->private.lockout_duration, tmp_value); - - ads_status = sam_ads_account_policy_get(privates, AP_RESET_COUNT_TIME, &tmp_value); - if (!ADS_ERR_OK(ads_status)) { - DEBUG(4,("sam_ads_account_policy_get failed for time till locout count is reset. Useing default\n")); - tmp_value = 0; - } - unix_to_nt_time_abs(&dom_handle->private.reset_count, tmp_value); - - ads_status = sam_ads_account_policy_get(privates, AP_MIN_PASSWORD_LEN, &tmp_value); - if (!ADS_ERR_OK(ads_status)) { - DEBUG(4,("sam_ads_account_policy_get failed for min password length. Useing default\n")); - tmp_value = 0; - } - dom_handle->private.min_passwordlength = (uint16)tmp_value; - - ads_status = sam_ads_account_policy_get(privates, AP_PASSWORD_HISTORY, &tmp_value); - if (!ADS_ERR_OK(ads_status)) { - DEBUG(4,("sam_ads_account_policy_get failed password history. Useing default\n")); - tmp_value = 0; - } - dom_handle->private.password_history = (uint16)tmp_value; - - ads_status = sam_ads_account_policy_get(privates, AP_BAD_ATTEMPT_LOCKOUT, &tmp_value); - if (!ADS_ERR_OK(ads_status)) { - DEBUG(4,("sam_ads_account_policy_get failed for bad attempts till lockout. Useing default\n")); - tmp_value = 0; - } - dom_handle->private.lockout_count = (uint16)tmp_value; - - ads_status = sam_ads_account_policy_get(privates, AP_TIME_TO_LOGOUT, &tmp_value); - if (!ADS_ERR_OK(ads_status)) { - DEBUG(4,("sam_ads_account_policy_get failed for force logout. Useing default\n")); - tmp_value = -1; - } - - ads_status = sam_ads_account_policy_get(privates, AP_USER_MUST_LOGON_TO_CHG_PASS, &tmp_value); - if (!ADS_ERR_OK(ads_status)) { - DEBUG(4,("sam_ads_account_policy_get failed for user must login to change password. Useing default\n")); - tmp_value = 0; - } - - /* should the real values of num_accounts, num_groups and num_aliases be retreved? - * I think it is to expensive to bother - */ - dom_handle->private.num_accounts = 3; - dom_handle->private.num_groups = 4; - dom_handle->private.num_aliases = 5; - - *domain = dom_handle; - - ads_status = ADS_ERROR_NT(NT_STATUS_OK); - return ads_ntstatus(ads_status); -} - -/* Account API */ -static NTSTATUS sam_ads_create_account(const SAM_METHODS *sam_method, - const NT_USER_TOKEN *access_token, uint32 access_desired, - const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - SAM_ADS_PRIVATES *privates = (struct sam_ads_privates *)sam_method->private_data; - SEC_DESC *sd = NULL; - uint32 acc_granted; - - SAM_ASSERT(sam_method && privates && access_token && account_name && account); - - ads_status = sam_ads_get_tree_sec_desc(privates, ADS_SUBTREE_USERS, &sd); - if (!ADS_ERR_OK(ads_status)) - return ads_ntstatus(ads_status); - - ads_status = sam_ads_access_check(privates, sd, access_token, access_desired, &acc_granted); - if (!ADS_ERR_OK(ads_status)) - return ads_ntstatus(ads_status); - - ads_status = ADS_ERROR_NT(sam_init_account(account)); - if (!ADS_ERR_OK(ads_status)) - return ads_ntstatus(ads_status); - - (*account)->access_granted = acc_granted; - - return ads_ntstatus(ads_status); -} - -static NTSTATUS sam_ads_add_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) -{ - ADS_STATUS ads_status = ADS_ERROR(LDAP_NO_MEMORY); - SAM_ADS_PRIVATES *privates = (struct sam_ads_privates *)sam_method->private_data; - ADS_STRUCT *ads_struct = privates->ads_struct; - TALLOC_CTX *mem_ctx = privates->mem_ctx; - ADS_MODLIST mods; - uint16 acct_ctrl; - char *new_dn; - SEC_DESC *sd; - uint32 acc_granted; - - SAM_ASSERT(sam_method && account); - - ads_status = ADS_ERROR_NT(sam_get_account_acct_ctrl(account,&acct_ctrl)); - if (!ADS_ERR_OK(ads_status)) - goto done; - - if ((acct_ctrl & ACB_WSTRUST)||(acct_ctrl & ACB_SVRTRUST)) { - /* Computer account */ - char *name,*controlstr; - char *hostname,*host_upn,*host_spn; - const char *objectClass[] = {"top", "person", "organizationalPerson", - "user", "computer", NULL}; - - ads_status = ADS_ERROR_NT(sam_get_account_name(account,&name)); - if (!ADS_ERR_OK(ads_status)) - goto done; - - if (!(host_upn = talloc_asprintf(mem_ctx, "%s@%s", name, ads_struct->config.realm))) { - ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); - goto done; - } - - if (!(new_dn = talloc_asprintf(mem_ctx, "CN=%s,CN=Computers,%s", hostname, - ads_struct->config.bind_path))) { - ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); - goto done; - } - - if (!(controlstr = talloc_asprintf(mem_ctx, "%u", ads_acb2uf(acct_ctrl)))) { - ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); - goto done; - } - - if (!(mods = ads_init_mods(mem_ctx))) { - ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); - goto done; - } - - ads_status = ads_mod_str(mem_ctx, &mods, "cn", hostname); - if (!ADS_ERR_OK(ads_status)) - goto done; - ads_status = ads_mod_strlist(mem_ctx, &mods, "objectClass", objectClass); - if (!ADS_ERR_OK(ads_status)) - goto done; - ads_status = ads_mod_str(mem_ctx, &mods, "userPrincipalName", host_upn); - if (!ADS_ERR_OK(ads_status)) - goto done; - ads_status = ads_mod_str(mem_ctx, &mods, "displayName", hostname); - if (!ADS_ERR_OK(ads_status)) - goto done; - ads_status = ads_mod_str(mem_ctx, &mods, "sAMAccountName", name); - if (!ADS_ERR_OK(ads_status)) - goto done; - ads_status = ads_mod_str(mem_ctx, &mods, "userAccountControl", controlstr); - if (!ADS_ERR_OK(ads_status)) - goto done; - - ads_status = ads_mod_str(mem_ctx, &mods, "servicePrincipalName", host_spn); - if (!ADS_ERR_OK(ads_status)) - goto done; - ads_status = ads_mod_str(mem_ctx, &mods, "dNSHostName", hostname); - if (!ADS_ERR_OK(ads_status)) - goto done; - ads_status = ads_mod_str(mem_ctx, &mods, "userAccountControl", controlstr); - if (!ADS_ERR_OK(ads_status)) - goto done; - /* ads_status = ads_mod_str(mem_ctx, &mods, "operatingSystem", "Samba"); - if (!ADS_ERR_OK(ads_status)) - goto done; - *//* ads_status = ads_mod_str(mem_ctx, &mods, "operatingSystemVersion", VERSION); - if (!ADS_ERR_OK(ads_status)) - goto done; - */ - /* End Computer account */ - } else { - /* User account*/ - char *upn, *controlstr; - char *name, *fullname; - const char *objectClass[] = {"top", "person", "organizationalPerson", - "user", NULL}; - - ads_status = ADS_ERROR_NT(sam_get_account_name(account,&name)); - if (!ADS_ERR_OK(ads_status)) - goto done; - - ads_status = ADS_ERROR_NT(sam_get_account_fullname(account,&fullname)); - if (!ADS_ERR_OK(ads_status)) - goto done; - - if (!(upn = talloc_asprintf(mem_ctx, "%s@%s", name, ads_struct->config.realm))) { - ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); - goto done; - } - - if (!(new_dn = talloc_asprintf(mem_ctx, "CN=%s,CN=Users,%s", fullname, - ads_struct->config.bind_path))) { - ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); - goto done; - } - - if (!(controlstr = talloc_asprintf(mem_ctx, "%u", ads_acb2uf(acct_ctrl)))) { - ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); - goto done; - } - - if (!(mods = ads_init_mods(mem_ctx))) { - ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); - goto done; - } - - ads_status = ads_mod_str(mem_ctx, &mods, "cn", fullname); - if (!ADS_ERR_OK(ads_status)) - goto done; - ads_status = ads_mod_strlist(mem_ctx, &mods, "objectClass", objectClass); - if (!ADS_ERR_OK(ads_status)) - goto done; - ads_status = ads_mod_str(mem_ctx, &mods, "userPrincipalName", upn); - if (!ADS_ERR_OK(ads_status)) - goto done; - ads_status = ads_mod_str(mem_ctx, &mods, "displayName", fullname); - if (!ADS_ERR_OK(ads_status)) - goto done; - ads_status = ads_mod_str(mem_ctx, &mods, "sAMAccountName", name); - if (!ADS_ERR_OK(ads_status)) - goto done; - ads_status = ads_mod_str(mem_ctx, &mods, "userAccountControl", controlstr); - if (!ADS_ERR_OK(ads_status)) - goto done; - }/* End User account */ - - /* Finally at the account */ - ads_status = ads_gen_add(ads_struct, new_dn, mods); - -done: - return ads_ntstatus(ads_status); -} - -static NTSTATUS sam_ads_update_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - DEBUG(0,("sam_ads: %s was called!\n",FUNCTION_MACRO)); - SAM_ASSERT(sam_method); - return ads_ntstatus(ads_status); -} - -static NTSTATUS sam_ads_delete_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - DEBUG(0,("sam_ads: %s was called!\n",FUNCTION_MACRO)); - SAM_ASSERT(sam_method); - - - - return ads_ntstatus(ads_status); -} - -static NTSTATUS sam_ads_enum_accounts(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - DEBUG(0,("sam_ads: %s was called!\n",FUNCTION_MACRO)); - SAM_ASSERT(sam_method); - return ads_ntstatus(ads_status); -} - -#if 0 -static NTSTATUS sam_ads_get_account_by_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *account_sid, SAM_ACCOUNT_HANDLE **account) -{ - ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL); - SAM_ADS_PRIVATES *privates = (struct sam_ads_privates *)sam_method->private_data; - ADS_STRUCT *ads_struct = privates->ads_struct; - TALLOC_CTX *mem_ctx = privates->mem_ctx; - SEC_DESC *sd = NULL; - uint32 acc_granted; - - SAM_ASSERT(sam_method && privates && ads_struct && access_token && account_sid && account); - - ads_status = ADS_ERROR_NT(sam_ads_get_sec_desc(sam_method, access_token, account_sid, &my_sd)); - if (!ADS_ERR_OK(ads_status)) - return ads_ntstatus(ads_status); - - ads_status = sam_ads_access_check(privates, sd, access_token, access_desired, &acc_granted); - if (!ADS_ERR_OK(ads_status)) - return ads_ntstatus(ads_status); - - ads_status = ADS_ERROR_NT(sam_init_account(account)); - if (!ADS_ERR_OK(ads_status)) - return ads_ntstatus(ads_status); - - (*account)->access_granted = acc_granted; - - return ads_ntstatus(ads_status); -} -#else -static NTSTATUS sam_ads_get_account_by_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *account_sid, SAM_ACCOUNT_HANDLE **account) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - DEBUG(0,("sam_ads: %s was called!\n",FUNCTION_MACRO)); - SAM_ASSERT(sam_method); - return ads_ntstatus(ads_status); -} -#endif - -#if 0 -static NTSTATUS sam_ads_get_account_by_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *account_name, SAM_ACCOUNT_HANDLE **account) -{ - ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL); - SAM_ADS_PRIVATES *privates = (struct sam_ads_privates *)sam_method->private_data; - ADS_STRUCT *ads_struct = privates->ads_struct; - TALLOC_CTX *mem_ctx = privates->mem_ctx; - SEC_DESC *sd = NULL; - uint32 acc_granted; - - SAM_ASSERT(sam_method && privates && ads_struct && access_token && account_name && account); - - ads_status = sam_ads_get_tree_sec_desc(privates, ADS_ROOT_TREE, &sd); - if (!ADS_ERR_OK(ads_status)) - return ads_ntstatus(ads_status); - - ads_status = sam_ads_access_check(privates, sd, access_token, access_desired, &acc_granted); - if (!ADS_ERR_OK(ads_status)) - return ads_ntstatus(ads_status); - - ads_status = ADS_ERROR_NT(sam_init_account(account)); - if (!ADS_ERR_OK(ads_status)) - return ads_ntstatus(ads_status); - - (*account)->access_granted = acc_granted; - - return ads_ntstatus(ads_status); -} -#else -static NTSTATUS sam_ads_get_account_by_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *account_name, SAM_ACCOUNT_HANDLE **account) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - DEBUG(0,("sam_ads: %s was called!\n",FUNCTION_MACRO)); - SAM_ASSERT(sam_method); - return ads_ntstatus(ads_status); -} -#endif - -/* Group API */ -static NTSTATUS sam_ads_create_group(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - DEBUG(0,("sam_ads: %s was called!\n",FUNCTION_MACRO)); - SAM_ASSERT(sam_method); - return ads_ntstatus(ads_status); -} - -static NTSTATUS sam_ads_add_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - DEBUG(0,("sam_ads: %s was called!\n",FUNCTION_MACRO)); - SAM_ASSERT(sam_method); - return ads_ntstatus(ads_status); -} - -static NTSTATUS sam_ads_update_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - DEBUG(0,("sam_ads: %s was called!\n",FUNCTION_MACRO)); - SAM_ASSERT(sam_method); - return ads_ntstatus(ads_status); -} - -static NTSTATUS sam_ads_delete_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - DEBUG(0,("sam_ads: %s was called!\n",FUNCTION_MACRO)); - SAM_ASSERT(sam_method); - return ads_ntstatus(ads_status); -} - -static NTSTATUS sam_ads_enum_groups(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - SAM_ADS_PRIVATES *privates = (struct sam_ads_privates *)sam_method->private_data; - ADS_STRUCT *ads_struct = privates->ads_struct; - TALLOC_CTX *mem_ctx = privates->mem_ctx; - void *res = NULL; - void *msg = NULL; - char *filter = NULL; - int i = 0; - - /* get only these LDAP attributes, witch we really need for a group */ - const char *group_enum_attrs[] = {"objectSid", - "description", - "sAMAcountName", - NULL}; - - SAM_ASSERT(sam_method && access_token && groups_count && groups); - - *groups_count = 0; - - DEBUG(3,("ads: enum_dom_groups\n")); - - FIXME("get only group from the wanted Type!\n"); - asprintf(&filter, "(&(objectClass=group)(groupType=%s))", "*"); - ads_status = sam_ads_do_search(privates, ads_struct->config.bind_path, LDAP_SCOPE_SUBTREE, filter, group_enum_attrs, &res); - if (!ADS_ERR_OK(ads_status)) { - DEBUG(1,("enum_groups ads_search: %s\n", ads_errstr(ads_status))); - } - - *groups_count = ads_count_replies(ads_struct, res); - if (*groups_count == 0) { - DEBUG(1,("enum_groups: No groups found\n")); - } - - (*groups) = talloc_zero(mem_ctx, (*groups_count) * sizeof(**groups)); - if (!*groups) { - ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); - } - - for (msg = ads_first_entry(ads_struct, res); msg; msg = ads_next_entry(ads_struct, msg)) { - uint32 grouptype; - - if (!ads_pull_uint32(ads_struct, msg, "groupType", &grouptype)) { - ; - } else { - (*groups)->group_ctrl = ads_gtype2gcb(grouptype); - } - - if (!((*groups)->group_name = ads_pull_string(ads_struct, mem_ctx, msg, "sAMAccountName"))) { - ; - } - - if (!((*groups)->group_desc = ads_pull_string(ads_struct, mem_ctx, msg, "description"))) { - ; - } - - if (!ads_pull_sid(ads_struct, msg, "objectSid", &((*groups)->sid))) { - DEBUG(1,("No sid for group %s !?\n", (*groups)->group_name)); - continue; - } - - i++; - } - - (*groups_count) = i; - - ads_status = ADS_ERROR_NT(NT_STATUS_OK); - - DEBUG(3,("ads enum_dom_groups gave %d entries\n", (*groups_count))); - - if (res) ads_msgfree(ads_struct, res); - - return ads_ntstatus(ads_status); -} - -static NTSTATUS sam_ads_get_group_by_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - DEBUG(0,("sam_ads: %s was called!\n",FUNCTION_MACRO)); - SAM_ASSERT(sam_method); - return ads_ntstatus(ads_status); -} - -static NTSTATUS sam_ads_get_group_by_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - DEBUG(0,("sam_ads: %s was called!\n",FUNCTION_MACRO)); - SAM_ASSERT(sam_method); - return ads_ntstatus(ads_status); -} - -static NTSTATUS sam_ads_add_member_to_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - DEBUG(0,("sam_ads: %s was called!\n",FUNCTION_MACRO)); - SAM_ASSERT(sam_method); - return ads_ntstatus(ads_status); -} - -static NTSTATUS sam_ads_delete_member_from_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - DEBUG(0,("sam_ads: %s was called!\n",FUNCTION_MACRO)); - SAM_ASSERT(sam_method); - return ads_ntstatus(ads_status); -} - -static NTSTATUS sam_ads_enum_groupmembers(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - DEBUG(0,("sam_ads: %s was called!\n",FUNCTION_MACRO)); - SAM_ASSERT(sam_method); - return ads_ntstatus(ads_status); -} - -static NTSTATUS sam_ads_get_groups_of_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID **sids, const uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) -{ - ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - DEBUG(0,("sam_ads: %s was called!\n",FUNCTION_MACRO)); - SAM_ASSERT(sam_method); - return ads_ntstatus(ads_status); -} - -/********************************** -Free our private data -***********************************/ -static void sam_ads_free_private_data(void **vp) -{ - SAM_ADS_PRIVATES **sam_ads_state = (SAM_ADS_PRIVATES **)vp; - - if ((*sam_ads_state)->ads_struct->ld) { - ldap_unbind((*sam_ads_state)->ads_struct->ld); - } - - ads_destroy(&((*sam_ads_state)->ads_struct)); - - talloc_destroy((*sam_ads_state)->mem_ctx); - FIXME("maybe we must free some other stuff here\n"); - - *sam_ads_state = NULL; -} - - - -/***************************************************** -Init the ADS SAM backend -******************************************************/ -NTSTATUS sam_init_ads(SAM_METHODS *sam_method, const char *module_params) -{ - ADS_STATUS ads_status; - SAM_ADS_PRIVATES *sam_ads_state; - TALLOC_CTX *mem_ctx; - - SAM_ASSERT(sam_method && sam_method->parent); - - mem_ctx = sam_method->parent->mem_ctx; - - /* Here the SAM API functions of the sam_ads module */ - - /* General API */ - - sam_method->sam_get_sec_desc = sam_ads_get_sec_desc; - sam_method->sam_set_sec_desc = sam_ads_set_sec_desc; - - sam_method->sam_lookup_sid = sam_ads_lookup_sid; - sam_method->sam_lookup_name = sam_ads_lookup_name; - - /* Domain API */ - - sam_method->sam_update_domain = sam_ads_update_domain; - sam_method->sam_get_domain_handle = sam_ads_get_domain_handle; - - /* Account API */ - - sam_method->sam_create_account = sam_ads_create_account; - sam_method->sam_add_account = sam_ads_add_account; - sam_method->sam_update_account = sam_ads_update_account; - sam_method->sam_delete_account = sam_ads_delete_account; - sam_method->sam_enum_accounts = sam_ads_enum_accounts; - - sam_method->sam_get_account_by_sid = sam_ads_get_account_by_sid; - sam_method->sam_get_account_by_name = sam_ads_get_account_by_name; - - /* Group API */ - - sam_method->sam_create_group = sam_ads_create_group; - sam_method->sam_add_group = sam_ads_add_group; - sam_method->sam_update_group = sam_ads_update_group; - sam_method->sam_delete_group = sam_ads_delete_group; - sam_method->sam_enum_groups = sam_ads_enum_groups; - sam_method->sam_get_group_by_sid = sam_ads_get_group_by_sid; - sam_method->sam_get_group_by_name = sam_ads_get_group_by_name; - - sam_method->sam_add_member_to_group = sam_ads_add_member_to_group; - sam_method->sam_delete_member_from_group = sam_ads_delete_member_from_group; - sam_method->sam_enum_groupmembers = sam_ads_enum_groupmembers; - - sam_method->sam_get_groups_of_sid = sam_ads_get_groups_of_sid; - - sam_ads_state = talloc_zero(mem_ctx, sizeof(SAM_ADS_PRIVATES)); - if (!sam_ads_state) { - DEBUG(0, ("talloc() failed for sam_ads private_data!\n")); - return NT_STATUS_NO_MEMORY; - } - - if (!(sam_ads_state->mem_ctx = talloc_init("sam_ads_method"))) { - DEBUG(0, ("talloc_init() failed for sam_ads_state->mem_ctx\n")); - return NT_STATUS_NO_MEMORY; - } - - sam_ads_state->ads_bind_dn = talloc_strdup(sam_ads_state->mem_ctx, lp_parm_string(NULL,"sam_ads","bind as")); - sam_ads_state->ads_bind_pw = talloc_strdup(sam_ads_state->mem_ctx, lp_parm_string(NULL,"sam_ads","bind pw")); - - sam_ads_state->bind_plaintext = strequal(lp_parm_string(NULL, "sam_ads", "plaintext bind"), "yes"); - - if (!sam_ads_state->ads_bind_dn || !sam_ads_state->ads_bind_pw) { - DEBUG(0, ("talloc_strdup() failed for bind dn or password\n")); - return NT_STATUS_NO_MEMORY; - } - - /* Maybe we should not check the result here? Server down on startup? */ - - if (module_params && *module_params) { - sam_ads_state->ldap_uri = talloc_strdup(sam_ads_state->mem_ctx, module_params); - if (!sam_ads_state->ldap_uri) { - DEBUG(0, ("talloc_strdup() failed for bind dn or password\n")); - return NT_STATUS_NO_MEMORY; - } - } else { - sam_ads_state->ldap_uri = "ldapi://"; - } - - ads_status = sam_ads_cached_connection(sam_ads_state); - if (!ADS_ERR_OK(ads_status)) { - return ads_ntstatus(ads_status); - } - - sam_method->private_data = sam_ads_state; - sam_method->free_private_data = sam_ads_free_private_data; - - sam_ads_debug_level = debug_add_class("sam_ads"); - if (sam_ads_debug_level == -1) { - sam_ads_debug_level = DBGC_ALL; - DEBUG(0, ("sam_ads: Couldn't register custom debugging class!\n")); - } else DEBUG(2, ("sam_ads: Debug class number of 'sam_ads': %d\n", sam_ads_debug_level)); - - DEBUG(5, ("Initializing sam_ads\n")); - if (module_params) - DEBUG(10, ("Module Parameters for Domain %s[%s]: %s\n", sam_method->domain_name, sam_method->domain_name, module_params)); - return NT_STATUS_OK; -} - -#else /* HAVE_LDAP */ -void sam_ads_dummy(void) -{ - DEBUG(0,("sam_ads: not supported!\n")); -} -#endif /* HAVE_LDAP */ diff --git a/source/sam/sam_skel.c b/source/sam/sam_skel.c deleted file mode 100644 index b4d64bb6da7..00000000000 --- a/source/sam/sam_skel.c +++ /dev/null @@ -1,251 +0,0 @@ -/* - Unix SMB/CIFS implementation. - this is a skeleton for SAM backend modules. - - Copyright (C) Stefan (metze) Metzmacher 2002 - Copyright (C) Jelmer Vernooij 2002 - Copyright (C) Andrew Bartlett 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -static int sam_skel_debug_level = DBGC_SAM; - -#undef DBGC_CLASS -#define DBGC_CLASS sam_skel_debug_level - -/* define the version of the SAM interface */ -SAM_MODULE_VERSIONING_MAGIC - -/* General API */ - -static NTSTATUS sam_skel_get_sec_desc(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS sam_skel_set_sec_desc(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - - -static NTSTATUS sam_skel_lookup_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, TALLOC_CTX *mem_ctx, const DOM_SID *sid, char **name, uint32 *type) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS sam_skel_lookup_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const char *name, DOM_SID *sid, uint32 *type) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - - -/* Domain API */ - -static NTSTATUS sam_skel_update_domain(const SAM_METHODS *sam_methods, const SAM_DOMAIN_HANDLE *domain) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS sam_skel_get_domain_handle(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, SAM_DOMAIN_HANDLE **domain) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - - -/* Account API */ - -static NTSTATUS sam_skel_create_account(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS sam_skel_add_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS sam_skel_update_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS sam_skel_delete_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS sam_skel_enum_accounts(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - - -static NTSTATUS sam_skel_get_account_by_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS sam_skel_get_account_by_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - - -/* Group API */ - -static NTSTATUS sam_skel_create_group(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS sam_skel_add_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS sam_skel_update_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS sam_skel_delete_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS sam_skel_enum_groups(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS sam_skel_get_group_by_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS sam_skel_get_group_by_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - - -static NTSTATUS sam_skel_add_member_to_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS sam_skel_delete_member_from_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS sam_skel_enum_groupmembers(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - - -static NTSTATUS sam_skel_get_groups_of_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) -{ - DEBUG(0,("sam_skel: %s was called!\n",FUNCTION_MACRO)); - return NT_STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS sam_init_skel(SAM_METHODS *sam_methods, const char *module_params) -{ - /* Functions your SAM module doesn't provide should be set - * to NULL */ - - sam_methods->sam_get_sec_desc = sam_skel_get_sec_desc; - sam_methods->sam_set_sec_desc = sam_skel_set_sec_desc; - - sam_methods->sam_lookup_sid = sam_skel_lookup_sid; - sam_methods->sam_lookup_name = sam_skel_lookup_name; - - /* Domain API */ - - sam_methods->sam_update_domain = sam_skel_update_domain; - sam_methods->sam_get_domain_handle = sam_skel_get_domain_handle; - - /* Account API */ - - sam_methods->sam_create_account = sam_skel_create_account; - sam_methods->sam_add_account = sam_skel_add_account; - sam_methods->sam_update_account = sam_skel_update_account; - sam_methods->sam_delete_account = sam_skel_delete_account; - sam_methods->sam_enum_accounts = sam_skel_enum_accounts; - - sam_methods->sam_get_account_by_sid = sam_skel_get_account_by_sid; - sam_methods->sam_get_account_by_name = sam_skel_get_account_by_name; - - /* Group API */ - - sam_methods->sam_create_group = sam_skel_create_group; - sam_methods->sam_add_group = sam_skel_add_group; - sam_methods->sam_update_group = sam_skel_update_group; - sam_methods->sam_delete_group = sam_skel_delete_group; - sam_methods->sam_enum_groups = sam_skel_enum_groups; - sam_methods->sam_get_group_by_sid = sam_skel_get_group_by_sid; - sam_methods->sam_get_group_by_name = sam_skel_get_group_by_name; - - sam_methods->sam_add_member_to_group = sam_skel_add_member_to_group; - sam_methods->sam_delete_member_from_group = sam_skel_delete_member_from_group; - sam_methods->sam_enum_groupmembers = sam_skel_enum_groupmembers; - - sam_methods->sam_get_groups_of_sid = sam_skel_get_groups_of_sid; - - sam_methods->free_private_data = NULL; - - - sam_skel_debug_level = debug_add_class("sam_skel"); - if (sam_skel_debug_level == -1) { - sam_skel_debug_level = DBGC_SAM; - DEBUG(0, ("sam_skel: Couldn't register custom debugging class!\n")); - } else DEBUG(2, ("sam_skel: Debug class number of 'sam_skel': %d\n", sam_skel_debug_level)); - - if(module_params) - DEBUG(0, ("Starting 'sam_skel' with parameters '%s' for domain %s\n", module_params, sam_methods->domain_name)); - else - DEBUG(0, ("Starting 'sam_skel' for domain %s without paramters\n", sam_methods->domain_name)); - - return NT_STATUS_OK; -} diff --git a/source/script/genstruct.pl b/source/script/genstruct.pl deleted file mode 100755 index 081b81f5102..00000000000 --- a/source/script/genstruct.pl +++ /dev/null @@ -1,298 +0,0 @@ -#!/usr/bin/perl -w -# a simple system for generating C parse info -# this can be used to write generic C structer load/save routines -# Copyright 2002 Andrew Tridgell -# released under the GNU General Public License v2 or later - -use strict; - -my(%enum_done) = (); -my(%struct_done) = (); - -################################################### -# general handler -sub handle_general($$$$$$$$) -{ - my($name) = shift; - my($ptr_count) = shift; - my($size) = shift; - my($element) = shift; - my($flags) = shift; - my($dump_fn) = shift; - my($parse_fn) = shift; - my($tflags) = shift; - my($array_len) = 0; - my($dynamic_len) = "NULL"; - - # handle arrays, currently treat multidimensional arrays as 1 dimensional - while ($element =~ /(.*)\[(.*?)\]$/) { - $element = $1; - if ($array_len == 0) { - $array_len = $2; - } else { - $array_len = "$2 * $array_len"; - } - } - - if ($flags =~ /_LEN\((\w*?)\)/) { - $dynamic_len = "\"$1\""; - } - - if ($flags =~ /_NULLTERM/) { - $tflags = "FLAG_NULLTERM"; - } - - print OFILE "{\"$element\", $ptr_count, $size, offsetof(struct $name, $element), $array_len, $dynamic_len, $tflags, $dump_fn, $parse_fn},\n"; -} - - -#################################################### -# parse one element -sub parse_one($$$$) -{ - my($name) = shift; - my($type) = shift; - my($element) = shift; - my($flags) = shift; - my($ptr_count) = 0; - my($size) = "sizeof($type)"; - my($tflags) = "0"; - - # enums get the FLAG_ALWAYS flag - if ($type =~ /^enum /) { - $tflags = "FLAG_ALWAYS"; - } - - - # make the pointer part of the base type - while ($element =~ /^\*(.*)/) { - $ptr_count++; - $element = $1; - } - - # convert spaces to _ - $type =~ s/ /_/g; - - my($dump_fn) = "gen_dump_$type"; - my($parse_fn) = "gen_parse_$type"; - - handle_general($name, $ptr_count, $size, $element, $flags, $dump_fn, $parse_fn, $tflags); -} - -#################################################### -# parse one element -sub parse_element($$$) -{ - my($name) = shift; - my($element) = shift; - my($flags) = shift; - my($type); - my($data); - - # pull the base type - if ($element =~ /^struct (\S*) (.*)/) { - $type = "struct $1"; - $data = $2; - } elsif ($element =~ /^enum (\S*) (.*)/) { - $type = "enum $1"; - $data = $2; - } elsif ($element =~ /^unsigned (\S*) (.*)/) { - $type = "unsigned $1"; - $data = $2; - } elsif ($element =~ /^(\S*) (.*)/) { - $type = $1; - $data = $2; - } else { - die "Can't parse element '$element'"; - } - - # handle comma separated lists - while ($data =~ /(\S*),[\s]?(.*)/) { - parse_one($name, $type, $1, $flags); - $data = $2; - } - parse_one($name, $type, $data, $flags); -} - - -my($first_struct) = 1; - -#################################################### -# parse the elements of one structure -sub parse_elements($$) -{ - my($name) = shift; - my($elements) = shift; - - if ($first_struct) { - $first_struct = 0; - print "Parsing structs: $name"; - } else { - print ", $name"; - } - - print OFILE "int gen_dump_struct_$name(struct parse_string *, const char *, unsigned);\n"; - print OFILE "int gen_parse_struct_$name(char *, const char *);\n"; - - print OFILE "static const struct parse_struct pinfo_" . $name . "[] = {\n"; - - while ($elements =~ /^.*?([a-z].*?);\s*?(\S*?)\s*?\$(.*)/msi) { - my($element) = $1; - my($flags) = $2; - $elements = $3; - parse_element($name, $element, $flags); - } - - print OFILE "{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}};\n"; - - print OFILE " -int gen_dump_struct_$name(struct parse_string *p, const char *ptr, unsigned indent) { - return gen_dump_struct(pinfo_$name, p, ptr, indent); -} -int gen_parse_struct_$name(char *ptr, const char *str) { - return gen_parse_struct(pinfo_$name, ptr, str); -} - -"; -} - -my($first_enum) = 1; - -#################################################### -# parse out the enum declarations -sub parse_enum_elements($$) -{ - my($name) = shift; - my($elements) = shift; - - if ($first_enum) { - $first_enum = 0; - print "Parsing enums: $name"; - } else { - print ", $name"; - } - - print OFILE "static const struct enum_struct einfo_" . $name . "[] = {\n"; - - my(@enums) = split(/,/s, $elements); - for (my($i)=0; $i <= $#{@enums}; $i++) { - my($enum) = $enums[$i]; - if ($enum =~ /\s*(\w*)/) { - my($e) = $1; - print OFILE "{\"$e\", $e},\n"; - } - } - - print OFILE "{NULL, 0}};\n"; - - print OFILE " -int gen_dump_enum_$name(struct parse_string *p, const char *ptr, unsigned indent) { - return gen_dump_enum(einfo_$name, p, ptr, indent); -} - -int gen_parse_enum_$name(char *ptr, const char *str) { - return gen_parse_enum(einfo_$name, ptr, str); -} - -"; -} - -#################################################### -# parse out the enum declarations -sub parse_enums($) -{ - my($data) = shift; - - while ($data =~ /^GENSTRUCT\s+enum\s+(\w*?)\s*{(.*?)}\s*;(.*)/ms) { - my($name) = $1; - my($elements) = $2; - $data = $3; - - if (!defined($enum_done{$name})) { - $enum_done{$name} = 1; - parse_enum_elements($name, $elements); - } - } - - if (! $first_enum) { - print "\n"; - } -} - -#################################################### -# parse all the structures -sub parse_structs($) -{ - my($data) = shift; - - # parse into structures - while ($data =~ /^GENSTRUCT\s+struct\s+(\w+?)\s*{\s*(.*?)\s*}\s*;(.*)/ms) { - my($name) = $1; - my($elements) = $2; - $data = $3; - if (!defined($struct_done{$name})) { - $struct_done{$name} = 1; - parse_elements($name, $elements); - } - } - - if (! $first_struct) { - print "\n"; - } else { - print "No GENSTRUCT structures found?\n"; - } -} - - -#################################################### -# parse a header file, generating a dumper structure -sub parse_data($) -{ - my($data) = shift; - - # collapse spaces - $data =~ s/[\t ]+/ /sg; - $data =~ s/\s*\n\s+/\n/sg; - # strip debug lines - $data =~ s/^\#.*?\n//smg; - - parse_enums($data); - parse_structs($data); -} - - -######################################### -# display help text -sub ShowHelp() -{ - print " -generator for C structure dumpers -Copyright Andrew Tridgell - -Sample usage: - genstruct -o output.h gcc -E -O2 -g test.h - -Options: - --help this help page - -o OUTPUT place output in OUTPUT -"; - exit(0); -} - -######################################## -# main program -if ($ARGV[0] ne "-o" || $#ARGV < 2) { - ShowHelp(); -} - -shift; -my($opt_ofile)=shift; - -print "creating $opt_ofile\n"; - -open(OFILE, ">$opt_ofile") || die "can't open $opt_ofile"; - -print OFILE "/* This is an automatically generated file - DO NOT EDIT! */\n\n"; - -parse_data(`@ARGV -DGENSTRUCT=GENSTRUCT`); -exit(0); diff --git a/source/smbd/server.c b/source/smbd/server.c index 9da431e3138..e3cf9b92fdd 100644 --- a/source/smbd/server.c +++ b/source/smbd/server.c @@ -377,10 +377,6 @@ static BOOL open_sockets_smbd(BOOL is_daemon, BOOL interactive, const char *smb_ return False; } - /* Load DSO's */ - if(lp_modules()) - smb_load_modules(lp_modules()); - return True; } /* The parent doesn't need this socket */ @@ -870,7 +866,6 @@ static BOOL init_structs(void ) smbd_process(); uni_group_cache_shutdown(); - namecache_shutdown(); exit_server("normal exit"); return(0); } diff --git a/source/torture/cmd_sam.c b/source/torture/cmd_sam.c deleted file mode 100644 index 3f7f7dfe27e..00000000000 --- a/source/torture/cmd_sam.c +++ /dev/null @@ -1,514 +0,0 @@ -/* - Unix SMB/CIFS implementation. - SAM module functions - - Copyright (C) Jelmer Vernooij 2002 - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" -#include "samtest.h" - -static void print_account(SAM_ACCOUNT_HANDLE *a) -{ - /* FIXME */ -} - -static NTSTATUS cmd_context(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - NTSTATUS status; - char **plugins; - int i; - - plugins = malloc(argc * sizeof(char *)); - - for(i = 1; i < argc; i++) - plugins[i-1] = argv[i]; - - plugins[argc-1] = NULL; - - if(!NT_STATUS_IS_OK(status = make_sam_context_list(&st->context, plugins))) { - printf("make_sam_context_list failed: %s\n", nt_errstr(status)); - SAFE_FREE(plugins); - return status; - } - - SAFE_FREE(plugins); - - return NT_STATUS_OK; -} - -static NTSTATUS cmd_load_module(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - char *plugin_arg[2]; - NTSTATUS status; - if (argc != 2 && argc != 3) { - printf("Usage: load [domain-name]\n"); - return NT_STATUS_OK; - } - - if (argc == 3) - asprintf(&plugin_arg[0], "plugin:%s|%s", argv[1], argv[2]); - else - asprintf(&plugin_arg[0], "plugin:%s", argv[1]); - - plugin_arg[1] = NULL; - - if(!NT_STATUS_IS_OK(status = make_sam_context_list(&st->context, plugin_arg))) { - free(plugin_arg[0]); - return status; - } - - free(plugin_arg[0]); - - printf("load: ok\n"); - return NT_STATUS_OK; -} - -static NTSTATUS cmd_get_sec_desc(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS cmd_set_sec_desc(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS cmd_lookup_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - char *name; - uint32 type; - NTSTATUS status; - DOM_SID sid; - if (argc != 2) { - printf("Usage: lookup_sid \n"); - return NT_STATUS_INVALID_PARAMETER; - } - - if (!string_to_sid(&sid, argv[1])){ - printf("Unparseable SID specified!\n"); - return NT_STATUS_INVALID_PARAMETER; - } - - if (!NT_STATUS_IS_OK(status = sam_lookup_sid(st->context, st->token, mem_ctx, &sid, &name, &type))) { - printf("sam_lookup_sid failed!\n"); - return status; - } - - printf("Name: %s\n", name); - printf("Type: %d\n", type); /* FIXME: What kind of an integer is type ? */ - - return NT_STATUS_OK; -} - -static NTSTATUS cmd_lookup_name(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - DOM_SID sid; - uint32 type; - NTSTATUS status; - if (argc != 3) { - printf("Usage: lookup_name \n"); - return NT_STATUS_INVALID_PARAMETER; - } - - if (!NT_STATUS_IS_OK(status = sam_lookup_name(st->context, st->token, argv[1], argv[2], &sid, &type))) { - printf("sam_lookup_name failed!\n"); - return status; - } - - printf("SID: %s\n", sid_string_static(&sid)); - printf("Type: %d\n", type); - - return NT_STATUS_OK; -} - -static NTSTATUS cmd_lookup_account(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS cmd_lookup_group(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS cmd_lookup_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - DOM_SID *sid; - NTSTATUS status; - if (argc != 2) { - printf("Usage: lookup_domain \n"); - return NT_STATUS_INVALID_PARAMETER; - } - - if (!NT_STATUS_IS_OK(status = sam_lookup_domain(st->context, st->token, argv[1], &sid))) { - printf("sam_lookup_name failed!\n"); - return status; - } - - printf("SID: %s\n", sid_string_static(sid)); - - return NT_STATUS_OK; -} - -static NTSTATUS cmd_enum_domains(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - int32 domain_count, i; - DOM_SID *domain_sids; - char **domain_names; - NTSTATUS status; - - if (!NT_STATUS_IS_OK(status = sam_enum_domains(st->context, st->token, &domain_count, &domain_sids, &domain_names))) { - printf("sam_enum_domains failed!\n"); - return status; - } - - if (domain_count == 0) { - printf("No domains found!\n"); - return NT_STATUS_OK; - } - - for (i = 0; i < domain_count; i++) { - printf("%s %s\n", domain_names[i], sid_string_static(&domain_sids[i])); - } - - SAFE_FREE(domain_sids); - SAFE_FREE(domain_names); - - return NT_STATUS_OK; -} - -static NTSTATUS cmd_update_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS cmd_show_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - NTSTATUS status; - DOM_SID sid; - SAM_DOMAIN_HANDLE *domain; - uint32 tmp_uint32; - uint16 tmp_uint16; - NTTIME tmp_nttime; - BOOL tmp_bool; - const char *tmp_string; - - if (argc != 2) { - printf("Usage: show_domain \n"); - return status; - } - - if (!string_to_sid(&sid, argv[1])){ - printf("Unparseable SID specified!\n"); - return NT_STATUS_INVALID_PARAMETER; - } - - if (!NT_STATUS_IS_OK(status = sam_get_domain_by_sid(st->context, st->token, GENERIC_RIGHTS_DOMAIN_ALL_ACCESS, &sid, &domain))) { - printf("sam_get_domain_by_sid failed\n"); - return status; - } - - if (!NT_STATUS_IS_OK(status = sam_get_domain_num_accounts(domain, &tmp_uint32))) { - printf("sam_get_domain_num_accounts failed: %s\n", nt_errstr(status)); - } else { - printf("Number of accounts: %d\n", tmp_uint32); - } - - if (!NT_STATUS_IS_OK(status = sam_get_domain_num_groups(domain, &tmp_uint32))) { - printf("sam_get_domain_num_groups failed: %s\n", nt_errstr(status)); - } else { - printf("Number of groups: %u\n", tmp_uint32); - } - - if (!NT_STATUS_IS_OK(status = sam_get_domain_num_aliases(domain, &tmp_uint32))) { - printf("sam_get_domain_num_aliases failed: %s\n", nt_errstr(status)); - } else { - printf("Number of aliases: %u\n", tmp_uint32); - } - - if (!NT_STATUS_IS_OK(status = sam_get_domain_name(domain, &tmp_string))) { - printf("sam_get_domain_name failed: %s\n", nt_errstr(status)); - } else { - printf("Domain Name: %s\n", tmp_string); - } - - if (!NT_STATUS_IS_OK(status = sam_get_domain_lockout_count(domain, &tmp_uint16))) { - printf("sam_get_domain_lockout_count failed: %s\n", nt_errstr(status)); - } else { - printf("Lockout Count: %u\n", tmp_uint16); - } - - if (!NT_STATUS_IS_OK(status = sam_get_domain_force_logoff(domain, &tmp_bool))) { - printf("sam_get_domain_force_logoff failed: %s\n", nt_errstr(status)); - } else { - printf("Force Logoff: %s\n", (tmp_bool?"Yes":"No")); - } - - if (!NT_STATUS_IS_OK(status = sam_get_domain_lockout_duration(domain, &tmp_nttime))) { - printf("sam_get_domain_lockout_duration failed: %s\n", nt_errstr(status)); - } else { - printf("Lockout duration: %u\n", tmp_nttime.low); - } - - if (!NT_STATUS_IS_OK(status = sam_get_domain_login_pwdchange(domain, &tmp_bool))) { - printf("sam_get_domain_login_pwdchange failed: %s\n", nt_errstr(status)); - } else { - printf("Password changing allowed: %s\n", (tmp_bool?"Yes":"No")); - } - - if (!NT_STATUS_IS_OK(status = sam_get_domain_max_pwdage(domain, &tmp_nttime))) { - printf("sam_get_domain_max_pwdage failed: %s\n", nt_errstr(status)); - } else { - printf("Maximum password age: %u\n", tmp_nttime.low); - } - - if (!NT_STATUS_IS_OK(status = sam_get_domain_min_pwdage(domain, &tmp_nttime))) { - printf("sam_get_domain_min_pwdage failed: %s\n", nt_errstr(status)); - } else { - printf("Minimal password age: %u\n", tmp_nttime.low); - } - - if (!NT_STATUS_IS_OK(status = sam_get_domain_min_pwdlength(domain, &tmp_uint16))) { - printf("sam_get_domain_min_pwdlength: %s\n", nt_errstr(status)); - } else { - printf("Minimal Password Length: %u\n", tmp_uint16); - } - - if (!NT_STATUS_IS_OK(status = sam_get_domain_pwd_history(domain, &tmp_uint16))) { - printf("sam_get_domain_pwd_history failed: %s\n", nt_errstr(status)); - } else { - printf("Password history: %u\n", tmp_uint16); - } - - if (!NT_STATUS_IS_OK(status = sam_get_domain_reset_count(domain, &tmp_nttime))) { - printf("sam_get_domain_reset_count failed: %s\n", nt_errstr(status)); - } else { - printf("Reset count: %u\n", tmp_nttime.low); - } - - if (!NT_STATUS_IS_OK(status = sam_get_domain_server(domain, &tmp_string))) { - printf("sam_get_domain_server failed: %s\n", nt_errstr(status)); - } else { - printf("Server: %s\n", tmp_string); - } - - return NT_STATUS_OK; -} - -static NTSTATUS cmd_create_account(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS cmd_update_account(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS cmd_delete_account(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS cmd_enum_accounts(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - NTSTATUS status; - DOM_SID sid; - int32 account_count, i; - SAM_ACCOUNT_ENUM *accounts; - - if (argc != 2) { - printf("Usage: enum_accounts \n"); - return NT_STATUS_INVALID_PARAMETER; - } - - if (!string_to_sid(&sid, argv[1])){ - printf("Unparseable SID specified!\n"); - return NT_STATUS_INVALID_PARAMETER; - } - - if (!NT_STATUS_IS_OK(status = sam_enum_accounts(st->context, st->token, &sid, 0, &account_count, &accounts))) { - printf("sam_enum_accounts failed: %s\n", nt_errstr(status)); - return status; - } - - if (account_count == 0) { - printf("No accounts found!\n"); - return NT_STATUS_OK; - } - - for (i = 0; i < account_count; i++) - printf("SID: %s\nName: %s\nFullname: %s\nDescription: %s\nACB_BITS: %08X\n\n", - sid_string_static(&accounts[i].sid), accounts[i].account_name, - accounts[i].full_name, accounts[i].account_desc, - accounts[i].acct_ctrl); - - SAFE_FREE(accounts); - - return NT_STATUS_OK; -} - -static NTSTATUS cmd_lookup_account_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - NTSTATUS status; - DOM_SID sid; - SAM_ACCOUNT_HANDLE *account; - - if (argc != 2) { - printf("Usage: lookup_account_sid \n"); - return NT_STATUS_INVALID_PARAMETER; - } - - if (!string_to_sid(&sid, argv[1])){ - printf("Unparseable SID specified!\n"); - return NT_STATUS_INVALID_PARAMETER; - } - - if (!NT_STATUS_IS_OK(status = sam_get_account_by_sid(st->context, st->token, GENERIC_RIGHTS_USER_ALL_ACCESS, &sid, &account))) { - printf("context_sam_get_account_by_sid failed: %s\n", nt_errstr(status)); - return status; - } - - print_account(account); - - return NT_STATUS_OK; -} - -static NTSTATUS cmd_lookup_account_name(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - NTSTATUS status; - SAM_ACCOUNT_HANDLE *account; - - if (argc != 3) { - printf("Usage: lookup_account_name \n"); - return NT_STATUS_INVALID_PARAMETER; - } - - - if (!NT_STATUS_IS_OK(status = sam_get_account_by_name(st->context, st->token, GENERIC_RIGHTS_USER_ALL_ACCESS, argv[1], argv[2], &account))) { - printf("context_sam_get_account_by_sid failed: %s\n", nt_errstr(status)); - return status; - } - - print_account(account); - - return NT_STATUS_OK; -} - -static NTSTATUS cmd_create_group(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS cmd_update_group(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS cmd_delete_group(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS cmd_enum_groups(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS cmd_lookup_group_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS cmd_lookup_group_name(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS cmd_group_add_member(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - -static NTSTATUS cmd_group_del_member(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - - -static NTSTATUS cmd_group_enum(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - - -static NTSTATUS cmd_get_sid_groups(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - return NT_STATUS_NOT_IMPLEMENTED; -} - -struct cmd_set sam_general_commands[] = { - - { "General SAM Commands" }, - - { "load", cmd_load_module, "Load a module", "load [domain-sid]" }, - { "context", cmd_context, "Load specified context", "context [DOMAIN|]backend1[:options] [DOMAIN|]backend2[:options]" }, - { "get_sec_desc", cmd_get_sec_desc, "Get security descriptor info", "get_sec_desc " }, - { "set_sec_desc", cmd_set_sec_desc, "Set security descriptor info", "set_sec_desc " }, - { "lookup_sid", cmd_lookup_sid, "Lookup type of specified SID", "lookup_sid " }, - { "lookup_name", cmd_lookup_name, "Lookup type of specified name", "lookup_name " }, - { NULL } -}; - -struct cmd_set sam_domain_commands[] = { - { "Domain Commands" }, - { "update_domain", cmd_update_domain, "Update domain information", "update_domain [domain-options] domain-name | domain-sid" }, - { "show_domain", cmd_show_domain, "Show domain information", "show_domain domain-sid | domain-name" }, - { "enum_domains", cmd_enum_domains, "Enumerate all domains", "enum_domains " }, - { "lookup_domain", cmd_lookup_domain, "Lookup a domain by name", "lookup_domain domain-name" }, - { NULL } -}; - -struct cmd_set sam_account_commands[] = { - { "Account Commands" }, - { "create_account", cmd_create_account, "Create a new account with specified properties", "create_account [account-options]" }, - { "update_account", cmd_update_account, "Update an existing account", "update_account [account-options] account-sid | account-name" }, - { "delete_account", cmd_delete_account, "Delete an account", "delete_account account-sid | account-name" }, - { "enum_accounts", cmd_enum_accounts, "Enumerate all accounts", "enum_accounts " }, - { "lookup_account", cmd_lookup_account, "Lookup an account by either sid or name", "lookup_account account-sid | account-name" }, - { "lookup_account_sid", cmd_lookup_account_sid, "Lookup an account by sid", "lookup_account_sid account-sid" }, - { "lookup_account_name", cmd_lookup_account_name, "Lookup an account by name", "lookup_account_name account-name" }, - { NULL } -}; - -struct cmd_set sam_group_commands[] = { - { "Group Commands" }, - { "create_group", cmd_create_group, "Create a new group", "create_group [group-opts]" }, - { "update_group", cmd_update_group, "Update an existing group", "update_group [group-opts] group-name | group-sid" }, - { "delete_group", cmd_delete_group, "Delete an existing group", "delete_group group-name | group-sid" }, - { "enum_groups", cmd_enum_groups, "Enumerate all groups", "enum_groups " }, - { "lookup_group", cmd_lookup_group, "Lookup a group by SID or name", "lookup_group group-sid | group-name" }, - { "lookup_group_sid", cmd_lookup_group_sid, "Lookup a group by SID", "lookup_group_sid " }, - { "lookup_group_name", cmd_lookup_group_name, "Lookup a group by name", "lookup_group_name " }, - { "group_add_member", cmd_group_add_member, "Add group member to group", "group_add_member " }, - { "group_del_member", cmd_group_del_member, "Delete group member from group", "group_del_member " }, - { "group_enum", cmd_group_enum, "Enumerate all members of specified group", "group_enum group-sid | group-name" }, - - { "get_sid_groups", cmd_get_sid_groups, "Get a list of groups specified sid is a member of", "group_enum " }, - { NULL } -}; diff --git a/source/torture/samtest.c b/source/torture/samtest.c deleted file mode 100644 index 17444c0757b..00000000000 --- a/source/torture/samtest.c +++ /dev/null @@ -1,450 +0,0 @@ -/* - Unix SMB/CIFS implementation. - SAM module tester - - Copyright (C) 2002 Jelmer Vernooij - - Parts of the code stolen from vfstest by Simo Sorce and Eric Lorimer - Parts of the code stolen from rpcclient by Tim Potter - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" -#include "samtest.h" - -struct func_entry { - char *name; - int (*fn)(struct connection_struct *conn, const char *path); -}; - -/* List to hold groups of commands */ -static struct cmd_list { - struct cmd_list *prev, *next; - struct cmd_set *cmd_set; -} *cmd_list; - -static char* next_command (char** cmdstr) -{ - static pstring command; - char *p; - - if (!cmdstr || !(*cmdstr)) - return NULL; - - p = strchr_m(*cmdstr, ';'); - if (p) - *p = '\0'; - pstrcpy(command, *cmdstr); - *cmdstr = p; - - return command; -} - -/* Load specified configuration file */ -static NTSTATUS cmd_conf(struct samtest_state *sam, TALLOC_CTX *mem_ctx, - int argc, char **argv) -{ - if (argc != 2) { - printf("Usage: %s \n", argv[0]); - return NT_STATUS_OK; - } - - if (!lp_load(argv[1], False, True, False)) { - printf("Error loading \"%s\"\n", argv[1]); - return NT_STATUS_OK; - } - - printf("\"%s\" successfully loaded\n", argv[1]); - return NT_STATUS_OK; -} - -/* Display help on commands */ -static NTSTATUS cmd_help(struct samtest_state *st, TALLOC_CTX *mem_ctx, - int argc, char **argv) -{ - struct cmd_list *tmp; - struct cmd_set *tmp_set; - - /* Usage */ - if (argc > 2) { - printf("Usage: %s [command]\n", argv[0]); - return NT_STATUS_OK; - } - - /* Help on one command */ - - if (argc == 2) { - for (tmp = cmd_list; tmp; tmp = tmp->next) { - - tmp_set = tmp->cmd_set; - - while(tmp_set->name) { - if (strequal(argv[1], tmp_set->name)) { - if (tmp_set->usage && - tmp_set->usage[0]) - printf("%s\n", tmp_set->usage); - else - printf("No help for %s\n", tmp_set->name); - - return NT_STATUS_OK; - } - - tmp_set++; - } - } - - printf("No such command: %s\n", argv[1]); - return NT_STATUS_OK; - } - - /* List all commands */ - - for (tmp = cmd_list; tmp; tmp = tmp->next) { - - tmp_set = tmp->cmd_set; - - while(tmp_set->name) { - - printf("%20s\t%s\n", tmp_set->name, - tmp_set->description ? tmp_set->description: - ""); - - tmp_set++; - } - } - - return NT_STATUS_OK; -} - -/* Change the debug level */ -static NTSTATUS cmd_debuglevel(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - if (argc > 2) { - printf("Usage: %s [debuglevel]\n", argv[0]); - return NT_STATUS_OK; - } - - if (argc == 2) { - DEBUGLEVEL = atoi(argv[1]); - } - - printf("debuglevel is %d\n", DEBUGLEVEL); - - return NT_STATUS_OK; -} - -static NTSTATUS cmd_quit(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - /* Cleanup */ - talloc_destroy(mem_ctx); - - exit(0); - return NT_STATUS_OK; /* NOTREACHED */ -} - -static struct cmd_set samtest_commands[] = { - - { "GENERAL OPTIONS" }, - - { "help", cmd_help, "Get help on commands", "" }, - { "?", cmd_help, "Get help on commands", "" }, - { "conf", cmd_conf, "Load smb configuration file", "conf " }, - { "debuglevel", cmd_debuglevel, "Set debug level", "" }, - { "exit", cmd_quit, "Exit program", "" }, - { "quit", cmd_quit, "Exit program", "" }, - - { NULL } -}; - -static struct cmd_set separator_command[] = { - { "---------------", NULL, "----------------------" }, - { NULL } -}; - - -/*extern struct cmd_set sam_commands[];*/ -extern struct cmd_set sam_general_commands[]; -extern struct cmd_set sam_domain_commands[]; -extern struct cmd_set sam_account_commands[]; -extern struct cmd_set sam_group_commands[]; -static struct cmd_set *samtest_command_list[] = { - samtest_commands, - sam_general_commands, - sam_domain_commands, - sam_account_commands, - sam_group_commands, - NULL -}; - -static void add_command_set(struct cmd_set *cmd_set) -{ - struct cmd_list *entry; - - if (!(entry = (struct cmd_list *)malloc(sizeof(struct cmd_list)))) { - DEBUG(0, ("out of memory\n")); - return; - } - - ZERO_STRUCTP(entry); - - entry->cmd_set = cmd_set; - DLIST_ADD(cmd_list, entry); -} - -static NTSTATUS do_cmd(struct samtest_state *st, struct cmd_set *cmd_entry, char *cmd) -{ - char *p = cmd, **argv = NULL; - NTSTATUS result = NT_STATUS_UNSUCCESSFUL; - TALLOC_CTX *mem_ctx = NULL; - pstring buf; - int argc = 0, i; - - /* Count number of arguments first time through the loop then - allocate memory and strdup them. */ - - again: - while(next_token(&p, buf, " ", sizeof(buf))) { - if (argv) { - argv[argc] = strdup(buf); - } - - argc++; - } - - if (!argv) { - - /* Create argument list */ - - argv = (char **)malloc(sizeof(char *) * argc); - memset(argv, 0, sizeof(char *) * argc); - - if (!argv) { - fprintf(stderr, "out of memory\n"); - result = NT_STATUS_NO_MEMORY; - goto done; - } - - p = cmd; - argc = 0; - - goto again; - } - - /* Call the function */ - - if (cmd_entry->fn) { - - if (mem_ctx == NULL) { - /* Create mem_ctx */ - if (!(mem_ctx = talloc_init("do_cmd"))) { - DEBUG(0, ("talloc_init() failed\n")); - goto done; - } - } - - /* Run command */ - result = cmd_entry->fn(st, mem_ctx, argc, argv); - - } else { - fprintf (stderr, "Invalid command\n"); - goto done; - } - - done: - - /* Cleanup */ - - if (argv) { - for (i = 0; i < argc; i++) - SAFE_FREE(argv[i]); - - SAFE_FREE(argv); - } - - return result; -} - -/* Process a command entered at the prompt or as part of -c */ -static NTSTATUS process_cmd(struct samtest_state *st, char *cmd) -{ - struct cmd_list *temp_list; - BOOL found = False; - pstring buf; - char *p = cmd; - NTSTATUS result = NT_STATUS_OK; - int len = 0; - - if (cmd[strlen(cmd) - 1] == '\n') - cmd[strlen(cmd) - 1] = '\0'; - - if (!next_token(&p, buf, " ", sizeof(buf))) { - return NT_STATUS_OK; - } - - /* strip the trainly \n if it exsists */ - len = strlen(buf); - if (buf[len-1] == '\n') - buf[len-1] = '\0'; - - /* Search for matching commands */ - - for (temp_list = cmd_list; temp_list; temp_list = temp_list->next) { - struct cmd_set *temp_set = temp_list->cmd_set; - - while(temp_set->name) { - if (strequal(buf, temp_set->name)) { - found = True; - result = do_cmd(st, temp_set, cmd); - - goto done; - } - temp_set++; - } - } - - done: - if (!found && buf[0]) { - printf("command not found: %s\n", buf); - return NT_STATUS_OK; - } - - if (!NT_STATUS_IS_OK(result)) { - printf("result was %s\n", nt_errstr(result)); - } - - return result; -} - -void exit_server(char *reason) -{ - DEBUG(3,("Server exit (%s)\n", (reason ? reason : ""))); - exit(0); -} - -static int server_fd = -1; -int last_message = -1; - -int smbd_server_fd(void) -{ - return server_fd; -} - -BOOL reload_services(BOOL test) -{ - return True; -} - -/* Main function */ - -int main(int argc, char *argv[]) -{ - BOOL interactive = True; - int opt; - static char *cmdstr = ""; - static char *opt_logfile=NULL; - static char *config_file = dyn_CONFIGFILE; - pstring logfile; - struct cmd_set **cmd_set; - struct samtest_state st; - - /* make sure the vars that get altered (4th field) are in - a fixed location or certain compilers complain */ - poptContext pc; - struct poptOption long_options[] = { - POPT_AUTOHELP - { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_debug }, - {"command", 'e', POPT_ARG_STRING, &cmdstr, 'e', "Execute semicolon seperated cmds"}, - {"logfile", 'l', POPT_ARG_STRING, &opt_logfile, 'l', "Logfile to use instead of stdout"}, - {"configfile", 'c', POPT_ARG_STRING, &config_file, 0,"use different configuration file",NULL}, - { 0, 0, 0, 0} - }; - - ZERO_STRUCT(st); - - st.token = get_system_token(); - - setlinebuf(stdout); - - DEBUGLEVEL = 1; - - pc = poptGetContext("samtest", argc, (const char **) argv, - long_options, 0); - - while((opt = poptGetNextOpt(pc)) != -1) { - switch (opt) { - case 'l': - slprintf(logfile, sizeof(logfile) - 1, "%s.client", - opt_logfile); - lp_set_logfile(logfile); - interactive = False; - break; - } - } - - if (!lp_load(config_file,True,False,False)) { - fprintf(stderr, "Can't load %s - run testparm to debug it\n", config_file); - exit(1); - } - - poptFreeContext(pc); - - /* the following functions are part of the Samba debugging - facilities. See lib/debug.c */ - setup_logging("samtest", interactive); - if (!interactive) - reopen_logs(); - - /* Load command lists */ - - cmd_set = samtest_command_list; - - while(*cmd_set) { - add_command_set(*cmd_set); - add_command_set(separator_command); - cmd_set++; - } - - /* Do anything specified with -c */ - if (cmdstr[0]) { - char *cmd; - char *p = cmdstr; - - while((cmd=next_command(&p)) != NULL) { - process_cmd(&st, cmd); - } - - return 0; - } - - /* Loop around accepting commands */ - - while(1) { - pstring prompt; - char *line; - - slprintf(prompt, sizeof(prompt) - 1, "samtest $> "); - - line = smb_readline(prompt, NULL, NULL); - - if (line == NULL) - break; - - if (line[0] != '\n') - process_cmd(&st, line); - } - - return 0; -} diff --git a/source/torture/torture.c b/source/torture/torture.c index 157c5d91b25..5466d8ef9ee 100644 --- a/source/torture/torture.c +++ b/source/torture/torture.c @@ -3521,104 +3521,6 @@ static BOOL run_opentest(int dummy) return correct; } -static uint32 initial_open_attrs[] = { - FILE_ATTRIBUTE_NORMAL, - FILE_ATTRIBUTE_READONLY, - FILE_ATTRIBUTE_HIDDEN, - FILE_ATTRIBUTE_SYSTEM -}; - -static uint32 trunc_open_attrs[] = { - FILE_ATTRIBUTE_NORMAL, - FILE_ATTRIBUTE_READONLY, - FILE_ATTRIBUTE_HIDDEN, - FILE_ATTRIBUTE_SYSTEM, - FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN, - FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM, - FILE_ATTRIBUTE_HIDDEN,FILE_ATTRIBUTE_SYSTEM -}; - -struct trunc_open_results { - uint32 nt_error_code; - uint32 trunc_result_attr; -}; - -#if 0 -statuc struct trunc_open_results attr_results[] = { - {NT_STATUS_OK, FILE_ATTRIBUTE_NORMAL}, -} -#endif - -static BOOL run_openattrtest(int dummy) -{ - static struct cli_state cli1; - const char *fname = "\\openattr.file"; - int fnum1; - BOOL correct = True; - uint16 attr; - int i, j; - - printf("starting open attr test\n"); - - if (!torture_open_connection(&cli1)) { - return False; - } - - cli_sockopt(&cli1, sockops); - - for (i = 0; i < sizeof(initial_open_attrs)/sizeof(uint32); i++) { - cli_setatr(&cli1, fname, 0, 0); - cli_unlink(&cli1, fname); - fnum1 = cli_nt_create_full(&cli1, fname,FILE_WRITE_DATA, initial_open_attrs[i], - FILE_SHARE_NONE, FILE_OVERWRITE_IF, 0); - - if (fnum1 == -1) { - printf("open %d (1) of %s failed (%s)\n", i, fname, cli_errstr(&cli1)); - return False; - } - - if (!cli_close(&cli1, fnum1)) { - printf("close %d (1) of %s failed (%s)\n", i, fname, cli_errstr(&cli1)); - return False; - } - - for (j = 0; j < sizeof(trunc_open_attrs)/sizeof(uint32); j++) { - fnum1 = cli_nt_create_full(&cli1, fname,FILE_READ_DATA|FILE_WRITE_DATA, trunc_open_attrs[j], - FILE_SHARE_NONE, FILE_OVERWRITE, 0); - - if (fnum1 == -1) { - printf("open %d (2) of %s failed (%u:%s)\n", j, fname, 0, cli_errstr(&cli1)); - continue; - } - - if (!cli_close(&cli1, fnum1)) { - printf("close %d (2) of %s failed (%s)\n", j, fname, cli_errstr(&cli1)); - return False; - } - - if (!cli_getatr(&cli1, fname, &attr, NULL, NULL)) { - printf("test 9 getatr(2) failed (%s)\n", cli_errstr(&cli1)); - return False; - } - - printf("getatr [%x] trunc [%x] got attribute %x\n", - initial_open_attrs[i], - trunc_open_attrs[j], - (unsigned int)attr); - } - } - - cli_setatr(&cli1, fname, 0, 0); - cli_unlink(&cli1, fname); - - printf("open attr test %s.\n", correct ? "passed" : "failed"); - - if (!torture_close_connection(&cli1)) { - correct = False; - } - return correct; -} - static void list_fn(file_info *finfo, const char *name, void *state) { @@ -4014,9 +3916,6 @@ static struct { {"RW2", run_readwritemulti, FLAG_MULTIPROC}, {"RW3", run_readwritelarge, 0}, {"OPEN", run_opentest, 0}, -#if 0 - {"OPENATTR", run_openattrtest, 0}, -#endif {"XCOPY", run_xcopy, 0}, {"RENAME", run_rename, 0}, {"DELETE", run_deletetest, 0}, diff --git a/source/utils/editreg.c b/source/utils/editreg.c deleted file mode 100644 index ff9dacaa13f..00000000000 --- a/source/utils/editreg.c +++ /dev/null @@ -1,1874 +0,0 @@ -/* - Samba Unix/Linux SMB client utility editreg.c - Copyright (C) 2002 Richard Sharpe, rsharpe@richardsharpe.com - - 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 2 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - -/************************************************************************* - - A utility to edit a Windows NT/2K etc registry file. - - Many of the ideas in here come from other people and software. - I first looked in Wine in misc/registry.c and was also influenced by - http://www.wednesday.demon.co.uk/dosreg.html - - Which seems to contain comments from someone else. I reproduce them here - incase the site above disappears. It actually comes from - http://home.eunet.no/~pnordahl/ntpasswd/WinReg.txt. - - The goal here is to read the registry into memory, manipulate it, and then - write it out if it was changed by any actions of the user. - -The windows NT registry has 2 different blocks, where one can occur many -times... - -the "regf"-Block -================ - -"regf" is obviosly the abbreviation for "Registry file". "regf" is the -signature of the header-block which is always 4kb in size, although only -the first 64 bytes seem to be used and a checksum is calculated over -the first 0x200 bytes only! - -Offset Size Contents -0x00000000 D-Word ID: ASCII-"regf" = 0x66676572 -0x00000004 D-Word ???? //see struct REGF -0x00000008 D-Word ???? Always the same value as at 0x00000004 -0x0000000C Q-Word last modify date in WinNT date-format -0x00000014 D-Word 1 -0x00000018 D-Word 3 -0x0000001C D-Word 0 -0x00000020 D-Word 1 -0x00000024 D-Word Offset of 1st key record -0x00000028 D-Word Size of the data-blocks (Filesize-4kb) -0x0000002C D-Word 1 -0x000001FC D-Word Sum of all D-Words from 0x00000000 to -0x000001FB //XOR of all words. Nigel - -I have analyzed more registry files (from multiple machines running -NT 4.0 german version) and could not find an explanation for the values -marked with ???? the rest of the first 4kb page is not important... - -the "hbin"-Block -================ -I don't know what "hbin" stands for, but this block is always a multiple -of 4kb in size. - -Inside these hbin-blocks the different records are placed. The memory- -management looks like a C-compiler heap management to me... - -hbin-Header -=========== -Offset Size Contents -0x0000 D-Word ID: ASCII-"hbin" = 0x6E696268 -0x0004 D-Word Offset from the 1st hbin-Block -0x0008 D-Word Offset to the next hbin-Block -0x001C D-Word Block-size - -The values in 0x0008 and 0x001C should be the same, so I don't know -if they are correct or swapped... - -From offset 0x0020 inside a hbin-block data is stored with the following -format: - -Offset Size Contents -0x0000 D-Word Data-block size //this size must be a -multiple of 8. Nigel -0x0004 ???? Data - -If the size field is negative (bit 31 set), the corresponding block -is free and has a size of -blocksize! - -That does not seem to be true. All block lengths seem to be negative! (Richard Sharpe) - -The data is stored as one record per block. Block size is a multiple -of 4 and the last block reaches the next hbin-block, leaving no room. - -Records in the hbin-blocks -========================== - -nk-Record - - The nk-record can be treated as a kombination of tree-record and - key-record of the win 95 registry. - -lf-Record - - The lf-record is the counterpart to the RGKN-record (the - hash-function) - -vk-Record - - The vk-record consists information to a single value. - -sk-Record - - sk (? Security Key ?) is the ACL of the registry. - -Value-Lists - - The value-lists contain information about which values are inside a - sub-key and don't have a header. - -Datas - - The datas of the registry are (like the value-list) stored without a - header. - -All offset-values are relative to the first hbin-block and point to the -block-size field of the record-entry. to get the file offset, you have to add -the header size (4kb) and the size field (4 bytes)... - -the nk-Record -============= -Offset Size Contents -0x0000 Word ID: ASCII-"nk" = 0x6B6E -0x0002 Word for the root-key: 0x2C, otherwise 0x20 //key symbolic links 0x10. Nigel -0x0004 Q-Word write-date/time in windows nt notation -0x0010 D-Word Offset of Owner/Parent key -0x0014 D-Word number of sub-Keys -0x001C D-Word Offset of the sub-key lf-Records -0x0024 D-Word number of values -0x0028 D-Word Offset of the Value-List -0x002C D-Word Offset of the sk-Record - -0x0030 D-Word Offset of the Class-Name //see NK structure for the use of these fields. Nigel -0x0044 D-Word Unused (data-trash) //some kind of run time index. Does not appear to be important. Nigel -0x0048 Word name-length -0x004A Word class-name length -0x004C ???? key-name - -the Value-List -============== -Offset Size Contents -0x0000 D-Word Offset 1st Value -0x0004 D-Word Offset 2nd Value -0x???? D-Word Offset nth Value - -To determine the number of values, you have to look at the owner-nk-record! - -Der vk-Record -============= -Offset Size Contents -0x0000 Word ID: ASCII-"vk" = 0x6B76 -0x0002 Word name length -0x0004 D-Word length of the data //if top bit is set when offset contains data. Nigel -0x0008 D-Word Offset of Data -0x000C D-Word Type of value -0x0010 Word Flag -0x0012 Word Unused (data-trash) -0x0014 ???? Name - -If bit 0 of the flag-word is set, a name is present, otherwise the value has no name (=default) - -If the data-size is lower 5, the data-offset value is used to store the data itself! - -The data-types -============== -Wert Beteutung -0x0001 RegSZ: character string (in UNICODE!) -0x0002 ExpandSZ: string with "%var%" expanding (UNICODE!) -0x0003 RegBin: raw-binary value -0x0004 RegDWord: Dword -0x0007 RegMultiSZ: multiple strings, seperated with 0 - (UNICODE!) - -The "lf"-record -=============== -Offset Size Contents -0x0000 Word ID: ASCII-"lf" = 0x666C -0x0002 Word number of keys -0x0004 ???? Hash-Records - -Hash-Record -=========== -Offset Size Contents -0x0000 D-Word Offset of corresponding "nk"-Record -0x0004 D-Word ASCII: the first 4 characters of the key-name, padded with 0's. Case sensitiv! - -Keep in mind, that the value at 0x0004 is used for checking the data-consistency! If you change the -key-name you have to change the hash-value too! - -//These hashrecords must be sorted low to high within the lf record. Nigel. - -The "sk"-block -============== -(due to the complexity of the SAM-info, not clear jet) -(This is just a security descriptor in the data. R Sharpe.) - - -Offset Size Contents -0x0000 Word ID: ASCII-"sk" = 0x6B73 -0x0002 Word Unused -0x0004 D-Word Offset of previous "sk"-Record -0x0008 D-Word Offset of next "sk"-Record -0x000C D-Word usage-counter -0x0010 D-Word Size of "sk"-record in bytes -???? //standard self -relative security desciptor. Nigel -???? ???? Security and auditing settings... -???? - -The usage counter counts the number of references to this -"sk"-record. You can use one "sk"-record for the entire registry! - -Windows nt date/time format -=========================== -The time-format is a 64-bit integer which is incremented every -0,0000001 seconds by 1 (I don't know how accurate it realy is!) -It starts with 0 at the 1st of january 1601 0:00! All values are -stored in GMT time! The time-zone is important to get the real -time! - -Common values for win95 and win-nt -================================== -Offset values marking an "end of list", are either 0 or -1 (0xFFFFFFFF). -If a value has no name (length=0, flag(bit 0)=0), it is treated as the -"Default" entry... -If a value has no data (length=0), it is displayed as empty. - -simplyfied win-3.?? registry: -============================= - -+-----------+ -| next rec. |---+ +----->+------------+ -| first sub | | | | Usage cnt. | -| name | | +-->+------------+ | | length | -| value | | | | next rec. | | | text |------->+-------+ -+-----------+ | | | name rec. |--+ +------------+ | xxxxx | - +------------+ | | value rec. |-------->+------------+ +-------+ - v | +------------+ | Usage cnt. | -+-----------+ | | length | -| next rec. | | | text |------->+-------+ -| first sub |------+ +------------+ | xxxxx | -| name | +-------+ -| value | -+-----------+ - -Greatly simplyfied structure of the nt-registry: -================================================ - -+---------------------------------------------------------------+ -| | -v | -+---------+ +---------->+-----------+ +----->+---------+ | -| "nk" | | | lf-rec. | | | nk-rec. | | -| ID | | | # of keys | | | parent |---+ -| Date | | | 1st key |--+ | .... | -| parent | | +-----------+ +---------+ -| suk-keys|-----+ -| values |--------------------->+----------+ -| SK-rec. |---------------+ | 1. value |--> +----------+ -| class |--+ | +----------+ | vk-rec. | -+---------+ | | | .... | - v | | data |--> +-------+ - +------------+ | +----------+ | xxxxx | - | Class name | | +-------+ - +------------+ | - v - +---------+ +---------+ - +----->| next sk |--->| Next sk |--+ - | +---| prev sk |<---| prev sk | | - | | | .... | | ... | | - | | +---------+ +---------+ | - | | ^ | - | | | | - | +--------------------+ | - +----------------------------------+ - ---------------------------------------------------------------------------- - -Hope this helps.... (Although it was "fun" for me to uncover this things, - it took me several sleepless nights ;) - - B.D. - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static int verbose = 0; - -/* - * These definitions are for the in-memory registry structure. - * It is a tree structure that mimics what you see with tools like regedit - */ - -/* - * DateTime struct for Windows - */ - -typedef struct date_time_s { - unsigned int low, high; -} NTTIME; - -/* - * Definition of a Key. It has a name, classname, date/time last modified, - * sub-keys, values, and a security descriptor - */ - -#define REG_ROOT_KEY 1 -#define REG_SUB_KEY 2 -#define REG_SYM_LINK 3 - -typedef struct reg_key_s { - char *name; /* Name of the key */ - char *class_name; - int type; /* One of REG_ROOT_KEY or REG_SUB_KEY */ - NTTIME last_mod; /* Time last modified */ - struct reg_key_s *owner; - struct key_list_s *sub_keys; - struct val_list_s *values; - struct key_sec_desc_s *security; -} REG_KEY; - -/* - * The KEY_LIST struct lists sub-keys. - */ - -typedef struct key_list_s { - int key_count; - REG_KEY *keys[1]; -} KEY_LIST; - -typedef struct val_key_s { - char *name; - int has_name; - int data_type; - int data_len; - void *data_blk; /* Might want a separate block */ -} VAL_KEY; - -typedef struct val_list_s { - int val_count; - VAL_KEY *vals[1]; -} VAL_LIST; - -#ifndef MAXSUBAUTHS -#define MAXSUBAUTHS 15 -#endif - -typedef struct dom_sid_s { - unsigned char ver, auths; - unsigned char auth[6]; - unsigned int sub_auths[MAXSUBAUTHS]; -} DOM_SID; - -typedef struct ace_struct_s { - unsigned char type, flags; - unsigned int perms; /* Perhaps a better def is in order */ - DOM_SID *trustee; -} ACE; - -typedef struct acl_struct_s { - unsigned short rev, refcnt; - unsigned short num_aces; - ACE *aces[1]; -} ACL; - -typedef struct sec_desc_s { - unsigned int rev, type; - DOM_SID *owner, *group; - ACL *sacl, *dacl; -} SEC_DESC; - -#define SEC_DESC_NON 0 -#define SEC_DESC_RES 1 -#define SEC_DESC_OCU 2 - -typedef struct key_sec_desc_s { - struct key_sec_desc_s *prev, *next; - int ref_cnt; - int state; - SEC_DESC *sec_desc; -} KEY_SEC_DESC; - - -/* - * An API for accessing/creating/destroying items above - */ - -/* - * Iterate over the keys, depth first, calling a function for each key - * and indicating if it is terminal or non-terminal and if it has values. - * - * In addition, for each value in the list, call a value list function - */ - -/* - * There should eventually be one to deal with security keys as well - */ - -typedef int (*key_print_f)(const char *path, char *key_name, char *class_name, - int root, int terminal, int values); - -typedef int (*val_print_f)(const char *path, char *val_name, int val_type, - int data_len, void *data_blk, int terminal, - int first, int last); - -typedef int (*sec_print_f)(SEC_DESC *sec_desc); - -typedef struct regf_struct_s REGF; - -int nt_key_iterator(REGF *regf, REG_KEY *key_tree, int bf, const char *path, - key_print_f key_print, sec_print_f sec_print, - val_print_f val_print); - -int nt_val_list_iterator(REGF *regf, VAL_LIST *val_list, int bf, char *path, - int terminal, val_print_f val_print) -{ - int i; - - if (!val_list) return 1; - - if (!val_print) return 1; - - for (i=0; ival_count; i++) { - if (!val_print(path, val_list->vals[i]->name, val_list->vals[i]->data_type, - val_list->vals[i]->data_len, val_list->vals[i]->data_blk, - terminal, - (i == 0), - (i == val_list->val_count))) { - - return 0; - - } - } - - return 1; -} - -int nt_key_list_iterator(REGF *regf, KEY_LIST *key_list, int bf, char *path, - key_print_f key_print, sec_print_f sec_print, - val_print_f val_print) -{ - int i; - - if (!key_list) return 1; - - for (i=0; i< key_list->key_count; i++) { - if (!nt_key_iterator(regf, key_list->keys[i], bf, path, key_print, - sec_print, val_print)) { - return 0; - } - } - return 1; -} - -int nt_key_iterator(REGF *regf, REG_KEY *key_tree, int bf, const char *path, - key_print_f key_print, sec_print_f sec_print, - val_print_f val_print) -{ - int path_len = strlen(path); - char *new_path; - - if (!regf || !key_tree) - return -1; - - /* List the key first, then the values, then the sub-keys */ - - if (key_print) { - - if (!(*key_print)(path, key_tree->name, - key_tree->class_name, - (key_tree->type == REG_ROOT_KEY), - (key_tree->sub_keys == NULL), - (key_tree->values?(key_tree->values->val_count):0))) - return 0; - } - - /* - * If we have a security print routine, call it - */ - if (sec_print) { - if (key_tree->security && !(*sec_print)(key_tree->security->sec_desc)) - return 0; - } - - new_path = (char *)malloc(path_len + 1 + strlen(key_tree->name) + 1); - if (!new_path) return 0; /* Errors? */ - new_path[0] = '\0'; - strcat(new_path, path); - strcat(new_path, "\\"); - strcat(new_path, key_tree->name); - - /* - * Now, iterate through the values in the val_list - */ - - if (key_tree->values && - !nt_val_list_iterator(regf, key_tree->values, bf, new_path, - (key_tree->values!=NULL), - val_print)) { - - free(new_path); - return 0; - } - - /* - * Now, iterate through the keys in the key list - */ - - if (key_tree->sub_keys && - !nt_key_list_iterator(regf, key_tree->sub_keys, bf, new_path, key_print, - sec_print, val_print)) { - free(new_path); - return 0; - } - - free(new_path); - return 1; -} - -/* Make, delete keys */ - - - -int nt_delete_val_list(VAL_LIST *vl) -{ - - return 1; -} - -int nt_delete_val_key(VAL_KEY *val_key) -{ - - return 1; -} - -int nt_delete_key_list(KEY_LIST *key_list) -{ - - return 1; -} - -int nt_delete_sid(DOM_SID *sid) -{ - - if (sid) free(sid); - return 1; - -} - -int nt_delete_ace(ACE *ace) -{ - - if (ace) { - nt_delete_sid(ace->trustee); - free(ace); - } - return 1; - -} - -int nt_delete_acl(ACL *acl) -{ - - if (acl) { - int i; - - for (i=0; inum_aces; i++) - nt_delete_ace(acl->aces[i]); - - free(acl); - } - return 1; -} - -int nt_delete_sec_desc(SEC_DESC *sec_desc) -{ - - if (sec_desc) { - - nt_delete_sid(sec_desc->owner); - nt_delete_sid(sec_desc->group); - nt_delete_acl(sec_desc->sacl); - nt_delete_acl(sec_desc->dacl); - free(sec_desc); - - } - return 1; -} - -int nt_delete_key_sec_desc(KEY_SEC_DESC *key_sec_desc) -{ - - if (key_sec_desc) { - key_sec_desc->ref_cnt--; - if (key_sec_desc->ref_cnt<=0) { - /* - * There should always be a next and prev, even if they point to us - */ - key_sec_desc->next->prev = key_sec_desc->prev; - key_sec_desc->prev->next = key_sec_desc->next; - nt_delete_sec_desc(key_sec_desc->sec_desc); - } - } - return 1; -} - -int nt_delete_reg_key(REG_KEY *key) -{ - - return 1; -} - -/* - * Create/delete key lists and add delete keys to/from a list, count the keys - */ - - -/* - * Create/delete value lists, add/delete values, count them - */ - - -/* - * Create/delete security descriptors, add/delete SIDS, count SIDS, etc. - * We reference count the security descriptors. Any new reference increments - * the ref count. If we modify an SD, we copy the old one, dec the ref count - * and make the change. We also want to be able to check for equality so - * we can reduce the number of SDs in use. - */ - -/* - * Code to parse registry specification from command line or files - * - * Format: - * [cmd:]key:type:value - * - * cmd = a|d|c|add|delete|change|as|ds|cs - * - */ - - -/* - * Load and unload a registry file. - * - * Load, loads it into memory as a tree, while unload sealizes/flattens it - */ - -/* - * Get the starting record for NT Registry file - */ - -/* A map of sk offsets in the regf to KEY_SEC_DESCs for quick lookup etc */ -typedef struct sk_map_s { - int sk_off; - KEY_SEC_DESC *key_sec_desc; -} SK_MAP; - -/* - * Where we keep all the regf stuff for one registry. - * This is the structure that we use to tie the in memory tree etc - * together. By keeping separate structs, we can operate on different - * registries at the same time. - * Currently, the SK_MAP is an array of mapping structure. - * Since we only need this on input and output, we fill in the structure - * as we go on input. On output, we know how many SK items we have, so - * we can allocate the structure as we need to. - * If you add stuff here that is dynamically allocated, add the - * appropriate free statements below. - */ - -#define REGF_REGTYPE_NONE 0 -#define REGF_REGTYPE_NT 1 -#define REGF_REGTYPE_W9X 2 - -#define TTTONTTIME(r, t1, t2) (r)->last_mod_time.low = (t1); \ - (r)->last_mod_time.high = (t2); - -#define REGF_HDR_BLKSIZ 0x1000 - -struct regf_struct_s { - int reg_type; - char *regfile_name, *outfile_name; - int fd; - struct stat sbuf; - char *base; - int modified; - NTTIME last_mod_time; - REG_KEY *root; /* Root of the tree for this file */ - int sk_count, sk_map_size; - SK_MAP *sk_map; -}; - -/* - * Structures for dealing with the on-disk format of the registry - */ - -#define IVAL(buf) ((unsigned int) \ - (unsigned int)*((unsigned char *)(buf)+3)<<24| \ - (unsigned int)*((unsigned char *)(buf)+2)<<16| \ - (unsigned int)*((unsigned char *)(buf)+1)<<8| \ - (unsigned int)*((unsigned char *)(buf)+0)) - -#define SVAL(buf) ((unsigned short) \ - (unsigned short)*((unsigned char *)(buf)+1)<<8| \ - (unsigned short)*((unsigned char *)(buf)+0)) - -#define CVAL(buf) ((unsigned char)*((unsigned char *)(buf))) - -#define OFF(f) ((f) + REGF_HDR_BLKSIZ + 4) -#define LOCN(base, f) ((base) + OFF(f)) - -/* - * All of the structures below actually have a four-byte lenght before them - * which always seems to be negative. The following macro retrieves that - * size as an integer - */ - -#define BLK_SIZE(b) ((int)*(int *)(((int *)b)-1)) - -typedef unsigned int DWORD; -typedef unsigned short WORD; - -#define REG_REGF_ID 0x66676572 - -typedef struct regf_block { - DWORD REGF_ID; /* regf */ - DWORD uk1; - DWORD uk2; - DWORD tim1, tim2; - DWORD uk3; /* 1 */ - DWORD uk4; /* 3 */ - DWORD uk5; /* 0 */ - DWORD uk6; /* 1 */ - DWORD first_key; /* offset */ - unsigned int dblk_size; - DWORD uk7[116]; /* 1 */ - DWORD chksum; -} REGF_HDR; - -typedef struct hbin_sub_struct { - DWORD dblocksize; - char data[1]; -} HBIN_SUB_HDR; - -#define REG_HBIN_ID 0x6E696268 - -typedef struct hbin_struct { - DWORD HBIN_ID; /* hbin */ - DWORD next_off; - DWORD prev_off; - DWORD uk1; - DWORD uk2; - DWORD uk3; - DWORD uk4; - DWORD blk_size; - HBIN_SUB_HDR hbin_sub_hdr; -} HBIN_HDR; - -#define REG_NK_ID 0x6B6E - -typedef struct nk_struct { - WORD NK_ID; - WORD type; - DWORD t1, t2; - DWORD uk1; - DWORD own_off; - DWORD subk_num; - DWORD uk2; - DWORD lf_off; - DWORD uk3; - DWORD val_cnt; - DWORD val_off; - DWORD sk_off; - DWORD clsnam_off; - DWORD unk4[4]; - DWORD unk5; - WORD nam_len; - WORD clsnam_len; - char key_nam[1]; /* Actual length determined by nam_len */ -} NK_HDR; - -#define REG_SK_ID 0x6B73 - -typedef struct sk_struct { - WORD SK_ID; - WORD uk1; - DWORD prev_off; - DWORD next_off; - DWORD ref_cnt; - DWORD rec_size; - char sec_desc[1]; -} SK_HDR; - -typedef struct ace_struct { - unsigned char type; - unsigned char flags; - unsigned short length; - unsigned int perms; - DOM_SID trustee; -} REG_ACE; - -typedef struct acl_struct { - WORD rev; - WORD size; - DWORD num_aces; - REG_ACE *aces; /* One or more ACEs */ -} REG_ACL; - -typedef struct sec_desc_rec { - WORD rev; - WORD type; - DWORD owner_off; - DWORD group_off; - DWORD sacl_off; - DWORD dacl_off; -} REG_SEC_DESC; - -typedef struct hash_struct { - DWORD nk_off; - char hash[4]; -} HASH_REC; - -#define REG_LF_ID 0x666C - -typedef struct lf_struct { - WORD LF_ID; - WORD key_count; - struct hash_struct hr[1]; /* Array of hash records, depending on key_count */ -} LF_HDR; - -typedef DWORD VL_TYPE[1]; /* Value list is an array of vk rec offsets */ - -#define REG_VK_ID 0x6B76 - -typedef struct vk_struct { - WORD VK_ID; - WORD nam_len; - DWORD dat_len; /* If top-bit set, offset contains the data */ - DWORD dat_off; - DWORD dat_type; - WORD flag; /* =1, has name, else no name (=Default). */ - WORD unk1; - char dat_name[1]; /* Name starts here ... */ -} VK_HDR; - -#define REG_TYPE_REGSZ 1 -#define REG_TYPE_EXPANDSZ 2 -#define REG_TYPE_BIN 3 -#define REG_TYPE_DWORD 4 -#define REG_TYPE_MULTISZ 7 - -typedef struct _val_str { - unsigned int val; - const char * str; -} VAL_STR; - -const VAL_STR reg_type_names[] = { - { 1, "REG_SZ" }, - { 2, "REG_EXPAND_SZ" }, - { 3, "REG_BIN" }, - { 4, "REG_DWORD" }, - { 7, "REG_MULTI_SZ" }, - { 0, NULL }, -}; - -const char *val_to_str(unsigned int val, const VAL_STR *val_array) -{ - int i = 0; - - if (!val_array) return NULL; - - while (val_array[i].val && val_array[i].str) { - - if (val_array[i].val == val) return val_array[i].str; - i++; - - } - - return NULL; - -} - -/* - * Convert from UniCode to Ascii ... Does not take into account other lang - * Restrict by ascii_max if > 0 - */ -int uni_to_ascii(unsigned char *uni, unsigned char *ascii, int ascii_max, - int uni_max) -{ - int i = 0; - - while (i < ascii_max && !(!uni[i*2] && !uni[i*2+1])) { - if (uni_max > 0 && (i*2) >= uni_max) break; - ascii[i] = uni[i*2]; - i++; - - } - - ascii[i] = '\0'; - - return i; -} - -/* - * Convert a data value to a string for display - */ -int data_to_ascii(unsigned char *datap, int len, int type, char *ascii, int ascii_max) -{ - unsigned char *asciip; - int i; - - switch (type) { - case REG_TYPE_REGSZ: - fprintf(stderr, "Len: %d\n", len); - return uni_to_ascii(datap, ascii, len, ascii_max); - break; - - case REG_TYPE_EXPANDSZ: - return uni_to_ascii(datap, ascii, len, ascii_max); - break; - - case REG_TYPE_BIN: - asciip = ascii; - for (i=0; (i 0) - *asciip = ' '; asciip++; - } - *asciip = '\0'; - return ((int)asciip - (int)ascii); - break; - - case REG_TYPE_DWORD: - if (*(int *)datap == 0) - return snprintf(ascii, ascii_max, "0"); - else - return snprintf(ascii, ascii_max, "0x%x", *(int *)datap); - break; - - case REG_TYPE_MULTISZ: - - break; - - default: - return 0; - break; - } - - return len; - -} - -REG_KEY *nt_get_key_tree(REGF *regf, NK_HDR *nk_hdr, int size); - -int nt_set_regf_input_file(REGF *regf, char *filename) -{ - return ((regf->regfile_name = strdup(filename)) != NULL); -} - -int nt_set_regf_output_file(REGF *regf, char *filename) -{ - return ((regf->outfile_name = strdup(filename)) != NULL); -} - -/* Create a regf structure and init it */ - -REGF *nt_create_regf(void) -{ - REGF *tmp = (REGF *)malloc(sizeof(REGF)); - if (!tmp) return tmp; - bzero(tmp, sizeof(REGF)); - return tmp; -} - -/* Free all the bits and pieces ... Assumes regf was malloc'd */ -/* If you add stuff to REGF, add the relevant free bits here */ -int nt_free_regf(REGF *regf) -{ - if (!regf) return 0; - - if (regf->regfile_name) free(regf->regfile_name); - if (regf->outfile_name) free(regf->outfile_name); - - /* Free the mmap'd area */ - - if (regf->base) munmap(regf->base, regf->sbuf.st_size); - regf->base = NULL; - close(regf->fd); /* Ignore the error :-) */ - - nt_delete_reg_key(regf->root); /* Free the tree */ - free(regf->sk_map); - regf->sk_count = regf->sk_map_size = 0; - - free(regf); - - return 1; -} - -/* Get the header of the registry. Return a pointer to the structure - * If the mmap'd area has not been allocated, then mmap the input file - */ -REGF_HDR *nt_get_regf_hdr(REGF *regf) -{ - if (!regf) - return NULL; /* What about errors */ - - if (!regf->regfile_name) - return NULL; /* What about errors */ - - if (!regf->base) { /* Try to mmap etc the file */ - - if ((regf->fd = open(regf->regfile_name, O_RDONLY, 0000)) <0) { - return NULL; /* What about errors? */ - } - - if (fstat(regf->fd, ®f->sbuf) < 0) { - return NULL; - } - - regf->base = mmap(0, regf->sbuf.st_size, PROT_READ, MAP_SHARED, regf->fd, 0); - - if ((int)regf->base == 1) { - fprintf(stderr, "Could not mmap file: %s, %s\n", regf->regfile_name, - strerror(errno)); - return NULL; - } - } - - /* - * At this point, regf->base != NULL, and we should be able to read the - * header - */ - - assert(regf->base != NULL); - - return (REGF_HDR *)regf->base; -} - -/* - * Validate a regf header - * For now, do nothing, but we should check the checksum - */ -int valid_regf_hdr(REGF_HDR *regf_hdr) -{ - if (!regf_hdr) return 0; - - return 1; -} - -/* - * Process an SK header ... - * Every time we see a new one, add it to the map. Otherwise, just look it up. - * We will do a simple linear search for the moment, since many KEYs have the - * same security descriptor. - * We allocate the map in increments of 10 entries. - */ - -/* - * Create a new entry in the map, and increase the size of the map if needed - */ - -SK_MAP *alloc_sk_map_entry(REGF *regf, KEY_SEC_DESC *tmp, int sk_off) -{ - if (!regf->sk_map) { /* Allocate a block of 10 */ - regf->sk_map = (SK_MAP *)malloc(sizeof(SK_MAP) * 10); - if (!regf->sk_map) { - free(tmp); - return NULL; - } - regf->sk_map_size = 10; - regf->sk_count = 1; - (regf->sk_map)[0].sk_off = sk_off; - (regf->sk_map)[0].key_sec_desc = tmp; - } - else { /* Simply allocate a new slot, unless we have to expand the list */ - int ndx = regf->sk_count; - if (regf->sk_count >= regf->sk_map_size) { - regf->sk_map = (SK_MAP *)realloc(regf->sk_map, - (regf->sk_map_size + 10)*sizeof(SK_MAP)); - if (!regf->sk_map) { - free(tmp); - return NULL; - } - /* - * ndx already points at the first entry of the new block - */ - regf->sk_map_size += 10; - } - (regf->sk_map)[ndx].sk_off = sk_off; - (regf->sk_map)[ndx].key_sec_desc = tmp; - regf->sk_count++; - } - return regf->sk_map; -} - -/* - * Search for a KEY_SEC_DESC in the sk_map, but dont create one if not - * found - */ - -KEY_SEC_DESC *lookup_sec_key(SK_MAP *sk_map, int count, int sk_off) -{ - int i; - - if (!sk_map) return NULL; - - for (i = 0; i < count; i++) { - - if (sk_map[i].sk_off == sk_off) - return sk_map[i].key_sec_desc; - - } - - return NULL; - -} - -/* - * Allocate a KEY_SEC_DESC if we can't find one in the map - */ - -KEY_SEC_DESC *lookup_create_sec_key(REGF *regf, SK_MAP *sk_map, int sk_off) -{ - KEY_SEC_DESC *tmp = lookup_sec_key(regf->sk_map, regf->sk_count, sk_off); - - if (tmp) { - return tmp; - } - else { /* Allocate a new one */ - tmp = (KEY_SEC_DESC *)malloc(sizeof(KEY_SEC_DESC)); - if (!tmp) { - return NULL; - } - tmp->state = SEC_DESC_RES; - if (!alloc_sk_map_entry(regf, tmp, sk_off)) { - return NULL; - } - return tmp; - } -} - -/* - * Allocate storage and duplicate a SID - * We could allocate the SID to be only the size needed, but I am too lazy. - */ -DOM_SID *dup_sid(DOM_SID *sid) -{ - DOM_SID *tmp = (DOM_SID *)malloc(sizeof(DOM_SID)); - int i; - - if (!tmp) return NULL; - tmp->ver = sid->ver; - tmp->auths = sid->auths; - for (i=0; i<6; i++) { - tmp->auth[i] = sid->auth[i]; - } - for (i=0; iauths&&isub_auths[i] = sid->sub_auths[i]; - } - return tmp; -} - -/* - * Allocate space for an ACE and duplicate the registry encoded one passed in - */ -ACE *dup_ace(REG_ACE *ace) -{ - ACE *tmp = NULL; - - tmp = (ACE *)malloc(sizeof(ACE)); - - if (!tmp) return NULL; - - tmp->type = CVAL(&ace->type); - tmp->flags = CVAL(&ace->flags); - tmp->perms = IVAL(&ace->perms); - tmp->trustee = dup_sid(&ace->trustee); - return tmp; -} - -/* - * Allocate space for an ACL and duplicate the registry encoded one passed in - */ -ACL *dup_acl(REG_ACL *acl) -{ - ACL *tmp = NULL; - REG_ACE* ace; - int i, num_aces; - - num_aces = IVAL(&acl->num_aces); - - tmp = (ACL *)malloc(sizeof(ACL) + (num_aces - 1)*sizeof(ACE *)); - if (!tmp) return NULL; - - tmp->num_aces = num_aces; - tmp->refcnt = 1; - tmp->rev = SVAL(&acl->rev); - ace = (REG_ACE *)&acl->aces; - for (i=0; iaces[i] = dup_ace(ace); - ace = (REG_ACE *)((char *)ace + SVAL(&ace->length)); - /* XXX: FIXME, should handle malloc errors */ - } - - return tmp; -} - -SEC_DESC *process_sec_desc(REGF *regf, REG_SEC_DESC *sec_desc) -{ - SEC_DESC *tmp = NULL; - - tmp = (SEC_DESC *)malloc(sizeof(SEC_DESC)); - - if (!tmp) { - return NULL; - } - - tmp->rev = SVAL(&sec_desc->rev); - tmp->type = SVAL(&sec_desc->type); - tmp->owner = dup_sid((DOM_SID *)((char *)sec_desc + IVAL(&sec_desc->owner_off))); - if (!tmp->owner) { - free(tmp); - return NULL; - } - tmp->group = dup_sid((DOM_SID *)((char *)sec_desc + IVAL(&sec_desc->group_off))); - if (!tmp->group) { - free(tmp); - return NULL; - } - - /* Now pick up the SACL and DACL */ - - if (sec_desc->sacl_off) - tmp->sacl = dup_acl((REG_ACL *)((char *)sec_desc + IVAL(&sec_desc->sacl_off))); - else - tmp->sacl = NULL; - - if (sec_desc->dacl_off) - tmp->dacl = dup_acl((REG_ACL *)((char *)sec_desc + IVAL(&sec_desc->dacl_off))); - else - tmp->dacl = NULL; - - return tmp; -} - -KEY_SEC_DESC *process_sk(REGF *regf, SK_HDR *sk_hdr, int sk_off, int size) -{ - KEY_SEC_DESC *tmp = NULL; - int sk_next_off, sk_prev_off, sk_size; - REG_SEC_DESC *sec_desc; - - if (!sk_hdr) return NULL; - - if (SVAL(&sk_hdr->SK_ID) != REG_SK_ID) { - fprintf(stderr, "Unrecognized SK Header ID: %08X, %s\n", (int)sk_hdr, - regf->regfile_name); - return NULL; - } - - if (-size < (sk_size = IVAL(&sk_hdr->rec_size))) { - fprintf(stderr, "Incorrect SK record size: %d vs %d. %s\n", - -size, sk_size, regf->regfile_name); - return NULL; - } - - /* - * Now, we need to look up the SK Record in the map, and return it - * Since the map contains the SK_OFF mapped to KEY_SEC_DESC, we can - * use that - */ - - if (regf->sk_map && - ((tmp = lookup_sec_key(regf->sk_map, regf->sk_count, sk_off)) != NULL) - && (tmp->state == SEC_DESC_OCU)) { - tmp->ref_cnt++; - return tmp; - } - - /* Here, we have an item in the map that has been reserved, or tmp==NULL. */ - - assert(tmp == NULL || (tmp && tmp->state != SEC_DESC_NON)); - - /* - * Now, allocate a KEY_SEC_DESC, and parse the structure here, and add the - * new KEY_SEC_DESC to the mapping structure, since the offset supplied is - * the actual offset of structure. The same offset will be used by all - * all future references to this structure - * We chould put all this unpleasantness in a function. - */ - - if (!tmp) { - tmp = (KEY_SEC_DESC *)malloc(sizeof(KEY_SEC_DESC)); - if (!tmp) return NULL; - bzero(tmp, sizeof(KEY_SEC_DESC)); - - /* - * Allocate an entry in the SK_MAP ... - * We don't need to free tmp, because that is done for us if the - * sm_map entry can't be expanded when we need more space in the map. - */ - - if (!alloc_sk_map_entry(regf, tmp, sk_off)) { - return NULL; - } - } - - tmp->ref_cnt++; - tmp->state = SEC_DESC_OCU; - - /* - * Now, process the actual sec desc and plug the values in - */ - - sec_desc = (REG_SEC_DESC *)&sk_hdr->sec_desc[0]; - tmp->sec_desc = process_sec_desc(regf, sec_desc); - - /* - * Now forward and back links. Here we allocate an entry in the sk_map - * if it does not exist, and mark it reserved - */ - - sk_prev_off = IVAL(&sk_hdr->prev_off); - tmp->prev = lookup_create_sec_key(regf, regf->sk_map, sk_prev_off); - assert(tmp->prev != NULL); - sk_next_off = IVAL(&sk_hdr->next_off); - tmp->next = lookup_create_sec_key(regf, regf->sk_map, sk_next_off); - assert(tmp->next != NULL); - - return tmp; -} - -/* - * Process a VK header and return a value - */ -VAL_KEY *process_vk(REGF *regf, VK_HDR *vk_hdr, int size) -{ - char val_name[1024]; - int nam_len, dat_len, flag, dat_type, dat_off, vk_id; - const char *val_type; - VAL_KEY *tmp = NULL; - - if (!vk_hdr) return NULL; - - if ((vk_id = SVAL(&vk_hdr->VK_ID)) != REG_VK_ID) { - fprintf(stderr, "Unrecognized VK header ID: %0X, block: %0X, %s\n", - vk_id, (int)vk_hdr, regf->regfile_name); - return NULL; - } - - nam_len = SVAL(&vk_hdr->nam_len); - val_name[nam_len] = '\0'; - flag = SVAL(&vk_hdr->flag); - dat_type = IVAL(&vk_hdr->dat_type); - dat_len = IVAL(&vk_hdr->dat_len); /* If top bit, offset contains data */ - dat_off = IVAL(&vk_hdr->dat_off); - - tmp = (VAL_KEY *)malloc(sizeof(VAL_KEY)); - if (!tmp) { - goto error; - } - bzero(tmp, sizeof(VAL_KEY)); - tmp->has_name = flag; - tmp->data_type = dat_type; - - if (flag & 0x01) { - strncpy(val_name, vk_hdr->dat_name, nam_len); - tmp->name = strdup(val_name); - if (!tmp->name) { - goto error; - } - } - else - strncpy(val_name, "", 10); - - /* - * Allocate space and copy the data as a BLOB - */ - - if (dat_len) { - - char *dtmp = (char *)malloc(dat_len&0x7FFFFFFF); - - if (!dtmp) { - goto error; - } - - tmp->data_blk = dtmp; - - if ((dat_len&0x80000000) == 0) { /* The data is pointed to by the offset */ - char *dat_ptr = LOCN(regf->base, dat_off); - bcopy(dat_ptr, dtmp, dat_len); - } - else { /* The data is in the offset */ - dat_len = dat_len & 0x7FFFFFFF; - bcopy(&dat_off, dtmp, dat_len); - } - - tmp->data_len = dat_len; - } - - val_type = val_to_str(dat_type, reg_type_names); - - /* - * We need to save the data area as well - */ - - if (verbose) fprintf(stdout, " %s : %s : \n", val_name, val_type); - - return tmp; - - error: - /* XXX: FIXME, free the partially allocated struct */ - return NULL; - -} - -/* - * Process a VL Header and return a list of values - */ -VAL_LIST *process_vl(REGF *regf, VL_TYPE vl, int count, int size) -{ - int i, vk_off; - VK_HDR *vk_hdr; - VAL_LIST *tmp = NULL; - - if (!vl) return NULL; - - if (-size < (count+1)*sizeof(int)){ - fprintf(stderr, "Error in VL header format. Size less than space required. %d\n", -size); - return NULL; - } - - tmp = (VAL_LIST *)malloc(sizeof(VAL_LIST) + (count - 1) * sizeof(VAL_KEY *)); - if (!tmp) { - goto error; - } - - for (i=0; ibase, vk_off); - tmp->vals[i] = process_vk(regf, vk_hdr, BLK_SIZE(vk_hdr)); - if (!tmp->vals[i]){ - goto error; - } - } - - tmp->val_count = count; - - return tmp; - - error: - /* XXX: FIXME, free the partially allocated structure */ - return NULL; -} - -/* - * Process an LF Header and return a list of sub-keys - */ -KEY_LIST *process_lf(REGF *regf, LF_HDR *lf_hdr, int size) -{ - int count, i, nk_off; - unsigned int lf_id; - KEY_LIST *tmp; - - if (!lf_hdr) return NULL; - - if ((lf_id = SVAL(&lf_hdr->LF_ID)) != REG_LF_ID) { - fprintf(stderr, "Unrecognized LF Header format: %0X, Block: %0X, %s.\n", - lf_id, (int)lf_hdr, regf->regfile_name); - return NULL; - } - - assert(size < 0); - - count = SVAL(&lf_hdr->key_count); - - if (count <= 0) return NULL; - - /* Now, we should allocate a KEY_LIST struct and fill it in ... */ - - tmp = (KEY_LIST *)malloc(sizeof(KEY_LIST) + (count - 1) * sizeof(REG_KEY *)); - if (!tmp) { - goto error; - } - - tmp->key_count = count; - - for (i=0; ihr[i].nk_off); - nk_hdr = (NK_HDR *)LOCN(regf->base, nk_off); - tmp->keys[i] = nt_get_key_tree(regf, nk_hdr, BLK_SIZE(nk_hdr)); - if (!tmp->keys[i]) { - goto error; - } - } - - return tmp; - - error: - /* XXX: FIXME, free the partially allocated structure */ - return NULL; -} - -/* - * This routine is passed a NK_HDR pointer and retrieves the entire tree - * from there down. It return a REG_KEY *. - */ -REG_KEY *nt_get_key_tree(REGF *regf, NK_HDR *nk_hdr, int size) -{ - REG_KEY *tmp = NULL; - int name_len, clsname_len, lf_off, val_off, val_count, sk_off; - unsigned int nk_id; - LF_HDR *lf_hdr; - VL_TYPE *vl; - SK_HDR *sk_hdr; - char key_name[1024], cls_name[1024]; - - if (!nk_hdr) return NULL; - - if ((nk_id = SVAL(&nk_hdr->NK_ID)) != REG_NK_ID) { - fprintf(stderr, "Unrecognized NK Header format: %08X, Block: %0X. %s\n", - nk_id, (int)nk_hdr, regf->regfile_name); - return NULL; - } - - assert(size < 0); - - name_len = SVAL(&nk_hdr->nam_len); - clsname_len = SVAL(&nk_hdr->clsnam_len); - - /* - * The value of -size should be ge - * (sizeof(NK_HDR) - 1 + name_len) - * The -1 accounts for the fact that we included the first byte of - * the name in the structure. clsname_len is the length of the thing - * pointed to by clsnam_off - */ - - if (-size < (sizeof(NK_HDR) - 1 + name_len)) { - fprintf(stderr, "Incorrect NK_HDR size: %d, %0X\n", -size, (int)nk_hdr); - fprintf(stderr, "Sizeof NK_HDR: %d, name_len %d, clsname_len %d\n", - sizeof(NK_HDR), name_len, clsname_len); - /*return NULL;*/ - } - - if (verbose) fprintf(stdout, "NK HDR: Name len: %d, class name len: %d\n", - name_len, clsname_len); - - /* Fish out the key name and process the LF list */ - - assert(name_len < sizeof(key_name)); - - /* Allocate the key struct now */ - tmp = (REG_KEY *)malloc(sizeof(REG_KEY)); - if (!tmp) return tmp; - bzero(tmp, sizeof(REG_KEY)); - - tmp->type = (SVAL(&nk_hdr->type)==0x2C?REG_ROOT_KEY:REG_SUB_KEY); - - strncpy(key_name, nk_hdr->key_nam, name_len); - key_name[name_len] = '\0'; - - if (verbose) fprintf(stdout, "Key name: %s\n", key_name); - - tmp->name = strdup(key_name); - if (!tmp->name) { - goto error; - } - - /* - * Fish out the class name, it is in UNICODE, while the key name is - * ASCII :-) - */ - - if (clsname_len) { /* Just print in Ascii for now */ - char *clsnamep; - int clsnam_off; - - clsnam_off = IVAL(&nk_hdr->clsnam_off); - clsnamep = LOCN(regf->base, clsnam_off); - - bzero(cls_name, clsname_len); - uni_to_ascii(clsnamep, cls_name, sizeof(cls_name), clsname_len); - - /* - * I am keeping class name as an ascii string for the moment. - * That means it needs to be converted on output. - * XXX: FIXME - */ - - tmp->class_name = strdup(cls_name); - if (!tmp->class_name) { - goto error; - } - - if (verbose) fprintf(stdout, " Class Name: %s\n", cls_name); - - } - - /* - * If there are any values, process them here - */ - - val_count = IVAL(&nk_hdr->val_cnt); - - if (val_count) { - - val_off = IVAL(&nk_hdr->val_off); - vl = (VL_TYPE *)LOCN(regf->base, val_off); - - tmp->values = process_vl(regf, *vl, val_count, BLK_SIZE(vl)); - if (!tmp->values) { - goto error; - } - - } - - /* - * Also handle the SK header ... - */ - - sk_off = IVAL(&nk_hdr->sk_off); - sk_hdr = (SK_HDR *)LOCN(regf->base, sk_off); - - if (sk_off != -1) { - - tmp->security = process_sk(regf, sk_hdr, sk_off, BLK_SIZE(sk_hdr)); - - } - - lf_off = IVAL(&nk_hdr->lf_off); - - /* - * No more subkeys if lf_off == -1 - */ - - if (lf_off != -1) { - - lf_hdr = (LF_HDR *)LOCN(regf->base, lf_off); - - tmp->sub_keys = process_lf(regf, lf_hdr, BLK_SIZE(lf_hdr)); - if (!tmp->sub_keys){ - goto error; - } - - } - - return tmp; - - error: - if (tmp) nt_delete_reg_key(tmp); - return NULL; -} - -int nt_load_registry(REGF *regf) -{ - REGF_HDR *regf_hdr; - unsigned int regf_id, hbin_id; - HBIN_HDR *hbin_hdr; - NK_HDR *first_key; - - /* Get the header */ - - if ((regf_hdr = nt_get_regf_hdr(regf)) == NULL) { - return -1; - } - - /* Now process that header and start to read the rest in */ - - if ((regf_id = IVAL(®f_hdr->REGF_ID)) != REG_REGF_ID) { - fprintf(stderr, "Unrecognized NT registry header id: %0X, %s\n", - regf_id, regf->regfile_name); - return -1; - } - - /* - * Validate the header ... - */ - if (!valid_regf_hdr(regf_hdr)) { - fprintf(stderr, "Registry file header does not validate: %s\n", - regf->regfile_name); - return -1; - } - - /* Update the last mod date, and then go get the first NK record and on */ - - TTTONTTIME(regf, IVAL(®f_hdr->tim1), IVAL(®f_hdr->tim2)); - - /* - * The hbin hdr seems to be just uninteresting garbage. Check that - * it is there, but that is all. - */ - - hbin_hdr = (HBIN_HDR *)(regf->base + REGF_HDR_BLKSIZ); - - if ((hbin_id = IVAL(&hbin_hdr->HBIN_ID)) != REG_HBIN_ID) { - fprintf(stderr, "Unrecognized registry hbin hdr ID: %0X, %s\n", - hbin_id, regf->regfile_name); - return -1; - } - - /* - * Get a pointer to the first key from the hreg_hdr - */ - - first_key = (NK_HDR *)LOCN(regf->base, IVAL(®f_hdr->first_key)); - - /* - * Now, get the registry tree by processing that NK recursively - */ - - regf->root = nt_get_key_tree(regf, first_key, BLK_SIZE(first_key)); - - assert(regf->root != NULL); - - return 1; -} - -/* - * Main code from here on ... - */ - -/* - * key print function here ... - */ - -int print_key(const char *path, char *name, char *class_name, int root, - int terminal, int vals) -{ - - if (terminal) fprintf(stdout, "%s\\%s\n", path, name); - - return 1; -} - -/* - * Sec Desc print functions - */ - -void print_sid(DOM_SID *sid) -{ - int i, comps = sid->auths; - fprintf(stdout, "S-%u-%u", sid->ver, sid->auth[5]); - - for (i = 0; i < comps; i++) { - - fprintf(stdout, "-%u", sid->sub_auths[i]); - - } - fprintf(stdout, "\n"); -} - -int print_sec(SEC_DESC *sec_desc) -{ - - fprintf(stdout, " SECURITY\n"); - fprintf(stdout, " Owner: "); - print_sid(sec_desc->owner); - fprintf(stdout, " Group: "); - print_sid(sec_desc->group); - return 1; -} - -/* - * Value print function here ... - */ -int print_val(const char *path, char *val_name, int val_type, int data_len, - void *data_blk, int terminal, int first, int last) -{ - char data_asc[1024]; - - bzero(data_asc, sizeof(data_asc)); - if (!terminal && first) - fprintf(stdout, "%s\n", path); - data_to_ascii((unsigned char *)data_blk, data_len, val_type, data_asc, - sizeof(data_asc) - 1); - fprintf(stdout, " %s : %s : %s\n", (val_name?val_name:""), - val_to_str(val_type, reg_type_names), data_asc); - return 1; -} - -void usage(void) -{ - fprintf(stderr, "Usage: editreg [-v] [-k] \n"); - fprintf(stderr, "Version: 0.1\n\n"); - fprintf(stderr, "\n\t-v\t sets verbose mode"); -} - -int main(int argc, char *argv[]) -{ - REGF *regf; - extern char *optarg; - extern int optind; - int opt; - - if (argc < 2) { - usage(); - exit(1); - } - - /* - * Now, process the arguments - */ - - while ((opt = getopt(argc, argv, "vk")) != EOF) { - switch (opt) { - case 'v': - verbose++; - break; - - case 'k': - break; - - default: - usage(); - exit(1); - break; - } - } - - if ((regf = nt_create_regf()) == NULL) { - fprintf(stderr, "Could not create registry object: %s\n", strerror(errno)); - exit(2); - } - - if (!nt_set_regf_input_file(regf, argv[optind])) { - fprintf(stderr, "Could not set name of registry file: %s, %s\n", - argv[1], strerror(errno)); - exit(3); - } - - /* Now, open it, and bring it into memory :-) */ - - if (nt_load_registry(regf) < 0) { - fprintf(stderr, "Could not load registry: %s\n", argv[1]); - exit(4); - } - - /* - * At this point, we should have a registry in memory and should be able - * to iterate over it. - */ - - nt_key_iterator(regf, regf->root, 0, "", print_key, print_sec, print_val); - return 0; -} - diff --git a/source/utils/net_ads.c b/source/utils/net_ads.c index 867252c95f2..29abc33fdf5 100644 --- a/source/utils/net_ads.c +++ b/source/utils/net_ads.c @@ -308,18 +308,12 @@ static int ads_user_info(int argc, const char **argv) const char *attrs[] = {"memberOf", NULL}; char *searchstring=NULL; char **grouplist; - char *escaped_user = escape_ldap_string_alloc(argv[0]); if (argc < 1) return net_ads_user_usage(argc, argv); if (!(ads = ads_startup())) return -1; - if (!escaped_user) { - d_printf("ads_user_info: failed to escape user %s\n", argv[0]); - return -1; - } - - asprintf(&searchstring, "(sAMAccountName=%s)", escaped_user); + asprintf(&searchstring, "(sAMAccountName=%s)", argv[0]); rc = ads_search(ads, &res, searchstring, attrs); safe_free(searchstring); diff --git a/source/utils/pdbedit.c b/source/utils/pdbedit.c index cd4cdfddb46..09493f9a89f 100644 --- a/source/utils/pdbedit.c +++ b/source/utils/pdbedit.c @@ -517,9 +517,6 @@ int main (int argc, char **argv) exit(1); } - if(lp_modules()) - smb_load_modules(lp_modules()); - if (!init_names()) exit(1); diff --git a/source/utils/smbcontrol.c b/source/utils/smbcontrol.c index d622edd69fd..8b5909e77a2 100644 --- a/source/utils/smbcontrol.c +++ b/source/utils/smbcontrol.c @@ -133,9 +133,12 @@ Prints out the current Debug level returned by MSG_DEBUGLEVEL void debuglevel_function(int msg_type, pid_t src, void *buf, size_t len) { const char *levels = (char *)buf; + pstring dbgcl; printf("Current debug levels of PID %u are:\n",(unsigned int)src); - printf("%s\n", levels); + + while(next_token(&levels, dbgcl, " ", sizeof(pstring))) + printf("%s\n", dbgcl); got_level = True; }