From c219878ac24e049d11ced046da5f9e8df8280a33 Mon Sep 17 00:00:00 2001 From: xPaw Date: Sun, 3 Aug 2014 22:26:54 +0300 Subject: [PATCH 01/71] Remove XS__LIBRELEASE and tabs so docgen can catch the stocks --- plugins/include/xs.inc | 1893 ++++++++++++++++++++-------------------- 1 file changed, 939 insertions(+), 954 deletions(-) diff --git a/plugins/include/xs.inc b/plugins/include/xs.inc index e7f3c6fb..12594c5e 100755 --- a/plugins/include/xs.inc +++ b/plugins/include/xs.inc @@ -101,1043 +101,1028 @@ #define XS_REPLACEBUF_SIZE 3072 #endif -// Turn on for release -#define XS__LIBRELEASE 1 - -#if XS__LIBRELEASE - #define XS_LIBFUNC_ATTRIB stock -#else - #define XS_LIBFUNC_ATTRIB -#endif -#if XS__LIBRELEASE - #define XS_LIBVAR_ATTRIB stock -#else - #define XS_LIBVAR_ATTRIB new -#endif - /****** DEBUGGING / LOGING FUNCTIONS ******/ - enum xs_logtypes - { - xs_debug, - xs_message, - xs_warning, - xs_error, - xs_fatalerror, - xs__assertionfailed, - - // must come last - xs_logtypes_count - } +enum xs_logtypes +{ + xs_debug, + xs_message, + xs_warning, + xs_error, + xs_fatalerror, + xs__assertionfailed, - XS_LIBVAR_ATTRIB const xs__logtypenames[xs_logtypes_count][] = {"DEBUG", "", "WARNING", "ERROR", "FATAL ERROR", "DEBUG ASSERTION FAILED"}; + // must come last + xs_logtypes_count +} + +stock const xs__logtypenames[xs_logtypes_count][] = {"DEBUG", "", "WARNING", "ERROR", "FATAL ERROR", "DEBUG ASSERTION FAILED"}; + +// tested +stock xs_log(xs_logtypes:logtype, {Float,_}:...) +{ + // WARNING: Don't try to use assert in here; it uses this func - // tested - XS_LIBFUNC_ATTRIB xs_log(xs_logtypes:logtype, {Float,_}:...) - { - // WARNING: Don't try to use assert in here; it uses this func - - // Don't log debug if not in debug mode - #if !XS_DEBUG - if (logtype == xs_debug) - return; - #endif - - new buffer[XS_LOGBUFFER_SIZE+1]; - buffer[XS_LOGBUFFER_SIZE]=0; - format_args(buffer, XS_LOGBUFFER_SIZE, 1 /* go from SECOND argument*/); - new bool:addLogTypeName = strlen(xs__logtypenames[logtype]) ? true : false; - - // Use AMXX's logging system - log_amx("%s%s%s", addLogTypeName ? xs__logtypenames[logtype] : "", - addLogTypeName ? ": " : "", buffer); - } - - // Assertion - // tested - XS_LIBFUNC_ATTRIB xs_assertfunc({Float,_}:exp, const desc[]) - { - // Check exp - if (exp) - return 1; // ok - - // not ok - - // print info - xs_log(xs__assertionfailed, "%s", desc); - - return 0; - } - #define xs_assert(%1,%2) if (!xs_assertfunc(%1,%2)) xs__global_null /= xs__global_null - - - // Assertion; only in debug mode - // untested; logical flow says it should work - #if XS_DEBUG - #define xs_assert_dbg(%1,%2) if (!xs_assertfunc(%1,%2)) xs__global_null /= xs__global_null - #else - #define xs_assert_dbg(%1,%2) + // Don't log debug if not in debug mode + #if !XS_DEBUG + if (logtype == xs_debug) + return; #endif - new xs__global_null = 0; + new buffer[XS_LOGBUFFER_SIZE+1]; + buffer[XS_LOGBUFFER_SIZE]=0; + format_args(buffer, XS_LOGBUFFER_SIZE, 1 /* go from SECOND argument*/); + new bool:addLogTypeName = strlen(xs__logtypenames[logtype]) ? true : false; + // Use AMXX's logging system + log_amx("%s%s%s", addLogTypeName ? xs__logtypenames[logtype] : "", + addLogTypeName ? ": " : "", buffer); +} + +// Assertion +// tested +stock xs_assertfunc({Float,_}:exp, const desc[]) +{ + // Check exp + if (exp) + return 1; // ok + + // not ok + + // print info + xs_log(xs__assertionfailed, "%s", desc); + + return 0; +} +#define xs_assert(%1,%2) if (!xs_assertfunc(%1,%2)) xs__global_null /= xs__global_null + + +// Assertion; only in debug mode +// untested; logical flow says it should work +#if XS_DEBUG + #define xs_assert_dbg(%1,%2) if (!xs_assertfunc(%1,%2)) xs__global_null /= xs__global_null +#else + #define xs_assert_dbg(%1,%2) +#endif + +new xs__global_null = 0; + /****** MATH FUNCTIONS ******/ - /****** BASIC STUFF ******/ - - // Returns -1 if num is negative, 0 if num is 0, 1 if num is positive - // tested - XS_LIBFUNC_ATTRIB xs_sign(num) - { - return (num < 0) ? -1 : ((num == 0) ? 0 : 1); - } - - // Returns -1 if num is negative, 0 if num is 0, 1 if num is positive - // tested - XS_LIBFUNC_ATTRIB xs_fsign(Float:num) - { - return (num < 0.0) ? -1 : ((num == 0.0) ? 0 : 1); - } - - // Returns absolute value - // tested - XS_LIBFUNC_ATTRIB xs_abs(num) - { - return (num < 0) ? -num : num; - } - - // is power of 2? (== can be expressed as 1<= ((%2) - XS_FLEQ_TOLERANCE))) +/****** BASIC STUFF ******/ - // 1/sqrt - // tested - XS_LIBFUNC_ATTRIB Float:xs_rsqrt(Float:x) - { - return 1.0 / floatsqroot(x); - } - - // sqrt - // tested - XS_LIBFUNC_ATTRIB Float:xs_sqrt(Float:x) - { - return floatsqroot(x); - } - - // These functions generate errors if you use the macros with wrong parameter count. - stock Float:xs_fabs(Float:pa) - { - #pragma unused pa - new rawr = you_need_one_param_for_fabs; - rawr = warning_below_shows_line_number; - #pragma unused rawr - } - stock Float:xs_asin(Float:pa,Float:pb) - { - #pragma unused pa,pb - new rawr = you_need_two_params_for_asin; - rawr = warning_below_shows_line_number; - #pragma unused rawr - } - stock Float:xs_sin(Float:pa,Float:pb) - { - #pragma unused pa,pb - new rawr = you_need_two_params_for_sin; - #pragma unused rawr - } - stock Float:xs_acos(Float:pa,Float:pb) - { - #pragma unused pa,pb - new rawr = you_need_two_params_for_acos; - rawr = warning_below_shows_line_number; - #pragma unused rawr - } - stock Float:xs_cos(Float:pa,Float:pb) - { - #pragma unused pa,pb - new rawr = you_need_two_params_for_cos; - rawr = warning_below_shows_line_number; - #pragma unused rawr - } - stock Float:xs_atan(Float:pa,Float:pb) - { - #pragma unused pa,pb - new rawr = you_need_two_params_for_atan; - rawr = warning_below_shows_line_number; - #pragma unused rawr - } - stock Float:xs_atan2(Float:pa,Float:pb) - { - #pragma unused pa,pb - new rawr = you_need_two_params_for_atan2; - rawr = warning_below_shows_line_number; - #pragma unused rawr - } - stock Float:xs_tan(Float:pa, Float:pb) - { - #pragma unused pa,pb - new rawr = you_need_two_params_for_tan; - rawr = warning_below_shows_line_number; - #pragma unused rawr - } - - #define xs_fabs(%1) floatabs(%1) - #define xs_asin(%1,%2) floatasin(%1, %2) - #define xs_sin(%1,%2) floatsin(%1, %2) - #define xs_acos(%1,%2) floatacos(%1, %2) - #define xs_cos(%1,%2) floatcos(%1, %2) - #define xs_atan(%1,%2) floatatan(%1, %2) - #define xs_atan2(%1,%2) floatatan2(%1, %2) - #define xs_tan(%1,%2) floattan(%1, %2) - - /****** RANDOM NUMBERS ******/ - // This routine comes from the book "Inner Loops" by Rick Booth, Addison-Wesley - // (ISBN 0-201-47960-5). This is a "multiplicative congruential random number - // generator" that has been extended to 31-bits - - XS_LIBVAR_ATTRIB xs__internalseed=0x546875; - - #define XS__IL_RMULT 1103515245 - - // tested - XS_LIBFUNC_ATTRIB xs_seed(seed) - { - xs__internalseed = seed; - } - - // tested - XS_LIBFUNC_ATTRIB xs_irand() - { - new lo, hi, ll, lh, hh, hl; - new result; - - lo = xs__internalseed & 0xffff; - hi = xs__internalseed >> 16; - xs__internalseed = xs__internalseed * XS__IL_RMULT + 12345; - ll = lo * (XS__IL_RMULT & 0xffff); - lh = lo * (XS__IL_RMULT >> 16 ); - hl = hi * (XS__IL_RMULT & 0xffff); - hh = hi * (XS__IL_RMULT >> 16 ); - result = xs_abs(((ll + 12345) >> 16) + lh + hl + (hh << 16)); - return result; - } - - // tested - XS_LIBFUNC_ATTRIB Float:xs_frand() - { - return float(xs_irand()) / float(xs_get_maxnum()); // -1/2 should be the biggest possible positive number - } - - // tested - XS_LIBFUNC_ATTRIB xs_irand_range(pmin, pmax) - { - xs_assert_dbg(pmax - pmin >= 0, "xs_irand_range: pmin > pmax"); - new i = pmin + floatround(xs_frand() * float(pmax - pmin)); - if (i > pmax) - i = pmax; - return i; - } - - /****** VECTORS & PLANES ******/ +// Returns -1 if num is negative, 0 if num is 0, 1 if num is positive +// tested +stock xs_sign(num) +{ + return (num < 0) ? -1 : ((num == 0) ? 0 : 1); +} - // *** vectors +// Returns -1 if num is negative, 0 if num is 0, 1 if num is positive +// tested +stock xs_fsign(Float:num) +{ + return (num < 0.0) ? -1 : ((num == 0.0) ? 0 : 1); +} + +// Returns absolute value +// tested +stock xs_abs(num) +{ + return (num < 0) ? -num : num; +} + +// is power of 2? (== can be expressed as 1<= ((%2) - XS_FLEQ_TOLERANCE))) + +// 1/sqrt +// tested +stock Float:xs_rsqrt(Float:x) +{ + return 1.0 / floatsqroot(x); +} + +// sqrt +// tested +stock Float:xs_sqrt(Float:x) +{ + return floatsqroot(x); +} + +// These functions generate errors if you use the macros with wrong parameter count. +stock Float:xs_fabs(Float:pa) +{ + #pragma unused pa + new rawr = you_need_one_param_for_fabs; + rawr = warning_below_shows_line_number; + #pragma unused rawr +} +stock Float:xs_asin(Float:pa,Float:pb) +{ + #pragma unused pa,pb + new rawr = you_need_two_params_for_asin; + rawr = warning_below_shows_line_number; + #pragma unused rawr +} +stock Float:xs_sin(Float:pa,Float:pb) +{ + #pragma unused pa,pb + new rawr = you_need_two_params_for_sin; + #pragma unused rawr +} +stock Float:xs_acos(Float:pa,Float:pb) +{ + #pragma unused pa,pb + new rawr = you_need_two_params_for_acos; + rawr = warning_below_shows_line_number; + #pragma unused rawr +} +stock Float:xs_cos(Float:pa,Float:pb) +{ + #pragma unused pa,pb + new rawr = you_need_two_params_for_cos; + rawr = warning_below_shows_line_number; + #pragma unused rawr +} +stock Float:xs_atan(Float:pa,Float:pb) +{ + #pragma unused pa,pb + new rawr = you_need_two_params_for_atan; + rawr = warning_below_shows_line_number; + #pragma unused rawr +} +stock Float:xs_atan2(Float:pa,Float:pb) +{ + #pragma unused pa,pb + new rawr = you_need_two_params_for_atan2; + rawr = warning_below_shows_line_number; + #pragma unused rawr +} +stock Float:xs_tan(Float:pa, Float:pb) +{ + #pragma unused pa,pb + new rawr = you_need_two_params_for_tan; + rawr = warning_below_shows_line_number; + #pragma unused rawr +} + +#define xs_fabs(%1) floatabs(%1) +#define xs_asin(%1,%2) floatasin(%1, %2) +#define xs_sin(%1,%2) floatsin(%1, %2) +#define xs_acos(%1,%2) floatacos(%1, %2) +#define xs_cos(%1,%2) floatcos(%1, %2) +#define xs_atan(%1,%2) floatatan(%1, %2) +#define xs_atan2(%1,%2) floatatan2(%1, %2) +#define xs_tan(%1,%2) floattan(%1, %2) + +/****** RANDOM NUMBERS ******/ +// This routine comes from the book "Inner Loops" by Rick Booth, Addison-Wesley +// (ISBN 0-201-47960-5). This is a "multiplicative congruential random number +// generator" that has been extended to 31-bits + +stock xs__internalseed=0x546875; + +#define XS__IL_RMULT 1103515245 + +// tested +stock xs_seed(seed) +{ + xs__internalseed = seed; +} + +// tested +stock xs_irand() +{ + new lo, hi, ll, lh, hh, hl; + new result; - // Set vec components to values - // tested - XS_LIBFUNC_ATTRIB xs_vec_set(Float:vec[], Float:x, Float:y, Float:z) - { - vec[0] = x; - vec[1] = y; - vec[2] = z; - } + lo = xs__internalseed & 0xffff; + hi = xs__internalseed >> 16; + xs__internalseed = xs__internalseed * XS__IL_RMULT + 12345; + ll = lo * (XS__IL_RMULT & 0xffff); + lh = lo * (XS__IL_RMULT >> 16 ); + hl = hi * (XS__IL_RMULT & 0xffff); + hh = hi * (XS__IL_RMULT >> 16 ); + result = xs_abs(((ll + 12345) >> 16) + lh + hl + (hh << 16)); + return result; +} + +// tested +stock Float:xs_frand() +{ + return float(xs_irand()) / float(xs_get_maxnum()); // -1/2 should be the biggest possible positive number +} + +// tested +stock xs_irand_range(pmin, pmax) +{ + xs_assert_dbg(pmax - pmin >= 0, "xs_irand_range: pmin > pmax"); + new i = pmin + floatround(xs_frand() * float(pmax - pmin)); + if (i > pmax) + i = pmax; + return i; +} + +/****** VECTORS & PLANES ******/ + +// *** vectors + +// Set vec components to values +// tested +stock xs_vec_set(Float:vec[], Float:x, Float:y, Float:z) +{ + vec[0] = x; + vec[1] = y; + vec[2] = z; +} + +// Add vec +// tested +stock xs_vec_add(const Float:in1[], const Float:in2[], Float:out[]) +{ + out[0] = in1[0] + in2[0]; + out[1] = in1[1] + in2[1]; + out[2] = in1[2] + in2[2]; +} + +// Subtract vec +// untested, but should work +stock xs_vec_sub(const Float:in1[], const Float:in2[], Float:out[]) +{ + out[0] = in1[0] - in2[0]; + out[1] = in1[1] - in2[1]; + out[2] = in1[2] - in2[2]; +} + +// Are vectors equal? +// untested, but should work +stock bool:xs_vec_equal(const Float:vec1[], const Float:vec2[]) +{ + return (vec1[0] == vec2[0]) && (vec1[1] == vec2[1]) && (vec1[2] == vec2[2]); +} + +// Are vectors nearly equal? +// tested +stock bool:xs_vec_nearlyequal(const Float:vec1[], const Float:vec2[]) +{ + return XS_FLEQ(vec1[0], vec2[0]) && XS_FLEQ(vec1[1], vec2[1]) && XS_FLEQ(vec1[2], vec2[2]); +} + +// multiply vector by scalar +// tested +stock xs_vec_mul_scalar(const Float:vec[], Float:scalar, Float:out[]) +{ + out[0] = vec[0] * scalar; + out[1] = vec[1] * scalar; + out[2] = vec[2] * scalar; +} + +// divide vector by scalar +// untested, but should work +stock xs_vec_div_scalar(const Float:vec[], Float:scalar, Float:out[]) +{ + new Float:__tmp = 1.0 / scalar; + out[0] = vec[0] * __tmp; + out[1] = vec[1] * __tmp; + out[2] = vec[2] * __tmp; +} + +// Compute vector length +// tested +stock Float:xs_vec_len(const Float:vec[]) +{ + return xs_sqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2]); +} + +// Normalize vec +// tested +stock xs_vec_normalize(const Float:vec[], Float:out[]) +{ + new Float:invlen = xs_rsqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2]); + out[0] = vec[0] * invlen; + out[1] = vec[1] * invlen; + out[2] = vec[2] * invlen; +} + +// Store the cross product of vec1 and vec2 in out +// tested +stock xs_vec_cross(const Float:vec1[], const Float:vec2[], Float:out[]) +{ + out[0] = vec1[1]*vec2[2] - vec1[2]*vec2[1]; + out[1] = vec1[2]*vec2[0] - vec1[0]*vec2[2]; + out[2] = vec1[0]*vec2[1] - vec1[1]*vec2[0]; +} + +// Compute vec1 dot vec2 +// tested +stock Float:xs_vec_dot(const Float:vec1[], const Float:vec2[]) +{ + return vec1[0]*vec2[0] + vec1[1]*vec2[1] + vec1[2]*vec2[2]; +} + +// Negate vec into out +// untested, but should work +stock xs_vec_neg(const Float:vec[], Float:out[]) +{ + out[0] = -vec[0]; + out[1] = -vec[1]; + out[2] = -vec[2]; +} + +// Copy vec +// untested, but should work +stock xs_vec_copy(const Float:vecIn[], Float:vecOut[]) +{ + vecOut[0] = vecIn[0]; + vecOut[1] = vecIn[1]; + vecOut[2] = vecIn[2]; +} + +// Compute angle between vec1 and vec2 +// tested +stock Float:xs_vec_angle(const Float:vec1[], const Float:vec2[]) +{ + return xs_rad2deg(xs_acos(xs_vec_dot(vec1, vec2), radian)); +} + +// Reflect vec about normal +// untested +stock xs_vec_reflect(const Float:vec[], const Float:normal[], Float:out[]) +{ + // normalize(vec) - (normal * 2.0 * (tmp . normal)) * length(vec) - // Add vec - // tested - XS_LIBFUNC_ATTRIB xs_vec_add(const Float:in1[], const Float:in2[], Float:out[]) - { - out[0] = in1[0] + in2[0]; - out[1] = in1[1] + in2[1]; - out[2] = in1[2] + in2[2]; - } + new Float:tmp1[3]; + xs_vec_normalize(vec, tmp1); - // Subtract vec - // untested, but should work - XS_LIBFUNC_ATTRIB xs_vec_sub(const Float:in1[], const Float:in2[], Float:out[]) - { - out[0] = in1[0] - in2[0]; - out[1] = in1[1] - in2[1]; - out[2] = in1[2] - in2[2]; - } + // tmp1 - (normal * 2.0 * (tmp . normal)) * length(vec) - // Are vectors equal? - // untested, but should work - XS_LIBFUNC_ATTRIB bool:xs_vec_equal(const Float:vec1[], const Float:vec2[]) - { - return (vec1[0] == vec2[0]) && (vec1[1] == vec2[1]) && (vec1[2] == vec2[2]); - } + new Float:tmp2[3]; + xs_vec_mul_scalar(normal, 2.0, tmp2); + xs_vec_mul_scalar(tmp2, xs_vec_dot(tmp1, normal), tmp2); - // Are vectors nearly equal? - // tested - XS_LIBFUNC_ATTRIB bool:xs_vec_nearlyequal(const Float:vec1[], const Float:vec2[]) - { - return XS_FLEQ(vec1[0], vec2[0]) && XS_FLEQ(vec1[1], vec2[1]) && XS_FLEQ(vec1[2], vec2[2]); - } + // tmp1 - tmp2 * length(vec) + xs_vec_mul_scalar(tmp2, xs_vec_len(vec), tmp2); - // multiply vector by scalar - // tested - XS_LIBFUNC_ATTRIB xs_vec_mul_scalar(const Float:vec[], Float:scalar, Float:out[]) - { - out[0] = vec[0] * scalar; - out[1] = vec[1] * scalar; - out[2] = vec[2] * scalar; - } - - // divide vector by scalar - // untested, but should work - XS_LIBFUNC_ATTRIB xs_vec_div_scalar(const Float:vec[], Float:scalar, Float:out[]) - { - new Float:__tmp = 1.0 / scalar; - out[0] = vec[0] * __tmp; - out[1] = vec[1] * __tmp; - out[2] = vec[2] * __tmp; - } - - // Compute vector length - // tested - XS_LIBFUNC_ATTRIB Float:xs_vec_len(const Float:vec[]) - { - return xs_sqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2]); - } - - // Normalize vec - // tested - XS_LIBFUNC_ATTRIB xs_vec_normalize(const Float:vec[], Float:out[]) - { - new Float:invlen = xs_rsqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2]); - out[0] = vec[0] * invlen; - out[1] = vec[1] * invlen; - out[2] = vec[2] * invlen; - } - - // Store the cross product of vec1 and vec2 in out - // tested - XS_LIBFUNC_ATTRIB xs_vec_cross(const Float:vec1[], const Float:vec2[], Float:out[]) - { - out[0] = vec1[1]*vec2[2] - vec1[2]*vec2[1]; - out[1] = vec1[2]*vec2[0] - vec1[0]*vec2[2]; - out[2] = vec1[0]*vec2[1] - vec1[1]*vec2[0]; - } - - // Compute vec1 dot vec2 - // tested - XS_LIBFUNC_ATTRIB Float:xs_vec_dot(const Float:vec1[], const Float:vec2[]) - { - return vec1[0]*vec2[0] + vec1[1]*vec2[1] + vec1[2]*vec2[2]; - } - - // Negate vec into out - // untested, but should work - XS_LIBFUNC_ATTRIB xs_vec_neg(const Float:vec[], Float:out[]) - { - out[0] = -vec[0]; - out[1] = -vec[1]; - out[2] = -vec[2]; - } - - // Copy vec - // untested, but should work - XS_LIBFUNC_ATTRIB xs_vec_copy(const Float:vecIn[], Float:vecOut[]) - { - vecOut[0] = vecIn[0]; - vecOut[1] = vecIn[1]; - vecOut[2] = vecIn[2]; - } - - // Compute angle between vec1 and vec2 - // tested - XS_LIBFUNC_ATTRIB Float:xs_vec_angle(const Float:vec1[], const Float:vec2[]) - { - return xs_rad2deg(xs_acos(xs_vec_dot(vec1, vec2), radian)); - } - - // Reflect vec about normal - // untested - XS_LIBFUNC_ATTRIB xs_vec_reflect(const Float:vec[], const Float:normal[], Float:out[]) - { - // normalize(vec) - (normal * 2.0 * (tmp . normal)) * length(vec) - - new Float:tmp1[3]; - xs_vec_normalize(vec, tmp1); - - // tmp1 - (normal * 2.0 * (tmp . normal)) * length(vec) - - new Float:tmp2[3]; - xs_vec_mul_scalar(normal, 2.0, tmp2); - xs_vec_mul_scalar(tmp2, xs_vec_dot(tmp1, normal), tmp2); - - // tmp1 - tmp2 * length(vec) - xs_vec_mul_scalar(tmp2, xs_vec_len(vec), tmp2); - - // tmp1 - tmp2 - xs_vec_sub(tmp1, tmp2, out); - } - - // Turn a 3D vector into a 2D vector - XS_LIBFUNC_ATTRIB xs_vec_make2d(const Float:vec[3], Float:out[2]) - { - out[0] = vec[0]; - out[1] = vec[1]; - } - - // *** planes - - // normal - #define XS_PLANE_A 0 - #define XS_PLANE_B 1 - #define XS_PLANE_C 2 - // plane shift distance - #define XS_PLANE_D 3 + // tmp1 - tmp2 + xs_vec_sub(tmp1, tmp2, out); +} + +// Turn a 3D vector into a 2D vector +stock xs_vec_make2d(const Float:vec[3], Float:out[2]) +{ + out[0] = vec[0]; + out[1] = vec[1]; +} + +// *** planes + +// normal +#define XS_PLANE_A 0 +#define XS_PLANE_B 1 +#define XS_PLANE_C 2 +// plane shift distance +#define XS_PLANE_D 3 - // Set a plane to specific values - // tested - XS_LIBFUNC_ATTRIB xs_plane_set(Float:plane[], Float:a, Float:b, Float:c, Float:d) - { - plane[XS_PLANE_A] = a; - plane[XS_PLANE_B] = b; - plane[XS_PLANE_C] = c; - plane[XS_PLANE_D] = d; - } +// Set a plane to specific values +// tested +stock xs_plane_set(Float:plane[], Float:a, Float:b, Float:c, Float:d) +{ + plane[XS_PLANE_A] = a; + plane[XS_PLANE_B] = b; + plane[XS_PLANE_C] = c; + plane[XS_PLANE_D] = d; +} + +// Construct a plane out of 3 points +// tested +stock xs_plane_3p(Float:plane[], const Float:p1[], const Float:p2[], const Float:p3[]) +{ + new Float:normalA[3], Float:normalB[3]; - // Construct a plane out of 3 points - // tested - XS_LIBFUNC_ATTRIB xs_plane_3p(Float:plane[], const Float:p1[], const Float:p2[], const Float:p3[]) - { - new Float:normalA[3], Float:normalB[3]; - - // normalA = Normalize(p3 - p1); - normalA[0] = p3[0] - p1[0]; - normalA[1] = p3[1] - p1[1]; - normalA[2] = p3[2] - p1[2]; - xs_vec_normalize(normalA, normalA); - - // normalB = Normalize(p3 - p2); - normalB[0] = p3[0] - p2[0]; - normalB[1] = p3[1] - p2[1]; - normalB[2] = p3[2] - p2[2]; - xs_vec_normalize(normalB, normalB); - - // plane normal = Normalize(normalA cross normalB) - xs_vec_cross(normalA, normalB, plane); - xs_vec_normalize(plane, plane); - - // plane shift distance = (-p1) dot plane normal - new Float:__tmp[3]; - xs_vec_neg(plane, __tmp); - plane[XS_PLANE_D] = xs_vec_dot(__tmp, p1); - - } + // normalA = Normalize(p3 - p1); + normalA[0] = p3[0] - p1[0]; + normalA[1] = p3[1] - p1[1]; + normalA[2] = p3[2] - p1[2]; + xs_vec_normalize(normalA, normalA); - // untested, but should work - XS_LIBFUNC_ATTRIB bool:xs_plane_equal(const Float:plane1[], const Float:plane2[]) - { - if ( (plane1[0] == plane2[0]) && - (plane1[1] == plane2[1]) && - (plane1[2] == plane2[2]) && - (plane1[3] == plane2[3])) - return true; - return false; - } + // normalB = Normalize(p3 - p2); + normalB[0] = p3[0] - p2[0]; + normalB[1] = p3[1] - p2[1]; + normalB[2] = p3[2] - p2[2]; + xs_vec_normalize(normalB, normalB); - // untested, but should work - XS_LIBFUNC_ATTRIB bool:xs_plane_nearlyequal(const Float:plane1[], const Float:plane2[]) - { - if ( XS_FLEQ(plane1[0], plane2[0]) && - XS_FLEQ(plane1[1], plane2[1]) && - XS_FLEQ(plane1[2], plane2[2]) && - XS_FLEQ(plane1[3], plane2[3])) - return true; - return false; - } + // plane normal = Normalize(normalA cross normalB) + xs_vec_cross(normalA, normalB, plane); + xs_vec_normalize(plane, plane); - // Compute distance between plane and point - // tested - XS_LIBFUNC_ATTRIB Float:xs_plane_dst2point(const Float:plane[], const Float:point[]) - { - // return normal dot point + D - return xs_vec_dot(plane, point) + plane[XS_PLANE_D]; - } + // plane shift distance = (-p1) dot plane normal + new Float:__tmp[3]; + xs_vec_neg(plane, __tmp); + plane[XS_PLANE_D] = xs_vec_dot(__tmp, p1); - // Checks whether plane intersects with the ray starting and rayStart and going to rayDir direction. - // If yes, returns true and sets out to the intersection point - // Otherwise, returns false - // tested - XS_LIBFUNC_ATTRIB bool:xs_plane_rayintersect(const Float:plane[], const Float:rayStart[], const Float:rayDir[], Float:out[]) - { - new Float:a = xs_vec_dot(plane, rayDir); - - if (a == 0.0) - return false; // ray is parallel to plane - - // if (distance plane<->(rayStart + rayDir) > distance plane<->rayStart) and both have the same sign, the ray - // goes away from the plane - new Float:rsplusrd[3]; - xs_vec_add(rayStart, rayDir, rsplusrd); - new Float:dst1 = xs_plane_dst2point(plane, rsplusrd); - new Float:dst2 = xs_plane_dst2point(plane, rayStart); - if (xs_fabs(dst1) > xs_fabs(dst2) && xs_fsign(dst1) == xs_fsign(dst2)) - return false; - - - // out = rayStart - rayDir * ((distance plane<->rayStart) / a) - new Float:__tmp[3]; - xs_vec_mul_scalar(rayDir, xs_plane_dst2point(plane, rayStart) / a, __tmp); - // out = rayStart - tmp - xs_vec_sub(rayStart, __tmp, out); - +} + +// untested, but should work +stock bool:xs_plane_equal(const Float:plane1[], const Float:plane2[]) +{ + if ( (plane1[0] == plane2[0]) && + (plane1[1] == plane2[1]) && + (plane1[2] == plane2[2]) && + (plane1[3] == plane2[3])) return true; - } - - // Is point on plane? - // tested - XS_LIBFUNC_ATTRIB bool:xs_point_onplane(const Float:plane[], const Float:point[]) - { - return XS_FLEQ(xs_plane_dst2point(plane, point), 0.0); - } - - // Project point on plane - // tested - XS_LIBFUNC_ATTRIB xs_projpoint_onplane(const Float:plane[], const Float:point[], Float:out[]) - { - new Float:__tmp[3]; - // out = point - (plane normal * distance point<->plane) - xs_vec_copy(plane, __tmp); - xs_vec_mul_scalar(__tmp, xs_plane_dst2point(plane, point), __tmp); - xs_vec_sub(point, __tmp, out); - } - - // Copy plane - // untested, but should work - XS_LIBFUNC_ATTRIB xs_plane_copy(const Float:planeIn[], Float:planeOut[]) - { - planeOut[0] = planeIn[0]; - planeOut[1] = planeIn[1]; - planeOut[2] = planeIn[2]; - planeOut[3] = planeIn[3]; - } + return false; +} - /****** HL ENGINE SPECIFIC STUFF ******/ - // Compute forward, right and up vector from angles - // half-tested - - // angle indexes - #define XS_PITCH 0 // up / down - #define XS_YAW 1 // left / right - #define XS_ROLL 2 // fall over +// untested, but should work +stock bool:xs_plane_nearlyequal(const Float:plane1[], const Float:plane2[]) +{ + if ( XS_FLEQ(plane1[0], plane2[0]) && + XS_FLEQ(plane1[1], plane2[1]) && + XS_FLEQ(plane1[2], plane2[2]) && + XS_FLEQ(plane1[3], plane2[3])) + return true; + return false; +} - XS_LIBFUNC_ATTRIB xs_anglevectors(const Float:angles[3], Float:fwd[3], Float:right[3], Float:up[3]) - { - // sin (s) and cos (c) for yaw (y), pitch (p) and roll (r) - new Float:sr, Float:sp, Float:sy, Float:cr, Float:cp, Float:cy; - - sy = xs_sin(angles[XS_YAW], degrees); - cy = xs_cos(angles[XS_YAW], degrees); - sp = xs_sin(angles[XS_PITCH], degrees); - cp = xs_cos(angles[XS_PITCH], degrees); - sr = xs_sin(angles[XS_ROLL], degrees); - cr = xs_cos(angles[XS_ROLL], degrees); - - fwd[0] = cp*cy; - fwd[1] = cp*sy; - fwd[2] = -sp; - - right[0] = (-1*sr*sp*cy + -1*cr*-sy); - right[1] = (-1*sr*sp*sy + -1*cr*cy); - right[2] = -1*sr*cp; - - up[0] = (cr*sp*cy + -sr*-sy); - up[1] = (cr*sp*sy + -sr*cy); - up[2] = cr*cp; - } +// Compute distance between plane and point +// tested +stock Float:xs_plane_dst2point(const Float:plane[], const Float:point[]) +{ + // return normal dot point + D + return xs_vec_dot(plane, point) + plane[XS_PLANE_D]; +} + +// Checks whether plane intersects with the ray starting and rayStart and going to rayDir direction. +// If yes, returns true and sets out to the intersection point +// Otherwise, returns false +// tested +stock bool:xs_plane_rayintersect(const Float:plane[], const Float:rayStart[], const Float:rayDir[], Float:out[]) +{ + new Float:a = xs_vec_dot(plane, rayDir); + + if (a == 0.0) + return false; // ray is parallel to plane + + // if (distance plane<->(rayStart + rayDir) > distance plane<->rayStart) and both have the same sign, the ray + // goes away from the plane + new Float:rsplusrd[3]; + xs_vec_add(rayStart, rayDir, rsplusrd); + new Float:dst1 = xs_plane_dst2point(plane, rsplusrd); + new Float:dst2 = xs_plane_dst2point(plane, rayStart); + if (xs_fabs(dst1) > xs_fabs(dst2) && xs_fsign(dst1) == xs_fsign(dst2)) + return false; + + + // out = rayStart - rayDir * ((distance plane<->rayStart) / a) + new Float:__tmp[3]; + xs_vec_mul_scalar(rayDir, xs_plane_dst2point(plane, rayStart) / a, __tmp); + // out = rayStart - tmp + xs_vec_sub(rayStart, __tmp, out); + + return true; +} + +// Is point on plane? +// tested +stock bool:xs_point_onplane(const Float:plane[], const Float:point[]) +{ + return XS_FLEQ(xs_plane_dst2point(plane, point), 0.0); +} + +// Project point on plane +// tested +stock xs_projpoint_onplane(const Float:plane[], const Float:point[], Float:out[]) +{ + new Float:__tmp[3]; + // out = point - (plane normal * distance point<->plane) + xs_vec_copy(plane, __tmp); + xs_vec_mul_scalar(__tmp, xs_plane_dst2point(plane, point), __tmp); + xs_vec_sub(point, __tmp, out); +} + +// Copy plane +// untested, but should work +stock xs_plane_copy(const Float:planeIn[], Float:planeOut[]) +{ + planeOut[0] = planeIn[0]; + planeOut[1] = planeIn[1]; + planeOut[2] = planeIn[2]; + planeOut[3] = planeIn[3]; +} + +/****** HL ENGINE SPECIFIC STUFF ******/ +// Compute forward, right and up vector from angles +// half-tested + +// angle indexes +#define XS_PITCH 0 // up / down +#define XS_YAW 1 // left / right +#define XS_ROLL 2 // fall over + +stock xs_anglevectors(const Float:angles[3], Float:fwd[3], Float:right[3], Float:up[3]) +{ + // sin (s) and cos (c) for yaw (y), pitch (p) and roll (r) + new Float:sr, Float:sp, Float:sy, Float:cr, Float:cp, Float:cy; + + sy = xs_sin(angles[XS_YAW], degrees); + cy = xs_cos(angles[XS_YAW], degrees); + sp = xs_sin(angles[XS_PITCH], degrees); + cp = xs_cos(angles[XS_PITCH], degrees); + sr = xs_sin(angles[XS_ROLL], degrees); + cr = xs_cos(angles[XS_ROLL], degrees); + + fwd[0] = cp*cy; + fwd[1] = cp*sy; + fwd[2] = -sp; + + right[0] = (-1*sr*sp*cy + -1*cr*-sy); + right[1] = (-1*sr*sp*sy + -1*cr*cy); + right[2] = -1*sr*cp; + + up[0] = (cr*sp*cy + -sr*-sy); + up[1] = (cr*sp*sy + -sr*cy); + up[2] = cr*cp; +} /****** STRING FUNCS *******/ - // tested - XS_LIBFUNC_ATTRIB xs_strchr(const str[], chr) +// tested +stock xs_strchr(const str[], chr) +{ + for (new i = 0; str[i] != 0; ++i) { - for (new i = 0; str[i] != 0; ++i) - { - if (str[i] == chr) - return i; - } - return -1; + if (str[i] == chr) + return i; } + return -1; +} + +// by JGHG, adapted +// removes charstotrim number of charactes from stringtotrim's +// - beginning if fromleft is true +// - end if fromleft is false +// tested +stock xs_strtrim(stringtotrim[], charstotrim, bool:fromleft = true) +{ + if (charstotrim <= 0) + return; - // by JGHG, adapted - // removes charstotrim number of charactes from stringtotrim's - // - beginning if fromleft is true - // - end if fromleft is false - // tested - XS_LIBFUNC_ATTRIB xs_strtrim(stringtotrim[], charstotrim, bool:fromleft = true) + if (fromleft) { - if (charstotrim <= 0) - return; - - if (fromleft) - { - new maxlen = strlen(stringtotrim); - if (charstotrim > maxlen) - charstotrim = maxlen; + new maxlen = strlen(stringtotrim); + if (charstotrim > maxlen) + charstotrim = maxlen; - // In format, input and output regions can overlap - format(stringtotrim, maxlen, "%s", stringtotrim[charstotrim]); - } - else - { - new maxlen = strlen(stringtotrim) - charstotrim; - if (maxlen < 0) - maxlen = 0; - - // In format, input and output regions can overlap - format(stringtotrim, maxlen, "%s", stringtotrim); - } + // In format, input and output regions can overlap + format(stringtotrim, maxlen, "%s", stringtotrim[charstotrim]); } - - // by xeroblood, adapted - // copies characters from oldmsg to newmsg, starting at start and ending at end (_includes_ end). - // terminates newmsg with 0 - // if outlen is positive, it specifies the maximal number of characters to be copied. - // otherwise, assumes that newmsg is at least end-start+1 characters long. - // tested - XS_LIBFUNC_ATTRIB xs_strmid(const oldmsg[], newmsg[], start, end, outlen=-1) + else { - new len = strlen(oldmsg); - - if(start < 0) - start = 0; - - ++end; // Include end - - if(end <= start || end > len) - end = len; + new maxlen = strlen(stringtotrim) - charstotrim; + if (maxlen < 0) + maxlen = 0; - new j = 0, i = start; - for(; (i < end) && (outlen--);) - newmsg[j++] = oldmsg[i++]; - - newmsg[j] = 0; + // In format, input and output regions can overlap + format(stringtotrim, maxlen, "%s", stringtotrim); } - - // by xeroblood, adapted - // maxelems: maximal number of elements in output, elemsize: maximal size of one element - // tested - XS_LIBFUNC_ATTRIB xs_explode(const input[], output[][], delimiter, maxelems, elemsize) - { - new nIdx = 0; - new nLen = 0; +} - new copied = 0; - while(nLen < strlen(input) && nIdx < maxelems) +// by xeroblood, adapted +// copies characters from oldmsg to newmsg, starting at start and ending at end (_includes_ end). +// terminates newmsg with 0 +// if outlen is positive, it specifies the maximal number of characters to be copied. +// otherwise, assumes that newmsg is at least end-start+1 characters long. +// tested +stock xs_strmid(const oldmsg[], newmsg[], start, end, outlen=-1) +{ + new len = strlen(oldmsg); + + if(start < 0) + start = 0; + + ++end; // Include end + + if(end <= start || end > len) + end = len; + + new j = 0, i = start; + for(; (i < end) && (outlen--);) + newmsg[j++] = oldmsg[i++]; + + newmsg[j] = 0; +} + +// by xeroblood, adapted +// maxelems: maximal number of elements in output, elemsize: maximal size of one element +// tested +stock xs_explode(const input[], output[][], delimiter, maxelems, elemsize) +{ + new nIdx = 0; + new nLen = 0; + + new copied = 0; + while(nLen < strlen(input) && nIdx < maxelems) + { + copied = copyc(output[nIdx++], elemsize, input[nLen], delimiter); + if (copied == elemsize) { - copied = copyc(output[nIdx++], elemsize, input[nLen], delimiter); - if (copied == elemsize) + // maybe it got force-stopped because of maxsize + // so check whether we have to skip something + if (input[nLen + copied] != delimiter && input[nLen + copied] != 0) { - // maybe it got force-stopped because of maxsize - // so check whether we have to skip something - if (input[nLen + copied] != delimiter && input[nLen + copied] != 0) - { - new found = xs_strchr(input[nLen + copied], delimiter); - if (found == -1) - break; - copied += found; - } + new found = xs_strchr(input[nLen + copied], delimiter); + if (found == -1) + break; + copied += found; } - - nLen += copied + 1; // +1: skip delimiter - } - return nIdx; - } - - // returns number of cells written. - XS_LIBFUNC_ATTRIB xs_implode(output[], outsize, delimiter, const input[][], elemsnum) - { - new pos = 0; - new copied; - for (new i = 0; i < elemsnum; ++i) - { - copied = copy(output[pos], outsize - pos, input[i]); - pos += copied; - if (pos >= outsize) - return outsize; - // append delimiter - output[pos] = delimiter; - ++pos; - // last check - if (pos >= outsize) - return outsize; } - output[--pos] = 0; // The last char would be delimiter, so skip it. - return pos; + nLen += copied + 1; // +1: skip delimiter + } + return nIdx; +} + +// returns number of cells written. +stock xs_implode(output[], outsize, delimiter, const input[][], elemsnum) +{ + new pos = 0; + new copied; + for (new i = 0; i < elemsnum; ++i) + { + copied = copy(output[pos], outsize - pos, input[i]); + pos += copied; + if (pos >= outsize) + return outsize; + // append delimiter + output[pos] = delimiter; + ++pos; + // last check + if (pos >= outsize) + return outsize; } - - XS_LIBVAR_ATTRIB xs__replace_buf[XS_REPLACEBUF_SIZE]; - // Replace all occurencies of what in text with with - // Returns number of (also partially if trimmed by len) replaced items. - XS_LIBFUNC_ATTRIB xs_replace(text[], len, const what[], const with[]) + output[--pos] = 0; // The last char would be delimiter, so skip it. + return pos; +} + + +stock xs__replace_buf[XS_REPLACEBUF_SIZE]; +// Replace all occurencies of what in text with with +// Returns number of (also partially if trimmed by len) replaced items. +stock xs_replace(text[], len, const what[], const with[]) +{ + new occur = 0; + new i = 0; + new bufPos = 0; + new replaceLen = strlen(with); + new whatLen = strlen(what); + for (; text[i]; ++i) { - new occur = 0; - new i = 0; - new bufPos = 0; - new replaceLen = strlen(with); - new whatLen = strlen(what); - for (; text[i]; ++i) + if (text[i] == what[0]) { - if (text[i] == what[0]) + new posInWhat=0; + new j; + for (j = i; j-i < replaceLen && text[j]; ++j, ++posInWhat) { - new posInWhat=0; - new j; - for (j = i; j-i < replaceLen && text[j]; ++j, ++posInWhat) - { - if (text[j] != what[posInWhat]) - break; - } - if (whatLen == posInWhat) - { - for (new i2 = 0; i2 < replaceLen && bufPos < XS_REPLACEBUF_SIZE; ++i2) - xs__replace_buf[bufPos++] = with[i2]; - i = j - 1; - ++occur; - if (bufPos >= XS_REPLACEBUF_SIZE) - return occur; - continue; - } + if (text[j] != what[posInWhat]) + break; + } + if (whatLen == posInWhat) + { + for (new i2 = 0; i2 < replaceLen && bufPos < XS_REPLACEBUF_SIZE; ++i2) + xs__replace_buf[bufPos++] = with[i2]; + i = j - 1; + ++occur; + if (bufPos >= XS_REPLACEBUF_SIZE) + return occur; + continue; } - if (bufPos >= XS_REPLACEBUF_SIZE) - return occur; - xs__replace_buf[bufPos++] = text[i]; } - xs__replace_buf[bufPos] = 0; - copy(text, len, xs__replace_buf); - return occur; - } - - // replaces all occurencies of what in text with with - // Returns number of replaced items. - XS_LIBFUNC_ATTRIB xs_replace_char(text[], len, what, with) - { - // let the xs_replace function do the work - new arr[4]; - arr[0] = what; - arr[1] = 0; - arr[2] = with; - arr[3] = 0; - - return xs_replace(text, len, arr[0], arr[2]); + if (bufPos >= XS_REPLACEBUF_SIZE) + return occur; + xs__replace_buf[bufPos++] = text[i]; } + xs__replace_buf[bufPos] = 0; + copy(text, len, xs__replace_buf); + return occur; +} + +// replaces all occurencies of what in text with with +// Returns number of replaced items. +stock xs_replace_char(text[], len, what, with) +{ + // let the xs_replace function do the work + new arr[4]; + arr[0] = what; + arr[1] = 0; + arr[2] = with; + arr[3] = 0; + return xs_replace(text, len, arr[0], arr[2]); +} + /****** MISC FUNCS *******/ - // sets namestr to name of the command identified by cid - // half-tested - XS_LIBFUNC_ATTRIB xs_concmd_name(cid, namestr[], namelen) - { - new dummy1; - new dummy2[1]; - get_concmd(cid, namestr, namelen, dummy1, dummy2, 0, 0); - } +// sets namestr to name of the command identified by cid +// half-tested +stock xs_concmd_name(cid, namestr[], namelen) +{ + new dummy1; + new dummy2[1]; + get_concmd(cid, namestr, namelen, dummy1, dummy2, 0, 0); +} - // Checks whether there are at least num free visible slots - // half-tested - XS_LIBFUNC_ATTRIB bool:xs_freevisibleslots(num) - { - new maxplayers = get_cvar_num("sv_visiblemaxplayers"); - if (maxplayers <= 0) - maxplayers = MaxClients; - - return (get_playersnum(1) <= maxplayers-num) ? true : false; - } +// Checks whether there are at least num free visible slots +// half-tested +stock bool:xs_freevisibleslots(num) +{ + new maxplayers = get_cvar_num("sv_visiblemaxplayers"); + if (maxplayers <= 0) + maxplayers = MaxClients; - // Returns biggest possible positive number - XS_LIBVAR_ATTRIB xs__maxnum = 0; - // tested - XS_LIBFUNC_ATTRIB xs_get_maxnum() + return (get_playersnum(1) <= maxplayers-num) ? true : false; +} + +// Returns biggest possible positive number +stock xs__maxnum = 0; +// tested +stock xs_get_maxnum() +{ + if (!xs__maxnum) { - if (!xs__maxnum) - { - // build it - xs__maxnum = ((1 << (cellbits - 2)) - 1 ) | (1 << (cellbits - 2)); - /* - new bits = get_cellsize() * 8 - 1; - for (new i = 0; i < bits; ++i) - xs__maxnum |= 1 << i; - */ - } - return xs__maxnum; + // build it + xs__maxnum = ((1 << (cellbits - 2)) - 1 ) | (1 << (cellbits - 2)); + /* + new bits = get_cellsize() * 8 - 1; + for (new i = 0; i < bits; ++i) + xs__maxnum |= 1 << i; + */ } + return xs__maxnum; +} + +// tested +stock xs_get_minnum() +{ + return xs_get_maxnum() + 1; +} + + +// *** The following two functions were created by Damaged Soul. + +// Max messages reserved by engine (DO NOT MODIFY) +#define XS__MAX_ENGINE_MESSAGES 63 +// Max possible messages for mod, is 255 really the limit? +#define XS__MAX_POSSIBLE_MESSAGES 255 + +// Returns max number of messages for mod +stock xs_get_maxmessages() +{ + new name[2]; - // tested - XS_LIBFUNC_ATTRIB xs_get_minnum() - { - return xs_get_maxnum() + 1; - } + for (new i = XS__MAX_ENGINE_MESSAGES + 1; i <= XS__MAX_POSSIBLE_MESSAGES; i++) + if (!get_user_msgname(i, name, 1)) + return i - 1; + + return XS__MAX_POSSIBLE_MESSAGES; +} - - // *** The following two functions were created by Damaged Soul. +// Returns true if msgid is a valid message +stock bool:xs_is_msg_valid(msgid) +{ + new name[2]; + new retval = get_user_msgname(msgid, name, 1); - // Max messages reserved by engine (DO NOT MODIFY) - #define XS__MAX_ENGINE_MESSAGES 63 - // Max possible messages for mod, is 255 really the limit? - #define XS__MAX_POSSIBLE_MESSAGES 255 - - // Returns max number of messages for mod - XS_LIBFUNC_ATTRIB xs_get_maxmessages() - { - new name[2]; - - for (new i = XS__MAX_ENGINE_MESSAGES + 1; i <= XS__MAX_POSSIBLE_MESSAGES; i++) - if (!get_user_msgname(i, name, 1)) - return i - 1; - - return XS__MAX_POSSIBLE_MESSAGES; - } - - // Returns true if msgid is a valid message - XS_LIBFUNC_ATTRIB bool:xs_is_msg_valid(msgid) - { - new name[2]; - new retval = get_user_msgname(msgid, name, 1); - - if (msgid < 1 || (msgid > XS__MAX_ENGINE_MESSAGES && !retval)) - return false; - - return true; - } + if (msgid < 1 || (msgid > XS__MAX_ENGINE_MESSAGES && !retval)) + return false; + + return true; +} /****** MANAGED TASKS ******/ - // ***** managed task ids - XS_LIBFUNC_ATTRIB xs_find_freetaskid() +// ***** managed task ids +stock xs_find_freetaskid() +{ + for (new i = 1; i <= XS_TASK_MANAGEDIDS; ++i) { - for (new i = 1; i <= XS_TASK_MANAGEDIDS; ++i) - { - if (!task_exists(i)) - return i; - } - return -1; + if (!task_exists(i)) + return i; } + return -1; +} + +// ***** managed tasks +enum xs_paramtypes +{ + xs_invalid = 0, + xs_int, + xs_float, + xs_string +} + +// new task +stock xs__TaskParam[ 1 + // number of parameters + XS_TASK_MAXPARAMS + // parameter types + (XS_TASK_MAXPARAMSIZE char) * XS_TASK_MAXPARAMS]; // space for len + value + +stock Float:xs__TaskInterval = 0.0; +stock xs__TaskFlags[5]; +stock xs__TaskFunc[48]; +stock xs__TaskId; +stock xs__TaskRepeat; + +#define xs__TaskParamCount xs__TaskParam[0] +#define xs__TaskParamType[%1] xs__TaskParam[1 + %1] + +#define xs__TaskParamValue[%1] xs__TaskParam[1 + XS_TASK_MAXPARAMS + (%1 * (XS_TASK_MAXPARAMSIZE char))] + + +// incoming task +stock xs__ITaskParam[ 1 + // number of parameters + XS_TASK_MAXPARAMS + // parameter types + (XS_TASK_MAXPARAMSIZE char) * XS_TASK_MAXPARAMS]; // space for len + value +stock xs__ITaskId; + +#define xs__ITaskParamCount xs__ITaskParam[0] +#define xs__ITaskParamType[%1] xs__ITaskParam[1 + %1] + +#define xs__ITaskParamValue[%1] xs__ITaskParam[1 + XS_TASK_MAXPARAMS + (%1 * (XS_TASK_MAXPARAMSIZE char))] + +// tested +stock xs_task_begin(Float:interval, const func[], id = 0, const flags[] = "", repeat = 0) +{ + xs_assert(xs__TaskInterval == 0.0, "New xs_task_begin called before xs_task_end"); - // ***** managed tasks - enum xs_paramtypes - { - xs_invalid = 0, - xs_int, - xs_float, - xs_string - } + xs__TaskInterval = interval; + if (xs__TaskInterval < 0.1) + xs__TaskInterval = 0.1; - // new task - XS_LIBVAR_ATTRIB xs__TaskParam[ 1 + // number of parameters - XS_TASK_MAXPARAMS + // parameter types - (XS_TASK_MAXPARAMSIZE char) * XS_TASK_MAXPARAMS]; // space for len + value + copy(xs__TaskFunc, 47, func); + xs__TaskId = id; + copy(xs__TaskFlags, 4, flags); + xs__TaskRepeat = repeat; - XS_LIBVAR_ATTRIB Float:xs__TaskInterval = 0.0; - XS_LIBVAR_ATTRIB xs__TaskFlags[5]; - XS_LIBVAR_ATTRIB xs__TaskFunc[48]; - XS_LIBVAR_ATTRIB xs__TaskId; - XS_LIBVAR_ATTRIB xs__TaskRepeat; - - #define xs__TaskParamCount xs__TaskParam[0] - #define xs__TaskParamType[%1] xs__TaskParam[1 + %1] - - #define xs__TaskParamValue[%1] xs__TaskParam[1 + XS_TASK_MAXPARAMS + (%1 * (XS_TASK_MAXPARAMSIZE char))] - - - // incoming task - XS_LIBVAR_ATTRIB xs__ITaskParam[ 1 + // number of parameters - XS_TASK_MAXPARAMS + // parameter types - (XS_TASK_MAXPARAMSIZE char) * XS_TASK_MAXPARAMS]; // space for len + value - XS_LIBVAR_ATTRIB xs__ITaskId; - - #define xs__ITaskParamCount xs__ITaskParam[0] - #define xs__ITaskParamType[%1] xs__ITaskParam[1 + %1] - - #define xs__ITaskParamValue[%1] xs__ITaskParam[1 + XS_TASK_MAXPARAMS + (%1 * (XS_TASK_MAXPARAMSIZE char))] - - // tested - XS_LIBFUNC_ATTRIB xs_task_begin(Float:interval, const func[], id = 0, const flags[] = "", repeat = 0) - { - xs_assert(xs__TaskInterval == 0.0, "New xs_task_begin called before xs_task_end"); + xs__TaskParamCount = 0; +} + +// tested +stock xs_task_pushint(value, bool:__isfl=false /*internal use only*/) +{ + xs_assert(xs__TaskInterval, "xs_task_push* called without xs_task_begin"); + if (xs__TaskParamCount >= XS_TASK_MAXPARAMS) + return 0; - xs__TaskInterval = interval; - if (xs__TaskInterval < 0.1) - xs__TaskInterval = 0.1; - - copy(xs__TaskFunc, 47, func); - xs__TaskId = id; - copy(xs__TaskFlags, 4, flags); - xs__TaskRepeat = repeat; - - xs__TaskParamCount = 0; - } + xs__TaskParamType[xs__TaskParamCount] = __isfl ? xs_float : xs_int; + xs__TaskParamValue[xs__TaskParamCount] = value; - // tested - XS_LIBFUNC_ATTRIB xs_task_pushint(value, bool:__isfl=false /*internal use only*/) - { - xs_assert(xs__TaskInterval, "xs_task_push* called without xs_task_begin"); - if (xs__TaskParamCount >= XS_TASK_MAXPARAMS) - return 0; - - xs__TaskParamType[xs__TaskParamCount] = __isfl ? xs_float : xs_int; - xs__TaskParamValue[xs__TaskParamCount] = value; + ++xs__TaskParamCount; + return 1; +} + +// tested +stock xs_task_pushfl(Float:value) +{ + return xs_task_pushint(_:value, true); +} + +// tested +stock xs_task_pushstr(const value[]) +{ + xs_assert(xs__TaskInterval, "xs_task_push* called without xs_task_begin"); + if (xs__TaskParamCount >= XS_TASK_MAXPARAMS) + return 0; - ++xs__TaskParamCount; - return 1; - } + xs__TaskParamType[xs__TaskParamCount] = xs_string; + strpack(xs__TaskParamValue[xs__TaskParamCount], value); + ++xs__TaskParamCount; + return 1; +} + +// tested +stock xs_task_end() +{ + xs_assert(xs__TaskInterval, "xs_task_end called without xs_task_begin"); - // tested - XS_LIBFUNC_ATTRIB xs_task_pushfl(Float:value) + // find a task id if needed + if (xs__TaskId == -1) { - return xs_task_pushint(_:value, true); - } - - // tested - XS_LIBFUNC_ATTRIB xs_task_pushstr(const value[]) - { - xs_assert(xs__TaskInterval, "xs_task_push* called without xs_task_begin"); - if (xs__TaskParamCount >= XS_TASK_MAXPARAMS) - return 0; - - xs__TaskParamType[xs__TaskParamCount] = xs_string; - strpack(xs__TaskParamValue[xs__TaskParamCount], value); - ++xs__TaskParamCount; - return 1; - } - - // tested - XS_LIBFUNC_ATTRIB xs_task_end() - { - xs_assert(xs__TaskInterval, "xs_task_end called without xs_task_begin"); - - // find a task id if needed + xs__TaskId = xs_find_freetaskid(); if (xs__TaskId == -1) { - xs__TaskId = xs_find_freetaskid(); - if (xs__TaskId == -1) - { - // not found - xs__TaskInterval = 0.0; - return -1; - } + // not found + xs__TaskInterval = 0.0; + return -1; } - - set_task(xs__TaskInterval, xs__TaskFunc, xs__TaskId, xs__TaskParam, - 1 + xs__TaskParamCount * (XS_TASK_MAXPARAMSIZE char), xs__TaskFlags, xs__TaskRepeat); - - xs__TaskInterval = 0.0; - - return xs__TaskId; } + set_task(xs__TaskInterval, xs__TaskFunc, xs__TaskId, xs__TaskParam, + 1 + xs__TaskParamCount * (XS_TASK_MAXPARAMSIZE char), xs__TaskFlags, xs__TaskRepeat); - // tested - #define XS_MAKE_TASKFUNC(%1) public %1(const _xs__taskparam[], _xs__taskid) if(xs__task_setup(_xs__taskparam, _xs__taskid)) + xs__TaskInterval = 0.0; - // tested - XS_LIBFUNC_ATTRIB xs__task_setup(const param[], taskid) - { - xs__ITaskId = taskid; - new len = 1 + param[0] * (XS_TASK_MAXPARAMSIZE char); - for (new i = 0; i < len; ++i) - xs__ITaskParam[i] = param[i]; - return 1; - } + return xs__TaskId; +} + + +// tested +#define XS_MAKE_TASKFUNC(%1) public %1(const _xs__taskparam[], _xs__taskid) if(xs__task_setup(_xs__taskparam, _xs__taskid)) + +// tested +stock xs__task_setup(const param[], taskid) +{ + xs__ITaskId = taskid; + new len = 1 + param[0] * (XS_TASK_MAXPARAMSIZE char); + for (new i = 0; i < len; ++i) + xs__ITaskParam[i] = param[i]; + return 1; +} + +// tested +stock xs_task_readid() +{ + return xs__ITaskId; +} + +// tested +stock xs_task_paramcount() +{ + return xs__ITaskParamCount; +} + +// tested +stock xs_paramtypes:xs_task_paramtype(paramid) +{ + if (paramid < 0 || paramid >= xs__ITaskParamCount) + return xs_invalid; - // tested - XS_LIBFUNC_ATTRIB xs_task_readid() - { - return xs__ITaskId; - } + return xs_paramtypes:xs__ITaskParamType[paramid]; +} + +// tested +stock xs_task_paramint(paramid) +{ + if (paramid < 0 || paramid >= xs__ITaskParamCount) + return 0; + if (xs__ITaskParamType[paramid] != _:xs_int) + return 0; - // tested - XS_LIBFUNC_ATTRIB xs_task_paramcount() - { - return xs__ITaskParamCount; - } + return xs__ITaskParamValue[paramid]; +} + +// tested +stock Float:xs_task_paramfl(paramid) +{ + if (paramid < 0 || paramid >= xs__ITaskParamCount) + return 0.0; + if (xs__ITaskParamType[paramid] != _:xs_float) + return 0.0; - // tested - XS_LIBFUNC_ATTRIB xs_paramtypes:xs_task_paramtype(paramid) - { - if (paramid < 0 || paramid >= xs__ITaskParamCount) - return xs_invalid; - - return xs_paramtypes:xs__ITaskParamType[paramid]; - } + return Float:xs__ITaskParamValue[paramid]; +} + +// tested +stock xs_task_paramstr(paramid, out[], maxlen) +{ + #pragma unused maxlen - // tested - XS_LIBFUNC_ATTRIB xs_task_paramint(paramid) - { - if (paramid < 0 || paramid >= xs__ITaskParamCount) - return 0; - if (xs__ITaskParamType[paramid] != _:xs_int) - return 0; - - return xs__ITaskParamValue[paramid]; - } - - // tested - XS_LIBFUNC_ATTRIB Float:xs_task_paramfl(paramid) - { - if (paramid < 0 || paramid >= xs__ITaskParamCount) - return 0.0; - if (xs__ITaskParamType[paramid] != _:xs_float) - return 0.0; - - return Float:xs__ITaskParamValue[paramid]; - } - - // tested - XS_LIBFUNC_ATTRIB xs_task_paramstr(paramid, out[], maxlen) - { - #pragma unused maxlen - - if (paramid < 0 || paramid >= xs__ITaskParamCount) - return 0; - if (xs__ITaskParamType[paramid] != _:xs_string) - return 0; - - strunpack(out, xs__ITaskParamValue[paramid]); - return 1; - } + if (paramid < 0 || paramid >= xs__ITaskParamCount) + return 0; + if (xs__ITaskParamType[paramid] != _:xs_string) + return 0; + strunpack(out, xs__ITaskParamValue[paramid]); + return 1; +} From 82371fea3b53d95709b118fee389c491cf2f38db Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Sun, 3 Aug 2014 17:24:27 -0500 Subject: [PATCH 02/71] Add new GPLv3 license text and acknowledgements. --- public/licenses/ACKNOWLEDGEMENTS.txt | 92 ++++++++++++++++++++++++++++ public/licenses/LICENSE.txt | 34 ++++++++++ 2 files changed, 126 insertions(+) create mode 100644 public/licenses/ACKNOWLEDGEMENTS.txt create mode 100644 public/licenses/LICENSE.txt diff --git a/public/licenses/ACKNOWLEDGEMENTS.txt b/public/licenses/ACKNOWLEDGEMENTS.txt new file mode 100644 index 00000000..9eac9495 --- /dev/null +++ b/public/licenses/ACKNOWLEDGEMENTS.txt @@ -0,0 +1,92 @@ +---------------------------------- +Pawn Abstract Machine and Compiler +---------------------------------- +Copyright (c) ITB CompuPhase, 1997-2005 + +This software is provided "as-is", without any express or implied warranty. +In no event will the authors be held liable for any damages arising from +the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software in + a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + +-------------------------------------------------------------- +zlib, as used in the AMX Mod X Pawn compiler and plugin loader +-------------------------------------------------------------- +Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +--------------------------------- +PCRE, as used in the Regex module +--------------------------------- +Copyright (c) 1997-2014 University of Cambridge + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the University of Cambridge nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +You may obtain a copy of the license at + http://www.pcre.org/licence.txt + +----------------------------------------- +libmaxminddb, as used in the GeoIP module +----------------------------------------- +Copyright 2013-2014 MaxMind, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/public/licenses/LICENSE.txt b/public/licenses/LICENSE.txt new file mode 100644 index 00000000..e055b255 --- /dev/null +++ b/public/licenses/LICENSE.txt @@ -0,0 +1,34 @@ +AMX MOD X LICENSE INFORMATION +VERSION: AUGUST-03-2014 + +AMX Mod X is licensed under the GNU General Public License, version 3, or (at +your option) any later version. + +As a special exception, the AMX Mod X Development Team gives permission to link +the code of this program with the Half-Life Game Engine ("HL Engine") and +Modified Game Libraries ("MODs") developed via the Half-Life 1 SDK as full +replacements for Valve games. You must obey the GNU General Public License in +all respects for all other code used other than the HL Engine and MODs. This +extension, at your option, may also be granted to works based on AMX Mod X. + +As an additional special exception to the GNU General Public License 3.0, +AlliedModders LLC permits dual-licensing of DERIVATIVE WORKS ONLY (that is, +Pawn/AMX Mod X Plugins and AMX Mod X Modules, or any software built from the AMX +Mod X header files) under the GNU General Public License version 2 "or any +higher version." As such, you may choose for your derivative work(s) to be +compatible with the GNU General Public License version 2 as long as it is also +compatible with the GNU General Public License version 3, via the "or any higher +version" clause. This is intended for compatibility with other software. + +As a final exception to the above, any derivative works created prior to this +date (August 3, 2014) may be exclusively licensed under the GNU General Public +License version 2 (without an "or any higher version" clause) if and only if the +work was already GNU General Public License 2.0 exclusive. This clause is +provided for backwards compatibility only. + +A copy of the GNU General Public License 2.0 is available in GPLv2.txt. +A copy of the GNU General Public License 3.0 is available in GPLv3.txt. + +Some components of AMX Mod X use a license other than the GNU General Public +License. You must also adhere to these additional licenses in all respects. See +ACKNOWLEDGEMENTS.txt for further details. From 45ea16427095e898ec49b8601017430582ab176b Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Sun, 3 Aug 2014 17:25:18 -0500 Subject: [PATCH 03/71] Add licenses for GPLv2 and GPLv3. --- public/licenses/GPLv2.txt | 339 +++++++++++++++++++ public/licenses/GPLv3.txt | 674 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 1013 insertions(+) create mode 100644 public/licenses/GPLv2.txt create mode 100644 public/licenses/GPLv3.txt diff --git a/public/licenses/GPLv2.txt b/public/licenses/GPLv2.txt new file mode 100644 index 00000000..82fa1daa --- /dev/null +++ b/public/licenses/GPLv2.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/public/licenses/GPLv3.txt b/public/licenses/GPLv3.txt new file mode 100644 index 00000000..818433ec --- /dev/null +++ b/public/licenses/GPLv3.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. From 1bb54f839ef564680f74f364f92377c9d22f4d7c Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 03:36:20 -0500 Subject: [PATCH 04/71] Update license headers for AMXX core. --- amxmodx/CCmd.cpp | 38 +---- amxmodx/CCmd.h | 38 +---- amxmodx/CDataPack.cpp | 2 - amxmodx/CDataPack.h | 2 - amxmodx/CEvent.cpp | 38 +---- amxmodx/CEvent.h | 38 +---- amxmodx/CFile.cpp | 38 +---- amxmodx/CFile.h | 38 +---- amxmodx/CFlagManager.cpp | 9 + amxmodx/CFlagManager.h | 9 + amxmodx/CForward.cpp | 38 +---- amxmodx/CForward.h | 38 +---- amxmodx/CLang.cpp | 38 +---- amxmodx/CLang.h | 38 +---- amxmodx/CList.h | 38 +---- amxmodx/CLogEvent.cpp | 38 +---- amxmodx/CLogEvent.h | 38 +---- amxmodx/CMenu.cpp | 38 +---- amxmodx/CMenu.h | 38 +---- amxmodx/CMisc.cpp | 39 +---- amxmodx/CMisc.h | 38 +---- amxmodx/CModule.cpp | 38 +---- amxmodx/CModule.h | 38 +---- amxmodx/COPYING | 340 ------------------------------------- amxmodx/CPlugin.cpp | 38 +---- amxmodx/CPlugin.h | 38 +---- amxmodx/CQueue.h | 38 +---- amxmodx/CString.h | 38 +---- amxmodx/CTask.cpp | 38 +---- amxmodx/CTask.h | 38 +---- amxmodx/CVault.cpp | 38 +---- amxmodx/CVault.h | 38 +---- amxmodx/CVector.h | 38 +---- amxmodx/amx.cpp | 2 - amxmodx/amx.h | 2 - amxmodx/amxcore.cpp | 3 +- amxmodx/amxdbg.cpp | 3 +- amxmodx/amxdbg.h | 2 - amxmodx/amxmodx.cpp | 38 +---- amxmodx/amxmodx.h | 38 +---- amxmodx/amxtime.cpp | 2 - amxmodx/amxxfile.cpp | 37 +--- amxmodx/amxxfile.h | 38 +---- amxmodx/amxxlog.cpp | 37 +--- amxmodx/amxxlog.h | 37 +--- amxmodx/binlog.cpp | 9 + amxmodx/binlog.h | 9 + amxmodx/datapacks.cpp | 2 - amxmodx/datastructs.cpp | 37 +--- amxmodx/datastructs.h | 37 +--- amxmodx/debugger.cpp | 38 +---- amxmodx/debugger.h | 38 +---- amxmodx/emsg.cpp | 38 +---- amxmodx/fakemeta.cpp | 37 +--- amxmodx/fakemeta.h | 37 +--- amxmodx/file.cpp | 38 +---- amxmodx/format.cpp | 9 + amxmodx/format.h | 9 + amxmodx/helpers-x86.asm | 15 +- amxmodx/libraries.cpp | 9 + amxmodx/libraries.h | 9 + amxmodx/messages.cpp | 9 + amxmodx/messages.h | 9 + amxmodx/meta_api.cpp | 38 +---- amxmodx/modules.cpp | 38 +---- amxmodx/modules.h | 38 +---- amxmodx/natives-amd64.asm | 22 ++- amxmodx/natives-x86.asm | 22 ++- amxmodx/natives.cpp | 37 +--- amxmodx/natives.h | 37 +--- amxmodx/newmenus.cpp | 37 +--- amxmodx/newmenus.h | 38 +---- amxmodx/nongpl_matches.cpp | 9 + amxmodx/nongpl_matches.h | 38 +---- amxmodx/optimizer.cpp | 9 + amxmodx/optimizer.h | 9 + amxmodx/sdk/amxxmodule.cpp | 46 ++--- amxmodx/sdk/amxxmodule.h | 17 +- amxmodx/sdk/moduleconfig.h | 13 +- amxmodx/sorting.cpp | 9 + amxmodx/srvcmd.cpp | 38 +---- amxmodx/stackstructs.cpp | 37 +--- amxmodx/string.cpp | 38 +---- amxmodx/trie_natives.cpp | 9 + amxmodx/trie_natives.h | 9 + amxmodx/util.cpp | 40 +---- amxmodx/vault.cpp | 38 +---- amxmodx/vector.cpp | 38 +---- amxmodx/zlib/zconf.h | 2 - 89 files changed, 668 insertions(+), 2093 deletions(-) delete mode 100755 amxmodx/COPYING diff --git a/amxmodx/CCmd.cpp b/amxmodx/CCmd.cpp index 803fd860..992a8765 100755 --- a/amxmodx/CCmd.cpp +++ b/amxmodx/CCmd.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "CCmd.h" diff --git a/amxmodx/CCmd.h b/amxmodx/CCmd.h index 4034c15c..463e25a2 100755 --- a/amxmodx/CCmd.h +++ b/amxmodx/CCmd.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef COMMANDS_H #define COMMANDS_H diff --git a/amxmodx/CDataPack.cpp b/amxmodx/CDataPack.cpp index 8e6c45b7..658e8484 100644 --- a/amxmodx/CDataPack.cpp +++ b/amxmodx/CDataPack.cpp @@ -25,8 +25,6 @@ * this exception to all derivative works. AlliedModders LLC defines further * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), * or . - * - * Version: $Id$ */ #include diff --git a/amxmodx/CDataPack.h b/amxmodx/CDataPack.h index 491b2920..618680d7 100644 --- a/amxmodx/CDataPack.h +++ b/amxmodx/CDataPack.h @@ -25,8 +25,6 @@ * this exception to all derivative works. AlliedModders LLC defines further * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), * or . - * - * Version: $Id$ */ #ifndef _INCLUDE_SOURCEMOD_CDATAPACK_H_ diff --git a/amxmodx/CEvent.cpp b/amxmodx/CEvent.cpp index 4ae1cb57..da5e8c2f 100755 --- a/amxmodx/CEvent.cpp +++ b/amxmodx/CEvent.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "CEvent.h" diff --git a/amxmodx/CEvent.h b/amxmodx/CEvent.h index 0dbf7afb..5ab0e785 100755 --- a/amxmodx/CEvent.h +++ b/amxmodx/CEvent.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef __CEVENTS_H__ #define __CEVENTS_H__ diff --git a/amxmodx/CFile.cpp b/amxmodx/CFile.cpp index 02b546a7..c8da0a9c 100755 --- a/amxmodx/CFile.cpp +++ b/amxmodx/CFile.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include #include "amxmodx.h" diff --git a/amxmodx/CFile.h b/amxmodx/CFile.h index bf49d441..b1428d90 100755 --- a/amxmodx/CFile.h +++ b/amxmodx/CFile.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include #include "CString.h" diff --git a/amxmodx/CFlagManager.cpp b/amxmodx/CFlagManager.cpp index 3f4063a3..dfd2ef19 100644 --- a/amxmodx/CFlagManager.cpp +++ b/amxmodx/CFlagManager.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include #include #include diff --git a/amxmodx/CFlagManager.h b/amxmodx/CFlagManager.h index ec085726..fd49c700 100644 --- a/amxmodx/CFlagManager.h +++ b/amxmodx/CFlagManager.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef CFLAGMANAGER_H #define CFLAGMANAGER_H diff --git a/amxmodx/CForward.cpp b/amxmodx/CForward.cpp index 1adb6acb..ab24f5cc 100755 --- a/amxmodx/CForward.cpp +++ b/amxmodx/CForward.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "debugger.h" diff --git a/amxmodx/CForward.h b/amxmodx/CForward.h index 02c36174..f58525e6 100755 --- a/amxmodx/CForward.h +++ b/amxmodx/CForward.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license /* CForward.h diff --git a/amxmodx/CLang.cpp b/amxmodx/CLang.cpp index 4f30c730..6b04a52b 100755 --- a/amxmodx/CLang.cpp +++ b/amxmodx/CLang.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include #include "amxmodx.h" diff --git a/amxmodx/CLang.h b/amxmodx/CLang.h index a6aea58e..98863af6 100755 --- a/amxmodx/CLang.h +++ b/amxmodx/CLang.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef _INCLUDE_CLANG_H #define _INCLUDE_CLANG_H diff --git a/amxmodx/CList.h b/amxmodx/CList.h index fe906765..01dc5363 100755 --- a/amxmodx/CList.h +++ b/amxmodx/CList.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef CLIST_H #define CLIST_H diff --git a/amxmodx/CLogEvent.cpp b/amxmodx/CLogEvent.cpp index ca9b5e63..7b9c487a 100755 --- a/amxmodx/CLogEvent.cpp +++ b/amxmodx/CLogEvent.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "CLogEvent.h" diff --git a/amxmodx/CLogEvent.h b/amxmodx/CLogEvent.h index 43241bd3..937d675b 100755 --- a/amxmodx/CLogEvent.h +++ b/amxmodx/CLogEvent.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef LOGEVENTS_H #define LOGEVENTS_H diff --git a/amxmodx/CMenu.cpp b/amxmodx/CMenu.cpp index c372fcc1..a3d323db 100755 --- a/amxmodx/CMenu.cpp +++ b/amxmodx/CMenu.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "CMenu.h" diff --git a/amxmodx/CMenu.h b/amxmodx/CMenu.h index 860e55a5..1df6c257 100755 --- a/amxmodx/CMenu.h +++ b/amxmodx/CMenu.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef MENUS_H #define MENUS_H diff --git a/amxmodx/CMisc.cpp b/amxmodx/CMisc.cpp index e1990618..b6a29b8e 100755 --- a/amxmodx/CMisc.cpp +++ b/amxmodx/CMisc.cpp @@ -1,33 +1,12 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include "amxmodx.h" #include "newmenus.h" // ***************************************************** diff --git a/amxmodx/CMisc.h b/amxmodx/CMisc.h index 8e20d1f1..851ccc36 100755 --- a/amxmodx/CMisc.h +++ b/amxmodx/CMisc.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef CMISC_H #define CMISC_H diff --git a/amxmodx/CModule.cpp b/amxmodx/CModule.cpp index 12c2c54a..2ff50384 100755 --- a/amxmodx/CModule.cpp +++ b/amxmodx/CModule.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "libraries.h" diff --git a/amxmodx/CModule.h b/amxmodx/CModule.h index 32b80d62..dbdd856f 100755 --- a/amxmodx/CModule.h +++ b/amxmodx/CModule.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license // ***************************************************** // class CModule diff --git a/amxmodx/COPYING b/amxmodx/COPYING deleted file mode 100755 index 5b6e7c66..00000000 --- a/amxmodx/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/amxmodx/CPlugin.cpp b/amxmodx/CPlugin.cpp index 958e2cea..5db24c52 100755 --- a/amxmodx/CPlugin.cpp +++ b/amxmodx/CPlugin.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "CPlugin.h" diff --git a/amxmodx/CPlugin.h b/amxmodx/CPlugin.h index 3c9b5f88..a52ffd37 100755 --- a/amxmodx/CPlugin.h +++ b/amxmodx/CPlugin.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef PLUGIN_H #define PLUGIN_H diff --git a/amxmodx/CQueue.h b/amxmodx/CQueue.h index fbb8f8b1..eaec18bb 100755 --- a/amxmodx/CQueue.h +++ b/amxmodx/CQueue.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license //by David "BAILOPAN" Anderson #ifndef _INCLUDE_CQUEUE_H diff --git a/amxmodx/CString.h b/amxmodx/CString.h index fc59b1a6..d59dffda 100755 --- a/amxmodx/CString.h +++ b/amxmodx/CString.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef _INCLUDE_CSTRING_H #define _INCLUDE_CSTRING_H diff --git a/amxmodx/CTask.cpp b/amxmodx/CTask.cpp index d5e9b59c..94de96ff 100755 --- a/amxmodx/CTask.cpp +++ b/amxmodx/CTask.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "CTask.h" diff --git a/amxmodx/CTask.h b/amxmodx/CTask.h index ee04a4c3..4eb83af9 100755 --- a/amxmodx/CTask.h +++ b/amxmodx/CTask.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef CTASK_H #define CTASK_H diff --git a/amxmodx/CVault.cpp b/amxmodx/CVault.cpp index 66fd2833..f167276c 100755 --- a/amxmodx/CVault.cpp +++ b/amxmodx/CVault.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include #include diff --git a/amxmodx/CVault.h b/amxmodx/CVault.h index 1c759ebc..0751cb72 100755 --- a/amxmodx/CVault.h +++ b/amxmodx/CVault.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef VAULT_CUSTOM_H #define VAULT_CUSTOM_H diff --git a/amxmodx/CVector.h b/amxmodx/CVector.h index 24355d4e..44241413 100755 --- a/amxmodx/CVector.h +++ b/amxmodx/CVector.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef __CVECTOR_H__ #define __CVECTOR_H__ diff --git a/amxmodx/amx.cpp b/amxmodx/amx.cpp index b351806c..f0a9ad1d 100755 --- a/amxmodx/amx.cpp +++ b/amxmodx/amx.cpp @@ -17,8 +17,6 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx.cpp 3707 2008-04-14 19:56:31Z sawce $ */ #define AMX_NODYNALOAD diff --git a/amxmodx/amx.h b/amxmodx/amx.h index fb8fe7e6..54fbbfa6 100755 --- a/amxmodx/amx.h +++ b/amxmodx/amx.h @@ -17,8 +17,6 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx.h 3006 2006-08-28 11:08:18Z dvander $ */ #if defined FREEBSD && !defined __FreeBSD__ diff --git a/amxmodx/amxcore.cpp b/amxmodx/amxcore.cpp index af5ab4e5..2d1352da 100755 --- a/amxmodx/amxcore.cpp +++ b/amxmodx/amxcore.cpp @@ -17,9 +17,8 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amxcore.cpp 1733 2005-07-25 06:03:43Z dvander $ */ + #if defined _UNICODE || defined __UNICODE__ || defined UNICODE # if !defined UNICODE /* for Windows */ # define UNICODE diff --git a/amxmodx/amxdbg.cpp b/amxmodx/amxdbg.cpp index 0cd19ad5..26a60a46 100755 --- a/amxmodx/amxdbg.cpp +++ b/amxmodx/amxdbg.cpp @@ -19,9 +19,8 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amxdbg.cpp 2345 2006-02-10 19:47:09Z faluco $ */ + #include #include #include diff --git a/amxmodx/amxdbg.h b/amxmodx/amxdbg.h index 52d9e1cc..2b503abc 100755 --- a/amxmodx/amxdbg.h +++ b/amxmodx/amxdbg.h @@ -20,8 +20,6 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amxdbg.h 2977 2006-08-27 02:17:18Z damagedsoul $ */ #ifndef AMXDBG_H_INCLUDED diff --git a/amxmodx/amxmodx.cpp b/amxmodx/amxmodx.cpp index 5dec0e6e..1b057f3f 100755 --- a/amxmodx/amxmodx.cpp +++ b/amxmodx/amxmodx.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include #include "amxmodx.h" diff --git a/amxmodx/amxmodx.h b/amxmodx/amxmodx.h index 87207bf7..c23ec57b 100755 --- a/amxmodx/amxmodx.h +++ b/amxmodx/amxmodx.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef AMXMODX_H #define AMXMODX_H diff --git a/amxmodx/amxtime.cpp b/amxmodx/amxtime.cpp index 13791c42..e0c9535c 100755 --- a/amxmodx/amxtime.cpp +++ b/amxmodx/amxtime.cpp @@ -2,8 +2,6 @@ * * Copyright (c) ITB CompuPhase, 2001-2002 * This file may be freely used. No warranties of any kind. - * - * Version: $Id: amxtime.cpp 2511 2006-04-06 12:56:45Z damagedsoul $ */ #include #include diff --git a/amxmodx/amxxfile.cpp b/amxmodx/amxxfile.cpp index 8283eec5..9ddb9921 100755 --- a/amxmodx/amxxfile.cpp +++ b/amxmodx/amxxfile.cpp @@ -1,32 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "amxxfile.h" diff --git a/amxmodx/amxxfile.h b/amxmodx/amxxfile.h index e03e34dd..bebd2a02 100755 --- a/amxmodx/amxxfile.h +++ b/amxmodx/amxxfile.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef __AMXXFILE_H__ #define __AMXXFILE_H__ diff --git a/amxmodx/amxxlog.cpp b/amxmodx/amxxlog.cpp index 1e27bdc5..b342c415 100755 --- a/amxmodx/amxxlog.cpp +++ b/amxmodx/amxxlog.cpp @@ -1,32 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license // amxx_logging localinfo: // 0 = no logging diff --git a/amxmodx/amxxlog.h b/amxmodx/amxxlog.h index a9db353f..02527163 100755 --- a/amxmodx/amxxlog.h +++ b/amxmodx/amxxlog.h @@ -1,32 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef __AMXXLOG_H__ #define __AMXXLOG_H__ diff --git a/amxmodx/binlog.cpp b/amxmodx/binlog.cpp index 4d72545e..5febe828 100644 --- a/amxmodx/binlog.cpp +++ b/amxmodx/binlog.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #if defined BINLOG_ENABLED #include diff --git a/amxmodx/binlog.h b/amxmodx/binlog.h index 616adef7..5c2fac75 100644 --- a/amxmodx/binlog.h +++ b/amxmodx/binlog.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_BINLOG_H #define _INCLUDE_BINLOG_H diff --git a/amxmodx/datapacks.cpp b/amxmodx/datapacks.cpp index 1392a62e..82a82034 100644 --- a/amxmodx/datapacks.cpp +++ b/amxmodx/datapacks.cpp @@ -25,8 +25,6 @@ * this exception to all derivative works. AlliedModders LLC defines further * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), * or . - * - * Version: $Id$ */ #include "CDataPack.h" diff --git a/amxmodx/datastructs.cpp b/amxmodx/datastructs.cpp index 84981908..420ca221 100644 --- a/amxmodx/datastructs.cpp +++ b/amxmodx/datastructs.cpp @@ -1,32 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "datastructs.h" diff --git a/amxmodx/datastructs.h b/amxmodx/datastructs.h index 15b94d53..d72bb147 100644 --- a/amxmodx/datastructs.h +++ b/amxmodx/datastructs.h @@ -1,32 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef DATASTRUCTS_H #define DATASTRUCTS_H diff --git a/amxmodx/debugger.cpp b/amxmodx/debugger.cpp index eb4934c7..b58b6501 100755 --- a/amxmodx/debugger.cpp +++ b/amxmodx/debugger.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "debugger.h" diff --git a/amxmodx/debugger.h b/amxmodx/debugger.h index 1cdef2b1..da8d308b 100755 --- a/amxmodx/debugger.h +++ b/amxmodx/debugger.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef _INCLUDE_DEBUGGER_H_ #define _INCLUDE_DEBUGGER_H_ diff --git a/amxmodx/emsg.cpp b/amxmodx/emsg.cpp index 988e456d..3b718851 100755 --- a/amxmodx/emsg.cpp +++ b/amxmodx/emsg.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "CMenu.h" diff --git a/amxmodx/fakemeta.cpp b/amxmodx/fakemeta.cpp index f21e9123..b3fc5f13 100755 --- a/amxmodx/fakemeta.cpp +++ b/amxmodx/fakemeta.cpp @@ -1,32 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "fakemeta.h" diff --git a/amxmodx/fakemeta.h b/amxmodx/fakemeta.h index c3d8795d..0310f8e1 100755 --- a/amxmodx/fakemeta.h +++ b/amxmodx/fakemeta.h @@ -1,32 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef __FAKEMETA_H__ #define __FAKEMETA_H__ diff --git a/amxmodx/file.cpp b/amxmodx/file.cpp index 32d368e8..08108ca0 100755 --- a/amxmodx/file.cpp +++ b/amxmodx/file.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license // intptr_t #ifdef _MSC_VER diff --git a/amxmodx/format.cpp b/amxmodx/format.cpp index 1d65f788..df5226de 100644 --- a/amxmodx/format.cpp +++ b/amxmodx/format.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include "amxmodx.h" #include "format.h" #include "datastructs.h" diff --git a/amxmodx/format.h b/amxmodx/format.h index 3b4260ac..42d76f66 100644 --- a/amxmodx/format.h +++ b/amxmodx/format.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_FORMATTING_H #define _INCLUDE_FORMATTING_H diff --git a/amxmodx/helpers-x86.asm b/amxmodx/helpers-x86.asm index a2b61820..67b41372 100644 --- a/amxmodx/helpers-x86.asm +++ b/amxmodx/helpers-x86.asm @@ -1,10 +1,11 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; (C)2006 by David "BAILOPAN" Anderson ; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;;Licensed under the GNU General Public License, version 2 -;;This is a portion of AMX Mod X -;; and is maintained by the AMX Mod X development team. +; vim: set ts=4 sw=4 tw=99 noet ft=nasm: +; +; AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +; Copyright (C) The AMX Mod X Development Team. +; +; This software is licensed under the GNU General Public License, version 3 or higher. +; Additional exceptions apply. For full license details, see LICENSE.txt or visit: +; https://alliedmods.net/amxmodx-license section .text diff --git a/amxmodx/libraries.cpp b/amxmodx/libraries.cpp index 522de44a..5930e26d 100644 --- a/amxmodx/libraries.cpp +++ b/amxmodx/libraries.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include "libraries.h" #include "sh_list.h" diff --git a/amxmodx/libraries.h b/amxmodx/libraries.h index 69c296e2..29829427 100644 --- a/amxmodx/libraries.h +++ b/amxmodx/libraries.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_LIBRARIES_H #define _INCLUDE_LIBRARIES_H diff --git a/amxmodx/messages.cpp b/amxmodx/messages.cpp index f239b47d..498e7fe8 100755 --- a/amxmodx/messages.cpp +++ b/amxmodx/messages.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include "amxmodx.h" #include "messages.h" diff --git a/amxmodx/messages.h b/amxmodx/messages.h index 9e357ec4..e3d87f06 100755 --- a/amxmodx/messages.h +++ b/amxmodx/messages.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _MSGS_INCLUDE_H #define _MSGS_INCLUDE_H diff --git a/amxmodx/meta_api.cpp b/amxmodx/meta_api.cpp index 0823c6a7..75693f6d 100755 --- a/amxmodx/meta_api.cpp +++ b/amxmodx/meta_api.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include diff --git a/amxmodx/modules.cpp b/amxmodx/modules.cpp index 357b07c5..00639297 100755 --- a/amxmodx/modules.cpp +++ b/amxmodx/modules.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #if defined(__linux__) || defined(__APPLE__) #if defined(__linux__) diff --git a/amxmodx/modules.h b/amxmodx/modules.h index b05ea597..769ccdb7 100755 --- a/amxmodx/modules.h +++ b/amxmodx/modules.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef __MODULES_H__ #define __MODULES_H__ diff --git a/amxmodx/natives-amd64.asm b/amxmodx/natives-amd64.asm index f7290fbd..2a76112d 100755 --- a/amxmodx/natives-amd64.asm +++ b/amxmodx/natives-amd64.asm @@ -1,13 +1,17 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; (C)2005 by David "BAILOPAN" Anderson ; -; register_native functions for amd64 ;;;;;; -; Based on the concept by Julien "dJeyL" Laurent ; -; Thanks to T(+)rget for pushing me to implement this ; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; vim: set ts=4 sw=4 tw=99 noet ft=nasm: +; +; AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +; Copyright (C) The AMX Mod X Development Team. +; +; This software is licensed under the GNU General Public License, version 3 or higher. +; Additional exceptions apply. For full license details, see LICENSE.txt or visit: +; https://alliedmods.net/amxmodx-license -;;Licensed under the GNU General Public License, version 2 -;;This is a portion of AMX Mod X -;; and is maintained by the AMX Mod X development team. +; +; register_native functions for amd64 +; Based on the concept by Julien "dJeyL" Laurent +; Thanks to T(+)rget for pushing to implement this +; ;;Initializes the global variable diff --git a/amxmodx/natives-x86.asm b/amxmodx/natives-x86.asm index 9632b2b2..9d4a3a1c 100755 --- a/amxmodx/natives-x86.asm +++ b/amxmodx/natives-x86.asm @@ -1,13 +1,17 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; (C)2005 by David "BAILOPAN" Anderson ; -; register_native functions for x86 ;;;;;; -; Based on the concept by Julien "dJeyL" Laurent ; -; Thanks to T(+)rget for pushing me to implement this ; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; vim: set ts=4 sw=4 tw=99 noet ft=nasm: +; +; AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +; Copyright (C) The AMX Mod X Development Team. +; +; This software is licensed under the GNU General Public License, version 3 or higher. +; Additional exceptions apply. For full license details, see LICENSE.txt or visit: +; https://alliedmods.net/amxmodx-license -;;Licensed under the GNU General Public License, version 2 -;;This is a portion of AMX Mod X -;; and is maintained by the AMX Mod X development team. +; +; register_native functions for x86 +; Based on the concept by Julien "dJeyL" Laurent +; Thanks to T(+)rget for pushing to implement this +; ;;Initializes the global variable diff --git a/amxmodx/natives.cpp b/amxmodx/natives.cpp index 15ba283d..208b042b 100755 --- a/amxmodx/natives.cpp +++ b/amxmodx/natives.cpp @@ -1,32 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "sh_stack.h" diff --git a/amxmodx/natives.h b/amxmodx/natives.h index 85143ecb..b753b952 100755 --- a/amxmodx/natives.h +++ b/amxmodx/natives.h @@ -1,32 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef _INCLUDE_NATIVES_H #define _INCLUDE_NATIVES_H diff --git a/amxmodx/newmenus.cpp b/amxmodx/newmenus.cpp index 209fca98..6780755c 100755 --- a/amxmodx/newmenus.cpp +++ b/amxmodx/newmenus.cpp @@ -1,32 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "CMenu.h" diff --git a/amxmodx/newmenus.h b/amxmodx/newmenus.h index 94d79af0..1248bf0f 100755 --- a/amxmodx/newmenus.h +++ b/amxmodx/newmenus.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef _INCLUDE_NEWMENUS_H #define _INCLUDE_NEWMENUS_H diff --git a/amxmodx/nongpl_matches.cpp b/amxmodx/nongpl_matches.cpp index b79267d3..b0d31dd1 100644 --- a/amxmodx/nongpl_matches.cpp +++ b/amxmodx/nongpl_matches.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include #include "nongpl_matches.h" diff --git a/amxmodx/nongpl_matches.h b/amxmodx/nongpl_matches.h index eec0e4f5..1ea1d2df 100644 --- a/amxmodx/nongpl_matches.h +++ b/amxmodx/nongpl_matches.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef _INCLUDE_AMXMODX_NONGPL_MATCHES_H_ #define _INCLUDE_AMXMODX_NONGPL_MATCHES_H_ diff --git a/amxmodx/optimizer.cpp b/amxmodx/optimizer.cpp index 8bf801f5..98785f90 100644 --- a/amxmodx/optimizer.cpp +++ b/amxmodx/optimizer.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include #include "optimizer.h" diff --git a/amxmodx/optimizer.h b/amxmodx/optimizer.h index 853d5a04..b94b7a2e 100644 --- a/amxmodx/optimizer.h +++ b/amxmodx/optimizer.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_AMXMODX_OPTIMIZER_H #define _INCLUDE_AMXMODX_OPTIMIZER_H diff --git a/amxmodx/sdk/amxxmodule.cpp b/amxmodx/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/amxmodx/sdk/amxxmodule.cpp +++ b/amxmodx/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/amxmodx/sdk/amxxmodule.h b/amxmodx/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/amxmodx/sdk/amxxmodule.h +++ b/amxmodx/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/amxmodx/sdk/moduleconfig.h b/amxmodx/sdk/moduleconfig.h index 34677bec..d7a6453c 100755 --- a/amxmodx/sdk/moduleconfig.h +++ b/amxmodx/sdk/moduleconfig.h @@ -1,4 +1,15 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ diff --git a/amxmodx/sorting.cpp b/amxmodx/sorting.cpp index d1830d3c..60e1b339 100644 --- a/amxmodx/sorting.cpp +++ b/amxmodx/sorting.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include "amxmodx.h" #include #include diff --git a/amxmodx/srvcmd.cpp b/amxmodx/srvcmd.cpp index 018eaa5e..42fe45c1 100755 --- a/amxmodx/srvcmd.cpp +++ b/amxmodx/srvcmd.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include diff --git a/amxmodx/stackstructs.cpp b/amxmodx/stackstructs.cpp index 586412c3..7238c81e 100644 --- a/amxmodx/stackstructs.cpp +++ b/amxmodx/stackstructs.cpp @@ -1,32 +1,11 @@ -/* AMX Mod X - * - * by the AMX Mod X Development Team - * originally developed by OLO - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "datastructs.h" diff --git a/amxmodx/string.cpp b/amxmodx/string.cpp index 0a8a4622..877d54cb 100755 --- a/amxmodx/string.cpp +++ b/amxmodx/string.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include #include "amxmodx.h" diff --git a/amxmodx/trie_natives.cpp b/amxmodx/trie_natives.cpp index 90b4752a..286a1725 100644 --- a/amxmodx/trie_natives.cpp +++ b/amxmodx/trie_natives.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include #include #include diff --git a/amxmodx/trie_natives.h b/amxmodx/trie_natives.h index abefe7a1..5f85971d 100644 --- a/amxmodx/trie_natives.h +++ b/amxmodx/trie_natives.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _TRIE_NATIVES_H_ #define _TRIE_NATIVES_H_ diff --git a/amxmodx/util.cpp b/amxmodx/util.cpp index eb2e0bba..5bd5f696 100755 --- a/amxmodx/util.cpp +++ b/amxmodx/util.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include #include "amxmodx.h" @@ -731,4 +709,4 @@ size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...) { return len; } -} \ No newline at end of file +} diff --git a/amxmodx/vault.cpp b/amxmodx/vault.cpp index 8fb87cc8..ed3edec6 100755 --- a/amxmodx/vault.cpp +++ b/amxmodx/vault.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "CVault.h" diff --git a/amxmodx/vector.cpp b/amxmodx/vector.cpp index 44ab0f2d..5966f080 100644 --- a/amxmodx/vector.cpp +++ b/amxmodx/vector.cpp @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "amxmodx.h" diff --git a/amxmodx/zlib/zconf.h b/amxmodx/zlib/zconf.h index 1292dda1..1731ebff 100755 --- a/amxmodx/zlib/zconf.h +++ b/amxmodx/zlib/zconf.h @@ -3,8 +3,6 @@ * For conditions of distribution and use, see copyright notice in zlib.h */ -/* @(#) $Id: zconf.h 3734 2008-08-16 09:48:39Z damagedsoul $ */ - #ifndef ZCONF_H #define ZCONF_H From 1cff91ced5fb12b8ac896922f8b03b324356cfb5 Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 04:31:39 -0500 Subject: [PATCH 05/71] Update license headers for compiler. --- compiler/amxxpc/Binary.cpp | 9 +++++++++ compiler/amxxpc/Binary.h | 9 +++++++++ compiler/amxxpc/amx.cpp | 2 -- compiler/amxxpc/amx.h | 2 -- compiler/amxxpc/amxdbg.h | 2 -- compiler/amxxpc/amxxpc.cpp | 9 +++++++++ compiler/amxxpc/amxxpc.h | 9 +++++++++ compiler/amxxpc/zconf.h | 2 -- compiler/compile/compile.dpr | 38 ++++++++---------------------------- compiler/compile/uFunc.pas | 38 ++++++++---------------------------- compiler/libpc300/amx.h | 2 -- compiler/libpc300/amxdbg.h | 2 -- compiler/libpc300/dllmain.c | 2 -- compiler/libpc300/libpawnc.c | 3 +-- compiler/libpc300/memfile.c | 9 +++++++++ compiler/libpc300/memfile.h | 9 +++++++++ compiler/libpc300/pawncc.c | 3 +-- compiler/libpc300/sc.h | 3 +-- compiler/libpc300/sc1.c | 3 +-- compiler/libpc300/sc2.c | 3 +-- compiler/libpc300/sc3.c | 3 +-- compiler/libpc300/sc4.c | 3 +-- compiler/libpc300/sc5.c | 3 +-- compiler/libpc300/sc6.c | 3 +-- compiler/libpc300/sc7.c | 3 +-- compiler/libpc300/sci18n.c | 3 +-- compiler/libpc300/sclist.c | 3 +-- compiler/libpc300/scmemfil.c | 2 -- compiler/libpc300/scstate.c | 3 +-- compiler/libpc300/scvars.c | 3 +-- 30 files changed, 84 insertions(+), 104 deletions(-) diff --git a/compiler/amxxpc/Binary.cpp b/compiler/amxxpc/Binary.cpp index 9d029dca..4b3a7a66 100755 --- a/compiler/amxxpc/Binary.cpp +++ b/compiler/amxxpc/Binary.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include "Binary.h" BinaryWriter::BinaryWriter(FILE *fp) diff --git a/compiler/amxxpc/Binary.h b/compiler/amxxpc/Binary.h index 4747902e..60df030e 100755 --- a/compiler/amxxpc/Binary.h +++ b/compiler/amxxpc/Binary.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_BINARY_H #define _INCLUDE_BINARY_H diff --git a/compiler/amxxpc/amx.cpp b/compiler/amxxpc/amx.cpp index a7f5da7a..4893b3d2 100755 --- a/compiler/amxxpc/amx.cpp +++ b/compiler/amxxpc/amx.cpp @@ -17,8 +17,6 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx.cpp 1728 2005-07-25 00:01:54Z dvander $ */ #if BUILD_PLATFORM == WINDOWS && BUILD_TYPE == RELEASE && BUILD_COMPILER == MSVC && PAWN_CELL_SIZE == 64 diff --git a/compiler/amxxpc/amx.h b/compiler/amxxpc/amx.h index e1e65d48..4c0721a5 100755 --- a/compiler/amxxpc/amx.h +++ b/compiler/amxxpc/amx.h @@ -17,8 +17,6 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx.h 3736 2008-08-16 20:13:12Z damagedsoul $ */ #if defined FREEBSD && !defined __FreeBSD__ diff --git a/compiler/amxxpc/amxdbg.h b/compiler/amxxpc/amxdbg.h index 7ffca1b5..f3b8f685 100755 --- a/compiler/amxxpc/amxdbg.h +++ b/compiler/amxxpc/amxdbg.h @@ -20,8 +20,6 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amxdbg.h 3736 2008-08-16 20:13:12Z damagedsoul $ */ #ifndef AMXDBG_H_INCLUDED diff --git a/compiler/amxxpc/amxxpc.cpp b/compiler/amxxpc/amxxpc.cpp index 52a87fb2..0295abae 100755 --- a/compiler/amxxpc/amxxpc.cpp +++ b/compiler/amxxpc/amxxpc.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include #if defined(__linux__) | defined (__APPLE__) #include diff --git a/compiler/amxxpc/amxxpc.h b/compiler/amxxpc/amxxpc.h index b601a8b3..c35c324d 100755 --- a/compiler/amxxpc/amxxpc.h +++ b/compiler/amxxpc/amxxpc.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _AMXXSC_INCLUDE_H #define _AMXXSC_INCLUDE_H diff --git a/compiler/amxxpc/zconf.h b/compiler/amxxpc/zconf.h index 1292dda1..1731ebff 100755 --- a/compiler/amxxpc/zconf.h +++ b/compiler/amxxpc/zconf.h @@ -3,8 +3,6 @@ * For conditions of distribution and use, see copyright notice in zlib.h */ -/* @(#) $Id: zconf.h 3734 2008-08-16 09:48:39Z damagedsoul $ */ - #ifndef ZCONF_H #define ZCONF_H diff --git a/compiler/compile/compile.dpr b/compiler/compile/compile.dpr index 3cbf6e05..61d9a431 100755 --- a/compiler/compile/compile.dpr +++ b/compiler/compile/compile.dpr @@ -1,33 +1,11 @@ -(* AMX Mod X -* compile.exe -* -* by the AMX Mod X Development Team -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*) +// vim: set sts=2 ts=8 sw=2 tw=99 et: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license program compile; diff --git a/compiler/compile/uFunc.pas b/compiler/compile/uFunc.pas index 292d3adf..b3bbb9d9 100755 --- a/compiler/compile/uFunc.pas +++ b/compiler/compile/uFunc.pas @@ -1,33 +1,11 @@ -(* AMX Mod X -* compile.exe -* -* by the AMX Mod X Development Team -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*) +// vim: set sts=2 ts=8 sw=2 tw=99 et: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license unit uFunc; diff --git a/compiler/libpc300/amx.h b/compiler/libpc300/amx.h index d044c99e..7cdebe94 100755 --- a/compiler/libpc300/amx.h +++ b/compiler/libpc300/amx.h @@ -17,8 +17,6 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amx.h 3736 2008-08-16 20:13:12Z damagedsoul $ */ #ifdef _MSC_VER diff --git a/compiler/libpc300/amxdbg.h b/compiler/libpc300/amxdbg.h index 7ffca1b5..f3b8f685 100755 --- a/compiler/libpc300/amxdbg.h +++ b/compiler/libpc300/amxdbg.h @@ -20,8 +20,6 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: amxdbg.h 3736 2008-08-16 20:13:12Z damagedsoul $ */ #ifndef AMXDBG_H_INCLUDED diff --git a/compiler/libpc300/dllmain.c b/compiler/libpc300/dllmain.c index b093e88c..40b6756a 100755 --- a/compiler/libpc300/dllmain.c +++ b/compiler/libpc300/dllmain.c @@ -17,8 +17,6 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: dllmain.c 1724 2005-07-24 20:00:55Z dvander $ */ #if defined _UNICODE || defined __UNICODE__ || defined UNICODE diff --git a/compiler/libpc300/libpawnc.c b/compiler/libpc300/libpawnc.c index fe499e2e..9133b83f 100755 --- a/compiler/libpc300/libpawnc.c +++ b/compiler/libpc300/libpawnc.c @@ -19,9 +19,8 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: libpawnc.c 2969 2006-08-25 00:28:36Z dvander $ */ + #include #include #include diff --git a/compiler/libpc300/memfile.c b/compiler/libpc300/memfile.c index a0955e9a..39044ec9 100644 --- a/compiler/libpc300/memfile.c +++ b/compiler/libpc300/memfile.c @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include "memfile.h" #include #include "osdefs.h" diff --git a/compiler/libpc300/memfile.h b/compiler/libpc300/memfile.h index 7f39a8a5..c03a10ab 100644 --- a/compiler/libpc300/memfile.h +++ b/compiler/libpc300/memfile.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_MEMFILE_H #define _INCLUDE_MEMFILE_H diff --git a/compiler/libpc300/pawncc.c b/compiler/libpc300/pawncc.c index 1d2e7d56..6e541450 100755 --- a/compiler/libpc300/pawncc.c +++ b/compiler/libpc300/pawncc.c @@ -19,9 +19,8 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: pawncc.c 1724 2005-07-24 20:00:55Z dvander $ */ + #include "sc.h" int main(int argc, char *argv[]) diff --git a/compiler/libpc300/sc.h b/compiler/libpc300/sc.h index 79996d26..ff0da2e9 100755 --- a/compiler/libpc300/sc.h +++ b/compiler/libpc300/sc.h @@ -24,9 +24,8 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: sc.h 3460 2007-04-24 13:36:36Z sawce $ */ + #ifndef SC_H_INCLUDED #define SC_H_INCLUDED #include diff --git a/compiler/libpc300/sc1.c b/compiler/libpc300/sc1.c index a67daf20..d432a4a2 100755 --- a/compiler/libpc300/sc1.c +++ b/compiler/libpc300/sc1.c @@ -19,9 +19,8 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: sc1.c 3460 2007-04-24 13:36:36Z sawce $ */ + #include #include #include diff --git a/compiler/libpc300/sc2.c b/compiler/libpc300/sc2.c index f6961e39..42c31c08 100755 --- a/compiler/libpc300/sc2.c +++ b/compiler/libpc300/sc2.c @@ -17,9 +17,8 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: sc2.c 3318 2007-02-16 18:49:21Z sawce $ */ + #include #include #include diff --git a/compiler/libpc300/sc3.c b/compiler/libpc300/sc3.c index 6e5d075b..c44194cc 100755 --- a/compiler/libpc300/sc3.c +++ b/compiler/libpc300/sc3.c @@ -17,9 +17,8 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: sc3.c 3522 2007-05-22 01:29:18Z sawce $ */ + #include #include #include /* for _MAX_PATH */ diff --git a/compiler/libpc300/sc4.c b/compiler/libpc300/sc4.c index d5ef6902..b0249589 100755 --- a/compiler/libpc300/sc4.c +++ b/compiler/libpc300/sc4.c @@ -17,9 +17,8 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: sc4.c 1724 2005-07-24 20:00:55Z dvander $ */ + #include #include #include diff --git a/compiler/libpc300/sc5.c b/compiler/libpc300/sc5.c index 7cad31c5..d5ae68b4 100755 --- a/compiler/libpc300/sc5.c +++ b/compiler/libpc300/sc5.c @@ -18,9 +18,8 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: sc5.c 1724 2005-07-24 20:00:55Z dvander $ */ + #include #if defined __WIN32__ || defined _WIN32 || defined __MSDOS__ #include diff --git a/compiler/libpc300/sc6.c b/compiler/libpc300/sc6.c index 0d94d989..af5762ca 100755 --- a/compiler/libpc300/sc6.c +++ b/compiler/libpc300/sc6.c @@ -17,9 +17,8 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: sc6.c 2018 2005-09-06 21:34:33Z dvander $ */ + #include #include #include /* for macro max() */ diff --git a/compiler/libpc300/sc7.c b/compiler/libpc300/sc7.c index d4f0aa19..0037328c 100755 --- a/compiler/libpc300/sc7.c +++ b/compiler/libpc300/sc7.c @@ -34,9 +34,8 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: sc7.c 1724 2005-07-24 20:00:55Z dvander $ */ + #include #include #include /* for atoi() */ diff --git a/compiler/libpc300/sci18n.c b/compiler/libpc300/sci18n.c index 34a99a3c..2a7518b9 100755 --- a/compiler/libpc300/sci18n.c +++ b/compiler/libpc300/sci18n.c @@ -29,9 +29,8 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: sci18n.c 1724 2005-07-24 20:00:55Z dvander $ */ + #include #include #include diff --git a/compiler/libpc300/sclist.c b/compiler/libpc300/sclist.c index 0875fd26..b547f4aa 100755 --- a/compiler/libpc300/sclist.c +++ b/compiler/libpc300/sclist.c @@ -21,9 +21,8 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: sclist.c 3736 2008-08-16 20:13:12Z damagedsoul $ */ + #include #include #include diff --git a/compiler/libpc300/scmemfil.c b/compiler/libpc300/scmemfil.c index 2f6cd687..23f44278 100755 --- a/compiler/libpc300/scmemfil.c +++ b/compiler/libpc300/scmemfil.c @@ -21,8 +21,6 @@ * misrepresented as being the original software. * * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: scmemfil.c 2866 2006-07-16 02:25:32Z faluco $ */ #include diff --git a/compiler/libpc300/scstate.c b/compiler/libpc300/scstate.c index 05806a89..e9f31d77 100755 --- a/compiler/libpc300/scstate.c +++ b/compiler/libpc300/scstate.c @@ -42,9 +42,8 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: scstate.c 1724 2005-07-24 20:00:55Z dvander $ */ + #include #include #include diff --git a/compiler/libpc300/scvars.c b/compiler/libpc300/scvars.c index f265f184..51430d03 100755 --- a/compiler/libpc300/scvars.c +++ b/compiler/libpc300/scvars.c @@ -19,9 +19,8 @@ * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: scvars.c 1724 2005-07-24 20:00:55Z dvander $ */ + #include #include /* for _MAX_PATH */ #include "sc.h" From b6103a1916842ab316a621b96cc902e00a3bfbdc Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 04:54:24 -0500 Subject: [PATCH 06/71] Update license headers for cstrike modules. --- dlls/cstrike/cstrike/CstrikeDatas.h | 47 ++--- dlls/cstrike/cstrike/CstrikeHacks.cpp | 47 ++--- dlls/cstrike/cstrike/CstrikeNatives.cpp | 47 ++--- dlls/cstrike/cstrike/CstrikePlayer.cpp | 13 +- dlls/cstrike/cstrike/CstrikePlayer.h | 13 +- dlls/cstrike/cstrike/CstrikeUtils.cpp | 47 ++--- dlls/cstrike/cstrike/CstrikeUtils.h | 47 ++--- dlls/cstrike/cstrike/amxx_api.cpp | 47 ++--- dlls/cstrike/cstrike/sdk/amxxmodule.cpp | 46 ++--- dlls/cstrike/cstrike/sdk/amxxmodule.h | 17 +- dlls/cstrike/cstrike/sdk/moduleconfig.h | 13 +- dlls/cstrike/csx/CMisc.cpp | 11 ++ dlls/cstrike/csx/CMisc.h | 11 ++ dlls/cstrike/csx/CRank.cpp | 11 ++ dlls/cstrike/csx/CRank.h | 11 ++ dlls/cstrike/csx/WinCSX/CRank.cpp | 11 +- dlls/cstrike/csx/WinCSX/CRank.h | 11 +- dlls/cstrike/csx/WinCSX/WinCSX.cpp | 8 +- dlls/cstrike/csx/WinCSX/WinCSX.h | 9 + dlls/cstrike/csx/WinCSX/amxxmodule.h | 183 ++++++++++++++----- dlls/cstrike/csx/WinCSX/moduleconfig.h | 13 +- dlls/cstrike/csx/WinCSX/resources/Resource.h | 11 +- dlls/cstrike/csx/meta_api.cpp | 13 ++ dlls/cstrike/csx/rank.cpp | 11 ++ dlls/cstrike/csx/rank.h | 13 ++ dlls/cstrike/csx/sdk/amxxmodule.cpp | 46 ++--- dlls/cstrike/csx/sdk/amxxmodule.h | 17 +- dlls/cstrike/csx/sdk/moduleconfig.h | 13 +- dlls/cstrike/csx/usermsg.cpp | 13 ++ 29 files changed, 467 insertions(+), 333 deletions(-) diff --git a/dlls/cstrike/cstrike/CstrikeDatas.h b/dlls/cstrike/cstrike/CstrikeDatas.h index c1d138f1..59d955e1 100644 --- a/dlls/cstrike/cstrike/CstrikeDatas.h +++ b/dlls/cstrike/cstrike/CstrikeDatas.h @@ -1,35 +1,16 @@ -/* AMX Mod X - * Counter-Strike Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Counter-Strike Module +// + #ifndef CSTRIKE_DATA_H #define CSTRIKE_DATA_H @@ -368,4 +349,4 @@ typedef enum } Menu; -#endif // CSTRIKE_DATA_H \ No newline at end of file +#endif // CSTRIKE_DATA_H diff --git a/dlls/cstrike/cstrike/CstrikeHacks.cpp b/dlls/cstrike/cstrike/CstrikeHacks.cpp index d20a9d59..4094d4e4 100644 --- a/dlls/cstrike/cstrike/CstrikeHacks.cpp +++ b/dlls/cstrike/cstrike/CstrikeHacks.cpp @@ -1,35 +1,16 @@ -/* AMX Mod X - * Counter-Strike Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Counter-Strike Module +// + #include "CstrikeDatas.h" #include "CstrikeUtils.h" #include "CDetour/detours.h" @@ -373,4 +354,4 @@ void ToggleDetour_BuyCommands(bool enable) if (AddAccountDetour) (enable) ? AddAccountDetour->EnableDetour() : AddAccountDetour->DisableDetour(); -} \ No newline at end of file +} diff --git a/dlls/cstrike/cstrike/CstrikeNatives.cpp b/dlls/cstrike/cstrike/CstrikeNatives.cpp index 756998b6..e494bfb0 100644 --- a/dlls/cstrike/cstrike/CstrikeNatives.cpp +++ b/dlls/cstrike/cstrike/CstrikeNatives.cpp @@ -1,35 +1,16 @@ -/* AMX Mod X - * Counter-Strike Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Counter-Strike Module +// + #include "CstrikeDatas.h" #include "CstrikePlayer.h" #include "CstrikeUtils.h" @@ -1890,4 +1871,4 @@ void PlayerPreThink(edict_t *pPlayer) } RETURN_META(MRES_IGNORED); -} \ No newline at end of file +} diff --git a/dlls/cstrike/cstrike/CstrikePlayer.cpp b/dlls/cstrike/cstrike/CstrikePlayer.cpp index cd72d55f..a3953e13 100755 --- a/dlls/cstrike/cstrike/CstrikePlayer.cpp +++ b/dlls/cstrike/cstrike/CstrikePlayer.cpp @@ -1,6 +1,15 @@ -// CstrikePlayer.cpp: implementation of the CCstrikePlayer class. +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Counter-Strike Module // -////////////////////////////////////////////////////////////////////// #include "CstrikePlayer.h" #include // strcpy() diff --git a/dlls/cstrike/cstrike/CstrikePlayer.h b/dlls/cstrike/cstrike/CstrikePlayer.h index 177b17d9..0674192d 100755 --- a/dlls/cstrike/cstrike/CstrikePlayer.h +++ b/dlls/cstrike/cstrike/CstrikePlayer.h @@ -1,6 +1,15 @@ -// CstrikePlayer.h: interface for the CCstrikePlayer class. +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Counter-Strike Module // -////////////////////////////////////////////////////////////////////// #if !defined(INCLUDED_CCSTRIKEPLAYER) #define INCLUDED_CCSTRIKEPLAYER diff --git a/dlls/cstrike/cstrike/CstrikeUtils.cpp b/dlls/cstrike/cstrike/CstrikeUtils.cpp index 76783b45..42b44a75 100644 --- a/dlls/cstrike/cstrike/CstrikeUtils.cpp +++ b/dlls/cstrike/cstrike/CstrikeUtils.cpp @@ -1,35 +1,16 @@ -/* AMX Mod X -* Counter-Strike Module -* -* by the AMX Mod X Development Team -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Counter-Strike Module +// + #include "amxxmodule.h" #include "MemoryUtils.h" @@ -150,4 +131,4 @@ char *UTIL_StringToLower(char *str) } return str; -} \ No newline at end of file +} diff --git a/dlls/cstrike/cstrike/CstrikeUtils.h b/dlls/cstrike/cstrike/CstrikeUtils.h index 4a58d5df..9e8f75cd 100644 --- a/dlls/cstrike/cstrike/CstrikeUtils.h +++ b/dlls/cstrike/cstrike/CstrikeUtils.h @@ -1,35 +1,16 @@ -/* AMX Mod X -* Counter-Strike Module -* -* by the AMX Mod X Development Team -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Counter-Strike Module +// + #ifndef CSTRIKE_UTILS_H #define CSTRIKE_UTILS_H @@ -119,4 +100,4 @@ inline int PrivateToIndex(const void *pdata) return ENTINDEX(pEntity); }; -#endif // CSTRIKE_UTILS_H \ No newline at end of file +#endif // CSTRIKE_UTILS_H diff --git a/dlls/cstrike/cstrike/amxx_api.cpp b/dlls/cstrike/cstrike/amxx_api.cpp index bd1c9c3a..17dfd227 100644 --- a/dlls/cstrike/cstrike/amxx_api.cpp +++ b/dlls/cstrike/cstrike/amxx_api.cpp @@ -1,35 +1,16 @@ -/* AMX Mod X - * Counter-Strike Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Counter-Strike Module +// + #include "amxxmodule.h" #include "CstrikeUtils.h" @@ -81,4 +62,4 @@ void OnPluginsLoaded() void OnAmxxDetach() { ShutdownHacks(); -} \ No newline at end of file +} diff --git a/dlls/cstrike/cstrike/sdk/amxxmodule.cpp b/dlls/cstrike/cstrike/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/dlls/cstrike/cstrike/sdk/amxxmodule.cpp +++ b/dlls/cstrike/cstrike/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/cstrike/cstrike/sdk/amxxmodule.h b/dlls/cstrike/cstrike/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/dlls/cstrike/cstrike/sdk/amxxmodule.h +++ b/dlls/cstrike/cstrike/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/cstrike/cstrike/sdk/moduleconfig.h b/dlls/cstrike/cstrike/sdk/moduleconfig.h index d3bf9a63..86139e62 100755 --- a/dlls/cstrike/cstrike/sdk/moduleconfig.h +++ b/dlls/cstrike/cstrike/sdk/moduleconfig.h @@ -1,4 +1,15 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ diff --git a/dlls/cstrike/csx/CMisc.cpp b/dlls/cstrike/csx/CMisc.cpp index c8a4ee3b..218b0373 100755 --- a/dlls/cstrike/csx/CMisc.cpp +++ b/dlls/cstrike/csx/CMisc.cpp @@ -1,4 +1,15 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// +// CSX Module +// #include "CMisc.h" #include "rank.h" diff --git a/dlls/cstrike/csx/CMisc.h b/dlls/cstrike/csx/CMisc.h index e2b565a8..4c6492be 100755 --- a/dlls/cstrike/csx/CMisc.h +++ b/dlls/cstrike/csx/CMisc.h @@ -1,4 +1,15 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// +// CSX Module +// #ifndef CMISC_H #define CMISC_H diff --git a/dlls/cstrike/csx/CRank.cpp b/dlls/cstrike/csx/CRank.cpp index 37d795ce..b05bccfe 100755 --- a/dlls/cstrike/csx/CRank.cpp +++ b/dlls/cstrike/csx/CRank.cpp @@ -1,4 +1,15 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// +// CSX Module +// #include "amxxmodule.h" #include "CRank.h" diff --git a/dlls/cstrike/csx/CRank.h b/dlls/cstrike/csx/CRank.h index 2b538d8e..ec5e8248 100755 --- a/dlls/cstrike/csx/CRank.h +++ b/dlls/cstrike/csx/CRank.h @@ -1,4 +1,15 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// +// CSX Module +// #ifndef CRANK_H #define CRANK_H diff --git a/dlls/cstrike/csx/WinCSX/CRank.cpp b/dlls/cstrike/csx/WinCSX/CRank.cpp index 14d48ddf..3c8ea3bb 100755 --- a/dlls/cstrike/csx/WinCSX/CRank.cpp +++ b/dlls/cstrike/csx/WinCSX/CRank.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include "stdafx.h" #include "CRank.h" @@ -340,4 +349,4 @@ void RankSystem::saveRank( const char* filename ) fwrite( &i , 1, sizeof(short int), bfp); // null terminator fclose(bfp); -} \ No newline at end of file +} diff --git a/dlls/cstrike/csx/WinCSX/CRank.h b/dlls/cstrike/csx/WinCSX/CRank.h index 8fd17b7d..42d4b94a 100755 --- a/dlls/cstrike/csx/WinCSX/CRank.h +++ b/dlls/cstrike/csx/WinCSX/CRank.h @@ -1,4 +1,11 @@ - +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef CRANK_H #define CRANK_H @@ -125,4 +132,4 @@ public: }; -#endif \ No newline at end of file +#endif diff --git a/dlls/cstrike/csx/WinCSX/WinCSX.cpp b/dlls/cstrike/csx/WinCSX/WinCSX.cpp index baa05372..84650674 100755 --- a/dlls/cstrike/csx/WinCSX/WinCSX.cpp +++ b/dlls/cstrike/csx/WinCSX/WinCSX.cpp @@ -1,5 +1,11 @@ -// WinCSX.cpp : Defines the entry point for the application. +// vim: set ts=4 sw=4 tw=99 noet: // +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #include "stdafx.h" #include "WinCSX.h" diff --git a/dlls/cstrike/csx/WinCSX/WinCSX.h b/dlls/cstrike/csx/WinCSX/WinCSX.h index 2aa2f7ab..5be31ac3 100755 --- a/dlls/cstrike/csx/WinCSX/WinCSX.h +++ b/dlls/cstrike/csx/WinCSX/WinCSX.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #pragma once #include "resource.h" diff --git a/dlls/cstrike/csx/WinCSX/amxxmodule.h b/dlls/cstrike/csx/WinCSX/amxxmodule.h index 71077bdd..6a760b25 100755 --- a/dlls/cstrike/csx/WinCSX/amxxmodule.h +++ b/dlls/cstrike/csx/WinCSX/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ @@ -10,6 +19,7 @@ // config #include "moduleconfig.h" +#include // size_t // metamod include files #ifdef USE_METAMOD #include @@ -19,11 +29,16 @@ // DLL Export #undef DLLEXPORT -#ifndef __linux__ +#if defined(_WIN32) #define DLLEXPORT __declspec(dllexport) #else -#define DLLEXPORT +#define DLLEXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__linux__) && !defined(LINUX) #define LINUX +#elif defined(__APPLE__) && !defined(OSX) +#define OSX #endif #undef C_DLLEXPORT @@ -34,7 +49,8 @@ // module interface version was 1 // 2 - added logtag to struct (amxx1.1-rc1) // 3 - added new tagAMX structure (amxx1.5) -#define AMXX_INTERFACE_VERSION 3 +// 4 - added new 'library' setting for direct loading +#define AMXX_INTERFACE_VERSION 4 // amxx module info struct amxx_module_info_s @@ -44,6 +60,8 @@ struct amxx_module_info_s const char *version; int reload; // reload on mapchange when nonzero const char *logtag; // added in version 2 + const char *library; // added in version 4 + const char *libclass; // added in version 4 }; // return values from functions called by amxx @@ -52,6 +70,9 @@ struct amxx_module_info_s #define AMXX_PARAM 2 /* Invalid parameter */ #define AMXX_FUNC_NOT_PRESENT 3 /* Function not present */ +#define AMXX_GAME_OK 0 /* This module can load on the current game mod. */ +#define AMXX_GAME_BAD 1 /* This module can not load on the current game mod. */ + // *** Small stuff *** // The next section is copied from the amx.h file // Copyright (c) ITB CompuPhase, 1997-2005 @@ -59,7 +80,7 @@ struct amxx_module_info_s #if defined HAVE_STDINT_H #include #else - #if defined __LCC__ || defined __DMC__ || defined LINUX + #if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__ #if defined HAVE_INTTYPES_H #include #else @@ -301,7 +322,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx); #endif #if !defined AMX_NO_ALIGN - #if defined LINUX || defined __FreeBSD__ + #if defined LINUX || defined __FreeBSD__ || defined __APPLE__ #pragma pack(1) /* structures must be packed (byte-aligned) */ #elif defined MACOS && defined __MWERKS__ #pragma options align=mac68k @@ -388,7 +409,7 @@ enum { }; #if !defined AMX_NO_ALIGN - #if defined __linux__ + #if defined(__linux__) || defined(__APPLE__) #pragma pack() /* reset default packing */ #else #pragma pack(pop) /* reset previous packing */ @@ -399,7 +420,7 @@ enum { // ***** declare functions ***** #ifdef USE_METAMOD -void UTIL_LogPrintf( char *fmt, ... ); +void UTIL_LogPrintf( const char *fmt, ... ); void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage); short FixedSigned16( float value, float scale ); unsigned short FixedUnsigned16( float value, float scale ); @@ -826,11 +847,11 @@ int FN_AllowLagCompensation_Post(void); #ifdef FN_PrecacheModel -int FN_PrecacheModel(char *s); +int FN_PrecacheModel(const char *s); #endif // FN_PrecacheModel #ifdef FN_PrecacheSound -int FN_PrecacheSound(char *s); +int FN_PrecacheSound(const char *s); #endif // FN_PrecacheSound #ifdef FN_SetModel @@ -850,7 +871,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize #ifdef FN_ChangeLevel -void FN_ChangeLevel(char *s1, char *s2); +void FN_ChangeLevel(const char *s1, const char *s2); #endif // FN_ChangeLevel #ifdef FN_GetSpawnParms @@ -998,7 +1019,7 @@ void FN_ParticleEffect(const float *org, const float *dir, float color, float co #endif // FN_ParticleEffect #ifdef FN_LightStyle -void FN_LightStyle(int style, char *val); +void FN_LightStyle(int style, const char *val); #endif // FN_LightStyle #ifdef FN_DecalIndex @@ -1074,7 +1095,7 @@ void FN_AlertMessage(ALERT_TYPE atype, char *szFmt, ...); #endif // FN_AlertMessage #ifdef FN_EngineFprintf -void FN_EngineFprintf(FILE *pfile, char *szFmt, ...); +void FN_EngineFprintf(void *pfile, char *szFmt, ...); #endif // FN_EngineFprintf #ifdef FN_PvAllocEntPrivateData @@ -1138,11 +1159,11 @@ void FN_GetBonePosition(const edict_t *pEdict, int iBone, float *rgflOrigin, flo #endif // FN_GetBonePosition #ifdef FN_FunctionFromName -unsigned long FN_FunctionFromName(const char *pName); +uint32 FN_FunctionFromName(const char *pName); #endif // FN_FunctionFromName #ifdef FN_NameForFunction -const char *FN_NameForFunction(unsigned long function); +const char *FN_NameForFunction(uint32); #endif // FN_NameForFunction #ifdef FN_ClientPrintf @@ -1186,7 +1207,7 @@ CRC32_t FN_CRC32_Final(CRC32_t pulCRC); #endif // FN_CRC32_Final #ifdef FN_RandomLong -long FN_RandomLong(long lLow, long lHigh); +int32 FN_RandomLong(int32 lLow, int32 lHigh); #endif // FN_RandomLong #ifdef FN_RandomFloat @@ -1206,7 +1227,7 @@ void FN_CrosshairAngle(const edict_t *pClient, float pitch, float yaw); #endif // FN_CrosshairAngle #ifdef FN_LoadFileForMe -byte *FN_LoadFileForMe(char *filename, int *pLength); +byte *FN_LoadFileForMe(const char *filename, int *pLength); #endif // FN_LoadFileForMe #ifdef FN_FreeFile @@ -1254,19 +1275,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e); #endif // FN_GetInfoKeyBuffer #ifdef FN_InfoKeyValue -char *FN_InfoKeyValue(char *infobuffer, char *key); +char *FN_InfoKeyValue(char *infobuffer, const char *key); #endif // FN_InfoKeyValue #ifdef FN_SetKeyValue -void FN_SetKeyValue(char *infobuffer, char *key, char *value); +void FN_SetKeyValue(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue #ifdef FN_SetClientKeyValue -void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue #ifdef FN_IsMapValid -int FN_IsMapValid(char *filename); +int FN_IsMapValid(const char *filename); #endif // FN_IsMapValid #ifdef FN_StaticDecal @@ -1274,7 +1295,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo #endif // FN_StaticDecal #ifdef FN_PrecacheGeneric -int FN_PrecacheGeneric(char *s); +int FN_PrecacheGeneric(const char *s); #endif // FN_PrecacheGeneric #ifdef FN_GetPlayerUserId @@ -1342,7 +1363,7 @@ void FN_DeltaUnsetField(struct delta_s *pFields, const char *fieldname); #endif // FN_DeltaUnsetField #ifdef FN_DeltaAddEncoder -void FN_DeltaAddEncoder(char *name, void (*conditionalencode)( struct delta_s *pFields, const unsigned char *from, const unsigned char *to ) ); +void FN_DeltaAddEncoder(const char *name, void (*conditionalencode)( struct delta_s *pFields, const unsigned char *from, const unsigned char *to ) ); #endif // FN_DeltaAddEncoder #ifdef FN_GetCurrentPlayer @@ -1374,7 +1395,7 @@ int FN_engCreateInstancedBaseline(int classname, struct entity_state_s *baseline #endif // FN_engCreateInstancedBaseline #ifdef FN_Cvar_DirectSet -void FN_Cvar_DirectSet(struct cvar_s *var, char *value); +void FN_Cvar_DirectSet(struct cvar_s *var, const char *value); #endif // FN_Cvar_DirectSet #ifdef FN_ForceUnmodified @@ -1407,11 +1428,11 @@ const char *FN_GetPlayerAuthId(edict_t *e); #ifdef FN_PrecacheModel_Post -int FN_PrecacheModel_Post(char *s); +int FN_PrecacheModel_Post(const char *s); #endif // FN_PrecacheModel_Post #ifdef FN_PrecacheSound_Post -int FN_PrecacheSound_Post(char *s); +int FN_PrecacheSound_Post(const char *s); #endif // FN_PrecacheSound_Post #ifdef FN_SetModel_Post @@ -1431,7 +1452,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax); #endif // FN_SetSize_Post #ifdef FN_ChangeLevel_Post -void FN_ChangeLevel_Post(char *s1, char *s2); +void FN_ChangeLevel_Post(const char *s1, const char *s2); #endif // FN_ChangeLevel_Post #ifdef FN_GetSpawnParms_Post @@ -1579,7 +1600,7 @@ void FN_ParticleEffect_Post(const float *org, const float *dir, float color, flo #endif // FN_ParticleEffect_Post #ifdef FN_LightStyle_Post -void FN_LightStyle_Post(int style, char *val); +void FN_LightStyle_Post(int style, const char *val); #endif // FN_LightStyle_Post #ifdef FN_DecalIndex_Post @@ -1655,11 +1676,11 @@ void FN_AlertMessage_Post(ALERT_TYPE atype, char *szFmt, ...); #endif // FN_AlertMessage_Post #ifdef FN_EngineFprintf_Post -void FN_EngineFprintf_Post(FILE *pfile, char *szFmt, ...); +void FN_EngineFprintf_Post(void *pfile, char *szFmt, ...); #endif // FN_EngineFprintf_Post #ifdef FN_PvAllocEntPrivateData_Post -void *FN_PvAllocEntPrivateData_Post(edict_t *pEdict, long cb); +void *FN_PvAllocEntPrivateData_Post(edict_t *pEdict, int32 cb); #endif // FN_PvAllocEntPrivateData_Post #ifdef FN_PvEntPrivateData_Post @@ -1719,11 +1740,11 @@ void FN_GetBonePosition_Post(const edict_t *pEdict, int iBone, float *rgflOrigin #endif // FN_GetBonePosition_Post #ifdef FN_FunctionFromName_Post -unsigned long FN_FunctionFromName_Post(const char *pName); +uint32 FN_FunctionFromName_Post(const char *pName); #endif // FN_FunctionFromName_Post #ifdef FN_NameForFunction_Post -const char *FN_NameForFunction_Post(unsigned long function); +const char *FN_NameForFunction_Post(uint32); #endif // FN_NameForFunction_Post #ifdef FN_ClientPrintf_Post @@ -1767,7 +1788,7 @@ CRC32_t FN_CRC32_Final_Post(CRC32_t pulCRC); #endif // FN_CRC32_Final_Post #ifdef FN_RandomLong_Post -long FN_RandomLong_Post(long lLow, long lHigh); +int32 FN_RandomLong_Post(int32 lLow, int32 lHigh); #endif // FN_RandomLong_Post #ifdef FN_RandomFloat_Post @@ -1787,7 +1808,7 @@ void FN_CrosshairAngle_Post(const edict_t *pClient, float pitch, float yaw); #endif // FN_CrosshairAngle_Post #ifdef FN_LoadFileForMe_Post -byte *FN_LoadFileForMe_Post(char *filename, int *pLength); +byte *FN_LoadFileForMe_Post(const char *filename, int *pLength); #endif // FN_LoadFileForMe_Post #ifdef FN_FreeFile_Post @@ -1835,19 +1856,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e); #endif // FN_GetInfoKeyBuffer_Post #ifdef FN_InfoKeyValue_Post -char *FN_InfoKeyValue_Post(char *infobuffer, char *key); +char *FN_InfoKeyValue_Post(char *infobuffer, const char *key); #endif // FN_InfoKeyValue_Post #ifdef FN_SetKeyValue_Post -void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value); +void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value); #endif // FN_SetKeyValue_Post #ifdef FN_SetClientKeyValue_Post -void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value); +void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value); #endif // FN_SetClientKeyValue_Post #ifdef FN_IsMapValid_Post -int FN_IsMapValid_Post(char *filename); +int FN_IsMapValid_Post(const char *filename); #endif // FN_IsMapValid_Post #ifdef FN_StaticDecal_Post @@ -1855,7 +1876,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i #endif // FN_StaticDecal_Post #ifdef FN_PrecacheGeneric_Post -int FN_PrecacheGeneric_Post(char *s); +int FN_PrecacheGeneric_Post(const char *s); #endif // FN_PrecacheGeneric_Post #ifdef FN_GetPlayerUserId_Post @@ -1923,7 +1944,7 @@ void FN_DeltaUnsetField_Post(struct delta_s *pFields, const char *fieldname); #endif // FN_DeltaUnsetField_Post #ifdef FN_DeltaAddEncoder_Post -void FN_DeltaAddEncoder_Post(char *name, void (*conditionalencode)( struct delta_s *pFields, const unsigned char *from, const unsigned char *to ) ); +void FN_DeltaAddEncoder_Post(const char *name, void (*conditionalencode)( struct delta_s *pFields, const unsigned char *from, const unsigned char *to ) ); #endif // FN_DeltaAddEncoder_Post #ifdef FN_GetCurrentPlayer_Post @@ -1955,7 +1976,7 @@ int FN_engCreateInstancedBaseline_Post(int classname, struct entity_state_s *bas #endif // FN_engCreateInstancedBaseline_Post #ifdef FN_Cvar_DirectSet_Post -void FN_Cvar_DirectSet_Post(struct cvar_s *var, char *value); +void FN_Cvar_DirectSet_Post(struct cvar_s *var, const char *value); #endif // FN_Cvar_DirectSet_Post #ifdef FN_ForceUnmodified_Post @@ -2020,6 +2041,10 @@ int FN_ShouldCollide_Post(edict_t *pentTouched, edict_t *pentOther); void FN_AMXX_QUERY(void); #endif // FN_AMXX_QUERY +#ifdef FN_AMXX_CHECKGAME +int FN_AMXX_CHECKGAME(const char *); +#endif // FN_AMXX_CHECKGAME + #ifdef FN_AMXX_ATTACH void FN_AMXX_ATTACH(void); #endif // FN_AMXX_ATTACH @@ -2032,6 +2057,14 @@ void FN_AMXX_DETACH(void); void FN_AMXX_PLUGINSLOADED(void); #endif // FN_AMXX_PLUGINSLOADED +#ifdef FN_AMXX_PLUGINSUNLOADING +void FN_AMXX_PLUGINSUNLOADING(void); +#endif // FN_AMXX_PLUGINSUNLOADING + +#ifdef FN_AMXX_PLUGINSUNLOADED +void FN_AMXX_PLUGINSUNLOADED(void); +#endif // FN_AMXX_PLUGINSUNLOADED + // *** Types *** typedef void* (*PFN_REQ_FNPTR)(const char * /*name*/); @@ -2078,19 +2111,34 @@ enum PlayerProp Player_NewmenuPage, //int }; +enum LibType +{ + LibType_Library, + LibType_Class +}; + +#define MSGBLOCK_SET 0 +#define MSGBLOCK_GET 1 +#define BLOCK_NOT 0 +#define BLOCK_ONCE 1 +#define BLOCK_SET 2 + typedef void (*AUTHORIZEFUNC)(int player, const char *authstring); typedef int (*PFN_ADD_NATIVES) (const AMX_NATIVE_INFO * /*list*/); +typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/); typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...); typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...); typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/); -typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...); +typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...); typedef const char * (*PFN_GET_MODNAME) (void); typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/); typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/); typedef int (*PFN_FIND_AMXSCRIPT_BYAMX) (const AMX * /*amx*/); typedef int (*PFN_FIND_AMXSCRIPT_BYNAME) (const char * /*name*/); typedef int (*PFN_SET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, const char * /* source */, int /* max */); +typedef int (*PFN_SET_AMXSTRING_UTF8_CHAR) (AMX *amx, cell amx_addr, const char *source, size_t sourcelen, size_t maxlen); +typedef int (*PFN_SET_AMXSTRING_UTF8_CELL) (AMX *amx, cell amx_addr, const cell *source, size_t sourcelen, size_t maxlen); typedef char * (*PFN_GET_AMXSTRING) (AMX * /*amx*/, cell /*amx_addr*/, int /*bufferId*/, int * /*pLen*/); typedef int (*PFN_GET_AMXSTRINGLEN) (const cell *ptr); typedef char * (*PFN_FORMAT_AMXSTRING) (AMX * /*amx*/, cell * /*params*/, int /*startParam*/, int * /*pLen*/); @@ -2143,8 +2191,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/); typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/); typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/); -typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); -typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); +typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/); typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */); typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/); typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/); @@ -2159,8 +2207,17 @@ typedef int (*PFN_AMX_PUSH) (AMX * /*amx*/, cell /*value*/); typedef int (*PFN_SET_TEAM_INFO) (int /*player */, int /*teamid */, const char * /*name */); typedef void (*PFN_REG_AUTH_FUNC) (AUTHORIZEFUNC); typedef void (*PFN_UNREG_AUTH_FUNC) (AUTHORIZEFUNC); +typedef int (*PFN_FINDLIBRARY) (const char * /*name*/, LibType /*type*/); +typedef size_t (*PFN_ADDLIBRARIES) (const char * /*name*/, LibType /*type*/, void * /*parent*/); +typedef size_t (*PFN_REMOVELIBRARIES) (void * /*parent*/); +typedef void (*PFN_OVERRIDENATIVES) (AMX_NATIVE_INFO * /*natives*/, const char * /*myname*/); +typedef const char * (*PFN_GETLOCALINFO) (const char * /*name*/, const char * /*def*/); +typedef int (*PFN_AMX_REREGISTER) (AMX * /*amx*/, AMX_NATIVE_INFO * /*list*/, int /*list*/); +typedef void * (*PFN_REGISTERFUNCTIONEX) (void * /*pfn*/, const char * /*desc*/); +typedef void (*PFN_MESSAGE_BLOCK) (int /* mode */, int /* message */, int * /* opt */); extern PFN_ADD_NATIVES g_fn_AddNatives; +extern PFN_ADD_NEW_NATIVES g_fn_AddNewNatives; extern PFN_BUILD_PATHNAME g_fn_BuildPathname; extern PFN_BUILD_PATHNAME_R g_fn_BuildPathnameR; extern PFN_GET_AMXADDR g_fn_GetAmxAddr; @@ -2171,6 +2228,8 @@ extern PFN_GET_AMXSCRIPT g_fn_GetAmxScript; extern PFN_FIND_AMXSCRIPT_BYAMX g_fn_FindAmxScriptByAmx; extern PFN_FIND_AMXSCRIPT_BYNAME g_fn_FindAmxScriptByName; extern PFN_SET_AMXSTRING g_fn_SetAmxString; +extern PFN_SET_AMXSTRING_UTF8_CHAR g_fn_SetAmxStringUTF8Char; +extern PFN_SET_AMXSTRING_UTF8_CELL g_fn_SetAmxStringUTF8Cell; extern PFN_GET_AMXSTRING g_fn_GetAmxString; extern PFN_GET_AMXSTRINGLEN g_fn_GetAmxStringLen; extern PFN_FORMAT_AMXSTRING g_fn_FormatAmxString; @@ -2226,11 +2285,20 @@ extern PFN_SET_TEAM_INFO g_fn_SetTeamInfo; extern PFN_PLAYER_PROP_ADDR g_fn_PlayerPropAddr; extern PFN_REG_AUTH_FUNC g_fn_RegAuthFunc; extern PFN_UNREG_AUTH_FUNC g_fn_UnregAuthFunc; +extern PFN_FINDLIBRARY g_fn_FindLibrary; +extern PFN_ADDLIBRARIES g_fn_AddLibraries; +extern PFN_REMOVELIBRARIES g_fn_RemoveLibraries; +extern PFN_OVERRIDENATIVES g_fn_OverrideNatives; +extern PFN_GETLOCALINFO g_fn_GetLocalInfo; +extern PFN_AMX_REREGISTER g_fn_AmxReRegister; +extern PFN_REGISTERFUNCTIONEX g_fn_RegisterFunctionEx; +extern PFN_MESSAGE_BLOCK g_fn_MessageBlock; #ifdef MAY_NEVER_BE_DEFINED // Function prototypes for intellisense and similar systems // They understand #if 0 so we use #ifdef MAY_NEVER_BE_DEFINED int MF_AddNatives (const AMX_NATIVE_INFO *list) { } +int MF_AddNewNatives (const AMX_NATIVE_INFO *list) { } char * MF_BuildPathname (const char * format, ...) { } char * MF_BuildPathnameR (char *buffer, size_t maxlen, const char *fmt, ...) { } cell * MF_GetAmxAddr (AMX * amx, cell offset) { } @@ -2241,6 +2309,8 @@ AMX * MF_GetScriptAmx (int id) { } int MF_FindScriptByAmx (const AMX * amx) { } int MF_FindScriptByAmx (const char * name) { } int MF_SetAmxString (AMX * amx, cell amx_addr, const char * source , int max ) { } +int MF_SetAmxStringUTF8Char (AMX *amx, cell amx_addr, const char *source, size_t sourcelen, size_t maxlen) { } +int MF_SetAmxStringUTF8Cell (AMX *amx, cell amx_addr, const cell *source, size_t sourcelen, size_t maxlen) { } char * MF_GetAmxString (AMX * amx, cell amx_addr, int bufferId, int * pLen) { } int MF_GetAmxStringLen (const cell *ptr) { } char * MF_FormatAmxString (AMX * amx, cell * params, int startParam, int * pLen) { } @@ -2290,9 +2360,18 @@ int MF_SetPlayerTeamInfo (int id, int teamid, const char *teamname) { } void * MF_PlayerPropAddr (int id, int prop) { } void MF_RegAuthFunc (AUTHORIZEFUNC fn) { } void MF_UnregAuthFunc (AUTHORIZEFUNC fn) { } +int MF_FindLibrary (const char *name, LibType type) { } +size_t MF_AddLibraries (const char *name, LibType type, void *parent) { } +size_t MF_RemoveLibraries (void *parent) { } +void MF_OverrideNatives (AMX_NATIVE_INFO *natives, const char *myname) { } +const char * MF_GetLocalInfo (const char *name, const char *def) { } +int MF_AmxReRegister (AMX *amx, AMX_NATIVE_INFO *list, int number) { return 0; } +void * MF_RegisterFunctionEx (void *pfn, const char *description) { } +void * MF_MessageBlock (int mode, int msg, int *opt) { } #endif // MAY_NEVER_BE_DEFINED #define MF_AddNatives g_fn_AddNatives +#define MF_AddNewNatives g_fn_AddNewNatives #define MF_BuildPathname g_fn_BuildPathname #define MF_BuildPathnameR g_fn_BuildPathnameR #define MF_FormatAmxString g_fn_FormatAmxString @@ -2304,6 +2383,8 @@ void MF_UnregAuthFunc (AUTHORIZEFUNC fn) { } #define MF_FindScriptByAmx g_fn_FindAmxScriptByAmx #define MF_FindScriptByName g_fn_FindAmxScriptByName #define MF_SetAmxString g_fn_SetAmxString +#define MF_SetAmxStringUTF8Char g_fn_SetAmxStringUTF8Char +#define MF_SetAmxStringUTF8Cell g_fn_SetAmxStringUTF8Cell #define MF_GetAmxString g_fn_GetAmxString #define MF_GetAmxStringLen g_fn_GetAmxStringLen #define MF_CopyAmxMemory g_fn_CopyAmxMemory @@ -2359,6 +2440,14 @@ void MF_LogError(AMX *amx, int err, const char *fmt, ...); #define MF_PlayerPropAddr g_fn_PlayerPropAddr #define MF_RegAuthFunc g_fn_RegAuthFunc #define MF_UnregAuthFunc g_fn_UnregAuthFunc +#define MF_FindLibrary g_fn_FindLibrary +#define MF_AddLibraries g_fn_AddLibraries +#define MF_RemoveLibraries g_fn_RemoveLibraries +#define MF_OverrideNatives g_fn_OverrideNatives +#define MF_GetLocalInfo g_fn_GetLocalInfo +#define MF_AmxReRegister g_fn_AmxReRegister +#define MF_RegisterFunctionEx g_fn_RegisterFunctionEx +#define MF_MessageBlock g_fn_MessageBlock #ifdef MEMORY_TEST /*** Memory ***/ diff --git a/dlls/cstrike/csx/WinCSX/moduleconfig.h b/dlls/cstrike/csx/WinCSX/moduleconfig.h index 56b8afc5..fe669ad3 100755 --- a/dlls/cstrike/csx/WinCSX/moduleconfig.h +++ b/dlls/cstrike/csx/WinCSX/moduleconfig.h @@ -1,4 +1,15 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ diff --git a/dlls/cstrike/csx/WinCSX/resources/Resource.h b/dlls/cstrike/csx/WinCSX/resources/Resource.h index c197fc36..7c88fec8 100755 --- a/dlls/cstrike/csx/WinCSX/resources/Resource.h +++ b/dlls/cstrike/csx/WinCSX/resources/Resource.h @@ -1,7 +1,12 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by WinCSX.rc +// vim: set ts=4 sw=4 tw=99 noet: // +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #define IDC_MYICON 2 #define IDM_VISUALSTYLES 1 #define IDD_WINCSX_DIALOG 102 diff --git a/dlls/cstrike/csx/meta_api.cpp b/dlls/cstrike/csx/meta_api.cpp index e58d81d8..479eaa9e 100755 --- a/dlls/cstrike/csx/meta_api.cpp +++ b/dlls/cstrike/csx/meta_api.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// CSX Module +// + #include "amxxmodule.h" #include "rank.h" diff --git a/dlls/cstrike/csx/rank.cpp b/dlls/cstrike/csx/rank.cpp index fb629aea..93ac7b2c 100755 --- a/dlls/cstrike/csx/rank.cpp +++ b/dlls/cstrike/csx/rank.cpp @@ -1,4 +1,15 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// +// CSX Module +// #include "amxxmodule.h" #include "rank.h" diff --git a/dlls/cstrike/csx/rank.h b/dlls/cstrike/csx/rank.h index c9e4c1bc..2b694028 100755 --- a/dlls/cstrike/csx/rank.h +++ b/dlls/cstrike/csx/rank.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// CSX Module +// + #ifndef RANK_H #define RANK_H diff --git a/dlls/cstrike/csx/sdk/amxxmodule.cpp b/dlls/cstrike/csx/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/dlls/cstrike/csx/sdk/amxxmodule.cpp +++ b/dlls/cstrike/csx/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/cstrike/csx/sdk/amxxmodule.h b/dlls/cstrike/csx/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/dlls/cstrike/csx/sdk/amxxmodule.h +++ b/dlls/cstrike/csx/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/cstrike/csx/sdk/moduleconfig.h b/dlls/cstrike/csx/sdk/moduleconfig.h index 5c0cf65c..f2070e6e 100755 --- a/dlls/cstrike/csx/sdk/moduleconfig.h +++ b/dlls/cstrike/csx/sdk/moduleconfig.h @@ -1,4 +1,15 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ diff --git a/dlls/cstrike/csx/usermsg.cpp b/dlls/cstrike/csx/usermsg.cpp index f8a140c9..5cb463b4 100755 --- a/dlls/cstrike/csx/usermsg.cpp +++ b/dlls/cstrike/csx/usermsg.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// CSX Module +// + #include "amxxmodule.h" #include "rank.h" From 82784a61696ba8e612e48fb567cc779ca5f40667 Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 05:01:44 -0500 Subject: [PATCH 07/71] Update license headers for dod modules. --- dlls/dod/dodfun/CMisc.cpp | 43 +++++++++------------------- dlls/dod/dodfun/CMisc.h | 43 +++++++++------------------- dlls/dod/dodfun/NBase.cpp | 43 +++++++++------------------- dlls/dod/dodfun/NPD.cpp | 43 +++++++++------------------- dlls/dod/dodfun/Utils.cpp | 43 +++++++++------------------- dlls/dod/dodfun/dodfun.h | 43 +++++++++------------------- dlls/dod/dodfun/moduleconfig.cpp | 43 +++++++++------------------- dlls/dod/dodfun/sdk/amxxmodule.cpp | 46 +++++++++--------------------- dlls/dod/dodfun/sdk/amxxmodule.h | 17 ++++++++--- dlls/dod/dodfun/sdk/moduleconfig.h | 13 ++++++++- dlls/dod/dodfun/usermsg.cpp | 43 +++++++++------------------- dlls/dod/dodx/CMisc.cpp | 43 +++++++++------------------- dlls/dod/dodx/CMisc.h | 43 +++++++++------------------- dlls/dod/dodx/CRank.cpp | 43 +++++++++------------------- dlls/dod/dodx/CRank.h | 43 +++++++++------------------- dlls/dod/dodx/NBase.cpp | 43 +++++++++------------------- dlls/dod/dodx/NRank.cpp | 43 +++++++++------------------- dlls/dod/dodx/Utils.cpp | 43 +++++++++------------------- dlls/dod/dodx/dodx.h | 43 +++++++++------------------- dlls/dod/dodx/moduleconfig.cpp | 43 +++++++++------------------- dlls/dod/dodx/sdk/amxxmodule.cpp | 46 +++++++++--------------------- dlls/dod/dodx/sdk/amxxmodule.h | 17 ++++++++--- dlls/dod/dodx/sdk/moduleconfig.h | 13 ++++++++- dlls/dod/dodx/usermsg.cpp | 44 +++++++++------------------- 24 files changed, 311 insertions(+), 616 deletions(-) diff --git a/dlls/dod/dodfun/CMisc.cpp b/dlls/dod/dodfun/CMisc.cpp index fc496311..f4ca3b8b 100755 --- a/dlls/dod/dodfun/CMisc.cpp +++ b/dlls/dod/dodfun/CMisc.cpp @@ -1,33 +1,16 @@ -/* - * dodfun - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DoD Fun Module +// #include "amxxmodule.h" #include "CMisc.h" diff --git a/dlls/dod/dodfun/CMisc.h b/dlls/dod/dodfun/CMisc.h index 93ff14ea..7e2f6d06 100755 --- a/dlls/dod/dodfun/CMisc.h +++ b/dlls/dod/dodfun/CMisc.h @@ -1,33 +1,16 @@ -/* - * dodfun - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DoD Fun Module +// #ifndef CMISC_H #define CMISC_H diff --git a/dlls/dod/dodfun/NBase.cpp b/dlls/dod/dodfun/NBase.cpp index f15cc8ca..21e40dc2 100755 --- a/dlls/dod/dodfun/NBase.cpp +++ b/dlls/dod/dodfun/NBase.cpp @@ -1,33 +1,16 @@ -/* - * dodfun - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DoD Fun Module +// #include "amxxmodule.h" #include "dodfun.h" diff --git a/dlls/dod/dodfun/NPD.cpp b/dlls/dod/dodfun/NPD.cpp index 01dff499..4af5eda2 100755 --- a/dlls/dod/dodfun/NPD.cpp +++ b/dlls/dod/dodfun/NPD.cpp @@ -1,33 +1,16 @@ -/* - * dodfun - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DoD Fun Module +// #include "amxxmodule.h" #include "dodfun.h" diff --git a/dlls/dod/dodfun/Utils.cpp b/dlls/dod/dodfun/Utils.cpp index c1d82b7e..219c887c 100755 --- a/dlls/dod/dodfun/Utils.cpp +++ b/dlls/dod/dodfun/Utils.cpp @@ -1,33 +1,16 @@ -/* - * dodfun - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DoD Fun Module +// #include "amxxmodule.h" #include "dodfun.h" diff --git a/dlls/dod/dodfun/dodfun.h b/dlls/dod/dodfun/dodfun.h index 3cfbd31f..eacbcd00 100755 --- a/dlls/dod/dodfun/dodfun.h +++ b/dlls/dod/dodfun/dodfun.h @@ -1,33 +1,16 @@ -/* - * dodfun - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DoD Fun Module +// #ifndef DODFUN_H #define DODFUN_H diff --git a/dlls/dod/dodfun/moduleconfig.cpp b/dlls/dod/dodfun/moduleconfig.cpp index 742ab79a..e4b957a7 100755 --- a/dlls/dod/dodfun/moduleconfig.cpp +++ b/dlls/dod/dodfun/moduleconfig.cpp @@ -1,33 +1,16 @@ -/* - * dodfun - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DoD Fun Module +// #include #include "amxxmodule.h" diff --git a/dlls/dod/dodfun/sdk/amxxmodule.cpp b/dlls/dod/dodfun/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/dlls/dod/dodfun/sdk/amxxmodule.cpp +++ b/dlls/dod/dodfun/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/dod/dodfun/sdk/amxxmodule.h b/dlls/dod/dodfun/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/dlls/dod/dodfun/sdk/amxxmodule.h +++ b/dlls/dod/dodfun/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/dod/dodfun/sdk/moduleconfig.h b/dlls/dod/dodfun/sdk/moduleconfig.h index c65407f0..7a0316a4 100755 --- a/dlls/dod/dodfun/sdk/moduleconfig.h +++ b/dlls/dod/dodfun/sdk/moduleconfig.h @@ -1,4 +1,15 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ diff --git a/dlls/dod/dodfun/usermsg.cpp b/dlls/dod/dodfun/usermsg.cpp index 00de386d..ca592fe8 100755 --- a/dlls/dod/dodfun/usermsg.cpp +++ b/dlls/dod/dodfun/usermsg.cpp @@ -1,33 +1,16 @@ -/* - * DoDFun - * Copyright (c) 2004 £ukasz W³asiñski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DoD Fun Module +// #include "amxxmodule.h" #include "dodfun.h" diff --git a/dlls/dod/dodx/CMisc.cpp b/dlls/dod/dodx/CMisc.cpp index b281202a..7a2cdcaa 100755 --- a/dlls/dod/dodx/CMisc.cpp +++ b/dlls/dod/dodx/CMisc.cpp @@ -1,33 +1,16 @@ -/* - * DoDx - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DODX Module +// #include "amxxmodule.h" #include "CMisc.h" diff --git a/dlls/dod/dodx/CMisc.h b/dlls/dod/dodx/CMisc.h index 17241d15..366454ee 100755 --- a/dlls/dod/dodx/CMisc.h +++ b/dlls/dod/dodx/CMisc.h @@ -1,33 +1,16 @@ -/* - * DoDX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DODX Module +// #ifndef CMISC_H #define CMISC_H diff --git a/dlls/dod/dodx/CRank.cpp b/dlls/dod/dodx/CRank.cpp index 82794da7..8a5b7462 100755 --- a/dlls/dod/dodx/CRank.cpp +++ b/dlls/dod/dodx/CRank.cpp @@ -1,33 +1,16 @@ -/* - * DoDX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DODX Module +// #include "amxxmodule.h" #include "CRank.h" diff --git a/dlls/dod/dodx/CRank.h b/dlls/dod/dodx/CRank.h index dc77a09b..f354eedc 100755 --- a/dlls/dod/dodx/CRank.h +++ b/dlls/dod/dodx/CRank.h @@ -1,33 +1,16 @@ -/* - * DoDX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DODX Module +// #ifndef CRANK_H #define CRANK_H diff --git a/dlls/dod/dodx/NBase.cpp b/dlls/dod/dodx/NBase.cpp index 74028d9e..66b51d82 100755 --- a/dlls/dod/dodx/NBase.cpp +++ b/dlls/dod/dodx/NBase.cpp @@ -1,33 +1,16 @@ -/* - * DoDX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DODX Module +// #include "amxxmodule.h" #include "dodx.h" diff --git a/dlls/dod/dodx/NRank.cpp b/dlls/dod/dodx/NRank.cpp index e999327a..6e34cb57 100755 --- a/dlls/dod/dodx/NRank.cpp +++ b/dlls/dod/dodx/NRank.cpp @@ -1,33 +1,16 @@ -/* - * DoDX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DODX Module +// #include "amxxmodule.h" #include "dodx.h" diff --git a/dlls/dod/dodx/Utils.cpp b/dlls/dod/dodx/Utils.cpp index 5879c869..fe71a87c 100755 --- a/dlls/dod/dodx/Utils.cpp +++ b/dlls/dod/dodx/Utils.cpp @@ -1,33 +1,16 @@ -/* - * DoDX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DODX Module +// #include "amxxmodule.h" #include "dodx.h" diff --git a/dlls/dod/dodx/dodx.h b/dlls/dod/dodx/dodx.h index c7bf325b..f6b1e3ef 100755 --- a/dlls/dod/dodx/dodx.h +++ b/dlls/dod/dodx/dodx.h @@ -1,33 +1,16 @@ -/* - * DoDX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DODX Module +// #ifndef DODX_H #define DODX_H diff --git a/dlls/dod/dodx/moduleconfig.cpp b/dlls/dod/dodx/moduleconfig.cpp index 82d5fae3..ffa0e2e8 100755 --- a/dlls/dod/dodx/moduleconfig.cpp +++ b/dlls/dod/dodx/moduleconfig.cpp @@ -1,33 +1,16 @@ -/* - * DoDX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DODX Module +// #include "amxxmodule.h" #include "dodx.h" diff --git a/dlls/dod/dodx/sdk/amxxmodule.cpp b/dlls/dod/dodx/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/dlls/dod/dodx/sdk/amxxmodule.cpp +++ b/dlls/dod/dodx/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/dod/dodx/sdk/amxxmodule.h b/dlls/dod/dodx/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/dlls/dod/dodx/sdk/amxxmodule.h +++ b/dlls/dod/dodx/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/dod/dodx/sdk/moduleconfig.h b/dlls/dod/dodx/sdk/moduleconfig.h index 75d3c809..f32329e6 100755 --- a/dlls/dod/dodx/sdk/moduleconfig.h +++ b/dlls/dod/dodx/sdk/moduleconfig.h @@ -1,4 +1,15 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ diff --git a/dlls/dod/dodx/usermsg.cpp b/dlls/dod/dodx/usermsg.cpp index b663f33c..bbcf3b0c 100755 --- a/dlls/dod/dodx/usermsg.cpp +++ b/dlls/dod/dodx/usermsg.cpp @@ -1,33 +1,17 @@ -/* - * DoDX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DODX Module +// + #include "amxxmodule.h" #include "dodx.h" From caf0dbb3417710765a1a7eee2982a2eb9bebe15c Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 05:05:55 -0500 Subject: [PATCH 08/71] Update license headers for engine module. --- dlls/engine/amxxapi.cpp | 13 ++++++++++ dlls/engine/engine.cpp | 13 ++++++++++ dlls/engine/engine.h | 13 ++++++++++ dlls/engine/entity.cpp | 13 ++++++++++ dlls/engine/entity.h | 13 ++++++++++ dlls/engine/forwards.cpp | 13 ++++++++++ dlls/engine/globals.cpp | 13 ++++++++++ dlls/engine/gpglobals.h | 13 ++++++++++ dlls/engine/sdk/CString.h | 38 ++++++---------------------- dlls/engine/sdk/CVector.h | 38 ++++++---------------------- dlls/engine/sdk/amxxmodule.cpp | 46 ++++++++++------------------------ dlls/engine/sdk/amxxmodule.h | 17 ++++++++++--- dlls/engine/sdk/moduleconfig.h | 13 +++++++++- 13 files changed, 158 insertions(+), 98 deletions(-) diff --git a/dlls/engine/amxxapi.cpp b/dlls/engine/amxxapi.cpp index 551a5f36..ae1e53a2 100755 --- a/dlls/engine/amxxapi.cpp +++ b/dlls/engine/amxxapi.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Engine Module +// + #include "engine.h" BOOL CheckForPublic(const char *publicname); diff --git a/dlls/engine/engine.cpp b/dlls/engine/engine.cpp index 24e38bea..3e147c74 100755 --- a/dlls/engine/engine.cpp +++ b/dlls/engine/engine.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Engine Module +// + #include "engine.h" struct usercmd_s *g_cmd; diff --git a/dlls/engine/engine.h b/dlls/engine/engine.h index 2eacf4f9..4e486a4e 100755 --- a/dlls/engine/engine.h +++ b/dlls/engine/engine.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Engine Module +// + #ifndef _ENGINE_INCLUDE_H #define _ENGINE_INCLUDE_H diff --git a/dlls/engine/entity.cpp b/dlls/engine/entity.cpp index 09bb6bac..f5bff2c5 100755 --- a/dlls/engine/entity.cpp +++ b/dlls/engine/entity.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Engine Module +// + #include "entity.h" int is_ent_valid(int iEnt) diff --git a/dlls/engine/entity.h b/dlls/engine/entity.h index cc7169a1..a0497296 100755 --- a/dlls/engine/entity.h +++ b/dlls/engine/entity.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Engine Module +// + #ifndef _INCLUDE_ENGINE_ENTSTUFF #define _INCLUDE_ENGINE_ENTSTUFF diff --git a/dlls/engine/forwards.cpp b/dlls/engine/forwards.cpp index aa7f1069..0d47326a 100755 --- a/dlls/engine/forwards.cpp +++ b/dlls/engine/forwards.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Engine Module +// + #include "engine.h" bool incmd = false; diff --git a/dlls/engine/globals.cpp b/dlls/engine/globals.cpp index 728f9736..3b8a281d 100755 --- a/dlls/engine/globals.cpp +++ b/dlls/engine/globals.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Engine Module +// + #include "gpglobals.h" static cell AMX_NATIVE_CALL get_global_float(AMX *amx, cell *params) diff --git a/dlls/engine/gpglobals.h b/dlls/engine/gpglobals.h index 61af3b5e..6aa73ded 100755 --- a/dlls/engine/gpglobals.h +++ b/dlls/engine/gpglobals.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Engine Module +// + #ifndef _INCLUDE_ENGINE_GLOBAL #define _INCLUDE_ENGINE_GLOBAL diff --git a/dlls/engine/sdk/CString.h b/dlls/engine/sdk/CString.h index 1c2c5789..9f9b63f3 100755 --- a/dlls/engine/sdk/CString.h +++ b/dlls/engine/sdk/CString.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef _INCLUDE_CSTRING_H #define _INCLUDE_CSTRING_H diff --git a/dlls/engine/sdk/CVector.h b/dlls/engine/sdk/CVector.h index 24355d4e..44241413 100755 --- a/dlls/engine/sdk/CVector.h +++ b/dlls/engine/sdk/CVector.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef __CVECTOR_H__ #define __CVECTOR_H__ diff --git a/dlls/engine/sdk/amxxmodule.cpp b/dlls/engine/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/dlls/engine/sdk/amxxmodule.cpp +++ b/dlls/engine/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/engine/sdk/amxxmodule.h b/dlls/engine/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/dlls/engine/sdk/amxxmodule.h +++ b/dlls/engine/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/engine/sdk/moduleconfig.h b/dlls/engine/sdk/moduleconfig.h index b71dfce8..932731c7 100755 --- a/dlls/engine/sdk/moduleconfig.h +++ b/dlls/engine/sdk/moduleconfig.h @@ -1,4 +1,15 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ From 96a8fc570097d85f73e41f9085d46b17e5a71b07 Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 05:10:06 -0500 Subject: [PATCH 09/71] Update license headers for fakemeta module. --- dlls/fakemeta/dllfunc.cpp | 13 +++++++++ dlls/fakemeta/dllfunc.h | 13 +++++++++ dlls/fakemeta/engfunc.cpp | 13 +++++++++ dlls/fakemeta/engfunc.h | 13 +++++++++ dlls/fakemeta/fakemeta_amxx.cpp | 13 +++++++++ dlls/fakemeta/fakemeta_amxx.h | 13 +++++++++ dlls/fakemeta/fm_tr.cpp | 13 +++++++++ dlls/fakemeta/fm_tr.h | 13 +++++++++ dlls/fakemeta/fm_tr2.cpp | 13 +++++++++ dlls/fakemeta/forward.cpp | 13 +++++++++ dlls/fakemeta/forward.h | 13 +++++++++ dlls/fakemeta/forwardmacros.h | 13 +++++++++ dlls/fakemeta/glb.cpp | 13 +++++++++ dlls/fakemeta/glb.h | 13 +++++++++ dlls/fakemeta/misc.cpp | 13 +++++++++ dlls/fakemeta/pdata.cpp | 13 +++++++++ dlls/fakemeta/pev.cpp | 13 +++++++++ dlls/fakemeta/pev.h | 13 +++++++++ dlls/fakemeta/sdk/CString.h | 38 ++++++-------------------- dlls/fakemeta/sdk/CVector.h | 38 ++++++-------------------- dlls/fakemeta/sdk/amxxmodule.cpp | 46 +++++++++----------------------- dlls/fakemeta/sdk/amxxmodule.h | 17 +++++++++--- dlls/fakemeta/sdk/moduleconfig.h | 13 ++++++++- 23 files changed, 288 insertions(+), 98 deletions(-) diff --git a/dlls/fakemeta/dllfunc.cpp b/dlls/fakemeta/dllfunc.cpp index 42930843..8aa0429d 100755 --- a/dlls/fakemeta/dllfunc.cpp +++ b/dlls/fakemeta/dllfunc.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #include "fakemeta_amxx.h" //by mahnsawce from his NS module diff --git a/dlls/fakemeta/dllfunc.h b/dlls/fakemeta/dllfunc.h index e581237f..268c94ab 100755 --- a/dlls/fakemeta/dllfunc.h +++ b/dlls/fakemeta/dllfunc.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #ifndef _INCLUDE_DLLFUNC_H #define _INCLUDE_DLLFUNC_H diff --git a/dlls/fakemeta/engfunc.cpp b/dlls/fakemeta/engfunc.cpp index 791754e7..479b8295 100755 --- a/dlls/fakemeta/engfunc.cpp +++ b/dlls/fakemeta/engfunc.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #include "fakemeta_amxx.h" TraceResult g_tr; diff --git a/dlls/fakemeta/engfunc.h b/dlls/fakemeta/engfunc.h index 9d7e749b..d5c43d14 100755 --- a/dlls/fakemeta/engfunc.h +++ b/dlls/fakemeta/engfunc.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #ifndef _ENGFUNC_INCLUDE_H #define _ENGFUNC_INCLUDE_H diff --git a/dlls/fakemeta/fakemeta_amxx.cpp b/dlls/fakemeta/fakemeta_amxx.cpp index 5de5573c..67e9e611 100755 --- a/dlls/fakemeta/fakemeta_amxx.cpp +++ b/dlls/fakemeta/fakemeta_amxx.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #include "fakemeta_amxx.h" #include "sh_stack.h" diff --git a/dlls/fakemeta/fakemeta_amxx.h b/dlls/fakemeta/fakemeta_amxx.h index 4bc72ccf..4da06c53 100755 --- a/dlls/fakemeta/fakemeta_amxx.h +++ b/dlls/fakemeta/fakemeta_amxx.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #ifndef _FAKEMETA_INCLUDE_H #define _FAKEMETA_INCLUDE_H diff --git a/dlls/fakemeta/fm_tr.cpp b/dlls/fakemeta/fm_tr.cpp index 8ac044f5..bf0c6c34 100755 --- a/dlls/fakemeta/fm_tr.cpp +++ b/dlls/fakemeta/fm_tr.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #include "fakemeta_amxx.h" TraceResult *gfm_tr; diff --git a/dlls/fakemeta/fm_tr.h b/dlls/fakemeta/fm_tr.h index 5b687026..8eaf8c00 100755 --- a/dlls/fakemeta/fm_tr.h +++ b/dlls/fakemeta/fm_tr.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #ifndef _INCLUDE_TR_H #define _INCLUDE_TR_H diff --git a/dlls/fakemeta/fm_tr2.cpp b/dlls/fakemeta/fm_tr2.cpp index c553caa3..cbf669fb 100644 --- a/dlls/fakemeta/fm_tr2.cpp +++ b/dlls/fakemeta/fm_tr2.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #include "fakemeta_amxx.h" #include "sh_stack.h" diff --git a/dlls/fakemeta/forward.cpp b/dlls/fakemeta/forward.cpp index 009b9302..0c231d2e 100755 --- a/dlls/fakemeta/forward.cpp +++ b/dlls/fakemeta/forward.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #include "fakemeta_amxx.h" CVector Engine[ENGFUNC_NUM+10]; diff --git a/dlls/fakemeta/forward.h b/dlls/fakemeta/forward.h index a804a3e8..310869bc 100755 --- a/dlls/fakemeta/forward.h +++ b/dlls/fakemeta/forward.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #ifndef _INCLUDE_FORWARD_H #define _INCLUDE_FORWARD_H diff --git a/dlls/fakemeta/forwardmacros.h b/dlls/fakemeta/forwardmacros.h index a542e301..eada3b9e 100755 --- a/dlls/fakemeta/forwardmacros.h +++ b/dlls/fakemeta/forwardmacros.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #ifndef FORWARDMACROS_H #define FORWARDMACROS_H diff --git a/dlls/fakemeta/glb.cpp b/dlls/fakemeta/glb.cpp index 7cea37a8..d03c13e4 100644 --- a/dlls/fakemeta/glb.cpp +++ b/dlls/fakemeta/glb.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #include "fakemeta_amxx.h" static int g_glob_offset_table[glb_end_pchar] = {-1}; diff --git a/dlls/fakemeta/glb.h b/dlls/fakemeta/glb.h index 7725573d..26a71a78 100644 --- a/dlls/fakemeta/glb.h +++ b/dlls/fakemeta/glb.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #ifndef _INCLUDE_GLB_H #define _INCLUDE_GLB_H diff --git a/dlls/fakemeta/misc.cpp b/dlls/fakemeta/misc.cpp index c9399830..92e4a0c9 100644 --- a/dlls/fakemeta/misc.cpp +++ b/dlls/fakemeta/misc.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #include "fakemeta_amxx.h" #include // HLSDK, for the animation natives diff --git a/dlls/fakemeta/pdata.cpp b/dlls/fakemeta/pdata.cpp index 6403635a..bc4b183c 100755 --- a/dlls/fakemeta/pdata.cpp +++ b/dlls/fakemeta/pdata.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #include "fakemeta_amxx.h" #if defined PAWN_CELL_SIZE diff --git a/dlls/fakemeta/pev.cpp b/dlls/fakemeta/pev.cpp index 63538318..5d41be5c 100755 --- a/dlls/fakemeta/pev.cpp +++ b/dlls/fakemeta/pev.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #include "fakemeta_amxx.h" /** Optimizations for Fakemeta. In the end we'll do this for other things too. diff --git a/dlls/fakemeta/pev.h b/dlls/fakemeta/pev.h index 00369f7f..46febd83 100755 --- a/dlls/fakemeta/pev.h +++ b/dlls/fakemeta/pev.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Module +// + #ifndef _INCLUDE_PEV_H #define _INCLUDE_PEV_H diff --git a/dlls/fakemeta/sdk/CString.h b/dlls/fakemeta/sdk/CString.h index 18f68737..8c6ebc95 100755 --- a/dlls/fakemeta/sdk/CString.h +++ b/dlls/fakemeta/sdk/CString.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef _INCLUDE_CSTRING_H #define _INCLUDE_CSTRING_H diff --git a/dlls/fakemeta/sdk/CVector.h b/dlls/fakemeta/sdk/CVector.h index 24355d4e..44241413 100755 --- a/dlls/fakemeta/sdk/CVector.h +++ b/dlls/fakemeta/sdk/CVector.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef __CVECTOR_H__ #define __CVECTOR_H__ diff --git a/dlls/fakemeta/sdk/amxxmodule.cpp b/dlls/fakemeta/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/dlls/fakemeta/sdk/amxxmodule.cpp +++ b/dlls/fakemeta/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/fakemeta/sdk/amxxmodule.h b/dlls/fakemeta/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/dlls/fakemeta/sdk/amxxmodule.h +++ b/dlls/fakemeta/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/fakemeta/sdk/moduleconfig.h b/dlls/fakemeta/sdk/moduleconfig.h index ea9804b9..95aceb5f 100755 --- a/dlls/fakemeta/sdk/moduleconfig.h +++ b/dlls/fakemeta/sdk/moduleconfig.h @@ -1,4 +1,15 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ From c41219ae795e8a473b4943fd13996bd745fe5b01 Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 05:11:56 -0500 Subject: [PATCH 10/71] Update license headers for fun module. --- dlls/fun/fun.cpp | 44 ++++++++++------------------------- dlls/fun/fun.h | 45 +++++++++++------------------------- dlls/fun/sdk/amxxmodule.cpp | 46 +++++++++++-------------------------- dlls/fun/sdk/amxxmodule.h | 17 ++++++++++---- dlls/fun/sdk/moduleconfig.h | 14 ++++++++++- 5 files changed, 64 insertions(+), 102 deletions(-) diff --git a/dlls/fun/fun.cpp b/dlls/fun/fun.cpp index 9f00196e..e7adb097 100755 --- a/dlls/fun/fun.cpp +++ b/dlls/fun/fun.cpp @@ -1,35 +1,15 @@ -/* AMX Mod X -* Fun Module -* -* by the AMX Mod X Development Team -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fun Module +// #include #include "fun.h" diff --git a/dlls/fun/fun.h b/dlls/fun/fun.h index 738c7fc6..7b942a35 100755 --- a/dlls/fun/fun.h +++ b/dlls/fun/fun.h @@ -1,35 +1,16 @@ -/* AMX Mod X -* Fun Module -* -* by the AMX Mod X Development Team -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fun Module +// + #include "amxxmodule.h" // Fun-specific defines below diff --git a/dlls/fun/sdk/amxxmodule.cpp b/dlls/fun/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/dlls/fun/sdk/amxxmodule.cpp +++ b/dlls/fun/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/fun/sdk/amxxmodule.h b/dlls/fun/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/dlls/fun/sdk/amxxmodule.h +++ b/dlls/fun/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/fun/sdk/moduleconfig.h b/dlls/fun/sdk/moduleconfig.h index 5c0883d1..a326ecde 100755 --- a/dlls/fun/sdk/moduleconfig.h +++ b/dlls/fun/sdk/moduleconfig.h @@ -1,4 +1,16 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ From b7c205baf0bc89da5096fc7b6850885bc971c248 Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 05:13:52 -0500 Subject: [PATCH 11/71] Update license headers for geoip module. --- dlls/geoip/geoip_amxx.cpp | 13 ++++++++++ dlls/geoip/geoip_amxx.h | 13 ++++++++++ dlls/geoip/sdk/amxxmodule.cpp | 46 ++++++++++------------------------- dlls/geoip/sdk/amxxmodule.h | 17 ++++++++++--- dlls/geoip/sdk/moduleconfig.h | 13 +++++++++- 5 files changed, 64 insertions(+), 38 deletions(-) diff --git a/dlls/geoip/geoip_amxx.cpp b/dlls/geoip/geoip_amxx.cpp index b545128d..e733b1dd 100755 --- a/dlls/geoip/geoip_amxx.cpp +++ b/dlls/geoip/geoip_amxx.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// GeoIP Module +// + #include #include "geoip_amxx.h" diff --git a/dlls/geoip/geoip_amxx.h b/dlls/geoip/geoip_amxx.h index 6f2b8688..1fe5223d 100755 --- a/dlls/geoip/geoip_amxx.h +++ b/dlls/geoip/geoip_amxx.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// GeoIP Module +// + #ifndef _INCLUDE_GEOIPAMXX_H #define _INCLUDE_GEOIPAMXX_H diff --git a/dlls/geoip/sdk/amxxmodule.cpp b/dlls/geoip/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/dlls/geoip/sdk/amxxmodule.cpp +++ b/dlls/geoip/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/geoip/sdk/amxxmodule.h b/dlls/geoip/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/dlls/geoip/sdk/amxxmodule.h +++ b/dlls/geoip/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/geoip/sdk/moduleconfig.h b/dlls/geoip/sdk/moduleconfig.h index 837e67a4..0eff4c24 100755 --- a/dlls/geoip/sdk/moduleconfig.h +++ b/dlls/geoip/sdk/moduleconfig.h @@ -1,4 +1,15 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ From 7274beebed4a7d8a6f7d5e70dc083ec60263366c Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 05:21:40 -0500 Subject: [PATCH 12/71] Update license headers for hamsandwich module. --- dlls/hamsandwich/DataHandler.cpp | 41 ++++++++----------------- dlls/hamsandwich/DataHandler.h | 41 ++++++++----------------- dlls/hamsandwich/NEW_Util.h | 40 ++++++++---------------- dlls/hamsandwich/Trampolines.h | 40 ++++++++---------------- dlls/hamsandwich/amxx_api.cpp | 40 ++++++++---------------- dlls/hamsandwich/call_funcs.cpp | 43 +++++++++----------------- dlls/hamsandwich/call_funcs.h | 41 ++++++++----------------- dlls/hamsandwich/celltotype.h | 13 ++++++++ dlls/hamsandwich/config_parser.cpp | 41 ++++++++----------------- dlls/hamsandwich/forward.h | 41 ++++++++----------------- dlls/hamsandwich/ham_const.h | 40 ++++++++---------------- dlls/hamsandwich/ham_utils.h | 40 ++++++++---------------- dlls/hamsandwich/hook.h | 41 ++++++++----------------- dlls/hamsandwich/hook_callbacks.cpp | 41 ++++++++----------------- dlls/hamsandwich/hook_callbacks.h | 41 ++++++++----------------- dlls/hamsandwich/hook_create.cpp | 41 ++++++++----------------- dlls/hamsandwich/hook_create.h | 41 ++++++++----------------- dlls/hamsandwich/hook_native.cpp | 41 ++++++++----------------- dlls/hamsandwich/hook_specialbot.cpp | 40 ++++++++---------------- dlls/hamsandwich/hook_specialbot.h | 40 ++++++++---------------- dlls/hamsandwich/hooklist.h | 41 ++++++++----------------- dlls/hamsandwich/offsets.h | 40 ++++++++---------------- dlls/hamsandwich/pdata.cpp | 41 ++++++++----------------- dlls/hamsandwich/sdk/CString.h | 38 +++++------------------ dlls/hamsandwich/sdk/CVector.h | 38 +++++------------------ dlls/hamsandwich/sdk/amxxmodule.cpp | 46 ++++++++-------------------- dlls/hamsandwich/sdk/amxxmodule.h | 17 +++++++--- dlls/hamsandwich/sdk/moduleconfig.h | 14 ++++++++- dlls/hamsandwich/srvcmd.cpp | 40 ++++++++---------------- dlls/hamsandwich/typetocell.h | 41 ++++++++----------------- 30 files changed, 372 insertions(+), 771 deletions(-) diff --git a/dlls/hamsandwich/DataHandler.cpp b/dlls/hamsandwich/DataHandler.cpp index 48b6d168..6b8286eb 100644 --- a/dlls/hamsandwich/DataHandler.cpp +++ b/dlls/hamsandwich/DataHandler.cpp @@ -1,31 +1,16 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// + #include "amxxmodule.h" #include "CVector.h" diff --git a/dlls/hamsandwich/DataHandler.h b/dlls/hamsandwich/DataHandler.h index 883f8fa2..3a5e765f 100644 --- a/dlls/hamsandwich/DataHandler.h +++ b/dlls/hamsandwich/DataHandler.h @@ -1,31 +1,16 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// + #ifndef RETURNHANDLER_H #define RETURNHANDLER_H diff --git a/dlls/hamsandwich/NEW_Util.h b/dlls/hamsandwich/NEW_Util.h index 31cffe5a..ea008f71 100644 --- a/dlls/hamsandwich/NEW_Util.h +++ b/dlls/hamsandwich/NEW_Util.h @@ -1,31 +1,15 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// /* Inlined replacements for INDEXENT/ENTINDEX * It only really removes the overhead of the push/jump diff --git a/dlls/hamsandwich/Trampolines.h b/dlls/hamsandwich/Trampolines.h index 816019fa..d9bba05e 100644 --- a/dlls/hamsandwich/Trampolines.h +++ b/dlls/hamsandwich/Trampolines.h @@ -1,31 +1,15 @@ -/* Trampolines - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ - +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// #ifndef TRAMPOLINES_H #define TRAMPOLINES_H diff --git a/dlls/hamsandwich/amxx_api.cpp b/dlls/hamsandwich/amxx_api.cpp index 09431fd5..40d9be44 100644 --- a/dlls/hamsandwich/amxx_api.cpp +++ b/dlls/hamsandwich/amxx_api.cpp @@ -1,31 +1,15 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// #include "amxxmodule.h" #include diff --git a/dlls/hamsandwich/call_funcs.cpp b/dlls/hamsandwich/call_funcs.cpp index df1c61fb..32a823fa 100644 --- a/dlls/hamsandwich/call_funcs.cpp +++ b/dlls/hamsandwich/call_funcs.cpp @@ -1,31 +1,16 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// + #include "amxxmodule.h" #include "offsets.h" @@ -1833,4 +1818,4 @@ cell Call_Deprecated(AMX *amx, cell *params) MF_LogError(amx, AMX_ERR_NATIVE, "Ham function is deprecated."); return 0; -} \ No newline at end of file +} diff --git a/dlls/hamsandwich/call_funcs.h b/dlls/hamsandwich/call_funcs.h index 4f3cef63..b54d0a74 100644 --- a/dlls/hamsandwich/call_funcs.h +++ b/dlls/hamsandwich/call_funcs.h @@ -1,31 +1,16 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// + #ifndef HOOK_Call_H #define HOOK_Call_H diff --git a/dlls/hamsandwich/celltotype.h b/dlls/hamsandwich/celltotype.h index 57f4581a..5b377380 100644 --- a/dlls/hamsandwich/celltotype.h +++ b/dlls/hamsandwich/celltotype.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// + #ifndef CELLTOTYPE_H #define CELLTOTYPE_H diff --git a/dlls/hamsandwich/config_parser.cpp b/dlls/hamsandwich/config_parser.cpp index 87dcf6c1..0d01999c 100644 --- a/dlls/hamsandwich/config_parser.cpp +++ b/dlls/hamsandwich/config_parser.cpp @@ -1,31 +1,16 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// + #include "amxxmodule.h" #include "ham_const.h" diff --git a/dlls/hamsandwich/forward.h b/dlls/hamsandwich/forward.h index 2e621316..f6296497 100644 --- a/dlls/hamsandwich/forward.h +++ b/dlls/hamsandwich/forward.h @@ -1,31 +1,16 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// + #include "amxxmodule.h" #ifndef FORWARD_H diff --git a/dlls/hamsandwich/ham_const.h b/dlls/hamsandwich/ham_const.h index 65ef5404..c98ed9b4 100644 --- a/dlls/hamsandwich/ham_const.h +++ b/dlls/hamsandwich/ham_const.h @@ -1,31 +1,15 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// #ifndef HAM_CONST_H #define HAM_CONST_H diff --git a/dlls/hamsandwich/ham_utils.h b/dlls/hamsandwich/ham_utils.h index ca50bb6c..2f1f9d70 100644 --- a/dlls/hamsandwich/ham_utils.h +++ b/dlls/hamsandwich/ham_utils.h @@ -1,31 +1,15 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// #ifndef HAM_UTILS_H #define HAM_UTILS_H diff --git a/dlls/hamsandwich/hook.h b/dlls/hamsandwich/hook.h index 330a3f2f..1bce3272 100644 --- a/dlls/hamsandwich/hook.h +++ b/dlls/hamsandwich/hook.h @@ -1,31 +1,16 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// + #ifndef HOOK_H #define HOOK_H diff --git a/dlls/hamsandwich/hook_callbacks.cpp b/dlls/hamsandwich/hook_callbacks.cpp index 971a3c98..250adce0 100644 --- a/dlls/hamsandwich/hook_callbacks.cpp +++ b/dlls/hamsandwich/hook_callbacks.cpp @@ -1,31 +1,16 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// + #include #include #include diff --git a/dlls/hamsandwich/hook_callbacks.h b/dlls/hamsandwich/hook_callbacks.h index a3275b48..35aa6ee9 100644 --- a/dlls/hamsandwich/hook_callbacks.h +++ b/dlls/hamsandwich/hook_callbacks.h @@ -1,31 +1,16 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// + #ifndef HOOK_CALLBACKS_H #define HOOK_CALLBACKS_H diff --git a/dlls/hamsandwich/hook_create.cpp b/dlls/hamsandwich/hook_create.cpp index 495761e3..d39322ae 100644 --- a/dlls/hamsandwich/hook_create.cpp +++ b/dlls/hamsandwich/hook_create.cpp @@ -1,31 +1,16 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// + #include "amxxmodule.h" int Create_Void_Void(AMX *amx, const char *func) diff --git a/dlls/hamsandwich/hook_create.h b/dlls/hamsandwich/hook_create.h index a384d921..46cda919 100644 --- a/dlls/hamsandwich/hook_create.h +++ b/dlls/hamsandwich/hook_create.h @@ -1,31 +1,16 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// + #ifndef HOOK_CREATE_H #define HOOK_CREATE_H diff --git a/dlls/hamsandwich/hook_native.cpp b/dlls/hamsandwich/hook_native.cpp index 1cfdcfc5..748c2406 100644 --- a/dlls/hamsandwich/hook_native.cpp +++ b/dlls/hamsandwich/hook_native.cpp @@ -1,31 +1,16 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// + #include #include #include diff --git a/dlls/hamsandwich/hook_specialbot.cpp b/dlls/hamsandwich/hook_specialbot.cpp index 938ff461..0d071f8c 100644 --- a/dlls/hamsandwich/hook_specialbot.cpp +++ b/dlls/hamsandwich/hook_specialbot.cpp @@ -1,31 +1,15 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// #include "hook_specialbot.h" #include "hooklist.h" diff --git a/dlls/hamsandwich/hook_specialbot.h b/dlls/hamsandwich/hook_specialbot.h index 7992243e..26a3a561 100644 --- a/dlls/hamsandwich/hook_specialbot.h +++ b/dlls/hamsandwich/hook_specialbot.h @@ -1,31 +1,15 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// #ifndef HOOK_SPECIALBOT_H #define HOOK_SPECIALBOT_H diff --git a/dlls/hamsandwich/hooklist.h b/dlls/hamsandwich/hooklist.h index ef74a22e..a4b07fb7 100644 --- a/dlls/hamsandwich/hooklist.h +++ b/dlls/hamsandwich/hooklist.h @@ -1,31 +1,16 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// + #ifndef HOOKLIST_T_H #define HOOKLIST_T_H diff --git a/dlls/hamsandwich/offsets.h b/dlls/hamsandwich/offsets.h index 815d9ea3..e293bc6a 100644 --- a/dlls/hamsandwich/offsets.h +++ b/dlls/hamsandwich/offsets.h @@ -1,31 +1,15 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// #ifndef OFFSETS_H #define OFFSETS_H diff --git a/dlls/hamsandwich/pdata.cpp b/dlls/hamsandwich/pdata.cpp index 9839c6b8..b6ad7f69 100644 --- a/dlls/hamsandwich/pdata.cpp +++ b/dlls/hamsandwich/pdata.cpp @@ -1,31 +1,16 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// + #include "amxxmodule.h" #include "offsets.h" #include "NEW_Util.h" diff --git a/dlls/hamsandwich/sdk/CString.h b/dlls/hamsandwich/sdk/CString.h index bfd7061d..745457ba 100644 --- a/dlls/hamsandwich/sdk/CString.h +++ b/dlls/hamsandwich/sdk/CString.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef _INCLUDE_CSTRING_H #define _INCLUDE_CSTRING_H diff --git a/dlls/hamsandwich/sdk/CVector.h b/dlls/hamsandwich/sdk/CVector.h index 1d733abb..da13eceb 100644 --- a/dlls/hamsandwich/sdk/CVector.h +++ b/dlls/hamsandwich/sdk/CVector.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef __CVECTOR_H__ #define __CVECTOR_H__ diff --git a/dlls/hamsandwich/sdk/amxxmodule.cpp b/dlls/hamsandwich/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100644 --- a/dlls/hamsandwich/sdk/amxxmodule.cpp +++ b/dlls/hamsandwich/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/hamsandwich/sdk/amxxmodule.h b/dlls/hamsandwich/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100644 --- a/dlls/hamsandwich/sdk/amxxmodule.h +++ b/dlls/hamsandwich/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/hamsandwich/sdk/moduleconfig.h b/dlls/hamsandwich/sdk/moduleconfig.h index 34ccb62a..bab9e69e 100644 --- a/dlls/hamsandwich/sdk/moduleconfig.h +++ b/dlls/hamsandwich/sdk/moduleconfig.h @@ -1,4 +1,16 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ diff --git a/dlls/hamsandwich/srvcmd.cpp b/dlls/hamsandwich/srvcmd.cpp index a877c457..e03f3093 100644 --- a/dlls/hamsandwich/srvcmd.cpp +++ b/dlls/hamsandwich/srvcmd.cpp @@ -1,31 +1,15 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// #include "amxxmodule.h" diff --git a/dlls/hamsandwich/typetocell.h b/dlls/hamsandwich/typetocell.h index fb0cb519..63ddefea 100644 --- a/dlls/hamsandwich/typetocell.h +++ b/dlls/hamsandwich/typetocell.h @@ -1,31 +1,16 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Module +// + #ifndef TYPETOCELL_H #define TYPETOCELL_H From 4be6ca834adf361902c5ea3b96bf6f9fc2126944 Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 05:29:31 -0500 Subject: [PATCH 13/71] Update license headers for mysql module. --- dlls/mysqlx/basic_sql.cpp | 13 ++++++++ dlls/mysqlx/handles.cpp | 13 ++++++++ dlls/mysqlx/module.cpp | 13 ++++++++ dlls/mysqlx/mysql/ISQLDriver.h | 13 ++++++++ dlls/mysqlx/mysql/MysqlDatabase.cpp | 13 ++++++++ dlls/mysqlx/mysql/MysqlDatabase.h | 13 ++++++++ dlls/mysqlx/mysql/MysqlDriver.cpp | 13 ++++++++ dlls/mysqlx/mysql/MysqlDriver.h | 13 ++++++++ dlls/mysqlx/mysql/MysqlHeaders.h | 13 ++++++++ dlls/mysqlx/mysql/MysqlQuery.cpp | 13 ++++++++ dlls/mysqlx/mysql/MysqlQuery.h | 13 ++++++++ dlls/mysqlx/mysql/MysqlResultSet.cpp | 13 ++++++++ dlls/mysqlx/mysql/MysqlResultSet.h | 13 ++++++++ dlls/mysqlx/mysql2_header.h | 13 ++++++++ dlls/mysqlx/oldcompat_sql.cpp | 13 ++++++++ dlls/mysqlx/sdk/CVector.h | 38 +++++------------------ dlls/mysqlx/sdk/amxxmodule.cpp | 46 ++++++++-------------------- dlls/mysqlx/sdk/amxxmodule.h | 17 +++++++--- dlls/mysqlx/sdk/moduleconfig.h | 13 +++++++- dlls/mysqlx/sqlheaders.h | 13 ++++++++ dlls/mysqlx/thread/BaseWorker.cpp | 9 ++++++ dlls/mysqlx/thread/BaseWorker.h | 9 ++++++ dlls/mysqlx/thread/IThreader.h | 9 ++++++ dlls/mysqlx/thread/PosixThreads.cpp | 9 ++++++ dlls/mysqlx/thread/PosixThreads.h | 9 ++++++ dlls/mysqlx/thread/ThreadSupport.h | 9 ++++++ dlls/mysqlx/thread/ThreadWorker.cpp | 9 ++++++ dlls/mysqlx/thread/ThreadWorker.h | 9 ++++++ dlls/mysqlx/thread/WinThreads.cpp | 9 ++++++ dlls/mysqlx/thread/WinThreads.h | 9 ++++++ dlls/mysqlx/threading.cpp | 13 ++++++++ dlls/mysqlx/threading.h | 13 ++++++++ 32 files changed, 370 insertions(+), 68 deletions(-) diff --git a/dlls/mysqlx/basic_sql.cpp b/dlls/mysqlx/basic_sql.cpp index 344f7f47..da4d7e12 100644 --- a/dlls/mysqlx/basic_sql.cpp +++ b/dlls/mysqlx/basic_sql.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #include #include "sh_list.h" #include "mysql2_header.h" diff --git a/dlls/mysqlx/handles.cpp b/dlls/mysqlx/handles.cpp index bee22626..b48b33f7 100644 --- a/dlls/mysqlx/handles.cpp +++ b/dlls/mysqlx/handles.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #include #include "sh_stack.h" #include "CVector.h" diff --git a/dlls/mysqlx/module.cpp b/dlls/mysqlx/module.cpp index aaa31175..de0f0841 100644 --- a/dlls/mysqlx/module.cpp +++ b/dlls/mysqlx/module.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #include "amxxmodule.h" #include "mysql2_header.h" #include "sqlheaders.h" diff --git a/dlls/mysqlx/mysql/ISQLDriver.h b/dlls/mysqlx/mysql/ISQLDriver.h index 5da94b0a..dfecca18 100644 --- a/dlls/mysqlx/mysql/ISQLDriver.h +++ b/dlls/mysqlx/mysql/ISQLDriver.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #ifndef _INCLUDE_SOURCEMOD_DATABASE2_H #define _INCLUDE_SOURCEMOD_DATABASE2_H diff --git a/dlls/mysqlx/mysql/MysqlDatabase.cpp b/dlls/mysqlx/mysql/MysqlDatabase.cpp index 30114f98..98b67144 100644 --- a/dlls/mysqlx/mysql/MysqlDatabase.cpp +++ b/dlls/mysqlx/mysql/MysqlDatabase.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #include #include #include "MysqlDriver.h" diff --git a/dlls/mysqlx/mysql/MysqlDatabase.h b/dlls/mysqlx/mysql/MysqlDatabase.h index a33cff84..8a1f71a1 100644 --- a/dlls/mysqlx/mysql/MysqlDatabase.h +++ b/dlls/mysqlx/mysql/MysqlDatabase.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #ifndef _INCLUDE_SOURCEMOD_MYSQL_DATABASE_H #define _INCLUDE_SOURCEMOD_MYSQL_DATABASE_H diff --git a/dlls/mysqlx/mysql/MysqlDriver.cpp b/dlls/mysqlx/mysql/MysqlDriver.cpp index 3fd0e3e6..3ef7b201 100644 --- a/dlls/mysqlx/mysql/MysqlDriver.cpp +++ b/dlls/mysqlx/mysql/MysqlDriver.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #include #include #include "MysqlDriver.h" diff --git a/dlls/mysqlx/mysql/MysqlDriver.h b/dlls/mysqlx/mysql/MysqlDriver.h index 941964cd..79f75ae2 100644 --- a/dlls/mysqlx/mysql/MysqlDriver.h +++ b/dlls/mysqlx/mysql/MysqlDriver.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #ifndef _INCLUDE_SOURCEMOD_MYSQL_DRIVER_H #define _INCLUDE_SOURCEMOD_MYSQL_DRIVER_H diff --git a/dlls/mysqlx/mysql/MysqlHeaders.h b/dlls/mysqlx/mysql/MysqlHeaders.h index 413c582c..40285576 100644 --- a/dlls/mysqlx/mysql/MysqlHeaders.h +++ b/dlls/mysqlx/mysql/MysqlHeaders.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #ifndef _INCLUDE_SOURCEMOD_MYSQL_HEADERS_H #define _INCLUDE_SOURCEMOD_MYSQL_HEADERS_H diff --git a/dlls/mysqlx/mysql/MysqlQuery.cpp b/dlls/mysqlx/mysql/MysqlQuery.cpp index 9fc6ccc7..60fa427f 100644 --- a/dlls/mysqlx/mysql/MysqlQuery.cpp +++ b/dlls/mysqlx/mysql/MysqlQuery.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #include #include #include "MysqlQuery.h" diff --git a/dlls/mysqlx/mysql/MysqlQuery.h b/dlls/mysqlx/mysql/MysqlQuery.h index 0549c108..7b43dffc 100644 --- a/dlls/mysqlx/mysql/MysqlQuery.h +++ b/dlls/mysqlx/mysql/MysqlQuery.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #ifndef _INCLUDE_SOURCEMOD_MYSQL_QUERY_H #define _INCLUDE_SOURCEMOD_MYSQL_QUERY_H diff --git a/dlls/mysqlx/mysql/MysqlResultSet.cpp b/dlls/mysqlx/mysql/MysqlResultSet.cpp index 77a3169d..a79e89db 100644 --- a/dlls/mysqlx/mysql/MysqlResultSet.cpp +++ b/dlls/mysqlx/mysql/MysqlResultSet.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #include #include #include "MysqlResultSet.h" diff --git a/dlls/mysqlx/mysql/MysqlResultSet.h b/dlls/mysqlx/mysql/MysqlResultSet.h index 5257b6c5..849486eb 100644 --- a/dlls/mysqlx/mysql/MysqlResultSet.h +++ b/dlls/mysqlx/mysql/MysqlResultSet.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #ifndef _INCLUDE_SOURCEMOD_MYSQL_RESULTSET_H #define _INCLUDE_SOURCEMOD_MYSQL_RESULTSET_H diff --git a/dlls/mysqlx/mysql2_header.h b/dlls/mysqlx/mysql2_header.h index ee21b37e..817d900c 100644 --- a/dlls/mysqlx/mysql2_header.h +++ b/dlls/mysqlx/mysql2_header.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #ifndef _INCLUDE_AMXMODX_MYSQL2_HEADER_H #define _INCLUDE_AMXMODX_MYSQL2_HEADER_H diff --git a/dlls/mysqlx/oldcompat_sql.cpp b/dlls/mysqlx/oldcompat_sql.cpp index 3b206e2c..bd82a733 100644 --- a/dlls/mysqlx/oldcompat_sql.cpp +++ b/dlls/mysqlx/oldcompat_sql.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #include #include "sh_list.h" #include "mysql2_header.h" diff --git a/dlls/mysqlx/sdk/CVector.h b/dlls/mysqlx/sdk/CVector.h index 24355d4e..44241413 100755 --- a/dlls/mysqlx/sdk/CVector.h +++ b/dlls/mysqlx/sdk/CVector.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef __CVECTOR_H__ #define __CVECTOR_H__ diff --git a/dlls/mysqlx/sdk/amxxmodule.cpp b/dlls/mysqlx/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/dlls/mysqlx/sdk/amxxmodule.cpp +++ b/dlls/mysqlx/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/mysqlx/sdk/amxxmodule.h b/dlls/mysqlx/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/dlls/mysqlx/sdk/amxxmodule.h +++ b/dlls/mysqlx/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/mysqlx/sdk/moduleconfig.h b/dlls/mysqlx/sdk/moduleconfig.h index 460b3435..3ebdd4e4 100755 --- a/dlls/mysqlx/sdk/moduleconfig.h +++ b/dlls/mysqlx/sdk/moduleconfig.h @@ -1,4 +1,15 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ diff --git a/dlls/mysqlx/sqlheaders.h b/dlls/mysqlx/sqlheaders.h index e756f703..062e2e8c 100644 --- a/dlls/mysqlx/sqlheaders.h +++ b/dlls/mysqlx/sqlheaders.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #ifndef _INCLUDE_SQLHEADERS_H #define _INCLUDE_SQLHEADERS_H diff --git a/dlls/mysqlx/thread/BaseWorker.cpp b/dlls/mysqlx/thread/BaseWorker.cpp index 4e107f92..f02758a4 100644 --- a/dlls/mysqlx/thread/BaseWorker.cpp +++ b/dlls/mysqlx/thread/BaseWorker.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include "BaseWorker.h" BaseWorker::BaseWorker() : diff --git a/dlls/mysqlx/thread/BaseWorker.h b/dlls/mysqlx/thread/BaseWorker.h index 37b8f5fd..b2a218cf 100644 --- a/dlls/mysqlx/thread/BaseWorker.h +++ b/dlls/mysqlx/thread/BaseWorker.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_SOURCEMOD_BASEWORKER_H #define _INCLUDE_SOURCEMOD_BASEWORKER_H diff --git a/dlls/mysqlx/thread/IThreader.h b/dlls/mysqlx/thread/IThreader.h index f9c3e8a2..b27673d2 100644 --- a/dlls/mysqlx/thread/IThreader.h +++ b/dlls/mysqlx/thread/IThreader.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_SOURCEMOD_THREADER_H #define _INCLUDE_SOURCEMOD_THREADER_H diff --git a/dlls/mysqlx/thread/PosixThreads.cpp b/dlls/mysqlx/thread/PosixThreads.cpp index 47d66899..1e112739 100644 --- a/dlls/mysqlx/thread/PosixThreads.cpp +++ b/dlls/mysqlx/thread/PosixThreads.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include #include "PosixThreads.h" diff --git a/dlls/mysqlx/thread/PosixThreads.h b/dlls/mysqlx/thread/PosixThreads.h index 95245d79..15ed6f97 100644 --- a/dlls/mysqlx/thread/PosixThreads.h +++ b/dlls/mysqlx/thread/PosixThreads.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_POSIXTHREADS_H_ #define _INCLUDE_POSIXTHREADS_H_ diff --git a/dlls/mysqlx/thread/ThreadSupport.h b/dlls/mysqlx/thread/ThreadSupport.h index b15b0d30..c69f9d40 100644 --- a/dlls/mysqlx/thread/ThreadSupport.h +++ b/dlls/mysqlx/thread/ThreadSupport.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_SOURCEMOD_THREAD_SUPPORT_H #define _INCLUDE_SOURCEMOD_THREAD_SUPPORT_H diff --git a/dlls/mysqlx/thread/ThreadWorker.cpp b/dlls/mysqlx/thread/ThreadWorker.cpp index 4c061067..a2393949 100644 --- a/dlls/mysqlx/thread/ThreadWorker.cpp +++ b/dlls/mysqlx/thread/ThreadWorker.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include "ThreadWorker.h" ThreadWorker::ThreadWorker() : diff --git a/dlls/mysqlx/thread/ThreadWorker.h b/dlls/mysqlx/thread/ThreadWorker.h index 6c630ecf..ec9db997 100644 --- a/dlls/mysqlx/thread/ThreadWorker.h +++ b/dlls/mysqlx/thread/ThreadWorker.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_SOURCEMOD_THREADWORKER_H #define _INCLUDE_SOURCEMOD_THREADWORKER_H diff --git a/dlls/mysqlx/thread/WinThreads.cpp b/dlls/mysqlx/thread/WinThreads.cpp index 6f3f436f..6be2346f 100644 --- a/dlls/mysqlx/thread/WinThreads.cpp +++ b/dlls/mysqlx/thread/WinThreads.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include "WinThreads.h" void WinThreader::ThreadSleep(unsigned int ms) diff --git a/dlls/mysqlx/thread/WinThreads.h b/dlls/mysqlx/thread/WinThreads.h index 4bec6fd3..574fa2ec 100644 --- a/dlls/mysqlx/thread/WinThreads.h +++ b/dlls/mysqlx/thread/WinThreads.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_WINTHREADS_H_ #define _INCLUDE_WINTHREADS_H_ diff --git a/dlls/mysqlx/threading.cpp b/dlls/mysqlx/threading.cpp index 6e973cbe..3dfa1301 100644 --- a/dlls/mysqlx/threading.cpp +++ b/dlls/mysqlx/threading.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #include "amxxmodule.h" #include "mysql2_header.h" #include "threading.h" diff --git a/dlls/mysqlx/threading.h b/dlls/mysqlx/threading.h index b25782a9..6949049d 100644 --- a/dlls/mysqlx/threading.h +++ b/dlls/mysqlx/threading.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// MySQL Module +// + #ifndef _INCLUDE_MYSQL_THREADING_H #define _INCLUDE_MYSQL_THREADING_H From 1fc2e8cc6fda3891dce28969438bd130a1454da6 Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 05:35:12 -0500 Subject: [PATCH 14/71] Update license headers for ns module. --- dlls/ns/AllocString.h | 44 ++++++++--------------------- dlls/ns/CPlayer.h | 44 ++++++++--------------------- dlls/ns/CString.h | 38 ++++++------------------- dlls/ns/CVector.h | 38 ++++++------------------- dlls/ns/GameManager.cpp | 44 ++++++++--------------------- dlls/ns/GameManager.h | 44 ++++++++--------------------- dlls/ns/Hash.h | 13 +++++++++ dlls/ns/LocationManager.h | 44 ++++++++--------------------- dlls/ns/MessageHandler.cpp | 44 ++++++++--------------------- dlls/ns/MessageHandler.h | 44 ++++++++--------------------- dlls/ns/NEW_Util.h | 44 ++++++++--------------------- dlls/ns/ParticleManager.cpp | 13 +++++++++ dlls/ns/ParticleManager.h | 44 ++++++++--------------------- dlls/ns/SpawnManager.h | 44 ++++++++--------------------- dlls/ns/TitleManager.cpp | 13 +++++++++ dlls/ns/TitleManager.h | 44 ++++++++--------------------- dlls/ns/amxxapi.cpp | 44 ++++++++--------------------- dlls/ns/dllapi.cpp | 44 ++++++++--------------------- dlls/ns/engineapi.cpp | 44 ++++++++--------------------- dlls/ns/natives/general.cpp | 44 ++++++++--------------------- dlls/ns/natives/memberfuncs.cpp | 13 +++++++++ dlls/ns/natives/particles.cpp | 44 ++++++++--------------------- dlls/ns/natives/player.cpp | 44 ++++++++--------------------- dlls/ns/natives/player_memory.cpp | 44 ++++++++--------------------- dlls/ns/natives/structure.cpp | 44 ++++++++--------------------- dlls/ns/natives/weapons.cpp | 44 ++++++++--------------------- dlls/ns/ns.h | 44 ++++++++--------------------- dlls/ns/ns_const.h | 43 ++++++++--------------------- dlls/ns/sdk/amxxmodule.cpp | 46 +++++++++---------------------- dlls/ns/sdk/amxxmodule.h | 17 +++++++++--- dlls/ns/sdk/moduleconfig.h | 13 ++++++++- dlls/ns/utilfunctions.h | 44 ++++++++--------------------- dlls/ns/utils.cpp | 44 ++++++++--------------------- 33 files changed, 393 insertions(+), 866 deletions(-) diff --git a/dlls/ns/AllocString.h b/dlls/ns/AllocString.h index b5134ba0..6179227b 100644 --- a/dlls/ns/AllocString.h +++ b/dlls/ns/AllocString.h @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// /* This file is a replacement for the engine call of ALLOC_STRING * The main difference is that a string will not be allocated twice diff --git a/dlls/ns/CPlayer.h b/dlls/ns/CPlayer.h index 921d6c7c..f2f7ad30 100755 --- a/dlls/ns/CPlayer.h +++ b/dlls/ns/CPlayer.h @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// /* This is the basic data stored for players */ #ifndef CPLAYER_H diff --git a/dlls/ns/CString.h b/dlls/ns/CString.h index 632f430b..f7c9c374 100644 --- a/dlls/ns/CString.h +++ b/dlls/ns/CString.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef _INCLUDE_CSTRING_H #define _INCLUDE_CSTRING_H diff --git a/dlls/ns/CVector.h b/dlls/ns/CVector.h index 74f85954..670c5cae 100644 --- a/dlls/ns/CVector.h +++ b/dlls/ns/CVector.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef __CVECTOR_H__ #define __CVECTOR_H__ diff --git a/dlls/ns/GameManager.cpp b/dlls/ns/GameManager.cpp index eabaf84c..ca09fef7 100644 --- a/dlls/ns/GameManager.cpp +++ b/dlls/ns/GameManager.cpp @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// /* This holds the functions which determine which hooks I need forwareded */ diff --git a/dlls/ns/GameManager.h b/dlls/ns/GameManager.h index eed4f671..22e4e26f 100644 --- a/dlls/ns/GameManager.h +++ b/dlls/ns/GameManager.h @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// /* This file includes game-related stuff, such as message IDs * and forwards diff --git a/dlls/ns/Hash.h b/dlls/ns/Hash.h index 5e099e22..9b9b579b 100644 --- a/dlls/ns/Hash.h +++ b/dlls/ns/Hash.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// + #ifndef _HASH_H_ #define _HASH_H_ diff --git a/dlls/ns/LocationManager.h b/dlls/ns/LocationManager.h index f1ec240e..b9823054 100644 --- a/dlls/ns/LocationManager.h +++ b/dlls/ns/LocationManager.h @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// #ifndef LOCATIONMANAGER_H #define LOCATIONMANAGER_H diff --git a/dlls/ns/MessageHandler.cpp b/dlls/ns/MessageHandler.cpp index 17f05dac..a0d18583 100644 --- a/dlls/ns/MessageHandler.cpp +++ b/dlls/ns/MessageHandler.cpp @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// /* This file contains the initialization routine and message hooks * for the message handler. Note that all of the message hooks diff --git a/dlls/ns/MessageHandler.h b/dlls/ns/MessageHandler.h index 3af6aab8..74643898 100644 --- a/dlls/ns/MessageHandler.h +++ b/dlls/ns/MessageHandler.h @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// /* Class with virtual members for easy message handling * Don't forget to add new messages to "Initialize_MessageHandler()" diff --git a/dlls/ns/NEW_Util.h b/dlls/ns/NEW_Util.h index 6a826f93..904a805b 100644 --- a/dlls/ns/NEW_Util.h +++ b/dlls/ns/NEW_Util.h @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// /* Inlined replacements for INDEXENT/ENTINDEX * It only really removes the overhead of the push/jump diff --git a/dlls/ns/ParticleManager.cpp b/dlls/ns/ParticleManager.cpp index 626c4838..2996b5f7 100644 --- a/dlls/ns/ParticleManager.cpp +++ b/dlls/ns/ParticleManager.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// + #include "sdk/amxxmodule.h" #include "ns.h" diff --git a/dlls/ns/ParticleManager.h b/dlls/ns/ParticleManager.h index 07cec51f..9e06e499 100644 --- a/dlls/ns/ParticleManager.h +++ b/dlls/ns/ParticleManager.h @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// #ifndef PARTICLEMANAGER_H #define PARTICLEMANAGER_H diff --git a/dlls/ns/SpawnManager.h b/dlls/ns/SpawnManager.h index af6d6b1e..ca14020a 100644 --- a/dlls/ns/SpawnManager.h +++ b/dlls/ns/SpawnManager.h @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// #ifndef SPAWNMANAGER_H #define SPAWNMANAGER_H diff --git a/dlls/ns/TitleManager.cpp b/dlls/ns/TitleManager.cpp index f08ff64a..e9a77641 100644 --- a/dlls/ns/TitleManager.cpp +++ b/dlls/ns/TitleManager.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// + #include "sdk/amxxmodule.h" #include "ns.h" #include "TitleManager.h" diff --git a/dlls/ns/TitleManager.h b/dlls/ns/TitleManager.h index 47c58ddb..c65dcecc 100644 --- a/dlls/ns/TitleManager.h +++ b/dlls/ns/TitleManager.h @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// #ifndef TITLEMANAGER_H #define TITLEMANAGER_H diff --git a/dlls/ns/amxxapi.cpp b/dlls/ns/amxxapi.cpp index 5ac5f1e9..55a1144e 100644 --- a/dlls/ns/amxxapi.cpp +++ b/dlls/ns/amxxapi.cpp @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// /* Calls sent by AMX Mod X are handled here */ diff --git a/dlls/ns/dllapi.cpp b/dlls/ns/dllapi.cpp index c344f376..6680f57a 100644 --- a/dlls/ns/dllapi.cpp +++ b/dlls/ns/dllapi.cpp @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// /* Calls going from the engine to the game dll are handled here */ diff --git a/dlls/ns/engineapi.cpp b/dlls/ns/engineapi.cpp index 10a9ada6..7cc0e987 100644 --- a/dlls/ns/engineapi.cpp +++ b/dlls/ns/engineapi.cpp @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// /* Calls going from the game dll to the engine are handled here */ diff --git a/dlls/ns/natives/general.cpp b/dlls/ns/natives/general.cpp index 20a2e873..690b780e 100644 --- a/dlls/ns/natives/general.cpp +++ b/dlls/ns/natives/general.cpp @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// #include diff --git a/dlls/ns/natives/memberfuncs.cpp b/dlls/ns/natives/memberfuncs.cpp index caf0266b..a5ad8133 100644 --- a/dlls/ns/natives/memberfuncs.cpp +++ b/dlls/ns/natives/memberfuncs.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// + #include #include "../sdk/amxxmodule.h" diff --git a/dlls/ns/natives/particles.cpp b/dlls/ns/natives/particles.cpp index 716c6dbb..7d4a15bb 100644 --- a/dlls/ns/natives/particles.cpp +++ b/dlls/ns/natives/particles.cpp @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// #include "../sdk/amxxmodule.h" diff --git a/dlls/ns/natives/player.cpp b/dlls/ns/natives/player.cpp index c378164e..5c72e830 100644 --- a/dlls/ns/natives/player.cpp +++ b/dlls/ns/natives/player.cpp @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// #include "../sdk/amxxmodule.h" diff --git a/dlls/ns/natives/player_memory.cpp b/dlls/ns/natives/player_memory.cpp index 66fe5c2f..d773d678 100644 --- a/dlls/ns/natives/player_memory.cpp +++ b/dlls/ns/natives/player_memory.cpp @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// #include "../sdk/amxxmodule.h" diff --git a/dlls/ns/natives/structure.cpp b/dlls/ns/natives/structure.cpp index d4473e78..74cb15b0 100644 --- a/dlls/ns/natives/structure.cpp +++ b/dlls/ns/natives/structure.cpp @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// #include "../sdk/amxxmodule.h" diff --git a/dlls/ns/natives/weapons.cpp b/dlls/ns/natives/weapons.cpp index 3b2de17c..8fcfb2e9 100644 --- a/dlls/ns/natives/weapons.cpp +++ b/dlls/ns/natives/weapons.cpp @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// #include "../sdk/amxxmodule.h" diff --git a/dlls/ns/ns.h b/dlls/ns/ns.h index d88aae77..7940794c 100755 --- a/dlls/ns/ns.h +++ b/dlls/ns/ns.h @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// #ifndef NS_H #define NS_H diff --git a/dlls/ns/ns_const.h b/dlls/ns/ns_const.h index 3de02c1d..30d5deac 100755 --- a/dlls/ns/ns_const.h +++ b/dlls/ns/ns_const.h @@ -1,36 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// +// Natural Selection Module +// #ifndef NS_CONST_H #define NS_CONST_H diff --git a/dlls/ns/sdk/amxxmodule.cpp b/dlls/ns/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/dlls/ns/sdk/amxxmodule.cpp +++ b/dlls/ns/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/ns/sdk/amxxmodule.h b/dlls/ns/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/dlls/ns/sdk/amxxmodule.h +++ b/dlls/ns/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/ns/sdk/moduleconfig.h b/dlls/ns/sdk/moduleconfig.h index 951bad32..b1f25265 100755 --- a/dlls/ns/sdk/moduleconfig.h +++ b/dlls/ns/sdk/moduleconfig.h @@ -1,4 +1,15 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ diff --git a/dlls/ns/utilfunctions.h b/dlls/ns/utilfunctions.h index 73221392..da6c4c7d 100755 --- a/dlls/ns/utilfunctions.h +++ b/dlls/ns/utilfunctions.h @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// #ifndef UTILFUNCTIONS_H #define UTILFUNCTIONS_H diff --git a/dlls/ns/utils.cpp b/dlls/ns/utils.cpp index f75bf1e7..88638f2d 100644 --- a/dlls/ns/utils.cpp +++ b/dlls/ns/utils.cpp @@ -1,35 +1,15 @@ -/* AMX Mod X - * Natural Selection Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module +// #include "sdk/amxxmodule.h" From bf30d1d3cea6a682aa004debd1675cfa0d90eb3d Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 05:38:42 -0500 Subject: [PATCH 15/71] Update license headers for nvault module. --- dlls/nvault/Binary.cpp | 13 ++++++++++ dlls/nvault/Binary.h | 13 ++++++++++ dlls/nvault/IVault.h | 13 ++++++++++ dlls/nvault/Journal.cpp | 13 ++++++++++ dlls/nvault/Journal.h | 13 ++++++++++ dlls/nvault/NVault.cpp | 13 ++++++++++ dlls/nvault/NVault.h | 13 ++++++++++ dlls/nvault/amxxapi.cpp | 13 ++++++++++ dlls/nvault/amxxapi.h | 13 ++++++++++ dlls/nvault/compat.h | 13 ++++++++++ dlls/nvault/sdk/CQueue.h | 38 ++++++---------------------- dlls/nvault/sdk/CString.h | 38 ++++++---------------------- dlls/nvault/sdk/CVector.h | 38 ++++++---------------------- dlls/nvault/sdk/amxxmodule.cpp | 46 ++++++++++------------------------ dlls/nvault/sdk/amxxmodule.h | 17 ++++++++++--- dlls/nvault/sdk/moduleconfig.h | 13 +++++++++- 16 files changed, 192 insertions(+), 128 deletions(-) diff --git a/dlls/nvault/Binary.cpp b/dlls/nvault/Binary.cpp index 0ef4c728..06dd7d3e 100755 --- a/dlls/nvault/Binary.cpp +++ b/dlls/nvault/Binary.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// NVault Module +// + #include "Binary.h" #include "amxxmodule.h" diff --git a/dlls/nvault/Binary.h b/dlls/nvault/Binary.h index d5c0a030..adb57752 100755 --- a/dlls/nvault/Binary.h +++ b/dlls/nvault/Binary.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// NVault Module +// + #ifndef _INCLUDE_BINARY_H #define _INCLUDE_BINARY_H diff --git a/dlls/nvault/IVault.h b/dlls/nvault/IVault.h index 80d14d3f..0533506b 100755 --- a/dlls/nvault/IVault.h +++ b/dlls/nvault/IVault.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// NVault Module +// + #ifndef _INCLUDE_IVAULT_H #define _INCLUDE_IVAULT_H diff --git a/dlls/nvault/Journal.cpp b/dlls/nvault/Journal.cpp index c980fb2d..dcc08982 100755 --- a/dlls/nvault/Journal.cpp +++ b/dlls/nvault/Journal.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// NVault Module +// + #include #include #if defined(__linux__) || defined(__APPLE__) diff --git a/dlls/nvault/Journal.h b/dlls/nvault/Journal.h index cf6c6b91..afa49706 100755 --- a/dlls/nvault/Journal.h +++ b/dlls/nvault/Journal.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// NVault Module +// + #ifndef _INCLUDE_JOURNAL_H #define _INCLUDE_JOURNAL_H diff --git a/dlls/nvault/NVault.cpp b/dlls/nvault/NVault.cpp index 4546f02c..95517fbb 100755 --- a/dlls/nvault/NVault.cpp +++ b/dlls/nvault/NVault.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// NVault Module +// + #include #include "amxxmodule.h" #include "NVault.h" diff --git a/dlls/nvault/NVault.h b/dlls/nvault/NVault.h index 4d08dac5..291018d2 100755 --- a/dlls/nvault/NVault.h +++ b/dlls/nvault/NVault.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// NVault Module +// + #ifndef _INCLUDE_NVAULT_H #define _INCLUDE_NVAULT_H diff --git a/dlls/nvault/amxxapi.cpp b/dlls/nvault/amxxapi.cpp index 880e9dd8..1621aa60 100755 --- a/dlls/nvault/amxxapi.cpp +++ b/dlls/nvault/amxxapi.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// NVault Module +// + #include #include "amxxapi.h" #include "NVault.h" diff --git a/dlls/nvault/amxxapi.h b/dlls/nvault/amxxapi.h index 0190d84f..ebda0750 100755 --- a/dlls/nvault/amxxapi.h +++ b/dlls/nvault/amxxapi.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// NVault Module +// + #ifndef _INCLUDE_AMXXAPI_H #define _INCLUDE_AMXXAPI_H diff --git a/dlls/nvault/compat.h b/dlls/nvault/compat.h index 70f6de80..33faca47 100755 --- a/dlls/nvault/compat.h +++ b/dlls/nvault/compat.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// NVault Module +// + #ifndef _INCLUDE_COMPAT_H #define _INCLUDE_COMPAT_H diff --git a/dlls/nvault/sdk/CQueue.h b/dlls/nvault/sdk/CQueue.h index 44285185..f45abffc 100755 --- a/dlls/nvault/sdk/CQueue.h +++ b/dlls/nvault/sdk/CQueue.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license //by David "BAILOPAN" Anderson #ifndef _INCLUDE_CQUEUE_H diff --git a/dlls/nvault/sdk/CString.h b/dlls/nvault/sdk/CString.h index 1c2c5789..9f9b63f3 100755 --- a/dlls/nvault/sdk/CString.h +++ b/dlls/nvault/sdk/CString.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef _INCLUDE_CSTRING_H #define _INCLUDE_CSTRING_H diff --git a/dlls/nvault/sdk/CVector.h b/dlls/nvault/sdk/CVector.h index 24355d4e..44241413 100755 --- a/dlls/nvault/sdk/CVector.h +++ b/dlls/nvault/sdk/CVector.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef __CVECTOR_H__ #define __CVECTOR_H__ diff --git a/dlls/nvault/sdk/amxxmodule.cpp b/dlls/nvault/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/dlls/nvault/sdk/amxxmodule.cpp +++ b/dlls/nvault/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/nvault/sdk/amxxmodule.h b/dlls/nvault/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/dlls/nvault/sdk/amxxmodule.h +++ b/dlls/nvault/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/nvault/sdk/moduleconfig.h b/dlls/nvault/sdk/moduleconfig.h index 31d9818a..c51caa22 100755 --- a/dlls/nvault/sdk/moduleconfig.h +++ b/dlls/nvault/sdk/moduleconfig.h @@ -1,4 +1,15 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ From edeb44b0b87c157d8d383658650da50d5d69cecb Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 05:40:47 -0500 Subject: [PATCH 16/71] Update license headers for regex module. --- dlls/regex/CRegEx.cpp | 45 ++++++++++------------------------ dlls/regex/CRegEx.h | 45 ++++++++++------------------------ dlls/regex/module.cpp | 45 ++++++++++------------------------ dlls/regex/sdk/CVector.h | 38 ++++++----------------------- dlls/regex/sdk/amxxmodule.cpp | 46 ++++++++++------------------------- dlls/regex/sdk/amxxmodule.h | 17 ++++++++++--- dlls/regex/sdk/moduleconfig.h | 13 +++++++++- dlls/regex/utils.cpp | 14 ++++++++++- dlls/regex/utils.h | 15 +++++++++++- 9 files changed, 112 insertions(+), 166 deletions(-) diff --git a/dlls/regex/CRegEx.cpp b/dlls/regex/CRegEx.cpp index 47dab64a..d98b1241 100755 --- a/dlls/regex/CRegEx.cpp +++ b/dlls/regex/CRegEx.cpp @@ -1,35 +1,16 @@ -/* AMX Mod X - * Regular Expressions Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Regular Expressions Module +// + #include "amxxmodule.h" #include "pcre.h" #include "CRegEx.h" diff --git a/dlls/regex/CRegEx.h b/dlls/regex/CRegEx.h index 82db0311..efd0d91f 100755 --- a/dlls/regex/CRegEx.h +++ b/dlls/regex/CRegEx.h @@ -1,35 +1,16 @@ -/* AMX Mod X - * Regular Expressions Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Regular Expressions Module +// + #ifndef _INCLUDE_CREGEX_H #define _INCLUDE_CREGEX_H diff --git a/dlls/regex/module.cpp b/dlls/regex/module.cpp index 78182c97..b62c4d4d 100755 --- a/dlls/regex/module.cpp +++ b/dlls/regex/module.cpp @@ -1,35 +1,16 @@ -/* AMX Mod X - * Regular Expressions Module - * - * by the AMX Mod X Development Team - * - * This file is part of AMX Mod X. - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Regular Expressions Module +// + #include #include "pcre.h" #include "amxxmodule.h" diff --git a/dlls/regex/sdk/CVector.h b/dlls/regex/sdk/CVector.h index 24355d4e..44241413 100755 --- a/dlls/regex/sdk/CVector.h +++ b/dlls/regex/sdk/CVector.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef __CVECTOR_H__ #define __CVECTOR_H__ diff --git a/dlls/regex/sdk/amxxmodule.cpp b/dlls/regex/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/dlls/regex/sdk/amxxmodule.cpp +++ b/dlls/regex/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/regex/sdk/amxxmodule.h b/dlls/regex/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/dlls/regex/sdk/amxxmodule.h +++ b/dlls/regex/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/regex/sdk/moduleconfig.h b/dlls/regex/sdk/moduleconfig.h index 60bfca55..f7f0dc4a 100755 --- a/dlls/regex/sdk/moduleconfig.h +++ b/dlls/regex/sdk/moduleconfig.h @@ -1,4 +1,15 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ diff --git a/dlls/regex/utils.cpp b/dlls/regex/utils.cpp index 3ae8c085..f5148b3d 100644 --- a/dlls/regex/utils.cpp +++ b/dlls/regex/utils.cpp @@ -1,3 +1,15 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Regular Expressions Module +// #include "amxxmodule.h" #include @@ -238,4 +250,4 @@ char *UTIL_ReplaceEx(char *subject, size_t maxLen, const char *search, size_t se } return NULL; -} \ No newline at end of file +} diff --git a/dlls/regex/utils.h b/dlls/regex/utils.h index 05644312..bf4c7c84 100644 --- a/dlls/regex/utils.h +++ b/dlls/regex/utils.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Regular Expressions Module +// + #ifndef UTILS_H #define UTILS_H @@ -5,4 +18,4 @@ int UTIL_CheckValidChar(char *c); char *UTIL_ReplaceEx(char *subject, size_t maxLen, const char *search, size_t searchLen, const char *replace, size_t replaceLen, bool caseSensitive); unsigned int strncopy(char *dest, const char *src, size_t count); -#endif // UTILS_H \ No newline at end of file +#endif // UTILS_H From 5ec6cc0d5e0577b658c04bac7deaa82e6cc40859 Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 05:44:42 -0500 Subject: [PATCH 17/71] Update license headers for socket module. --- dlls/sockets/sdk/amxxmodule.cpp | 46 ++++++++++----------------------- dlls/sockets/sdk/amxxmodule.h | 17 +++++++++--- dlls/sockets/sdk/moduleconfig.h | 13 +++++++++- dlls/sockets/sockets.cpp | 32 +++++++++++------------ 4 files changed, 54 insertions(+), 54 deletions(-) diff --git a/dlls/sockets/sdk/amxxmodule.cpp b/dlls/sockets/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/dlls/sockets/sdk/amxxmodule.cpp +++ b/dlls/sockets/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/sockets/sdk/amxxmodule.h b/dlls/sockets/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/dlls/sockets/sdk/amxxmodule.h +++ b/dlls/sockets/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/sockets/sdk/moduleconfig.h b/dlls/sockets/sdk/moduleconfig.h index 10c55440..85dbea26 100755 --- a/dlls/sockets/sdk/moduleconfig.h +++ b/dlls/sockets/sdk/moduleconfig.h @@ -1,4 +1,15 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ diff --git a/dlls/sockets/sockets.cpp b/dlls/sockets/sockets.cpp index bc5eed88..2ff14e4c 100755 --- a/dlls/sockets/sockets.cpp +++ b/dlls/sockets/sockets.cpp @@ -1,19 +1,19 @@ -/* - * - * AMX Mod X Module - * Basic Socket Functions - * - * Codebase from Ivan, -g-s-ivan@web.de (AMX 0.9.3) - * Modification by Olaf Reusch, kenterfie@hlsw.de (AMXX 0.16, AMX 0.96) - * Modification by David Anderson, dvander@tcwonline.org (AMXx 0.20) - * - * Bugs/Fixes - * - * v0.1 - * - code structure renewed - * v0.2 - * - added socket_send2 to send data containing null bytes (FALUCO)(AMXX v1.65) - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// Codebase from Ivan, -g-s-ivan@web.de (AMX 0.9.3) +// Modification by Olaf Reusch, kenterfie@hlsw.de (AMXX 0.16, AMX 0.96) +// Modification by David Anderson, dvander@tcwonline.org (AMXx 0.20) +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Sockets Module +// #include #include From 12775d0627c31b500bc5b95effdd3c611c42ed24 Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 05:49:44 -0500 Subject: [PATCH 18/71] Update license headers for sqlite module. --- dlls/sqlite/basic_sql.cpp | 13 +++++++ dlls/sqlite/handles.cpp | 13 +++++++ dlls/sqlite/module.cpp | 13 +++++++ dlls/sqlite/oldcompat_sql.cpp | 13 +++++++ dlls/sqlite/sdk/CVector.h | 38 +++++--------------- dlls/sqlite/sdk/amxxmodule.cpp | 46 +++++++----------------- dlls/sqlite/sdk/amxxmodule.h | 17 ++++++--- dlls/sqlite/sdk/moduleconfig.h | 13 ++++++- dlls/sqlite/sqlheaders.h | 13 +++++++ dlls/sqlite/sqlite_header.h | 13 +++++++ dlls/sqlite/sqlitepp/ISQLDriver.h | 13 +++++++ dlls/sqlite/sqlitepp/SqliteDatabase.cpp | 13 +++++++ dlls/sqlite/sqlitepp/SqliteDatabase.h | 13 +++++++ dlls/sqlite/sqlitepp/SqliteDriver.cpp | 13 +++++++ dlls/sqlite/sqlitepp/SqliteDriver.h | 13 +++++++ dlls/sqlite/sqlitepp/SqliteHeaders.h | 13 +++++++ dlls/sqlite/sqlitepp/SqliteQuery.cpp | 13 +++++++ dlls/sqlite/sqlitepp/SqliteQuery.h | 13 +++++++ dlls/sqlite/sqlitepp/SqliteResultSet.cpp | 13 +++++++ dlls/sqlite/sqlitepp/SqliteResultSet.h | 13 +++++++ dlls/sqlite/thread/BaseWorker.cpp | 9 +++++ dlls/sqlite/thread/BaseWorker.h | 9 +++++ dlls/sqlite/thread/IThreader.h | 9 +++++ dlls/sqlite/thread/PosixThreads.cpp | 9 +++++ dlls/sqlite/thread/PosixThreads.h | 9 +++++ dlls/sqlite/thread/ThreadSupport.h | 9 +++++ dlls/sqlite/thread/ThreadWorker.cpp | 9 +++++ dlls/sqlite/thread/ThreadWorker.h | 9 +++++ dlls/sqlite/thread/WinThreads.cpp | 9 +++++ dlls/sqlite/thread/WinThreads.h | 9 +++++ dlls/sqlite/threading.cpp | 13 +++++++ dlls/sqlite/threading.h | 13 +++++++ 32 files changed, 370 insertions(+), 68 deletions(-) diff --git a/dlls/sqlite/basic_sql.cpp b/dlls/sqlite/basic_sql.cpp index a969572d..4d606c62 100644 --- a/dlls/sqlite/basic_sql.cpp +++ b/dlls/sqlite/basic_sql.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #include #include "sh_list.h" #include "sqlite_header.h" diff --git a/dlls/sqlite/handles.cpp b/dlls/sqlite/handles.cpp index 596991b1..e418a0f6 100644 --- a/dlls/sqlite/handles.cpp +++ b/dlls/sqlite/handles.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #include #include "sh_stack.h" #include "CVector.h" diff --git a/dlls/sqlite/module.cpp b/dlls/sqlite/module.cpp index f359ed67..7fb83cd8 100644 --- a/dlls/sqlite/module.cpp +++ b/dlls/sqlite/module.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #include "amxxmodule.h" #include "sqlite_header.h" #include "sqlheaders.h" diff --git a/dlls/sqlite/oldcompat_sql.cpp b/dlls/sqlite/oldcompat_sql.cpp index 0dbbb77c..0c2c6b6f 100644 --- a/dlls/sqlite/oldcompat_sql.cpp +++ b/dlls/sqlite/oldcompat_sql.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #include #include "sh_list.h" #include "sqlite_header.h" diff --git a/dlls/sqlite/sdk/CVector.h b/dlls/sqlite/sdk/CVector.h index 24355d4e..44241413 100755 --- a/dlls/sqlite/sdk/CVector.h +++ b/dlls/sqlite/sdk/CVector.h @@ -1,33 +1,11 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #ifndef __CVECTOR_H__ #define __CVECTOR_H__ diff --git a/dlls/sqlite/sdk/amxxmodule.cpp b/dlls/sqlite/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/dlls/sqlite/sdk/amxxmodule.cpp +++ b/dlls/sqlite/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/sqlite/sdk/amxxmodule.h b/dlls/sqlite/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/dlls/sqlite/sdk/amxxmodule.h +++ b/dlls/sqlite/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/sqlite/sdk/moduleconfig.h b/dlls/sqlite/sdk/moduleconfig.h index 9e9a2b45..7250a93b 100755 --- a/dlls/sqlite/sdk/moduleconfig.h +++ b/dlls/sqlite/sdk/moduleconfig.h @@ -1,4 +1,15 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ diff --git a/dlls/sqlite/sqlheaders.h b/dlls/sqlite/sqlheaders.h index c09f108f..106d5828 100644 --- a/dlls/sqlite/sqlheaders.h +++ b/dlls/sqlite/sqlheaders.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #ifndef _INCLUDE_SQLHEADERS_H #define _INCLUDE_SQLHEADERS_H diff --git a/dlls/sqlite/sqlite_header.h b/dlls/sqlite/sqlite_header.h index fa70ea2d..16a675b2 100644 --- a/dlls/sqlite/sqlite_header.h +++ b/dlls/sqlite/sqlite_header.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #ifndef _INCLUDE_AMXMODX_MYSQL2_HEADER_H #define _INCLUDE_AMXMODX_MYSQL2_HEADER_H diff --git a/dlls/sqlite/sqlitepp/ISQLDriver.h b/dlls/sqlite/sqlitepp/ISQLDriver.h index a5c20f11..b949a59a 100644 --- a/dlls/sqlite/sqlitepp/ISQLDriver.h +++ b/dlls/sqlite/sqlitepp/ISQLDriver.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #ifndef _INCLUDE_SOURCEMOD_DATABASE2_H #define _INCLUDE_SOURCEMOD_DATABASE2_H diff --git a/dlls/sqlite/sqlitepp/SqliteDatabase.cpp b/dlls/sqlite/sqlitepp/SqliteDatabase.cpp index f764174b..b926e98e 100644 --- a/dlls/sqlite/sqlitepp/SqliteDatabase.cpp +++ b/dlls/sqlite/sqlitepp/SqliteDatabase.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #include #include #include "SqliteDriver.h" diff --git a/dlls/sqlite/sqlitepp/SqliteDatabase.h b/dlls/sqlite/sqlitepp/SqliteDatabase.h index 2b11f0c4..65ac4ad9 100644 --- a/dlls/sqlite/sqlitepp/SqliteDatabase.h +++ b/dlls/sqlite/sqlitepp/SqliteDatabase.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #ifndef _INCLUDE_SOURCEMOD_SQLITE_DATABASE_H #define _INCLUDE_SOURCEMOD_SQLITE_DATABASE_H diff --git a/dlls/sqlite/sqlitepp/SqliteDriver.cpp b/dlls/sqlite/sqlitepp/SqliteDriver.cpp index 9e41cd75..ab60b921 100644 --- a/dlls/sqlite/sqlitepp/SqliteDriver.cpp +++ b/dlls/sqlite/sqlitepp/SqliteDriver.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #include #include #include "SqliteHeaders.h" diff --git a/dlls/sqlite/sqlitepp/SqliteDriver.h b/dlls/sqlite/sqlitepp/SqliteDriver.h index 5c2160a7..18cf7156 100644 --- a/dlls/sqlite/sqlitepp/SqliteDriver.h +++ b/dlls/sqlite/sqlitepp/SqliteDriver.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #ifndef _INCLUDE_SOURCEMOD_SQLITE_DRIVER_H #define _INCLUDE_SOURCEMOD_SQLITE_DRIVER_H diff --git a/dlls/sqlite/sqlitepp/SqliteHeaders.h b/dlls/sqlite/sqlitepp/SqliteHeaders.h index 650b78cd..5599d27f 100644 --- a/dlls/sqlite/sqlitepp/SqliteHeaders.h +++ b/dlls/sqlite/sqlitepp/SqliteHeaders.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #ifndef _INCLUDE_SOURCEMOD_SQLITE_HEADERS_H #define _INCLUDE_SOURCEMOD_SQLITE_HEADERS_H diff --git a/dlls/sqlite/sqlitepp/SqliteQuery.cpp b/dlls/sqlite/sqlitepp/SqliteQuery.cpp index 0a7439f7..61e3e19e 100644 --- a/dlls/sqlite/sqlitepp/SqliteQuery.cpp +++ b/dlls/sqlite/sqlitepp/SqliteQuery.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #include #include #include "SqliteQuery.h" diff --git a/dlls/sqlite/sqlitepp/SqliteQuery.h b/dlls/sqlite/sqlitepp/SqliteQuery.h index c15bcfc9..b5325348 100644 --- a/dlls/sqlite/sqlitepp/SqliteQuery.h +++ b/dlls/sqlite/sqlitepp/SqliteQuery.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #ifndef _INCLUDE_SOURCEMOD_SQLITE_QUERY_H #define _INCLUDE_SOURCEMOD_SQLITE_QUERY_H diff --git a/dlls/sqlite/sqlitepp/SqliteResultSet.cpp b/dlls/sqlite/sqlitepp/SqliteResultSet.cpp index 3cc81bd7..41935e34 100644 --- a/dlls/sqlite/sqlitepp/SqliteResultSet.cpp +++ b/dlls/sqlite/sqlitepp/SqliteResultSet.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #include #include #include "SqliteResultSet.h" diff --git a/dlls/sqlite/sqlitepp/SqliteResultSet.h b/dlls/sqlite/sqlitepp/SqliteResultSet.h index 18735c74..9cc05828 100644 --- a/dlls/sqlite/sqlitepp/SqliteResultSet.h +++ b/dlls/sqlite/sqlitepp/SqliteResultSet.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #ifndef _INCLUDE_SOURCEMOD_SQLITE_RESULTSET_H #define _INCLUDE_SOURCEMOD_SQLITE_RESULTSET_H diff --git a/dlls/sqlite/thread/BaseWorker.cpp b/dlls/sqlite/thread/BaseWorker.cpp index 4e107f92..f02758a4 100644 --- a/dlls/sqlite/thread/BaseWorker.cpp +++ b/dlls/sqlite/thread/BaseWorker.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include "BaseWorker.h" BaseWorker::BaseWorker() : diff --git a/dlls/sqlite/thread/BaseWorker.h b/dlls/sqlite/thread/BaseWorker.h index 37b8f5fd..b2a218cf 100644 --- a/dlls/sqlite/thread/BaseWorker.h +++ b/dlls/sqlite/thread/BaseWorker.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_SOURCEMOD_BASEWORKER_H #define _INCLUDE_SOURCEMOD_BASEWORKER_H diff --git a/dlls/sqlite/thread/IThreader.h b/dlls/sqlite/thread/IThreader.h index f9c3e8a2..b27673d2 100644 --- a/dlls/sqlite/thread/IThreader.h +++ b/dlls/sqlite/thread/IThreader.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_SOURCEMOD_THREADER_H #define _INCLUDE_SOURCEMOD_THREADER_H diff --git a/dlls/sqlite/thread/PosixThreads.cpp b/dlls/sqlite/thread/PosixThreads.cpp index 47d66899..1e112739 100644 --- a/dlls/sqlite/thread/PosixThreads.cpp +++ b/dlls/sqlite/thread/PosixThreads.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include #include "PosixThreads.h" diff --git a/dlls/sqlite/thread/PosixThreads.h b/dlls/sqlite/thread/PosixThreads.h index 95245d79..15ed6f97 100644 --- a/dlls/sqlite/thread/PosixThreads.h +++ b/dlls/sqlite/thread/PosixThreads.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_POSIXTHREADS_H_ #define _INCLUDE_POSIXTHREADS_H_ diff --git a/dlls/sqlite/thread/ThreadSupport.h b/dlls/sqlite/thread/ThreadSupport.h index b15b0d30..c69f9d40 100644 --- a/dlls/sqlite/thread/ThreadSupport.h +++ b/dlls/sqlite/thread/ThreadSupport.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_SOURCEMOD_THREAD_SUPPORT_H #define _INCLUDE_SOURCEMOD_THREAD_SUPPORT_H diff --git a/dlls/sqlite/thread/ThreadWorker.cpp b/dlls/sqlite/thread/ThreadWorker.cpp index 4c061067..a2393949 100644 --- a/dlls/sqlite/thread/ThreadWorker.cpp +++ b/dlls/sqlite/thread/ThreadWorker.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include "ThreadWorker.h" ThreadWorker::ThreadWorker() : diff --git a/dlls/sqlite/thread/ThreadWorker.h b/dlls/sqlite/thread/ThreadWorker.h index a8c57be3..9b66bc38 100644 --- a/dlls/sqlite/thread/ThreadWorker.h +++ b/dlls/sqlite/thread/ThreadWorker.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_SOURCEMOD_THREADWORKER_H #define _INCLUDE_SOURCEMOD_THREADWORKER_H diff --git a/dlls/sqlite/thread/WinThreads.cpp b/dlls/sqlite/thread/WinThreads.cpp index 6f3f436f..6be2346f 100644 --- a/dlls/sqlite/thread/WinThreads.cpp +++ b/dlls/sqlite/thread/WinThreads.cpp @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include "WinThreads.h" void WinThreader::ThreadSleep(unsigned int ms) diff --git a/dlls/sqlite/thread/WinThreads.h b/dlls/sqlite/thread/WinThreads.h index 4bec6fd3..574fa2ec 100644 --- a/dlls/sqlite/thread/WinThreads.h +++ b/dlls/sqlite/thread/WinThreads.h @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #ifndef _INCLUDE_WINTHREADS_H_ #define _INCLUDE_WINTHREADS_H_ diff --git a/dlls/sqlite/threading.cpp b/dlls/sqlite/threading.cpp index b7a852a1..f80350c8 100644 --- a/dlls/sqlite/threading.cpp +++ b/dlls/sqlite/threading.cpp @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #include "amxxmodule.h" #include "sqlite_header.h" #include "threading.h" diff --git a/dlls/sqlite/threading.h b/dlls/sqlite/threading.h index e5c62ed9..a3c640c7 100644 --- a/dlls/sqlite/threading.h +++ b/dlls/sqlite/threading.h @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLite Module +// + #ifndef _INCLUDE_MYSQL_THREADING_H #define _INCLUDE_MYSQL_THREADING_H From 8be13a4ecc883b17e244c809a8e6f197a070a3f3 Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 05:52:24 -0500 Subject: [PATCH 19/71] Update license headers for tfcx module. --- dlls/tfcx/CMisc.cpp | 43 ++++++++++----------------------- dlls/tfcx/CMisc.h | 12 ++++++++++ dlls/tfcx/CRank.cpp | 43 ++++++++++----------------------- dlls/tfcx/CRank.h | 12 ++++++++++ dlls/tfcx/NBase.cpp | 43 ++++++++++----------------------- dlls/tfcx/NRank.cpp | 42 ++++++++++---------------------- dlls/tfcx/Utils.cpp | 43 ++++++++++----------------------- dlls/tfcx/moduleconfig.cpp | 43 ++++++++++----------------------- dlls/tfcx/sdk/amxxmodule.cpp | 46 ++++++++++-------------------------- dlls/tfcx/sdk/amxxmodule.h | 17 +++++++++---- dlls/tfcx/sdk/moduleconfig.h | 14 ++++++++++- dlls/tfcx/tfcx.h | 43 ++++++++++----------------------- dlls/tfcx/usermsg.cpp | 43 ++++++++++----------------------- 13 files changed, 166 insertions(+), 278 deletions(-) diff --git a/dlls/tfcx/CMisc.cpp b/dlls/tfcx/CMisc.cpp index 44641183..82cc1aee 100755 --- a/dlls/tfcx/CMisc.cpp +++ b/dlls/tfcx/CMisc.cpp @@ -1,33 +1,16 @@ -/* - * TFCX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TFCX Module +// #include "amxxmodule.h" #include "CMisc.h" diff --git a/dlls/tfcx/CMisc.h b/dlls/tfcx/CMisc.h index fc24a2f6..2b1e9b0a 100755 --- a/dlls/tfcx/CMisc.h +++ b/dlls/tfcx/CMisc.h @@ -1,4 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// +// TFCX Module +// #ifndef CMISC_H #define CMISC_H diff --git a/dlls/tfcx/CRank.cpp b/dlls/tfcx/CRank.cpp index 9cb39e53..5276bcec 100755 --- a/dlls/tfcx/CRank.cpp +++ b/dlls/tfcx/CRank.cpp @@ -1,33 +1,16 @@ -/* - * TFCX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TFCX Module +// #include "amxxmodule.h" #include "CRank.h" diff --git a/dlls/tfcx/CRank.h b/dlls/tfcx/CRank.h index a7e8f884..575e9d42 100755 --- a/dlls/tfcx/CRank.h +++ b/dlls/tfcx/CRank.h @@ -1,4 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// +// TFCX Module +// #ifndef CRANK_H #define CRANK_H diff --git a/dlls/tfcx/NBase.cpp b/dlls/tfcx/NBase.cpp index 786f3d2e..bc7d2251 100755 --- a/dlls/tfcx/NBase.cpp +++ b/dlls/tfcx/NBase.cpp @@ -1,33 +1,16 @@ -/* - * TFCX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TFCX Module +// #include "amxxmodule.h" #include "tfcx.h" diff --git a/dlls/tfcx/NRank.cpp b/dlls/tfcx/NRank.cpp index 2c57ebf5..a81f3af4 100755 --- a/dlls/tfcx/NRank.cpp +++ b/dlls/tfcx/NRank.cpp @@ -1,34 +1,16 @@ -/* - * TFCX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// +// TFCX Module +// #include "amxxmodule.h" #include "tfcx.h" diff --git a/dlls/tfcx/Utils.cpp b/dlls/tfcx/Utils.cpp index e8f504e0..10374b8b 100755 --- a/dlls/tfcx/Utils.cpp +++ b/dlls/tfcx/Utils.cpp @@ -1,33 +1,16 @@ -/* - * TFCX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TFCX Module +// #include "amxxmodule.h" #include "tfcx.h" diff --git a/dlls/tfcx/moduleconfig.cpp b/dlls/tfcx/moduleconfig.cpp index c958188d..0fff9b90 100755 --- a/dlls/tfcx/moduleconfig.cpp +++ b/dlls/tfcx/moduleconfig.cpp @@ -1,33 +1,16 @@ -/* - * TFCX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TFCX Module +// #include "tfcx.h" diff --git a/dlls/tfcx/sdk/amxxmodule.cpp b/dlls/tfcx/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/dlls/tfcx/sdk/amxxmodule.cpp +++ b/dlls/tfcx/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/tfcx/sdk/amxxmodule.h b/dlls/tfcx/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/dlls/tfcx/sdk/amxxmodule.h +++ b/dlls/tfcx/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/tfcx/sdk/moduleconfig.h b/dlls/tfcx/sdk/moduleconfig.h index f4074df3..320c8e4a 100755 --- a/dlls/tfcx/sdk/moduleconfig.h +++ b/dlls/tfcx/sdk/moduleconfig.h @@ -1,4 +1,16 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ diff --git a/dlls/tfcx/tfcx.h b/dlls/tfcx/tfcx.h index 0d947bbe..54944611 100755 --- a/dlls/tfcx/tfcx.h +++ b/dlls/tfcx/tfcx.h @@ -1,33 +1,16 @@ -/* - * TFCX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TFCX Module +// #ifndef RANK_H #define RANK_H diff --git a/dlls/tfcx/usermsg.cpp b/dlls/tfcx/usermsg.cpp index 0bf64bc8..e3d84571 100755 --- a/dlls/tfcx/usermsg.cpp +++ b/dlls/tfcx/usermsg.cpp @@ -1,33 +1,16 @@ -/* - * TFCX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TFCX Module +// #include "amxxmodule.h" #include "tfcx.h" From d113b1b64688862825ecd8f5ca7e4d83b7b2b7bf Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 05:55:54 -0500 Subject: [PATCH 20/71] Update license headers for ts modules. --- dlls/ts/tsfun/sdk/amxxmodule.cpp | 46 +++++++++----------------------- dlls/ts/tsfun/sdk/amxxmodule.h | 17 +++++++++--- dlls/ts/tsfun/sdk/moduleconfig.h | 14 +++++++++- dlls/ts/tsx/CMisc.cpp | 43 +++++++++-------------------- dlls/ts/tsx/CMisc.h | 43 +++++++++-------------------- dlls/ts/tsx/CRank.cpp | 43 +++++++++-------------------- dlls/ts/tsx/CRank.h | 12 +++++++++ dlls/ts/tsx/NBase.cpp | 43 +++++++++-------------------- dlls/ts/tsx/NRank.cpp | 42 +++++++++-------------------- dlls/ts/tsx/Utils.cpp | 43 +++++++++-------------------- dlls/ts/tsx/moduleconfig.cpp | 43 +++++++++-------------------- dlls/ts/tsx/sdk/amxxmodule.cpp | 46 +++++++++----------------------- dlls/ts/tsx/sdk/amxxmodule.h | 17 +++++++++--- dlls/ts/tsx/sdk/moduleconfig.h | 14 +++++++++- dlls/ts/tsx/tsx.h | 43 +++++++++-------------------- dlls/ts/tsx/usermsg.cpp | 43 +++++++++-------------------- 16 files changed, 206 insertions(+), 346 deletions(-) diff --git a/dlls/ts/tsfun/sdk/amxxmodule.cpp b/dlls/ts/tsfun/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/dlls/ts/tsfun/sdk/amxxmodule.cpp +++ b/dlls/ts/tsfun/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/ts/tsfun/sdk/amxxmodule.h b/dlls/ts/tsfun/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/dlls/ts/tsfun/sdk/amxxmodule.h +++ b/dlls/ts/tsfun/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/ts/tsfun/sdk/moduleconfig.h b/dlls/ts/tsfun/sdk/moduleconfig.h index cc1c5fb4..c3ca7103 100755 --- a/dlls/ts/tsfun/sdk/moduleconfig.h +++ b/dlls/ts/tsfun/sdk/moduleconfig.h @@ -1,4 +1,16 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ diff --git a/dlls/ts/tsx/CMisc.cpp b/dlls/ts/tsx/CMisc.cpp index 5dde272a..fed2c32e 100755 --- a/dlls/ts/tsx/CMisc.cpp +++ b/dlls/ts/tsx/CMisc.cpp @@ -1,33 +1,16 @@ -/* - * Copyright (c) 2003-2004 Lukasz Wlasinski - * - * This file is part of TS XMod. - * - * TS XMod 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. - * - * TS XMod 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 TS XMod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TSX Module +// #include "CMisc.h" #include "tsx.h" diff --git a/dlls/ts/tsx/CMisc.h b/dlls/ts/tsx/CMisc.h index d8d0560a..51e922fc 100755 --- a/dlls/ts/tsx/CMisc.h +++ b/dlls/ts/tsx/CMisc.h @@ -1,33 +1,16 @@ -/* - * Copyright (c) 2003-2004 Lukasz Wlasinski - * - * This file is part of TS XMod. - * - * TS XMod 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. - * - * TS XMod 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 TS XMod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TSX Module +// #ifndef CMISC_H #define CMISC_H diff --git a/dlls/ts/tsx/CRank.cpp b/dlls/ts/tsx/CRank.cpp index d088c637..0a439788 100755 --- a/dlls/ts/tsx/CRank.cpp +++ b/dlls/ts/tsx/CRank.cpp @@ -1,33 +1,16 @@ -/* - * TSX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TSX Module +// #include "amxxmodule.h" #include "CRank.h" diff --git a/dlls/ts/tsx/CRank.h b/dlls/ts/tsx/CRank.h index 39595b13..149796b0 100755 --- a/dlls/ts/tsx/CRank.h +++ b/dlls/ts/tsx/CRank.h @@ -1,4 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// +// TSX Module +// #ifndef CRANK_H #define CRANK_H diff --git a/dlls/ts/tsx/NBase.cpp b/dlls/ts/tsx/NBase.cpp index f6f7915a..cb08c2e4 100755 --- a/dlls/ts/tsx/NBase.cpp +++ b/dlls/ts/tsx/NBase.cpp @@ -1,33 +1,16 @@ -/* - * Copyright (c) 2003-2004 Lukasz Wlasinski - * - * This file is part of TS XMod. - * - * TS XMod 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. - * - * TS XMod 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 TS XMod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TSX Module +// #include "amxxmodule.h" #include "tsx.h" diff --git a/dlls/ts/tsx/NRank.cpp b/dlls/ts/tsx/NRank.cpp index c62ea8ce..64ba7611 100755 --- a/dlls/ts/tsx/NRank.cpp +++ b/dlls/ts/tsx/NRank.cpp @@ -1,34 +1,16 @@ -/* - * TFCX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// +// TSX Module +// #include "amxxmodule.h" #include "tsx.h" diff --git a/dlls/ts/tsx/Utils.cpp b/dlls/ts/tsx/Utils.cpp index dd2ec6a6..783f23f2 100755 --- a/dlls/ts/tsx/Utils.cpp +++ b/dlls/ts/tsx/Utils.cpp @@ -1,33 +1,16 @@ -/* - * TFCX - * Copyright (c) 2004 Lukasz Wlasinski - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TSX Module +// #include "amxxmodule.h" #include "tsx.h" diff --git a/dlls/ts/tsx/moduleconfig.cpp b/dlls/ts/tsx/moduleconfig.cpp index 6a7f0460..158d1789 100755 --- a/dlls/ts/tsx/moduleconfig.cpp +++ b/dlls/ts/tsx/moduleconfig.cpp @@ -1,33 +1,16 @@ -/* - * Copyright (c) 2003-2004 Lukasz Wlasinski - * - * This file is part of TS XMod. - * - * TS XMod 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. - * - * TS XMod 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 TS XMod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TSX Module +// #include "tsx.h" diff --git a/dlls/ts/tsx/sdk/amxxmodule.cpp b/dlls/ts/tsx/sdk/amxxmodule.cpp index efb933b3..7de02e6e 100755 --- a/dlls/ts/tsx/sdk/amxxmodule.cpp +++ b/dlls/ts/tsx/sdk/amxxmodule.cpp @@ -1,36 +1,16 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* Parts Copyright (C) 2001-2003 Will Day -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Description: AMX Mod X Module Interface Functions -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Parts Copyright (C) 2001-2003 Will Day +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module SDK +// #include #include diff --git a/dlls/ts/tsx/sdk/amxxmodule.h b/dlls/ts/tsx/sdk/amxxmodule.h index 3ca8c7b6..6a760b25 100755 --- a/dlls/ts/tsx/sdk/amxxmodule.h +++ b/dlls/ts/tsx/sdk/amxxmodule.h @@ -1,7 +1,16 @@ -/* - * AMX Mod X Module Interface Functions - * This file may be freely used -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// + +// +// Module SDK +// // prevent double include #ifndef __AMXXMODULE_H__ diff --git a/dlls/ts/tsx/sdk/moduleconfig.h b/dlls/ts/tsx/sdk/moduleconfig.h index 046c8ee2..c1a91352 100755 --- a/dlls/ts/tsx/sdk/moduleconfig.h +++ b/dlls/ts/tsx/sdk/moduleconfig.h @@ -1,4 +1,16 @@ -// Configuration +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Module Config +// #ifndef __MODULECONFIG_H__ #define __MODULECONFIG_H__ diff --git a/dlls/ts/tsx/tsx.h b/dlls/ts/tsx/tsx.h index 186e7d21..2ffa8cc6 100755 --- a/dlls/ts/tsx/tsx.h +++ b/dlls/ts/tsx/tsx.h @@ -1,33 +1,16 @@ -/* - * Copyright (c) 2003-2004 Lukasz Wlasinski - * - * This file is part of TS XMod. - * - * TS XMod 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. - * - * TS XMod 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 TS XMod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TSX Module +// #ifndef TSX_H #define TSX_H diff --git a/dlls/ts/tsx/usermsg.cpp b/dlls/ts/tsx/usermsg.cpp index a3632b61..e194d739 100755 --- a/dlls/ts/tsx/usermsg.cpp +++ b/dlls/ts/tsx/usermsg.cpp @@ -1,33 +1,16 @@ -/* - * Copyright (c) 2003-2004 Lukasz Wlasinski - * - * This file is part of TS XMod. - * - * TS XMod 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. - * - * TS XMod 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 TS XMod; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Lukasz Wlasinski. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TSX Module +// #include "amxxmodule.h" #include "tsx.h" From f787db1be5b3cd611ede4db0de948ae28ab43b35 Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 07:12:15 -0500 Subject: [PATCH 21/71] Update license headers for plugins and includes. --- plugins/admin.sma | 45 +++-------- plugins/adminchat.sma | 45 +++-------- plugins/admincmd.sma | 45 +++-------- plugins/adminhelp.sma | 45 +++-------- plugins/adminslots.sma | 45 +++-------- plugins/adminvote.sma | 45 +++-------- plugins/antiflood.sma | 45 +++-------- plugins/cmdmenu.sma | 45 +++-------- plugins/cstrike/csstats.sma | 45 +++-------- plugins/cstrike/miscstats.sma | 45 +++-------- plugins/cstrike/restmenu.sma | 45 +++-------- plugins/cstrike/stats_logging.sma | 45 +++-------- plugins/cstrike/statsx.sma | 45 +++-------- plugins/dod/dodstats.sma | 23 ++++-- plugins/dod/plmenu.sma | 45 +++-------- plugins/dod/stats.sma | 44 +++++----- plugins/dod/stats_logging.sma | 19 +++-- plugins/dod/statssounds.sma | 17 +++- plugins/imessage.sma | 45 +++-------- plugins/include/amxconst.inc | 15 ++-- plugins/include/amxmisc.inc | 15 ++-- plugins/include/amxmodx.inc | 15 ++-- plugins/include/amxmodx_version.inc | 15 ++-- plugins/include/cellarray.inc | 9 +++ plugins/include/cellstack.inc | 8 ++ plugins/include/celltrie.inc | 9 +++ plugins/include/csstats.inc | 8 ++ plugins/include/cstrike.inc | 20 +++-- plugins/include/csx.inc | 17 ++-- plugins/include/datapack.inc | 8 ++ plugins/include/dbi.inc | 39 ++++++--- plugins/include/dodconst.inc | 13 +-- plugins/include/dodfun.inc | 17 ++-- plugins/include/dodstats.inc | 17 ++-- plugins/include/dodx.inc | 17 ++-- plugins/include/engine.inc | 20 +++-- plugins/include/engine_const.inc | 18 +++-- plugins/include/engine_stocks.inc | 20 +++-- plugins/include/esf_const.inc | 15 ++-- plugins/include/fakemeta.inc | 18 +++-- plugins/include/fakemeta_const.inc | 18 +++-- plugins/include/fakemeta_stocks.inc | 18 +++-- plugins/include/file.inc | 19 +++-- plugins/include/fun.inc | 18 +++-- plugins/include/geoip.inc | 16 +++- plugins/include/ham_const.inc | 13 +++ plugins/include/hamsandwich.inc | 40 +++------ plugins/include/hlsdk_const.inc | 19 +++-- plugins/include/lang.inc | 18 +++-- plugins/include/message_const.inc | 19 +++-- plugins/include/message_stocks.inc | 19 +++-- plugins/include/messages.inc | 18 +++-- plugins/include/newmenus.inc | 15 ++-- plugins/include/ns.inc | 18 +++-- plugins/include/ns_const.inc | 18 +++-- plugins/include/nvault.inc | 18 +++-- plugins/include/regex.inc | 42 +++------- plugins/include/sockets.inc | 24 +++--- plugins/include/sorting.inc | 28 ++++--- plugins/include/sqlx.inc | 15 +++- plugins/include/string.inc | 19 +++-- plugins/include/tfcconst.inc | 17 ++-- plugins/include/tfcstats.inc | 17 ++-- plugins/include/tfcx.inc | 17 ++-- plugins/include/time.inc | 18 +++-- plugins/include/tsconst.inc | 18 +++-- plugins/include/tsfun.inc | 17 ++-- plugins/include/tsstats.inc | 17 ++-- plugins/include/tsx.inc | 17 ++-- plugins/include/vault.inc | 19 +++-- plugins/include/vector.inc | 18 +++-- plugins/include/xs.inc | 116 +++++++++++---------------- plugins/mapchooser.sma | 45 +++-------- plugins/mapsmenu.sma | 45 +++-------- plugins/menufront.sma | 45 +++-------- plugins/multilingual.sma | 44 +++------- plugins/nextmap.sma | 45 +++-------- plugins/ns/idlekicker.sma | 44 +++------- plugins/ns/mapchooser.sma | 45 +++-------- plugins/ns/nextmap.sma | 45 +++-------- plugins/ns/nscommands.sma | 44 +++------- plugins/ns/plmenu.sma | 45 +++-------- plugins/ns/timeleft.sma | 47 +++-------- plugins/ns/unstuck.sma | 46 +++-------- plugins/pausecfg.sma | 45 +++-------- plugins/plmenu.sma | 45 +++-------- plugins/pluginmenu.sma | 46 +++-------- plugins/scrollmsg.sma | 45 +++-------- plugins/statscfg.sma | 45 +++-------- plugins/telemenu.sma | 45 +++-------- plugins/testsuite/admins_test.sma | 11 ++- plugins/testsuite/arraytest.sma | 9 +++ plugins/testsuite/callfunc_test.sma | 9 +++ plugins/testsuite/datapack_test.sma | 9 +++ plugins/testsuite/fakemeta_tests.sma | 9 +++ plugins/testsuite/fmttest.sma | 9 +++ plugins/testsuite/fwdtest1.sma | 9 +++ plugins/testsuite/fwdtest2.sma | 9 +++ plugins/testsuite/logtest.sma | 9 +++ plugins/testsuite/menutest.sma | 9 +++ plugins/testsuite/native_test.sma | 9 +++ plugins/testsuite/nvault_test.sma | 9 +++ plugins/testsuite/regex_test.sma | 11 ++- plugins/testsuite/sorttest.sma | 9 +++ plugins/testsuite/sqlxtest.sma | 9 +++ plugins/testsuite/stacktest.sma | 9 +++ plugins/testsuite/strbreak.sma | 10 ++- plugins/testsuite/trietest.sma | 9 +++ plugins/testsuite/utf8test.sma | 11 ++- plugins/tfc/plmenu.sma | 45 +++-------- plugins/tfc/stats.sma | 42 ++++++---- plugins/tfc/stats_logging.sma | 45 +++-------- plugins/tfc/statssounds.sma | 17 +++- plugins/tfc/tfcstats.sma | 23 ++++-- plugins/timeleft.sma | 45 +++-------- plugins/ts/stats.sma | 42 ++++++---- plugins/ts/stats_logging.sma | 20 +++-- plugins/ts/statssounds.sma | 17 +++- plugins/ts/tsstats.sma | 25 ++++-- 119 files changed, 1455 insertions(+), 1689 deletions(-) diff --git a/plugins/admin.sma b/plugins/admin.sma index 7bfb2362..cb17beda 100755 --- a/plugins/admin.sma +++ b/plugins/admin.sma @@ -1,36 +1,15 @@ -/* AMX Mod X script. -* Admin Base Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Admin Base Plugin +// // Uncomment for SQL version // #define USING_SQL diff --git a/plugins/adminchat.sma b/plugins/adminchat.sma index 14198996..dfdc9eef 100755 --- a/plugins/adminchat.sma +++ b/plugins/adminchat.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Admin Chat Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Admin Chat Plugin +// #include #include diff --git a/plugins/admincmd.sma b/plugins/admincmd.sma index b233b0d3..3b2a958e 100755 --- a/plugins/admincmd.sma +++ b/plugins/admincmd.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Admin Commands Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Admin Commands Plugin +// #include #include diff --git a/plugins/adminhelp.sma b/plugins/adminhelp.sma index 0223c144..6d1caf91 100755 --- a/plugins/adminhelp.sma +++ b/plugins/adminhelp.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Admin Help Plugin -* -* by the AMX Mod X Development Team -* originally developed by tcquest78 -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Admin Help Plugin +// #include diff --git a/plugins/adminslots.sma b/plugins/adminslots.sma index 83ce5f27..90eef653 100755 --- a/plugins/adminslots.sma +++ b/plugins/adminslots.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Slots Reservation Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Slots Reservation Plugin +// #include #include diff --git a/plugins/adminvote.sma b/plugins/adminvote.sma index 11633b5b..02917399 100755 --- a/plugins/adminvote.sma +++ b/plugins/adminvote.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Admin Votes Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Admin Votes Plugin +// #include #include diff --git a/plugins/antiflood.sma b/plugins/antiflood.sma index 6d454fc0..2065d3f4 100755 --- a/plugins/antiflood.sma +++ b/plugins/antiflood.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Anti Flood Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Anti Flood Plugin +// #include diff --git a/plugins/cmdmenu.sma b/plugins/cmdmenu.sma index ee77295e..8ec0570d 100755 --- a/plugins/cmdmenu.sma +++ b/plugins/cmdmenu.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Commands Menu Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Commands Menu Plugin +// #include #include diff --git a/plugins/cstrike/csstats.sma b/plugins/cstrike/csstats.sma index d4974488..5c5cf4f2 100755 --- a/plugins/cstrike/csstats.sma +++ b/plugins/cstrike/csstats.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Rank Calculation -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Rank Calculation +// /* File location: $moddir/addons/amxmodx/data/csstats.amxx */ diff --git a/plugins/cstrike/miscstats.sma b/plugins/cstrike/miscstats.sma index 2621d790..7f7f39da 100755 --- a/plugins/cstrike/miscstats.sma +++ b/plugins/cstrike/miscstats.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Misc. Stats Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Misc. Stats Plugin +// #include #include diff --git a/plugins/cstrike/restmenu.sma b/plugins/cstrike/restmenu.sma index e1197f13..17980c87 100755 --- a/plugins/cstrike/restmenu.sma +++ b/plugins/cstrike/restmenu.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Restrict Weapons Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Restrict Weapons Plugin +// // Uncomment if you want to have seperate settings for each map //#define MAPSETTINGS diff --git a/plugins/cstrike/stats_logging.sma b/plugins/cstrike/stats_logging.sma index 54f241d6..ddfcf8f2 100755 --- a/plugins/cstrike/stats_logging.sma +++ b/plugins/cstrike/stats_logging.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Stats Logging Plugin -* -* by the AMX Mod X Development Team -* originally developed by JustinHoMi -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Stats Logging Plugin +// #include #include diff --git a/plugins/cstrike/statsx.sma b/plugins/cstrike/statsx.sma index 30c0a209..f83ab78f 100755 --- a/plugins/cstrike/statsx.sma +++ b/plugins/cstrike/statsx.sma @@ -1,36 +1,15 @@ - /* AMX Mod X -* StatsX Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// StatsX Plugin +// //-------------------------------- #include diff --git a/plugins/dod/dodstats.sma b/plugins/dod/dodstats.sma index a6997a58..ebc94f21 100755 --- a/plugins/dod/dodstats.sma +++ b/plugins/dod/dodstats.sma @@ -1,9 +1,18 @@ -/* Get Score for DoD STATS. - * - * (c) 2004, SidLuke - * This file is provided as is (no warranties). - * - * Function calculates position in rank. +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 SidLuke. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DoD Stats Rank Calculation +// + +/* Function calculates position in rank. * * Stats: * 0 - kills @@ -30,4 +39,4 @@ public get_score(stats[9],body[8]){ DEATHS = 1 return (KILLS-DEATHS-TK)*KILLS/DEATHS -} \ No newline at end of file +} diff --git a/plugins/dod/plmenu.sma b/plugins/dod/plmenu.sma index 31107e8e..1bd3f420 100755 --- a/plugins/dod/plmenu.sma +++ b/plugins/dod/plmenu.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Players Menu Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Players Menu Plugin +// #include #include diff --git a/plugins/dod/stats.sma b/plugins/dod/stats.sma index 117e20d6..43b77717 100755 --- a/plugins/dod/stats.sma +++ b/plugins/dod/stats.sma @@ -1,20 +1,28 @@ -/* AMX Mod script. -* -* (c) 2004, SidLuke -* This file is provided as is (no warranties). -* -* Plugin works with Stats Settings Plugin. Just run both of them. -* By amx_statscfg command (from Stats Settings Plugin) -* you will be able to set all settings and save them to a file. -* -* Example of usage for some options: -* amx_statscfg on SayTop15 -* amx_statscfg on SayRank -* -* Accept able are also parts of name: -* amx_statscfg off say -* amx_statscfg on End -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 SidLuke. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DoD Stats Plugin +// + +// Plugin works with Stats Settings Plugin. Just run both of them. +// By amx_statscfg command (from Stats Settings Plugin) +// you will be able to set all settings and save them to a file. +// +// Example usage for some options: +// amx_statscfg on SayTop15 +// amx_statscfg on SayRank +// +// Acceptable are also parts of name: +// amx_statscfg off say +// amx_statscfg on End #include #include @@ -1008,4 +1016,4 @@ getTop15_steam(id){ } pos += format(g_Buffer[pos],2047-pos,"") -} \ No newline at end of file +} diff --git a/plugins/dod/stats_logging.sma b/plugins/dod/stats_logging.sma index 589dd37a..c99fd489 100755 --- a/plugins/dod/stats_logging.sma +++ b/plugins/dod/stats_logging.sma @@ -1,9 +1,16 @@ -/* AMX Mod script. (Feb 4th, 2003) - * - * Stats Logging - * by JustinHoMi - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2003 JustinHoMi. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DoD Stats Logging Plugin +// #include #include diff --git a/plugins/dod/statssounds.sma b/plugins/dod/statssounds.sma index 68127b3f..f9eb5adc 100755 --- a/plugins/dod/statssounds.sma +++ b/plugins/dod/statssounds.sma @@ -1,6 +1,15 @@ -/* -* Plugin for sounds precache -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DoD Sounds Precache Plugin +// #include @@ -26,4 +35,4 @@ public plugin_precache(){ public plugin_init() { register_plugin("DoD Sounds Precache",AMXX_VERSION_STR,"AMXX Dev Team") -} \ No newline at end of file +} diff --git a/plugins/imessage.sma b/plugins/imessage.sma index 0ef2334e..9a0a37ff 100755 --- a/plugins/imessage.sma +++ b/plugins/imessage.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Info. Messages Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Info. Messages Plugin +// #include #include diff --git a/plugins/include/amxconst.inc b/plugins/include/amxconst.inc index 9528a8ff..e6c3fd59 100755 --- a/plugins/include/amxconst.inc +++ b/plugins/include/amxconst.inc @@ -1,10 +1,11 @@ -/* AMX Mod X constants -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #if defined _amxconst_included #endinput diff --git a/plugins/include/amxmisc.inc b/plugins/include/amxmisc.inc index e57c9188..ccd7a511 100755 --- a/plugins/include/amxmisc.inc +++ b/plugins/include/amxmisc.inc @@ -1,10 +1,11 @@ -/* AMX Mod X misc. -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #if defined _amxmisc_included #endinput diff --git a/plugins/include/amxmodx.inc b/plugins/include/amxmodx.inc index 6c11fddd..36503ce0 100755 --- a/plugins/include/amxmodx.inc +++ b/plugins/include/amxmodx.inc @@ -1,10 +1,11 @@ -/* AMX Mod X functions -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #if defined _amxmodx_included #endinput diff --git a/plugins/include/amxmodx_version.inc b/plugins/include/amxmodx_version.inc index 0873513c..faba7062 100644 --- a/plugins/include/amxmodx_version.inc +++ b/plugins/include/amxmodx_version.inc @@ -1,10 +1,11 @@ -/* AMX Mod X constants -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #if defined _amxmodx_version_included #endinput diff --git a/plugins/include/cellarray.inc b/plugins/include/cellarray.inc index 53466aab..a8fbafb4 100644 --- a/plugins/include/cellarray.inc +++ b/plugins/include/cellarray.inc @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #if defined _cellarray_included #endinput #endif diff --git a/plugins/include/cellstack.inc b/plugins/include/cellstack.inc index ad5c083a..81043d76 100644 --- a/plugins/include/cellstack.inc +++ b/plugins/include/cellstack.inc @@ -1,3 +1,11 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #if defined _cellstack_included #endinput diff --git a/plugins/include/celltrie.inc b/plugins/include/celltrie.inc index 355fb913..9a05a4b2 100644 --- a/plugins/include/celltrie.inc +++ b/plugins/include/celltrie.inc @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #if defined _celltrie_included #endinput #endif diff --git a/plugins/include/csstats.inc b/plugins/include/csstats.inc index 7755dcf2..eb8dd300 100755 --- a/plugins/include/csstats.inc +++ b/plugins/include/csstats.inc @@ -1,3 +1,11 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #if defined _csstats_included #endinput diff --git a/plugins/include/cstrike.inc b/plugins/include/cstrike.inc index 294eb31e..6c404eda 100755 --- a/plugins/include/cstrike.inc +++ b/plugins/include/cstrike.inc @@ -1,9 +1,15 @@ -/* Counter-Strike functions -* -* by the AMX Mod X Development Team -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Counter-Strike Functions +// #if defined _cstrike_included #endinput @@ -415,4 +421,4 @@ forward CS_OnBuyAttempt(index, item); * @param index Player index. * @param item Item index, see CSI_* constants. */ -forward CS_OnBuy(index, item); \ No newline at end of file +forward CS_OnBuy(index, item); diff --git a/plugins/include/csx.inc b/plugins/include/csx.inc index 365a39f4..3616d178 100755 --- a/plugins/include/csx.inc +++ b/plugins/include/csx.inc @@ -1,8 +1,15 @@ -/* CSX functions - * - * (c) 2004, SidLuke - * This file is provided as is (no warranties). - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// CSX Functions +// #if defined _csx_included #endinput diff --git a/plugins/include/datapack.inc b/plugins/include/datapack.inc index 3dd75547..80d12648 100644 --- a/plugins/include/datapack.inc +++ b/plugins/include/datapack.inc @@ -1,3 +1,11 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #if defined _datapack_included #endinput diff --git a/plugins/include/dbi.inc b/plugins/include/dbi.inc index 82c24d84..ba371483 100755 --- a/plugins/include/dbi.inc +++ b/plugins/include/dbi.inc @@ -1,16 +1,29 @@ -/* SQL Database API - * By the AMX Mod X Development Team - * Notes - Read the comments! Make sure your plugins use - * nice ANSI SQL and don't use database column names like "key" - * otherwise this API will be a nightmare - * Never do error checking with the not operator! This is bad: - * if (!dbi_query()) - * You should do: - * ret = dbi_query() - * if (ret < 0) - * This is because DBI functions can and will return negative numbers - * Negative numbers evaluate to "true" in AMX. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQL Database API +// + +// +// Notes - Read the comments! Make sure your plugins use +// nice ANSI SQL and don't use database column names like "key" +// otherwise this API will be a nightmare +// +// Never do error checking with the not operator! This is bad: +// if (!dbi_query()) +// You should do: +// ret = dbi_query() +// if (ret < 0) +// This is because DBI functions can and will return negative numbers +// Negative numbers evaluate to "true" in AMX. +// #if defined _dbi_included #endinput diff --git a/plugins/include/dodconst.inc b/plugins/include/dodconst.inc index 40711096..ca53e802 100755 --- a/plugins/include/dodconst.inc +++ b/plugins/include/dodconst.inc @@ -1,8 +1,11 @@ -/* DoDX functions - * - * (c) 2004, SidLuke - * This file is provided as is (no warranties). - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #if defined _dodconst_included #endinput diff --git a/plugins/include/dodfun.inc b/plugins/include/dodfun.inc index ea8f63da..5add00ed 100755 --- a/plugins/include/dodfun.inc +++ b/plugins/include/dodfun.inc @@ -1,8 +1,15 @@ -/* DoDFun functions - * - * (c) 2004-2005, SidLuke - * This file is provided as is (no warranties). - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DoD Fun Functions +// #if defined _dodfun_included #endinput diff --git a/plugins/include/dodstats.inc b/plugins/include/dodstats.inc index cf3d072b..a250a2ba 100755 --- a/plugins/include/dodstats.inc +++ b/plugins/include/dodstats.inc @@ -1,8 +1,15 @@ -/* DoDX Stats functions - * - * (c) 2004, SidLuke - * This file is provided as is (no warranties). - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DODX Stats Functions +// #if defined _dodstats_included #endinput diff --git a/plugins/include/dodx.inc b/plugins/include/dodx.inc index 99710b31..09396899 100755 --- a/plugins/include/dodx.inc +++ b/plugins/include/dodx.inc @@ -1,8 +1,15 @@ -/* DoDX functions - * - * (c) 2004, SidLuke - * This file is provided as is (no warranties). - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// DODX Functions +// #if defined _dodx_included #endinput diff --git a/plugins/include/engine.inc b/plugins/include/engine.inc index ae20be03..56551716 100755 --- a/plugins/include/engine.inc +++ b/plugins/include/engine.inc @@ -1,10 +1,16 @@ -/* Engine functions -* -* by the AMX Mod X Development Team -* thanks to Vexd and mahnsawce -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Special thanks to Vexd and mahnsawce. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Engine Functions +// #if defined _engine_included #endinput diff --git a/plugins/include/engine_const.inc b/plugins/include/engine_const.inc index c4414a64..9a88dec6 100755 --- a/plugins/include/engine_const.inc +++ b/plugins/include/engine_const.inc @@ -1,9 +1,15 @@ -/* Engine constants -* -* by the AMX Mod X Development Team -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Engine Constants +// #if defined _engine_const_included #endinput diff --git a/plugins/include/engine_stocks.inc b/plugins/include/engine_stocks.inc index 6d80700c..638905e8 100755 --- a/plugins/include/engine_stocks.inc +++ b/plugins/include/engine_stocks.inc @@ -1,10 +1,16 @@ -/* Engine stocks -* -* by the AMX Mod X Development Team -* thanks to AssKicR, Freecode and T(+)rget -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Special thanks to AssKicR, Freecode, and T(+)rget. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Engine Stocks +// #if defined _engine_stocks_included #endinput diff --git a/plugins/include/esf_const.inc b/plugins/include/esf_const.inc index 91b8191d..0b2615b7 100755 --- a/plugins/include/esf_const.inc +++ b/plugins/include/esf_const.inc @@ -1,9 +1,12 @@ -/** - * (C)2004-2005 AMX Mod X Development Team - * based on the stocks and information provided by LynX - * organized and released by BAILOPAN - * This file is provided as is (no warranties). - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Based on stocks and information provided by LynX. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #if defined _esfconst_included #endinput diff --git a/plugins/include/fakemeta.inc b/plugins/include/fakemeta.inc index d2460b46..b401616c 100755 --- a/plugins/include/fakemeta.inc +++ b/plugins/include/fakemeta.inc @@ -1,9 +1,15 @@ -/* FakeMeta functions -* -* by the AMX Mod X Development Team -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Functions +// #if defined _fakemeta_included #endinput diff --git a/plugins/include/fakemeta_const.inc b/plugins/include/fakemeta_const.inc index 851bcb80..1fc69162 100755 --- a/plugins/include/fakemeta_const.inc +++ b/plugins/include/fakemeta_const.inc @@ -1,9 +1,15 @@ -/* FakeMeta constants -* -* by the AMX Mod X Development Team -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Constants +// #if defined _fakemeta_const_included #endinput diff --git a/plugins/include/fakemeta_stocks.inc b/plugins/include/fakemeta_stocks.inc index 7a7a6bb0..72ee36d5 100755 --- a/plugins/include/fakemeta_stocks.inc +++ b/plugins/include/fakemeta_stocks.inc @@ -1,9 +1,15 @@ -/* FakeMeta stocks -* -* by the AMX Mod X Development Team -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fakemeta Stocks +// #if !defined _fakemeta_included #include diff --git a/plugins/include/file.inc b/plugins/include/file.inc index b983e7bb..cd509a68 100755 --- a/plugins/include/file.inc +++ b/plugins/include/file.inc @@ -1,10 +1,15 @@ -/* Files functions -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// File Functions +// #if defined _file_included #endinput diff --git a/plugins/include/fun.inc b/plugins/include/fun.inc index 3dd9f750..16d3a457 100755 --- a/plugins/include/fun.inc +++ b/plugins/include/fun.inc @@ -1,9 +1,15 @@ -/* Fun functions -* -* by the AMX Mod X Development Team -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Fun Functions +// #if defined _fun_included #endinput diff --git a/plugins/include/geoip.inc b/plugins/include/geoip.inc index 8a253949..df6343eb 100755 --- a/plugins/include/geoip.inc +++ b/plugins/include/geoip.inc @@ -1,7 +1,15 @@ -/* GeoIP module functions for AMX Mod X - by David "BAILOPAN" Anderson - (C)Copyrighted under the GNU General Public License, Version 2 - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// GeoIP Module Functions +// #if defined geoip_included #endinput diff --git a/plugins/include/ham_const.inc b/plugins/include/ham_const.inc index ac7f5167..f99699b3 100644 --- a/plugins/include/ham_const.inc +++ b/plugins/include/ham_const.inc @@ -1,3 +1,16 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Constants +// + #if defined _ham_const_included #endinput #endif diff --git a/plugins/include/hamsandwich.inc b/plugins/include/hamsandwich.inc index 97ff1567..9718cc36 100644 --- a/plugins/include/hamsandwich.inc +++ b/plugins/include/hamsandwich.inc @@ -1,31 +1,15 @@ -/* Ham Sandwich - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Ham Sandwich 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. - * - * Ham Sandwich 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 Ham Sandwich; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Ham Sandwich Functions +// /** * Ham Sandwich is a module that is used to hook and call virtual functions of diff --git a/plugins/include/hlsdk_const.inc b/plugins/include/hlsdk_const.inc index 0d96958f..1c1b0a76 100644 --- a/plugins/include/hlsdk_const.inc +++ b/plugins/include/hlsdk_const.inc @@ -1,10 +1,15 @@ -/* Half-Life Software Development Kit constants -* -* by the AMX Mod X Development Team -* -* This file is provided as is (no warranties). -* -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Half-Life SDK Constants +// #if defined _hlsdk_const_included #endinput diff --git a/plugins/include/lang.inc b/plugins/include/lang.inc index ba086352..e037ae3b 100755 --- a/plugins/include/lang.inc +++ b/plugins/include/lang.inc @@ -1,9 +1,15 @@ -/* Language functions -* -* by the AMX Mod X Development Team -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Language Functions +// #if defined _lang_included #endinput diff --git a/plugins/include/message_const.inc b/plugins/include/message_const.inc index 3624bd4a..199f996a 100644 --- a/plugins/include/message_const.inc +++ b/plugins/include/message_const.inc @@ -1,10 +1,15 @@ -/* Message constants -* -* by the AMX Mod X Development Team -* -* This file is provided as is (no warranties). -* -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Message Constants +// #if defined _message_const_included #endinput diff --git a/plugins/include/message_stocks.inc b/plugins/include/message_stocks.inc index 6c39e33f..1817ed98 100644 --- a/plugins/include/message_stocks.inc +++ b/plugins/include/message_stocks.inc @@ -1,10 +1,15 @@ -/* Message Stocks -* -* by the AMX Mod X Development Team -* -* This file is provided as is (no warranties). -* -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Message Stocks +// #if defined _message_stocks_included #endinput diff --git a/plugins/include/messages.inc b/plugins/include/messages.inc index df49b8f2..97ed18d0 100644 --- a/plugins/include/messages.inc +++ b/plugins/include/messages.inc @@ -1,9 +1,15 @@ -/* Messaging functions (now part of Core) - * - * by the AMX Mod X Development Team - * - * This file is provided as is (no warranties). - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Message Functions +// #if defined _coremsg_included #endinput diff --git a/plugins/include/newmenus.inc b/plugins/include/newmenus.inc index b9345b41..9ebf7652 100644 --- a/plugins/include/newmenus.inc +++ b/plugins/include/newmenus.inc @@ -1,10 +1,11 @@ -/* AMX Mod X constants -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license #if defined _newmenus_included #endinput diff --git a/plugins/include/ns.inc b/plugins/include/ns.inc index fbcfa025..7ed0e13a 100755 --- a/plugins/include/ns.inc +++ b/plugins/include/ns.inc @@ -1,9 +1,15 @@ -/* NS module functions - * - * by the AMX Mod X Development Team - * - * This file is provided as is (no warranties). - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Module Functions +// #if defined NS_INC #endinput diff --git a/plugins/include/ns_const.inc b/plugins/include/ns_const.inc index d0182501..b1eb9458 100755 --- a/plugins/include/ns_const.inc +++ b/plugins/include/ns_const.inc @@ -1,11 +1,15 @@ -/* NS module constants - * - * by the AMX Mod X Development Team - * Most definitions graciously provided by Flayra - * - * This file is provided as is (no warranties). - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license +// +// Natural Selection Module Constants +// #if defined NS_CONST_INC #endinput diff --git a/plugins/include/nvault.inc b/plugins/include/nvault.inc index 33736f7e..60db914a 100755 --- a/plugins/include/nvault.inc +++ b/plugins/include/nvault.inc @@ -1,9 +1,15 @@ -/* nVault functions -* -* by the AMX Mod X Development Team -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// NVault Functions +// #if defined _nvault_included #endinput diff --git a/plugins/include/regex.inc b/plugins/include/regex.inc index 76ad5bb8..596e9111 100755 --- a/plugins/include/regex.inc +++ b/plugins/include/regex.inc @@ -1,31 +1,15 @@ -/** - * Regular Expressions API - * By the AMX Mod X Development Team - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of this program with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Regular Expressions API +// #if defined _regex_included #endinput @@ -369,4 +353,4 @@ stock regex_match_simple(const str[], const pattern[], flags = 0, error[]= "", m * 0 = No match. * >1 = Number of matches. */ -native regex_replace(Regex:pattern, string[], maxLen, const replace[], flags = REGEX_FORMAT_DEFAULT, &errcode = 0); \ No newline at end of file +native regex_replace(Regex:pattern, string[], maxLen, const replace[], flags = REGEX_FORMAT_DEFAULT, &errcode = 0); diff --git a/plugins/include/sockets.inc b/plugins/include/sockets.inc index 7eda92b0..562d9fae 100755 --- a/plugins/include/sockets.inc +++ b/plugins/include/sockets.inc @@ -1,12 +1,18 @@ -/* - * - * AMX Mod X Module - * Basic Socket Functions - * - * Codebase from Ivan, -g-s-ivan@web.de (AMX 0.9.3) - * Modification by Olaf Reusch, kenterfie@hlsw.de (AMXX 0.16, AMX 0.96) - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// Codebase from Ivan, -g-s-ivan@web.de (AMX 0.9.3) +// Modification by Olaf Reusch, kenterfie@hlsw.de (AMXX 0.16, AMX 0.96) +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Socket Functions +// #if defined _socket_included #endinput diff --git a/plugins/include/sorting.inc b/plugins/include/sorting.inc index e111a7b2..b2b86d41 100644 --- a/plugins/include/sorting.inc +++ b/plugins/include/sorting.inc @@ -1,13 +1,21 @@ -/* Sorting functions. - * - * by the AMX Mod X Development Team - * - * This file is provided as is (no warranties). - * - * All sort functions are based off the qsort() function from the - * C standard library, which uses the Quick Sort algorithm. - * For more info, see: http://linux.wku.edu/~lamonml/algor/sort/sort.html - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Sorting Functions +// + +// +// All sort functions are based off the qsort() function from the +// C standard library, which uses the Quick Sort algorithm. +// For more info, see: http://linux.wku.edu/~lamonml/algor/sort/sort.html +// #if defined _sorting_included #endinput diff --git a/plugins/include/sqlx.inc b/plugins/include/sqlx.inc index a95827e2..5641f9f4 100644 --- a/plugins/include/sqlx.inc +++ b/plugins/include/sqlx.inc @@ -1,6 +1,15 @@ -/** - * SQLX - Newer version of SQL stuff - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SQLX - Newer SQL Database API +// #if defined _sqlx_included #endinput diff --git a/plugins/include/string.inc b/plugins/include/string.inc index 96adf466..adb39dfe 100755 --- a/plugins/include/string.inc +++ b/plugins/include/string.inc @@ -1,10 +1,15 @@ -/* Strings manipulation -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// String Manipulation +// #if defined _string_included #endinput diff --git a/plugins/include/tfcconst.inc b/plugins/include/tfcconst.inc index c9ca3f31..7c41a056 100755 --- a/plugins/include/tfcconst.inc +++ b/plugins/include/tfcconst.inc @@ -1,8 +1,15 @@ -/* TFCX const - * - * (c) 2004, SidLuke - * This file is provided as is (no warranties). - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TFCX Constants +// #if defined _tfcconst_included #endinput diff --git a/plugins/include/tfcstats.inc b/plugins/include/tfcstats.inc index eb118689..9417a0f6 100755 --- a/plugins/include/tfcstats.inc +++ b/plugins/include/tfcstats.inc @@ -1,8 +1,15 @@ -/* TFCX Stats functions - * - * (c) 2004, SidLuke - * This file is provided as is (no warranties). - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TFCX Stats Functions +// #if defined _tfcstats_included #endinput diff --git a/plugins/include/tfcx.inc b/plugins/include/tfcx.inc index 73bff77c..0ca17895 100755 --- a/plugins/include/tfcx.inc +++ b/plugins/include/tfcx.inc @@ -1,8 +1,15 @@ -/* tfcX functions - * - * (c) 2004, SidLuke - * This file is provided as is (no warranties). - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TFCX Functions +// #if defined _tfcx_included #endinput diff --git a/plugins/include/time.inc b/plugins/include/time.inc index b76a275d..a70cf9d8 100644 --- a/plugins/include/time.inc +++ b/plugins/include/time.inc @@ -1,9 +1,15 @@ -/* Time specific functions -* -* by the AMX Mod X Development Team -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Time Specific Functions +// #if defined _time_included #endinput diff --git a/plugins/include/tsconst.inc b/plugins/include/tsconst.inc index a49ec5f1..b41a2c55 100755 --- a/plugins/include/tsconst.inc +++ b/plugins/include/tsconst.inc @@ -1,8 +1,16 @@ -/* TSFUN constants - * - * (c) 2005, Suzuka - * This file is provided as is (no warranties). - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2005 Suzuka. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TSFUN Constants +// #if defined _tsconst_included #endinput diff --git a/plugins/include/tsfun.inc b/plugins/include/tsfun.inc index 623df22a..d0192412 100755 --- a/plugins/include/tsfun.inc +++ b/plugins/include/tsfun.inc @@ -1,8 +1,15 @@ -/* TSFUN - * - * (c) 2005-2006, AMX Mod X Dev Team - * This file is provided as is (no warranties). - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TSFUN Functions +// #if defined _tsxfun_included #endinput diff --git a/plugins/include/tsstats.inc b/plugins/include/tsstats.inc index 7ec543f9..4b43a784 100755 --- a/plugins/include/tsstats.inc +++ b/plugins/include/tsstats.inc @@ -1,8 +1,15 @@ -/* TSXMod Stats functions - * - * (c) 2004, SidLuke - * This file is provided as is (no warranties). - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TSX Stats Functions +// #if defined _tsstats_included #endinput diff --git a/plugins/include/tsx.inc b/plugins/include/tsx.inc index 222b227a..4e1b3c12 100755 --- a/plugins/include/tsx.inc +++ b/plugins/include/tsx.inc @@ -1,8 +1,15 @@ -/* TSXMod functions - * - * (c) 2004, SidLuke - * This file is provided as is (no warranties). - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TSX Functions +// #if defined _tsx_included #endinput diff --git a/plugins/include/vault.inc b/plugins/include/vault.inc index 43a915cd..b38ac4c6 100755 --- a/plugins/include/vault.inc +++ b/plugins/include/vault.inc @@ -1,10 +1,15 @@ -/* Vault functions -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is provided as is (no warranties). -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Vault Functions +// #if defined _vault_included #endinput diff --git a/plugins/include/vector.inc b/plugins/include/vector.inc index 39ba89b8..e30b52dd 100644 --- a/plugins/include/vector.inc +++ b/plugins/include/vector.inc @@ -1,9 +1,15 @@ -/* Vector functions (now part of Core) - * - * by the AMX Mod X Development Team - * - * This file is provided as is (no warranties). - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Vector Functions +// #if defined _corevector_included #endinput diff --git a/plugins/include/xs.inc b/plugins/include/xs.inc index 12594c5e..a515e80d 100755 --- a/plugins/include/xs.inc +++ b/plugins/include/xs.inc @@ -1,70 +1,52 @@ -/* XS Library -* for AMX and AMXX -* -* Copyright (C) 2004 Pavol "PM" Marko -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -* -* Version 0.1 -* -* -* MACROS THAT YOU CAN DEFINE BEFORE INCLUDING XS.INC: -* XS_FLEQ_TOLERANCE: -* Tolerance that is used for XS_FLEQ float nearly-equal comparisions -* DEFAULT: 0.000005 -* XS_DEBUG -* Turn debug logging on -* DEFAULT: 0 -* XS_LOGBUFFER_SIZE -* Buffer size for logging -* DEFAULT: 512 -* XS_TASK_MAXPARAMS -* Maximal parameter count for managed tasks -* DEFAULT: 8 -* XS_TASK_MAXPARAMSIZE -* Maximal size of string parameter for tasks -* Has to be power of 2 and has to be >= 8 -* DEFAULT: 512 -* XS_TASK_MANAGEDIDS -* Number of managed IDs for tasks. -* DEFAULT: 2048 -* XS_REPLACEBUF_SIZE -* DEFAULT: 3072 -* -* -* NOTES: -* On AMX, VexdUM is required for some math functions -* -* xs__ / XS__ (2 underscores) stuff is meant to be intern -* -* untested: never tested -* half-tested: succesfully used in other applications; not extensively tested in xs though -* tested: fully tested -* -* If you have any useful functions / ideas for functions, please tell me. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 Pavol "PM" Marko +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// XS Library +// Version 0.1 +// +// MACROS THAT YOU CAN DEFINE BEFORE INCLUDING XS.INC: +// XS_FLEQ_TOLERANCE: +// Tolerance that is used for XS_FLEQ float nearly-equal comparisions +// DEFAULT: 0.000005 +// XS_DEBUG +// Turn debug logging on +// DEFAULT: 0 +// XS_LOGBUFFER_SIZE +// Buffer size for logging +// DEFAULT: 512 +// XS_TASK_MAXPARAMS +// Maximal parameter count for managed tasks +// DEFAULT: 8 +// XS_TASK_MAXPARAMSIZE +// Maximal size of string parameter for tasks +// Has to be power of 2 and has to be >= 8 +// DEFAULT: 512 +// XS_TASK_MANAGEDIDS +// Number of managed IDs for tasks. +// DEFAULT: 2048 +// XS_REPLACEBUF_SIZE +// DEFAULT: 3072 +// +// +// NOTES: +// On AMX, VexdUM is required for some math functions +// +// xs__ / XS__ (2 underscores) stuff is meant to be intern +// +// untested: never tested +// half-tested: succesfully used in other applications; not extensively tested in xs though +// tested: fully tested +// +// If you have any useful functions / ideas for functions, please tell me. +// #if defined _xs_included #endinput diff --git a/plugins/mapchooser.sma b/plugins/mapchooser.sma index 4d3116d2..9706f30a 100755 --- a/plugins/mapchooser.sma +++ b/plugins/mapchooser.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Nextmap Chooser Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Nextmap Chooser Plugin +// #include #include diff --git a/plugins/mapsmenu.sma b/plugins/mapsmenu.sma index b07ad7bc..e7fc3bdf 100755 --- a/plugins/mapsmenu.sma +++ b/plugins/mapsmenu.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Maps Menu Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Maps Menu Plugin +// #include #include diff --git a/plugins/menufront.sma b/plugins/menufront.sma index 1a4eb3bc..4ef6fdab 100755 --- a/plugins/menufront.sma +++ b/plugins/menufront.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Menus Front-End Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Menus Front-End Plugin +// #include #include diff --git a/plugins/multilingual.sma b/plugins/multilingual.sma index fe283334..6bfb764d 100755 --- a/plugins/multilingual.sma +++ b/plugins/multilingual.sma @@ -1,35 +1,15 @@ -/* AMX Mod X script. -* Multilingual System Plugin -* -* by the AMX Mod X Development Team -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Multilingual System Plugin +// #include #include diff --git a/plugins/nextmap.sma b/plugins/nextmap.sma index 4af491fa..386884a5 100755 --- a/plugins/nextmap.sma +++ b/plugins/nextmap.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* NextMap Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// NextMap Plugin +// #include diff --git a/plugins/ns/idlekicker.sma b/plugins/ns/idlekicker.sma index f7f6a72f..ba67efb4 100755 --- a/plugins/ns/idlekicker.sma +++ b/plugins/ns/idlekicker.sma @@ -1,35 +1,15 @@ -/* AMX Mod X -* Idle Player Remover -* -* by the AMX Mod X Development Team -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Idle Player Remover Plugin +// #include #include diff --git a/plugins/ns/mapchooser.sma b/plugins/ns/mapchooser.sma index f1ea9d22..ae0e4767 100755 --- a/plugins/ns/mapchooser.sma +++ b/plugins/ns/mapchooser.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Nextmap Chooser Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Nextmap Chooser Plugin +// #include #include diff --git a/plugins/ns/nextmap.sma b/plugins/ns/nextmap.sma index 3b2e80ed..4bbb810b 100755 --- a/plugins/ns/nextmap.sma +++ b/plugins/ns/nextmap.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Natural-Selection NextMap Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection NextMap Plugin +// enum mapdata { NAME[32], diff --git a/plugins/ns/nscommands.sma b/plugins/ns/nscommands.sma index e79a9ae3..26367967 100755 --- a/plugins/ns/nscommands.sma +++ b/plugins/ns/nscommands.sma @@ -1,35 +1,15 @@ -/* AMX Mod X -* Natural-Selection Admin Commands Plugin -* -* by the AMX Mod X Development Team -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Natural Selection Admin Commands Plugin +// #include #include diff --git a/plugins/ns/plmenu.sma b/plugins/ns/plmenu.sma index 1dab911c..6663ad80 100644 --- a/plugins/ns/plmenu.sma +++ b/plugins/ns/plmenu.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Players Menu Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Players Menu Plugin +// #include #include diff --git a/plugins/ns/timeleft.sma b/plugins/ns/timeleft.sma index 0aa59e66..e5196ce4 100755 --- a/plugins/ns/timeleft.sma +++ b/plugins/ns/timeleft.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* TimeLeft Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TimeLeft Plugin +// #include @@ -248,4 +227,4 @@ public roundChange() { getCombatTimeLeft() { new combatTime = floatround( (get_cvar_float("mp_combattime") * 60) - (get_gametime() - g_roundStartTime) ) return (combatTime < 0) ? 0 : combatTime -} \ No newline at end of file +} diff --git a/plugins/ns/unstuck.sma b/plugins/ns/unstuck.sma index c97fc038..d5121885 100755 --- a/plugins/ns/unstuck.sma +++ b/plugins/ns/unstuck.sma @@ -1,35 +1,15 @@ -/* AMX Mod X -* UnStuck Plugin -* -* by the AMX Mod X Development Team -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// UnStuck Plugin +// #include #include @@ -89,4 +69,4 @@ public unStuck(id) } } return PLUGIN_CONTINUE; -} \ No newline at end of file +} diff --git a/plugins/pausecfg.sma b/plugins/pausecfg.sma index 88a25aab..43897a8b 100755 --- a/plugins/pausecfg.sma +++ b/plugins/pausecfg.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Pause Plugins Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Pause Plugins Plugin +// #include #include diff --git a/plugins/plmenu.sma b/plugins/plmenu.sma index af3ec272..1f19d240 100755 --- a/plugins/plmenu.sma +++ b/plugins/plmenu.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Players Menu Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Players Menu Plugin +// #include #include diff --git a/plugins/pluginmenu.sma b/plugins/pluginmenu.sma index 8ae46965..8913a23c 100644 --- a/plugins/pluginmenu.sma +++ b/plugins/pluginmenu.sma @@ -1,35 +1,15 @@ -/* AMX Mod X -* Plugin Cvar and Command Menu -* -* by the AMX Mod X Development Team -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Plugin Cvar and Command Menu +// #include #include @@ -958,4 +938,4 @@ public CommandMenuCommand(id, level, cid) DisplayPluginMenuDefault(id) { DisplayPluginMenu(id,"Plugin Command Menu:", "PluginMenuSelection","DisplayCmdMenu","GetNumberOfCmdsForPlid"); -} \ No newline at end of file +} diff --git a/plugins/scrollmsg.sma b/plugins/scrollmsg.sma index 0af6fe52..316c8238 100755 --- a/plugins/scrollmsg.sma +++ b/plugins/scrollmsg.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Scrolling Message Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Scrolling Message Plugin +// #include #include diff --git a/plugins/statscfg.sma b/plugins/statscfg.sma index c92d15ca..fc4a663a 100755 --- a/plugins/statscfg.sma +++ b/plugins/statscfg.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Stats Configuration Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Stats Configuration Plugin +// #include #include diff --git a/plugins/telemenu.sma b/plugins/telemenu.sma index 7207cc01..c3314e86 100755 --- a/plugins/telemenu.sma +++ b/plugins/telemenu.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Teleport Menu Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Teleport Menu Plugin +// #include #include diff --git a/plugins/testsuite/admins_test.sma b/plugins/testsuite/admins_test.sma index f3edd7aa..e7853a2f 100644 --- a/plugins/testsuite/admins_test.sma +++ b/plugins/testsuite/admins_test.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include new __testnumber; @@ -120,4 +129,4 @@ public testadmins() test(admins_num(),0); server_print("test complete, %d errors",errcount); -} \ No newline at end of file +} diff --git a/plugins/testsuite/arraytest.sma b/plugins/testsuite/arraytest.sma index 87f28708..ccf346c6 100644 --- a/plugins/testsuite/arraytest.sma +++ b/plugins/testsuite/arraytest.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include new __testnumber; diff --git a/plugins/testsuite/callfunc_test.sma b/plugins/testsuite/callfunc_test.sma index f19ecd3e..77d22002 100644 --- a/plugins/testsuite/callfunc_test.sma +++ b/plugins/testsuite/callfunc_test.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include public plugin_init() diff --git a/plugins/testsuite/datapack_test.sma b/plugins/testsuite/datapack_test.sma index 1e17bc48..bba11d63 100644 --- a/plugins/testsuite/datapack_test.sma +++ b/plugins/testsuite/datapack_test.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include new failcount; diff --git a/plugins/testsuite/fakemeta_tests.sma b/plugins/testsuite/fakemeta_tests.sma index c7843a8c..64e2759c 100644 --- a/plugins/testsuite/fakemeta_tests.sma +++ b/plugins/testsuite/fakemeta_tests.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include #include diff --git a/plugins/testsuite/fmttest.sma b/plugins/testsuite/fmttest.sma index 28d98935..4f921551 100644 --- a/plugins/testsuite/fmttest.sma +++ b/plugins/testsuite/fmttest.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include public plugin_init() diff --git a/plugins/testsuite/fwdtest1.sma b/plugins/testsuite/fwdtest1.sma index 636f8968..29f390c0 100644 --- a/plugins/testsuite/fwdtest1.sma +++ b/plugins/testsuite/fwdtest1.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include new g_forward diff --git a/plugins/testsuite/fwdtest2.sma b/plugins/testsuite/fwdtest2.sma index 5c01d843..a75fd8a2 100644 --- a/plugins/testsuite/fwdtest2.sma +++ b/plugins/testsuite/fwdtest2.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include new g_id diff --git a/plugins/testsuite/logtest.sma b/plugins/testsuite/logtest.sma index 7767cea0..8c0d3ad2 100644 --- a/plugins/testsuite/logtest.sma +++ b/plugins/testsuite/logtest.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include new g_BlockLog diff --git a/plugins/testsuite/menutest.sma b/plugins/testsuite/menutest.sma index 97c292af..c7ce1bb7 100644 --- a/plugins/testsuite/menutest.sma +++ b/plugins/testsuite/menutest.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include public plugin_init() diff --git a/plugins/testsuite/native_test.sma b/plugins/testsuite/native_test.sma index 5b014d22..dd35909c 100644 --- a/plugins/testsuite/native_test.sma +++ b/plugins/testsuite/native_test.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include native Factorial(num) diff --git a/plugins/testsuite/nvault_test.sma b/plugins/testsuite/nvault_test.sma index 0a1dda71..11d4c8ca 100644 --- a/plugins/testsuite/nvault_test.sma +++ b/plugins/testsuite/nvault_test.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include #include diff --git a/plugins/testsuite/regex_test.sma b/plugins/testsuite/regex_test.sma index 7e5e4df1..622a8674 100644 --- a/plugins/testsuite/regex_test.sma +++ b/plugins/testsuite/regex_test.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include #include @@ -448,4 +457,4 @@ public OnServerCommand() } end(); -} \ No newline at end of file +} diff --git a/plugins/testsuite/sorttest.sma b/plugins/testsuite/sorttest.sma index 8ac53a43..2441cc55 100644 --- a/plugins/testsuite/sorttest.sma +++ b/plugins/testsuite/sorttest.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include public plugin_init() diff --git a/plugins/testsuite/sqlxtest.sma b/plugins/testsuite/sqlxtest.sma index f0367a7e..40846022 100644 --- a/plugins/testsuite/sqlxtest.sma +++ b/plugins/testsuite/sqlxtest.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include #include #include diff --git a/plugins/testsuite/stacktest.sma b/plugins/testsuite/stacktest.sma index aa8be50a..c8ebb42d 100644 --- a/plugins/testsuite/stacktest.sma +++ b/plugins/testsuite/stacktest.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include new FailCount; diff --git a/plugins/testsuite/strbreak.sma b/plugins/testsuite/strbreak.sma index 98724093..1aaf3747 100644 --- a/plugins/testsuite/strbreak.sma +++ b/plugins/testsuite/strbreak.sma @@ -1,4 +1,12 @@ -// vim: set ts=4 sw=4 tw=99 sts=4 noet ft=c: +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include #include diff --git a/plugins/testsuite/trietest.sma b/plugins/testsuite/trietest.sma index 6a43abaa..06319b0d 100644 --- a/plugins/testsuite/trietest.sma +++ b/plugins/testsuite/trietest.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include new failcount = 0; diff --git a/plugins/testsuite/utf8test.sma b/plugins/testsuite/utf8test.sma index 38125936..4be47734 100644 --- a/plugins/testsuite/utf8test.sma +++ b/plugins/testsuite/utf8test.sma @@ -1,3 +1,12 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + #include /** @@ -231,4 +240,4 @@ public OnServerCommand() DestroyDataPack(d); showResult(); -} \ No newline at end of file +} diff --git a/plugins/tfc/plmenu.sma b/plugins/tfc/plmenu.sma index 488bec26..5ed9b16c 100755 --- a/plugins/tfc/plmenu.sma +++ b/plugins/tfc/plmenu.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Players Menu Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// Players Menu Plugin +// #include #include diff --git a/plugins/tfc/stats.sma b/plugins/tfc/stats.sma index 7f61e723..5daa79c4 100755 --- a/plugins/tfc/stats.sma +++ b/plugins/tfc/stats.sma @@ -1,20 +1,28 @@ -/* AMX Mod script. -* -* (c) 2004, SidLuke -* This file is provided as is (no warranties). -* -* Plugin works with Stats Settings Plugin. Just run both of them. -* By amx_statscfg command (from Stats Settings Plugin) -* you will be able to set all settings and save them to a file. -* -* Example of usage for some options: -* amx_statscfg on SayTop15 -* amx_statscfg on SayRank -* -* Accept able are also parts of name: -* amx_statscfg off say -* amx_statscfg on End -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 SidLuke. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TFC Stats Plugin +// + +// Plugin works with Stats Settings Plugin. Just run both of them. +// By amx_statscfg command (from Stats Settings Plugin) +// you will be able to set all settings and save them to a file. +// +// Example usage for some options: +// amx_statscfg on SayTop15 +// amx_statscfg on SayRank +// +// Acceptable are also parts of name: +// amx_statscfg off say +// amx_statscfg on End #include #include diff --git a/plugins/tfc/stats_logging.sma b/plugins/tfc/stats_logging.sma index 6c739068..801257fa 100755 --- a/plugins/tfc/stats_logging.sma +++ b/plugins/tfc/stats_logging.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* Stats Logging Plugin -* -* by the AMX Mod X Development Team -* originally developed by JustinHoMi -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TFC Stats Logging Plugin +// #include #include diff --git a/plugins/tfc/statssounds.sma b/plugins/tfc/statssounds.sma index c4353e73..f5827e08 100755 --- a/plugins/tfc/statssounds.sma +++ b/plugins/tfc/statssounds.sma @@ -1,6 +1,15 @@ -/* -* Plugin for sounds precache -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TFC Sounds Precache Plugin +// #include @@ -26,4 +35,4 @@ public plugin_precache(){ public plugin_init() { register_plugin("TFC Sounds Precache",AMXX_VERSION_STR,"AMXX Dev Team") -} \ No newline at end of file +} diff --git a/plugins/tfc/tfcstats.sma b/plugins/tfc/tfcstats.sma index d0425c82..5dc4d980 100755 --- a/plugins/tfc/tfcstats.sma +++ b/plugins/tfc/tfcstats.sma @@ -1,9 +1,18 @@ -/* Get Score for TFC STATS. - * - * (c) 2004, SidLuke - * This file is provided as is (no warranties). - * - * Function calculates position in rank. +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 SidLuke. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TFC Stats Rank Calculation +// + +/* Function calculates position in rank. * * Stats: * 0 - kills @@ -22,4 +31,4 @@ public get_score(stats[8],body[8]) { return stats[0] - stats[1] /* kills - deaths */ -} \ No newline at end of file +} diff --git a/plugins/timeleft.sma b/plugins/timeleft.sma index 5c67c58e..ae785b8d 100755 --- a/plugins/timeleft.sma +++ b/plugins/timeleft.sma @@ -1,36 +1,15 @@ -/* AMX Mod X -* TimeLeft Plugin -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* This file is part of AMX Mod X. -* -* -* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TimeLeft Plugin +// #include diff --git a/plugins/ts/stats.sma b/plugins/ts/stats.sma index 7e58ce89..419dabe3 100755 --- a/plugins/ts/stats.sma +++ b/plugins/ts/stats.sma @@ -1,20 +1,28 @@ -/* AMX Mod script. -* -* (c) 2004, SidLuke -* This file is provided as is (no warranties). -* -* Plugin works with Stats Settings Plugin. Just run both of them. -* By amx_statscfg command (from Stats Settings Plugin) -* you will be able to set all settings and save them to a file. -* -* Example of usage for some options: -* tsstatscfg on SayTop15 -* tsstatscfg on SayRank -* -* Accept able are also parts of name: -* tsstatscfg off say -* tsstatscfg on End -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 SidLuke. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TS Stats Plugin +// + +// Plugin works with Stats Settings Plugin. Just run both of them. +// By amx_statscfg command (from Stats Settings Plugin) +// you will be able to set all settings and save them to a file. +// +// Example usage for some options: +// amx_statscfg on SayTop15 +// amx_statscfg on SayRank +// +// Acceptable are also parts of name: +// amx_statscfg off say +// amx_statscfg on End #include #include diff --git a/plugins/ts/stats_logging.sma b/plugins/ts/stats_logging.sma index baf57b2e..22144deb 100755 --- a/plugins/ts/stats_logging.sma +++ b/plugins/ts/stats_logging.sma @@ -1,10 +1,16 @@ -/* AMX Mod script. (Feb 4th, 2003) - * - * Stats Logging - * by JustinHoMi - * TS changes by SidLuke - * - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2003 JustinHoMi. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TS Stats Logging Plugin +// #include #include diff --git a/plugins/ts/statssounds.sma b/plugins/ts/statssounds.sma index ca8b34f2..20598000 100755 --- a/plugins/ts/statssounds.sma +++ b/plugins/ts/statssounds.sma @@ -1,6 +1,15 @@ -/* -* Plugin for sounds precache -*/ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TS Sounds Precache Plugin +// #include @@ -26,4 +35,4 @@ public plugin_precache(){ public plugin_init() { register_plugin("TS Sounds Precache",AMXX_VERSION_STR,"AMXX Dev Team") -} \ No newline at end of file +} diff --git a/plugins/ts/tsstats.sma b/plugins/ts/tsstats.sma index f22f083b..f60dadd5 100755 --- a/plugins/ts/tsstats.sma +++ b/plugins/ts/tsstats.sma @@ -1,9 +1,18 @@ -/* Get Score for TS STATS. - * - * (c) 2004, SidLuke - * This file is provided as is (no warranties). - * - * Function calculates position in rank. +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// Copyright (C) 2004 SidLuke. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TS Stats Rank Calculation +// + +/* Function calculates position in rank. * * Stats: * 0 - kills @@ -14,7 +23,7 @@ * 5 - hits * 6 - damage * - * File location: $moddir/addons/amxmodx/data/tsstats.amxx + * File location: $moddir/addons/amxmodx/data/tstats.amxx */ #include @@ -22,4 +31,4 @@ public get_score(stats[8],body[8]) { return stats[0] - stats[1] - stats[3] /* kills - deaths - TKs */ -} \ No newline at end of file +} From 2a18a264d49b51de03013d7d023ad59275887f12 Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 07:15:20 -0500 Subject: [PATCH 22/71] Update date for license and GPLv2 exception. --- public/licenses/LICENSE.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/licenses/LICENSE.txt b/public/licenses/LICENSE.txt index e055b255..d46ef88c 100644 --- a/public/licenses/LICENSE.txt +++ b/public/licenses/LICENSE.txt @@ -1,5 +1,5 @@ AMX MOD X LICENSE INFORMATION -VERSION: AUGUST-03-2014 +VERSION: AUGUST-04-2014 AMX Mod X is licensed under the GNU General Public License, version 3, or (at your option) any later version. @@ -21,7 +21,7 @@ compatible with the GNU General Public License version 3, via the "or any higher version" clause. This is intended for compatibility with other software. As a final exception to the above, any derivative works created prior to this -date (August 3, 2014) may be exclusively licensed under the GNU General Public +date (August 4, 2014) may be exclusively licensed under the GNU General Public License version 2 (without an "or any higher version" clause) if and only if the work was already GNU General Public License 2.0 exclusive. This clause is provided for backwards compatibility only. From 9c08b11a755e23ae847bb96f13afd66193305e96 Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 14:31:28 -0500 Subject: [PATCH 23/71] Update 'amxx gpl' server command with new license text. --- amxmodx/srvcmd.cpp | 32 ++++++-------------------------- 1 file changed, 6 insertions(+), 26 deletions(-) diff --git a/amxmodx/srvcmd.cpp b/amxmodx/srvcmd.cpp index 42fe45c1..ab3b8e76 100755 --- a/amxmodx/srvcmd.cpp +++ b/amxmodx/srvcmd.cpp @@ -218,33 +218,13 @@ void amx_command() { print_srvconsole("AMX Mod X\n"); print_srvconsole("\n"); - print_srvconsole(" by the AMX Mod X Development Team\n"); - print_srvconsole(" originally developed by OLO\n"); + print_srvconsole(" Based on AMX Mod by Aleksander Naszko (\"OLO\").\n"); + print_srvconsole(" Copyright (C) The AMX Mod X Development Team.\n"); print_srvconsole("\n"); - print_srvconsole("\n"); - print_srvconsole(" This program is free software; you can redistribute it and/or modify it\n"); - print_srvconsole(" under the terms of the GNU General Public License as published by the\n"); - print_srvconsole(" Free Software Foundation; either version 2 of the License, or (at\n"); - print_srvconsole(" your option) any later version.\n"); - print_srvconsole("\n"); - print_srvconsole(" This program is distributed in the hope that it will be useful, but\n"); - print_srvconsole(" WITHOUT ANY WARRANTY; without even the implied warranty of\n"); - print_srvconsole(" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"); - print_srvconsole(" General Public License for more details.\n"); - print_srvconsole("\n"); - print_srvconsole(" You should have received a copy of the GNU General Public License\n"); - print_srvconsole(" along with this program; if not, write to the Free Software Foundation,\n"); - print_srvconsole(" Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"); - print_srvconsole("\n"); - print_srvconsole(" In addition, as a special exception, the author gives permission to\n"); - print_srvconsole(" link the code of this program with the Half-Life Game Engine (\"HL\n"); - print_srvconsole(" Engine\") and Modified Game Libraries (\"MODs\") developed by Valve,\n"); - print_srvconsole(" L.L.C (\"Valve\"). You must obey the GNU General Public License in all\n"); - print_srvconsole(" respects for all of the code used other than the HL Engine and MODs\n"); - print_srvconsole(" from Valve. If you modify this file, you may extend this exception\n"); - print_srvconsole(" to your version of the file, but you are not obligated to do so. If\n"); - print_srvconsole(" you do not wish to do so, delete this exception statement from your\n"); - print_srvconsole(" version.\n"); + print_srvconsole(" This software is licensed under the GNU General Public License, version 3 or\n"); + print_srvconsole(" higher. Additional exceptions apply. For full license details, see LICENSE.txt\n"); + print_srvconsole(" or visit:\n"); + print_srvconsole(" https://alliedmods.net/amxmodx-license\n"); print_srvconsole("\n"); } else if (!strcmp(cmd, "\x74\x75\x72\x74\x6C\x65")) // !! Hidden Command :D !! From d1122b982c73b7fa2f17a23b82fea745ff409dee Mon Sep 17 00:00:00 2001 From: Scott Ehlert Date: Mon, 4 Aug 2014 14:40:01 -0500 Subject: [PATCH 24/71] Ship license files with builds. --- support/PackageScript | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/support/PackageScript b/support/PackageScript index ecdce1bd..a7b7f13f 100644 --- a/support/PackageScript +++ b/support/PackageScript @@ -14,6 +14,7 @@ ModPackages = { } folder_list = [ + 'base/addons/amxmodx', 'base/addons/amxmodx/configs', 'base/addons/amxmodx/data', 'base/addons/amxmodx/data/lang', @@ -357,3 +358,17 @@ for datafile in datafiles: source = os.path.join(builder.sourcePath, 'plugins', 'lang', datafile), output_path = folder_map['base/addons/amxmodx/data/lang'] ) + +# Copy license files +licenses = [ + 'ACKNOWLEDGEMENTS.txt', + 'GPLv2.txt', + 'GPLv3.txt', + 'LICENSE.txt', +] + +for license in licenses: + builder.AddCopy( + source = os.path.join(builder.sourcePath, 'public', 'licenses', license), + output_path = folder_map['base/addons/amxmodx'] + ) From 10d5c8e9addb6140c4b48fed3f0c729b7d81f722 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Tue, 5 Aug 2014 09:49:32 +0200 Subject: [PATCH 25/71] Add change_level() native. --- amxmodx/amxmodx.cpp | 13 +++++++++++++ plugins/admincmd.sma | 2 +- plugins/include/amxmodx.inc | 13 +++++++++++++ plugins/mapsmenu.sma | 2 +- plugins/nextmap.sma | 2 +- 5 files changed, 29 insertions(+), 3 deletions(-) diff --git a/amxmodx/amxmodx.cpp b/amxmodx/amxmodx.cpp index 5dec0e6e..281eee5d 100755 --- a/amxmodx/amxmodx.cpp +++ b/amxmodx/amxmodx.cpp @@ -2574,6 +2574,18 @@ static cell AMX_NATIVE_CALL change_task(AMX *amx, cell *params) return g_tasksMngr.changeTasks(params[1], params[3] ? 0 : amx, flNewTime); } +static cell AMX_NATIVE_CALL change_level(AMX *amx, cell *params) +{ + int length; + const char* new_map = get_amxstring(amx, params[1], 0, length); + + // Same as calling "changelevel" command but will trigger "server_changelevel" AMXX forward as well. + // Filling second param will call "changelevel2" command, but this is not usable in multiplayer game. + g_pEngTable->pfnChangeLevel(new_map, NULL); + + return 1; +} + static cell AMX_NATIVE_CALL task_exists(AMX *amx, cell *params) /* 1 param */ { return g_tasksMngr.taskExists(params[1], params[2] ? 0 : amx); @@ -4838,6 +4850,7 @@ AMX_NATIVE_INFO amxmodx_Natives[] = {"callfunc_push_str", callfunc_push_str}, {"callfunc_push_array", callfunc_push_array}, {"change_task", change_task}, + {"change_level", change_level}, {"client_cmd", client_cmd}, {"client_print", client_print}, {"client_print_color", client_print_color}, diff --git a/plugins/admincmd.sma b/plugins/admincmd.sma index b233b0d3..e067b02e 100755 --- a/plugins/admincmd.sma +++ b/plugins/admincmd.sma @@ -654,7 +654,7 @@ public cmdSlap(id, level, cid) public chMap(map[]) { - server_cmd("changelevel %s", map) + change_level(map); } public cmdMap(id, level, cid) diff --git a/plugins/include/amxmodx.inc b/plugins/include/amxmodx.inc index 6c11fddd..6e7cb1a2 100755 --- a/plugins/include/amxmodx.inc +++ b/plugins/include/amxmodx.inc @@ -84,6 +84,19 @@ native precache_sound(const name[]); /* Precaches any file. */ native precache_generic(const szFile[]); +/** + * Changes map. + * + * @note This calls the pfnChangelLevel engine function. + * @note This has the same behavior as calling "changelevel" server command, + * but this will trigger properly server_changelevel() forward. + * + * @aparam map The map name to change. + * + * @noreturn + */ +native change_level(const map[]); + /* Sets info for player. */ native set_user_info(index,const info[],const value[]); diff --git a/plugins/mapsmenu.sma b/plugins/mapsmenu.sma index b07ad7bc..9375df3c 100755 --- a/plugins/mapsmenu.sma +++ b/plugins/mapsmenu.sma @@ -321,7 +321,7 @@ public cmdMapsMenu(id, level, cid) } public delayedChange(mapname[]) - server_cmd("changelevel %s", mapname) + change_level(mapname) public actionVoteMapMenu(id, key) { diff --git a/plugins/nextmap.sma b/plugins/nextmap.sma index 4af491fa..dc2fbe22 100755 --- a/plugins/nextmap.sma +++ b/plugins/nextmap.sma @@ -118,7 +118,7 @@ public delayedChange(param[]) if (g_mp_chattime) { set_pcvar_float(g_mp_chattime, get_pcvar_float(g_mp_chattime) - 2.0) } - server_cmd("changelevel %s", param) + change_level(param) } public changeMap() From c9ea68d1d3521553af9bd565f0372bfb724bcd0b Mon Sep 17 00:00:00 2001 From: Arkshine Date: Tue, 5 Aug 2014 11:41:55 +0200 Subject: [PATCH 26/71] Fix typo in documentation. --- plugins/include/amxmodx.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/include/amxmodx.inc b/plugins/include/amxmodx.inc index 6e7cb1a2..84354d75 100755 --- a/plugins/include/amxmodx.inc +++ b/plugins/include/amxmodx.inc @@ -91,7 +91,7 @@ native precache_generic(const szFile[]); * @note This has the same behavior as calling "changelevel" server command, * but this will trigger properly server_changelevel() forward. * - * @aparam map The map name to change. + * @param map The map name to change. * * @noreturn */ From 209f46a2359103a781c8f478e5c4f5caa46530af Mon Sep 17 00:00:00 2001 From: Arkshine Date: Mon, 28 Jul 2014 20:00:38 +0200 Subject: [PATCH 27/71] Geoip: Remove GeoIP library. --- dlls/geoip/GeoIP.c | 991 --------------------------------------------- dlls/geoip/GeoIP.h | 193 --------- 2 files changed, 1184 deletions(-) delete mode 100755 dlls/geoip/GeoIP.c delete mode 100755 dlls/geoip/GeoIP.h diff --git a/dlls/geoip/GeoIP.c b/dlls/geoip/GeoIP.c deleted file mode 100755 index 4fcfd2e6..00000000 --- a/dlls/geoip/GeoIP.c +++ /dev/null @@ -1,991 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */ -/* GeoIP.c - * - * Copyright (C) 2006 MaxMind LLC - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#define GEOIPDATADIR "" - -#include "GeoIP.h" - -#ifndef WIN32 -#include -#include -#include /* For ntohl */ -#include -#else -#include -#define snprintf _snprintf -#endif -#include -#include -#include -#include -#include -#include /* for fstat */ -#include /* for fstat */ - -#ifdef HAVE_STDINT_H -#include /* For uint32_t */ -#endif - -#ifndef INADDR_NONE -#define INADDR_NONE -1 -#endif - -#define COUNTRY_BEGIN 16776960 -#define STATE_BEGIN_REV0 16700000 -#define STATE_BEGIN_REV1 16000000 -#define STRUCTURE_INFO_MAX_SIZE 20 -#define DATABASE_INFO_MAX_SIZE 100 -#define MAX_ORG_RECORD_LENGTH 300 -#define US_OFFSET 1 -#define CANADA_OFFSET 677 -#define WORLD_OFFSET 1353 -#define FIPS_RANGE 360 - -#define CHECK_ERR(err, msg) { \ - if (err != Z_OK) { \ - fprintf(stderr, "%s error: %d\n", msg, err); \ - exit(1); \ - } \ -} - -const char GeoIP_country_code[251][3] = { "--","AP","EU","AD","AE","AF","AG","AI","AL","AM","AN", - "AO","AQ","AR","AS","AT","AU","AW","AZ","BA","BB", - "BD","BE","BF","BG","BH","BI","BJ","BM","BN","BO", - "BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD", - "CF","CG","CH","CI","CK","CL","CM","CN","CO","CR", - "CU","CV","CX","CY","CZ","DE","DJ","DK","DM","DO", - "DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ", - "FK","FM","FO","FR","FX","GA","GB","GD","GE","GF", - "GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT", - "GU","GW","GY","HK","HM","HN","HR","HT","HU","ID", - "IE","IL","IN","IO","IQ","IR","IS","IT","JM","JO", - "JP","KE","KG","KH","KI","KM","KN","KP","KR","KW", - "KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT", - "LU","LV","LY","MA","MC","MD","MG","MH","MK","ML", - "MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV", - "MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI", - "NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF", - "PG","PH","PK","PL","PM","PN","PR","PS","PT","PW", - "PY","QA","RE","RO","RU","RW","SA","SB","SC","SD", - "SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO", - "SR","ST","SV","SY","SZ","TC","TD","TF","TG","TH", - "TJ","TK","TM","TN","TO","TL","TR","TT","TV","TW", - "TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE", - "VG","VI","VN","VU","WF","WS","YE","YT","RS","ZA", - "ZM","ME","ZW","A1","A2","O1","AX","GG","IM","JE"}; - -const char GeoIP_country_code3[251][4] = { "--","AP","EU","AND","ARE","AFG","ATG","AIA","ALB","ARM","ANT", - "AGO","AQ","ARG","ASM","AUT","AUS","ABW","AZE","BIH","BRB", - "BGD","BEL","BFA","BGR","BHR","BDI","BEN","BMU","BRN","BOL", - "BRA","BHS","BTN","BV","BWA","BLR","BLZ","CAN","CC","COD", - "CAF","COG","CHE","CIV","COK","CHL","CMR","CHN","COL","CRI", - "CUB","CPV","CX","CYP","CZE","DEU","DJI","DNK","DMA","DOM", - "DZA","ECU","EST","EGY","ESH","ERI","ESP","ETH","FIN","FJI", - "FLK","FSM","FRO","FRA","FX","GAB","GBR","GRD","GEO","GUF", - "GHA","GIB","GRL","GMB","GIN","GLP","GNQ","GRC","GS","GTM", - "GUM","GNB","GUY","HKG","HM","HND","HRV","HTI","HUN","IDN", - "IRL","ISR","IND","IO","IRQ","IRN","ISL","ITA","JAM","JOR", - "JPN","KEN","KGZ","KHM","KIR","COM","KNA","PRK","KOR","KWT", - "CYM","KAZ","LAO","LBN","LCA","LIE","LKA","LBR","LSO","LTU", - "LUX","LVA","LBY","MAR","MCO","MDA","MDG","MHL","MKD","MLI", - "MMR","MNG","MAC","MNP","MTQ","MRT","MSR","MLT","MUS","MDV", - "MWI","MEX","MYS","MOZ","NAM","NCL","NER","NFK","NGA","NIC", - "NLD","NOR","NPL","NRU","NIU","NZL","OMN","PAN","PER","PYF", - "PNG","PHL","PAK","POL","SPM","PCN","PRI","PSE","PRT","PLW", - "PRY","QAT","REU","ROU","RUS","RWA","SAU","SLB","SYC","SDN", - "SWE","SGP","SHN","SVN","SJM","SVK","SLE","SMR","SEN","SOM", - "SUR","STP","SLV","SYR","SWZ","TCA","TCD","TF","TGO","THA", - "TJK","TKL","TKM","TUN","TON","TLS","TUR","TTO","TUV","TWN", - "TZA","UKR","UGA","UM","USA","URY","UZB","VAT","VCT","VEN", - "VGB","VIR","VNM","VUT","WLF","WSM","YEM","YT","SRB","ZAF", - "ZMB","MNE","ZWE","A1","A2","O1","ALA","GGY","IMN","JEY"}; - -const char * GeoIP_country_name[251] = {"N/A","Asia/Pacific Region","Europe","Andorra","United Arab Emirates","Afghanistan","Antigua and Barbuda","Anguilla","Albania","Armenia","Netherlands Antilles", - "Angola","Antarctica","Argentina","American Samoa","Austria","Australia","Aruba","Azerbaijan","Bosnia and Herzegovina","Barbados", - "Bangladesh","Belgium","Burkina Faso","Bulgaria","Bahrain","Burundi","Benin","Bermuda","Brunei Darussalam","Bolivia", - "Brazil","Bahamas","Bhutan","Bouvet Island","Botswana","Belarus","Belize","Canada","Cocos (Keeling) Islands","Congo, The Democratic Republic of the", - "Central African Republic","Congo","Switzerland","Cote D'Ivoire","Cook Islands","Chile","Cameroon","China","Colombia","Costa Rica", - "Cuba","Cape Verde","Christmas Island","Cyprus","Czech Republic","Germany","Djibouti","Denmark","Dominica","Dominican Republic", - "Algeria","Ecuador","Estonia","Egypt","Western Sahara","Eritrea","Spain","Ethiopia","Finland","Fiji", - "Falkland Islands (Malvinas)","Micronesia, Federated States of","Faroe Islands","France","France, Metropolitan","Gabon","United Kingdom","Grenada","Georgia","French Guiana", - "Ghana","Gibraltar","Greenland","Gambia","Guinea","Guadeloupe","Equatorial Guinea","Greece","South Georgia and the South Sandwich Islands","Guatemala", - "Guam","Guinea-Bissau","Guyana","Hong Kong","Heard Island and McDonald Islands","Honduras","Croatia","Haiti","Hungary","Indonesia", - "Ireland","Israel","India","British Indian Ocean Territory","Iraq","Iran, Islamic Republic of","Iceland","Italy","Jamaica","Jordan", - "Japan","Kenya","Kyrgyzstan","Cambodia","Kiribati","Comoros","Saint Kitts and Nevis","Korea, Democratic People's Republic of","Korea, Republic of","Kuwait", - "Cayman Islands","Kazakhstan","Lao People's Democratic Republic","Lebanon","Saint Lucia","Liechtenstein","Sri Lanka","Liberia","Lesotho","Lithuania", - "Luxembourg","Latvia","Libyan Arab Jamahiriya","Morocco","Monaco","Moldova, Republic of","Madagascar","Marshall Islands","Macedonia","Mali", - "Myanmar","Mongolia","Macau","Northern Mariana Islands","Martinique","Mauritania","Montserrat","Malta","Mauritius","Maldives", - "Malawi","Mexico","Malaysia","Mozambique","Namibia","New Caledonia","Niger","Norfolk Island","Nigeria","Nicaragua", - "Netherlands","Norway","Nepal","Nauru","Niue","New Zealand","Oman","Panama","Peru","French Polynesia", - "Papua New Guinea","Philippines","Pakistan","Poland","Saint Pierre and Miquelon","Pitcairn Islands","Puerto Rico","Palestinian Territory","Portugal","Palau", - "Paraguay","Qatar","Reunion","Romania","Russian Federation","Rwanda","Saudi Arabia","Solomon Islands","Seychelles","Sudan", - "Sweden","Singapore","Saint Helena","Slovenia","Svalbard and Jan Mayen","Slovakia","Sierra Leone","San Marino","Senegal","Somalia","Suriname", - "Sao Tome and Principe","El Salvador","Syrian Arab Republic","Swaziland","Turks and Caicos Islands","Chad","French Southern Territories","Togo","Thailand", - "Tajikistan","Tokelau","Turkmenistan","Tunisia","Tonga","Timor-Leste","Turkey","Trinidad and Tobago","Tuvalu","Taiwan", - "Tanzania, United Republic of","Ukraine","Uganda","United States Minor Outlying Islands","United States","Uruguay","Uzbekistan","Holy See (Vatican City State)","Saint Vincent and the Grenadines","Venezuela", - "Virgin Islands, British","Virgin Islands, U.S.","Vietnam","Vanuatu","Wallis and Futuna","Samoa","Yemen","Mayotte","Serbia","South Africa", - "Zambia","Montenegro","Zimbabwe","Anonymous Proxy","Satellite Provider","Other","Aland Islands","Guernsey","Isle of Man","Jersey"}; - -/* Possible continent codes are AF, AS, EU, NA, OC, SA for Africa, Asia, Europe, North America, Oceania -and South America. */ - -const char GeoIP_country_continent[251][3] = {"--","AS","EU","EU","AS","AS","SA","SA","EU","AS","SA", - "AF","AN","SA","OC","EU","OC","SA","AS","EU","SA", - "AS","EU","AF","EU","AS","AF","AF","SA","AS","SA", - "SA","SA","AS","AF","AF","EU","SA","NA","AS","AF", - "AF","AF","EU","AF","OC","SA","AF","AS","SA","SA", - "SA","AF","AS","AS","EU","EU","AF","EU","SA","SA", - "AF","SA","EU","AF","AF","AF","EU","AF","EU","OC", - "SA","OC","EU","EU","EU","AF","EU","SA","AS","SA", - "AF","EU","SA","AF","AF","SA","AF","EU","SA","SA", - "OC","AF","SA","AS","AF","SA","EU","SA","EU","AS", - "EU","AS","AS","AS","AS","AS","EU","EU","SA","AS", - "AS","AF","AS","AS","OC","AF","SA","AS","AS","AS", - "SA","AS","AS","AS","SA","EU","AS","AF","AF","EU", - "EU","EU","AF","AF","EU","EU","AF","OC","EU","AF", - "AS","AS","AS","OC","SA","AF","SA","EU","AF","AS", - "AF","NA","AS","AF","AF","OC","AF","OC","AF","SA", - "EU","EU","AS","OC","OC","OC","AS","SA","SA","OC", - "OC","AS","AS","EU","SA","OC","SA","AS","EU","OC", - "SA","AS","AF","EU","AS","AF","AS","OC","AF","AF", - "EU","AS","AF","EU","EU","EU","AF","EU","AF","AF", - "SA","AF","SA","AS","AF","SA","AF","AF","AF","AS", - "AS","OC","AS","AF","OC","AS","AS","SA","OC","AS", - "AF","EU","AF","OC","NA","SA","AS","EU","SA","SA", - "SA","SA","AS","OC","OC","OC","AS","AF","EU","AF", - "AF","EU","AF","--","--","--","EU","EU","EU","EU"}; - -const char * GeoIPDBDescription[NUM_DB_TYPES] = {NULL, "GeoIP Country Edition", "GeoIP City Edition, Rev 1", "GeoIP Region Edition, Rev 1", "GeoIP ISP Edition", "GeoIP Organization Edition", "GeoIP City Edition, Rev 0", "GeoIP Region Edition, Rev 0","GeoIP Proxy Edition","GeoIP ASNum Edition","GeoIP Netspeed Edition","GeoIP Domain Name Edition"}; - -char * custom_directory = NULL; - -void GeoIP_setup_custom_directory (char * dir) { - custom_directory = dir; -} - -char *_GeoIP_full_path_to(const char *file_name) { - int len; - char *path = malloc(sizeof(char) * 1024); - - if (custom_directory == NULL){ -#ifndef WIN32 - memset(path, 0, sizeof(char) * 1024); - snprintf(path, sizeof(char) * 1024 - 1, "%s/%s", GEOIPDATADIR, file_name); -#else - char buf[MAX_PATH], *p, *q = NULL; - memset(buf, 0, sizeof(buf)); - len = GetModuleFileName(GetModuleHandle(NULL), buf, sizeof(buf) - 1); - for (p = buf + len; p > buf; p--) - if (*p == '\\') - { - if (!q) - q = p; - else - *p = '/'; - } - *q = 0; - memset(path, 0, sizeof(char) * 1024); - snprintf(path, sizeof(char) * 1024 - 1, "%s/%s", buf, file_name); -#endif - } else { - len = strlen(custom_directory); - if (custom_directory[len-1] != '/') { - snprintf(path, sizeof(char) * 1024 - 1, "%s/%s",custom_directory, file_name); - } else { - snprintf(path, sizeof(char) * 1024 - 1, "%s%s", custom_directory, file_name); - } - } - return path; -} - -char ** GeoIPDBFileName = NULL; - -void _GeoIP_setup_dbfilename() { - if (NULL == GeoIPDBFileName) { - GeoIPDBFileName = malloc(sizeof(char *) * NUM_DB_TYPES); - memset(GeoIPDBFileName, 0, sizeof(char *) * NUM_DB_TYPES); - - GeoIPDBFileName[GEOIP_COUNTRY_EDITION] = _GeoIP_full_path_to("GeoIP.dat"); - GeoIPDBFileName[GEOIP_REGION_EDITION_REV0] = _GeoIP_full_path_to("GeoIPRegion.dat"); - GeoIPDBFileName[GEOIP_REGION_EDITION_REV1] = _GeoIP_full_path_to("GeoIPRegion.dat"); - GeoIPDBFileName[GEOIP_CITY_EDITION_REV0] = _GeoIP_full_path_to("GeoIPCity.dat"); - GeoIPDBFileName[GEOIP_CITY_EDITION_REV1] = _GeoIP_full_path_to("GeoIPCity.dat"); - GeoIPDBFileName[GEOIP_ISP_EDITION] = _GeoIP_full_path_to("GeoIPISP.dat"); - GeoIPDBFileName[GEOIP_ORG_EDITION] = _GeoIP_full_path_to("GeoIPOrg.dat"); - GeoIPDBFileName[GEOIP_PROXY_EDITION] = _GeoIP_full_path_to("GeoIPProxy.dat"); - GeoIPDBFileName[GEOIP_ASNUM_EDITION] = _GeoIP_full_path_to("GeoIPASNum.dat"); - GeoIPDBFileName[GEOIP_NETSPEED_EDITION] = _GeoIP_full_path_to("GeoIPNetSpeed.dat"); - GeoIPDBFileName[GEOIP_DOMAIN_EDITION] = _GeoIP_full_path_to("GeoIPDomain.dat"); - } -} - -static -int _file_exists(const char *file_name) { - struct stat file_stat; - return( (stat(file_name, &file_stat) == 0) ? 1:0); -} - -int GeoIP_db_avail(int type) { - const char * filePath; - if (type < 0 || type >= NUM_DB_TYPES) { - return 0; - } - _GeoIP_setup_dbfilename(); - filePath = GeoIPDBFileName[type]; - if (NULL == filePath) { - return 0; - } - return _file_exists(filePath); -} - -static -void _setup_segments(GeoIP * gi) { - int i, j; - unsigned char delim[3]; - unsigned char buf[SEGMENT_RECORD_LENGTH]; - - gi->databaseSegments = NULL; - - /* default to GeoIP Country Edition */ - gi->databaseType = GEOIP_COUNTRY_EDITION; - gi->record_length = STANDARD_RECORD_LENGTH; - fseek(gi->GeoIPDatabase, -3l, SEEK_END); - for (i = 0; i < STRUCTURE_INFO_MAX_SIZE; i++) { - fread(delim, 1, 3, gi->GeoIPDatabase); - if (delim[0] == 255 && delim[1] == 255 && delim[2] == 255) { - fread(&gi->databaseType, 1, 1, gi->GeoIPDatabase); - if (gi->databaseType >= 106) { - /* backwards compatibility with databases from April 2003 and earlier */ - gi->databaseType -= 105; - } - - if (gi->databaseType == GEOIP_REGION_EDITION_REV0) { - /* Region Edition, pre June 2003 */ - gi->databaseSegments = malloc(sizeof(int)); - gi->databaseSegments[0] = STATE_BEGIN_REV0; - } else if (gi->databaseType == GEOIP_REGION_EDITION_REV1) { - /* Region Edition, post June 2003 */ - gi->databaseSegments = malloc(sizeof(int)); - gi->databaseSegments[0] = STATE_BEGIN_REV1; - } else if (gi->databaseType == GEOIP_CITY_EDITION_REV0 || - gi->databaseType == GEOIP_CITY_EDITION_REV1 || - gi->databaseType == GEOIP_ORG_EDITION || - gi->databaseType == GEOIP_ISP_EDITION || - gi->databaseType == GEOIP_ASNUM_EDITION) { - /* City/Org Editions have two segments, read offset of second segment */ - gi->databaseSegments = malloc(sizeof(int)); - gi->databaseSegments[0] = 0; - fread(buf, SEGMENT_RECORD_LENGTH, 1, gi->GeoIPDatabase); - for (j = 0; j < SEGMENT_RECORD_LENGTH; j++) { - gi->databaseSegments[0] += (buf[j] << (j * 8)); - } - if (gi->databaseType == GEOIP_ORG_EDITION || - gi->databaseType == GEOIP_ISP_EDITION) - gi->record_length = ORG_RECORD_LENGTH; - } - break; - } else { - fseek(gi->GeoIPDatabase, -4l, SEEK_CUR); - } - } - if (gi->databaseType == GEOIP_COUNTRY_EDITION || - gi->databaseType == GEOIP_PROXY_EDITION || - gi->databaseType == GEOIP_NETSPEED_EDITION) { - gi->databaseSegments = malloc(sizeof(int)); - gi->databaseSegments[0] = COUNTRY_BEGIN; - } -} - -static -int _check_mtime(GeoIP *gi) { - struct stat buf; - if (gi->flags & GEOIP_CHECK_CACHE) { - if (stat(gi->file_path, &buf) != -1) { - if (buf.st_mtime != gi->mtime) { - /* GeoIP Database file updated */ - if (gi->flags & GEOIP_MEMORY_CACHE) { - /* reload database into memory cache */ - if ((gi->cache = (unsigned char*) realloc(gi->cache, buf.st_size)) == NULL) { - fprintf(stderr,"Out of memory when reloading %s\n",gi->file_path); - return -1; - } - } - /* refresh filehandle */ - fclose(gi->GeoIPDatabase); - gi->GeoIPDatabase = fopen(gi->file_path,"rb"); - if (gi->GeoIPDatabase == NULL) { - fprintf(stderr,"Error Opening file %s when reloading\n",gi->file_path); - return -1; - } - gi->mtime = buf.st_mtime; - if (gi->flags & GEOIP_MEMORY_CACHE) { - if (fread(gi->cache, sizeof(unsigned char), buf.st_size, gi->GeoIPDatabase) != (size_t) buf.st_size) { - fprintf(stderr,"Error reading file %s when reloading\n",gi->file_path); - return -1; - } - } - if (gi->databaseSegments != NULL) { - free(gi->databaseSegments); - gi->databaseSegments = NULL; - } - _setup_segments(gi); - if (gi->databaseSegments == NULL) { - fprintf(stderr, "Error reading file %s -- corrupt\n", gi->file_path); - return -1; - } - if (gi->flags & GEOIP_INDEX_CACHE) { - gi->index_cache = (unsigned char *) realloc(gi->index_cache, sizeof(unsigned char) * ((gi->databaseSegments[0] * (long)gi->record_length * 2))); - if (gi->index_cache != NULL) { - fseek(gi->GeoIPDatabase, 0, SEEK_SET); - if (fread(gi->index_cache, sizeof(unsigned char), gi->databaseSegments[0] * (long)gi->record_length * 2, gi->GeoIPDatabase) != (size_t) (gi->databaseSegments[0]*(long)gi->record_length * 2)) { - fprintf(stderr,"Error reading file %s where reloading\n",gi->file_path); - return -1; - } - } - } - } - } - } - return 0; -} - -unsigned int _GeoIP_seek_record (GeoIP *gi, unsigned long ipnum) { - int depth; - unsigned int x; - unsigned char stack_buffer[2 * MAX_RECORD_LENGTH]; - const unsigned char *buf = (gi->cache == NULL) ? stack_buffer : NULL; - unsigned int offset = 0; - - const unsigned char * p; - int j; - - _check_mtime(gi); - for (depth = 31; depth >= 0; depth--) { - if (gi->cache == NULL && gi->index_cache == NULL) { - /* read from disk */ - fseek(gi->GeoIPDatabase, (long)gi->record_length * 2 * offset, SEEK_SET); - fread(stack_buffer,gi->record_length,2,gi->GeoIPDatabase); - } else if (gi->index_cache == NULL) { - /* simply point to record in memory */ - buf = gi->cache + (long)gi->record_length * 2 *offset; - } else { - buf = gi->index_cache + (long)gi->record_length * 2 * offset; - } - - if (ipnum & (1 << depth)) { - /* Take the right-hand branch */ - if ( gi->record_length == 3 ) { - /* Most common case is completely unrolled and uses constants. */ - x = (buf[3*1 + 0] << (0*8)) - + (buf[3*1 + 1] << (1*8)) - + (buf[3*1 + 2] << (2*8)); - - } else { - /* General case */ - j = gi->record_length; - p = &buf[2*j]; - x = 0; - do { - x <<= 8; - x += *(--p); - } while ( --j ); - } - - } else { - /* Take the left-hand branch */ - if ( gi->record_length == 3 ) { - /* Most common case is completely unrolled and uses constants. */ - x = (buf[3*0 + 0] << (0*8)) - + (buf[3*0 + 1] << (1*8)) - + (buf[3*0 + 2] << (2*8)); - } else { - /* General case */ - j = gi->record_length; - p = &buf[1*j]; - x = 0; - do { - x <<= 8; - x += *(--p); - } while ( --j ); - } - } - - if (x >= gi->databaseSegments[0]) { - gi->netmask = 32 - depth; - return x; - } - offset = x; - } - - /* shouldn't reach here */ - fprintf(stderr,"Error Traversing Database for ipnum = %lu - Perhaps database is corrupt?\n",ipnum); - return 0; -} - -unsigned long _GeoIP_addr_to_num (const char *addr) { - int i; - char tok[4]; - int octet; - int j = 0, k = 0; - unsigned long ipnum = 0; - char c = 0; - - for (i=0; i<4; i++) { - for (;;) { - c = addr[k++]; - if (c == '.' || c == '\0') { - tok[j] = '\0'; - octet = atoi(tok); - if (octet > 255) - return 0; - ipnum += (octet << ((3-i)*8)); - j = 0; - break; - } else if (c >= '0' && c<= '9') { - if (j > 2) { - return 0; - } - tok[j++] = c; - } else { - return 0; - } - } - if(c == '\0' && i<3) { - return 0; - } - } - return ipnum; -} - -GeoIP* GeoIP_open_type (int type, int flags) { - GeoIP * gi; - const char * filePath; - if (type < 0 || type >= NUM_DB_TYPES) { - printf("Invalid database type %d\n", type); - return NULL; - } - _GeoIP_setup_dbfilename(); - filePath = GeoIPDBFileName[type]; - if (filePath == NULL) { - printf("Invalid database type %d\n", type); - return NULL; - } - gi = GeoIP_open (filePath, flags); - return gi; -} - -GeoIP* GeoIP_new (int flags) { - GeoIP * gi; - _GeoIP_setup_dbfilename(); - gi = GeoIP_open (GeoIPDBFileName[GEOIP_COUNTRY_EDITION], flags); - return gi; -} - -GeoIP* GeoIP_open (const char * filename, int flags) { - struct stat buf; - GeoIP * gi; - size_t len; - -#ifdef WIN32 - WSADATA wsa; - if (WSAStartup(MAKEWORD(1, 1), &wsa) != 0) - return NULL; -#endif - - gi = (GeoIP *)malloc(sizeof(GeoIP)); - if (gi == NULL) - return NULL; - len = sizeof(char) * (strlen(filename)+1); - gi->file_path = malloc(len); - if (gi->file_path == NULL) { - free(gi); - return NULL; - } - strncpy(gi->file_path, filename, len); - gi->GeoIPDatabase = fopen(filename,"rb"); - if (gi->GeoIPDatabase == NULL) { - fprintf(stderr,"Error Opening file %s\n",filename); - free(gi->file_path); - free(gi); - return NULL; - } else { - if (flags & GEOIP_MEMORY_CACHE) { - if (fstat(fileno(gi->GeoIPDatabase), &buf) == -1) { - fprintf(stderr,"Error stating file %s\n",filename); - free(gi->file_path); - free(gi); - return NULL; - } - gi->mtime = buf.st_mtime; - gi->cache = (unsigned char *) malloc(sizeof(unsigned char) * buf.st_size); - if (gi->cache != NULL) { - if (fread(gi->cache, sizeof(unsigned char), buf.st_size, gi->GeoIPDatabase) != (size_t) buf.st_size) { - fprintf(stderr,"Error reading file %s\n",filename); - free(gi->cache); - free(gi->file_path); - free(gi); - return NULL; - } - } - } else { - if (flags & GEOIP_CHECK_CACHE) { - if (fstat(fileno(gi->GeoIPDatabase), &buf) == -1) { - fprintf(stderr,"Error stating file %s\n",filename); - free(gi->file_path); - free(gi); - return NULL; - } - gi->mtime = buf.st_mtime; - } - gi->cache = NULL; - } - gi->flags = flags; - gi->charset = GEOIP_CHARSET_ISO_8859_1; - - _setup_segments(gi); - if (flags & GEOIP_INDEX_CACHE) { - gi->index_cache = (unsigned char *) malloc(sizeof(unsigned char) * ((gi->databaseSegments[0] * (long)gi->record_length * 2))); - if (gi->index_cache != NULL) { - fseek(gi->GeoIPDatabase, 0, SEEK_SET); - if (fread(gi->index_cache, sizeof(unsigned char), gi->databaseSegments[0] * (long)gi->record_length * 2, gi->GeoIPDatabase) != (size_t) (gi->databaseSegments[0]*(long)gi->record_length * 2)) { - fprintf(stderr,"Error reading file %s\n",filename); - free(gi->databaseSegments); - free(gi->index_cache); - free(gi); - return NULL; - } - } - } else { - gi->index_cache = NULL; - } - return gi; - } -} - -void GeoIP_delete (GeoIP *gi) { - if (gi == NULL ) - return; - if (gi->GeoIPDatabase != NULL) - fclose(gi->GeoIPDatabase); - if (gi->cache != NULL) - free(gi->cache); - if (gi->index_cache != NULL) - free(gi->index_cache); - if (gi->file_path != NULL) - free(gi->file_path); - if (gi->databaseSegments != NULL) - free(gi->databaseSegments); - free(gi); -} - -const char *GeoIP_country_code_by_name (GeoIP* gi, const char *name) { - int country_id; - country_id = GeoIP_id_by_name(gi, name); - return (country_id > 0) ? GeoIP_country_code[country_id] : NULL; -} - -const char *GeoIP_country_code3_by_name (GeoIP* gi, const char *name) { - int country_id; - country_id = GeoIP_id_by_name(gi, name); - return (country_id > 0) ? GeoIP_country_code3[country_id] : NULL; -} - -const char *GeoIP_country_name_by_name (GeoIP* gi, const char *name) { - int country_id; - country_id = GeoIP_id_by_name(gi, name); - return (country_id > 0) ? GeoIP_country_name[country_id] : NULL; -} - -unsigned long _GeoIP_lookupaddress (const char *host) { - unsigned long addr = inet_addr(host); - struct hostent phe2; - struct hostent * phe = &phe2; - char *buf = NULL; - int result = 0; -#ifdef HAVE_GETHOSTBYNAME_R - buf = malloc(buflength); -#endif - if (addr == INADDR_NONE) { -#ifdef HAVE_GETHOSTBYNAME_R - while (1) { - /* we use gethostbyname_r here because it is thread-safe and gethostbyname is not */ -#ifdef GETHOSTBYNAME_R_RETURNS_INT - result = gethostbyname_r(host,&phe2,buf,buflength,&phe,&herr); -#else - phe = gethostbyname_r(host,&phe2,buf,buflength,&herr); -#endif - if (herr != ERANGE) - break; - if (result == 0) - break; - /* double the buffer if the buffer is too small */ - buflength = buflength * 2; - buf = realloc(buf,buflength); - } -#endif -#ifndef HAVE_GETHOSTBYNAME_R - /* Some systems do not support gethostbyname_r, such as Mac OS X */ - phe = gethostbyname(host); -#endif - if (!phe || result != 0) { - free(buf); - return 0; - } - addr = *((unsigned long *) phe->h_addr_list[0]); - } -#ifdef HAVE_GETHOSTBYNAME_R - free(buf); -#endif - return ntohl(addr); -} - -int GeoIP_id_by_name (GeoIP* gi, const char *name) { - unsigned long ipnum; - int ret; - if (name == NULL) { - return 0; - } - if (gi->databaseType != GEOIP_COUNTRY_EDITION && gi->databaseType != GEOIP_PROXY_EDITION && gi->databaseType != GEOIP_NETSPEED_EDITION) { - printf("Invalid database type %s, expected %s\n", GeoIPDBDescription[(int)gi->databaseType], GeoIPDBDescription[GEOIP_COUNTRY_EDITION]); - return 0; - } - if (!(ipnum = _GeoIP_lookupaddress(name))) - return 0; - ret = _GeoIP_seek_record(gi, ipnum) - COUNTRY_BEGIN; - return ret; - -} - -const char *GeoIP_country_code_by_addr (GeoIP* gi, const char *addr) { - int country_id; - country_id = GeoIP_id_by_addr(gi, addr); - return (country_id > 0) ? GeoIP_country_code[country_id] : NULL; -} - -const char *GeoIP_country_code3_by_addr (GeoIP* gi, const char *addr) { - int country_id; - country_id = GeoIP_id_by_addr(gi, addr); - return (country_id > 0) ? GeoIP_country_code3[country_id] : NULL; - return GeoIP_country_code3[country_id]; -} - -const char *GeoIP_country_name_by_addr (GeoIP* gi, const char *addr) { - int country_id; - country_id = GeoIP_id_by_addr(gi, addr); - return (country_id > 0) ? GeoIP_country_name[country_id] : NULL; - return GeoIP_country_name[country_id]; -} - -const char *GeoIP_country_name_by_ipnum (GeoIP* gi, unsigned long ipnum) { - int country_id; - country_id = GeoIP_id_by_ipnum(gi, ipnum); - return (country_id > 0) ? GeoIP_country_name[country_id] : NULL; -} - -const char *GeoIP_country_code_by_ipnum (GeoIP* gi, unsigned long ipnum) { - int country_id; - country_id = GeoIP_id_by_ipnum(gi, ipnum); - return (country_id > 0) ? GeoIP_country_code[country_id] : NULL; -} - -const char *GeoIP_country_code3_by_ipnum (GeoIP* gi, unsigned long ipnum) { - int country_id; - country_id = GeoIP_id_by_ipnum(gi, ipnum); - return (country_id > 0) ? GeoIP_country_code3[country_id] : NULL; -} - -int GeoIP_country_id_by_addr (GeoIP* gi, const char *addr) { - return GeoIP_id_by_addr(gi, addr); -} - -int GeoIP_country_id_by_name (GeoIP* gi, const char *host) { - return GeoIP_id_by_name(gi, host); -} - -int GeoIP_id_by_addr (GeoIP* gi, const char *addr) { - unsigned long ipnum; - int ret; - if (addr == NULL) { - return 0; - } - if (gi->databaseType != GEOIP_COUNTRY_EDITION && - gi->databaseType != GEOIP_PROXY_EDITION && - gi->databaseType != GEOIP_NETSPEED_EDITION) { - printf("Invalid database type %s, expected %s\n", - GeoIPDBDescription[(int)gi->databaseType], - GeoIPDBDescription[GEOIP_COUNTRY_EDITION]); - return 0; - } - ipnum = _GeoIP_addr_to_num(addr); - ret = _GeoIP_seek_record(gi, ipnum) - COUNTRY_BEGIN; - return ret; -} - -int GeoIP_id_by_ipnum (GeoIP* gi, unsigned long ipnum) { - int ret; - if (ipnum == 0) { - return 0; - } - if (gi->databaseType != GEOIP_COUNTRY_EDITION && - gi->databaseType != GEOIP_PROXY_EDITION && - gi->databaseType != GEOIP_NETSPEED_EDITION) { - printf("Invalid database type %s, expected %s\n", - GeoIPDBDescription[(int)gi->databaseType], - GeoIPDBDescription[GEOIP_COUNTRY_EDITION]); - return 0; - } - ret = _GeoIP_seek_record(gi, ipnum) - COUNTRY_BEGIN; - return ret; -} - -char *GeoIP_database_info (GeoIP* gi) { - int i; - unsigned char buf[3]; - char *retval; - int hasStructureInfo = 0; - - if(gi == NULL) - return NULL; - - _check_mtime(gi); - fseek(gi->GeoIPDatabase, -3l, SEEK_END); - - /* first get past the database structure information */ - for (i = 0; i < STRUCTURE_INFO_MAX_SIZE; i++) { - fread(buf, 1, 3, gi->GeoIPDatabase); - if (buf[0] == 255 && buf[1] == 255 && buf[2] == 255) { - hasStructureInfo = 1; - break; - } - fseek(gi->GeoIPDatabase, -4l, SEEK_CUR); - } - if (hasStructureInfo == 1) { - fseek(gi->GeoIPDatabase, -6l, SEEK_CUR); - } else { - /* no structure info, must be pre Sep 2002 database, go back to end */ - fseek(gi->GeoIPDatabase, -3l, SEEK_END); - } - - for (i = 0; i < DATABASE_INFO_MAX_SIZE; i++) { - fread(buf, 1, 3, gi->GeoIPDatabase); - if (buf[0] == 0 && buf[1] == 0 && buf[2] == 0) { - retval = malloc(sizeof(char) * (i+1)); - if (retval == NULL) { - return NULL; - } - fread(retval, 1, i, gi->GeoIPDatabase); - retval[i] = '\0'; - return retval; - } - fseek(gi->GeoIPDatabase, -4l, SEEK_CUR); - } - return NULL; -} - -/* GeoIP Region Edition functions */ - -void GeoIP_assign_region_by_inetaddr(GeoIP* gi, unsigned long inetaddr, GeoIPRegion *region) { - unsigned int seek_region; - - /* This also writes in the terminating NULs (if you decide to - * keep them) and clear any fields that are not set. */ - memset(region, 0, sizeof(GeoIPRegion)); - - seek_region = _GeoIP_seek_record(gi, ntohl(inetaddr)); - - if (gi->databaseType == GEOIP_REGION_EDITION_REV0) { - /* Region Edition, pre June 2003 */ - seek_region -= STATE_BEGIN_REV0; - if (seek_region >= 1000) { - region->country_code[0] = 'U'; - region->country_code[1] = 'S'; - region->region[0] = (char) ((seek_region - 1000)/26 + 65); - region->region[1] = (char) ((seek_region - 1000)%26 + 65); - } else { - memcpy(region->country_code, GeoIP_country_code[seek_region], 2); - } - } else if (gi->databaseType == GEOIP_REGION_EDITION_REV1) { - /* Region Edition, post June 2003 */ - seek_region -= STATE_BEGIN_REV1; - if (seek_region < US_OFFSET) { - /* Unknown */ - /* we don't need to do anything here b/c we memset region to 0 */ - } else if (seek_region < CANADA_OFFSET) { - /* USA State */ - region->country_code[0] = 'U'; - region->country_code[1] = 'S'; - region->region[0] = (char) ((seek_region - US_OFFSET)/26 + 65); - region->region[1] = (char) ((seek_region - US_OFFSET)%26 + 65); - } else if (seek_region < WORLD_OFFSET) { - /* Canada Province */ - region->country_code[0] = 'C'; - region->country_code[1] = 'A'; - region->region[0] = (char) ((seek_region - CANADA_OFFSET)/26 + 65); - region->region[1] = (char) ((seek_region - CANADA_OFFSET)%26 + 65); - } else { - /* Not US or Canada */ - memcpy(region->country_code, GeoIP_country_code[(seek_region - WORLD_OFFSET) / FIPS_RANGE], 2); - } - } -} - -static -GeoIPRegion * _get_region(GeoIP* gi, unsigned long ipnum) { - GeoIPRegion * region; - - region = malloc(sizeof(GeoIPRegion)); - if (region) { - GeoIP_assign_region_by_inetaddr(gi, htonl(ipnum), region); - } - return region; -} - -GeoIPRegion * GeoIP_region_by_addr (GeoIP* gi, const char *addr) { - unsigned long ipnum; - if (addr == NULL) { - return 0; - } - if (gi->databaseType != GEOIP_REGION_EDITION_REV0 && - gi->databaseType != GEOIP_REGION_EDITION_REV1) { - printf("Invalid database type %s, expected %s\n", GeoIPDBDescription[(int)gi->databaseType], GeoIPDBDescription[GEOIP_REGION_EDITION_REV1]); - return 0; - } - ipnum = _GeoIP_addr_to_num(addr); - return _get_region(gi, ipnum); -} - -GeoIPRegion * GeoIP_region_by_name (GeoIP* gi, const char *name) { - unsigned long ipnum; - if (name == NULL) { - return 0; - } - if (gi->databaseType != GEOIP_REGION_EDITION_REV0 && - gi->databaseType != GEOIP_REGION_EDITION_REV1) { - printf("Invalid database type %s, expected %s\n", GeoIPDBDescription[(int)gi->databaseType], GeoIPDBDescription[GEOIP_REGION_EDITION_REV1]); - return 0; - } - if (!(ipnum = _GeoIP_lookupaddress(name))) - return 0; - return _get_region(gi, ipnum); -} - -GeoIPRegion * GeoIP_region_by_ipnum (GeoIP* gi, unsigned long ipnum) { - if (gi->databaseType != GEOIP_REGION_EDITION_REV0 && - gi->databaseType != GEOIP_REGION_EDITION_REV1) { - printf("Invalid database type %s, expected %s\n", GeoIPDBDescription[(int)gi->databaseType], GeoIPDBDescription[GEOIP_REGION_EDITION_REV1]); - return 0; - } - return _get_region(gi, ipnum); -} - -void GeoIPRegion_delete (GeoIPRegion *gir) { - free(gir); -} - -/* GeoIP Organization, ISP and AS Number Edition private method */ -static -char *_get_name (GeoIP* gi, unsigned long ipnum) { - int seek_org; - char buf[MAX_ORG_RECORD_LENGTH]; - char * org_buf, * buf_pointer; - int record_pointer; - size_t len; - - if (gi->databaseType != GEOIP_ORG_EDITION && - gi->databaseType != GEOIP_ISP_EDITION && - gi->databaseType != GEOIP_ASNUM_EDITION) { - printf("Invalid database type %s, expected %s\n", GeoIPDBDescription[(int)gi->databaseType], GeoIPDBDescription[GEOIP_ORG_EDITION]); - return 0; - } - - seek_org = _GeoIP_seek_record(gi, ipnum); - if (seek_org == gi->databaseSegments[0]) - return NULL; - - record_pointer = seek_org + (2 * gi->record_length - 1) * gi->databaseSegments[0]; - - if (gi->cache == NULL) { - fseek(gi->GeoIPDatabase, record_pointer, SEEK_SET); - fread(buf, sizeof(char), MAX_ORG_RECORD_LENGTH, gi->GeoIPDatabase); - len = sizeof(char) * (strlen(buf)+1); - org_buf = malloc(len); - strncpy(org_buf, buf, len); - } else { - buf_pointer = (char *)gi->cache + (long)record_pointer; - len = sizeof(char) * (strlen(buf_pointer)+1); - org_buf = malloc(len); - strncpy(org_buf, buf_pointer, len); - } - return org_buf; -} - -char *GeoIP_name_by_ipnum (GeoIP* gi, unsigned long ipnum) { - return _get_name(gi,ipnum); -} - -char *GeoIP_name_by_addr (GeoIP* gi, const char *addr) { - unsigned long ipnum; - if (addr == NULL) { - return 0; - } - ipnum = _GeoIP_addr_to_num(addr); - return _get_name(gi, ipnum); -} - -char *GeoIP_name_by_name (GeoIP* gi, const char *name) { - unsigned long ipnum; - if (name == NULL) { - return 0; - } - if (!(ipnum = _GeoIP_lookupaddress(name))) - return 0; - return _get_name(gi, ipnum); -} - -char *GeoIP_org_by_ipnum (GeoIP* gi, unsigned long ipnum) { - return GeoIP_name_by_ipnum(gi, ipnum); -} - -char *GeoIP_org_by_addr (GeoIP* gi, const char *addr) { - return GeoIP_name_by_addr(gi, addr); -} - -char *GeoIP_org_by_name (GeoIP* gi, const char *name) { - return GeoIP_name_by_name(gi, name); -} - -unsigned char GeoIP_database_edition (GeoIP* gi) { - return gi->databaseType; -} - -int GeoIP_charset( GeoIP* gi){ - return gi->charset; -} - -int GeoIP_set_charset( GeoIP* gi, int charset ){ - int old_charset = gi->charset; - gi->charset = charset; - return old_charset; -} - -int GeoIP_last_netmask (GeoIP* gi) { - return gi->netmask; -} - diff --git a/dlls/geoip/GeoIP.h b/dlls/geoip/GeoIP.h deleted file mode 100755 index 501cf470..00000000 --- a/dlls/geoip/GeoIP.h +++ /dev/null @@ -1,193 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */ -/* GeoIP.h - * - * Copyright (C) 2006 MaxMind LLC - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef GEOIP_H -#define GEOIP_H - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined _MSC_VER && _MSC_VER >= 1400 - /* Disable deprecation warnings concerning unsafe CRT functions */ - #define _CRT_SECURE_NO_DEPRECATE - - /* Replace the POSIX function with ISO C++ conformant one as it is now deprecated */ - #define fileno _fileno - - /* Disable deprecation warnings because MSVC8 seemingly thinks ISO C++ conformant functions are deprecated. */ - #pragma warning (disable : 4996) -#endif - -#include -#include -#include -#include /* for fstat */ -#include /* for fstat */ - -#define SEGMENT_RECORD_LENGTH 3 -#define STANDARD_RECORD_LENGTH 3 -#define ORG_RECORD_LENGTH 4 -#define MAX_RECORD_LENGTH 4 -#define NUM_DB_TYPES 20 - -typedef struct GeoIPTag { - FILE *GeoIPDatabase; - char *file_path; - unsigned char *cache; - unsigned char *index_cache; - unsigned int *databaseSegments; - char databaseType; - time_t mtime; - int flags; - char record_length; - int charset; /* 0 iso-8859-1 1 utf8 */ - int record_iter; /* used in GeoIP_next_record */ - int netmask; /* netmask of last lookup - set using depth in _GeoIP_seek_record */ -} GeoIP; - - -typedef enum { - GEOIP_CHARSET_ISO_8859_1 = 0, - GEOIP_CHARSET_UTF8 = 1 -} GeoIPCharset; - -typedef struct GeoIPRegionTag { - char country_code[3]; - char region[3]; -} GeoIPRegion; - -typedef enum { - GEOIP_STANDARD = 0, - GEOIP_MEMORY_CACHE = 1, - GEOIP_CHECK_CACHE = 2, - GEOIP_INDEX_CACHE = 4, -} GeoIPOptions; - -typedef enum { - GEOIP_COUNTRY_EDITION = 1, - GEOIP_REGION_EDITION_REV0 = 7, - GEOIP_CITY_EDITION_REV0 = 6, - GEOIP_ORG_EDITION = 5, - GEOIP_ISP_EDITION = 4, - GEOIP_CITY_EDITION_REV1 = 2, - GEOIP_REGION_EDITION_REV1 = 3, - GEOIP_PROXY_EDITION = 8, - GEOIP_ASNUM_EDITION = 9, - GEOIP_NETSPEED_EDITION = 10, - GEOIP_DOMAIN_EDITION = 11 -} GeoIPDBTypes; - -typedef enum { - GEOIP_ANON_PROXY = 1, - GEOIP_HTTP_X_FORWARDED_FOR_PROXY = 2, - GEOIP_HTTP_CLIENT_IP_PROXY = 3, -} GeoIPProxyTypes; - -typedef enum { - GEOIP_UNKNOWN_SPEED = 0, - GEOIP_DIALUP_SPEED = 1, - GEOIP_CABLEDSL_SPEED = 2, - GEOIP_CORPORATE_SPEED = 3, -} GeoIPNetspeedValues; - -extern char **GeoIPDBFileName; -extern const char * GeoIPDBDescription[NUM_DB_TYPES]; -extern const char *GeoIPCountryDBFileName; -extern const char *GeoIPRegionDBFileName; -extern const char *GeoIPCityDBFileName; -extern const char *GeoIPOrgDBFileName; -extern const char *GeoIPISPDBFileName; - -extern const char GeoIP_country_code[251][3]; -extern const char GeoIP_country_code3[251][4]; -extern const char * GeoIP_country_name[251]; -extern const char GeoIP_country_continent[251][3]; - -#ifdef DLL -#define GEOIP_API __declspec(dllexport) -#else -#define GEOIP_API -#endif /* DLL */ - -GEOIP_API void GeoIP_setup_custom_directory(char *dir); -GEOIP_API GeoIP* GeoIP_open_type (int type, int flags); -GEOIP_API GeoIP* GeoIP_new(int flags); -GEOIP_API GeoIP* GeoIP_open(const char * filename, int flags); -GEOIP_API int GeoIP_db_avail(int type); -GEOIP_API void GeoIP_delete(GeoIP* gi); -GEOIP_API const char *GeoIP_country_code_by_addr (GeoIP* gi, const char *addr); -GEOIP_API const char *GeoIP_country_code_by_name (GeoIP* gi, const char *host); -GEOIP_API const char *GeoIP_country_code3_by_addr (GeoIP* gi, const char *addr); -GEOIP_API const char *GeoIP_country_code3_by_name (GeoIP* gi, const char *host); -GEOIP_API const char *GeoIP_country_name_by_addr (GeoIP* gi, const char *addr); -GEOIP_API const char *GeoIP_country_name_by_name (GeoIP* gi, const char *host); -GEOIP_API const char *GeoIP_country_name_by_ipnum (GeoIP* gi, unsigned long ipnum); -GEOIP_API const char *GeoIP_country_code_by_ipnum (GeoIP* gi, unsigned long ipnum); -GEOIP_API const char *GeoIP_country_code3_by_ipnum (GeoIP* gi, unsigned long ipnum); - -/* Deprecated - for backwards compatibility only */ -GEOIP_API int GeoIP_country_id_by_addr (GeoIP* gi, const char *addr); -GEOIP_API int GeoIP_country_id_by_name (GeoIP* gi, const char *host); -GEOIP_API char *GeoIP_org_by_addr (GeoIP* gi, const char *addr); -GEOIP_API char *GeoIP_org_by_name (GeoIP* gi, const char *host); -/* End deprecated */ - -GEOIP_API int GeoIP_id_by_addr (GeoIP* gi, const char *addr); -GEOIP_API int GeoIP_id_by_name (GeoIP* gi, const char *host); -GEOIP_API int GeoIP_id_by_ipnum (GeoIP* gi, unsigned long ipnum); - -GEOIP_API GeoIPRegion * GeoIP_region_by_addr (GeoIP* gi, const char *addr); -GEOIP_API GeoIPRegion * GeoIP_region_by_name (GeoIP* gi, const char *host); -GEOIP_API GeoIPRegion * GeoIP_region_by_ipnum (GeoIP *gi, unsigned long ipnum); - -/* Warning - don't call this after GeoIP_assign_region_by_inetaddr calls */ -GEOIP_API void GeoIPRegion_delete (GeoIPRegion *gir); - -GEOIP_API void GeoIP_assign_region_by_inetaddr(GeoIP* gi, unsigned long inetaddr, GeoIPRegion *gir); - -/* Used to query GeoIP Organization, ISP and AS Number databases */ -GEOIP_API char *GeoIP_name_by_ipnum (GeoIP* gi, unsigned long ipnum); -GEOIP_API char *GeoIP_name_by_addr (GeoIP* gi, const char *addr); -GEOIP_API char *GeoIP_name_by_name (GeoIP* gi, const char *host); - -GEOIP_API char *GeoIP_database_info (GeoIP* gi); -GEOIP_API unsigned char GeoIP_database_edition (GeoIP* gi); - -GEOIP_API int GeoIP_charset (GeoIP* gi); -GEOIP_API int GeoIP_set_charset (GeoIP* gi, int charset); - -GEOIP_API int GeoIP_last_netmask (GeoIP* gi); - -/* Convert region code to region name */ -GEOIP_API const char * GeoIP_region_name_by_code(const char *country_code, const char *region_code); - -/* Get timezone from country and region code */ -GEOIP_API const char * GeoIP_time_zone_by_country_and_region(const char *country_code, const char *region_code); - -#ifdef BSD -#define memcpy(dest, src, n) bcopy(src, dest, n) -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* GEOIP_H */ From 58a64597e8b0f8607c34ce7c22c4d1eeb0c9785a Mon Sep 17 00:00:00 2001 From: Arkshine Date: Tue, 29 Jul 2014 11:31:26 +0200 Subject: [PATCH 28/71] Geoip: Import libmaxminddb library which supports Geoip2 databases. --- dlls/geoip/GeoIP2/maxminddb-compat-util.h | 167 ++ dlls/geoip/GeoIP2/maxminddb.c | 1790 +++++++++++++++++++++ dlls/geoip/GeoIP2/maxminddb.h | 204 +++ dlls/geoip/GeoIP2/maxminddb_config.h | 16 + 4 files changed, 2177 insertions(+) create mode 100644 dlls/geoip/GeoIP2/maxminddb-compat-util.h create mode 100644 dlls/geoip/GeoIP2/maxminddb.c create mode 100644 dlls/geoip/GeoIP2/maxminddb.h create mode 100644 dlls/geoip/GeoIP2/maxminddb_config.h diff --git a/dlls/geoip/GeoIP2/maxminddb-compat-util.h b/dlls/geoip/GeoIP2/maxminddb-compat-util.h new file mode 100644 index 00000000..e3f0320f --- /dev/null +++ b/dlls/geoip/GeoIP2/maxminddb-compat-util.h @@ -0,0 +1,167 @@ +#include +#include + +/* *INDENT-OFF* */ + +/* The memmem, strdup, and strndup functions were all copied from the + * FreeBSD source, along with the relevant copyright notice. + * + * It'd be nicer to simply use the functions available on the system if they + * exist, but there doesn't seem to be a good way to detect them without also + * defining things like _GNU_SOURCE, which we want to avoid, because then we + * end up _accidentally_ using GNU features without noticing, which then + * breaks on systems like OSX. + * + * C is fun! */ + +/* Applies to memmem implementation */ +/*- + * Copyright (c) 2005 Pascal Gloor + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +static void * +mmdb_memmem(const void *l, size_t l_len, const void *s, size_t s_len) +{ + register char *cur, *last; + const char *cl = (const char *)l; + const char *cs = (const char *)s; + + /* we need something to compare */ + if (l_len == 0 || s_len == 0) + return NULL; + + /* "s" must be smaller or equal to "l" */ + if (l_len < s_len) + return NULL; + + /* special case where s_len == 1 */ + if (s_len == 1) + return memchr(l, (int)*cs, l_len); + + /* the last position where its possible to find "s" in "l" */ + last = (char *)cl + l_len - s_len; + + for (cur = (char *)cl; cur <= last; cur++) + if (cur[0] == cs[0] && memcmp(cur, cs, s_len) == 0) + return cur; + + return NULL; +} + +/* Applies to strnlen implementation */ +/*- + * Copyright (c) 2009 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +static size_t +mmdb_strnlen(const char *s, size_t maxlen) +{ + size_t len; + + for (len = 0; len < maxlen; len++, s++) { + if (!*s) + break; + } + return (len); +} + +/* Applies to strdup and strndup implementation */ +/* + * Copyright (c) 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +static char * +mmdb_strdup(const char *str) +{ + size_t len; + char *copy; + + len = strlen(str) + 1; + if ((copy = malloc(len)) == NULL) + return (NULL); + memcpy(copy, str, len); + return (copy); +} + +static char * +mmdb_strndup(const char *str, size_t n) +{ + size_t len; + char *copy; + + len = mmdb_strnlen(str, n); + if ((copy = malloc(len + 1)) == NULL) + return (NULL); + memcpy(copy, str, len); + copy[len] = '\0'; + return (copy); +} +/* *INDENT-ON* */ diff --git a/dlls/geoip/GeoIP2/maxminddb.c b/dlls/geoip/GeoIP2/maxminddb.c new file mode 100644 index 00000000..d4ad1fef --- /dev/null +++ b/dlls/geoip/GeoIP2/maxminddb.c @@ -0,0 +1,1790 @@ +#if HAVE_CONFIG_H +#include +#endif +#include "maxminddb.h" +#include "maxminddb-compat-util.h" +#include +#include +#include +#include +#include + +#ifdef _WIN32 +#include +#include +#else +#include +#include +#include +#endif + +#define MMDB_DATA_SECTION_SEPARATOR (16) + +#ifdef MMDB_DEBUG +#define LOCAL +#define NO_PROTO +#define DEBUG_FUNC +#define DEBUG_MSG(msg) fprintf(stderr, msg "\n") +#define DEBUG_MSGF(fmt, ...) fprintf(stderr, fmt "\n", __VA_ARGS__) +#define DEBUG_BINARY(fmt, byte) \ + do { \ + char *binary = byte_to_binary(byte); \ + if (NULL == binary) { \ + fprintf(stderr, "Malloc failed in DEBUG_BINARY\n"); \ + abort(); \ + } \ + fprintf(stderr, fmt "\n", binary); \ + free(binary); \ + } while (0) +#define DEBUG_NL fprintf(stderr, "\n") +#else +#define LOCAL static +#define NO_PROTO static +#define DEBUG_MSG(...) +#define DEBUG_MSGF(...) +#define DEBUG_BINARY(...) +#define DEBUG_NL +#endif + +#ifdef MMDB_DEBUG +DEBUG_FUNC char *byte_to_binary(uint8_t byte) +{ + char *bits = malloc(sizeof(char) * 9); + if (NULL == bits) { + return bits; + } + + for (uint8_t i = 0; i < 8; i++) { + bits[i] = byte & (128 >> i) ? '1' : '0'; + } + bits[8] = '\0'; + + return bits; +} + +DEBUG_FUNC char *type_num_to_name(uint8_t num) +{ + switch (num) { + case 0: + return "extended"; + case 1: + return "pointer"; + case 2: + return "utf8_string"; + case 3: + return "double"; + case 4: + return "bytes"; + case 5: + return "uint16"; + case 6: + return "uint32"; + case 7: + return "map"; + case 8: + return "int32"; + case 9: + return "uint64"; + case 10: + return "uint128"; + case 11: + return "array"; + case 12: + return "container"; + case 13: + return "end_marker"; + case 14: + return "boolean"; + case 15: + return "float"; + default: + return "unknown type"; + } +} +#endif + +typedef struct record_info_s { + uint16_t record_length; + uint32_t (*left_record_getter)(const uint8_t *); + uint32_t (*right_record_getter)(const uint8_t *); + uint8_t right_record_offset; +} record_info_s; + +#define METADATA_MARKER "\xab\xcd\xefMaxMind.com" +/* This is 128kb */ +#define METADATA_BLOCK_MAX_SIZE 131072 + +/* *INDENT-OFF* */ +/* --prototypes automatically generated by dev-bin/regen-prototypes.pl - don't remove this comment */ +LOCAL const uint8_t *find_metadata(const uint8_t *file_content, + ssize_t file_size, uint32_t *metadata_size); +LOCAL int read_metadata(MMDB_s *mmdb); +LOCAL MMDB_s make_fake_metadata_db(MMDB_s *mmdb); +LOCAL uint16_t value_for_key_as_uint16(MMDB_entry_s *start, char *key); +LOCAL uint32_t value_for_key_as_uint32(MMDB_entry_s *start, char *key); +LOCAL uint64_t value_for_key_as_uint64(MMDB_entry_s *start, char *key); +LOCAL char *value_for_key_as_string(MMDB_entry_s *start, char *key); +LOCAL int populate_languages_metadata(MMDB_s *mmdb, MMDB_s *metadata_db, + MMDB_entry_s *metadata_start); +LOCAL int populate_description_metadata(MMDB_s *mmdb, MMDB_s *metadata_db, + MMDB_entry_s *metadata_start); +LOCAL int resolve_any_address(const char *ipstr, struct addrinfo **addresses); +LOCAL int find_address_in_search_tree(MMDB_s *mmdb, uint8_t *address, + sa_family_t address_family, + MMDB_lookup_result_s *result); +LOCAL record_info_s record_info_for_database(MMDB_s *mmdb); +LOCAL MMDB_ipv4_start_node_s find_ipv4_start_node(MMDB_s *mmdb); +LOCAL int populate_result(MMDB_s *mmdb, uint32_t node_count, uint32_t value, + uint16_t netmask, MMDB_lookup_result_s *result); +LOCAL uint32_t get_left_28_bit_record(const uint8_t *record); +LOCAL uint32_t get_right_28_bit_record(const uint8_t *record); +LOCAL int lookup_path_in_array(const char *path_elem, MMDB_s *mmdb, + MMDB_entry_data_s *entry_data); +LOCAL int lookup_path_in_map(const char *path_elem, MMDB_s *mmdb, + MMDB_entry_data_s *entry_data); +LOCAL int skip_map_or_array(MMDB_s *mmdb, MMDB_entry_data_s *entry_data); +LOCAL int decode_one_follow(MMDB_s *mmdb, uint32_t offset, + MMDB_entry_data_s *entry_data); +LOCAL int decode_one(MMDB_s *mmdb, uint32_t offset, + MMDB_entry_data_s *entry_data); +LOCAL int get_ext_type(int raw_ext_type); +LOCAL uint32_t get_ptr_from(uint8_t ctrl, uint8_t const *const ptr, + int ptr_size); +LOCAL int get_entry_data_list(MMDB_s *mmdb, uint32_t offset, + MMDB_entry_data_list_s *const entry_data_list); +LOCAL float get_ieee754_float(const uint8_t *restrict p); +LOCAL double get_ieee754_double(const uint8_t *restrict p); +LOCAL uint32_t get_uint32(const uint8_t *p); +LOCAL uint32_t get_uint24(const uint8_t *p); +LOCAL uint32_t get_uint16(const uint8_t *p); +LOCAL uint64_t get_uintX(const uint8_t *p, int length); +LOCAL int32_t get_sintX(const uint8_t *p, int length); +LOCAL MMDB_entry_data_list_s *new_entry_data_list(void); +LOCAL void free_mmdb_struct(MMDB_s *const mmdb); +LOCAL void free_languages_metadata(MMDB_s *mmdb); +LOCAL void free_descriptions_metadata(MMDB_s *mmdb); +LOCAL MMDB_entry_data_list_s *dump_entry_data_list( + FILE *stream, MMDB_entry_data_list_s *entry_data_list, int indent, + int *status); +LOCAL void print_indentation(FILE *stream, int i); +LOCAL char *bytes_to_hex(uint8_t *bytes, uint32_t size); +/* --prototypes end - don't remove this comment-- */ +/* *INDENT-ON* */ + +#define CHECKED_DECODE_ONE(mmdb, offset, entry_data) \ + do { \ + int status = decode_one(mmdb, offset, entry_data); \ + if (MMDB_SUCCESS != status) { \ + return status; \ + } \ + } while (0) + +#define CHECKED_DECODE_ONE_FOLLOW(mmdb, offset, entry_data) \ + do { \ + int status = decode_one_follow(mmdb, offset, entry_data); \ + if (MMDB_SUCCESS != status) { \ + return status; \ + } \ + } while (0) + +int MMDB_open(const char *const filename, uint32_t flags, MMDB_s *const mmdb) +{ + mmdb->file_content = NULL; + mmdb->data_section = NULL; + mmdb->metadata.database_type = NULL; + mmdb->metadata.languages.count = 0; + mmdb->metadata.description.count = 0; + + mmdb->filename = mmdb_strdup(filename); + if (NULL == mmdb->filename) { + free_mmdb_struct(mmdb); + return MMDB_OUT_OF_MEMORY_ERROR; + } + + ssize_t size; +#ifdef _WIN32 + HANDLE fd = CreateFileA(filename, GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (fd == INVALID_HANDLE_VALUE) { + free_mmdb_struct(mmdb); + return MMDB_FILE_OPEN_ERROR; + } + size = GetFileSize(fd, NULL); +#else + int fd = open(filename, O_RDONLY); + if (fd < 0) { + free_mmdb_struct(mmdb); + return MMDB_FILE_OPEN_ERROR; + } + + struct stat s; + fstat(fd, &s); + size = s.st_size; +#endif + + if ((flags & MMDB_MODE_MASK) == 0) { + flags |= MMDB_MODE_MMAP; + } + mmdb->flags = flags; + mmdb->file_size = size; + +#ifdef _WIN32 + HANDLE mmh = CreateFileMappingA(fd, NULL, PAGE_READONLY, 0, size, filename); + uint8_t *file_content = + (uint8_t *)MapViewOfFile(mmh, FILE_MAP_READ, 0, 0, 0); + if (file_content == NULL) { + CloseHandle(mmh); + CloseHandle(fd); + free_mmdb_struct(mmdb); + return MMDB_IO_ERROR; + } +#else + uint8_t *file_content = + (uint8_t *)mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); + if (MAP_FAILED == file_content) { + free_mmdb_struct(mmdb); + return MMDB_IO_ERROR; + } +#endif + + uint32_t metadata_size = 0; + const uint8_t *metadata = find_metadata(file_content, size, &metadata_size); + if (NULL == metadata) { + free_mmdb_struct(mmdb); + return MMDB_INVALID_METADATA_ERROR; + } + + mmdb->metadata_section = metadata; + mmdb->metadata_section_size = metadata_size; + + int status = read_metadata(mmdb); + if (MMDB_SUCCESS != status) { + free_mmdb_struct(mmdb); + return status; + } + + if (mmdb->metadata.binary_format_major_version != 2) { + free_mmdb_struct(mmdb); + return MMDB_UNKNOWN_DATABASE_FORMAT_ERROR; + } + +#ifdef _WIN32 + WSADATA wsa; + WSAStartup(MAKEWORD(2, 2), &wsa); + CloseHandle(fd); +#else + close(fd); +#endif + + uint32_t search_tree_size = mmdb->metadata.node_count * + mmdb->full_record_byte_size; + + mmdb->file_content = file_content; + mmdb->data_section = file_content + search_tree_size; + mmdb->data_section_size = mmdb->file_size - search_tree_size; + mmdb->metadata_section = metadata; + mmdb->ipv4_start_node.node_value = 0; + mmdb->ipv4_start_node.netmask = 0; + + return MMDB_SUCCESS; +} + +LOCAL const uint8_t *find_metadata(const uint8_t *file_content, + ssize_t file_size, uint32_t *metadata_size) +{ + ssize_t max_size = file_size > + METADATA_BLOCK_MAX_SIZE ? METADATA_BLOCK_MAX_SIZE : + file_size; + + uint8_t *search_area = (uint8_t *)(file_content + (file_size - max_size)); + uint8_t *tmp = search_area; + do { + tmp = mmdb_memmem(search_area, max_size, + METADATA_MARKER, strlen(METADATA_MARKER)); + + if (NULL != tmp) { + max_size -= tmp - search_area; + search_area = tmp; + } + } while (NULL != tmp && tmp != search_area); + + const uint8_t *metadata_start = search_area + strlen(METADATA_MARKER); + *metadata_size = file_size - (search_area - file_content); + + return metadata_start; +} + +LOCAL int read_metadata(MMDB_s *mmdb) +{ + /* We need to create a fake MMDB_s struct in order to decode values from + the metadata. The metadata is basically just like the data section, so we + want to use the same functions we use for the data section to get metadata + values. */ + MMDB_s metadata_db = make_fake_metadata_db(mmdb); + + MMDB_entry_s metadata_start = { + .mmdb = &metadata_db, + .offset = 0 + }; + + mmdb->metadata.node_count = + value_for_key_as_uint32(&metadata_start, "node_count"); + if (!mmdb->metadata.node_count) { + DEBUG_MSG("could not find node_count value in metadata"); + return MMDB_INVALID_METADATA_ERROR; + } + + mmdb->metadata.record_size = + value_for_key_as_uint16(&metadata_start, "record_size"); + if (!mmdb->metadata.record_size) { + DEBUG_MSG("could not find record_size value in metadata"); + return MMDB_INVALID_METADATA_ERROR; + } + + if (mmdb->metadata.record_size != 24 && mmdb->metadata.record_size != 28 + && mmdb->metadata.record_size != 32) { + DEBUG_MSGF("bad record size in metadata: %i", + mmdb->metadata.record_size); + return MMDB_UNKNOWN_DATABASE_FORMAT_ERROR; + } + + mmdb->metadata.ip_version = + value_for_key_as_uint16(&metadata_start, "ip_version"); + if (!mmdb->metadata.ip_version) { + DEBUG_MSG("could not find ip_version value in metadata"); + return MMDB_INVALID_METADATA_ERROR; + } + if (!(mmdb->metadata.ip_version == 4 || mmdb->metadata.ip_version == 6)) { + DEBUG_MSGF("ip_version value in metadata is not 4 or 6 - it was %i", + mmdb->metadata.ip_version); + return MMDB_INVALID_METADATA_ERROR; + } + + mmdb->metadata.database_type = + value_for_key_as_string(&metadata_start, "database_type"); + if (NULL == mmdb->metadata.database_type) { + DEBUG_MSG("could not find database_type value in metadata"); + return MMDB_INVALID_METADATA_ERROR; + } + + int status = + populate_languages_metadata(mmdb, &metadata_db, &metadata_start); + if (MMDB_SUCCESS != status) { + DEBUG_MSG("could not populate languages from metadata"); + return status; + } + + mmdb->metadata.binary_format_major_version = + value_for_key_as_uint16(&metadata_start, "binary_format_major_version"); + if (!mmdb->metadata.binary_format_major_version) { + DEBUG_MSG( + "could not find binary_format_major_version value in metadata"); + return MMDB_INVALID_METADATA_ERROR; + } + + mmdb->metadata.binary_format_minor_version = + value_for_key_as_uint16(&metadata_start, "binary_format_minor_version"); + + mmdb->metadata.build_epoch = + value_for_key_as_uint64(&metadata_start, "build_epoch"); + if (!mmdb->metadata.build_epoch) { + DEBUG_MSG("could not find build_epoch value in metadata"); + return MMDB_INVALID_METADATA_ERROR; + } + + status = populate_description_metadata(mmdb, &metadata_db, &metadata_start); + if (MMDB_SUCCESS != status) { + DEBUG_MSG("could not populate description from metadata"); + return status; + } + + mmdb->full_record_byte_size = mmdb->metadata.record_size * 2 / 8U; + + mmdb->depth = mmdb->metadata.ip_version == 4 ? 32 : 128; + + return MMDB_SUCCESS; +} + +LOCAL MMDB_s make_fake_metadata_db(MMDB_s *mmdb) +{ + MMDB_s fake_metadata_db = { + .data_section = mmdb->metadata_section, + .data_section_size = mmdb->metadata_section_size + }; + + return fake_metadata_db; +} + +LOCAL uint16_t value_for_key_as_uint16(MMDB_entry_s *start, char *key) +{ + MMDB_entry_data_s entry_data; + const char *path[] = { key, NULL }; + MMDB_aget_value(start, &entry_data, path); + return entry_data.uint16; +} + +LOCAL uint32_t value_for_key_as_uint32(MMDB_entry_s *start, char *key) +{ + MMDB_entry_data_s entry_data; + const char *path[] = { key, NULL }; + MMDB_aget_value(start, &entry_data, path); + return entry_data.uint32; +} + +LOCAL uint64_t value_for_key_as_uint64(MMDB_entry_s *start, char *key) +{ + MMDB_entry_data_s entry_data; + const char *path[] = { key, NULL }; + MMDB_aget_value(start, &entry_data, path); + return entry_data.uint64; +} + +LOCAL char *value_for_key_as_string(MMDB_entry_s *start, char *key) +{ + MMDB_entry_data_s entry_data; + const char *path[] = { key, NULL }; + MMDB_aget_value(start, &entry_data, path); + return mmdb_strndup((char *)entry_data.utf8_string, entry_data.data_size); +} + +LOCAL int populate_languages_metadata(MMDB_s *mmdb, MMDB_s *metadata_db, + MMDB_entry_s *metadata_start) +{ + MMDB_entry_data_s entry_data; + + const char *path[] = { "languages", NULL }; + MMDB_aget_value(metadata_start, &entry_data, path); + + if (MMDB_DATA_TYPE_ARRAY != entry_data.type) { + return MMDB_INVALID_METADATA_ERROR; + } + + MMDB_entry_s array_start = { + .mmdb = metadata_db, + .offset = entry_data.offset + }; + + MMDB_entry_data_list_s *member; + MMDB_get_entry_data_list(&array_start, &member); + + MMDB_entry_data_list_s *first_member = member; + + uint32_t array_size = member->entry_data.data_size; + mmdb->metadata.languages.count = 0; + mmdb->metadata.languages.names = malloc(array_size * sizeof(char *)); + if (NULL == mmdb->metadata.languages.names) { + return MMDB_OUT_OF_MEMORY_ERROR; + } + + for (uint32_t i = 0; i < array_size; i++) { + member = member->next; + if (MMDB_DATA_TYPE_UTF8_STRING != member->entry_data.type) { + return MMDB_INVALID_METADATA_ERROR; + } + + mmdb->metadata.languages.names[i] = + mmdb_strndup((char *)member->entry_data.utf8_string, + member->entry_data.data_size); + + if (NULL == mmdb->metadata.languages.names[i]) { + return MMDB_OUT_OF_MEMORY_ERROR; + } + // We assign this as we go so that if we fail a malloc and need to + // free it, the count is right. + mmdb->metadata.languages.count = i + 1; + } + + MMDB_free_entry_data_list(first_member); + + return MMDB_SUCCESS; +} + +LOCAL int populate_description_metadata(MMDB_s *mmdb, MMDB_s *metadata_db, + MMDB_entry_s *metadata_start) +{ + MMDB_entry_data_s entry_data; + + const char *path[] = { "description", NULL }; + MMDB_aget_value(metadata_start, &entry_data, path); + + if (MMDB_DATA_TYPE_MAP != entry_data.type) { + return MMDB_INVALID_METADATA_ERROR; + } + + MMDB_entry_s map_start = { + .mmdb = metadata_db, + .offset = entry_data.offset + }; + + MMDB_entry_data_list_s *member; + MMDB_get_entry_data_list(&map_start, &member); + + MMDB_entry_data_list_s *first_member = member; + + uint32_t map_size = member->entry_data.data_size; + mmdb->metadata.description.count = 0; + mmdb->metadata.description.descriptions = + malloc(map_size * sizeof(MMDB_description_s *)); + if (NULL == mmdb->metadata.description.descriptions) { + return MMDB_OUT_OF_MEMORY_ERROR; + } + + for (uint32_t i = 0; i < map_size; i++) { + mmdb->metadata.description.descriptions[i] = + malloc(sizeof(MMDB_description_s)); + if (NULL == mmdb->metadata.description.descriptions[i]) { + return MMDB_OUT_OF_MEMORY_ERROR; + } + + mmdb->metadata.description.count = i + 1; + mmdb->metadata.description.descriptions[i]->language = NULL; + mmdb->metadata.description.descriptions[i]->description = NULL; + + member = member->next; + + if (MMDB_DATA_TYPE_UTF8_STRING != member->entry_data.type) { + return MMDB_INVALID_METADATA_ERROR; + } + + mmdb->metadata.description.descriptions[i]->language = + mmdb_strndup((char *)member->entry_data.utf8_string, + member->entry_data.data_size); + + if (NULL == mmdb->metadata.description.descriptions[i]->language) { + return MMDB_OUT_OF_MEMORY_ERROR; + } + + member = member->next; + + if (MMDB_DATA_TYPE_UTF8_STRING != member->entry_data.type) { + return MMDB_INVALID_METADATA_ERROR; + } + + mmdb->metadata.description.descriptions[i]->description = + mmdb_strndup((char *)member->entry_data.utf8_string, + member->entry_data.data_size); + + if (NULL == mmdb->metadata.description.descriptions[i]->description) { + return MMDB_OUT_OF_MEMORY_ERROR; + } + } + + MMDB_free_entry_data_list(first_member); + + return MMDB_SUCCESS; +} + +MMDB_lookup_result_s MMDB_lookup_string(MMDB_s *const mmdb, + const char *const ipstr, + int *const gai_error, + int *const mmdb_error) +{ + MMDB_lookup_result_s result = { + .found_entry = false, + .netmask = 0, + .entry = { + .mmdb = mmdb, + .offset = 0 + } + }; + + struct addrinfo *addresses = NULL; + *gai_error = resolve_any_address(ipstr, &addresses); + + if (*gai_error) { + if (NULL != addresses) { + freeaddrinfo(addresses); + } + return result; + } + + if (mmdb->metadata.ip_version == 4 + && addresses->ai_addr->sa_family == AF_INET6) { + + *mmdb_error = MMDB_IPV6_LOOKUP_IN_IPV4_DATABASE_ERROR; + freeaddrinfo(addresses); + return result; + } + + result = MMDB_lookup_sockaddr(mmdb, addresses->ai_addr, mmdb_error); + + freeaddrinfo(addresses); + + return result; +} + +LOCAL int resolve_any_address(const char *ipstr, struct addrinfo **addresses) +{ + struct addrinfo hints = { + .ai_socktype = SOCK_STREAM + }; + int gai_status; + + if (NULL != strchr(ipstr, ':')) { + hints.ai_flags = AI_NUMERICHOST; +#if defined AI_V4MAPPED && !defined __FreeBSD__ + hints.ai_flags |= AI_V4MAPPED; +#endif + hints.ai_family = AF_INET6; + } else { + hints.ai_flags = AI_NUMERICHOST; + hints.ai_family = AF_INET; + } + + gai_status = getaddrinfo(ipstr, NULL, &hints, addresses); + if (gai_status) { + return gai_status; + } + + return 0; +} + +MMDB_lookup_result_s MMDB_lookup_sockaddr( + MMDB_s *const mmdb, + const struct sockaddr *const sockaddr, + int *const mmdb_error) +{ + MMDB_lookup_result_s result = { + .found_entry = false, + .netmask = 0, + .entry = { + .mmdb = mmdb, + .offset = 0 + } + }; + + uint8_t mapped_address[16], *address; + if (mmdb->metadata.ip_version == 4) { + if (sockaddr->sa_family == AF_INET6) { + return result; + } + address = (uint8_t *)&((struct sockaddr_in *)sockaddr)->sin_addr.s_addr; + } else { + if (sockaddr->sa_family == AF_INET6) { + address = + (uint8_t *)&((struct sockaddr_in6 *)sockaddr)->sin6_addr. + s6_addr; + } else { + address = mapped_address; + memset(address, 0, 12); + memcpy(address + 12, + &((struct sockaddr_in *)sockaddr)->sin_addr.s_addr, 4); + } + } + + *mmdb_error = + find_address_in_search_tree(mmdb, address, sockaddr->sa_family, + &result); + + return result; +} + +LOCAL int find_address_in_search_tree(MMDB_s *mmdb, uint8_t *address, + sa_family_t address_family, + MMDB_lookup_result_s *result) +{ + record_info_s record_info = record_info_for_database(mmdb); + if (0 == record_info.right_record_offset) { + return MMDB_UNKNOWN_DATABASE_FORMAT_ERROR; + } + + DEBUG_NL; + DEBUG_MSG("Looking for address in search tree"); + + uint32_t node_count = mmdb->metadata.node_count; + uint32_t value = 0; + uint16_t max_depth0 = mmdb->depth - 1; + uint16_t start_bit = max_depth0; + + if (mmdb->metadata.ip_version == 6 && address_family == AF_INET) { + MMDB_ipv4_start_node_s ipv4_start_node = find_ipv4_start_node(mmdb); + DEBUG_MSGF("IPv4 start node is %u (netmask %u)", + ipv4_start_node.node_value, ipv4_start_node.netmask); + /* We have an IPv6 database with no IPv4 data */ + if (ipv4_start_node.node_value >= node_count) { + return populate_result(mmdb, node_count, ipv4_start_node.node_value, + ipv4_start_node.netmask, result); + } + + value = ipv4_start_node.node_value; + start_bit -= ipv4_start_node.netmask; + } + + const uint8_t *search_tree = mmdb->file_content; + const uint8_t *record_pointer; + for (int current_bit = start_bit; current_bit >= 0; current_bit--) { + uint8_t bit_is_true = + address[(max_depth0 - current_bit) >> 3] + & (1U << (~(max_depth0 - current_bit) & 7)) ? 1 : 0; + + DEBUG_MSGF("Looking at bit %i - bit's value is %i", current_bit, + bit_is_true); + DEBUG_MSGF(" current node = %u", value); + + record_pointer = &search_tree[value * record_info.record_length]; + if (bit_is_true) { + record_pointer += record_info.right_record_offset; + value = record_info.right_record_getter(record_pointer); + } else { + value = record_info.left_record_getter(record_pointer); + } + + /* Ideally we'd check to make sure that a record never points to a + * previously seen value, but that's more complicated. For now, we can + * at least check that we don't end up at the top of the tree again. */ + if (0 == value) { + DEBUG_MSGF(" %s record has a value of 0", + bit_is_true ? "right" : "left"); + return MMDB_CORRUPT_SEARCH_TREE_ERROR; + } + + if (value >= node_count) { + return populate_result(mmdb, node_count, value, current_bit, result); + } else { + DEBUG_MSGF(" proceeding to search tree node %i", value); + } + } + + DEBUG_MSG( + "Reached the end of the address bits without leaving the search tree"); + + // We should not be able to reach this return. If we do, something very bad happened. + return MMDB_CORRUPT_SEARCH_TREE_ERROR; +} + +LOCAL record_info_s record_info_for_database(MMDB_s *mmdb) +{ + record_info_s record_info = { + .record_length = mmdb->full_record_byte_size, + .right_record_offset = 0 + }; + + if (record_info.record_length == 6) { + record_info.left_record_getter = &get_uint24; + record_info.right_record_getter = &get_uint24; + record_info.right_record_offset = 3; + } else if (record_info.record_length == 7) { + record_info.left_record_getter = &get_left_28_bit_record; + record_info.right_record_getter = &get_right_28_bit_record; + record_info.right_record_offset = 3; + } else if (record_info.record_length == 8) { + record_info.left_record_getter = &get_uint32; + record_info.right_record_getter = &get_uint32; + record_info.right_record_offset = 4; + } + + return record_info; +} + +LOCAL MMDB_ipv4_start_node_s find_ipv4_start_node(MMDB_s *mmdb) +{ + /* In a pathological case of a database with a single node search tree, + * this check will be true even after we've found the IPv4 start node, but + * that doesn't seem worth trying to fix. */ + if (mmdb->ipv4_start_node.node_value != 0) { + return mmdb->ipv4_start_node; + } + + record_info_s record_info = record_info_for_database(mmdb); + + const uint8_t *search_tree = mmdb->file_content; + uint32_t node_value = 0; + const uint8_t *record_pointer; + uint32_t netmask; + for (netmask = 0; netmask < 96; netmask++) { + record_pointer = &search_tree[node_value * record_info.record_length]; + node_value = record_info.left_record_getter(record_pointer); + /* This can happen if there's no IPv4 data _or_ if there is a subnet + * with data that contains the entire IPv4 range (like ::/64) */ + if (node_value >= mmdb->metadata.node_count) { + break; + } + } + + mmdb->ipv4_start_node.node_value = node_value; + mmdb->ipv4_start_node.netmask = netmask; + + return mmdb->ipv4_start_node; +} + +LOCAL int populate_result(MMDB_s *mmdb, uint32_t node_count, uint32_t value, + uint16_t netmask, MMDB_lookup_result_s *result) +{ + uint32_t offset = value - node_count; + DEBUG_MSGF(" data section offset is %i (record value = %i)", offset, value); + + if (offset > mmdb->data_section_size) { + return MMDB_CORRUPT_SEARCH_TREE_ERROR; + } + + result->netmask = mmdb->depth - netmask; + result->entry.offset = offset; + result->found_entry = result->entry.offset > 0 ? true : false; + return MMDB_SUCCESS; +} + +LOCAL uint32_t get_left_28_bit_record(const uint8_t *record) +{ + return record[0] * 65536 + record[1] * 256 + record[2] + + ((record[3] & 0xf0) << 20); +} + +LOCAL uint32_t get_right_28_bit_record(const uint8_t *record) +{ + uint32_t value = get_uint32(record); + return value & 0xfffffff; +} + +int MMDB_read_node(MMDB_s *const mmdb, uint32_t node_number, + MMDB_search_node_s *const node) +{ + record_info_s record_info = record_info_for_database(mmdb); + if (0 == record_info.right_record_offset) { + return MMDB_UNKNOWN_DATABASE_FORMAT_ERROR; + } + + if (node_number > mmdb->metadata.node_count) { + return MMDB_INVALID_NODE_NUMBER_ERROR; + } + + const uint8_t *search_tree = mmdb->file_content; + const uint8_t *record_pointer = + &search_tree[node_number * record_info.record_length]; + node->left_record = record_info.left_record_getter(record_pointer); + record_pointer += record_info.right_record_offset; + node->right_record = record_info.right_record_getter(record_pointer); + + return MMDB_SUCCESS; +} + +int MMDB_get_value(MMDB_entry_s *const start, + MMDB_entry_data_s *const entry_data, + ...) +{ + va_list path; + va_start(path, entry_data); + int status = MMDB_vget_value(start, entry_data, path); + va_end(path); + return status; +} + +int MMDB_vget_value(MMDB_entry_s *const start, + MMDB_entry_data_s *const entry_data, + va_list va_path) +{ + const char **path = NULL; + + int i = 0; + const char *path_elem; + while (NULL != (path_elem = va_arg(va_path, char *))) { + path = realloc(path, sizeof(const char *) * (i + 1)); + if (NULL == path) { + return MMDB_OUT_OF_MEMORY_ERROR; + } + + path[i] = mmdb_strdup(path_elem); + if (NULL == path[i]) { + return MMDB_OUT_OF_MEMORY_ERROR; + } + i++; + } + + path = realloc(path, sizeof(char *) * (i + 1)); + if (NULL == path) { + return MMDB_OUT_OF_MEMORY_ERROR; + } + path[i] = NULL; + + int status = MMDB_aget_value(start, entry_data, path); + + i = 0; + while (NULL != path[i]) { + free((void *)path[i]); + i++; + } + free(path); + + return status; +} + +int MMDB_aget_value(MMDB_entry_s *const start, + MMDB_entry_data_s *const entry_data, + const char *const *const path) +{ + MMDB_s *mmdb = start->mmdb; + uint32_t offset = start->offset; + + memset(entry_data, 0, sizeof(MMDB_entry_data_s)); + DEBUG_NL; + DEBUG_MSG("looking up value by path"); + + CHECKED_DECODE_ONE_FOLLOW(mmdb, offset, entry_data); + + DEBUG_NL; + DEBUG_MSGF("top level element is a %s", type_num_to_name(entry_data->type)); + + /* Can this happen? It'd probably represent a pathological case under + * normal use, but there's nothing preventing someone from passing an + * invalid MMDB_entry_s struct to this function */ + if (!entry_data->has_data) { + return MMDB_INVALID_LOOKUP_PATH_ERROR; + } + + const char *path_elem; + int i = 0; + while (NULL != (path_elem = path[i++])) { + DEBUG_NL; + DEBUG_MSGF("path elem = %s", path_elem); + + /* XXX - it'd be good to find a quicker way to skip through these + entries that doesn't involve decoding them + completely. Basically we need to just use the size from the + control byte to advance our pointer rather than calling + decode_one(). */ + if (entry_data->type == MMDB_DATA_TYPE_ARRAY) { + int status = lookup_path_in_array(path_elem, mmdb, entry_data); + if (MMDB_SUCCESS != status) { + memset(entry_data, 0, sizeof(MMDB_entry_data_s)); + return status; + } + } else if (entry_data->type == MMDB_DATA_TYPE_MAP) { + int status = lookup_path_in_map(path_elem, mmdb, entry_data); + if (MMDB_SUCCESS != status) { + memset(entry_data, 0, sizeof(MMDB_entry_data_s)); + return status; + } + } else { + /* Once we make the code traverse maps & arrays without calling + * decode_one() we can get rid of this. */ + memset(entry_data, 0, sizeof(MMDB_entry_data_s)); + return MMDB_LOOKUP_PATH_DOES_NOT_MATCH_DATA_ERROR; + } + } + + return MMDB_SUCCESS; +} + +LOCAL int lookup_path_in_array(const char *path_elem, MMDB_s *mmdb, + MMDB_entry_data_s *entry_data) +{ + uint32_t size = entry_data->data_size; + int array_index = strtol(path_elem, NULL, 10); + if (array_index < 0) { + return MMDB_INVALID_LOOKUP_PATH_ERROR; + } + + if ((uint32_t)array_index >= size) { + memset(entry_data, 0, sizeof(MMDB_entry_data_s)); + return MMDB_LOOKUP_PATH_DOES_NOT_MATCH_DATA_ERROR; + } + + for (int i = 0; i < array_index; i++) { + /* We don't want to follow a pointer here. If the next element is a + * pointer we simply skip it and keep going */ + CHECKED_DECODE_ONE(mmdb, entry_data->offset_to_next, entry_data); + int status = skip_map_or_array(mmdb, entry_data); + if (MMDB_SUCCESS != status) { + return status; + } + } + + MMDB_entry_data_s value; + CHECKED_DECODE_ONE_FOLLOW(mmdb, entry_data->offset_to_next, &value); + memcpy(entry_data, &value, sizeof(MMDB_entry_data_s)); + + return MMDB_SUCCESS; +} + +LOCAL int lookup_path_in_map(const char *path_elem, MMDB_s *mmdb, + MMDB_entry_data_s *entry_data) +{ + uint32_t size = entry_data->data_size; + uint32_t offset = entry_data->offset_to_next; + size_t path_elem_len = strlen(path_elem); + + while (size-- > 0) { + MMDB_entry_data_s key, value; + CHECKED_DECODE_ONE_FOLLOW(mmdb, offset, &key); + + uint32_t offset_to_value = key.offset_to_next; + + if (MMDB_DATA_TYPE_UTF8_STRING != key.type) { + return MMDB_INVALID_DATA_ERROR; + } + + if (key.data_size == path_elem_len && + !memcmp(path_elem, key.utf8_string, path_elem_len)) { + + DEBUG_MSG("found key matching path elem"); + + CHECKED_DECODE_ONE_FOLLOW(mmdb, offset_to_value, &value); + memcpy(entry_data, &value, sizeof(MMDB_entry_data_s)); + return MMDB_SUCCESS; + } else { + /* We don't want to follow a pointer here. If the next element is + * a pointer we simply skip it and keep going */ + CHECKED_DECODE_ONE(mmdb, offset_to_value, &value); + int status = skip_map_or_array(mmdb, &value); + if (MMDB_SUCCESS != status) { + return status; + } + offset = value.offset_to_next; + } + } + + memset(entry_data, 0, sizeof(MMDB_entry_data_s)); + return MMDB_LOOKUP_PATH_DOES_NOT_MATCH_DATA_ERROR; +} + +LOCAL int skip_map_or_array(MMDB_s *mmdb, MMDB_entry_data_s *entry_data) +{ + if (entry_data->type == MMDB_DATA_TYPE_MAP) { + uint32_t size = entry_data->data_size; + while (size-- > 0) { + CHECKED_DECODE_ONE(mmdb, entry_data->offset_to_next, entry_data); // key + CHECKED_DECODE_ONE(mmdb, entry_data->offset_to_next, entry_data); // value + int status = skip_map_or_array(mmdb, entry_data); + if (MMDB_SUCCESS != status) { + return status; + } + } + } else if (entry_data->type == MMDB_DATA_TYPE_ARRAY) { + uint32_t size = entry_data->data_size; + while (size-- > 0) { + CHECKED_DECODE_ONE(mmdb, entry_data->offset_to_next, entry_data); // value + int status = skip_map_or_array(mmdb, entry_data); + if (MMDB_SUCCESS != status) { + return status; + } + } + } + + return MMDB_SUCCESS; +} + +LOCAL int decode_one_follow(MMDB_s *mmdb, uint32_t offset, + MMDB_entry_data_s *entry_data) +{ + CHECKED_DECODE_ONE(mmdb, offset, entry_data); + if (entry_data->type == MMDB_DATA_TYPE_POINTER) { + /* The pointer could point to any part of the data section but the + * next entry for this particular offset may be the one after the + * pointer, not the one after whatever the pointer points to. This + * depends on whether the pointer points to something that is a simple + * value or a compound value. For a compound value, the next one is + * the one after the pointer result, not the one after the pointer. */ + uint32_t next = entry_data->offset_to_next; + CHECKED_DECODE_ONE(mmdb, entry_data->pointer, entry_data); + if (entry_data->type != MMDB_DATA_TYPE_MAP + && entry_data->type != MMDB_DATA_TYPE_ARRAY) { + + entry_data->offset_to_next = next; + } + } + + return MMDB_SUCCESS; +} + +#if !MMDB_UINT128_IS_BYTE_ARRAY +NO_PROTO mmdb_uint128_t get_uint128(const uint8_t *p, int length) +{ + mmdb_uint128_t value = 0; + while (length-- > 0) { + value <<= 8; + value += *p++; + } + return value; +} +#endif + +LOCAL int decode_one(MMDB_s *mmdb, uint32_t offset, + MMDB_entry_data_s *entry_data) +{ + const uint8_t *mem = mmdb->data_section; + + if (offset > mmdb->data_section_size) { + return MMDB_INVALID_DATA_ERROR; + } + + entry_data->offset = offset; + entry_data->has_data = true; + + DEBUG_NL; + DEBUG_MSGF("Offset: %i", offset); + + uint8_t ctrl = mem[offset++]; + DEBUG_BINARY("Control byte: %s", ctrl); + + int type = (ctrl >> 5) & 7; + DEBUG_MSGF("Type: %i (%s)", type, type_num_to_name(type)); + + if (type == MMDB_DATA_TYPE_EXTENDED) { + type = get_ext_type(mem[offset++]); + DEBUG_MSGF("Extended type: %i (%s)", type, type_num_to_name(type)); + } + + entry_data->type = type; + + if (type == MMDB_DATA_TYPE_POINTER) { + int psize = (ctrl >> 3) & 3; + DEBUG_MSGF("Pointer size: %i", psize); + + entry_data->pointer = get_ptr_from(ctrl, &mem[offset], psize); + DEBUG_MSGF("Pointer to: %i", entry_data->pointer); + + entry_data->data_size = psize + 1; + entry_data->offset_to_next = offset + psize + 1; + return MMDB_SUCCESS; + } + + uint32_t size = ctrl & 31; + switch (size) { + case 29: + size = 29 + mem[offset++]; + break; + case 30: + size = 285 + get_uint16(&mem[offset]); + offset += 2; + break; + case 31: + size = 65821 + get_uint24(&mem[offset]); + offset += 3; + default: + break; + } + + DEBUG_MSGF("Size: %i", size); + + if (type == MMDB_DATA_TYPE_MAP || type == MMDB_DATA_TYPE_ARRAY) { + entry_data->data_size = size; + entry_data->offset_to_next = offset; + return MMDB_SUCCESS; + } + + if (type == MMDB_DATA_TYPE_BOOLEAN) { + entry_data->boolean = size ? true : false; + entry_data->data_size = 0; + entry_data->offset_to_next = offset; + DEBUG_MSGF("boolean value: %s", entry_data->boolean ? "true" : "false"); + return MMDB_SUCCESS; + } + + if (type == MMDB_DATA_TYPE_UINT16) { + if (size > 2) { + return MMDB_INVALID_DATA_ERROR; + } + entry_data->uint16 = (uint16_t)get_uintX(&mem[offset], size); + DEBUG_MSGF("uint16 value: %u", entry_data->uint16); + } else if (type == MMDB_DATA_TYPE_UINT32) { + if (size > 4) { + return MMDB_INVALID_DATA_ERROR; + } + entry_data->uint32 = (uint32_t)get_uintX(&mem[offset], size); + DEBUG_MSGF("uint32 value: %u", entry_data->uint32); + } else if (type == MMDB_DATA_TYPE_INT32) { + if (size > 4) { + return MMDB_INVALID_DATA_ERROR; + } + entry_data->int32 = get_sintX(&mem[offset], size); + DEBUG_MSGF("int32 value: %i", entry_data->int32); + } else if (type == MMDB_DATA_TYPE_UINT64) { + if (size > 8) { + return MMDB_INVALID_DATA_ERROR; + } + entry_data->uint64 = get_uintX(&mem[offset], size); + DEBUG_MSGF("uint64 value: %" PRIu64, entry_data->uint64); + } else if (type == MMDB_DATA_TYPE_UINT128) { + if (size > 16) { + return MMDB_INVALID_DATA_ERROR; + } +#if MMDB_UINT128_IS_BYTE_ARRAY + memset(entry_data->uint128, 0, 16); + if (size > 0) { + memcpy(entry_data->uint128 + 16 - size, &mem[offset], size); + } +#else + entry_data->uint128 = get_uint128(&mem[offset], size); +#endif + } else if (type == MMDB_DATA_TYPE_FLOAT) { + if (size != 4) { + return MMDB_INVALID_DATA_ERROR; + } + size = 4; + entry_data->float_value = get_ieee754_float(&mem[offset]); + DEBUG_MSGF("float value: %f", entry_data->float_value); + } else if (type == MMDB_DATA_TYPE_DOUBLE) { + if (size != 8) { + return MMDB_INVALID_DATA_ERROR; + } + size = 8; + entry_data->double_value = get_ieee754_double(&mem[offset]); + DEBUG_MSGF("double value: %f", entry_data->double_value); + } else if (type == MMDB_DATA_TYPE_UTF8_STRING) { + entry_data->utf8_string = size == 0 ? "" : (char *)&mem[offset]; + entry_data->data_size = size; +#ifdef MMDB_DEBUG + char *string = mmdb_strndup(entry_data->utf8_string, + size > 50 ? 50 : size); + if (NULL == string) { + abort(); + } + DEBUG_MSGF("string value: %s", string); + free(string); +#endif + } else if (type == MMDB_DATA_TYPE_BYTES) { + entry_data->bytes = &mem[offset]; + entry_data->data_size = size; + } + + entry_data->offset_to_next = offset + size; + + return MMDB_SUCCESS; +} + +LOCAL int get_ext_type(int raw_ext_type) +{ + return 7 + raw_ext_type; +} + +LOCAL uint32_t get_ptr_from(uint8_t ctrl, uint8_t const *const ptr, + int ptr_size) +{ + uint32_t new_offset; + switch (ptr_size) { + case 0: + new_offset = (ctrl & 7) * 256 + ptr[0]; + break; + case 1: + new_offset = 2048 + (ctrl & 7) * 65536 + ptr[0] * 256 + ptr[1]; + break; + case 2: + new_offset = 2048 + 524288 + (ctrl & 7) * 16777216 + get_uint24(ptr); + break; + case 3: + default: + new_offset = get_uint32(ptr); + break; + } + return MMDB_DATA_SECTION_SEPARATOR + new_offset; +} + +int MMDB_get_metadata_as_entry_data_list( + MMDB_s *const mmdb, MMDB_entry_data_list_s **const entry_data_list) +{ + MMDB_s metadata_db = make_fake_metadata_db(mmdb); + + MMDB_entry_s metadata_start = { + .mmdb = &metadata_db, + .offset = 0 + }; + + return MMDB_get_entry_data_list(&metadata_start, entry_data_list); +} + +int MMDB_get_entry_data_list( + MMDB_entry_s *start, MMDB_entry_data_list_s **const entry_data_list) +{ + *entry_data_list = new_entry_data_list(); + if (NULL == entry_data_list) { + return MMDB_OUT_OF_MEMORY_ERROR; + } + return get_entry_data_list(start->mmdb, start->offset, *entry_data_list); +} + +LOCAL int get_entry_data_list(MMDB_s *mmdb, uint32_t offset, + MMDB_entry_data_list_s *const entry_data_list) +{ + CHECKED_DECODE_ONE(mmdb, offset, &entry_data_list->entry_data); + + switch (entry_data_list->entry_data.type) { + case MMDB_DATA_TYPE_POINTER: + { + uint32_t next_offset = entry_data_list->entry_data.offset_to_next; + uint32_t last_offset; + while (entry_data_list->entry_data.type == + MMDB_DATA_TYPE_POINTER) { + CHECKED_DECODE_ONE(mmdb, last_offset = + entry_data_list->entry_data.pointer, + &entry_data_list->entry_data); + } + + if (entry_data_list->entry_data.type == MMDB_DATA_TYPE_ARRAY + || entry_data_list->entry_data.type == MMDB_DATA_TYPE_MAP) { + + int status = + get_entry_data_list(mmdb, last_offset, entry_data_list); + if (MMDB_SUCCESS != status) { + return status; + } + } + entry_data_list->entry_data.offset_to_next = next_offset; + } + break; + case MMDB_DATA_TYPE_ARRAY: + { + uint32_t array_size = entry_data_list->entry_data.data_size; + uint32_t array_offset = entry_data_list->entry_data.offset_to_next; + MMDB_entry_data_list_s *previous = entry_data_list; + while (array_size-- > 0) { + MMDB_entry_data_list_s *entry_data_list_to = previous->next = + new_entry_data_list(); + if (NULL == entry_data_list_to) { + return MMDB_OUT_OF_MEMORY_ERROR; + } + + int status = + get_entry_data_list(mmdb, array_offset, entry_data_list_to); + if (MMDB_SUCCESS != status) { + return status; + } + + array_offset = entry_data_list_to->entry_data.offset_to_next; + while (previous->next) { + previous = previous->next; + } + } + entry_data_list->entry_data.offset_to_next = array_offset; + + } + break; + case MMDB_DATA_TYPE_MAP: + { + uint32_t size = entry_data_list->entry_data.data_size; + + offset = entry_data_list->entry_data.offset_to_next; + MMDB_entry_data_list_s *previous = entry_data_list; + while (size-- > 0) { + MMDB_entry_data_list_s *entry_data_list_to = previous->next = + new_entry_data_list(); + if (NULL == entry_data_list_to) { + return MMDB_OUT_OF_MEMORY_ERROR; + } + + int status = + get_entry_data_list(mmdb, offset, entry_data_list_to); + if (MMDB_SUCCESS != status) { + return status; + } + + while (previous->next) { + previous = previous->next; + } + + offset = entry_data_list_to->entry_data.offset_to_next; + entry_data_list_to = previous->next = + new_entry_data_list(); + + if (NULL == entry_data_list_to) { + return MMDB_OUT_OF_MEMORY_ERROR; + } + + status = get_entry_data_list(mmdb, offset, entry_data_list_to); + if (MMDB_SUCCESS != status) { + return status; + } + + while (previous->next) { + previous = previous->next; + } + offset = entry_data_list_to->entry_data.offset_to_next; + } + entry_data_list->entry_data.offset_to_next = offset; + } + break; + default: + break; + } + + return MMDB_SUCCESS; +} + +LOCAL float get_ieee754_float(const uint8_t *restrict p) +{ + volatile float f; + uint8_t *q = (void *)&f; +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + q[3] = p[0]; + q[2] = p[1]; + q[1] = p[2]; + q[0] = p[3]; +#else + memcpy(q, p, 4); +#endif + return f; +} + +LOCAL double get_ieee754_double(const uint8_t *restrict p) +{ + volatile double d; + uint8_t *q = (void *)&d; +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + q[7] = p[0]; + q[6] = p[1]; + q[5] = p[2]; + q[4] = p[3]; + q[3] = p[4]; + q[2] = p[5]; + q[1] = p[6]; + q[0] = p[7]; +#else + memcpy(q, p, 8); +#endif + + return d; +} + +LOCAL uint32_t get_uint32(const uint8_t *p) +{ + return p[0] * 16777216U + p[1] * 65536 + p[2] * 256 + p[3]; +} + +LOCAL uint32_t get_uint24(const uint8_t *p) +{ + return p[0] * 65536U + p[1] * 256 + p[2]; +} + +LOCAL uint32_t get_uint16(const uint8_t *p) +{ + return p[0] * 256U + p[1]; +} + +LOCAL uint64_t get_uintX(const uint8_t *p, int length) +{ + uint64_t value = 0; + while (length-- > 0) { + value <<= 8; + value += *p++; + } + return value; +} + +LOCAL int32_t get_sintX(const uint8_t *p, int length) +{ + return (int32_t)get_uintX(p, length); +} + +LOCAL MMDB_entry_data_list_s *new_entry_data_list(void) +{ + /* We need calloc here in order to ensure that the ->next pointer in the + * struct doesn't point to some random address. */ + return calloc(1, sizeof(MMDB_entry_data_list_s)); +} + +void MMDB_free_entry_data_list(MMDB_entry_data_list_s *const entry_data_list) +{ + if (entry_data_list == NULL) { + return; + } + if (entry_data_list->next) { + MMDB_free_entry_data_list(entry_data_list->next); + } + free(entry_data_list); +} + +void MMDB_close(MMDB_s *const mmdb) +{ + free_mmdb_struct(mmdb); +} + +LOCAL void free_mmdb_struct(MMDB_s *const mmdb) +{ + if (!mmdb) { + return; + } + + if (NULL != mmdb->filename) { + free((void *)mmdb->filename); + } + if (NULL != mmdb->file_content) { +#ifdef _WIN32 + UnmapViewOfFile(mmdb->file_content); + /* Winsock is only initialized if open was successful so we only have + * to cleanup then. */ + WSACleanup(); +#else + munmap((void *)mmdb->file_content, mmdb->file_size); +#endif + } + + if (NULL != mmdb->metadata.database_type) { + free((void *)mmdb->metadata.database_type); + } + + free_languages_metadata(mmdb); + free_descriptions_metadata(mmdb); +} + +LOCAL void free_languages_metadata(MMDB_s *mmdb) +{ + if (!mmdb->metadata.languages.count) { + return; + } + + for (size_t i = 0; i < mmdb->metadata.languages.count; i++) { + free((char *)mmdb->metadata.languages.names[i]); + } + free(mmdb->metadata.languages.names); +} + +LOCAL void free_descriptions_metadata(MMDB_s *mmdb) +{ + if (!mmdb->metadata.description.count) { + return; + } + + for (size_t i = 0; i < mmdb->metadata.description.count; i++) { + if (NULL != mmdb->metadata.description.descriptions[i]) { + if (NULL != + mmdb->metadata.description.descriptions[i]->language) { + free( + (char *)mmdb->metadata.description.descriptions[i]-> + language); + } + + if (NULL != + mmdb->metadata.description.descriptions[i]->description) { + free( + (char *)mmdb->metadata.description.descriptions[i]-> + description); + } + free(mmdb->metadata.description.descriptions[i]); + } + } + + free(mmdb->metadata.description.descriptions); +} + +const char *MMDB_lib_version(void) +{ + return PACKAGE_VERSION; +} + +int MMDB_dump_entry_data_list(FILE *const stream, + MMDB_entry_data_list_s *const entry_data_list, + int indent) +{ + int status; + dump_entry_data_list(stream, entry_data_list, indent, &status); + return status; +} + +LOCAL MMDB_entry_data_list_s *dump_entry_data_list( + FILE *stream, MMDB_entry_data_list_s *entry_data_list, int indent, + int *status) +{ + switch (entry_data_list->entry_data.type) { + case MMDB_DATA_TYPE_MAP: + { + uint32_t size = entry_data_list->entry_data.data_size; + + print_indentation(stream, indent); + fprintf(stream, "{\n"); + indent += 2; + + for (entry_data_list = entry_data_list->next; + size && entry_data_list; size--) { + + char *key = + mmdb_strndup( + (char *)entry_data_list->entry_data.utf8_string, + entry_data_list->entry_data.data_size); + if (NULL == key) { + *status = MMDB_OUT_OF_MEMORY_ERROR; + return NULL; + } + + print_indentation(stream, indent); + fprintf(stream, "\"%s\": \n", key); + free(key); + + entry_data_list = entry_data_list->next; + entry_data_list = + dump_entry_data_list(stream, entry_data_list, indent + 2, + status); + + if (MMDB_SUCCESS != *status) { + return NULL; + } + } + + indent -= 2; + print_indentation(stream, indent); + fprintf(stream, "}\n"); + } + break; + case MMDB_DATA_TYPE_ARRAY: + { + uint32_t size = entry_data_list->entry_data.data_size; + + print_indentation(stream, indent); + fprintf(stream, "[\n"); + indent += 2; + + for (entry_data_list = entry_data_list->next; + size && entry_data_list; size--) { + entry_data_list = + dump_entry_data_list(stream, entry_data_list, indent, + status); + if (MMDB_SUCCESS != *status) { + return NULL; + } + } + + indent -= 2; + print_indentation(stream, indent); + fprintf(stream, "]\n"); + } + break; + case MMDB_DATA_TYPE_UTF8_STRING: + { + char *string = + mmdb_strndup((char *)entry_data_list->entry_data.utf8_string, + entry_data_list->entry_data.data_size); + if (NULL == string) { + *status = MMDB_OUT_OF_MEMORY_ERROR; + return NULL; + } + print_indentation(stream, indent); + fprintf(stream, "\"%s\" \n", string); + free(string); + entry_data_list = entry_data_list->next; + } + break; + case MMDB_DATA_TYPE_BYTES: + { + char *hex_string = + bytes_to_hex((uint8_t *)entry_data_list->entry_data.bytes, + entry_data_list->entry_data.data_size); + if (NULL == hex_string) { + *status = MMDB_OUT_OF_MEMORY_ERROR; + return NULL; + } + + print_indentation(stream, indent); + fprintf(stream, "%s \n", hex_string); + free(hex_string); + + entry_data_list = entry_data_list->next; + } + break; + case MMDB_DATA_TYPE_DOUBLE: + print_indentation(stream, indent); + fprintf(stream, "%f \n", + entry_data_list->entry_data.double_value); + entry_data_list = entry_data_list->next; + break; + case MMDB_DATA_TYPE_FLOAT: + print_indentation(stream, indent); + fprintf(stream, "%f \n", + entry_data_list->entry_data.float_value); + entry_data_list = entry_data_list->next; + break; + case MMDB_DATA_TYPE_UINT16: + print_indentation(stream, indent); + fprintf(stream, "%u \n", entry_data_list->entry_data.uint16); + entry_data_list = entry_data_list->next; + break; + case MMDB_DATA_TYPE_UINT32: + print_indentation(stream, indent); + fprintf(stream, "%u \n", entry_data_list->entry_data.uint32); + entry_data_list = entry_data_list->next; + break; + case MMDB_DATA_TYPE_BOOLEAN: + print_indentation(stream, indent); + fprintf(stream, "%s \n", + entry_data_list->entry_data.boolean ? "true" : "false"); + entry_data_list = entry_data_list->next; + break; + case MMDB_DATA_TYPE_UINT64: + print_indentation(stream, indent); + fprintf(stream, "%" PRIu64 " \n", + entry_data_list->entry_data.uint64); + entry_data_list = entry_data_list->next; + break; + case MMDB_DATA_TYPE_UINT128: + print_indentation(stream, indent); +#if MMDB_UINT128_IS_BYTE_ARRAY + char *hex_string = + bytes_to_hex((uint8_t *)entry_data_list->entry_data.uint128, 16); + fprintf(stream, "0x%s \n", hex_string); + free(hex_string); +#else + uint64_t high = entry_data_list->entry_data.uint128 >> 64; + uint64_t low = (uint64_t)entry_data_list->entry_data.uint128; + fprintf(stream, "0x%016" PRIX64 "%016" PRIX64 " \n", high, + low); +#endif + entry_data_list = entry_data_list->next; + break; + case MMDB_DATA_TYPE_INT32: + print_indentation(stream, indent); + fprintf(stream, "%d \n", entry_data_list->entry_data.int32); + entry_data_list = entry_data_list->next; + break; + default: + *status = MMDB_INVALID_DATA_ERROR; + return NULL; + } + + *status = MMDB_SUCCESS; + return entry_data_list; +} + +LOCAL void print_indentation(FILE *stream, int i) +{ + char buffer[1024]; + int size = i >= 1024 ? 1023 : i; + memset(buffer, 32, size); + buffer[size] = '\0'; + fputs(buffer, stream); +} + +LOCAL char *bytes_to_hex(uint8_t *bytes, uint32_t size) +{ + char *hex_string = malloc((size * 2) + 1); + char *hex_pointer = hex_string; + + for (uint32_t i = 0; i < size; i++) { + sprintf(hex_pointer + (2 * i), "%02X", bytes[i]); + } + + return hex_string; +} + +const char *MMDB_strerror(int error_code) +{ + switch (error_code) { + case MMDB_SUCCESS: + return "Success (not an error)"; + case MMDB_FILE_OPEN_ERROR: + return "Error opening the specified MaxMind DB file"; + case MMDB_CORRUPT_SEARCH_TREE_ERROR: + return "The MaxMind DB file's search tree is corrupt"; + case MMDB_INVALID_METADATA_ERROR: + return "The MaxMind DB file contains invalid metadata"; + case MMDB_IO_ERROR: + return "An attempt to read data from the MaxMind DB file failed"; + case MMDB_OUT_OF_MEMORY_ERROR: + return "A memory allocation call failed"; + case MMDB_UNKNOWN_DATABASE_FORMAT_ERROR: + return + "The MaxMind DB file is in a format this library can't handle (unknown record size or binary format version)"; + case MMDB_INVALID_DATA_ERROR: + return + "The MaxMind DB file's data section contains bad data (unknown data type or corrupt data)"; + case MMDB_INVALID_LOOKUP_PATH_ERROR: + return + "The lookup path contained an invalid value (like a negative integer for an array index)"; + case MMDB_LOOKUP_PATH_DOES_NOT_MATCH_DATA_ERROR: + return + "The lookup path does not match the data (key that doesn't exist, array index bigger than the array, expected array or map where none exists)"; + case MMDB_INVALID_NODE_NUMBER_ERROR: + return + "The MMDB_read_node function was called with a node number that does not exist in the search tree"; + case MMDB_IPV6_LOOKUP_IN_IPV4_DATABASE_ERROR: + return + "You attempted to look up an IPv6 address in an IPv4-only database"; + default: + return "Unknown error code"; + } +} diff --git a/dlls/geoip/GeoIP2/maxminddb.h b/dlls/geoip/GeoIP2/maxminddb.h new file mode 100644 index 00000000..8d4318f7 --- /dev/null +++ b/dlls/geoip/GeoIP2/maxminddb.h @@ -0,0 +1,204 @@ +#ifndef MAXMINDDB_H +#define MAXMINDDB_H + +#ifndef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 200112L +#endif + +#include +#include +#include +#include +#include +#include + +#ifdef _WIN32 +#include +#include +typedef ADDRESS_FAMILY sa_family_t; +#else +#include +#include +#include +#endif + +#define MMDB_DATA_TYPE_EXTENDED (0) +#define MMDB_DATA_TYPE_POINTER (1) +#define MMDB_DATA_TYPE_UTF8_STRING (2) +#define MMDB_DATA_TYPE_DOUBLE (3) +#define MMDB_DATA_TYPE_BYTES (4) +#define MMDB_DATA_TYPE_UINT16 (5) +#define MMDB_DATA_TYPE_UINT32 (6) +#define MMDB_DATA_TYPE_MAP (7) +#define MMDB_DATA_TYPE_INT32 (8) +#define MMDB_DATA_TYPE_UINT64 (9) +#define MMDB_DATA_TYPE_UINT128 (10) +#define MMDB_DATA_TYPE_ARRAY (11) +#define MMDB_DATA_TYPE_CONTAINER (12) +#define MMDB_DATA_TYPE_END_MARKER (13) +#define MMDB_DATA_TYPE_BOOLEAN (14) +#define MMDB_DATA_TYPE_FLOAT (15) + +/* GEOIPDB flags */ +#define MMDB_MODE_MMAP (1) +#define MMDB_MODE_MASK (7) + +/* GEOIPDB err codes */ +#define MMDB_SUCCESS (0) +#define MMDB_FILE_OPEN_ERROR (1) +#define MMDB_CORRUPT_SEARCH_TREE_ERROR (2) +#define MMDB_INVALID_METADATA_ERROR (3) +#define MMDB_IO_ERROR (4) +#define MMDB_OUT_OF_MEMORY_ERROR (5) +#define MMDB_UNKNOWN_DATABASE_FORMAT_ERROR (6) +#define MMDB_INVALID_DATA_ERROR (7) +#define MMDB_INVALID_LOOKUP_PATH_ERROR (8) +#define MMDB_LOOKUP_PATH_DOES_NOT_MATCH_DATA_ERROR (9) +#define MMDB_INVALID_NODE_NUMBER_ERROR (10) +#define MMDB_IPV6_LOOKUP_IN_IPV4_DATABASE_ERROR (11) + +#if !(MMDB_UINT128_IS_BYTE_ARRAY) +#if MMDB_UINT128_USING_MODE +typedef unsigned int mmdb_uint128_t __attribute__ ((__mode__(TI))); +#else +typedef unsigned __int128 mmdb_uint128_t; +#endif +#endif + +/* This is a pointer into the data section for a given IP address lookup */ +typedef struct MMDB_entry_s { + struct MMDB_s *mmdb; + uint32_t offset; +} MMDB_entry_s; + +typedef struct MMDB_lookup_result_s { + bool found_entry; + MMDB_entry_s entry; + uint16_t netmask; +} MMDB_lookup_result_s; + +typedef struct MMDB_entry_data_s { + bool has_data; + union { + uint32_t pointer; + const char *utf8_string; + double double_value; + const uint8_t *bytes; + uint16_t uint16; + uint32_t uint32; + int32_t int32; + uint64_t uint64; +#if MMDB_UINT128_IS_BYTE_ARRAY + uint8_t uint128[16]; +#else + mmdb_uint128_t uint128; +#endif + bool boolean; + float float_value; + }; + /* This is a 0 if a given entry cannot be found. This can only happen + * when a call to MMDB_(v)get_value() asks for hash keys or array + * indices that don't exist. */ + uint32_t offset; + /* This is the next entry in the data section, but it's really only + * relevant for entries that part of a larger map or array + * struct. There's no good reason for an end user to look at this + * directly. */ + uint32_t offset_to_next; + /* This is only valid for strings, utf8_strings or binary data */ + uint32_t data_size; + /* This is an MMDB_DATA_TYPE_* constant */ + uint32_t type; +} MMDB_entry_data_s; + +/* This is the return type when someone asks for all the entry data in a map or array */ +typedef struct MMDB_entry_data_list_s { + MMDB_entry_data_s entry_data; + struct MMDB_entry_data_list_s *next; +} MMDB_entry_data_list_s; + +typedef struct MMDB_description_s { + const char *language; + const char *description; +} MMDB_description_s; + +typedef struct MMDB_metadata_s { + uint32_t node_count; + uint16_t record_size; + uint16_t ip_version; + const char *database_type; + struct { + size_t count; + const char **names; + } languages; + uint16_t binary_format_major_version; + uint16_t binary_format_minor_version; + uint64_t build_epoch; + struct { + size_t count; + MMDB_description_s **descriptions; + } description; +} MMDB_metadata_s; + +typedef struct MMDB_ipv4_start_node_s { + uint16_t netmask; + uint32_t node_value; +} MMDB_ipv4_start_node_s; + +typedef struct MMDB_s { + uint32_t flags; + const char *filename; + ssize_t file_size; + const uint8_t *file_content; + const uint8_t *data_section; + uint32_t data_section_size; + const uint8_t *metadata_section; + uint32_t metadata_section_size; + uint16_t full_record_byte_size; + uint16_t depth; + MMDB_ipv4_start_node_s ipv4_start_node; + MMDB_metadata_s metadata; +} MMDB_s; + +typedef struct MMDB_search_node_s { + uint64_t left_record; + uint64_t right_record; +} MMDB_search_node_s; + + /* *INDENT-OFF* */ + /* --prototypes automatically generated by dev-bin/regen-prototypes.pl - don't remove this comment */ + extern int MMDB_open(const char *const filename, uint32_t flags, MMDB_s *const mmdb); + extern MMDB_lookup_result_s MMDB_lookup_string(MMDB_s *const mmdb, + const char *const ipstr, + int *const gai_error, + int *const mmdb_error); + extern MMDB_lookup_result_s MMDB_lookup_sockaddr( + MMDB_s *const mmdb, + const struct sockaddr *const sockaddr, + int *const mmdb_error); + extern int MMDB_read_node(MMDB_s *const mmdb, uint32_t node_number, + MMDB_search_node_s *const node); + extern int MMDB_get_value(MMDB_entry_s *const start, + MMDB_entry_data_s *const entry_data, + ...); + extern int MMDB_vget_value(MMDB_entry_s *const start, + MMDB_entry_data_s *const entry_data, + va_list va_path); + extern int MMDB_aget_value(MMDB_entry_s *const start, + MMDB_entry_data_s *const entry_data, + const char *const *const path); + extern int MMDB_get_metadata_as_entry_data_list( + MMDB_s *const mmdb, MMDB_entry_data_list_s **const entry_data_list); + extern int MMDB_get_entry_data_list( + MMDB_entry_s *start, MMDB_entry_data_list_s **const entry_data_list); + extern void MMDB_free_entry_data_list(MMDB_entry_data_list_s *const entry_data_list); + extern void MMDB_close(MMDB_s *const mmdb); + extern const char *MMDB_lib_version(void); + extern int MMDB_dump_entry_data_list(FILE *const stream, + MMDB_entry_data_list_s *const entry_data_list, + int indent); + extern const char *MMDB_strerror(int error_code); + /* --prototypes end - don't remove this comment-- */ + /* *INDENT-ON* */ + +#endif /* MAXMINDDB_H */ diff --git a/dlls/geoip/GeoIP2/maxminddb_config.h b/dlls/geoip/GeoIP2/maxminddb_config.h new file mode 100644 index 00000000..4c9f70eb --- /dev/null +++ b/dlls/geoip/GeoIP2/maxminddb_config.h @@ -0,0 +1,16 @@ +#ifndef MAXMINDDB_CONFIG_H +#define MAXMINDDB_CONFIG_H + +#define PACKAGE_VERSION "0.5.6" + +#ifndef MMDB_UINT128_USING_MODE +/* Define as 1 if we we use unsigned int __atribute__ ((__mode__(TI))) for uint128 values */ +#define MMDB_UINT128_USING_MODE 0 +#endif + +#ifndef MMDB_UINT128_IS_BYTE_ARRAY +/* Define as 1 if we don't have an unsigned __int128 type */ +#define MMDB_UINT128_IS_BYTE_ARRAY 1 +#endif + +#endif /* MAXMINDDB_CONFIG_H */ From 526a70a6d75c4d4e0b4296375d2242d94eb8235f Mon Sep 17 00:00:00 2001 From: Arkshine Date: Tue, 29 Jul 2014 11:42:29 +0200 Subject: [PATCH 29/71] Geoip: Fix compilation #1 MSVC doesn't fully implement C99, ssize_t, stdbool.h, etc have to be provided manually. Most of fixes are casting type and unpacking structure. --- dlls/geoip/GeoIP2/inttypes.h | 305 ++++++++++++++++++++++ dlls/geoip/GeoIP2/maxminddb-compat-util.h | 6 +- dlls/geoip/GeoIP2/maxminddb.c | 126 ++++----- dlls/geoip/GeoIP2/maxminddb.h | 7 +- dlls/geoip/GeoIP2/stdbool.h | 46 ++++ 5 files changed, 417 insertions(+), 73 deletions(-) create mode 100644 dlls/geoip/GeoIP2/inttypes.h create mode 100644 dlls/geoip/GeoIP2/stdbool.h diff --git a/dlls/geoip/GeoIP2/inttypes.h b/dlls/geoip/GeoIP2/inttypes.h new file mode 100644 index 00000000..0e8af69c --- /dev/null +++ b/dlls/geoip/GeoIP2/inttypes.h @@ -0,0 +1,305 @@ +// ISO C9x compliant inttypes.h for Microsoft Visual Studio +// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 +// +// Copyright (c) 2006 Alexander Chemeris +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. The name of the author may be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _MSC_VER // [ +#error "Use this header only with Microsoft Visual C++ compilers!" +#endif // _MSC_VER ] + +#ifndef _MSC_INTTYPES_H_ // [ +#define _MSC_INTTYPES_H_ + +#if _MSC_VER > 1000 +#pragma once +#endif + +#include + +// 7.8 Format conversion of integer types + +typedef struct { + intmax_t quot; + intmax_t rem; +} imaxdiv_t; + +// 7.8.1 Macros for format specifiers + +#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198 + +// The fprintf macros for signed integers are: +#define PRId8 "d" +#define PRIi8 "i" +#define PRIdLEAST8 "d" +#define PRIiLEAST8 "i" +#define PRIdFAST8 "d" +#define PRIiFAST8 "i" + +#define PRId16 "hd" +#define PRIi16 "hi" +#define PRIdLEAST16 "hd" +#define PRIiLEAST16 "hi" +#define PRIdFAST16 "hd" +#define PRIiFAST16 "hi" + +#define PRId32 "I32d" +#define PRIi32 "I32i" +#define PRIdLEAST32 "I32d" +#define PRIiLEAST32 "I32i" +#define PRIdFAST32 "I32d" +#define PRIiFAST32 "I32i" + +#define PRId64 "I64d" +#define PRIi64 "I64i" +#define PRIdLEAST64 "I64d" +#define PRIiLEAST64 "I64i" +#define PRIdFAST64 "I64d" +#define PRIiFAST64 "I64i" + +#define PRIdMAX "I64d" +#define PRIiMAX "I64i" + +#define PRIdPTR "Id" +#define PRIiPTR "Ii" + +// The fprintf macros for unsigned integers are: +#define PRIo8 "o" +#define PRIu8 "u" +#define PRIx8 "x" +#define PRIX8 "X" +#define PRIoLEAST8 "o" +#define PRIuLEAST8 "u" +#define PRIxLEAST8 "x" +#define PRIXLEAST8 "X" +#define PRIoFAST8 "o" +#define PRIuFAST8 "u" +#define PRIxFAST8 "x" +#define PRIXFAST8 "X" + +#define PRIo16 "ho" +#define PRIu16 "hu" +#define PRIx16 "hx" +#define PRIX16 "hX" +#define PRIoLEAST16 "ho" +#define PRIuLEAST16 "hu" +#define PRIxLEAST16 "hx" +#define PRIXLEAST16 "hX" +#define PRIoFAST16 "ho" +#define PRIuFAST16 "hu" +#define PRIxFAST16 "hx" +#define PRIXFAST16 "hX" + +#define PRIo32 "I32o" +#define PRIu32 "I32u" +#define PRIx32 "I32x" +#define PRIX32 "I32X" +#define PRIoLEAST32 "I32o" +#define PRIuLEAST32 "I32u" +#define PRIxLEAST32 "I32x" +#define PRIXLEAST32 "I32X" +#define PRIoFAST32 "I32o" +#define PRIuFAST32 "I32u" +#define PRIxFAST32 "I32x" +#define PRIXFAST32 "I32X" + +#define PRIo64 "I64o" +#define PRIu64 "I64u" +#define PRIx64 "I64x" +#define PRIX64 "I64X" +#define PRIoLEAST64 "I64o" +#define PRIuLEAST64 "I64u" +#define PRIxLEAST64 "I64x" +#define PRIXLEAST64 "I64X" +#define PRIoFAST64 "I64o" +#define PRIuFAST64 "I64u" +#define PRIxFAST64 "I64x" +#define PRIXFAST64 "I64X" + +#define PRIoMAX "I64o" +#define PRIuMAX "I64u" +#define PRIxMAX "I64x" +#define PRIXMAX "I64X" + +#define PRIoPTR "Io" +#define PRIuPTR "Iu" +#define PRIxPTR "Ix" +#define PRIXPTR "IX" + +// The fscanf macros for signed integers are: +#define SCNd8 "d" +#define SCNi8 "i" +#define SCNdLEAST8 "d" +#define SCNiLEAST8 "i" +#define SCNdFAST8 "d" +#define SCNiFAST8 "i" + +#define SCNd16 "hd" +#define SCNi16 "hi" +#define SCNdLEAST16 "hd" +#define SCNiLEAST16 "hi" +#define SCNdFAST16 "hd" +#define SCNiFAST16 "hi" + +#define SCNd32 "ld" +#define SCNi32 "li" +#define SCNdLEAST32 "ld" +#define SCNiLEAST32 "li" +#define SCNdFAST32 "ld" +#define SCNiFAST32 "li" + +#define SCNd64 "I64d" +#define SCNi64 "I64i" +#define SCNdLEAST64 "I64d" +#define SCNiLEAST64 "I64i" +#define SCNdFAST64 "I64d" +#define SCNiFAST64 "I64i" + +#define SCNdMAX "I64d" +#define SCNiMAX "I64i" + +#ifdef _WIN64 // [ +# define SCNdPTR "I64d" +# define SCNiPTR "I64i" +#else // _WIN64 ][ +# define SCNdPTR "ld" +# define SCNiPTR "li" +#endif // _WIN64 ] + +// The fscanf macros for unsigned integers are: +#define SCNo8 "o" +#define SCNu8 "u" +#define SCNx8 "x" +#define SCNX8 "X" +#define SCNoLEAST8 "o" +#define SCNuLEAST8 "u" +#define SCNxLEAST8 "x" +#define SCNXLEAST8 "X" +#define SCNoFAST8 "o" +#define SCNuFAST8 "u" +#define SCNxFAST8 "x" +#define SCNXFAST8 "X" + +#define SCNo16 "ho" +#define SCNu16 "hu" +#define SCNx16 "hx" +#define SCNX16 "hX" +#define SCNoLEAST16 "ho" +#define SCNuLEAST16 "hu" +#define SCNxLEAST16 "hx" +#define SCNXLEAST16 "hX" +#define SCNoFAST16 "ho" +#define SCNuFAST16 "hu" +#define SCNxFAST16 "hx" +#define SCNXFAST16 "hX" + +#define SCNo32 "lo" +#define SCNu32 "lu" +#define SCNx32 "lx" +#define SCNX32 "lX" +#define SCNoLEAST32 "lo" +#define SCNuLEAST32 "lu" +#define SCNxLEAST32 "lx" +#define SCNXLEAST32 "lX" +#define SCNoFAST32 "lo" +#define SCNuFAST32 "lu" +#define SCNxFAST32 "lx" +#define SCNXFAST32 "lX" + +#define SCNo64 "I64o" +#define SCNu64 "I64u" +#define SCNx64 "I64x" +#define SCNX64 "I64X" +#define SCNoLEAST64 "I64o" +#define SCNuLEAST64 "I64u" +#define SCNxLEAST64 "I64x" +#define SCNXLEAST64 "I64X" +#define SCNoFAST64 "I64o" +#define SCNuFAST64 "I64u" +#define SCNxFAST64 "I64x" +#define SCNXFAST64 "I64X" + +#define SCNoMAX "I64o" +#define SCNuMAX "I64u" +#define SCNxMAX "I64x" +#define SCNXMAX "I64X" + +#ifdef _WIN64 // [ +# define SCNoPTR "I64o" +# define SCNuPTR "I64u" +# define SCNxPTR "I64x" +# define SCNXPTR "I64X" +#else // _WIN64 ][ +# define SCNoPTR "lo" +# define SCNuPTR "lu" +# define SCNxPTR "lx" +# define SCNXPTR "lX" +#endif // _WIN64 ] + +#endif // __STDC_FORMAT_MACROS ] + +// 7.8.2 Functions for greatest-width integer types + +// 7.8.2.1 The imaxabs function +#define imaxabs _abs64 + +// 7.8.2.2 The imaxdiv function + +// This is modified version of div() function from Microsoft's div.c found +// in %MSVC.NET%\crt\src\div.c +#ifdef STATIC_IMAXDIV // [ +static +#else // STATIC_IMAXDIV ][ +_inline +#endif // STATIC_IMAXDIV ] +imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom) +{ + imaxdiv_t result; + + result.quot = numer / denom; + result.rem = numer % denom; + + if (numer < 0 && result.rem > 0) { + // did division wrong; must fix up + ++result.quot; + result.rem -= denom; + } + + return result; +} + +// 7.8.2.3 The strtoimax and strtoumax functions +#define strtoimax _strtoi64 +#define strtoumax _strtoui64 + +// 7.8.2.4 The wcstoimax and wcstoumax functions +#define wcstoimax _wcstoi64 +#define wcstoumax _wcstoui64 + + +#endif // _MSC_INTTYPES_H_ ] diff --git a/dlls/geoip/GeoIP2/maxminddb-compat-util.h b/dlls/geoip/GeoIP2/maxminddb-compat-util.h index e3f0320f..e781c219 100644 --- a/dlls/geoip/GeoIP2/maxminddb-compat-util.h +++ b/dlls/geoip/GeoIP2/maxminddb-compat-util.h @@ -59,7 +59,7 @@ mmdb_memmem(const void *l, size_t l_len, const void *s, size_t s_len) /* special case where s_len == 1 */ if (s_len == 1) - return memchr(l, (int)*cs, l_len); + return (void *)memchr(l, (int)*cs, l_len); /* the last position where its possible to find "s" in "l" */ last = (char *)cl + l_len - s_len; @@ -145,7 +145,7 @@ mmdb_strdup(const char *str) char *copy; len = strlen(str) + 1; - if ((copy = malloc(len)) == NULL) + if ((copy = (char *)malloc(len)) == NULL) return (NULL); memcpy(copy, str, len); return (copy); @@ -158,7 +158,7 @@ mmdb_strndup(const char *str, size_t n) char *copy; len = mmdb_strnlen(str, n); - if ((copy = malloc(len + 1)) == NULL) + if ((copy = (char *)malloc(len + 1)) == NULL) return (NULL); memcpy(copy, str, len); copy[len] = '\0'; diff --git a/dlls/geoip/GeoIP2/maxminddb.c b/dlls/geoip/GeoIP2/maxminddb.c index d4ad1fef..47684d6c 100644 --- a/dlls/geoip/GeoIP2/maxminddb.c +++ b/dlls/geoip/GeoIP2/maxminddb.c @@ -4,11 +4,13 @@ #include "maxminddb.h" #include "maxminddb-compat-util.h" #include -#include #include #include #include +#define __STDC_FORMAT_MACROS /* Arkshine: Force to use C99 format macros */ +#include /* MSVC doesn't fully support C99, so we provide the file */ + #ifdef _WIN32 #include #include @@ -120,10 +122,10 @@ LOCAL const uint8_t *find_metadata(const uint8_t *file_content, ssize_t file_size, uint32_t *metadata_size); LOCAL int read_metadata(MMDB_s *mmdb); LOCAL MMDB_s make_fake_metadata_db(MMDB_s *mmdb); -LOCAL uint16_t value_for_key_as_uint16(MMDB_entry_s *start, char *key); -LOCAL uint32_t value_for_key_as_uint32(MMDB_entry_s *start, char *key); -LOCAL uint64_t value_for_key_as_uint64(MMDB_entry_s *start, char *key); -LOCAL char *value_for_key_as_string(MMDB_entry_s *start, char *key); +LOCAL uint16_t value_for_key_as_uint16(MMDB_entry_s *start, const char *key); +LOCAL uint32_t value_for_key_as_uint32(MMDB_entry_s *start, const char *key); +LOCAL uint64_t value_for_key_as_uint64(MMDB_entry_s *start, const char *key); +LOCAL char *value_for_key_as_string(MMDB_entry_s *start, const char *key); LOCAL int populate_languages_metadata(MMDB_s *mmdb, MMDB_s *metadata_db, MMDB_entry_s *metadata_start); LOCAL int populate_description_metadata(MMDB_s *mmdb, MMDB_s *metadata_db, @@ -152,8 +154,8 @@ LOCAL uint32_t get_ptr_from(uint8_t ctrl, uint8_t const *const ptr, int ptr_size); LOCAL int get_entry_data_list(MMDB_s *mmdb, uint32_t offset, MMDB_entry_data_list_s *const entry_data_list); -LOCAL float get_ieee754_float(const uint8_t *restrict p); -LOCAL double get_ieee754_double(const uint8_t *restrict p); +LOCAL float get_ieee754_float(const uint8_t *__restrict p); +LOCAL double get_ieee754_double(const uint8_t *__restrict p); LOCAL uint32_t get_uint32(const uint8_t *p); LOCAL uint32_t get_uint24(const uint8_t *p); LOCAL uint32_t get_uint16(const uint8_t *p); @@ -299,7 +301,7 @@ LOCAL const uint8_t *find_metadata(const uint8_t *file_content, uint8_t *search_area = (uint8_t *)(file_content + (file_size - max_size)); uint8_t *tmp = search_area; do { - tmp = mmdb_memmem(search_area, max_size, + tmp = (uint8_t *)mmdb_memmem(search_area, max_size, METADATA_MARKER, strlen(METADATA_MARKER)); if (NULL != tmp) { @@ -322,10 +324,9 @@ LOCAL int read_metadata(MMDB_s *mmdb) values. */ MMDB_s metadata_db = make_fake_metadata_db(mmdb); - MMDB_entry_s metadata_start = { - .mmdb = &metadata_db, - .offset = 0 - }; + MMDB_entry_s metadata_start; + metadata_start.mmdb = &metadata_db; + metadata_start.offset = 0; mmdb->metadata.node_count = value_for_key_as_uint32(&metadata_start, "node_count"); @@ -407,15 +408,14 @@ LOCAL int read_metadata(MMDB_s *mmdb) LOCAL MMDB_s make_fake_metadata_db(MMDB_s *mmdb) { - MMDB_s fake_metadata_db = { - .data_section = mmdb->metadata_section, - .data_section_size = mmdb->metadata_section_size - }; + MMDB_s fake_metadata_db; + fake_metadata_db.data_section = mmdb->metadata_section; + fake_metadata_db.data_section_size = mmdb->metadata_section_size; return fake_metadata_db; } -LOCAL uint16_t value_for_key_as_uint16(MMDB_entry_s *start, char *key) +LOCAL uint16_t value_for_key_as_uint16(MMDB_entry_s *start, const char *key) { MMDB_entry_data_s entry_data; const char *path[] = { key, NULL }; @@ -423,7 +423,7 @@ LOCAL uint16_t value_for_key_as_uint16(MMDB_entry_s *start, char *key) return entry_data.uint16; } -LOCAL uint32_t value_for_key_as_uint32(MMDB_entry_s *start, char *key) +LOCAL uint32_t value_for_key_as_uint32(MMDB_entry_s *start, const char *key) { MMDB_entry_data_s entry_data; const char *path[] = { key, NULL }; @@ -431,7 +431,7 @@ LOCAL uint32_t value_for_key_as_uint32(MMDB_entry_s *start, char *key) return entry_data.uint32; } -LOCAL uint64_t value_for_key_as_uint64(MMDB_entry_s *start, char *key) +LOCAL uint64_t value_for_key_as_uint64(MMDB_entry_s *start, const char *key) { MMDB_entry_data_s entry_data; const char *path[] = { key, NULL }; @@ -439,7 +439,7 @@ LOCAL uint64_t value_for_key_as_uint64(MMDB_entry_s *start, char *key) return entry_data.uint64; } -LOCAL char *value_for_key_as_string(MMDB_entry_s *start, char *key) +LOCAL char *value_for_key_as_string(MMDB_entry_s *start, const char *key) { MMDB_entry_data_s entry_data; const char *path[] = { key, NULL }; @@ -459,10 +459,9 @@ LOCAL int populate_languages_metadata(MMDB_s *mmdb, MMDB_s *metadata_db, return MMDB_INVALID_METADATA_ERROR; } - MMDB_entry_s array_start = { - .mmdb = metadata_db, - .offset = entry_data.offset - }; + MMDB_entry_s array_start; + array_start.mmdb = metadata_db; + array_start.offset = entry_data.offset; MMDB_entry_data_list_s *member; MMDB_get_entry_data_list(&array_start, &member); @@ -471,7 +470,7 @@ LOCAL int populate_languages_metadata(MMDB_s *mmdb, MMDB_s *metadata_db, uint32_t array_size = member->entry_data.data_size; mmdb->metadata.languages.count = 0; - mmdb->metadata.languages.names = malloc(array_size * sizeof(char *)); + mmdb->metadata.languages.names = (const char **)malloc(array_size * sizeof(char *)); if (NULL == mmdb->metadata.languages.names) { return MMDB_OUT_OF_MEMORY_ERROR; } @@ -511,10 +510,9 @@ LOCAL int populate_description_metadata(MMDB_s *mmdb, MMDB_s *metadata_db, return MMDB_INVALID_METADATA_ERROR; } - MMDB_entry_s map_start = { - .mmdb = metadata_db, - .offset = entry_data.offset - }; + MMDB_entry_s map_start; + map_start.mmdb = metadata_db; + map_start.offset = entry_data.offset; MMDB_entry_data_list_s *member; MMDB_get_entry_data_list(&map_start, &member); @@ -524,14 +522,14 @@ LOCAL int populate_description_metadata(MMDB_s *mmdb, MMDB_s *metadata_db, uint32_t map_size = member->entry_data.data_size; mmdb->metadata.description.count = 0; mmdb->metadata.description.descriptions = - malloc(map_size * sizeof(MMDB_description_s *)); + (MMDB_description_s **)malloc(map_size * sizeof(MMDB_description_s *)); if (NULL == mmdb->metadata.description.descriptions) { return MMDB_OUT_OF_MEMORY_ERROR; } for (uint32_t i = 0; i < map_size; i++) { mmdb->metadata.description.descriptions[i] = - malloc(sizeof(MMDB_description_s)); + (MMDB_description_s *)malloc(sizeof(MMDB_description_s)); if (NULL == mmdb->metadata.description.descriptions[i]) { return MMDB_OUT_OF_MEMORY_ERROR; } @@ -579,14 +577,11 @@ MMDB_lookup_result_s MMDB_lookup_string(MMDB_s *const mmdb, int *const gai_error, int *const mmdb_error) { - MMDB_lookup_result_s result = { - .found_entry = false, - .netmask = 0, - .entry = { - .mmdb = mmdb, - .offset = 0 - } - }; + MMDB_lookup_result_s result; + result.found_entry = false; + result.netmask = 0; + result.entry.mmdb = mmdb; + result.entry.offset = 0; struct addrinfo *addresses = NULL; *gai_error = resolve_any_address(ipstr, &addresses); @@ -615,9 +610,8 @@ MMDB_lookup_result_s MMDB_lookup_string(MMDB_s *const mmdb, LOCAL int resolve_any_address(const char *ipstr, struct addrinfo **addresses) { - struct addrinfo hints = { - .ai_socktype = SOCK_STREAM - }; + struct addrinfo hints; + hints.ai_socktype = SOCK_STREAM; int gai_status; if (NULL != strchr(ipstr, ':')) { @@ -644,14 +638,11 @@ MMDB_lookup_result_s MMDB_lookup_sockaddr( const struct sockaddr *const sockaddr, int *const mmdb_error) { - MMDB_lookup_result_s result = { - .found_entry = false, - .netmask = 0, - .entry = { - .mmdb = mmdb, - .offset = 0 - } - }; + MMDB_lookup_result_s result; + result.found_entry = false; + result.netmask = 0; + result.entry.mmdb = mmdb; + result.entry.offset = 0; uint8_t mapped_address[16], *address; if (mmdb->metadata.ip_version == 4) { @@ -754,10 +745,9 @@ LOCAL int find_address_in_search_tree(MMDB_s *mmdb, uint8_t *address, LOCAL record_info_s record_info_for_database(MMDB_s *mmdb) { - record_info_s record_info = { - .record_length = mmdb->full_record_byte_size, - .right_record_offset = 0 - }; + record_info_s record_info; + record_info.record_length = mmdb->full_record_byte_size; + record_info.right_record_offset = 0; if (record_info.record_length == 6) { record_info.left_record_getter = &get_uint24; @@ -877,7 +867,7 @@ int MMDB_vget_value(MMDB_entry_s *const start, int i = 0; const char *path_elem; while (NULL != (path_elem = va_arg(va_path, char *))) { - path = realloc(path, sizeof(const char *) * (i + 1)); + path = (const char **)realloc(path, sizeof(const char *) * (i + 1)); if (NULL == path) { return MMDB_OUT_OF_MEMORY_ERROR; } @@ -889,7 +879,7 @@ int MMDB_vget_value(MMDB_entry_s *const start, i++; } - path = realloc(path, sizeof(char *) * (i + 1)); + path = (const char **)realloc(path, sizeof(char *) * (i + 1)); if (NULL == path) { return MMDB_OUT_OF_MEMORY_ERROR; } @@ -1273,10 +1263,9 @@ int MMDB_get_metadata_as_entry_data_list( { MMDB_s metadata_db = make_fake_metadata_db(mmdb); - MMDB_entry_s metadata_start = { - .mmdb = &metadata_db, - .offset = 0 - }; + MMDB_entry_s metadata_start; + metadata_start.mmdb = &metadata_db; + metadata_start.offset = 0; return MMDB_get_entry_data_list(&metadata_start, entry_data_list); } @@ -1398,10 +1387,10 @@ LOCAL int get_entry_data_list(MMDB_s *mmdb, uint32_t offset, return MMDB_SUCCESS; } -LOCAL float get_ieee754_float(const uint8_t *restrict p) +LOCAL float get_ieee754_float(const uint8_t *__restrict p) { volatile float f; - uint8_t *q = (void *)&f; + uint8_t *q = (uint8_t *)(void *)&f; #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ q[3] = p[0]; q[2] = p[1]; @@ -1413,10 +1402,10 @@ LOCAL float get_ieee754_float(const uint8_t *restrict p) return f; } -LOCAL double get_ieee754_double(const uint8_t *restrict p) +LOCAL double get_ieee754_double(const uint8_t *__restrict p) { volatile double d; - uint8_t *q = (void *)&d; + uint8_t *q = (uint8_t *)(void *)&d; #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ q[7] = p[0]; q[6] = p[1]; @@ -1467,7 +1456,7 @@ LOCAL MMDB_entry_data_list_s *new_entry_data_list(void) { /* We need calloc here in order to ensure that the ->next pointer in the * struct doesn't point to some random address. */ - return calloc(1, sizeof(MMDB_entry_data_list_s)); + return (MMDB_entry_data_list_s *)calloc(1, sizeof(MMDB_entry_data_list_s)); } void MMDB_free_entry_data_list(MMDB_entry_data_list_s *const entry_data_list) @@ -1701,7 +1690,7 @@ LOCAL MMDB_entry_data_list_s *dump_entry_data_list( entry_data_list->entry_data.uint64); entry_data_list = entry_data_list->next; break; - case MMDB_DATA_TYPE_UINT128: + case MMDB_DATA_TYPE_UINT128: { /* Error C2360 if hex_string initialization is not inside a block */ print_indentation(stream, indent); #if MMDB_UINT128_IS_BYTE_ARRAY char *hex_string = @@ -1715,7 +1704,8 @@ LOCAL MMDB_entry_data_list_s *dump_entry_data_list( low); #endif entry_data_list = entry_data_list->next; - break; + break; + } case MMDB_DATA_TYPE_INT32: print_indentation(stream, indent); fprintf(stream, "%d \n", entry_data_list->entry_data.int32); @@ -1741,7 +1731,7 @@ LOCAL void print_indentation(FILE *stream, int i) LOCAL char *bytes_to_hex(uint8_t *bytes, uint32_t size) { - char *hex_string = malloc((size * 2) + 1); + char *hex_string = (char *)malloc((size * 2) + 1); char *hex_pointer = hex_string; for (uint32_t i = 0; i < size; i++) { diff --git a/dlls/geoip/GeoIP2/maxminddb.h b/dlls/geoip/GeoIP2/maxminddb.h index 8d4318f7..6d7c7f15 100644 --- a/dlls/geoip/GeoIP2/maxminddb.h +++ b/dlls/geoip/GeoIP2/maxminddb.h @@ -5,18 +5,21 @@ #define _POSIX_C_SOURCE 200112L #endif -#include +#include "maxminddb_config.h" #include -#include #include #include #include #ifdef _WIN32 +#include "stdbool.h" /* Arksnine: Not supported by MSVC */ +#include /* Arkshine: ssize_t replacement */ +typedef SSIZE_T ssize_t; #include #include typedef ADDRESS_FAMILY sa_family_t; #else +#include #include #include #include diff --git a/dlls/geoip/GeoIP2/stdbool.h b/dlls/geoip/GeoIP2/stdbool.h new file mode 100644 index 00000000..8e7b4044 --- /dev/null +++ b/dlls/geoip/GeoIP2/stdbool.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2000 Jeroen Ruigrok van der Werven + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD: src/include/stdbool.h,v 1.6 2002/08/16 07:33:14 alfred Exp $ + */ + +#ifndef _STDBOOL_H_ +#define _STDBOOL_H_ + +#define __bool_true_false_are_defined 1 + +#ifndef __cplusplus + +#define false 0 +#define true 1 + +#define bool _Bool +#if __STDC_VERSION__ < 199901L && __GNUC__ < 3 +typedef int _Bool; +#endif + +#endif /* !__cplusplus */ + +#endif /* !_STDBOOL_H_ */ \ No newline at end of file From 936d4f4f6d1302087b245b02254496ad0a352e0b Mon Sep 17 00:00:00 2001 From: Arkshine Date: Tue, 29 Jul 2014 11:45:38 +0200 Subject: [PATCH 30/71] Geoip: Fix compilation #2 A trick to bypass issue where variable creaton was required at the top of function. --- dlls/geoip/GeoIP2/{maxminddb.c => maxminddb.cpp} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename dlls/geoip/GeoIP2/{maxminddb.c => maxminddb.cpp} (100%) diff --git a/dlls/geoip/GeoIP2/maxminddb.c b/dlls/geoip/GeoIP2/maxminddb.cpp similarity index 100% rename from dlls/geoip/GeoIP2/maxminddb.c rename to dlls/geoip/GeoIP2/maxminddb.cpp From 94552e550357c8bb1d0f1559c1147a79c00dc495 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Tue, 29 Jul 2014 11:47:23 +0200 Subject: [PATCH 31/71] Geoip: Fix compilation #3 Update project files. --- dlls/geoip/AMBuilder | 5 ++++- dlls/geoip/msvc10/geoip.vcxproj | 14 ++++++++------ dlls/geoip/msvc10/geoip.vcxproj.filters | 24 +++++++++++++++--------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/dlls/geoip/AMBuilder b/dlls/geoip/AMBuilder index cd3ce025..66ddee96 100644 --- a/dlls/geoip/AMBuilder +++ b/dlls/geoip/AMBuilder @@ -3,9 +3,12 @@ import os.path binary = AMXX.Module(builder, 'geoip') +binary.compiler.defines += ['HAVE_STDINT_H'] +binary.compiler.includes += [os.path.join(builder.sourcePath, 'dlls', 'geoip', 'GeoIP2')] + binary.sources = [ 'sdk/amxxmodule.cpp', - 'GeoIP.c', + 'GeoIP2/maxminddb.cpp', 'geoip_amxx.cpp', ] diff --git a/dlls/geoip/msvc10/geoip.vcxproj b/dlls/geoip/msvc10/geoip.vcxproj index cc5e5fe3..fbfe39ff 100644 --- a/dlls/geoip/msvc10/geoip.vcxproj +++ b/dlls/geoip/msvc10/geoip.vcxproj @@ -52,8 +52,8 @@ Disabled - ..\;..\sdk;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;GEOIP_EXPORTS;%(PreprocessorDefinitions) + ..\;..\sdk;..\GeoIP2;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;GEOIP_EXPORTS;HAVE_STDINT_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebug @@ -75,8 +75,8 @@ - ..\;..\sdk;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;GEOIP_EXPORTS;%(PreprocessorDefinitions) + ..\;..\sdk;..\GeoIP2;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;GEOIP_EXPORTS;HAVE_STDINT_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreaded false @@ -95,14 +95,16 @@ + - + + + - diff --git a/dlls/geoip/msvc10/geoip.vcxproj.filters b/dlls/geoip/msvc10/geoip.vcxproj.filters index 514bdb69..be52e3c7 100644 --- a/dlls/geoip/msvc10/geoip.vcxproj.filters +++ b/dlls/geoip/msvc10/geoip.vcxproj.filters @@ -9,9 +9,6 @@ {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd - - {2df41d4d-d80c-4557-88e6-0a8e902154d5} - {a6d73610-c960-4557-87c5-2d1b137ed3b3} @@ -21,17 +18,20 @@ {f31e7815-11bd-4a86-899e-43f85dfdc067} + + {0bd4b9fb-f847-4fe5-af3e-9000fc854c5c} + Source Files - - GeoIP - Module SDK\SDK Base + + GeoIP2 + @@ -40,15 +40,21 @@ Header Files - - GeoIP - Module SDK Module SDK\SDK Base + + GeoIP2 + + + GeoIP2 + + + GeoIP2 + From 6916eb861366f0f6a825cceafd682a57c509e2ab Mon Sep 17 00:00:00 2001 From: Arkshine Date: Tue, 29 Jul 2014 14:40:41 +0200 Subject: [PATCH 32/71] Geoip: Module should clear memory at mapchange. --- dlls/geoip/geoip_amxx.cpp | 4 ++-- dlls/geoip/sdk/moduleconfig.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dlls/geoip/geoip_amxx.cpp b/dlls/geoip/geoip_amxx.cpp index e733b1dd..138f4586 100755 --- a/dlls/geoip/geoip_amxx.cpp +++ b/dlls/geoip/geoip_amxx.cpp @@ -11,8 +11,7 @@ // GeoIP Module // -#include -#include "geoip_amxx.h" +#include "geoip_amxx.h" GeoIP *gi = NULL; @@ -113,3 +112,4 @@ AMX_NATIVE_INFO geoip_natives[] = { {"geoip_country", amx_geoip_country}, {NULL, NULL}, }; + diff --git a/dlls/geoip/sdk/moduleconfig.h b/dlls/geoip/sdk/moduleconfig.h index 0eff4c24..e2b075fb 100755 --- a/dlls/geoip/sdk/moduleconfig.h +++ b/dlls/geoip/sdk/moduleconfig.h @@ -29,7 +29,7 @@ #define MODULE_LIBRARY "geoip" #define MODULE_LIBCLASS "" // If you want the module not to be reloaded on mapchange, remove / comment out the next line -//#define MODULE_RELOAD_ON_MAPCHANGE +#define MODULE_RELOAD_ON_MAPCHANGE #ifdef __DATE__ #define MODULE_DATE __DATE__ @@ -38,7 +38,7 @@ #endif // __DATE__ // metamod plugin? -//#define USE_METAMOD +#define USE_METAMOD // use memory manager/tester? // note that if you use this, you cannot construct/allocate From 9d59de41a29cf9bf52204e86c1df3e123472390a Mon Sep 17 00:00:00 2001 From: Arkshine Date: Wed, 30 Jul 2014 09:06:33 +0200 Subject: [PATCH 33/71] Geoip: Fix compilation #4. --- dlls/geoip/GeoIP2/maxminddb.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dlls/geoip/GeoIP2/maxminddb.cpp b/dlls/geoip/GeoIP2/maxminddb.cpp index 47684d6c..a380720d 100644 --- a/dlls/geoip/GeoIP2/maxminddb.cpp +++ b/dlls/geoip/GeoIP2/maxminddb.cpp @@ -51,7 +51,7 @@ #ifdef MMDB_DEBUG DEBUG_FUNC char *byte_to_binary(uint8_t byte) { - char *bits = malloc(sizeof(char) * 9); + char *bits = (char *)malloc(sizeof(char) * 9); if (NULL == bits) { return bits; } @@ -611,6 +611,8 @@ MMDB_lookup_result_s MMDB_lookup_string(MMDB_s *const mmdb, LOCAL int resolve_any_address(const char *ipstr, struct addrinfo **addresses) { struct addrinfo hints; + memset(&hints, 0, sizeof(addrinfo)); // getaddrinfo doesn't like garbage. + hints.ai_socktype = SOCK_STREAM; int gai_status; From 7dd1ea371975f01b3415ab5b46483986a21fb3b3 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Wed, 30 Jul 2014 09:51:01 +0200 Subject: [PATCH 34/71] Geoip: Convert code to libmaxminddb API. --- dlls/geoip/AMBuilder | 8 +- dlls/geoip/GeoIP2/maxminddb.h | 60 ++++++ dlls/geoip/geoip_amxx.cpp | 332 +++++++++++++++++++++++++++----- dlls/geoip/geoip_amxx.h | 8 +- dlls/geoip/msvc10/geoip.vcxproj | 4 +- 5 files changed, 351 insertions(+), 61 deletions(-) diff --git a/dlls/geoip/AMBuilder b/dlls/geoip/AMBuilder index 66ddee96..715a32f2 100644 --- a/dlls/geoip/AMBuilder +++ b/dlls/geoip/AMBuilder @@ -1,10 +1,11 @@ # vim: set sts=2 ts=8 sw=2 tw=99 et ft=python: import os.path -binary = AMXX.Module(builder, 'geoip') +binary = AMXX.MetaModule(builder, 'geoip') -binary.compiler.defines += ['HAVE_STDINT_H'] -binary.compiler.includes += [os.path.join(builder.sourcePath, 'dlls', 'geoip', 'GeoIP2')] +binary.compiler.defines += [ + 'HAVE_STDINT_H' +] binary.sources = [ 'sdk/amxxmodule.cpp', @@ -14,5 +15,6 @@ binary.sources = [ if builder.target_platform == 'windows': binary.compiler.postlink += ['ws2_32.lib'] + binary.compiler.includes += [os.path.join(builder.sourcePath, 'dlls', 'geoip', 'GeoIP2')] AMXX.modules += [builder.Add(binary)] diff --git a/dlls/geoip/GeoIP2/maxminddb.h b/dlls/geoip/GeoIP2/maxminddb.h index 6d7c7f15..3c3f766a 100644 --- a/dlls/geoip/GeoIP2/maxminddb.h +++ b/dlls/geoip/GeoIP2/maxminddb.h @@ -25,6 +25,66 @@ typedef ADDRESS_FAMILY sa_family_t; #include #endif +const char GeoIPCountryCode[][3] = +{ + "AP", "EU", "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", + "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AZ", "BA", "BB", + "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BM", "BN", "BO", + "BR", "BS", "BT", "BV", "BW", "BY", "BZ", "CA", "CC", "CD", + "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", + "CU", "CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", + "DZ", "EC", "EE", "EG", "EH", "ER", "ES", "ET", "FI", "FJ", + "FK", "FM", "FO", "FR", "FX", "GA", "GB", "GD", "GE", "GF", + "GH", "GI", "GL", "GM", "GN", "GP", "GQ", "GR", "GS", "GT", + "GU", "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", "ID", + "IE", "IL", "IN", "IO", "IQ", "IR", "IS", "IT", "JM", "JO", + "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KP", "KR", "KW", + "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", + "LU", "LV", "LY", "MA", "MC", "MD", "MG", "MH", "MK", "ML", + "MM", "MN", "MO", "MP", "MQ", "MR", "MS", "MT", "MU", "MV", + "MW", "MX", "MY", "MZ", "NA", "NC", "NE", "NF", "NG", "NI", + "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", "PE", "PF", + "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PS", "PT", "PW", + "PY", "QA", "RE", "RO", "RU", "RW", "SA", "SB", "SC", "SD", + "SE", "SG", "SH", "SI", "SJ", "SK", "SL", "SM", "SN", "SO", + "SR", "ST", "SV", "SY", "SZ", "TC", "TD", "TF", "TG", "TH", + "TJ", "TK", "TM", "TN", "TO", "TL", "TR", "TT", "TV", "TW", + "TZ", "UA", "UG", "UM", "US", "UY", "UZ", "VA", "VC", "VE", + "VG", "VI", "VN", "VU", "WF", "WS", "YE", "YT", "RS", "ZA", + "ZM", "ME", "ZW", "A1", "A2", "O1", "AX", "GG", "IM", "JE", + "BL", "MF" +}; + +const char GeoIPCountryCode3[][4] = +{ + "AP", "EU", "AND", "ARE", "AFG", "ATG", "AIA", "ALB", "ARM", "ANT", + "AGO", "AQ", "ARG", "ASM", "AUT", "AUS", "ABW", "AZE", "BIH", "BRB", + "BGD", "BEL", "BFA", "BGR", "BHR", "BDI", "BEN", "BMU", "BRN", "BOL", + "BRA", "BHS", "BTN", "BV", "BWA", "BLR", "BLZ", "CAN", "CC", "COD", + "CAF", "COG", "CHE", "CIV", "COK", "CHL", "CMR", "CHN", "COL", "CRI", + "CUB", "CPV", "CX", "CYP", "CZE", "DEU", "DJI", "DNK", "DMA", "DOM", + "DZA", "ECU", "EST", "EGY", "ESH", "ERI", "ESP", "ETH", "FIN", "FJI", + "FLK", "FSM", "FRO", "FRA", "FX", "GAB", "GBR", "GRD", "GEO", "GUF", + "GHA", "GIB", "GRL", "GMB", "GIN", "GLP", "GNQ", "GRC", "GS", "GTM", + "GUM", "GNB", "GUY", "HKG", "HM", "HND", "HRV", "HTI", "HUN", "IDN", + "IRL", "ISR", "IND", "IO", "IRQ", "IRN", "ISL", "ITA", "JAM", "JOR", + "JPN", "KEN", "KGZ", "KHM", "KIR", "COM", "KNA", "PRK", "KOR", "KWT", + "CYM", "KAZ", "LAO", "LBN", "LCA", "LIE", "LKA", "LBR", "LSO", "LTU", + "LUX", "LVA", "LBY", "MAR", "MCO", "MDA", "MDG", "MHL", "MKD", "MLI", + "MMR", "MNG", "MAC", "MNP", "MTQ", "MRT", "MSR", "MLT", "MUS", "MDV", + "MWI", "MEX", "MYS", "MOZ", "NAM", "NCL", "NER", "NFK", "NGA", "NIC", + "NLD", "NOR", "NPL", "NRU", "NIU", "NZL", "OMN", "PAN", "PER", "PYF", + "PNG", "PHL", "PAK", "POL", "SPM", "PCN", "PRI", "PSE", "PRT", "PLW", + "PRY", "QAT", "REU", "ROU", "RUS", "RWA", "SAU", "SLB", "SYC", "SDN", + "SWE", "SGP", "SHN", "SVN", "SJM", "SVK", "SLE", "SMR", "SEN", "SOM", + "SUR", "STP", "SLV", "SYR", "SWZ", "TCA", "TCD", "TF", "TGO", "THA", + "TJK", "TKL", "TKM", "TUN", "TON", "TLS", "TUR", "TTO", "TUV", "TWN", + "TZA", "UKR", "UGA", "UM", "USA", "URY", "UZB", "VAT", "VCT", "VEN", + "VGB", "VIR", "VNM", "VUT", "WLF", "WSM", "YEM", "YT", "SRB", "ZAF", + "ZMB", "MNE", "ZWE", "A1", "A2", "O1", "ALA", "GGY", "IMN", "JEY", + "BLM", "MAF" +}; + #define MMDB_DATA_TYPE_EXTENDED (0) #define MMDB_DATA_TYPE_POINTER (1) #define MMDB_DATA_TYPE_UTF8_STRING (2) diff --git a/dlls/geoip/geoip_amxx.cpp b/dlls/geoip/geoip_amxx.cpp index 138f4586..16c7e56c 100755 --- a/dlls/geoip/geoip_amxx.cpp +++ b/dlls/geoip/geoip_amxx.cpp @@ -1,3 +1,4 @@ +<<<<<<< HEAD // vim: set ts=4 sw=4 tw=99 noet: // // AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). @@ -13,103 +14,328 @@ #include "geoip_amxx.h" -GeoIP *gi = NULL; +MMDB_s HandleDB; -inline void StripPort(char *ip) +char *stripPort(char *ip_port) { - char *tmp = strchr(ip, ':'); + char *tmp = strchr(ip_port, ':'); + if (!tmp) - return; + { + return ip_port; + } + *tmp = '\0'; + + return tmp; } +const char *lookupByIp(const char *ip, const char **path, int *length = NULL) +{ + int gai_error = 0, mmdb_error = 0; + MMDB_lookup_result_s lookup = MMDB_lookup_string(&HandleDB, ip, &gai_error, &mmdb_error); + + if (gai_error != 0 || MMDB_SUCCESS != mmdb_error || !lookup.found_entry) + { + return NULL; + } + + MMDB_entry_data_s entry_data; + MMDB_aget_value(&lookup.entry, &entry_data, path); + + if (!entry_data.has_data) + { + return NULL; + } + + if (length) + { + *length = entry_data.data_size; + } + + return entry_data.utf8_string; +} + +// native geoip_code2(const ip[], ccode[3]); +// Deprecated. static cell AMX_NATIVE_CALL amx_geoip_code2(AMX *amx, cell *params) { - int len = 0; - char *ip = MF_GetAmxString(amx, params[1], 0, &len); - StripPort(ip); - const char *ccode = GeoIP_country_code_by_addr(gi, ip); - return MF_SetAmxString(amx, params[2], ccode?ccode:"error", 3); + int length; + char *ip = MF_GetAmxString(amx, params[1], 0, &length); + + const char *path[] = { "country", "iso_code", NULL }; + const char *code = lookupByIp(stripPort(ip), path); + + return MF_SetAmxString(amx, params[2], code ? code : "error", 3); } +// native geoip_code3(const ip[], result[4]); +// Deprecated. static cell AMX_NATIVE_CALL amx_geoip_code3(AMX *amx, cell *params) { - int len = 0; - char *ip = MF_GetAmxString(amx, params[1], 0, &len); - StripPort(ip); - const char *ccode = GeoIP_country_code3_by_addr(gi, ip); - return MF_SetAmxString(amx, params[2], ccode?ccode:"error", 4); + int length; + char *ip = MF_GetAmxString(amx, params[1], 0, &length); + + const char *path[] = { "country", "iso_code", NULL }; + const char *code = lookupByIp(stripPort(ip), path); + + for (size_t i = 0; i < ARRAYSIZE(GeoIPCountryCode); ++i) + { + if (!strncmp(code, GeoIPCountryCode[i], 2)) + { + code = GeoIPCountryCode3[i]; + break; + } + } + + return MF_SetAmxString(amx, params[2], code ? code : "error", 4); } + +// native bool:geoip_code2_ex(const ip[], result[3]); static cell AMX_NATIVE_CALL amx_geoip_code2_ex(AMX *amx, cell *params) { - int len = 0; - char *ip = MF_GetAmxString(amx, params[1], 0, &len); - StripPort(ip); - const char *ccode = GeoIP_country_code_by_addr(gi, ip); - - if (ccode == NULL) + int length; + char *ip = MF_GetAmxString(amx, params[1], 0, &length); + + const char *path[] = { "country", "iso_code", NULL }; + const char *code = lookupByIp(stripPort(ip), path); + + if (!code) { return 0; } - - MF_SetAmxString(amx, params[2], ccode, 2); - + + MF_SetAmxString(amx, params[2], code, 2); + return 1; } +// native bool:geoip_code3_ex(const ip[], result[4]); static cell AMX_NATIVE_CALL amx_geoip_code3_ex(AMX *amx, cell *params) { - int len = 0; - char *ip = MF_GetAmxString(amx, params[1], 0, &len); - StripPort(ip); - const char *ccode = GeoIP_country_code3_by_addr(gi, ip); + int length; + char *ip = MF_GetAmxString(amx, params[1], 0, &length); - if (ccode == NULL) + const char *path[] = { "country", "iso_code", NULL }; + const char *code = lookupByIp(stripPort(ip), path, &length); + + if (!code) { return 0; } - - MF_SetAmxString(amx, params[2], ccode, 3); - + + for (size_t i = 0; i < ARRAYSIZE(GeoIPCountryCode); ++i) + { + if (!strncmp(code, GeoIPCountryCode[i], 2)) + { + code = GeoIPCountryCode3[i]; + break; + } + } + + MF_SetAmxString(amx, params[2], code, 3); + return 1; } +// native geoip_country(const ip[], result[], len); static cell AMX_NATIVE_CALL amx_geoip_country(AMX *amx, cell *params) { - int len = 0; - char *ip = MF_GetAmxString(amx, params[1], 0, &len); - StripPort(ip); - const char *ccode = GeoIP_country_name_by_addr(gi, ip); - return MF_SetAmxString(amx, params[2], ccode?ccode:"error", params[3]); + int length; + char *ip = MF_GetAmxString(amx, params[1], 0, &length); + + const char *path[] = { "country", "names", "en", NULL }; + const char *country = lookupByIp(stripPort(ip), path, &length); + + return MF_SetAmxString(amx, params[2], country, length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. } + void OnAmxxAttach() { - char *path = MF_BuildPathname("%s/GeoIP.dat",MF_GetLocalInfo("amxx_datadir", "addons/amxmodx/data")); - gi = GeoIP_open(path, GEOIP_MEMORY_CACHE); - if (gi == NULL) { - MF_Log("Failed to instantiate GeoIP!"); + const char *databases[] = + { + "City", + "Country" // is the default shipped database with AMXX. + }; + + const char *modName = MF_GetModname(); + const char *dataDir = MF_GetLocalInfo("amxx_datadir", "addons/amxmodx/data"); + + char file[255]; + int status = -1; + + for (size_t i = 0; i < ARRAYSIZE(databases); ++i) + { + sprintf(file, "%s/%s/GeoLite2-%s.mmdb", modName, dataDir, databases[i]); // MF_BuildPathname not used because backslash + // makes CreateFileMapping failing under windows. + status = MMDB_open(file, MMDB_MODE_MMAP, &HandleDB); + + if (status == MMDB_SUCCESS) + { + break; + } + else if (status != MMDB_FILE_OPEN_ERROR) + { + MF_Log("Could not open %s - %s", file, MMDB_strerror(status)); + + if (status == MMDB_IO_ERROR) + { + MF_Log(" IO error: %s", strerror(errno)); + } + } + } + + if (status != MMDB_SUCCESS) + { + MF_Log("Could not find GeoIP2 databases. Disabled natives."); return; } - char *db_info = GeoIP_database_info(gi); - MF_Log("Database info: %s", db_info); + + MF_Log("Database info: %s %i.%i", + HandleDB.metadata.description.descriptions[0]->description, + HandleDB.metadata.binary_format_major_version, + HandleDB.metadata.binary_format_minor_version); + MF_AddNatives(geoip_natives); } void OnAmxxDetach() { - GeoIP_delete(gi); - gi = NULL; + MMDB_close(&HandleDB); } -AMX_NATIVE_INFO geoip_natives[] = { - {"geoip_code2", amx_geoip_code2}, - {"geoip_code3", amx_geoip_code3}, - - {"geoip_code2_ex", amx_geoip_code2_ex}, - {"geoip_code3_ex", amx_geoip_code3_ex}, - - {"geoip_country", amx_geoip_country}, - {NULL, NULL}, + +AMX_NATIVE_INFO geoip_natives[] = +{ + { "geoip_code2", amx_geoip_code2 }, + { "geoip_code3", amx_geoip_code3 }, + + { "geoip_code2_ex", amx_geoip_code2_ex }, + { "geoip_code3_ex", amx_geoip_code3_ex }, + + { "geoip_country", amx_geoip_country }, + { NULL, NULL }, }; + +/** +* GEOIP2 DATA EXAMPLE: +* +* { +* "city": { +* "confidence": 25, +* "geoname_id": 54321, +* "names": { +* "de": "Los Angeles", +* "en": "Los Angeles", +* "es": "Los Ãngeles", +* "fr": "Los Angeles", +* "ja": "ロサンゼルス市", +* "pt-BR": "Los Angeles", +* "ru": "ЛоÑ-ÐнджелеÑ", +* "zh-CN": "æ´›æ‰çŸ¶" +* } +* }, +* "continent": { +* "code": "NA", +* "geoname_id": 123456, +* "names": { +* "de": "Nordamerika", +* "en": "North America", +* "es": "América del Norte", +* "fr": "Amérique du Nord", +* "ja": "北アメリカ", +* "pt-BR": "América do Norte", +* "ru": "Ð¡ÐµÐ²ÐµÑ€Ð½Ð°Ñ Ðмерика", +* "zh-CN": "北美洲" +* +* } +* }, +* "country": { +* "confidence": 75, +* "geoname_id": "6252001", +* "iso_code": "US", +* "names": { +* "de": "USA", +* "en": "United States", +* "es": "Estados Unidos", +* "fr": "États-Unis", +* "ja": "アメリカåˆè¡†å›½", +* "pt-BR": "Estados Unidos", +* "ru": "СШÐ", +* "zh-CN": "美国" +* } +* }, +* "location": { +* "accuracy_radius": 20, +* "latitude": 37.6293, +* "longitude": -122.1163, +* "metro_code": 807, +* "time_zone": "America/Los_Angeles" +* }, +* "postal": { +* "code": "90001", +* "confidence": 10 +* }, +* "registered_country": { +* "geoname_id": "6252001", +* "iso_code": "US", +* "names": { +* "de": "USA", +* "en": "United States", +* "es": "Estados Unidos", +* "fr": "États-Unis", +* "ja": "アメリカåˆè¡†å›½", +* "pt-BR": "Estados Unidos", +* "ru": "СШÐ", +* "zh-CN": "美国" +* } +* }, +* "represented_country": { +* "geoname_id": "6252001", +* "iso_code": "US", +* "names": { +* "de": "USA", +* "en": "United States", +* "es": "Estados Unidos", +* "fr": "États-Unis", +* "ja": "アメリカåˆè¡†å›½", +* "pt-BR": "Estados Unidos", +* "ru": "СШÐ", +* "zh-CN": "美国" +* }, +* "type": "military" +* }, +* "subdivisions": [ +* { +* "confidence": 50, +* "geoname_id": 5332921, +* "iso_code": "CA", +* "names": { +* "de": "Kalifornien", +* "en": "California", +* "es": "California", +* "fr": "Californie", +* "ja": "カリフォルニア", +* "ru": "КалифорниÑ", +* "zh-CN": "加州" +* } +* } +* ], +* "traits": { +* "autonomous_system_number": "1239", +* "autonomous_system_organization": "Linkem IR WiMax Network", +* "domain": "example.com", +* "is_anonymous_proxy": true, +* "is_transparent_proxy": true, +* "isp": "Linkem spa", +* "ip_address": "1.2.3.4", +* "organization": "Linkem IR WiMax Network", +* "user_type": "traveler", +* }, +* "maxmind": { +* "queries_remaining": "54321" +* } +* } +*/ diff --git a/dlls/geoip/geoip_amxx.h b/dlls/geoip/geoip_amxx.h index 1fe5223d..2e5ef298 100755 --- a/dlls/geoip/geoip_amxx.h +++ b/dlls/geoip/geoip_amxx.h @@ -14,10 +14,12 @@ #ifndef _INCLUDE_GEOIPAMXX_H #define _INCLUDE_GEOIPAMXX_H -#define GEOIPDATADIR "" - +#include "GeoIP2/maxminddb.h" #include "amxxmodule.h" -#include "GeoIP.h" + +#if defined(WIN32) + #define snprintf _snprintf +#endif extern AMX_NATIVE_INFO geoip_natives[]; diff --git a/dlls/geoip/msvc10/geoip.vcxproj b/dlls/geoip/msvc10/geoip.vcxproj index fbfe39ff..c8645c01 100644 --- a/dlls/geoip/msvc10/geoip.vcxproj +++ b/dlls/geoip/msvc10/geoip.vcxproj @@ -52,7 +52,7 @@ Disabled - ..\;..\sdk;..\GeoIP2;%(AdditionalIncludeDirectories) + ..\;..\sdk;..\GeoIP2;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\pm_shared;$(HLSDK)\public;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;GEOIP_EXPORTS;HAVE_STDINT_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true EnableFastChecks @@ -75,7 +75,7 @@ - ..\;..\sdk;..\GeoIP2;%(AdditionalIncludeDirectories) + ..\;..\sdk;..\GeoIP2;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\pm_shared;$(HLSDK)\public;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;GEOIP_EXPORTS;HAVE_STDINT_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreaded false From 0d59209e4cca8dba5fa62a6ac43990a494e9242f Mon Sep 17 00:00:00 2001 From: Arkshine Date: Wed, 30 Jul 2014 09:54:42 +0200 Subject: [PATCH 35/71] Geoip: Replace GeoIP.dat by GeoLite2-Country.mmdb. --- dlls/geoip/GeoIP.dat | Bin 1126900 -> 0 bytes dlls/geoip/GeoLite2-Country.mmdb | Bin 0 -> 1743167 bytes support/PackageScript | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100755 dlls/geoip/GeoIP.dat create mode 100644 dlls/geoip/GeoLite2-Country.mmdb diff --git a/dlls/geoip/GeoIP.dat b/dlls/geoip/GeoIP.dat deleted file mode 100755 index 13a651816567b492fa63ff4f9d790bc08ee77424..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1126900 zcmXt=2XqwW6Tp9WTWC@RVd&7SJ*}=SbZ{B?K%{P5!H@BBfz%)ogHW+X&m{1Wc@WBQL$YfG*1U}4UT=3v| z_)M4IK>%q8AyUe3$}gN1;0*Xzi6TKLmEdeR6RJREI7_$YCStKm5>$n1O37DBaf0f) ztO4ghNrG-FL`2nui=h@=0JY(KI8QmvWGqS;>gZCC3*jQDTW(TiWvHji3p1HZ;0m}D z>ceGldHE?hD7qTxQUqpaGFL)lXb6pzn9O9lB-xUr31qfq~EzIzcmN z3(cVww1Aed-lV(5TNXt&t)UGhQq)YbF~!{}+Ch7`3a*C3sn{3Kp|wK?=m@nOJ8&j=&U2pA6|VGN9d(NZL7Do9?^^hz@p#=)F4 zkEZ!1O~VRIfXOfsCc%aZ+**MzDsbT$Oo6FFJcAd{V1_1cI+Vc-xCUmzGMEJmU^dJZ znUE`$S&@kq`Jp0(m6!+fq3W6O@mXh5u`+qE7#6}J$$MqSR3=lI>&{{cER}RuVPh47 zs?@E@a##l|U^T3SRdBE>O{y`a8kNsx4XlNy&Zcp7Hdg2B>a2%NVn1w@f~mo(8XT&@ zJ2l9M%`oH~9yy23=kofwY=LWGD-=Ni?0{{sU6wVeREx)Ik*P%??39?)=H1$iJ&&UE z*agL~8}>-ooX5KJx%GVhKA#fUEB#W3YIXiAZ%Na2a6RnP1l<5N>d>eT`=Jza>d>YR zo$AEdJfI8*;Xb$#Zik!TR=62%ftTy>&;?v`AuH>08~jf~eNlYs-isJhk2~OQxD)Pz zkL%IrV)8ELyi2$T?uC<=u=rA5yOfoeaX%cAE`W#OL3l{2{cIjbS}Hsr&GJONM2l%B1ya)Pt;VC%;8Y0QwuR84Spf@(?}+n9OER$Z4%8*@&AOA?%$ z;DQ7-6P%ZzR)X5PyH+``Y0UWv>Le&`%*~B?K#3QMF$wA>xJWqICh@Q>DvR-6nKY=K4*@YC>nZ z8YbwHplgD5P3WR*1Deo1L5~C@bUC#Ni<;0&mI-<%7?hw-g8m8mCg_)7qw;J!eK5hm z1bYDEV07?)st zg0FP>Q~BA6$}=g!pG|PGn4-(63a2HQonU%`nF(enrD9eblUa&a&*DN|&e3IVf{S%I zPnYu*3iAR*@)Ryiut<@`<-1pAu{6ONT`o(oT#*$DSC;dvO0Zh-rYc`#u1&B`DeKF5 zHc0f!@lA@f&0=$c9SN=}r*BbYtHOc=+Z5TZuyeWOLS61uSfp@Qg58SjQ7GDbXT`TY zGVb;!IFjJn1h?qcbqTIda4^9Q2}+f+FM-_B>`yRQ<(HL9I3NX3uJOhMH!1z*@?AM{ zYl3?d+?L=@mGHj=w<~go@{H26!gg1JyOnZJ`Pp$<+?U{y1otO+NQn<9d@#YpEGFy0 zhgFm~awx&$2_993#}XWt`J*FOB+Kp-@eB=}VZPJ-VOoJvrn z%%>wM_WY4xR~E%t{FUI}1b-*^M+UXVS$3~g=8Q_-pG87%iG`j_Vkmx487#%^B#|O1 zg^ofuiI*f$+)r{>7Vl&c>heoHE7H}Y%WRCA<3mla*|w@q+ycFlQd8*^~HefSoIZ2u2kU6@fil0M1!_PBSF37L!_@~M!?yqwAOQ@ZfWXF!sH zNe1ijK}mK?6=gF-mj^PL`I*eHBvX!_*|RlT4F>$z-NWScEglOkGCGmd=Tt5{+|I zZ?0-QeSBV$%|cAFD#?N*i*+kc;-;M9<06rh6T7n{$%-UPmA)*=a^AlVqbrILSKkS|heT$p$@MJBP#S;3hqlpX5t5Pl#gYHOeE%)+E;_DM+%d zoU%R1F4emuNuj1g*mkOrA}MBdc6Sm9%bp~Am7!SUP$FfV!)?;MdR!Q;(^GQ%2Bqvv za;sAICn-&GW0JBY2g)-p_8(Lm>g8~gvfZ5ImL!*`#tLfoZPLg|{+HxVJ$1XnJCs=% zB-)}&>gVnx_awPjcO@hDCAnYYb2=cGZr;O+Jd)&4lEYe8k1Bjjp~w`; zk1Nj;5Gr`5-26h52ex$<2xKtl0+k`o%G<4Im9-+EEnR?Ft4ByS{n zImxTa^NK=o5@Hw=#B;e3#_=Bv0kUtt$Ldz(1--Vw(g?K0nL+SF@ka;msU=OY)ay_LRckll&nA zR*#(2>7%NwkoS0uIfk8zh?$FR6QY5Xgg2FQt%I-%wR5GZllFw9F+2AZAuJ$Slf6R&T zY6dlQdA1&`u27VoqlSr`a}8=5)H33D{-J^TCx`P4b{d>-Fxa4uK`Vm`46Zb|(BM*o zx&{{;Tx3wsV0#QPn&Xy5#L-@X-d2HZ_w7@Dp6$6Ig?r5j0fd!flTIV12I)79Sk}dbW}^OZ$@b|Ivb=j znG?;pLFT_f9}#QN)1bRS4};g5#eTil4Edg_mqBlX&zs>lr+#yqHm9$_0E2!8{pHg< z_HI{mo@~xQG1cIu=DggTH=1)!3x*iv84NX;VlYgSE-^P4WiY~Eq@P%*w!9Bq)Zmtu^lcSO8`z5F1}ntnR*Y!H*jBN5s|?l}tTtF93C(2I zw<5n)?BF_s^#)s7ah;yMsTCUy3Jf+GTw{=Lu-V||Ry^4%zCC!V6dfoL~X}e?cxGx(2l1JjvG8}@SMRj2G5Fj?P%F9F8(&{IA-v?L9cea+K!X$ z_@x~$NC6wXXmG;d*LDoLia)NRDiva?RndXvo9$d(Vln3c!T$h*z&RM`L#VC7<_2(XL}MIusg(={n+3ugHNR0 z3_dmZOy*$+wsznK-TlJgO9_4l?(V>S9pWH=ZSbAJHwNEIa60f@huAME>F?Es7d!BJ z2Y!@sZSa%9?*>1MQwG0iiX{<0cHlRIQ%2n8e#dzJZ0N`z27ilH27jr)J37YhoF(&L zhQGnSj&W}aMIs8F#-85XkvltLnph?ei@=U?xtS-_l1WX_JdgDwv#Oa)wD2lZqy1np9E-;d!?sl}*kv`Me`Pb>z>E zq&iX6q`FBple0xaC#rPf;!ZU0L=8RFt`l84ajwY)CN)jYGpS`#+oV^gSn1SGYFq$d94$l zb>inv{MCsoO&XarESFZPGmTA}h-;mx*_rIlu?^WKE#>=vljagklV-}?zca&iw?+Bc z@ttW^j<+_M+L_$Wv^AMv(#~Xn$yFvjOs+QRY|`GOqcV3eS*&tIQ74ntoyqS^7n5!# zU6o;*?shlho0+1{G3=@IUM77_dYkkyxvnz@J9B$y?&(ZFlm3#;&OFzd*E{o7X9g<& zAd`_MgH48+3^5sM@>6G`E?m-u4qX^-GD3E{Fuw~syKrY0MwyH?8ErDgoh1Jll=q-PmTbLwC2Eoan}9s-jRNcc*Q4icI#J>@q1f*)3)(=d|w3 z>mFNDqRT~!Uu$xM51Kq=lGl?ZJz3F{Z7Spuu}6_dP2Mtj%;W`=!zNFgJZ^GC>d@rL z@;HB~oJUQbGWoVAKlY?zFY5H-8Ixls&zd|ZrQ0jEZIHs}O^!?1^x}Xn-|fYVCaY-W=)8JH2_^8TGTureI_#1fh-{6w})K9%97oS&7S{ler+84-QR>%$Fw zIM9c$O};bvM%*m-U4$Iz!}lgXh@w86Qh}+y{A6;j#m^>z#V^8a@vF(7Ccl~du3ApX z@a!Ag@P{sID*l(rzmiRpe@yBsMHnvWOGbGb^`%u`5*8_oq=jk4#|?$8`(jzx7QOY< z;Jys)i(}zgxXLhG>AvD}YD`~3i!&@DrKA;BDBqpZmx>luEh<@5R^pi!b5z1v7FDeO zV!K!=)hudQoNZCv;+DSrPlfM`2%u{VYCGu>*8D&|-+iAdA7e{8G0n4Ty~# zst&duz;KK479%XiD9=cXQ5K^uIw@PP0n8b|SlyCS;}m&w023@GTTImDB!wRg;EMrF zv6yBtwVeOA0ZcE){~f?gi!~OrES6f#w#bv3v6yF(YcW@%G?0D+DICaG1DS8Jz@q6O z#t-7rLHsd@g%*od)FLU5!CXF=CFPPE3}%_dN?k5jxI$spU{_ zS!}Xcuk;NT8x`p>n7)Hqq-^<0*(_ln%#(xJVo_+Z)nc1Pfo{Dpn3IFqZm~m`AM2^F z74B3@k;0z`v)kf!#rIegTik3>VzJ+1uf_Ei*IHa>@%LcNA)GUWMnky4VxLsb5QYq4 z_7Dn&P-=0|qRirez#-fkw|VxXHp9O4Xq>8_Iy8+@gxa&08&Qv-qDbR}N+E zPzr}~hsE<2cUnAVahJsd7I$0Rt33Bu>>e7&=RS-3Ep8afO}e~$C=XgZV)2m0!xl%B z_<_Ph7LQtdJ(S;v5)I?RVH~!2%Hna0CoP^(v6l~{=`fC19F?XRMz3Lv8OD@hJZ+qa@K~UHPU^DbaNd?dVe^iKW%I7ZS29T~KC^gV8b^6P zQ23$r+Hm>~=VM)dV)3cP*m7y(hV!}7zc|gD$$V)sMR&ip_}$_gi=QmMwfJ5czEhYx zoF6QHloA@wf#KXWoQH<ZV9<#8$300qrX&;&8-ZbC+Kf;(p^qAYZIiZ1DT8Ce8_CThxxnTk zn+t8~s;CD?^7u$jC{I15yg8CfY=+xhYSZ54GMlD0m)kV5sc&3BfLtmT0HvMb{D5by6Qso(FGsx!0G5o4a@qLIg3>6_Z z)y7hLESHa^IHuW5S4#VFj2y?9am=)tYctDcj?HY{63&I=$W?sBxcJ~a zn*}!Wm2$mO@@y8`yruYO3K!d~w^?GdT0FH`VYAF;xgPm^9H++NjAy0IDw_)9IcGc< zj3;|MYm{NFl#|WS@v*MO<5@SJ4K`bCHri~KeA(nH+m`WcSDtHZw%F`dT#no@o&uX4 zHrs5r+Z-6rA>Dd@JcTwpZQj)7JL7qOJiBb3ve|8OyUiY(>uiec|8iHN$X%=u#{>sK|;5++=gB;x{Y2Md7*$+@^?d{?BH^ z1WG4xhs{GacPjlZoBM6LgCzbM+!nbAqDpl^CS{yN8!kQHrz@E2OBX$QcS>)Pt4EIV-0)Tj^(|sG>+!h1C?E zQ0D52i_98|oRi{QMc&liS}A6xsGVX!it|#mNO69O1}W;KxH!cHDe8)@atR+y;-VDw zQhcvxf1N~T5|^a7JjJCcE)(A;$G)F2ne!%7zx>qsler>AlN48`Xq2L%(l<@!=E*cx z{5Cz6m7-~i>=ZfT`xL57q4^YAO`%ze<|#T&Vg3}BO=0U4TFNp-s}ybZcj0d zW>aHPJyLX@O7E%kO3^n(?-YGf^q)ATfxO5t0Q;gGPd*$pjjR`3xr}Q%p@UO^!@s-842SUF6SDwz|`qm10GT*(v5LWsbt!6m!*pdAbz-?CC5> zu|$`7DHf*UKNuIKSe&BublOhms_Ar?&QfJqrf|8!&eLOeRw}+q;cA6zQmjj{R^FJ<1Su&OxHrYM<+#wVPjMi{4dwj%6xpw^RAE_)rPIk*u?JJ! znBvwHH|f^R3U5)kLm6&MaYu^(Ddl#BCFP#pnc^;`lq%&O#qU*kpThf7Je=YI#l^4( z6?sVEtFhePCrFb{R+bP~rdY%#&&EP#8jBvVJDt zr}#nQIg_{b)O$1eDaF4jeopagieJhlNDO~d{8Wm+6!|^HA2R%9EYG6yEY6t~E0xdR zDgIH03(6@ONr!{!#0&|Cq#}mGD`wGE*(?X!!Es0_T{s8L!d1LP8GMHe90G^4972Z* z4pBL0T9MOPKEt7+LuH3b<-{``?w`e>S^r%%syNitt*Q>y9L{w(+o8G>x3DO!;c$+_ z6RPp3!qaqtwUno}!t>;Z@eXwymd%cxx@I=p6uHo$t_r`%;Yx>k4wvfkVuhDD6f4_h z4)q-_SK_s^xnVX99InviO|vpA?XJrn3Wc+$BBHvt!x)D?4uc)~DzRTVPk)C2iVt)cB-zZRVlLHlIX9Of zN*}6FgbZ^S?l8(>gu_UUdCgpEGD8Oo+Qe{(_DuY4s#tAI?QvJ@9;mF zIr8IAhdlY@vM`rLxhxjwu+(9(!xH)A#t)sB=CVva4$I|}%Zgl9=CVql!+M8R4r?4% zJ2B_#-1v#`T8DKG@99%8d1^0;~Y9<*zT~|VXMP64qF^{=f)=O z$>m@!1rFOBzRKn6T)xT0n#&G{B8NhUozh=(xo|F><}zb0yX2s3&1KJA_Ri({xfDwf z97-InbJ*)}t;YNTbyjS<-r)u(eso(^e)c(+(z)z+IN(s~P$vB{m!oreW-iC(a?s&M zhqvbP>0ExCOKKiBJKQCOm&x4XaI3@Z4!21dr90+v={)Ms=Lv@=9iDPH;&4<7U>=L-v1%S0=kc_|GZL10PX@s*iUz26{OBpzPso^>}pXcV2C69o0d1`)K`77l|5f1-K zh~yEl!w(Lp9Da28#o;H1pJnW*DA|>a|LX9YXjh8lu}LQLyTe}&e>nW9Ia;7>(nNnd z{3GqJy(3y4$Ye5_AY2TWgiF#zh({!wnT)6~U2GT2jk`b+Ey7bSj!R}f;Q}sNK&u6K z@-Im8@Ym&}eBt0y-6eE6(e6oPA7VzT& zPA#Ce%Xu#UF2K&CavpW$$ESJmKRcxt(#>UnOLv!EE-rJ?Gi%hUS62^tJT}VHd{w@<1GHD@G7cy&M{978~ALMeq%V3u&E<;?#xeRp~ z>oUw`q(*YM!VxaHqErJr%4M|67?&jrZWjt@QE&yTqe75KZ@@H zK7hx}EiOXu2rII+8WiHF5To+S+F})TudNC_q zR*C(KxppykE#|$&tZ`ZIvespt%QuUuyo5SSXtIP2QpQsJOBlX{SxZ>GgnXBsE}LBn zq>^2>x@?hXXl)cM`OnjBF59&xB^Ntf3dOc1+_{7gm+;pTid>3acDd})$m~{_S{lbN z4yMa>E_T;XQAf-%Jc)K3VQ~XYsM_lf5xmW5(>Rf*Rqj2NW7{5$^Idi!!D0%5M=q7%STK3b19Fz9C3NV%g9oXI@n^0L&t%W;?IT#l(mvEg}@DL-+Mf`7r~gqruF*1v@4C2?7MSuWhK zh*FvVE^oWM=JKY?>n?AU*QY2wzKoMDZ^`bmxVEJuK3&E;F7La%>++to*m6cJXXJ85 zE$0K552f;#GiEt6mNRQPAG>@d)5+y?mrq?jb9rbv&n@TVa=ws{%a<~2S5S8a9ab=C z1z)>-C)MTht(4^owyfZ$6+F0t?_GXyd1nQGuHf92_66VXK(Bie;xE=XuoiIN##}k2)Sw49!-@?Q@|Q z=TYWfyVYFeafwGgkBdEeu4c??7O!U0YA*G-%;Wmi99_*9tNCknd_>MR@aUq)ukg6i zqoqefk1UTy9!)$Nd-0zqmDX_PnpmCGUbaUwj~tJt5}7rey@pzAsJ({f9xXiTuc5&j zve%HahE^U|d9?Ou>(NG4G+RUaHMH~MxzT4$d^x__qoYTAj}BfO0g24uHL+ox#Bp^{ z=73C8(c9HytO)TK=+WJypZx!?M{n`bqn8)|kAS!@$K^uM$D^;u@HKHq$eqKOHT2gY z4^S1y*6{8c21)un27B?9eTc_Uskb#)YiYig7Hb*qG0J0v$4C#k4-p$qUo}RH<(d)6 zRLiyTjFR1PYNx24;IYMHqQ?x6NgmTZCac#|6i!t*O`$k=)!P5!KhtB0$1IQe9 zsC;3Nr006f^_b_yf$FoCp=+7AmIWS*J@Pyjc`Wqei8p&~d{L8BN&p4Q!KEJSJeEmV zJeGT`@>t=qQux=hWi5Nwa%?TDJ=S=9xRy`W^7&f+SQ{6T=v}V{Z1BkU*yypz*&9Z(d$^aj;#_Rj{=WdJ+?`lJ+^!7@z^2l;8EzYQ^F!_>nK~t z!FBBN*zIxSI*zR4=sKQSN3qAX9wpMM9#601xplm;j(^s1os_GT-+GMo1nWt!XP?JS z9{W8Gc$9jSNz<*T+IniOr`~!Fidd<@^)y~jm-S3t&&?jUXuzd5BrFo2+a#DC|MR%l z<93g`JnrzgQz*(XXTA23$30$rU$JO?99a2VOwQh?C3L?;ay{$U^Pm@p>miRr9uLb% z(OnU8P%H3JEgKoyQh|pxo{xK+@OZ-GS&t_@p7J>2aa01ep6l0h`+DwM&(j{y2+w*> zuIKypoV|hPJdS%D^LXB)!3M6_z?BlUbZ>xFYpcJ!Y|6PywWPoHcQ{(}$ z*uRkvqyVH&JU-GWNen;s_{QTCkFPyG_4vx;GmkH1BxW+7YeR{gFTMEBiY^=Jy)nLk zia=2z$hRJ+Jie2`?(x0HPaZ#b{OB=YBNH|U=jcX$+(?y8G~7hs6Z$mS#LP`B+eGmu(tbS2EBI9M zIm4%-&x4zIWD`d>@$@Fn^r`Ig+$N51;*CwbwTUV|=lfLksi8Jh^Eun6x*x|)qWZ%o z{@%nnKDB(#^{FXl=i}uQ=F>Ev+CJy`w8*D*KJD^ppHCg1OMEWyxya{2pSnJs^68OJ zzx;S))$_U7XI?&w^JBk+a;Z;!pUZqM_v6wPiqO~O)4=BnpZt8b<;V1*d>Z<+Q`Z{# zH1=sOUdsy>e6oD91)d&yI%=BwH1p%Tda++ZA&#{0Y3E&~^DDr9V)1lm|j^c=fbTemeX6$ChZKjJ)cb~34-862CHphRG zh|(TDJ;fyLIB7j0_V#1n`}p+t>Fd+aXVYf#H*@V~_HAZ>nCf%KX71d~vCTZcnZZ8W ze1`a}@fqqf-DjB3c%R`uqkKka5Jvj()k;3cH#6F2te7E7Kb{zGZjSMB5~6EJZDE3% zH_>N`&m^D8QZQS%XbbhX&}0i!eWuCTEezVi$So}1!VI6KJ~Msh`^@sm^_lH6$7iMd zM1RYFKVY6KNtBSvkCwOaz?QgB7x*ml$@5w0^Yj)@Y~j5vye|TMmiT@!93GTk3Et zjkm^D$&@JeDUsfh`LHz(b!(+xtErTNyx!*)k?&I~Uij?SbclJPPNr*_&y79@d=5&w zx6*$rN4N6)R&MgSS$eI2Y6YBKK=lG{l{WXeO$tDA=X1NXVF5J@s9ivv0`By=OPZ*F z%L-^vz~F*7{`dIY>vNyfMgb!V7+t^(1w7#Mtyt^xiqAtnFZ(>~^Q1=X5uZaohkYIu zE0rwQ}xX%;vqLKpMD&XA$zAE5|&oP-WKF|0(C8^Y8Nx;Qr3CpuGI(E9@Mi%hd|vYTtAKwCNNmI07I(2E>s6nReO~i<%jb2U zlRj_wyeZ|a#Vp+_jVw(hlHc}u$B(D9oO)ME$mczu_hqnbquVz6Ze!#&KJ@v>XTmme zx3Os(Mcd*Vr%$A#eZKMe%;!s=&wak|Dci3Il%V}3^(+J5=N}pVTB~B7T#JQ49F%wWT)CY-+erpk0Y-os#B)sIEO9s;VLKod z-~~7VZb0t#_-`?>wyJ#pBX5!kSh+p!tTo%?%SRM&Q9wH2+<*!JRRYckI5VJPK&60f z+bP`6uI&_Wr*gnq0dH>S?d_b}&Y#<<8c;o;TEN*sT>sJ<|7^$GL5+ZOf;c{B?T9CU zm{&8Pc0jEl9&vILBHGUjxFF#CfI0y^cF=PNy>`%h2Nwp^4d}CjzB}l*gZ?|H7jQ*@ z48w~9E(y3i;L?E00tW10_zouRV8#yW2Q&y+wS((+aOVyl-4TzMD+3w^Gzn-F&^X}P z9dTny%}6A(#1gex#)#ZkzrBN|0n-AS1@sEy;4}|t5zscEWuX6A7SLLvq+z^Iz5DMbXzM*`9%pnE`9Q6Y&d#45xtBvnX{ zfSv(SA?ZS@7IJBt!GQY$ZVb3R;HH3E18xquB_Oer0Wa_5!=3yqHWcw>z!4cT zMN}@LdJz{C@l?RcfTshVQP-pxo|Pk-;^zX6Y12I)@M6I6fENPl7tySUwncO*;zYnp z(g;NiC}LU>c}2Vu@LIsDnkI>-bk^(TtV3$n4$B-OZuh9Nrzz5b>yg$heRJA;Uukh71WABnLyD+#S1oWH(25 zGc;sa7(X3*WjC+x=C$372pJtRQix$ZvE@1_qJ)1;$XMl+=_Jee`WP}PWJ1V9&6-d| zuViO($h43tAycK;_E2FD=kDQxJxmXoAram~^F6fPL#I8=3fU-@hb#)26OyYMMZ(;W z1(NrW`Qq;$hVEh59-iAnUdY0bV|#dE4=?WFr9CVTSrxJ*WO>NakYyTe>9v9Sz-xun za7Y|LwXLdL!9&)CtO;2g^7Eef`n6CV*~s@lAsaN^$zp00b51dvLUx4YhinexfhjIu z6H*YeC1k7AYB9BnIlq{!Vzz~Bm#QeHS22BynNdt($j)+KibD2;>C*<~!yF%^=xl{d;3YU>6Lhjbk zN&oJXSEWh$h1?f%f5xrI zFRIPrZ?%#*TrY*ZEVD(ww2=gfr>}~IA+KrhUk`ahvX zUCYL62_qtTIplS;xQ+$aG3$CNL{y46BcfuYBNfmd$8+sBy^l_T2jBX1we_r>z7 zsFtbD42yil`CMFpB5QIT7bZ)QzYaaefpRZLNsf5$8o*zMuO0X|$il`>7Lg zq4Hl4(PuyN_s0b(EqqZ#{fK%ImquJ1aY@9k{oKBvyY_R>el8Os5%=%sq5T}%&*A-X z^)`sOBI3%3C-?Kxem>vNZ=xk4E242klPDhkQfUw90L+eP9+4B#Ou{JT6vb5`6(|El z*jhxiiD((oI*Kc#RYa!?tWPKtDn zs9qY=yNa_)kq~u{=qDMB=pE5BqL&1!l#5HrDy2m!eIoisv@4}^DZNVLrsy9rC}Kdw zK!K$UEM;&hBLqeai5OYRs8U9k#*Pe&SRFAuVnh_Tm9*Z-h-nd{B1T7XCyG;JBF0CI zjTooyNT<}%C+QO+CQA)OOo|v&%8XK$mXcq}6ge1iT`7l4`J|LY8Pg*cN6d(r8!^jgGGee0( zu_+>7D!GhyWpRkED&v}nEfQfdql`Xf3@M`^VrLZ3y=@WOBX&gbU5EH07w$p{R2f^! zD2ljNs!TSiI5Ua7P)O3OG{#?5717qKtmdLc&KR>mV`94q6k zGWJK5M*Lnzl>_7)VDJGBM4XH`81YoZjiOrPc~ivA5qC!167j!?TSbU^w?k*3IC6W$ z9n!WsT_v89?zl^jVnpNKdrT^4af<0JAVN+)&Z3-WZtixJPL*nx5hhAye^Hbvs#$n zhfGWV?{F53evn#+{)(scYTBViB;0_&$~B>Z~h3VpM&5U-S1 z8JDwte}KkmnkqvRg;{B`)8wT2^+5ctq*Dj@_du*s1U668B~1%e)KX!qH0{&0PSY+; zn>20H@e%VNmDT2}(p;@Fcgri44#q+{r0JNBZ5F&!n$C(>IY^y@@q41WDswl5-PJ5!~9lx|~iBd$%vNX%ntV**&Ifu)y?__x}=2@*2IkhIuCiQe(`u|j& z1+*O1(uF^QOBnZ=?&+Be1P|`P-6as*gS)%CBv=SefFw7$Ns!=9aCg^-ySx6oci(=G zf304%>eSgKr>f5Bo}MdQmf`daBQu3cQsOP+)+{&{Yxi6mcKLnli@0_Wt_ew>P1xE2V|Kw%k)`h z%EnomAsctXjQUgUy-e+8=4@<7*DPl4vifYk&eo?{)W7#qAVRx zb+gQsr6(KTo3gek`}gaQCudnW%b+at8$YkXpb-U zvT~Nyv#esks##Vu^KLKiTX&5tYdM}ZO~0~m?JVD^+`X)uWfSAq%d&o!jk0WzWkXfj zuo))wAD$a$T`W>n80MkkY!4ihqGLt<(4cr*xHSzH)Xjw%T&iRbpp40MM~PO zS?)04Hq+Zvr*|r)S?F@s=^Q0x8I*m_fdBzbwo8`HGA+vg@knt=pdiJF(ujpjc zpMXnGo>wjZVgldW&g(w?-mrx?P5*MhZ)bTY%LiHBO_%vzmj5`6_kFSrnAm@R{LqE| z$WtHN!Y5f~^Xz9?X3X(%SgU)uXu27hh(jl-K`V!U_M@ZV+mKFiNK|1JM9 z%TI>oCQ`G_Uwq;vr>K(iTbAFmOqb&i$N8rY1mpj5RIQ2pBYckT#CSIivX=q5{>RJd z&CHMvXUb8`F>@~7HM8WHBgd?{c#X69A9l=cy68lfpUA)*xg2xm$mYmceKlKF^7-eV zytN9s_#j%xeoHxm9A#UmE$=x|3E z^~D?K$Q(!II9k2YM~~G7I5x*A#vGU9_#7wYI3dT0Ip*$T0f%>7atm+_3-xiTnbS-a z#_47j>Ep~C7v?xC$A}zf+xt0b4Cm%p#->JEa-Q9tpW_1S>fuUZ59#Bg9G7}(R4zV? zF3vGJ$0h2GK88B}Bz2eNxID*|-Z)p7D)YLumaB8zlw(Ye>vLR_<2t*$)?T#yvDyMT z#<{CC9IsOLu|ppd=XVyH~ zJhSB)n2%o;&2Bn}>C$?uWJdCgna}#jnaP_LO!b;tfRg!go|>78Y1LHUF4fHl*)TJ= zUjFA9lqbm3$rI+|)@_?crZOl=H_u$g_oV8Q&z)x;55?PZ>`W=Kk%R4-M z1)xiqA)Z>%bS2Zom!?+9vud6-@~me0>iPJaN2OF#Yvx%y&svseEm_CBrlh`Jo?(hV z&t`cx$g{DhHZZ9NM4et4mVOuljO)eM|*fwKK_a% zsnjv4spImTl;?O4PcW6riDsso6tCiB^QYuF)r|I?gs11ZG|w4%F359co{@RZ%5#nZ zXPYY8bMuTaFQ-ZEqb)GT#{ui^dAa~b#_BzwVrmT(gaD1NLJQK{1u_GDj%kyNONqO$b zGucy9@=VQheV!Zh++c|usSj^5pY-s}d2Y>fizP{BZp(9fx($ffB|>uJjru! zo_jo0Jj&92dG7a6#wAgx)ABr)=fOOW?5 zCn^0VJypKb#w_rCo_v8H^8AzM$2`9o{FCX=d49?BYuX92oMiR)Jb&c*E6<;XCGq@i zzJJ#gn7P1og}C7d6qvEV^aW-p^q+)D7&CcRfH8VjEHJx=vzpFUh@Y}FHAjI=fq@0) zEcEYj36=S5fm|Uz#5B~Us0sxZEKn@aE>J2^FHkN}wY5qi-UUigE%hkljRHY|W`UN4 zNwE?d7UJ(-r4kjGr$DDbk1<_)6lSghbK7R(UDgH_n6JRRhAA6TpTEEYX@oOQii2OM zz|sX4F0e#_!37pIc#+i3Vg(j2^q)Bb%kq*2EM=;%nIu`Jz={QyEwDm?@3} zs-?AWXr~*Q?(L{HDKON-O$%&hq%t7n<^{GautkAk7A6Hv!rRLA6>OUVI~3T~fbC4T zH&ujM(T)XnE3i|6T`b($RO{Wf!0<0=E=+yuhsm?kR9vfx8Oa?nT{E;Lg-V#$M#>ZcoX@ zy#*drP6|9=%>5}+m}x2Ip#qN@mk#z1zs)iWP#@jJXPSC0#92# zd4^GSo=r>ke1Vq=yinl9R5xkwmkYe&y33l3%f)L2-YM{Ufwv00QQ%GEWpK1zzwM!r zQh!%`f%h!Yq9l3Wyi95MVSzsjd{p4O0v{LnqQEBwJ~QA`Q!Vy$GfB69S>S6Azw#2s z>EXY?x0WdL+LDUl`vSk{{4em6k9emm#;2&%b*cK(7nz~hzY`P5OhslbGINnxiv3R-vL;`%72~^xT#V8A zUnEy#V3CZ4a~AvW0-DVhNU3Pps4{+sET4%bJ3V*FF4J*IP+N^zbd>l7JOWJ$y3Eizw`!A0gTvY;gk z6w~MbA`4rhV01H*?jl7NFS2Nn#Vk)YvMREKhYDLUFI8lSR$62^3zsRftUOv>botca z3TC9cVv#k9tW;#xA}beJCC!rDsobln1eT2RP{K8>xK@$1RW;{Lxm9A{w)*BHI_) zw#at2DHYk#x^_sz9;25(p4z#{E@>tepM(fMpBKsEEyU0F8 zG!$N!7Pw!L{Zr$TOLAb5+lm}i7dfrSAw`ZTa%j5D!^|9RD%VFAIljnIMUJuL zX!oS-99!f#OLUGU3pt_4$wf{qa+3OOQh%bfqEm{Tn#Q1{34D5y^NO5N7CGB? z&Pp-oc&PSJeYJ`a9*#6sBb{I5BJ&rRURaEOC`GVQTDT<_TcWJWm*kfg=__)Xwx?$= zFLFhZtIS_%st@c}n@RB36zMH;ZIN+Bt}8P3UsFlPj<-asn2-iM(Y++~Nkwk3aI)zX z)9X{%jaIy=$jxS^nkvJ$6uC9EserY{+lzcw`)aHFf z9r%9j7kMH*VYD2r?x`Zr7J0hJGyjT5 z$mfbYZ;7(1t2>Doi@aInr6R8udD&C1m?n=subF?n$Qx#o#EQOEY=NFU3dqKenl8rz5nw%wk5c|C*Yu#Ox*Juslhi zX6N)!_A@22C2}4rhe=}>O4LgfEi9RqQ+<wM5N~7A_-=5|M{Z(^iSVjHbd8?UWa| zW4>$Jlgj5RF}L}B{Gnc2gG$U>V(k+1l~~$S^Osnl#3CgYEU|Ejg`{HFO7&m^v?wVq zT4IS3i8Cqid5}TLUy2KVGwk$C$MJi4Kwo;1Hme{7mwk5W+cTFYFlRFr{ zW2&{28L8}2;(B>0acYU-3Z}$vCHC^{?xuT~?rExw?QLcs(|t|lVvPR(SBaxa98ltr z5(ip-P>F-hte(bjXom5sXn^I2_=pxahx&7{%iJlOXTas5+|29 zsf5<9p%lfOQi?ylsxGIMxU|ISCC)E#Mv1enb!LgP%;+c<{+tpcOPpI`goSFGq>;|^ zP*oG=f)b-jTxf}g7p2W6{^Am&OI+d%CygZGWhKU!xV*%e5?AQI*q6A{x=DeqPVLCo zH6^YqaqYh(V@r(lN)y+jy(Rh#m{4M3id2x3%ug;cMUK2xlgMu<@kWUoOFUNMrV@9R zm|EiY5;vE)wZtu{1#Ruy%-`>9-;v7iboR80yGuM!;vVJJQ}>!Gp8Hdz+)XR-aES*? zJY=C7I0^fa5|7%BhTl4ekC%9{#1kc+E%9WDr;UHgR9zu=&!k-{{<#v*mv|wSXmt|m zda1Mgi40yN1duG(_T7GgwykFvj z5+9c0&!>q*>-t!Se2Gs=d{*L9t7L5a^HTi3W#vW4FH3w=;;Ry08=&e-7_Ya)ca~_V zOY!_r;@1*CTKJRc&n13w)nrP+i0b;S#P22kEb)i8a3cS!#NVkkVbs->*`~~NWd@fS zP^MmH`ZAd^GnARV%#3AbDKk@h-@w*3EVGdm z?MOn+Zc=7*PiD(rAx!Bq;$WB)%lsr_5<(_APUys$b^dGW(Y~ z(3k^kSqqe%gS@UoCUHoa!&DBv|1n0TJiN>i?g#NQDDY8bjxTd`nPZJP##FUXLXPuF zm7EjGoLuI_GAEVePrj;)N~WkzDRZjvG9@pfr_yqoLuHcM>56q z`Z70|N!ssQ z&6NLS7rayE-GA*tt?NHZzTW?s%8__oAC~#3%%^2OF7rt`HO6)P%pQ|w{-R8`!k0Q@ zD|}Vvw=!Rs`Kin|Wxg--ZJF=9k5s!Pbw8B(G3|jwB9A|p`K8RSHhZ|cR~_=ZHbR9z z%KTO4PfsPW{axmt^vsl538$+tLxlkqrmw`Ou5?8;HDiUDD)IAx)~;wJnWaLd!mJgt z6=th2u)^#W=BV_)=nzsN%~>H+>Hq5uNu%Z}6f5K_6r^a6iQiI%a;5*Sp>pVBOSM9? zLe0W@g+`_Sz9Y-8>*Y^{c7>oqSm{665<5|ajxB4bYk*$&n-B z_Agju%H2n&4nur_E7mrVqUbu#s)7|VetxUR9K?IvX(4qx>SXwD=cGP>C%3e z;&K&Msjz&76)UVzVMryub1A)v*_A4+EG=(Lsl>gc-~XzxT7}gs@#i=RbxF9Uhig?> zufp1iiwf&nm?U}XB-XF6VTBDmD;3?CHZnlGOl?x(;0l{o*rCE^6^40gXoby<7hsDN zyk&)LE!?WY))ls?#BXMl7VTekf~;-l+3iiW#vLo{Rbi(JyI0t`!mbr|@syBS(eMhp zRr>FevLMMGp4~H5k3&`CdALu7eN$bfW&a8XRye?tBsl^fm)NLyHWz{I@OZXDx6;7 z4DoUC9E=Mm1;FU3?kwsj^~~RjRC1Wo1w4^JY?-RjaI~ym|X4k~OMqSY^#B>sDFI;I*r) zQ;knEJ!Z(JDzaXc^*yC9Hb@ywZB%754>zu|NtI2_D`0IOxfohyiz=I2DDW6P4prIG zL%B{mbL%QcR@tV?u2r`6)OJ;Ns}jn;MZ0hBD*IIXzbBFrMYvy;1FP&`;=7k_fMi&Z98xwlGRm8n%GS!;5Y8>&pHa=llln8$dHH&(exjcs0SBRe-&xwFbGRc@hk%KbVDsytxKG}9!X z4^?@z%EMJ2v2bZ?DVWDR6eA-~RC&h3C#yVFY?bG$JZFHaERRxo!9(#c zRr$2a%T?Z~@=BFAs=Vr{*Q&g(gt+3`UsBQaW|g<9y#25Kl>K+Bd{pJVD(_qIKhCqj zA5{6U8bAFet(Yw5V`DxseQpw;Rr#*U=T*M0@`Z(8R{6?|EGH^5^^GOprk(tKm7gs6 z!SqMdF?#r~@>`W(s{C4I4F{}8W!32SDu1L=$(lm?ODA)UzjdD1_@~N@HK;M5#&os* z$8vesHGPd4YVqwryy#5kXEvS1R6NV!6(WnvCXx0d8v}y#Y3mxV{>S|k}AE@rs=&8~5 zFiHMgHRi6xpG~xoI}9FFW1$-J)|kJ>d`8N`82$cNjRiea&nK_`7EWger^yj=Q41HV zvACHfOp~K&DLJaKbS=IiE>mNOnPqD%XJ&cR6-))tVppuOYK@gr$;vfWG5^Y>*urWx z*7R_7(=|+`rKz>dukDO!sB2wI){~^hHZ?Y=F|@{pH8!cSQH_m_RK1i3S=hA3W;I^Z zhXof=!p&=JS!0VD!;}_dM72k@sUyHPZH--OY*%B)8r#>{!MWA(rCHhE zN#I(1PfU!wH;G+q>|SGdjopk?2@=bD)Y#L$q@_!}x_6DcYV1?v>>B&lIIhNiHIAsU ze~m+H98lxn8VA-mNFD1ss!#OI$RWW5QnoKfSn8mB8N`;x8#IJ3rCX*|hJIY-T0Tu|e@8t2#gU-l~gB;X5O7nvGWCe@gn z_SgUy<@y>oq}5apD5RTe++Jg9jazEmY@4dJ8aHJ7B^?DH)cCZcJytHA8LG8<9mD2jY%*q@JG*zk>bxa{;2Uwjo&Q%)m76fe)mxQ zre6J12Y!vebohJUNlTY*)70a0ex}Ls`9Gk}z&g{{nYGRgb!M(JW1X4m@%b#wr*=I{ zJ#OQq3bR>v_BwM|D2ys1s%y?VnL7D8**dv;e5z>QNv>cDb&6J0#)OxoTxb6}l{zcb zsR~@DR;Q;hH0}N|AvBEF{l&O3G1}$@h@D+Y?6mgoo+ooJY_j4hop{Fcx<(@}e_s z$vVp>Ds`5wvrN7JIp@FGSgy|U1|)eKQfJFLE7n=B&PsLGsIzjN)#|KLXH~;OuSnK-N)U$f5I9Uj8U-vqzoXJ(YBn@Oyfw81}BSk9qC-ee3LJJ~>|G@qjv)*Ez7x$#o8@ zb7Y-^m49OnsdK2Aq%^X5xQ9om7S7C3b&jobbiMzD;W3_-$K&dpQ0Mq`D8&=&oTL)? z%-7bI;1Qe;Rc*(b(Qt(I_H`{$5b(os58)xx3D7b#Av%8|RKXch$MG9>08$qG*z?d+OX@=U&4U-!*;DRKDJ? z^HH4-Jp3>{HudcEu_d3RF!}nd&Q~6OZu*7kmuf%9`E{M|Ecr&~YHDZh^x60a9gGcr z)cM@tCoQ(Y&vkw?{uk3-<&ck2-(WNh+1lzw7*ynpH4b;B<}nE-;|M3=O6? zuc4|xV}qF*@rkOTuJL;R-yqXq)&_Gln9a!9O=VflJkb1{sfDaW>g&jxEX z*sj6a4K{ADPJ<0RyKaN^8m!-lk0xbI2e@*wVQOI`Gn(3@!LSCKHrTwuW(|fm`akq3 z0IgyR!;;eS_f*c4)A(g*%$=WGe5wn9;g+RbY;1 zH#57N?vV;LwO4~96?udG8|>5QKeYF4u%9gmpeLCF8XVT(zy^mjIHROE!O2 zFiG7dVS`H=T-o5#2A4Ou%y`|E6x9{xlU;mOgR4DM3}eg;b0b~bU_yiI8jNo+w!t`0 zsrtH94qd%UrXvwQ(X)Npq@J4G;MN9H8r;<2`UW>PxS`SiVlzyi#-%m2!OabBv94Am ziE?sVgS#8t-r!El?{GJ2O4nVM$mu-|?rU&wgO4p2)pdVrXIg`o8$8(H=>`uqc+~QT z8$4o0c4XnP22XhSc&hbegQr{zb^bW7>zM{Gc=p)_&oy}7yk?a{8F|semrONOT3%`J zZi81Fyw%{f25)%kbyKDK%@moe^z8=kq*H3n_p}xb8+_Q{{RSU+N{*5y`6wOA(I*W) z^YByCB;lVc+umGXHu%RG`^xm|2H)slZ}4q{A1wKiDDipG;+3d*qh}zc=_b zmHcK#5&qHOuLgg5s3Zui>+f_(lX;p<*CgL$K$C$@rf)J^lNp-K++@ZkGd26a7f6;r zOOshsiR`HNX7_LoQ|+C^{+u3Wnq-^gnkbEGb@jhy3r*^tEjB4NshBS}`ybD$O=`{m zeacqPH=1;sG@FD?T1^5YWiW}S-6TqNwOB2%+hi`=>@k(!xy{J6!W-1=e>|AC$$aML zZ?d2P3z*8tLMbDa!A*AXaFHg9Hrb%bVog?RvUrnank>;|DbFt1{NFRi(y98gO;%{K zT$AN3(E*iw2p!U7MPuQm>ruO-DIaGhbj+E_LjWKZdTvbba+~$ z-J9%b$sVRjLiRGR>g?0xpeFk^+24}=Ocm+@O%61#n3Ieh?BOA%+Dh8^hnYXzH9exq zQB97tWXZ{K1M5<+iXPMCSYwVeJ-*3_hMmxi|NhT^ktcihlqT0TIkm~?CZ{zyugU36 z&TVo=le3$g+2kz4wEGhK=h&3^X_k!eaHOe;fr~v%Vz{Kq z)gE5jasP z51N(JCyjin$umu!HlO6=S@Q|(dGjxrzG(VVlb3Bxhf;Dbz3Ql5Gkx9k4bwMGlgQt0 zGG~i-n*7z|-6mf(dC%7V)8vyT?>G6V$p=k7OjVNjKQ=}Upy8)YKKJmmX8Z-Hdh&}V zU;cmm*G;}}@{M8Nnto@h#LB`CO@8+9N7J8lVtCj8(&YChzc%^J^%7E-RQ_o4r%xLV zlWhF0GrYw=R;R^GEv9QReajyKTJfnOg1{Om2}Fh4Mr z$VjHeLM^f_dRpXKv|8j_R9X~Tlng7HYCD(B=(tl~Ra?|s)Y2)PGmRF_R{z~Weicd3 zB5DyD(>9ebITkt|c3bgX^;Mv3MF!lFubuEY+!f>Q}R5b<@}N{NG}O7HhTQQ+n+d>sr1}sC|7JI2f((f0f zrE4Ec#O&ANfEN2(T|;%$fh`Vd_5Y-qBrU!FZ*g3ULt7lt;;W*n~tY@XZw(kqaw>YiE2`x@;abk;;TrVAric0j97N@rQPue8@(_5U?;*1t&+NK<7 zBWQJJw>T&DqM_`MXmLf0ku5H1abAm2EzWOop)nVjD%BU65jat~*u&ALvV5tT%Tmnc zX2$6JZ!xyTRSK-d)rm00=ze-_%3qiE!#GREx0s+d*7LvnQ2CtLqAy)t@~|=4Z9K*F z`W830xFNN6V~d+wO!e?2FHjb4X>nJJTU*?2`E90ZzdKsosS54L#7e4?em9%=D-i$_~L){4J_*4CD58BZ#rCy*yw zJk{bEHKG0mfN7%pY>VewJnyLFT|&8gQA68*sm04J-fZzoi`Oi9)l_}*dW$#Q32K96 zGrpx`zs1`&r5!3$@3wfa#X$4P1Hk(&K5OxTjeOYRlNKMf_*g4V4_>Y1Q_l`@Bnsy9 z7GJdZy2Y0*zVehTC!v00U$QLq?{wk?eBWZ`fFD}?)#Aq%zqI(tn4e7*s=&Xt_@l*d zEq+gTN|L2NjnUF%|8E`m0smM+5Fh(V`~w1J@Njxl8Jsa-rXW7q_DVPDECHo}SpzZw zvjxl%FnbU;m5it;0|Vv^{`V90+8Wt_LO?DcFO~FTkycc+3nfG$l>?dqm4JFcHK67x zfn_uP`=1_4WoK>qfY8Gri2wY!0J_>i|9iqtz+wU2fQ18k0_F{vD`1|0xvipX>xpQP zd1YjMWnlGyH3QZ#Kz5|NR>0aGE@GHU zvu?m?0qX^9XZiX88w6|-uwlSPmPl*kfXxCn3D`8~|Gq#ytnh{gY##K#4Uj3d$}p>J z8L&;jRsmakD6qmy0^8OW6wLMk`v>e0uzSFcDnYkAOV`_6gW4U~kKl2G-QR0s950;^LDW9uRPBz<~jW2OJb|Xu!b%hgfU0Vab*} zOr|_MBH*ZiBU8UJb#%ZnLHvgYg-kHV1)Lmke87nTCm5+j$)m25JWO1l62#9Qr#c>O zlhXrk4mcxVOu(4|7X_RZa9+UK0V4v=2{_jkJkfT9A8AwiJf+ntnK%Z+gG3fvLc#@Z?;+wA+PJO4R|Bq!+g%bb5T6Hp;ra@ktm3PHZvwuyO$oKSZv(zdUC5wT z_d~#+0Y3)(7VuNRFOKJDuU#s-eogm|_}{JjhuYOse+5h*^0%CZ@v;ApYa}nzg$xM$ z-v&#r@MZ{^$(R|#{^y^WJxuJ(8qy4zEo4p$XAhaf%s^8mM;XY3lw>m`ACj|Nbyph~ zLW*JkQ=FPg?#dyxkV;6^FnRyj@_I-kjCWsh)NAdnkU=3qNMvN_*|vEluoE&@NH?U% za#_};VCD{)#~4|VM6t~qvQWr;AqynBDSkl@g&C*k|CApb_J1Z?G-T(H#T0zV;vvh0 zEMd%&AlF|BCw`p2Gq5$EPcr5OPDv#E{9h*=IT_-33$B$@=^M77nxh8$)ik@TQQdW-{)9 zTS9L0@K#f;^!AWDQhr-~xu%!@Auom89r9$zJs}T;+#B+M;taVzJ#$nnb>Os+2h-C= z0jTXC4tXr(k&s8zDr-ghEc|%L6An)qlkTpQc`D@jkf%eQ4SB{>k}Jc{nHQ6k?1hjQ zElHZ;W$_`eguET{YRDTp|8@8)Fq@UiH+ugc@>ZG|*^%Nqw(xGqdzLGPWK+B!@^Q!q zVf+dG!;p^*)2wbWlIZ#*JiF!lrsx;yn z-;ST4^qeefTGWhf=4>-lo7vmU+-BBxe5%Z1s`zJX$2XBAlXJA=%`(tbLh-sX9%kF* z+T_zI&B{oz%~5SiZPsa1ZnIdMN}HZG)iyz!TAOB@dYeY-OJU1V%O2G#8HL}b)27`f zYR8`i)DB9638~f1*JgfQ){;aj3$_{DW}!9%mC{wGqS*y(&ZPrZlAfc)wx^^1*x@~rCvtFC6+N|GZ z(>5El*|^PyZ8mB%!uK+Tot#mdI3BHZvo>3_8QNxZIrZ8lRLO?5*;01wLYYw#wr;aS zn{C=`XWea0$LRcT#}5_zOpfV}ZFX+6lO_9GvWv^DDcKw@zRhlJ_H47e)%P&f)PHpT zx7o*e*gMUJg!{JRPm2m{|2BuVIiSr!Z4R_n65GLT4sqm4U1I03Hb)q6csu??Q?>CU z+x>6#k8X2Cn`7Es)aKYWXSO-6&B<+!Z*!uxPB2x)Pck#X>Zi0h&BIfj|4a1z-{uVS z>K_f|{j4@4+nn9zTqDnE$InsfnGqf;fm+UaZ7yhYz9mVmCA`q-5~FLBr!H$*1M+l*~9t{s2sk&&d& z#q=6B*usfz`aGOunmC%$=9V_sx4Fr}8`|7xM!NS~YpRDgYo~a4t2Uq|x0&9adc3pE z-EHo&Fsac!ZSHNy|2a#hbZOJw-{$8w543rw&9pWzw|TJ5Q*9n<^QaXcZu7{$EIiic z2@fAPRWm$kM%KhX-R5}@pK0@Ko9E0Y3m1LC!x!7UWJV2^Ouf?PjW(}ZC_As2c|GmM zH&gjrZQf3KCFd2zDWaSLbgBzhjrt$D)G)g09yUy6Grk2x z@tGM!gb`iy?T9F%V?H_M6lYJwJP~t6%xy<2`R}D`?SmrbwM5I2JB2!b#HJAoL@XDv zV8kL33)$Vmrh`od6L`^x#XVfiRFWkkmX265VyP%Tb0pCvFUv$M8^x!na-~{N)8BuK zSUX~ch*cwoM64XKV#G?u2$0-!SMg9<2Tx|Th&3WsPXQ9H8L^g!TE22MM%jqiC}Q1+ z4IV#|mvqWHN*v%?G%pA5H-*fC<8 zh;7qVZx^w>t1Pgt9a2X-MeJ&RXVYCwbwms|Bjj$%tyT7jxGQ4Mi1Q=%ia07_Z)H+< zlZb;O_Ki3|z9RNlPrB$@vUcl%5eG#mrMjOgArc-Ead^a`N`4go_g+ou($o8ia0gmK33EY2Z^VTWS4CVDG1{}EA}&sitL-m|xIE(0 zh|4_tz7=Kjiij&MIdpRWeeLRqu@Pe;u8p|HQ-Uco*O`|)#Xrvcc+;e&6C!Som>6+m zL|?>|h)EHXT^*?>HM&0HhA95W5Hg~c7S(lA#MIP_hPOoA5pk;}w?*9kudYaLI(K?s zXs_LE%smk=MBE$kli=Kq>z;kX z^i3U5X0(bV5AW!-?C@^HFA?u~>OT>mN4y{LNyG;cA4hx`@sZC=xz;7Wx)SEoh|gT> ztR-JWd>`>;#5WONMSN{71*R*;M|@`&_j{-Seu(%f;>W~qYW8OjW$;&>+Z}$>G2Y?# zh<_sfi1^F1f2NqfQ{5y0I!xDLK&SuUP1ZO=hgmxD2|r_pnL5ne>HppNL`CvhJIrQ) zc!fGghjNF39SR-h?2zk_>5xrrUTutE`BWmUVuz9~BrC0$uXd=LsdeJYCc!jh%FAzc zSfNAEVSx@|hq*hnJ9LbXI{!O?yB&Hu%w@R_K?yy{kWjZWtjLaqh$jkDUD3~D~ zHtn!thqXJb)M2#_D|>2{4y&3OJGp-?t9Mw_k~KR0Kd7^ohq5+K+oZ#W9oFrzeuwos z{V#m9?>0y=$>G0IhmAXI(ux1WNW56n%{pw;VQ7af4c@%N79EB;&xzJhz5nsl)~PjR zU|aLsb=a}P_8oRGUggszt(`jToK_(*va9jKJM7zGw+?%B*gdtDgt2Fby)4<=bRSb~ zw8tm2UxyPq?BC&t4hM8NxWj>-J;+pPR0a-_I}Z;vO%ATZoeBkTq=iRyIJU#l9ggu( zFR`DP95?fE9gep|>rz_u&xKFya88GlI-F+t$sJDVaO%H0RyI%Xa8`#iI-HrVRHme^ z>uk5dVEyrj4(E3m(cwJX8L5st|eu<$n1+f5U9cXqg|!`*3fDgfnK z^xh8lb$GzY`&0ZhGn$q0hdO-L;o%Oic6g-2a~&S-@N|dAIy~9o@eWTIEM($HT2FQQ zpM;-D?L2E{unzwYFPVR#!;9%`(t$5`cqNsnOs{o#zr*Vt-soB9LYM8byge>wsy9?CbQzLjl!reivr?B;yR2-$ zDyB)vRx>XvdVD%esm%&6sMmewPg#)o2U5rWyBwjeHduajM>xuWqq`iF%D3|Daa~UAa=d4SJi*M9 zdj9Wna@qr@bU8I$moUoe>0L&4Iit&&#w+J%nK|3^98)3BH8aArI)(GPT-oJ(4=?C) zX_pJTT-@a%OGcSWD=EpTZ*yZ{zx7p4OU2g1hbC;VuR6J9= z{h#A*vE?+$+@%#c=l68EzstSp?0sgEzp4<>H|(&vkjY z%adImvHa04kDGZ+hd^52C%XOLs6N%@>9oF5f5ymXP4CzFZ$|PLy1Z!qrBtHR>6I>@ zb$PYRI~KlX`g)f)y1ZrnO;g4Bwi($`Zr|i&ivG6C;pH)G3#jjm{vqZ%e z?055jI5Ya3`CBe^16qKBn=Ske;pq$Eq5R|AM& z*8Fm&%bTuXI>dBE)0IqPMSoOZrH55};+9^`bam4;OxHAB%XHY37_&|f=k~B}5Bv78 zUJpAc^F3_S!v;MJ?P0?nHtAub9yZq06oyY>k0~5Dg-v_dtcOFUaP$;TnZk%EY~I6` zJ#5j#upUND;mRqDo5J`hY}LcoJ=`>fd#3P+&W9;%+rxG}|3}nWKwnWk5BxKNgoq*y z(!Pzi``*?UMNlb~MpU{>LK^8%3{33q?%=DGq5?_?f|3e|fQ7V(h?JoJ+3SzQ$q628G(}o8h_){WA2=pcnm}dcwr;49IZ3;UAb`P=>)7 zcFp9Fdf1E_l3`eep&7R5wMMrkXENM)x9 zRx|r;8Scq2J;R+DZqIN>hJr#aD&&$vniO(ZhPyMV{wm?hLfREF!;HE&!+q+*Lb?~y zvygs;Jdj~dh6gjeoZ+Di&t!O5-J9W&466L286H#T6f#0BEo5{dPh@yXgKONSE*(>t zdh%&w_>@AP&G3TJ{J9Lzn;F$(s>6$h_)><3YFZ&T74k}kw==w&;jIj>WqAFxwr^-? z3_h)pOU+nysZR7xhW9hPo8dh(waT2Cq0r#B6mnZ3w-@q(Y0k__|T}T!#~O}-{3O}xwnu{GAz#UX@*4^7Gzj>TA%w1)8g}4hR@YYg*;ry zqlU61!?FxZjg5~P$`=`yXL#D+8eARqWrnXatkn3P*7+;L|6lKFij~U zE93+ThVn~>9lDeZ{U!rdpJBIQxZ{1E`EQh70y2E}J}2L2e}=y^ z{FdQxh65S?$nblHgNDD|2i*MuD?Z>*hCkJfrqXIPt~QImG91frB*Rh7{8==g#ci|L zGK=FGPH2gqo$6L+Hr{MbYGJoHrCzf5M~lB^_3ZRuiC+GO&PFWGuoyX;`LkI+o9c5Y zYEj(cOp9U`Q|6>{9yCyq5*8~AewIbnqLf8di?c1tS(LUYV{wkfxfW~ZP;72`)wp^t z=UJ4sm_L`A^JqDb8|P8pqLM`gi;5Pv&*RZ~ESkrfc~rKjVzG4|XMTwHVLI>m7IiGD zS=6+sZc)SHiVqq3A)kIo(T}KQQQM;BM=9t0kJ2rp3oLAljD=+(^XWD}?dmrl$HKL^ ze?H&O=jZvf_!!TkzJ+g*SmZ21i@Zf(rN3OR{+KQwr}-IK#1_|m%*!8h{9`WtgaV6; zEb3ZZXff^+Hhz+R%l-Qk>RDW@ntaNOpR(Xne*KgN7L6?~vAE3QQY(EHzS@FR!-f`( zEV?X6Df&_Mny670O)W0BcxC~gEMUokRP8G*nrR>wrWe^p3sXu9i(7OSm1faOg;=z< zxYnYLMLUbO7FSs*Tg!zEUdX70Ty1fU#k&jneIX4N(R2~*Ejn3ru;^$pa}h@t(f>2v z{VcuWceeQSGnRfvSBu^j-7I?OEP4yrV#8b>lr2m7c`3s! zMriWrNr|N#TADg`l*Jf}(H1vYX*kYXM%86_%NVQ9*AOhD`7*9vM#p7Lu$XKy(XdT2 zP*;i$nPPF1#Z-$MRrzJ+3y->e8PhCoRt1*v<1()Og15flR*UB?ZnJpEV!Fi)%}k5C zEbg$lQ*+Wps^oGiE$42FdyHppUe24#`CvKsT0CHJpC*{ahs#;CJhghcfe-2eSwWW- zJZ$l##UmDvTRdvEnc*E!{Q~2S1n$)ctx|<@Q?VC(O>eK#p~**FPZcuQ@&){m%M55j>TIRZ!71Q z>Fj@fNu8CvYw@10nw8iq>9jJX7h24-c;8~S#RnF%EV{3xzv&vVk~tQ0HI#bGW+mHJ zvTr3H8vQ@gWv-G}^2bX4S_!N8MAxIur%JR~VDX*BLW@-vi!8pd_{?I7#pf1_b(yS6 z56dmqw}Px?`^i0Uo3W7?6CM%rRnXA zwd`6;(RJ*y*liSUw~m49_;?+AEq*guw9jI{L3FK^SYUvssq=jKNHri zXY+dg)iq+LOKh|XN>p8=wq)ic&a^qOK3$AQ*7MJLirbXXt_|stA^qsd z-m`4Zw$ln<%1);nxPj6(=h*4nZ-#D2ReE&;Wo&BLoM%(XrmRhQn{sv<6#dNKKn0tM zHlJ_!A7#Y`D%+fIQ^lsL&6*8q@zKxb4OFwKZu8>?I)1~_Z*ad&T~yPimdyn=wQcIC z4&SCfLzMpAw`6QAn_b_gM}zd_^T}^TJZ@ zNU|}NufB?G5<7h#V619yO!XAJ@DUVHko7Xq7a1-Be zV*e&CvAN9jUTRZ%b82Zrn?^PjHm6RjZYWJ`uCi%r(?U6In%P`obEPV2crM$VI=Q)0 zG|HP(|F^VhZPUt5qw~n-RMj>%ZEarJ%!iv&~tIb%OZZ?B#y4&=%>0#5`rl(CW&5G|RwFP@i zI zdn$h=q8+Eob&gK@I@itRzCfH2U z*>wv@qp+RE+nH?hk?!YgPyII4<|dmPjW=d)PqSj0&CNDnZcnXPy`7RjaI4K-Hn-W_ zVKd$4c6F(_BYfQtJorQEoI7pa`5|3FciYTR|LZH@4E*>9?zOqk=C2>9@*~cVX?i@M ztHa?zb-T?&Ht*X!Z1a-MBQ{UlJZkfV&0{u?t8af~-;dPziGrVa(&i~6v-MB({E7E| z;u)LgZJxDx&c^wfUO)5Z&m8@k7i?bC{Qrduen~@|{KCsNZ)px_`q{i{^O`ZXrRlxq z7v8XW(?sFAUl{!h(|+M?oA=Zrn|E#QREA$z@=L1uOq)W(`O_~{+>vJN2R5JC%(9uU zYr$ro%^aJ#>gOFa+CkSHsiQtrZ`%ys!So$Gu!E;|@UhJTn@_a(>nc;RJJ@PC7ph`5 z+x1()ue|bWs{H3RD{L0qEVEf+vsB&nYdY_yUm3oWFKm|E+`5y8ck<#+7VYFqo3CtE z+N{!nJJUdH+{uoed~LJZ=EzQ}?xM~vF5bmjo8N5KY3Z<8uglhEgUv>pZ*0ERRkn-H zyHe$Q?_!h9W}9)lm~JSl)fSs=Hs9N9)me5?VmI}7GjKQCZGO;P+RZ(?)2w)SH$Q2q zvH96%hsl{=419MtzuN3nU+rei?lcKC>vr4hv)N;_*XF0)M0?UNfvxtiU!AEg(wDUC z;egF4o8Q$Cn}b^LZT`^WZx;K6J>0P;iaPwfm)iT%^3r1; z#T-gH6n7}$(0dK&x0*%_;6thn`HYD;~G#tsb}E_1lV;Zlct4zlQAYW13fG<0ZWm^IvM53>0nO&l(F z(mL7H;fz11{s&h$T&W*(In%V!<AXYLaEIfEQ|IV(#s6Z2!)S+*4x==S%q8aBznJnD zH#m%OD1C$qN78|MO&sSi#bLa|MB}RonjuG0H%@Yxtdt{ZEV>?H+!3ZaOmnzV6TnF? zyNmS=KS#Lt2sb<2;_%85W*xygnqFsb({MXXcUaI)!_y8=Iy|Kd=Qxdy)8}}4oqERMS%?0|dH6U_A5XuEJn!(5O3*}g z`06-2j`PQH%ADY3HN;`wiS%-;hN~Z5bC~1sy2E=8Z#cZ|@TS9C4&R+%%L(?L;LN{y z$KhQ~`@d6PMSpYo-^_IQz@gCLeGT#7sZU1#&8vSi%VD;|w|}P|u6vTECz|a)?6SU_1tNFv)f7$de zs~y%ktZ`WD@aMmri)==UiKqhWRRNJbBHuWCueNAPJ8X2=q|QG>3eS)-MMT%jcMe-r zNj*kbM6N3$dQIHw@PorPhwWN3)we}tN)ee`M1FMm$t3)|B67Hh{98nRaroU~hr>RH zU$q1|>~z@W(7C7#D=H(3%DAGkN0**vQBirVsAwjuKNaqG_|4&f23K#y6qUI}Wld2z z=y25G4~N4JhtwQZwW#Pfz>`HKI#d2~IO5RoOwmfx>`Zz0OgZN8x2`6K6Q-W1s6A(j zUTRM|oHDT}Q%uyom5a&0TAf^Qsp%pvWn9j1Dd|$grI<@mmor^z6_a+wD(iRR=>#pK;$a+XVJmr^cgyXlXVPm9T^VxlYJ9G7!lvc;uE@zixX-FYsRUCO#t za4F|f-lcPKxxKhNUpzIxqDv(=t#z*!PYu~$T&lQKbE)cbzRTg_aZm#;bhL$GNGjC z>X=qiwv?25E)85RcB$_&{VbV#mMFiPbBW8PZd$JvoF!FDiN?C2OLvz>N_1)L(#)la z%jGUj4Vwy7eXdY5-82JxloExySemQzU0S%bbh)mSXcS&8C2y6I)-G+_v=HfBi%ZG2 zQgW3`N0)Xk*ScKoa*dmok-eqlP^mQZ?Oi%(e9xApXUqK3ss5c@x@tsRy11+>okrx$ zbEM=s=|bq{^4vM8&OKa)xb)PiU3$6nb?NQWN4b+lglkG(_C(L`9Uw%Wo2qvxudMy>ZV(NAC(n_(_QW`&D#xJTUPFLxy$9p zva;7O{8d)&ak=00&TzTca1n^1RCnI$b$=qMW>4P8OFFHS;CS z0VC}dm-k#=b$P?(HA8vbz;6uOn=bFTyyfz?rg}NqQBF>kla2rW+gSesQcc#-mrqTY z=~C!2%jJES57f8iMZ0R17iF96GDjDh!Ic=6mwCFbvwY~X-{m8hwVH1(U$}hi@|nvg zE(={gby;B4xTL&XR$hM6A69O<%hbf+pSvtE&BX>@RbH05EYn0SFP#lTm-4dQ5dz?#V~yDveh7GRFIMtQq8x!{HmGb^0VfHc4=Z%kOwQsrxj#z z1^LBghpT_HC@Q&lMJZcRc4`{C>~h(yWw4@Dt0=W9rgHYW>@$*c6{WyXe$(=s<$%ix zm)~9fQhi(wx%^?+bV%EZ@~4(WU9A;mWJMWYQSPZIM_i7%95p;MD$2bT<@jm-4=T#v zs*KA?Lpf#OClzIRMfq3LH4E7^3i?@7QO-DxZ>%Uqvz(jd%q(YTDVC*Vmf~4TWdHw} zlpia~Sy@VDIigcklv5Q`drKP$=bV;PvXYcB_<32%Whra$%9T>v%Nx9w!7FCDJWHi4 zUY5#PF33_POLfCgHOu)~su|p?Bt0t0kV;Y`ORX$54N*niUrB0bsgu=zDM}@mG3I1U zua(6yh;88fO5$e8X7w+JQcnGBs3d-ti?igiBw6xVqAWp{(C~j>DK+YsN)j8x6+c)> z3bI_7rS5-X^_F@ixhP9Lbw%a>$*fda>St+`r9qZUvs_|0YntB6vNTjP4c^kg#-_JP zmZn**F_hkwWl&|gLYrBx%+l5{G|SRFORFp`vb4-H(r~K&V=7DQEN!y-|0e0|cUG2% zE6Y`8h&J10x%xEza%H(TOV=#zvve}V4hD8K@a@Xd`7~!2gM40Dx@GB;rF)j1S$Y`a zDl<#3EWJ&0gEkGNuW9x(Q0LuSS+2|SYL)?6?#?nW%akmGvW(6$ILnAE*Jl})Wk{Bx zYD*QFP(`Lzkz1;yCJfJVUln=V;3JK|Q3ifmMQ+G4KFgRa;|yi2fu9*p4b6lslT4T< zX7vT~@>La?Y#3DLYL%bmR@1yO%S~BsHuy9HH|o@-Tp z4CVDKZ)BOB<;^UGS>DR>ZkD&RykmN&R+T%AocFTKRCB7z6IJE8s`8d0zOO4Q%dD)v z9a`oXirS^K&&e`3%STz}Y4JC5KCLQCtIE2nGC#}5S=LvTZHE7cs`6=;)mau~S)OH~ z1}MuSU4~}VXIXYtmD|pj#aWhQnSOq1(Y*#PGYs1N!dNs=-~X9ql_7qaWu+lLe15t} zzcR$H4g62NHCZ-gS({~pA+A$>45HFrJYT*s__tX$8f2!KP6uwzvMtMZS-v;)Ee0xm ztC>s3E<9hhD>2ItS$@pwyGc`RR~x9v&pO@t>E(Eb7ASrHgH|e!omq-{?9x)1Wp|d} zv+T*TKg-@M`;>CNG_EGsSCa|V zuNHrgD{Dy48q%kRXxAAYMZENE!>}4Mwua2EA!mA&^C;$VwnuS~vph<8l=S$bhCFFR zeOE(DdFfdc{pij2(jH|z&ha?cOAk5htRXdOO6{6*o<~{rgE?=Yry8;~rMyQ~j|v`@ zJt}%s^3r1){cFmEn(}X0CR%6wzON-e*OHyJq`_&= z?5!o2dR(Du>k&|oh8|5k8hJD}^B$}v#cNBc+S1hHa*rCdMIF_kb~@LU9&J3Dd9?Is z?$N@dOKs^H14D=Y}G1zE3zqX{QqFX>7!whApr;mfB zS`GIY;jyl^r~(^|oKYU*JVtwr@wmY#qhr-GYVTNM<0`#p;W6QKc1<*@ZZ^^;du;KT z;_-pURFB6zZdA2BZt}R@W17dU9yfd3;^|X7azP!rsE%A+M{e_&u4>ego9oEEb!1T; zxx?dbk2^i?@>pF*eybyg>&Qs0|C$&c#|_@#f|PQf$3tqkekbvGz~e!W=Pr;{7sx@= z`>@BOruPv8$%vjko}lOdJzn;B!s8i3f70VAkEcCe*Do^}shknL_57^I3o6aydCkd; zG|9+k>eY^Bdwi_DmMpYnwI$mv`P5^P#{!RqS_v)r$CA>v)Uf3w(YktlW{6r?c`#R?hG#;_DX!`8X?Uv+`Y5&h#naQ_QEh zj><|IPph#wo|N=C%cp@S%{=Mg$z7hD?NiRDv`-nIb9~PAb)m^)o_yfRJWtN^DeLo@ zr@@l7o^0~uDg6oHQ^BXApPmigW+=Nnsq9nTr;490qN;uxtn&@5X5e358Y%6n;ZxJ_ z)G|;hwNvZTHF$x~tv(r_t9>k=#y+-B?Bn=&s-8ao<&!nYnZ9V#_X&J*K6yht*O#ik z)bu6P8PieH)Rz{9Gx4eKQ{Z!vPhFo24S!!>hWawmmwG-I``qu#v%b7z_#60K=5vY9 zr9Sfw<#S)w`qI#+ks14gFS~p>=1UWwWOmjv~9x-FD@fqlItxspoWZeQXu!B!WpH4n+=j4N& ze43N5a?-`8w@+7}9zNZCy8Eop$?lvSQ#pC*>C;R7nNJsEL0%f?rH@a4pT0i*e46B? ze_n>?Wnx~g^BLgtKt7Gv+j*Ipmq9*beFkgF`CRWa)KBZ%5T7}DS(le#M&Vs~IhL0Z zKBG0PKBIh2=A}rGW=qLHZtxjn*h&R*P9RkS8Rs*_XS~lOp9ww_eQF1i4a5&53epNW zS>qMR#eq!qndWn&&rO<#>VZHy1=1yun|*Ha8DyBp1Ts00+k8IuneOwP&+R@B`rP4j zpU<5>_xRl9bGLp1c`T3@0(mWv8JgNEjZy>W_ZBS>?09XQ|IZpU-_3X&`)NMDlqg8zVUt$zq=+T5aO= z!lcp^F7sL8^M$%mW2CQViKT9wUJbwWS!r@uHPNNfD3-5$Hu!w)vsP{KS>tm>EWKj6 zE|$TutW$q#I>j&?2jT(+vo=|2ZN_#i^JQK^BSho0tIllLi99w<< z^x5XK$7j3G&wjdX@`KNhiYPr!zk&a1;4d0npB+BG`urBlkyuEiVxlXZ-CB7P$tThv zk&cP%^*P|P&xqQu%sxXBxiLva-JZzrK7W|5g9bj5$RUGh?=y)U_Bm>rfB76Sh;4q9 z9n(VXb6gjW&k3KueO@&J-%8|zL{1sb*@p7(X=&v6#8A%2Q6)!_9Hnv;%~3p;+IVJ; zVg^zCbHi35N68##8R9BK*^tQDIm+fJouf>Sb8?)U0M|><#Pl%zNjl} z>PnRhQ#nzN?m6Nd&2uCWlV#EX^RP#TzKeS=?`nnR%hiHC-)oTxGgi z=4h3pO^(*4xxn@O;F&gA~d_Bh-Io>p!>h>*$ z_;!wkIo`=JJIA{@-aDN+GjqJ3qwqAdI_-lTvrIEnKQ*maeVL<0LubkHQI2^zJ~X|< z>&v+MGQGac&+&1Nx9g`?&ob~+!?3_WCH_)h7UlRd$7eZ~7~2F-MeVQ;t(PHs{!zrWa{hr2g!{7PRRL_0} z{+;8bAu46~rSeaXN_qa(8lHzdMe|5LEyZW#DPoZ6m&yy5${Ux;nR!a&DVC?Wp%)ry z(=SUUmo$`nFOyPv&dYOlo^$h*&T~$lM-9VMm&xk}DPuTQ^Rju$=P75Jvo4cGmq~>@ z6;*+Ta#=%Z)=-8tl*)NBd8*{8k*8{&YKHmzJX0IWjE3pF)eYt0hEg+6ojkSj)Hal- z8%kkA`KX~>V46z|vz5os>-SZ%d7M0Mp7jl7OGDXfdOgGWpJQ`*0@KVJc+4<_szal6 z(l}4QJV~Awc?$A0%2PK_gFF}Jxj4^7dFthl-1l!7s^knQ30C%!Z-@8yZTZ zM*0<+%MISdz@`Q^ZX{RaX_n_o(^UQzW?=I?ts6=EM$$4*r#!9lT& zr_89Hd3qZmz4BbwIQ2}QJbm+wZ!C|Q=5vkpCjeu#H_!EX2AtM^V4gvF2Ak$e!@0h( z49PP*&(PC6!xS-HBl3(g#E}N>Xe^`i+>mEyW7*$W{%kB2n#kBZH{}_ZXNu0AXJVcS zhPgo#xvYsy$}?G=(C;pOHHRd%0)sqchCF59B18Giz*n2fVuLI(aA}@p22q)Bsv1pY zd7gE7R^<6Q&zE^tpI69{|AbsAX9rvmP&%M$ zz&Qcs0?rLM&x|b-q;;m~m8sLpD$yY211ben2&foP!%(!h&XrO*ph}P)+t8+dyesAW zfSLi-jHv3$Y>?zisn9GHSj#kP2h=gMD8+7;u7ylM9AE|bN)K=in`2p+(dIU5HxGJD&Knv9>;L3n2 z%#e?o$*N}3ETDP7{$}!LGx^&{Xc^Etpq1gFxfE|MZ35Z`lxm*(L_g;>mv#Z203Vbfz4$^ zbLkl{B%oKobpgEt`UUg}=o>Jpx!m4d?rScO8G-!+<{D%`pj#`c0|y3t)LfP{m%#zo z8_IUWu(P=g4Hz9TEMP>yaMN|bbd3xc6>zk!-w~(`2 zO7)hKYbmz{Ojr3W<=U1qxTTD0DR%_i7jS35Jpp$Gy7|M+E#=Xc@@`96&{Adu+#B#k zOIh1ewziZ#E#>}zhXNi5crf5(ODWSzGOeVbl{{<`yJ;)w+DaY`cp>1ifM)|94|poz z2~8XIYAYGkO0I7uLtDwy0nZqFr?yJXf6u_@4CVQN_gl$=R`O!N8v!o`yc+Owz$*ct zw~~KbiL{m?t#x~f*L6L%PKQ@FP?0wS-ZDb!7|J^VTLaz=SQhY}hACiXz?^`>fDa7Y z`vzXnS~s|uZScelY|vWfn&!NK4>d&%v3+al(^~hzSQPMaz=D8J0zNftgAK!|*0Rtv zC$^Spt#!MM#j3NRsBZVQmL&m8P4iL1|5R)FB4B->J87&ASP`%);LCuOhUX2#Q`lO* z3i#Sk78%Nt*0RPl*9NRpenV9GKeUz&0UJ%%Hv!)oMCrOVHwAnbu-Q;{wU*tbe5KM1kBa&u;IB4vqK*6+ za3tWcHnncIm6C0xblY^UqXEYP%C?p2Z6!3669H$2{2lO*=HY2ePiYY|z5i;#4+RAw$WkYruo+4LCsjH-X$dr%@AyTK>Qz!Lq-IF)WMTT^v$BMkW1CchV!zJx2~4Yu1=?Dr2aSMx=G08rnhOx zfvY9DMy@zLW2bARSxCQ-<{=$IT7+B`(lVsAVQ6LGjBBJ#NZXK^*Q7e==c8++UC1@2 z_v(<34gK1X_90&we6@icL%N4_3h81vJBMsE^sXV@3}usP*1lGHg!B&S8PY2xyf#(- zzH8;7Yo$*}U&Hz6wKBfFOlmLvLq>&M7cwMdK*->bfgyto&;9M?+4k~k`&7y64du=D zGBjjF$gq&%A#b;rnWlH1fg?la8)S6IxR4vnkTD@+Lq0cjm9wP1j1QR@GQspJMRl7L zGC5@FX`XfMWopO=AvcCR8FEv|jF4#|w};#ua%;#fX6#ABe_P1(kbl}s=?^->q=V^wDCFUgjs{nm zy*kLFA&-YVc3S5fOxF{pIktm574k;N)1hwE^GwL|AolT^&<%-VAw9Gce>G^|qnE*-_@0u6IM0b(C)m zJ~N~+$cm69s)okSbZs+TUxX|VDc@Ntb(UJ4 z(^5VB5}WXO8cwISpigWT0Q zbcb5Hz{<9Xbh+ni+ zM(hYV74mDy!H}IHziIUg*&DJuWKYQ9&T_P~{L?wT>98+kf5;hKq;!|Gc}17>4#fej zJo@hgA(Ohuv@Y^T$gz+^A%BJZslzp6yT}7w?u zM#yKU=_gI|g)ZqWxqm|b)jA(RM3D%II3wZ>Gj*BM{IBcgf0W)XEM{O~7n$EhN<``1 zoRSfx4e_if)w7g=XB)Vni<}ctKH}U+Zwyh!5Wnb>-ZLs2QBEo5UC=*wk)2)iwoxjr zqJjIm$e&%La-=tpQd_DRST*AOh#C>q3{Q0fj~hqTGz_&OYDekWgQ8tiSCr@~7ev&J z$VB8KtcYxcZ8)6>S7+}k<+`TID6?mzse!(+r9xN98%hunM}(@mp;ziERl3UgT_uSq zh|>E|wYsLasMHXZb790qM!w3a7jbb!eKV?#YSLA#u5w94i-=1jnnqk^iS4FgnXcN)ebSY7p+Zy?bC|f&& zD{{3#t}*ah1KX=lx{7vnjQA#^Q^aEtog>CabWsB%x<>Sg=oZm4qI*P-h@h)9>?$p~ zO1rMoE24MA#IACGS9!Fn%<3wABd&|+7tufBqpq^CYkD|;XIB{zF)-p#S1Hp?&hI9* zyUAcRIpX?=VG%Nw1w7X=xOVnL1=`J@$ z+!QgOyNvEG6T8a;-R0(p+ahj>xHaOL?(%wfnb%zwcbDlAw@0k#F5h*RAG^!W?s8|u z{SkLXddrf#Bkqa#yStpzL#p(UT0P|6i2HP|9+K-J7x$1xJ>-Fiha(=0ct``l1aT}cEp^Bn|sL}z2v@L@@Oxa7qKkj!-$0%{fJLg=ZKGWmR_==m#pq38+ys7 z5ep(V_LAMbxktMD>Wh!UutlB%QL;@<=!%{x2%fzD&lZ&snJI|^pSCWWOc;4h&2&wHMo7`i9RyB zk9^!m)<}@tfg4VVF<$mEU#YL>!FxBcf4Q0{ZIL(?u9S}b<;<9~W4$9!$(Z6XC1QH^mjV4{c>mO*vtmlc zjOs6o^bhj-%l-YObWE9;b7Ibod8oh4?k}tR%a8r#yqK~vfA*Kd{pGLz=|f)SW8#U~>CKr>B(+3-; z3`id}QaNEvWb~OjKwcjp-w%)^rcq3Rx+|t`Oud*3V=jt0G(Z@bK6WGn)09v*)>oBc z8pK?pt{W(44V2OYrS?F%ET*A4$2`0GlKx;BD2-#9$23tTW17ZXZgeXcnC9C>Dl?{8 zoW@ZVQ~AvYN{g7*F)d?S#q=1MK4R8$pbQ(BJ{;F3PM=Uy<*$nQD5hP^{V`X^jEuP^ zrccbZF_~PdL^XB((;~sF-Onqhlt<+z>M^W=zaj^{qY*Hb`zCBo7Rd z@i7zBA;$CX43Zv$Wm3%4n8`6yj6a7C7JWurRlPChCc~-zTs&Ab5I4u%8FNd_^q5;? zZZrJ)P`~De8hd-p9WlEGr-rLzcMq1kVrInL9dnP7vv;r@8Z0LU%e^u88Sj<6URGV7 zdgg(cw__fR^)Lw!#XJ_LPxCz-^GK`*PUtiwO*8%U8X}L!JQedq%#&vJfkV=0>Wu07 zHI(az$g?r8#5|{Nk9j`k1$E#M89pS<>JdZarI?rF^y#^YL*(Wm=GnlQH)39kd0ht% zNmG615cz3{yczRW%sw5WH`9lvI=mAzJLcV(_l^GVX}-l28g0)RDw&~jex z&F~gOWlqe8hG%ZfJPnyHuAwq*Xqx{jd49~Xn2)uR#C#I7GUn5mB{2(PK8snX1Jwyb z<>{gF(olJKsC*u?SU*E$%~07mRJIS5r7_E6mc@J#vty|29V+FAi8V}C#C)j>bC@(7 zCRYrT*282~%=(zGV%Efb9kW{Ve3(oaCN~X}XNJkzn04x$Ve-~6`BIz1WP=v`m~Udf zjro3<>>4KfhRLB}vMFYBO!?vB4VNavrNwaB60=8nVt$U<8uLS}=X}^6bJcJeKU{7c zF4Kq0k1;=KG7Oi8hRf^2<-OtZOUzEyIp$YYez>d~E?bAozTvVfW_QdV!{yj;`FFUS zJwoLLW6GzJ3Bc(_}v4o-tXC^!_Qr;UWGe^otDmI}+!nTp}=SVp+Qc91K zvl7lrD3x$d!r2L>6Dp085u@auQF7lXIX9t9!b79v=~43BD0z95luf9RP%fc-!uz9S z&M5h4lzcHt4@Xfc;k!|?b(HKMl@|Oe32s8wgxU$`C)7x&mQX!O)9m0VIXp^Ej*^-Q zwGtRD6-G>?FP9p;i7~Y zH^`$m$nqQH?;GUeL=Rk1KVeKlgM>~Amn5`GxKtHLxGbS@Lc@ecI`x?Jmux))nD_196lh9$T^d2ii#>(8W(%ua3kkBz<^;lUyRN&;GrzYH(&~v=Z9xoq`mv6?) zw1nFeZcex@;g*D34cjI&G2PHmv9BZ?Fg&j% z{E+Z^!jgnH66PelnJ_cqt%P?I-cEQY;qXK$Hc84)l1h_OmEP0DFi2s-EM2DwA83dt z$&^WQ*CcsrlFUA>)q+VfH{sKSc?t6qK1}#1Vc8_vG)canBtJ}&j}tvunC9vUBk-)r zvLNBJgoO!#)NMYzSW>lmIqDOlLl@w z(w>_v-z98K*pl$QF6YTI)AY`tEZY*cC;VobI=g!N$AsfLN*$i?bHX0Y8BLOe9SOf0 zX@5Fob% z@hqUE!Al!>MgeCQP^5sO1^+u4QfaExo+`x(C|*E=snXrB4VWq=3plrcvkEx7fKml% zhzC!VQB$RK0p}F(fMI)bs(dh2$`nwpfb$9{YuFY~mE}|A=c!V@fC>d1F`Or+%BiVR zsepk6R4$-#0aXg9TR_zUtOCw2phiLZ3#FQY)eDdt<-!}KW&w2ys8vAi0y^C&|3}rA zfZJ64@4p{K1BIk$5K$xxJ3MIWL30n9d2pKtr$$Nb(Q?~p36GZBJ!s)U=g~5Fv}BBy^3l@LgEk(t z@}RW`D@V)L(Q;t492+fndf@Tk!f0tYMgn8R9wR;vLLT@%&aFy-7$j=4^B4(x5c43S zE#j44l<_|_hCczJ{i%019_N~^*BD89(A9&KhT(zfL37z9z5?se-EDZV1NgMJb2oJf!c8X+>jdU1@JTM$v*m9B@<+@2hVvh#Dk$8=Ndq} zx5)(Ow+M!LoQrDz1gA@1@L;qDFM9Bj2g5xWq5U~QI!=(@6Xf{`GSY)l9u!QF@(J?h z1bJ_QjPYQ+2V*@Lr~S-}?fnzv@C2Elo#w$06P#Nxt?1YU$?zc0gUKF!r5RH^nCd~M z2U*&I6D2ayxdl@*y}y{o9vePUW_XaJtH6V7bv{w@Cd&MYvUH-%@*vlP%@gJ1M7eg7 zG@ImHE$4F}3OtxiVoY*|X|4yadQj-W0uPGRtp~*(%=b9=ck^^gOp^YSq{M?#ZNem3 zG)dl>Bp*+5I-%Ty3ijKNbiUAoSJ*|1Jb0NzGMsyX#oFNU1C@4+%wy@a?_=KzU@ zQ71!|lfU7?3X(U8H)qIOB+WCNXjgggkq4_iSg%V)KYP;o>A^Y=)_9x;x$k=T{=dh0 zlB`EK!+G$iW_rBm!TYq?;K3%A-RQvw9_MjxBt!aUI8UlKQ~!`=bM^bb9(?M-Ru8sO zQCI5oWAg1D?C@Zh2Rl9Zgw^%SaJ~bg2D|A~-44o-&pbFtpL;ym%YyqnIN-s47SSry z=jR^hF}0S}B44QP)}`@$>A_d@cG!cjb#1aCYNjpyRySJ@j(G5+2j8*C_r#;bABbvp zjO6(Y`HAGX2d6#w*@KfFoL~&spZA>Ueu;fjrJ-p>UePt z?XUKtuIoojUF$`CFY3`Uldi5~?u-n{&5#?sxRF^}MFTHx_2MQkZuatNyw{mpjacdI z3~B6j#;%DMw|Fr(LzHVIicP&};YBkqntO2@U8$%8r+B;9nQ}#(Z+Cdn(u-EEfmWx} zpp6$PFYfdr=!J(-d5P-TM@zpK0g^I0(NZBV!d@6&L}(c$#)z6*!3M^?NU-W8%f6<| zDnm>!x_DuEagP@^8+llOYjiT0gY zuXeI_l*X(9-0#IhUUX${H=^nfkUU7-;Wp$Et;LH+HBK)cW0n?IV?7>cEj@@&c+t~~ zUgS>__4`V_z38JNjdy1_-y!Pf#Skx^@?s!e^=DuMyw1FRn&YU>2UXTW)LNePVlaD2 z2jWvkHPnmeycq7qFjk~Ro>$_N4#_Mp zib!(3$Ro-3VvZLD+*Ia#x7iVezx~nYnVmbL6uJWcAE6Cq+m2)hz%8S)h-X^|7Ttj@9 zxR!{?PUoyAe~6KJV^Y4c!;Qx)MSybm^@7UTG7q@){7(LSJCWy zP9&XUN4@xg{21{^;!kewaoq_gJJa%n>*u5wzmWgxDyO_S?ea4u^(Q;m4;s=ROrCXf z|0Ma#i@#mvA1}_4-@vG}$iGZpAj0QNY#~>L|q;uF?@)-iZNM|K6LOQMaA@?tq+!)Ym=mj>ijNOZ|6gM z^1EHd)cN4@jwJW`(21n8tKUa**JQb$q^qlUBYA-Mpbrm`JWRZ2vUHv-kCHz|>`r`~ z*n{{4v8NAD`p}Ji^`P7Ty?yB8!?Qm0rABU3)3tfQhZm^~CypS#L>x&RMbx_bu*euD$NDhN)yMlVfqbH?O!8p> zjVDu?;_8_`WVw8*57S&eT^sAhGt-A`>N&(&J{0(n>sscK2$b&$%Vv4KDU-My! z4{uUjN_?HTjJVu~H%MmFcm=tZeanZHrQ@A$BW%Dcq1#C62=MD_3>=6f=I--hKluS-~4QU$5RuJjFO&miU>spTUW4y~FQ)Hsc zCy`|MG1*n7kYwtx((_a%rxB+UXArganIzf796v1D=Q5e++T{CDKt9`5=8(+wqaE$l zPmv$R6z37=6HADt#4@5h(2qqVFB4xOF7`VQ9=o{yU-M%L^`%7h^SU3) zT)y0oH^{rueg*kkZthBwRm9cAxBYm>&3%ML-eq#FAL~fg6W{Y=qaW{+Zy;*DJ!t;{ zlbeXWsC-EN5pjzjTmAUNk8OVJ)Y$a-k00Cp*g@WJiVT_}L#H^WPIb7;k9~gZ_G6D9 zpZf8cADM2}43fR{Idh5})2{&dalnty{m7dlbEilttNwxp>go{5mwtTZDu+qFu1peN zW|1R)eCOJH@5fQ{A6(@a$&Y?4r}1$ne|B?E_;J$ZzmWV&JVjhNMb41?M%1W&C;3D7 zA6NO4nS0M$q?A#S39T3*KF z$4Q4o}#0X-ghmovBU5z67UB8<{GL~3r z(~<#9VAT`lu$VHI&T@$CTKA-TZG_HFsBh{^{6d_-ka0Gk8&ko;0+U7jghnA{q`Hj)~d zQae-XX3BOZ)!Pn|odJA8vWs{fi+@V~8F5blp9ip)d>?Ut00&5Jpm8JOK`LKpCo|M9 z1Gq&m{)vYJ_%492$-g0fOFTkUv&NaC_38l5k#EH_4<~nekW0X1wDuqi>SRBgdK!7*`hK|-~SJyZ4lE~%eDGH0{Z@c z5FLVOAH>~3?4Voqlc^s>YLG!_1D|C)>a9}{U4rNw#C`0^>a0;a@ctmWa+uU6LqBEH zhyOu59K?e`JjAA{2MxG`ZvH_$8gxFw)*Ys@Mcsqw5yay`RN830PXy63h@}8XJ?^2^!l#H3(u*5YJH8rm0VDnueiqYIT}a z=d0;c!&YTj5YKZ~yb#2T^k3N_I)C)gQZEHDK8TS)j0s{?5TiNMbe0yf-^K8+AYKXLwICJ;@hT(HT#ZESmjtnty{7}M z{ib0r3u09e%Y#@E#2Z1p$yMBpF|5;vKSBM8A!og-2Ne}p2k{Q0dYfaXZCMk9qQ<;N zfB!9rgF&nd;^QFJ2eCPb_k!3M#QQ;Ppqa*?P8#bM`hwWR&eTZMzmEQgL2RMtk7zko zzyB4)HaFU5S#Wz0pXpi%VpkA5gZRXaO&vPZGKfz(+YfW9>vY-^#Qq@m2C+|<66c<_ zLR}pQ;&axeVQV}(++PIoQxJ!OIHFMn@pTYi>2T1$&KZqRtN12}Z>gvUEuyXdE{Gq3 z_&$iE+FmM^eRV8|A9X`upWntU@purYgZMd!UxGLh#7X+mwreTv=U;<3#l7NwCbcbR zg7_nd-*o2*LOWLb?OKL*Q9lY-GcBUt zZV2H^FOwSgT&=p1rB z(Y`l?P9f*#RVy2NpW6dn*g9>#7VH{Aw-6p+UuoAp$Sk!l=FmUP;y1bj`dA1(*eBgX zc$`E%XpK*BG&P2vZb#|N(e6^EHy!o~p)W^AjWr(CmGloGJA?rt%nae_5GI5$FoaYA*!4LgQ^tibUPUDovoiHZ%rKSSCWVj@LS_h)LzqG(J5%!A zvRNS%W{P&gG-gdFYMe7dD5A~#?1!8Xv_ocv@LCADA(VxXrv*dE4`EIS1tH81p)}L^ z`scz-S&}JpIW1Ra$~&1-6vF%vibI$e!p2PbI8zQ}%2%0EqD4aZI#W($%Gpdgmnr2s zTUf9ngasii9DHuRtT%8tR$+d)gio1&&st%ZOfVv-V5Q~5Y|y&>(;fN$qSjHe%=q^gAg`o z(^Slo>RD1VOK!}PO(AR!p+T11lqC(bq;Zz>CXY@AowQr%XKM)CLe3}qA9EgV58<;A zc7(7igqY+t;>)dl^rYh}q{|{kb2zyyplR76=-_PZyM32_&pMxy*1-%^# zId3xP($G!jE9$ylw6R}v@~gd;(g=@)@Dp>t3*mbb%{m&w59G&O@Q|AugZ zZBdRes)U_QTf&ZWwNb9ExHycuVN?w}Z#Gs7qed8)gmHNo@9O>^#${pW+FQAz9@X9C z6=Bp4<4T&2YjvxZ^k|8N_HaYq<8hjDAzc~i7;7)`>sMYFP;_tT6lNn}aWFq((aER5S& zydASTXUXkhvgq=6>lEf6zBw9q9m?mlwwY)3ryad=T zjIOMueHeGM^E-s~#}9E&7@flC7{o#m~}sK0+nuI=kngK z7m8s#7>1IEh#I!?N5XhAj7P)Ho0fV!M$$cu$4Pn+p9rI87&Ed&4YG;7!syLm)tGBm zzW*6^{-ms57*B&5jD#H5Xmd=tHF;z0BO3qYS6voS1 ze5$-MRoJ}=m0_%+a?dpBJ*urc2-HGI+X-o-X^t zI2y)*Fb;?Dxo(DG91P*G2GK7&RmKJq(H9k1)>bTngjwF#ZhVFB+>ilRp0m z;~bT?bk$*o{LAEpFc855Go;rH8N{qA5nL9*MG;hs;Nl3XMmURR$ha9YeTG~T!KGAY z)3{=WTpmG<2&z-mAhpITBDj*tMYLHqLuy6PAcEQvTpPhv5nRpOIuX1xL$=M3x)EGM z<;xlJ(+oK~L+V9veFXI*xK0C@>9k#sx-;d52yUch)0q;TDeY#;O%dE0LBj|dN6;vO zo0;30MY_$DCK3G!R`i}J1F5_)Q<_H5Jc4Es+(yeWGi4&PZjYb^l{_ZPXG+Tm?uwvQ z1V#j{BM3y$CIW8+cShi$<;t0|ex@^Cz6ksgY?>+iXUY#V<=>eSj35$0D1vYVHM9SV zzd^P{BZ#TbY^PLf>hTCt^p+qd)m65%%N8>Nn~D`d$85PTThbAJ?p7fPg~uoSDxB>M9`PHPY`<&pNyaviI(b3(kFs#+0MDR zUj&1wJVoqJ96)@UIFPtqTS}ruo{eBI`4Cqb8o?fV8%E`M;tRwViNhlpNiu@?QUv>G zKZ;59IXdFpD=GP$R~_Rb&iQ401SJtnh+s+t6C=)fR*y*}8N|uN1KE-pK~4l&5loL@ zs&+NMG%=0cawuCgIU|CZ5o9y#ODawD`agoX5#&Zt5J6r9`4Q(@;;U@w&%T`J%(9YL)ehhIf}H-dE$tffu89Jwh+)<^IjlegqZvmCiSM>a6I zk*Ebf;3U-eH&gl0)juNH;zqTNNj3X8g6-rxh&zd&5L+^a-8x|+_%wpgbUAa}wNyQR z4d2$^f7V9n#eW0`IKFzt@;S*tcIFrEoH-Q1m*lN;oSA$$g6|{vI)d+XE>ZuMfgN$f z(<*fSsO3>Ax~BB{=a_D-QT!OeUlIHi!D$ve9>LEM{6c;rf|Dd#P>cNP@>3*!R((eI zeWdKl~ zmDn_j2XdSpSgX5@O7kdgCuu>vgQ&SJqj;3AT2pC5yp!l5dZP%C_@eNWJnr^kFp3Zr z_0uayBHF!CM59PW5p#8eBu-33ktF&5J!3{;QL%|>V%z_*X-D3kcy|BUGbB$$(JP9cQ9K#N;2bI8Q&7d;QS^yoSdP5liv6M(6vb0fJRL>< zC}KxhD5ga*CW=W>jE!P^6ysbQeR!+IConlN`rjuh8S0kG zWa1Q}29rgi4~nPKQVULxB0q{5QRGB1leyWIMcA}iQ^zjI*PZWSR2JVOs*lmtNVa9WR{fDa$OYbqu3C|dr`cv zvCWcI)VIu%jkH(ePpE8Sa&r_PMzKALkC@cDwvcR%Vp|j+M{#hL)7~#wM00mAcV`rz zknCdZKhj2LxSnc1i(+pSd!o*l{`BmrH<b82!8De#E1@$Xqs1rlY7;48*%gs`Q ztH>)Yua2R940Tm;4X%x$p35uaxsKkhkKqQA%7TgwVz?>hJWSBxo5+U}jbhH3<>r|4 zV4-o$c_iK><~&=_kGgJUL60dt>l1j5ACI=t0l;oAk?HF?5L`%&0W5NDR>!+QtxzAr*t6 zma+e?s1q?HU0%5}n=#liSQIbJa;`M=NV_(7#c*#7?PBNaj^WW5`o!>93{S++ zJ%-0=P#JKK7_O#e&lq~e@Z|qw_5L5;H-`Q(^kXDX5w-X=xiTPzK`}fX!$7xG2YCN4nld$B+@jm>9-V znWVq(tut0X`_Nl}7$#^Z=)58-nG{2VT<6!NCdV*^^XEz4HRuzwtQe-nFqL)bOw;P7 z$DA)vzsS9JCg(;rF^4#dm`luyp@1YmhK9MKvuie!w~)_`VS5aPF)WFpD2Dkl6f@MI z-U7t_yK^atVIiw7jiF4-x?Non!-5!YV?VSaE{fr`7+#KHaSX4}PaEnQ@T)B4 z=2C4!4C`W87Q?C-mdCInhBsn(Qx{9Fq;jQ8t~{J8Z^f`ur$nyw&z0wLWo)jjj$us< zZ)+FDkd-Tix$=sd<;uG;tW`Z%Hs{K=T=_g#*2l0}*HH``V|YJ?4KaM3E8phIuetJ1 zu6z)~rWmT{Nv%A&E>CXDlMiFq8pB61Y|-_YC;mK1=1KcJ*%rgcF?7q5o_W$gPln~m zju>{bMY<2@xj=XLT`_zb!*1PMcsZ@gXYA)aF?=4wUK;Ns?k64~YR`<$bC%D+7`||o zLnL3uFrHb5WB7rSCd?7E}<6>F`U!=pMjl?;V+UuiB&lB|Bm4w zZl3C}QqfZX#?aKj1>MFCz;HGqF;LY&74nOSDqd_Li;*a=X5bR)m%6z#^W<^^HyNmI z;93JU4Ae1jg@IZIt~5~7a6;9cFfUK$=Sgh?R~gXc!aP};CrYknvaW$^47^1}MJ-a# zzzqiK8@SGJ8m{8?v{b$-Pi`b{;3}G{u{AW%$UqYYb~CXtQ76DHBzlK(tAVv_OEUwv z8BW*f4ADJ&yxyZ3XlbB@fjbOL z%`o+Q0~o{!7G>L~ZgY!?~{3s>kT`HZaz} zBm?6NOfWE>S!$!XYBSM5k9=n(W*C^vXjPnIAXD2&U9(h~O3%}X(}^l-)=UGX2C@wl z8ptu6PkCk;C?Lr-kVleF?49rYbi-`&IYdp)CF!3pMI^mzNkA#Ij{n$_>0s zQej{L$wJ~HqWT<~FRzdwKRGCp74GO$v+h5axiU-I&0wShGT-qzVg%Yu9<;hcPz<6f38i}Piju3Q7_4Q$Z) zY~X!bzMd~{9< z0{NDezC~Bx8Tdi>0Ru<1MFq01K(-agz5+RB;74^;AZH4s%4{b#t@k(!{%qicfs^Ey z&Xy}@%k{J6S0+yx_|w2?1HT(MW8gOfO=rt(vz?fm&z3(7oYfs{wivUe<7|0yw)|z_ zoPoa${9|CqY{{4{`LkugY&mb>Umd2|vU9c^VeN?H<~SsdtK+B=N3A$6isSM)E{@}p zII6}`Eso!2OO-iNdyd>ZM=p)yvN$|*BtAzTm?M4WNcA|bjH5;zSHv-74tF79&A78? z&L*!-eig9}Q6tw}J?h4BO&mAGacvy+cQX$)S3{d45d9BCCt>o~rnWu?uXarjuoL-Z0)&Jn*BWZ3`}^%jaF9LK3S@;d`NH%Fpz zw2dPcM=}nB#_>23aa5lx4d*(oYdTj_aaeJf%xy8(=}9||G?U6JW4J4hj&Zb$qeC3+ z|H1^IF|6I8@j{D;16h~**gW4onR~NTb*EqVx|NAMJ2jb4TKzGzi)II#+ zI3A5VyX7OU&0}$N*Lo}K;`zEq96jTBf(E+7=w|XH{U}#gz2nZgrcWH>;^-U4usHg~ zF({6wbkOx?TuYG*(9W4FUFOO_CLfwBRd`-_CXQ!yQpGV?Cnpufp>aGH$0Kv)$+&XY1-#g*+u_d|Fd)S>S6|oirI1G#*q`pESjnP=XzdK=18*!|Oar{F5EAbRj=YyJ^ z;ZXh-$KNEs$MFY=IzLPDXB>Z#*y)a90BF6*`Yw zHxrA2iStySt@MHpyCD0>*?g>23tn-CZtw^dD$rB0mq*AL$>K4h3 zMbeAO-a3dRHy1f!-(DpB5*U}jQwa=9pnn3-BrqU>fvogt9VVKo-3{7Bg z0z(q8i=;!5bf(R7Zk*kUeGw8Euv#?0=5-3O@pUGEQd^RnY70FvgGB<$_5-3byc>+ZVyqrL> zS|%_rfszE~v(!5*r9MmDD#{aBm_S7W3ldn*+z*J0X#WZMD+w%3U~vMkCGaZsJw@_4 zvz8?A70K(=m$`1WiZ>E?CxJH;Se3wv1Xj}EtptwHUi(LF6jxJ!JAq@=*Jv12-c4X_ z0_(_6Fza-YyqCa+1m35pW&feRkx3NGrUdpSusMNU34EBq#|eCtz}5t|(4cCuGoAF< zmO!;)xujUOC$N)QJ9J-ib3dU{vsiYMe44->lFx`&7t3Cf`n2EA_8v&!iv&KWevqiO zG%S`wZf|^5m8^X8RA>0sjm;R3W_r#+K{FuNGuD4^l3$ezZ zs2nHWPUVE|s7ah;UB4voH_5LFoYGA%fzt_`p`xcV4d6HO*2VHi0)Oi6t@}UGTP%Mu z%V3=UsF=jL1TIiKPyAOmrD93Z07*#FDQ*`_=VG}iiA$5XIEiXWR82Y?z8*bjc}Wsa zl3bQVjU+BlqIwd&sPry&uGy|g;!3*GB7KYH>0+ssM4KdPCvkHUS0!;n5_OWOpTyNk zT$@DQB(6!~nPM4QEYHzHJ=R#+!0X7bcVie0MDrw? zB+-=OEyP>hsG2c(8&QL-tmyV6S|rgbi93>L$*f7mGK1dKrgajt$nQ)doP>u4-XsDf zKB7N~yh?i}L&UjMB1y!Ph*F6W4Ps^0339C^nM5iHlX1>x!3D+6Ph9FbD4oPZNwiHm zZ)x6@bS_TXC2@Ze?UVW!x41irj!AS#;+`a4Eq3l2UMDKKm(G>w(K(6xlIW7eiegzq z|7(d|wV*x%O5%Ye9;E&HV%f;7hm&|J$?N|l9@U{w;;|%pQ0Y#5Jc$pB<)dPGg2|r5 zZMqnXr5AbcB>E=Nhy0Ub=c-j#Q$N0F1DlRulp z3rXjB-C*L7B!-eaM;u0cp17;n`3nX;UQA**73Cw6c!_+ZtBguw4=u;IJwKLYToU75 zWdg}W;w0k!Vws%8f+VISkx514&q`u`5>u1NO=4OS*-1=KVg~zDb7yMr=}iZ}5tgG< zhn>vXmx@n#aQX>YSdONdK}-xSL-lI2Of zL2`^!;#9G$NaF1z-b!Ls5-XYY8?#oE|4IIiHX(^MRCFjW6w6xjYV(|(bA1w9lXy=j zPZIAZ@j((BlGvC;E#}rCZc1XaZWQENq`^G-h#r)0(anVVwj_2X@o^G6lh~fbjwG7R zlh(}g&67_m?U~%2#Aiu-N+mK+;`3xr5__4nXkgEi{kricaUh8!NqnBfS4kX9;t*}V zAhw++Uy^8xG>pSZe8c3|#P;*#Tar$6_+1h|CH23XaV&|WN&LX9`{&66^W;$){79w8 zJULGCa}pZhC~ppWP^s_Ro|kircq+?ax&Hfp9eH>J=p<$Tnu0qDlENiY6cqb3`t&?JT1 zn7oB}E3s(`%}5rwkvC7_b}Cw`1<4)6#WZM@LTjxwg*L9uog^NjHwB-ozdla_DMU3% zB}5Fnxe<~T^Cadf21z`HgsZ&G8dE8lDYQ$$a&?;|okCkzxr^jo+P6>PZddP+!aXkU zNb>$X>6Aiu^3KHjQs|Px11a3^T6RsLo69%P)4%-2BPl#YK|DE6rjV%rOzmyXy{ReWq%h6Zr<2S`VWz8Olbo3+vr?E%o=eOl<`WBu zf6kLRDHM~>O`(uP>nck9_m-XVc@*cTP~zsEpC@H0tWTjlg|||uNMT6|3v{bzsfENv zDZETlWxn%H@?!E=iLVhapD#7%%TjVRcs+$>DZH7&@)X{n*kHaiX4w@?HX~Qdl}xTm zVRZ^?Qh3|-@D54q`SLEw+7#C5dT~p|NZw1~{S>yQuz@xkQ`nrs2d;-rDcG+4hberN z!WPYPm3!yQHd=m6-0qgzp>vxypSa2{lHDnMn!*<;e3rt#6!uWuOMH~}`&0Ow$pb0$ zqH>T)ZR6AP<&ew2)Okq$5^eMJQaDw7V*X9?JUsE`h!fD+q_5N|bl+2d}^X0b`{-W}G3V)Dj?pcyQ zb=2lN4?O>7@qdWtQn--9`4s+5Vdeb)?w;1p7nl$e>!@s=FT3W;MJ6sb|NHE2 zf~jR)CJ)Ycu3E1(QQt&8DtY{3^>rq$H=Xl^)^dZ1<|b}5ahr(-CK{W#$wVU)4Qa2% z57WubCcY=l>=mCc@erp0M=P7BvwwowKd>QstFx+;pZ# zf?cf*)MlpG)p}+$O;{#6n9gOeO-!3;Yofi0yG*pBqJyG`8rU!63pNW@EbTRRaiTh1F#CW~OgEdR!VG}*5JYwQe6Wz%lGf}6+xr%$7 zNwrk|go%D8dYb5M;z<*|bfik0`@u%UJ|_Cor&``pBDa;uQzo7^(ci=X6D>-l4bA)| zGSI{z6LI?2;)xP@)5_zsfUM!JuCdRwXd5QKDO-wd1$wY=0p)#2`MJI`dR3fwJ zyr4v;nwV>1nu%N!(@kWXm|g(gZ(6q%SurP#!Ww3%8@ih}~npk3DnTe%3mvnWPI^$crRO*$=auaW`uWq2I!LKl} z%EVhHR_X#Qbw*i@6<3>hTNhoa+(EGo?bn!i*Thy6YfXHh`;3YAO{~{B$*NG2ue4lk9xCiZJja*gQn(KUF0TwA2cgC>43@r8+ROdK+C*uJmO};tUtN-X`nTp_b}a_m)3QcrBbYagBvPb@(j&r46+3w~6zt{T~zO zNc3DbvQ+*x0SgzXjAIvx_1|-z$)$3Ug=!Wqc9p6YrqSjSSGm+e4wcI-)V5IFLQTur z%4%4+!ormn@=KlbOCeE7Ez7xj(fvp9DhqX(yxKxtl43P0b*@RSwQ!4tdKMa4sBhtV z%lU_t>sYCh8!R-iaH9q7hlQo0c$0;O7G5rO-ks3#(p_5n?Pd#&E$2sgnh;+r73H^D zxWhtI3%9ezW)^O<(41V0Xw}OZKnp5r-_k-G3#}~YT-I7!$NgVx(c?}F9?Q8y(PKra z_$+j=;I|O55TJdK7$Sy=D@&a-NYp}G3o#2x3xU|BF(Y6BOM zZ6R%8Q>knzm5+5Am&#qtZAWZx;cgOjwUN8W47D)A!gCg0urQ3#KJT`%YMH!9KAfmczPwCcA|GjCw1rXRHOib38Dn9r zc7B=EDUS}3+q#Az8W zbJoZ_3-fidksCx6OKDI>w9BNz!eR>xbZJ;vXkig2*xhB)rOf%f@)agEX63J1SYqKd zwxSzjUP`Xbd8|y9S=eP^xvn@1Z&+Ak;Y|yxEv&GxlI#5~3q8xEcbTkWazL3pTPAPQ zgRc5_bd1WJec)a8`C8&S3+qXSm&xcd8CNFnTlmPr28tUkY_{-$PI&G4GMUEC$u4tF zMjvV)l5DZC!@^bzA6wYQHJ)4MtZ_ZIGdY{dofbY}vY5%;7QVCasfDjBd}iTu3wtc= zx3Jg3KJDrGpR#!#=;*Ke$$0xIoE00IlCFyS>60yMMb?#{abe@8~^CeY2%!Qt8ARN zaH)-db$hpQL5*#|hS<*Lzo$(0mB~T6x`@g*Wm1)-nvF~B|LQuf9aScm*{EsbavL>l zRHsd4Bv;tDlF8rbM}x0rJG-bJwMle7)Uk1$jjL^3Yojj3Yls@dSuVqROxCxZbBY$c zo=GJ)*tn7WJk4&h;kVJy#vL{q*=TCxW*fKIXl$d2MqBQzQ$4DZ+-f`ftvYFDqq&XS zn7p*ynV+}YXrT=$mn+MicMocnOG_JVY-f{iWurBT^4jHcrwy+SkE_%vcNVYDM!j;m zzFYz}EN#0D!$!zP)JE7w#CFbo4a()Fa%cVO5z`3C<2F(@5;l?=50yKJCX3ujZriv^ zyIQYuiEXvX<<2T@$9`yU<8G~`T;k=DqJEE!=WKMe(bLAgHXgFk$wpTjoo#fnaUTcK zE_XK4``Nupvc*@+s~Qh&g-LN$#cpjuUy94m}FxD1D;4MD0h~#9vLm zm}z6Gjp;U~x$P<|ml^EF1?L?du{Bt@hL?u zsN!eriajV9P_|e8m8$a3j*~W2qKRLnuinst^v|9iRoW#fu8{ZF~mxF+rEQrC^;nzXaMTwNjc(zrg2`qZx@ zYQbwOoQ>j!G;U0zL1k8j+(5Bm8h518D2=9R+{~=TZmA|Dx1@0^$&IvEKh2oDEsf?R zw-Z|s8_}jExmva&X-#ZHyfY0C$<4I%rO_@8e;V;L0@SrsFpW?e(KN!Y5+Tts(%cxi z;VOwVEb=5VrTyttt2Z^&e)|&fB8jq#%XxjPoxj&ar_q20T`-RWwdZf`a zjVCyfbZ%&MPo|wOdgzR@_5IH@mZs4sjj3t$O=DCV{n8km##3nwOryU}65apPc$zax zxlW#@6*4G|XVZ9wqMl(}aH?q7L(+IYjiG5g$0?-7!`wCoD&&PUMx^m#8pD}uR7hJE zd?}5QbahXKJX9f%SIFozCQ=!b#@IB*r!g+=Ji}CniWA8DRyg1Jnv}*AT4u1K$r^Ko z45*MyidkvrtoKZXbGDkMeVfMgH0Go+BaPfNW~PyoMm8SNM0HR zY2>@{kEoE@v>eZv=cZB2tU_W@8X45*rBRZ`d|KwX^SLzbd_JCEA?0bjl12q{7o@Q$ zjfGsfTDuO-%hXHgN0r4)zM95sX)H;jyuvxtsUHpR^)wEou`G=b(^#IyyJ@_U#;P>l zOk)L0X?x#FVx8XMABm&W^Ptk(&g#+nNG zfMy>Owf2oVb2yPcNMk#@YcoCQY*!B-rSWMRTQrN^zBP?)X?#qsxx46OM;f1`v6CIL zhsv%rc5CbOeNOEkeNbN^pV8-@H1=`&?WKpK?9Bbl(mDKj8pqQ(n8w#>d_nP08eh@v zmrT}UNQcun$y&ZiWn)@dZVnl7Y)w$O&Cjh51jgeqTdg~>%sc$dfc7DG8$DPGJJdy0`q zaT7jZYY7wHp;^*|QiPiHC8spQGF0hX&V=`+rU?~HC{Ob}-6YpoMY8m&q|M4ER5hUr z!w<9>AH5pG>Lz@|v1*#o%!FDdG%(>q6Y7{y`+xF3GNGOvf(a(MiPprPu>E zX4ue#MuY}>{!JJ*r8ZupJ~6>*LUR)=CbTfYY(h(^$yPZ!DJv?|6SbOPH^IhrYtCwp z|5-!B1Q$c;;x@rc_UMFo1-}VBO$e9}H6dtCbTl4wXV>{ zgmz45OZ9RBGOG?IbYV_M6FQmDnXTf>Bd|twHQ_T8x|z_OIdb8NA6^rCY0-mDyEUqp z31dv?ZNhL9`j{}lguW*9H=&;ipPOQ@H@fMuq?b%@pb0}v7-Yg=R*<8JAKg$BhS7_yUQr!b)AWNh)IM#Yt$4Irjw^qr%`3B z83gGo^O?KNS)30WrWV`cduht!cLpaUixGvOdJ#W`fcVP2WSM@+F7AxEha#@FN< z6Hb_L+!T8Tm#K<*(u5s)lHZwd+Jx^-IK_f8iX2yW`LV);Gp7IEgPp>0&zbOt3Fl3i zDEq%D_6Gh16KvXPB zx2;jXnQ+5|oy^Z%6MN_97MpIHaL&202Ka~C1j6Y5I zo5%9VgunE9J~rVA`6*R?c_HiY%!HRF{6pto>T~J~>ajKIB(EZvq0Ili|Njahn;ECs zl!M``)Yo)QPC_m-aud!oGmjZv&B$v;Z8P$jQOb-r%y`R;{ALs|$2N0$#wlnQO=Be%!xgn@geY@85PZ_z-nTOQ^_2=YvNqljH+f-q4UB2_|?p)X-0K3 zYOtf^$Gg-r<3n@oCGP*LU&jnXI-1c!7Q~E3X4EsI0ejUqCjZbeN(yR7T8bX2@iP~9f#yZXG zW&P#U$oIcw4rZj7k!ptgOgD~wWt-h-#wOn2a@otRDpN|6!;}k*Bg%HPg{@o7*hY{I zXS*DuW|_$@jwPk!==PYAVUBI8QYVw=SN16JvzWh+_uT|Ka;^`s<3Z{n>S5{;>QOU} znejEbSAvq4yK)rA%{Xbs3E6gdf64T|<*Lf8R`CiS&*G%LRGcK5M zUgjnjSb`dppr$0KISJ~b89$jZKOy#tZYA{+_o&O%E7V`&D)0Z8an+3L46n&8Bk%pn z-+yD6knrFCySd5mmKnEY!O3^1cd7TNznfz}l1tzF3?ER%`9M|*uKNl#8&$&WgdEgYsZn|TPsl};oZN)hsd=b* zsrf9}#L@FJl*|Hzf)*4a6xMzb!kZRsWqwhH#VmN&g5nmuW5L^WN>EEuOHrlfW=_7e z1!c5T)`D_mxy&R%9_1}~Pq$VeRJ5QHVFyR7Y(Y(iRV?^`P?aius}ZVOP=m0W`L)O& zQfpgK&w@JSkEqhCt_6FTDO}%z2HKbFN1TQX8&Mlu&_uU3wV;{ip3H2{u!RLJwQsV( ztl2`aTCi7-WvAnyIxR2=E~<y!AZS6@f{?Yj@EJ9QLrCAA7WAUin<`Ep zLSJe>3qIHWu>>_h^FYEN3kDO0Xn&|B_8;Y>$Z!j0Sunzau@-!xTSpQ`SumO~hI)d> z^`!-qEEq>;JaqzfB2@}5kk9{HFpc39>Qt&(Hh;nls$|Y2e9yA8$#X22t6S$08p-Bw z!BPtrXn&yvi!?8`V2S4UcsR=#E~l=rU?pLd&RI=}A9#WVi58?-u$JaJ>Uy1-L`b&a zET<>4O|@VH&5hJe7Nik2Q!mP^4uWJ}N>E$L+qARYf*s_Y)LjQu8FkZ!P$a@I6)hQx=>i|Dc^a zJn*v?oU`Bx&GQ!gNVs6Z&xDH>{G{{mC8$f}%hU(#9^082{%XNh!Zqr3s*L+ILERwV zq~5aNcMERo);ol|)O*x_S@sX|eG48Cq|QSE5@Sy#k1Y60`;RSnLVim9oBE6zUz2|= zc*Tn6bfoVK!b=NajqUu3Dj++2Hga}q4lCZU;#DhNx8gM`a#@kn`rmuSm-$bNax;{U zd8}A2pZ~NXpB1C{r~W0(o~ZKc$_1<_s5$;bR+wQCE8Zjw;)PvQ=M=M|xaPO5D51He z6{X0zxCo`K_<&&ygnF(S_Q@mBU zD$Q!t>Q>aSqBgmv6}7DRkoHhkJV0d=8t1Io;tybiMn+XVX_rd2rZaA&59XTOs5mysAXklGMq(~n{f_7 z{JDgA)UT`=7F zp{NauS)sTMkX)NuNBc69y5xE`G_#?;4UHH! zpngnkC^h9{cpS7bohCLkCBzTp6SB;qIiZCOEwz)BsLVDPHdyFbwQnQXZEz5r)D0ZM zWrLrgo9eN_OOX0L8)|TU0@?}M5F&@QlUrUA*wEdEPi<&NvlX>9wT&z$A^yDC-i9s= zJ5W1PJ5f7Rm0&d8|D!Xa+LWttg&H%4a;aQq%M+sfv|)sm6ys@ z&HUwbR%m}EVHI^X^(fO4Y)G^r*@m?=*HNX;dK;27A7f?;!&K@98#dao$%d0`lKj(& zDveF)Hte@yiw!#&Zna?>L2|a+utW2?M77I?OdED{VH=K+uQB164cBb=+J+x(_{N4GY&dSicT6}zJ!!+Ygj>x2o_vaWni@YTGUqc4 z&)RT~aGol@T+$b8xXkb(^(X4jHeAv<@!RK$gxdMlhO6ZGv;TGN|7ODt%{OhhMZU)? z@Qw`+8QzVX)ZcCRgCH}xPk0dbW&gL~Z}KA>{?a**ZFoX{svSANXPW;Z{Awl_@^$H=I9oe;$!;V)qKTcFR?I>wSE<4_`Bexv|?RedeH|)s6oV+?SpB>M* z^7-i$(7qgUA#!1A5$c=N7tEJA6t$z6J@${kg^SzqHd}>D5MEgu``M=y`5ik->((-M zlqHv=#!pRoJE}-2Iu)oDsZya5;e9(Q6LPTZ2fDQ?p>i9W}IHlknPF^`RXN$hE0; z?D&XKms*cnpBmpAKenSO!-jS=BFG#X6Pnl&zY@f0X2&PGwK<`M9W4oYIYY@YGql)Y zwZm?QP3OxYJIGF|p?w!Yrs1(8O!iWJRKFboLXaAw%EcoCMeOLvFiQQ@j#hTGx1+Tk zZS817vw)seJ3ET3RYljT4)mpayhtZII@9Sw?W$Y5NfEsRe`ZGy`aP+=sJ(S&A3|R{ zN^q>t8TO|Rpbn(Uh=c4HOdg^gxr&C7hihj9;R`!P5=Lo%v>j#iv5d9jOYM&%jJIO~ zVWK_uhSDV68b8J<45w13*)g3kgF2HcbDJgC;aXLhL(H*buJ-2p#{4f zwBwL=4ik=0<=x0*gs<)R){bw;$EniygdHczRu=h={Jm~HML2DTm#t^Cf7Xt3$1PTfw~F535TUi|o*j?u_}z{NcKl(-eb$kLc;-Vp{$yrrxy#n7xc`?Ok9D=y z@3x9WP}Ew&S@S|Jd;_6J&9u%W>)pI`ZCyIB>)^Tjhw&`Lneun*+HV$nL;v z4&-p)RR?JF5aFaL5ktLZ><2Wm0rLkB)_ptb|`7}lYFM6K(nkIENPO(voU&z~_M30jC2N2kZ`59k4l&v{oHms~*bUyG}Wn zS!JCv9|gPx=xK;7kldTGDl$PI^}mD>OjDOumeE{LQ-v=+OtkwUZ-AN zA4`tN60KJsuUDTs(8hsQ4zy->`+DVGuL8_z>-g`rbbALnvb6(ME|N}!&JGN4pbNRH zTuu&jbKo-vy3=XDKK5J79uD+m*nPd~&$7K8=;uHm2l~o6U9X1G9J5}1?m&MBCazag z*Q*8V)w1OQ-hpwfChKr@y_!J2&DKc{EOlVA19NFkabT(gGs)Aa(;b*Wc+C7+ z|XCdJ^(-xDLIAU+TO7b!X);h49<_hXc2i6c)QCCx6 zvTuR|i43LVD@ke{c|A2r`^j=sYtE6RHfY|+yI4AIb|8&r{IX1UV2cBL9oXu?Zsu%r zV7mi59oWGzXHx9qkqcm#Yz|5P?Noal$Y5(GHNJ;rIdI5YYsfz@0esbVv&6fy;IlU|7U#P!QuTrm3uTy18Hyn86z)c74I&h2TZR#DJ5I^dB z41cHo;lOasB1MKMp)*>l5lz>fh97R2f=2{>xs^sV{VempVZ? zQN@W@oOr_-+sU(0vpbQ)iQG=S>O@XDuQ~B1&ulJ+#gkOYB=x!zd7a2Zrwm)ALOv(T zlk*EWQNW3!P84*a2-6BVQJ5f4Sd#oExv0GV)Y<3w>MO0el|Y9$%YiBjb1 zN$Nw^FYQEGI%TMJlTo`%*iI2#VU)LFXCKaf!od!uqVkoClDqEcB;)Ios&54K;b|<_}IGk`f;go_-g!O&bAxXKN z@HjCzNsUTUGm_MbB;|7==!D;ifHU^&zlq6vl2k}KI&maPo#te&B&nzq?VR{jPK^_- znEWtFsbtm0iMCE;OICT4Rk7sQJ>K4lPEK@iq9fBPC98V$J2NyVD|>QmTj=UUH_p5} z^)ssYJqWI3)r-)Z+Q*5$g!sVx<#H$V;iqsB(bI z2`i|hlhrEiuXbV$IYB##gfElTIwvkWvEGS8P9!;T(1~Oxw#gOiM7k5HPHb{wgA*HN z{>f@?a_mDdi;~r5C(`8V;%8~(<1_+WoUzZcZlx}hq2?(P3w|X z3R@*%j}#$iIzh+$@hPqsBYjlC$by3 z;lu+cZaQ(7XZe;Bx0!i|DoYx#e9wvBnec}b_X&AYVmDXe6!p-Ff1LQ!iO1~n$cex7 zSZ}AOCrR_qWjW`6oq&PoEcn8SmxKzeTsuW61KA9`V#GFodDLSU88nB1 z5(Zv1P}sn02J#umY2bAOxeVlHvgAmN6f=&lFX`Kt%(68TO;TZ{PzCQQ1HhJyv{fRSi_5BcV*7hD^XfO**v< zG%@g@f%*n&8>nlbj)9L13}nrbROwaE!1xq3Cq*?d(9pog`l!E3QH=~VHn1o~Eo1Vk z6xGx~O9RaeG&k^x&P+&AEi|X5D3bvTL$iU6dK9aHEo8d^FQ@0AIt>^G++>%5UHXK2 z4D3x&`(>>Rv@_s0@Tq}-fv|y~fslbiDeCJKb&@qB2BHSev2SO2MU?$G}_zE;@l!6--rM8CYmwzJUb>TBWMiscNBo zhALGpGO$>dRE|P^U6LC6-uF@is|_qOu+qSC11mTIY3;$BRSbKx`x*ml4I~&yG|-1* zN!p-Pwa&nLp0c5-YB>F5xr7X)7}&(_sRlO41ttr^*0HH-9AUG8Gy~}drf@7dYIz@K ztARZRwi(!IV7q}Ga=c8Q!<=0PcFUoqs%11~0vU4o8OYS@mYAxtG-v0M?q_(wz(K+x z>S5{;>QSnUzCKlbZQz-KZ|EF1aMQpE0~ZXOH1LCgZw-9UrthdJsp^!0(+0Mts?1b% zB2`^URc8#GH*i)ias&5L)yq^>a6{~x{E=NMY*2MKsEY=EHSm*x%LaZna7oT4b0Qm5 zw+-rwWXiR-K~3497H?3=8`M?V@C{ruaNR)G26bYCI=eyL*`RK)=JO3I|3-Doz+(fq z4g6u?jttGFyRxlq{O|eYcR5EJ)dw5ZeFJ|Qcwpe6Y&G${h&hi8{3TnE&TqO=Jz;K%qONK9~;=qMmF8&I@g;!j$ojIEeuexGCX=bP9ph|afUL)t! zj+nXGS9%HOA?Ky$qrO4SPc7g=L4sY+xiCZN`zGNnYEc);5{kJ{+=Y_lx2YvuaI$YH z7fQSE4ow-?yHS9YXto&3@2<< zRSDHxsLKVZ?m`VhO&4mrP>cK_^$}N94xx?7 zQ=3rZU8GktuI(o-Gcu(+^%qe|YWwr^C2HY%G7b{9@< zR2Md?UpK11HY%qJZWjy}TrOnaqzZ3R?`~36HYtw_UYY+U)nJoqxJenCl;4G@3jr6x zE(Bc&$#9!gt4*rQCN*?Z>{5)lFm+Sxh(6^!TT#WIw@I~ep_dD7UFhOMJ6T>A+Pl!f zg@x=WIjc6QPA+tIA$5~V+oX1FQb#tat}cA$LN^z>%ba!Q#Z9V*3q4)9P3NCYD*I;D z+lBrv^l_n|3w=3m-p#QoeNHa3SykJt2DmVY;XoJaZ&r;rtHBIgGE~DjwFntj+SpWX@9H>U%D{Og>f!Sa$&soClDr5tsG*q3sV?Qr8;TKoig2p z8FXe+XHjKD*Jd@xg*6Q4x-gIMl?#hpn6Gmd$Qo*PZ&r(4Sn0wNIq5DebzzyDBaRZK zu3%eH%{TXBRHJa7p`fSn!HIieFv0&Zes_ zTqDfi9QzY7((yMJZn$t$&ZC}>ynGV>Hq-7<@9H|@|4!!*7w!|{=kXy~TK{z65&16{ zvbpith376jap9Q@PhI$%O)EFYZrgR6)jux$D`$MOO5LosZC1NBs~0Z79oy<(a>PTM zm2%@1H@?}dF0$9X%__Saue*`Mjht@0>c(qs+~2GoZ&uGFIZfqqBey&DtdS>86-ZM> z(^MWe-f$zY8~NNQm8Qz4sfuZ;YMRRLMgfjhH|@WTu@E~JcHFQdERbEASApSV%cjoNNha-+H% z@4NAV8P9m+W~8Y(X=(w@=5Dy$ zXyJy{jh1ehnQwAqd74_m1dAJM2{tzzY_)TpWoV}xh8*C_m+`mPR>~)Jnc$&%sThH!pHwL&d#*Kk)jC5m=8^h!Zl&^rf zF@zvI)Q!DqNMw-dg6gN`c*x<%@Y3fRvx|yc#rm0PCY;$9?8(Z8+b0eLZfALg4O;cML zO7VZv)OI&^xv|5IoitxCN2ROXZtS6xD_!MFkKN9hZhS50#f<~>v)tI{#(p>y6Tj!x}>Y_>FOI6IZi#{#z{hN z4%9DQedoqGI^Vl-ig4PEGj9AqmdOlES7*sX*yTL=N8NhCjf-yl#BfBq8p9mvb;*s( zG_UB)U)=bWd{sNw2oAY&+{o_14L4rUx#`9&Hy*ih+l}AdxWn7_t{eB{N=uJzk~64( zxbaYST{j-Mv5?NHbd^N-lU>r%)n9J>Bm2J_f4lL-ji+*#F+qy#N>|UAc0663qWLew z=dvISUve_=@Wnq>j_VZ=3;s~)^Y&PmOs{oI7h=_-#0Z9K^9K|K%hdGMYG zZ+KALgZv&8mQcR`E^P? z^ei5DJ+OM<^uXqUUFSRgXL$_|JRZ0_aMOIk#eBvJa&$fq!XEfN2(oWLs_7LA(RrS( zA|ABzAnL)VbYyYlAq(4@p@7V!tp{U0Xy-v6Sqcxjd(gpy&K`7RjvQkr-M5Pe-8hr3 z9;hv`>s%gE;WH-m@SwK`Jw52foVL1E5+tp!2SYvR=fPkPKKEdN2mSx&NC$c_h(#nh zo-bX7&{-s(|M6g?2g5xW;emwGB>Dwel1DLZvZXThwC05>M<)0ZXY;Tv&8DORb=;^!)eR;nfV+P!l{z)LqunkzVUOSg$$B zgV(pj_T&`pq!Ko8Q1RuliOyyZ(sWKbVGDJu2ivs&#ul|h^G*+Td2qmk-5%_vxrdrT z&Gh{DjGx7DA63TMFIxoXBda0dArFqT>97Y!bk0%2G3wVId_#DPy-s*=mf=Ycz9oF; z!D+(x9-JZ+XXX!N8R86~%ocTya9;aAdT@b!k@_BcN&e3sT=L+W2bbwz(fPj+ex+We zR@$Pj>(<|7ry}3f&MiV!mc8S_T@MO)aZk2cFMjvnZx8;EeT+HxJ$T^3Lvqb6s=*dz z+oB$M@L0|`&2}vE#Dk}Di)~STwx}Un)XXjFncQez{Nuq35B~Mwxd#bb)b=eZi}^3* z!tml4`8(<>US#(on>Y51aE(q5FJATH$rhD!tIEGMcAey8Yc4PHc#)g@I<*#C^Lp_H z!+c&erXyYQd(n(s(2H_j6!M~!7lpleiRy!hqOuq7c~OzA6}(7cYb7tKBW#O+T4qlUbG_rzQi&J}>675F6yBD8nUrZ^| zlVL9}KKG)x7k$0xZ0f-xQ#!v*^r}5$Vju{Bto33&opstz@?t+ZS?&ujc6gEM z#TG9%$h5uK=*1>4zS^eNZc{1S)ShiB&5Lv|j%-tBWlG!B^=)b^yKnPiyBD{%sR!HC zi*4%l?P{kNd%W1iR#~pyUKHIPyC5^X$nql7i@kE^(kZ`Py}w=UV`jDOs@8UOfLxf* zafiJ4!HdIQoRo3tAEh3ne(l9^!Z%*jWwjFw8S3eP?!p~k@B45^yT}pXz(~Do}T-E+HFRqh+qu$WId%L>j#RG=7 zy||1>vRjSn^)TcI}N`;RJ4Si@thz}Z9X>IC5Gap=R`oxFkK3IHcq5HPsH;V3mS&w+ zw@P!WvK8*BXh7Y6YjF!v8hcP~k^I@zH zU(#I3Q8Kox@jguO;gVjB2iw&oxeR=m?86jh=H3z8+)C|G(|njt=e-@OARd1q{HiFDTbu#T{vnnd+6L2^t%bsU}Z zWXbuFaDjS}`jZbo>(-gP7cMir5;uMLRkvOxT%%s6PTZ+(`0%?AH+9Y}A8vE0?@;ej zWo_^IFllG(r{h0-_>0N+eR#muhdSp^!XxT5Cd-7M_yB)w=YPsxe^a0N@Q)AAefXDQ z7N`A!ESWE51EHhX@fE80@%u45!yMFC{dkR#lbXwq*9p1(|J{AkD~}&D^$O=>>l=RL zClv6bh#v*Xl3B=)!sI#3f0O(cwJ23SEhcHj{V3(f+jJx>K`2R;S3BaoLzerxjLs=b zC`WylDw*&3(bSI$e$?`#q90ZLsKloCsZyu1A65MLfZ+m8X(_duAJu8r(3v&;SjDCf z>D2b4z8`gT>qman^`o92YnhWmZQw^EKR#woL!G&0r)o@YLe1Q%j_g#;{IL7+37zJC zm35=b z*7;rh=&D)mQr-RN?Z;S#IFyHxF6YOEh~{P@z3X?~1j(|GCxKPD3< zQYTUCv(ywnrZQ}-D^F)QL+%KIj5W)T*_zEvo6B$>^(#N-`>}|;z>kGG)4|Ne4423W zWw^|bt$r-`Bgu~yek8DUC3Te_t99QsegyS=66KoI{yM^XYTI2Z*^f=+6l$s;8weYz zGV@Nm)Mj#;cG3x3{OGRhZ}VfjA6b6v@M8~KclxnQ=kJyi&CCosnbf_ywf`=)kG!9H zK>G*fJhIneKYsS(h#x2XILg*zI_GOYzR`SKE&x5BlQh5e<2ygj%H83|X+KWUoWz_T z{5a#sT=Mc=DruKG=f?#<&dY7Ww5@D9wo6^~<0n5Z>B`Rtm;AWQv@29urC{gX`t7lC3hx#w|IaTVsAiSg^fLiSJN&s&JkS&0`f!Om% z_5gAOkc<2(^)+fv>PNd(Zh~aKPRJAZ|DOx;k>g)i$sa(00E!1tFn~7$D8#11RC%H) z5iW!e>;G(0h9>fod8Pe5laQolXI5QO9xPfet$aU$nR3i>--_R zRRzrz1E{3={QxSHt5D<5hEh|WQ$(u;P(6Sef!JHG64uncY6b8ixwdxd1TdVV*A2i3 zpk4sY*i@g|Ab^hpXdFO8hK;DB^!%GJY)T!sTYW-k9)LN37GxQ^CBYQHB=)idV5egZ zz@~Gi?N$!W&H!dG(-lA<05^RP)l2p1On(4#m>JYgh!Cbm0*DfR;|jD2pew`H0kk2s zmD3kMJ92w!2kHXW>_nFNcMhNnc`5yF0SpeHdjP#@en#y(*IW-VI>&>2V_L`|VTB!JNY45c$HfG_0ikYy$#2%C4Sk=hwW*s@!V31CV9V*{8N zz?T7x4`7_m*}<|C7-oc41=2nJRcB^X)w+FC8_xf$O+C|0B3ZCvjLnVpAX>20PeGnq&?tqT@2tS-S_7JE@{3@ zxFV{Zhr88P@-^*Tm&=uWgL;!1-xy^Mw;A3E;I3>kLEH=ANdUhG@R0r=GLrxv1n_vb z%C|?A+7o*=`7?mO*!n1ds&pPRl%|?{)YAZ-2k>_Q|ImC!t+Pk{t8+fyqh4r!Nocl5 zsUY$N@k$UmgUA-dt3hNBB1aIxJu1o}T2o&O#-112?NPac$P+~FAYKn*Fq>vkr8O^e z7VJ@P5b{$C1W}N%WRKdqM}5QO!a)?F`DPH6gLo^5vOyFLqGS-of_R%v#i=KlUm}Pf z_NeOegLV+5>Aw@ik8CQ#P)5JBN0kfWJ%;ZFQJxS#-4%kU6huWjQbdy9CtqcSDnWb{ z#0NoCr&*O+Er^?Jtr5hBLDUSQmK0}S=`K(^h&tN2#mu@vGzg*|yVs}QqyKRbjTklz z{`Xn3#th>#k!nqYXcmm!2%pdwr#YbowPg^dAk5?kd()K7!R&v9D^(Kd)SGz-&_ zQQFD5BXKepnL39hEdl1z!RP78^FGDrSP(6a^ z$zHY$Ww1_fhO!`ig6PYY=|>euzFE^hhyi;31A|x-#GoLi$<-Ldm>`A(F`TVKsl(*J zGh(kXMg%c3h%abH>5K|ubPyfLlF%(fjSXT#5MOfiaY2liWnt?8&T3*1li4(hIxIs? z31X_AiBy=7p{571Fo+pJ%%(q+nX`hJl%Zy4s5wD=6~x>i=ILJZSb2UB3xZgjq1I=p z)C`rLp%w+POdO^y31TT>dq(U#S-UgT@*q|Pu_B0-tiLZq9o0v%nwj5csDvQ)29X%V zmLS#!ks8FhAd-VvA4F0R=XCy$gp?pIWvFWzYJ;qE5F3No#5(sg)H5ce1(7b>LZ-@{ zsS0GquE4E9>QB_4sgiJsaG6@4MScn5 z*I?|0;?*GJmlxNl*Mqo0_>Jn6H)iEaVe<7q zTL`&B$R5ILA>;_*)et_(ROU<-%v7Ids+=L@3ZY%5>YAxWWU4Wl>h)0UNkJZYLYSPX z7G$b?AruPXjSvcikYBg1&Qt|8r*ibdAruMW%@DRS+)XVS!h0bU3*ns*iic1#gttQ| z5keMQWt2misub&dO{a7SOB2-Lnt4@wM=zAQ{B!~e`Kl(A$$-* z#SkioP$`7>LwLl@zcbZ~OjU(7v+s>v)$*tsLbVX8)07KOoLqZVO_`hg@|P;`VFZrA+*#v zCW1Kxi*~B8h%E%Wb{ru%$u-#IBD<*`o#Q3=sCD+LKnMdv2!_xqgb>XzHA0nRj}ktW zV`0tKA$%4>n-IE$&^CmQay>AieFz;wXu=%n)nc#eM8C7HV`Wp<5V~ondk7wyJwoV1 zvnRC|wKp}&guWs43!y)q&t+Vi0~pF!o%X6hA$-Aba0o-RKQx44B!uOxEY+3?(_BGa zqy1GOtd2X>1ghk(->cS!usMWvA*6<|o_-QFIfN9#1{O)DZU|u`%}vxDG}A)Z7D76m zE!3^l47P43%UC-?*h$_`e|HGyL)a6-*CAwta5#j_5cV-)uiV$V*O9$ye+UN|9thz$ z`yOKWJ^2XvDD@ciEd6gnI3@WZd@DNueVM~a!cR>2j{JQH*BMId=@5Ph;Vk_#A>7vf zxe)#!{}{q0wq6L~B0+ln6vEHsr_8w=!fzp53E`@k^nay3XX`bx^tw*So)z0zZjf(M zZ&7n)sXMZRg>hH*-Z1Wk@G^woLwF`Lkqs(@`yo6G;Q^ELvB;m~Lgc?fcpAdv5T1lk zl#Yy2I!pb{obuZFhvB~=JP+XoxoVcG#a4uoD-0FJt6{tnM)okWg=719J>54)7>zW) z#-^NMnCRqYD9NuA@=%Q|l`o9qVZ0H>n_=V+qfi(H*i?|}%TlefRAF)vs#Ivtf^UUU zR6E7O=#r&+WU065lnA4A7$wQ2!gwc)zFBH$mii(~jn7hL=$EC=$WrsO)VpC+3!{7( z@6&vbS|N;z1R1eX7)v;4Wja-;A5g1OSF*Kw7`4NwL8m5F`qm2LL-I!E)Y1M>}qW zBWz)7gD|{dd>n=&jD}$}ll9d3jl*c7xoH?Xng0o$=3!XFXdz3@uw@vTS?WlZGKXQI zb0SNf%2MaDl#QXC`V%Y244n)Os*CCl!$bImIleHW4Edox*s@jyd z{(Wjn80*8B8peV!riC#pjOlEZ`OF~9l*MHC*OyG$s4Gvn6oL2G=`hQSi4W9&`b|wGeM4VYZ%+Y*cHZhrtOf+ zn6Pc1+PzO@F>QAkd&0<|e`ufjn&#dxu7;5n#&==t3*$%_`YSJR)HT`6!?;f8H|mWrZijJG=iHLb zc7N=?xTBrBgk1a8?}R_X_%n?A^@#9S7*E1@tXm81S5L`BS^1f4yb=5( z8+#{q!W$Qwa!I`nt721Rs+dQX5e{`Y4((lnS^?ce#&>@0OZ0Z<6XYF^U(|f<_8o|H_x<$}0g6R0*Kpjed5Lu3Ea0El*K6T`NHHrzt8IFkHiwLGg zFfxMi5sZppEd9|Dj3G#c(fiex^>oa$q`JXGl@D=&u2;mQ|Tmyhj!8#U9-LFpXSO4x;Nf9JRQ09QLA5d)%s8I)0 zY6P1i*bu=+8U27dbU-~iph_H6o7u7MLDk`)N{?Vy1Y0859>LZKwnZ@RU~C_ocTlAr zR68Qr8Ntbe>gqw2?U1T+NbQawGlD%4WXPp>NDV%u79LXT52?KoWJ#$*>W4$>@gY^{ zu-dOzKn~Lilbtv60=w25i_(}86gi8@z7Kq?V1o6I25366vEe|Vkt}*R8^*8Db z>P@N?zZJo4&9=j_1-u))Th+Hsn2BdmmOF> z=5tuJI;;d_l;;t=VCzdNqW`^nqX@51vqjO4L*$4ePZY1xd`)NOB;=yzroK*Xe^}*> z;w^H%DBg&oP!#zY%D4px1*u(Fyl@mnbnBah9*0#?LNVbuYG0-rCP%3K zxiX(d@mUnDqUaDsYn|DK(3aXRiuQy-%DI44^-dD!m2~22+Pn$FR$=D2D5t5ri+I7^xjO-qBG^ ziRVW#Hi`*Re5qTCZf2mMI{xWS83+V`pvnYzi43|)sQpKOaL6orwxl<01 zqwkJlZxnmzXHYY#i}ku?MX`_0e(DPP2ctM1#UVO!yoU)#qBt7G*W_bStkM;}p(AT} zLg$|(d>h4g+L6{%QT!go=_r1U;)f`Hj^a!dKQiHL6z6p2`6v=~U!q86ud7kqisD)n*Q5Xax2fNla3h{3Pc(#;^2=Yso&S%lF9EZ$4Bx*WrIM^g zM95Mig-D7D30WecIQw_@bqehyQPPG&O12_Pdm*V5VXR{oGh@sQF_u{^NmB89&V71+ zzy8<%y3Tc9_j5n@^Stl(e&6?=GiT16Ay$}drLH;qoG{8sl2c=Fn&da5pV9TF^XwQ@ zv*C|1_-72xne3k==f~hLlE00*9EW|Yfq|L!C; zY^bN4dQIY0#9GAKHq<4lWBd1S5>vnLu1`@%xtin}8yXm;p$*rPr&FJ#S#x(uP(fs%&DajSV;2&`f`MM12@tRD5hCPY*5bw3& zJ`$ZzFB^IrzH^J*Z^MHO`w|}@_9ONu4zMAUod?=5)P_M62NSj15R!*%$fai(!-s7c zK{A~92(f^Mk>t8ZJxZb-9ggegXBh?1P#BEQiPw;|1j1Vx>Rc7ELOvs+}W z4bRyy&W5LL7*G948=fM$uthGigH}C5!d>Qd$qc119 ziU+&WhE+!Ygyd5jJ|p?uhA(aS!epm&N?+-X&%$qPSkKgI;u;&)l6-6Y>umUr{2Kbd zw_yXrA8h#1cv3g}PYi#yVWZJE+5UY#+H6CH-j7D#N|J8FHXC-5Z`ZXYX~a=<1$No6 zn@STZd-N7ym}x^6iF&ea$T55`NsFzLN0Lw6XG4(<1?2l}C?sjghOLRkHXNYXcB|Z~ z3i%L zqKma>Hal)-*wKzoB%O(=7iL|^wR2ZH?l8O?$(?p|H_G6xaOsYS%a#3jTJ z?U+R8QijWj>i^h|<>V`jveJ%KhELrppBnxd$>+o`h+o?AmC1fhq8GqwJGR-e#*R&P zthM8N>faLA+3}t6uP1qBtNcLnBXNTrKa>2VtH;@HWT^9;xmA84-)xjEBwOuBCz)f` zZMz*ijAy4EyA0n=lA-HqoS9Uzh}m}JknFXiz>Zuy@)_poveUnh;S%!wwh*E!IHN>k$X#AZaDN%~f4VfYOsEs3ohXl?X1BsV&+!}M(Hz|AJx&VlxZ z-$K&Cfm=!T7=K3xIyunIfzH%#Cw3v~9J-R+LDbiHcRJ9+f$k=I7s=g@N^S^1eoSfTSN${R12rCwYQcz*Cc&(s(LQI`EVO(;Rr( zffpTk#)0P@c$TT>hzD3Q!GRYXm`Fu?9^NXG3_rG2COa_IftRREAy#aaQ!IR$;VZ;5 zTjf=f=?=W*z-tb?!SHqBIr`sp;BOKgWrhPYnL>K<#|?eF?Z7(@%r=KVhuOIfEOy{s z2i|8m&w=+yE=?Exj-dGtEOg)l2NqCF{eUo+-4;=~GF_H9@FDpr{r)$Sr9>UE7Ki?r z;c^F7kgRmzGm=%rPl%rq>(l?a179%wl6b9||JR)PH^kM%H4dyL`Ie}sW*v!sL9ULz zp5@;=@B_(@4s6ujfLyabIq)-iQ`3Kw1HVw&OuU0lwmNXsfpiBBIBv~fZL313)XSmmaTnF;VTX6#IiTkJ&IM9J%A;Th~mKQs4 zfLxC>`Mx^&A>v_T2~nL#9RL3I=NOga#8Q(jbD-RTN(U;a+-6pw%7Hu5ns758b+*IHw!C1Apq}=fHUf{^D78#OQQM zq)Tllu5qG{6Iaty*NJ*g)OTV+dh&Nw{~e`)8C1nz!!g zL{ldwrpqhoGBaJ?OP6L&G2iY;t(|D;L@Ou0OqXxc<(G8XmM(2{ z0-VE+blI6MyV9kt6CIqm*@;`6Xy-(GW;4=d&wu82D`#~ZQ##?ybm`)VVNo~iI3=aB0v%(rhXL_CfBNn6H)RQF>dq( zNtzR9IG-n+c!tVYC&rPCH_j)Wc#8aK;@|W?YqHOgJg--vQ6`eSK)jGHFB*L^N$M({ zLO#_fuQ)N^iD?X9bz-{FUvuIeCti1ArW0>C@uoBR#Ydy{{U0Z0IFnx-st2gJT;Kn9 z;%z6CsG^Uf`a4r6-gRP*Gx-;7bBQTk!+B1;=fwN$rf(mqo|@GMPAqWZ3nvyj@ge81 zh`88^B_!&^Hu=bjl};>m;$tV4QLnX4I&PEYIwifdwk4m59^WRjw#h0dK6By|Cq7j( zbxmz1`P_+2k}sY3-ifcA_|}Q9omkC=-#Agu>>4N5I`NyS{cD@7qv1Oz*6SX!U7Bx~ zJGLiB{K1KznflR*4Nm;zL@(-^ifosSPHc8!lM}x<@gns%h+9~qp5@ym-H9DeY@@Q> z=(;jH4d3O&Zo@O2*h8M_L>9@q?XsRda~SF$lI(RtQJd#EamtB&C(4}I=foiz3Y^&Q z!~rJ?ohWvqh~f|1llxfebZFs06{&AD$8y+-5+{y1afJF&;#OvllWSF}6FZH+oMHvB zl33-$2`5gHXK$B$I#28NuIo%uJDhRicf-$;{6Q?*E`J*Ryc2&palwhdsr*Ac#BLXj z2QHLQspd*P1zbYB)P<{Ds7`*F3pGeCci{>WwH;^4l?-bVE4NE6lG?;N#JWWFpWZI@ z4Zqs;@9V$@E?nzEL!+mbw2{eb)pblYaiJ;6^~TxEh2}2Yz_0~Tf9KxP5G`!&LN6EE zxX?|zxp12cH@VQBo!h!_Gf6w*8FMyoaiIg1TZ!64=hM-JPA;t1&%iV6?85CXbfuw- zEBSxE)N=>J6u;Aj9ximJqN%%FxZ7}jS=-Zvn)>y;F5F8|w@vljN3Pl4oWCl4sOSXx zy5M)=0qPp|bD_Trqg)u^!cZ3;bYZXy16>$I!{6KG+8xqqhYWGyA${zS*bbS#Lq6Rh z!(4d8g@;`j?!ty0vVVu1*dg_H$_N)m>R3Bv_)d9dXYvkx)CH#tkGWuTVYCZlT$sF5 z7Vng;JEd%=*j;eA@b^w>u}gaF62~raxnQ~AcERJq#9gv-mt^dcie2J$!KataZt1!^ z*>)5$;6l(GONb;)j1Z$bC~a{U##2eSkVc{%9(Umh!^gTXj@(24lSY4vL>KTGqdZIU zoYA$<1f8eJzCbd`g%?RCyD-&-mt2^lM{RcLz;1b&**M424%1wCmCAG%=DP5j3vavd zx(jbne1rI=9s>O{7|wKImJ82PnP~dF!_;iz934>y+AZ(8u+W8hF3fk~J*ITT_etJl z;Rh}(V7Q9mA{Umqu-JunPh9?r>oz$u6SmyGb%!_{}&o zUC1)oY!`A2-%FC~LLSLEOe5AH;Jm{AoPrUHHrJK^gK7`2`m)apNL48Mu>Mu|C9&YK9NZ zkS{4#cPF0_^l=%<<-{x8s6lciu_kc@=T?inwj0-w)FIX-)^npiiFUi%jmPL$-oTB9 z9QRr?dLuU)liMvsiKqQyqwNGvqcm?sTK08(rP#I`{+ydSYYaRBj0b{Ob}!;L|1JmSV+>N=AlZan11!)^?9W0)IT=u~}2h732JoD3O3 zK2lEy$tdEZZWPcz+6|i`l9TlN+z2uB69aAp zNq%QG>_*Iu2o>!RB{{EWkR(C8Nay2jyzj;nZoKTqST`oQG0u(W-5Br2Gj2Rd=TmMx zO>*g;`wb^duxUtWTy~dwQlIKP~$wzb+nCyO%LSm5{ zE0{gt#tAnLx>2e+Q-_F$-8kw-3HcGCj`$f%j=6E%C|~W7GV*d_1+kJ?MbxUbd*q}W zXWckul+z@?xp9W%cjEVK{)h3LbK_6)^G5m0ji2fHN4HH6F1S(4gNtrl;Q>6j)RWxg z#e-@jmk>A8uX=S4E~BFSa+2+Pq=r$h^q?mBRYu9!Begwf=s_JSbv?M+gL>rki8-e8 zH4Gbgu%F7c9yIZw5yi&D>xc)LZAyMUu^I6Q^%fp<^xy_6Ej_r|gH|5g$gnlB4Y6#G z+(e>B(bj`X*0%GY1I6|p++wo7?~z*#zs-a5bZS*64?0u7o!Eug)i^Kgk!~K`@4=lO z+~Yxa>URU~Hq&y>C%4D{duqxU1}PaHse(1WYk zN~;D@8SKFj5>+1ZU?_P#<9XPF;Z*dARShFNuz4`j_(zdEN_>ns+JiABt0i_1EDs!1 zoJMz%xQQM;^&HE~(C0yj#P30XBuLbuo6r{aAVMW-^yZlo_h5<#2`XtGJmbOR9*k%B z1aT~JoSt`cTu*xN6vd~B+Fxh;tOt`AKIg&n9!w;kK)jKKFOat*f6;@<3|}JNYC2D4 z__7DDkZ9*=B(D;udvH6QuY2$ol{fVA)BpdXcNSN8hN+tA!7LBvc%n^-yvuN&$@a{Y_YI#y?7J0Ce;bIS#c<`|YA9}FVgO4cQpD6=4y=4rC zkS`}+;laZUS9!47gHJs8+=EY<`iz*mLcZ|eD^K!Me_s++{Mv(Wj6uWUnX<-%Z+X;f ziMmAVNHqJMajN*e2S5BL+(7=52OCL#Hnr;9WNe!~*y+I*hN^ERNhfaeU^~eU;%FYr zE)R}*u-k(|4>CN+^I(q$*&bxlqaCtzyWn|Ip5wt@4|4T-X03~uPv<^jfo@G6xT*Vy zMIIdXpqSYM9vt%EpmK(Ku&K_e|9z(YOFTHj)KQ`;nmSHiN-QIm>vrTp1$l_0RFOwH z&yyb1uy9H@VGF0J|E8Og2WLF^!-L<=I-ezpWF}uQpCkX1n8=jB^is6&w{H6${A2uM zGv%V;&t-~OxYR;53zt~Qt9MeSOwE+n*{wR2`I&OLg)7MQK=hHiysxxS(@H*lXq93u z3->atZJ~~ZwifDIXkwwBg@zXDTeyZDt~MnNNEUIRYb`Xk(1=Q^q4vDa!eXvTQwuj( zxZXl@3(d?l)X;)l$;X+}(n1>xtt_-QhJX85xXHruOj(gBE7|R43%6TnXQ88o_7*yD z&|565V)j-Gw^8|=;kTL6$;_&=g>{+oL#A}G(A`2;3wK($!$LO;n`ln0Lu%Z+EcCQ+ zw}l=o-(n2+m~Lvm&w`C%FAKdb47Je5!T<~RTX=waUkf`kWlyH`v(Vo{ex~S;;e~AV zpoPH}23iY zENPe}*Ja707DiKfjMySe#u)#NS;?zQ4^1Bq3r^}TlXYA0Snyl0xcFWRK9Y7>(lJZA zWl6w7*h0`kh43_~?Ms|QZ!^G2CKqHkHeV4=*yBt4-PUbHaZ!ek3?Sa`|8D^~Jz%Tp{& zweYfqFh-ZoZ8z6nC_@;%~7T&Tj%fbu`Gj--! z@D#}6KcFvMH7Uo%)YvElBhq9z9OSZAkdlufe@K=@~TdHNt z<=OIq7Ft+f;UfzREiAFHNN*4e&+Df$vc;}9V0NMfZqs%Vw|&!bN)d}ZNN3!hu~jOGs6(mh+gu<#|rMfycdoYmJB)>!z)!fL(z zv|+Xk%N9qrthMm1m3*hvn=RpNc|2Rbvyi8Xg>4qTx3JN|4;D69_>m2t$(HA{-uNQ)NGlNEwi#^lZ7o7ezCAwkC7u5abdSwNM~V4|4JfTbe*?b$h5G-!fw4sEbP+7 z$(9Y-l9?@8*^*&lkA>oF(V3UfpJidMg=`Bs?4whyH4M;dr>trrcw$rnqhCzM7k(NXl!t|M<^l%^!t6PtO_oTLS@kfXQs;ubGj zdC`VqYj5&T^R&;6Ufe`Qd0UQkGeaGv9Z7pdb95cN$!9=K-NsZ$FM4{>iM+EH-MzTo zi#xpNLPc#|y*O%WyHUK8Se_$yk=#w}K~#TL&cD0py;Sb=qPG{lOjh4^>*K}!W)A94 zP38d_`gzgcI0ty~py2~a1`$u?$Ph0^c<~U!p~f@Ji-*aF8|4v_Go1WLFGd;tQ7;}d ze6$y1$ZK&;?BoujljtJ4i5{XwOwHU!?l(%niy(Q(icPF5W9MyqHPn=X+&4^|u+mL!9l!94`)0KSg|(`aI%$L_O;FN#=WT zk)8!!eC@?TFII7(7J0GQifhwWFGkr+a&4|?N{?cz7wH^#o1z!n zy~y!mhZlRi*y+V?ns*T!y1;vp3~Rdy0F#*zZNI7x`Y~F{RGV zxw6lT0*2jkrAMyx%9TPd4tP=IMKSdOEFVlf$bq!*kQXPsIP6847bRXC^WunZ4tgij zriS6Ua@>njy{C9mJk-m*sPv+OZGBX#%uFJ=a?*>lUYzpcj2EZ9_>E&d&hqDT<##$K zv+56~&Jm|lIj@_QFS(Qd<;CA#H1gpey(E0NpgX(|7rm(F1AGvAUeA>`*jDFxi4QY! zWoE8a_u&d3F7x4X-@m(}X0>4rAFiY_hb8lKvHKD1-`=3Lp5E4TR2!F1F4WaP?i zK6Ikek(k9J?QG`U#gMMPES~kDm{I;hvZ)3eZ*eG z-b5XJZ?4?$Ltln^q^X1L$FM(ffDaG*@SqO^8S3{94k8)s!%!cF`0$X?wOavaKFo*W zTxp>fp%0^dc*KWMK8*08fG2dM4~KG-KUqA=!pDeOtI8O1n-2~j?BwHF;`|R+r<F5*83|}zHB%^3{vJWr$Fy%kWR3BdU z;T<1d@!?G$rup!i53l+#U2mK`sgWm5@}zm5yzavrdTHe)x0;^Bw|tnT_mK}XeHfG{ z!}G+JC$2ncqo4oOWyzCqc{1CF`993?VV)0jeR!ACo|Gpu*x@}N-uGcao-AWkJ^klj zG%WC8A&Gw8Si3FHlf~v(miX|Y4;y{>$cL|eSn9(kJ}mQLh29rFELSm4Hs{H`O=54d}y05z4E1hzC4sK-}tcJ zht)oO>%$r!*7{(}msq|`%$I5Tvd)L^bkXuOJ zdLglhSWG;iw+zWa;;%#(3lIBH;=>Ui+zg|2~eMpSr#KaGv^K#J`E!=O5kw4Nu!A@bk@o zqGqf4aS8dQepL74iG4DiZD;P2%c-Xhp@#8aNmA2~t4L}QYZL1bwdeeOQqS=EBv%u! z@uPtsjr?fH@LJ;HeX?wyH1?wj!|VK5#R)WJ_yu`0a_!vQj~3)N5L*&knQUu6R@1M} z8~wP+=xzPD*^f?swDaRuitYWl#g7httT+C;JY}~r+mWbBXFs}<-%jj8yqnHD{OHC| z$5Ll^KYB2{%a6NB^z#6k>gh*chWGfBU-f*iANMirBgWQ%?|ft6!k~^7~#iAa!sYO zkNPpjkH`ENZMtd6|7PuejP=9ehnH1OKU^g0ar@yRw~Uhd*UUaY{8R#d#QX^Q5oQ?j zWBWeI+$Rw~qJHe#CnfvjB&QnpBaNN}@zMf$TrWlPIt9|WAbDSpV>q7pq#sX_Jf&a$ z!Vh-4{I^?E$~kNsFqWraWaqwz{V*697EC)$rs{P@g|PmTZP z0{PsJFBslZAe}geul)Fi%GZ8$F|%52X0_Ij@BH}IbXZ5C6I*YT?~U@KADjKy!0;#H z&%}*Ho$V$+ej)G1QMUMzuGhKA#x7pmMy{{Bw(~08!EiN?aTob+KQc)6_>tpBCV3Vy zo0$4UjgGa~k6bEw#C7J%+2=ai4&7ym~&X!x&w95Vc{A0^~Rh)0Qc^H`4i zQ6qp-KdLB}`B6?%L98UEuGJHMoMCvdao&$} zy7~Lj%bcA%^~Jv*fBW%3fhg}+AcG6!f*%MZxBZLkHjHMWGNM2(3E;8-E@h~m>Lia9 z$mK@4f<#y2$^hC0P&0sL0bCWpH38HLpdPce1E>=~-2iN6CY}PR&(zhXPq0851kfaa zh5#?>HKkt0&x=YqM7I90A31Us$OH%^&(F$!o`a(>%~Sg?LYc-y#NAu zjmqo9Hv*Uwz?%WgWcXG9Gf1?9md^^{9fofcQw?VuJ~x2*0lXW)djZTdq87gYAO1lA zivm~>z(O;hROiM2@u>3Qf3iyhSjOzf0elg_@&G)(Ho91Y-@QI6~WPhLj6 zoBj&&O5>>t;Dq5PNlpcDn&dwE&zS7*y8n~^K|E*lKLa>V-j{wo(!T@vCxA>WfOqu)=`m-qm&AJMyC1_bd<5Dx}1MbAYL;UESDF(!z?K|B(~ zkRXQXng=m7h|qo+zh9o_fjk_<@E|7am&yC(Eh-~|cr=KSL5vFGz5TLqzbvEvSP-Li zi2bsj;V=8e7K9aqJqTA2jv$;t?A|YXnJwKf?jSrtoZBx_D3=x{w-Ij;fgpTA_=Bib zC=CmxIrX4UNzV?s+By_UB#38&hz2n>h*%J5LBxYd1kt%rdKOAAIv)?>i6HtH%E&?) zQz(H#85hJ;L5vULN%a@Xv$VZfC{G9ROb~Ar%Ird!Unolp<+&hU4C479UeIF?Vqy@V z70TK|`Myv#70M(oX-1*s7s_Pvmx!s?U{ixw7{tp#%nss}Al?jOS`e=V@oEs$gD5GK z(n2{?C>IOmbsaQ_D~hCkku)rl>x$&9AZ7(IBZ!%LyhYNrD7h?m70KH{yrXAI|Jup?oxc^yxguE|#4kat31Wj*1+kvCZ;9)O-w~@7%l9Nd5Pu}< zYE&;yuE|e9{A`qsL2NSo%3|3Z#CC>Th+B#2#BIbn#j=A$`|J#2R}dKtck2$r=6e`6 zCRa~Z@Zab0oFMiGv6tCgVjeM{sLp*s6p%MHwfa+VQ4qzZgL?GNJ!t&DQa=>L;UG@x zwV?|Y#E~G52XQorW6ZWFPQE?ZrdUcDDsNXTzP%(8A)?u3*rqS zv?Q6rwyzdT>k!&d(c{uSH->Oi2yNLd)mgD!2)BmNK7?DSCvCbTu}ZVIk#r29lTp;r znf&$;x{!1w&MKC<#nO#D)uej}_l9s+2t7l%JA@wp@3`u@CzO2uM@P9Ygx<{dV!0}P zLb(6`^FP3BzYzL|Fu*t;BpDdO;1C9pr$$#C!cY%qXb8hY7-q5$|EKdKA&g+CejRsI z2#=bo$4EwpFy=pg_1HsjFr_>-|J3qo2e)xrA-oZSH-zUy@P+Vr2>uYFAp}?$3?Ups zhunGl|)sPmbp zZ~lbvTnOt~yNNg zNB({Yi$a(m!UBdLgiyuoLWX*zrx`8|VF{H#7=9GOS0OA7VFkryA$&}-ocK3AD?|7^ zgjFGY8p0>k8L>Qs3X)1<6;W$%r}Jb8r$YFR;_1-8U+;6qc=Q0zlK(+G zXY@Zw&WG?<2>*oeH^bCwT=);yQ4r>j0K{sAEP%`mPE zC!aOCagnbIqgEJqk>7JbdXdx#qb@ya>wQ4#htW8Ut4+^qNE(FEkmOooBa_t^NY{nY zB8(yi!|0)_ z5ystN%sn8B56DV3=^4g7EL?v;_8*Yn4#<6B^a-O^7`?;z=YZ5Wn7je6IVktj*6N^i zIVca1_cJ5*C+Txg9wZqU#?UYZg)t|ZACXC0z7#+rI2W9p_S$XXBGDU4Ubn8K9yoJ#U?7>8(3Wm*`oQk+h# zH2Ujdyb;F2Fy0K~y)fPi<82yd5NC!li$pt|J|yqxg~4z(aZVU#OrLkdm`CxCLxRKd zKKXp&2Sn|#AdE{6Cl7g17)!%gOnr&Tei+6_lxUVHNM4Pr_)* z+vhXAmm~N*jKVO!2xDs)Uxu-cC0~W{br@^H_$G|i>SuWy;@U924Wl#poy70L_$iF_ zVf?__@AcL=Ed3A5k6~;G;~{#+5PuHimoPSlu_+AKVF@3Wafjvk!?HPyEn!SOEHe(v z2Zv?FVMz}oFN|$r>Fph^&MrUal50=P7B~l(n1(lI398)4y zVVn%(1VtCcQ{DXTta^jNijJ7slBz{?HqtL|!P7S4!md68STX^I^;^ zk+~(ZphQ-b$lqaH)Ey>_3wq*8c(Uo5l zL4ybyM*jWp&#LIF%0>}%ji7M^w?%MW1g#=y!jh&DG>_nV)2CSkEjdsNDmQ2t!A(@O zkB-|qg0@VxiQq<(n@p`f#orvkEfKV%(w=w=YdaXvt&#ux-nKNL1jErp%XIKXkQRYIf=C2`2tphssLBxu zv3WRx_z@X*M4}PI%pBqoBut0Y*?c^LaS=RW3}Yjh%z-pJp3Wyt>S>105T7MJM^xwY zBol}eBY4?#m_+48?HR!<5xm533UMm&WukU?jV03}cr}7IC{B;ywFq91U?x*@OwTu& zeJg_ZsmzREb_BCbpSL4;hdlK$gE?mMy5{dvpBKT32;Pfep>{A;^GQA+E{Od5O}~p6 zE{@=%2$mS3qLypJGZCC+_&ZUL z=ns-}5mbxfPxA8-{6q2=@$U%wACL_YQQI~q1DB?%u*`rb~iuzH! z%#wGH$|pzVnkcS~qCpf5qxj*dR2`M`N2Sg&X%t0cO&yb)k0poeax8hxG>M`qXLvoa zSrjd!Xil!#79=+iA2=qhjNUqmHsk}?*$iUCpdq<9bUUgCXG^ogPud2ixq zmfRo30}T7>VsgZOQS^_(c}#rABuYCjPP4C7HGqL>gxS`<%4@pu$tqtKOqLN7?Y8ujx(QH-aepE8<2<*6v1 zjpFGjp3y@6U#t4(>eQdpDN)gIJk1kzN>RKJ#pEa^Me$-3YSzzjXQiqkn&o%3rXuk)JMP#?r1u z&xvAg6z^(yOg`pXtvx31MKPb*_oLW!Onx~gA4IW$%1+)LI?$phK8s>;6dy;iB#Na` zd>F+?oJr;}$z!W!EIG`Qyer?j16SpB$s9>v#GzKG(>D87oK z&hg|e+4{J2J}%!xu{Mg;QLKsL9_l)o{>PJd>$j{LdR)GXVrLZVqxdC?@1xkDcREu) z5=XJ>rzkcu{5cAb>9dJS^tfy$*%HOJD7HqC&QRx|ql`N)+oRZ_C!K?;qWZ2VGU?e( z%!pzSNh+(D#V|XHoGA8^Ph|PzUa@c@$MqR2aRIyf|zWEbF^BAr-VY3)iR6~mxT2j1$g{rhNM0@I^ zjrOOa{3epN#G7MiXY}?YdpOAsBC7zdkpS zAJGs08`3QX4K>xB%3Z{}iK&vFG4#>Zj^RFv_x>l}`F+4=)&=`j4nKIXpe(Y^{3?pNBB!&@m>Nizt zXD!jks2DVSG=|4w$+sCtvx5>f=mlV7Xpg~R=HQIMMedHliorvkdbZLMFT=gZ#ZM9- z24i?RhENPo#So4mErv)8F`mIFasP3N$B>BO)N!d^D)maGNvS*@!?+lph+%9DH$b7E@WIovAE|;lmham&&|SSx_oVN@ZybpT)2&h81l7 zaSY2%|COb(GKNp6uTmQ)^C`2bBUSu7hA(LNlKR&il4QLF3e{ zPT)`sB~%W_(5+0mm&p-^J<5_7&#@S)#c@1_-(o0@;RI7My27l*vCaTp)L`xvxwR z=bQh;2*D)RF9)ZoUi}mxIB(4$P;CfRwm=hcw$Q9QA3tnmDUW-Y$~{v^9+5+BoLWIiJ`#juvrT7svH9Hz78S zV;N`IjA3)4uF0x0xq-Z89Btxg6-R4^I-k|-b|XjmfxNA$x;c(^aoiq9`#5fk;}+^2 zh_@QgHV)S@j!slM6L(YWLf(~l2eBJ5n^~Pz_c-pNayLg8u(6 zPEv_J`Y@H^edEc$oO-}0+NXaU11RbNYD$%XaSSruRMf|iI39{)sOhO5b*ippIBOpv zru30xh;-Db9CCuX-0I#;f}+K!()`u82XQQ*vXHolsC^cbEFpdv z$3Moul*%&V$He7vtRT^KV}xHkEbe1lPbVmGzvW251}F#EqFZi!=S9Muv?kK=G0+v3<8 z$M!gO)3zgyopJ2aU5kfs88IV{tT^_>k*Ql*xwI&kTc~HpkrPK(avkxma>>;TJC3|K z3gXC*V_zJ7%cXz03@?{a<+7hcxacp6<6s=caU7r+DVL|pWs;`iIHVU6J#UrEoN_6N zcDYo>aWamoI8Nv^ z*zHicRF%uAI8Mj$N4Z=qm+BQ#w?fXu@mCzb$8j!>vzm&dL4{mjAuTJUU4{G^$9dh{ zDx_yc@|@mZA%DklQLl-@6*8qlUS-=W6R4TM407!-yFzLuP&a|v3Dim8J?hIUWMzfa zOQ1eSSzRIDRmjE)xrSkb1R5pKFoA0m*jXW&6;hy871Eg5BNb9nAx+4&f71l6PoQ}M z&5Ux2L$qM{J9*0lS|xBZmDa>I3EXJ>Hzm;4aQ*#qJM#9#Ta4a;|Xjr*WpP?fVkwmq0J3dK3E)?f!9p!^_9sR z?TrN9O5ja1s46oOm`P87^U;~Soxr>V-br9i0<(>?S*6U?C1Ti`t=d$|dkM^^@_qtZ z-o8>kFn;Z=O5mde7E@nB{E*m*O_q|Ya~a9U3EV|}MFO8Eu#(~`;wQvUiR%9> zfgW@!*ExTw_kJ3_N}x1>uk}_<;F|QZ^^BMb}D~qEZ%B%F;?n zPhfij+t_3UojSuE34B#4Yb#|}0)+|ePGD~W83|-1uqS~`oun3Owo>vdB|Cu}mLIK@ z%1Sw1DY*&kOCT?SeCp>bt|0L`7NlIQ)` z1P$rS0#ZeiBl;{;Lilg6F8kfMFJ-hsHDG& zIF_E1;GABfRWh?m=2Xf1RdSw&zY?gHhQAZI zn7}^?Tu5MHm3&ksE2?B&l^_k0hK*ISrAl^GNp_W7l7`FDaA_K zC#2p9X>vlYNyD{iXpn}6X=rgmZa$G*M*WuZMrmlAhK?uX&J)t(g!EN&8d|2IX&RcR z;rcW*OT&N@GU|V*`VQzQs_*~L8xo3QR|K(vU@xGcVxd^EfhYnhqDT`g?9T4&?9SHN zRqTQYDmD}aQNgaDVpnXaAXq@LVZ%Za5+Df)`G4lK%;JDXIQ zkyU1Nl{qkiE)k5cGLx!Iq{=u|<{&BR7D4w2(p4s3Wp0%4LqtC`f@2~$EP^8=I6Q(Q zM7*`iOs_HzR+*zBI68tSs?35a^L&+ATxEJha9jjEBRDpK530qR*sg7YFcF@pZ0_le-72u_XQ z8CrE(1g8r*tlIRfHfKgKFoLrpI6Hzq)uulw)#id~b4~>3Mlejvuc|iVtIhclTpqy% z5e$uBPy|CF7#zWc5nNkslGWyxYBRIiTol2@5j;|D7F3%h)#l@Bb4dgvC?|s95qw^4 zzN$7qR-50d&7~1s7Qy;zv!UA5RGY2UW@H3oBDf-gt0EW`!Ii9#8na`K*|o;(Q)5O) za5Ym?V-Bw|$JCf!HD)Z6B1gv2@)|RsCh&9u&8{(nYRp7UO%l9T@H*BKyR;yY8zPt- z;={By8i6g&SOiHSaY08g5rHeDTt$Q_4L#OCNYBtIiQ;T7g1qPjL0_;Ka+V^vQTRyl zPYLNkCsgCTRg~Kzm>F};a0GKjtY8gC@TG=dL~vV;xvR!3*N{<~ zUSqxr@s$zWTVuHPYf-)l>E84w+Q|a{yTF~W1f@K*6;GTk3t?3|SZ$Yl=7)7TL-$zL2 zDE1Xn{?xp`@B>1g1BG-E>>9;ELb`>sZEDTIQ5>q_A%b-3uqciYez?poTYF>_M~Qf} zAc@Ba=|N9xgZ6c76n#WFE{a}4dWW3HM{$Di69spyHM`cDlZ2lf#o1Au62<9JoEk;{ zDEfx0`jMzWQTTu;P7}TS&`Zi0QJfiao)vNq3@PUbIalyJ&33Fc7ic(0aBvhugeie0nNGH!^F_()l zD%=h!@hI|9I8mgdNJNnm-HjqCWWA#5h0GL{5l$ot@aH%3tmc}hZh)tZ|^ z3JtqC8XUyk62<*d+#1EyC~nj2?NQtr#T_AMA4T9UW?9IzDDKhJ-Gb8v7q+y_h~i%1 zGedvx(~uU@-&w*R2q_N=p$!j5@oW^2MDauvv!j?3#iLO?rrGjWJlFHbztP}J93q5s zqnOW~8^x0%QaCTtpNit?knNdh@Udut;6gzT4`lO?;>9SQm+%(^N$2vHqIgBamqQ}y zuWDgg{^BTJi{f?7(w8@)SR%Z90!jFmhHneL6UDp#|Lpr3ejrGJ-11AgTWx&ArWeJ> zQT!UkCsBM8#ivm$kK(f^K96FV_)k~Nzlh>X4F}emA+=^$tyvMpN>RQNyrR~uisEY) zv-qiHLaq5WinURE7sZ+=R*UV1S`(`^-$(HS%S@aF!5^deIf|deb5pIkvn(Wv8MS6s ztyvevKT-S^#a~hUE}lQ4_*2NkwPuc(*K0_HC~7skM8i!{>}+Fm6qb!GQ8YzSA4Q`W8U)|1HCu%&6@N2p*v7UfT15P;)-10z zD>Y?otQFGAMjIOycF@BsZM3%WYpwZHQ&qL5t&JURw6n1THHv7}1--Gojh(o#&a|&H zd)1jvb!HbE``Osl#@;q|v$3a*-EHh)<3RCu7u?H62PryA!ya{}qm9lsI@#Dq^br5{j zy+xT;XJ*!!2Sh)?#)&rih(5c{JYHw!*O`-T46t#Ejea&xwb56z3+v2_b!L%P^|$f5 z5ZZQ{W>2^AwkT)X7;NJ#8|T|N+s3&z2HH5s#>aJLMV(ngo;q`$mi!Y+xIn`}f}85h zg*Gm+F~r8jjFO1Wb;jCch6-=9DahS08zVFvF4%sPxzxsG!gmuxhfQXrjcaXOVPk@g zQ8q@~xKa#P33lFO4%}p}wlUVm7*V=u;W!)P8CBsu1*z^DF-#Pk#E6N0osEQz>utnr z++ZVWW3r71BNndeFT~cWbA`ukI2sPt(6!;&NQ#mYq^_ZxOxi|P!;Ijin@ld89knU= z=A~f6w^6i%_Rb|G&E6<@lZ{)1OtEpZkO|UttBu=j+$IW_Oxk4buyH5t*K9;^YB)R1 z#@%-CG(}FTxW~o=HfDsgGi}@}{JxNKzmQpijzn?oLo)ASK@KTrwiq52EDNXnIW`^_ zCHlDNbf{o|3BqcK_ z?L`f9o6O5XUa|2i9p7YTY%=$YXR+w7*;vA=w(*9Ihc}t0H<=eVnYTBYH#JK+Uvg;U z3mfmSvDR3RD{ZW>@s*9MHV4%{cC)cJn^iWx zw&89zh0W&1&1TwW^R10FHomj5T1Gw~=6RdV_cY1IGaA0O*}Sva{Ai=e#!ogj*!bDT zpX9gk8~db7FhQN7tTY&LDTnBBLSzij+tW4(>P*}JxwZd=Te zTTGuV=3g8C**J5Hxp0fQbc-3Y#ZrMCiU`fw<(>jKBF|>)HZ49T>n*sG^V7(byZ+3`b#~7}v zH)HF~4fQ5N39;a=v9sVVG3**cvEJNSZ>HCq`zSnyJv7B~-7|*0LYzxF#IU!9#5=~& zN%({H!3PskI@6vQ_KR)bMCH%mq#qE&fpkGUU9_aD;6Z|{@a|k9oJ$T7!c~V#PI=Yg zF&rU!S*IrL$IeH*B&e6xLEL{%3<$Nds*5EF`O83Qs7C#PZm7of9QQf zyk86{$r%vCIWe3jX{U#?XT)%(@UsNZj$xpXQCc#$-kdA`^Zv(%3&b!;aBvJmgkvKXF@;qn-6jA3L9P7GJXa7_%OVi*&{l`)Lg zlB)!ttv6Q-c~NV}#xP#PaWO0sg&HS_vZUTjjA3#NlVZ3|lxt&nS3K9paDymI>&<7P zL}G}=5RJhW{i}NObto+!!}r1yG2~)!V@Su46k93=FNUA%&F}T*U-4u_&kELr67n$= zSfVlbqSuG?QVh-Y#%eG(#c+QNQ)0L?hMQx!O>DOa-pU=(5Nwd!H6(IJ4DCg^D~6dd zOpRfB4AWw`TMWBus#AlxCx#g@?B8IzHkj@r-Wy7|Psm{nW>ySyVt62i*)cpA!^1H= zq^a_k2#*Nw(O`Nvm`8;_CU}yhJs!h64WEc%t`OQbpus#Te0~g12|2UD3>5z}F|3VY zK@1--?=id{!?Q8G6vJ~dyb#0lV!l9}FABf7!Hj4yFEgz%yb{B!EQ1C!K@5`{%;Fec zW6By#vccpUOsT=V!Q{rUB!;(Rcr%8#B;=L`bElTjws%CCuHk#a->26aei*~b7?#HH zc?=)L@M#Pm$MA`G9&Ipl#q(JV%UGzPwC5Vk7cnf4;Y+c-D*B2TzS8gw4c}=nt77;z zhOb4W4d2A@VS`!LV7`lCjfktMTFl?a@PjBnXt=Jy{20TQ7=DW3Z`N20e{wd4-(vVR zhIQinOPo~==Jy!>5T&lcG&GoP4dyQm*9%f_t48xr4An9G8^eYe{tM|lGzO(r6~oR# zYGSC1VPg!nV%WXWbZ9i48_lK|HnRtcr@LT%43%*-u)W977(-JGTSJ*gHJWBN{}_5S zn%-hQsnH+~D-ILieqz(N(X@)AB97A=&AH+k+-O?I(JqcQAy3;lhH8oy?jYihf|oX$ zorLTh$F4$li3h(ZBpa{YL}6FlBaXe|*i%E&%Z;}~9DB#HPdw=G9pmUE+;>91+LyaU2=PF>xFf z>OES_RM8`j=NG3F(Qt^aahUQ$B;NK3MG_z=*3ViAu=pPhR5-Q)Lj}%yDW~&!&xr8 zB92kvkPEL2@zHUN5q@<@85_r>IL5^>UKFNjLL9C6@E^xS)>8NiJt^15ab0}-U&EjZ za^9dN#3#$&F1#!F>$HF+C zkK@@mo{M8qWAGW_Ty5SLSanpPZ|Gi%ql565<55~poLVHvsl`mF7+#O#EfL=k zToT8dLSAb$>aA8Gih7OrYEpTzM^9G}Lq zJdV#awJeS=;$XNw7yQ1_d?`996vAso9ACw;O0}_4ki@S; zbaBwlL01O{NjptqS<;N|POx{Vg=Kk&gWe7fb#RP>!yFvx;BX3Yf`F83o18~EI9htS zoI^_J;ovw2Jslh?QDw=T>LoUcC4Rhv(;S@O;KY!pkAst(;B21~$aAuTQylbjaH@m8 zPLR7zjmB&>?Y5f!4hAr=TTR!krsr1EXRA5g!C4N@aB!v*{5K^EVbE6d<$nhQaof=i$GDVGf2mxWs`c9!8Z$ z4tFp@Yblu&dU~0Is~ueKV3dQA4z5tXI7`XQ;FWTg(YwmQXf32w%=j1w6CI3oFis(Q zPt4;TOi-xFe+|9c8Wi3n2RE=hcne_G7(Jd^3l7{G{Hr>I!Oaftba0DkdPnzZ-b@Ggs!qs5jilf2U>0|QRuPi&po51*nWX-}a6Q5j5`{LChm^+{ zTe>5eG=R4-3S=(kI(XT^JO>LMJn7(R2lE{~<$w%iW_3~NGY%FwpyjLqs-q*%I(Wgs za}J)Dr{&w?VjliDcu5onv#jM6mZ*bQ9V~XRNJ6ML;CJwPSgWK^>=G7_gEt+#B{nWE zOL)h@yGlBJVK&M6zJm|K(xNCDw$#B#+SeRX8vhpVCk{T8 zO9x*$Sngnjq`jnouobLiVK`W&b`gItAigLtaZTc z!{Yx@rNybAl+B+V{33*FNnGdPH!*b5O?)ta{Oe%7gFhYo#nO^_3^JMjcJPlDGPeK9 z!T;Dsv}%KpD#2<8mu(H6E;h1y6R34y5|nEltq!(0XmEo61XnNn8JR{6 z$w^`pH<1tyw~3)e5EAvZ>?wDQRtZ!j@SZ4Su1uhHB51jc#vK0sH-WtqXqUjQ3G9%- zP6_OoK>Gw%il6aeI(ANAmqc)1pv_Df_3oCyo(b%pz#fTUGg1y`DSWR4I!HM4LJGHA z#{>>Ypi=_-Ca_Neon;;kV=;3p?U%s*iC}M*O>M_7suDOjfi4MjO$4E%Oimq?K(|ED zJb85&GKu{^fkUOeqomQJ!xK0{6h3o~mbFJEaC8D}J5)zew2H7tBDhBoIW~dg5-6KW zYiUOB1ddMx_dCv(JvuRg0f}HY^-16)dZ!I_vb;DYfm0Lcmq1_983)FStNP0Z;^qE% zdID!i3ymM6Se=!?*~$oqyapz44#TTe=O%Do0_O{-C|(phC=^Ki!UTpTFeHJC62U*S zqn#HsJBrd!S$+wF5XN(O0_$Yer3s8o;IafRXUe3ss9;`^z$p1rc9t#fssye{U~~dk zC$LfS$B1F9(#jx@OJKb434)`x2G4#I6PTnZF|fQ?B-bTyLju?TPr4^3f;P2U4ABHq z3D^n5#6XkcN~@Cy`Z=$J5I2EjNV$5e@e)Xf)-IM`*#rs+PD}bJVtxWeRV?Gf zi+$&j>CMT&VrU{4&Vod_IAf z5_lnj7gY%qOFCy?)^b)pOa0XZ-b`Ro0oWL(E9vRG4RJSgHzZ3W^fj<-YJ%K;8q^%gZ>aPUWYXg>>6_@;z zz=j0=P2fM-JVqg<`&Haf2~;PrlrMiOq`ycbHwEKgmq0@Tn-bWPz-G1@sb=Grn+YNxJ|G{5N^<>5_~9f(aH^;T4_Vsmr57yU9@)5&P5v+ZCy|Z zePq&E2|Kvh(GBiIw3fxTJD>ku?CN4?7rVGY|6eI)&hADPE_N659&TXmo`OX7a^Y4wyXfNL02c?kK~Br1PJ_F;I7oVl z(|sD&-Nm6U4t8;f8{BtRi%5P>9p-}Dguy(*MK2dey6EZRC>KY&K|iPQypD0vLjsA{ zvj4j{&JFe~MNtA>?(O147stCe!40}7iR5Ge`^Zyn0q)t8T?}w>ii^H3P8FRC8Nhxn z`YQ-rH9~7ob8!yi@8S%xvHUo7ri-&QJlhTK!n_8$xJ6y`T-xU1JQwH7NM@h>lsw4A zU^h5J;4rDD=pin~y12;26)rAzG0eqK7nevZ>yS4xat?Pf(!~f7FI7og=HhZ8)3iZm zZVmno0Xavx813Rp7gxFXzjCFuS92&MX$j-Nq8i6wx)|?bqKgSGu2B{kpR#L{TwKfS zi<4q0>Us{DQx}dK?E1+rA}(SsqAqL~4{tRKwwgD#nl*Yhi@RtLl90`=i z_HHtS+z4r=EcBF#WAJkT5`=nEH}%#+m86$;A{mxDC-5_C0QS^55d( zCE0wNi`ylc40M?S?{x8yi@RLRbTQS%bQjZH+%2Ax)-u}nxR{~5(->-5+|qKdi&-x2 zb8$b*No=%)G9Pg9pw`kta+30}i#aYHaq*~&*)ojFNq6X){BT|5zbH`m2HH|S1f zX9?%Kc-_TQE}nDow2OrvZ^DhK3QWs1Y+T`Y3(f{RyGV=vNoO}*^m6(KD9 zPEEn1G8YmqropP2vK&(0aPf|dB`)4_@uq|@$Q`BbZS5vR(-~cd^dJA1;1#@w?)~RMKpk`lpM(B(S_OsrPRe|GD_b#lNCc8rdjzgNw~BsM6U6WdXf>D6RTkutk;5?zznC5Z!)*i}>H-z|yVljxMh9!YdaV$US@qU0uXT9dh;$&6?+dneH` zi7T7T*d`NcGPx$RPZIkk(K#7x)tj2k^d_@k68k4{Uz2&J$t-FzUo@EmljuT|% z!D9rER}bO#=c;3qI8K}l(K0=B^-kiHB#x&elp~%KliP0}eUdmyHk>R-V^%hqQlA@g}#t3XHY%x{x=LSR&-&=HO(H*IVo}qP!#ct{~~YA&Ip~{H)=Rf9LI^+{|^q9KV!b)>5Bi>;<4nv=mZFe6zmtrj-?6p(^R1?L+q zKZ>HRRw-1Zf}T&|m8tFL=cKnuVTTmjrqC`GJS|XrQT#imuxBbb*J_`_PATk>!ph&@mM}tI!Nyba|f?4osnQDrnv8!~3R!^SAv{ z*k1_o1B6`O9Gu#9NujG8IVc78XL>}NyQgq+3J0ffNGkB1@uAW~Q#dSzo~fWW9-hJx zDIA@`ktrM{3RPdx9Q2}NQs|KiZX)BFO*ziTrqEkF$EDCq2vfP5wh`Cxgj8?_!Xq(Errul+fS2dEkki; z3TMd%F6pKk7?{F&DV#%hQecskvqov>lTD5j=Z8%;-oYtclEQ^4T%5v?6fQ~yPfeVq zFXdH3Q^9?ldu7%PuxPrfkhmoOtFNK0EOs9}ZA;(o9fnNcnFjWZg zX(`+-e7fL0A)WEzEZrpJLL#f#|D}j3W~o{p2+iPjAV1j%xgD6n*{t>y9%Z=1$%5e? zB*Wt=JfR4)e#ptQ&3P%zPvJ@BcT0GSe@d2<=NTd?EJ$IY7#2$iBmZ0q&odqJx1XN0 zUrgck6kbZJRj;9HqCU=xwFu9l>`6nd0|^ zyf672mQ@g0D*8u)EK$aso_@;Ur0`h^U#GAvh0hf$(!Y@VUkWZyVPy&{QuvBBqejhi zXPeC`%@#!YCWW;!>Dv^(OJNOninbxOk6`~7{(~UPh7_tekq$*RrrWlIW;Db%OXpv=+|Mu}CiHHD^BaH#TuD3rD>g%;UB zExcGu#zR{VmWN6YtvpnC!KrWAO}fz9LmO{VsG~jH(j2_oz{pcePY=g>LAUHCbqs7T4<~!* z?cqcZ$9p)z+kON$NxJ%QD1TQ=-AexP9}oRJoa&*k6!8NKgFwssdl*1n!s!unak_`$ z9?tME$itZ)&hv1VhqJw)&(I4B9O&U3FLZ+|TTInBn1W z@k|%IN02;RGBd>QrG>&5@yE8!!Ewqg4-bg)U`Q`Zeptgt1ZR7A)WcJZzlS*;HMU38)9_D*^vDv&N`3&9D9$xV93{&7?fro{RZL{Hr`X$Zgoo4f# zhvz+f&}``PhoZme;S~=rd3f2ws%G9Wawk`Ng2mSrh!*Yg2b+tkzO7p(*uu|5p^6<5X!?y*Y z=EW}et%sjIeCOdO535;z9@ePXxa+@HG5_FUt>n;`qqhYgWGI}SiVVMa_|3zw9@c5E z(J#`uM}GJ42LmGCsf7{v%fr7O)_eGyts|`Me}q%)e;(>QZ17O)p-S4hbE`enNG$P< zY((3FZz~wpN$md~Hft?4=5$I~@1b=X4IY|2G6&$gGmQnu0<6K z;VczPNGn0kRtVu*8bOAX1JXDmjRVu@o<XN$iMdv{T<3A`J9AvRVE==R1G=^wuwaW71G=`?P?@Ag#zlNnT zGL7MBT$aX&G%i(YNN3C$sE#cymn#dTT#?3AX^cwaN|{7Olt9Bqr*U<9`yGmGq>N3& zPGeje*U+ytCZxBYw{wajUgu&PEF(PG^VA|Ulwxh z^fd03%zKy}G0zm_6qSyVZTF|~a2m7Hcrc9zm=1}ec3uyKd*Kl}p2qAn9+kh;&Td1! zbJCcf#^a&PCxpyRV_q6h3cqHXxqh38Z3{jxC)xkgSf0i+Om`X!(s(P4g=s8e9@BU^ zjpx#MF^%WbctI|V;*xEKzPzL%`vdWX{1b~BzRIc)WpNsBC|R!wzMe)_SzDsvn}P*V zxC`jiJ83Lc$9Pv3z9;y88Xu(bp>UeY>&9*7qjc~<@^KoUr}0S|pQ%beP2-Mjh7nk% z;SAwl2q*E&H0~2+MH;Kq_$rN+X`G{HY3}P)>EOG(uLZwJ30|ENAtu74oCtquP%@vro!Y=JD4w)}`^AhEHrW^R@*i34f%qIgLNls7vE7Z3L!! zeHwqKQIp0$X>3U2-!%SXF1DH1x0yBD%;s&TDvjzi|3*jfLjYb!wU~|R;Pj7IZ4h%a zu*Gar0q}W`hHXisB7=Gv*1$%TL1P-t+!Xu>AlM{$L5m?}TN*7I5@)ru{!K>b{DQ4A z{4*fIfn;SS*hGv!gV`p7oik{g!HyZU%V390@GTg5xCfcX_8IJy32p@Rmy~`i<_vbv zVAl+G%LHwo@uUzkaCVQ(_H*gIGB_-Q4jCMh!QL4hoI%G74#=QW2K#2PPbRpP@amkw zg)PB%#Ju(sasLc17v;bV4$7d5h+PFoiQX+-+g-@mmf+8QjOO8wjHD&(8;56bBsFr2 zWr96UBah19=uFVV*Jq?Z;(;n^dn%a3AbVqK3yaZbB%8vwei0 zB*@_}eEuhY2B&7wS0QCI`elM9+&_aegbc{wH1Z1{A6RQ9x0o|C7?{CX8JsP8loW;W z91ZCOhv#K*ei+XSgbd0AU;gqM%(w~vP{WHd7?Hun8C;UVP{n~Up%=q47@pbw{RJaT z7cR}<$_y?G6MDI-Vq^wa2w~Dk3E>UmstiVFf_wCd62-M+GPpj2u^EidV4TF#NcuY= zgKM;kW|Mhh29sp%wSuHvmx0|9JXYP1K{|uU86+|o%p;%-qADRfgSe2Gpw|*?E+>P$ z5Zd5okPM}zGVntDMpn0cDOYkXgIl>OgPSubWH3c+ekOR8sF*=X$c-7?B;?kX;Bo7& z7DKbCj@K>nm!fXV;Nc8z&)}g9?#N(f26tvKJ%hV4n3loRF#A(m%-zCgv;?0hdEJx2 z3{f5w<=zZtWpH1}e}4v#gq#m#@L))145^)MlOf_Jnw`Nj89bW7QyDy#!F+i!Clj2J zKAyo78O#$tw@hgUezp{(jtXru~PGzAeX!@RcG)^2EWQvTFaoVZfP09e*vZzL4ki{us(x7Gx)0<9BJn! z`a6SvRF>ST+=je~|Cd2+1{*S{VMofKnjJ&TtU!w0$e?LREp-{}k;NwV*eo_@P?^P+ z47RcVXRwt%viWC%o5jJf4uN$9tfmZ_Gw1{BTv&r)UCLr-d1rwvOcrBc@!ir}VBH6+ zRTdRl%;pD1SkJ+F6;|skcFdwp7VSiDo5kC(K7mD^9kN&j>nB+4v)CnzowC?Diw&@- zx`CpMwQCl;WzpVPdm8H?W3j!^cs2yq#-7=rk#^$qe-`^@v3C}ovgnxI{<0-G_sODj zHn>xenWArKXVE8%lX!`TQ*`;1Ec(gcQ?uwRgm+K6Pa~;iKo)0bahgP(o(+y`&d~BR z%aDKnIUC$8C~#mF=g77ZQfjgPXK`s3=Vvio^a}(BWidF5OR~5yi;J@ulEp=e@XN9onGNpUmy5zyOqZ{akwmV{;@T{(%HotH2p&YL_t z6cgIkO_mf{A@Y}{ManIF_|M|DET&{}YZfdi4O~T zMD@?%qggze#bYAQ5qwT?T6#lH>b0PitP}hq@ zvUrI>&f;awz9RUl;3C1rf>cUfuM2-eaEaiXf}DCQl=)5;UuN-c7E48WFN^nuP{IdU zd>GeG!~a|GZOOZki*^~PsbcO<*;84`{aUK7-u_cYTq12YZWPzL_a|E0|mR} z&{fDmg53nW=Wwu)@%)=NJYH6>J2Z#GayTv*+*uCK;fNfL5q@M2M+qVQ=p2e-Cf-BD zo;e&V?6jyQ1}qRiv%wYXNTr+Ne;s` z9F_~t1L-WU5zMblx=d4-3y#cTTn<+-1v!iozG$o^#=2Jcb%NIm-jIWn!{i)n4I?>3g?ub&G2wB+&qbjP2@PGrWDd(k_cTlk zW(2c2OvxdaLn()R4t@>=(J5i2mJ~JoPWX+&Z^~hr~4+)3TOm$Xo53x!}J47F&ua=S%gw!r#l`s~q0X;fowT$l)UqKNMV= z!%%U4oWo~1e3HYbq7S#Mt1N4RWi89$b5ZDB#Ih2W^`(Zib9oLcgr_B8We(qJxJvNr z9KH!TvzGN8)1AZW9KIKEjbOpD*!q6R;Z{lbF^8XX_(@Y!Eo+8l{UZDU&92L#HW!@b z{+7ey1j)8Fhaq`1<#13Q%{lCx$F>~WI3eQY!O-FRcYTw6faf(Jo}(A&>ULcg$noR#ul*)=pwOtd-TXm9dq-XV`pdF-7>N6ntu%DSMHHLR7jk9fwk3WBq59tY;JpD6q1aX`4d zY;zY4DXME8ZmXcxcgv$!9^LaeB9DVLdq^IK2{}}-(8@Yo$gSc(GLK_4JWBBBJnj;` zM;^!K(Njcx@P37+z{+ot(!hTK;w` z>-|>N@>W*gJO<>^FOU9t{3P$_#kyA3X?dKk2&`{qZ4mv;JkHDGtUS)iJ=26qi zYS7e971p`skX8ioIX{m<(sDr_`&0xG7@Wt23|fVCaD~;Q!aA|Sx+srPd0d>wC0aOC zkes}RY3=YlM&xmM9+&2E8P!!-=TumODy$1DtdV(KA%1Qs@{g>ruFPX{9#`dYZ62dJ zmB-b2j1|wA|B*aSl4;?DJSGaiCZtf#q!7PO$n}Dx-w;ZO@XU_uqt@? zqv7k~oSVn|Jmyi9h@5@1!g{B|dMb~n^Y|!~_GyK+AdmO*SeVCac|4oPOL;t(#|wEp zuZ3S!SSuy`#XP>RuzswtUZy%ty(0K)g|#S;#d-V@%KW#&dOeS~^LQhVxAIt$$D88Z zSYg$RhacSN$U7pwE7+XDGALQ|A9v{+34VUK8rqXI(X?>i>C!*|KX?3Zzj;ORg z({Py}1s*RUU*z#+9+b9RkjRQWz7oDNq^uIsx6=A1k00~+RuaAo<*XL6M)3PQe#m2O z9;a1WXIBO_Fi7wx&HkLnFG7A5Hb#ZwM>4o4883-D|(Un%KLLjZ85SYZTLdf5` zfc*<-Q^1}Dv@Kxg0@@X@VR$5D?VwVDTD+HGBTG;-Zsoe|M zqY(U@jXy-?5>D+^K*vI0Rfhuh7BlJ8+o^!g1?*D@&VtBBxNiab6@t?+&hp}E&jGTN z{Is@90sRW-TEH;{98|zj1#~Om&;q&_a7Y0M%NJT((ptv+umX-O;P3*DkUiy6ET1G$ z8n2@zoQir-X#qV8IKF^m3pg$m)vJKs!pTg@Tzf(RCoviY^b!5KN{h>HsI*Ql;FJO; zYe;L!%q4vbLF&oSUy244aDD-&6)=!%3pi7ro>4%g(u(u&r+~AG^GC0hmRlJ-xt&wM zdEz-&@DlzfcZt2AfQt$kRKSn|1{ZK)A^1*~{9Mb>@nUsdT)-uT;IwCG7;xG%j5!tO zh(d5acBvviho9F9xLo+ikaC5PQG$FZ;*k{j%jY5e!nAe}WvpsrTmj>SOeo;m05U1-3vh(c&O`xjh$joUxzZxhE8w95 z(gobb3Z!2Wn=K$$fL}nqfID1oR9Y`rT5nWZEbN&D+*`mq z!ars!tF-Pf;6d6@2tJNIpylQIFT;lmm|wsns+rjZJg)pc${j@Cg@0LTaW{QaX+2TE zyaMKGbFGnuq(7;JYb&j%Sbns&fENmQh6@W=z>+B7M{$-*^tl3_rx}&jua(w%(O)d! zWqJLQw*@gm|3TO;twUs=T!Fda> zW)ZguHdI>hVf>(z(=fIpmRTzwJNc;av7?VlA3OL#^jiC9;|E_Y@oMV_uO+k-cpUHss)1DEgSV;>*n*y|vZ3wbfM=%J1xBUmsn4?C0Y^AN%__z{eq)J+ifRY-_8F#GWL|K|Z?s=q5^k zQ4SV9u(fqgYwJ)S1AH7tUwjv&C%;4ef0Kml#iZ1j`oAw)-gVM(6-jWKIJup zihLZWDONtOUc!gA4t5+FPVmv6ihP{nqmMMwos)!|EO=>a>r_9u+4U9dC&=Myg^0O3 z&BqzyJYBJ60MGPsmLHTo&%-H=p&01nA|L1YIG@^moaYDkMAA9Sdm@nw{NQVjK|Tgc z)P;ha9U^2@YwKbk!+Z?&afz~XroN70)`nB5OrntYB0`2wWNWL~+9Lgy)>f25AGQz2N6bfDs`)^ES8Ho(Yb)Wy_3>!y;8V}z zT9WdS_Tfp_bE0H?WPL0aPSq64$kQFdg7U~X6n)&n==qr9<3=Ah$*OBZ&YS(ac2zayaEg(+)5l$OS@pnbCvlpO$9>%GV}_6EKJL-JU~6L4k$p zJr3{lalem8e9ZFkkdFs^JjfDNayh%Swe_$Pv`SSyn=UJ-bm1`{b2PP9)yQ-|;bWfC zG*`Ql7Cz}?KK){N^(FE+p8xoG*~c?JUi7iR#|wV&2FOCeXMH>;uPO+WYr3KtTR?QI|LX!mg; zw+|`r`BbDgMyMG9OEQeB$FHA0PX{J12j%wwhQcZLCjye8y(g#v*Yy!Owjx z_wj{~FMS-?X8Y+GXIJ?6ijfrM7{OIOzW4F9)P18QeoOO&d?(26%4?0k{cXnbOEPPH z{O03FAHVqc$;Z#iCN1X<9mAJ@e5{k%%m|%g%6|8;MJoRA@u!b}B>6AF^@4x1SG2KM zD*yVZ7Ue%58+=r;DnuV3SmUG4$3`EuEJ9Jvp%-neO+GgJ7$V9gg7rQcv<)ef+mKyl zD??O7laFn(q*=2aTlk}Qpcr&N7MLlbT@h9hmBpajw-T%<;!?$`wT5kqXe;E(HrCam z@1Wt1f^@mPkg;v7or~C`76~GoB03kbuZY))=(MpI@YQ_&FQR)92NrQq5nYPtTHOAIA#e0#=vEAx z6F&c5r-9Vq^v!>h$DoQ^L11a#}sk2D8DF!J^lwjmdt$rN3fS* zZ^1;H;QP%JD7+YSLhcdz$oQXB#E2qJF5;3RPATHlVsKlbReg&%r-*(GzWnN6#DF4B zDHWr)MxkU^r;yejCpLPoQtc|t2 zjrCm{Yj6=46>(t^LqxA?W7V~>8roPF7csPmJ=`YW^p**N*9cA& zoTT#L)OAI~inu<^#SPLmSuj#WR0!qRMf7SLJSR{EH=R>Nq8NN9ORHR|;{!>uh*S|- zCY=v~g6SeMLQZTOd}QX8W3-F#iztZBTPKOd|G{r8;-+Ho^iuYnx^6Dwt|D$J22Jc% z<^49n+XWf7JA~ZHT(=GCfwyn^KCOtmb4HC}Jj)Tg1JgclWUpbFzK}LlOk3X z@o5oXit{rWyiD+O!7o_SZG$IX25NZ`E5hh~Rm4i+S177q7x9fMkTRK|!TjTIMf|`N z7qLc?Sy$hSpT_Y0@U=z!!JSgXPvL&~S<8P>ihnKQw<6XFXTZ7S_Yj}Z*7~!EzvKly zT3^J5BK|JoUwX|WAT`D+KK!$D>h)9-tGI*s{cjN)h13*rOiO$j@c(6)qjrC={}2_b!?v>i)mUkVbmQwh73f_uu&CG1kduEGm# zgOiX_TWfa>iSJRuZ6fYfLdOz1l(4s~V!k*_nY?)O-KT^DOXys}ekJT%3T{li_$RjZ zFX4dF_OmQ%XFR)<(5-~7B^)IC`^hRYcQ4^!Nv5?lk52-JmT*i7hm~+-35S<(L@Bsy zP%pPXZ}CT!aI_RL*Q{;Qdz5fo2|Y_VwiNVs27I+*(yN5trQkCT3yd~U;|V34R>FxT z^e>@L2`5Q!C;t5(A*V>}se*k==qH4h(=bXnm9GGmw*Nl&^b*c0;S9!8wlRIQe2lc5 zP5Jx?z`Q8hq@P>Dc_DsRTkC=nE-qnE2}4R4T*8H=?SK1)S{RLsWC;s{jtnhfn1+{> zf;%-`7+%5%QOL=pUs}Rt3i9QGq>L2u3;TZw<4U-)gsV%qs)W&^(@xq(wlO7)m7SEy zGA0~f!o(6LlyHsYm$N*A-JpbP6$hq(CQJ4lN`eu{2+5XkciZ4I9hEX`g%WNo!Dpb9%{eU8 za;Bv5rV?(JGLTCovnHpyK?hnZ% zP6?08$N!T*w}cl;m{-DcB|J$7OPH^ccuFaIy7d33`Vw#(tMC7hT?+TQ_qv9Ax%X-y zA`O}}h?J@FO&UanWGIxV6pC=q^q%28^EpaVR3aKENhy&AiKG&ZN)(DH&G~)y=k)%c z{?GG1pJ(m0*Is+=wbx#Izx$kXFBXY-N|>%^7K@lw&%V-f6x7M*S%$Q1TT+YFwOCq< z*K6^7EmkP-UZ};gS}Yg+qKsi!(twx5A@QU5jsP@l7puNKc`*fIAflZ2Mg;cB}S#k3;63|7fH4 zepD6xz#O>076)qalOln$Oy?KBpkX59c`%tA~3yHnUulVvK03V1HXz4?HACB>%oe#(Q(8`A- zw*cYsJ`7Xut$k?Y!wIr^bOS>p+xl>#isK|OzJck_kDs_v`f#dx=^#AWhf{pmsgCYw zU?^~!4;`hPN=}ys+VCjve|&ZiI!k!Au#@l{;km-|gcBN=&QgAXu#1pNx{A2ahi)F{ zA|GmHUUxO@A?zva<-_GZ^!DL06)#~Ed6hPB^P+qEsQ5ph-O*U=D=`uj=;y;AAFlM_ z8XvCm;cA~vVq7?dEY#nJYkl_Cl#6A6&mIqG+d!Fgoe$UhaDxw#1}5LYJS5u&`!Ljp zAwJybv+IHl*$bEOO+LFta)YLZ;Xd5v!w4U4_Sw&^M*8fjfWoZ0#fMSqWwg(3XJdr7 z3gXFP@KFs#nJ^CT9$A^8Gqgv{$QmaROc*=*lK0GFwd76j;JpB8x(1#~v0B3x@4^L|9 zNiUFwXBya76;AgeAC~&C*oUVzQ`G#7;)nixRyv>aVTp(rHAg&3J@3N{KCJX%8OQ6x zi|S=LeW=e3iB!A7hnIbLMOEbRS<%2A%U`7#KCJd(l@G5|Ndxn01M_+Vv$la*!=Uov ztp;XY1M{AQ-{it4$A@>M=WTg|?&VQ=9Y?L{TTj1fXzz)$!H11LeCWgbK7627n|#=; z=-sU1R?#2%utmj>g%|VuFM^hT(ZFo;VHfiWUjcmh%!hA$_}quDxW0V&QeN8Gz@BXP zFunNjwGY22zx^TR4hekAOya{~agHpq!kk$u|DM7=?DpYjANKgLmnm0E<0ZZV`0SzO zM<4e2@RJYwRV-xw13nyNHZHRFt9;1hJaYOD`S6=U?pIA29rC*mfB5V#?%ADBr^mmT z!2S4}iQSKXnB@I9tR|da_)*7iS0W!HqJEKm4P@K8ejMeuE0=48A<>MN|9+JDQQwbJ zzfBYk{CJY*e?N--XebVgD|!C+gIH8#`f7nR@}t~uPs?objrKM6HB3D=_1hb^W`0!o zQ7M^9y%G{>0GqJWDp^(SM~xrH_|ejDKcTkP>LEc%y5e}h-DO(&(avu(b8F!V!ZyOT ze!GR8D5L5!T}QC*r~ar3^-l@H>xI$WGyD)ts$;>YEFTq^o9A?5pU z_#WMao)>+E$LZ(Cl^$JLWUltxw9MxkKl+R2_s_5OV}QpW=>PW{>GZ?(tRnkWE~+Zv zgMKXYW0oKD{CG&sXZ!Jp9}kPByXMG&v(@BLKjx}PJ~ce%$09!-_hX?SPjHc{$$Za- z1tRDNO0wUlR3x$3k7qf*Dn27TN27brkEMPr5r<7Uis$`!!H;uQ+quYeDKanm@fHKX zk2MT4KUVp%f=R%Sm;HD}4cV%@ugL83 zlrW)v@5f$0cKfkMwo#1ff(HNK$3bQ!=6||~w>QH5j2}M^i0)rx1{4`q6~^+5njc~^ z_v2TY@tg2>KmPLL57B=L={FkB=WiANkq=o!z&e3X9T7%&gz(4!cBqO;?5F^a4&bB! z>IG04K>Yxk1kfOWvH*$#Xc$0o!0sS}itPEVB!E&C2N#)P;xJJ+3ZOiI#^R3esz(5Q z0_YjA`&utyZ{a0E8#4i1Ci?NBf8VYC7r^CSZC?>r1kg{!l|mk;+3@NB1_bODaE-8k z0N09O>L!!VzyPijhxGOTsTvf(-~fh+GbDf;J(-~a+~m;(CBp+4;c-TaxH(|o7pQO) z15BLJ!ZB1R{%xN8*Z^)9Jx(~@<5P@_{my{RnRf{%2=5Ny9uX6TlZ2F6P-N~6zzyI& z&BBxbW&|)*lYYODvp-G5bRmx-wE;MyeF69b2nG;P@oB9)%7;{3qGDKdB!FlDG11G4 z%nDU;IdcXR0Xz^uQoW}FHYufrBr*YH1IVkG3t&x=eGQ+fB7eU|`W$JP6~KHk9|~Z0 z0CNL)SlZ@zarH<5kBWXv(Kt`^W5UOUPY9`PqmH0Y2CyK2B>^l9;OPLKQZ0`tivn0I z`Xeu@pHcBy;d7qY(g0o$;Q0Vv4&VjOO90CPcrk!2vj3AJ^BIpT0j!YCRQq|6y-j+B z&Iw>;0I$+oUK$jc9pbN2ai{3j0jyPV4dX<_Zs~k8fOi6TD}c8>8}=5N14U+?WDctB z`T)KP;5|*jh5)vT*cib30c;LnlZqb*IfH)`nGXZ_IDn5l&fi65O8}p!h+Ig}gAdU#)NEI6w8@}3; zIfnT^Xj9P9!g@i}528qP17V9|n|z9cI9?`|1W_t}Uu_?(Y7|71Aj*Si90X&VE+Uiu zX&OY!Aeu?ILRc9@m5AoT7D2R?@@f@pglyZs*uDgjI5vorf;f&{%Vv7Dm5A0s`@2y- zCj`+Zh!a(8D~#~_pFy+_+P`8-fdY02;`AU+4&n!X`P1{psUl7jb`0XwV*6S|fI3xjs|;Xt}+T%@V_ z;vjmc$L>MQm6v)3aZM1tg7!tMcMw+uaY+z;g1A(zE|Y#bb3Gj*`tl(9260-kIg^oD zY|bw>{erkMXg6r~&gUwLT`km$a-wLuICVn7gsgBYl;uM66*vhcY+h#Ne55C>jt z$fT(>_{JcH25ro~y5;yjgfl5Vr*}Du^-khB%zWi;HcF zxV2C$He-Vr7sTye?Uf3E@hbK&Hg^UwDTup*_N&ViHa?Rdd zY-WjmNXRM*JS=*S@R1LpKrG@qA) zctsr2(~8Zj40}(2y{uBh*M+NvYlPD^?=+jMpfIQzJp2doj@oi83_tSU4dUY<)(7n$ za(OR^4}#bb#QQ;Pq*XdpaJ-vDlOSia$Nw;hk35=Hj2W(=PlEVPQL#0MZCql!{1JY} zU=HH*Aih-b3&x3Z9R}6_V@(J3T4L&~xF{{{q4|#tOKZ!}#9T2fV{GUbtB0LntubvFW*y?u`{}8hH zr-;9V3yaM^O#Yl@d9RR*>hMoLglvAG6J}^nIWmNz5bB2P4aQNbI$BsyNXhykH1O!f z#fAtSCE>Bb>63!zB}O+z-J6*?tR5kh6i?lM%x zJ5>@bLZ}I$DuilvL=H7jRm%{L34yaudZI2)j|-tq2*-zT0+nzJ2%&Yz?rZFnI9Ej5 z5KfeSe%XVQLRIZU=n%q5lB9BqogBg`($G~O2h-ZqLO3IYjv<`xiH+euJd*I4A-h`H z@az!I4WSc_3}Ll*ax3LvLpWcp3S;aX!UZ9851~s4-9qT^Wu=* zwb`mi2))JW8A2}+OhM#d;apOuMgpd5H=`oKPWa^6n=w47@~>(UPU@; zXb3kIrZ0q%B8Ibh$Zi325%Fd*2lEOjgxkd&9l{v-kO{Le-rGVL7s6Ny$ZvFSN;5b< zggZj^s+=5JNQHMvV1kfSe0K=5Ugs_~=rGZ9LjCQ^p!s{WtqS;@mh+-VRD&jTaDq&?q zyI*rGYeM)qgf~L?NCCDsgf~N2ujX%s@OB96LU>0-Dz9p2PoD33VfJ1Kn^d(SgpDD* z&qN`CR>BWdwK;?jnIFVCO-SQ8-Yp?~;*EW-EZ-Kw=OKI=!e>f@%oyxz038*=k0E@? z)WPH*!guUFgdHJ#t?Bqi$l-GxeJgrr2)ooZIcGJrd-V4q>iA$w1INcoVLJimqTd&vIYYO@{^e}?dP z2!Cm4{D5o*zx)%z;Sfl$mh(=cj`MFSHV%$(P~X9k4vuzE*TGSa-51W6Z6k#B90Wu( zP!(&7M5Gy14w^eCacu4_b!@^ZbI{m9Bhlr;Sq<&imYO)IaM092Gcg}&Xcjg! `? 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 z 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ǬxGjg~pGQ1{->$IqAh5Xp$`W$Y^p`$)RVa@RB%3-FiK%NEO zBisjfr!abfE;bVGJkO5%qrvU8c5V)<-JQcd%H;*XAwNdGFNayV@bhF=V-|ObI%_hE zb$HSr(r!O2d_*`~Nb?+95py5U;prTnkn$w2aDM+&$n}!{FNe7bJtOg1aq7>BJTH7f z_@eM7Aq`BQr|C#IBk@&TQLp9jx;##F_?DEnbq~_Xy?R%igv0l9n4iN3@_ZZn8WuuERphq>8tBFvP`9Z z%3*m9KmY$cJSo5Fl3pQX)*njwQ^*@+rS!inN`;<(b7+?jpS`QhMtzOEKEuzWy@+$J zCEMD0teeL=d34Z_p^g#HdM2_ULmSx8RoGa=O-!VxllW%B%_I7j#<$9&v-sA+ZG>Hf z+X`Lf?Zmei?jYp#%=*L~^WiH*Gtl<%PFp=h=c^sR^k$D`Q$FMw(vRsB};BkzU;Sv2f%cbW8 z@e}hnDPlM|kJIxwC6CkcIMvK7HBx+((9M2^_?gOOwX@88b{=CSo@0vZ=e#^FkbZt1 zV09!+FOOUExGRs_^0*_9+s(-+{db!4 z?mX@>eyd>*gl@j@OiDf*(Nylm!qro5WRYbL&KgzdeV$J-jdW#T(|yqCwj z8oK`7Tp#4|Q63+fKHvQGEXd1%d~Td(9$)0~WgcJUvDn&U7LTvZ z_H7w@oyggm`Kkm`AJxCjRM*i!V3w7wiCT(0qYd7Rsn09;^ys8Ku1$t?s^4mT)_GT zY^Vww2pQT)#AR(#Kqn11wOpqYH!om|0=6n(%ZR_TY+IYzP1L1;Z421GfUX5>XCYT- zhXT5p;>_I(=%Io;N#9wVp zd0JeSa3AyRSHJ-U^eJF}DSe$siT#WpC~}a{?dO031{H8{0f!baQ2HTerh&&{R{wCz z8f*%qLkbvLz%Yf5w8W!~&~Quv#}zQ#lw*xBbbJ9PXn3NKid*Ig4NorM6r0HDrxh@= zfYTKnWg(Y!W&vXhIIDnj6dhf_*&;4+OabQ?aBczTndo$f7ZfnQfD093wQ=Tgl`k$} zasd+xm{h<-O?pYhu)60ET}j3}!sTrKgM09c1T~h8S;Lb=E&39XeocCVKBA+FGe*q5^ z@K6B{MzR=v*qpNqc+@zn%_-oq0v?YjG(TCua|JwAz_SHBUBEL1{7;j*Rvpf@HaL8~ zfEQKag^0*HJYFtfo)zct)dJor;I#tYkodZV-Ynp4<-TQ#o8?`J?+M>8-~)@YlrzjP z;G+UQmcGEEpBSO-vjV;?U||7Y6!3Wgi!9{QzbxSE0u~qW)qgwx#%!$cT>;vDB05T3*FqH67vG?Wjf&wb$c94d8yB&O*;ZHRRK#Wy zY1rJNTNbgk_*TNsrf*ZkwncPN!POPID!QF;d*KekZbI6+7qLqbI~CDG%Fd>{3cD7u zTM<1avImO0M|iIydKa;$DSKJ&-bKWUXeh!n#pU`%1h!sRKVgPs5vd~5MKl)CWFD85 zu_05kwz`}p7D&X4MU;xD6j9dD=$X^ zz=)xL5d$K_fkhmu;UVTftcb&<42swW8y`}{up)+Pc%+H!;iw{xDdOmeLUFhak1Jwi z5yuyCN)aa%aZ(W{Dnt+WXG9Sv+w5+KPqoC;Os8{H5vNN(Ba(Yo5$9+)x`?wQ`WW$Z zBZ`}gIJSrjiWpbKg^}oZaX0(LMNBPXLJ^lpoM=5vDq>0zlZ&`CVrI%^{~b=#@bV(2 zTOvJIN}N%|^+jA&#I;3SUBoq(=;mc_*O_ud5jR@;O%h%IH;dm=#BCzCn&);)yu*~c zikMZz-9_B1&^@N#r{U_|xW9-8BFaNWJX*xVMa(YZ5ldlvuERM+JYK|OHW!OLA&-j^ zpDN<%i1JJkFKGCzaBdOL74f_{b6pQF7BR1gmsIm*3$31!CS|q~g7p5#O;=3Zg zD&m_WzE-+h%eN6u<@+LjC}N4#cb=t1ESIuO)qb*?KTG_@D*S3$D~kBLh~JC&vxq-T zWT};Iq<2A0rY&H?5>*gS`bIOk!C4k}@A35T13p(8Ad zd}s;7OE|KGqe>VS@f~s=TwVcUcwb6Ot&G6xH>aRxUPh&O1Rpxt})NGM(Di0 zgd0kjS;CDa++@1zoOrV-x0Z0b_-&@#A;JoGmT;Ge9Ntq3f0cHx@IKzZ`ka53hU5>3 zJSe2?A(4l9@5naWbWY9a91R~6&f)XFgl9^4(mYR<@U-~Y*{O5>5@z)Z5ld?ic<#+W=!sAbgD}{fR@VCh7PW~-nm6Uen zuv;E$h&V%g@im2Om9e&Y80}!ZqsY2ttS7R%@&;vWXr7HkHZF&k7N^)$!%o7@%(J477{gfM9#uDwybNyuSZBx8oG={b>n83hZ`Tq>hh zM%g?Sk*e)#UBeb(t9jVxzQ*?x=_BkbWVD|}4-h%9jDsx18F>sS<6tQR&3TB;$mn4b z2bFQS$lx-Lh(uX`Xc@!HII@hRWf&$r$~?zt$U1I6kJa$FGLDbvCmKIVWJDP!o8q!g zE#ovPBZZ?P(KE_8Tf;MjX9-8!?B|$sOd02jyMpJJF;2s=Wn3U~VI(?UoIPJ8a1aZ(;PlyRd) zZ?b-FF5~txZjpYgMQ@8F-ciP#8s245c5+V{50!Cm8TXfQpY&Ogln2BgjQBbG!(}`o zWp>0lNBlA2<7GT4@`M?lGQ#x#mGN8|&q#SzI5!e~zKoa3ctHxyFIwp3GF~ZTo(&n| z@v5!;b?I-E@m?8kmhpBOZ&?Md@trc>wM2Jn-q-Mhh-ZEopJ@1za6uU#N1~q^|E!FK z;;zo3GQQIA3*nb#EHwM_h{GM1O|vt_x^uVwt9 z=x@RmW&AF}-Ef9K%UCJpuQL9&To?UU`l>QeLAy%${9i-pqU|eKtAaHn3iY)sZO?G> z4hnUwU|o^*BF+trZz!@+1sjXFmNu!A??ku3(o6dPJhEu&ai2?p8ss3U;^X9+8#qX}q_hdkY)P z=~Wn zCRH$5%B4d3r&tB@sTE8!{c@4%7QIr#85X^&f~$>l>T8W(SHbn-HwfFh5}zr&S;)C= zvC8DPRd9O+cU5qQMemG6@2=n;>8{#+;@zV-EGi6}~pBr}z{6fPoD_AV@RV4b2 z@oy{m&iMBtE_X=-ViQv~t)i2- z3vFJ-HdSmPWy>l$i)>YGd#%~pvS{uizO5-;MO=~XtJp!qZo(a_=x!C9VQ1+*gu4iL z6}l*QV>bO$8Iq`fI1(Bk8Tza{RN)`1gs?uvh7iy_upDJ1-%D$1@KF0f2v40f@RM9WuJkX*n z)!+C4k%Oxk7;&=OL#sH(7yvPZ{ z6Rq+Hi=JG?DdMLJUFDG$9VK$Q@C?g6OT*Dsj1f6oc#cKS)$lx_tHut;R&jw8@(V@A zMGO~Jaj``wR58)GOP^H5WGR=LKE>u@wW$)P2``W6S5$GO#2Lb?g!H?b*Hm$>Dc4nT zy>S=4(G9DZDRT3FqqkOZo0QvycliHT;&{J5{_ZLj677FZu$W!w;1{U-*%bAL%SG z@`(tuJ{9?_iiOqi<1Zc*7ge#iiZ7~d-^Kb;ggQS{`bz$d6NpwY)SMggFKUeWfMEupNt&sS8B=lz$tEyO8#lKbjRmDG5{B33ybTu7vu68wj z^M`s3Yu3=d7Jl`b2MtkNrxu>m4vM`=qDHEbtCSF>$z#QD3~uzL+Vi|=F=depFs@m&>S zN>5XEuVF9oJ!;{rPcPw~LiX9a2Cs&_HDt6wP7)rB5`At(4GCwkXwuSYXsn^Rh9;|! z7Ri`1TSLywESNW5tf5{*sfLP_vXE`FV3lXh(wWl26-9{~;h8un8PhrCex%HSIA zSHnRy98kl7GVn5>hoSyfWPtR8h13tJ;m}(6Z#2k>hlvl8nZv;vk{nUP5aVd254uC*B%y}pK- zHQZpzjU0N&(-j}hRotYod?NFHO#BwWn0ll{8w81qdGMZUlqP4r1Om$-mT$HIp3<`om%)0 zaNZU&>b{Ln@}3Oun@;6JDf3yUhQYk5`TQ5*KY#c{p-*f0yoS%jd0{Lx;;!v4H2kuL zuWRA|-MqMlucWXthdjQ~kmO#i$l(t)EYr>}5&o!Cvs9cHHc!M);>(rG;V(7(S;Mb2 ztf=8P6FCJ#zsvcDkjhGtziRlWhQF;7SMy))51@jq2g4*;q(IebYKNQ~gdtiaa(qzGc1b zrw=+iD{JdIx{7R5N0&ObHK(ga+jdg6H@#aOJ?hx8j_&pF53|#-Qyn`i>V`x|SYg*X zdMdP=rPIGh9edT$OAFakI@iU;_O_+DVM85W9ey1#Z3PXyL%AV=Qpgi^G-^4?I#MDm zPQ6KnbY!K?brdwr3UhVj<#GOE9pySokqVVMsy0hav(w22S|qj#_o=u2zZ?6C@LvG+ zk>0nCgX-A7jsxo9--zock>o%PS%1BaZljuRxhDTpU&I6`=Gq=8eVFp+N; zM~e4X&C}}`UB?-9oK?q}ya;9BzhENa3*6atjFI^qZJj%7&U2p3=L@M*yg*L&Fs_dA z_3%Z9`^@7a+x7`{OsQjH9g`Hjq#nL=;6Jcp`s6w;t%v_`j|zt*m({~pz^TfeCgeRe zT`OW`+OE{eBA-#mRmNTVHFaED#|?E{XKi1vx!BB&x+`yz&LPup7QdyATSeHv({I;u z?hv}?)m>_d{O&sLG0rW$PkdG#_lq$70cAa?>ySfs^>7`J>dEkkaJF`UYv)bXtLoHd7-{+yKOh1{hV>zJp_e5sC?MYx}= zz!Z{K?bLAiy6wXoB5%6Q(b;^vj(6&Kzm9iRmgo095iWFu1My7OX!DcPkq6M3`gtrV2`rS22zEw;3v?1BL1>4BLDY~?TFGD=t#IBaL zT?@8vY1P z+R>Jmvf;nNoNKvAO|m!oImLt)OwqQVWF)Dph7l3!|9&Xg8h z)`F?FD4r=!cXsvZN;y(KDqXL`6ECJZfL=cEghe5>sSd%nE|cW9zJTf#p)dshqYwt2Z&8d&6BhFWlc3udVf6)ufe0*Nd5 zPzxSbh{Ydi!EANN&EfH=%F_9m#K&9kgb1B1&V@gvW}X)QPspribhXpNW3I&KgwG3K zFdL&UiN7qICwwImeNFsz;Tys?E&8^|JHmH`?+Lfkq+C0Tf2gaP7u9^8eMJ|T!ssVb zKGo&HE1b$gEscx)yakICCI7e!HQ}(@1w9}W!!!7!;1xt<7 z|C2aR!SWXTEdGlrjB;0hYrzUBzw1;|{KLpf>3<37WauC9e`Q!D-mbOn%{-%Mwa@=s zv8MQ1rmz7T){(h`u%nQ-zgKRmkn3S%Vv{SY}OjSKy2EIPOaEkB5`wx zZn&lRR>ICgm%B|Xy0)T=lx-tAtI@z?`_{JqS+83pO1*n4c9OEQu!nFL;jY4-LO09q z;;gxcNUzrL?+|jxYlGOkwe7RMy+s;?H}S*&Rvg0*e}sXM!{Iu3T9d8e%VkPP(%2fl zu92jrWQ5Jata)h2x1!pLf|Oz_%B?7g^As?*B0f``!&)oqmfI4s?IXUgaKBdcF;8C+ zo-F3}6F)$BU~Bk7OtHU)16pxdD-LeOA*~oFC1o=n+S>N_C}5m} zA0uSj=e6Q|%|gyB;svdk+KLNXF|ifnT5)kJ#<$|4R`9>;Wg?$i{Z(y3Yxp3g|B_Z* z+KNf7m~6AtLw!msF4OER%Y&<%){3iIad|7QY{m3eT%mb+M%=tJB5hpVitAc&O)IX| z^+p4iz?#>$;s)7Rjho+@dMlo4#mrXB`ae`%3Ak3%`(>FWBB2Z!L#U9<4Tg;O%;$Xb z{9SWqGEd1oPZ^7nsSt`HWXK#LktB15gbW#?|2k{m-T(fc=REK8?)9#B*zewFpYwh9 zc5A_y7Cg{`ds}dyDj917-YtC$->7^^klP!`ddd;OQ1jQ7%*PGcB0fu71*M!;Bxc;3IW|>CBe?xCKjEFt-KYwcwK$ ze9?k=E%>YjpSEDWdTS=gu%9cGN%3V1zG=Z%E%;g>8%qM4yr2c&+Wp4*N&dbCzqH_o z7A$JP!WR5!yToGHrJq{xv&}*><1B8$?=ASX1;43RJeo)&{)ZCLi~awz1*(!n+kwsNqw zDj~=CQt6?2QQ3|z4z_pD(@7t8B=F+u?C4-8VDty&d#%u)Bku9rSgui-TRA z^!0d(!@-`alVOSMrCG2o`%rPPuY-XO`a2jPj=AY*9pqp?2gk~V zLpmPd;2;MFIvA`unrN(wrh{$w4t0=oaF~PG!Ql>kE|vq=NuP#}WJkXIOW}+N@(LV; z4k8Byi}aF`h?bGeN_OYVzk?&lbWn9rbWq|Fi(Gb4VNYxXf;9&XdDSIv<(EHflyu|5 zNBofvhB!Ei({ymOgJWzKnoMoSIbc$wAMfA<5jZ4xl7nj;ob2EN2d6kV)4{0@hB`RS z!RhKoi#lWad4_{u^>TiegL566?cf}{joCf6;yefE+a1Ewo8W~GE^}~^gW(Q_Ik;Fc zc?g(gy~M$#PI}Js*5K;g!|(qcT;<>j2UltrF#=OFGL@?tL7ZzH+~wdp2e&x5-oZ@{ zZg6m;_#~JGy;+GEmX0GF-0t932e%0{+kmt?9Ng)oA8<^3W*_Nbtb4j#4l0t?`S z_%RJx68rpwgC`wKbTG+DKbM(_P(I~gvJmo5l-JV^UU2Y?gXbJfb?_{27U3lDJ>hu= z)135k7Vo|(x_4f5Fx|mRyuno`=gat<)GH2NRRJ6lWErnJnC;*V2QwYK>ELY#Z#kG@ z>oNT#^BvuNtodCB@2jit+4Y*`-~(=2b)NlU{U18`)WJs%=CUdWAFHbj#g!%P69@BD z1EaA3g7Y1G;ovjwQhSdxBSU@Z;4AGG4tbIMje`|kEO79LgKr)Dfm2>z(gjvOo^Cl1vkyu z2yW-1w~Osv?C7GWiye50Ny)|9$we;~AcR|jYuCrct}b?Vv5T8N85z^8a$gs_*+leZ z@ZDV;NW{ee7kj$c$HiVQ_IA^!480hN0rz#$UtV+}LVTc${ag$ZNM^ccTpVD%NMOx_ zIZYP_xj59t!7dKbtVzx)$YCxHr%6mslZxZQcj3D56o(Hig5(D-LM7sm*&`RREry9Q zE>2^IT^!*e=c3{w@1o?Q;G$^fzPwju+qbHVhKrhux~eh-Q#M_+sw(Q76f+*_;&>NF zxj5Fv(Jqcr1md)^nB!awQME+O`kvt8WEUs8ILQ`i*60)$r@C$L9tJtx#l0qkS+GdfaFL5)s@W_w$-`Y->EaR>m%F&s z#bwINCY!aRyh2&Xzskk6F0OWQjba)CBT%8d-o3EvoZo@wqx9 zG^Fx8?+6!ny13oN9Rk@Rrl7pb#Yok_n5>!dZWs5lZ!Ye2G1|o#yAwz@gt2xn-S6T- z7Y`_)xjP@sNl8fmsUe+{C_g-=Fs`Aom zcKGWqzH#w}i;rBq>Eb;XZ@GBK#S9m3s~Ap)0ok9KF5b2KiqSZW_g&0(G0VjV>Xk{s z$h`#7hk&g+{G92HS5BdU%B{NG$Lj# z7P$D`#kVega`Byug)Y8#@q=A2x{&sxi$!*(tcUS`cJZr=UtBEKJ!ozXntqcb6(WDQ z_{YT(7k??^pJKAqzZJ@?^->rAx%gKE&V_qynTr*?^!((lVVVFB8+usD!`dEJ_OOPB zRXnWbrSFrgdjJ1!wz?3$K(6UwEe{~7!OI%>$5!*x8Y=b@8^jIgeUTgB<@p^Jz0 ztyf2Z8+dK+lN)*1%0pKVn|bKwVH43d_R_D67-Ul$jp@33*uul+LQD`6w$za1tvzfj zeH(*#_(pG%+j;0IWP3?Aa0e-T4Sta4zlXg%^b*qBLthVlJnX{SgqSS5N*|(ncJr{i zhkinsomK7OVNVUsWLe4H9`^UJkB5Q6_w~@9O_7XlSz2H>Y7< zvLMM8l{{2ElrCVp)7f6#>E=c|!^4?g`U1c$&5O#} z9xn25j)(I-oa^B{HdZ(#@8t_TT*$UaH*tn}xWvQ79)>FpImAuUORewaoRo(vJY4VL zN)Oj~xXQ!Ts>B@Bl-GK=&PzWvuzm(%gd05E?BPZaH`zEe@$S3D!wBW#kgw(U@cj31 zw};z3+~wg84|lekJIfyFVU(RCBh%|15BGW)?O}{?a(FD5>5r8!Y4>}0+QS1Lp78J> z3-j=hhw&c9@h0W_Eq_&m=f89+_wkp1JUr%MLObMf=`@irQTikgPkDH<9X{E^6gwOz z<})5%^f1-K^TMC?@SGHrg>ssQ7px11FL`*y!^=XZx5Hoc@P>!iJiIQD{ahY_`dc2p z^)SQ3Tn}%1_`t(E9^UgX)5E)7`hLroO!F@KzK2;t`UoLD+ru0WAA0zR_q&(``9l7& z*Y^54p8fIgg@<__<_r8(l1=-JTiQ#13PTqTnc_x--=C;t!mwNbDIzMhOI6Jn?1AMIDV?{sh&+@!0X=viF;^Pz_tNPf-$7(*d@Ugm& z4ScNOV;vuB`dG_P@3jto+t)-LeXK2nd(v#bPCh#OSl7pTe)^`(`+^r;*7woHPw(7e z+Q39M^s%XrjeK^|6aW@w+=l z=<8!Qwn70(CUbWmdy(K{Pn*#c%;0<5Ec^P%`snZDa32GF9Oz>pO+E(s*iT+r{hpYq z^8k5KAME209|!q3*iWCuOlJx{)W>0(6cZ6i+vOwl;rQ@;xC+R^X!U&rcKWQDXHMiJ z5g}F<&Ycl5>KK)rk0X8LeN=rEe3X3@eU!N9nkml~aw>9XQu@|>G=0>4Gz1cvB4(?P zBW!#!S@}^uPVjLwi}7)ck7I3BbYbuzK909x&1rn1kCQBNvJ`U~pX%d&AE)`a&d2FK zhWQxk<6IwS_&7_nGbI~5|9zZe9oY)HpXcL3ALskHz)yd9z_gC?BGFhUn|85}D|`(1 zajB0>wEgHv_se`-ZfTs(vHZusKCbq0l}$nSYkXYmrzbySa$aoL^*-+Maf6Rrecb5d zW|41Fw;A&mA0vd2Y>K(f#~ng$SN90=y3=w-vK}9!G`!p18Z2hCk9&QL5zbZS=f1H% z?z8u%iTr?%7kxbFW1^3Td_3x7oR5d)GTyHKBN{RwT_*T=T*JpCS>Y2>Xkz7)d_3dh zNgtC1J|#)VDL$T7VJyS!kf}bN_wlTc=Y-RpG`4h_j~C=c8bQW?$;Z1sUiR^(kLf;M z^YMz0SFIO0jQP5cH?$i~k@S7b$J>fCLpW*g_?T&Tm!ZAq<3k_s`}n}eECu93n-}}p z^5tgu$j4kCb9{U(0{0|~Wc*Ls75ORey8!cjY#87(AAj+#^zoyQFMKTU@uiQiMgB_X z15p@!C4z;M7hxJhebYq^YN39#Xf%a@r&HqZ8Hl_?N`hE-NzDH z|By6J1+SwBOtfx*^#iOIptCq;tr?_C zfDMB53BoQ>GSNl>dI#tlV4DEl0&E^&;{cll*d)NFLE8b&)GzX7yPe|}0k#gXWq_>& zGPRkGNz@}i&j8!Xv|WJhr7#zhQtl97Cm}lqZBH>)(kp1YfBOX3H^9zpQGi_n>=t0x z0DZ+b?P8FAYKxh|9s%|auxEh1I5nGs0r!y$6?UV4fCB;y2(Vv(fdK{uZQl{m%7XV7 zlg;7qzyJpa7#!drfec8Hc@JS51Mq1`{bzxP2e^p!2RJ%_6QB^l4G;(L0tE8)?dpU9 zBD)G)DfTJ}kPDCrkPX_tXJ%V?U*y$r>P%V;&5tzJ<%H^2n}&I@q9Vv=wAe4&_hWJ`wy7#ZN= z0M`W=9^lFVmjt*hz@xsmVJGI5dm%paC3kg z1KcDI;~4i_G-M|k>ec{v1h_50?Lqo;1R|!NcLuo2&Nr*Jj|wn8z}*4vV@m_v8(?&R zF*Z93;9TfFRtSUKAK<|N4`@x9i#0zKV4S_DNFexdfQj7s0UitRXn+aINZi!$IJbw5 z&&Vu(Qh=v~JgIJwIax!~)u(yWg?J{wPXVR|_#nWu0bUF6T!0rudp^K4%V(Ef3@|;w zO95WCn}k^y>XiVm+U7GUr}lb)cLKZ-;H>~}S`(Qw0=#W!WKN-(0p1JnuCkb2_kMs` zHYuYKoE_kc03QaJ7vQ4+AImz&uJ7Ccp9o=IUd-|-k9{HYB~5caxBL9d0N)1qD!?}Z zz81mcUC@sFU4VrFz7Oz&E#3tAF~B0xOwXC?XP&MhehIKbh{XZ^3h--yKLY#~;CJme zI`UTKWS0c^Q#G(iZY?5z2l$ugKM#Lp8K&ccE&VURGG(D7Q;@u3h}A+M#L8iM8m}bD zvR4VQYS?zFn-yO@M28S-gjh3dd;2v#Tq{J!@c++GR<%xujYD)IEyTJZ)(^2>h|Xbp zhMTNnwSY(Iz3b2(f91%|mP!qPxw-B3T&QMY&~&twU@T zrjIRFMP!>0Jrth^nUvdwXolE6#NZG;89&4hA$AF|V~E}%b_&sphOzR3x^0I1f}$Lv7NQcO8n!*T%tY!T8g^GO zEbD0vaZ!jPLYx}n$PmYeI4Z=kA&w4ljIDu8mT_E&AwuZIi!(YQ#7QAe6i5zJoE+j5 z^@I~4!t?F45a)zAJ;a$IhK4wUJ(s&7oE741yHCuTo*UwV5a)$B-}Zz!vtMYlaMukB zab1XuLtGJJc!*0wTw)7j4VQ(u-1?e1UK!$=5Lbn`S~PZyIOVk}l{))&eTWeuZU}L6 zh#N!PWV^)0C4tv1wv)HoN^Y~e?v4;^N4PV@`yuWM@l=SBAsz}bD#X|jcXMmW3pmg?`)^Q;o3o$;#qahyVc9Q8lwS`u4CRp<0Atr@* zBE&@1#yOh$sXVEkGc0-|8i%ONqaWLb7A@^l8$DLriFMZ#0w!_ zRLwN;V%aZ;n694Ci#2!WFMo!Z5#qHFZ>X`avlS}u%@A+dR@0FMza3(xlD?w|T;g{_ zyr-RTgb1X~;&B?{gAiYam>ptXhz~=29O9!8b8P2Lg>yrEVprVM_GyUELd;hR1}E+F z5MOA>QaQDi`Q=ZDA3}T`;@c44gjitb!qg;u7vg)nGr43$7KZpK#E&5siD^<3|Cxus z>MtS2&Lg)6!)jR*2GX zK1t(65D`|7uu_CoqVy@Sa+IDetYp;)t3~OdO3-v*jRQ_eeHr%52xn=?Zt#{Tcus_$Bb*!IsR-vq zxGlo@5w47IL4=DVT*y|7f05>Bf=~{Ra9M;)B3x?k6wZA*-~S_AAwGwsaow+qa6^Qv zBU~%|8oLLsi*UVaX2D!X)^=lrTO!;P;bt-U(VIbN9TDMH^~dZDR(^Yg2O``NVKmSG z2%{q06=7tQenvAcOnrBRdlZL@XdK5x7%SvnNrLx9xL>+yIFSbXeo@W~NoN0<`fwFpl~cp<_w5uS@M zHNvynfu>_wKE5MN6T)wv>3a#^|07I~@KS`Awf78@`|XtouPVzc+IXDx>k(!~cq77$ z2yaGs%dQ$t>bA|FQhJi1h`BEokOzKrlqgs&oetq9!1>9N4y|BUdh+^O?o#_uEi z7~zKq3w6$z6=bMI5q?r<*m?T055Ms2im{ldZj4_e{LAw{!k-a-SBgI(ERn*P+(_K; ze?|C5$lp4{2`<&pp-C}vmlzw0 zuz_k|@Qq@06+%7}QEnV#%NU!)=pJL!7@NgypGS;!^B7x*&mk`c-zr9r7+c5KMlpG_ zm|1KaV>==>hutUJZ%6{B~Yp8Sl)o^VI)9HVcHU1IF2Tm*+H z$Zj$E*$%LQDHx-Fj6GxQt!R7MYWIn;uMoyG&y)c%2E`aCkke#I`$?z5^*SI%7~{Yg zhsPKkP2)Nq%kO_;oE78L7(-*6 z7UOj7Nix%h@c(~|ai;hrbI4N9j&Y8}19d=t1za_@4$~!`mS#FDQySy0O^x@7JPsg|`#<&C->Qxb_u%6dr%#86yj2SWBjPaH_Pm`(k?HKQc$PNkW1h66~B{ z#{|6-?3AFFyqJPN!88^25yD38l3=$4yC&$X8q9(+PQL`ZYZlabvGP3=3{0?Bf_)S0 zonRkTxV)172?iwTbCY|CiKq-pa6p3n2r4oWk~zTx6AV^l<}&MYaDt%;4oOgB%mn!a zhb3?m9G;}dREwk|$x4WL36cbUf+#_dAe5(>WGO)< zLAhNJrl_*v3Rq8Yq)ZLTW`b5JVqCJQ;IBzR0@>Zc_*T~;%NGZNgM;LHS9B{(a=#R<+%aAAUT5}YU6xmry+ zo}b_X8B8DMkN?2geDW}ZtfY2Fvu9I z-z#OTB=P$b{F>l_1n(z!Fu`*P9!l_Jf^i8RO)x&e!3K%7-V5Pox?>5eoF9*z@P0bh%dIZ-?$Ys_?@S827e@2A%i6e{z>qs2!AE` zyPX#sxHQ3kGW}~KFxoQdoZyNXtdapTSSi!i)s-{p))eKg%`05#~VRc4e`3l47SW*y9~Cgy(mZVpY47Sa{{F)_)ta20LWHA;BSvwiAc85>sBE40g?6XNB5D(%^kF*gb>YGU(Ti&p2tFHt${;9FW1@ z84S!|pA7nEu&+#JMgyd?1N0h{!G7)H>~Hl0GdL`R!5JKq!9f`uY;m4KCdi>S*WnpB z8MKJNfM4*JKcyR*pFuN&AcK4cVFpPCksM>mee7P%WRT4uCypfo!LL9XK+RaLoG=DnbN6n(a+A{iVV)l;DQX!6@H%N`I4OD zn*9DhgG)2GD1+e{49nnRTLUX3;S$Saqb`$9{Bqp|v|gFP%^6&k!Sxwjox!ykTq6!^ zqxCw=XFqSq;6`h@sU3bx26tpIB7@rm-fB6wTZQTF%-}A22aU{NluTxExq5sSG9yWSm24Cuj+0k=XFaa?ad6{&fu*KX4qLUGCA*LFjF)$5w7xk8GM$( z`x$(a!K@5E%-{nNW=qnG(LT!HV-4q6aIO@Z%xyAH!%rpWTh8YhEXv@E48G0a%M8BB z;HwP2mX&uR8%}p#3+%r7E`uL3_+A9!OuaCJA2sCC804o677O_~gI}bWuKvmcKZDApEYXm@-1C3w-v67YViy1Ku+3s=25V;VFHiU^{>xy6YZ)wJcW2V%2Q=dnWhji{%!+|7WpAHhlx<`!?UY8KgrN>twN(+&gBmb~gRvW5mrT zi%warm&LlW(w#W3&e^u#xbBk07FleN#l~4|m_=97Hj-rgZc1dbY?4LyEH=$zGaHIE zm=v1};rFOpX0crsTV=6L7F!E6W%S5mTMhYMZCtj`V#h3cX0b!I?Pu1EM)FQs^b(Ua zlebS6hi9>K76Y@`C5t_?*fooOS@g|fw`|)_2k6MD?M}yR`bmVZ?rbA-?Ulv8S?ry~ zKH2nhB5Axx=%2-aY};=h5+Q$376)aqUls>uv40i^D2_2P&R`8$As6Cc>RB9OXJ`SGxF{% z#)x^3KF+@mV}9g~%gP`1d*{a6|Ht zmwa53E<`3ur!pyvC#Bybe6sW@)=H4kp2=dW0`dMmoMK>uZv)OTHmVt0BLooi-zjw{>n1=T4rP#d}%2t90f^E$?SBE1UktBlGfi z=NNgm;(RE{fD z4U@`dLb~U$x%gX1ZYjByq+xC&y@%ws?QlleUJ-gq?jX~Sme5NeBlMQiCx@M-m;#9J zs$pNr-6Z>2-#v2JQwTTDUTV?awr~50!!GsDr3dl=ix0H;emM-zVSnKVNFFH3P~2As zNvCpfE&=TJHdJS>O9t(CZwgQuY@W>!1O&!s;Rpf$`PmNk-<+cn9xeT_+LHix|G z$=Rxyop`Zbd=43kPx(p?)m+=(8m&pG=P=p+@_#dzJ`Ks-h~NL@a3mL3`cXL?EqxCS zk5ysENs>H7-J^1XkP{_Ok~~@R6iE_J&EYf^Nu5hGG>3C@I3tI%b2wAgo+Zg@X+1|e z6%NnK;es5_Z--o%!!Qjmva`N8hvDrAbi6c&t8%z3hbzRn+*)b6(&|^|aE*;%a$T3h z^%i038!XdUiQH_h?8XSq{Z`4_ByZ<_(6+x*LvrrQVWjj?lIB~`d!&z+93y$JB=-qj z?vqaCekl*+@SsIV;JGv|m%ihTmt0frdPG${n!^Mse0yQRydKx^i5w5jpuWircFZqbDf+o=GuPRLgZzcrswd=|8ic-;dLQQ zP1>8%-;$#VGMYaE&ZX~H??}#+d{>f$_j8!7y*ew05A5zeNt^aV4Ou7apOeGKngaE? zQa;IHo)ktVI6sH4bNEci=Q(_lOaJa4@h^pZWrqa6$zg#VlJKnv#0{Uw4>>HfAcw>k zh@K2lTZz-&nR!(ZET115xZ)(bAT8T8B1r<1^6Hz%ZbG;T`{l8_)oI#O`d)eLt@?@V zBZSJn`L^E|8eoxuc?`1peo|QH0a6akW3UwP{LkaCJPyv|5Q`8z)ar*@g(-MB8oH8R zJ5!KHXor!MIFCdMy%;c?M=qZ}^i3Qp1q}^Sl3vynSR_HpY92LBlR8_`$fH#oqbV}? z#t|A)A^)g6j@FRzkICa$={&$WJTBk%>FIbyJ0Xu#^Efe&lf^knk{g5XY^UVY^U741 zu zn}wm6>r#1LrXnww&iM4AyfTlg^0->2bRzsGVEOd_N?^6u<#9tE*XP@wlC<6^-CURFEqZE0hofK1;4aqxbv|YzB*2)^j=5e2f z_iH*tn2Xngc|4>>QD+cdRCk^8H51JKHzlg8@} znclSVXXNp29&c;-j(lgT!wuDJ_6)t=&tp~|v-9}CW@HaP)S}aB7H&=+A1lIKMf)U= zc~VSj_GG@S?A~X2e4fXbvVLI~%LMsaoNp|1fvoHUFFJlNoca$^=<=hKMHc^wO}0Au zi`8?|e$}L?@FM<)hD&7q({hOaoljpB$@xd%(meiEkz5o`bD6*u3hBEaIcZ6S^u}39 za%IU?3h7b6i#V^<3RqqE8in*$B|_g01*})VS_P~lQ^x|<{$H<71*|I*`6g870@fF& zi=@H1D>f`(BO%nu>{h^*1#DcvW(90gNN@Q~3+cVUi}h1>FJSWmwvdT@f}F)x1#Det zd)MVM5${n*9~|UwD}~_pQhI9c#CIs9ck7OdLu;=>+BaUkr7!~ZojF0J*tL-E;l7eI zQRmgKfZZ8WAam`h__R{rn{zK&Pjv6|}k{dzu|9;T4D$77(dLu_VcKq*tbZYytTKa-x|y z1#yZB!k8qNh0t12f4H4$;@1mkvKT%BB-vPI+6Zc(lg(wXQs4R4p^(}B!83mBy!cWE<>)D6XS4NdBv z0`3()T5^n(?rE&VUw)Fg?LI!Hd&#j6!5go$gp&rTEMdfOcVGVgIFtD!G^FiO!T65 z)Jux+GIyhJ=6$7*zRy$P#c0NbI&VGW_?Dv0DBx{d>N^F@v^tsZTK)Y3W~+O%BtMX3 z0Us*DN4Batnim}z|8xHP-$MF&&ud-*pGu!E`I#i=P7@3JLSCkgoX*#Z_KhTmjP`8- z-)s1tB$+=*p=qJ5&?IHdpSTaL)l74-`tz&gZ<4<&BZDu|kjkG0{AKmOwW|p(EwsIX z{9C|(R$r#g%ni0;F}-b>mvSZPD@(2-x!kmxhO0}Gyr#8wut>*ZdeZV*yNGq9cd`ii z>q+k{xxU32Je^t*8y2xq@qgYtyA`oTF+FTIE@G1+HY;LN4asM;?nP{_A$4Bn9NtpM zRz++rg&<8mir8KiZd=55N zt|OTT7jcMahe{G*Lk^eTVi87gi^vq=6%h#ZC5iJ2rAI}?mY-NFqh*W86;UW6-wrGm zQPPmTB8Nekv{FR1h`N@trXmS8G&IZFD*cEejxORzyW&S#CdtPLWVGW14$<&<3zBeR z5vLV#QW2+eNAaJ4NuDAyhjgSoy@)e~3@zde5e#nR*)p9YIgB3xia1X?tsGuZ#KlEi zSWKVz7ZuaD8eYRhphC`YZ4z296^F`YqFpY|71nxH5!V)RwdGtRE6LXhxxR=Si?~5L zV-n|elO5h7@(Am~*4<{~+^+a{Xvl8dr5!a=a#Rs_OJP8>&qpf)hh*Mc#C_U4Vb!@kLB1;^875;ccjiQ$A|-$BLL(#N$Ogp&&FF&Lm6V@F|%lOHQ#g z=6!~DP!UswJS$1?IlIKuig-!j3z9EN?x87=HeIw=BwsD!bt$j4Q|C%v=e`bugtZcxI;C2UwiH+pevmC#iR%UFJoQ{SY7 zO@$k?*vkl8os~;h)Y9OUOu%N{FQ-mP2c{guI5iQu=qc z=~yVCTtcygl5hi3R!XQ^#DMkE|9?8;OGUGU)>8V`afBolMmtLS(Ip%sg~+ib43U1E zqFuy){8hpUC0wj;Y)GKvNivxTZ1O3k^mXOb5>Ass{d5tioKeC#C7fAGKgsestAw+q zGY*H8=W2Lf3Fk|p3&9IZxU__en6!jp)|dEj>wAe+E-T^65-u;{3X3o-m;NfdM)bO- zgzHMUR{NasxgmL7U&0L~+}Q4RAoJ!DMwD<%JMh*L?$Gcy$=j`of1vlj1y=15AT*Mba_;!2_-xxg%f#P z$`kEeCUN0Pc(R18mF1}tCTokDO6c-*3D1-;RWAG_!i$l4Jy*i>0!?jZXnl0vsk{^}Qf0n{r zlzi*^xP-YZRfv)EO8B&t{^4j|qnN|JoXBSPjXWvp6G9}TOO+kQsC!-`g#))dk~axF=^ z6X&}Pm30)SQ#+id^~&g6PPgm&l3gT8X08p(=vu}`^5W-og59KVtO%P(=Z7rfo0YM- z!0wX6^bvTAGPW$IZ*k1R_>^Q)Zc|1N(Y7^nRC(K%(YuVEin&8M-E2FSu~WJ2|9t5s zobJ4L`bcjm+AgY=DRvduSCadrpW^Q>D^u@L#-6H#5lk!gE@K~&_f?Ai<@6u+4k)LO z8&l^XSyM z1!a7zXy0i%L|F3=W&Bdc!ZH@g^rJQX#5+`r#b!2ik8sf!m+`COQ#XzJy^KGEEGgq3 z`TkkPUuFC)&@2RtSz5-jGX5>&KfAbDy%MZYNzZ)qXk)3UV5JIHucSxQ$`!0q!DsGK{rS0!oE#E)uSJDScmkKth zplbyiRuy>}A64XZuVCv+dSY*`I9pV(Wd&PFXJKTL zvrPrtRnVi7KEH@;TWNb!+TPYo<_;C~s-&-}J65n$C4JU&?p!;%^j1B?G;1SwsbJR% zcCVnXrn8&kkl9Z|MjK7XN_v9rsa$(;cB*6_G54)tPzC)f7^pf2$jcBIe?Lude>-b- z;J^w7D*~+tRdBFPcZk44SqcCD#|jQtoh+NXg3%nc$d%;wW>w2~OQ5_wqayjn733;N zD(SNzqh_*cSw*84XOY(|3YGMSL`7vMvs_7!cRu(k6;##Rnl;g@A-yTQRXXDkKT@0O zD9NKGkC9~Av>sQ%2^9=cdB+Q9B{ZE_!KoFTRKY1Soy<)lzVRZ5zNd>nRJrz-*O?WZ zUBOwZ!NlPj(dAq=ypn##JgTr%9E4a0STeMQFVT1@&ZWF?Qw`(n^ zunU2Luw7Fsc)EgT z6eoQtQdr7oD|oJgmsnB-FUUGgk^x_oV$PzMb!$x53bHD0p;u*nO$g(>F2&sDZ%Su* zGb(sT^}H>~HJVw$yK*!&Fx2}M%&uUT?zIo(XqN25cKVzO=2q~rdcwjuHOfzPN-)Bw z70efzi}IN`ybT+6j$c;rbp>Cky{wb`Z&b_zmBHaa{_>~XY5iW{50&)&oWmb0_(i5g zy6=ACjj1@y&Rq0etXq{#PUklYzt{bRuzXeaJYK4?KA!wQr490P{mquG5oa!u2aRjRdlj^uHbsr z^f2sfk@c%>AFMX0VxuZH)Q}NI^Ot{=v0F8L46(M2tLeGTCewXWo2Yv=eOQ=`EOHBl zrLt8ueWl#GifyXtsYS;gRctFSZY}aDw`agAdMYD_`}6P@ft#OvB8s zRqS5HF5>K3ML(tJTg7fdNH)!eoz$$+b(g)IvMaV(OCB3$~BtjzeU_CJn`8^@`Ea3wKS|E5}6Go zZmgLqidAH*$XC;+VNQ;W&&UNEaCx`s!a6HeRI8}jEyPfDF-s-_;!r1YhB!Q$I6SM0 zv$crSneiN%xTa>-l%~!Lth*Tw6Yb(EE~{d=^h+c!m0aF|%d5CT2!mfKg*9JYO`oLK z*x|Ky;m9!)yg?@3fHze!qKcc9nzh|hP2Yv6@LMm++p6iWLEf&;aNFNe#hua#vdEFr zN3}!lsp4Mlu`0&MksQMuTg81AVOZi1$m_v&zT>KRxQg*Ycq616zM8&bJ*tu>NYarw zK~CfeO<|(&u6zVk@uc|V^b>*1DOEhJU1S`YdTJHV%7qc0t74kcJ+Dy5$m<2Gzocl) z^>P){j3m?RGtnDWr214 zPK)xr0-C%FrT?f|ERy`mT1_-IVX=^3C4ZCrUGfjfC6a$inu+|abpI&YQpta-_)m8P zlk!GjAPhOTUmW;DU8`e%C;8Y&f+~SvV)WzYw1nLAiZkXy@uX3>{?47F@03q z&f@G+OCMou1vg>e8g{Ft52k*i5loMi8uqPW&l>iwrT??rUYb7feZ)x#{P}MU12r6A z9S2#3g#D!-P{Uv;2igeCIGI2EwKX5Y^{V0U8V<7v2`s)v)lzY52xRgkeMwf!0%(nD z$khSmea^OPEKO5*{@2ncLQ%3LS+1oIM}pNFnnG%lb;*Y0Sv>ru93gq6 zcGkwbQWxBxnUMS@v?M7NJ)^NDwC6;rk;?v6Oa)DP!UMYDM zw~b7+UQ@%h*6TVc*IVn27QabKRxYIajMx5Wx<@SXXblsjKV}iLf1c2AqU0n=zBoOl z=1i94R-7V*zq$QP4KLI%wT9WRc!Uq4V#!~v^%DO5AFKaS!xF3iS;Jq_>CUkK zSbS*>|4RSQB0fJvs1Ka-iuLsLGsBgnuUv;2uBzc`lB-LuA!(XJuMTyrC8VPy`#^9V z=~Oz^v99#>+F6OOuVI%uHn7YM>u}}U)gs;M*x2eO-KO>QsX_PUm2WNrhszP}{66Ar zBU6t$wy$H`diuFwyL$S6`p})Sr>q1y+)?^Yk{tH3v_5t0QOC}8^sQr;I(8Ky&vTF8 zjqsO$>e#)Gesxf%7v-B$_7tr@&wp#$r;b5&>|4jcI{M2xpq~E2OyfmKeLtJs#5tgj z1H~CEd5|P&Oig)+hKEWXR>$H0Yjreq>+t>;59$boM3N>Hqa_+5Agh#JVJ68zI^iMzjbWG@8$UZFXb3X;>WQq{PJJ2BOj6c z_h0q&4-=gzN#!IdC)cqVKTzv07@W#=;ro9br%PeehN{~H&lGZ&ggXj zIbYqT!e|#-{UWPeT*q*$oBe#L3b@SHbGei&B)NQFXek+u3jYB$qLYZIV1s?yw5WxJxCClpH15U19I3V=T9K9rxBTMj4mqB7wQ? zv)}`DjFeM&{7e@KhaB1Wp#m zgnHTrCv&Q-&(`sr_2nuPpH{~U7UAL&c}c^UC8tZWtFKxPHyAmu*Flg9uQz3SOL9gX zZ(Al8oz|HezAO2juJZN>8m=vwpO|?sN<(PzO7?n9pBaQLml6@7RdDOR}RRhi3J;K%L~Zt|YzIYovc~r?Vu7T^i`tzy=L;6=A~$Hj+XP ztwwHaeK(P^srBuy;pUQCNNy=e0jEiZ=+ z^lqTf|KiI_Vp~jSjO?dY>@K++-?M?egzRk_wcM+}!ZO+bYZ@eFKS>ke0L$TUa03T7 zaF7sVr7x938)#|ZFza==B{0|gtuD5ca$ z59+cc2|T)an75Z^*d8%4xhtp`-PCXNV;eYu=fC6-Ne+*vBE1tI1iDVr@MOtT8aP$T zX_6$IE@i0XG@kz!=W75T^k+BHhyFQ@w*Tjjd~$f5FXVzo`v2}3BJ z63I)g>2eLpxx)Hh)kr_?@w&Q!YZ~dR6fX|1lM91iFXaZ&IJ`-mnS*|xB#|$qd@1>reZs)VY^dZl*WIDw3-XaC(dh)Ce{?#p^3Gc z;M<+Sjk0zV>&V)viFNTlA-rb0NpPhfWq zH*aE#CbpEmA}3<`TMOByi5^n6wFDDw`zCq{;cy3Q;_A@7R};OPpu!=qK21>WEJ<)z zYw9axH#^*2${u!T+$r}KvXA7xlKmxV;?xEhh9Z=%>lK|1mA{QrNO zsF>QC;Lxl%m0A-=G*NG&DQiQ^N*5AZ#iV{@6Gu03l#NCc!DFn|#2?bc$xR&3@?u503|Ca!7XYS9?SguT`VxxR@To47$%W4cND&F$h4 zAJN3E)`h`uZ{nUN?r7rfChlxvq)d0&6r-$S%Ag$G#MmarG}Hfl_TF}J%)IVzVq6ms zH1VKJo%r|Pn(0r9dGT(d`}igvwg`vBDJO{hSQC$1uP2(AX!S|r8}d_4Ol@MaOjDY8 zMy97F8J`yeJ}c{UO+0TS(05uBrhpd(nrK|>m$i$gH`AvHhrC{G;x&QPU$>{qn-+Pi zi5XVsDfEu?nN7T_y-k<*td%>T!&w@B(8O$ue<;OR=Scrpa;_v}&THa}CO&QAGj4T0 z0wg)F&oxaV)G5Dg;wvF$_)QbvHnG5xN%+oMzqjDRCVrCsV-t(oMPr1YEoZS-{MROy zH1S&#e>CyCkcYM3+RMLG@ZXaENG_H9ToeCK`ZCECTGMlW#a2KH35K(>hBU3xidC&n z)9S71yG=S}UF=l{AsntHrK2P_^E$2R&Bd!zYr4&-tS6+iq(Qp0rjH)_ZqS;35T?G7 z$X#2pu}s|*jrg^)-pQZ;wx+vZD zE&Tqc72At*mI#zPv|{I0?AVIlt=Op*y;?yUeU0p6hYYw&EBb1iy~_R1iV2Pz)5i01E*@L{St21SM3;={KG4y_q){UNFot_o1hT#1!w&+{W_vzkE2`hckUR%Lj(Neclb7gd1&reCX@LIX;}LhE61& zr!Gi1mPnHmle4i#Q1WRuH% z7$N^K;cy{~j5Gr|SK}2v@IiupzYj?t0zTCE5cDA|f5=)z)QU~$jQS8)7!$I2Lbh8p z$dnHSAJRT#mCaa%oDX>)=wSsS_o&wGh!6F)o34JzhwFT3@ZlOC%067>!)PC_)Z9A5 zLwtVb&&jA7>x@xHV|}<*go>N4>wUP@hZ}sj*@qi_xXDK1vbSi*S&-pvN{#d3cB@I9 zhhRL96vx0{0kB!RTTVA)+!2y{tCWd8JmkY9A13?219ZR7`=8?vXyoi=3bShRpqfy5 z*oVh_c*KWCdA_I%cFGSytjz4=K0K+Jc|v}cVt3T1`7qta^Rx(ccK57oY|CC|`0$Dk zGkuuj!z>?WtLx{rcic61q+amhB_CeYq`BkrvQ?w!RUh8)VXhCa^HLxWyP%DI&C{qj z)cHQV<-?l_IWT4y*dd^8p%0(>@Qx23`tYs~ANcT|5AWM-aFDF9$cM!?8*Z;Z^5GL7 zK2}W@WLesls4NXjefZjk&wNB3k;bx&L$fK~8Mf}*#kL~@HO996NKN|VH zOHE@T74oKjH1m7s@(zCN==UzRI|-?f(?HzWj~4PU{GPx6>qkpJc2$v9LYjB;qqW~# zw{8q{?%~ItQkbQt5CKau_Ym3sofZTqu!YKM|%bGG%}%7yB{9k4qE|vg}~X4i&l7bXK_B51${y{1~Oa zhWjx>*^yNq_IQPj#P3JgkASj4KSHL{!)g(QZp=|Xa(=}8NXZ-*Cj3ZNRZjbn^&?|N z*wD4j`%&_v;77g8wZb~H6{{*VNGwZnZ8?%F{kTfX)qafi;~Gsh^)V882(A^mPI$fW z220V#?Iwjc3vc26O1w=Wv*Y}@-S~Jd>G6K=;fJTgU4BgQ<8D9h^z9ZMo5KCUa+<=ia3$@is|fe zuK8c%g!4~;YA_^k__5HB`5OG2ek}0gE!&Zg_~oxSd*@~09X}TN@va~5`|+N18kpkt zfr>l6Sg8*+15`ftW0@bH`0<4wOZ-@>?59GG@H0O?uWC!>OAEg;&vHNhCvk-zD=kas z*M5Af@Edcks>-hMV}l>x`LWiI@BR46k01Q_Q3lQioAcoQtdQgvjh5m%KYo?S?7ADg8xWWz00+3f;o9KiMg@A8g-w;&q{ z-Ek*2`EN+Wj#73CpqU7}qsS9vXN4_l~`) z?tDBvfMWwVLY*ENz%c)<3i}0cQ2_l_mSdyNjs^rU(1u6l zk^qJVFh~Ul%Sq1=HD{Ac0~jXpGMCbn(lA^VMhM*)SZY)NSEwPmF95%IAb_9_8AWbv z%as$Rled5XYDA*Kn2-$SqpSE;0o)Y8)d7qR;F=T>#gMklzr%jb@|g<^aY8aEp{% z1Gr5#>aIEQ_5kjv^4}@$vUdk?kHQI6t?o7R!~muQFiGM40X(3oaFr(;e=vYY#2*Ua zVXMr!np(vlm02_ccj?MJRN$H`O@DE;4KlZ7K+5T19(4xg#o-9 zz&lF0ljyxFPUi;!EDB(;)+!Co^HBgxWcxUPPegcr(ah|p0W7UjC~{6*t1n$;;j#c$ zh%6U!iLMlJ{;vc0K7elmSQEgv0jySPmBv7W+lBAk>7#yskm1Jwelm}<{Sv_X0M-Vu z&WwhMZf zU+Uan5(LpG=-mYx3!4a=3Yn$8W6-<}I3t~hN!)^EJacxHh;gfhpRmyKXs5-oKvs5^UL=X`vHNvPcCZr*5^PH5D z5~hV2VK#`oNKVKTwh%htEs*zk5#P#yrAf$3*u=1IU)!g(FZ&kzFg5DQN>;}ktz@8{LvsD3wjR*j|-m=a;Q|E z3SxQ?(`kdYlB!PPSNX~&;LREu0!^l^bO)n z{SnkVeEtbI>3>>{3xN(Me5~s~6j_e#lix66du#2*^dD$u__jk7tT8FS_2)l>8y9~EIL|B2GxVOeY z(k6s`#NCv-nP)+!_7CB}5Drk*wW8QgA=ed^gF|SqvOJCq54FAy3*qn(jtSuiQ;rPb zsF3%K#?eBWcj5QH${r_V%84CA=w!WMg$=ueaB9fAU3Lwj zTgZFRB`0>5*hA>%v#0p!A@mmM6~Y-JX9``bv&7F9_7S>*=Zg0Y;XDy`eZI&A7P2|F zej)S^VPFUsg}nP3w*fMcTr6^laFB^?GDMsOhZ>=HS;%`}xLi0agyBk!5RMd%64FDn zPn<`PJP<-SgrH_AB&5jV5qWBa3@LJpDU64Z5J}4K>ZC&`NX&$g4IyU@^CFy2Hm?n# z7(!hL^_F#g5lg0&wF{$#R|>BZULC?U@^BZpjR|3_Lbhdio%r=3+#13SA>5?!Mj?lH za|pMDypxemhqqaZ&2JYc;ULEwzf&g&#k)heKZFS(+^5t%!h41EPc+*kQyvK6;SeT= z@L&j2l%c^)7b=g0Fx8q+e9W?shwy~Bn^iV^Duihv%n4z72s1R{PYa(BJ}Z1q z*g>CXXNJ5_<+Fs(3ug=Y66OWjNL~zq_>%Bt;VVLRH#dZNoN$f&^{Nqa%x{D+KZG}x z;!N^NLjQsg7RvUvkor3zyr)CI!gnG37{d1<{1EbP z#Pn<%)wU6GFMbJOt#*xX_84;eRpI)O_oBur8$$S9;vYhatVaAxAzvbG6xkHQR_(%O z&F4QMY*9!jr<(h+T^QSky{oaSK+-6T#!|?egwfPE5BH8??}E0Iu$i!V7(0i(%b;uC zB8*+a-kqYQkY@5-!`M5F-NM*IO- z{dTHwknmt33$_pA5RHKYV94z-r4Cm|M}%>tIgb*d?U*n+sL8Qm94F%LVjZncr!bB; zeu5cJ3ZrWnC!5|`1o;1MR-bb=Fd>-%rJU~y-NzW zv!rmGeZn|TV?IZCZWw*T-d(JNcJqAh1)u-J=oiL?wvYU*>JITmVO$c%0F|OLP~>8D z!B&G54i+-xVI3OAh%hbXoj#z zL|9{$Su++!ilX#H7)g;<>WkU5g&B?6y@<=Pco?-|6l^9r!*$~I!lKX}O_pjICrZ8^S%u`{VTf?|Z;ca1z z3uAm3w})|u8CoMZIYkUV z=h9O6MHpX-xKS+&V`Ui2!&sr>P9%Cnw&mjAh<__wC1lw(B6POk^S}5H!XJfUHT*e@ zzry$>jP+rx4P%{B9RIH(Z2JP=|Ag_o!VQ-FBaA=Ar>ICTzW)zna~K;XZW6NXRKENP zW2?d~8bAFkzFow-bkG11{(ftti1%BrPHYmX{NLUkBG}QKF4fFZY`b#=trWJ1U>6aJ zEzPj2$Ziqr9zko%cHzT6JNj?Uy(4I2tz0krMzCK5ZLJl>{msBG4ve6kh0aer*lHeP zDLM~};BeC!(&qe*A05H*5gZdi#|Vy%phE=5Rkd}VPS)JDJt2Y#YMw8{ z1;Ps>==Wd$MG;&a!GH(`{Q4!Hrdhn$dm^|`se4VCXsy`k{Si!-{(xoKd`cC6Nal!6YNn_KaSuN z^Dl|uQ{%3e&m#ETS~=xQ8NL!O6P~99z@JxS!Ie_}C;VFYjc~5AtHf6eXK$A_-5fh!Yx8K{_SeK zKg+Pa5W+^n#zOuzCuW=0c(;HZggXj%5;hYy7w#-%?{3m|sqyY9Eo;z9gttG2yNSEm zW4OD*J%oN4_7dM)*ha|5n0-ZD+5N=#7qY?uB5d1EO+2~{DxzPARGYj9r;CaJ zQyx|m$EQ~5k5zGIpHTRu&`t6*@#&^KQ-kMg@N5lc*5J7s%rMdjjuE7g6n4^AO zsTZrVFW2CW8oW}2*J|*p^tnP;=XK-rtjYWuyi1_e-U3>gI`6~Ri)OOe}hE!^}8v5)?l;5 zziRNe$i^CMvbOGs{8Ix&v84vvMZHVd!|l};*2P|N6|Bi9@g(^*8FslUZ%V5&WxgW6lX_qR+Zi-igT=&ZKLWN z#d-3aAH@YCOl`~dlhR*!k!1%)F(`_Q6>`5Wv6|$AB@Qv=QuDZims?;8LkqtEiWwF{+7rXiDRR*QyO7!OBJAtVsCNe^xjTycBu=0ra<6$#mSLj8Ny7VutTQ=^N28b$#lulNXyQXg zSoRU|slu1|{zv5TD4vYs2@`31DvD`Q&_K?Oub7^WVulRQMDeW1bHbL|@tNYYg!HrF z>?q!dVonsVMDYSkDfOa|)m|1kO2uD|;`J!zM)8_N?gcj%nWvD1kDc=^^=1@r8E5M4 zC>BMrFpBr0ct<*4xx5<%ky&oXr}xi8!v zmF3Xh2KT- zy-hVc`cdLfQT%KozX)L4wbIu`@ter6!u3K<*9IfM+hYDRitS_gD~e4@{Vm)m+evw4FLPhQ8)u z_I&XRgl?|-#V|02{!%V7=Kv8m$rs0PNeqLf46=C`62nmQxby3>7=kfe9>b^@hQ%;K z+2Q8rm`6(Co?a1yKL%e61sy)7NCFDULovi+2**$(f5duWDr!6~LM36lnTjD7Lt1)9 zm^II#eEt_N#84MQt?AsmdU5v&v?ShO*>Vh{jnjEm3}Y2u9m6#uV=T*QyjJ`=;q|6Z z;q!kC<6^iehFfE}+4NgPhU>82X6F(2<@Olvh~Z9U$J>6nLvVKt_s1|HhWlc;M}~Wa zF3YwPW0)kx9aAa~D4ZO_6cN5qrO53eg%8K@NDPm0b;a`WwmgP zu(Pt?i_`Xl$dAIGgl@ur5nmg_I+0(6?u`vw{T9OpDdfM$@P~1>{Y(6BQ#Oihs@nH| zV%TEYtugPnZry0Nk9+rm7781QuNH3-M^lA62_aj^hLy(up#hB;?3D8#zUWE@tZ%NB1~RRd#{~#)l$SJ1vf0arBhV2|PXS zeZ5Zoj5yAYdKkm&S2fl|C$vQE?29V?^BhLv8$}KW-!A zAiD4h}vg{bs$HsB3@#{o5m>WcH6y79cDYm*roaELx zZZkg440o6^UgXX=?hX1m@~qzz-K}zH`DmWm+V>EBP)m zlTatNl1R>t-%S%+%TU8h4L<@TuqQX^dr2p6Bf^3-@0-B>3AB~Ma6b`tP43rVSf^dW z`;Tk~nTNf!7e6F{Lq%AVHa6jQxD@wM^vDE`Qpo4S*LeL;;MjzBd31;MxP{2bi3uDp&N?U9e!1g#a>Dy59e1ZYC4sI9?`NXA$V@{wg)GI(d-sI*g9km7qKBn= zik~iY1EY9`nvnEP;H-rA(_*fpvlHHxpZYlo^iAMg3t8Fe=O=Js0vD*7TdV!V`wQ97 z-C_nP9GJkxRr;U=E=^#tlp(^QngrK`Z7*XeeVCB-+3AP`{0WSdGAaR|$Q7J?n{ze~ zBoImuVN(K|m2!2qB+w{{t=4wCB(_fi z$;y7QEp3gHXp;2q3$Aig%Tn1<`cA@TNi-Ls&I?ovi33eHVR8Hs|$<$`K6ZInr7kZFP=GdOti#=W(WV5OF)wDe3)30A{)I<2IMH`_R2k3M*6Z zob>+FnP*V(u4>**=x%@A#a*4##CvkOtR@TgN>)DGvJSiGEzem(cM|nUdiPo0)VNdU zCNU_9zDe|_sNtP2yg+!Nu%D1aVy73W&H&*+;l;vBgxmIxr@#;?Y&A6L{Tm39%aXV} z={+5;+@Z-p1xeSeHb-QhZuq7Zghhx9wv&iP1@1 znXKHW{BBf9T$jW(NsLKW?l@!B>RO?@ZgT+FE4-m<-)~CdW{J$+BGN(yZ%bmF>9>na z;QRk1?iRmOc$evHJ0XdCszNIFB{5M7xm$<#D}2CgQ#h-(7u(Lbhn0OqIJIh=k0tSV z5>F=agi@@@o#K$5(rBk8G2P5h+YCHw&gYWX~;a31j{B9R3SD%ycm&`8Qn8fBJHc4^Mng1lQh4bLXto_|Cg(fLI|EGWy8l@^n zu(3o}r)dg1DC8h_OnEm=4u;38nZ)KPv`ArRGjPD{i&>JEG)pIEDXz@jQr`8UwM6a$ z4-KpBnZn*F>?M&l7N@^W%KN1N61Se)TAlqw_D^{)bC~6JU<&Ol%W6~(PNBUihp@Og z4@=>2>4T&kDSlMSJN=IqcYU$Ku_?@zr-Ss4Lh7ATc;2d=kiv-5V~xIBg75{H?8gn34q!U|W2`-J`! z0#&Jycvw3{r>k6JhFA(o@puXe5$8#Xr%lON^PDMpkwOZ!BCc$`c+os1OO;I-ox+vI zU6ZR*xJJqt;n@FXuS?;2DL4FAzbS>AZAh$hYYKOyaGN~i%z3*RxJTntxYKmk@7)R= zzeoID^G{SbNqE0-+q_LqVTzOoO@Anb`8tU7JR)&w3Xh7o;?y5k_=MGeDuo#-OiSUJ z6sAk0^Jx*c;GY$LF6I5DUp`#TOkuW^SRu(vLSUlmSM7wqM?6gEit zUFhzBe~SMlr04GxHX3K0&Eo%ZXp#of-i?4;Bay~w?5E#2pwd*z4#ElY z>?GbSjpiadr_n-$Q^$ulHffp0o@um7qqX#1g}bFIZx?CUJ&ipiy1UF?Y3!56-cs5K zxeRFASG=u|A?JDjG!9DR04WCw+gX;2@L=QZ(>TO9Z#0J)KV0Mp;gP}^um6@kCXHjo zr>gf3X>?1YV;U!=(J77NmEvJNA&nE$-a8pizPs6-oJN;4I;U|;+PjB_)ttA&u2z}+ zRO8)6dZa5~eDqA?%rs7y*vmX;q${75dZ%%28fT@^Cyld}U9IArjdRkKpV{au{X8M> z5uCaU(ioud!ZiA&aZwum6}pwrww$YhX$(%|;xsO?kqnZDS&n~*_|P;iO?yxBZZSK& zJdI(>4i}CPvWYvCqZD2t^a=fG?;j(&4-vsMLTN-?lXT^48unNtB`V}D#M4Npkx-Zv zriAXKpg*H9n?_E=O?V-VlEPYHT^jXi6vcV4+)3Jy#%L+!wD;EtS&G}0Qm*1MR(MSs z*GU;89Gk|qB6RZM;d=2Kgf|M^Nx|&R3U5i{R*~D%7%ws|joZ`StHnEnbdukx)Lp{6 zh1=@fqwrqgeZq-pOiE*N8uzDhAK(8AS%-Xz3=cZ9?a{+&JR*gjscAf##uEx3<2k4$ zN}b2+Nr~>jQJJQ2y6|b?GhByh%uM6Cbme2|4C!16vy41%sX0e`}kt9f|!V}m&H00r?q?|j z5`)5!(49W)I-;;9gQ!SM$YC?Z&DoL?QyHX1GD7$AEhkQAK7)dIt#DffF8g8zWr?K> z8qDu1k5+i4@G8!sI=x2Wm<+DVU@X@mfBr{`d)8uK*GnW}FE?s#ZxY^|!7Vn`ZUDEb z;kXQL&tSax9U1RNz_xcPBq=GpTj2!ZJ;Hm1{J=g@gw9DK_X{5oa==qEcr1elGk7F} zha^5Mq~Gn%RE3WUyYt~+9z9#T#dQgIV_dKSG*IU|cRjr;lgUs;^1@a!!5n0}6pr>~Ur zvN&IaOUo6!FpB|M^fQ0|tamrLNa0jI|BGB~*-Nb2U{i)B5*WF6558HJ{8PC4~*sS!Beg zsZK77T7`LGAzOKeNoQRa_13B=!Xw)tQWlQR;>v90$%p={B=Ue>BQi$FnH(!}ZMO1x z;d+HP2-)h!toJ);H)V0Nlv{+i3aQh;3gfc4J?lML-60$=bg8?n&STtJ>9pM=a~ubF+Bavag7|YT4IJe?5zN zCUW=Zi@zy+D~q>97N}EZ7b+xS{ddLR6TUC}Ad5xjbRJ?;P2fkSe_|DuWbvu-r6R0J z|L4ZP%wkOzU#a1;ELLT)oLu3GELPf7^Pqg4#WxnR$hY!z;7@HCq4=Hn_gSpX;)g7L zQuw2go&Id(7wdgp7QadSHH-Dx%EJkd;|7T&toeudpIQ7P@|W=MEH-AbIg3r%%13N| z-si?sc#8~Mh1=!4uP`WXpYzUc@x?;f#34m;*5ud=xy zxiwSR+{6|+>>}sReE%cT%0f2ZEr&gGXr1%Mv%8Su9x_nbD~Ek^*gJp!zAvy1#o3kPDupACo=th2ojrk~1ot6iAF^96Ur5qY^l^+%8%%A_s;Yx*N{Ym+& zXj4bm279U0lhUoC!JHr_?>ddxdVrvce>V_X`<5ki%phdh#g}dFUS! zd06;J4v&jW6+S9_Ovpp z@O%!la+s?fCpt1Ghu3+mb9hD07jt+iS9zuOvJ}n?>%1yHSNNKc&q(t`-ms9iH*@$h zhqrS0IEMu}yr09{IlL>w!W`bwXldhU-;+qf@Pix{Ddh28oWn;se3-V({3?f^b6A$cDxT~)e4WDzW^-8i|JLm{%&N(^YEHg7 zhwsJLD}xyF9kqm6PWSH`YWRP4j4!_b&B~^Ofs-6NRj> zLmthS#66rinq(dGZ^Ef__PBtf;jT7=XDUTEL-s3c#L~bW5>}(?SE_rm#Bp=R#d5n-@q;Qn* z3ZYL(8_j_{qIm@K-u*h1M?|Tx8R)4|S+^8pTs(X`okv0jcV4H&)544}E6fSmMLv&$ zalYBB%cCKW`n>lw3b&$2DewIOG@7ZDrHmF{DV^fgd0Z>y8sQk>SRotIa9tkPDW&O1f!%2#el6S!RY@GoR@^83U|CRT~}s};q` zc|5}PW}XN0cqosDElUH7OwHq|JRZ&Ci98<5<8iCw>OW~A&C{&TbgS@89zUM@Knv?RfX(suJ!VI9&bpTX9~0Pt<_t3EXrd+ z9`EJxb{_9YUufBP)x_<~`^G=8?BYB=&f~*8KB}rr^CxClVq|F^pBZ=a_C;0rRUTjG zu`G|3c`Ub5E6nge5!dP)UdQtIR>~?fFttYfyF9)((T$m@AFbfeO8t_@I+3;J{M87} zzvb~)9vkxblh=P<{Hs!~Ao1@!HmT-D%Wk$VnB5|grM8;5eZjltQ`v@%3uszElfu7u zE0@}_fR++>Dxg^bI~UNrs%?t`cCpY^YgIt&0(O-lJrR*;}!1`*Z@Sp+?HpTURh&6ZNVHO@yz>#wDYU3_AM=M3!F;x|gli0x& zj-iwI@xl`dm5&~5by5K*TLs!qG2TU_YXRLv++Gm7t3r_?%^ey0=Lgi)Dxf1zUex4CFxj_6vVZQ|1YZBeNf_QKewXm>g7;Zlmqa7I;XmiY5RI%gL! zrz-nm0WYhImxMeDuN3fVp>n62E77gD*Tp&Vc?G;7KHn4`so(kcKNT+E^?^SEQ~)1r zC^qF+00q3uD;1yrg(UBbtl|5AHCZhDP{{IPc30xh+-rSplD$=L?a} z%6=ujtbpZ~bp=F=Bff#|JVOr0pFYQgNUp1Qvp9K{Kc}=*BSrSCiXWe z8%+OQ#Es_JB*OLZk11OU*lL`IVEbC{`p*p_jfDJ2+eD zj^e9jZYJKm7A{ZkJl@T8oyoXjKcRurhmb$C|vg%)1NssKuTl)ZJ3tTj6rP z{1I`JGgUqACuRRC{Xp?{Lf6;9;_Zcp2;FzPhl#stM~ELOJW6=9aN7vER*&QO`6F%8 z*{WkLI!WO;xgJia@}E@e{gUI!LJ}HIsRh?(7hzW+L+Yoh6-oD6oFs+(G>JWHD|Ztr zy=rlWIoWk@@v}^E4f`lON5$Esufp>js`3Tqzfh!KZRKZ`FRH~QQU=swU@a~d=LzM? z4ywfvDT9SC@Q43vF}xO+)_R`@FB4ua944fJI=2xDM+!#?uMl!KjC1lpwh*>E)A;Wwv3gT`dQK_p%y=99cCC&33 zUjJ(`R?2AMmBOoPadoZtV_nw>#|T-6%C$0FC%j%r@dg=g6y9X!TWT?(7Pr>o&RX17 zi`#24PJYf3OWje6@e1P#C-CKuChBgX^V}oDy;ZH)aAGYcNx5IRZLLnO#S|$I*5YB2 zhiommd6-&Td5U{fSx)}rMxLL(^>EcfdpQ**OB3Ib+Aq_L6%oNVDzGf?Ac1|r` zF#e*5dtvyp_$#$|)v|MWyfg`~n=-E!Z-_hn%~~w1#amJq2;UaE{d!0IUEzB|?ivTc z?E{62go|tO;eWFq*Wwc?bS@G3RLHWQiF_{nLinYSyHE2nagyb=SW%0W3cXIZ5!t>` z_^oi2aJ9`d+kRJz?UapyUWzi3V*4^T9Fni_^Wx=*Wx$h8*JuT=MRa0*5WUb zzs#$=Tnn-Ud+(Fnu<6)0GDQs5foh%Hw z?JT859d;3EDWuL<8M}(_W=d<3-Rsa#4fj;Imu2^^LmT7nfbLs|wx+lV*MExg+jf?Cim;2YtFSSz|03OmJ?hX?i+$$mV%U8Tgmkbi*+d1p(M`XHPrq4J^pB030GP6YLRP%W9llu zIe2XyuCK#&65aFp4d%bG4mXLrL%{mC)Ztdk-X=26R>&O+#|!VQ!#yH*)!}Xpc!CX^ zyUFd|I@~7%`9!5Anc)HH>}#^flsY_UPKpm#@u}jE*5R=_L~V6FZv06R>Q8YUichx` z#b?ByHP3T(m|@)Q?5sLGulnqihklMYPo)>?D$n^ZS@va-SA?(DReqN5HHAJK)x0{q zA!WXhd(E&$92ELgylhi-jL@h1B6=ah?M1ELfs&+fiFuhtH(& z(U;A?5GVOk;>UwQ!B_JM*ye4^n;<{v`Za z$mVNB=vh~XUyZM~wi~4UZu%c}_)~mazke&-DBL96Y=$i&th`lZyL#{9zkPjWuTSI&Z-_1+&^IbGOG$gxq` zwlaImf0poUVW0ZSo%&pb^!F8UA2itT0)-b^cDaVpzaAHvGC*XY&`s$j;)CijScGRW z%W@m4@X{*h<@Fe*klEp89%;%bkt^!qGsT^50fj+fNEjAA$d~^jQDIET%G`^Dc+!-V zh#PID9$AIkW+|_*AaqBkuKwTqa#4Co*iirP_aLL|aizqogs%8C;vB;m5x!5j)|Bf^ zxk2Pc({B>tv+gbGl%u*;3duNAZa0OM$JgV|dfYALu6l$t)e{sl>plqFtMI<6y_h8B z{(3wh;wF~hY??mxZqgIZJazUbFD^`pO;oje0DQ zIA8dt@GaqceECz4PwKI-9`D!V9f|L{lo{CR2le<+16x#&#nQKp=Ocw53#anoU*ywz zEUowc24j)W|582|GIV?KWj(&C$1;hWy+ci3QIC}p-J1Ej9^cpF8!2q~Z9P`iW3@uQ zEnFk=orN^~ApT=Leyhh%^;lPrpX;%<9>3UP;F55w;@A4hL)v;Zacg5kJ$|ppA5!>P zlG~s4m7je3yB=GmZ>+~AkMIYuTNHBfY*$3nBDODjw*Uwm715-K#znZ@Cpxl& zvb613#7;#tFQQqoa{1yq;l>oV7Den*M9bp8=NI>V*CJZ0`EEj<@4FYVr}!R1H-U8S zUBtms+7z)*5&MhpD{NcDe#Of8Ir0M}9#}*>iM+mXJE&OsQJnTg93jIY!b63J2@e(w_9f~+!VaFmm6)S(JlWk9^YIRZ(CoANrI*XiQA!~Lm z;*27?6>*xxQ;X!g|1rvA}%uj01>XGi%oGClR*jx3x^1w*Jv*lzpVK06?Iq)a%Mv(Vjr zZWZSnY-Y!a-!A0IGG4^J0=lb+yLsGYn^44kO5Ib$y&_I`$U2jXxL>>Pl*vU*;ik3^ z%I`Rx4;S%B5sz}wO8-ip$F#Fgi9b=q^rH8<>B%CVl83FPNg=sho@b;#Tl8KYI^`by zhW^YVW)&+xHF1EPv*nyq#0w()Ebw9xFNr&Y!&jtm2Ih*eqt|%GsRH@DV&&WU`9-{4 z#G6GdDB`WEj@;2?sf9(n!)u7$DBmk$kqW+F#0OQKF1B9S#I^mnh|h}nq=-*7jZ0L7 zU2|Jn#9SN6=W56%UlzT;Si(ya4Gfp56_4o(87kk@6!DG1udUj*MXVNIWeS_GG5&oK zKk!ncnm>wcdr$sz5x-PbUMJ4BzZS8+h~I4GyM6iHvVYhVQU9xmzooP0M!Q6BE@Dd& z|44Vwbz8-^D`ERm<&&DL$z5wys@&F_l)U>w(-L+N;cUA*=}sl=QbMy5nwxXy5?UB{ z9=ASQso}0A>?Xnk-MWOmOW3{S{fQo)CVP~;&mDUT_Y$&4ZaiN5sENB&wiVw`$n5?$ z<^!cn;h%sLIjHpSbAJ004k_VKb;Krz$>7Gu@Q4zQv}#9LwPU0lD?Co<_M)SBrxH#O zIlff+8#pH_x|II?{nnP+FD@kaL)1NFI8E47$m7CPFYz-< zI8*z=3r=q-Y{y6L6XtLwc@+8B#bNH^NyZyj;TbT;wIpR%(ur zUC{8N_)AsFE8{dSR;M4&M(@yeWzZQ^ZCDopGx>q zA%FFQllHR>fP8HU8%kJL!uk?^wSL_J{mpD{B!4LTX9=51_^X7C3jhAE$2tE|YD)>* zHDIgNWMAxk`v&h)Pg|n~Zw)sVk~C>R(+2FI&>46k+Nl988qiE)bK%Ynm4^Y>5s_O< zrCJGhwfe0Ux>9?H?MoDYo*ZDKV1BX1{`S~ zSN7-zbZEda4LH{HZO?8%A1hAfTzUEm={c{e39}bAU|<9KHQ*xY{jDLL1B_p+ z)FoDdPdkGfaH+x}!lCA5tIMQZE@b`TB5rIW#Yb6+qEFmkQgCJ85$Z;R!Dtxm421+YZ@?Ce2gh{ zUTf8^mv}=}iUX$MW+}H+=@f5kz&I)7wB6BwyA+OZz@1h4-3_>>0TZg)-dmMr+ldXB z)PM&h-d|;#Y@>4ZtI>^Wstn|hHsCQcGj!P}t(T`nrdj2uMV@KEvsF!4e1^iA!dX?R z*;Z#x175Hq^mBX3!dDvbn)s^?m}?>puQ%Wgh4ZW+#raj7LtW5-xBsiS@xR-E_Z#q@ znzI$f4;t`c0~R%4aa9-8KWf0o|5cVWV5yW(|6k?L8}J21>0dVBs|G9+=cCl}2CQhP z{LOimT`8TnjIWJ+(|~WqSD8ZFng;yQfbSZxUgGx+_@M#6i2vAtpBlVJsh@>3lXF|! zfOV$)YNdWNvY`RL8)uV08?aH~U&6nIBl!KVk{|BrZZ~0TAw5*~ zP_;dUdkHDBNE=n#N4T%BZB_mK%Q#x$0c9Lm#^K`a$~dTuL&Og*qkXyZg&;rPaywMv zVJ5QoBg#0^_T?xmeoPssm2qqtCzo+t8ON8=!BQQ|=wzJDPbhmIG)@$rB&0~Ca~a*r zI7QAb!mdK5XgIa(edy~h>>;E`rDqwv%Q#)mUcxhkXA0eC!?Vgbw~VvP-iNh5!gGYI zK!sahh35&+x73AY3@@Xf>hv$;k}@t*YJhN{@M1Hw$e=PVEn~1|W{7a8kSQLQ%T(ub z;V_{);v>okC>$vqRmK%+zurMO55z-bbBU?tij8qv36-)}J+3HP~ zk&!Z0t0-4Sv5b5fwGs$dkE4MPD0%>?#e4&uxJ2o5S@0Ibsbj}z}S~nM&sbo|3}r8fL%4cUzVv*36U{Th9oI6MH!;ZGF8Tu zNT!UL@9^DuI`jQZk)e=ED4A0dGRu%zA@dwE)PJ3|@AkjH=Q+>&ti9g#zWd$#?6dE= z=icvr*iOx^vh;4B`2Sz4=$1hD1a?gP|9{uoDbaX$whM=;kRA!_nn14vdM2=&9XsDG zPUiPN6Y)nFe6!EAdnB-@ntc@2HxZvZKB3yn_RGb&cLD?1 z*(sX9gs>TJDuJ|`%-j=8C)!FVp!bdhCW*OI_O1k`Bye}4@qxlUT>lnx zVc#na!F>tbZ!wcRkif$UOiSRw1g488IYYqA%uL~j5{++j(ff#)S+cXmPv-Z35_mF! z$3#-|I9IhWOXZ8gQwcny=F^GBug%X*U|s^xCgMj=W;pYCQS0@K%>@a(n!xi3yr`&! zvM(g!r?0%MUP|EQ1Qv;8U(E1I6Mij$Hxqb0fj1J3mptxWl<{~gfyD{DZLbJEHRURO zH-V26crSquxNdEp_XXG&qdpY=$ey525?GqRr&jry_5{k7CGbT8pNls=ewn~>MJ-nz z?iF7r@S_CZB=Btl-wS^y%TaS6KX6}?_@@L`B=BSOP0N?Bfydk*n6q;- z{*7pAwoGDc@mnS1t(dp*+o(wwC#MSwNMgGrb`aTBc6(V?+fAUm>?CDl)J|&doWw3k z^hh=ySdr&QdnVCG-rbVul|*mh-DUaIotiy_xlZ~fv3C-CCecsKUdhHYa5IPdh}@T> z7T`i? zc@jqoaMF%q8Nwr#fots8B!(t&oQ*v`+4$vr<~c#+iOI%$*prhuBZ*Uz7(pf(UtGg& z6qn+uNt~|cX|jCOZw7T{5@(A!OLn9z`yC~~UPcRWZpS2XaT4byaefl#S?^c@zQB!3 z;=&{@usp}Y*o&waxFm_oWD-{=aYGWXO2iK!>invDN)jR(uPIf+}v-y+MtZcE1R{wB)a zE_;V8#pG%4OyVwyiSHJeBz|%dQ<8WfiF=c{KZ*M^bxY);a%!@1k2Ecb2a}kd#0;C3 zUY_oAqQODKl%Eo5XWT zJZqKnl9+EXyIzpQq9mSA;>9EuCh>w?d>!Gkq?gA__8bwvoWv^``t1*F_r_ectEktrTZJEM0 zDQuO()?&=?zvPF%YMN1Om%=V7bWLH$6t+*HTM9eKYff=@VRppWol^1X+gaA6>LKs0 zDfAS$P9^Oo+=uu7DeRX*?-ce*VUHC0rqIV`Guy?UYBE*76!uABZ`)*d`wANwoBONT zU-kei8<4`_6b7a+D20PkI3$IG<)WS|oc2%-O5iZdA1-DnpZ{>eQ#c}pqvSeLgJOso z!ZB8VtN`_N9iPI`6iyOzg6xT@#w)_fDGU>HimbU{hjUO0JT--LQ#dV!vr;%cg)>t) zLo(*1fOnDvBU2ci!r3W|N;Q7d&s;?3q%bDc_F6t1&V zbUlY7nW-?5LR#TT*_8FRsF{&vFAT|9oKK;^#lS!Q5@Xg;0r@$39 zXVXt1QZq;)6fiSTw|Y+LO~N`khCVhWQ}xIKltQ@A6AJLQ^W2gqvg(mLU5 z>pgOrk&>U1!o6ZlCHJQ=J%y=a9*~_T%bDj+PW=q!c`${U;@gQN|8NSAh#{Vp!fcB< z(mBG9$v$p*)7_J5K9$1L0*0KM!hAKKm7QnL-E(R({{jJKUMTQ_?2FcGPURvsUryl_ z%fG718TGnl-VnotZ;4rK`L|PeNBCXY_bk6ez`XE%kiv&*nwmdOHNMpGi3Oj@yVS-m z6ZkyU_%7m?YA#RVYk{w1d2`NUzDYIyoA7rczfa*ufgjkT1V7mY$-B^BQutL~j_bD+ zeotXV3VeHOt`ue?|7QxTQdpV7-zoehF?p8#PYVC4X@)RN$ybXpbGT+2NMr4E{93S9 zy779kP8#c`8G8Q}$rtA!!^TVEQ^rnEIpB zIL2bSj!WZsH93<*1x}DPQ6~wXEX&watZTTy2-#Du*MywTlWxz*nR1<##>oHGj8b!S z8s{|e=V}_ylVz&00%j`4311+4p+YFQL%m$0=6G52Fyu0>N&W5rY~w)g3_mj}hqOygmJhh(3T>=C<5@PeJ4#-nP^ zN#n65o*nTi>AK&9SVM<}X?ENx?s=+|1#sG}dUr zYQ?7YByG)>cndX;xz=ilUjo){iGQ}moalAMtS4)}yVzEEeOW%H*r28Hw92f>_AQMs zVRo>9nvN20EIUkZDmN821KCWN1$1tSKeuI_TeLJ@cUa6;E!bLuZDh?Tx(ILAg03x% z8$T+y7s>m;ZUWt9ca$}cQ@Ca*+oh#(bKAqXWSN$Q?bd=`YVIyergux@ISJGDv3;3r zdr8wzc5hkpq>J;mukB)g@%>vGU#UI7f&rX!xdyi2AORM3umH~>SE*T+gIXGQ)Q7j= zh?e;8I|jGJXL*P$L&zN2(%6%aZi$!oF-k%Wy`0SBT5!CWp|U5)o+x{gthwr$hx*>K z?3#E)OZ;IFcYC@{Yrz>h%cm1qCBa$BFtP<_>%=jN$0(cj0X{kqHpQGP%nHW}oZo^A zS};zU1y_i!UolMPhTs8S98Q|L^VTQAEq+02S! zhRJ#(cArY+pjg{fE1ss4J6%g_hDfu{89P&?31`$J@-q3X7R(kl6F8@(@eiKZe7q&T zJLSP5sU&zx%BP$3&RR+U&&?8$Tz~@Hm#ZObrG4f%$z@R6PAXUcj>{Z^Z8rZChq0@;|F>Y{4A#h?O$KXbKo>GtCxf+wDO=kD zy4Dq5uZd}!!TK4r%V2{HHnhA+-adnkGU$-`{~pPAv`uE)MEXr-JIQV)ySXgICeMF% zE5&XtyG;h$3eejngYAU7T87DYAkLs$2Hi99mb;N&YbI!lc9M*fxkycd9vSSKiC^z{ z^vu9~3zxW;$lWvOE%2oTeT4hU?kQ{Z{e<_H-A9%g=-N+s{|x#!WoD`aGZ>h`0IMWJ z@j+^ugok8sXjAhr;lr(-njsb+A;1hrS>|ZV9BY9Y9ixU?4e^P>CuJ}!gOe?PiVYcV znGu#bP2hCdGi1+{Wpd6i?Z^yrc2-AaFxq<05g3zcd}HA}%a0W}KZ9|WF`MLt8C)dh zVqGI&0N7cy9A zNru0eiJv5xSK&n&ypqAo@{Y0d@T!`epVu>ZSNM$#-ppXJ@LRU3w=;N0%sd5h+L`>l z43=c@Ne1s{@PWMKKNR>#_G3#@%;QsTcLJQEr5P;C;ByI<^T*#ZSf0U`YSK&bR~dYr zX*_{6x4z$I@S_CZW$=9lKiJwRHfev#;O7i}&EOZw$aBTg{-!21JboAcLzdO9t?Z57Hel4XN~+i+4#L1&x@(Qjl^xU z*ic~oEH)4@Uh0{%eHI8hF zEwk9l>bK4|-s^3fMb|94SbjT!R^I$)u~Qa1WYJwrw=9b0yjW#BKK~cqC5s-}##vw` z?6+qYd&sq07QM3QExdacv-I*|?&|y4JbeZBl;tYz$LY$(FLry&GU2`!kmRwyn*C)D zP!!1lSsW~8pzJ}ij6FnvfK+n=B@uMJbDdjV)SNIg4r*74fEK_FJ=F*XljX1eOT} zBFndCaZ46AS?|pP-0N=5;`S_V%VMHcnsMD>m8R1>v$#vl-A(-DEFR8cN*2?yxHpTb zS=^V!{Sq+B1U_J!OglY`nOV%p;=v};$R4uHBLcHzXIql7bFz3`&Btt=Ph|0Ali%_(=0w|>h!aw*kxIKDc9#& ze9;uOT==UdhN-?$^V=-G6L?131^FMc_%Vy0Y!_sHZVLR>@++FiKZO63UD?F{EzAu6 zG?A->S7)(CF5b9!aMTc9OV-TfIytPL!@4=N$zi=Fp8B@7xj_!?gg4B^uOoD|&!L0G zhUu8YW;tw}!=_ShVq+=pWbx)XY>`7}HOWun=5H~RY@I{b9Ja}!OAg!G5XyLLXPetw z{SLNwdgB5tPrP#uJ#*MaOb^*zo4mW_&^w1-Vs^Jl7_~u%vWdPqjES#&7+$%$69=R4nu9_rp^;{ILUfVzo+CdJcnUT)sC=uLeqFpw|UOY zVRQ~><#2WmBdwCDMm6DcgvZzrc72}pjTx{B#*q9LJma% zG9`hl<*f);WotQfw^6PbF9%bB(k1EtM%R_FJ;^l{?KeX=I))EpkL38|cx!}KQagE>5w!^|8W5&2LK z4-1%_vvPPe7vGA{wi%dnj>XhGp2HJ4Je9+fHs=^S9G-<|a+qt+0&j-r<*+b^`C^{S zVS&Ij{{EW<40$1kMLE1^qh1nVr!VL5s_-k^YIH@srY4_AGm6I>IlO73-V#`>I*s?8 z9NrcAp4G7U_j6d9!v{HhlEa7MKg!`_0W)=s{nRvV6!~Qqf1bk^7L#9Y@mD!~E&PpT z=>0B-pK|zK%nv#IsOe&Ux@dpS;a9nSkv*R`{{ky)lbSzrSf%ElIjqd#pB(B@5dokFI%a zn@1N*Zf60#Jhsor?_74s$M4Aa_ON>%y(!3}XC6D{v5Ukzt8(_zBadD4jlT`=r|{kK z*gcP4l3gms^vle9i0qR`UjZ^)W_#r^Adh}|?4QTpdF;#H?X;M{{Uj#tpT_|fAIN_7 zwt}S&%;VrZ4zez$Jw*7>JO+-lf zkE_IAA$z4PPx^#Bt`WXkb^@RO2=FluGhZ)!gDjg|lL?j0v`K-K9Yu@fGZIt4BbP^B zd_lHoHB42`qoQUzDO+W0c{o<%3V2$XCR>n4XuXj@ohMO&H(8$VE-Ai6O|BMVG83Dc zWJZafl*gUoC#iY2&2Ud1lP#W-Z+x$VQTK_wUv_F94+wB$p=){`59Kk#Mm?CvOpCeZ zDR@}TM`UNocINNDuTO~g`_|oF#d3=?}*IH5LBLI{9 z+dRIL=6l&6^7v7Jnaw8oa~^+)`6Z8E^H?GLn=IGf?*gozu6 zf7M(iyIOXdCTh(>yqTkbwF_8FxC@{E^Wl$hCu!CzphE#|3fQoKw&K?>V1q)uV!zbI z#SA>!$<@AKzhzgzCSp3uZd~~P6}V{uokU)sz|Dm_%WfgdY+Kqq#9NEprhsj&w~GM( z=%#A{yA-f}0XvG>p@41$bXRQ*G@nWn>{P(c5}3=1Ob<18Eud!syA|S(t4Q*g!|#8} z)mwHC***pI72ty@GbdE;RX{(Hd&}-qz`g<|6`z~!uO^lK1r8|SK+ACQ2NrOcngkPe zWE;zqWoLVwTo=e*X!(oP{7*Ap%}Zr3lfB%Y-z(L;N|wD(5a7%ZUsJ%fYF=l(*B2U} z=HFOArhr5NDY=re++))MEw;%d*#b%hJ6Ez^l7fz)b}> z1w;k71^9*d&cu_YEGQt9l8c|Kk=54KY?U>|-(0}$1>91=Z6a?iG@dh0v;*hlnE9Dh zz&+C3DSKA|ciX~PDv!x(PO;>D1xzpC{sJD5eyS|@Odit;@wfPR?emzy4S_!aDmzn_ zmDBsMG>^#6Dqwa2k17Mj6mYFRrsm_aPslzg%UB9{Jgw$41EMSV&JXgR1 zk^-i#;fY%CmnX}Em|0>{BTPNp`43F0fcthd;_5M}?i^aSx%OvmE zDSc0QmdL&@`#}L8sxOm`;*V|ACjy_+T829<1{l6g88v4wck<5op%tLE0S+t@r^ zis&k4yJF+6X?r!9fq~sD?q0->!aK=wL#BYoE^78DVpoBlvVG+0RYV^(cQ2y10N)+# zK~mnnV)nE=Np{yyHLT0`;Ntf!;(#LdD`I~e)n7dOHAxP%{6O&s6>+ctQypTJ>~v5O zLy9;|%;7~0RxbnerAMYZLi~|dAFvYPV~QAF#IZ%3Qp9m$jxXXwfuTj5P{h|72rZA3 zia1#=Lo)3!HTn8ALg3UQ&M4wEP9uN+!MZ3rQ<&sga*dQFKT7=QBF+~$M|Ob?iPUHo$7aAG={>ut3QCjvgzKBcZCBDppE9AY>YOWHPV7)Bnnj)@kYLdCW zsd=MtLY6b15}+n+dne9VZ?1@H5&0rYMHJLgQI;B(RJJu#ELjt9itvhXElDL0-!?-5 zGJI*EtryX18K%A2;#;hqQ8SBpNX>_3sV6^6c(!F86<~(PEc18~PguNMbv~u$)3VPLF}H|k zh0V+`Esyy{JSTF2thuXMC`|7QMZ73HMq)CH)O@*!R|H;_oh0w;!qmJ`#G4kIgp1XD zTlSqI-W4!KQop2#_pSZ|0j?189~JSjnx8b0EdH}1mg+PuvuEvdd)DavQh2%SS55pk z!r#h%r-T&$peDhO0zb+AEXx9Z75GhdMG?PSo-T&)__K(WBL9;8+Y0FVSD0XxCD$lv z|CeP32&`3V+?%aqd4|xto|^wmR{H(dO>m|H<3B4`3M+tpP=u>LEd11(&)VC+9@S`FEG3mf5~%1DgN!S;9CgW(av!a*^sGzPN--O1QLy@m6yQ z19hKpxy^P(30JDqt4f$4zzk+M%y5lTUCUvXaD!&`dQAxHxv_+V7-FMONt{++Eq09T zE^E`~O2`WrEW_B3`24?wvg)anP%EKoN6lDA%4@VrsifYQl7Quf@{yi0+KvFF5#0BmX`1-JGEl+R4%jGKDQxX3M`lX zO7?46QwcZ8Z%g=&mtHA;f5#-WKS*GjKb7#aT&DS}@Nbq`VWa-AA%BWlX?aHdUBW*l z{A(F@vC4|+U85Y|Kd)H^%8dfnD#sH`*E(gaU&gv+v?<5;_Up;gMcmfn4J0N*zFisZ zE#EH3The-yrrEIZoPmdYZx zE2FEL#M=vSVu`zz(cSVp3QShzJFBo=%IG0r$e!hR%iXPvUgdb}BQ~~o8GFdZW*-aa z<(t7b`I|F*{!@;>+1O8(cX9ia;|~<}mE{Ibyni`<hAU)*4P+P0b6S)542#bapm(IiXIp->iyKne!^ICQTZfj<9PP z^1j4@Y-ss<8Ml|wTE?wq+*HQRmcKK{cv=|`l`*}H2g{gYdG zmHkYX;-%&I9*Ka*=Vg3hd6Hbo%ggvmYxrwfE+>*q^{q00SH}0YuOBpTbp0geXW3t@ zm&5$6j6bx=tSIAmt!FM>&gY+HtW=ZuuQL8A(kG zEir4WxsL3*vc}t{f(-37W; z;*FQgj%u2I+2hXYcb5u!2#}$xryb*N74))r_X>JjY{L6g(6@rUD%evwnVdY2eiiK9 z#OzzaK^5#*!GRU*U%>&Yq`w`$Iq3sLGIn4E95Ml`r9Gq)FXKZi7+k@i3Jz0~({i`~ zUDOP*q-h>miC@9vaCO0K?BZBq0=jq{U%^l@C&->C%Mc1q);yddJIv0>@CrrM6S5ZuUZqJeXN2dJ&6Aq7s_|yBwk*Lq0z5VA zRne}BHj=fiVgvE(+o%oIG#O~ytJ%SNI}!+QT*W2=n^w`udQH^kYId$-%PO{La?!h$ zZEjOVw<@-+qKjp=t77{qx~ggN>|kANcCTXRDs~jJQxm^S6+PALQN^xJ{BFV~&+b+9 zRkOG39#!;d^6qKzURCs~Vjng4wv)gN`-uB+l2xvsSWCggFw z%}IQtTnQ^kRnbyKT1|RQFBz-PRpC^TucBNIeRB~$-6RWsQj4AAP>%GHPcxM%Ni@eJ+_f&D8n8{U4vE;oL+%MNu zn}=zqRWYlI=~c`WIYahAS$ZE5c({s3EMsb$t>&XuJXXaVVZ%S(gvmTv#ZzLQZsO-w z@q87}R`FaF^DIAKfITj-j2ZGm%fDE~YgN3Y=AtTIsp4hpVn;k)wawQxSQGwc6(3ab zRu%76vABwNq)M^=TDfSMiyeORM-?V43xPQN?oM zFKu$her3Ji*!tq)~}&m z4I9+3p?J<4qZr=aMs=uRqZ&3*v!m?BvZf2#PBnC{VKb}WycWL)VUjIs*iyZioLkkf zwKUtJv@qK<*+0S&>w?i$SG?KjSq1~|-e+`nyPBrW-%-cCOd(<$1Gf+dH z8hX~SdkwoOu$L@dOhVhchCRfXW?w}S?`dWI#8A1nz&^73*07)DSwnvfjiWoDh69BM z*uj!K$a)XfxX5sF4%J`>)o_@AAqU$^h6o%{!;zNZ8sKytUBfZ8_!azES%Tw~lYnIm z)hwMLdtwbI2^iNYk`0p`F3S@!LVzoTv8UB=y7a_n)NrOSXOhj4!e`5lk{vBe7X@Q# zxUq(FYq-3I^J=)ThOsq_tKodB;f?eK!n{-EFfXcMd<_@ZaEVAx1@n-WUh!so}~RCe(11&1R~-T2sovYiqb(uIm(Q3cf)Mm5CZEH6&}uabeWZB0gPfJW0sZ zkmY$)0Zhg3i{@)6)ljIRsQl)w2j6bcTh?hJsMg@tP^-aFwqaV*)Oa-nwfH@+Z)*!{ zh%Dx}FZSjS6x8rY4L8*=xrUo-xTA(!YPhY2TW!HCW?~JuD~~yGoS8{A++D++HQXhh zHJD-Eqo^D7SY}EM(`&f5hN(5&SHt~U9%dS8AE;rPVn=CinPEl^Gi!KI8BD^5YIxYr z3`5xatQzLkFuR5)Yk0JV$7`6w)mTFp4f#=<>Iuy}>wKz)XKHxb7RlM0Tf?*Jg4onN zzlIlUc&>)$YgoX|!6sQ)!wU*z*G$EdUaDb{o%5G#ctv7XHB8>uYWSvx*K7EwhBs<> zw}v-sSggL@lBM$P8s1R`_QKVk<{$so@IehrYIt8GHD{JRvbzs;rdZ_1HGE#fCpCOl z!>3BcdZ=7l!!k9A&8hjKhUJR-vKBwt7{$%MhOe7KnEBfp{;J`-8h)+e`x<_#;fET2 zR21`=0)DRH7mb~Dl3{nh)$m6RD{A;%nOR;x75QfkD>Wj@xT47aT>~8aQ^V>S{;gq^ zdgmz29IoMDO$WU0Ou^*WaBLtGy*%jM z+Cdiw+c?-(8k1xUH-86RoyOH_Mzn*2Jsfm%(8ED@2Rk{~Q6Wq+j1PYt?4rzUvakir z@1U21o(^`C%oM{jwY!7fPW*fQ63LNxxu$M-$rvqNFtfU`-6Tfm%$yp-U*TMeE zwx2A+`#U(mVkW0%fP>)<20A##!9flVcW|(SLz!7JrsC-vk~1BgrBUnBd@A2Uk0|MtXBP*yD8$uGb7OkV#n8jSf-{5)P75nrS4TcF>|O7{!B^M%F>a zLC!(ZLEb^Zo@;s;RdP@k!^~-At~ziX)Eqd7|Ik>~YLruR3_m&JRh(zTx0g2X8u9;@~X@?>JcO;BB2X z3b@Qz_PY+=Q!z}!D~NgCckq#e4;*}G$3pTM?*9%xv2#L(`p+CJcd*pK7Y>#=_*|Kp zlVfD>?BYvRIE?$hgKr&t?ckfH3QdylY|bCJox1qZ!72woIrziD&klZb@QZ_ARUvCI zgI(d^clE_p%DG}+e>(Wv!Ab{zDH|^(t`LgzF#Ej*qqU~I4<)XcdOg1xci_KhYPOCb}Q@MqUEtQ!gVsbKDyV%~vHZHbvv8{_P^0E@n zFstpVCO0C6@8Dub7u{TRcjHyTa3&$YlZ&0*|KFvD@&4b%p&XHmyAA@lgUhFKaGo;eOwH1v9F8%?A^uwZhW1ZQ$u@ziv!*G zX{||4*FYBssSDP5u!}>K$ILM8AQvaNIEYd#k?_#JltdM0;cA|^nE>3cBij*hIGAEB=_8g6Hak`6BU7W_kl-aDMGhCdh zY-Z;tInu@TF3xr_-o+>v=ero~;#?Q!xEQ0%3^xUz=VGiKBP(J3<6K+(OqOhvt`ugw*G4h<{Vry@nCfD>iw9gxv*+DR=?oVS+A=8S zRrZjJM_fEClBr0}axt4{T$p9>tj%%pyo<+NJmcbV7f-o(!o`ycVOk!PJ*_4In{!>v zck!%?c~-MTGw_^?1!CBX8PP%)uex}_#Ud9kx_F6YD+9eer!TvBMKiF4-MwFP@rH}n zwMaN2%=0FT*W|F@#V)>c@wSVlF5YqRk&Aa-yzk;Y7fY;+6%OO)zb-zsD~$tWs*hcK zs=hu^gT(xf=`1s?*#W5kMmy@a%Fjm%-@EwB#Sboi z_yL#QdC`zq!48_{YU6)$^}i zC#$*nd+~nG*`t!N@UV`DwLGltH9iYA{JI|2^Wq(kO%Aq=7w-mbWyx&dVJ8n8df384 zI}aOsXzyVoFMc)Y;Ke&|T7ezKaM^6)VKWb#dg!EHn9yY2+(Tz+Omi4N|Mjq)hpjwp zqrSHG;=PnJysd{Wie)zTLfh3tHxJu;*g+c8Ba7_rVMpa;6iF&~_OPdiT|D&i(8EJd z<=NG1yh!aPz&T;;?jH6~Y;Rjt9}j(%pI-J$*n5caF&Nb9!~IZn1`c09L`hVVX%iG zQkoh#E>?1+7+wxXdpOR+F&>V!BQleDyoaIoe6ehXoao_H4<~sT=HX-yr^svOlR1Zb z7~#dAN}C1GZ!etY;S7!Lberc)HCaEijr4G_hqFDL=V6qGF&;*HI7d~{%Y!+2oa@Ec zESJPsx;&ikVVqVVU1m5Jdbo%sDTI|%e2IrEJ&gBoxra+VT;?@C>l~>!yjQ3OQ}$IJ zuJ$lN40|*QuThU|UgzNp57&E`;o$}kzK0t<Bd(=?;V zd#HLScqn@)dMHV077PVED!Nie@$bJpxbiw&@OqZ$sY%RU0xl#Ep@&;NL>_MPQ1{Sk z`!(n2W)HV$woQ{cZ}V_FXPA$GIKB1-NCVRNs!#z@(s?0K&qS~mu z&%*;A?)NZN^U0EiDcdwomu8H5b74N{;Uy0hdtp!(0!~O2bvbJlvn>D-RR0@&z7V@bJ8cg*G`C zq}ldg6hr+YUP>Nb_VA{MS3JD#;Z+Z>>AGVQo;Z%>4T(98WZv@dj)%n_-j;@)@}TBj z5AR7v%r4mb`yM{=@PUVq#D6GDFPI8=V>VVQ@|JS>%$)5wDY?o^*^ub}2j?qfcd zb6@rGm4_7`zV`5=hi^Q5@8Mey-|4)t(*ZgQjQzpp|H;Fz9)9-li>_#9V{+Qx)Ez@O zsNX&O>){U%e|h-R!%AI2g45=VK!u?R|7m9@c3z9er%< z$FCsNFpywVA6xq95K$79R`sn4Or;pu~pI!4XHPG9e zgY~h8k3D_#@zK|hcd-9r_wv!tj-3-8NBP*_$G$%HQ-x;u97TU02dH1lSP#1x;A60l zfj$oQagbaj+2bKT4)bxSk3pJ4GQ6Oef!@RItPb&U9IIv5K92Nplpnt`GIJcx`+pzD z+OaT}+xYQ5PV_O<#|f&6sZ3ud`8Zi!Gm1)*!+gBtW4Mp1j}bn``#9Cd7$2wkILpWB zKF*Z>42}A~JR^OK_Hnk4QR0Uw6_?*R5_7t!JlDsCKF;$o&c|3E=W8rxe%Sj3whSsS z6292SB^m|292%9E`bhY=%*Qo8F86Vjk1Kp!X)B?OlQ6-@)m%~Pk(Pni`nbWzbv~}Q zV>gp|qY5y}q>r4Bl#h&$w2v0Mx{NZbdd%GBeUy9@d=%{rvoH>@?4u&tD0NDv=3|-< z$H(nHTpz7IJRhMC-$!5v%bZk3KI(q_y2kEIk2m?a)yK^~Zjq8*@Fdc8n~#ZhP8i6L zJA6#x+4pfbGx)g6R>j%i(C+au*^lq>%zZEO-0S0h<-AXpi+QS#2kabj@~N5b<4GSg ze9ZFkppS=q%(RP{X&?6Sh^CHdSp%z@%}dP3qdw-?^~u6Gw8wosq27s2=BIo-=i_M~ z&-!@A$6TE$t`nwW=6OEm+jGYdRjhXRz`8->naMaQ+XQGEG+s5Bja_dL zpq(@u$}(a503D?HZ^AnU=p10<0G$GC5@6Gy@o56PW|GYUY%V>UTsd5~TLjoTz?K2F zQciPkK;*8n>Q*gin_06PTerYL5kfKfXJ*hvhdSRU8gE&+N5 z=n-Jo0MF^=-iUW=8rtpw_6pEDK;Hm+1n9#->6G!T@dWK@l^kQg0Q&~mn~Zv4k35)g zKWT_rM*jfQ0~`?G$^ZujI5ofkPC|fz0S*grP=G@uJ~)V9C8<9&z#x*k@Xa1|I9&k- z2N)ur#n8){IWoXeiZ#n=6!-rCCj~e*z|a841vs9=l-OiGA;5{!^V(+!lbjr2Sb$UP zq>&sRV1zX03{rDifb#>K9$-{}GXk6y;7kcPI?n3I0B37{*feE~4sdROa{`R9b7E4R z7hr4xDw*{DJ=aYGEmy2g-Qh+G|?hJ5GfV%?Rt?P>d zW?*fTC1W@*u6qMa4RBw8`$Z13FAWa_m}X@RWbZQqED!KtfL8*{ z)(Ww1h_yqk6UMJ==A6>57otrVNAbjwr(HjcUkEk`v0>PFI%HOC`w*Li=n$f#1RI5o zrz;z)X%cSARBCooPEO9|YI5qBe2WmhLu?sh#}HeE=o(_{5Zi{>CXD|gpo^xZONi|# z5bmY_?67@^ZW8PuOILRRhP3kee~4W}?5tjP3DF~r|4{|&r1YQ$rla2^4>Lh{2rd5JS{tU+uX6hd3$(=Y+rN&$Jx%F(FP0acqd8A&v`i zyv@0-YC9psiFV!?#gLOj3=eTih+$H4MVUM!)Ffs{r-c|B;`9)sLYxueEV<5<<qVKZ-@! zCJW!gg{N^%32`qMx#o%j4)FdE&xe>A;;|49gm^f_v=9%5m>yzA*myp;A@NIwek ziSmCe4HJIKN#+>Uo!L&8g;*8h^AJCW_#(u&A-?2>A7Xikuh5ENy#Q< zwA(~DFv7MG`bFpxVV4NoMd%)(D?8%fe?{0KieHk5yNMx~%uPe&PO>}88cmM~yQ{ft zgq{MsMd+nK3XGcZux5q{}&d#Tqy`d3Kif}@N6QlSK-h1odi8wjJDfS#0et3klB8-S|dW2IWoTi*i zLNTMxh;XJd@C+JeWQ0-5aCQ{0aFU}VoMU@$oahMSBb*muT!gU-KVKoEb!IQ%Fe6+T z;Uc+A!L*mCX%@hx5w41GS%fP@UM_2rUuo-~5aAl}SF3kc!q{tVCD&_;ZirBbaASl_ zghYf?grq_^G-gXjXpx@Sl#z{)SN@#BnUe=y#RyJ>QiN)Ra)gTY^7PSLQVNX z@RY_UJ;I$4S|i-X*^Y2agqyA24F6UoB%T=I4!Leu1{O0(fG*a2SA_c` z+#O*`gnJ@PZt8`Cdn4Q@#+-dJQzJ}|@IZuVmS;W8IU~Y@>V@_5Ao);)mm@qJ;h6}J zM0g^?tO#==%#QGA)VML@aCi^!ScJ!Uh3XaD{OaJ757hzt6 z`BCG4$TAPZ7f4LZ*VBa&UW)KSgcn7Up@1)B^e(bFU*YnL@M?s&BfJ*j%?PhYc*EwT zp5nJ6ERGuYBuql)od`=Jyc^*?)l7y5Unt*?@Ie#9N%$zjvIrluy9l2|_*DIpr=E7H znx-T&pR4&r)c7r(JHo%>|B>a{SruWmt%}uh64tC^?K)7$TJ`um zl4PB<>!?YFQR~&wzK%9x+Sai_9qU^!l^fR4PEDRuHmUDW$HrndlI=)=CTf#9HmhUP zIy%)GGsFCxZQ9MPW{Wy{*0E(BUF+DYj%}4;YuRmNXG-5ic)NPMn=yR*I(DgJ2d1r~ zTOHlyZIz3^vc6LtJKOvevzQ(d5br9$vUjUv?>c(bu}2-di|j3HW}{CXd)3jmjy>z~ zy#xb!u=0L3568Yw9sAd@uVwZVVCMdH45;IPIu2xhO)q1ac3?ez!7|Ljb&O`_I!>(P z&^m_5HK>lm>KI(d;cA*Fh7cT4$FX%BS;x_J9A)by&*K=|?{RgUP{;9g3>DK~URst! z*-3SbtmEW5POsyXI!4qntd8M2FJ{QpoLa|es+l42K)C;_k~8Z#%g!fHHbS6ubH$%m$N6=PZ5qqCIxc8xnmiYYxmflR>%Fv&D}^ts<8py3WZ4(j z!&MefsN-s3lj_UCUKN1=}E>qymcLmdgt#*MPv7Lo$Y!?#H3Iu~BQ)lsdZTt}rI|0`j$$c?6E^==(O9bO&27*3;^v9ONFUIm6}t>d0L zZmQ#sI&QAxwmNR9zGx?({;?QV@@59 zD%C!!^RYUftmE-Ip0JghbMchb@Je~6js?7O>zF6oQpbCByjsUwb-Y%`8+E+SYgzTvzA3R8)Z#kcQS)s(8_fA` z9W#}jc!|94*YSaX8P`WzS0C50ROBahd@AsnvAP77N%Ohv7qUFvOt@V5E7`B>_+H?f zI=&TP{_ku@KXAhr`6Ks#0ftlXi}0^a%!)cXwBmQ}+pYMcj(_X;lN){=E9>}6**GU0 zFUS6mn#7!|RduY{iq&L znKx)fyH;!{#;gFp!jw-x}3;8u?B_c+T`BxD{!h)_tzBoP($5k-g+hixhJI_Wr~CZh{@?3*uXU|^-RoY@^S=At`|PvNIfb)oaBdAc)u3|? z&ejP1HGK15gD&#BgkAaOzXli7plc1zmu;};9S%L+YtX9(J!)`K4KCz0R|uneS|*kM z)u6Y^ioUTff)1tOl1G?^jd(SB%{EApIp?S%U#0SD9y^$kjq7 z52~sD8o=NhTr0xMHAIBsP(3arF@DBdgW)yRZ=bIh-XP?sh*U<@RDYzxV`L3(GS1|i zc~@{V!qLJpLW;L~#>duRTut?(MMe=FxkCmjch+Enr+Zforqtl>8cgzt_lQpx-m5_u zGF8fb!fB>IP=lG`57uCM4Q7ZxB+tV_F8YX>$!Cer7CtI;`<&z9R32CPgeBC}AXo#R zM1KteB8_JkGF#a6Xbs}xF;mxN-jtidAw z4LBdZ+=JU4XuK;NY5+2XgV4*}V;gsjBd_lHFLUtFM{!$HI z7k{}1uZX-Ve9fH9c|!`xn<5;4OXTeuEcL8ToyR*;-Zg!>$O2|?yj=Aa1Y_0nsSB~mawtVxFNsTqizEI9%wGZ}8zJA8zzjzkwPd94TbU1mY+kZZ?I_l+og2 zgf!gB8%8!d$4VS0951|G$f-L;=;5ch6Mb8M{C$@XcT1lnqDIg z*G>DX@A}yC^B2S9%xX(H88}$*p}~iu4<%D*re5};VhT%&Jf4y=--iVvPYZe3*;?qs z3o4%#J|}$MSN*8g%`TF%*oPNI_)dWO%Rap6!z)r)zAEyX@O5AH4Z|DStxH%U{Vn0! zzUuG9QeURW_Z=b6l#enW>-T(Et~+6c4k2|ICL~ zdfY$vVYODI$b&1c@!@M9zO=jID^K?uAHJ1N8_nPOuwLc&KK$UrI!}v+A3f#IKK$;( z1|NQv_=}L6VaRW~0&ewJxzn#U1_F#gCoTV!5+gBu)I-&5x#j>}pf=yQfSu^ECHke?Ru{V=q7U^klXW z-&?qk#`m?5{cQFCKMoQ<&|iI~GyGtcJO%QWejKjyP~l-V-pY?7{WwCR+y7CXsiRFl z#*a3}c`nEKae^Pm`_a~NINMGJ-Zm$S&_D&nVBxEz(E(F~*Ov z(r*>s=JAX(e!IvW!aIc%{Fo@hAJ6eKRfgZKa*`kSh;Y%#TB33FDW>1&$Af-Mv+n(V zJYbwT)BTtw=R>+;4~x(6;}Lmg3f=h*(7mRm{MEM#wL+5W@BfHrJW5tPC(N5(5TU=MG(Of1TDR;+ zMan!O_r}(I4`)g78Jk+DXEDX+bfKOX(!l$T$0B8tPFZ=PDAFo*Xs(GC44L{zr z))FIZz3s;`KbA^yPG-JihWGqf;m2}M_kBM;ux_LOBR@Viait%hXlb|G&-_?rE$3gY z?iZH1#*Z&;s~q{-kF|b$s+|*tHw6J8S>=VHL0qm=h{cNytp9cnTh{S^eI9SB3 z;${yG;P3zr^W;-+W%)-2aEwNd3ZS(mA8p+>0URH|u>l-sEtlCgfD-~}XJX?{P72`E z0NMx8A%K%TE1qJ3Zv3p4r^Al&oF(k!ne8m+IUYYl&Q*Dyu&a>b1p##PEYw}R zhjsbyMqU&Ev8Qmj{@Ue#0bFcl?*J|_PFo-GzQW5qdcOcTdqn{KMd)Nn9H8WCg|I3p#XU=8|B1O}g-w?n&m1SYYw)9j03j&xg(e3|fwVny!*#H)L5}vaW z+Fl6Ya zvFor!5c>tOw`^4Q5!qMhJo}3uV9G&391+C9K^!XO5MfJ;Jxt}{L9{ZzTjj_gjt=4| ziLHfBKSsQbklS`E9;fnnA(eJPoD{?fDo+%;Sz`MjPBw+(r)V2|oj+CLX+kEP5yaU+ zoT;*75N8FeUt2r!$EH%q>FKQ5bA(;&bf}+ap01kWq8F&!P1s%7L&*1X^j{?2Q`k$h zd=%KaSW0i<@F1=?!wp7g8xh3KGK>`76vQZz#_?N%7;VZJ&!97mRcoAZd=R&L z3=F?BhzT}3F^Idw-QGApDTsTlJ6VLMKP89%YDXBnR@@~Duj%n9O&Am#?EA67gr(S2(1q!jWR5r+7K2$&%lL|A&r6gL%> z7_$+Ii6H8NNCuJeIBU(oSbE&7<5{(G!h8?~n{r);4M98=L^+5`u=;%;#d#u*vz)If zmQS1EnIIMh@tpK$t^2&XFPMk^#o{jp@p2F^dGuF;cq52cgLus&zHT{hN?hV;y&c56 z>Mj*76TV~q_kwsoh~+9*c&0uG;-erwl+t)EBrAjXJcv)Ef2yg^f>>o~&bgZRo0Kn1 z=XLnf!@m~)CWvo?_)dJSb-(wlxGsp_f>~Inr7zTZeFB2uFv|HiTnBI8MoJLO9mrIo`wD$#8FML+I>Tj$)S(&X?_6;dvo+ zmBFoYK?oOy&@F@>61#f>X>gvNA@mKQR|uETBiqHYF}%0Of2mr1Ot~zCD?+$jWj_-+ z(m#X&a$afTRVv+DSBEepglj?=9Ks-veyz;z9EVE3PUw{3A>63)df^S0JR*dfLKx|B zj`HwZLYNrB=n(D*VN3|OsdcLv#@dSGLKtu2?UsCJ2osFEopUF5$#%Et_k=JlgvlXH z4dLDprdWvc-)A-s-XFq)Av_?(oze6V9`YDCGDG8!ctU2$Fgt{~Av`MnSO{~ronqSK zAw03ISfkQsBEthA1eF{LAreAZ-0d^!S&?b+5E2?p3f*pNL&%0uCnX(1eFzy(*LiXw zltRddP*97n2GonR`o7}^frn;R(PCSLfBT=PI!Wl$z0m4-ad@e!#FvNQ^V*G#wiNyZ{5?(zlJwP7@bs} z8Aiu2&a$Ol4l~aVqq9WvbL8YXo*PE5FwP63hgx03I6sVT;unOgKfYvgcUy%~7lzR@ zjEgL%ai9P5D81!p>yj`o74KsTm%c2F;bB}J#?@i;3u8bSSA@}D<6Q1a5w~aJRT>;9 zG1(0FicGPR z&ilfcCL8(vVN4I>0hJGWJP%2ESPE@?j2@9PQ#eb=ozE7b;ju6RGS3NPZWvF9KW^P8 zRn`c7Lcfp+oFxXs2+16l9uY=`F^@A5Mk$PB81*uz!l+fZPM8*EJbor;!^nkE2qW*& zi{ftShA`%ZQC1-R6|+4R#?un#3m2Hqsb|C&n(|y2FNE>DCD5=aj90=~9L7r$UldY* zSvNd?WJCUH7;j2{EsWR0c*8tw@s)}@Sz`Hbhw)JuOT$*Dy9{>K7ru=y1coh4E(?zlX6YjExpf{SQyVUmorP z|B>_GFt&?SU+Vu0V~Z4WXV^XhM6iRp?%M7s&hE|;>=wZ;5j2TZU&%SbqiF=Y%0SMi zUb6^xH$Ro;=G;@_Ue;ZP%4iTr=QU;1~{(58t zhexV^Fy2Z?azq42io2h7aVM>{^wANNwe2=4j};y#q~~~zkhGI>g6SuUoFsH#{!Wgd zgUVBcrwUIK^6AfnGa}V*mw22hk;Hx7caI$nXGhRkEvIx5KUa93&|Q2w&yQ69=Kn=-u?AW8R*U4)2rk!1p9uQe>}9&7?DjL|3X%Rc zH6VhkBe+W9Kw&js$2BT>3WF7Lt(8L}7^*Aa&Td!)H%2gAf!E8!@f)-~8b(AgDuR(L zBmduTH1V^to6UJkr25;r9N`I$(L!tZ?>|Q{F@muXjE`WPodU1J?GfA=!5x}qNhb#< z*rnia$lMjd-Re#fx^tN%`{y$9lD}sL{ZWjJ6u}%D0WtBr|8zlZkH&U7;hZeHHzIl3A;zJm&)c*>=DJD+xlBXv5&fY+sM8~8UqiA z;)o~?jN-5;4vOLs84k9bmQfsP+>IPA19>ZpIx>o*#gB@jwRL%d$3$^#6m2{Tr;f9< zwl+@jgeXpr;>0LUj^ZTg?LFNNQJi8^r$%v_ad!>Rh~n%h&Wz$LjdZlZPDYsDIf^ct zI>%-yp6fAmjpBSy*)58Tqv#&Rg;Dg7PCu8sD2iSxdwR_OGu}Ij%cHm?ioQ`?8bu$^ zTAaPilhZGX{wlAq*(;+MVBDS8K#gB5q;gFZgQB=r7?QmKY52|~=@BwqOJ3WerR66I3C?1XCktk+GG1H^Z z_KZ9h#axwhOnlsy<8Ghya9I0t#0ukwNzy2a2#p6=#!$rr_NX$(DO>lMSrZrnn8$8gEE{yu7P zwy*TdJl%dC-ro}3=J`JPs#x`#nt?)&Un4WSgGBh&_u3e)k6}m*!($jK@jBr!p?lLv zf8)Ey8)LXRh7mE`B*RFvjf!pk@gkkKh>wn8tjL%cZjIqKkAZnrOTNqK1(>;qdykI z98bbrwYbm|G5BM6Qe}0z6VN{Pjg5Q&?fjG;D$l=&M^+>wm*dLjQ| zhb$jHzW&FMkD(yWMX3-==4mjUVnyOSA#aRT{P}MT#0A2qh0h2V3hCk0bMim0yNKl? zl_ZNr_=(C(ro0@(E5_Y7Ag{&nx|BDB{T0Yh1D5DsCE@XQ3`6yI7{2GFmiU7RFZKEuevaYC7=E%AN9f_PL4)-C8p9u2`nMQ!ZbYoCCUP@bG zJ0YJYCyJaD$0>2Nk5^xpPL894bvZ?a$Ej+$vWmQn{P0KkKizw0iFXoKf5VFJ|KnS~ zJe?Cq7vnUar>L%SGWmR!^t&8l_c(gUPkvz>7m4$U!?IT#y;;U_6o3Cm_zeFJkstnx zQ)JmEUj0CcN8dOuGk!U9BoeO>?=QSkI6%k;g57~}Tph=tIIi)CgT>jsR+pV*s43Tp z42xs9DK6)RIBt|OLO9aX9Tl&BYH^N!U7uIr7F~hSaf}hURmk&YYpgiQIFa$f+vC-L zKZ+ucJL8xjaiTfz65(qRyOZL$Cyps`Ot$X5BK!+YcBjU1pXt1|RQMx?2c$eGoNnER z;?=K=H1L=a$0MfC6q%)q?7EM}@tDLp=9wF>{_AJ#K4Hp}any+WOySiChzErsVOYq= z(IrP!#)R=W5+ZETkkakS2ZeVgk2;lcKE-s;@YL$#$m%Z2X^Ki-CC53%l7BhE!G<_0 zag_O-l`>U0FJArkA)PW`tp!4g&&2Vp_(D^ji{l0H=Y=gb$R#+wSjvmSmxN4sC63qQ zcvU4muX)yD_f6?bth=Xj-i~9bDa%CO5z^1c$nA4^94jQgZ%%eU6#vM~bgs1SCvkil z$7i0^SH-KJNxHPvaeNWSmvOA|%(C@W9A8@k^QnBRa;@cjukr`;tl{f_96!hLqYNDR z$($SH`Necb{l+I+9KYMF%ipAu{LeVH#PL@g|HQFb;@=)8ufxA_{AUUuuk z64)V8eTksLW5>kS$9LxhnkKM|JWYgd(Ot#qWZBI4?g=zE?reJ|uvY^6B+$b2y+zn{ zhW$+6KY;^`PvYnQ3A9Y$-~vZcJ=_lkYM|CNP?3oxshqjWRQLc#E7aZA=2U zCUBe9YJ7DXm%yC~j8EVWP2H}m?fks#6B4*9fr%FAmLpC|U`hh_Brw@_&b96}+tdW^ zPvE`;rkUaf>3P8X(-U|kfrn&xIDr|a^PnX)@V0DAgm2mGQjulCcZ5vle%?#q z{REaLw*G8xg<8BUJU&R^L+OiDQu$cr$^4o(Tb&^jX4=|ocQrcw6!T3sGpETdnqR-agxW+ z?#U`UnEzD8o|eSvrf~cW;~kUeoWxm4oGqo3?ZNGzY3E4qVi)1OB)TQhHHiz7IA1Nd zALs9GN{_~zB>tz_p2A+1bFm1oVQ*6|73m}FYa$IiE>EIg68$A!p=5XQuQbl`sw4)= zKz_B24@zQK5`&W%lEk&vu?@X8D~O zzgwA>#6!vIpT^vu!~-G^3a1O5hxl+3Gm>~jBBy40y0eq;CGltyk0o>_kqkt70Af=Psv2-z&B8dr}>j3p8G1SXTnB#~09R#=xr+GF5&eG;W4 zvPl$@$R&~Ygu9Iu&EJs3yd=shD<;yzcwRZrB(YG03q33HoaMie#EasK zG`QIGmyEnD@`}YW;Wa6*C-H`PC@x82naa14cw2XkCRxbr9TmVYTIz;RW{4DRwwa=x@#nUDgKr4YvDISIyt*GiFHYQC+GJ< z>OXkW)_eF*8vI$xh9rJ5|F0synRBD*n{1&!llU)*zmoVzt<6dNZDua_ulc#3E#ljy zs<-#{LK29u%VWnBc1mIA)YiL{U5ZU)Xqv)qDeP)f)Y)yOa`zOPr?7|RxT(EVwh-=Z zt$mE_m%_m*?62~G6b>}~AQ6{vi1C&w9BKx(cpRQWE9-J6M|yZ`<9t7JObW-R(8iQw zQ#j5zr`n2>v`gUx@e@tq679uLPT>@h4xVdrY6_=Gbo)HR_?aRdQ#i{MhMz6o*_3lc zsGpm{1u2}D!ud+>>d9xEcwxzYj$SkAx{2B&bfIj>1!ka3P&D?UUx)T0ke;RaWxaJ`7jztKD+ zQW)vcN11-JN94$u6vj%qHHF(et#RfbZ~Nr=-jTwcrcX#=qH*TjoxiG+ob6r$#jnKN!mGKI9nR0_4$t+Q@M#GN}an?lY!`4kE%lu{^~ znT7^+oxhU8e3kQ3c*>^OS|I*(3JX(s#-qEb=Tdk%h38XvQLPtJSY)2XBF^@bXHi~| zS5tU9h1XJ8BG2pUz9D?mrrxp~m#|dbW!8N+h4;nZ6D}97uTSs?MMPn&)rR|J8E;32E43y7Qy9`cl7xaL3x} z*9Euk&b8P@B9$i6Nt#O8wHCWs%b6WEw{ezx)?zPt$Xl3sACY~9`&oB?>mFE(!)kF* zEe=u6!KSyg)ep7&!>z^eBWiJ6Esm_kF||0#oULndw3)f>HpY)Na(pe?)uOHKfgTGwML2DY$cteYcWpc7~!qL+k|6<+}`+F+*ym;Ro)@wpxgF@T1?c2?-JfEoMfj! z&*WM>REv9S@jxx6)M8pKrYhk+kB4dZ+gcA={&Z6wuEnfc%rO0tTFf-g{Mp7IwLqpt zbUob;AFss|weZXKWG!mU?=yeEl%PmR$k~YL(OSf0jtgCE)xhUBZ%BQPR4Y;^ObcnK z=OADFg*hS1d@XYNo{K+cDb{ZN+Y^Q~XsRr9-C{KDgO{;#BPt*`A` z@#=jmzE;ThqTh@BAY^x)$og9RD8gBad@P7OHq_!5>Awnp6H@Q0?nafHgntNmh5r)S zETr@ATKrRsfAuJ^Wd47~x2xNFhiqR57~er;$GYk#&-CxClKa`Eu6n~X5mMjP{JV)X z6YgGz=H{n|$DVc7AHR~cF#p~n`HFJ?2TD1}bZ+Ai@s@RHC30vT4ihIw_vAWs@N`eDt3CyI zoF;O*kk70$MLJsdERjxi)i19!cdpy|bJ%n0(8V~H<8$Xc?nlb`LSAi(-Nd^Kdk8ON zpspU%ILK4rgWii*ude!p<#Dk{Zz0c)%BA9c>d;r@G9h&?!GwNwxI!17ynkKw_W((F z43K!0DU7;Wr_ZTDbr>Q(Sa_}JLq)C=(m%}Zmg}Y5U^>G`h>sNBB&5g@9yizF7Ad2J zRL0odLVjBv#!4S&T@Kz}hx_VqM;#{D;ZErj>M*Ge6UFZ`=iPPHR}8nxJ(hW|b*Hdv zoEK-B`2E5M>hPcl$KCz>P#qqT^007*-Agm;FsBZ)B+jnGV$#EL?Q@MW{2bg|fy86GwvcKkgoo(@hytgDmH1e*R;eXF62;I^nQ1 zhKp3MjJ}rLkjBkv+?d8l=_7>hF}*2`QJ(UaG;UQnI*lo`GEVw<;q5|- zcj(G+pX3wL)psl;ccpP}8h590PrCYl3r^A!hdC zaIN|@N@--%$fuE0E3T1(cu~j)j)M(p%uAyzg=NLA|5ItqxBV>8CFR~|c!pb*d0`sQ zrty3l&)F;kUl4cq{NglTN#n&dUXsW&dRc^LAWB{nIqor14oAtJ7Ge z+0TU>=R#i?cPoCG-unL+f1SpmWyEMKv&sq`g=X()8#6P5~ul$T!Z=N61_$iH_ z?NM{r|CcoWN#oZvHl^{KoWG~B(Ly-R%sp2y7=kJoKzP)7GG=pXt?3%%DN}$4P z#owLVJ%c?m)vpoFGu2mb>U%2Cokfcb_RC;zDfhWGdMbfqolVMavR*zF~-}79Gd~3hHUZR zRND+rmfkLd6EZkS{6wMqLeO5EIURU{8Jv>AX&IaxGGb9{p>H%-9J}na7_k-xFy@( z;0&(S;E>GLZyfltb{+2ozWEmp7hW%Pf7gGb_=pTfiHywPCJ~O%;5_8FWH4I#7~!o# z*Bz^k(ZlWW7_ahn;T<|DiW5|lOcc2*gS$m0WvaiFb&rr;@_WrWC4;Hr_n9(HgioIb zGMJvhg9>-onHP%W;S6Tj{ps|X_HfWJJA+59%kr@d=2*g9)1Sz|m%)=6)R^Lu{TT!- zs&U0o2H^}M+dAownUcsLlR+|rx(rhGxYt@v+7t%Xd$?OMZ#I_24CX7dltBZZ&KZ2Wu@EOf()L^;OPvW&ES~~7FyROJA9rm7t&v_-EwxZap$4(vdz9~gss;zcsqkP zGFT%2o1WHNmasH~_cBPkFQ)vK!FKidJ%hh8 z*qFf|O50?af6C_eyg7q^Gx$4$e{9yR_+JKF%#<`!P>&tzx4zQ4gqJJ$r4d>{E~Z>#=V=_S;rJz@pr`2YJdv z%z0=%T1h`lc(})NL_Lo5l&v+=xQAov(WV|J)Z^HC9535(mdWMX)}x)3967Nb?dx%p zZ0x#_lRe?5h@WaBr>i_ec&5j8Ry{gd$&j<_(OKm=!Y;ydh35&~Lg$NLAmr-ZY!$bY z3r)YsqxW*-!i$Byt?M$0ed^KIW-k-Dd|OZddR%Er<5^!-kAd~L+H{vTNaKU+ah=Gu z^%zo*q2i6p4XelX^%yR(G3|zJJx;%=9=FtElv+1?45P)zc$C}fF;3-Jk2v1=9Yz>C z!Nc8_?v}#VBx_AJLXpRmZO@U)G#Ty}K49kQMre4r9*@;yMm=WL;}Pi;XPRNQDUVw6 zoO(Piajq%!KOyBwQ+)LZ)x$3_Utoy6TZ)VtNy372d9)H&3?|S?teY4rP#6KSXpG|G?h}&m@EOsRF{lCy~y@vbk`VK-^E={na`kivvBg z>>ixOAyQfj4;8xE!#z&EBRwKpeP4Q{kZ)`GZ9?lTj?QlVRQ#Ci*6*F^IW~*qWaCa) zw$;)k?Xoz*I9n%WaatDbvp6M-lcjgi6rJpz>Pa{~i!-crne=qb;w*`sJei%d=$gej zS)7|i7wOJVJkMi0-_p8e(KCzgSzIWkhsSe~d3rhGN$Z_OABmS_ajDt3B_4gVxXk0E z(ocpf%yy;70C}#;VxZ}Ca+B9&F+{CFSq#qNTI;&A7@EZ}Dc8xvk>OcfZ`>siZ_Hvu z7Ng`GnZ->ajoq6qlgeoEF~VDgw|UaWWiejj?ZP{`D zvnXUyQdH3s*kH~|7W1>1m&H?_E;q9vi>J-wcDOK$=d*ZLA`Q=3_XUwfS-hCVVuduG z(My*3N*1rn_NwqTo2By&dEPYTtt{Tn;_WP!+UznT@0jPkELMmwH|2ei53=~s6z-7W zA7}Ap7Avz@oy8|ve5UTF7Pu;l&y73(7c!8qv7E26SewPyS$ty(yWe{Fcb4!&7C&XN zE{h+tSnn~oS!~wGUp7eR-xmIF7F)9T z&q}sHnkQFyXCM~4$X4dBZu8{Xzppb{5?%+ zA;OWpEr*7ECGIC>e{&v~!y!@*5*}>+mLi7=4-+zhfvs|Alfw}?w9es3=|_3GM~l;T zjFDq=I9~iXQ`*|n?Tnn5!>Ku(ltYIc+UIbxIho_m>lAakJ)EAyIXRq>!&y0;nL|hG zI)A4e&Nij9MY)_VIh^ZJy3&@z`8jlxc!9OL=g`9vICvp-l|6;Mti|On)<|!m+uNl% z^vj`74wp&nE2NXh<;Jhb;mREPd!_~`)9rs?4uf;JTHR}M801-wOI(}75X*7?>v9;8 z!>}B#mpq3*M#krGyG^AK|{D&}{qP=6|i`SL8t;h7ws z_W0RdX#VGNSe(Q2IV{TIg>5~IdQr+tIlLnBvQ4>FUd!Pv>96PTMh;7Ic=P`x(D}Be zmgca`(|yO8@n#CI0% zVmd!B;EXR!>pz^>x z4l?~<5q4YV(MtSK;bFqVJ(;{*N9J*~^rM8Wg`7Pmk7M&_W2M^<_2Z?q6}I!7#fef* z%A-Rb?QQC0Tgz?rRF$Wx%Rq`%J&!Z<=#)oC>1Ww24QJ=kC6CT|oMWQPVe4E=?wZF% zd7Ll91$p$yqgx)`t=s6o(3GBe^p?37l{_xCgW9{oiw7xv5J3K2eb zZjd-2kL&WdDvxW_8mNS;EoV?3L-H7$$F-(34h}VCmKJjUJ+;36t>>jj|$q(i6XdVyS)QmhH$zxU?Gd-T!)^+2L8 zX^Zk$Y-vv6)Ju81oX0EM>aXRoG>_NwSdzyZ3VBoLRw2Hn@@<=1rt%%(yF!=0JdY3a zSRv(o;RiyO^O5++d3++W($ZY_GnK1^pXc#~$Z9zmzDA{6<*Pit%j0WPzRBZT<7>_T zeI6U~_#uxU)moRwdTVhx9zW&rvrV!5C6C|o_|@b2J&#Q)H=6i|{BF10$zLir3;!1W zBm7rL+m<|bC}6vS{r+bGFwXHE3)R$8>|ek^1sqVofu_52ad?OpYFWTx>K8*uFdpvD4d#owPt86Q5XR$8o!~#w#;AA=5TZ{YYAmtQOPAlN70#2uB znP-a7+0i_mq?}zqmjXIl_Z;ied9H_dE#UkDx)pGNIk}(i;yujfc6d<%J&Zi=ImF%fC8>4;7Yano9?dsRVoJx-J;hNFsy(<1q>}9A@*aGe> zU|a#WD|5VcnRADSPf&NF?d|RYrWP=%fXPzsG5y{Grg)~f+}l!t{gEb0*(p>tLNvu)~8Gcan7JadJQ3!ktlc5B3aLVp1PPb*YFOl7!$h)C4a zjTcZ`Ktf8gfRv}j&A6SX3&<6aQLA2<6>?n~^4esffQAB!1(ZB{cH?DJT=`T1&uDzU za6ti2i?}W`7pi==faf&m^cTbz2^R}r^mJb?;B`&CB7C)g*F@Y7iEk9}rYTEA-V!o= zsp-oKc&C7O70Z$L%s{@vM7Nm_3iwdnk8Jki0#fCxie&W=SiDPpH$^{d0q!d-+kQ)ybnZYp>6Of@TF zcZn`xk0M&A+*7!hIrlDN-y-($IQR4L1By7fhy$e@WIEs29Adnsh}*_tMI3H=E0H5? zm7|JiQ$%a)9xZZ=kh8}Y(N_GpB91qa+ioX*g78G4JD2vxPZsGQJjK>Jt%#0NPItB< z&J=N*JWITjYw20mxrpvXoKwVk61xb`6>_9&5f_M`ZwmL&&BJ>XaiPkKggu3BpZ_c3 z5|tMVd)p4#y|jov=IkrNwJtB>D)D|rTv5c8;{9!EfY~_CV_*?iOS#6Q50?2_8)4>9 zb*~c+6Al-;9TIOS;zlVWOdo0Eqly??#Ld!gDdJX<(M60Aao3Xxw^=!^h&#l`7je5t z<0^L+F~MvU?r|$N86h{2Eh1k;&a;Ptc+vJ;GH1Dnr;4bkoagb+FXEXZ7MTBO z^Di{=teKw|d7+3Gi&$j-#nx@S0xuWwighWzrkvM{SR(O_BHpxQc6q#|@@*5B6|tg- zcVvFIh~*;h3EdLJ_f_)rKPciu4Z7CHMSQB($|64TjC>}(O89vZtF7gxn6svcFO~CE z5#JW^wfHxlWIETX{LW^7P`R#%^``tN;l~i^rZT&`ImlF0Up^3_-B{VBxS8_t$0oe=Sl2R!nxMvU{~?;%|@l0lExyGFA4mLid zgb^hSEn&En>q;0VLXX?<^(EX;!i~15(?^=;rV>UOr~el5(ZVr87jjz(x2qg099P14 z5tnvH2@^}W)07FGweAwXTP;T2Q^Er!Ojdbs2~$g$Vl779SHd*U?EThyu!M)CPq*&F zYRxbMXL-ylVV0EH9{sTr9xq{z6nf@*THMc*C4@_;DIp-;C-mDYL6spPXX%fKM};wu zo)Ax#P%DzMggW!2O{p)TR6@3dLJ2u_^Fnu>i)LflP(nqmvWfFlKIQQ*F#fc87K%J; zrHg&OgcnM9v4lm^7i-F$5%DFJFWbngCA?L_Yb7j^{(1>-l<=l?U7*9aWmsCmyCp0u z;T`k1Q5TT`n3mi3n< ze8m@1-2hydp4B=gTDY!Kn^In&SXud@9n zq_VMuKg2hg@@J{~oA7^G$&tTH_{YkBOZd+?$G4QQT|;%l{C6o`KDWI?L-hsUl_Wbg zU}t%D5jM7HaGu@dZzg1ScN^cM0eg$@Dcnog!b0{@xv$XW5cgMkfbc-!LFPY1WlNQZ zn#hsE8>&CN=Fv(b34ay;$OasxlDu^Tjuxl6`dj+^6R-vlS<-x*O|?}{J4-u3J2xLAZ~mxx?yW#hxgGfH5MsG+?wcDKg3-f97>tL-h}+sf=sDoedZ-&+WoH8miAk9_$h)G+?6i zMuj?`O_Lg`f1YrUkjlLcxKDhFaH>XVm?q*z+;i|jDbpM9P($_a$k=koKMx4$3DavD5NUv~0l|jqpWgU|0U`Y%k+9JH zVNO&DF`-iu;>m`s|1iSS`pZ7f@-I8;8jx1k{gp?319A<>N}+-8Sa?*O4b?x5DM~L1 z8-x_ut?(x2fBqums~eFT;ou;)>nGMel7f_0c%CR)yDXw`%WddNB%f z1Ab}1`Ud>efFIRmi`VDp25iuNSUTm`2K?TD-^{}eZ!}K-9}U>7^3MkRB|-!Bzs3JC zg;8AnzXoj4mdLj&S6@O&AhJUlJC&=i2|Eg1YiHw4%Gj-prYd(ek>+M)G}rjkZFfmi@cSG zA6dpxDqEMU_v+E&#|YbaY{!*xVj0Jm(N1Dpa$V{Zl+T4Ydr}!Em(kucMZJTSrd&3*c7$to~ z86z2D*T?PQ<}yZ?af=(*;FvOQRmpsY6UV9?SH|rkL=#;4hRfft4i}2qPp~#~@pS)7Y<7Ff~Qz_GH z%c%3{bY@i63$sE#K>0FCWfb&q@FEw>TmPW1!IU!3tBiT3^QDru`DHvU!vZ12XFP^y z%UE2-b7eelB1c}}ouJYsyjaF7WxQmoyzFtlYMGpR-Sjuhc(05lWh^V>tumI%^R{(e z<~wD)yREX^$`$gz?@9i!jE~CrM9Rm)m1gF;pGx_xj8!63+!Cu*eo@96)4#MSexdxj zjBiwu(@*4s`(3&Eew%Lzh(CDvdJlK+G#K7xOi z@n0E#m9bf`W>o&xYaq!#W&A77WR_b@->y=9k=(vgefL7bV}}ZMlt{i)rTVJq^j#`w zVtP{%*V;|ISp~aSutx>WJ*_>>@4{QC+`EE(Oy5_8U0##@D>$H1eTm?4pa|dc9V~K) zu%&h5`adiVqo3abRM1M~2q6_-qN6HkQ$gzrj;>TMIP;G&!apEoN%6P}PLz0j1#K%h zLA;%=gBx*pQU&eRa%Bf@Se{dar&e&92s2N&Svt?uNJmpTRdBWxw{&Omb1LZK5&29% zPi0pj%L^*FxPopK^sJzJ1s7J(!>$0A;Bk?hyj;CR{%0jyy({Qj!6i~yURpt)ZD%i2 z>vGQsSL|QG&m)2G&9^^!2_P|^a>uW;Gqg;D(c}1 zW?1(TJztnGtAg3Ky32g5g1HsUF_9j(G`mk!@MHy{3Ti6w^Sbf%U+7+H0^&g-&0&#< zl{CjHs8t!SAW=b5n{lr>DG#r!AYDPWf=mVVraK!kX9}Oxg$jx~5%Q7<*DcFXsbE0` z^TeO3V7{Ke?D7#IJ}sT(8PoqCSyuvX)%bo{5=la)RMJFAgD66wL54_%G$WNEnM2A@ z%9JUT5|S}PLT4WDJ<~n+47a2~iI4_UAyX3nb=G&^ey8XEJo{PCde^(&_xtv@_t|Hk z;hq~_f{5|x5+s%&wgeTj#Z9NbvW&A;Y6)^nkY0kUoS7x4lEIBqEz$9O880ruQiU}p z(z9#{K3Rh0d-h+k1fMOzO53$nOR(BFcX^G<*Gl67{4?~>YI(b*>Qv+x(4HoPC(ZX^CC z^1JX4As@egS$2oW-%GI56fVUsUdDsQ+kEFuR@aj zJf(YY5@J1x2Y685vMk}r+(50^?I4kc9vtk5PLD&?p^*oNNo1eHrO;1)WEpSl!8ZQ* zgRqJ4SH2+P_dh*o>A^8lntO1prCNy4;B3U!9uV6Ij}y9VTk&?n6Uy`xJ?Q8`hq68_ z?<7NK;r{&be-FBPaI(Tv%4)lbyP;1L?=C#O%yXuA4`I(T-Br1{@nYM{Q@Z5#_Mndl zd0!9CHO`mq8Qt=o@4+P=T;Ra~4=&`odC=d3FL`G2-$n7wA90f1%0LgU^x#qtuJGV8 z4=(qhJUgh&KiGqz3Wu0D%m}-U@L-GwBUOHt^s9x}creOr*NTj`&`pVWos{c&!ie19 z!Hph_vzfU0j92Prp)0)AgS!;o=E3bA-08s`3Y~vKne%S(drX;Vwn-j5A|ghr*A_vP(P&c}m|k^?2a*AmD+| z1HTLuSxyYf;5aetK|}_p#5}0*ATFg!CDbbwCOk-b;6!5DQ~Q^j8H(arA+M9XUghj+ zlNTv?P&9?_fiLxxZcCO4Nj~vlxi}Yr;R@4NimdWrwJ9{L5nn6(+=F#mKvr>M_DfIc zJ;wDOeB;4a;$I6XGP^;XgyBZhH+itx_?9xm_a6LU`i~y`WPGd0wle20#<%N;{N}-* z9{euejo<(GV4@BmkKkV(?2t~*X%KgM@Q*3GME))F@8!kb-qN+*`S%g8qR>+ZqQ4B9zq_b z_FkOmEj_3^2s;X?Q|au*sov7zKFNzNrl0J^DdJs)-At$dv@(9W7d^c=L*-`*dz59_ z^DK$1B0opGSDDhsi@s(4ep(+c$a!9zZ~Oug?qh!yvd=|cTx@)RxAZurIM7@A>CwaW ztH_s$U+%>fvOUN*|D|x1=;6lyrZ>cktG$@dKLJo`nEDJCju4I%UL~aM8ZX9pG0Kb4 zUR>)f{k$0aaA+d4W4*XeeaPATdM}9d+~~zPFJ6%CCJi@UNZWDz{MTFh&!n!&0=@+B z;&yN8Y3mN*onGAK#ROXi>huur@nWJx9%83V@?x47lfAg#i~CgT^as3{>cxXzO!1<= zYF!f+J|r8-bT6Lp;$bfy^WqUN9#!XC`7Shn%7E|xcrn9^7+>p2S<36b7f*T7OWmIK z;u-71R%{*?a&+$C^Ipudac6rmSI!r_m?J_nr}U!ZUc6*Zr@IdGz2FJ_s#c5&hj>jV z_UpnogcRQtp@FBt+g>cRbAyNbUE}YGyf38wfwy$kT`c@i$nYZ(-l}o$cvwApaCwD3 zA#eZqNDRmp6o!PmNQJ2iJuo>vj!R5vg_B;S?8v6Q$ascukYDHawA71<^&UrH2A^x{;r|=&kQ#AZ5{-1C!ANKZ@ znox%khTQ5X+}DS?BKrxQlUUEp^?f)<{6HTXnCNT`eWj~Wr7;@u za9`=A?h!s5DG&KkQb-#6N>2(b=hnoBrZO}WQaMIs7T^5wp@kZFh%nA5Kz856@T*O2WCF;zL(WvYSnn z;%VaD!!4%V>ceg3WLxg( z9SYqj6U6Tl-tEIgk$Z%0{`ZPcvTpY&WbOST518)EQ+;?;`a{BLK1}!FVPEOCq?;}p zkBGCJ%40q}?!$~Sh5C~|%=F=u!4`2LT` z55gZU8{qZdhu?hI=EE;O{Hzm<6XSjnfAwK|new|2fBEnSm!eFhjoS`WcJd1E$3H&& z>%%UcnXcP^KJ4W$U7y+6HHRN{{Mg4|I^mt}u&y5m__3e#{r#x7XH|U*4>WR+ABXtS zP$4@UYz@f|^`nv57#{A&5f-{ZkMg6LAC3KJ>c`Q3G}$xj=0oQ(*7I0Dj`O31AFbqU zY5vxJv@wtCe7qlRE!)nI6ZXuW=toCoJD8`Fk1wHNMo#miryt$@ zI8(~$!ZU2F9%f_tS>k64UAJC-oGWKK*{TQXfYpncQKgNiU zmYKG(mLk92kMVxo;Kw*WZj|o&+*IbFaTw zq96BKt=rSde%$ZJeG=V>50vpKDx50iAwQ;BA6HBN!%96Od{p?D@NwY`;S)lZJmtr; z;!g{o5ze&ib0W|C@q!<-{FrUJn-y`6DKC=vG0%^eY(6jhG2f3@%s}(2O1XKyCY|Ez zW_Z(&cVu|WkGCzm(7L^Agyrx1@v$F^{8%j82iAezJ{14RlqDh_KYV_8O{9&R-x>z} zh$$8FBkV`SY*90C#JEIORrpb92G=L)M@r7L^vs^wtiozPa%J5L;%r;=qegsbS@sj- z%l-J&x~(v>O4-#ycKFP6PG+qipDQF^=f@Xisr7z*l6Ier%Gs(S~Nq z?H$Q?e(V*%_kL{m;|D*s`SGJ4Tm2ZomjFUOcaZa0{%1daRfk{vrMq;#15AA!Z~pz* z;m7ZO{OQLZHaefvImBNI`C{R3KX&=ClNW#0vWgo!{OiYm{?ae~vLRm~688?EK>!F~ z{{Z$0pl$$l0@ycD`Y4uJwk7gq$bNy+92nLMpnd=clo<{Tl-^;WpKWP4C{VhuZYV#M zLjq_Lz@ZWw1<*Kv!vZ)WP6t=$+&R!wAyMfWZL_62DRgme4aKfT0puJ}iLYN^um|bEMXUABb?~SIc&daFp;` z;bhhYoK%=OTx+Au9@7S^=C+NLI8JJ z|GNXY$2f<+SA3EwlSS?ma#jzh$%DcvIvi8Qxl>D1fl}oe~Y8LP|^+SAQ-Yvz6irUKSLl z0>}iAE-QB(va(f|>3N%E!9>2&uL)pjp!8khWx`K{%Z0o|Q0M$t1h7*3OTH?A)n&(V zjrdyO=fZWuFNE}Safs^`ekJ@`$bH$s1EF`@z71fbagIoFa{yaR`Ht8B0De%&)#gS6 zd;X+8TLai8LWQT_FXHqt+%Eo`@OR-KLZ(jS#a{=M2ZiRp#dnq|6nEM6>Objw1xpuU z`u7gjzA3SfDb)83V*eoO2C-kTbUo+ZarLKb?$6c%ytRlWa+0^3H`3>)G~$Z**%EUwWQ={ z1Tj;K+{2WfB4-JiIwy#8Ro*Lz-oesCpidBeMcAJqu^-JroF|dW`SO!+yU_SWL0lfh z#X$^|ZGiMkEPJWdUS`S_rVI+=${+@t?gkxd;V_ZmL5v7uq>0XRbr9DDaZM1T)oPUR zTA?$H5g%KoP`^Pvq4Y*zm%#B)JBZ+&J3G21$DJ}(%b8^lXNylA$0roSA-eDPOIVb!a~ zUkl>>AYKn*VGwTw@s{*AElcOy#@`9zUE}W=p`)=4QcA+iY@Q0DI*4=-8565Sn95ptE{I|f zdD9D~(^C_~QqwugCqaB3#PT3k2k~hTD}z{3mZg7{)qWPl+91|g$XaHJ+}5e&iy*!X zV!gQ2Y4|#bAA|TNh%G^E2x6nM-|uLHrlQjv#gh@watg>YpHXSs#w_uT_!n6)IhD_70Vv2uSt` zp?(N;LfAiqeU+kES7bjSZS_PBuq>4WLpUge24xDX8Y(>4Iv*NB(-0bka8w9~F{SL` zmOWCTn?qyqqlHb(z*MskT1Y%b*gS+|m337uLpV-)s}Nd;&_2j58+&i{eafDJV85zP=#%a4Igwe8%5?))@VN3{PEo9;KA&gUa zgYZV12~#(PFg}D^Lb$nXMC$B+TL^cDaJ%$7LYSc1JFP7ZcUhl%L?(tXN!fc%pRCYz zyFY|!(jN%n!4Mt_VM+*7t()^WoF2mCAv_$yqai#}W_YZu+l&yN4B?3~g|$za`I!)2 z3SnjlvqN|`gy%ze&QflOSr)z!!rTz%Xku>VUkqWMWu5YJ2=haDMWQQzHH6nxvcUHA z^$^~$D(4}-6~fygydT2C5Z+bx9rLsEd&U=qusDPd%KCp;#y<`r7{Zbed=foEuaHgr z)+As`D1>+j;Si!BL`>vlV&-I3MF@!yDwTD!O_n*+Ayg~Ogis}tEz7z!$%n8ighB|P zgis7&X$UoCo@Hfxc?c^Mep)txmBv?x@I?rpg|JqhHCFg}23M2 zZJrGwY*y;q5H?EWJU3Z(O9(%Re;2~{CerX@2-`yVDTJ+MBHR9~(Cz83YP((dTiNJ; zgz%5TKSTH{gulgim|>?8cH3p${te;3GJWrG>Ee%Y>4{(;@jBve+`3^j3}e4A>W8s^ z7zfBuPv{K91H(8dj0Ss(?0Ik)hlO!S7>8P_kr8GO593G|n&=uf4x>dFM~87t7)>;j zreQSO)5G%SVH_)woP{mJI6jP4VYF5W#WrCaXWV((hH*j|?M!sTwYRWC7^jEPF^p5f z=oChmFgk~El4YHlc(To;YZ#}6(JhQqO>v&?Dsi0So}uiSVe|;2r#anx9G(-#d13Sl zqhA=k!|1E>KIS}Eq}+c#l`t-l?ZPnn+YFuO;xGn=F(8afOy50|OReYSVO$x;6*3Ge zvkeYoXc$AJxT;}cj0j_R*&Ie%6ApKE7^7vrMmQ>rYs<1@B#sT^hA^%R<9bW&o)5`5 z>wHrfl&(yRWD!|-XKC1H5N z@QSk)ha>vS!eAItwGD+44kKbIXO1ZqmslZQDRh14Nh+0+m<}ToM%A7j68s8K7{r_~ zA4Wlh$~CS}y*na77raL{^$%wTSCL|C%t?hC%YVaNVBSFT+?b{VUpsUO0n@4EjeB%!i3jGvuBB9&jl_+9+h zFt&&Bo9WK~M_ISO!q^qY4jKLy?hNA}^RtyJA^sOey$JS-V4n!~j+7P?LT9KGLEQ-U zjg;o*s`iUue+!**fc*6%IMDP4Qe3uSq;vuwEF?KZeqJK15sd2wFsNtaOI_N?}X!Rzg0A*qPWSg5%Wc_z2oX zO7CK|jnsbMiJYGHYRH}pJIFx7u#>7fE6Ya#on0b0*+Lp9c9n;zZqiF5M$j{Y?g~$j z;LHfl&~R=({ITvHk}+m^N;gDRp@SSD1fL1Xmj8G=_)|HHA%vM{rdHC-6@IBBehx z7#S&j+%uoo{|K&$psn8L9~Hsq2-fpr6#-K;jFIgZekv#PbrD=2!8nOGL~vsS+xaU2 z`YtHVH$^aBg&c+Dw?r@@f?FfFUE*!Rqxt$GWIf7TzjeE`1e62Q@Ye59BmHFBBjR+P+@MZ+>M(|by3sv>D&`tFn^S>wY zeIX0k_JasMj$m;FA4&XBPF8VH8kR)hm+q17jbJN30uZt`pcLm%9^(4*GQ(>^1d#~h z5kw=1MR20B?8azl1x4e@C!WWBnuCC3LO+(|ovtdquH#6#GPhXz4-C zWg*syVqb+E)QS5k++Rqgo@MJtaa0rsMsa8q4Wc+Wii4tPXxZsn!$YE_@3p#CjiNXr zio>EfJX(8|=%yi#w9b5FHIAZL6h}*G5=GN!=_tP}8_6+Iw1}d46vsxv(}s$BIJAtS zl}g-EqfXLBwZ}zqd=w`{(Kd>9@^ClZo^rVMQSfW<_0+$EvK^!7B+^;vu5VqUr5mA> zgkdR^^4-XD9(>!q(VMXQoK-}{>~}nK-33BF(ishqPQZ8fl*wh)TKN?%F=Lo z6mHx>N?jSn;3&2z%MLs!L!}RkVnh_f#obIsMsZaXZ(E-Ryy;SQl~n-6zn@ z;fRlzhx_$d6f>fD+!Qy}C%Bt(J{83?Q9Nx~`ezz%$RB@>VpbH-OX1{s5V_;C6>_*a zQM@8PH;Nadcu9PokT(o3i*PdT5YLa|RVfREPGt7=DBdt9r}S173wgYxFm$th$3pt4 zP-pp~C_aqhgD4g&%MqF7{6A9Y4k(o+QFx@d5q)K?m<{OcCE>=y9ac6HMUnI~pM+b5+k`(0e-ZvFWQp7N-=p{|ia(zHS7{#+9w{E~eZ}hv-H5w~t{1C4+o{x#;lLOgm~D~T zQg0Z;!7&_C=48)CF&r-EVdg(VWOwJI6gH04UgfAak>bwVW-%NSLvtzaA_+Y{#ZzNA zJ%-a_=x+TvVRyoxA%&bJ?&$QCa#pPN5#d_76)r~(*H_MSW2L7aH!DZZcRhtv`kUb* zDHjU|2rm&16kaN%|MD0HiC*%g*|B{8KZZmMaVZrsRK~DS zt5hoF&A;?i4Cz?ul`=&RM69xI*%+$Db3%6mvV_~37}mzHPE9`N@=E+7hV@du6fWRD{}uUJ*>7U_E`|+KzKvm%$VNNX zn`77_g%fsr^nDCJ#qfi~A1%e9w~B8QI_EDj{2RlsG5i_BcIm(A9R6MShmeKr{8tRS zWZ0o`{}%3y;h(Z@yI1VL81{;nF8jL`#IcVQihN}48^?YM>&9!ZKl@vjhvtAd4vwR~ zlmp{9NTh)|8=8~5aESP!aU2#$Bk{Oa>~Qn&4~LHwKPrwUB8}rXT4cPOoKI7Q&EnXt zG?#L0ymTMiB94{{$y-TjEo>uX`SEeIi=(YP3>)zKpK-KTI9cCrrPx7XNAq+N;o_VW zN7p#IC_LG+r&yMS-E6PPPm80wc}|bxZq5HpQ+mYFQ{3Hq(|@+YbK>X~$GPIYg?)s5 zg}g)PXM`o(&R2Lr98+z5`b)Vej*CSG2%9Q9P@Gkl#&MbP%j0m_K~k+{7^Ib$mX*o4xdsUDPGh4=4Zp8ct{u)M#{1@#NvocA+Ly|a?fm1 zVM>@5W^9zKLRMABkrU6G!rdvx@rlA3;Zor;A+yUxSo>)lE8&H&a7YCXtiVAPXka1@+!|Kk;4&D zkY6G{v*edn;4+1Lwabv(6$%I0Zqhcm0z)c5!_cxqI)_(agp`rOtAtlq;MxjYqw-PK zgnKkvS&}g(vcq*1xL*1V!W)I-DsXcJZsJ~OKI0{lbGxMiw_50CdwT`$kaDMx;slu4O32-RMr5Y&S>bcS=Y=$Ih}q&VlqnSFR^UY`yGZ;4;o>s=BjX>7EUAFUl#jFvK85}Y z1Vn;DmkNtVgq%rKBvt{JrBYFWO3Nlhl9o*?%viQcBr9~~xeDYfP$Q)vELwJ{2>UNH zWw|MzimVW>wCrk;&xEX6BeK?JLS>zlFN9pH^&;*L>TB_Dgzhw^|67F{E3ip~B^0-a zlYCc!@5}TbEAUGNeyYGWiCcxdMf_Q0ch6rHZm+;w>h?P?_!am=;-5nIifM;9NBLXC zy{Y?;_%1uK|1%Fu_O2{l9=Sop4Od5eUtx-W{8fqi;`>*kUL_6?U!adoS$Lqr2Ev1c z6x}ZKl5$98>9sADGlh*R@xI96<~%~gjeArj8dsu8C62bNt8H3YyVvYPXLHLQTZtCp z{1OE}18r4_)|LNzw}c}er|j{n|cjU-B$k0(ZR+H>3eo`g6h@32R zQ|(%b(-d~A#Hk{j1DkXgck?8kq43N~^f0|=W$i0UX3v&*j<8pm-lr0M&3|qs`iZ;O zp|0}ev`;}A*&Z$ySBa-8@k}M2E*oWLC7#{W`Ftf_sKl&F%-&O81Df9VosKl$4 zcwHq6gs)ll4TW!(b$i?R!b-d&?&kcS`1_SuEV8H)ACzT36#uA9SyBmaB|K8xtbCR5 z+qg~%Rw67VWO}3$QRB`NuSB{M6_rR-qOz=8vJxqCx*29HTV*;sRG0C5B?{(YNsahY zQ-wB-1rwFUkcq`d}Y&M|8Jyk5PmCk^WRj7 z?-gzqZV`TGh98Xls8&B!Vyh_};^#8{tGFBYH<`!kk@80+{!;2sGrMvBHvdkMe{8D% zn*N{p_fDX00!W}v0{bLtFPmLt_gHAkL!7w!tN%r$r<9V zzw`7=;G6``GW~2b_e!9TcyCksCUCBCS9_j9*X;uF3x)j?xX7F?OYE%E;}You6S!2w zWiPi~VB0|n3`^k31ct~k*!m1L!jj<$T$R9x1V)?%5)*$Yhs5-5_q(%%8mGV0yE@!!a7iYO57QU&m=I@lxNF2 zJa6J`krxt}D>BDCFDm5FZ1Pe9^AmX4lvhOD5U+|aFy(cXzhO0zW0NO;uY> z|5>41nO_t5P5O50>_+?}fxi;?Qz@qqcUXs=3H+PDKMHpVd0R*WxBtwucM?ec@3PO~ z>LgKD%D&0kEBt;6UH^JXG)UqADfN>$aL-zL4oae-6|&nQ;)f>DXiw+iNgOHVh%z(F z8%rcP+H~@!Ni;LvEl6|g*246bNwi9$wN*LWaY=Ma;`k&^kgct-oz=EaqJ#K}R@Ko` z9F$w*ksdvh3g_MkX;t z*`Y}cPh!}f&JpHhpR1C%I*Cy-Tq9&RZr7S;OcFOHF*b?oleo?dEaY~Bh2xSKFMg9L z%-&qaZxz4Idft)5JxSb|#9h)Sn0~iH*1A2Kn8dwhO(rLCpE;f9fh4BM@St!?5>u0S zNSvS4JI{254+|d=y5^6GJI{X!UajZCPIZ1dn1Xr6~39oTV?t}4FUp@`d48a_^9iFrIpc#{Yy^d;d>*1m(s%L})l!jOrqjmQ}l#*&DORM-S6 z6>^|t64m0VB+??R&B#`jMAmE+bK-gP6p|=fw;Ho86Zu5AJc(5zp9)t9R|@&EdbJUD zUX#QZNvxIfc@pbH+-(4}Una3$3TOLO65oh_E#zAY8$|e~2eTWK_%(@5N&Jw+<|MvL zVv7~B4_E2?Wa-UDntx1UTM|Ddu{Bxytutm9@cuuEU$j#U>2z;(ZcpO3B>qsV--XQn zDZ)2E*m*}1|0?`jxHE}=lGv35ZwUEm6b*BD@lT>o3VWr1ROt%8xA1Xg_es@$FJ<2p z_Di8|s`kk8ryl6!e$`8%q5KD=P(OtOQ)r-6gA@)*)qbw$6#5TNl|IKmME*llwci># zOyS`|dX7lpNaG!N{ZFA)3P-2VJcTAH9Fs!R6q?DvwW6P&7ZbS`$4YFGLd#U?yC^Q3 zP`0&FZBjTcReBuJ&urTiI;PN0sS{G@kV5+uPE>f3{;3mf+(BX|iJen8i5;X+>|(7> zNuhfRUFD(PErnB4IE|Z}ZG@+%a8?Ruq|igQGqnz_mFk%){gn{SXQyyZs`ML-Y{IRV zI`kIy5%#s7{ZiV;@)!2S_{h|~uN#SDYJXix#h}(CN2CC1cTK~(0 zmkY13BXXsx2B$D0g&`>nQ#dqL`VkdQm2(>|h3`p@6uC;s6OXBDQn)^aQCu8}*9u3Q zVJwFbcgt9p7ylH-OSv(HaVgv+K1Zzry!fYZOWB&!&mnG;=k^rtNMVBbojOYw@ykC7 z>0yU^Qg|SRi7DKd!o4X>vQwAY$=36J^KkZWQh0`}Phq3@SHu)Hh<}s9rCOP96}or1H)-aZ zrEIZQ+>7s1_<;``&GyF>w#x8Rs`fj09BW$&KTBj!hQFrpM+)1e{3iTe$VK2lf2Qzv z3V%tVd4~u`*_pzw6#g;Yt=_+yC;zT+uQc{a>-sN5`hVY}s3T?HH0q|YU;2Nq4&0j8 zQ}zI1ec^$^HJa){;tkU{SmY3)D{Lgr86GCGoEQHznus5n#!(`T(>U5@;;NcTZzeoO z$PV0>W7BAxMvFAsq|q{s)@ig-mMK16(!=uO(xo5GCOO`Ewo9XZ8Yjp(Qa0!8kj5!# zbWG!PCs{7{&-3)1MH#)VQCaL zWIYF@ab+5pq;Yu~136)v&t)QX(tm~34$>a6$>20bq%kCoVQCDtEX~}8E96t#$TY4= zb@lSWXXHw|AJe(S?*z<5X`oJLe6lCHfwirF#c&Q_$6PNR~KP!t@ z-C@H_8da*L!Z53BwaqQBka|I+D6Fv|mMQ#1=vMF3G*&BIAzYcpDiL;I|IftN2-gbT z$;|A!G`^6+v+GNd^}^bNlEya*>D-XUw`pulm;UI9;R502G=5BDi!H);X?&l?4=UNc zr!@bR#?~}`PGg&P!99ae|3yx=+MdQ=Y5bPP@3sPe@L2HrFN0gL9jg61jepYEDV>w# z8OuJqY((<^(%35lWUzOp^c29&?aMwH)RE#Aylw{d6z-S7{+ZIHk0*fhACN))3=UM5 zL;o!OAnVppO zpn0bB>vJq|Gi;GTn+#f7&sG_<7I(XIoax7lw6)X;8FXYHg(nI-WJ*tSyZ5e>#LgL< zltCA(ay?JUpu3c=!fqLyn!#z}TnBd)IK9&|I72*1+16H@m(cSvxG;nBGq^xDm*TTqe}#OW;_JJMGZ>t~fDEq4;F1h3 z%U~dnTBdZ3<>cLpU2dbWc98g$nbJ!V&WD~M84S;0sPti)ze_PYLL!@7mBDoxT%EzS z8C+xCMp<^W$e0Yq+U~n?+2Q&OZcz5d491zC(_m_R26srgIfGj=xHVIIcXV3@w_Bgx zYkOw~6Ee6eMXs7+u3?9zlAq_MwgXwk> zx+DIG{G8;YA{>GbI)>b4NO>ZIC(ZMe)iV1`1~b)@ho0ec@;slx3mME3pKay^c68=S zf6=Tj2uvH)Zgi$d(L#$lyDr*ysB)&yN}W zWIC(1W$;@DKWDIA;x8HeD&pqM+AG!YcZq-Sd{Fq8bx8BeKfJJ4l@@Ae2LEL6Uk1A} z_*aI3_NUEz$v_XwA-+!)_7$m9Rol~b{+eF_swzEA(9DhG02%5F541iFL|D?W3P)7o z;3_n#!XXk5HO~Ux{ENTAp8%>Vy(`6rM^>S66^=5U%F*IYgrntYR)rQ-I7SK$%|(u_ zDt)<#VaqDCk??JKFXEPHlU?R#Rqs&IZ4dUNCbzp$_HTwy=qc|vxh zhuZ}TFBJ9{UL?F&I6z1<_pv{}{Ha}V;pJ5rUWF^FFr*5Ds&J)J^e{VE6JyCxiNngO zMpWVIDvXqJm5?^q@R}-&DpQ8@E1*>v!(FSw*s>1SS7BTgZm7bICc1L=xv5OKxeB+~ z`rKMo`wV!yDR)%iPVosscWuAB3il}FYEP`fWbu22lZ5V_&-=vhw>5uI;S?cfGF5~P zr&VFPxO;|uxC)Obd{pTEpqT#0t1v^#6IG?RAE`W9ReS&ZwDeUHsn4v!vr@?Od;_xz zFIHg|tEw-Jn@%=?nGjTSL`eze^q>e@HOG9~u8xWJwh~BK&h^HsR*0g5Nv=5l%iN5*9|PP*H_wRq4Ji zCX5SNOQlktgfJ;|`_61yVMbV0g{(-m)#l7x5TU;)Qd5PcRah>*tO}pl?sFgA8m_3q z=gO|E!YW;YRtrB9t`V*kvL`Q4>ty~y_@!{Y@GIfhLidEYK~>)hHwrfiHw(82zZ1I7 zKdAP{D*Rf7pES>{!fnEzg}(^tck|y~h2K>5yYLU;pF+2HJH-DMvTCQuKi1@55jy{? z!d}_Z<;Ybbi#plT6@DL~I|Tb?QCH!9Wnw+?1BCR~&(_|qH;{6Wu%Yl^q5D+gP>t0{ zcv#uE>~Mr^M+!Na##uDW;%J3UvS@0$n&A7HzU<>jqMX zA-EIMX!g2MK~6NMejz;4`JpU&!VQWjlYE2U1!;?yj<%HM6zaaq_si!-t~z0A*6 zXJ#?MmYU&N%AUPvZ7+qrg?-e#uNnGfacLIkWpQB^=Vx(&>AUCIpGQIB#aRrn9pONi zNF2DQe|Oat=Dbpd!C4G3g|$Po7$$wVaD;HAaCe8Rv$!UU(OHaA;k8yy1Gh02UZ*Pd zygrK?vbfQ7Dzx2{#VuKkm*?iP{(Vk zG1;=aJKUee12!LuQ?i(9gFckSG~?5aaFUOd@yEm|KAy!4<4h%8Rj-OH5OPXglzqdpZ;HH?#oJlD zC%!O?ce1sATKldPzL4Seein-?{J;$C|DnW>viLX)zxWcNN9fJMXJ$4DNGvs!7|J4S z3R^|RNn%;V%k;`Da#RtufTZh3`;EQ(ny6R*i)X}0za z!<+O??@zK=t`tL-a9feZN-5-X`T1`aYqR()i!~B?=5R5IpPPr=IlrWm#riD1%GUly zflGap#Ri#K$c^TWoVk=uLjLXl77?c0?*M$SQ}hSnk6HYr>{j76q3cY)BgE}l{I1k* zX5d(V*i8P);&16YgxpzXcj`=IlU)-3&Eh{1K4H1l*t;62uDuK0r@HpNAkNV31qs6P2w2djgLgcItlmSxrMo!V`njUuseHIA0EiLj}# zneZ54bD?Y7q8e?h(NapQY8+RM*41dE&~;;fZpYg`lDDhI2{N=7QgI&yuwln)oK%fY z)#z+~H>)mkI(~|A*ST9YPPINPix!v4aGgcl24pG&GSuo{<3xwIOWiE!FY`ToE7AXD7a^x$d?F~!~e z4pTV18Y4tTT9&iD+W0lq7-ig@RHGG+sm555>n!^aKmQfKQ8>FnY2$&MIQj{4EuN{ay}hieMz$=Q6K7$*8ii^UE#!zbRzki^`X|EW)%aAzJv5kIsc@BWwU7;& zU8DK06@D&UXNAmuDP?^%z7k;{irqCOD_!=H!#*MpOW!w#x(aFAPlO*C(^fBshB+LNL;W1w&$1nuLxUU^>8%F7opMmF z^jkxGQGaj_hv#re4vlg+G*^0xp-4O|S9)X0g-3`VDRfnhb2wTdn>P_@Dr_cnRn2o~ zox`y?w9KJ}nc0&s-dpA1-qL9!y{!g4K8KDuw9TPI4()Piuha>`$^6$jA}lB8PnMAo zJLS+>`blP^ezN!}!mh$@LRWQK4!v{eo?t;rd-GCkyE6CSU#ayUn;baoC8 zXhiD0WZ(+-$>IDQ`sUD2%DF z;k6vz&f)bO-c;cmWewjl^FoPi@{TFw?@4@L$|9>;oWqhFK2-RTRefw(PY!-@uh3_D zK!iOx)ld%69Kuo}WqK@!3WaeYot2hNl+7xYLpq0S4jHpmm1V1Q$eGUJ3OTIEp_s$c z9BRt+WjQQY_=$<1intjPS6a{2IjmLcvmDlxc|Ol!oq1fl9Dc}QYYsn}{!^~@HN`e5KMS+=i2GIH_8fi_`CZ7) z{AlUV9CqgLmnl1P_}lo|D*q>kT{-;A>wv=lEbH!j_s#=(z4;?tU?c9Uu&!`FA)nef zVmT^tO=Q zxb;yaZ4UI zOSx9!t$Ez0u%W(!McWNAq~hvb^t|A^wE$Nz3ocypzYf zQr;83FXSRK`++#gVv!H?_(;UnF3H2M(36K(#3yvMfjlC41oH?<FCxE6+%BZ&23|JB z|H$L7JZSq{3OK5OLkl>(fJTMV4`_GeO8_Gbj}Sl7 zl*R=#E#PQ{%r+^2ev)RU9AnC{1+*)mMFGbZ(6WHm1++2`OWIgN)^a<(fVO4I3Fd4s za-#L@SU?x?P6c!pVXKoYdooD@r z^9txyK;Hs-%hN~5l-u!h74|d#`33Zsa)Fc!O{f1N>8u)1z|aCNDd6$~2Fh@$kg3be zLw-d8gBTWYrDfSB0 zxUqm+3m8|x_yTTHirrlHW`(!dJZ~%Dt^#f^;LZZ>C~GpIjNe_xCl)ZZfO`wLzko?< z!nTt|?lap1rave$MaT&}RKR26(+Zegz$4-hTlP^SY{>0#g)`Lii2|Nf_*9wanF3xd zU}gcc3wT!gbHe8fm}N6@d;LNI^9q<#z>5XUE$iU2FBR}g0WV8;OEkaCv!H-C6uwr# z>t#BfZx-;Dl()`Zgmcv!sAP0Um|k z0{jK|3Z-w3ar;`EyR!`z5RxZcKtzPus7TDhc%gK|Nq=PlXDskM zxK_xO`CNqS^F;xh3iwi&%Jl_&TfkT1Ul&UEx8I0w5HjQiaAO%~xVeBW1$-~@JK;e7 z{=aH@6=lg!1^iOLR;B3QCi1h8*UxqNDh!vUr6P^A{vNy zGeg574z{ZGy#FuOzA41_F%B!1&Y8o7M-*|SBRT}sxiv19j_J|DCc>t|X2N5H&4o0# zD56afEsJQaKCSlbc3ctdia4HoXF5yR{DdOfo5GM{hax%`(b2?CMouc?6escFBQK`23LDUv2#aqR1D^ucCqwRu?vOo2;VK@eUbNs9G8YgDj`{1gs+GXwfi3xv80HP%a(#G<0--`g`CUl zHy#iPYR#Dn7m+I>Qbep+x~q%|zvNLUB2`315s6~yKMGY!AHZ8{{$;8<(43Z-;q|A8 zDxJ4{nZ|ogrmBmjS6DRXHQ_=L%Zez9*A%f-h1?@+q)$j<+Y`kj? z&a6SV8gyrgs+c{^vZsrjA#|hnsKGfk=vjla%zSoPmY!Y;dn?<=Jm=P6Kn?oU-~wgO ztHJqYRTtLa;u`dqnNz(;DH1m#@sb)0tife9xb**}uBgHA8VstzkQ!WRJqMTBhSp%1 zO~dsZQG<~+xXMKKzuNqxYH)oGu2nd?24ib5#(Mr=RbK)=<@kQjQHhWuLP&@bl_fuW zmW29RvV}G(skA6jiS|v|QYu@>8dg*Km;HU~?Oi!!Y5Y#!x)m@Q577c|J(rv;_ z$sA^!rR;3e+?c~$;hS=}IfpsIx0v&-8oGYw3E!5(f*j@xJI{qRn94geyfcTp1YGT+ z9PZEI9%Js!;l3Oe+bqt9$_H|IFo%aFdq|O~M+BBwEt$uJmnuG$W*g5^1^5H9K& zPUc+=d-36)!-v8j81s?9N<}Jj0;~DUAAvxTZ*Q35R|hc0V)BXwMZUvH_;BEl0E*O< zc*p7GrYyh*AcvJ4_zs!C4L?z8wVrsNDt@N;x#Aa!Un;s1z60Tt^P3!g(4^lgewV}d z0#I*ja@Bv?^T!<48tM3-HP<@pif`f83;$ZfaF*Y5_#=luMN-3q_EiuF8f~>-SA9|2 zUXh@YKx0L29hn`4n|Rns;69P$n`*d=;;vrx6p&!G!W9v%+xaJ+{$9uD_#pofD!9OR*`7S1!(&O>`){;rR+kU7M| zVPXzttr%`v2e10$48i|-ILgBj5*(>kNp|OlKRp~P@))oB-hkwB9y*HYtDUF$2_DX1 zhph5&l84S7I(azROekR0DIQK0!>QdB*u}%?9=dw?pWL`1?8KcQf-^mw=iw|5XH&rc zPh@?bOhbujd z@Gw$JUcGLXQ68=mLpRs+Xb;mojPWqR!&nd3dbq~JIBDGF&CBdM594+2+$lSepa1kQ zS+h@4q;iUfsj8xer=HVI_i&?!86IYNnCanq%TCrUHrvAu);~L^!%ZG;k>+OYJbmVP zxRpDso#ft#tVte3J>pjc*n!L;@!2%p5OQIfzBY6lretf;cE{oJ(NAa)2>ZdwZ;duv|0@t|g3F3LwsAFX`s=VN~L(Qq>t0JC$4$!z?nYIQms3ojA#4k?c*FD7y3BYM|U6R`8Z!1SH(!r3v@lO?TdW$ z^wGnwz9_g8$80Y^g04BB*O zF847+N+)CaFdz5%817@Hk1KqP_c6l97#|~jT;=0RAETsahZHkj?PIh&c?#TgV|`rf z;~F31Y%VU1V)lQX7ta=`cgJobh@ebA8P6 zaifpf%HE*JTF!Elk2yYW_Hm2O6dialb!*K9KhMXVK5p}|(8qiq3*^k^Y0imm_i=}H zPKM=o`BF!UiWdok7Yg{@bRdR2Yo!^;~^gpYjsZPHf@Rg z>GPP6Cwwert8%85JJ(P8cuGtinUjCo#|u85@$sCGXEil9oSx4MyEVS(;}st-`FL4Z zHLKiv_*Z?rrXDyuANxGlZ}`ahc+0 zn(hNdT7BeWB`;=WDPTXIkGv1xN9ZGvj6BODAF+nK0qO6SSrC)hZWnov2PpBW6`<_n zcORLLZ+ujIeCFe0AD>9S%Ji#!d}=G@Wy2qTKKJpZvR~-w!N$Jw@wKi5&gkCQeCy*U zAK&>{WA-bCad-jAN2$L z>0|Q%fAN9O=RY6*a=X~B!~gj352{b&4z|?@P&dF90qO+R=NQd7DgEmO*fOX-_9^Zw zeyaf61=u=3gP{7_!PGVZwhgMkOy-a>#)bhJDZ9NQ$;JV82sZo#K>;_vNq|E*SAcy3 z>>OZ^08Inz7GReEyQ&9gMgL|2c9#!Zay{%BphbY@0rt`=y4$V2cYuAQbQcf%ZyBIX zfc*lr4zPcKR?2cqY0fHkazIdhy(2gvEy1CjG{9j2 zjt)Jjtz)?Zz<$AbC=NE&)0P zI3>Wz0XhfOe=mSOJg7O94eN}s6K)R4t^v+qhXGEv&bd)ko*CdQDe1}S*x1BvYag~3~+~fxSeN2nmYsB6;xmGIdqLJ3h-cndjc$GZ@fJ0tTmJV z{s0fif&0ccf%JSRz{9rxj|5nv{>k@M|BnTDIl$5Y&v2FiPX%})z>~H{ny}Sn0iIT$ z#4O~^{%n930z4Ps`Jnplkt9?6J-~|rUeb=STSvYU;Ozjf26!XDYXM#ls{iIMr*>!L z%>ZwyTlY+6$?^d2h*_Z?$iExlJ$Y`tYd+wu8sftM{|5Ldz~=#021o{>xQToZg_vrt>gKsuhdqGY=f(A5Muif+l1Io=17FDZ^dEO+xG>nL7nEY#L%uF}sA=HN@^Ab_>x=3`=P13imMc<{|bAu~&$FLbM36 zHw|@mx-0G*qGh<@2~2a=?#~87vGcZhZ&P7BdK#IYd` zrXa*2Ar8|T4>f&<5QkHyGsO#)wMT?FN}3}T$s8Tx7-4t)aFdS<(J4g75GRH>KEw&; z=6p_)m@?L$9O4uWJ4-`{Q#IsrDCiR6ybxVOoXs;8;>-}Ihd9IBD5k?%A-buAmRoKR?8U!ren$U?i0nh3FZghZr|wFUxY+M-yEfVo-=nLiAUvuVO!?y7LE|5SIxL zu)={F^46pO;1I)kjzSC-IYc|jwwW3xhTsZ;5g|sJ!!#{qRES$bToqz+h^s?f8)9^b zu@aBb`Q>7-2{BGr1-s>t@wyNbLX6ji;T|RvLrl`py~y$uObKy)h^ZlFgqRj$y1CK8 zJuzllpR+>T7-Dva8+a=9euA?KYF;+_zrERWr$LUT!<)y7a|DZYty(8P8w=yZWH1V zNr-%iLRkGZHGc+o&yAE@XHD{6W;5jwt3zZVR)wg9_*f>Kk%q3ZPk7m@hfhO%uG-Jc z;foMoS_7PyRbMOhO^9DZd>i7&5Z{IPLFD(^D|)Wc(5-Q8h;<=;3h}c@nmC_dLabLO zl#$^Af0N+%5P#~z_`~#n32qXU1YEfK2!d8YI(;z}aX|{>5t-yAQ6jQLh;YI?D70K@?(8RJkMc7%msWH^-D!f~S z))ATs?;fFLggqkc9bwN1dx>nWNPPBI=9MK~!!XYrjRJJ~cWJSD=ZR_m_7E*f@KBy)O%?h($2aJHB;Bb*hXn`P-h%{dXy zljpg{pD*CD7ewe4;lc<#B3x9%GuzYjy{)A_1}=$kS%kh4^oww5g#Me>4lpHs21XbZ z;c^KE8$ZO%DHs-EbcEp%MvA;5!ibvel@YGeaFmf(8({4i;jt0MMYu+oq}!`&O*THl z^av9oOcpaS!lWAIln7HzIjx4D5n+~wGZn8ljq|@D!mSZ*jBtzin=@->#?zKH!9N{7H_eXdj!h@!9%YQh+ zk_e9&$;KY7!Am1N7vb>;%S1jA;mHV3nZP-)LkuOGg$+E8M zl?bmzc-2Uj@Oa&Nelx-frQT9}JHql!mG5ZyuHt)^`XE9S;ll_yF&{-(X(^g}5rPPQ z4MQ@l8O9Ov5fU*4>x7!rG^GfuB9tR!maQoDu_BdjX`k?ZH|A4QelF&V2;T^N8R4r4 zUt87{err|V8Bfn2BCLt*5JSS zz>n~cn12-YchhNsXL0xnxOMuQmjV$_eZrDSf^TM2Ki=#=EQ(Qw-s+r?;T zZcg7Q#!fLBn|_BFJH}{YL#Np}#;#(T#@MAMwVNKcU#IM@y{w7)7tayv!923lqac7KqF&2owO>w>=YZu12-IRBTbTi%+5G?m#|9L8N2S8bK+>Co#&F&0D^F@B1%Ui{B7*2Vb6G#hJwjqzIz z`A3YuH2kw>mcL{CBhpp<7o%=o@Bj1IJdZkgAdfA?aB4UEM*n*G4X+OM^JtXERvK=d z$98!%5Z)$_ZLQW-H55;u?Tv4o$4+_dAbv;7HW6?oI}10>V;9Sk-z|^5@@OWL-SgNp zk3Gzg+2%Fn9Ja_~Z)J)1FQ zI8@5RYV?QaaSR1wj>zLEiH|e^tBy9SWAivc_&8-dDjsjj6O}qCk4~m%Ew{0A9;Zoj ziuhA&vR#C`I>z`j@;Ez>Gi`X5KsOtnlgD|&=NiLV&NqBP9=-CoP{WH9ne8Fa(=@$} z?_-@`BBrlmKgIs0xzse5ufq7h>#~{lNwk&5ElE=_IhAHJPLdGjhFhcxD8;%mV zDvvRFTrE6W(G`xZF&US~1P!mv<2vKVn-BF9^O%&!lsqOY>-K!ADLI@jJR^@;0y7n_ zHwOx4i@70>8wH#L8BH0}Aw^|7&ohRnDJnqP2ejW?+SWr`YyRch}bGs{#`$XQY zxG0Z%On+~Uc(F~vst59TP{W55AGQ>2m*lZbRgdQJSRPO0u~fsy&C^Z&q=rvf;nR6M zC+3+vo)y^G;qx|pQGm0*l*h}4UonT*@_60w8&*OwkGI6XoyYP#-cf3WDc`M8zAw_v z`=R)c^6>LmDV)p0vnqO07UU7-5!N`6k4;m^BU38LBh90fM^Qsp%kr`*$yD%V)K9P2fGrCfp8p$t zsNY%|f(8X_Q{zBpyPDzls%=z2;{tZ5;c3-G!<`CfTENc2t_`MkDPY$cG5KZ%>|Q|g z0`?HU=cX;~C9;K;?4#_y1++BAIqzRU+X7k@(AvrmDBwV8+8A?CO$n>o70|wbLkc)p z0=EO?4>f%U=?^d9NP+)TJi<(lD&Uv`jmb&6);r%V8zQ7hiGaFh7~ZPfZ-yq zsOe{90i#4-Y09e%(0sJ;7-Pmtd5t2o*NVTcfC*y8o6Pky$%c~)m|}RU)lM(qh5}|3 zFw;`kD>bWt*~Yll-KgPBo07K_FsFcdD!Em0t_f}{U_k-%Z6Y?aum;~zz~Tb#EMQRq zcZsLq?i#^81>9S}eKm}05VuXR|zCzza2Pu=b?_UM}F(0$#Ba_V${vYx0c(Ruu52IlNWC+XXDI5!2)y z8@^k>dxly5f$)bl%u3;04dV+31;m;nRE$iJ7bw_}o~dxLfQpo*0?GwsH3IhYaRHwc zu*!O7)#@7jnZ%#hlzb`tRSok^0Y4P*tyO(j!1spfwx)n}1^igRPX(+MPm=TgT%+Oe zmjc$;Fu(DUUcm1K{4Mg20{$%EFPoHlXY!A-{~Etpf;x$Q|C0a-wn#R4&aX}Gmwg9O`bTD4t*#!59zu)P3%8kuH?1Uo0#F+me!b}|k9ny%X#sOb2JuGQmL!_DgVp-1bkXGZLI>_^eGeXD2u(!TBQ3O>o|(+3p%%V6_(| zxFkW31ii)gRP3e5{`&}AY(qA{qpybj6#JXcfCQH(xGcdyV+Kh;{a|B;Bp4=gs4>hA zPjE$o5j70wy)wZy2}UItE&WxBSJ!C9Bp7Q$>c=G*FU_?Ht`nd$`3Z(63XqwcU{-=D z38smeY9`YY%uF!DWGuhF26H%D!y6LZXeD&JIl=q{wi@@MwYu6FidOp#%@tm~gr!HOj{l zJf2`_jerhM*zl`1friwF2_oUx7zzprvII$j zqR7;GD4C`#KxHMtrwKkz@QF05j9+af)O==D#9t&>liH zZg}Ry0JC+3>!zq@UZAi`5!VOYvW8}61+ofnIXKL6FVOVS4n(zim@q13y-OByToFr@DRL=3O0jZNH!p?1X;qja789A0Q{+vP zr1&gFn&RUW#T4ZfCCOYHS&B+c6&qfaVzp{Nso_60{CSFRQhbr(>l9z6_{w;!kn1+9vsHioa6)mf{bkezz3e{xtKyQ~YE6 zzargSn-#HD5t|oLr&xV0fZ`U46x1zZ%VPD_p`IcIJn9?XTA)D@+ZC}*5!+gob8c9~ z_NHVN$;LL^p+?!n@Xi8MHWk=KaaYSWE24Q3yKA_I`Rr-gy#!hmv5&ysCUEm|>Xu^m zD`I~EGOYw!*C^W*abOYci#SLoZHs7ElV!=l;^}#a@rMa?F#d1?OHqGh5yup9lx2?= zAb+gDaYYKGt%!5Q zpRIU~Y0fL6yYTtOTp-~3xu}RfMf515R}no;z!Z<(HN%V5&n4DXKY{*=?B~)V23X3i zbYKyKY?i_1Genx9MT`&_rZ`;j3PnyjQs7EOT8%RP>LMlMyso6!`P{d6|+_E)xIsT+_LW!kuT!iB0f~%dy4ND@qy`S^-&Q)5i5)E zipbUQzL~JSu!y*b$Yv+wR#y;{D5f>Fr6N8qqHIhiP^mFoCH#rvYU4i>_*{|xUlj4B zVfOiT5$lWiridSk_*OH1XZ?I{4r_||sfZtqUn@YXpNm*$n8RNT|0?jC;_pUsE^7WP z;;$n9E8_1W{+0hfCSaBt9-Eam{PG_qY+b?@rRoE}P6=Cun9;l!G3C*hMzI8C5)38$2BYK@-$U6i6v zS1UZdgfmMx!(^@p#%?8CSi;#QoL9m*5}#|e%${Gu1sZlYAGfZHO6Vn~hhk5&Wwv(- zeQLyHE-9g}n0}J=H!=MOlrW@(%SyOhf`KIrDq(OY-z&>v-$DtapGxCd|j#fM)#GK_OexTA!5B`hrA zwo>(b7w4C-pj7?WG>Cb0E;Tdf^ z7t8&m!*jf7_2*!WFKl!WxL5qkrRrY+yrTFj??;hjUN7N|65ba7rs7+r>ZkFU;<4P6 z?g@Pq<5BK2;>c*||BNYgak^QWpl9uS)pZ@HY~Z{LYx~1%5F8M{VF* z#h*%8C-8I0zGp@sL0_*aepUQUk*9;->h_1>KTG&a_-{p~DEPO8|Fkro+|A0>r~T&T z>WSt7fi23|QA4KcN>ER6OU3$%r|WjxTDXDYHf3yEMm_N?XKh3A+bcFwY^+$~=l{## z7cn(aB-p8pSM}9QP0QG=Tzx&-rHow#&d_B>rdb)gm(g709*TRG;j(*`(W1QJ+UEJ9 zn8!Y4>|4fuWwex-{gB*WxRqjS#RDwcM!ivUkeIfL?G)Q9GIeknhX^04$eWQQj}B!V zZkqoq;|Rk?mN)!mF)xXu%hg-;7{x#M`F~BE%|1ZG%M>Z*F-WPw#tab{syM8S z5xN?OOLK*0p&P3htJf;u{7ZS2m0w-PXyGx&P{V)if|19#GOm>sv73Fo4JVc{ql`&q zOeg>Y^q^aP1m}d+f3tUm2pEEvo&w>%bUPu!64zA_eP@n9Jbnet(QN6J`Y z41FFIc2!Huc)W}!)F)F{k z|0L`>Unc=?G!7Zpm#c4bepPhL@4|l=L-MaO{x0L+GX4?iYX2)^v#eT6!RA@@Rlwmb zGBn6gC&QK*>WXKoo+;~R*vjzMHC5YW*iOT3YsiL%8>ysmw&4d2PPC&^P0Wf6cVOoX zO{L+I`RLnKnEYr9G#&< zh9ff^PC-`vCR^Tgj7JFbNqbaQy(M{!OushRzvI$k2%^&2Ul% zX31}iC(Dh)Q!;ePaB7CrtagSL+cm3xgZGd8cX>3|=^4(*a88CZGj!98XJu$BL+;Gk zS@j#jsb?GKTA%0hTx95;p-+YjGF+75LU~fp=6k56o*8SHnwqdB~Y$ zKkM+)41+Ta;4s5wwlq3$9|oyv1uy;#LxqP}Kf^Sn50zK2D#M5jS7jKP;Yy{*v;R>U zJgxfb3}Z5kmOnR&*|8a}vFRLhZH9>%uFEjqdYi!0$A`R{nUrC&`lqeioT(XRWtf)X zdd)aJ!;B0wv+CRURs0{*s^Tgro~=zLxIxMrZAj*3;dPSD$#83ic^T$P#@e6w`yXK% z&d;hp2#{QuVR44rS(xFD40lOzr{a6^xm%cR+#_&rhWj$mina44xIe=q86L>+kOU9b z^z*PVWlJ(Vmf=weSjbkFW_Vma#B^hPQkTtB8J^3qEW2U8DO=@mWd=V(j+X?LS^}5JD9B1Wr31n zU4H+YK*ff9fUFW;t%u3#44-BAG~4i(q1EsI5&oivX~<`bhF@p+CaZoK^0$iQiNCK= zt`Yvxn6)OO@@H<5@vK^J_}2`-3IA?PciH}_;a`f>^Y|yjzZw2BPcpRS8GN1Zkt)?6 zzIbq0r-Cgjs9Vu5{}uUOmoEf7>T9@_;?@;3sL5_yL8A(`t5mY;_=-irGuvRj^@mcn(^{Qkzb z5@=n)WLsC83Jw%`kYd{k+EuDQ7P(b(MuLNtIz;i%3Jwz>-$B5Mc`Y4b{E-4jRdBR1 z#|TX4!(Y4IQSo@i6BPMFDCatSH#RH?oaoh-hy@F|KUsX0x&!(D~{#}fYXUzh^+ zb7rObn#<#?3c3lOZ46)R&J{jS@qFXES2p~Nd7+q#6nj{KLI!59IOOkE>9u7Yb#?DXR+m{_UauoDz1o>WscrBeN8_@*jOQ)B~VW>l*GWbjNy zg6jolRWRF_8!EWb@OFIoS8!Vew^T5S6pjeY4Fv zcRJ(1_U$^H+^tim<_EWH_kaAaee)AW4ZOTx^Y+b895#H+h=BtxyR!NIeOp!2hd2M< l#iRc>aA?2gUAvyx{P@c+Z{Dq%9@)HG|B?MiT-Cqd{{!90Xs`eP diff --git a/dlls/geoip/GeoLite2-Country.mmdb b/dlls/geoip/GeoLite2-Country.mmdb new file mode 100644 index 0000000000000000000000000000000000000000..68de2d540ef08cd2670e744e74cdcfe80fc0d24b GIT binary patch literal 1743167 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%0D!Bp5(oLkkN*_yng& z1`?cV87`XJVQBAZ0O(;B1162?i2eNN^6pV1jcA2C3Z$&NDpU86_>t z=Jdok2R8pBfyh`rkSoQlvKbOwLNG)wm?O~nAG2L@1@kKe!wE(ZjMTwZaH-m;eLo|( zjNo$p&{n3*{|wS$woIJ`SJG<^g3)A45{#k#55ZXKFB4p)zYc?O)E^-jPu-T%1y>VH zAb8K5CKBl4PopOjOff>L(DMXSjh;sE9Kp2&w-df6%`BieS!}N{xteSf{zHkH2P!1PY6CG_}u8vR8>vs7rA1l?N`nf65ZE^-xz*t z_?_YRhCdkoC}_k_hCdVhQgD7X&Todl8~))8oM^;f7PYSKBlySgU+Rt#|4~N|0F+JN zb;(%4*{RQ=oPihG>zpc9pNslJ)aMr3Ugx1cZ$Zyz99;rReF4J-Wy??Dx-j)c3VKm< zU5vV}|D?Wzp|1bb$GlK4Q?F3J*_^7>T_Zf|>r?lsx2W6V&w5~dTmPv+h14VCGz^=9 z&K0W~t?NIjCx$8YWvRD~?oeNfdL~&!y~i@Dx6xuf#5ik63YfAydm|IsBc7lZ|WOU-;sK6>RVIag!<;xH>JLr?zOjer!}g+1@$dw za;VGs54o#2Z9{!q>f4*xcE-0>R+lZn*6!*%QQw2QEdIZT`YzOWGs#_Nk=$J+MLiYR z({Qiu`M33bs2@UoU+M=@-;eqM=DL4(FMRz#Yn#`rU(Er@5L@e5Ka~0j)ca6BntEUA zM^HbE`r&#Gu&ShSQ9qKp4E|+Fq?E-+#yN)iadH|k^<(u+U`?Q;?sz3ee?+~X7y;`2 zP4YzQ1BB^}{?QpTn=@t+>L*hlPyH0?7gLuI&Y^x9^|Ps;PW?>kXNdLa+K{@8Dy0s{ zwj(ht65v4Nies4DW}QTa z`t>TQsk?!?od2xnX;2sYFQsGVy*|U@vO2GYb*sJJM*VgnjLs8sr_py&zuO3_MJj(U z_4|x-zu^OdMm$LUAtN5nIbs>8>sAG0K1N+W0mS`J27|Zup1cpN4AxjnFPYswMS*N$;cnA7MfWVV!U`!hmpg!UYLs@#kKIjxLT0 z=QP?De};1#t?NGt=QW(qaDKxD1oe?6xZy&CF5$vChj0;j)D55iUn4+Agmj;Nc2{ zE9$s9|Du!?5#h>&s}jnj(4+DZsw4k!HNw@qBgt?L!nFw3)RAY{t2-En;ULHC?5jy zx+UROM%d&}C^HiF)sxQ%h1==tSch;29VZJdU&`T5gnJO~OelYTC9YkZv5Q*>qW118 zCSMaWl$Dv@a8JU02qka#cE&dJXPNva8`~hXVQoIR)x_?v6Mgd46CS7|>hK`Kvk4C- z?5jiE@DRd7&9#q)ET23Y>0yM&5gxAjpsz;|9!YqV{Q9xiqg7SqA7gl|piKG^9#42G z;R%HO3HvEi9xa6v2?uDQ$P|5elI6cl{z%=EsiDQ3vGPwx=+g+#Bs`t)3?0VH=fBLQ zix-(22`wC%nF$A){9Qki98On52bNWxLFn1t{$9q@nKK_jkL z!t#^w1|>!;Pk2*7+-$Eix^t@Gt%MH{-bQ#Ip(OcUYi@TC-br{5;a!AxJ7cv@{vVWf z)GaLS0(7ry_#mNV@3EO;Bc72$`3zY%^!_@(~e2|p(Mgz$61PYFNM zwH6YBA>kL!=1=M}Io0zk!tV*cCj3^{*o5DxlA7@EtaZ#S%Nq!PApD8&N1gkUZ&g+J zXTo0zf6+XYiZS-^ypa1f&ZP{FCr6RZ<@Lcn|*}atQx5r~ecqh-N36&9Muk z1&QWR;r#ySNXGx_muN1-xryc>lEJ?TbY-&m5Cyvinfucs8Bw}HB!<0dp-F&=eq~2ClP`@oN;P{Ux&Qq$D@~D?|G&M6MAc=8mNI&2 ztvnK%)R1Udq7{giBU)Zwwe0eG70HUP&Gb(}v=Y(E+Al<_C`XA^4Ob&tooF4RHHdl{ zXH69tt7~tF)^f%UB3j!Sd%3-?OC-$oh&Co#pJ)S=k~S0bq}pJ?rpR7(y^#naN<)5>};qN9oSCfc89AEN!V z8b|We;Wy2teA+EKfaqYN1Bq<$k2D_%T+96sBANW(SEuWvK14?nNu4=dD|~dAw)C-k z5*?w-jMV}N^Qe5uvECRS9Yb^i(Xqxqj_CMq8tJ0?vol7L8d8YLOkLq&S$QI2;XA=!1I!A-*d%Pu0J`JQTNba3a zbOF&IRX}UPV9g@QI?bXBi7wKFNTkveMVHVzlxPUiP$>e7cNmQ^M8nN>1kos>ONlPi zt|}U--H>MH<#}kjh%UN<#->D95`924nn)5Q-ftxuOEih-Dvd}}I?hmj0SkS#;RM5p zf|3bDlZkF1nnHA~@g=&c>ZJ113YqH)&h1o4fl)3lqM9&euO7uLDU8EkpV6HD3zC`qLE;bX1UL$&&NEgEsy`g+1-ZZpT zpjMHH-XYROCPZ@odoJ_75}MKvX}Clm(U^zmW1?S(J|X(bgg+&+dZ->hC;GyeU#iEw zHOGj)Ci>opZ;12=2qL)xUcOrUNMoUb zUbv87)MOSjT)c2yg2s|Gsx(Rkr%a=g(|NWyd(TP3qp=JPpGIWfYleYgokrM|m((>H zG&8bDBO(V`-X(TjKrSn2;bP9gfjYxAqx&XnYb1@pr(pb$n@(V!t%Nwp>xFU^} zXy~w?#>#?4u&d@Yjn!#vKw}LW>(E%!#B42AV=bfCp2f?$##v7}8ru3rP#fCoMur<3 z_BPx^u#nk|#$hxzr*Qy{EojKBvV^du;Z`)ZHewrz!}vQI?nGl} z8fN?(yBKHJT+-;>3txN6t8w-++?&QeH1?yhukyPg?>`HDpwb%qK{O67=tF4e5+E9V z3Qpg`@8LAgqHzR`{w8pw;ZZb>rg5Cn$Iv)deOX+_Io|LD8vT@SPBc!WaSDwA=5$id zr*U%OdaChHEBL3|>lrlU=dXnz)}wJYjf-duEM(51aW0L)CV8IW`7{P~<@<}%1;)Iv z%jtJ5jf-iFpm9mgp)rKUP?H%}aE8y43Z4I_F_Ok*G{oTB;veOVQsHjKUP)v0EU#l} zysDi@<0=~Cj2KU2292v}OrtSDIL4f4ILUA_jVT5H8skjW*S=DPt}Xc28UK32>4rDZ zxY3B41dX^^iN0&mxP`{O#<`WoZARQ~c!%MghIa`Xakt?;`l^2KqwyGx`;Ga4GBqs^ z8a_nhVIv+X_>Ve$BjY?y<2f2n82zN-Q--?!pT;wW&kE|(=S+Kj-tYy(7iqj?#LI$4 zyrM*(Gikg=^E4W-(-gb$294ioyh%d`;WXZ&@ivXmjedv5yEHzc@t%5A*Y^!Spz)z{ zEK=iqOyd*fsLZE^wzHtC)fdM3lEzm?d@X3iH#EM@X=mIuG`=_H4~9P){$%*Gpb@_q z{z}7Escqh4uYb_2(D;+480x=h&Th=VY5XIE(f`u;uS+*kPIESW&2?+eLDMnjoQ885 z>Jl%S^9UAV^C_*&`Drddb8(sr+Ur6Ee_?xF#BfoXiz$Dc))V6_L32qXN`~c}@AMgC zuT`2ZO)K=KXB?kq&4?hEq*xO7x9rZd!0QGydi@w=iPMT)^n9 zY3^)9?sr?7+o`L@zCFzy3VKJHJ1K4HqPYvrJxyj;!`*1^UP$iY^gXzs_cGVL4fiqJ zm*##(>@V1Dt<3{z9%0ObXsTbDhZr8JGWy!burJNSj5s{!OM%inlIHQoJc{PgIiKb+ z#yQsTxLL~m1mpCh+24p01&tU$^CX(5&^$TkSjeX;-A(W5G~cCp2F+V(N~9xbo<;Lw z^LsYUfhKf!E9cbQRZ?O6YYne6ygp|deFM!Kg)sUi!<%W&C^)w$p((wM=A$&#{+rAlH1DK& zKh47aH}9r-PvLs6$=p{YN1!;8*vqF=lXstzSX1*n>(Dau-ddN|dWGcrCcgo#4QG)r?0>7b zxo$#h(?Wi;LjNsj?L%uzT07F(%EY#&wH>Wofo)ZOW{YTTPiu!f1k-0HT6@si*?jFn zYd0fyo#}-WR9_QjMBPX>I7QH(K?CN@wEEWlGlDZ zMI+n#WO7dxIFZ%>XWS#*Srp~S;J+8GQ@T?|60FS7woapUI<2#5ok8nN6_$A_nTKiF z{J(5rmf4=xKw9U}I*-=5It4WD1)bm$HAGS-XIg_aQkkM`T|ny{TJj4o&%KLiT}>MhUWC|@w<5Z!Y zL%+0VAB*=|TG!FKk=FG(Q`(yDjQ@_-4Z2B6@?WM>TQ||VmDbHV<<*)&OJ;ud(PgXl zZ-UlswC=D}+^(gd>AjQIUHZWy$&vXnP2fF-_tJVm|8cbLv)B7oUjCJ|9;EdWt%qnm zXVE=u$$v!uiL@kJ9y28$*8nw_o}l%l5jy!}gw6l7bpD6dv)y@>mSn;UxrV^Mst;gWYTc{qV>1_ z-qIrYhn58Xp9XdHeZ&yYK|C9=8h@R9mR(f+_EX8&Q5mUM@m$0`#B&qd=B#)g;(4`v zMkZySq-D-o|oyt1x6j#nYpnSX7| zGVv?cDPEnp7x5azYien#)spI@jh%QcsVA1J>k!Lij&Ro1#ewm9#Oo7ppn+%>ZD_cW zNp4KsJ73bT;mA1^@utMv5pSk5;qm5%TNrLhybbYI#9ON-vhO~}en%5;o4*ooPrMWH z4#YcZtCZR$(+gVMI}`7s^702wvq;K)HH&W3&os<{YbmXt5qo+@Dx7+jgwT&5*N+2NIv7R!%CXJgUig#1o0nCmz)OGotzo zCcc39D&h-?hpVZHb*mTg#l+G~h8aDCc&HHhUKMA;NBaLd9zi^Y_)_B0#Ig`na_KVS zQN)*P8{fK@GvP;KDdH=IP|k$El(6v)XHkqd=GDX#^tZBQyVVM*Fw==A zYpqtTrWjsBJeBx5;%UU!YM4?>tpXEYuO?kzWud<0?G3~?65m676Y*`tHxu7NY+Jyj zs%U_+_(x|Bt!ShX-9>x{@ttyHME93^-n+$jcmDy!_v)hSSd7nu#P<_FpgU-!M5Op6 ztECReO6K@s;`c4^M~Fp@KZzeBepOtFA18i-_<7L7oqv^d11NDm@s zR_x|XoJ$De7l>an;zdoP*1eaBZSlYOlBi{UNcS}%XLkaug zsQIZm@Ha^h@joOL;(tjNB>syfNOvaY)3A9wP#lIY-HADJCZHYC}CWF!5P zo@`8F7AfgXVp{;DK$A_iafz@DPLj=KTayu6l5C}k(llhd$<8GEknEx@DA`qi8Os*7L};=9dh!Fw9-4e5_9EF^Ghbqt z+*6JO-iKsADNqtw{Qn8b0VD^L97uAIN@_ma4m(xs5UtY5p{m}*B}w{{97S@NE(DT6 zMRGXF5hO=yf(ZhL2P9zcg zFHZ8DLvk{SFi#XkOz?r)}$#dTL1(vB)Q0liwpiG_Bw=Qs1d^o{&12J#*yf9-3WsU*`hby7f*jYg1MM{+&MjaG%GliZ+|M9M;2)=eZcNN!f|`s9`2 z7WKI2E+n^+JfMT9M4mgWb8L~^saxlgyGZUPxyPBfz6|wA?j^ZTheKL9W$}+#X&o7o zJZSh3X@lfpQlI1zlE)=35^;S@6Vfg2CrF;s!FlpzUOFUCTdjM>gr6n(h2%Ms_edo6 zH%VR~dDWbBAqUAzBrlU_N1$6@^WCq>Yx=6LuansLzsrBim@@v)UEd*@W%F$f>g@?D{u*?-mTN0OgN ze$M%Y>#wBJtbQYf~mi;^xux|s17SN=?W(j`et|CduCmGQr6 zn7Trc$`NpVjHqdyNdwZ*h zq#b9XtTWkJ*KLZqNS7jAmUL-SS(0t`O026!ZRbD8s91W{bOq8QNLM7?igYE?RY+IX zRv?|4n6-3O()CE~{E&2Y(shlw2I-olYmw@?8M?1WHC&r?9qrsF4p622^A}QnBrokPrNH2htr$cUFs$?xY@Nbgc>5MQLgEn$@Df?&fO`(nCo1 zB;A`-#{atA%+ew`sk&KS?dNQD6Y2h>2a+D(OlmokmT@MnMtTtG!8&%`Y7HIJPFkPz zP}0Ll`;hk4xFju-B5B>ym!*d*tvP=r=^(Wy=~1LdlO9WYj2aEe4Vmgu{f{F(-V{E8 z^h8UA{sJcLuZ5xs89+MF^6(_mlSysCPkM@RPStQ^KU#V^>6xTwIH%60oKt5bl`J}2 zoSaiOcLvyej`SDlIi%-mGL=5hnIu_#zOIth*TJMVs7Nm`9r9nmQq3;b(OPB1gfL(ko=}PkN;;29vRI zI)-!t=~z;o1(JLt9cQ(Dyv233b*ux7o=AEl=_Jx?Nhgy|C7nWgjWcO?XHp+~`a6>( zY15oZ!<|W2lU_%91L^go)0HDdJgL8;5>m4A+(CLX>8+$QNN;f_Jy^ItPkI~a?arik zok?Film2oh&qsPE={=-(k>0K0Os=Z%Z%leWnb@2Mx@*+a2T32IeGuux zv?YW`NdF^!l=N%T$8-^UYU}^gCrDo)eX{WN6sax#PoFUvTmPRvNBX=9^o#s8=aYU_`2B`d*YlHpYxo_ht^ZGT{l9U3B-Qo* zB2W5r;pY1pD28<7~MhHb-+VP@DP zXv9*qmo`GW08wLE`;kq8}^=WTRdjr}V=C^YS(%z^`Yb?FHw|2HSHSe1lZf>{*?OkbaNqc+R zTN!6-!)*kOkeL$+LH2)XjI?F_zu=CBI~ne5DC7T`<+2;?eT=!g;U2X2G-5A9`2?6L zDc?{M+J1)nD_>s^pnagyvS~|2;C}Z|9>}z-!?ZasgrF{hL(`g?` zdjRdDXrDm)XxhhGSsYX7e;jSu`DMA+O;JDE{bzD$%a)})r6*b7C(}Nawitiat#Fba zL224&(7urNnY0JdK8yC*g}^}C=gcC1F75M7{`_2^5F0Eqv@e)N@*>(78}ky{L%RH2 zTa_GUPQz(ScP6iw(!R`ykt%uGcC=;v=fTe8ymYRhJ;7XM{$GSg(;j2QSi`Ff#|auS zp7zx_ZLNDE?b~TjGN;M3Z=yY=ki3TWRNB|ko@TDsDt{NP&$O?neS;CQ!!GCCIMdbm zHyh5NeT(wd%dNC;%jqId?x20AIo(yr+-Q_77$Xel&rfX5s&09JBxJ-;}R9 z{7zf#ztP$Sn6`h@S(Nrabmpb~Z{hkM9aO9{8=X1nnEmg}VH~yp`bbJUbLBLhxy{MC zfIOc&^U;~Va9x1Tf+k@0zq7E>i{!2r&SG?yrL%Y;zXY8n=``q+=md1ibUgD?p;M*f zikF#wjqlT`&E(Lj=QN$rTqAu|ZJYKg<0wg&+5b*rbeac9r%lJ~f5+^9r^j5E5;VfP zfR1(n7MdD=<1cTx0-Y7<^rEv8oz>~AOlLJZtI%0Bm;e8e&Kh*qoXMoK79C9#owez# z(@mfxQ`KIN&iZsV=n8kUcOyC@>1<5rP&&QM<0f==qoelUUN@t&IUP0fbha?u(r_y} zYX6HQZ)?o$=?GTIl<%)Gd!Hm5k?$ocodyu=^SnJF@i-b z$0@D)bbA3h{R&QhIw#T@NM`_@Q%%OYfX>NuPRYGn?5EK=(_BxdbB6jY>KmQ2=$t*1 zL+2b5JD1KNBdiPPbh`jLgH=*Bxj+d`*G2YvvEe1kRM#PfL+K1FIK%0Tpd%Y{)yC>0 zd|I`0!V_L7#nMh|6oone# zrZbh!6gt;*g}ZfZn!cKMI@i&ePDjotC`PuL9616aue3MOd5+G_bnd4!gN~W^&MkCq z%|oDb8=cz=`i{bv+J8D`{5$s)uJ_VW`(MaBQ1Bl#;fD+#rt^pqkE*L`@)(`Rjd(&m zD(6W$PZ=S*l5>uB0d$_ty_oms4PT&R_P=BHzwTJ1j_GyYx9dvt!J^FEy~&FKR=ALjCOKBDt+L4QK$Q#zlU%xB890|DrKQ4n95 z)7ORkH*~%&=-MeIS>jv9w9;5A2m~1}d*#6&4_y3YD zXt zhJm5lf3nap5;US=*d#OipPBv7%>HMo%A9dlA!%JeW?evLT|l;!`CXc986%c8T+VQL zK_gZ$T+whPGHtnJs~E0oxSF65s~fICwx$uia=zZ`n5|9E0J3$+c5){7C0o~-d=lAu zMz2q{0om4M8`d{TDVLLNMkblIg}6FXu5qqeOr2)Z z*EGnsA=}ou=1yhGgjlv6+4f{R-JtvawLXXh9lJz0mjqD)P zZFjOg$o3}NlWZ?%+Wi`u#X`0Z*@0yHn%I8Mwfd0lPj-OOZz_sb*KKP8l2?b29qL^7 zp~R>mTqAW%azGMt7@6eB;bg~>9YJ=KsdS|H5>?5LCObyuuiw+T{!r)opUI9R>qmAx z*$K|{LoBFrPA5B+>@;WktD5i|dOJ7VLUsn( zna(i_X&$Opl5b~|ol7>5>>TIDRg`(-4}xUpk)5xv;#W}fZ7|tTvJ1#ACcBXAA_-6x zm~y#{7DfWFwR#VmB{oMLCk}vaaUB*Hn)pdxh)@vfIe6 zB$LqO{GSPAW5~vljU~IvxjA-je#DuvuEjN;>}m~j#*NO52ZSJ-NH$r*B%3rdWU?tL zqj@-$>_)O_WY?2jOLm>|MO6t?y-X*&A=gd$TG?(Qn?ZK7zFKm~BqO z9wEDf>^?F{!aZbnk=?EJO$yyIjZEf$`WCUs{Le#V50E{mnJ-x(RYihQztMn{N_8OVw$?IgFki9|nKG~aO?~uJk_I5WMiDJ4`;CIR1 zvkH8YhN-H4K=zRlA6gX}?A#`$^RXsboA#$<-;jMq_9fZpWM61#x3B2jzJcT$*;iy= ztMbAT)Y|wh*$-sjk$o@8SLUrJTeJF+>?h61+i!F3h^@qbp=S=VU&;O<`;F{Rvfs)6 z&?HOh?)b-4`ityu)9R!=G_rr`nT_l}dT{PML4~!kEJn}lO6Mu+ap;+ko;m56TQjX^ zE_IS@?3st2c~vESmDKg6XMTDXqGthm7VPrH>CQ9gS(u(hG{#&~!fCvO=1-4DPe6}PPc5$)8sME*(o?4=bnaSIEtq(@ z>t}iz^t9<|(i79uQZWfo+Hy}qPpYqXJB7|2dV1)|lqt1NWtO66X$?ob+`X_gd3u(m zXB~Q$qi0ommZxVWdRCxkMXjHCZI>3&vobxabW?44LeFaS^pardSzXdX&l*OrX|Z2R z&sy}XUC2w#l+>+DPj7nGqh~{U)~83RL|?5Kw>lz5&qnlYtX2L0F?AMDbJSiN{{e%$ zyE{9(JF+u7vb!%*Xp0qhC=NwRai`Ef#ogWA-K(^vMg>}+rBI|eZE-2~-Fs)3k8|cc z=gG}Ya+BQ2WGoS(j8~d%4@%on>Pcx^X#{O9@eT3$()N_}8eyk~ovo!_l=@NHiPFxh z_S&nIcA<0#rCllYwybuev^%AJDea*qJ<*5Ko`!oF?rpe_po}M!_7jhyw7;IA&q}Wy zpkz={y8|g5MCss;kwy0%O6e#{hfz9$l3YZ@q}8pDj-=E_ixZc#N>P$Z^`&$SrDL^s z25qacTA~d8GL((iGoo}nrIRR~KUBp( z18p%;n@vf4_*P11Q@WngIh6VrtxD-!Nk~cDb$|_2&e^2R>PQP46>2hb#?qWQpD=1xKPIV=vt0-OV3|>?-8N8}9cvH1a z9pgHyh4`MHN|bJ(bR(r(tWr0bDQ+UANjf*stBLvyrMD=3VlDhOr74u&r!Wfq(uZcJoKvgogsSurrH^gwdPUq@TGATxQ%bWaeMRXr zN}p>-KesuhFDQMfZ6d~tNqWwHP3ap)&Mz5Hw4J}zOThDoP?|$|e@b(4&!zMo?s}BI z$DQAD{(;huMt*XJh@C$h{zB;wBflE{X81d$c|x2a>ss(nTqylz{BOg5ELIeJ-1$0u zChh{bj@Dh=+g(tb%UuX}W!!~vm%&{GcTs1^TxZBXxQpQ~g}b-~#o8rsmn^ti=q_ET zbz+yrT~0Xe@`fuIu86ymGh}9=QxM!$a96e1)o|A`vO4Y>M%MgS6L)RX7lYRkf-BXW z=?q;OcYWMco6+3>cSGC~?nbzq;BKt_D?X;SZHl{@24$2GpOGGSUEI*3%D5HjCfura zmJ-j5%$P`q&`^7tTtaCHm9dUEqEpZ#TUARr$mR_3G z)pu4ebtT~zHfqU$rWY*St#G%&?S{Lx>c~7}?hd#;)Bri5+@84G8re?I9hGeF z46Q1ck?^Guw-@eyxI5wQjk`1ME}Bqmdvqx7uDHADspRgi-l${`+&yvk(%{f8XJ{`I z?t{CpdV+bi&V1bcaZklP0Jpcco(v#zTDb=r9%OhhuC)BgxQF5%ro|2IZSuo$kHGC~ z{7Az-xJMbWtCf3U;&JzZ-dlOL_= z8MxAP=ir`&d$zWKw5P;sQ?G~H-`eD1-1BfB!ySNo3-14Luf{ze_j25UxH1V5hq*xR z4sb8Ty~xPLdb6OCOAIg7;L!eZku~KjaIaL8b?i_a>E#dx(Y7={EPny%qNk+}m((*E|d3hl-td;@+htN_T66+>Lt= z?)|v;;@+p4g`3HJg!=&QgDR0(jr$Pp!^*W%kKjJ4=BZ0RqJzBqIPN>RPvDNneG+#t z?o+tW;);hnqccw#4+V!x!sl>b#C;yu=KtdGnu(P467DOO`O7-WX(PXCb$<1nx-5#~C_R&kj|719!BJ&)PUL&6X;U#T}>i zOEZe5w(y&{Q*bBXzHN;^5qA>qTXuF#Zl4`;f(-pgQ^}C)O6D@(vn!PQF7A)G@8N!i zI}LXx?sVJ_a3$LrR>Y-t?bb^+?uRRw*U{O1+DLY3E{+@icL$0`>FtKf8%A2SS+OTr-vNPq) zD7%(($ug8$lqpwq?yc@&=SbP3T&L_)u2Bvs+dY~j7vI(`RQdhwF{i^*Ymd&)bg`$+|dWpWo!xfkU{nc&IO1My_7%bt|?p}ZI6z4a86eB`7SFD>s&dB1j}*>s5V0hIeumYaw(DIe$z z+g1+B2T?w_!zIy6CrN&c1%(`I!M>D_D-&}MfoPm zS5v;;qOPHQZ4pcPIwkGmZm`%J3kl_$Dc?i+7Rt9%zO|!&TPOAo%6FOmorT2s-9=W$ z@1=a7k^BFn@F3+Olpmt}EaitOKTi1((|OeJvHxg3VUi~)KW*fx|K$8kp+@;R$}d^$ z^ORpup|_hl?6NUg@sUAgvw$@7H!*5S-em%;gVF=q_Py1 zm8mREWd$nBP+88RmM!#+FW*VKq6JqH)I;p7tYVT?sjO~fwT|W*g@U4*v6kW5RMw%g zp7C`%n(Irj!#AYThss7&cBQg0l_r%XYt zXvC)yba-fznhwjFD%R>L&@;vskEqcGlecH zn^Vyz|2q4sY-vJ!_%nQcy+f>QO=Tx4+fdn#N_Q$fo#7#s9y;+J9tu*~wnMh3vLlrp zG|FPB^!ksQl)j5zJ%`)#C7C@|cB66#mEEZvKxGdqdsEqy%3gZ45@S?zS1S8Z*;k0( z4h-!@Wj`wWJHrprprBT*HnD(6wr%&83Mk&rXZEesa#RWMVZP~RPLm5HIF~06fOBkC!fctjHL27 zm6xeJLFE}LPj+un zf8{oA{6J+Ml^?16V!@wG^XEc`%C8pujmqy5`)@)je^B|0%AYD}k3WBR$UkjTosa55 zROc^rs4gIcs$;ldksH;8sV;7kMGO~J8>)*5H?joPrKv8dK~1|U3I*F50TPMiHdCW+5@PwGG!XT(_gJKGls( zvVq}-9r?yoOD5Tb>ZVjTE9CzoRo7z6g@kIAYTYEBp-(lSS~DJYtcs|{|JoyjYC^R| zH8r)2YLjYCwLS8SP?g&?>e8UL)#g;UD7fWdL$o+pwHwu~Z4?#04b|=)-h*n-f-B1H zzg)|z+f)67>JC%~Q{9p3IaGU5J(%iF`o6xpv*9lKF21^}F0x(Sjp}|>cQ?r%`X0Z! zr*R?sP~F>J)*s+pdZP*V)nNCvsP1n;S*H67BfSj|G(1Sq>Asc~bcjg~H9U;!;Z#p` z25d$32&zXK>0@}5;n9Z22pT!ou&?29hW!kWH$1`cM5-qVF@Cb)DbDaajGU%sXf;o# zdPaK*@#>i-Ig9Gq8au!i9IGCU?8II~ z_2Po-*AdlAsXj;bGH06?sa|f$ub_H8)hmr(rJ6mzpnA0huc3OaO0<;goUOjGSm}-% zsNP8RHk03Ec(dUxRBu%sIW852+s&9e4DY1+7}dL|K1B6yk(lrv!+WXTXXO5l`~eF- zsKMc)|8PhC2-Qamp(#Axkv~E8$qs*t>eCkcOh@vpGyHkwTCeA+zMx!d^rGQQR9`mo zikhwRSE;^cWRObQ%0sBWLv<+CaTYa9V!f_b)v~9QJvh;dCMek8%{Bts!>|>yHsU(e@}y&+cc`vjo51Qddkeu zsPnZ@svlCFY2+irk2Ok<=PavF4QCmCX81W(X{@XQ#XZUdAUsL^t>W@^vb*?yr z>TIgtQJo{)V&@8qUs=@mhCeu0_BZkq)jz2I>}tVRxw=Fa5a5^BS}=g zhM_M0kGGcL+J@^Gu8X%f-gx#?|;w~5+(*`wNtGU9og z;g#`9c&-Gs?{r8Rk5|E~I_F)kA1R6Oyvy-?yaX@6i}6CdS`md8=_xF!G`G5D-g93o zE5*w#tIUKu;x+JEcumb#{G`y7eGt6O@p|EHf!70XOT4Y|w!-VCdCJ%;hm79dHhA5I zs4;?Cm!5dr<86z#o$PU7YBunCJK*i8nM(!5FxA`%Z&$pXRj9#T)Bq*B;q8gHJKi1| zCDoThtrAoBa)$qA#_wZoyRYGXhWi^HfY)0sw5-G`yn{rp$LoFY4k3RU?@$s4?=a%C z@eU_&@ua)2!8;PKFP^9!gLf3(zyE*f;w1WKmUpcF10{dMdB@?MgVzsFayVZ9X7WzZ zKheAs@y>LPIt=e5ypv608@+j_;+<~6({$H>*FVRz-|HmX*MG*7O@ZwXL5Y$d!)0X~ zuRq>Jy3DwDF5Y?i>zSuZK;zlwfZqASEjZBd0=x?gi8Dg#b+P_qC4Xjlm*8D$(J z{Uz-w^-}j3jWX5oE^_c7i~ypQzP zMR8YYWNq_L@IF;#-PG?Ov+y&#FYxsLU;VjK8}>`Q+4Aojo~{4jeT^qW=(o;@v8p47 zkYc$EZ!Z1{c;DeKi1$6-A9z3D{f74=-mm&ktM?P$&yoc1mv&m&(ppwhQcHfvo2RWI zwn?7aZhzv>kM|ee-?qk%c+Nli=b(?~;LoRO()h|3z;}ukP@(E9guf*I!uX5fFM_|Q z#p?doroTA;61udAC>Lek_-klKi=)baol+NnE&O%y*T%Qa-{qfBS&~cT>*24ji!;a% zxmGCthWI}IM)(!{jq%G;I{qg3o8p)7H*24jBc|&q;JX?We(XM$TNU5a8cESs3;X~- z!WXk^>Lj9Os}tbI_+9vQZFxVz&vg?(KQ+vp5uY1r;J1u41)Y)G6>_bqtfu9Q{;Bv| z;_r;V6}}kL4Zl17*7)0~kI9dd(qhL*7xcjIX+C+T+MxZl9sZ8^+vD$`6&K~UwY~6V z*`>eDC3ImB{9W+($KMryFZ|u`_q1y6Zf5V{jFh3{OkLJMRygtZ#6Sn{H$u{KN5&#Xmyi__FwesP$1D z4IX89H2yIv5q%Z*#XrH+j>GR~lH>o4Ep!yMwNJ*k)!1~IAYH)#|1|t7@lVIU2>%TH zv++gE27l>XX+zaH2meC+{$~8S_yh5!3kEnNPm@2C@kQZ$r`P)$+~HY4{0rJ#eqNRp zA!Ow7FUG$N{}TL5)d%GCHv{l5$G<|`Uxr*+&PdC;3jZejtMO&PzXtzWb?lMMfKapq$5@NdVzL%T`6{Z1{&&N#gg_;=&q zgD+|C#UGA;AO5rW_v1f?{{a5O_z&XC$`ATyv}UNS_Xxgx{J)Pnq2zO{$lv8VB$kwque7?Eh&=kQ;}e;)rO{1@AMG!!)hUmRvE{u`o(KiU~7 z%{WE}pOM!nN-CKX`s4B6Y@a4J=;2Sqe+z#S{^X(-#TbSEHvW{N7Fw?Q_B;3=;J=GM z9sfQ2X=W)}r5{YQM; z{Jlt`qsK4!f8qa%KM(&m{NL4Eq(jXT{6Fyj)EbGM(#YCYe-q4y{||u<{@O>yVkW`- zsv~QgNGX9susp$n1WOPsM6f8q!UT(GP31%red&u}F#_HEMRO3LIAO3P!7>C(5iG6! zE?G(ba)Az(C6JlMDQz31cEJh+s}rn9unNIS1S@Nl{MRoQYR;SXb5V+_6A{^_3J7$wAB7h(H#9J4k<`4>pm42sR}s5p34h z{C5S#piJDIphCO}L6tx>J%X(Wd;+OOKoAjx1T{T1tP%8V4Pt`22Ib_{>+eAXDZ%Ch z89}Z^$i+IaIattiM&9j=e3GDL*d-_uf-MNPR828h)}v7UZUl!AY)x<=!8QclHC9`= zhZe1*C&9J^yAy2Zj2uL;y$N>^G_oUstp8JRnJbFEY~v!h3&E~NcGK8v{xZIY;hu(j zsa!SpCfLVv-dE7beun!K9MF;UHZq<-s;p}Us%>%&l0|ibLkW%{IE>(E>#xHJ#hI+mxJd0TT?QCLkxpN54Bj`_XuG%c8iL4VPSGr&TfvwSTjCk7l z;@AWOiN#Sbp!OcYg@pGJTtx5=!Nmm65?n%X2f?KTmpLQfaYl+KTuyK^ft)_q6I@Af z4Z&5;$e#$V78C{J*E*vXFmjy=M=d~bgEMM*BR3M+U5bsrS8DB;pUPY^s}`j2*mj}bgxaFajjj1sqe zO3;E&6FgIJlRrlwXVdcpuR5c4B6z_W)tlf&!68FdT6NW)QrCVayg^{`3C5KJH#>x>cu#u<(`d{fYrMLy9P zHG*Ig!4!hY1aA|(<&2tQ3W9P-%TE;@?GDv^mr#5_I{Ht7X#}4-qh=9ICwQM=hBN9X z=M9J81A>nTK6Kt#!Gbddjf<0fOz?^G#zYHFB#^Y<5r|8CMew;Zx`#v&d|~*ds*UbJ z@HN3~f^VGBdl7sqsA|gRIHQj=GS`Gh5`0ha8^I3*KT8zBj|4wCqfaw6!P5wSG5pnp z-#MeD=-&zEIivq3_(M=6#{VK*mEdne8M^-=T!;|D1qkPJ#w?`@;ryyBe9TgW4&j2% zm^Cf9CgH-)n34nu7cpGaqDq8|6D~)%1mV(zOFCnIC6wg9nzHa^)T30mtO~`eLpfG5 zvI60X&e#Q2L2&GXgex1aVnK;rjc_Bv)d|;j#!7Gv!Zn?->k+OcC=%oA5Ux+St}`~U zpvdJA9uRIoxS=z4a|>=xxG|wvyNNTlmk0?rHQdY;dJ(#WRl>3}wl`r#(A0!`gp!*O z--LagvEs}R6V?ciAdCoiB#a5SB&-wW&e*dF6T;LPd%5vUP&i?Ou**o3u;q-s)f5D8 zB@_z_Z6Yk)Qeb1ua zBa}+*OSlu^ZiG8KW51Lr!d(n^HMK7ZcPHG7a1Upk)M8ITRa3sVGwuK*`>1f-0fhSz z9zwW3;ei$uNpEM|o2DlCCgDMb2b*w)Gj0aqp@fGyy&k0cyO*oW|B!lMX} zCp?<4FX1uHxOt{BLy5T53Y zUzPB5K~olfrZavM6P~5Q@tY8yLwKH%{)Fc`ne-_-v8NUtT`GU@PX`%}V zuOpQ4U;6PP!iz=djF;M7LUMFX9%A+@+{$V&V+qbL2)0#7YtvtU?0Ml2?se7guFudsx#p< z!q)^vVtg>+Fv20ugbOV=)S`q-3lArJ-I;KMMM<-aB%Dk*if}C98*1AG5so$-qiX7S z;|M1Zj&~-mPWYyvTC04b>MNO~LUo(B2;VXCw&4`Rse;bL&Ez0_m+(F7mucD&BGf*5 zpKu=G3_|hb4+v)wen|K+;Y{ryRrpAil}oRELink6ne`pvXM|r$knnTEFRVAE%cc;1 zW%#vTi6)c?za{*Ua5mw0gma|(2t(JsAGHOk&F@Uw&w_G66rrOEllG&w5Vb|A zE$mD>n%W|Qs-}D~bv7l7t5E!{wj{N!s4YcpGipmyTZ`H<)K;dpEVUJ=EvH4-mbXIf zM6RuG>)}kEZ3;b2S@>*f+fmzI8&ISE zq_(5;*5cNxy$p8}p-8ChLTztqyHeYO+HMvld?7S0y(v>@aW=8}WNPPAJB8Xg)J~;#rpZq; z6kj?+Yu9$LvrH(Cr2eL;IrKL?m)d#M2B@&@A^%gN3InNKPVE9}7hCW`!;4gN$_#3k zSn$$L@G=o9*MwIXUP2RSyWN6v3m~a(q;?avTd3V!7|^lj zR%*AkldIYt)E=ZJ&3-SnyNc>ilUo3ZvhiO}D4G0A@P0#?|Npnv51CM6ACdg2J^F81 z)E=iMeI$PSEH&*iYBK*9d|Go*rC9kMZ zxSI5u;UL4oDpXe)N^Lx~Vbo-*FTvr|UbliqSV7AhA4P2pwKtq8^Gs*7pfhz52~rzN zZJaZ86%9_6p+hX3Ol^WQbrTCtG@N7#;620-&9kB(uwnk7NREO|3B3Jbl$C+{$GZFi-JgqAX#IQq3cX4k9|#n*Cs+LsUn~RTKre1PC6k!RdpEjwI?M#Cczg zJc{TTqN6pd_jgp3L%coeOEi$^IHI$Nq;pRtI-ckxq7$6=|1^aY1(mBMClj6G%vju+ zahD*`X?oH{;;v_y@JSP%sa)k}Tat5#1`vs3oJVx7Ubv-a^_ng@h=p*Gv*Z^MT}*T-k&OS^8j5on?v!{i{kUde|m>M^rIbQ95SL^l)NN_2}e^G6XH{^)$P3(@UFcN)1v(D`IZIf(93 zqWyIb(G;S4iAEFMM>Le^exm1y9w2&z=s|0`hYV%7`(FDCyhKt^f=KI7NvF3 zCtA@{MDo~2>h-jvcfKN*f}Yj1a!VdPPxK1W3qde+OiQZ76I%5pS5=|tM@n32& z-cUx`@10M-A(|klT%#rtO%{FQZxOxi%(6PpdV**w@%%*Z5dBE>E|JvtJ)#eYrV&lo zBr@NN-gjon%uUD)^^jSEh(09x*qJ5WI+N%lXVwS81&KZ(`qYB6omsPqW(k^|pA&sc z^aatEn&+&)h`u5cBfoY&yGMeGdOSlUslFqc<9t5cf^!9xe<9r`75TyWvL;-R=qIbr z&qRL^{X#U4=vSiORN>2RauEG)WH;x_-OM5XB>IQwFXyY1i2ioI-cmjD>n(}VRuW-6 zpP=R$FF?FBu|vEB@q)yQ5idl%DDlGWHjEe1Bwz3Be0`Af%^}2#tNh!|=T!W<$=FTT-FzP^5j`;kd5r)DzPm7W3NHw9fv$0jsxO|SV&DW zkqtx?WkKmUCYG1K2esd{YW^wl=ENCslQ<`~_t9doSSW8F;udk2rj=}q_Z{&T#NCLc zJGN4}m@O!qw!~W#Z=+nSD&FSAJ&5I_nx4c55N}Joy~Gl4r%O7kB|8xBC|d?-5)Jm! z4{73^hb7ku28_&9xirrp<%*fz3Jeu4_MWyE98Ahz#+V(Bt%eBx6LPa{5E`(pOa7Ce*K z-v5e|Si=&ZLwpT!fAf}eiLWF+kN67W0s5vXR<9#I-*BMjticP2FEnydM{+UoCB(Ak zzr@NG0R1}h%Z*r27Iu!WBEDL?L#iy@t^Ro}^{%=ZIf3g^6DqP ziC7l@--7rSL#g%sMs6d%o%kN&JBaThw#{GULju*jTTnkL5Y*tkhWF_=1|zp4e!zkc zc48m0pu9gV(mqQ3n4UrENRR8DCh9p)5I;%$Jn>U%l}esAe1`bhj^w%ao*f$d0`ZH) zFFCV&YpfyhE7YY^UZwt__&M=w`X(qIL_Ci6;@iPHfva z#v_PF5|1U;4={*r{eLB+iO1-hGC6EZJ7V1el6bsIip>h+2_~5+n{F7HtWm0?TR;-O zO+3Yjek?)!j-h^S(%vC4o~B%*rW?LbJfkD|pi{(5V(G_^I`WTA^Ap2QiDwznZFGn~ zH?*DU;xCPVCD`8hLlwRu{+4(ivF-mD&msPqc&_Sb?03Z96aPs3Lm}zZ`ltWjeJ}pS zH05Oft&{5aPF?=!Nd7dPzld%BN6pzj0ji@4M-8ApKlKXr1*q$`jMVijAnFTJU&zS9 z)R&>Y2=yf_s9yn5UySE+Qy`(yYpVajOp?34utJJrp?oro0T&Vkox*-Vlkh*UEVmzX*`@a~k8z$6K z>X{0UuIiyl8q~L)lMaHT7+T81GKKhmoFzM0bd; zZ%2Js>f3j8cA&2NKbl%EL&<;Vj${`l+Sj{T)b7-6OUL>i)c5S@>_vTV>ibgPMXG1QMW(zlT4J~;J$COKXu)<+h!?~dvxQ9s#&r%*rL$f?xr+elR&V3IQo<eo}h!6Y{t-eh>Q#VrD+!4})u|F=Gj`kT~; zoA7n&qm7K9KC+`f$|P_6r<5@!8B2Yf5gYu?4C)i8Pch*{!%5U93o-r{^|zJ(zqM1T zze9aG^>;fu?@^yta8aZFen&oo`Un4?R<3CEnfjGN{UgJV4L_m&sgYTNMm{tA+?n0i z$d}Z=(o3X#0A_Pb>fcbGL;YLovx^ymekUW-fcjkO-zk@QlzcB*|DO5})c>IVqkhX* z|H<%Y{gO(9zfk|R!+)c$`+rf_FMFNYXB+>s6Z@A1|EB(rl7zNAnU7?ClPpk3^jqa* zK~njUdm)mONfsvYNERVknq*OuB}f({SzK!&(^~oJQfBhWk|ay%*GDp$k=c%XN0cl> zQYKlJ#FeHaS&n3Rl9J9OlNAhCBw5MG$~v)B`6?uBL9!*u)+AezbW;zJPYv6twjt?WaBWy^)t)5Vk!-6$(a|EdC)q)5whT?u zi)1$vY4cr3tVcvyd`XMjRX?0lvOCEkBzutTN3ti$-X`3u$b@7cl6}<@NhpVW)syT` zav;e8B)wH4WeI9N2az1CpAnid`lWOtZgVurVI)VA98PjX`y)yDN=NnkkQ}8sTLsP9 zV@Qr8IhLfa<|$EfyQKB%M{>Ld&2ot%Ig#Wfjg?y``9fH8JB8#Ql2b{ZCpnGeYLe4Q zM1BUzStRy(Ub`jFCK*6-j_%r-^tZJ336N%@pR~zu1&VS%lAKR+A<00J3)CLD>5xG~ z=JUx#Bx1wG>KI3ed6yW9*Ih<(CCTM#=j{7Pt`Kx)KU)MfPubcvxrXFHl50tBAi0j@ zdX4?}t|YmUvjp!nyi3r?-6XP1w8-x@l*OM5 z`TZmhD4#7$D@*J{B+rmYS3Xi~>`U^f6iV_K$hTC zqn;&sPBRo!1?9F>yXggz7fD8vyhJjH8KTLxH;0l8H!`df z`#Q;p;%-+*61llZq|i@E-XM{4b2Q0Bk})LXNyd_lQzw+H+Ge~-qMt7oSqUMTL?YfO zyEfZxwVL`i$rSZQk+f}ihvWm2cS)v`yhk!k>nkoNhvp#8Fhetxg5;PzljK8^k4c2s z_n)FxoCuovC!Jc%BKeu*Gm^O^pObt`@&(B^b`pJQ!|YciU$>2yd(3vr%qE$mR!N2; z)c*R8`;)kS5%G#?;coK(L5w^_8@ z{-;Zl>i%DHkSTKz1 zq^nzZ=$GN<4f9gVR3pYN?)WAX+j#4)+MNg zivG^0kfx-WW`6Yp`ou|Y$E zyO8dxlA}*1-A%hpi{9OE4@3JSAl-{p7XOzhYf>fqlI}-(AnE?j8S|4KK-$}xJ=dB2 zmosN^XU?k5oQ<8cmm@ux^bl<;IU~f`#52>wNC%Q0PAYA31nEhnN0Oc(wIJ<7dX)Bs zHtf-c#~2<<+Sf?u`A^!9)Smy$iA1hX64DdfTd&G_k?Iy;IzdWLB|V4qG*W4w(@D?J zj?>2)Hk(S%B0XE1R~}N?2}|0abO7nOr01!%@^!a4A*q;szCNze>x+JsO?m;@`=l3= zNjHgyzoAot^kULWNFOG>l=K$T%Sf*wy_{4`6339uAEoqn)hh($d)oABm8jQUOL_z8 zb)@p&ig}m#iOO#zz1bQ~ZvmV+-K1!90BN6lNN*#(lk|4dJ2Y1QFA&?b>Fy%EyPc0r zSMHRqznAm@()&p7*S-*8-$|CwgQU9iuX>S{OZo`uOQesIK12E#>64_7lRlwI#B3== zd+;ez-3wBUmt$9{@3W-OThY&{j<(MWq%W$qqBdt2*+881WzwOfuaFKReU6@BL@|5KA950=yK{<3VnM^u`^exi2?Ig7ah6nyhD!%lN+E)BWptgx4 zeMmZu^nEj6dSN-~4AKuYH)$Lzg>)wAC!`;deq5BI1C+Mdr=+v=fvu=XwtB98PWp|U zp`>4seyKhz4=~fONOkky_O9INw`2k7Y|@`d=a7C+I+yf2?PaNsR9|iTf%Hc;K!VmF zq(77XM*0isuc{_>7rD0E@1*mzbh&z_f0+CINhSm4Uu4UW{!J!r@(AzM%-8nsXnMYaf;ZuLmEsNrIUx&>r=i^gn8G9CZPZ2w1-lPycO5}ED) zm@Ti$s;~mtivLNtGTG{6t5}ro|46ple`41#iR_44q?Ik;wM4RY$Xv2@$u=^D^~l!m z=xEcCZCGd;-bPtCK}!_V7nsNX`ZE zv@9V@MPGYggj!Zk)*@?=HP!dTnI%dFz^sdGb3G|UP5yC~5g^-=>`t<+$POjzMz))} zQ?@nPHe@@Hbtl`FtOr?7Jr~3c+_57C>D^GMC=Zb|l-GtQVPFEX)$|3e9R4 zvR$<}DOB|3DwFL_c8F!N2icxxt^HG$?QLAL+MjG+GTHf8TKh)bgI;!@&knHI-i8Mn z7M*gis?Cw(c(qMSJdEs2vct(vCp&`dG#$OOBgy)ZolGX(*N^OI*(s9j82vjVJ62x@ zDCtXfoO0PjQiI2nok(`VzY-IkR0PSS5l$^M+bBPh$kjQMOMq-Tyn*qv$Sx&2o9ukD zbI8sk>rZyB8eB|2wA}`f>5rv)5=r~W-ElUM>>{!Y$Szcg45T~H(-S$nnCudrLu%jI ze|gzuWH*ytPId#C6n&*L=R7T4Gr5ZFYO?Fdt|7bD>DADm%eEWlY%l(Ey;ebvIihnT zna%&jq+;yNZXvtPI`r1!WfR%$Wb*%){#&Z$Y75^*_B7euWKWRYL#F@mlHE&opXiX? zZ>XCB8+p+1Au^rM7=Og@QL@Jhi4I3nQ*DhW$(~ZKZ^Udanmt4I9@(>G$o{dvO| z$c8#+j3RrHOd97^<1drF;+!daXpRyjlTI8=Hb^D^FC0>EvSDNs$cB@RCVQPsAN!Dv z(00(YlJgq{SAC5dLpF|VtO_N6m5e8QvmIO(J`nY%$<_L0uJidzY}H_SdE`&3&@ zTV@v74`iQ_$-w?O*;iy=kbUXQxkVM^$0$ADzb5-eokaXihHgC{XOqn(o1>j8qqp|& zcVyqIf=)xJhETO7bW|R><=>8|HUR1**tv_Cdp;SlKn~c z7r8_BH~D;I|B$0;Ws)G{hImUpKluWBI*3q`i|ghKk}pEO5V_s^hz-TGU)oLFEMJU# zL-NISR*)}2zAE{Wg%^=8Wf?AQxQyYlhRcyJZ)63-6$Oo~M82|-RSJo7PDZ|(Nme&p zqmYxYNxqgz);3(naNSPqdKO%tTxUnl9P@MWUYRK78*D&#uyYu6uZ8#?Dcd5t_Ew`WAsp5p(~q$?+Nco=R2axYYzAyRSi?U2_@?+Fyd8m^2CGSUmoW@F7 zayI41lb@hhPqAOxSxY~OT#}qjej52H)5*`!asZf83AwdB`zY!hd@p8N*#o5^n^ze#?tcILdK zhx})q-%=3goTbQbBY%YacJjN(?;zKQ|C)*PxIEa*?+VsN!$9{7Les%s1wB+VC0j_sO3nA4&ck`3uek zGs&OV*~Bv7NpJl?&I+D-Hzv%EU zE$XYHrpCV^|JKNC^52ZiF`P^OossVie=z*f@F&Bc4SzBGRj|`~zbn^vm`DDHkv|Rp zGW^@{AH@cS^BK-B*v_Hhu=z1G7NqM98Vk{o|HO}=u`rEAXjEw|N@G(Ri_utx#^Sn0 zO=AffE7P$3zZ$at*K;(MHu*BnRSVKsR+giov7D}9)mWa!iZoWx)of&C9$7R-7GG+t zq+HgMvGr|qfttpuG*+`5R@Vh{H2E4d))Y=-EgBopSliUrF`ab{*Q2q%<{(+g(cPBB zX>2Ij(%6W`#+twKO>}J>iPfw&v(ih(UBj|O(WvOUI$8^l#yK>68dCj$#$Gf+8r^Bs zEMcSz<}_mCbsAgINN9A?NM(5(8kxy+8Z8oW>Tq{EoK6 zmd>21R+x(Tm1T+Q?evovkjr z=(0s>@UAp=>+s!`%(1nq8nOi3b6Q-_eQD?ta5VOzv9B4qp9%M;aTpC#`&Ed8A#&-Yk>=`E*Dw*>{u-NWXhM)xRb_ZG}OD)wY1%? zpm8OQn`m5Ru6s3&Yc!#BqPD=bG_Io|i#x4F<9Zr5Xj{pWdg5}@L~82IG;X7Diz(l# zsjLBM+)m>T$-ihxE9fp7x~dzEyJ_4*<6g}~eeb?bS@)aS4`}{s*h4gQ2`SA%Q$3<; zTH<4Ry=y#9t4ZStn&RzG(%hNGQ#4njVVhAlo}r;z2hwX)Y>gWHFlZ z3b^1)m}E(sOR1#4_BhRDoC}trxh%~UoxR4>T#n}QGMzscX(hrA*y^(Z#? zY;I@5?G1OJxg*V;X!cTt&aTr!Xv!^s6eN#;iV}CDDG&cevPVa`eQ173^C+5U(L7qZ ziRLke#~SuEJWkL^KbptWJlXgOh9?@HBXzJi^+{XXr2$~}ciRP?2 zZ_pfVWK1EaIhN))nzKwOeH3C-!I@V?;;njaK$&0q5rzx~LFjQn{MR5NKUMr#=( zdI_MlgyE93bd)o`v=Ys5Sz0xdEJtg3ldM3iVv-eUtwd{MS}W7qfYvIs)-(C4v{uvP zn)B+k)-a;uKP?^njjT;;9V6?iq!npdbk40@rO9%f#NNW>XC0d(WRD1kyU#eOz zEgk$jnpM;B3JEQrmJR+bSrn^tb!&BcvlY{-o4#HGXxXKqW#fO##{X6^{@Yxl)uJn+ z)kSL>t<7mYWl6T6wI!{6XzAcjtDE80w01DE4Xy4%jQ60`v%|MFiH-lQ?F;XswIi+F zP2S6JCt5ojvGKpv8UI_m{l7Q1^b$a8PeZ)~(ArzDli|L!Z2WKSPwOsP2hci+R&QFz z(K^tS52AG>t%GSDO6!pSBs`2(Ve{c_VR4qV`p`PY5*|hCXpJh$l9Q-)EUms;?!RYB ztDk8ePwRw2lh%oaKCP2!T}0~?S_5dEO6v?-r*(8r@93OK>s(rA(dtj@Y+C2Eb1w4# z|5Ef4AW^jbCxn&_{;h$ubmTYrg__XxXthPCo>G)6URa%2+$zL9JvRHj-*(IQz`A}NJI;n=!dfifuFx2s%)+mi_ zE8Fr*3oNiy;otyuEUpCBE8VHB3o(3R44I9(ZC`_q-vwL4u6y0)XMX*w;#F2l_Qjcj4KC0$!}B;8E1 zHC@{n>2BD=u&1F8{(7|S-`<2f8187;i>{sM+J!D1|2t~CD%S@5&-mZ92VHx1g_JEx$l7Ax5<*CbC`+66&HwXx=Z;_h=b7hy z-t(T%S?A2>oY{#N5-$>zRH&2Ou0h?U8q}OGL*3;mzk&*9gt~61yDHVMR-$RIMO|;& zT!*^rNxBnnPy@~FM%48n>6t1u|4*?Gu`lXwN@M#`>5sabNd_c3%eobHPonNN)ZNFZ zfy6o9TRo5b5Uyyv6 zDsxfy6&3pbx^Gk;aBCX-Eu+38eovf_x*tdupl&Vdenj1$4E{v?nYfVn3+jFqLcWOj z8|r>1S)A%iQ1?f|rBKxU#n``zONq;f%ZV!lNmdg7LEWlUS&cgN|4GeJw~hwui5rL; ziJOR_}`tlqo=zosro^2>Gta?3VJ~ zsqBHwo+Nt__fBIQBC`*bMnv)dlGT1`?Ec6!rqU!;4q#BGfU}Hc2O-mx)oX^#u_Om0 za|lUuWa#QMhZ+OlMdmQ#;ey5)N75j{qmXHV%rVFuE#m*XLXtTSnGJyHGjuFzlCuO!&L*Bi>`c_!B6A)xT}aLsBgy5a@U$n-(x3r6)t<|brbM5Z4yk0R3_nSt_788SB$2M}*T zM&1GtQC|MiBFG0J^AIwF$%h~_5}BdM+>4C7{MDV}9mw2Cau@M#;xOVp#NmP@Ba~=E z?nCDOgeRpib`&xXAoJkXIx-JyP^PqI+pr>`J01DR>aye@BOBJ(QoHGNxinT+-~ka-K4HyMOf z_0zTHYWW^ApCa?VyvT-(`2UZQ`4E|p^u0DUP( zB{Fl7`QBJ22ijN2e2vUJW0|<1Z;WM^8q01(=38XGGnUh0M>$EHsvHFjh1$R_sg5Utykz%p#c0kogTJkonzMaTqd- zk=cOE5@SUxWd1;A4KjZsvy{QVh<_U^PA6GLT#n3YWL5|_R>&d05}AKURtXv_B4QG? zmNt^@IwoA7L?N@0!A-=?#4Um(|JH2GZD8&Pb6d#}=5{dmhH1du8Rqsdr9~p{K-@7c zQIwq$4s#cnyTja-LD6?hDh6{8CfO6_UTLZ>5(Tp%^?itqi2Kq&+X8ccm`!0eHdb_l z*~D1U8|DFmBnQGgDB&z(u(9Gkmoiv%Rrugt2NY%+q0Jj8&6h))}kbFjjpe8%)z!HIHHrrnKFHS<$g- z=3y3Cq7BoB>A-aLfHI55YTH=d5vJr^GFD$?tnO~CzSUSg0%kyi5N6p}Jy0&isN4YaMq|xT;kvCE1+yphUc}xM zpCIoGa~RB-cHq#Am7Y7?Z3UKA%LTs$Y0m&hgR zWth_Z*I-VA`Kla`iJlx6FkdGTvp1RQE#h>TGjt-8X~mogbCw<*lC$nv8Q$-}{EBAp z65k^xyW<1$4~cT%d<=6A%ug8nlsKFCnV`;ATJz6|Tn3n5lF!vxt{E8onkfEXjOW4p zma)RWgZX{RIR%)>VX^?`k1&6M`BNJEGt(~A;EFCVe`Rn{8v9$?1B;Qp8|D&ZPlPE$ zXah_>Fks5z_7BXzVXlC=6y|chJ8v%g?@qlwq9D(}m@D);g7WVtnCsPskJG^1i0nZyHzB(_%+2~lfw=|QonZc}39~?U8+~X&9t+8Ci>!g{ zcKS%bEjcYnvdV5x+yU7gk!_&Anv$I5aRqs1AiFcNyCSGIE>bBLW)u>y&IA3p?gp}xu+(-?W1H2Bilz> zjci|i07hePLbe~W10@#O{>a{}X37U3drQi1rE;4FXN^I2P^u3`b_k<}5^pEok;Li` zD79nx44aZ+$UctjJ;)B%{#RuLvJa8mi|l>6?^L{>)fqpek7^sGrFyW8ldMP{V=Bq^31&VX*%{39Nn|G=`y8?pkxiff(L+O@ z|3UT{8b52Sy_CU8O!7Rk(~+I52dNIf7Z^1K*%!6*HEnWmy+r;pvikEl@@d3Zk$ufr zD`V_+L6SF+eKX~6k@VC0YbVS^_B~{0A^R@d_%`vKqz94~QF$NP50L#(I4dLG>0>Qa zc9ZrS|Nof%lzcXON&f$sK|Iq|xGAt$c*Z)E>Pb}6!JkX^}3iN z+(6t&Oor2D9*kT5OQju~+XlJqw5qvn1-0h#lSDyPwnuIUp#3|k!ysUUjMIM zqRH(KYZv4iBlk6OO^};_+yThljNF09wPYy=A=ebSV~}fx+!4qfjNG9*-g1W^*W9q1 z8f*1Gt;ijw)ziuxUfUO1RVnu<R5967f9st!~)S4R6ip#tmL4rcA3^=OH0W4>gA;7+K>>r3UXyl zBFBq%g+Bj@TopOF=5sM}u|{c$9rfAHTqoqNLQeMhMaZ3rTo>eYDr7>5JtyUzsYnl> zmnix_+1&ZaT|m97itBvjF093_leGH$Cvvj)FC)2B{fsL5xFd2`2$EchT(^WXhpUmh zf%-MXYl+tpuSc%C5Z$!&8=3X-U_KhtZKRSX1#aT_zcd9Dg62y92o=IppqSH{ONZ-TKI7ZWwZp zAa@UPqmUbp+#yTnPe&j|9(SfmUn6Yj&at|Q)5ONP1>z=Ncvbpm~1D9XeNZt*4+mx^Iw^y*3Z>oOVu} zKV5h3J58do^O5_RZTW$?fcfYwfZR_!j-)v0kYADeMb{xLh=uy%sAbD|q}+y-k`SWRH@`G0G7?NaG~ zYY*a{u=Yxoy`9823(LfgeV!U6f%M{R9`FdHyi+%vCqgdjBuntNNKv+#-HA_l| zbueQOfz>=!4yAG!EINO!?Gdn!Ok$m=Eauue4A>luM&C@8ztY746!tdrHN%RywF0_!xAQ?2ME+RR?=VSQ!-dgJr@R3M&gs>Xw5g6|-RF_1gt}I}cU?mJO>TEJvTywu<^{n7oK; zxkL{ZKLMeN4@*7)n#6{TEyJpiM8s+uE1!T6`+8&j+a&t_Z}Q$2EWZD1odxR>SZB+N zU9ir9)mdK-k}v02=gMnAu+EbgS7CKY-e83#wdzXcf>gN>)jo$JVYVLbqAguXthjlCDveI)m%%1Bu9dbP$HJ-Whrkg*RDA5L^wkH8vDWsEBP zXcernupVO#$LR}q+Q7$QJrC;%)^NNa$&;`qzn}@_QrS6#0h8^CJ)WeUNV?_DsUp zE%Wi2RYr z>-Qg$DCCbuUf=vhKKTlS4piiiBl7zX`Ig9^pvJ1VBDN-;i2O;&w?)2<#?~s_ZYzEY z^7Y7{ihK_F(~vijZ_k7sh^MQi=2=I~Xi!^}O>}Y#c^CP7q99+OXd|!wUpC~6Nx9@6 z@+IUe$opw*fPBa(dB3&RUIruNt0b}NwVHRN(ut_we<0x$kmo0iw77GSpMiX5pCsvu{FTUGz^Ds}7YUMFOuPj7OOd}UE%$QduTTT225Ul_ZpdFn zauSNIJU^wz4Qk#3J z+(*1Wt>-A@Mo5iR7gIhpt@+ET@(S|PkbeVtI{*A@ zO!B(M*7n7lRNhMMr>FW%XSKCx0Tp3i-cOQOm!PUrMqpRhA>4)MsU? z{FA0#P0KaNZy}K>U|nh>Q^1ClZ$y3*@|!g%h1Sab7lrLLRRP3pP}sI+U)YX{kyw)N zK-`hofVdM1>ilcD6?R2o9~AWY9~5>+VQ&=npxK@%=)*tyvb?-9Kk-2n8fvO@-eYVd z<<((;qVY>J!G$$Ua`JXopg~L%elFAXPtluab3P&lCpxPfzJcf8I@i^k~#FoSpP-rDY zw+%b%qE70p)i_BP=UTV6C|r#~JBlZxP>;eX`bDzBsVK;kKm1L+ESL-JQRsj|5e4=C zD5&!%ky8MZB%3NZ1}zlwsZv0}PPt=jXqqh+P#BHE z7!>IC3y-Gaxc_WWkmo<;7!QFTBQ}`hOJOAgcc-c`NlBGjw-og=eBL zi$op=m7qNTDJYN93BE^sUy$SjCA}oik5Jfv!pA85hQcR$&Y}f>~g8|;*SMdfQ_L#I@kN99`-zC&RV3g4&td=!3Q)Phv`5rv;p{xb>- z8T(7B{HkQbCBz=a_#IIAow%5|g!l*XPvT!F{4IohDRCJJ%TZW`!U_ggrm_Dhk+br` zYU*oHSVyup)z>Sj*=&TpEee}Zp#PVz))cnD1`7WsA41XZtJrc2_7R343?l5%wO* z$uINS3--aV_ht?a_3MS2)jqJ(@Bi5QQsF0n?EPUkmLL^=0?6hkfb0WdA4E~V|3lKO z_Vqmb5Y1DL?%w)O8Q6!yJ`8qC*oU(wM-Y!B9z|?HJX(^`u&Ym0R6+yGk_|KvSj_e^;&*y{g{4eEzs z_f7Si80-hTf2!O}WdQLOBB%Hb!(b1D{TS>)u<66?!HgXOdnoKXVXO0pt?Pf?Y6a;O z0GsoOJuDT6!+r$z2-qWGtMjMLeXwi(KQ$W#Ti5@LeUSJN?9~6)@*fRb*Z;5|O)ba5 z9+z;*2lnHs{siptv{e5OTb)12M94+U|5f-I*mVAKsY>Qt9UGHizY6<#nOk8`rt$)h z;wiBC!GHTj2KoKZ4P#*I_y1wP0(+XVfuAQ$P>PUoB_9W~Ux)n$Y`M%R{7u+zkxVDf zAkHMt5;QhErKo%S9oY2$whZGRV80Lh3)po28v7w_K7uXJ|8rijKY{&e%4aiHUI7rx zImU*!V1F*ipgjMd*w1B9jyQS#KT%}Z&!Z?0|4YK}QvG`d=O;OkFM$0c>?N?};r}G< z&(s&f{v}m@g}sR4Z$x>dIk8-Q@m$ng$)HS9I8*TG(^iz3~{a&)ZMkBP}97aQ%3JnA=bKW>J-#dxlnoC;mFP0v*7GtTzDCr9myLIWeV6?h|y2d?gD359cp#jE*g#R5!f8hF;8Zz8$?%``17Z%>|5C1eHrY8Gj`;sRGDPVH`@lI$mkKiL zIY+}O!Z`*`YdFWkIWGA+G@Rq%oB*e#UQm_)8i+G=T1nkBe{G<=ARraK5za}(HpI5X zcEpp3r@%Rt;@3UG7^fYZs?@IA?yaL$DzUwfMe z=WOiV;zu^x!y#DWW;W&{!asiyK+y(SD&V{-{mMs~O&c!+gyqRz=MR5+C z%TRn0&gCfH3FitFZ-;Xwii6;EL-ABNSHbxU&ed=pgL4g>A#kpRb2FUl;K=T~9!?K9 z>i^-~K&1bdFKTL8BI*pX25v@&J;M~;Y@}jUHv?q)c-pZ zY0pytho=AzPXU}~;ppO@v6E`+pIV{1{?|>u-0pDw?{NL^yaZ<&94`JHUHqqYcoohY zaCH4I8=Tjb$k%$EHyL~jj$HZSrI=d&GvR#4s9A8{hVvo$J8<45c~6k!ec}fi)SAfl z8Jv$Pexjn5^(k?7S`!&;UsL%U&KGdzl7A_f8iABZ)NrH=}qkiie?i2stN<;-PB8oGBiT;t?pe zK=DWhb^X6p?9mkEe>7SX^5ckl3V>ou6m{`W-U`LmDL;|QNgC7|wngz|6x-D@QRS2* zie{&wm`AZaigh&ZKv6FNCH5$0P&75DC1z2~p=i}&YyDF|QJkcWVn-Am6pKkLiY|&V zQ+Y%^1whexANYj6DOzGgZ{svmnnJDLIGO znRu??RylM*F){9n;>9$$0L2SQF8a?B#Y?DMO1w;U&Gz!N6U6`bKvDdEcNDKmW3Q&o zH7H)2D%YWSz4BVmsQ;(Uja${HCyKpNy*Fd~px75hI`-mCRQjRVKef3T#Q`b5WvhHR z1r!HrlAiR=g)o zH3CKb`Bzewp6eCwM{zWYBT*csHgZy26#w6cc|M5ZLnIFqWr7g>cJeV=u6&(XYcf_> z%W@;WI1a_fP#lkGGEL3yf^{H7f_st;&VEW7oS4$X%zM6FH#>A zpVh^GjZe}QWAS;ds+vB^IZkI2*+mQG5->sVKgJ;!7yLtO=zE`F86CU!XV* z#aH!AT-FRM9mUsCoQ2{WYNMIF$!5MqoKBp9;!HIjv6R8LHAA^xT6_n^cbSA0)3on1 z_yLL^YE@PFi1;y4)>NYKF8~|Xv!itVuPeRc=O}JQQL6VBieIAm6N+Ryx4 zE<4>dYCBOzg1duurn@8DMsORz-2?7UaCe2fGu&Ntc`xHc*6{M&l)D?;-StwEe5zV@ zkbLpj-4kv@xO>6fTP>eFzShI;K3Z1IW?#4m!rc#U6S(`sZLIpnz0=qOl<314cf&mh z?!j=I!flqsDr&ihz-_MOCVA>nc|P33v@Oyt?hz~*OKJECa9bH050MRSYq%$-{3Mc=aNELlSz6L%wkU{85Zx4mr74GG5)8~KO3*qYXKRU48i{V~Eaw*))D9+Sx z;A_+saJ$3360UyUA8t3eSHZm&u73X??lq~g|%UxU=9s0rz!^oD$g2~yEp0B~m-y&ood8}4kl@4)>S?z?b5 zfGc%V&##S@CTngV!d1_&`Agfie`NhHJ^!gb+a`WSyYVyimhK!w{(>}8$mejsfcq`^ zm&Cbnzk>S>`PYKR#v9?zONgST`VQ{*aDOA85BG;uUqIzY;!nh%i3^Fp!2MMS`64Bn z^Y08UPIM}Nz}pq>pKv$A{R{3taQ}w89PU!M%kat zyzObT1Cga`5?=rDc7n(2KdS6fyI||>2JZlPddY}M_8`jh|6;Qjy!87IUPE~L{Rire z;PLwp-hP^iTr~FfCpIQFQL$!uAiRT8-V|OlCOo4yh9U3TkRbV?+SQFz$?NN z|KCCeA-tpXXHPQVy`$l^guH&}9jnK+j2Z7Zc*koGC*w+1Xx<6%Oue__wIa5LcOtxY z@J`bEFJ2p6HYjPUM9mUBMQ^@n@KoYy@Y<(J2P&r%>)>TnXIi}}>1E;NNGzRyRmsCE zkk~{g(e>|~p2T*9$Hl)_f>(j(!wb|u$iEuB5MEg)efc%Kbf6p~UIZ_OC(nN#ql%0x zuU=P=;$hTYF8=F`3GWPeXTrM-p6s==^-u0k?F~=Y|BU4+fTyPb@OZx9b%Cc*RJy{u zAmtar)Ac_*o)mbx{%7#g+Vd6O<*Fnj+`AIqB6!{4-3jk1cs=1=4ethc*TB0D-nDw4 zS1je&_pXQ6UF$DL0lgo*8@V@oXv1Z>D`v73_jRry zcfh+@ee%XT7<&sm{-|AoRE&)eX{_cph&UMD5O_mX-1rc@+tXN0Zful3ybIpz@a~2; z1>P`t>0LIdQxJZ-h=I-o3TC#=9Th!|+B@90l(InsHk69)$N$l1hx>J(6&E zqv4H#HiWsi_nH#fQ?dfr ztbT>}CcN43-h%foyy@^}!J7feR?H+HE*jyz4euQd%5qLn4=y=WKZN%_ybsj3i%5j` z5xh^~@fVP?2=w?dc_~hYimW`n&)_Y9HwT{n>Ji@OT3gk>gf~}nkh$CYipSK~@V+y8 z90Bhec(Na-k$)>F9NzZ~&QF6sqy|62`KxE0P^_LO*8%mGD z`yC}|%VK!{!dn7wDLh^Ovy=4{0N!8l{!SEmSQ_3kcx&J-hqnse3V8p(TWKV_X)A=c zT9btB;jM+Y0p7YaxIQt4w-MfE?!iqORojVMl0PM(1e6XyX&aPwM`>G>c13ABl(rX3 zl;kcj_jqXsCKP2y>J3oZDOGkxX%}*}WbAHAq&}rRP}&=%Jt^*`qHOY~r&2?d8d2OQ zc_tjCeHq-3xWAfd>5Yj^jE(P;9Ej4?~-At*IP>0pY@1e1msT4HmQ4pl|@VM;Wg z!-+=_k3{Jxk`{ux&AJz*V^BJtqRs*+9cP4k?uJrJl-icAwYtC<#2N6ZjSl(MOwL&+jf`oECswh^`$ zj#3e&5G6O&J&GlwPYlw2E29)ssSqP#HSPI&lsX#06pEdQXAsXMo<%%ckmMXC+GFRU zbRm`VQ0jsbANwzzud%i2@f1KU)AfJpVw5gH=}MF?Md@;;p~TzeAtI7HQMw1EyVO|I z-c1~)!P3hp4OjByVMf>H#-cP1r58|ojKRl=PY}lol01phgp^N2iIcvjeHx`_XrQ-%QF<=5nS>G_{!wwV zitAUPG=(-VYLIt!PE{ecplf9Wr^p&3d`6OPg{+AK$D1b1A@G~Q=S1KiqWZ=y@S6)V>af)Ea0ZX49j8A1zuy8r z9lL)t{9{r}`hWj8+8+qSecNMI>f&#Q8pg+u;WYB*PGaWL`$l3VsFt4EPazsYw-nU-&Wn zE8y3|zW{zm_~N~1!tVs1{@*_n{yFf~|Ffks1rgG7+emAbg!5 znB*e(7n59K=-#}PT%A9Bod`rEzY;#(xZe%F`hWOW6R**yH2rJg-vFP^-@hJy_x}nK zo3!*E@OyI*_9XT)B9{OCjWQjZF>Ve?|Nn{x>A^h~Em5 zd`J9VgPO??@PC890RE3j=J0=lzsS%Y_?ftn&H07=*IEUnO4`QX;frGzvKamn_80v z{EhH8!T%TjX87tJY0p{(NK$E%U|R$SA=nNm?ZaTCIE6*NU~41#6|4n=UVhzJfr&^#?Au{kUWA`t&C21g(`lGz?*gzXWuAU|4d zYIz=uKpehUivJfpKGkKKppB+#jo>5%C+cMf`PsT$)C$_@xt{#+I%tcaot^^*{J*@C zQy7#kI!$K*Rru6v(1HAPVx30GZ7;n<-v>b!!B7M_1me0a1SJG{1O@f>at%k^dtf7Q zbUhOkHHi|J=;?Q~G${UG{`|1;=di@8%6@p?<-VH$yroD=IHG*rX>-}E@*AeypFM{qwz5k0qZquaqqqQwP znYI^#-i(#oref2V$eX`GKXSeQi$EX#OiE`5-hx1SY!LZv2nGs~Ps1r{_YNiwsfjY@ z$|d694g?P&xD&yH2<}2~AA-9P3`Z~w0iURp30kgf$aR2V1cH0DI7uj*mVQ5iQ3yur zRX8a^N7Msq%pIrKl;nZ2;9>6iM-V)YU^IfU2*x0IRCAEa3o_zJ;O2wp|-G=k@NI6Q;kSvewf+a$-`Bpw|) z1t6G=;AI3aAeag+ZYjzXpqAw7|C#C)1{43ED6b))8xLMbAX!aE@TMATwr{1$XCRoF z@>vMpR_`Y{*D`+>!TSj4|7*$z2xc>f4-v?|{)GJF)c(_i2qF;wF9pp(@FjxJ5qu%R ztzzf?7ew$ig70bk4RIcVZxM*+PgkLu+k6BI5&S@d1qgmZ@Z(mw{j9mw`r#LrF3w*{ zUxeTf1iv9z%;4{-%@R#pYtf&K`U?S_e^O}J9>Fr|%Mtv8UK4cw284v3b9*tlF!iESoCgTmkCIp)i?utOZ|IBOe0dE0>dJ6#IHVC(^>7m{N zKq%jT7Tg{oum6YX_5YC9|HGXatG56U?xH7UN_G<@*&QJ-{)fEyAL=V$2zmX#X1Nc- zgN;pxB5Z_kUxWuB+z;XYwTn5MS|e<%3%{_5u}NnZga;yQim9v*@4D1`DN81G8UGqGU{dDB6UL~)PdF$h~BJQm>zdPs)HAv|8M zScWatKo;9_VCwmxT<5PKY^_|)PD1D-Y=ba|u&rK84BH_*9pT9cPeXVL!c+Cf(DHkygpEXkIr^Z5 zTw_!lm#Ms3p5hH8f0<~)0O1)3Lxdd>N|K5u(aJ{%V}w<8EOHA#MoY+tePyi|WBU(5M>{XTUYRQ0j52+Gcs0s*>o=pqYY<+G@<9l%L--oP>k&SPusgzj z2ydu;MJl`zVGkPjB=#cqPGhB|eN%pul1&8~^hbCz!n+U-KsX5DEfl32FCn>&IM5jL z0m)$E5aLillG}-Q5as@_{1_-AzZ>B&g!hu)LmZB9gc|U3`c&>ic)u#z#*qj|rJTP2 zQ}H2$Pcv5b=_3dqCm)S)42etuN!qatjzjoZqUdk+H2D+6@x&()PDo-APDCg-5H+o_ zNk+&sG{o zK0+whe}sIZ`lgG?XCo9h_!+`K5Y9ok2;t`le?<6&+NklD2IGNMxTT5PlPKF{*~%~ zBV3yDWeAri+<4d)f^a4AAL1&6t4Y=flB`wIKWT{E0v7uX2*v*kk^8@i&1MF-AQb0M zrHtCY70TP9yo<(`w?o+=k^8?A6#t)C?uc>&DmxLy`Kzvbxx6bC@&AdX+ya(_G6e|A z6d)*5fZ*OJHzbk!zY=Uj+?Ti?aeqOQ#>6HlA3$_r;?nO=;9er?m*>qVjao_l%+XY=4l$6=qSoL zW7AlaEtK=drpd+tDR(Rl>?9wQ9h8f;Jhg5f$`zDLX{^u817e7BS@lhNl%XsYxPqjL zat!gnD%PXik)#vx43s;gd?v~=k8^yM&qnzi8K@fEG@CZ(qTB`L^HiZtEmm{uN`niC z7ovO-%9oK}jIzXDs`l(jw(;^>P!nEBvu-F~M{*VMYT`A-Yioy6`FaUbN&5c=@*9ag zQ0|$;iZRN)Q631LTNC@fDBnc0e#HK%elyAgsN9k&x1xMo!fVdIJctH^i9?7(Ax~r0 za=ruQJ1O3!hf?yxl=3iCmZ5wPDtn?l9OdOGk3e}2%J-uD5{>Ue`F@nuwW2%{Ho`bNiglD87RMt@=TQ9MtRnMy+`|ZYG(5Dn(})nzmM_N`6n3#V9W^Ht&w|AA%%* zqWl-iOHuwiQH;&v;+By&rNIi6)q$hD66Jr=d{&{nn&KMbTH-pQI)9Q4#ElxP4a?0a zZ$V{8l>e>SRG>DMZBW^kWILikRR2%1gE67L_Ir^^161h$E9(DI;gnI?m0bNlD!UWa z`D-dw==>{tqjC!>4Nj6X@yE_k`sw1XlC1~dF4zcnwGPG_QN@-T!2bvisur~OKrNKqEiXQuC>Ky1RIW=)xt>aQ4JNA{ zxlU5)L9u6Q(+ic}31^0V8LR%Eq#r8%Q+_j*0ZDO?Q^LwSsN9CiGpGzi<#AL7p)wkk z!KjQtWe6&F(S9f@ssFFsLFLX`g|*-ArXo`S=k&^O3F;>6y~@3)Jiyrdi1!mmqB2Si zWUKA^2T^$_QBZjpl}D5(E0)TbRDTqeu_+&iiu!+J^XaMbgb-B5qw*xl1R|Zk>QABa zv|6&0QF#`Xsi-`sipEYt<$03HM4hBarl9ho^36VjFQM`#Dlen*Ix4TEHq%g{^RK*? zC`px2c|(J>CcMSu(@~j`rkaV$EQ)WdQtO0wQJG8eJyhODWj6T-#1B#Vh~#6U`hQeD z6->uDoxh56Q2AVS<(vX4U#3<13Y8zJe@&E;KM$4fQ292omujFw=UidEJS4yV}BuX3aE7y=Y`7es4Uimvem}zAE^9EBg!B;1yOt2pGrJU?H`uD>R@c<7>-UyRHtH1HxYS=vWN<_&mpo9<>i-HYCuF} zBPt?tBp($w%|PTTQQjRQMN@(59tVw@`VNrs3zAzFjz3`EZ$ zIup@Nh|WTE9ip=lU4iHvMCT#u%(Um$>cE;H>VoKeL|rw*Q^GV8d0~jR#z#h<$n#LYZF}*MAswgiKx3Mh;Bf1qejW9IO<^x z>ZN>8FGRBSPIQ{}LDcuZIwR_b=zc`~5#5dGW<<9l8bGsKj5E}Y2qL--(IAQgRT+2} zqQQvnqA~>0P(*i9yq$PQVk2CMY@2^TGz`%QMD+jB@R~kII`dxPi0-Q?{U;$BiAdcz zqEU!+Y9N1*_z>iheofIS0MTgT7(|b%UK<DWeKlT*Z1TnRXab_A zgd^ep4M0$KhGkPIzNYKCL*cQOSF6*(PTtZ5WS##O)Pa!y@+UPl1fqQ|1u)! z|5p&bhG-h1S5;3&sr=$CdL0oxKTkr9&A&@5qPGxDM?~i@zkZ`VqFIRMAbK0ohlt)m z^d2qW)!0E2^*$o?{OLh4712kCK1K8~BJMSwj~kn13`-^H{KwR4f=H_I4Wcg)%|-O3 zW+K}_;a?$A&!3zk=@03md5FG8^ev+ARNq1$xWzy;Us|e)ws!%d#fW}H^edvDL`3v6 zqJ?R!I)B|X)uMzW`b`KTZ9DhN5=4I^`Xi0~6VYD@XG@nNT1oq5h?XN-ksQ%#pyTQv zMy*1$T9ulMkeaLiN3@Q(p11+g7DVd&8QetNtigdY(*9MF9AedNP(2jYZBbRh=uopqBJ13^pLD|JNg>x(lj%P}vpL-Bi>ZIO zAF7Rr`)V~bxF2zUVq+C+xgCJ&ff`hsgHUZs(hSvuRg}F}Jp|R}#-OPT&SLCgsJ2D* za29t2@kmr#kQ}9ETFIk{HUE$5v8WzL<#=LCqWXVSTM=6mPb8isNYcjGqVpQ6?T9B6 zPa)FzSJnBW%ITomLAY*m7E`T5^>I{%^g`7{wSsCkiA6Pss+ICQss-Vw+C+y~B)Wnm z9B5Y@6OiCeBlsCGlO%BUFCvq|bv?MTu|Ew!LCP(736tVEHi8P#*r*v^bP zmv|nkT}aaPf3+*B7oaMcT$tKlM1zadI$VnC<)~h!v9(%Vky>84m3S3XT}`|O)tdiD z^*U6qr>Op)CPM~THMD=-8Cs3bA zd@8knn!#sKeKu8|qcTZ@$tCXUWGXM9ItA6=QGF5Bk5HY8>YJ#(gzBrPz6^QmN^AH^ zvWU{OvIeWZhU)9eWk>6P*NTz6h3dPgPDgbXsxwfP`@b?gGD%ug-$wPFgs1lJq52`J z@1y!bqWu5Zk5T;&RdGaLp!zAQb5Na)>Sr|@$#zR~;i!JDid;(7dVWb|F8NoeatcuW z8!GdN-wLX?uYQl}BvbpiDslAKZf5!Ij6Mzg(`Q43LBgz7J-{;K*Gbs8+_x0=}& zsm5YjE!V9q5qexk_=Nsb-5~9w-uL;~mwb=)8BMr*^ z5!tk?{SY65cz?tPAZ~1Ixdw3)HIOqwNg^j=@qvgBLfo`=>J&Fae6SkuOiEYdadX6n zCTEVumYWeDCa4Bl+!2V6O!-lWTcrGG#K$03XO8$-#K-B379US+Nj!nrN{}|K5uccF z>TM{tCAK5d|Ht(I@u{NF>@>vf6Hc4c5z~Lh(x?n#7qN*r$0$w#gMLJ;{vUCkNdF(( z%&^XQ0KVWvfV8P+sHd^zq}j`#}nZj1Oz zbd%h=q3deISK-{}5MPb6W+T1^o$f?@Ejl(td>!hgz1JhA+l;#-z5(%Fh;KyP3vrLM z+@Alt4jlJpmHHs=i+CX7n;>uHX!rI*+@IuTHI{A2`3&BI_*RnJ{?ic;LOc}lVCq9u zuNmJ?i^ZC)>ro;)@dS95RXLtxrj$09!vWN5Uc-3{7`C7 z{~tescr^9Y|HqG}J7OH_z@#~0Z zA$|k#bi|wp;bKwV8scKH91+a^!xB z_zT1`Z00bwHVYu8^Jl9OtMg~#s^LHuvcvVI%X8>rt_gOWo% zr+^yYKDF5q^{1k~0qUEhekauLi~5~WzX$4fLA^SECfqH}VfQrEo~Un#`n?#tcOs@X z`=Gwje+ugNLw!@!?~nQeXxtd}O%lsA^8=|Llq5lYGX@VP9+HUUhoZhEW@PG5gM!QI&v$s7N|dZtDs!`Pi&4uz4(9S+K2TgK%TFw7yqBcw*Fu5)t`j=HmE-t z^=(n#F0oIms{TLC;WX5rf%^8ScTwK~^##rii^zE)70KmC8LEDQDdL}yLx z)W#8l|0C-xpr@$c@BacnAF&m?v9Y@qFi=d)o$Z~C+1=R?yQP$}up6<(?rz1z4ixii zA$GUK|NY$A0eO3% zjwf-V^b_pAmYm5a%=|kZn>dBU(3lTX+Hi~7l8+FMBynn_*wvE6C=$<;7)|0T5@Sfn zkP~A`j8n1>{u5`Aki#eJ6oAB8!n1|rBWD)3VoJhF0EzQSTo7$%5*LzCAxm8BLW*8O z;?js~gPZ@8xPpXiKQSR*{*M1^9j_+wG>L0S+)d(Itpj#KTe^5!xvL37wTB z9v6Q?_@qOTr;J1oStXt!F*(+sB_Z>lX$d4=An_B47je(3S@R_lQ%FoD@v@qBcqZ~H ziPuQHWv_)vyiVc`5^vg1i4~RT{`~7hk#{1U#JioS?K9IzOegU^2|I=-@c{`pj?+I< z^W!L!MCAY5Nc@zduIN4U3g32b&D@3>}5F?T1dDs-XgKGDBfZ*cO^iZ#aj}uH{Mc_-Z}X6 zmbRv|FK=0r8{#d8_ch+~csJm!fVVQ- zK6vYDs5S7`#9JG0Ee&q_m`4krHJpXOsE(W_X+9 zZH;ICkGCb>R-OFFDs541Wfk2HZ$CU8|9d;&?S{7_UO&8@@OJ+Hdi7VA0eHJucN=Hd zc%0qw_EB^o-X3vOrvTm{W$q=6{omWy2G{c7?T?qm8;o}--T@lqz<{(uZWk&E5wQ)P6@9(Uw(i$0DjGqVhv6NIHw5n(jj3wl9ifmr1(5%H^8aXQ=PmPb(NK6N;GKeZBHqb( zC(Ru>nit+s4K)mJc$6ROBk{&4bgJ+);V8V(mZ0Ut8;f@?-Z;Fo@lMB+=X+;FQRSc2 zbwyv1@o|@P;-xwd?;^bO6}BZbaw6;Y9>jadn$ddMl0Sm?B;KQV_Lao55)f|?D*-Wo z3h!xay2)LW_a@_gfcGrk+j!485$}273&IzLFF6#MB2)?RtOVe_iuYO^eO<~McyGqa zTl1b}^4z?pDxu^5c<$fDGbISa^@A3XrM^yyxN2UFQ=luUS@n3|$I&`O>c)zRp zN7NMm3vZT2_#5vZ)7@HW_KK2P|aQ> z7ZO=m*zte63XzQcKe@Pdv5}V~xgtsPf0Dh0X8t6X5iaXcWI5sT!WCTk6IqGmDkN8S z+*ZVTtx9rjk=2B&3;U2%PwVdfXj0>l+>7MCita7k$MpN$ z^6y9T0FwJl9BiWHXGtC?bDUqU2d>F}7r4J`LBF-Gy72Phh z(cJz#D%MBOw?~a7IWE>u*9hkSB+u+vS@LYsHe)geLJ8;jQrk+)m1U@9rRZk93^^B<~`5w`;~Z_mYZC;69S~EA0W2 zpOSo#LNe-X*E4I?4Am>@|Z`K`EJ{}D0& zkNFQIe75jf`IZ`tJ)Cvl%80V}+YUPOAcQ&;uskKR&`73R8Qhh|$h!vH9)LPb@ zStGR$sr8kxE~)iI`bL>{>X+Jp)F4tDlG=>aMv+cxV^W(a)673|15%qy*@Dy#q_z~_ zO1QOf8=;j9k?lxrZ#=pOm)eok&eC^^w_86_dy?ueae#YR6t|HLceMvcjqFBhcaedy zvWE@mq7I{b5UIUL?d`sdr1l{tV^66fr1m3a{;$CYlR6;g2O1gu1*wBcrAV3oE9X#Q zf|L~karwVxrq#^Y&5M-GKb4Df@bE1Dffv)vj~;Y z5H^J^OLmj(Y=@C@wmC%l;iQIHI~#kd*si?kLE7(Pn}8Xtj?o=sk5VXAvL~hjD3Ykol8o7o;r`z`Em3D zQWq*}C4iI_1(8dl51Q0vq^_27x$p{76GY7XMJAHED&qQfnE#WyHjZ9LO8%d^Ay#fQ zV&9{iNZSS{bu+13NSV!&x|P&zBDY(bDRFnxB($7k`}orEq!_6`w)s zXHs92`hnCpq`s5*tv$dqF8UUKZ?o2|a8f@i+NlDhej)WIsb5L`ER-|ek@}BxPf{~U&Cyq8mWz@y|98nBZvc5=Kl}lJrufmnPji3Q1gsw9H>Q8f|&$ zD?~Y@S5$K)(kqj;djXwAwfU|_dQH-+lU_qPRs!ZGkY0=Qx}?`8y^iVbv@|+1P3!u< zGD)vb`T)`!klvH@hNO2Qy%FiHNpDPgGt!%omib3Bo%kZ@%{3!k|4DBtKJO9`>1{~w zs8!gO^mdAFZ_8urzC&l(G!$vO1Vp+Y=>eq8|7~)2?bA{6u8QtveQh;&Cp}Qg9;S4} zL8R?c4{2ThPw!3IE)&h23+eqx@2`Zxb9K@Ok}i=xh;)wh!K4o*eTYTfH0M{+3FYhh ze>yt&cjKo>>-tYRLps|Ts|4P-wEN)PKAH`2HbHG=d=N8;vbq{osTWr{^d3&%u@ zN_w1{cJME92I(_J&WaT)0i?%U)1BS87cZn`^6B$P$NrzbKsgu2V_r;pqLfR7su$_Y zNSpafxk5OBbjSbWRkjj9`fAeV|Ke5xNM9$so^;3mwecsBar=z(|942=O!^l4t&_Gt z>06b58|m9gPa%B=>1RpbN%~3YcagrE^nIl7aZM@rb`7`VaMJe+ABgn_t;D1s58&HEq&yAnD&o|4#ZJ(tkuc=|7eKmoW1GzT*E1T?v>;dRF}Hh|J#-ESiB#4>CKD z=}Bf2G7FGdolF;*X1MNu*vE2j^cP0f)qn`tha zli5;BzJ;xVZLY1zY)eMR|Cw#9@6av{wVk5dJG99bW=Ar+N!*Fd&XG>09~oWz&kP{5 ztD+r;w*+VJncd^efn@ej!k$`yLBhSF#Sq^|(S6C($hg^6$?Q)iA#pI714MN2Z;P#C zjLg9j?G%8F9shSOxMe&tNo$&(BBSH~Oh(PDFc(MjWD0i8D&q@_!jiD;P^3a8FzyDl zpAG73l5rzHP9`LCF_{J#d3#2u0GSqJ8WT&ATyfGkz|IFk^g6oCUY{G zW5^t@gkyzP3!=k*GAEEZ(VEuXN`TYJoDwPG!^n&xGn~w+WJV}$WG6c2Co-qa^B5a|4+h zI}gZN&ZKVa@P^FIWbPnyi@3}`a~ql4t>e6Pxl_@*$lPtZZ3pvzGWQDa6WWTCiTywG zAeo1xJnT^95i*a8JQgWkqunAsLFPp=DlQrMf97d2&saidSD8%aSu)Q>*Bi+^uMuA8 zjNq=dW?mvA&(BPmuh%PN%>TQ_zNhc+>tsJ5^9I>~%$sDlC-WAWS!CWO^Bb9W$V?|Q zRU^y)Gw(&?lbJ^5ed!+v-OJx}y*KlbUGL3&Ove2n+7Vq~&wLt3KO^(Gboc(BDF4f@ ziG8GeMdn)#HADC{88d&I%xBE}rGHPxN`tukKl79L&q6B!WPWuw;zfQJ{vkB;7x_#0 zH<^E8AS35Oy}3YQ|=TV&}-w{?1&TWDtiWY-ny5>U1;S-U7CWdkGb2ravjnj4ed zj_f96H&;_%lk8@eW7}a1iCYS{GSNofTIfdD)|BY5Hrj!+JCHq??2csjBfAsXfy&&O zY(LAizWvFXzlrZcR)rv|Vv&{qN26Kh9%T0H$5b=e@I9gJ( zEUcL5YFV~Qc9@hJSvQv>$%bk+giTAcxwpug|BD|c976VRkt0lxo+!v3CFN-0F~Val zY9ky+_V}2eK=wq5X8vSP7M>y;>d+=vzp}&0UQ2ca*>e;cN%mB-XNsRjb`;ss@g^N3 zajcyWG{?z$X-PDVu_c; z%B5s4lXAK6iddhZrj-D)6UkmBa&;WNCf-Wdk$sBn^GI32Wk-8J9x-=my+weI(IY{7CKAp0O$yI!P(hsi!F@`yuihsTUq z=Hq0akgGg7*HxrHEqq2ene4Mr#{hqAMzq0{R&~P>%dR z`-}LmCfYaacd};ww!u4H{<5a6-QQ&Y5&1V#wEbt2uaKQZ&aKOAa_;*whukjYAh!y+ z9^`simt0Tb0_3_xx`himw8@>X zGXI>+KWFA|Q*?tqw?4TIl(r$cjYT$6^l|Y`I!gR#vwvRJ+Ah%=8cT)b&{9i{@BRf-kfZKu-RjD~p@|lMBdI$<-X6JA!nTfLw!I zQ_YsJZE4o)FyRnuj=n+MN&vYd$sHvk|IeBKtLd))>>_eJxv}I<5I<3PlJI1QA}Rqn zD*@z&ksBWCBczNZcdE!~!coG}4n^GcA9+Y_968mC-09@bh@)pJ=Pcpb!twEbd#;-2 zITSgc+yybW5vc-vk=-hD?dCHFG9%gEhE?s9TBD(4DvGXI>+KQ~e0Rl=)<*Ekfp zmfUqB*T;%&L+z-Oq~8?lH#hXM z>F_*8qAz&9C;0^|Io~Dh7A`34C0xj%$in0o5n0p}{i0UQ#mO&WAGb5E{F1_@I-h=i zY4Y2XUxxf@%3M~soX|=D`4xmK3Rfb(vLoWFkY6?8R{Qd+li!kjABENst|>JCC%?9E z9r7EKU)OOp*Aw;?u20_lUwlL1Mp0=H-$b~na5M6oJ0iY?k;ty|Tan*d;x=(~TQ#?{ zrh8I4zXSRG$?r&hAM!iJIXjc@M}83b{^Z?S42X35ZsvDY_ub;m-N_G(`5p@G8JVH@ zUgXXHqmN9=zCx=GcAlOeO#Va4BL(C~kgrOtkw01_$_dFg)NDEwX$jlp&HTlOkUw1Hh*&w2 zy!n5$FDZ14@L2N4i5xFHK`8&voBykMvhWn)P~kB0!yTD#w2{(P0`jMkA4UEgDWl1c z5gAMVOp$TqPj^K8jCn^3`LoEI`AZ+)IU3KO8!P9LKR@OdkiXCp+<|NUA`^{VLcwjc zOUYkmiaU46Urv4s`76lZ=M?f2gjbR`{};cC{MF>${&S6**OE8eCx6|1d&>>vZ;bON zkvIP*f3xtGSihD0ZBlMGrDFwmO1X>tJtB9z!#|5!_j}!Y;bVS3`3J~9BmF_4?i%MG zCjSWeC&@ob{xQ2GVjUkRFY|ZJj`CDYp0)wqb(Q>N@-LB({XhSlIzBIaLFj%0_P8ZS z$G!QNDeO!B6$&emf0ev5!`H}vN&a>6ZX3R#E^m_mK;$j*^8frhHi9kERPyhNyeFJS z{(T$Y9nM9Ei}??we`Hs#@*lep`A?kEIUdNH|104$;pgPPh!nfppPx=%HlF{A{0#En zkpJ4Eoh|%rlu7xwM1(owRdGmkr zGXMO4;_mo=R@Z3Tm}<@@KgUSH%%4J!j$Y_V!TevMN%TujbamZ76K39G9?NbXSqW4hrok+)2@Bgnm-& ziUEZI6b4e*MSNG~IB_>MckkStw6r}a>?v_joU<2&y`}6EDK449eiY=-h5fbegDD&k zukV2r!C!YY8KX(EJ^M4AH zDBMiJ{6Fq{3x(S#+-gcJYQgTH_%Ve$DY|dXUHFSoxSPWJ6jTTb_fmMB!hIU^e&GYr z2oxTq@DPQkB|a>CMEEF$$0$5W!EHwQzb@!?Dq!I$>n?@DGZZFMctO3MrSM#w^L(7} zqCziGaE3pH!poh$o$jwvcrD6|^UeR&4=Bu` z@F4}WSqdKsKNfyM;eR5ZQuv0#XB4JW_}nQHtprf`(wfm7+rn2AW=NF(cf@Zg{37u? z3g1)siNX&Qew=$m;Rpru|G5fZzTYK1^g8q5nl;^W#iFpGJjR$&JX?7@K+b< z*DWAYA4Rvv-$7(Yha#QlKQ&-KDgE&W z#8K;|&~Es9;qR`5fx1m!yqHJoO|ORjK2@QJrNW~_fwAi-ye)0`@esn^n;?l z>aItCY`_G59^b>y;3x4@(P;Qq6gqE7^3DJ8t+-g!-MjG%_+@;11PH%~Uy6FgeJl7a z`~bg(U$tJHWmb0^D%5}td>#MK`xM$5@G$%#Q7?Qe0r*G6BOHZ)D*n;GpNOv?f6bfwDfq+jhiX9gyN|isd_+9L$awir!#@*$6#h8;(aIl#Ki1M* zuc)If)#>;;_?Loz7XGF9XXBrXKOVpH%ddFM^YAZl9RK{z2*xke;1}UvEOJR_7FuTf z%kVG9m-)x@#W(-QpD47FA#%0w8vJWTt`lA_yg_LGFEYu9eT#3V2>vbj|HC)`$G;6< z4(Z>He+T}<_;=#phkuv5or-@q{=FjiIP9ja$!*g6T~qo4_z&X#|J|Zzxk=(9_%Go< zivN_FkKsR#|AcaE1pFr*D)cn|vm(z3Co9Ko(&zABz<<7*2^w|+{)-AtP}&sX%lNN} zyn_F#BW~)(E!*o7-*7xuWd8o!`0wMJ|Km@!4PwMf0KWX+pVoPP+y5YreyHe2_%eTA z$N#RQyNl$1s?cX~=I8h_e_!TrV@_AXSNJnT%>VJf!I$&<-{OBKMaTdC500z(BmPe! z@_+l(+}iz$|BuAq@a6wD)F1eN#=ZW+H}mgYfb#!U@_)jaan3CK*;3|2N+-G4gJMsL z-4-fZ382_z36ZH57o^xr;zAUAi!3bE@qckqiaH%A%KVE%{NWL+cf z(fVRvifM}LQ|vE&1Bx3`+(z8|pW?<8H=($x@mo zqPVSfu@SZtZZA{`C|U`ixD&;l9TD%>@r2?4ihD@eMYyYQH{tHWfex*#7wsot6bDf} zfZ|>z+L(I__Yv+Zl>Zmy|HZ*h=^TU?4^;FZiU*4vB0SU*Y@CG9qnMoQ77)N&v+c z#dfS8Hus2H2}da5Na0b!qlL!^WB)H6r{?h#&Hu$u6rM!!WRX*1eW;qltQno)7e`1L zN%2&Q<0zg+aWutImeASx$50&GX?B#;DV|C33=^ZL!ir~Ukh3X{k1{F7$N$B1DV}Gd zt?Bs`b^LGqLW&njyjUpzH~msIFB4wweiAD(f#Q=CuN0psyo%yo6tAW@iQ+X*k*E?- zyiWXjiZ{f%N`QR|Hz{;;tlvUW{$IR}qC4!ry=#O%))79%J1s{|ig(BP_fWi-;^P|R zKH>coAFwp*@*u^BL>`WnM<_lT^T&+X3O*5yrp%`(PNDd8q)>cD36q7-3ZJ9+yvPd< zMP8)%lJThW7GI_qZK78ceU;*CBClJH&F&51n?jX<;@cLotufVz<-AML%wK$(@O|M2 z6lMO!k1QIUWfVW5+)L5_QT&vW>-!lc=PjR8T9M)x6u(#WOW}0kR}^Q6nE#7>L-AV? z^Z(B8M~XjC>P7KK+#kT%QmF(Ke-{6R;;$6{qWBxdKcxI_9c?ZCj22A%Z;Jnl{4<|u zB|zdVNfO9TDMRUEN?A(BQF0%BgHoPSg;F8Pp`@>KsYt05E9H3b zAXd!(Db*-ND;q|7ye>^jElNjHYRCD9DSwFYaN!Xavd_-^Uy4dV=@?4KMv9`xQyNF< z1SOnEX*i{m;(V2W(kTiJ6%MnI?aw19jiEG>(y8$xou-6QmS9Uh+K4;)Dvga4`yQ1} zr*w{@RstxUN$D(+vxVaw+H{56E6$BLrSmAAuW0Q5r3)!t6lc19{t`-$Qo5AV?UXK~ zbR(t9m45}L>nKg2bPc5|rA(xBwa8Ubz3!kb$+gk`py>6KZg3>tS0@>_oSTFv z5!`QfO0Q9RgVO6A#YQ&skA4lLH-Qx`7?gurc?}XnA ze=yPZ_Ma&IP3dP!zf$_eb+NyL(b7`-O(XnH=?{@Vg?~j+?VtZdoYKFPWd61hW>T7E zy6wQTBOj(rC$rpxvPwgFfmrFH9Q%J+{_i@L7oz+i<%KB^qPz&@^(Ze&c{$gG@?w-1 z7qR7}yktDiQj~kgd})Q25iT3;Z{o{SUV*YqzPzH8l_;<5i1;e=-sD+cjq>W0&Fv}o zp}a)Ye`?5@;Z@DdELm7r1zz4{!e)W%3FwRNZI^fd}GQo|MI4>vYGVFqh~q9 zx1_ukFzr1tTn0^|hf2SZdsp5q z)_12oFy?zuj{V=Z|6Y_El=r5bq`Z&Ip}a5U11awp=kHH>u=E2=k=3htknmv2hlt4h z%L#Gw|IWMA$|=fb=9JTvwWF4^7BwX&%u|m2zbyYR7cIg4Zqahelq=RW9#EF~mn|eE zLY07-=TdG`K9zEd@-d3GDa-uJL*o3yr5{20NRin8%SU(jxLnGylur^lj`Hy$=Kmrm z&bzl;K3U2sl!uDQ{A~$`t2shA(xEdG%BNADM0phDt0x9<}-F|qZBR08zMkvet%QsV&tCy_=P`*`YC4lnnl<%-)<98bA z?3{N?xkq>}<@+pTIrme3AmZ^NJw*9o%F`)7LisJ_JWBa7$}drVT+JthPYR!MDDpJr zXGA8)ij@G$&ryC}0u-qu(E)Z zE-JDAR~D4gOSq75VJeF_BEF~*ckEqRT+Jn@>`G-xDob@uYDwu$Wg{v}Q|Y7TGE|nO zvJw>)j>_^>R+PSiLp%MCZn0HXrsCfD`8XB#D`4$8mDQBCx}_?P6O{}72(_N5Y1G5@EsKa~oV!BnzpS_z}bUtx=|AWLQ2;3+2B*C6ko}%Im>S-#@tmOZd z$yC0k@+_5)s60pIEh^7bF-xcNg78HuFNsVMzASvjp~$Ot7GTM*Yd?I0%9|FNdk>}Z zHkJ3NyhCMbocV4$Fa(RasK^ooOLl%2(@}a8tV6Ig!D` zZMmqI_zLj|D-oBiehhQy&H3-&>^f_9?HX5Y5 zdrT!rJB&^_39GYI}6IFrB`+F1lQ z5LgKy7%x1>p~$%e=Mh{*VCFC70)h)g%>M~4j`d5_v{L|r%Lp!y^(zP_NW3yu;^Y57 z{vXKygKOjHbp+=BHrW=tk>CM>NpbWh0`q@25m*TzxRpTuADI6W+#$S^;9dgvmK!~% z8r-d+?y;ujnEw;p@6e`>_#nYU1dkHL{vSMI(azrcn7TY3DFjcd`4qw11W${*eR2xH zWbtQ(&k3J*DDr~vMd3@)OvP0Kf>#J$bxkR%7s2b|ZwTKcc*~-lMSaJ(t%BRt-zAtq z@Sd8}2tF2hU-$umZutct&AZbzI z1T(2_OfZY8v)0*Eo&CTT|VZs(lx1np@?o+f&_@ z>JG};k*ZrqnSXWXD3fYGh5Az+ppH6j>8$T=R0mSsJ<5zXLVWyhb04I>dr{q6WFM+d z+?Q&B>V8xYrMf@W1E~(y$ZpmLL`2C4Q9an2HctHfPc=c+>-?g;nxvYhnwqamhH6gv z+0NyiYTlyJrJkx!wL-OMij7&KT8_B;**n#syN7n&swzUYW+Brl&-KTSA_>gXui-4m)~CF=OUdb;U)!<)o2g=bMco9b2K zIKrx|3xmMD*tyy*(vVAZ}n2Dml=2ei)7!sE2vJCK0*0c zc8<4aZR#!{Q@vW^HMTK3+w(f=*HFEln%kXjpz8MO8b+EN(w4cI>YY?&{?%Kl z%J!?bS+TQCafd^jIs@KC_3o%i^&UImv2A-F)i;!UKh+0B9uz)A^%<(>|5P8LYHm;U zQQ>3uvJ`7RLG>xBPdXke=KoQX>SU^~P<@u_3sj$rbgIvH_gpgOFH(Ie=2NJ??09$2 zKC$vDRr4sSuSbK&vv3w9|F_WFmTYS=mD++--=!MutM5^rM)hlTf1m0HR6mS1f|QS_ zsx(wTq51_?*Zni;pLS|W^>Z6GsxQ?qsZNiYRKKD+Bhou)%kT|V`G560OEX0!p!x&V zA7kaGXaq%nq53P;*;J#?$jo2*A5{OO`mgw3!oR8hV^N)VNcm6bO291B6{0%F#2UgL zkxtF30JR0Eb%}IGx_Nc27qxAuEktcaY6~m62(`sTTow3Vlu2!IDN6|LBcryIus5}( z9T8uK+Oi_@|Jw4g?p^_Bj!JDMY8z2A|5tMr;i}YDqqeqvaJAK`^`W+Ach60!t>I9j z9s$*VGpV@_wRJ_-qt@4v&fhlG)|a>ewGHPJH`XjR5pL>GWHV};$J|N)wJn8PQQO*d z9al@)mfCjIb`;;9n)$yCZe4Z~?o6$}NWVxIA3$xFIBi#_SoyB)PVH@K1F2m~Z4YWk zQ`?hThT0%YumSg?CjYPPL+t=+`%2U|tG0ifGuV#vE%`ud9<_tS52lu&b_lgYEzRv7 z%9;1x<64rM`9HO^CAewg!_>0WS`u^AFls~M4RW|e=j~TVQZw_9qsJJxagL>S95u60YR6MMf!bJVCsG?q z&HSI*$wHaG&Ccz~!>FA`Z8$ZVzbPZBojUjXqMT9cHJaL(|ErIqb`~}HzYTtd($0)> zsGUviJZj^qohv301`w@|w^I$YGgcRRIvsNF&BE+yYN zU#7hRRN}qD`>5R?DIK(}p%PGgh??7NUQpU2!bhn+Mr|^+$EiIfFklk#6b>Mp66w$htcPaA^y76!%-#`l8gAp}rXP zC8;lNy8D>wOW3^J2UK5*`qJvs+g8C=&6Y~avecKOzJmDj3iTIX(V=_2D)p7Ad(>B< zz6SMG-DnzcHR`L2^fATllg=~iYf?Xi`dV?$+DceQxGweesLO=weW|ZceOu}qP~U?3 zhSWEsz7ciVetqM4_j&7^c7DHKm;bvXF`Z+R>HUQLsSlvOoA@rmUFRETcPRrMI+6OG)CW@^Bylh5GW`19)c3K3PLBD%683io zjUopK4;0G(>jyh-Q)hJ!rJm?0`f9t4Nj*jV0_th%^89*+dX{>FdX9QDex7>4Wp?*0 zQ1_`9sn^6y!m_X;41`sO-93kBa$P$9ADIUA&MQEvx2X@Mewdba2z9e->W5RebrC;O zcog-cMQjhJeys2~;qgK{_@{oN(EMNImLUj9jaEcG*~+ws3LPuG5K{x5Qt#Ixh*_-OyPW@o17DdBumqDujF)q=W} z0P3n=^-IJrrGA;n<e0jxs|$=35mB0?-1S@&+BgL4^Y2HqWr&ppW|wFssQx| zseeuVA?oi?f0+6!)E}Wfnfjw~=3~^&6V&So>gNB{RSxQA{#Fp{&vYtj{aNZSQ-6;7 zi%K*9r~ZPa&0dT8OYXiZ^(oer68CzQy4gN;D*+nt4K?2sz9oD+3W-k@zAJPe_b1e+ zQU6fQ_k|yH&UWh`xu$0NvE9;jZVH!I z%Z7>$_-!-(L)|?EYQ_@j)MpYdPkk04)Mrzl^M9gY55fhVLfF&B4;K)23A;NZguMuR zOIe6;VZtTF7a?3UPO$es6D}@v{@jeBiJXyza5?&h!E{UO{*X*&z$|6zZ^ z0a33wc~`>S2nQ0H`P(#a_4gz^g>Vp|EH2!OaBsr4M%#yQU&1WmeuRe*?oTMg4+j&P z|3~8x9;D=hqo(+wgh|4LxHq4kBFqq`=PL2yTpsPa-_ome4tHWWwQ4!mHJH7~ycj%LqrPIg-%L;#9&hgy#Q*qlBX! z+T@OT!m$x2v=Tsgx;1ByAUu=sT*9*m&HTH2x{=2#;T%hFldIt2d4v}eo=mBgnIdZXg7Ze9~V9$eA1ztx_jE`459r6fXHORp9r5Ne3kII zXkLWR6TUz=h0w}@(q1xRW5&n-p%%=P*9fN*zE1dwGT$J4lhDjRp2gdQ?-1%Wq2W{w z@@{v}J4B`t+BF|S_y1oGKZx~@TvN)&v0_WB@joS$`P*8k7KC3Aei=nO1vLDMa7LW} zHQ_fg|CaDO4f1`g{6P4l@uWg>wuW2zv<4{6*ydjV>By{xlYh^P>m&N zoJeCS8ciC#Y3xj6X&UP*e;FFf(lA%2Vg65Jc^WH3eQB&HWhELbM~eN(Cn;NNTU%&?HIe!QkOQ3V`v-}_ZmXuaOp<~kEC&wZS$E=(Ky<2 zWN?<8m6W(71xe^-7*V<4PLW(U|B?sia&byjpmT@Y>FstU3#J1C3}$y^+Qw zm!O=RXxvQW5gIBPjayB35BW51vlE%d?KJM7ai6$5{&$MI1?=!{8t&$=BlkM&8q-Jo ze&Z%SK*L`CFRu6hH(WJQnr)3oX*?Fq-QIT9c!I`@G@gu?$9<+x(|Cc#Gc=y1G1;Cv zuxWJ~&(V0^@$Q~Kx~365lR)Do*Vm2*8dJ0jy=={%vuV6aV=9ekFMT~8{|!fIyeWK( zh8_RYc*mmAA(l1Y)t>M6#%YSaPvc`6ABacag^w(Mn0778cc0h)6#dk6w>3=soW=|q zUzlReFKJ8{`6^PhPkt@s8{xO}>EF}ZjK&W%|Df?BO}8C>qPY!?pK0otyzz^=SP7u< z8;##Z{t&w7KWB;jCH$MlKQ#Um|JPx>Q_YNt{J$~BLTATQeiRL5zT)fC z+`y6U1(r~ABbr-?Y)o?#n)3YSrg3z07n(15OPX6LdF#14&26P@NApOU+tV!4+=1ra z5_hDzlgQ4(e!~6^MF!B^CFZ+I*-f}R&4IDL2ThrObC5!NMSADAtId5R?n~4BpXUC; z!BGy)185#dGfDHHSUH&HAu&Icrb6 zV#og??gKTGr}>faW8o(>EgI*1M)ND_pVN%}zxkz<=~0gO44UTu;@{BxR^&V3_p$zi znyv)=6f3R-nE6ZpmF90E=Kmc(Z~jTkS?*u7deZzm&isewzcy?8H2)LMq&X{AW=okv z3nQ%_ksj?8v=*S%WpinD3l|jj5-uc^|F;$qH~*)#m~e52Hn}7A){;_|685IGy2#SB zmazouvMjCTV!k{rGk;nu3Rj}FDy@}itzrqo?Kn0C`upk@9~OVy!u3az1*W6CgE!((nY zykdT;qNmXsMQa=_D+E%;&>Cx8o*>0a0If4F)&yGTMp0Vl z(K=sUE{K&2X(FtSgin&}lR|+T6x=Q3~;WZ9LuBCNd%&(Vn z1Fah)#SKX7rZ{>tEh{3*xm9=@t=nVe4k>pE?-Jf^AsgXdS}#etkJkMnX8s}%(t1eb zVOmepGXJObs8Igjdfag}pO|kSdrHdFw4R~$toUS0vw1y7>jf##M~b+6|K~Q=w85v) zdRgQZTGME~8tbpodOhZE(0WrjZ_%16@-{6q|7aXq@5Y%b0iDhMzA{yPS|5tb|63o^ z`b2$qk@zX?cW8Y^+u6eBw5HSgLi(4M<0f<0uV_1innCM#T3^%pnbtSTG5;6&PG}{7 z)(^CPjP;+Q_k2qKh1Rbk_IL0$x#NM>AGCW*{8RXs@NZiG(C$I&Up4;|&ZITV5j&n~ zxgY;V3qQxbgeejY-Q3$fg$vN`igdl|X+heH((Xmuz5Gob+Y8fPB;s+}Vzlkbzq&6$ z+sxlJX)k4>bcL3ty-ak`fcCOdmJ=>7TtTQ3&|XP=W#KBqRfVh3Rw-%saZM@i7J%&! zwAZ4&KJB$>uSa_w+V=2Ilw+SlyYGB_1KJy@%Z4VpA3n6r|D|jqH2igOYc&WSjL)!kvZvX!m!-CLM#(c3Ua- z|MqUQ&Hrf+6w3eQX|xB~Xcn>(Kzr}bCD!)7w9~ZrqkRbN{S`9*7de3Tfg%S94>rB? z868SHNjpK?vnA1TDo6gWChZLEs>Ceq9PNCRNxR?(ZJ&0TcF{y@mbw?{7xRjgpnHM+ zO|hk|(RO$k?NH4I?Ur(M|5t~XwA+@fZDKc$+lSLWnf4L1kD+~}dL2dk=xD%r*kfs* zpwMv|?f6(fQQ}DsZPE|tX`e!SDD5+852HPj_Hf#E(uFUZ};@b zo;y1`JDWOL9ebokh?xJA8bxZf{ZDH=n!8kzGV|AAbE+N8?kZO5bW&&drJrfhWW~=W zW%f(z98&WC)EH7%kUB3Ojnw&yUO?(XQkRjsh}0#dE{>!26pqxT@g;Y0nSW|*zoNcZ z3dfPUD(*$RwV0le*7G?-f6m zBzs5YAoUjM6-m8K+S%G<(tV`fA?-ZyT~bpu!h59NC-p(xk(B)3rsQVwk%`7#3HU@r z{-2s6{+aM|hyH!{1*z|J-hY2Nn2EX*C)LJ>5WKlXo`ACR|!Z4*_8BVK7Vu4TPQ&lGj0A)dTY|#Bzye>FK}x^*M)-KGgR;%!@}*?2$f_>?G1hk-38O(PWk&eGKW*q>m*XXxQU~@p6wR zeS#n7MA9cIl=4cNbVf?nD>*f-1h|Eg4%I9Oi=7I!BzsN|^qhhY5pG^8A(x;GqjP$9bFC~4N(oQFBmQMN%p_KsA zXOTWzFOzsV>AOgeC4Ie`R|u~pJuc29 zeHH1eC0;}NI?~tLf|6Z4K3Qneyn(bo|4-jUT7@7j|4-ja`gYQ~`6o%fgY=!Y2sQnH zcay$H%bGy?evyf!@3k~r9hCsvU*`W(R07fuk$zasM@TSRp>jP^F8SwJpYmOPm2C*O0r*mmGT?ue?)#4{z3Xr%dw^WMfz`% zX{JnH-+v|kM+PIAnJj8#W-!k`-T&jgF*7fj z`4pXBxPWj$pSh5lgUKxHl|`g1N@g)K?#U14kV*B-EJ-FHqx1jF(n?!~%zk8+C9{T_ z%aK{0%rJ2)0c2Jb4iOHu%d?r4k_*2Xo%~zQDvGWuT#d}?j@Zk6e#xv!W?eFCDYSO1 zlUc`zD~Or($m~jHeKK2-*+9yM%G`*|=43V|v#FZy{C^kUceD6^G{|gWN~cF=%Q#AA zYb9?Z+}7uBM`n8|!@Z&skl9h9N|1<(`i`7$Ck-3-5Rb*~nU~4D67MN8?*4hVxn2{#E__4yCK>nq z2VW&KlgT;sf=1Vevkok(tk7S(rKSbsm;kUx?gx?E)aOnDq|0GBH*`A4)`9=7v&^`atDZe|k zWaEF5arb}TW=~7b{7vRxGSkSo|9@$j)l9Q(Zr}K4{tN-~Y2)ZW^3^x-6(#g(Cc0RJn zlmE%e|Fhozv-1D!;DH0o2b3@W&n`-KF|xzRE>6}x@WGv7E+JgfE)h5@FlA}7%ZM!N zaNvL%+2w@GlU+e%Md1+PP~l1r-OG=#vbwKA);<5hjo|*>)eUR@Pu2>Gn(p}zPF#zu z{6D^ElU7v%8bsL%R9D$X;akCc7Wmebn4H z*6odu-QTzo_b&hrtpxaC<6V4+x*RGzjO^i-U<*A$=r++&BIf@Z;TW>ViX115#p7*E z8~+5dCmK(ZQ)Fe`*)-XV#>onELi2yJfiM&n9Euc$C9-8xbS0l`mFz_6?vSXHy@hOp z?3rYnWZPt0mT3b<@zxga2)ks>{KZF*9qIWfDWioa3r`WAO7=7n^MA5t{`RsJJd5nL zWX=D{o^unDBA3PdFm}B-y7#V7>wn=Uwazn@sCbuNHg=3xEBFbEp++re& z3zvwaR+Vx~kz0Y>($bf)Bi0tQEIIxD*SP&g*gYvr3I1Dv*jIBaNgO6zS-1+hO~|b( zz8blW$*oRq19EGSTZ`P9{r7d)XNR2q1pv8qg!UHzi0O$Zg@G-aV)%x4-ZJatAsxaKMFX9!&0V za%TP-P5z%d%$nBM%wPJEkOXT#wuZe#k~8yHb2K?KfALd{T0$UtC}hSIhBB% zl>l<)|K$D>{yn`q=l&u0FZn)lX8sn*9ZYP^^=mmHceV zO#I)rc79Isqsh-j-i(_3+~nsWzX17p)tt}wo!>}&u;mvdzmV4llQ;h-Z{{zuD0%sR z-uyq=^7$pnA4GmB^0M)~N{(SOIA-|PV$Zt)48-6WacKQXBMfkxa<157-a ze1^PR=<(`uDEY(4A5H#nHIHy8a-{GmYr0=N<>mi*^MC2bkvC$m|MUjQpFsXZg-#Nt zglS8Nf1aE-|0ka#-w?@@56G9rL!q0S`M-E6`D^BU#cd7pRiQrRS+j1N$bE>*oBxw{ zpMsqjk?*P57Iw&Y9f_ANMI|6VQhZc$jVpgL`4`EbLjF4Pr;@*n{AuLJDCczYXNbuE zZ9!*|m;dL@|H+^0&>zX?NjabV1tz-bxl^_Lh2-V`dHH|d{GYs;zrE~Tb~*WL$d4sI zPN6HvU+Kue0pr!YN@zEKI^zEMQO(5O$&V-h4EgKH-%0)kOR&LjB(L(3zgf*>wBv zUBvGH7rDcsy^`i#67Lq?Lwds{Qcw~SIz^%2Zix~=Ktg$A^)f& z;*S}z?oW8-N%HppkK~_L!X(G-mE=Dw@j2o1!WS%Ld-f&r)5yO}{s-x=kbjl@8{}V8 z^Yu8*(B|+a`M1cw9gE~AlmDFjJLKIs?~;GtZCmp14ID60$BL`CX$;B>xTh@5p}}H(iMQ_v+}D z-(GDr|$ZXJ3{^-Z_XbdX8vHa`#+Wc55cfO;m1rfvUC1J^vLahapHUy&y zwk3!Nwu_fVusy+Wf(*e91VhDD${|}B;m*a%-X15}u z<_QGy|KKFAqzKZ+HA8|dL4zRYqj`eB^Ux830)hAcpd_VCP$8&^S7%t$x^;|ym>)C= zTGs5pRvF0ugN}N2g*}211S6Aw*$&(zfQDKZI}T4KIG5lQYuX%66`n?Ly2u$`w-P{b z7QxwGIVbrn6O2*F{9ojJ0+j&EzmVV}f{XhreoP21CAf^>dV9Qe+%0mCLwnieClb6)aIfQP-Y2|Y_yEC!1n#2ELj+F|JWTL7!6O9rzmUmaKn9PA zyFLDdCr`$I-AM4XQwSyr8aWczOCiKL)SHA%fTZ z;@%*bthv1@e2YLOz)e0`@plN`CHR5hJ%Y~(-dEZO1RoQ8n0!Gq26T?sxR z_|$$C9!w$l%>9*B5_M;c!Bm1T3BE`a_hi4|D}t|+zSjJP;9K=|=J35E)?FhI{7CRS z!A}Ig5d7S~I7bM675)~B1b+~?=l|^2pF{9Bq4V2mO8ZCnukb&^5aCRO0|{q#f3it9 zK-d@miKqB1gtHS4BAnGV2lfqiFT&Z3xcf)LISA(^oRe^FHQlqIZ5P-c3FpyfZxGJs z$^6Ma4dwsgLWCOdk3|AdPY4kKKQaA`Zt!o`J45H3l$RD8S*>>DC+8N%g7 zmK84N(1i$BARJ1#BB7-X>|4+4D>)K#w;((0L-T*aRSDM?S&eXYku}^tC0tXumhIno z7l-EmgzGvKS&wjikqu(Ss&HujPq;DRM8Zu71Hw%Sk0jiTa63Zh|JxF7LAW)cOWtb6 zVy*7m*ii1XXZ-Oq+@5f6!r=<-Kxp<(s1gwFL}>mmWfwy8f8T3&PxesMN&w+raRT8! zg!^egD*+<=6UyPk1C(hcfbbxp`M)3SP$`EIn)!<#5l0D+B0PccXhIo&s1gub3GjX0 zfbRPLmOlSP!i+|+5!a(-@JtIO2SJC$4bA9(ELA+ zO1YxHNjQ%1Dv9R*iEb0SR^oMp<3+9~yqWL@!kY+hoG~-zgtsK)Ti@FVZzq)bPhYRQ zEYqTQ6W&8OA#VCP-%I#1;eCWp5Z+Jtu!|Btp!^33?Lv_6{s`ftolY~zb zJ~e|fiSPx&X9%CuXwUj3KHs0CjxP#dGI8XEgs%{OPWUR}n}n~$nS`$sz7caJzeV^S z;oF4os5yE1mD2ECzZARpL-+yVhkg+EkM&Q=F5+01B&8=%b+1WB0(1!YmXPpfJei&q`r7b)4NR zb5PJniNahI=2K{H;XD-PwVe37o5K7v@C7L>O<^IW4HnA(3-bTMqLyiMTTHk(g(XCm zq_9--8La77A3C=7Mnb)?|W{|m!nMLAXitQHhjqwooZ)hVfWlf7)}>$tLitt#lDoacZ+E1bVDVX_-A4tK>-}hB%D46*>g~DMJ4ySOG zGLN8er0LU>kM?OYe_N;C=@A}`BTVH2q|R6bC&PEC@JJA z1eULFLlm;pPK{YIVjasADxOy<)Fj%;KZSuNwN0Tf11 z80mYBqA*(G$rMg8(On7A_bC)k^EszeIK%TZm24$|!r4N1{{M`Rj-hZK1-X4eC7@vc z|Dv>uEGOZYP?${NQVMTUxQv3#-?r6Q3RhC_9|24mM_~emt0>$?;c5!kQMg9C>DqXS zewD{lxSqldCfZKCQA@l@cypXd;TAP-wPtcC-cI2T3U^U(&wohVNjY~5?{PLOGLgcw z6z-+)1cm!3Jgi0BFMNQ)gEpXTjidxnctp)dh35YvkH@2lKS{w||8ett+D9i*NVcJL z6@tR^6yBil0tI(hk4t`$f|);smnpnP;T7N4-T$M>`}Ini*5xhbza3}l0I)(J@m&h< ziM%iT!0T28D8#$$BMKjzp19nn6lbO|g~IO?%>OBTE}Tl?SCKC$d};X>`ijEW6uzhM zjhf$5_|8IZs>#Oxfx^!eexzVG|HQo%Dg5aOg}*5LEiz4L z{!igwha&$`#7J=_Q~DjXI6z{baG-D&ii0f2l4ljpM$!DA;vA;O7Y2)SQCyqi+|uU} z&P#C>it|w%Ows(G;sTa$WI>AN|I@2&Q6-?bh@y*9T#VvU;)_#ULS#wHcQ1G4ytp*Q z6)7%5QEp#cmZF)zdsKUzLve-a&+8}-p*WP{Fp4W#wEvx0T-locZb@-fM<}i)T%F=t z6xX1*X8cZ^5h<=iaX7_wmAM{8vvG>+3pb#+p@{syX#P)e6Ne(3Qryh*&1cx!wp%G~ zMN$55d>bj-3bzw(pB!Dq9VqT2Wk-rTiR>)g#i7Wq6nFD{cZz#>z9&WVf933L#8t!M zz7zwB`%yfe;{HB*0L23-9-+*GC?4$fL!=x^@i39YlU0Zh`{I!lRSt?r`+U``;;|Hu zqo}S#{;*}In zlX$xD42l5P4C{C?#Y-e!>Z6ybdAV>b z#VcZ6my@Q5-LFz1RKyKgF9UT~G05O6~}`h2l39Z>9K}l5Z2< zF1&-{ofMy-co#*vdhu>EqT)RiC-^ZZD)U~7_r;159-#Or#Rn-qO!1)^^heCl65n{t zxXtr%OR!;|r1%2GrzCp+FHTa^N&v-Yh0jrZ-VxvZMT%zr8sTLnnEz9JRpJZcuTy+a zZ3FlCHwwYY5EGdG>DS@{)^IV!r6uH7SK3nP9yF+g3{bxnTOK6%9+nA^HW+t z%7Vg$Opky5Sz1`iBBt0P7NxY9$l}5!DA}z(l$NBll*rN!eP2EQ&7#Xu(pSLAOje|{ zhLVR+8fy8LvyyO_aAiuXczsn$t4UlvRtEO%qvo2F+%2!JX`Zkzd-1($;Fq{7c(X+Md#Oc3}Iu zPigoJd`Bhk6dzsURstyPO3D16((VpL-1)z~?sY_{ZO2<)B5h?9U=^#q`DeC>d zbilyAqbMEdQ2N2bLnygDduTi#N{3N${vXf$2$$gXqa2}hwD1_Ay9G2(a}x+C9k0=3 z{v|ViHRb=Mlz5s_MkK55IiHjF~&*;~6bTIlW&)~_{7r>J=s8I;ZxIZJpp zrSmAABkmsl6Zah>(xG&|^b2C$2C>OsMCoEj#4n*_{!huwU*vM(Sm70vt`sr<7f}f) zsRWd)1W>w`(se#MKKXZeJ4$b$bR(s^mE%gl%|1ux|D{_gnfWVvJEc2B?)1uCMr|0$`cm0lNr!=azaTa;Ur-lpu#a5AND z^zMF#(!2is{vM_GC4S(Q4=K5AIF-^z(m$p&MdTCVr+ugPXMQH-bB9i(^o5#VTGRHz zSHiEYsV?DGw0#Q64BV3*|W|53((0(OHGF31{ycXsF#`Mff}lm#d+D6)`nuyA3AB8&Jj7gKX_%A1HRL3v5at5ROdXD%&$8R4?R z<%G)%R}ii!971`hBjPIwhf!WxWR+M?4ucTEex3>j>9%D6$^q^+h)D z%7$ugM0w*_v7@)VDdoeZZ$^1@%6n4Yg7Pj>WRK;oC~qC-Q{IO1whB4_cYW>TpYm{< zp^+VgJ5t`sD?3|93+?Jh*iGH71W?{1j*9O^d2f+@Otk2}l;!{B{nb3c>j$cN5M}d! z@k1ydDsot?Xo*Kq&Qd`?BC^n@dXBZZ?V zpC&Sz^2v^fpF;W6m}{P=OFTn(W~@^_%ZTllb12_U`CPA$p?n_YD=44ul?xo9e4+3n z;l-3M5t09wz5kalr)=hLFB|zv$~P))9ObKGo$}REt`S~K+5DgKcptr9%^R$lY>Jzt z+)Vivkz0kgS%P)Eo$?(bcM4_xI;U0h9?BCO5uZp|{$G~=m+$xb1B$8ylyxdnewecP zzw}2boB4}BPWcJD^RWD+eO+$kDdE$?NtB<7bvw;2KSyO6<>#sFPWc5YYf*lY@=ugs zqWnJPmnpxaF<+tls>o|X^M8>yD8DK4mhf%iWQXx)QS)8ldnTGaexT-u*0e3-l#eKX zA^x%O6XByUQ;lnbOZk%WS3df+ly4}1EAk!XA1Hrs(PRhxI0OHgiu2E3 zl=&-_IVqd}Q~q7bAHqMWI7|Oa{BMUMZd?5$@~>C^vu1_qckfhYrZPZcpKxH3S($~( zASttYWi~3adp^hX^{UKelc~&2WgaT?QL*#?>DO#4^II3E*m4)7vJjQ!#0Lu(rm~17 zSaeb0VpJ9vS%S*aB1=+P%8?nCxC|9D|72TLmZvgInJWlaq%uTgsO8wmE6vb%Wh$$9 zeN`%}DPeWt8bb4bd&N7VvNn}LPVm}oORh>EPcaQtIk8gW!3w5Zsbf4`#qj<752Q5hj3|F4V^AMH@&WZ@~+Ot$}NR8FVz zBb76#Jf-NFRL&APo61-!=TNy&&2y=Yv5q#+^QfHf`2|L7H81kY#mc!vcqx_3yneY6 z%e+FNE2-R1WgL||sa!?nCMs7`xt_{3RIa0PZJg};j`w|U@XC#T6>g?-n-i(rBD~e> zxBJXHymA+niB#@Z+C4rx!HCW3Ug`J6x|9c~JSy=)Di6gvm4~T3(x0Q~V^kg&dBW$o z`~PhpQF&T8N%)M9K1;><|5Pf^Q+bPu^Z!?r@S^Y~Dlc1RGQz7=UZ-OIA1lgvL-=Ma zQhA%ohg2q0d5_9FCfcIS|FstHd*uVKIG3A3cU-N&e3kVmax{%igOIcXBh>14lVrt6&t4o+@eU}tk381>Pa2esU z!sU|9SY3hY8dO(wqVyqDhkCw}lwnj?7V-XHT~!NRjjH*-A1CpDs%ueQo9f2uvJO@G zf7OmpDeDV25N;^k$e{+@gz7<5H>J9*^v$SlPIW8sEvRl8r>VKMaa%9*fA!st>V8zW zr@AZE;Z%2|xNp*J(wMP=NVfUiC57or~HU7RcME8$5 z)dQ#=*snW6RsLT+MEp>yhfzI>>fvf0LG{QaIa&JANz*zWOEpK;iinb(a=eK7KUFh- zk&}cesxtp-M$K#-^($rmPc;yR!UEM|oI|xFr7Wxnt5j=oRBPIx`V7^kLM^JdQ;n!z zPPHwi6K7KGQteSag{u6&I@0T-sE$_V$u^&4O;4qIKGoBt>-@iZ2Gw(@o=NpA>!?hs zXD8g|e=gNARL_e?h;^zL7_sPuR4)>_nChi2hw3Fsrg4>kWYJ@(UZKn@sa`KKj_Os8 zh+i$dMtH68I^lSS8rJ)N^+xG832zq4|Esr(yZit9kMKLF-bwWVs&~1NqACH^d#FzE z%0#O7dVZgB+&2aNBRoje{GaN>!bg1Oqf{T0@;KF}sXih8B-N+-`)baU;(YOEseY)m z=cqm}@&eVjMCAX~m#E7BZE>$qeN`d(zbUV)DgUp&>3F;#s&7l5O!XZTE%ROBdqOJ# zR6p>^|D)DN^&^QN3qPUywaBMbr-*ze{M@0)RN)s?&Hu%}iboUwhU&Lef1&!Fn%@hp z1W^6ap@>RA^=E6^A@Qrk->Cja^>?b~^Hl$!`llrr|7(Wvr&0Y!;=ge;S&PhUMQs!6-%#6>`U2Ek=ss$jQ#+j67S#5owk5T_sBJ}U2WneW+fHL{Lv33d zUmujDY;T{cYQtlZ+K$xB*s1L#+?kq{0BXBhf|1>*?H+SK|2>nBUA4WHu#ZLK4`Q|b z;!J8*0;nAzJdoN!A~OG)nZKHc3J;6Fcc69zwGy=>sU0i*DB;o6j&a0ZHtpl6h0@*N z=Km5;pmw6flhoA1KP@>;En^ciZchQCmZO#z2^z)VYWn?`(&Bt-EoxEBHFAgAZOZIY>ropiKEf|(6ty#{jh1*awbQ7bB7Ukvd%1@= z)y)4To-vT!M9vb*{A~{BsCh26G1RW4cAlE&Q@f1X1=KF4b|E!)=jTwn0meO%$vwHH zb_umh-Pd+Dpoy3Rn%^vb~Ux@s9i(tS{qG6x$e})Q@cJH&HeVl zlpCqtOwG){Z`9oy;TGdI+gts}w^O@|+8tiM(}?YqyQ$q1Zy)7Ppf=Ixs06s{GqwAv zy+`c&*peDnweW>ns9BONPOl_)^PlTURGyfO=Oz6)4U$A}g&)n3$5Pq55Kv+}B zs5y)HkJ`7?eo_8+8uokfAE^E4i1<&`evY~Q?VW8vm4MoB;=c?35dKN+FKW}MSy8Z; zIqE;u{_XcbQ|eHkkGjmiF7vMspgtG%KI(&PocciOv#9%)YR*c1cIxu~_Xp-&U=@Aob&@FGPK9>Vv5-qv*oIMW`<-V*XFv3WT~W zL48R_#FwJJwDI`6tb?(eJSuGHl}_1&rO zMSYJrN_|fwHom+6)8RgGQ(e6O*Y{Ub{$D?k`a#qWrEdN&T_wQXc~w7*`q9)6mw1Hm zNTHd(y^;gt80yEmW_(8$^>~ousXwjc6R4j^{dDRlQEyUDQ7=q;0)Gy{KsE|LYa%)mWikQ$k(Xkl4}ETf#`#rf#BmmwHcRgjYsVA0=h9 zS5Brb|F56wmDBtlIYXIeQooz}S=4W)em3>XsGmdqJcZ5`jBu;jyzV`bs>W@=@g8Gwji273lxlH+P8&0DBI`wC$ zze4?4&Ez?u%)kDExctBVl1Tgnii@LtIt-A?K z*1OgI{Dr#z{~n)(X3ZeQ$D|4;w}{TCW@Qva34AnG#z`tLNL{s;AcsQ*d* zZ|Z+pe*fpM`n3Kg^?xR{OC4j~fH0=C;hGi`+ zeHj|dnr=DE(OBMdD*-N<#t<6Y(HKf&E#<5v97bbh5%YhMRcWjyvbtAP0vc=jIj>D) zQyS~|=(;qt*BbKwhWx*g_&<$}XvqH?n^=Cle;eli?nPsB8e4e2C5^2lZY?zbr?IU? zr*GBmX$+^a2aO#}w}c&O>?D%-KMj2ZXzVIcC7`kU3?uAGV=smF7VbmiK#_fg`_VA- z7e8QzUI)=I|EF;Xjl*diDt?${CTnE=FY(A&q;WKjb7&kxBcO3CjpIyrZ<&UrDf4*Y z3BnU;oFtNRD3TUtXkIWTr_(r7l{2GO> z6<$YUyy?kayMczeI*l8JHwkYR-XgqJc$@Hchwk*1#+@|Yrg0aI2Wi}GqK$A5jR~Gl zq;aq3_bGb6@BtHT-#tX*X(f4?)per#`7Mnp@ni5E()gUlmo%o* z_#*CQIi`Q*GUGHF-_ZC=9lsTRC;VRcgYZY;Pc(kka(@y2D*R3OyYLU;pAKEV_}?^V zr7=z2|1r^~_pk6j!zMImvdpIWKg|KcKB4@-Y5q@hkVESpuV8aF^_^Wfhj32eTr}ra z{yakYf7AS*=KR71gy#P)-_SyXX)f&fB2pF=E=F^4uP-6RN&wBJgi8yT5iToSj;8nj z<_c0)bQquE&>Tv0C2QIU!-Ol-Tt#G6;cCLwg=+}c6s|>cBayXfu0wNu@pWmg=ScFN zYHncMM&2+MY0Cebn@HR=j@rARxjCJSXl_9}Lvu@-SJT{z=J7P;|IKY^?n`r9nmefD zcEat2!(%6*xucr$|K`r(y9jrsDU)yRMss(kNZdoXr=O?%zqwBw)qM8z!|qS>0N?9C zng@A)utqq9ruo14VKfgHG5@D|qz!JX=I;M=cr;CS^JlCaOY=C-t*>$Gastg0XW%EF4UDy#|XG#fNWi(3hx z*%C%H&Hu$aG|m5M_JkvZBOQv2>gyy+qE zvFN#;jG=j+y37BY7l>adyeQ5ww8>mT^HR^P1kk*k=2(#{ysi?^92Y+U$#11=Xt~XD zEzNtCd>zg4KL2_tHwbT}c@s_5f~Nexc?(T5e?@PjdAspsm)$AxF5%t6dxR5cPIM&R z%Tn&6HIU~0G~ZS80h$krJVf&~nh(=_mF6QfU!eJ@b+q+*jHb-L`Gi-j1kij+__P(= z<|LZWh}e&RY3lc1&FAgi?QRy*rx=+}nJe<~uasP}-Y5=PjCV zdp_BST{?@8xA$oNL-T!_pV9n)raMqSj5Cu%Xe`8_nNMQI3>9Y5pbR z{C`?<&;O_sEyt$uukb%w7-`A>Tju|24xrU%Jl^lES!m5EeUNZgTC<7FZaLO{4kPZ0 zM{6!xYtWjT)>5?O|E+nIApdX8@ADU+wV>wwhM|F>44wIVHWt^K;MNo!Z7 ztwn2Xk#%ToDYC9`J)tT>YXe#vx~7zkXl?AdN0IkhvZ7#A!9M!sPU(_5X`P_xiL_4g zN=izaR>loJQ+(N5s#F`_ei~&9iBpOUsId zz2aeQ=I7D6ND1c)FQ9c{e*!HlXVNdBbt$dO`sd>at+7M}T2~OwPwPrrZ_pY?>t0${ z(YlS+)wHftUsnRIjmJr>tTmq2^|WrJbwi@td-f(;x6-;q!eaKTk5Bjx%XZ>ihP8%6XR7E3}@Y^^%&;(|Uo{i*bH}w%1k&V&U9ZK@|oY$lK;EM^V$eM5e=aA zGp+w<{X*++TE9yFP53*lKkY8r)*sg0$X`|#6FyBj{|L?e?G;zd2os~3gfpA&j*6&{ zXjUl$iDnTQWFZYmG@F#!iR`CdM042n)o4y4yZLkab+Bk2BHjOKerP;LQ|IsQ$s}rrN&}tTPFKrp+tVy&f(ON`u_-JjSb%@OQ6-``1 zd;=mge4-7BHj2j?*f&nfCVkUvn-gtDv^~-0L|YMU5$6zXX(T>KqOFOxQKt9*XuH0D zErDn_(XK>05bdJojzTK|L_0f7N_?`Q-Au7{+=Iv^>`8PO?oX4W1C+lv(LO}`5$$Vf zNv8R~=LZrUOl0PtxLI_F<3xwfkaIZE(L_f`H~%L(Dv8E#u1NkL9jnlBeg%&w$`PGF zlqNb+A@hHtl=V$Eg8bjaY%CJxjhGS$?IVEJu1NGDQHkhIqB7ChL=~cwiK;{$q8d?) zs7}-*YQ!VNi?A;OY_y1|-LDgMiAECjVudLA{#Ti!grf)cnGK4cLUgLPgF+&hKnaiXV)p3opqS~OYTr_m4gi6+f3=VytYi$~CCFW{cm6}?FGDv^pp z^l}^}dc}`p{!jEe(VIkX^!JtcmNk>bO_uVG@LeJ+3gYhz-TgoD`|*FY%Q|{owmwBd+B(F%2}578nlt zw6~N_*RQ?PzbOobBDF^U4lVcBH+N$j-E_BG})Gxt9%S=1+Tf+WUy; zBS3pk+Iy+Fx5M}z6*a8{(B4nDKW!@z;s??;|EGPh(EMNIP}+xiez+7X0oocz(LR>; z(LQ>N5$71~<7lU8TX*-OeZ24l;fb{U`F}eVyOyO{uPkl1M{=|;r!Bi~2eg~&71AzP znvGTzmS~r~QlV`Jv-BG6y5}kZ?)=KrhNtND}7XF8ttoSUrqZ)+ShpfTH011ls{g0z0f`XVLh+kMBB_? z`Yp6?6*2P{x!tewonE<%_T38IBb*?V`M2*CzmK+iFWm3Anh(%^(0H=x9;W>`?MHm{ zQQD97N0t8s?I+`?w%F5j-2RQQ}Lq-=b~)Px}?& ztHRfGT)l2x>;QX%_M67zdq~=EyBwuWrY-YtzpJMA|MvT|KZtYsrny7fjqnfck7$2E z`(xkt6LtBN_7tytMqB>ho@z?61-_*Hi!!YW(EeKZ4ef6&$CU4A%lz9vc;!dw&XMf; zPv1YPaqVAe|7J~Fo!@Ey5p!k!N&7Er+Gu~%o)&Xw=CtixRQi8(Fdi4a&dhYSpfiBZ zN_6_@EKO%1ojEPDGmCJLa8}`L!r6s$ICKsmJ{O(2=`2WR9yR9`&SwcW&iuj!;(wi> zvk;xdqztCBu*f39MIGA9-7#go78fo-XGszB|2SkT-dTpuvZh$3eFUJhJe?IpRum3# zC^FPfau}UWq^wM56*?P8wG={rOji&RTTVj_)3!vySdRiT^9v z<*a9)eLCw4HxO>`Z4*I#vSc?CLXjqqDn|Jz~Z7d&m4=qLlzTst%of#obo`*NGfJ zC!lj6onz=6M8{6)=^RYw5RpS2iX2AA%wPNnI!DIb-mRU)|Fzb~(m9^aaZ0mfd)Y2K zfzC;EPK=w1rs61_w3-=VR+yvXF8Zwajg&}q}@c)cq{WwbMb&PX*!`RHgmCrgp}cTP1u*$byjKSOw?@GRlk!gCyo zoGY{vK<7L<=Kpjq5bEJS$!HhTJ(tcUbna5?BJ|I>NYp@@3~P(1PzYCcJ43Z19uyh!J1DU*cH zI23tS_#7RTgU$=F?gpXr5}gm|yiDh9I8sM?X^YW8o*lPvdnF|BTM(B2$H52)`75Mdv#W_%)qx=zQx$ z>zHhZ@9DTR|9G4Hn1pPL{cPNbDoE#7@!#nDPS?4vl>j<_(w&XYUv!MznB>B&XkDV0d!}P(nr^w{QKnYAc?cipv+Ep0lIV0otN&Mbmyi!mqn*{ znP-Oa=cAk4{4+hrO|`p_%b`11s1nds3Ft2Bc8ztn=;Cyjpt~vECF!mrWhvp(be9oX zR=AvSdAdVIR-kMCFFwSGt>#K<4im0yVxq4abGob1U7fDWT*E7C(p}4Ox@!y9@%p+( zY|QngZy?;zM^#h0Rs!f+tx@J?ba#`oIo&NpY#r%tCEQxLjYE-bg(?Bv?dc9za|hv$ z4n=mNyR*nH!d+wCwy+JmyKoQTp2EH8?k%#9Ly>)j`_bKBN5UseV(N|0|>t&{YZOo+U*kpnHxb*o4Q>JB99f^ip)s zr~5743+O&i_d>e&(Y=W7&FbY!z$GG=(!GkV{J(p-l(E7q=#CS)GM+<%wjHjfdkx(i z6unmHZUJ=%>UiPxPKlH0%Ky7J`KJ88EC27_W@$E>l>oYT(7jXSF1iym&fRL>CXexo;&$nU~G=>F-5_+P@mh0}!p2>+$~pOGF8?G?Y*dNb1-pr*EJZy>$F^kz}! zAmOYQwT`n1XBW;PoRi*MB6B+wnTOuIp3g^be$N+BbU}Ix#foi{-oo^@qqhjX)f8Qn z-eNv~ae7NgTvE7{*WD!-*Krwo%hDT4Z#g>{Oj%yI0=*TzGQ_%AXeHq=;mSU`ikhqX zoYl3IHH2%LXzRO{aBX_)(A!k`>k8u~t}niUa6{on^fq=x-1~oTGYzu2#4UvG#%wpM zt%U9pkmK73w{>W*Wa-<}8?L@P2zR8nFTI__&HqJqp|`8&yGhxd-X0=*dVMc?^8a4q z|6105KDs|W^M86~{vrp_JJ|C>=p8EYFs~d=?}(V&RGqo?j-q$8$T7lWg?90up4_i@ zyyI$~AUsicQu6StUYee)yO+^|vh;F(S$Qb|z0fNKDMew4URlKa-(K2u^lJ2E{=G)5 z(`(XeDbviKUfb&(dR=;>>GkO8w7)lEhV4Jf(zHkDo$LocmEPm@PNR1-z0>K9qjv_q z3+bKd$2^PP*`A+6?_AHvI706{;rT*$1-O4-UqtU>pLvO*m(sgT=4yUFxqbKRmYx6(5kr*|8@+ePlM98>NT-X*-7 z-aTHQAZ4O8?HImK&HIH9m}q?;r1y}>!@@_r{wTf2V(zE$1U>VAdQbVBr|C_iCrj@= zLr>=4drmpe`a7?iH1Q-kbCi|JTeXbIM!v-eKfx^xkEp zJKo-7#L@KLSKkj9u{FI988NS#?x_BV-nZgb0_c50PyXMVqULA9&*^mixnbnu{ zzNYt;i^hu568{%>CE$B{e~SMg{E^;I^nTMMf2Q|~6UBe^W6Jz{eNPtf z=3<1*f5e<|j!&3d`SX})fvy_{o= zSnU6(It%bOis%2ofTV`ITY)0Qi&LaH6m2OKXtB0P1&S8eB&W$;F3Bau3WXMTcemnS z+}&x5ON;zx=04Zo=l?wSyq~$*+1c6I-Pygpy@XOfN-G+3CF872sV}8fjI*lYYLw*5 zU+q_V89`|cN^52uN^2>R{iRfCZA$Ctttwxa(t4EockTX_))%H;@^-AWA*GE)jFSF# zXeMvBn;H&Kj;3yAsKb`h7L>L$Vk^U~1&!E-(zZqnG~ABTjz(;6xPzdscuRva!k9Z# zI@pL^DDA3z)xR61-6`#7^d6MN$IGZK3WNF@zIpNpfrZk+ve?KC`sv$ zQ#y{)L`ui!@?%ZIIK%OV_6bU9e-(3# z?^5!F&`S#nDAg#1mQ+<{_YWaUF{PU+)hSJ-lu&9@YM5k`QY+JMx2a}SZ5>KiP?}8X za!Qv_x{T7Lnq;Znky{qu3TMpxh|8WbUmdTOyv7OX;<)e{3vS{Lc;ml-^Y3YU*2EBVFlt zD7|aU_wrPk0yO>`^FvA><+Oy6PmK8~rOzpS)-~vCDA_3ZlJeq|zM`y)YD!-lenaV7 zNSnAP1PyD zEcx4R|1td6@IS>ehVu!kSh;H!pj=Rn3KS`8{HNU0Fkkjvd*Gn(>tl=r5*J>}gf?~rTQk@BFN z-ih+gIlT+zUArmSJ?HO1+2VhBFX2!gobg4H@;;OgGNw)elx@B!?@w8Szj208w%}hr zkn%8P&a+eHZQdylr+kPB=kdR+@jtJ^NJ~1L@)1THNm();WwZu=%A*907;QMl&^`gs z)Z_A0odPJ2H5_L+p7I3BCmJnVK$&AFQntgN|7XA{l%F!0Qw>j}e7X^nDBnx@49bz+ zo@sa%<+CYYK=~ZIwfHaR6SU~_1@lrar0i3^h_XZ34u7gMOO(r$E166;Vb`*IdEP(> z${PQTuTuc!TAmtHzJ_w0a))waNf!Uh&0M}^OkMvY6Gzr(RKsM-mr$N!sX7HvzRd7) z!z;Q;UTK`GC{H!wYQb))(1qAcTm2L@~xDwr+hQz8;pM=<(uZoE1{O$l5r^C zW-_;DeATR~?lip1@NUZYWPHnbUq(~D-%=l-{2=AWjedyo!+Gi>lpi(bV_89#SL44i zpX_34SsMQ-+gwn7mhy9U`@G={!xs!+6g1)`!A$_`FG0yQU1g7 z{#h7$ec{j=<-ZK)P@XG<(SIBMWB6}j^zlkmpfaDRDh#=_FtooYr?Nm{#4}V1g~Rru zQWP|zhha~{UQ~KhS={J8R2HPND3yh%EK+DKOJ!j}Ny-p;ZD$%RX$i}+Boz@`iptVm zVw!82jHa?&PAs2mSP@66xf0GWDl1dDo60IwuBNgomDQ=NrVbe@z3xydeW|QbIPgOC zLuJjvX)cwusGLTnAC>K?tW9N8D(fI8h$`zAp1z98dQ{e@(qCw~iiKB=xq;E2P}xZN zGk2o0F_ldUPv4r~4xq9%mCdMZVe*@2e3RUg%2s;Ym2n#?15IXIW8Nx7Ajgen?qtjz zsO&~%M=HBe8B~;`U==BAXGtm+{#AJ`de@9F`Q51;NM#S?#8hQZB=|fnu?Lu_z`D&2klsdr}dXj-YZ7l|wD>!BmE4sZ@+hDGg>`BWh9lusZ6AD1eGzyIg-jzR7O!z1EeCkhS7E_o;(Km@I>>EZj%sO)B?Od5+2hR34}D zAeBd`JVfPTwZy`s#>2{^R36iax7Yq^-k1ZBzp|=4P31`{PiYXCr~yq`Ja|028a@k6>q3= z(K%)-DsNHwoXXo&KBV#vmG?x9%DZ|lS0l;$R6bB`l2Nj#<>ItYkv)XUC&n?ID*2h} zAG4L^`T}QuDqm9hn#xzoKVXjWzoGK2sxnC`-%Cda<#(h1$Wk*gDt}R#W1M-p{x-3H4F5I!Ptn0}K0(Qgvj9#H zoC0##S>mdgDh(l?bb8|S%KWe15Fa{yaMraU{Sr}(AoJDXJRT*=a*4kMd zX9)?&g~N|j4Tmm)vlPyyS3eQ` z>h0Ze_Qlx)XE4s5ID6^nlPrRox;M@~O3MmFaJ=|oKb#>r`{Nv-9I?5JKNROc9nn%v zskO}b&OtaK&cQh2aHLXWaSp*bRQ*5XQk=tZj+V6z&IrSiIENc?grPL3BpoGKn3-`# z;Yg<%tsG4ngL6zq7mF7g=QzXTGkLW^zBh5k<4jQBN@#LUz&TN?CNaU8h;ts!NjQ^m zPR2P6N4n^#I_XOlq<@NYWFh3J6Qpb5oPl#T&Y3u8WwldOGtR*|S7|AttJde^lyNS= zxd`V%ZJ_#H<_&44Qdd8>7Qw0DcsLG@o3&%E!N&=-Tw7mRD^zi=#;M`7a3Y)pM{KLB zyfmxWtfn?_n%aBiR`egc3{HwO8K;fYQEgH$L6y7&=Ta4u?0S0{&gD2);#`3xfbVcoaqwX7rSkyJgE)^E{Sc01sTH0o z*zKcAtIT5=6Xyw>r*WRdc}kbf(jr;3ccfXLwNeJEq(ornd7QU!X5hSr^8(JRQg@se zabCiC#pss>i^Wkt}np_;Ew{PIQsYQs#G)l^8wC#IPVvx z{;Tp*(+LuPKE(M*EfF)sjVHW{^9j!9IG^Htmg&({RsIFem#SQXm2fmVeT_2<=Np{w zalXa*PSuKG(t^X*#Q6bdrbQB)q~u?%o!K})7w2F3j0q~0e1o1g>ef;7xUB} zxYk`&pqC}}Htb`#AnrmYnQ2(Wn2X}BV8mj$iyN^7?lML!X}FZ((t=Vn?y^RR{^f9& z&zL!9MckEe*T7vl=d2UC%_Qc%_cW>Om-I)7ise-usiOsnC>%=78&lP%z5kn0RG#n;q#6gA!;|^EO zlxOYsP~4HYhvANp+7*ir7Dm3QBgH)&_Xr(Fay#-(+#`{fChi#V8}8A#qi{#7567OW zmoksh+rj;fJ`VSI9Xm3)=$v>u?l@eH{J7)AY>lGs3Anf6o`|c9L)?jmCmEiMdx{a6 z=F^0>+tUpv8J=Nyrr}wF#o`Ryb8yeq`SidGanHl86pOMCaK1I@1;`O!w}g8Ut^|$G z3RiqpxZ*cK+_E;S(Aw?}?$x+1?q#?h?j^WB?quA+`aoE?ZgSxkaaUCcT)hX$QNs(3I^~@r-ndD{-&Douca*@xM)ixL4s? z{I?Efb-V`mM%-z**Wpgby|$1J&>korR)yE&-k|=M4r~(>u5_?laBo%_3re`RYBNbZ z*A~AWZ*dJ%?j5*y;(mvF7w-RX@5X%r_a5A*P3^t7_vvnld%vujbm8Pafcu~kdTYeP zhL0FNiu;%mj~hNAXvC9-PZg%GX@qp<8K(bP+~;tgHzSYI*VARyHSU+VU&%C~_DEC8Tk&E$V@HvXutX%_g~x}aDTy_iTfk&EZo`Zd=ZdKP5KGEc;GF7Hy@tN8fR;7mm);J zSHLT3iPEE_rzxi=-lBND@Ompp>Mn~+uMggWSwzKK2yfw>UZik>Jlq|Hx0oq8Tf?2V z1m2r?OX9hBOX2N=w=~}Rc+23ejJGV_3V6%mS@73*Yx9@4BHl`Bm^8Q6YfZdW@K(oL z6>qh!J|K2VtoHiits#xB!m>#4L{cnVS9$_oKfJZ^))BhcW6^ntx1Oc;H;$;?0B>`= z4e>U?+X!!C^@%8#OUvC9Z?nRLFYyNGQ{J>5HhhG?1>V+pTjFh17;=LO%j!kzz75{C zIzrW$fx^ezPI>~~_INwu?V!Cvt~nWVP)_WOHx_Rfyo2#}#oGgKH@w|dZ8AvhIs8bx zJ@NL^9%Tyyyuo;Tn`VvwM(m5XUrz6jr|Sgc55XIn(+3)7nBhTr>BI33!#e~|svvuk zZ)%iK`$ym%k2kW|V*{(&;dn>nZ7uf546Ya6(T1Z8N8^pj`N!ZLi+7yf)~D;G{YqC9 zc;oOU;*G~U0dGRr2$E+s??kQg)Y5Y3TE=DfSqM zHw|yPuFt(|1%;y_UCa|bT9F$xP{=c&cN5+tcsJwShj$C!9eB6m-KKp&iqK}dz3|iw zBkshz7w;}B;%G6_BAVPkG*>c+cZK zh9`A-+>Cj`qQsM?;VG@As(QL`ral+rJ*yis62Luq1#qa01-uz}FXO#{_oAxJ7GvH^ zc^kcgC%x!ZJd6LbgcBK!La*b!At73CQ8N;Y-Jp?l%|j z1H4%pV7(9VvJw5Ujf+q4zBb}hyw8mI+?*y2`i0$!9@+m9H_9a)=9@hATfFab`g=Tk z1)$wvridwDO`0tP-j8@c8S%5>FPf_SU-5o3;&(&Yg%IYScoH^+_)E}KsW!a7@&3{0 z3)y4w{>5J#??3#$_~5UKKOg>L`19lU#$N!x2YvzH;=e=~$t7LI?}^__qpLXWSlP4@ zP9OY*@fXBjXkMVu(dsXPzo<5r_*U9oO7s`UUk-l>{H5`i#9vDF=zL`BXMY*|Wi=Yu z)|sfnUmkxY{1xz5l*n9|y?x=Nl9jkJ{wivKSS1>yTl%ZvudZV)Yfa^>fxj01n#vUY zQg^?f($dN@Q~T@SZ-~Dx{`&aq;p;08Ekb5AdsBnIfjw4>%^TtGg}*WWCaPS-Bq;ft z;t#+dgufa7K>W?|w<=891%C^}Ewv!M-5P%zA>Gi%r5 z$G^ac3p0K}eoRkn7$!|z!v7q~WS(Jvvx!&cZnU zt@wA~--ds?_Llw6F81)O)$YWKPmdGQslK%?+|L|YMe@(q1RS>=iX!m8*36fvq z|BC;O3TXHE7XQ1P{@yr0;LkK-R?eS||6@-7g#U9+|6+u+-Ea7Rj6 zm=vLnI|qMm{sLMam#)YEhoBe!zXa+x{QnB+ngkHcXT^RW?N+kP)3_0AL$Gb(6y3zosZcAj9l;I++iOo2YY&)1 zup_}BU4uzjKI~;PY-fTY1iKInCfJo=4}#qYc2`%+Vpygs)w3tTUb4}u{*mJW60d^2 z3HBq{hhX3TTXD&74y4KlX#dYTq~;w;AhsPya4^9zf`hblshvE%%IY*2P9TSWEcnY9 zSKl5+FqU8h!N@MYtigiAH6RB^5NP~2`Y3{j+4Pa}}0EnP9{YEar#_9uhu z31$=AK=2{KjRbcQ+(dA*+90d+;1(@KoBmeA+X!wq;ts<*1-tg}gS!dtw}!i?aM}U{ z_Y&NvO1j$X0jUVVg9MKdJfyGtwXzTE{66Vuf=3CSBzVl|#|@uQnXc5Q2>wU#wDD!! zy-4t^rfSCL44)^Mk#k;9LhJQX&Uu;Om7IQ+;I)j-mA@{x1aA<$najLooVN+y$vN*5 zyl2e!bIu1!Xel2N{6O$A!S@7m{!`wR-9hlF;b#P&8}Wrs2g?7F;434(&N<)M?YD;C z6?;rkzBpX=&4QT(v$WmiR$id!X#J5uO8kl7SAw4je$gZ;Q6i6~{zf2+|D!b0PU=@k zB)tDgFqhyjf;rlSq{CRBA&{YMJ3kU<#KYPU{}C=qnD76G^C>f&pKt-f-h{UQALjf2 zVGqK5|3B>2^`;=~qeW}31qpTkpD^G53FQ^QMB^+*xG&-2gaZhdAY7erNy1eLmm*w6 zyK%U*#?o*Z!exzEPOGMz`S;7;TnYY zrd|S?I7*%-!hVEntKY2dgzFHlOSl2ydWG{AA?$CszF|cDpg*COKzQ zBeo&jj8JfM!mS9mAly>DZI9Ac>#cRhw0Bs9+Y)Y1IFN8Vjm)wQYX`arcOcwREf>S2 zDZ@d8I~D3}xd?YA+$E=XCEP8icem6%4EHqLi*RtBy0>xm(OYec{RodH+@J7Z!UG5o zBpgCGRF^k0ex>0gjEBPr57Jv%N7>F5;c&vk2oE7VR9CiABUyo~ z=;|Uop)f}#wYQ5sZY7*Zcmd%_gePaMY<=bw!cz&)lJ+IE^?!Ie;Uq#`_7k2_ICnd3 z`V5t0j{xC0gu4DGJdg1F?lOc@!Hcv7rPU-(sxc+PI-v%Cxd(R}eOG`KHOY2vZ~4hMhchGT|jTtxHP6%M33U)HfR8lsxrH z<6mVs)$nS=YYe9mPB-FOK_jjsyq@qz!W-mv-ppt^Zzhs*Zy}NqeJj;}2ydghCE@La ze-qw8_y*yfHty~slm)yDz`G6aF}#;h;=j%{g!dCZKqxDJp&vAq^}p>!gtGqcnvV#j z8$3(+c*Y@=M*xwRM*zX64CN6(Xn6q1@;*oSvT>d#oFRnKFA%<%(=Qp33BN-4YR;Ek zAkiZ`5`wRHlacuF7NKqCgtlD}W`X5h!uRsL?-PEI(;u1!*#gRn_=NC#!cX(m&j|DV zpYRL9F9~(Shwv*x-6qO&eQV6`=5g#+w}1#|63!z0)9BfRKN9{%_!HqTgg?)dC;YV= zEmJ_|2MO$21Yx%MBiiN=&dpMd{}0vG2>+!j!CX@Rqbl*=@>V7OpG|ds!v&~H{Fhsa z|AIXP?eeMiqPn;-<^8WD^)XzKs>J_H&%#tC_)F5FIcG5=%w5$bs4hu$1*-D$S7esX zWtO43tZ|kzlve;RKisL_fP- zo9a47tZV$tr2fWP-*5xN4XJKQbt9uU7Bpg$uC}WVu-naY{^oYOMV`79)vKs(P4y6} z+gQ@JREJOz+_*8c{<{nh{%sG2e z9ZYpUs(Vx2C$qt1_BDa5g8LiifNq?j#yQY%7}bL;NlZG}IK%B$Y&ewaxl|9MI-cqX zOB!i-IMrjR9${jV>qx3cQ5{3|XsV-4U{r2NX23Bfnb8vbCCl-KV-3f3OPxUVbgCy9 z-(G;K@I<>k$?#;uQ>dOw^)#WaAk}RANrq=oJu~N=Wt=SaoV<P=K{F#1M8yQIXMjdRO9j@{m7cstcQGCtKisoq8P9y9XpZneJGB=76SdB8Xi8a_nz z;atNbR39~_?Ei?n9;f=myj-UCDdRtF_>AGRf<`=N_`Kl^!xs!+%rsDand;kAUlFG9 zUp0J z*H!V_3OQ#*YAaD&!?LVQO@qJDt5RFdh}CmW-#qV{IcF^s=tphsoU@K`*0o!)zdyCn z)YhkVAhivs?LuusYFkm;$iy}_l;AHF+0<|Vwaty#EH7&dYFi2?Z-T6XTbs-_)V8%G z$v%+UcGLz@+n$;Rf0GvjcFbsMJLQr)=c$rwSD~rxX1F`GJ*e$(^q$oAqP7pU!J>!S z-j+pmQrnl>e*eEQ8vLmZG1TC1mq-pX&Oy{hQajk_;f9BpfMhw;ZV#h2!Z=zr;~Z|N zQvkIi4UaNB+Hh1>I<+y>&Y*S-wG)khtl@En$5R_Cgwf-uji+W|zc!(}<(4|p(BgmX zWNN46xlT3yY1B@qHp!S`UgrEWsa;6zEEC9zI493_t})LuJfGSH#?NwHWXy{VONM2` zilHNDglmL&FUu8Bd!1THZ7MaJAZj&gEt8C>#YSZDUwoBNv*2HAni5ecdMx#j({@12ZyV8ucr10wQH!|No^Xno2X4UJ=YpuXL!Bg z4b*PTy`5R2@!yhk3ZQl?wcCui-S7@UyRwSkWz4&&$wZLlx|iC0)E+SY{kc64QhS)% zL-R7uE0Nlx)E=Yug2_Kl?Fnkn82zN-Q-)6q=Bl1G&U1#(Q=2g_$v7`kd&xLr`OC(6 zh1#ps{%7=S^U4*1+8fk9H2#~^y5c{zw~h0T;k(q{Gva;24+L{FKB6|4+Q-y>ruK=Y zeoF0oYM)X2irVKUDK>mzNng$@m)h6VzA>f+|Jrw%WUlrHYBMc$7PTL#&Hn#Wf9j^^ z7ZdxH+HaW*wcn}zLG3T&|7lFAr882)Sc9}$@h(R@VnD>GWaINHQ^ zTQuxp*we6=VQ->7LfGXKEkv}uZaYK^6D`v9q!}$rv{+6ruFsy)5{63}E=9Do5z7b~ zv8>^8UC+zW3PcwYtw=P6XeFYfiB=}kT_fFvi&iBXM6?>wrbMd~twYq8Xf2{Oh}KlA zWM4(p%KMk7AJN*n;~`A>20_hOmuMrR^@#fGYiQZfi0l&pwSNPv#fB1EXgA&D&#EKaV$mK%d#XK_MYd>&1{3Wg zw?uoZHhBXQ?MozI{^}k+(f+yx9UUMVh$Q}J%_{A6Akkq&!-$3x9Yl1n8k`v;Z^@%W zhz`|Kq-fbO)^bM>9YHjbNFu*|(4mjUpPY?vhs?!k4#B(J@5F zneegdLwT*E)jytStTD$ColZ2K=oF#}L?>wb%5GkCqTxi{SyIQIM09dS%jPrDsYItq zcC}gFBgh+{XcEzRL}w74YZ=ef_w~_PhG!d|Q|$4GS|#rR<-J36KG6kPS*k%)$!o0W zA|k1j_@_kV5S584nj~AYa;cMDBCl(QR{S7u0iu9NtPP1GqH1nT_O*p}RBNL;QKEWm zOO2>O)U--Tcj^$OMz`nHu4{Kax5#8G*seec(s_xIu8HyOugX(7;i4PM!Mf3>K z<3x`VJ*GYpg9WwMJwf!Oo^jIm(eLP+<>+am=ZK{HJ*)ec*(lIfkaA~e9j&Wa5ib(` zPV^Gd+e9xDy+vdn0z|J$CnS2!&^n~vzHYZ~5WT5gbka$Rrkv;-OQNqV>Far7mhoGn?}%m*$;)5K z_=BOm|5dey!kkU?BayuA75XR3mAwKM8R7ieB`Ho&C;vgbGtr;KeTe=d`j2Q1(ceUK zwOy=-6a7PEpEG2hlxB({UVwN$;`z0&%I>tB?NNS#xHt0UqD0zQg1^Qn;-173{FN^D z_`2)VS-c=|f8vFR*CAe*cx~x^#ETFwO1vhq{P=@tTU>2WVhQ3UiB}+AD(5V1{H)Mr zjb4s;c}<;b0ZntQX#ACkS2ki5;?<3?gRJptCVVh)UnNw2jhv(3d=d96_K+XYI8;%L z7hlEe60fJdPNJ6dD~Y1<`oudDZ$NC3UwUI~>;HIT;w^|bA>NF5Q{n-|9{;Hl-Kd{l zm^g!YbGyBZcuV5#iMJx&MmWSA2vO|0h{zBRBHl@d zt(YX2gu8eb;-iUoB|eOJH{yMWcPHMPcn`CGPd$7a+Y#J&upV9-zgDrQI!E6r$NLgX zt@krYX$w2&8B2|Z5D%4)1&Te_FZSG4UZW5XBNo3Mq`}|bst^w+KBU-FzMXugF!NO< z#2y*B@d)B0h({71u1=GfEPR=3;vo)1MGP}u$h({5RB_2(Dj2WP>faPTk@v+2q z>?b}>T_MwlbT*ll;&H?$5RWIe@4qBTs-vxTBJo7+lVXXKrJd?z;tz;VAwHe>RN~XL z?X2@_NQ@^DKdmnu<1>iQBo<4~A`XeAh%)gx#1|2tOMD^md0M(m&GGrf7YI@8d5EBn zChZ$?l?o@7)JS1U#EUD$9en>1Kt`awirTOZ_5pmo# zYbSGed_VD{#19ZZq%Yv& z2h|VS=N~41q$`X|U)6d&M*Jl4C$$6XS!7m1%Ge%>1BIc*nJ zE2Hm)E)R(J zox0@ugSw24KdHY!{1*8 zdV#tu{xe#q0P3>-*U(43H+7$SAN6N_LBoZp?@N7Q>g!Qog!-z~7p1;*;q1ZG7o)y7 z^(Bqg^}i8I3F@U9mZ82p^<|B}TsQs-)K{jyBK4KBTzTGAvWzCb8uc}eSe<%bBi5Lg zYPV}q??-(d>T4^%tHgEZ$x!c4eGv8asc%7j1L~Vn-;nyo)Hf=e^^9I>;U?Ya0YX#X zjQZwTYA&-S^?}s4qP`9Ft-Hx@J5P-IcGP#EzI`{&j@=}8qP`dPovH68OzOK(-*sN9 zadxM^2X$Njn_*ch^}&|9x8XkOCC$Dc^$FC)_@k*GK>bkaL#PjwXyZBdCus$&u6#&jhkmV;*T@N9FRPsE?&S+LFdlKaTn_)Q|1T z)m7s0Ds1{qY@FfvOosXi)Wxb3sh?u}iPTRr;$%U+)T&ddpKi?4a?T{`XHq{SyPb#B z&!&DM^>a-4TSYtw^FKyZ<_X)aJwn#KJT;(x19f}( zTdz{Lx4LzG1x!7nuJ3=T*9{ZRGJ7NH4MF3ys9!}rrG8oA?03oQ*X*HXXEnAdA+<^kp3Xv~`oZ#KMz z`mNL-F#0y?w^P5{=sOJWl&|@a&!w|(`s()>^Iq!rb$#(yzh5|djg@A4kor^9AEN$n zmTJO}7(QzF81=`Ec*5{W!D3H+t4{rCLmh)gJZs*2&hUA|8M!B4)LBE86ZMy<>*kNq zuNb~+_!@QF2&%uHr@ld5p6N2lx2W6ZPu(_u>hI?K_bl)GcI#9Bkh=bQ1ND!n%jSO; z8)XaVDC(aYer70JK*IUL@Js4n8S%BC5#JawQ74r8chtY9{)5haV!xowMDWCRv91FC@LF|4Mx>_1~yV!2g}P9PGCbRMiPm^k3BH=u>L;V5@HV zn`A!f|ByiaUp*`&6QUf>l=a5+Gjx8GIX#)5WC5MuWhPAuVhl-9-JbL??5V9VyPwg$ zNfssPL$V0Tf+P!*ETl@r{v(PypNbM$#i@qHNR}j7oMZ`Efv6jWFY|t~6v@)M;*tqk z)K1x#WLc6mNR}g6iDY?_6;w}lcq!5Kzq&nHnPfGRRY+D6R4YwiLR#%3Sq^Xa0bY7HSsvJ1(vB)gIfA=!;&Fv;#Ddy?#-okzr^m6N@?vM9Yb$$ljJ zknEe4q8^iWPo(*D^G9=K&xy%Ul7mSOBss{G3{y!tuxhI>lHnwWksLxI*{vY!S0p1y zjxh(0BsrX96v+`JM`kgEL<~4utCPo7lF=k%x*|*#XQX!8Qpb^;MshsKi6mo5CXkFH z8L#U@d7KvwQm8B-6I)5D{S!$}COJuslx31O*(oIQ%WozuevnO`$qpU&FA!(AdNm?Xn z*C3S|d(Mp{x0BpNatq1LI^txlt7Y9vBAfqtAJATU z2gzL|cNVTycZph(yGiaho%fL3TkJVmE)sd3nrxaMAbE`B!9pqr^4}z}XMyBll1GF? z@@U34`f;nv6I!|^J*i1ryQfKJlRQK68p*RHFOob*GK1uK-9?n=P^pD>k{8q-t;ecFPu^O<}`^0oE4&q*}+o8~V`H2xPR*+zkwq^|gudrX>#fMT=AC|4Q;3&ABAM)7*mO z4;mMe{7GYFYrelo=FsRxGM7dVlD}z4c>kx^Q=IuP4M_eg_LN$GB}ikwj1Z);K(XiV zGz!ID^V28_N*1Gg8vVP`y=g3NVtr^VNMjKi3mJc5!NRQjj9#=bWh9No1eK}u5;T^l zu_TRUXe?ziOACq~qn9oA5`pCem8tX!#a?}BtZ2BBpd|@s6&m}}Se3@6G*+XrK8@9B ztVN@*)~>OJm9?go+t=uRG}fiDww1Dum6+9NJ*z_h%mAY|ps``G*QV-?UV~_CL}O#i zwTYQ@fYAeJ>_B5P8e7@z<}|i23%4{2#d5K5YZ?P-Y*XxY6pd{KElKF@EX($$O_<{0 z9ck=NL(1BP#!kgv2hiAA&;*3u)nsUFHu>jI;Xr*RsMu{2JiF^iaf!9^rQKTja+AEmaEj$s|IoOK#xx_Q(zx1e zxW)>aSGDOht~DF3%ZfAl1{yM6ZlrN9jhkrPM&o8va*LIItDp&sCAZVKi^d(rUboV? zQ_zYQ`fiiIC%ZNJJ{phGxSz&DG#;>09_&`)!&ak5tVU96>9>#3c#_8BCi#R(N{#x` zc*?XrZJIOxJWJ!1VlPqt9F6B`yhvk)NxopY9yR(UtNY8DlZ}3r#@jSrqwxlf|5?3W z7c>E>*P9k+-m<_Vm6e$D4vqI|ylbVuXQgX6qVa)g`_M9~S804qvp0=TXh^q(lnQ+xs1^g|HTrC|6+M=YI6meD{3@ou4IuxCJUigp}8K-RcWqa8CRpZ zda>6lG$o_-5Xmd_nl#s@xt8hdXF4TG^lSX5xo)>2`qSK$=K3@@qPcLH zHa8JerqTmU!)At?o1Tx2-je3EG`FI83C*o(osu4cn-W{>rU<{mWnqq!%|y=m@c-WV)swuxsX z{!8ulRjVv!(%hfsP?{D|n?o|D7y;Q%KwEl%O6Pg#%^l4s9)1g_ivdT0oT98&vk)~_C$g>_L z%)T@Onl+jd|HU3@%Br=UlpC21F--~nUDY>E!>~!SO|xa4A(bp@m1gf0drSA8EU0}$ zX~7L?US@bX&8al6Fb!FMxYFpWG<$FDw=}Od$!iR!8BWiV1nu@Zn%C2OmgWsK@27bq z&D%7vH*cbOvuU`+@K)8?OOfX7H1DQ)hgo>1^^m&+RX`VzV)i{W@0DuOyf5>E(GSpk z!iWcHK1B0Tnh%@sBZ8S2&Bv@QB>qc36sEMxla|HefAi^L@11ErBd7vOKSxvg`SUd2 zqd9}-YcyY=`7+HHi@k@?d`VFCDE&&Y_t7+86;!6u|D*XPO^N?v=NoE(Bq{wC&39|;Q{unqk@(+N z#Ekx$<}WnAq4@(%iT_g5?+m}!s;QW8X43qT<}7P>sqZS9qIZH^Y*TSkr4@o!o;)BJ~451Rj)Hd+7wP76a>{|jv$xMl1A zR>3$$K~cD-?TQMQcStWh%Wgt#xUwLd%+_wJNRE zioI{6wYs1ds`MJP`q5fb*O@Je{|9K2(rarYw$`zRJHY7mXbqs%pVo%7)>kjJHW2J; z+15t1Hlek#wT`r)Y{zY?MOa6rwHd7~X=(hYwMFJ4qqnjeZEcd7-?pVS$e05Sw=>+H z)($4WW4F9J(b}EX&gQpW3@!e*viNWPs;KlFnXoZO&>BNa8uUn7hnt2Y zx@kL#)+ky>catAIFV%#Pp>?e3Ij)<`SXw6=a~!Slv`(ZoLE~ZT1VP~&J<+nCq}sB% zvULirNya>t)@hdg^lmz3{Xdb`nT8VobvPJ(4y_KYb7^_B&ZAYPbv`ZWfftyn3k5~Y z=!;EfshiG<@on+na)r*4X!*42v;tZ+TA}5tcFPr6uDF}Lbma^Tyh%`)M&Cl~L0Y#Ot;34e?S^+4-bqWgdW3lwt-Gz1d%Be(n?I6tzu^OdS(4p8 zMC)N%kJGaFuVPtok7Y8no-nZ|4WAM$_I}xDI{=W_8|~I}wBDp8zyE(Itr@glqxAx< zS7^PcKUUCsiPpvh97^merL|F>xA57B6^v%^TV z-lZj@={;H>(t4lP2fE#)TWZhfc2nykTJn1LVp<>5vd#aNZT`1DqxE^=FFRzCp=^M+ zzSQmL)>npK8-7FUTOo}8j@I`^{9riKaF(E6XRbu+M_Rwq`iYjD`IJ%ibFsI4AUs@6 zRReyb^}AW6J6Fc}lk`?vf00TsnM1ldt+}KUoc|{6LF*sV0HWhWtzBJD%Ep!!XIoKW`SWWO$5m~=(b zMMxJ_dnO!8x|rqF9}hG_KK2wB$QVz>Dr|0sIP>h+p}W- zdZg=<_BR>(xHa8?bYs#DP1{C-#Xfo#G253W-IR17=>XDgNH-(hT#Zpnw$LrmbW6jn z47XN?$kmccZL6-3&Lfd6-Hvoe((Ori(C@o-hwyAGYmnL?m&)u+dI9M!q=%92O1dBE zZlwE=?oPTl=^px)A>Gq**{^V?dfZMgIW8qFmF+sF`>JN?A?g04;+X?T4oc|QblSogo zTR8%n@lVYNMK$mAVxP_Rg_kz#8M=e2o;-{6T+*{i&*^G+Ykku5NYB@LNd>caBI$*s zQ%Nr(bxFl(719!^{`gO^&o1UtQR3)Nnuv$Br+K88k@}>8zUq>gkcOl&X_Yi0)!!=7 z*FB0|1ZmwGE-`G7HbsE6mC2B%q-{&;2&kPG_9kUeVrs-t9?xE7y2gB8%X8+zwPjgHzY8oHDxTK23Tjsr10RNFN}*oAiFtdrarOr1$Cjtm~Ihyn9skhK}^X z%xUJOhe;nTTqR2E6j1g8B7ICc8|mW(`QhmF3BxBz_3%%z&k=Sj?fW9>v!u_HKBsjT z3pHfTAbmlK)+$I$kS+1_CDPZd+rMlb;FV&Jy-8mcv~l`B($_VwI8b_m`r%E|uSnlQ zUOJ?2lfI)bp(gbseV6n-l}vQfF@+zHeoXoy=|?)2g(>G$b$oq7DkuD<*L_O*8R_T6 zKBwwWsT?Z-=L(_}^504S&{J@!{r`&+e--9juhW+3*NE{q?KMdMp}jci zzqEUk{zuymjjaM}y&FC<8R6PfHMEZU2y2c&nkm!Q2I?Ime1t;b5+OKGcV(aX?YR^yd) zImsopZZA)JCE6>{UQzinoUNDAUYYhPO3S(H_Nw|COJ4uAS2JAQuy1z8oA#Qtcc8r% z?X75w&Fj)$oAx>y)?_${1{o>s^=S9cdP1>}n6W->Is9*Ll-hC%^laL81hl;|?M-t2 zrp6yYTR#300ePpB$!|e>OQ9`X2!CtZ18HwV+k(IJx9q!v_I9+l&m5&3`90Y7jg@eK-$BMkn^ANvyj4(uK)yx8y-?f7BRlQ zf22Kv_DHR)^eAom!?o?EUrqZ++9ldz%rRzw{8NCKG0JeX;TUaGW$FujcqQ$ta=!cpnBbw)6k({QQ6W zR^#7B`*zxQ)4s!Q<1lsVTi5?4|Eb|;v_CgO-~ZCqsX?#0l$)RbY3unP+VTmQ;CHmY z&tz!-V4RtTvm}cVKWeHRwNl}q>8wQi7dng5{?$0Y(dj|^ca>2A395e@@fYpCI!n`8g3eOLS<+-am9z17yNsbs0V2Gd;qrn;tYEmJ-qt^*vof7^ zjI#=zRq3ovXEjaIjH}b>Ys4BkXH7b58K+;yDa?toUmm8jE***Fl50IW{poB>XMMYs z_@8N$_%Ep&b$Pxc@n89R_O&x0r|okR>4BXs=xnLK*=1{KI$K%Zt?6t-XD>S2(%IEG z1L}bTGoWGOZ?rfN?JSWoG&2D!$wDUijSEc|7jG48AEopB$`{bN` z>Fk%$`cDU)1Lzz{X9%64%9KOModY%Eb%tdzkj_DL4mQqkLpxrg0#dufj5C7H;dE>Y zu-K^Kv7_Jr8X@+`?a_2j)+g@HC_1Ax&`H4Wj4?chj>Z4Zadb{F&hd1{(iu-@oZNPO z@z=3W0RHdxL^=~qSbzM#>z8WeWO(Nk9r&G7>6}LALOQ3*t#KyNIfIUveWpgX&RH6u zvKZAlhtBzQ&ZTo+#_2-Ub3rb1QLg7=Iwd+4;nOMSsSX`i1(fM!Orrxjm(U5V3935h zcI1-q9tmx?F`c>*NzQ3xUw9d_WoVy(b@UT3IvqNbGfDl@tz+k=I+xM00N&9lfR4rg z&J;RV+HD^HJ5%Xgo!7#qfX*~J8vhGt+3K#N@t=-8FL!LZ>D)-?PCEAeS4ZQ&3EV=* zf`3Q9|Dtny&c7qmW6Zng+@169p`+h_(b4!%$0n4H#{azBhnU=x&ck#hh&@8*bvln~ z(C$1&=XrD8Ki$8TERX5DMMuK5bQ_rh1m7`y*YG_$68xo;3;zQ;9~$wIp`8EB_%a1Z z>Zf!*GeY9O@?~7u?U#l!Ux>`tbR_r-A;CY(`<>l>Pv-|CW*W}QQ)S&N!avfHJ*9aH zCI0_ruKQKj_BzCV*JYusy*q!%qYa%u>HKBH9460a#9TUm8}W~z5&s(gr#Km9&ODdN z^DCj81q|&kASV}@tbhI}TN%de#U*{1+?&ZaGg*j*nYVnEgkE{&1mFmJ&m!vwJ>f$K0I{8me!XLb9py;?H8$&CPcd)h(%RVe%sW ztxUeP;Wmcb8ru3#b$j7`qwSdb>W)Jydt4dKlH+sP5i3 zx`=-ds{2vhlj>fo))Vecbsuq3-PiD+Gri2YKh*;y*;EfS=Rt-C8y;eKsGwfGtQ}7E z2&&_#9!Yg9)uT-3Xv1R+kEMFNMR*+5F*5^}!B3!i8r2g`;Uv>Pnd+%jPbm}>dpEN4 z|Ep(c40d;_XDVqI^>{Yb2~^LadI8mQ3mvNCsh%gC>iLC4l&M}wRlnq-`Y);%QN6_Y z#i}rRB-Kj`QaUfM47f)slQHr!%leO|K`-_44eN%1VWUq|*ficU45@agMpP4X zwhd#!KGjSGO_G%)7iY=)soqUhy5SvEZ=-s<+8J3GIq?@=(XHM|RX_gK{w{0OVq>e) z!0xAdFV*|R9H~(iUwH~tAD}9!wO;^;vdp{1*j6V}eTeFNR3E1LGSx?@K4B@5KKqyv z`}s?ClJUucM*gehcQFf3QhlE4Qzm@c@EOBrsXkZq@v^7Cph2{_UZna`!TU7tuTXv6 zfG@!Vjqyo$(`c zeq2`Kr&Pb9`k4tomw;5i5N^&dm8j%vbAF>idR0G#>I|yiQT@fdzNh*F)u~i})F9=$ zBGsR$PLmi+=jSr)ucjlp{*CJNf?H~T$C;DrA2@TE{-0F;stkAphdxPzGmGJ@f<|UD z>@%zw&R!Ytv=F^^wDdc36&zIP++ekdq{3 zVal0LxqQJVEyq~^XE@FkkC(AgC;4G?tM3PX&dXcj@j)YwT z=bt!B;w+_KBCFSQoTYJ=(YEI-i?a>RayV<^jKEnLXL-A$P9Kb{h_h0`X#$1@scIC(d3bl<|LY-+gdo{I6UB;_QcWFwXwkc^w)57di(D!IAO5 z=(KfsaP*@%hvFQGa~RGMIEU*RlyrGn&XS>vtORPM993|fV{lHxk;qTRISywm&KMjy z{8LUC*i{#wrLJXR&^ZA|K9iA3JV}=j?SBUr&nY;k$|{Q9S1bK=oO5u_z&R6VoG55; z`DWQU3&(b<%hXJU;xgKF&c!(&XFSe%sv~hqv(b!*mks_ULiwoKky~Gca~aOXIG5sF zqGnC5ncojOm*ZR^PMit74+&)$=3H5DoPXoogL5@bigOK43+Gy#8*r|}xn4``_ht0% zva06Xh||QmN!Lqd{N~(@a|@1-Q#Ge!s9r`~LrXY?Y=XM-j_QAPB7XYeaIa+FB-n2lIeTn$l?DYd{v!F{wG)&@M`bAnhbrFAng$6Eo#!^-lo=v^A64w zoOf|P#*wD=A((m5;(Vm7_x?XD<)7euj`Jyw9R6U7;o_w!{{rV*oG-1M zzp`HQwc$5{l>wg!s=nU+JDi_!zQ>u0^8?P0+MD#3STYficz(i}rY~7!8CkNajrJFu z-|W`EY8%kfldkc*kr|poQPZmY1Lsd_v*7&I`^vjU@5^ra*1I+r>l6CCWDxxsi}R^Qm$shues z7%b&yQ#+^Et|Ybc=BPHF+N0FYqjnj!^QlQoyMWq-`Zy2;8S84>yU6fjwQri#OQ>C{ zj~lrriCMUu+C$VPs8g(B?FwpFQp>4bMeSxwm=yTcMy@fuR+FcBypEba0;t_kN^Ycf zlXBZJLhTl5VAQIXM~7NKt)^bG09$hnJ!-y@dLcK>hDn;#Vrs2IPA#Msm0Zs%F`dLP zHOxxiPU+jFcCRjU*ZQg5YC5+W-d<|nVa_|L-DTwNQhtw+%7CfV?xS{p@85s52P~%# z8vduu@5H{-&NRux)E?1RA(lj*GTN{oqb6nhIJMWQO``f2lpKwz~ENwI|hR zD1S=tGJS93&lo;S?Kx^M8<)Spi_Qzw%=p({stla9GH_lIn*0@NrTwo-dw8vo_f3~B z_6D^#do4jKSDw+ex2efl4U&v^sJ(0CJ$(&YdtV=CNZQeM2mgiIuWC89b?Jk^k~*E*jFSIe8K|e6QTr2D?D=1~`sP>l-B~mS*H#GK z*|bT!eYgW~E5#vBxU-vZ4%|7lQdD6sCC4vO8K|!~aR=e*p*^^Rafjf}Z_y6Lo!iJf zxbqpAR~wA>g|c6}3*Zhji6mn|(^;tJD`}J0ZSEqtOXDtzy9DlHxQkZ?Zm*9s+4v!O zahJrE@xL7*CDE$>GPomfm&LW8RLaA}UijiJkGq1VS*9T}6m(a_U8&c9-IZ}yQ7=vZ zs<^uUM=yDY<*tFd3GSM>>)@`1EB^(yGo#c{$Su~z9f`Z18p-%<-1QANFx=2^BixNE z1NRlKD04S?o9}LlyCd#qxSQ+qQQp03Mn*|uaJRtSQd6aTE8MMdx5M40lx(X+_7u6> zn}V66VqMPN3D-`3kYvk%L`G=tXxz7P|ABiQ?yk6Fad*R&Lf#!$vbhKD-ne_>?xn}h zNC%WGX!iHP-B*V(R``~%{csP&-5>XWo|+hW)jSCIU~PUfm6IZs?;qVmagV}14EG3J zefg`AXhx3I!j#&P|I4^X;~s~54DPYLUM52tdA_(~aF5sfil&VHWP5;n0GjPu|GEQ}*BWNL3C> z-`4Yz^oS}r`?I6WLY*Ats^2pV= zG7GRVp*tD(NnFX}6Pgm~DbhlU!L6&WfURDh!F>t$S=<+JpTm7#BN64o61p#{QyPrS ziQJcQU&Xa8K(_Y=R~p`Hsvx)4l6)Qa4I^(_E=2N{k^?`-eFtxC+;{Qj#C;EU3hw*3 zpW%Lh`!Vi^xF1=Nk(w%v>J!{gl}qGS5x5e`SGZr`>eEEKn=}dS_+R6GqY1F0#{E_s zwzmK8aDT@A9(OA454b;SC~1>2;MY(;;Z7@_n_A{-izLXOxWD55f%}_2Pu=N~0Nfdd z`bVnXiE0wh6fp&V;mv`ErbIe|Hw)gZcy{1}Hyd7`7NA_mZDPK91cV;nA&HcF^yb2w zA8!EO5WInSgVe^#`hYiBGxEsQnnG_Vo-X^~=@D>7=G9br^J#%dny(v$w*cNMc*F1( z##<0?Ass-#%gZ`=qw&_o z+X8PrJSmg)@ixShH%d0;5tHI=gr^Tj&97uiPSx->!P^XPQ;k`QU2nZP-YE4g?j`d$ zZ%e%G@wUR-7H@03Z8W$TSSgcUnzz&5rvo36-SGA>-`#s{(%Tcy4u6wI)yvmDc>Ce)i)Z715lW3q+Vpn&O9|i|fOnu4 zg>u>dDR^-2yh`s-yrb|A!#l#VcDSmE<@99mZcDR9eQSYs^r|Um>mzFx0;a!dw;!VK21fAj@XG(ccsJnPSSVZk`u`Wb+p6z0X%+t8c!1Y5q5l7+Z|X~O;kA@#nj^e>@!ELz;Kg{i>zb997^Zmo z{}5^}}wacApTu`|%#Y z`;RF-*8}D-j%LrtoLS-v)mU{AKay z#2CACt~zFe!Q{gmL+(&XvpuZF)S{_6N^m~d^i zW3r*wUkiV24JE@VCQ15r2F9z44_0^@vn_ zc?F<5Gx2xE-=+5q)#4qkz0bD}>+g!cn|4E$?2f-j$@etLUfPk>Yajgm@b|^n1D7;a zk{4+ST2TArAAo-X{(<;M;vZBQ_`F>B2OAz@cqsm1Mh-VTLa;LX{)(!3l;P3%#~3*l z|2UZrm%d~0k2m>PlgRJ(^pvW;_6+=!@K47-8DFgp{wbPYNtL`B@K4j0riE|@{+U+( z<5Z$*XW^f16J#3pN0 z{~jav8s1m<%37Q`A256nUl#w1cqW?UA;X7NDEX4tL$YS*KZgIfjwGcR<&z>AE%=l1 z#YX)Xe=7bH_+R4Niva&A{15P-#(x7}_y1V2KWq3LzO=Mg@x}g2UA&0@GX6`2j_!r? zU-=s^s`a%(f-gg?a$UlI6aTGJ{GevNNa0FCNf)0~3;UFrKhez9gEzCRWz#Q&-Eoo4z!8_N7kbbiJE&4`&< zmCP{b@A!WRG5)8K6RD#XyFQEItlF*AIh$c0^-3w3-6V5RpVP=(rF;POfh8YgUW2I* zF*3B2&)v7jH71#tU|H((QNNk`{M47EF81HjQ`aRR>I+hr#UCNIa$X;9d=Wz({~KA% z(53)&nF3fz)|aBbJ@uujuR?tpQz*y(_2tYtg1Wx{HNFCM9sg6e!GC>alNa%$ZR+b#Ust%csQP+FM81BRo()ZHqf)*x^^qpo#8B7&jciuv z8y{t8_P@TR@vRK?5kP$#!)*<>EAO%c^@FJINPSQ0JDHcg6fR~u_0b|R;Xe%Z0Y`l| z>ektn%Uqzy^-?o+>=dYyVgJ)qtwmJs#HQg7v#d@S85Lr2qp;SHYSyvgl)Ww-m z?^5sRLRmdmuVPiCuAhKWzg6w9dflc(o{VCU>vvGUllon~cx2g7-s#lup)NPNm- zZLy{&DDjy7_ta-l|AG26>OYFagj1>iRB#KWQvm9}Q2&kkuRXb}S=D>ve@OuK-w9@? z{s#fnZSY_JtBm13f>{V=(@26@RVaNq=p(4~{92G2}%{3UN?NiBu1Pdv*FOLX@ z6D&or2*ILy7a6|=YW#Je8!T?PgyE7}l``-SmL^z6>r~pRNTl9_

@o7(p;=9EI)%ZPk8EkSlO+?`+# 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�|n)H337;xFrshn1+UO6^hmm9eXdzY%}W8oLJd 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%0Ad+ee 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∓kOZpsJNnlpLNOPI^R%k0;f`{~lMwL`GYg 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μsnv93p3LIa&42 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

    0sYD!+ zh-DJ7RU+8`5i6KkiK}omuEDjq4%g!b+=!cSGj37pw`?QXjyrHC?!w);2lwJW+>ZzF zARfZQO5J=^BCbdT`#*yHA8~@2lXwbG;~6}Q=kPpUz>9bZFDrHbRg!CX9dF=GyoI;% z4&KFkcpo3&Lwuyv%}>M{AQ4Z+T1X~05?|qKe1mWC9lpm8_z^$h zXZ(U+mHLg}Nq*o@{Dr^q5B|k}Uaj#kJ|;lHgy`M>vCY;bV$Cepq~yskIi|prmbF!OsfyLGI@Z9NSPN@o9juG>us$}xhDzPsSgf7I z+Jw9*HpAxF0$XA$Y>jQOEw;n<*a15#b$@4)F4z^jVR!6-J+T+|#y;qSzUYVkO5GeN z)@5Qfh;_JFjbe3*HHevDG@%(S7=ob~hT#~2R*V#@O{`Izqm}wyb`nRN#6{vp55{0$ z?1%kv01m`KI2gVAU##B0{}JmjW$b^^SVxF;x>!e&kHXP72FKz!9FG%lB2L1|I0dKT zG^OsJK{69(;cT3Pb8#Nd#|5|$7vW-Df=iY9tF&CK$HclqtlP!9lG|0d8rR@jT!-s% z18&4kxEZ(LR@|o4Z`nbz6L;Zm+=F{@AMVEkcn}ZaVLXCImAd)3Sg(oo1o=rkg{Sch zp2c%`9xvcUyo8tW3SL#}{_7++@Fw2E+js}>;yt{N5AY#A!pHbTshgik)I+g8m&j*g zeIb!SVtpx*#l-qbB9n{twOD_N^$kzG#dr7~Kj26FgrD&Xe#LM29e?0YrGEQwl0Wzt z|9Op!hw(813MRxv=>7R$B9kEdKQfs*$2Lc%kjU&3nUdR7m>SbyT1i+H|J+LSC!rs^ieb5*E&>sUZ5DjQl>gHgHTrQC& zi5wx3W{Gr3q=lIf48<@E#|X4yBt~I0+R%;;bSm|`+$0{1!M@lJ`{Mu{h=Xu24#A-~ z42LUq^GJ!DA(8C=$kE)6!Lc|F$KwQ?h?8(KPQj@-4W}!0|4fouI2-5ST%3pVaRDyG zMYtH3;8I+s)Xgg-^0-8w+=|<9yHdYpC&@0{ zjeBq}?!*0f01x6JJd8*1C>~Sl<`WWmT_V~4k?jA-)6AT~vv>~A;|08km+&%P!K-*p zsrzq`+{9aW8}Hy_!ytyQ)TR*?2*qU%3mU1NK{dYd?``MBvS4FpAz|+ z$v5~G-{E`wfFJP_e#S5O6~Ezk{GrspmR}^l@elsRe_o^FVSG%0f(bDZCdMS_-T$%8 zQOPALn?$7`Pl>58HKxI|m=4op2F!?=Ff(SstV-RVog@e5#9Wvg^I%@ghxxGp7Q{kW z7>g)%b1{i(C{e{Fs**&N;I<@|!qQj<%VIe!j}@?@Qnytmse)C}yZus$|W>gGlg)ls4vlQ%){{+B3z{*P+TxdpbwR@fTbU|Vd5?XiPW_je-cj9suR zcEj%21AAgG?2UcU2Yt~`sha~NYLP?*O4MM9GDuXkL>ZY0LVo^_GI2Je1w$|t!!R5p z(29{5rPS}Tk=W6JPIRFgJs5+1u^;xw0XPr`DRuJ@iJB}?L&=AscmGS&2pox{a5Rp= zu{aLL;{=?Dla#uD3dvNQhSPBd&cs85gKOVq?O5J=|qAp1k z`#JYK+yO5J~%_xJ%n;wSu!UzGa2 z-$=gW5B!P0@HhU!zxdBJeU{rVSe=Pf8AV2q8mzdVTrCJ(M7l|ip8)v zmcWu&3QJ=dEQ{r^JXXMp%Gf{CqbrkC!Kzpdt78qUiM6mc*1@`159?!`{U6;(qB}}7 z`#-t~w@tAbHpdp&5?f(wY=dpF9k#~~O8xceMA8|%U{~yh-LVJu#9r7N`=Af{qMuSX z2T1fHi4K(L!4hqd=xB*HG82TsXhJhuFa$#}48t)3tr&?>O8qVyi5(s2L>IczgE80_ z`(b|^fCG{J|KI=fA3a2(CrdQ@KYAFq!*K+T#8EgJ$KY5ThvRVqPQ*z{{mG}0OvPz9 z9cSQ7oQ1P-4$j4SI3E|_LZxnAEYXJ~dWl4DmT2~W^fG3a;|g4ft8g{0!L_&!*W(7< zh?|u9cm5WVt+)-h;||=3yKpz|!M(T-_u~OPsMMeTutZ;yX!d_J`#<^^Gsp1+p2Sml z8qeTaJcsA;0$x<={>vm+@G4%z>v#ii;w`+5cknLW!~6I^shb~(t+zx!7F!;Pej>Jn z60P?C7m0qx^)e&1hv6U5Der~<{Uu^vRZ{z2GTVawSSQLw4aV&u)u@siZGD`iHawO%k z0#?LISQ)EeRjh{9u?E(}T3A~d`yFJfE4DUbt4CfRz58Em4Y3h6#wOSln_+Wofi1BW zwpQv--j<{tw#N?G5j$aL?1Ejf8+OMY*b{pxb#ouF%@v!E*!qdhS8U;8^JB&z127N` zXv824MiZLRf*}}+VM_f~iXgFKBt~I0+R%;;bfOF0=)oB5tJJ@W{$d*^wgKb=aS#s1 zAvhF=;cy&*BXJat#xXcnsXzI6k_k8wC*fqAf>UuCPRAKI6KCOUoTJpAe4g00ifz8w zmWgcvw+nF*F2*IeRH>g@PO<`5;woH?Yj7>D!}YiUH{vGTj9Zktd7Iddifudj4%~^m za5wJ3y~zHzvHxucNDks5Jd8(_y8jr-aXf)1@f4oMGk6xy;d#7(7x5BaR_f-fGPr}- zuF0T!V!O`m4e4tX+f8xp7uzjyycFAQvA+@99kHw5_IJgeS8Vsh_E&88#r9cj55)FD zY!7+%5kAHz_!OVvbESUoOOjXk8sFese24Gx1AfF$%KsYp$1h_0%HbP+#~=6;f8lTZ zqttKzC-yXAk0Zj6*J*(K$k*CKD zm=QB!X3V10Ph}&?jyW(V=0flO7keJ1p3f)t+G5Wy_DW(eAofyXFUU+GER034C>F!w zSOQBbbz5nYGFTSNVR@{86_t9vGD#Jziq)_>*1(!rOR1l#Blgx}uPgS(Vz0+-eQbaY zv5`{GHz8??&9FJPz?Rrbsps2>y^Gk}lDEV5*a16YC+w`$Pjw~fhTX9T_QYP;TdC)L z#J*JQzG5FBc0aL4irruAAz}|;G7t@D#2^et6PnSY)SaOuVHl1PXjST&D6zZ69!+jT zJ37#bE~TFLki?*O|BJmJ_E+kefnpyg_CaDFA@;%C4#A-~42LWA{78~fI2y;`Sf!pB zFZNktpFlnlC*fqAf>UuCPRAKIQ>lAqlgz=nI1lF|``^Bh^CDb~OO(1{nb?nteYx1T zh<%0F*NA;3GplfQoXNE$>u^18z>T;GH!F4XR-exURUbR zb5raO#eR$YHr~Ozcn|O61EqfI5y@kGg6x0$GtSTP1-`^r_*$ty?OSnJ#r{qlYLC4a zM+&ij5c^NDe`N9#e#S5O6~Ezk{GrsJ=a)D{?7zwX;9vab)e#Tb{|@i|kA2FKkUSA4 z#w3^&lVNhDo=+)`?BYlzjtt^R&21V?i|H`EQqN~3$%L6P3ueV^Nl^YVkNAM zRg}7+8cB8Z?th)v5=TRE)F!Wkb+I1S#|BD0--x6!Ho>OY44Y#MY>D3eFOJqq-OyGX zeZ6H%{&$S!JWd(=9qpJvG7%?v^UmI{hB&5( zW2rc%ies)grjbm?8R*^r;+TcAagI_yJC9^OF2IGj2p8iLrJi3Vj&86 zQ2YP0I6m;yNBk7$*)Jqt@f&`}ANUi0DfK7$BhL8Z_)GrJt25sJZ=DH91QTK+OpHk| zsWP_BnOvMX#F;{z8N`{A+fI17q1 z7kO^XgLyF@=Enj`{Zt{6!dN6uUQC=##93UNRm53BoMpsWl9^IiI?iNSl5$ucDSi9F#@d^iBTA>)bF*6(=AR1xf5M+ zZapM1*cba@e;j}VmAY-PIH!nnh&acHb11jNa5#>@k;wjcj#g*=>{#+~I36e9M4W_^ zm3n@vIOmFU8u@gbfirOy&c-=P{nR{?`M3ZV;v!s(OO$$knK%!MbGbOTh;xNFH;8j3 zGwgroYR+qLEw01$O5L!LWD{LThJ8`}y ze}iw8`lO;O(V-YNh#gzJ~5+o(D6qd#^SQfqeU(Z(% zS6y*c6jx1gvHxA({V%R6SQV>bb*!P(&(cP-*} zah%(w;@T#zW#U>VuI1dWK=!|D73bBs2G=U}8`qO;z>UcMcX{`}xVGR{rJmm|uHE9= zLB11r#kt)>vKRNo$q$HUxVR3AdxN+RiMzJA4vXuTxQ>YHzPOHx>zufbiR+ZOj`QpZ z^zMKC-qR#!@NAs?ytuB5>jL>jWdFOo`(IpF@G4$Y>b4ssH}MwU#yfZy?cj;`$`6_v9b&W1QR1Bwz3=e#7th1Ai)Y z+i!8_5!WAarxw>=aVHknKktm&yZ^-<9}}QpLQJHLZEzi-NQH!#}P{X)F_hCI0nZe``>QH0I1lF|``^v}cP~QC}a+&{(rT-+bT{X*Pt#Ql<)SNPgH`QQI_=6*}^4&Qt8|9&2Ge-!su zaepHJj9=p1ek1vgKjP%S#FJ9ozr~YK+<&@v}#Zy{5MaYX{F)WTHuq2jJ>b5c@WwD$$|L@<9r-FFuil?G@ zs*0x)x0SJqcjmu;Q=V!h)v*TF#9CMz>nQbnJ@GUWPkr(R*f7p*W0EG=6q{jlY=JG6 zx~;W%BE-{1JU-%SE1s_6X~&Fr|BI&svj07uIJ5sfUDR1ObR+MMJ+LSC!rs_Nspoyg z6D%G-a(@iKKs2BcgOvIy6Nwou7=ob~hT%&6mA8tgpLin0V;2wm-xJM@%{vqOm3NRh z(S>gGU<~$E>iPcS87!UwcovCgHu)T!i}P?kF2IFK-L{xy z2`I$Vz%a3gNQ%}V|3R+4SF9e3bP+=aW9dVa5X zj*4d=`F=cr2k{Ud#v@Ao)G?Cdcmhx2DLjqd{jcZGiRYDJ4X?+^Z;I!kcy5v3#yfZy@8NxXpw#buMDiG)#L1tD=d*a8i|4g?UU2&oU&Wbu zL&E;|yyN^HKj26Fq}1>FBAy@O`AYr`zsI@#N%9MS;~)Hs|GdV;Q^vN%B#@YD5+f3m zUt$tUOeTp*Br&NZCNYyqFexU(P0KPC-%T1iNv_KPv7#UdH-= z<9J-8q7Y?`5XzFh6e4R%wvdprRb+{FoS8HG%vokTGjlAZq9jrYQCdhUTPj=itt>^h zEJ-W*eeTzpyWibE&&PeP&-=dTo_p@O&YWY(si~Z5ly8% zHBe47@VB6Kv|pn=7ZCa;_(Dfi1BWw#GKt)@VQC4J0>Wdq;k= za_&)12j%opPDkZ*S57BpZo$sj1#iW!*v)7kxd%y4?1i^sZ@eAvFxvBXDrbOl`jYp< z{*KjwBzNH;r2lh5*za5RoV`afqJ+YcDC z9iH=$avo96c=8GOFw*}y^ncD|k|{=euc;){@KJmW>HnN3*nZMzpZU|uIjNlK%2}qI z8OoWXoSDigR8Ed^0?KhQ@5Ws8pcj4UH`+%Fl7ujf5zNDUEHK*hQRQTm6C;mf0+U#T zDRlIIPBF1G$$VUZFXBtM5MMUh^RFmpsd5&R zFTqzGtFMu~j&C^fHbT!&K~7#Q_gPXe9r0@_$6+~9k>&B8SP_! zMe;R%gYr%NcBrk{bzw2VQFTwIy!D#Pw8A(N~^;Rt~PSD zWQP8CwRTLlC2xl};EmWGZ^E06_K`cv)m^SmL6?2iMC_A%*y*C6u2I0Wy;p?Htco*ypPeR9$Nu6tP>=~$)z zU8BfH;}{%^xV%r2k#?zw0rQ$MFfHef+0Lp2q1o17~6mx{UUGu3Ub(Jmg;VIaUKCK@2(ah+K2z z%9AT8S3au+Scp-KVH^`i`w{7XSBgB187#(GINNB?&y{O|T+fg{i}Ua~d>&uG`9^y$ z`rq{u`9gdd7vU?o*l5qcD%WPYmdf>xT(8OXrd+Qx^9C++OfDx`fh+MXT!pLgZKHkU zHFB+&>s|8q@O}IM*Wx<-&}i>P|GPGje~h1?)&FvB#7#zfev4c?3Af7i85`U1bNmA7 zf7f=lcNpz`cggj=T)WA?!msfgr2k#tvi+UW-fIuZUfhTK@du>;T?fpzJ^z#3P2@Tx zcR9HZ%k`UFN8~y#*HPx_f0xz&_WTL*lXwb$!PEFFo-x|hvUs7!DtBMG zo5|ft?&fm0llyumTVP9Ug{`p-wl&&ExPjzGY>zjg)&FvLz>Y?H{ua4=%H5f~3*L%d zu^V>B9!7hwUL?0+Z@eApe>eT_w))?m?8s_a2gA zINXunEB83LN0Q%%_v0uWjbm`EG5hJ={Q${>_>h&C{I14r`u`ibAC~($xhKl)mwS@j zk1{q{?kQ|Mf>Uvt(cbqlxo67#IQbL!BtC^t<8+*1wD-y(aiJS?(Su&}8SVLi+!?up za!2J3u^Pq*<{|y>rvKem|J(blURf)OdIX_Vv<=n8|UC$dLogSMH5+zbE%Px!-5?16=Ev`H*BieuNv4{&#=E_NPYsu{O#5rQDmzx8PQ! z|J~cz{v5wB+Iwv$*?~K87w*Qd@N1(z|3BrL7W!81^KySD_i?$um;0dHdzjpd`*1)0 zfIs2^qkWv8NDkp)Jc38@82)Uu=TFG}yWA(qPvI|k8h^zz_?yvw)&3y)6aT`$k^Xm| zWBVUt_EB;#P;O=AmQwD;$}MfJ<_gPTS+x3Jx#jR8qrLAXB;~OJUW)X8Zbh~$8SVMY zm0MG}RmiL26?i39!|GVWXzx{vg#ORHitRdB7q7;8Mti=2a=R+`8s)Z9ZbRi>r(F6! zw=t8~IwqTtG{t7v9O?hu7HqdP+DC4!+?$o#hP*Ad!yE8MY>zh??Y%mXSpBcuPIwD; z#x8iP(Vp+7-2Te#uH4&{+k@4f*vm0P|L5LLeh2o!JFzeJGup=-pxk?uJCOV?9E5{$ z2;PlDjrLx{NQUDGycb8}eR#joo*ylbd6Y5A-KE^I%AKp+amw{8_W|WTsoV#ZJ4Lw< zvDbK z>obXcw19Gx$_*+vs@xEhVT@oN=3@aC8tr{!BymhQ@*(!W_bcW8t=zAbdqlb4D0jbd|HtIF_#J+a zdvGuAGup@bf#gR#fCup>JcNgh_WV)ho>uNL@}KcIp1_lM3V$)$d;Lms27klf@elkH z|1y?2`w!b^=}M2&(HF# zmuHteAIY;-o(=MBl;>k6KfzBO^P5OE;}%E$nLJ<0vyJ?7{KB!ion!~@bmXT0f0XAd zdG^ZlHLKqs{qLdwJ@mild-6SweXahNXFvYn$PdVKSe}FAKj9(A>JgHoc+8O>m$#HW zC*=7$t&)yAa5mkFD1VWD_W~1udKH+$>mrDtKt=SB~~-q^EF6n z%6mrMTJq+}TU*|{T032wvk2Xl&De?}MceK1iAg;@Ln8=_u>6$^}l`OG4ehv?^yD2_y9hL58-&6V6^v|NHPg0JMu^5&5?Ji zypPK}jnzld>VJD*`rrE`IsNZ_n(gU017{lTd6&FFdEMl>=t275>toxG0i(TFh$M^= zN1iY5JMtFDyFlJTc{B1xPW0L;&CLHrczb5Zn^1e<^|9h9Q{U$EQ6}Zx9 zpUEnc)%dm}UnB1~^1dtYMtR?pcZ0m|GxGti#dY{0uE&pz_K`m(`2;_8zrwGL_PlvJ9Fq52d4H6b{`Y>*%pTl}`*1)0 zV6^u=Kyna&a^#2Q{aM~4(LMtG@9RL`5j){6*crPR z?fI_qeI;Kv`3mLhF5d(4^^osw`FhGXK)zn`-6`K~?A04@$2+i((LPRJl786#-<&T8 z%6AtVgK#hoG1~hMmG54&E#E!z4P$jUj&RJ3ly9_r_mSU^qa3SaNXFtgM{bTeUA~9p zn=0RU`6kIXftiPKqGNJ0$rOCVkx!HF3Hcr+e+(aYtUgKd6h7_9XUON5Z>D^?^5wAV zLbqeaL*hlBBM-fTj`<8p zG0t-2bL5*R-(2!%@L9*|b0p8>3yyq&e6Py)qI`?wdx=&0-}ka(<`weAxWth!m2a7R zuaUowZ#Y)pBw3Ct9Qj-FZIo}7d~4-fE#JHHS^Y2HJGjO%`5p=V@B6@!uaj?sd>^v9 z9v%JfqyK%MkbmmfYmr$145r+eNJrI znV(6H;|WK8O1?Al{X%{ke|4<>M)EuU;mH4zzpQ+J%YOlv=&XF_nE40K|No@Flr`Wl zZRLJp8OQ2{@|Tyt95WZOdNE$|?+i;7hfQ~F;D;d>3@GMM}C$3_2jR^d|kZSu}c5@8<1b)$Q#MuLjK0`H4)R<5FaJ$w^}jty z|NA?U-{Q!-$lqQ5Tgkg(H^*uZlAhShk@uFrul%=@-+_JbPRC3?PTuN&`3K-Y$Lb*Y z%_}}w{*m$zk$;%{cQZ2-?{Q4h|9-3g<-gaF-zWbV`RRZEC{{;1R>zW9{V)Fmj{G6{ zr^-KG{z>vrVD({~=$M&ILjU_6{qLV9{}b{*$}0Wucl5viN%;%qe@cFr{7+k#-MXcx z%RhtpnV4g=UlF(bVfl0A_sj2L)r&sIOn@YaR{v)|3;81)JdZpd3#`@bT@jUkw)`>q zQ;fysPcW0jqJJk@P0LUJ`-@q1^uK?O{0rotEB|xy)BpZwnVI+R5#*=;{V$NucjPb1 zzexU<$QPoc|NZp8e=+$I$6iazbbd+x*R;aiUG%@->VNr{;hVS|t^SvPrJgsh=36Q< zZ?RPhoAX?)@cr`B|NeIrHaE!{g@?=ku7Y36|DFOr%KyFs1Lglf0m;8s{-g4*li&O& zoFB^nnf&YJr|SJ5$-jX|`Pf*tj&g8C)Sn?VvK>r8m|A5v1+3Oalp+J2FYAR4ifm-ZU8?Ulv>bGN?{tsCF zuRuL3FS$bk4HRgsfYtvBG{i=ZRr)`09eEQg&z^rX1v)FxT!9-DxL$$Q3bbIRCAKnV zU%NmXlD24_iTzA(RG@>NJirrW7)bB*dC|AWCb2j zV1fb(-nA< znWyk+YqEW3wr3#yAIP!t>~(M};8P%%RS$Zt)slB^z)upupwWJ&VFd~aBMRiPLH`E| z%(i{yqY5Myh_M>Sgtc1o{tXn7q%dve*+(o^z!c*w1(qlos%u!&T0&|(9{{zoj z^V#!%j-37vykO-eO%hn3z{?7}$m&bD&{{3&iohb0S8%bFXOH%(0xK0*s=zV@USpM} z3cO*q?dSd``Ep!gwBLzuDe#U0tH@WQ)&KTAu!iJae9y|W&)4+-7YeLZ;8O+GDe#d3 zA2PGvXg}fxl8^Bdqx~#4DzH_7P2`(#i?!NdHrq66U>nVJE$0}7h^^Pqw)6!=NO z3JM%j;7vMwSB%ZSJYfA3t(+ZqX;8&B_jr1EczvCa) zWcCXGrJxk}TLIJaXIVXm|NQ?OB3Qm`!fg;gE)7;CxdN^JFUk3`x`H*>sEJnpXIm(E zm4b~FtfOFk1?#d({|D3vao_vDQKH5YDA6Iaaf>RZo%<2?;#4%&_zk-kAV^&`BNg()yg3}eG z|ASAl`n0v0eMM%F%)}fk&%Uy51ve>}tKiEDdK644=v6RZL7##l1^vtiFle;TKTHzA zJV#!jU|d1IH3Xxq#*FqkSpBbH60LWTeYCWK^AyY|I7h)^R%hXCqy0{tOY#gpYvm>1 zk%P}ExIjVrKllQx^R3nFvwM-`C0uCb*;i+gf~ypKMZq@}T&&=03NB&hRa|OKW?$de zN#4L^R-S#_<>pB#xPp8ozGbb}-O2W91=lI~wu0{|_zuY$eAj3{>-R}Mz_pJ2Lj^xp z(CU8$Kf(=0`x<^i@+odK+DF?=vIVyy{U6-M_UHJ8vE*}wg4-23r{E5S#w)l}AyX;4 z6#PTM-3pqz{z}2`6#Uv8TtTb<75pE5YqYP-_X_S;$)9@$_p-XrXrGVO{|f$S&1YW= z)Bh(F{7J#13LawhFdi}5XLXF^XFP7@C7+IhCl&lv!BgbF;Ax|MZ=50d4XysS_xe+z zOBDP|p;8L|t)O|nXRWMGP)p{o_TPN8}VHB_iRlMV11qx~q2NE+j{#_T7PP!ol&SEwm@Gi+|O_i91X z5?dLw_hG1wLLC)qt5AD|+Oc{A-e|Pc$Zy_vZkt^Ut8VdzehzSz&oOWyUN0SXPw-i@KV zSf&3%gPCbha<@YFD>PK05enTyG7N_s?K83ZU!jp`^}n5uQfQn)qshnMSY!6PSjg&s zg&xF*tUP;1O;G4O}^Da>2_uh3MZ{aBBZSpBcis+MJLWNQaJ*!Y!q1g&$n4$kev&^=AZga@z;xmqXo`G3T-9-47Z`x|Mq!)sn9Nkwv+F`oksg?cawaD zUmNYc%+o)j(6bT6=|WRrn@_J1KlKGaay_G5ZNBd<#iuwBBFYpK8Nh74E5UH}dXi zeP7OYd$fL`4lvsDcaaQ2tN-o%Zjzx$|A&WJ ztJ$kDf}H*jk2KpQcc8uRD1}oDj8=Gz!eNES^5riSfgZ+I=qI<)#f+g;(06#i7<4dfr=C)R37gM~MeY{Jb}Uhh5fnEhEhyq#nR?ljtuxLe_`75>UfvXAl&GbJz3w^m;Axh4F)!p9Zf zqwpbx_bU9O!uyz{|HD@Q+wYnKz?aMar>C|3@x1+u7$5DNkMjFE!f7tf)v8MJkb3Myvnry{eL2 zfma%{9T=&uNK-{>C{kaMnu^p>q!u%^@hWSwk+zDoV&3Y1McNqcb7)6m^}ixFT6y-m-K0pa zA~!2?k0Kou>8VIZMS3XGNs(I>xrKT9Khnk8tK>Hok*?(3u)CG>Ozku2rAU88Zd0U> zBE6Zp9q+IvOMVj)xs#+XTK#YDJ3x`aiVP&b3kNw?hmg?!k)dWgd;dpQ)Ij%50F2IR{v-3?Z^a@hjF5nXP?DnMV?e- ziXx9H@(8O_ahf$#@=lLDM)Ej5VddFDO4n(2>lzjKRZ z6nRdOVnyaEV)efwlz(K7HIqGa`akk4tMiQZnLn?{i;BEJJ|7nt?Y&+iS%@z?@>djD zt;k|UmMgMEk=GTW|0DE&PAK78H?dQ0Qd^bA!KSKXU=>Le-|B8HP?N##KA+m>LFYd$r_=C|t z+XIUHs>ne_PAKw|B1aWD#LQtlVzghWV&nHPv;V*dFS}plp9XX@OKZ^XO z$X|;5&MN&MvHIUW^55iV@tl=s&;Pvgq`V8PJg*d%wpL4C_q;MBW${8QFXS6=x|l~+M|bCh?f@&+pJGUc^XUPa|KR$e9L)l^<(j&nIy!Kz6A=UvHmHLQ*` zjM;0LSBs=JUWIkAE?$lGus$|G`aiEB+l`F&(dhrY>&Tm6Q*4IK@p^25EwL50#x~g2 zXdm+i<#kuyjpXg|CcGItU`OnPw_s=Ng12H<>}Ir&+=HYi_QKn+H{Om`|0}N#-idwD z>VM_+#{tId{g8K;@^X|nNO@C~H&}V2l{bW$yKyMqgTrt*j=+0yB;JSj<0zwj&SOZ% z;y8Q&>HoZk*dC7)kp9n`$o3?hY_yN|2+35OhL7T7NdM7( zyaMI9$#cuo!3IY@>Yz z<|^+8VNvp7P9x_UD*<9$&!uxBy?omvA9k{ja=5_zEsIWP4W(|!FTaJd>=o+wYUyH#P#?QZZO)f+9%4} zsk~3gH{vGTj9YLkeumrdbNm9o#O=7lXkX!7B)jn|{2IT(|KYdz9e$5{a4+t|{YLwk zKPunU-~r`dpuB@JzyHbmiJ3!q7?0plJcd8xaXf)1@f7}I%zjqP`<3Jj{)WHfANVK! zg@5B&Jcs|_d1Ll$^GjJterXhz!LoQEmcxtiV!Q;)V+Fj_nEmdMUs3s2DZdhVWxO1# zU{$;Vuf%Ft9cy4stcA6W+28)<*CDBkS7SY_j}7n|Y>17pFC^Q02E!{_V)Jra4e3)2aMUD@A4l~ep314mG4*n1m!=e{D+yDh?8(KPQgcTDo(>k z@iBZHpD<=W)#N`#@-$Az88{Pj(1mWyMGtz>XUu-S$`6nPF@#}^U>@dU0TyBuV;IMT z(SG%dl>dVAQ{-vPU@^|Z**FL1;xqUx&co;Md82){^GO!qi}(^Q#FudqzJiN!3BHO; z@ik-i_XhcIDE|-TFH^qhhc}hKRr$-6zgGDxm|Tf(;VN8>Z{s_-2H(Z^@O}KinEkma ze;vt(xE?>k4frvBf}i3>+=QEPi!uA%C;u~&ZTLBUfnVZw+<`lB7w*Qd@N4|WXur$8 zRsIp>e@Fg3?!mpd5BK8__#+;`gZL93!ox=UemF{U41dPscmhx2Df|UbOY44dQi*aBN(D{O7d{#;hjR)x2#pq&anR>2J_aH-%%6^v3rdllTJf}2#(Qw2A( zR|o8fo$wayj9u_n?26s6JN7Wz&!QK}ZP*)c$2+hO-idv&ANI!qIM8Tc?Lj1iaR}ax zL-8IQhQo0L-issgKD^&(A9J({9#O#<^07D$AHWCkAsmkr@L`;YlW;OlF=p@Qf~h3a zkp3@tjP1wq349Wt!l!XM&cK3PO$W_5y6?jw-Re_foANnzXK@4FSBbbNz zSb&8_`}i@EI3_TOMVP`gX0RA%;cT2^wBK>hkUWd?@Hu=QU%>ge0AIwHa3Q{oi;UUN z`~{0uuv!I6$X~^!_!_>BZ{RX~6PM!(T#0YtDr5G$aKYOo@8BAI7vID8@dI3o>+nNd zk00R%qkTO;QDH?De5!(9RIpJ6KdNAp3U;etGm~3zD}ILC@N@hEzr^jh19##sqkRv5 zMe;R%ga5;C@jLt;_uyXKhx_pdqkYZ?NDkspcnA;U5j={=@Mk=ZC-5YmGTLW&T7{)l z@GJQl{0)D{Kk!fd3;)Kmcn<%;^Ol7d7_;|SVQCU!87zwzVmZ7BFUCu-JXXL<@iJrf zYzr%?u(=8=tFW#LFK4w1R>dpuO00&}u?E(}T38#e!aBxmD;8c&QV;861H1+sVk2yf z*Wz{91e;G;jV+W&sG4zY`VSp~7!f*hhsa72c`BCso*2h2vG&PlY2?*q`|UI1ul`K{yzP z;N3VB@4;a>+?Z{Q!h16G62FKz!d;lNBhm6@j2QQpJ@-R-sNjMp&;3GH{ zr{Sac7(R|q814J*DHR4)_%!)+oPjej2VLmKT=bw9edx!4G23Z{A(AjgFc0&w01GjS zF^ppZlUQWTeo`$=tMCIAW>mOLg~cj-QH8UZnT>OBE7xt_l?<~y9?K< z@G}*zBmWTB<43pwKgLh+Q{0G~a5HYft;THk7H%W?9KXOXaXaq7owy5k<5&1KeuMur z+QxL-mtjS$gq87ftYXZzck~L9E3q0@#~N4@Yhi7?3hQ89yc+8n?Xzv5XctAVQM9$9 z4Owl3jqzH%4x3<8Y=+J8dTfC$v6az2ejAdu*bZ;N8?im!gg0Xc?1-K47VK=aufwg1 z_EWSgc{l8iJ+LSC!rQPn-i~)*AG{O$8tt>~Pci@p;$1ih2jdXD8;9aOI1Gp52%~+r zBbB^D(fgG6P0{<6_({=GO6*m1v=ZhGGDeAS6&=f7QAA5ru%MW?dYG$#?j@BR9AGX+`%bdPLFviXK#y{*V61XJ=m|xS zk^hXx9jhlvPT?<({8vTKDSAfHKNbCr)!*?C$IM?Of8$w4{*Pj%6{Y`U^na|>|F6dA z|5zDouUJ_}UQV$gie02w3&k#0thQp8C{{(W@`_bdtOE0w;$@D#Dv?yi%N==D#i}cI z1^Ja&&9Pd8q$bvK~#$`bmWZ{YpU3_ighHX|6^AF+mG9Y z{8qI3-_E-$cBf)J6zi=R{U7Va%x#Vt`agCDc^^mKSFwSL^&{_(101XLe{2x>U`Kwp zV$&5Hs@Q{y-J{q@#fC9M|HnqKeXnEwKE=i;c0c(j9PL;gOEM0v{TRG#ePxjMa4EN_L5?&6x#Xs*b>DSvDYiO z*s<@cBunu%NB)LlD->HsZuP%n%N?sLNv!@?Y?UK_Td@xndq=VN6leJ6ZC zvKH4l^7V>+qS!~|8_?>1d#_JPHsU5nzD2P;ifvVFmtvnO_N8L=$C!zmi zJ01CM#muvy|6}xj>>J1Gx9mm##~l41+pE}N#r7$7K(YPI(EqU?9s3?6r~hMz9QhH& zjw^PQ)noXxWAy~dNj&AqPb*$iv0oK0r`Q?AOqu_t*k6kM&ZO1L} zRq+bPYBiGTSi_OmQv7PcDj>-Du^nd&sN8U*BCW<#^^;)$0 zKYK^To02p`tN-o1h2rfMZ>e}&#apr38rwK#+L7FVH#+j06z`#s;!72` z`d{%S_^M;o>VL&w$2T1Ln~HBxe7WN9D!xMT)rzlVhW?MQa!kHW{tm8jHqjz$LfdV>+vH;{;}d)75_x>jf#Kj$gTcYd^2uw z)!a?;l@jK5`dW#`ihrX-DaFl099R5X#SbX{o#Oix|DMS`xYu!n{Ukr&kB zBemgw_8_lygj8OhW%B$~*E)m8h%){hz4FOeM$a zrYSLn{1Ke$Sbdb_F?`&SKdHofN<5{+JSCo1qCko1 zO8AtRp@dtBnao@LuY}97S1ySMy^h?kL|BOcc@RU6)d)!*<~#C2B{E7xl}IWPV>ONm z$4n7P3e%3fScy4G(Eo|qj(jeY&!D6K6VEBJSc&JAc)`A&^Oabrgw_8_yofIu?bVk_ z7U3(7e2Ee(lz3H%HRAQYH8RI)?yUM1=OWDO;2DOr;%-`IK;lC{z5eQNdv#ETh{!d!{uVg>RkVX`d`UOI2orP{hyqw z$&&srdDWgYIZIFB)Am)G!Iv|YbSp{!CtW77SLy$x)&F+lQ*winekB(w8BlVzl0hYt zN`^R280r5c{hze@U&#V2#3;s){!d!{pZyb=WDz<2pS1d4$qW|bEMxZ1vXgU^oTubm za{51M^}l_b=g6PO7jQl9yP|CjvRgrxcRzi%kHNXb`~wEADk#kj<1A9E?mYxue` z`zQ6uWlFxMB>kUU&gu$WiErU5T#aud{hwUJHvOMHllMtJz_qvz>Hp+h<4?p5+rCBIT~BQu+DGt&Rbt!#gW+mQZGTK%u&m$)5w;7;6yyN%huQ<0?qlk|VG z++)pW&v2iTCzRYz{saDq2k;>Ngop4j9>Jq{41dPsM*GMoNlxJ}cp87j zGx!_+j(^~v_?OW>&RG>zSMr>SOo9Ky>Uqne3$PTHMqwE&ix*-!WA;8Nx|rk=ERPlN zQoIZ+VkNAMmtz&IidW#3Sk0I{+oBpIHL(`f#;dRn*2Sx_9@fVOcnvl*+UML@MeS5{ zE%|lW1e;wAs3v7w4ur;>9wnqDGZ_w<|Rdk~=Ar-Y(>RT1vq|{|9x>-dps;GmC z9#v6C6%AKWCl&Qk(JdH`-@T{}=TlzYTli?RbYV`}d2A?o`nr z74;?Why8H?4#c~R*}s2MG?-)v-i<@?9vo)O{tr$?BUJRTitbg>SQU+A^*+2GN8xB3 zW6ZvfipG)9|3we7{Sc1F2}b)lP9&LxlW__@f>UvtG5as;iyl)^fr=hikzYkms3=E8 zPcriqK8@3H2F^6vkL4n9V=j8oi#}uaZ(@JBp=2aWbw9U?i5 zNAM^f!=H`Wzq?g*g5)Hg!e8(-{)%Ue+5fq;=y#y&ChehoInM%Wmy zHD>?SNva7+Q*4IKk^WD$Fx%OGwUlb5R2QXMD`kqk4Kr=A9o~R9Vtb=~ZEq&&fE}?D z-h!Qt_O-f|q$_sA?$`r+VlQL%9g*s-)F`EHSLz<6?oeu=Qhk`Y6Y2j{Keqeh0Asc} zQ+JUJ!ofHM@5Z4<`+5!|8IB|HUL1+{;r+(!-{nh;RE;}K7`|q z+5hz`^)SgqoP_j$Y6{zr7|Yfx$)}M#ijU#r_yj(QPZ{m=pRUxKO3hGej#4v~%2z5! zDZf%KCf%5e9`vHmXy5Yzk|2gKj1kN;+OJ@NQbkG?l1DLyaZF&+XrEh(B#jv?##uPq zXrIGer4}poj8Y4fdY09B_#8fuFW`Kmz1NE*FX2Lb85iLzM*Ch`Lh>pu#n?_NzK!qT8l%1MdnE7U2e=m3;fJ{1XwPp@YKKxEE45Xr zPgwmFH{vGTj9ZM^?^&tONVehU_yvB6+l}_|carSF-S`!Ljo;w^jQ0F@N}D_Cd!zV%5O;5FC~8)0K(_WGo+BWZ$7u^BeU>#>E=o^Pde7o}S(eUs8{SZ#~# z@CLjQ+Z*lkxtXK`cEnD23wAbU{}-$@{h#hi-VM8B5A2D(jP{XxEA3JGcBRKFeTUM+ zl z{g?acB9auQF@wc83uhbcBhOWOvC_{dy+G+_S)GT^;qyrUr{|k(`yKis`AfJEU&clF ziqSs)5|USODZYlU;~TilXwNTK<|?IED1A)nl}hhW`Yok5D7{MQ_my7F{M+~ruEBTl zJ)?cKKOk9)^ndz8w%6lFMtkyOrMD{m3HhhE5jWvx++xgrM@xT3vJF4SFOdFEZ#Uca zbJ?l%k4o=S+7$b4X1>C&@f-XfervRk|2@eb+>85gKmK6M{)>t90g{9G6CT3Dcm$6c z?VkBrnX*bBSNfdNCzSq8>66TyLi#^_n(bfljM2VIzmxodf8t;GH=Z@x&-x#d^Ol(l zuoRX?VHsm~K69ZmS140Xnah;9h}Dbn5-g7u@KR&;DrG8?RKm(g|7WVOUDaqG|4Nc- zSRHF%O{|5rjoDAInL5f0QKqgkw5jHkv+b?q+NfT^} z&9FIMZ?w;?r84FhJFUoDV;gLX?eGR;_T8OnPjVC9j2*Beb~4(Not5dUOc!N(DRV2U zU9lT>#~#?zn7yMiw~_S5+wl(UgLfLUpBXa!Nc!Ud9Ef+}ARKJ8pXuGoOi^a2G7lU2KfYHA450Q+=3HUHh#7Q{WnEm{ac|;kv zGE8<{4$8%A}Qvv2Pp`n8YGX8SS&pkQC!AoQ-pEuF;-+ zR+$%-nMeK{K94Wpd|Y6(=U*aOi1dGE5!EzN*X`WtJ+lLK*r$^Exwc;4*v@ zmmBR@b0x`JxC&R}+xU*rK9hGzto~Q#ef$8|;yV1$m~FGnN6LJw%m!t4DD$y0Ta}^z zGoLcK5jWvx++wsJi~i4SBmW$~z%OyTG26G9og}+(H-3d*<2U#}WA--&neUW2rp))s z98hKtt9x-D?#CbSN27hu93-LtGl$qdj7RXOG5ZsA=4X=Qcmhx2Df|Ub8|`O$M#asQ z`Ax;9pMO`eDe6CzIj_v0O#X#`<5@h1{}{7Zp!fnSDK3SjQCJ4c8ncg8Tu#N8srVxD zi}4aHj}`DzWA^9z;)*1durgkbRj{hjKJt|+Zm8mFDz2mA>a5nlnpg{K<5kA&_m|?j zBv)fStd9-w8l!#uMkH4MtN2>H4x3<8Y-Y6QuUBzT6}M3FEh=uQ;u}@mika5f2HRpg zyup}#9~HMJxe0H^4%iVp8SO{uOwt8!#je;5yJHVy_PtizOT|M}e4C2epviUkJa`B4X&fk??S4ncUI8q!XF6@80M&}lP z_AzwbN!N9B<;8xzoZcXg6~~D;iZ|sJ-;wc>+#=p8-X`8I-jUmRV(Gd|lDoxw#0lcP z;zY44w|M1cx+c+8p(~)PN|#AjO?K*{^nX`V=9XyW7VnZJi7h&!D|(`zTWp4sL}Dx^ zVk%~0JGa=MOxKfiO`+>yx~9tMed7J%1LA|?L%E&y>v}|zN5#iP>Hn@LWS*8=e4?I` zq|MEBYq`* zEq)_@n_FDu*ZS()ACe zCFuHh;ZA80aZzzG5pnU{&ih_ZsOA7GGh1K&QC771zt{yq~2FByLxoRtMYjGQKTXDPG&U;?k zUXmTe9mSo*oyA>pJO6!$(yo;DrnH;nyNg4`J;Xi5y>g4!xsN3Kio-{FSn;^r&U0Gn1W8U5PZCcS zPZ3WQPs{BzTj>l+*HSu@(iN1>qI4mpvt>v6zjUt5=ZWWw7vy$6^QDU{x2nRnu?j&7ANHvpXw=+Ocn1F?-w5s zAIvT8{4k{#DLq2zDN2vZ>0{#K;uGRD@yXoI6IAJGNuCj(6`vEI7hlNj{GPw`k|ZyS zuZXXT)5X`s*K>>4^CqQlD7{7LQ%Y}B%G>W9*?Cu-A-*Th6yMJ+evUqra{7b#qxh33{a>1!&r59l|KGu1 zC7&n$Ce9as7yrmDUiqJr{3ZS^{v-ao(DEYUqPd-){W6r#rMx)h9VstCd40-DQtnN8 zDay-H?k4+7i_3`J#bw1Fxt*W%a!*NmiPHb&6=YsfTq(En4wU;)UX$|5lCL7JDy}B3 zF0PSV?5`!s+TuE5Us3wMyk0(cey+RUMyZBUMgNDUY^_O+wzr?TqRyDjuc0U*W?yo>sm?1h}VhN zi#Ld4#c{cvzgfyRQSPFAGvzxekC)S1#9PJN#M{L?ayy+_zDtt3#e2jF;=SU;++wpN zNm;CjRk0@4#YS%Ny=zf^kg`F!P1&RzP_|^p79G(QJ<-oCzE&tnB*tPQrec;`e9k9H zGFhA=P8IJH?-w7)E#B3KD8E4YVaiWZend_m6(18H7oQNP*4 z#pa8Wyd=IXz9POVP8VOx?fiXOeuMgkl;5N}it<}je9CWA$$t#rq0)o$yOifqoA;&iLxaq5Qj?{vj?9{}lfc|IRI1PWr#H$ilp` zsJNJjxOi^ol~k6LWGS(mxU{&8*j-#UxAQl6WjQMSsPv?=7L{I9R;IGN?5rTJD6S;- z7W?FOzEhP|Bw1BlOl`RNO<{Q`}43JGZ#QzLE?R_Y?OQ4-gN`?K~+}Mo>9| z%0ZGJEFK~rDjp^to?HA`j+Epm@o4cF@mTS=+~WIn0+sWroJi#iDksV5$>J&Esp4tk z>AA%xB`@|@<#f9En)tf- zhWKV~=Qj_Pw+yz9-JiEndk7l6)wBB+e2)7H5l}sP?A171cgeH=w#Q)wQUuBAcs1H?^oJ3n{T%_P}e+(O(^94HRT?X*pGYpO%3ZbNk^ zs@uxxcH&@hdvOPG$K2xe>@3MH;t+9HaW`@I+~WRwNV2E6m$XL}(c&?=#pZF6950?Ao+zFq zo-Ce{+xc0mo<{Xjs;5&ukLnq6dZu`mc(y40Up+UUi?4FN=Ig zxm>(Lyi&YMyjmQYTip2?Y6nvtP4#Q4*HV3u>KLjms@GAyi|X}M$5XvQt{N+j6K@o6 z5^v7!{ClqIEs{w8S8tQ~cJU7J&fMbb-c7Yk^&ZJ5i1&&U#V)awTl~2yl2pZ-DE(h; z$lS~=zV8OrHdT{qUhI~f+M*-6q9^*fo!=o;LrEer785ZQv)tnTlO&leP7$Yy_lft5 z59Ah~@Q0|rLG@v(FH(Jk>Qhu7l^yB->fV>IlKEqC zc5boxsU)9?pNn6JUy5_YuW~zoCsx0qwl39gsVzhGJF0(D{hsQtRDY1oAH|=OLK`AwWJ{x1F@F32rj+h5e6`nTl&i2p9Mwurc>xL9syzqYs}ONdK~ONrgY zrE@!<(pq_(E>+33*A9m&I4aSHjCvHv^uUex}e-i_J<>WfnQQ+ECm{}%rd|6OQ(k=)L;^~EGX zTwGj2TvA*rxARk9Us{r7#O~s#iEHN;ucxmh>x%1%>x&zR{lxyc#ho{z@iz61ssBrT0QGyRZ$kYP z>YGyEkNRfRccQ*I^=+tcA=hpx4ipE8TZvoec7DF<(*O1CBp)npFYX}jm|J}HovH6Z zeHY1xh`WlriMxwKb31)f-&2ykMCt$fJ~Hns4$JLyLVbVg$520j`k~aN|LenLXM}i= zc(8a#Zs*^U)DM&7aPbK7NbxA~=-ke;S^Zc^7WO~&HqqfvU!$xws?+sZf@}|N&nX`ko-dNBJpDJlH6kRGD$8MuMn>kuM)2o zN9Gp$*HFKW`e^Fos9!6mW5nyk>%|+yvAM;2d!r=M|Mix67Vi-!K^qn^%nJtY*xjZSQi^&Gq-r34M|MV5^d2D z-P}&=)_v+3^+57ajKo+>#5A{fuiBDK5+{pO#Hr$axyAeQ0QKjnKS=!v>JQ23!{Q_2 zqvB)Y}mx_>A~$ZgKzTC0W@2)L#@|5?>Zy5ns(MI^i|ybEv;g{bTC+ z@BiPU{-*4_CB7}bBfcxn$Stm&Darfd2jYj~N8+s9;`Ps#hr08P5me8-^l5=;& z{3o}w-&lmkSu_@i(BM&dblxAl0o8D;@09e;`P-u8oSfjNp^M?rT-g4WZqTWEw^}=hDx%BxTm<6xVN}ZZs+fv z#xP0t6ZaPn5DyfGiz9N2@6^FGPNH!LjiYHCDyN5uhl@vuM~X+~cAl0S$4GLlc$_Hx z-#9_$6LUL%n>0?AfGXcJ&MK+G_H|+w0NyJM!ZhEKDXE(E6F(VM)4-` zW^sIO@x8v4MwP~GG$zovT~6;1?-cJ6?-uXL?fmZv8}~{wQS1^+Vp*)@7JtT?Bz3VN zHpP}`h-Pl5F&Z|FM`<`TrqXa}Bs4tP@x?$4#Yl{EJMGs*5HSu-v4e?F!t=!IUCL8b23~9Vea|n$YG<(u`kH&l&GiiK9<9!;R(D*>E z`cV8xoF#rN&dx2q`lpge|2ICD`3vz&aZYaWC;FPkPc*)f{9Exm@q6(H@yFa^|7S_& ziob}`|BZPv|CZbNTe9&x&82AkK{GG*1#cH+Zs-2ZMHeQ`#YDu##U;cg zbBoPxk}NGQBX$>;6?=%w<#v98n!RXlNOO6b>(E?*=BhMTlpX2+W^bAMh%1Y$c zEpj`b-sV6_28q)D&8=nLM%*^H^V8QHEXnrb4&sjDPU6nuF1f}2t~9Ttxf{(BY3@$* zAeuvI4x_n;Z0;%UCGIWmBkr5q`Mx*zlVpGK0P#R^xHuxW^Y>}kJa`B4XV*e_dchkI@=6ISTXtaJ}iY?K|EjBGlY|#;2(Gz_!$SpqA5v|@dW164SOlZDBGo|?$&5Y*# zG~2R2Nt`TB5vPjx{vj?9{}lhq?flNF`46ogH2Tq(EM??Y=ZS}W7q zoYpF|`qNsK);hFSlg-t|HN-W=wZye^i`Ujyl6A%P#P!7u#D2NO=7y4NByKDY5H}Gw z6*tT6JT14jptTFFEop5>YoMGC61Nh!7Pk?%&F%bq{MKMewikC0cNBLLcg`*T>_a5k zRoqS7T^uUzA?}&m`DtzKP3uTn`_LL8NBhzmCc}Q>{^9}Rf#UGo;%glw$-&|w;-TVU z;^E>Ext-5d>nK`h(mI;fNwkiU(__Ws#N)*i#1nIit4@~W6!BE?H1TxtjNDESw9b;` zZ1EiNT=6{deDQ+Z;`Lv|l$6%Rl3yZTDqbdDPCS6t6}b6ZbS2htw64PVk=E51+t3ZK|IK+qYaFc`|4V4yOzU=9 z<7wSW>lT&Yrsg|n-9_t8mE5i73ACED?xj_sHIY_{R+l<0tGP<6POGMphMHTn99jk~ ziTF=v3*#E`m3u=Ce)+@ALR>`Ys zevQ`Kv|gw6CapJA{+62Gp*4fnyDC}O|HapOA7d$6c|Fdh^&zb}v_7KsDXm$wX46{O z|HbAfYW|GY7qmWC$(L&Wiq`kEzNYmpt%dzx+~GSl|3K>}T0g4fXEpyq>mORb()xqe zJX-T<{iaSA_J48D1+@O6wXpw-)z*tu8EbRZ{4!tl|z*t@-E2_CS#%dUSFjm1>S>>y$d3B66G1gGY z!u~JrzYfL#jJ_ECFxJIbA7f$v7pDvRznJ@DY=p6}|BGZ{{}=Nn7+Yd&im^F{^#A|= z7Y2XtGp=#a}V;II>82e!Ct@3@8mk z?Em8QFf|{6aTLapDmhxs$6}m>aU8}87z_KqxP$b6=N&s4<5Y}O)ak7>RKv z#>E(CVVsX~HpaOa3;Vy=S=j%@d;!Kq7#IGR6!|3>m*+Far5Km}cZzWZ##IY8WMq3Wn-`qpDs*9ixe%`rl}&Qxn6(urM49)&GX8c6^Kw zL-oHAsnZ1GL5vh*3Py%838Sq}C#!iX#{C%gspJ7QKZNlJhU$OgQH;ki9#cE2|BWXx z-otnb<5i5OF zf8z&r`V(e=@iXSW7;`c6?)?R`8^*5~|6|$G5%7?KmVJ} zMKG7ZToe<`#Z~s{c*Z|K>WF+hX>`+yrx7%>J0`VQzrAzPdv{HE)QyG3LVO z|4x&b1Jt}J=0MENFt@(67m=|JRjCql|YT@&L@k%bkyaMxbm8kwVug1I^b0p@C zn4>VS!@LIbTFlXEe~g;1#~h1!gG$D!`6kTUFmJ}Z1#`U0Z&mZ{n0I2{p_04Qd=F*= za{^`=^Ips@%!%r>q~;1{4O8{MSy!h`OdGR>X<`~Gx76%ldYG6_c1@j{6Ou0q~?$F8FRKuKE<4a`5ERHn4hcsOErIm`3)`aS0F zm_K0tg83t6Ui&|()46K?74tXDc`BK&=07n1!CZj(7v`TT|69%fVl9fb$o~>c^}n?^ z*5+7CV6B3+BvucsrLdO8>V~xp*3#;#?*Gl5&y2Mk){0m?v6jc`_1`Jh3Tj>ns}ELh zm8`7hRk7B`S`BM$tktpB#8Ullss6Xt!CDuquex?UHE)2mF;+jU4YB&Gd?Pgvz}ggR z6P0YH<}I-H!rBsRN34NZ+hPsE+8Rsszoq)$+74@btikFIJE(altlhA7#u|dPi^_LZ z^X^!CU=3Bto@(A3>tL*Xunxf57i&MPVd_*p|62!QjldeNP7hM^Ay`LZ9g1~0)?q3? zLd{2E9fNhWN{&_Y@!0QRoq(NxLQceb2uRh~SR>Wx zHEO;#pRvZM%`jHQ$0|V%>_>g>@U&-B`C{-HCOF+PO>3_h8+N zH9;j4)m*}=W0kS0SQVAm)ZD;oVKr4^sM*3wv23gW%fa%nTy^TJImC*wB9$a+&akFp zwXr5+O;Y(3HQ$Hz0M`8~c~H#{V||VF2-cfek77NK^%&MuSdU{(!+Jt(KB?xXv7W_x zMkUXw`30<3v0lV_8S5pLzoO>pSg&Kfrjj?*{1(e`EcN_0Rtjdl5A+hTQ`j>~7eLV=sxlggRYH z%}Zl<$6iJy%c^-f>=m(lVlR)~OXVx5c_r*V*u7PNt2=*>2-&M`KWAA}IR3&?=d2j5zc=y3R z1bbiX1F?r;?~lEo+BrbY!?6#-9-)$h)qE)SQP_uJAAxVNxhoW-#J!C3_R-~V0ZEUIR3mcUtDB}=Ng8_wD|OXIABvkXp8obEV1a8&<0%c=cd zI4j^RuaXtj+#6>#oIW_K;Hdt0R#iKz}@< zkFycZhAL70?`(pzCC;Weo8xSzcD7LSK%A{`2B~CW|9AeW$JrL=G@R{l4#XLZGZbfg zoLz8sz}X3BN42@Lnup-*hNJr5*kHI++=UANMagI~@32HtG=MiOU8i@P4~y6SX&HTT2a0k=QyK->*+H^toucL1*He|HnL zzZvcpxSOj)J^#CdaJR$V3U?b^)&K6c|Lx}k?qJ;Q|4VRp#N7*bC*0j|cg7uptDgT| z)&K79xO?CZRoCwM-`x4T#@&Y?U)vY&S=?cG-EjBAjd1tJ9f^AY?y0y3;vR)N9QRP% z5x58A9`xURa1T-QVYo-&s^@=KJ^#B$yBFbJj(aigrMQ=<9o7Ht6}VU7Ua3x1|GT4b zC*WR#do%86+#7JO#k~%9jM~3m&0}$I#2u%So76lW_YT}!aBsuCRpqy<`A*!saqm*e zJ!-xew}m?qw~E_^TgEM^Q}z7s)^HoRb#>ZQvw`d4nz%Nu>VH=~|GOS;fa|NPLN&*@ zGjS8#XK+*8hj268skm+2$+(l$rs{w9KHLXz?^ma)|J{dipTK_XV~2lA2$^osO&e-+fJ;zJdEL?wh!8VNlr+@Ept{7c*qaX-QR2=`;$S^r&yJ6p}4;(m_%nM%G;^BmmoaKFO+23PgJ z`>opf9`{GwA5`*_n&;yFjr$Ak@3_C>{)RhGoz7SDAGm+wE>Ou|YW@cg+<);F#Z&$7 zss8sC$6FF_iT_>YEv4qA@lL~A25(!u?s)6qEsNJ1uLoYQd<}0oyq;=*dAt?zRR4Rb z|GhqVtK+SVw<_K$>Z;Y$yawJ{c&h(B)&E{!yiM@d#p{o^9^M9cs{g%y>OLFdZH%{( zN(QKTQ@nwAo8fJNr~2Ph{qGIJ+Zt~xb=5X%-VX0Tyuo-w@wUg?1#btuo$%E2zqhm6 zAA+|Vp6Y*ZcXhf4US9Hh;_Z#Mm&*51bKd{^2sDmhBc$KaiacP!rVc*m*y1T~+8cM9IgDmhinr{hh;I|FYt-kErp;GKnc zKHk}Q=i;5CHdX(77vNolccD7HSk0H>U4?fU-W7P4t6cTJcQxK9ypihk8Z}>wcMIMa zym5Hf;oX3Dy*eGM<{R;D##8<8jaR3);@yRJ8{Qpws{g$^)y~~`6Y%a)$-Qds!b|Z= zcotq6uYp&=tKn7Ej_QA}iD%%o)Tyav8!y0f@H{+M<*NU^5HH4y)M=vT4DVsQHr{=B zlkleCO;)E<)qFqRgLn_93FLDJ=Oo-8+dQwy{Yc`wwm9?`v7kS-b_5z|K9s* z=R>?%cps_cV>N$*_Z{A+cysVR!}|j7b9MTqn!m#P22b_Br~2Rf9&aw*4|qS}{iv?` zS7yg%{&##8<8{qw(le-Zq}@E27HYF+|=8T=*j zyWy+;_m@^X-SKa@3-SH@ozU-iGQ`rlszzc2op z_-o^@rLI~>&FkW?kH4NuHc)ea{KN1!#NP#fBmAxKH^$!_e*pfb_?xKB&D6XF{y==y z|NbC#x;6gx_}k!bhrg}L2djAp{GISs|NA?u(;@i7@OQ=E6Mr}Sq4>M2(>>I@7ydr@ zd#hw$HSdQ%0)Kz}1Mv?~`EWHKgntPB!75Sx?;nnT9{v&dC*vQ9e;oc%_{ZQMt@e*q z^YQp6;;a7m)$_l93jUe+r{bTEf10}L3^kvHe-8fHDmhop=i^_6e*ylb_!r_|jDL|j zy+qBI;a`ET`rlXm?_Z67E&fRSYw$;@t46DN4F2`_*Qw+NHIKvp0{=$*`|)qWZ{pvK zKLLL{{vG(Y;NOOStJ+un@85}kH~wAfRQ11qFMb7oB7Oge~L=(Q}YA()A1j~e;WTG z{KxSh#(xz55w)ZG-+u!CN&IQ*RQ13A4E~Gw&*DFi|D4)+LCr7Wzk>g=N>u;*ui?Ls z|2qCV_;299g|GVGSN-q5i~k<}40WHGYW@I!HvWhBv+z~_`>Ox_Pw+p(|5RP2`rrSO zU?u!H`2XO4h5rlw*Z4o+e}n%WzUqJfdv%8&@qfnuNhNdD{40K5^7HWLp zPVMv}Sb<=9m8_`d-UOQv^daa=urk3K1gj9NMzE^dSzXO*60A+2`ae+pAFNBzpI|+L z4G7j(SM^i#h6EcEY^0I_YTlG!JA%y!1`%vduqDA3>U5x*w<6evU~84A{tpHd>`bsd z!HxtwsGXhEybHmu1VdD^o0^9b#sqs1=HHz?2^@mG2reVoo8WkY{P#bH5bR5EAi*$# z{R#F{*Q)*xh7%k_FhZTG{tpf%IEvsff+GkHS35_l`DlV;364?8acVw+;B0~u2~Hz8 ziQp81lhx^|YCfIdOaj&a!CC6`9D)l8&LudX;5?OIpyrDRE+M#BC6}uCa)R3lt{}Lc z;7WpP2(BU+NpQ8=8KvgY1Y-!URmpW~zJcIog0TcQ5{y&%O==!ba4W$rD!EO~cMwzv z?j*RE;4XrD2<}#=6VyDBphTehKT!Q2R0&!HHG&2~U0u~wvq4}Hm@2W=>=L{~;1N7d z;1f(C2nbSwkRbnzMQSrqb4D8i z1i?!L(+Hj=c#`00f~VB!GirX0;01!`Rq~>mUnY2+;1z=D1gif7_52^aLGTvAo9Zgn z|G~Qi-xJIr_>|y1f{zGh5_~|Qp8tan)wQz-W)rCX4?a<+pAmdT@HxSk1Yf9pj+(zF z_?F-sm3*h>9|-;+_>tgOf}aTH68x-Ae^K*1g82lh{{z+k!2*JR3H~Jbo8T{X)j$86 z!$k-eBUI1-A?kDq!u<)CB;1;CDZ;e~yAiHPxHRE%gv$^vOW0lQ_fT_B!sQ8jsbmE; zuSB>iVQ<2f3HzvAJ^zQR5w1a~`afJ#ZLUqYG2uFd8xZy-T#s;Fb*lP5>_@mEVSjb1 z`ac{%xCP-Rgqsm=s&+P4^Ol5z2nVWUtN-Tw?@GdL2)8BNjc_}{od^dL?m)Qxe>;Rb zs(EL^A%wfAME(9J+?{Z5!o2_YBvjA;;a+NgAHrdT`>I6se|P}lD8d5?Pa_;ocr@V% z!ovs;B0Pjp^?#_I|HH!xk0d-o-Sa3lA47N|;jx6r6RQ3XPf$B25uQS*`ae|tAD&Kl z5#bqx=MtVtcs8Nx|L`1jpYsSWAUt0s7pnPU!Yc?bA-s%G^?!J|+PRYOYQn2jGE&Xg z5Z+5Tns7YfwS;2{#}HmmsQN#=LG6ztyovBemE5f6TL|wYyp`~F!rN4Shnnvqyoc~^ zm8kv?ClVTjU4%8l5@Cf<^?z7ZSJerdgbkIn)NB%ZgchMgsQN#2)s9aX5(X+!{U0Vo z=MbhuJqR*`eXfA}`xOu}~v zXAr)tcHUF-`-C47exQ<%)ci5wZ-lc6za{*H@Jqr^2|p+NOzo)t59bhmP56~MRsA1+ zNBA@0_k=$Z{-Ab#QuAEGUkO$Jhx63we4@n&e<%E#@DIX22^XkS)&Jo?M2isq`@hpj z^?w9WH=@OfmLyt2?JT9{rHQ%|Eu)fU)w~?hPDDM4`VsXaTAgTlqCP|`5UoVCqT1}O z=9P(7B~tw#t)@=bAnHrBCehkNYpHx4HLpvwKGAwA*+9+xi3SpFNVF-@MnnUMHdd#b zsChG@Er?YAM_a1XK}6dTZAG*V(bg(g&;QY2q8*5~SEs7~qn(KkCEA5(U!oyIdl2nP zv^&vmYJaGj_axezNcDfTk2)PjG@NKZq63KbSNVZz9zk?4(LpLXM9qg0ok(;z(J@3v z5FJINp8unx)#kB8#}ldkk5vChClQ@abTZMYM5m~$PE+$4L}wA5sgkqRd@j)|MCTFJ ziOwe)M|1(v)kGH(T}E^f(IrF|t9{k~(d9%}5?!HARsTmLiN+9(A{tF}joP_Z&DRm# zKyp$xkU4c zej%Di^sBl`J^x3)6D=V6L!JJq=D&&a2L6XQFYtef7bjkXcrjwt|1tmDkCz}`ig-zt zbW`&(#65|-6Zari{U0x(BVLzyePY%BvFiW0Kk-Jy8>*{R|Hqp!IbYb6Y(wJBND|`BiGLv8g7^;N zEs0Mc9!R_o@gU-ziMJviOuRMmw#3`0dv2%Z?TL3J-a#chsd*RTp~ORocOzEM|MBi> zXAk1Ni1$><-fG^L_)y|u#KVdABR+sw^?$7TKORARFtO_YSoME=81d1>hZ7%3e1y9H zQEEPh_&DNYRdT$VPb9vA_$165`8^@omJa|Kr=$>7B$+5Z^`Y6W>i-C%%WcL_C3bBC+cKSoMEgCaw~z z{*P7v#|>hOxJhgfx762C{U6)JF0rFdRsY8U@l@iFI3tdT^G|!MHd8gXi6;|JQpprG z-$(o~@%_XP5g zQT?B6N3uJ~V3M6lwkO$57`aju)WLJ_Q>OQ-vc__&~BzutTMWXsYQT?CnOR^uy zFm;vc|KvcDYeJCSc97S@ZN{&|Zu_Pyv97l2j ziR%C4M747=$*Cl#sN^&?pFwgl$(bbQk(@iDZYH@&CF=P< zxs~KDlG{k`AW{9F+^P2OCYeBTk4jYkCtV~aNr|LRQYNXAsQyn>|0fNS7D-dx$569H z;*;1UE{W>@MD>3XkVGV*x=Qtbl9HZFl94V)(kA(sWD>~>B$G)VBbh?-Ajwpc`$_Io zcToMGJVf#c$;0YY^?&j>$i<;rf4Vs7(xgj}E=9WJ|E@~Asd*XFWl6iMq=%Y&lI~2} zi?l!K@}z5!u0Xmn>58PiNmo*vebl@P>1w2^|I^jg>6)bLlCDL%4yk(nPy4E!^+-1$ zRsEm#Q>Pn}4kF!%bTiV8NjD)KpiVbc^X8;ml5U}rfok50bTH}Gq}!5iqjL59pKedO zBk2z6RP}$l3+Z8`Lr8~_?n=5R>29P$N!9azx`(=UFVcNTRsW~^s?+^QN09DMdLZcm zDj%-qgGdh{Jy<1&s`+rzlSq#sJ(l!H(xXX_Qm4nL`8d)ONLBx*s{hlINzWiXh4eJi zQ`J?ctNBdQvq{zSe|nBOJ&*KN((_3hq!*ChNO~dZNYaZ)FDJd2^itAG)V}Kf^a|3e zNUv0hM1>D}sd0%@7_UeYeoi7GFtxk6eat*WH1<|gU=q%G2j)F5?9O;VfGQah^uQ;#$t z_0_5B|1>6@M4FIhq^a6zt9df%RMIIbQT?AjK>8HvgQSmU%RMJb$E0C>8wj$Xo zWGj*NA?vM9)$@P0D%t8}tEtm9)VvnidSq*p^(9+JeX@RJ8>pnenm3~DlWk1) zHQ4~N@noBj9Zi=1{%0uJW@LlOHYeMPYzwl1Wa{}p8>H^DHQBags{b?9|Jn9ryO8Zb zwiDTo>Z+a9JcMjFvRzf8`aj!)Y&hATWW&hzBHM>d^?#=NKiiM&0J8nneGXLf2(rV- z4k9~*>|m9v{?864JCf`Ob*lP5JBI9HvSZ24AUlriWU}MQP9!@)?VqIPQ^-yuJ5?pB z|Fbj6&LcaE>>RSQ)y}zUKA-GDvI|tAp8vB;$VQW0N_G|5Wn@>7U9L7&|7TZ|jUpSV zPOnk(wPa(-#*kf4cAd&q|7YXKZX&x;o!+eGTgVu|FnDRG*ELy zmXO6NQT?B_$?hYYL^g$Nvf7!d=KIMWBzr(552^VPvNy>dC3~LiF|wz~9w(bdrusiq z{hvKe_AJ>m>JHDT`3169$zCLTnN0P6rusjdPWC$4Yw9ZX{GYu=HjC_SvYBM>kj)@_ zS8cwh=J&}yB>O-mAF26cvd_t8lYL62`akll?&U3)zokKa>5W?lxD=zmok%Hcut<)%*w9KV%EY{v!KR<$tUBU)qb(R{h^z z?0={2#cB7Xy#(!LXfH{-8||gksp|iBciKH@FRM;f|F?V5?oE4n+AGptLG7sL|8^hR ztI%FqovP>m_Ug0;(q4mhf7)x(UYGV-wAZ1%w%YHj=JjZAKwCZkxBIEn4QX#mJMaGi zv^Q4yCTiY{_7=1^SBdKX_8{6j)82~qVA@;L-j=rN|F-J?_V%=Qq`iZ>&rWLIh4xU| zLul_tTlIfi^?!R0+I!L7Q(dL{zr8Q*D`^j-eG={cXdg~{f7%DpK7jUc+N%HCBh(%K zkE%0|yP^F5e|eFR7E(f`O({xBt2XVZ?35I3BqU@jMTAzR5>nDa(Q;QF2dTu~$Fk&|vW{5Gq8L?4_-GbQdh~0|VP{eLCs>6)&aKuI+X5@d&$p6@# zh>b&RG-6{AyUW;WtTDbDu?dKcH_Sw1JQ=Yk5xWPmnTXws*fhkZAa*}uM*hd98vPF- zHUqKghI!B!&qC}`#AYM*Fk(jj#~v|y9z$#nVviff$p6?}#GXg&Da7U@_B3Mi5Hs>W zX5@ct0b)QSP8Lr5i28BgIL9=zGIBvL+k^@jQo$SG^(o*TZ`Cg#6Ci7jp08w z#-AXz4zW)S^O-UJ9I;;!`vS48h;2aZ8^ksu_7!5r`+v;H|JWwPwjj3I*n^S(vF{N3 z39)U6{eal_M$eDNcspXhAojCib{ON|5c?0YorwL7*zbt_iP#@T^)F+*3$cF?Gx9%X zj6B-v76i1!G(fR()9e7-nB%+z{5;uo}TS8rFWW4u#biRufqJ!#WVw z0Y>LR#<(f0X0VL>w+=C?&0!r5>o8a?VHxlLRx6|D2w1IQ8ToG=WmJ!Wbuz4DVYP*I z9IWGEwK1wE7~>ORwS#q%VcHwxQ(&DAs{^c#uue6+@&0dhf^{aWGmNT{|JFIMdcryv z)@86d!@3C8d9W^kWxW4e7aH4kfprNiBmb>Sjq2sFy2H8xR##Y88orw`z6#bgu&y>t z4`bX5)*x8DVGV%Q2Ub5=eT`~=V|*>Ffv}AHw~YL^Zh&<&tQ%nsfi>9J>Lz1+3#{8< z8SnqrP@{S~tQuIuVJ(1l2doERjes=))<{@mV2y$`8rGdgzmfmeSXg(%8fR3;8{>(v zrofs6>mFE>4S%mOz7N(^Soa%dnlYXZ>v32!U_AuuL0Ge3%`~dBjq$^<9))G(zx9|= zodfG>SWm#33+qY4KV^)cf%Pn`d4`#9j2FVPU_A$GDXc}XmcV)*)?!#M7(GV*TQ9+S z1=h<()yRKq8LT&8y#{MJtk;d66~_2YSZ~96%P>a%TQ;l|EC*HsRveZG%gBGr$bTyd zD})so`-zNk8dd>T238K1k^h#F|5g!J8CJ>I%E*7~9aw+CdKcE$u-=3939R>Ft%mgh ztPf!s`ERW<_OJ%l$FM#!%vxjoDXcGGt%J25mXZI~=SI&4SYN{0Xqc~z@i(x3g0%_O zcd$0Y`WDs}qq@}?Z-ey%EF=FdBmb@KuzrK}Gprr3elfQC)fn%D^#`oq4fCfl{u_2R zfp@{K2Ka8+)sX)O)_<^!{I~Y}U%$OKY{0H#n7YPzAJ~mx*N5EzwvqpKL!)Ou*!#n7 zY#1Z|?So*qg53o6p|G36ZU)=PfBO()tLCs9=Xuy|tNVm~BJ6FjPlEk0?CRhD83?;Q>`P#u4Et=@r@%fPb_duU zVH^2x8~JZ{f_*0JGmIlN^4~rO_64xdg?%3E&PI=s|MrEjyTHE4s2cfiUkbYi?8{(x zgMB&dD`8(@bapky-C^`u28{Wu&yFct}VGl5>M*iE^!yXHJ z5bR;FZ-9L>>>FVZfo1pb8$EGj?7>dJ_6?IX#v$xAup`(N*eTd~*lE~V*cqcIXN(K5OR$TEDI4P&*dM@t z2ljig-!;7P{%@~@y$be+Ms>9@{s{I)*dN3G4E9>spThpcsID`{>tTNZ+sJ==gHinw z_GZ{$!TtvJ*M{F@jJLqv3j15bd}oZmhf}?ye}K~h_K$D?`zP3c!QKx0H`qVJ-T~Xl zf7{4^dnfEaU>o^w|7q;`Z`l9A-Ua&~*t-pHPFvgAGG={UEVfHu12f}Fv=O8#u;WRP4k^jyiaGJw8)TkQy@3e%|5l$;O z$HO@s&e3p=fYTa|k^hd7|IRURj)P<5zhmUTQ_cVOaN5E-3C@YeC$=-jC&TFg=M=*j z`R|+t=X^M)!#NvHCpc%qG4kIr^4~cJPG>mh8v8lV7+(PA5;zya=>o^df5*sw=TbPA z!@11Z%E*7GE1XGiy1}^#PIox{;aml$7o4l%^nhdJzthv$LvJ{J;q);~KVv)q&LB9~ z!Wjt1$baX0qvr-VgW=q0m?6gaW;mnZ+yduzIJd$X3gk^hd7|IVFo z#=#j4r~1Eryvx{XtTDbD&ICB)4KvXgPlod(oO|HRgmW*PX>g{%xgU;^|ISpS{{c8N z;7m8ngT{CkoJZlzhVw8SBmW)a{oi>E&Kx+88(SIq?@0c`c?!;aI8Vcw2gk^N=UHQ` z1#q5&v(PY${x{}MULY64k^G0Vgp~Y;^D_AgoE30hh4UJmrEr$1-*4*QayqZWS^obU z$$vO+R$1HgHcgDQNXdUV4&v2?C;1P@B|SJH9G~L^Dftgaz5gH2afEpF&P~DD4JQrf zJ2)9QHE^$Or_srUctjbDaSG5kAlK7b?n59d8n<-gi$C7ji8B>&;8 zGPYVn^AY)R^&{Y{<@giwQ&RFD&S&I$Qt}_p7o_AroQ>p{*(!r4jxJNbuE{fp*ra+l%% zLA;vh{~}%u^ZyX9180x)#3la`-~0bMLFTLbH;th@Jel(3qmH)gJ z@dFV*4Do{yZ-%(!KjKZvgR9iD6hDOKP_ntq$$!LKlSdi;7@A`d zKNIoe5I-65Hi(~yxH_H_SZ!RFEy%{(@6d!ex>2N(R3%TGQ8wJ;yuWo zWG}Ke*@x^~x5I0Q_rqTq#QS68FvJI-W+>v-Kt%P*ZT=+A~AYq(ujY6cy-B@5ziuC zKs?7D$^Y7|iZmrLdUaJ0e;4r@`ge>@=70QsF?#jwOI6Q2^FRKv z7+!Zae1bUhKfX@<5Fz60;a20TI@pQ$7l?m{_y)wku6_#Q8xjAKJzq(`UO(R;z6J43 z^qa-&<6-{Cw~FaGoz-oK|AP4Ui2sB*^FRKhRQsOB>UL7{zjn_%XnrMs6W>Et4&uMV z-5c>g5Z{IPpEQ4wlK-_=YB%ElA^s1&y#LqkbB`EzFEQ#$xpm++fD5?$z^%(_J*oCR zmSe6HSMp!aq}vc~W4Mi2-A}xl2UqeR?g3)d47dluZ3njr+@s(&h1&w|!Eg_S+l-x( z|FzpTr#VcFx(aSfxJSTkMKAfU*MoZ`O=~e~R^6lF9!Gf$Tsh|2^J)XPE!^W-lKijz ztP^QY5~KIf9&Ts2C&TRo_Y}At;dWrpsnVm5hu6qGU5q}vGvJ;L_e^%4Wq9Vld#;!} z?q>BoxEFD7KHLj9xKOIsujRN4+)Lpy|J_T(tGn2}jMdB8$!u}2gd4!^3U?aZZg7Xf z?GASU+^gXBgnM<}zMsNn{=1SPI!WAKaQnjT&As&zudjPQn*L(?@-A?%g*zDTb#Mp4 z9mwkSQdM`5djrjlV)VQXfqM(wo9J&AulIZ_&23^-cDcjgj)QwU+|h7{!yO6t4)%yx#xaaPNgX9_}Q#6Ih*SR43EiW0)y$r^3CD{(kXX z+qGx$0NfYgPKP@e?hLq(z(YDT^;%8PF#q)#g>ZMkjo_|>n}Yj3+%()0+zi}2+${U$Xlu`_KvOhK8SXo9 zEA*28wde9K&3j_>S$qI@HQbfec!c{QtCIgZ3Eeet*TVgXp82n5@)H_a`E|$2YJvM1 z+;8Bnhs)=qEWa<{ehGI2tMdL|_gZyjzoPkCjCwM+zZ89Vcdl5Z>|C$16O^e|T-hU*DPIlaRa(UOV`6 z;kAeNO5NS7;hhZc6nMknb%1vzyi?(w1Fs{zGphTCSKW`~KfF$|AKvM82d#y7COpZ1 zcxQ`O_mOulye{xM!@B_9d90oyl(J%!Rrq18hBT+=W6LudF%C{>1k}$8(u$nlK=4fiho727hZpIfEYc8)iWIe zZy>xI;7R_&8zfad|C0ak28&T^+q((gt?(rO;oTx$&%kXoLygYc;XMd%IJ`;l?tnK2 z-UxVi!W+p>$^Y787)^7RvF%uR6c9 zK5@MJ;XMFvD*ZI^>Mrx9)65W~&vYidXW-3(_c*-S@E(Ep5PO*aD%HJ5X&y7Sngg%8 zqL>oilj3#fQ|x?NjJ}TZ;5`rTS$GTK&1ZFiRP`P49L*vzdY)f^w*=l|`WMCP<7EDO z%zxeaD*Tr4mcsiI-ZFRvc(1|p;k^zo25&jMH{q?|e%_G%=)@?{SG`F;V)bLG>Um@Sd!LHY zpZ*!VFW{|b=jY-_ZsB+XxlxRstFPegf%i4MU*LTMZyUT#@VuFXF#o+jjsCyk{R3|oJ9mrM z^Zzf+e`3^Iy}uXy{owBnzn)wRzYcszk6%}M)c*Z_;5UF@pMGEQ>fHT?G>r_?82-WV z_lJKF`~z4$P^xO>`^B+P3Tfy%K|8V$c!#@Ik zd-zAfZv($I{A1uV|9$4aTCx7I+@~bJUM>Fd@K1z)0zLD;Tg356WIO3p*Tp{>ekb^+ z!0!mZ1FNSR)zfHB7sGkrAJ2e)CI@Hz&%-|l{^jt`h2I5!XZRPuKaV}<8$HZ_pZTw6 z^HCesB0pNWYhO zeNFptTjsw$>;CY^!yf>DDEw>T4~Ab|4};(jWT)hR?V7oPhVTFSdJTbp3;dhtCI4$b zB>4BjpUj?nWGlV5DKz(q(X%~OUUB_t^bd&F`=0^-5%>?npACN|tFxr4 z-f4a2zyGipz1|*$KL@_#Km5nVtEZCB{P&*}qmSV!Bp!hOG!hNrKLdXy{CV(g_|L*$ z3V%NQ#qbxvUj%<4_x7A@t3UU7nis_A<9`wU%kY=bza(CN$}2Rl8lB7FzXks__$%P6 zwX|HSdYwrA!+%rEO&d9u{D&VSE%AD09QYadarhy87k&c1#~xpL^rt6j0x{fw^-TbN z1V2Te7O&n<{4D$m{2cru{5-1#sp|cdXv&7Ef&U)-cj(_0ujk=?nh(V2HTfa@?eJH@ z{}TRc`0L=Wfxi|$^WXoNot?SWC*-GM^g8?u{ul7q(|;~r?{fo<%uj8meFc9j{IB6} zhW`z#o207eY75P`V)Su-2mc57+vvYHyyQRppTy{u^E3Sa;Qs=@I(0kX?}Yy=dnEsB zdw!?+LyZ2!zu@nN|2O?E@p>lzq4`&gUQ2tB01|su9}P(CE!9LFsjA~l)J38`67}f! z5wG^2ko-rY0gc>QNHjv?N+k9};zT4GBhdjXMdENIjz!`KB#uJjNLE`*Ro#P$qiK#2qgGeq zI3$ioqK%kAYguLfC)$e9XLJ%0=OEDziPMm1k3XQuB!;tx`LD0|NE+t9KI_pmcadYNti5XEkhlklyOEfP#CTRGNL3%z zB$~;FxfhB1k(fe%pLo39+8JdVm1;F zajS=AEAGtu{U`AT z5)Kk?A`wI4EmkG}Ywu8t#ulURnm7_Z5-z=Gc(tmNV)XhCk@yse2#NQQNFh-~B8@~2 zi43>RN~d03c^c-wUZo`@YLFF?0ID@NZ(?<4UM5+5M33W=4hekfIyrHR!v zYsBbzko-qtE%}Lfz2|jEY)0ZUBsQ?L9*NI6_(FR0xoqI=KP3J_VmA_hvwxTL>tp+e=3g=Ty6i!+4w8F`PfGslV@QIgt{8O|$$gM) zjAVTz8zQ+cs|}>8jwIQLWXQc}*^E7hNRPTM z$>vD5MDj5D7UI>>CR@=QE=DCo@<=4xAlVwpV~{+G)uW|)_iT=jC65!sJ@AjmBY6S` zZN;m#k*t3I(-p~fNS=#idn8Xs@?<1WMe-DOc92f>8@gmi8hQWMDVOYozZ;VMk?f9S4N|wU$2v)2(LqO7=jy+ydBAJkQ|QW z%ShgV#ncHO$>ePDFA%J@a3sadHyPWa(7v zKY1^bjQZphBqjfmykDyNtfwJ41IY*IryKr3nwetser6;2ERqi)`2>;=Bl#GTkFe)a z>CvM{+Te3y@rdc5u<0rMKVItLo$h^&#L5q?O6vjp%}gA6p~pa)ASjmGe?sbqgQni z$&ZjMA^AR%WhCE0Qt}_k8tKuWF8Pn-dt&rFe}LpFBv;aZC|-SUlVtuU*BItwB&*x5 zMRFaIpRoT^sp>QRjAp%<32iw30?99t+`#ch@w!v;AIY!9s3%c!6M||qZAP#cl3S46 zf#kPH{)FUKB)>=UJN9og_V5FZy#Lpx!S?E|ko=kc7o+o6B>zV8HzccpzmwJ9jq0B? ze;H;MlK&#Pn_lw2_L%>p*&{~HTd+5R0}<3g&;S7t?1Mn^A3;6oQTK09pJrb%YW{j&Irz-KUcgy{_|+gXQ%qC z3lUs{;35Q9An1bNQUn*X=Mw4BvnTnF;Bql~KUX5?j-V@jH^W~=bF~C{KNjOI0NtJd&x z1aBf(LH~x)`4-LFV$|=>0t-O`fsMdL;IJB(s=h8BjW0&u5lI9Qf`C30ug^3^lNO_A zCX3)h1UUpX2=WL@2ny^eN{?Q9Wtxf@eLuc~;C%$l|KL6G>is$RfSoJFsBZv*RR}&s zuo}U~2qgazd?Z!%-W9B+`9usqtNQZ}f^`U(|G|3kdgi}C*b>181pgq|h~Os#Un2Mx z!B+@2A&~q>@Qw7VznK$krrBcbVJm{~5qw9_{MU2x1I>@psqd`q2!2QKGlE|cNd6;` z_y5}K_#4emF?#<0K=3z$Kk1qO`j~go?3PZwuKq>1AA6zrBTg z{}1bmQTqw^LD&Fcec4;MuXr_kVMCfmV$_j@jS(J5Gx|FrJPY9&^k<6K zpLjOSIbzh`{0TcF?1u0>gqI*ZAK^s^FJRAw(xdV!>_Q{?uUCF}DZ(odGXKNN4Syv& zCI4$XyCdw4@G68o5K8_dyhf_(c@*}fk^HZ{7JU%*N67pS`>~VHqi_H_CI4&BWgw#J zFL zLVo`fJ}yQd&l3orLii**=Ze?IFZqw~8N)n_&_g&M;WC5^5Wa|TA;RYoKF7{Q(y5+w zq2xcp#m2Tv5Wa%&CHj}e>pM>JAK_9lDi6cg5WbD@b%bvqT+ZqWsp_lqCe2%7^!dgR zItVR#TfAOTlK%)@G3qx{p^vbPFo7_GFo`fi7_cXlo|k^+nE4+v|Mh;d2nz^vtmdUt zuLsG0geAjN5Uxa6gYZ3s@38u=RMocu;rld_|FvuHLxgJ(uA*NpUT2HsKf;g2=sEcW zQ4@rpBK!^EI)qyheunTXgzFJ*K=?WPzmR^tsyEVnDMruR*9bQw{Dyv$c=bD}a0|`1 zV)VA(A^fpAw+Oc({GQbxq^j53PY8cOxSd{RO#h4)?x6XVrp)n9L_qjE!haC{f$(pH z%>R)2ujgMKzdWiN#v=6J2|N1PV z1~d)DsOuQ*hv)!Ajp_FnufE%lB>xc|Bu1_Ls41dT5FL!DHKJySS|K_F(P4-r{}DBp zPW60=TF|sK%;7XgkVlGFXBr)a=mbPZBRUSzF|0EG)f$f4&`AF4J1A<4s2!pc>6!of z6Wi0AES)OJqYjA9MszBoPSu~#5p_f)`H$#y>CtC&M)j`%A(H$@be4EMtLGrP2+_HS z&PUXl)$^pPkLm&%Bmbi=h%QBRG5sadsjgad84dGa&-Rsw@`$=3dI(WBM8gqvM>G)8 zRfzf^x*AbWM3VoAddPnCarUC=Ek@l7QC~y@5J~Th&P{v*0hj7pN|dPFxP8iZ&t zq8nJfQL1|0`0R*o5~I)V7DPi4-OA3}#OwJSMkD!OyX_r_CL0fyiUk zm#RL7BuyY@0P{175M>ah=+olWcg0bbCMQOHe-afC?LkyTvKrpW&T0)rx^7tj{ZjU529W4yT$8O_b<(V zV${k^?S<5lNbQZ(fk@RsssU0!Y9FNPN@uE`bgE}lsy@xWV$@Nk8Y0ygsYdksiC52# z)c!OFh*7ILbr4d`k!pfeGo+fbdazX0QKb%{IaEwhwnFMKq*@`>g5#Fr)w)U@PIH79 zl{2ZS$J(|EXi8NAJH4Qf-ksp4Ah?>%B4mQ_O!o8|{%g9jTL%Iu)r? z*xy0=)jLM2Bh6`IbblwL&O+)8`ZL9=E0Q{!<{YDw`JXyZjQ;cskpBd!3z0nlsf&KUXiLFx{qE=8(8QkNms9jVK?&nw6)$*yF#Dr=AMDx`WLbv6Apq~t$R zJ*7tO8(cbmZ3DmNXdVshD%j{?g*srLuw>a6OkH))L5kMWY1`l`JWmi{d(rd(KG*3 z<2jxnRUQxjI0>oA9Na_ROHQd$znP@&N9tjurXuwqQj-5jJwQ$;XGo{|?l(1)W)?Y{ zd`PN;|Ka!%q@FpVm%i&R9PBGY6>dh{N0G z7Nx51@iI~ykg6cH2B{jPK0r$HAE|fA_sI99U*B0PX+9(+|B+fPRlRaPLTVjSAJeZT zKOsMr9=(UpXx5XTlV3=6pxX0Bq_!dTB~qJ_`ij-B$#2L_(y5X>wT0$eax3|rRQ0EP zkJQgd{XqXC`4hQader-K>KB?F1u%gjnscg z?PC9KQmxg0Wm}!zd&H;rBKIciNL8(_bX}wyAT9Zi^gd*La$o6D|F$LFkfss2AK6%{ zD)Z9^Al(A#1Cefq^g*mPA)As1OQ-&fU!64|cG+T%Hy<`l96d8$;^@9fg2A$=Co zr_*;L&mhl~9(CQ*%>VQ`^yiYDrK+xJ`h29XMEU}xFG2c3RxcvEkQYm*o|#K&E+a1| zuaK&Gr%HE4`WmFW(RU}WBCnPnb?>Bm(DWpGk-epQm*gALeUYAlbU&m=BHbV9n~)xW z^dO|KW%W98AbEY2dgY{<|LGg)2a`jjs(#m&z8UFZNZ&$#D|s6^RC?6?o@V~1htuCd zjxegDke-C}ok)*EdNiwdkz>fQ(y7*Pn)#m|Pd|a2C{_I_laan3>3it!C8v=0NsqdN z(o<=skq?m5rK;!uL8KQUJrn6Ck)DP0qe#zYkK{kn50j5bzsi>MV>FMGlK)6QVN~ZL z{VdW?(LYT-L(Y>P^`uD8r&&NQB%hP2KHBGzehujtkbW8I#jL(aE+Jo%PJQmL(7Z}6 zC6`Hc)GCf&NBS+Kmvg*=e1m+m%G!JCZJHQqk+xLz%*2to0cjVRYEXDcZ$R2dx{P!J z=@988`vd7$@A>Hn=^WC`|1|SIoncQ_di3n&X$oYKEJ;;=Vg>0nNY^0!0n*I>^tY1MYjAlLgIr&AE`un2v zMx?93`z6xfBmEW9Taf;mJ>QU<$j#EP^XFTdt)%2X(%Yn})8GfBe?j_3`k%<{MG z_acsWkiU|@kvprbowsWK|BdvY^nV$C7t(u>-cA1xDfy4|f6}8;Ii!j zo~eh->B#JZ%;Ct?N2Uof`y$gAnFj1^NH!w(ldaVGX7;B!fIN^qNUCaOW||_?9GQdZ zn~{f*hf0rH=b6K3T97TtR#F|pIm{e^Oj~4*MCMpzTC;i-c{F*9bn4?jj;0NHJb8jq zJrS8xkU5FI9oe2dS$g!*cAz`0y_Reh$NkhvV0Gmzksu0Wg-7MVrJ%%@*K zE+n6m9=+b4r+I-~Oui^p_1|{LyoAh~$h?fqYskF9>Z{~Za+!4M*?XO4Ik|#-L#p~y z-a^Jf=56{IX_2<{sBZ%@aT=HONMEXY?In@fgiL_UYGguW%E&~>~Vvvm2Q$$ozuLx5)f}%vSa=|1;Y- z{$Bd^-Si{PPvmy;XQ}G>+=0v=$oxvr{Lk#<_;=~itM^ZuzsSGIT~bxw-)8{_Ay^g^bk|$<{-*A+r0hr#`ta*+6>K=Vlwx>_;{x_m`?V^6Y`g zO-A-0WDCePLG~78n<9G-vIisE2H9rFwnX+2ZgnWxoIH$dQKeqn*;dFNh3w(U%He{zDI~3V5$PPnxB(k@& zb2xbiIYPG5vp0(7PI5FU`L9znI~LiA$d04Gn;cJ0kRFxW*-12$Ny&d?@0F^`x9ok$ zK7{Q3$j(4^Dy!4T2gvEtsn6~~8s>kN`JXlNKl?DUbC7+6J&%&i|Lo(&9-g3ol4Sm8 zCI4$z>@&!|f$ThFmmvErvWt+N&&~zpLX!EfS0?j6`vU!9^2I9kPea+4kX?rC%k<3u z?5iA0{_8iZ>}xcylgr5!QdLj6YkbMhT2idn-jgc0~{8t&6jnlZKNBULj-%4bY z$fl7E=tD9hCI4&h#|%xD%#nGi>X|PhcMP&6WOpK4Ms@?T6=c^STZ8Ne$iBn=cggq2 z_hno4y?u5i&4=VFa@V~?NalZ5 z^1t?K{*K&!$o_%c-pKxmY&GPW|JlFUzl+>0{rbN6m*zimk1)5FR8^Aa>L6DiIndW7 z>yi6NkD9$4^FP;sz9HF2s%m}a8Y9;nx&4uAirfLL9!MTUHjz%fpMzRIOI-8t_^ahB6mD;?T|Zx z)wbk`ka@~=;8M&*F8-U!^ z$n{3<8us)cdy>7Rf7B|D`;dLfeq{eDYgfXx$lZY4b@T(t>&ZdVqmTJUn!)4{@+PV3 zt8)u-cOrKya>J3kjaA-RxnUgNZgk#3Bl(ZqNOBab_i#KKxx10Oi{mlmSaMvIIxBK& z%}k)5NKTTfo|$`)uU`6lkz0w}6yz2ocOP=kAa_4<4oLnJQ z^>6fYZz5+S_ZI!zWQ??=NByn2oI?{Qng2OYswx|E3FHdMC6P-b7qBNJBQhnO>bEMn z3{95Ik$I`=JFA-i?;uyAFOwCrMtbzQyi4;QDfy4w2U690_z=1OkXwb^R^(PA_XTom zkoy$5kJ$M!$^6fKB3tPzwT_AxhuBEOa%ouZp)Hj`V( zZ>6eN%Xi5AhTJyfwj=jFt3Qy;|J+Z~sgM6>`d`Q$^Yb0Or9rIb$#>I-~V<+ z{zBw0MgAgIyO0-?mq@2t=lRQME+?-bCI9t1WWF2nJ&^BCe-(K(d5!d_RhREc(~Im) z_K~VuvH5<;k3_yd@;4zr0Qo`4U(25B$bsbb(y#Y+0}b;(&-~BJHPtIKe>3vKkiUgJ zx01J!L#0RkT#%RiM}9bY2RTBj`WlTweiHI`B0moK(X8G@jv>cNr@q#A(~KvX|M`hh zRsXUeKNLUiM5O?~@+&(^-Bh%`}qvpPw#OJu?p?A4h&B^3Nkb3;DUo&qn?+ zm~V*e41qb=d)7PsgkEJh|x1yLjFC< zGV&D;B>$0rhkUn6{ryS)edJdo{{j6<@HHoeoJnZ zsy>o!$Ztpfd-@;9AIYDjM<376G{2BL$X}(Z_rDYQJ;?u#{4V5~|9R$r{x5d^EuA{G zcGLVrO8z7NpHz7-%O4ASp|Cdxbx4qPtJH4=g?&&s9EJKQG(lls6dI$@fISV#M&y3d zudZ@of0_fx1IdG=s(uD3G)18~3J23SBPIV)I8=Jn{1gtOX+gFmTN%|OP-u(7ktiIC zLTgr!B9A7IkxuokT7mgrXhVNId4g0`t`<&2p&be*iBZ4NF0^OQ$>b?y2dV0#>WIP+ z6i!2-D+;HhZ~+RPP&fyLGuU}1Dfy4W*|L?oQiXGAI+K$BD4Z`<^&Br;h{B~PTtwf6 zyqIMEtGq2-MsqpI{4ZQt9qYTM&<%xtD0D}mCkj`w=W6mAvWIl46;sz2*a6vm-2n*J_w49Wag-&YjwrWsF8ASYH?d%Y&3@E{8JpfDAM zds&@A-bdaqo$8yz!Zex($m!$^qdF6XM^KnWKbvI!7ao=#^)^*_l>RaDadM7S^%{5* zg`ZHEi$V^Cr%+gq!qX@$M&TJ07NRhZ{m+u~$px~lUUkpWEFzyLUy!Qa^NT3Fioz25 zm&ljNSENV%Tlm6Knq}l`rYQy+;O(;hr$LFK4a&4@^kVF z=~TZ*C~Tx*{uh}4g|DTmk7N@H-=VOXJzL0c$*t0(=X@K@_ayVbAo*XrhwUg<6Y^&i ztHJvV3cFF*fx;gs{L22{$erZxvX%PpHx~Y+`HTFU+$B}@H$n^lptv^*|I+_Q?hzLE zk{

    DAu6?S(mIQRrTKxDAq@@35xro*cinItTrT>|3&7%-p~H@2apGn%zu8j!#_4f z@n8;`k<9<%q1CZYs^VcNo`hlx6kD^QC5o*$IGj9!JhDo?GK)u{*apR;>5n0gC6ALH z^(-hJPjdpOLyAL-BMJ+oRYK#gkb*h3r6{YIL3^W3^_AolranMdp9;Om?0{ zo-IAUx$ z-1Z9cN@EY*Xu6YEkylGqpH~kQ`=Z#Bz8Be>>?1wu-xC%4$yi^z0Vv+UhHFt|{uc-G zkJpofq*MJ1$Ks7B-h$#_`XS^^Pl-p0_3CC8C>OI5uU7bl>2FNzcCCy|rMd!$F7-4vSp$ot8uQdMu} z#RpJ)48`dv&PH(ts}GVh$yw5=?%(1=G!K)Hkdptk)yGkM3dK3}PmoWNbEQY6MDb~w zXGrFMQS!fbT`fSdfZ{?FEfk+aaVd(6P+WrI^Xz|tTuiQRz zNJeBzdi1r(&}7LRnU|`1QWT3QR@143;wlu&D87ecg*`RoJLJ34uioW~@6#~@Q&@@lU#d%AkK9M9 z>ex#AqSO?n1}N>1QbSf7k^7O2rBfwa=>VDoNy&ednn;zuqv0P9MyVMGhmePo&8yVs zQfh%xTa;R&bQDXiP&%B0BgiAk)>Z1iIa4|srDIW&{MReCbR2uykjIlJNL9V{l}<#d z6G|tc)B&Y-thOglCQp%0wem}n|0s1NPa{v4s#?jVGf+Agr8DWzA|?M(I!Aic+e?Z0 zUpkNeeDVUR>RG)Ar8`jSg3`4pU5wJzC|!cml_*`x&dbQl$tz?lJ;PmTx{=+cw$y=~4H4sV_}GvOhUMs(Sy|p>!)s15p}`67#<_h&?xuH%h0v zcS=KOnExfof0S;Ksy@5hXoix*$lJ-`RqD6L(g>8Mqcjqwi71UiX)H>2vS&1T7db}y z^*+bZ+)a)rCrDNOTu_>X(tRjRrkDIj>0WY*^r*ME()~13$!X*RQdRd+X$DGjPMU|L`H<212+gD9W8~vfRnL^t6DU1{(v$Ra$*0JtrAN>6Jep_8`Q!qr>ODM% zN_~_Tp;kB&z|*{4YuV*RGZ{ zeTK}EIjO3*f>Hsc8kCCkC9+Ibq({%mJ2dZ-?~(6IRlVtzR-*I`N*|)M9;H<%twm`y zd)AO2ksnLHzJEWV`IKBoer8mwi)RB$Ux?A4zL7m&l3$TuOLf#LjyIvS9i`1EZ9{1b z&9~%M^1CW)@4oM8ejtA&f0F8m<2bJ7|4x*C;dlr6EBRZMwMYIt%^&2S|@ z=o^YxZ@K0DXd09Ilal|n`#cEcRwy??`B0RbvU)Jtj66g-)jBLUr#XylLAGR7?qdG& zaFmbW;7GDHc~q6PpLGn%XQF&8%I#1-4&@V3Zo{7A$rH%7(y!0xBpIufQ*MuPN0gcW zWyyb(JCLVJk9t0qPop`V>_na+RrM}iJ`3fGQ9c{x^HG-kNBLZ`Gb#D6@A~ouG#8Q= zkzJ&!zKJSdg7TFpUrK)&c{zE7^r&@P?n={*>`q=KRXvl}pu7U*9w^_7a!-_RMY$Ks zgHY~`@&J_ku)i9s@8w`29yV*e4`kZVC5m~Vg8qy|7GUC zuHJ_7T__Jlc?8PC*m*lSoV=sT+G8F`Gm2#Xmq$xgeREhIgYpEF$Fe$(yqg>^J^HgI z(o7;JlUz9})yq>*ej4TbP<{yI`%#{O@>KRrBPIV)o?d0`T6&OXCOM0oEmifMPx)b# z=b-!u{iEb#|a1Gluq?TD=(sX zo_v8^ELHs}OHf{lGV{OuGONu0@~hILui7&D*T~n&t`A3S=xbeHNbyG`A?L8W9Lrtck&PE)bsEc&EMoMa<^3VQT>Zb z9h8~>_zS^J!+*@K*Rj6)Z=&`sj4HX?2C$vN&{4eq0$hQvr%b;%F(FohsvR- zG)AQfD*JP*1IPo(gJcitU9r-X=3ufJd5Bci)2GrLmBUdvjJ^fgl58bC>bX{7{#TBq zZ%rO0RdtS)V^BF6m19w9i^_4VwjqxvPmoUa-{h&BNOKa|j%+Vgy`NK1IUSV_^pgLm zbRF~rYdy~S8k!XmAs7{DpkG4Zb#)QREDE64V61k8IQ^cRPI7$ zBs)iucao!JD?I~aXvUJ`$h)Pgo(`1>sN9RnMEXhOWbz*A(W`d~&3)wk^OI%>N4Wzw(&$=vkV>>JudMzcN><>N!<;8kLt( zc?OmFsLW%}vr<+0P+5S=3#crle~x7SS0w-SGrF>v{zY;L`I1!ir@w;A+o-&X%5qee zvbv09{#PXbYuC&Q`Zvfo$+x7+8RH*gs4)L4Hvj05ap`$-562#AnxW#O@+~R}R6ax{ ziAoWb0F?|XA$yqr73O~>E!*nj%(9vz^Ca_M&r%7McTp+RS4if6Me@J)n!ZQ>KKTK; z(x|RNrFzG$M&%P!*0A~!`7yaxI`zH7{I4+oE1$8tUaIOFfXWxBe2vNm`id9EM4^4e? zU$TKz)xVXiX@r^sQL`U?V{(7;0O?V4TXPUi6S66Juu(k(H5a1hP}H1^n&zlE1~rGF z<_OfZU}sCR6?wR9rRJyRNSfBHJ?A3EJ!_t}2v zOoh%?Xb_pRO!qTkutMi5Gz5Jp90t#^jJpa#=b;RTBjEYwx+k&Fg~~pw&_#;>uF%Db z?x)Zt3YQeRRN?Iux=f)@6}nuZM-;k3p<5NYQlU|7WTZk@v2ZoK2GalT3JqPS&=`g2 z{}BBjx{=K27X1|wx(VfGcnchBuDhl};}n{p&}|BhSLk-!JK&x0E=&6Pd^ZaHAG(+2 z``Wn^6`G z;FFej?-oN(qdWtjh0mGm&&UjgURLM@boxIuljWD%WoDtg0PrBxw!M-8}Lm_`qz33^xg_5?Gdmj->qhw$f=FIiiZ$Y6}zKC9e^na*g z8GpuW=ylkDfw}&CEm3HxLZ2!0wL+icegVIPUs=*U{f53l`4)Z$t^fUJlA#|I`bD8- z=s!aGKlHO@{22a<{u^8le>d0f$qI$nSLjcLJ1DeLp;pQNMdok#5B!(BU9$?W0#}9f ze^}+Dw)>8Ws4k+l`BDg2AVb%noCxS{ap3J0v!giGLOwgrE^)BoWw(Z7OU zo9jNM34g2bGKJ~?u=T&fOW_Zed2nr(e}q3l`rrNE7U5qN{#W7O6mFILa$M_wh5vvn zT5N07l_-Bf`ak?nJNG|DIw-P=xsg>N{U4$K-T8{Fj=lz56Ry>wKbw(`ifpIII*N2r zWL-rzP~?AP)`RQAPVMp=qHF{=hMmoIBNo|2ku4S36n!(eIo!fB?z}{{LfIN_1GhET z@9p-A?5W5OitM7uj<{XnPH<;Sx@#x0D~k2MBD=#q%=O#ZOOgE**&BTyxG&t#GVX2_ z>4wrB9sqlo>*iE+k#iNfOp)^xxlobeWJbXA;RTlWBYY9c#qbh% zskv;8e_pQ06)ao{N5ZRGY}>*$irk{ewTj%R$SBOF^B9AI^zakGR z@&Nfsa59`?>$=a+BU4cxf)B$-%=K5qV~RYf$TW2NKQf)=CoJPSGx8M5)9@MS`rjS( z^NP$?WQHOyEAj&Fi*P1tyKv$UK(cu#BH$ z^HJV{^nb+q-+y8jS)fQlk@pn&P?3dX7Qw~vefU9({wX)|ks@J5K1TlpehNdDai2Uy zA}CQ9gK=~H97`&aS0sg=h8dWJxfa{5<$@xu*9;VdM)h**@ zV{}bhc3Y0Ft?0Ijc2u;pqU$KyNzrx5)BjQWKf1o<-LXVBz}*mT1UJTI%%fct-9ph# z&^LvfLF<1%R?#g{wt`#3ZOnDoV01f0cShV^(H&UW5q5<;wb-_uT@>9@(OuDZgS*2$ z+GX}a*&FTy_r>L!itex2!-{rOw5e!!MekGe07VBY+C$Nk6z!?#5sDtD=%I@CV%>w_ z!SE2$GNH~`ZB?s+LX5ao1u20XJxe;q~7LOI(M_YO2VMA2&%9ja*S1Ds)s zj!^U*GUvkcp!L7MPNV0eTmUbG*8l$hVUJ#-=#`3Iihdcq9A04=_l-|DLO{c>v3;@H$ppWZ6kIQ%FXZ=IM!T0OUEgCm!h|!TmLJ12fWiVe$2mDuT}3}pbb+GpEBYRpg>VtH z{%>oT4^TdYAHk2!bqyT-6eVPeZ=r~yc}1g&rWB3g#$f^`E$NRXjgo;`m^0Upe?igK zQ54Zjung&cKR0S9b=ZJGi*4IqqSzsdex}%Zihi!>ABujV=#Pqispxl#entLk_znEl z*7c+GJ<3w}16*dV`)%v!Pl_&A^k?*6;IHsE%lLh>{%_mb3dN-8pNjsg=t`1*!N1`@ zmh|)LKT~4dAY!YsyqdXgo3Rdxt*zMV=xe|=;aX(&XSpL>2d)eM*P`E(*!qg?q*y1# zwoq&X#kwfAA(@Tf#;~*H-TTMbCMcW2&EV$dx+nJ7mWpks*jDIU!)@TUmT^56+a6^H zxFhUpu6rhr?X1{-itVD1TjQ)?&|FM0|b+aYb>i?dKbz`mW z@BrAuGJXpOqV$6Ff9&9P?xBiZs90~s`YCppV#h0XxMF=3>qGtscqBZk-C9SZ90QMq z$C>LsSB#y2aw0qlo(xZE(f4GmzhZ+G8=%-3ik*sk8XO2ux1_t*$Ie6<1nK|S+2;BY z7^2vDiVejb2I>FUxt8(!GaP*cr2k_VnCrKHkz!*NyI8Sn6}v>SD;2wx;JZWcoyY3_&l6puItR$i;BIX*i7`7 z;LC89W&BvZit-wy|6_B^b@!UsT*VeDHczp)6?=osn{Ym)|J~g%_72LsZ~=U;#kM)H zNU@I;Ta5lb`~ZGv8TS)bv5!$cfuF*Vxvte?5yfhXMHMS37E>&(Se#4(CSl6*?*G<| z(f_e5dJg8zb)RI$iYWAdtjux+RxRT`dx_N*`$n;bVxKD(;5OkB_?adBzI}o6CHxA0 z-Ol}1v1N*VhyFcW3V*PSZ{Qzo*O z{9Ij$@)!IY(*J(@|0&)<@l{NZuL@U#YSGV@`06NYz%`-k{~cNGsCZ|^*HOHa;_IUP z53UE-Z_)Q*d;=8vKTiM0H*V*4QG5%i}_DdLAIew5;eqxXSFz#}c=enK_g z7v*S3|HrNW{U;dl;}xH-_z8-SQv5{4hbn%O;%6#;vf`&IehO>#gZ<$ETi5ko{4|t- z@N{^Fxqi+pyRs1Q%UsU{Q#h+FD8O!)r zd5*Q7hcn;{?cAA)zpD64==6Vl7R#?##=pvID6`=l_&Tl|&v}Y3Qv40Y-%SpeUI3(fUMx>)g#6@MT71Nb5Q$TIHt+Tx#}dC-co#}60IKiONreS|67TT6#qwwwG{tX2`T=cZ7o6n zCst*7HQSn-|A`JLtHU+mn&!HFORTNLdP;OeUk9!W|7RID4vF8O#hUU82mDpH` zZItM&#O6wL!QBMX|B1~k>F%V7Ezq}wTfwc(^?S0d5?z(p4t;w_|0i~|j6as0(07Kr zz+KJtd$PL{eU#Wki5^Pqsl_uj8xDVXd^6nj3Vtzy#y8d^{ElS+3#8~uO;W&6(i)~xD1LaP57aVV{AOCxl zcv^{jm3T;r`;?fZ!~`-E;r;Ld%ey8_Oh%ak>Hox3bN$SDSc%7#cm(%RNdG6MS;mjv zbo3|Slkh2X-S3_xo>AfzC7xB{MJ1lYeICw$FIdvgz?mp7!I$AIbN#Els>EC+UPGS^ z=fKx3C}=e5=H}N@SE+pv0$2yr;wmN-QM52rh>2v#!k| zCFuXeM=XB~Kf!fd4k-~=!unr{2#ms*Wn70R=>J3#Jq6R|`Z=FfqM<}iiLw%T+yZoS zuVhL0Op>7g6IER6eK$M8EPS5@MBC4N_8 zsS-acVg0YfGWa9>sYT!LiC<8x|CRU+E;rZD#y^y3mHZ0yKjBLFmu1|0&%{3{|HA)_ z$yLmCcgEyuO8!qtDY=%C9dK8NYrr)v>5e_QHcCgh4qVq<*I>!@l-x+k_0c=Q4d8~B zah;sp7^O4p0yi<&T`9@Ulsrbs&6V6&$t{%JNy#mh+)l}@NNx?cf!o?zZakCpe{u)( z9bs2<-K=gM5al9xF}%cFzn_;Wd6klvqhA59gd;8E zkNs+tYv8qTl(~LpUa!=)O5UJkRLL8ad``*HN={aCjFNXLd6Sakl)Ra>Zh>Rrt+oZf z{o7D(hj+j`&GmC^ypj`?yc_)@ju@HBh|KHFm3Xg{yyd?jZnIY-GCl$@pHi)3cP zm*C5m_xtt=%B%1-INMxiHUE5F$+;}dgKxk$TWmXnZz;K0$yWcrtK>VT`}4klRELn^&@;WC6Vht^buQTgLA>{hzF%*I~n4|GG^jzgKdJl3ywL8Sdxs3;3la-Cr6^ z(*MbC(7%P>nd?V>sgge{N&hF8;rIV zf0bNG#`<5$zu`aa^8cBVS_Q5OS2Ne0kyHnz)>dkDboxJK{jbzomT{kuq&lLk1Fip+ z`k%RO+*0c+wYgHAlHg^-^j_rS?{;t5UluwG;WB;Vy7jTi1OSl-eC-54b1X%UpLY zr}j~*yHfk2?+5pX-7MqIUFrao96G}a+)RSbMg7kmt8O!)F ze6HQ{45i*v>IJ1%yr+Dq#{Zs zm5QRrU>qhawKK>FXGk-RcJlqx8FuTn*&4^XP4^qNYQmHJ7kic()H)jEWx zQZ?4CL+gK~f)@Q}P^l#-pTWAK)_hqq+Xd z{aLBMmHI`gR>{-5Y}{sPy_uuR~^C_&>Ow<=q)fcS6|!ZV0Xa{S}e!tn}te zcR}9-(*NnrEaQIXD7^*xmT)V$wYh%#+bX@g(%UJ$lhWJc?f`d$T`lR(b(;Q9?}EN7 z+^wCvhtm5hy(ju!aBsMeW&CUHheH3SyRqEeT=yGi=^jd-t#nVNk5l?UrH@p)m(snJ zK8WPO@DO;Yt>vz!^kFE6!#?l`bD6#T^C+eJvT!s!1|Hj@ztYpkD?L!@6O`_!^oh79 z!IR-Bmh>agA7ubM6`p1;pC0hf)0MXVSNcpy|EJHgjQhFe^kAj0QF@5d7b!hd>ETKb zBY6%y7oKN%H>=YlQ0V{k1uS3K&b?UaE0n$j{Ze=tyu4lJN)-A(eHF`Bo9oZWwMvgw zdX&6=-${%;$@Ta~_3>2c_{!Q0^-mT^DplD-RNJiHrP z|F<3KeM&c#o}ly`r6(%=jMDcj{jkyxC_P!}NtSfYoSwqE55lR?`rkKa`Vpn4EBz?? zV{jUL+%o>CpFpAi(@(Mdw7Kryk$zU`SCxKF>6uDDk2?dt0AIAEyGy3&|1|xdo`w60 zx&Bq?|Mcv3%Iivpm7c5gLZ#;^{kGC?uonHFw*FW8t#aYRne?QNcDAOv&&y@aI>Cct^N@?qVrN3;kZH9cU^irk2L8t%I z*8fU>ZyEPKI{gF6GWa9>$y|SCe^I(s;J+%pLh0Xdm&4!TAC~mn`4eR&{0shVu0NK4 zm66i)e`XbPGpoYYEaOHjL;q)1M_&W3X|5Zw%-YIqt4v2_IxDk|GM$v6|1N=y=o`U}&2`V2nJ&s~q0A=eo5IcD=9Y1@C9@^UR&Z;$jk$h*wo_&gWwuvl zXJvN4rT;TsS>DN#?s*`y3kv<8vHn+PcXQn*V3|FY*-x3h(D#P>zH% zz+CsON2aGTKPz*fGLx0*rOZXj9HdNtWe!&6Xk`vjrjIg*vQ}?+7(Cpz;Qszq<_MG{ z;Zd-!xqc6iQRYNttpAlc4jvCru#B6HnUhdXhNr-O=DNRRk{O`P5M@qP=1gTy!yO1u zhi6#QpS3|K*8j?!4F{X++9NYmnc>O|Lq7-7|C#eF~AUa zo-%KvzXR$2%z}2Ah3JdmV)(wf?pZhUp)wU^K2j#B%*V<^l=*}V{htZ39JaiBuaSwO z(El0wKa()my+_ETlxaQWr^(R&nJmjW%lOeNpcG*Vmd*9^yfyj1Ql_R%tK{kbOoL1S zo0jz3`3&WA_yzpZT-V;2ua#M<%s1%Y!tdbsmhtC^{?9B!{}KLVuAh6qDBDk&UzKeY z-EYdaig&rPt0?okGJh%a2l*B7Pq@<7^+)kH%0KX5_@BA%|3%HNs_YudTK_96*a5C? z8F#g2t^bu>3$6`2;_lD#y2@^%?EjSAP}%iR)`y+o1}*wy%x;9TG3*SxnCnIvVE03SlPpsJp}hq*c%>Z zNxvt3P>z5{!lTS}GdX*-vL`5e4EnL~IC#8e{GObMauPflo?@=McVzo3dxNqAl)YHl zQ}kplQg$H8)8QHLOk2xulm5@1jXoF-Y3B}8c7(F@fA(D5^WbpHxNn`Z^ndmO z^b6rdxI40ZiL#@Vy;Rwe%3g+YIlKa1*<#zwq5rd2qhAB*fA=>lve%(pZ+SmsZ&Y@Y zvZIx~Q`s@f-m2_PWNwDHz_FJ1M>-DWHh4R{!(2alcPV?Hvg6V3hWEgGE#t1=>;#mF z@P7D!x&Hi4R(86wQ?c66&o`g@qr{Oa#wjIlJ zDzz%&c@<7pc7}3aDEoqPdn)^)vRP$kb~yfhWnWTufwC_vJ4e}BY~dC7DtryjZn5p? zURQR$vUAbr!8hQWmhofw7RuX@{?A(f`-aTEr))^sh01=Y>>@IYq4mGAA6U{~cORjA z4C()@^}qj(l5AMngt8IbD5U?ham)BEB+*ll{?A(f`##L(l>JxPys}G`EhxK0*`l&F zWlQACumY>?)~cg4U;vxu`eXl0*{_xT9Q_OUCH%@VewKcN@-6%hevdnvHq9Mmht2BpK@K4TSd8blv`D~ zHI!S;k~zT+aCOVOqs!6%xwX*Oh8@jy_x;?u%59+B|IpWi>%&f#aaTufLlpWyw=v6| z&Gp;gM7iyi+f=!&l-mqnl)FQ@y_FlN+&;=3socKG9jx4b%Joo={?Bz|t?uxEcI);;IS}@O z2bt@x>)avA^;Ygslp^k7@Nn1%9?@dko*bpz@rZquJDP=K;IZ(y7X7DWxf7J@r`(C? zC&829DVFgg+#h8CJQbd1u6ypvovz&F%AKLydCHxs+z{mkkvR*}|2gY_|1E!RDEcsX z4m{UfHv@CSmAgo}5$N=P?gExCw2Zqi zhSylq{k%bL6v}nb`d_&l%ymEYog1y(Smnl`)Bm}fS-!p^CyOo=$+&#GW!u#Na7X9^=yC3BNI0;TR*WC+p4=VSla#PVCg4X}a zJz^R6E1i%W}v(PUxYJp-C28C zx!KCiLVpF)|GC#J<6mnI`s;8moM*1z&o`BeD>q-c50raLx%ZTNo6I}#UAVyV{t8`) zvIs7Q@0;uHv$+qI3n}*z`p57S_^D<5D~3@bFbZSlx=*lk3FXSlC6&u5m%>fM49r^6 zH&Py@0NwRy{ogh#D#``QRdH*u4jY#7Bhy4#0zZSFo9ligqA&st024{(`n!OxSQP=1ELz+cUE|FchSxpFI&`yKrcxB~uZ z8Q(d7q5KX1f&ZH8ey=~jit=kIzpCD(s z`rmg~emmuNQhs~%9pH}8`oHZJcShL-(*OD0%ys`mM1BwDdnmuB^7|>j7n!}`K5$=4 zx~|CYkJ1fxhXy*Dt`Ky$_oXi#QN;uN;?r#y~uSU5BUJFN=>+S{l>y^Jr`5Vx0 zgrngY%ec={@;9U00>{Ez&2>LLn7>W=iOS!u{N2jmfqN&s3y!y>YmfXrDD;2+K9(n# z>(9vj%0H<51L%|BWH`k#ekM#sc?doX>3=`d9#j5z<)44f1v#PrucFDkjzK$V`%;F@8b%Ev%-(nkvXL zg${6axQ1oih!xgCSsQkQ*8l#AuJAt;`v-dzkCKUa*UW_rP%eZQ!HdoHXY*1Ou2bPM6|Pc&{x4iX=1Mryl74Q` z{{{NLa4qgAbKO-|xL$>uRG|M0^nYPAnK72}=k8_{`oBQ`7wCUKp0}y+mEL6{qNr~6|DbNcosefpEuVZ^$RM@QsG7PneZj}vSs|< zzJl^9d=1Vv*Kgr<6|ySKRpA2_=Bey5RamUT0^IlDLb%8> z?irv!|N9pDP=%-pAE^*l;bW4Yz)xYw*77qUV#|K5mM9geXpLKuJpErNvs|&fKZ;trbsH*tu0lYj370_Y|F--Ww(MW)D;1Wh@U;p{ zRrrSFx9~goy(Rtl|6t3kh4rHfKm9*Ng8|49TDI)A zQ|zeX`YNtNW?lF{xSnO)bzSUa%RaxMiaV&dk&0WWxUq_xso0r(7q|)B)bj2pe~O#i zvR`*g6}MAyD>7TdZQ!<+aidq<-j;oSM-}&0v8#%^skjr#o#8HUS4+BCUECeT`d`I8 z;a=vt^IqIX#r;&Y{`U=2+@B2nU+m8E0qycVRlGpO166DlZ!Z;(Qt==a4^#1Al83-U zVefWp(f`Fh=+^%#9%-(7M^Nmm;_)gTjeZO~79M9Af9&*s@kI2K;K{gomiwuAwu=2# zJYB^BD5t{H;J_B!j`s|dGvOe3mbvbIL~*c+=c+gaeJC6T&#{ajPx`+&9Nqd~#q-T| zfAy$%p^De2c#(=DRlHcmD^$FM%%$)$c)8{M_+Qy>`6}G2O>v(f6|Yrstcs&l9IfJY zxYxrQ;Ek4achce*l$+qq@D_93)ls}v#XD6ThkhHp9o}IX_f$}%|BK_%?}qo7>qq83 zm5xwxf{I_LI8nv-RJ>os87e-Y;xrW}srZnJ^nY;*>stS-IMue`J{2iGjPeM46h3CI z`^2O8xQb7!I34{7_#~wN{Z;%7%Cqn}_;^&ia8a_ zD!QwqK)wh|mh>~Zf>MPwSU1;?Lx4j67wP}vXDFXr#_#!;Dz%F4D;57y@oN=-QSloU ze^BvTlJtM^dzP2lT7JvRP=16z!Jpf?t^Qx3;&157;qUMdGCb`R|3p~{|AK#;d!ZZW ze^qL={eLQTP-zu&ORK`wpe*UyzC{0*)<9nqu4S&<&r(N~)>mmA^mXC?;ChyEGojQ8 zWdpb&+{j#aRhBxdw1-MvRN79ZO;p-arA^6f1~-RWSl;i?Rw!G;ZQ!=%`q$cCrJYsU z0ewf<74Bpi_sme*1!Y&b8{FMocNLfRRH>&*d#SX)N_*q(1NVjdS<)YSH-A(xobmREhpC zT~6`}c%|jteXw*DiuJ!r*T8Gdbx#_l>r@(}68&Gg0ry5Y+A@B=-GoB_mu_Ksths(~ z$Eh?yrQ1{*uM+)Vx`WJ}(E8v19hlPHDEGj7;eF=1=giVXm8Ph4Kl%f3614vJEmV3C zWh#6KK5VZ0zr0J2suWV`F_q@1G)<)$Dm|{!(<)6TN&lCgWcevu%U>POpgard|I+jA z+!s`urP7PIGvQ0{Wy`p3EWLvADtryjHrLPj*HwB?rMW7-rP4gyH{hFaz9s#Y_%_Nr z@Ljl|ox4z_4^>)(z8KO=r4KCQ?(8M&f0aIl^nc0vzis`0Zm#RA z@|r5ItMXdtYr~Fk9m}}y5X>5j3y z8Or8x3%I4Z1L=_R)+pPU;?8e*JC%E?yuHeMs=R~ByQsV)nXb_KU*(-G@AqU^l-=O& za1V3+*7j0)f0g$}-v{ms>3=u!UL`Dvwk7E|qU1b342P-f4Mv{g%h0+zs!6_nPaE zdVMU~Z6S=HRi zYEZC4i+;>2YoM$N*Me)C>&BmQlR2isBfAj(HRCtPD&zR%M&@D|Gq8OHLha2&i1-rl0W2UYG= zWx6VNsWMrW@v2Nv;RZ_TVn1NYK z`k9kQDZnBuwR0<~1gccgYmol0G%Vxyq=~)+eg;1`*N^{~s{F0WSE~H1%GataRplEp z-@@FRJ{Z%CES;!R7FG%ed!<$_kV};Y#?Ix$gc_`A5~Y zRQXp`sq&w>)m7lCa5YQ1k*Qk$tGYT|1FmVVyQZpZtGb@59nsf;>%#w8#_dVf`d`&f za09rZx$Z1iH&%7Hs-0EsrD_*dcTjZ`Rku}jQ&qQ8bu;pt!!6*Jwyx{C>eeXM|80A_ z9m@8mxRI~!sOsLTc2#vZRd>SO8SVmiwWL4N-BI>{d&0fUb-!~_-AC2#s_u)vAKV{y zvy6YO15kRvp720(-QWGF9;9l2RS#D6XjKnUwU4TYlIaZ(gNIw*o#m?azp6*VqhQ~5 z?lG#KsOquk$HC*_3GFf`p;-T`dJ61kuKW3!>Ht-TsCufZXR2!buj)W}Iy}RY?pdok z2<0qzHXMw*qtR9zs_HNn&VlE`^IB{>QzKNpU)A$fy-C#zRJ}^o3st>L)r&}83@?F~ zw%9fTm!n((uY@Db_2=tqRj*go`d`&+;V5{WW&9br0p&(G8jdm7&%K*fy&druRmZY$ zD;x)JYtc7<^$u0I}vtNO62 zQ^?T&)u}8$ME(<&AAyg;$KbRUeLqyEtNM(pPoO^upMpsvoHOsj45c?njXRuiD7?Zz`)H^e~LT zsJXs#;;Lp;O`s=X3Z^aN&wdsq2lKFCuDf?vOR6?iEvwp4wSw!WI{ja@{%<>?z?S`$ zvP9LdRQ-(n=kN>oWs7aI`fHSL;J5HQb0_`B@>12L>JO@}P<5HAzpDBp`cLp@_)Ckv z$*aGiEQi0tKg{*x@TaP+l3$7b7yKLkV;SEwyl!n3(`&23)y#FHRO_JH`l_w2T1VB^ zz+Drr1=qHu+fHpAly#x?ziR85>z-h1omA_r+6L&>|Eg^SH@1x5LKl=x;HGdhbKM!K zZK2vxs%@#-UaD=S+AgYXt=bN%Z9{TfxEk4;*JDbb@WXC^uRc$vG zc87aF>wo{VyS2Sl>!sR0s&!XwUtIdXwm-|=Ea~^~0F)lECp^$xKavNjc9?1hqaOn4 z|5|U$xNEj{IC>v=1U%AQ_jFq8tJ+}Ij#jO|YR9N{qH4#IISw8VPq4fn&y!G2hV*}} zpSkWCqc%XbGgLbj_cS;Vo^Bb}8?`f02Enu7+2;B!3{mYO)rP7zT(x1i=fHE}d6slf zkF^mf=fex&h35Kmbg^nzsCEhZrSLL%IT^Q2`oA_3{VI61xqfV~RqdJ8J1$mjlxo+h zcCTvJt2S1(8&n&u+KrZU&xExxta}r@8Qx;9>#o|Zs@OWQ zEWc*1zl!Im_NHpDqtAu&;2W0l=XyR0{a<^V<#){WBi!o$PgQI6{|Blq#9agz!}l%e z_vAyAkKo6U{`Y4*q*`3HFnR<=VXVcrt0{q!gejOd*Y8PIwa-+`sa8`huUb*HLOZua zz6>j{YA(IXKkKSBSO{PfE@`pt)jwBlnQC9C_N{7P;(i6chTmAyJsZ@%L-`&qg+G|< zzU`|0i1L#u?#Zq8i|R8~`&IShRQpZ!EmT{sdaI~^SM6Wb{!s02)mE_9pKvAo%eLUp z5&h3NVEw21Dz;Ex6|M%=qMvE?)m87L`WmXQqxzb-Yr(Z)M@zb^qrNW6|KNIX{dVpK zs&`SH{;zL@yD{u+8TYMpo&K+HioO}#++26o>RYP5zv^45zKiNxtGHqqn=K4K3O!cEwKb%Y-cm$;X{n++JIT{`Vk8QET zAUB@JtA3;EC#Zg&>L;pxhUzD&K0x)8NuC1x!Tz?E`|YYa{a>g5>-2w}{`Y%zrs_jf zAH-T`LF<3j2iq3>85xQ)44wneHP_ui>cdsPLiG``bhMvp!L7%*I35y$taZT;PvnZbN#W5R(-PSV^qIO^_x^5r~1ug zZh>Rrt(JFBs&)FmPXE`f|5d-!Tz99gk5_$y>UX2x1Mh|RS;imxM3npC18|bL{&=UT z{)Fles{W|z^nd*!G7rN?Ea{KyF_dZ0`d{_w=K5Ljr0UP9{uKJt@EQ25W&GYgk1_+k z0ADoMy>qF*q{iB+zpQ#i^;xQasQN3azoq)Cs?SyZHS)9J9QeAe>)wOc>HoU*zv^$o z`R2OM8R~DVzEJgd(BFj%;Cq&F-!at}p)7{)!w<~$XYC`^ld6BLdPMb4a6g417`CLl z-_@fiF&Kx||84u3Qa!JF8a)HEFlQM*&IObrEWxt5ewR+o~SN${9>Hm5_ zvI&=1-jC|%C|^MOzy6iEgU>+uM)e<5|CVL?zy3YTOD*G%Xc@|n@F)1Qxqg3sRsCPp zTmAp1>dSF|hkw8o?UE}|{(^tQf6Vnq{ht~g)L6yz#;R~ND9gC}MPqf8HQ<_Xt#)ol zH4ao`9W}OBV_h{iQR9DVY^cV1B-e+X;0Csqd))^8-`E(vGwjmN-BgXO)S&+xo8xW) zx3rAktF2MCf!o6E%ymykjUCk3ON|}X*j0_LxI4j};VzbR|DSb({%`D#z6YfL-5hT0 ztwuLB_Cenl?g#g8(ci%v-BAvJJz!6B-5hT8Qlp<52dU9ljf2%VT#ZA>SpTch8y;qP z*F23rC`Ul+e>ILW*Kh4;HBM0D81!S|aqxJ{xM!!vi6|$*li?}mx|!4Huf||C2B>j{ z8mHo(1_#2^E$O~nY@CTQ2%ZJcHrLJ1#t=2mQ)4LlFnA6;*D|ho8pBaW!1Lh+=K4Lk zNI#sa#>HB)OpQyl)nSvT+HHsulmUQ>HMg^s6ioXWy zYP9BOLyaYB1h`Fe{Z;cBiuHfn8TnF;Z`Ak-{cF?xIi>#_*8lz!o5oTFt;+gA!Rl(X zE{Z?Z_)(4D)%Zz`U)8YwSL2s<`QK2Mo8n*n50n+AxKHUDE7kZ{4f? zg4GnPVtTOZ|JMWSe+3=dDQhU`tYA$A>nT`E!8!`oCezU}?)(PpqWsSkcfNx46>O-W z6FU9xlk|UJ{qJW{&_%&k3N}%&xq?l}Z)UE0eh%pWU`tb6GY4BM*iOMVB)2u)9Z|47 z$_}RZ*XpX^a0NRl*iXUE3ieX4i-O%1>`HPsOS<_M(EkDb&%3kMc~P*pf_+F@|F^x$ z{t9|2=%%2Dg6_BnnCs4L&=ciAQ~W+0q~K5m2csWix@*y(H_BnAxT`7XqoALHBNQB` z;7A2WD>#ZwU(2|;8qoj2v8MP}JYK;`3Qizt{qKJ>H=zH6Q%rH49Q0Rkrh)+q1}dQc zgVW6Q=gazE!5OCb@f@UJumbu&INNmhJ$o>Oa}+FAaIS)B3eHn-i-O?_u2e8W z!KDh$S8$O6>wg6o+FI^@7hH^TNjv2-l*{22rn~Dd7^&cT1y?D!R>9S{*R*p-q0s++ z%Qq+(qrm!K!RU6$n^5R~e~e=l+^^tP1>+TrQ*eiZ+sNE*Yxyy^{#S69DgK<^t>8Wd z_n_Zvx<3~aP$rt(4=b3Y;6VkGai^H;equkEit<4u(Lrug&qwt@u;-a&uYbbnr~{}n7W zg?B@3GxL1~zbW`YLCgJ6K}^9%3PP<&HOZr#*TS2Svt^XDLYq}eO<|?K%>3_G+O{uwN z>%EMc9n@SMcMZ$C?KIa?a~(C;M(=34yVo@7|K|TpaZe-7_0`-|%}#1s)vLLInj5mP zk!ARaQ~udm%`Pl#V!FF3o13Y*t(u#wxs{sqf0O?AueCLK>wo{Ay1AX2JE}?lH|c-B z4_!&_M3R})+(pfmYVNA$18VN3<}fvPSMxYE_fYd7HTP7ro0@y6xv!dgv##~Ozm}W( zq3myp-_P!9_Ehr#^d6@BF|__yvsXLiU^S0W^AI%;Q}a+<>;Ja=;V6CDDMzY#w3_sP zv#;sy-q)o6o5z~s_u+UoPgnBKM z$Ukg(znw=>9y7%?YV&b5pHy=?`V*%6`9S|SpEkvx>u1$`NzLcfd_m3U$;JaxFG5*tiXWv9)cnx))6UUHYJRHb$7DWfw^j%xY>Gc4Q8kyS`F~8E zb-Yy7|GmKlb}I(hih*DNDyT>aDh389c3=mh7+@ocffyim5MmdKf{Ivx0T?LO$6&g< zLFGH|XYc#_-G83fX03J3oY-fbGjr!&mTA>Wty->CKWNprWWIy+zn>v1I6FV0|72_M z+x)Xu{i#*IXw~mp^(*dg=K6E-Ka@XAad+5Ne>MLMj#mARPXGJ$2em4zRUxfPYE@XP zVprPom! zrug}=MuFz_^^XGkYt_FBG^_PL1vb&DwF<1OKpO?5KwDcXu#PR|=1IVw{}pI&iu;=| zf%O#FP=WQ)H!$5DpTI^a*8eTarV4aWU^4}_RA6&lp8ws^4p{#yU^fMS`~%ydSpO@q zo#}2q1Uf3PrvjZ6*tt1Z71%+69m(uu8FvQ^?4rQ#3hat*{qOHSfjv+RHZWnX?R&{NzP=Rjf`JUf=))hAMEN0{s+dZbNScdMI$P0zF9{)M^dZ z{|fXn#hvTGp$ha-;4t*VO?Pb*I0A+KcTX3A{t6tezyJjXDKHTCNXz>zAB=L8Den0s zaEt=SDKG^6Skv7**1+*7*8eTXr@2$-DsYklBNRAUf#C{R|0^)eGJZQxMLEqBe@;(V z;4B5`{{a2(?xz9zKX8sE{qa9fflCxPUx5o1xPbMHG}j;1i%>3ZrCh2&^8=sD&@VUL zZv*`wxT=+MwE{0IFj|586u3r#TNSugfg2PU!?M>w`rmK!jSAePz*zKgwjO^5Z$`NV zWhLX=6u47?+d1QRpp0+jPEcT?0(YU`-AcFTe+BL}#lPbH3OuR6Bn74@@PGmjDKMFg z^?%ELJ&f{*Deg%xFjaxa6nGSUn(6-BS^q2WL@VVf1!gGlv;xm5@C>f?f6E+r9%Xtf zWu^kN6_|zog6ZyEN#I44mr!~zeno-B3cRYo`wG0Kz&i@OuE1Lgyn*|sCH;AM8)c3u z{&>FItOy0>qQ8gkj_N!G7Ai1bfsYih{#W2bbNzZ2ptS1$z$XfPuE3}0pIOq+s4q|! znc|Q05(QQ&@TCIZD)5y8OBMK<%r}Zwl>gvbW3Y|6?l=e6QE)v4h29RfhwEC#H9(O54{m_I zA+-MYMX~fp!I*tdbU?^Cj~p=c7i*= z9WCSLNpNSBT_F7*r2pO75ALDhfeLn3a9;v@D!3Pez2QEvOOyZqC;P#!3U))c{#S5+ zcz|W5^k>{%!Cnk{DA<$1LGWN`{qMhR66~$u5egoPei&q?1^ZaWb$GBZdOzsaKfqi! zmx4zsc!h$46db1DU9pw%<9^PrLpIvt;_>h8kD|o+x6LIf>_rm)u>CeI>ln3Bs zNdNomwZ$SFrXWmAc1K)w~HrcX< z_Z0k8!S@yXNWpoy^Wg{ZLrc1QP;ddt$8aJ1#9Y_O!Os+2qTuJ~U%*9hv1Q!*l;D>r zU%{{8H|Dzj4=z)%IVYDZ_^X27D)^&>t-wOVT{+H=~o~%+ZqF?|$2tzR3Dr5bxU<}4#!d$=aDTO*Jm{v#%W)!R| zm{qW(V2)%S7GTkqa=#%SETdFl71qr4S4Ts^{}fz}ZvC&|Kk#46_&r){N~jHN3)eB% zJ&}gmDYThF?G@TkA?tsI)`RQA4J_&YdR1s6l#Ssga8q;LUrh;Zu22Vswm{z!ZUwit zj5~&*ZBVv_+rjP4b^8+Pq)<17c2HjA_CW6p_k?>{ z#{D!fv=55)ze4-MuIBnz+)tt23hl2@PlXP^JrH(>JuK<&ry=@3bTIlMu$Q^+dz+y{ z73!-H{U16Uw+}qRGVWbos2@syH~q{FMxkK} z4N+*QLdUYyaghEG(f{r~5;_t6BzQ7BrAhzZIW%0MGZZ=%{WLfNo^Ba8KSO7toCVK@ z=a}ohr4~9*p(_+RU!jW?x&U`1yb#j=u1P|dpj-+sgRcK4FuqcuYZSVQ@hC|DhekKY ze#VBbMIQsNgVz7PVL~@5^q@jx6`G*XIE8Lgi2e`J|DjvR-)ebx1%>GU&>iUG;hpCC zt-VX3`xLqxeImRE-rFj3KguNd0Gw>DyS_pXDfE;=4=XfHp+|71z^U+2OZqwR7|P@D z3HYSBuJ=MuD>Pl9XV9O8&%x&{|BLDQ0P7M_u)J^-!krVl92VkLLb2e@MClR z-2OzNZxs4ep~VV)hWk1E0xq(oyLW_^pnM6xf?u2KkMmN6zE@}&`f~U!wEp*>YKDG5 zSpk29Kbh;V_n#HYDD;a$L4|%*=ud^{|B&^+LjQw*w95a5@;6)s1LpcGE~HRgp)h&` zMq$h{?rA5KKuN+BOyjz1A*)bBp`1cxh4Q!sScD}@`XfXChpOl`SU1<7_tgrmRcHGx5Qn^cx#2XSGWV?ZQ!<0IP`#0J0S_dk8w8GsL?xS!Ig?lO7 zlgvTzV0eh-{VVoHITRiS4>#Ane+(a?@IZz8qW6RS;Q-6H84^AcWe^+;k22RE+hY_S zrtlDjhbnw5?s4#V*sA}-C!(ALPll&7*>d)WD}0*5r?yf?kg@((_zZZaxqiRSR`>yh z&r$e#h0j&^a)r-R_#%bRCwT!J2`{vzTvvoIM!5vi|6%KY|D+MVLgCR0Ux|Aar2oTL zTgJccHR#vEG0^(IKqmanW4&t?zJI;fBH$^eU{ux@G*n zuSQt|>HqM*=DKe`hSw^xp(1S*X|G6I%S6_Jg6%Bnnl`d7%6f2pxPiIuxJ5QX+1M2K z4Z6stiu6%rGe!1PWOGG2DYAtk+bFUn$*thlu!Ak-ei9wo7G*oQJ?v<%f0Z2+*;SDp z(RYG7!(A-n&QWAHl-=PTu(P>-4SOllU6H*N>88j&xLx4Bu&X79yQTI+vHn-&0C=Fe z?s+59Ly=yJ^h7@h(*Kb|EaSJNH~OLQFi8Kq^Ab5ik>QH;Rb+@F{S+CbNPjW|;6Qj} zlm1EF1@K!o8XCEsBg+;IP7 zHC2%(6nPYP8l?Xtk6XsS)|2Q@!Kb11f6Li?PLVehd0vs3icH6yVXpfLeq@#+FDvo_ z`fT_jwEk~7&aa@n3SWb-o9k!Gn~Hp($XklcRpf2lIq)6$t|k3Ee-Gt-I1kP@*RSV8 zMLtpFBlHFEW4O>Vehr_Zdk#!iucI z4Zt7_S<7;oh!6-g_SYNc5JE0Tpdm^as7UqwYXP^6^De~Oe9X(&=5Q-w8H zx4gfaR->$e|Gi zGZZ~i(V>bCQgn!-gUK8PkA}xs-d#b_V^NNS^ndgObKO~vo~Y<>MNhJ+@%waT1| zavB@~PdC?nP98l|(UFRtrRe#Jo{f7Br2nJmS<=n+=mj=*b2WOQqL(Rp5y^|;CGb+q z`26K4SHLUbRju5s6@5<8(Td)q=rxMoqUg1X-l*splGnlO;SIKw-`cS#Siujq6|UsH63qAw~slgung z|3_!H%D;sEGNk{bubS(x(AO26qv#vBZ^E~r^}qiKPV^m=ci~+4p1FRH<|+EQqVpB~ zSkVt~KZGB_1(x*ZXd%ic@KgAixqdxgDEgJ6i_jOtCGbnjxSwi8>Hp|A=u6=;bN#jU ztzumi{Z7&U6#ZV&n4&)@`iG(`6#YffAIbj&SHhodS-)++qWlJbhj!VvY}=oT1{M7a z{cpGm1}x*7B!m)%5g0Ys&%n5%B}Eg8W))51reGRoEa~TA4#oOk(E==*``8|g%ZfG> ztuU^_8mu?javWBptbzYP*Z=1;UaQzvinUQ}BgNV(wyt9Ie@y1a+QIfs`hAbBhq6B0 z0B(qTGvkdF+d{ET7}Ni;%@}WP8Fyr2TiST$f9P8)wzFa#6ziziHYnS|?cnxJ`p;=& zoltgw^nYw8bKSd`*e;57R%}T726YKFSs|{$6PnxV*4s~hGJb68>m<} z#d;~WpJF`}+n?kC@IctzmU8DY))VC*crZM~T=&UmthZuED0V3NVeoL+$1?tP`=a!N z{ow%IX^f9lY^Y*`6dR)0V3eca(eRii{Znh~Sd`=7@sR#^vnY0=V#5`q|6?cP(*Lnx z&9T38#ZE;(4UT}Po9p-VOvSEM>@3ADQS5BRE>P?oGUvkcpv@>hZ(}1-E`%4si(9#u zDt47(m!V${uYgy!%8Wv}8jgn7nCtFnu`!C>rr33gjZ^G;+#BGHaBQpOO(<@D-op4+ zbNy_*U9r0qy90eZyc15aj6ZsJqfCVNzHpYU=x@V0=DN=%V(%(8 zU$MF9@4@%sJj=LG0Ae4Ydu_N&?dVG3)=9Ey*apgJN05+bh=m{?BT~ z@`_ayE08b35-i(N?tN>lic*7h*f7`KD`RUEZNk1;9ASLEswV~CB6<6Y=_IW z6JJ;HEfil*@r@NGKiD4*u#CF~<42+lf`g&;f6I0rqxj2;4^e!a;>Rj}f#Sz0ewyOP zD}J)#Cy*ZsPlPAgvTi=aPeB<5hr?6Nb?+wPBNRVd@zc@IfM>$9EaQISAE*E0=c1nn z&o|fa`$)w{DSn~imnnV`?#1vDc&R1b&!^(_fBXt`>wm?sGS^*|@v9ZTPVv#`*T8Gx z7|Zyry&mNTcq1HZu3y7Via(D{lR-_-*iZcn5j6hC5Lvz`NkxxK6o8 z@n*^2i+&%xA5LnOnT+xvd-w6KZ)`bd>TGu zuIt12bBfPW{CV{0a0Z-d8NY@XP-epy;Y+x7rWAig@$VIXRq+oLe@*fC6@OjvIf}o5 z`zCw~zTITYnSBT4T{suMXRdp4j?Y7xZ;JbzB>th|ixvM!@lO?Bfcr6A2tTo;KU1Hf zd=9^Wi_G8Nbb8ln9K%n7RJ!Bor?z zo>V-icnUWSGcapOzn(k_{U4|Q<0W(bajPi4TJb8G8l?Z@4a@j_UxWS+r2pgA|9%aL zHcGsuL|Y}!RAL<^x+)wiBR6C0sy3^#$Bn(MYO zvAGf*l-L4&OSl!>+A{7rDzOd9wvhf$Y;Uf+HzhhLv8xh0;O+=_f;+=qn)FX}iQSag zO9|_LCH8=w;hvUpKUYocjj|8y0{1o7-ANPOlsHm}{gmjf#QsY3RN??K2g2^Khvog2 zAB1u+JOuVK*B$x9p-S{s;xP2XVIO#eW!$_?^h41kwEp*wD zS1NIi66Y&%E}8Qza>6@3FjJ|9vR;!%6S~bN!khRAQOuC8Nao! zp}Y>?fNz@Xep?~&wvx>rn4`ohCEiiuYbD-QVxbaqmH0r3_sG8w=fU~5th-MoK1BHl zE`T4K>$mL_B^D|1DLVb1p#KwJSjNxl#kfo0m+&id{aO1)iIqw$RpNUkmf(oJnC1QUBv6tt1=HrbcNvMS5+x;a==6W0z_@4`-#lfM3arAKx$gdwXeik% z@YPDJRbmb9Kk#4ppC#S9;A9(9l5OESQ0BV7NRVu=Hj4C?`Cpxb0zyKxrLH@E4ihTJ1V)AlG`b{HTe#38@O$g{%9wy|CQ_rJHZ{ybu%Zq zlajkDN&hEz!QB<^W|`~nWlaAkJ2T!B?q#lwhJCH|ejh!#O#1j3=7w=kvWvPF35AHkhsuAe!ND*2?6)6gG-kHaS{+ToH4JQ-8W*~%ymE0Otn{PL#5V5Uk|PiH?WL5o2iXZ=>OCvj5jsc{nl`5bEP^dwS`jKD77W- zR&Zwo_{N~zsYc87bw&gQz$JrA^d7LMxqizJR_ZXN z4ngk)d&5I5tpN*$%tK-?qYAZY#XXL#yplw;r!c&xc@ z{-lmq>SU!(KpzU}|CIHA%WIv2J`4_rr<&`}<_M*(R_b)6E>!9arOs9AOfqM|v*9_G zcP*DX59NG#0UT+rU)x1WU9Qx{==6W;QpT5A#Sm>`QR)Vz zuEiY#uY=cH(p|-=8&Sr>aquQ{Pn^d17Ny23bt~iB;O+2^CR>ioohTFFUGQ#m-Di)f zdz5-#se6@rUa9+(dQ_?Vm3m02NhIn2)MUmF+ERYz(Elm=KQ#q+s=0nvPgCkCrRe|E zJc`HD9SOl=?uag-X%?Df&OPfc(dn z_iOtE(~FCQok$py;3Wc zqW@DX$ovR@vZT9{rs)6FFX+F*-^}&%v-#4il==hxPxu%7+cN&>(f_F+dI*Ni^;bbu z>1UOSDLq)JxYFAyl~B5kQc0yMN~M&_E0t!c49vout-NrrW{x(E7h6xju^ZztS7Rjm&kkJ-vz2 zTPnRN`etx*xP@ihzNEK8*&23$+q81GQ+j`;w^w=(r8_FUv(lZ&>;QL!J6YbnlS*6v zE4?e+4eoBPJ1^$*cbL|(tqlh9)L0s9tj7T>z=^VM=3o@>7$iC zSLtJv9;WmVrH3kgEXm{G@$dv&${!#4KYbGV$?z0&-EZfmhbw)C($@bHBc+hm+s~t&$I-JOt_g^dsiFPkz!jg7km-8FT#^c~0rN($6dXtLHb>kx$r&szPYX~ z)AN=7Lg^2bUa0hkxb%N|0ppJ?>7J|8pPBVH0K>9!Zm1X=K z`v!d}Tn3k$>yPtyN;ix5d!?J(|AW#$E4_lukMJkB((>;9nEnOjSNI$J-CRE#|4=%h z^q=T|!N1`u%ec?t(m|9E48w@I?nyfxQ@W^hv;Q+nCvcN61=FpPSrqGkrSq_0F7Gw? zXG!TYg9@y|T9Yj^q@hf+`c^BmsnTndk<$Mt(^lz!N&W}d8Z&KdDYuWAb!_ae%}hIG zHc+NLnRVfMaDB_T-=NHFh_Vsf7;a*&dveQcrc6g=Hdm&DGF#wo3AchpC#Ar!sw%*-M%3%IvL7H)X8< zmFWWagOlW@IZ6jy)x57nO@5DL_Y`~3=gr4d!oqnMmZE71`jvaALk>K zIYybj${eXoKivLs032vZ_gm_jK`4XaQSfMU{d$HdGgO&l(T{`2!xLI%PDD8g(*K!L z%=O1@xatd)IaQ@?l{roM1C<$}>|$k3S9UvP&QRt9WzJOQer3*5W{fgtD|4wb=O{B$ znR8j^d653kTwrVV+jb%PMet&1{qH|l%ryW0^C)F5N52AI3F&`71FuFI4X=UL|NePC zbDc7`D|5XvHz{)i?v0TC&y2IA`~TN6H>2MIZ-v(X{!^*U9m?FT%y{%W;RJY>W!$F< znTaU(zHiG2QX*?inmIOPM#7c|n<1l$nkDB76zHY)OCJy^8W0 zd>y`Fu0Q^7DKl4@x6$Xoci_90@oRVw<$X90&NtWHYcd}ylThX(WmYJ&K$$O<`B<6H zm03vg6Zk3otkqIqpe%xm;SzJ*CoP$;lv%FK*XZBCrEr;L{FZ-<@*Vsh{?N+(QJKG# z`AM1Ilv#=UGyDZw|NBp0GuHpg{15&Ct^Zr*@ZZXWm05)zfI%3tjJsE6A}CQ9gK=~H zHIh`etuiTPs>-C5DJYX6lZ82$x4fSlMU)bx|1%YH{k*Cv(=7QqZUe4{Ysj3>nEucF z$9SzV+s0gX+_LK^yNR+=c70{r;kJkC!u47uH$d4CZUi?r*UiuDrpj)m>}Kej!!6*J zmT^zBS?hmgJHTz=w&uEdmEB(1QOb5y_84V5DcfDy9hBWm*&UVLP1&8u?+kZ=yS7?( zca%L~XSk=i?kHvVR<@h6^nbPs?!K^VtIU2V`@;j^f#$mBglrFGk5IO!vb~i(2=`!k z2<+7=N&jaLL%04{wvV}fOZqB%q_X|c`$PIaJJ2%zj0{2_43C2Jzw4#!5M|F&_E=?4 zRrWY#Pg0it&z?YXC_J%Af9J}cjAH$->@YYScO~P~;0Sm+JOiHDWXm?6t?Z@Bo}=tY zWzWSu4>G&5^uN1HW-mm)2wn^?Y0|BSe_p2S^;g}qwFop zUaRbl%8ns<9lRdi&}7RI8;fH7uk20mW^>)ARoPpWy;IrS&~Jx#!10!GS7mkr%3bho zIMH0!Y1w;~ovQ48%08&<{kW6h18}k>{dyikc^Ezdrpv-YKOdn)^tvNdJDR(6%L-zd9M*`>;Uuk13GS`NR3 z-?dtU^}n(!;E(X9R_@QrHr-#)e}%un-!0?rJ6ZZa`zQKe@NaYdl^9Sqt!z-)n6e?< zFpR*cCH*n9{#P~ulQ3njKjRr?i^^uvb1)AJmhs24gi?kTST)zZgUi;H+f3Ppa_y8| zt?XK5*O2)K{tN%JygTx_Hm2m-!gZj`b>}qKUbzjGTNmB>U%B<6^?%D6HbU7LZUQ$o z*ELvfbLBcIw}o=sD7PikfOE z>z=i82Pt=`a`b=h5Zqp{w`JV<${mJsIP3$DFxRi4pK`}4*I&88$_>CB2#rj&cRO z5?*DlKbu!8ccXHnmAhWKYjCfHW8ig`^jkvz`{OxQxm%SRN9HDYGrYy}{#f0Hayz8| zbM(JI4il97UAeoIdsn%;m3v0HiOM~q+&#)YpxnJIbsxMRPHM7ck0zr$2p@tEo9ov+ zMY+e7n~MG@oCdA`+uh){>Isx5;ZyKwbKN&)bI&UGvU1NUH%qzaai_x>aHb{Qd*0j& zD6`><(E7jmm#Z1SqTHLxy~_AC_&R)}N&n6$_ZG_Aa1MOOT=!Fn++5|pQ0_hDK2`30 z=DN>qa{p6)9p(N|uB6_tpqGkA?Mr?ml#SsgaMLDzzvVYqzJu~xpl=Dcf?K!BY=g2b+zxJUuDd7Z zJ1M`X@;fNMtMc@JekU?J!(A-t?$P<(Q0V_WXFuQBT)&-rDc@E3y~*qYyTE-d<7R2T z8_Irge|Uhot~c`CRd`+b9?EBw@2UJ$*Plcz!5$5`taE9{dDt{*WS2QW++&v;c3*`kk8@_0+`#xv>W#!*h{uSllRQ^@m*Wl~$4U$V3zXjih zbKpBowru}g7FH`;p<(H#d|119;{N6JDn6E(j5nBH%ztUXy7GQ_HbQu-8T{o>#MMp3LB`fsR|q7ZUi@mn^@BAMPW0P&EXbsOLN^(Dr~L7 z_9}Eh-v-kEh3zckuGT_F^iFUGX#MZccwuK14pw0o74}tOR~7bDf&MS-PI3>}+462S z7WP7+{|oyt?qaUro~|k!s6sb%`oFM0;{#e{x})@fJ>fy-y4EcmqQU?bda2Myh2FS_ z!o%R#mf-2`b#G z!cY}1R^dby&Q#$f6;4&*WRj=AVQ@H0ozIy5FN|P(Iy}Q%_r9`lmI~*qK>ruc!95qA zXBofc^nYO_`i1Z!bNyalqQbQ*T&luVDqMzpIlKa1X-R*k=>Nji=%e8^=8pQF@fa1x zs&F0S>){RX#wJ^4&N!5t;LY$BbNvjzO@(PH+^)j?D%_#M-71VHWBsqf1bCO_-IG{h zBFa7RUU;9merqSG@URLGpihPm!iOy5XBYinn1VhPK5FhiT#1FpRG6W{<0?F(!V|bp z!l&TVmh{K)S(NAC^KiPk?%UdhnJT=b!YuR`;B5G!W!%$p;boLp;H&U8bN!KdL&XbK zcvHpZW&V~5f2r`c3SX))M}-9{yraTA72aj3x$r&szOBLCHw*JoK7b#>kIZ$?V1MQ|}(Vy^FmuT=O^g|AikR)ueHm%?Sx`oHCve~04c%nyuL znCs{2Pb&PT!b?1WcOik9=B%f(jY*EX={YW&BJlqLg46R?PK%TT^iz73wN9OTK}-8m@u= zSkk>;F1T5@*7RZ<*w$Rm5&x8m?HII&>%#S#^zZ(P8>rYz#SK;5RmF`|+(yNXRop_w zO-ODEH-nqoQtr$aw?x?rZVfw_>z+)C+p4&Oirb-Y4?Dt6mT_mKX#KC^PH<p(!0in8gnN;^nejfb3)~lWZPK5M;(jXjP;r0s1K@$MyJh^o^h7xb z9t;mL*KcQU6;D+0P!$KMc$kX)RJ8tAu@5`~_O-mbDvSM52Ec*vNORp!lZ%5@JXXb{ z(2s`4z#*1#%}_iJ<#>1k9BQt+?usX=c$SJMt9Y7=pikGt# z{a?J2@l`DA&e7EyAUY3A(k>|Ndy-rs91n-mc2jFCA{oir~9!7ZtPJvU+b?@Vf z(^Pz2#m7{fq2l8zKBM9jWS)di!KW?n?tMl2zxW*b^KiPkQ{4QSsp3m2&O(0y&W0~q z#-Bm@zexWVU&VdRT-QRyX8+GuvDyFcs`wV}+i(ti$C9p#igQukgYUz6=K8DS0~Hsl z_#yg7Z~^?-GJeK>g7PW+41R8|U;iQ%<0>vz@i!HhsQ9glU#j@EieFjApXF~@YAIX> zm$!1iQ}HJizeoQ8u7E#U#(f%JT#52Cq@|1WzhD3FDn?XnUbd@L{DaJ&@GtmxlPy~k zKncPS44doTEf%9FF;o0mNT}3C#iWWA6;mqaRZNq~K>EL!v%K$<0(udaVA))ECn{D| zT%%$Qy$&02wPoD>uJ{kizwke})?By#Qd^ZaR%soT)>BF5mfAu3zqGC;-KWr{_0czg z8^Vpub^BG?M5QfNqW?>q;cgDMu#9_7E^URfHS7SlG1sqQJ5|=Gw7tp`RqCkHPbzg% z>3WrRQ0Z8ec2udSN;|2vk4ihMw1-N&u!ddXZg6*7n>&Lg`oFX%y7j+Gd$)4CsIQlqr2*&zq4mE?gDm5&mlFM7IvSn+FAXu*J)f73Q|TO)j#p`fN++mvib_LCo(NBZ zCtKd1g<&Ye;i>R6b9sv6pQo#I27@!dTcsOSdQhdY zDos#noJzN;bQ4MXzjO=ZTWu*nH*QCv|4ZW;-`UE&OQri%x*L5Wya(QE8TT`(()}ot z-~({7x$degJ*3i8Dm|>yG?gB~odT!AM=j~M|1p%u;S)}O-hyw#Ip(_G z_bk1u(tMTXqSODS_ZiQ#jO+i>2Phvx`oFZmTz_O1s`Rx=pQyA*CHlYg8OhJ#7nbx_ z&0>@#@JslWx$YUD^o>g2sk9V*8C(v(CF7R*9_0tP0{&>Od&g8-sdBRcepb1SO24R- zRq0oiLMr{H(qAh5PX2%J5BR4oJFOq%zu_tvfWanPwk@nuv*aV_Q5b`9%lPx2L`lIk z%(QZIDpe5kDis(MVF{L-^uJ?Os;aa`r5ZZ@U!wm@t1aV?`9HY-Li)e7)?C+e<+dts zr}8=~Z=$kPUSDPUzueyP<#pkDmUr{5O#hcRMBfN*Y_5C0DsQUtRw~o~<;`)ofLoI3 z!FX#(|ChI6ye;k?jGO(xhsqsQ-dW{NC_BI%;Z9BZtE0RN%C2xXxVyQ2J3Fh~Mddxw z_kw%FeOhJqMd=E=LHge{eE9&C&sF(Am5)}ryUKl3?xAuom3xvr2p$X%Y0}UCGW}mZ z6#X!Gcq{h^l?STa7oE9O?$3CDWn9~rk3<;+2g9Sxbw9x=AEWXxm4~Q2ROMrFkAug< z6D;Z1L;sggLO&UvVy@r2;VPe@@~P;j!4dFu%eYxuJ`?3Ecs4x8+$%dXK2PPVRX$(k z3st@V#rof0zvYWmzFg&t(Jz6QLi*ob?QBC@9(3MB4e6z~esCDO~3%2+rK-qgyyMdk4--->=4ydBen90%RG!RI55kAw!>!gZ1!XFH6izeOwRHJ$m7h_W{x3g? z`xJcIGXBbX7UenkJe+Q>pY1bMenaJ1D!;7q3%Il4i|{2&x}X1+>HjkQUw#eub#q-; zl;2eOU6two^4qv`;5(M_jWHMHJxKqT=e2S_Q2Be6KU8_K${(rxsmcpTehe4FPb}}} z82w-V9Nqd~vK)R3zcbgpGb;a}@*gU%Q27^? zf5iO>u7p2Z($At_QGSEJ!~dD@&5g0Ys{oJ-3S7lq3 z6RNaPIjM3*<&?^KmD40MFbi|GlzW$5rvJ-D^b#za>;4{5xvKISm22pA*nq3a3}O5a z{1^TQ*EZ>Upwd>Aja6AkmGxASxs`UXJzUq4?zyqDKFS7={;zCgt~-yFO;p)Zl}&Ls zgYBe9`xIa9g$(FTsSLF~@dZ71&2f>3a zGt&o|e7hEN%)%B8AYh<*{g7+zu-*L9W4P%ek`f5rO0FBJzj6Z#{a+c&c$~R@4&1ED9je@dek;5U-fkJ!oR#q? z^nYan~oc6V8G!*iwG)UPO5b zz6@V6*L~twc}2x&CbauFBu4{15#P_$U0!GJfCb|4INo z2t%#hh$?wiqN=1+iQ&d!0wyi#x19d3WYDwF`our)RSK$9RVkvEU>Q~{g%ffr|NK3)~dRns%=!=R@JtuZmjA$s;;N1Y}sl%*dDHH>v40b zx<1MVa6?G{yZ=|Qx{0b=s=6uqW^i-3MUyRS*a~H9*a2>1uDe>R+o`&{s@to&ld2tY zJ3;!tYW?rqthzHg{a@Xc@owh2`)qX&RrgV~Gy0xzFSxg5+}W>oLD?5}h26|`bG5p^ zs)JQMK-I%kJy6wyRqalu2kZ$Cvb?*xtB0WUg1zCP=DO~!9>B%X#KD1N#?q?te%20%oP8+r>c6l zs;8+sO4Sjnj#Tw@RnJlN43cL;>wi_xwx!%Bfz@+S&V%Q}3(R#rR=rTw%T&Dx{bFeS zuj-|i@pI{Nlq=ws@G5iNvsU$LRc}&tw5r#udJXQia16Z8l72n(f0h2Pj>R3<%Dq|D zJ5;6rtGD9P|JB=DWyYi52`9k2%=KF`QPpXx-lOXMs@{uxpSga;A??b*8E> zsX7b&1vneNXc<3CUq*Qaz6xJ6*FD`;-%zccs&A_Lr>bwMxO17$ zg>&J1wya$_j`9Uu1Q(m@XX%%!u2A(W zRhO&!HSRZXDO_er_xV-zTa@o0{a^jTT=z4V>W`}as_IX;D@tZA_`Ph3i0>>z)m2 z?N#fl+PbRksM>m}ZK>M&s%@g$1|&Cx8^MijDc5y1`oBj1*EYx9!d&-Bb!{uvwo`3u z^bXMaU$t#53U`CMThi}cXB7IsM*r9L zHrLI!S{K}XO>y(T)=jk|RohRs-m2}dT2IvuAafw>4tuo9AB1u+JOuVK*Kg;cs`XXv zF!aM=A9#diTr<@Aq4b9X;6QWz8V0F$qH2RxJ65%$aF2$^z#*1&pRw1DLpdJO|26CX zmNRmaYNx7pGVUpG7#waHH|uJrp^Sj1!!yivv$S@W>f5MxwrUGhJ4dz2s-3Ia4XT}| z+7+suuiC|`UBFT!;f2up-#OWK=$FCE&GmbFrE1rxX8o_)D0np--70e}${2VZ zyuOutqiT1mHdeJ;RU3zU6TBJTVo86NZ$q*ESM3fs-dsQTCa89=YImXE4JX2TEaN_h zsojTiKb!;~FxNd3)*e)CwrUTl_LOQ5t2RxwN61WpQ{khQ_p|gdl*i!{@JVys-KX}n zYSUGF2A%$|J;&Jkza=vRWhR^jUufmNsM;LWUQ+FK)n3MZ1-=Sjv!p)@Z=k#h--2(O z>yOMks?AgFUG%x|J@~$5-1h@(^HDy4AHt8!^|R<>)zYdhRBfedpQ!eYYM-jMShdec zeh$BYi)<;^W3?qHU&628*XH_dUaH#nsx3ob4!?!pS;o)pA5d1nAK_2ty5Ci){j6F* zwO>^GL$zOVe}lin|5?%>fj?3Hf`7wR=K3=gR4t}j2t5oV(E7inQR65Hn1m^F-F>H) zQEjbiS=Gu|Io0wE3a|)EP5OIct)kj$)vD+Km!v zR`qpNU&k_a!FI5{CEcv9uZOZe+yHK9u6ut`-&pl6RNn-BQ@9!2+%oQel&)`yvK8DK zb}-l7HR{`{ewpgqseY*H+pE5}>K#?zQT0wFcd(@E%=%8M@2>jJ==6VmSH`5Vi^)9OKue$ZW>Rn+sxSu86U;U~dfI|P*yEE=#E_0869;7<` zU#I`;y%2koxtZ}{s-LX-;i?~{dLPvXsD1=`Ur7Jg`&-^`+d%Xq;UGA;m3y@6$E$t} z`Ve?5wEp+AqJ9F(Pb7oruylsTmP$mDy0AGBP{8@%U8GlSN%+Q z7ChTrH&^TDs(zvB=b@huFMuO0{j)vDX>93&r7}dwBejU2?zv?%@8!h9{{x}r+zwXY$E#~_9bDQe-seZfacd32{ z$?@<`IKh(cnX`U3%0ze%yw_a6{r9W>km{4rt^ZY@3?H9)VNfRCE2DpQidt zsz0XsGgyzS{se<3;ZyMGCjFCb{aMv#s!spct^ZY@4rf@#uX7g43vf1k(Ombwxc;*0 z@2dWa>Tjw}|JPq5^E!OPlCC%EZ=t*m=fHQ&9rZoqxvGDlI{jaNA7vh#ZyCSuAEJB& z7r>9rUBp@n2Q{TlL>m|3mfPasOwoKeqIL{V!AeKCV(dq_Ld8XKrV z|2M4v{XRCV|JB&Y6n>uGykD!ai5i=tZ)UoC^~M%zY^TPSYIIP8{%=_S`<7^ILw;LR z+*xRBuf`5)bVToDx?j(ZC_9dNAtFb#7>wiC!8+)SA|L*50 zjeXSUszw*|eJ$zEW}_R*ex|sqpmBg2hp2I&8a>tMj!XZ$v(PvQ%7mZ_4=zsTZnZ^lf3|C{Q8Yio9BJN3+cX#~8DJa8CaWk`Vsv4)OLH{@CfANv`rucJlqZ*Ud7^}uzYK&9k zRyA(oNZ!n{^uK@I+tm0!rp^THs;PbB`|RgF^Z1%VR46k^6jDM64X8vVQD&JU84@DO zluBjDkfdbHluVh2C`wA7N=cM4Lv{A}KhM2Z*Z+Licm1yIx1PPu+H0?U?|sgD-nZHe zkD%B5-@2Ze|5fI{xl>ecm+I)+_@z2Zs?7f?^Pl~2_c2nviyNB%_OsmTy;7Yb)%&D6 zQL1C5I$o;xvu2#unD?I52{aF=vGX%Yst-w(`Crxi-+Fc)W~JUBww}R9rTUaqACu}- zsWSho%zxVt^S?T+uIK4eohj9)+0P91_PjIytFzRY=kw}w;_V^T=cT$qsxL@&zEoe7 z>bp{XNvd;2P|ElKy)?;}?s&7ekE-T+uZ`b_WH1DXf=VG2z zKa}cwwaY}R@3Zv-ZMF0NkyLAe&wQ(XqTZhU&sh1n8r#noQmtjtms0&kstct0wNy3# zrK)$Ut)p5*v$$@rB~o1`Rn32?E>&;RyZRl?ay52VznAKdQe7d{AEc`JFV$7rYLAQg zUuFK=)wouwKTB2fU#jc0(&oS~H0#yaWBgUTv{ZkS>K3W~F4c`v{iF7xQvH*ae`%%7 z>c6G>pH%;$|5v>o+a{XLYV7<}#dDAzk^WV;`w?B>M|JIST6z^d14x(?R-sGp(n&yzY$~NM)7q6{& zM~HVATQ&c;j=3F;=KogHLA;~IJBq%edOPN0XpU85XX7~WdWv_vcwNOiLA;a1>&zPF zznv52zt=_gvLoy!-l^hsXQk%9z23dkXnLrz`}PvApLnN>ccysEe~zV)Fg>`#fEZ$)8E@A7X>g`cq zMsv9uyXvkKZ{WnKxRzyTuzrf0ugmbnV?kbFUh6b$esQ zn94=V|_nH&Kl}(#hgIES~1Scn_(!$Ef))-V`-D*WIf9nj-q|yA}+S{|WDH88F`sdZ# z8GBK@*Ts8DyjR4V&DNK-)sE^_n%C;;=ZN>FcyG|pt*d;C=IuK3u6PT?nHtN8|< z_YKVwHFoBginm<6W%S>vH}?YXe>C5#G5P7O6wecHm3V)M_k(ypi?>?5wc@Q|<&Rov z?gAe3-&?1~zREA+)dGJ#D>tY&cM$J4n%~vf@&75_Ch`6f?;r6tvh{CmHBYdf=D&FV zsj;hcbL}O>+d^NhtMtXM1$7|4h!=|Qh{yc*nEz%}enR*1UERw(pZE|zEk5(#PpLQK z^fRo?sxjA^pBH}{@eAUY#V@i|^WV;ZU!iGGW3Fz0Tk&@ge>?i^)tmAAjc9gMV`jkL zS^NjZZ!CTv@plowo%p+ozrXlR#BU*fQ}K5fzZv(^{NFmlJ!qP%F{{+yQ~Z6z--~{4 z_2ye}{=PK(sWI!#KS2CL#6M8{R^qp0tLDF5d;Y;Rt<{+4VgFF^4->x)eOvWrb@_+W z9HGYiT^IjI@lO`Nz4)EP?;!rs;xqq!=D+z@=X~bBf2{6hM}D06oy9+%y`50!Poz0X zjh)pl;`b20tN5pg-;J%B|Ms(Y|5TdO)YvoLQ~ciI_o6>ty*>e_{!;OW zh(B2TE5yHyt;~OO)%#b{T&4APX08_hTJf);AFAH=GmPfCI&*{gW5mBv{E^}h7yoAQ zHUGsQp*8k=-9mG#8au+<#J@xQ+v!KCxAS}_&1f|y!~MI&A1D6Z;@>C!J#4*KTg`Rq zkEOX^jh*@N;!hNR0{sJZeiF@OH70rdhs6I*{D;M#EB+(m&k}!%_|wFHRQxBze~k5y zYrP%YRGKH%*jai?{2Ag;r?1O@eV;J>fNWUT+8_@9W+ z{P#arZ|CGw?)#Y62I2r&*FbC{tvYy5`TsGD_Oa!u5z{bYsFtf|6`qJ{`>3H*t7qO_*_WC#s5Q%`8>h@OZ*7*KPb>> z{@XMN$`WiN0rNj-P;bs`uq`V!|Lwgd*g?V@C1@nUSP6E-$?r+9lLV(pu(JfMC1@-` za|w2lpjmBBB-mAgChVc9_F&dnuv={*Nw7Qp9_meQ1T7@kUxGa)*hd29f57~|jH@Ep zm-Wnl^NDwGfCL9ga3HPi zUO;e`1Op`KPk*+0v#x@3XwFq*M>t4=OC&f?f(s=$pRLS)+w(;<7i+z_cLbM8aJdA7 z=`T}n)_HIR&6R5GzC$FqMS`m(xIuzzBp4=v=D!5j*41eKOK`m!JHpxmyGerKb!G%> zZmu)8N-$c2krIrOK%f65(EPVQ4GHd`(fqe}jbMxf_eh}6{}SA--p={GH20~o=ly;O zvl5Jx;A;uSOE6o42@*Uh!2=RJBEdun9+Y4b_nNGG*&}_3=3zBVKUU|T zpqZ-1UXRlxm?gne63mcbI$NKvYn@5+j2e@Q!Lt&)Ai;C=&#O1T?G?O8^O73d^UD&v zFTpDkyeYw}63mf6^IwA3wZ`_Q`7goTI`ftU?@FN0{}Q~T-d?%$Xx>v}{$6+RfdrpR z@Sy~sNWlCLKGs${C(QrgGc_i+gZUCHkbuws!I$hu>m^u7>XmL2GFT+RUlJ^qV2uRd zNKmU;BEd2VzGdZ7tu!eed`GifjUCnZ60DM71^r6(Her6CS*>P5mfJr{uwH_-68tOy z^FLUpttO>|Uv%59?F|zAE`jF11p55Hwa-6j{#0Z0VWR}01b<6VmEa!`4pUxGlrO@K&3SAw`UBncgD4HMdGW;hfHQxY=&L*~C3Lzre| zMk~!V73L)DC}Cd0y(BD1*jU1%gxg72lCVL-GV3dK_1n;B{%?J)?Iqk%!X4-v)m839 zv$Goe>bpp|hlIOI*i6DEY;CHoX1#^G(P;i}?OC7yC2T?NS?Bkb@DK_2k?;UE?JJ?? zzl8g1jme_$KnYt(*pmJr_4ar*|0U$}zxif(c&LPjOW20KEqR#Mo8QX_kC3pvgqr^n z9;x13#bF1Uqtw`*kCyN(36GJmn}o+octXuf*h#|USb01vZ{T)k2~U>rL~b+xZ4X^& zx@x68kKH9aUBXi&>>;7%zl5i0>#0Mz-IMI4#@6?iu#bdi(4Sf7`_lBQGyNqTEaBM_ zo-g452?t7e4r}W2KO97Jp6+EZpX{YhJ<$+GqDB4)Y#+tM8X9Uek$R72{r#E{9Ie@D*A$k`EO@$VeLn~5`IPhwN_fcSi;p3ek0*> z371H?OhV>=xU{Y}&Ht@E*IsC)gx|9t&Ht_ASw*AyZ*x0bBjI`pf0S^YglpOQleU^? zr|@T*U)0!B=qQg_2w=XhBT2H^PQZ?kti)uLLx}yYHK9gYUVsj(xlXwd5$u*gO!MP zx+tgKJUK@NiFTBzDA9Hjl_YAAi1{B?>Uv}TN873~D<|5Xz3osl5;dyxJ4v*wL_6yP zf7F<*yJ)L<0*RVPw3|el{}MG*Z)P~s{FjK&|91Q>BsyB6JtaC+qP-+KP@=sh+E1c= zSh=t6Yo67k{b}^3V6Wn+r9=lybP#>3y2{oxho~{vQPf7FBPiQSbQm`d*H&|OqIME> zkVx}iqW0>|S&lUSCF)pLd5lEeBsx~2+6;G+=md$5V-54)&RA!f6Ll|>Hqptoi%X&| z^vr+rn`lvYiB6a36p4CB#Qcw#|K_dAWMzxnhj>Mco)2y z(R_){mS~(r10=dmqH`n~EYZ0VT_n*!iO!d35cfK-#;t4V0-6iem}@+`n1=ZuU8>$5 z<7E zq&4Oa9^FiHiyHGy+Gu2L7!ut^f4h3~jxV}HqI)H}Q=+>h8qL-*+G^+XZkl^o&%0ry z`7hB}@_zNUa=b(@NHjsBCnb77qDLf}DA9uwO=9I_tu%j~AbN=AVKw#`r%3d;M32%x zrr!LU4w2@+L{rt+RX0td8MT?0=qZV&vsLqd>x!){m}ez=hJKcMduE@b;q$*;+b>G= zu0$_MG)JP@61^%B^FMk;_p;~fHSYB~`?-PJZ%Fi(M02_Qrh4<#5xq^r{I|0@PofVc zV*W>({}O$m_4ar_lIT;3KBoUfz4^Ie^cl_PYV63rkT@yPmlFLZ(E^E9NVHI*ZzcLl zqQw$@&H6>`!Cax=&@547vtp@4%OzSy&-^#f^U?okH2=4*tCbS{B+)8~)<~rJFVSjk zwX6C^8qNQ$J+G5!y+q9ai1}~V=LS}4{%@`PU7|puKP383qCX}2TcW>Mvr%j8oG|~R zf7O`p2t}JDs!Ft(m0Q%Ce-SV8XnZv`IYWtSQ6JR~M50(*V@F%fxrp7`OGvEwFEQx3 zlH-)bEhMfr?I3YR;EzcbB*s{ch^bN{BW8C2n44_LTTgiT9HD zK#BL3ct44m|M9+BV^S_={>KNXG4D9ymJ%N7MB=L?zEtANB_7PZF4NxZc$ok3m33x_#6u;%nw89dbKS+v|9F^I z+Ob_P@huYHAn{ES-^lvm+G-Lq9zk=n8k5ZNtrFiZ@ksjH)SI-4N73A&#=h2QiJy{q zjKmWqzDwf!B)+@$!JWkSu<~B5w5xQi#N#EtpMIQrlbP`Zng`U_`I#i~qY_V+_+g13 zWa~rPYUkk*nki~*506PaRpQ6#pHOf6d6H(D8hfPEC4N=nrzL(~;u#Xpl6WR-p3xe6 zmY=10PK`b47bKo7@r(2?ski+z|KnHG*nMA<_-%<_mw2wkb6Ed|wwh__;WZ}iRVkaLE>8e*IwmI ziNBF}fy7@+ypa8WrM;P-#mAce5-+ane~HA)B>t9use0T0cQnh@*sK0~iGP%Mg~UHd zyppY}wAG%S)ii6=*paW5_-BcKqF=|#8@R3cFY$Uc_U!yBu_y6w68|Id?-Ktd@gJ=D zlQo)|5^p5`R%2iBUx_zM{2%=$^)|=0&{XRxeK@YffyA-IAzLGD;Y#t`rVcMo0)K$)3i|Xc^l4N zaN5Ax8%|3&`@q>B4)fpHPivUKaG3wjfoeFSei~syYKOEM!-1%&Hy-_;q-)a zBAl*pPGaTBWS6@7Zg5V8!~Aznsq?3?vIh;5$LR&AvX z9L;|?)0B4P)8Wj7^ECYorJZNyzcWjXJ)-B}yaMNWI4{9@f%TgITU%$-ysWf6yb5Oy zoY&}Iud8JKJ9E|8V`2U~Z>#CPmi6x<`5v5kklM7r2e)<=zmLQLwIBb%`2fy`aQ=Yv z5u7D(K8CXh&L?md!1)x;d^r0259f2G9my9oUn*@@EYt~cnE%e#>g_QuX5}|Zn}OfL zSp#P&oLZmD^apT`=0BX}O1lEThqDUK3i_2wn}I*jtXA?a1LsFLKf_t819N_2EAyZC zI5@w+`4tZH-`Sw8HX(mw#2bHY@EB zRpA71JbJ&bGNg%==DZ{vB+^JEkN^^{`h+O?1cgMBCZ#m9m&hQIM1e(Akhek1|+sag884=R%`gz!;oP9Cw5R{jyka;5{;4AiM{QtHlwd)^C)eUaFkejlY-If?yf_E*|tJP?Vek!Xp; zB}g2EL>DAlA<+?ugONBKiPlK8LE;eZ#r!vOo@h&Rn3A7ABXI;0?U86l&-}MD(}CtF zr5)SRNOVTx7$lBEg8855q^%|=6UVdu1f@N?6KPH&Pge3%EF`)j(GQ7kNc2LYI})cM z!Te90sx|htdT_6vN98|Ekj5n-Z_n%u(8X=OXbQ z5^o~$4ie1&1oPjX@poB2PifEN`#LR&59mKsnkTEo$4D$e;u9nmAn_>@^O5+BHJ>ZZ zJvYJpPcZ+@T`#c^iA6|!#Y*PCo%6*s-ze?tev8BkB$gtv9EoLYW&Yc<_CK2MmG)e( zL}E1(tLT~k=6A{xYiNE{+GG3)ZY@{WA@Ls)KO^x662BnvD-!Ejxj|{i&-_m?|Lr{g ziNxPX{Kd+R%Kp68693Tr%Y6^y_9i4kBsL@AA+d#~s(YplpVz@n!rcyT3T_c@8g345hBaBGnP)do!~8d|=$7C%z%A2PlqQ{A=D)kG8nde1 z?cweMcL%sT!EMC)9hG)G%zwAB8Z#&Eu5g>dZNkc?N;4-e^WWWFjqSNPBoDU*+{tkF zgxe49UT}|vyEoiJ;O+zWAh`R&JpeBA-(~*WSK;%&+fsWo*O%LhuXr%oT4|EmJrwSd zaNEE=9Bx~-@{E{g1NR7;c1m-Nxb5L~gv~m^epVQzz4VU@vGXL#s&0yusy2@E_Ux2IM|A))`cbWfo%rC-y8SYEmYqrv) zsQU^H^WTp7b+{kHodfq>xNpFH3+`Ojys0#K=raG^chuPN%!B&@-1k`dew}CjyC13H zzrq9e6SxcDehPO!+|O9g{I~slLBsqvrnaNI5bjs>Un{3^jk$~A{s#9OxIe&M0{1(e zbN5@gOIf*0Y1hVbxGUiPkDmE&b8IEes=CV6aBES&MlWZV`R}gPRy($JaM#2AnS1?G zw-@u@{Z)-!$-l!5;Qj&kKe&Iw{TuFI+-sxKrt3d6|0?ad*aWu(E(AsI-DKCQHs%zw$LF|Q>BeOo6*$cc~=8XK(39bF|X-a4h6_NGJN^ zl;#>2=D&1SV`tzb$oY_yA$=fSAUz;mA*Vo?|HAw?_XRnXy`84CuhJ9J8`6uO`ESqo z88m0sRrZCPt>Ga3AZM|)e_iVU$Uw+B^yezgJw*o5oTs$2dI4l8>H$^Ixt}V~^-s$W4%8kQ*S^vHtqH)*EStEA5<& z&}kIrzucnUJjKaKBx?tI8&K=;c1Z1F83p+WatCBOeCQ0Oe$OOnZdgi~mmgNB&=D%I%lOc~m9)vssd5EnKD@_{96q-ks_Iy1Kc@pvj z{Zyr$jcGJb)m1(Xc?~iH@&aTgBWL~#^WUDe7a=c0USj2JrR|^jFR!Yx z>+^NUJCHe$Hz9AZey-9yDal(jZ!68SrMwGyA2N^rJ*DmE1DX$&c2pljRzW_2d<*#$ zvJmnatemej?-YdjFALO|XE6B+vKaC;D;L%IZ)lb%?MyC(tb{Cs{15USTbC=% zJ4a#u%L+B-oYw9IwGT1m2k1Ywz8dliWDVpe2=iaoYNegSb?lA#Z!=*%Z%C7=nFcHi2McsoEp z=x`(LdRNu^nhLq&+UTJ^o$ZsS!vE78h{;v zZGi0o=0CQpYu$nMjg;ov#7@92z|QoIm1fSdD@_xnSuJP=v;=ko_6BwbS^#^nrn%C- z`kpj<)$O$pus^Ub{eDV*8yPr&=0K(0_aLAx&e^;2y_8XqCZ(_eOH=p zb>HR@$RDlctZ-BoF!lmjGu0gMj|PIl$Sh8KAUh zhxw0zYV3H<11<#4XXOQT{vw)-m3DqE1+D-F>sMcJ8Cx%By&30~z}3K2^h4-*$H6r; zLzVnK8!!y`7q||16}TRl2;2aS0d53F0>gouft$G32&MT{7R-O#s>XcYh}(cWfZJI) zN@>S=C(UT3UF~-Pg?vw;`sng1pU@iGnb-;Vq>UrP99ELSPZV=YKH&?V4Q7 zO6I@GXM79%1S|zs0?U9}?lJ$dTr2H)Wd37?8uRRmRlpkH2llpFX;%pIA8XavbF>cl z9rzj80Q|!G^-6Px!ml*HDeblP2e1+Nlb+B2)-(U{k9xaG|3k7CdYh1}n)y%ef@D)9ccpKl zG-o;4jAl1hw&wO8NFIe`b0iN!vIUa+Be^G%`yk2uPwuTX=1e8`Wj*uXtfJa@k_RBk z{7<&jR&(tnTOoNEk_RJsD3az?4$;<$yi$_P|72S=_J|Hg@<=3)VE^ruW>qKK({!k- z?1Wd55KmE`k(lKG$P!`8k^`&wrqc_EVhksOF5^FPV_PoBfdbCqUQ zCkN4-M>7AD%zt~2ByS^cSK4F0gNFH^9L?=9N|R&B zyOErPSqEDeXCZpXLLlt^Wx5^N{=)nfs9Z z1nIU&eu~tsNPdRY-bj9qWEIKzNUlNh3nZ5!`6ZHzkX*oi7Ls3)%ztx@Cl}LvLoOk| zRhq0$E<|Lr+iNwbRlfn2S$SJ{t9{(nkPMJY zAQ`eIB4cIBQJVQrximt8Oe#&Dr_x9jkjl_A|5G_`=auIEl4Aa+O7vy2qBJWrwGC3c zBDF12J0i6mTel~7AR8&o%%par*_mui?xM6KX@b-qNHwKzM(#%LuCya*PSb+iliW*b z<~FqtQfDBwFH%P%wI5P#klG)qR!AMd$^*%kWMe0bT4x>Mu zJc4YeH0LYD{7-eDKZ@+AG%F`{3{qW@Iu@zUNOfZCaU}CUb%JhBG_TJ5Po2cplgTbh zJI-!M^+2jS{VC+BH_);$&1K~m3BPL|I}dm%gD=>cI8}&6yrU06;eak zdNp|sIaJBtxkG9gQp1tDj{bV`2J%LwNtM)1G$Y8H$y=0mBqNbphSY6HJ&)AwNKHa& z6jFDy><*;vsiPTf{)5)jF8A^M-KSMK%e3pE!uJr|^ zK1S+Aq~1j8C8SOG|1rhkWgmz<|G z@1|4l(=h*2A9DL6r9IwHkouCcb_@878=sT&$uE?4^)5haF;WZZzap9csYSYNNBa%^ z67pMesnTAj-yxkrYB^FHk*bB{I;6fwYBf?TShAjHNgRRZU79{iEeA=Jh zn`R$!UvfXC?dJfb4@UYx`j+HDWGkgPN9ooyhmePoZItFYGkqA+Ymh!1>9I&3f%HX4 zw?q0gq>n`U1f<&|eGJkaxYto+NAhT;c^*q2OVf!wj%5Cu_gU%ANOwj0MEaA+lgTbh z^C@V$8%=le6!KK1o$Ve-_eZ)X(q|&wi>;@Vy~#6__O<%Z^d?e^yBnTkW4xLrvd4eG^@xT$kj^o`9}IjWNH`wT4eG_|Ah3vNUuYB zBho)3{TtH1uzo$cfn@&MvHec-2l*%Ym(tF_-!%W!ng5V+kluu}kMw4?ZXucfX-~K9 zN(ksfG9qK8={b`?CWVZvCL<)sq|%Hnlcvd#Su&?I=QmS8W)EbF$n1zr37Kt?DYK?R zHjvDJ+Z*#gvpxL|WFw{RZ6{=!AhR=lV{#XASEcQtDNQqSH*$BSc@E4pN2Vn*Es)t4 z8RmaxFV^f$?xVD?#r)6gPk#V;pwgV{%t6Q;icBl|gUQw;^WUtQOdFcE^T%!$YxN6-AvoWSkQO0&{3C($tfGhMjd zRcW54GTo8sMR^J`r*h*ovIp5yY2GVkPDiFMGQH`~AkQTGDD8Oq(VRv0C(o{HJqMX# z$efGJU}Od&b0IQ=SaTl9{LfsV+a|X&7tvo#UP4}~w5#zlWQHJfIsFynmE=`QbEnQ+ zO>+%7l)P4Hd$?Z}KlW)%G$ z@H1a8>9p}?DGsv0bGfI=6nP-uC z9hv8lnT^czY<+=zk$g#M-aBVrrg?>Ym3&QUawanenYWR7gMKdgCi#|<|Lz_#@6fzU z&LiJb+L3&K%yMKtL}no}A0hKOG9R<%6Y^8?Go`ujWaiU+L4HXtP?|eS<||~DAoDf- zB62bLjndBEw=_%1W#o5CJDyr3u0!T~WL6`yf~_mbRpbv!yC&Dr{79}Pe^S~j=x1bp zL*^Iy_2dTfSEcRYcbY#)=6{CyZ%6VsvW<}W2iYVt{~{A3Q_Fu3nN6(UOl~2oO53MT z6ObVpDNT0OHnI+~2{l=l6q5OGk~W({wgK5RvIS%_Y|WB6GOx6iMVb=H{LeD~%?#*E zY=i8!Y~7Az{%3d4ZF4rWJ0jZ>*`1JWj_l6JHbs{CpWTJ^yOK?m=G}JXHERwb4^^7H z&9UK= zpJo1=yH$1w{naG%KRZ;nP5xwuA$uRP*CBfwvezR!0$JvN_D0qZCvQ@kt0Q|e4f8*H zE4N1~?Qz|X>==VdNp?{QojC@>a&+=57C&_6f^WVlY zE&8{~ca(Ni^N^j7?0d+5jO_bt{eb+C{77k!j`^Scl>RgFbEQ2~Um*K6vR~3KAQzHf zDQypnXcm*-kW1=Xmm<3!*=5MCWYc%ZF6YMo$nVJ&N_)OmA-fjYALv(;Ysep!{0kn) z{zS8m{F(ekY4SX~0onhM{T122ko}FVzmtEEOfWn0jWmCg|B(MG?Xhn{)<?i`+TL333Oc_SK$TW8{*^Rgg;|mq#wG^|=h0C7J(b zo#YBMMY2Sem1cyw2IO`?ZX5b-$?eGPm9~dQG&_Cr+gQhvzf@J=iw9oC0+yTh#L%%P{{Lk&L+h$GX4y12M9z?cMnzNQ`joeAd z9fI6Z$Q_E@5y-V+O5)4bxzmyBg50Udb!BTevO9T-(mZwNPNV5T_9S~L?F{!ut{-w|(4R^6 zA^R%rIXa7`Kgs;h4bW}#$yM%LoR8-yI=J$D{*=d=C-@;Ce1S>^FQ~jZrhdcJaR81_X1mAB$@xY*}83ys@jl`JU3eU(S7i+^5Jf|8pO)^<(lAr9I=H(R@zM zC%;hIGrIt}ZzvZc_Z2t3CKr*5l{PDuAh#U3Z|Rqk%gFDP_ALL8hWVdc!R?hwd!#=g z_b+m*k^2p~HOT#p9P>Z7mX$w|>y+mCC-)1@dU6B#tJ1Ew-;w(hxj)p{dH#zv8_B=P zf0T9}{zKkDZWD4oa+}$@g{+dE(vFk)p9|?DGFFiD8$Tvm4g#32MmswLG8^~?QZIx!t=eI|GXXJOFZ$$1$?xZv$&o`#o zh1`{F!d70_`DV!Phx~5H?}_~GY~6!2V{W0_X6EyI(eF*}L+-0I^PJxw`BumuKz|_F zk~~Oh)>Zysn%3kY4EbY`KOFfE$REL)cI1&{d!N;~uCqtpZW3sCqD`3q5~ zo$-s1{{Z=mk)MG4CCJ~3{H4fWi~L~ZuR@;rpTC^_TtQx`G}ml?2+h^xHRMpG`Hk}Y zFyx0Le;qyZKX2B_jcUw0wfs$N9YHex^UQyHEsR8dG@EWi{&sGRBJUvYRN5IHgZzES z-$j2n$^6eV|Ly7>OMgE(jvTMFbNc}D&mun&`6rN{g#07OPiD=7B=bN2a9#Zr`bWvf zNanwtnW@M>jr^1J)5xdD=}LR9XVA+ZC+^*&SJIK%F_M7Be75Uotf4)Kf zW8^9_{$HB^$W7#CrA>w^@)7bLy-x;YsI==m*6o5rCP-Il zo-_(Tp^QQjg&Ybgwx-DpnN^yR6!J6$vPhQdS}Q1Qk3s|eHsrSCc1p7*3p>y>BANe% zopjr*lR{$@u18@P6i!BAR}>CGp$Q86pwJYB<|s7dUb~UIlgxi}_6sd&_9XWr_g0!2 zDC~;v>C<+}>XoEsK6xy=&F!FHn2&Fmug(GR& zlO4#Tl(p}>)>t?ih2v2;hTF%Ioyg;qCP@k>&~zqGB$@wq4!fW*5QVNNoPk0&6ndc0 zoi(SBr;?{B&B`zIr0GSTPWD#X(VmGye-!%A_a*z0XDRJ?&ZZeao6o#X4Cki*AFcO6kth|}Lg}ha1*T!u$x09pDJCt@*qfxjQg)#JZ zk$02#DDB$2k7g`+KRHfmdzgU2V<f_^H={4X&7?U|ZR|1>#+oT;?qoQ1;sC_Ib8>nJ>j!fX_tXASee@FKTgQko}| z!pk(Tkj($WYr1XIU=9jzqwoe>=aS6-!dtp+*WNqy?~?P#_mp;KK0sjs3Lm2I844e< z^<(lA@>8Wfv!Bz2_$X{<>lU&~GXL#WX6A(XUx?TmE6wLr z#RQ5e6kRn%AwedUW+cTlO@?It7jt#31r+x{v54Z1D3(y%7R53vD`W$?jnaG$Q)K=Z zx2NBMY@{@6ptuu?O;FsKzA?EAxvSFLbBj%BnvuJayDQC_FE&T9C5kOj+!w_?*}50G zH@T0}j$}WY{mBDJlmE@ReGrO=qS%Vt2a~PILzH&3ZD`t(hmnUX%~N8r9f}vDcqEEF zP;8H4XB0c2cr1!Xv9cq1GytJo98vr+7YVjmPwXKQcr4Dw8+S;NJ?H2p~Cf3d%A+oKzR;&~{Z!`5@j zf#e{i9qsuv7myc{%zu+V#Y<4U6~#+YycWg5C|-pk^S^jGE3Y80RNCH#&@lgt*Km8N z(&S-r7>dJDypH~Q(#*zh;_Yl5MczT)sWd+w zE;9d%chTQX-lMdu;yx57pg5NPesUZ+zOLp0nu+8ja+9qk@(rb(hc{{7BHt#N|K@&CoQL8^D85JkKKTLp zq0;v7G0i9Br{rf!lcL4>D6T>A3lx{4_$7*qP+Y*8h2&S{*Gk*lVw!JA=6~^9-L~_# z48;{Fe#h43F|2d|4fDU$lG_I<&9RpbMyV}It?8Nnr9-*hMrnRav2+;C z;p7oyJEgg2mD;1!8Kn*=9gEUYZ0$%MO&+7P$KHwNIP!S%1f}`3t#l$v-B3D-{$#QX z*;Q$K=uUGAc`A9D(jH4sls`bJ7s^?bPDklElzO9d6G~^GbOB0dqSOziKHRIX(!5V8 zorTi5DD|g5n;bx%qcrc_OU(b$Ao}yj^Og2>FGOhwN*AGY8A=zk^%C+@aOqF!_kmj^t6A$H>RYCzN)EpG0W}O4I0{BBzs2EA2>T(mX@XBA->- zv-~_t%Tam(rH@g15v4a#dI_c1P@2ukm&sSiSC#gvXa1Mw&@=x_b9LK1Z|SDJJ22}%o5`V^%vQTmLnpOf>+FO>G^nE!S*zCvjU zN?)^P5xJOT{+stBrEh7LlFLZuzdf_H#QPhi?@{_0r4=ZxL1`sxR*^rDtCi;4O{E`c z){;Mw>y+khRr&>`-%(mmzk&Rf{7q?|NK1dv{7L>rZdBSH{y`~1>0gwpDE-IQP2^^B z3oCg&mOL7t49HMvvnWOxC_8G(3DPA+X=bvVq)Cx!GNUvzQ_i702<1G=hoW3Sxe3Ze zl(%JB3FR_3Dr5t>jnd3{c{`MMLV0`o9mq!Hj!JXx$~)6ECYk?b&HvJ<81g@)4|TM;@s(zb{$!nE%ey*drp1gs)QEA>amv2IOG|D4Tz76G@ z*?J3kD>+hWkM4GwQRE#Y^Pm4>4$5Otz7OTQ=UH@qWm<+-^5S7|#`UsWgD1VIde<*)~@=BCHMR_sGpP{?}<trMS-{e2!ze+okn^36* z?`Bk7l((Q9qFiN-NBU%-H1Fuk5lyVDIAlU;)_g@!$>?7L(pKhwCB^Nu(u}8)rOA?{>9EQqXs2q&S-l!aa%08^zm)wusUun)rh527;Nq-R8 zN@-@hwoz$~3iH2mC|lc*ZIvc}Du<)e36&#IISQ3_Y(0`}Pj*n6Yqrvn=4kR5@>r#L z%B>uS%1NjkPtW|XbmsPnO54N9G+oH9WH+Uqfm2Yq0F_fw>4(Z`sPsmK`CsYD%3kE@ zN_%FR|CKZ8`;dK=wzsoTITw}w^k8 zT+G%>$VAVJ@daZirdV8bBC>rrWr%tMc%D6*;2U|mGP+D zM?aRlpB$&O^E`p(0dgWaNonr9l?PFohRQ>zJci1{Y<+~BLOxno`8drJ&@=xl^SJ$<(){G5@&V0<9Ub=?@}Xkq0Zy+%_CSb12z{Y^yY%3^yE(hF8#V1R735LpwBdN5he5=z@m!XgCQC z9nf&R{yP^9N1>r3_dS|q{x=+}(_8z0Lnqc8r_}#E0o`V!f%)HXqSo89aI$W9=PGUJ z%6^#tcE(PjIaO({=!PC>cnJ+X(QpnLdZD2|8cs(;Z*=F1Z8!rBebK=DZ|I|Y*%|A{ ze$G;wck2zz|Aqno$JAXwTT#7l92b354AgVxbaz~AF%YpuL=g}{0Yy=y1!)mb5epNr zFi}xdunRlDz{IYfU|Jy7e3ysn9ruMkzE#q2uWtZMyG=Lnn}oU2FV!k_o2!&Mh=a zp}7i8R_IKHPE_a=g{CMpO`($*Io0&DF`eXO(;wHV3e8k#2Ki~^)P&IKBxjg@p3hR~ zT*9*znni>9?|aWv=t70gC%?e-M?ITlj_F5Uq|o&WU98ZR3SFYmJcTZ04E5jLLqnI7 zTw%IzWkXjfG+&{s$zA=YUWKkDxz6+}bAdvO6uLp7n-sc{-i4-nY7J5UL$_Gs=VY-$ zw<|>b58Y-KXFsh3;4Q8HJW8+`6zIP-u-p4=VJgLJuj_ znm?@2;|e{(Yad1Gzkl~96k4XxljKWH_XHJsisWh2AJ?-Ay{yo3gW;kF7>|HIUOcP_#k@!E||w?E-c6%G_`r|=dEQ~$%% zfA`lz;Sl4g|L(dAM-+}LO#KhXtk>;-nED@1TH?M92&Wa^M&XRYWrec}7Zj%chpGSm z-HU9$WV)IVt|+{v!c~Qv3RC~X)c7L}nyODHW>$Q6*e5S&CDtwf}dnw#g;k^|; zK;eB9?xOI%jNgy(Zcp|n>AF_ZP2uheQ~$#US?=fdU`F;Z`G1%y+)LrZ6+T4aJ_`4y z_fXT_dBc544l~`eQ@EePM=0E%e1PfC`;jCAO@F*cD?CQwK?)C3_!xzcQ}|fM3|?!@ z5R##$-_CG_M=3mle5C1~Ny5jIj5b{z2%n(vWQE5nJVD`c^o}?EeoiErWcvL%QQ@fy zPa!|abU&2~PgD35g{PCBY`VYV37@L)OoeBVQ~%vn96p_7t@n7btuk`SpxseTHu!q5k{Tev`rvDSWfScPM;|!nZ2Ch%t*zf1OhQ z!?#=FYFGG9h3`@LE=JyM`gy)r;Ux;+M}EKQ*WLpp51Q^bPr?r?{J6r@|L~*qK4$te z{)EEI6n>I?spV{}f)OF!evY(sEaO z!yhn)`tQ%q#|nR@F!ewDsrCA~`kawpnEqU>R`?Hvzf$-|g}+w#JB6wL;csn>uY2F~ zsvk`E|C0*;r0}l_|4jai>DTISB)^-!ivFo!9fj8@+*8^r+`X6jziJSQ# ztRSi&U}VH}^Ap4rBo)NTssC;Uf)q)5t&v#;6$Lp3MFrIVpkTdj?FA*qmrcL7RRs+N z)c=6`?~k|1Nb0|PP7AhFu!n-J6m(FqwSw&wY{QssO~0Si|A6buZ)ZmZyD8X7K}Q8U zGkzD-zx%Evoz~hyXOi7b_g!4Dr-JT zOi}-X?w0s{>!IKR1w9pvQP4}l(FzVx&`&{c1$`Az|ARg@-aTOkhq2AWO;=lj{tAv% zFo67sweo=^N11Nr2ZIz0Q*exe;}jfA?_krP_aP+IfAdO^erGWY$T)EcBt9k7;rn{DdYZct2;5r32D7c>91?Jqn zXy1qnO+Pa?D_E@H7V<@=KS#Hc+-CYCx}M8RDO?o~kj5AIoO4D~;t{=2#z zJfPrV1=RoGp|wU*|AR*@aX*O&9#`;;f+rL#Q$YO>mRhf0&(#0mX-oW^wATOU6)d+T zc+T`k^a9C?rho0rimXtuLXp;`{)!@jf>#y%px`wHA1QcU!FvkcQ1G?_>VNQ-z1Ckf z)c@dJOMF#neY;f(sQOtKe%J6MVDQ$nQv~|9&5SR747XQt*$0pB1c8@QZ@q75vJ`-%P*4{~-C(bWc9P zUnJCjzpDRLq>TdVe}w0Mmq*sMk&*RGcb|%^ugIo~Y@oq6rNL-PWA_-obG~LRKq)9TS-_M*P zMMbFp5$eBNv5^uZ%ch&RNL7(76{#uGRD}8;X;`n{hZe@SH{IW@M7C07TSc}er~don z+Kz#lT@~4dksVF{E}ckrGyQ9+|B*e`8pG8Z*_)C3 znC>q+Bl{_GkRn|aIY5#9>FsKcb2HqHBso~rr+`rBuAS5D2^gI8V9YFAFId+MFuM}RFUK8 zrT)98!N@R@;ijvok&%jwR%8@8_1{&J$QY6nOurJwDKbNm@rs9KWlT3FF zMouJ|V!G=tGF6e26`4jp-SjhX3dyN!C8sGeOOct1oT<{#fn^}$R&)tbghx|NG>=1`(CNYHHutC zezob>_I#3SP4^q`k?R$?MUe%HEL7wMdT%uS8or6-X49{VMT*>}$YSzaO@FR$C%MCP zH6(JEB2OrCw;~TJa*rbSD{?Pm?law;D6)j)0n_jKLyA1A$iw81n10V6BYE8PXZA@& zmMgMUk*5_|Mlbc>Z|513XHB0xr^t(nJWu|D>5u3ol9$&S`HG^g3;R_?BZ|DH$ghgL zuE^(#yrD>It$S0EcNC%iN8YwqxhLw#yKLt@(|tOKysyY7imX)RLq%56`+@0?{Uef( zO}{p%{}JlHzm~sHEbBi~x$&%*bL{Gd~akCxW zK+$%JZm8(Sine9^My6X=(M?D;HQjqfH&ZmE=;q`+|GPPfQvaiY}kOAZ$gt*K+^9T^LFI_sIc@_EfZ+qTLlekluq#_hc2N z{zrRQ;^(=SqK7I<{g3vx++BCkKD@T?S|blv^fE>JDSD!!{S_Uq=m15JQS=B!k5cqV z#t$_8o*YfW8S%${tfE5{9ZXLB_p4$k$uQIJ)d)q$Dmqfp(Ta|um-_G4XLJk+_1}G> zjE+-uqN3x;Cz$?BO(L1RRx(A=vlTr_(HV+PRrF*1tZ^6p~X-S3RPqDSC#Y zGs#ak{hpsma+c}$e3qiK6+K7M^A$ap-t*QPPyLTxXo=s$If`Da=v+o#L_U?aTicgf z+i!WEqDvILT+y2qy+YCJ6unZ>YZSeT@mHJv+|4Js);x3u?dui2QPBmoZ!rB8v5@2@ z)9=qMir%T{B1LagbTPfRn*MmH|Is@b@AmU9MekMgZbsf?`gf%MNAI`9J%2_YQ1mH9 zA5`=SMITc1QAMf$(MN2IUm?{0=;M~S{b_APpHy_ICDCR7pGTio^hHIVQS>=QpQU#> zy>73l|IrsL8O!;KzNBbt!KeO5S6J?k=v7|(nmOrY+Ha^lRM9t;S)u4#N={JpZN*#P z=pDs=Q1o5JT360{igi%*e~PWI==+L(r|3#WKjG!86#an4hxidv|NT3Ds_1G(ssGW> z>HPw~H2oOrfAnkeZ;<-$XX$%I*C^V$GruZI{g3{{n4gjQ@3-?C$?y0FQvXLzr2Us- z>nQp+?SJrJ{LggfG1kV~v2}4hl<9s37u!IwtYRA~7FMjSV(k>8{>L_EAvfZ zZAP*=QvYKiYrEr$1&SpUi_jaz7{=EcL;a6Y|6^%-Gp2jSi{%t+DwbEQqF906B9^dh zPOj0eqHEV_Q~%waF4m&hHj1?;-x8_+v8}D`z88v7|6|+HyFKn;x~ny|qhd!Wwv%G} zDYmm>dn>k!Vx1N1$jDu>6YgfZni<=jWDndE_gbrWACi4dzn@(c>!sNKiXEg_S9%Y? zZg`;Ser_1+PI55zz@Da`w?h;=OtIeNhhiV>Yr5~FVuzFT!~QtHbk9YxBNdyV*g(aG zD|VD(gB3fPF@x|JJl1sAb&UES8$v!5hnemPKQ=C>VJ$15IcqBRMXY}*lCJAsMt)!u2JlC#pWn> zhGOR`b|xdw!n1J}o@4sgo=0*%UVs>~1u@e;fgFEjnTT~2ZZUWr#B z_1}Gxip^K-R>iJWY@uS;(R)2EKH>`lcUR&2Rqk0`cOu}2y67(R|q;FG4`&t)V};nVmG zK5M$~6JpOPwnDMz$zQ-1@g;oO^mG0S$*cGpzK(C0{vF>^>=VV_R&1qW@6h`$zK8$A z_f0>370CzqA%27(oBr58RqQLpJ|q7ezrZhXwdwBTv9C$K!Ef<9{N8lG#})fg@zzW4 zC&gRq-p`6}rr0lvw^8g@#ahezZ;byP|G+|fgdnelZ@cXh|tRlKd@ z>ycCc$@7qL@NjMo##3`oxekndx@v{}5rub=!Pp9`}JOxk18K!#{iq9lD z9nZis@hsD?oLP!rsQ5YL=i+&IK3-t@k+VtW;9R^2FE;&(x>WJI6u(UI8x)_X_%(`O z&X_CkO1uiMHvQE)pX6G+4zI@rX75{Q->CRv#TU}P32#Q%yU5yp&D=_U8{Uq0;GL$c zd-1y!e?;+n6u)2bd+EK;bWfr2B_t2vgZL0WY`VKf{87c9Q2a6S$4!4-KS{C_m*G?R zwCT71tPRdFHr`eI1I6DX{~x}OD{+4zGHvKvMRPolL{h8ulEB-mXU*MOx8ox6A zs{4lITl@~c#~)0;mRjroABz7>{tNz!zv1tuUmJgttiiwVZ~VvfWByYjrNlZ)v{Ryu z5*sS9uJtC?L*e?kf$8c-qAkfrxG_@y6PsGweIJ$BOo@mRo71}mhLHN72(0buWFkr) z!#Gm^6G>~kPp^rz5)CCXN|cnyGA4)A|3ray(R6>Ak|>i@u!=RL{=2i2XezOd5-sHI zaZB6^w>JGAZcDNqZjU=)2h&{_iJg=9=;hlA9>8K#4b$xIu}>mAFxfyOmg|#H~u) z#Q2->7F>jjO}~ZPNN&eF@J_tT^z(d=5)UeIFZq3VKQ6%sOjqp_50N~KkKm*DnCVx} z6H2_K#FI+2miMLfF2kqrX?(_X^)|7b9W z@s<*wDDk!uE0uVMG4JAg_&7LhbY-a$%B;KpD|tW0PKbbnr_u4yOSJ@J+LSCGTrB_WN#(=DS0S)AMA^V z;o+v=T7QxOcmy7a15NjRQSxXdk5_V#l0%g|hFM>Ho9@n@ zTtu=MZ^hg2cGGX|P9LDfzmRFVnjMU%^-LHPhWk zl5dc_iErWC_>SrB;K}!t{7}jNk-v{CaTR`G`YYull8^Bd{1iVk-S_axFO3Nb(c@jKAQormq;kEBTL-e~|x)Yw$1p+w|x3 zUy}dK)H>J(*EQXIrleFzsr8lGM5ztv-4NU2M!2!*_As?6NjuyOH^(hZKPIeHLaBf} zf>EUYr{dOj*F`Exp29R{Fl)M1k;*Hzt5OA}woDvT zxTWc4GPSi*9hBOJd|TWOx5ph!KXONsop5K|1v{GVUX$viR9B^TQ)+LeI@7y5?ty#a zUZz`hseMTH#r?1gQvcnRn>s+L9!hm1KM)VX?s%~2s(q>_NiRGEd*h*|yB1P?m3msK z!<4!}sl$~TuT(#!hA7ovsiTz|!1yEZNF0bqnf`nYA~^<+#ld)-*>@=Ip-LUE)G*q^ zaRiRUQKqX5snH~3@B|!-<4jixQxlY$q0~gBrYbdw-pP0(PQjB*zxJk)OvjV)6g<^* z-#evFQ|fG`W|E(dXW*H5mg%mb)GU&7@LW6(&o|xQwx=#sYLQa2mAYD~IZ9oo)Lh0~ zgcsu_c&X|4a~{d%cm-aGSDEhT`>AV`xec zEA@akFQn%52JKlkJ;$5a+pZAd5i}&IExWx4H^Pp0XEAm3mgGkCj@k)SF5@r_>6io@e9>_#(c9FPr|guaLZoui@+XhUu^3 zx0HHcskh1B!FTaJ{GaLPY9+}k`~W}1k4%3CKT+x{r9LJ93_r&&@Jn26`fYx#)Q?Ji zL;fv(hu`B5rr+{UBtPRX_$&Tqy5E{e{h@R_rT$cU1Etm|y^d0UG3Ial2mi(YOjo1Q zZLFPM7uQ4K`lj1Y8?d3$ZOJ#njd2s))O7Qi-c0GV(wi$CReB40Lm0*YBc}T)Z8}C0 z#{?!ZWx7vE>5S4PrL*KY%wqwIrmJ}AGD!uiSi`#M_pqt-Z%Vf)eUZ}bl|Dl0EtTF& z>8+IBRq3sj?w~aFKfNul-43_M9ZdHduxaXldMEOoaTn}px?0`ZNOw|tH}cN7JMMvd zn*J>8t#l8i_fh%)rT3+GKkS10V^`Cy?Q}Pi1Mwj2jt85rPNsV*-B;;en00b2px30#3w9IN9vAhV~St&s6#(rB79QD#Q5I&5L;G?EL zkB=+;w9-$IKZ#3m89rqWbgSzbl4o%_K8Men{vBUb`U|CBQu;lmUsn1JrB^WK6?_$6 z!`Dr}p5G*S3*W|f@Lkg%d+YW4k<#yzuf$dO0e)!uefXH<6Z{lE!_Q6k{F(kz>Frjo%>kKmDDx-Pvhvq<>KQM|yw4pYa#`)%5fEyE4Zr{f9EGrR+~-LQ1buMoRys zOdF;DX8b?+FaBp{)-l}*&#X(bp6Tw+ne~;~M41i9H^jEM5pHa{r-IC;B<*lB+#I(s z-E&_f6I?uT7)f78F?0m}4MrkgT7l{t{!gRnauj6F@6bA~df(mMlB!WDDRZSV*C}%qW3I+)a6VpZ`fK5Ok_C7JQvWjxt?jpbvog0U za|^wTa53JBx0!xxcaYqPcj4W5kLl<3K4q3FbH6f=D6@p#2k=3p{%5HF?r9|RDEVXf zI6i?-n*QuBQ|38ko+5u5pTTEwx#^GPd6F0KMSKZgHvLh&qC!HMSCyNp%xlWF9{%gf zwqA^HDBD(<*5Cj9L7BId`9ztwm079GJ8a=yd=LMJ@0)&`t4Kb;5Ah@X*!27MsWM+F z^BMW)_yvB6t4+VPuSveaZ}B_)-t*fecS*yG~Id6Zlr8Q*^QNrE4zuZA!RpZOgr2R zH^(hZ|Ee%afDxqrXJgiOvyn|Gn^QJPZwk|x!K~@NPs`>>3RuJvmQ7dBvsGocQMRUR zQ`tJb4b$&W3rTz261T#wO}{_eD!Y@i+mUaNJ75Rg(R6qA?9L>+U`N~)JDKjMz1hyn zPEdAtW&0_+hq4DLyQi{Ul--Mwd*eR1FYaf$x{=+Vq$?hP-S9xut&?nbWqT`oFnJH` ziM{X;)BSc<_E3^O*cT7O!%g=bo9(acP-O=wJ4o3h=sgk#;!$|C>F4tpl4Ef&9*09r ze-y)%9j)we@)0-^N8$0NA328P1RRUwaJ=d60@;bm&Q^AkvNM&Ptn74UPh`v#JPD`b zG}Et&lSxj&Q*j2KX8L0}UDaw>e7gctVva6I`tn4ynZ&mhwWp7jV9%XN5{2fUB&r<)hcU$7${a$+SGv~V1 zyF}SXm3@HxL3{`w#z#zlbdQldj!)o|xYTraitJO$zN+lg%D$lNGxR=-%kep+{`+md zNb(ZCj4SXJ)1QUb`u~oyuam!lZ{l0{w&_>MyCm=7|L}cWY5Md2fwF6q{ZQF&mHkNB zFO>b5F`wY4_!)j~`u+TpWHo+;U*k8XU-{oD`-`&QlmCD};!pUq>CeKiB){SB_y_)J zy3fMdzm#jM?BB|*tL#7YQvb96Sv$85wlUqOfZTc{!u4?j+|YFEC%2Jun=7|5`6jq2 zw!_U#w<>a5kc2Rd0Y*$$wQ@1#x+xb|ZX4wi%9WH$Dwk0%#mKbj&Py&!lEXX}uxPsP zF>+<)n#xtkt60N2Hq2qHw_FQJd)yMY!mUkL2Xfmg*IBvkl-pUk?djbCJK&DElj+WH zZWoe{xGQ$T-As2+$?dM(zRK-Ez9;U5d*eQ)fA{@Jy5RoU6%R1|)(%u|h;j!h*H5|b z%Jo+6V8-;op4bZyF1SrBaubvrrrc=dhSNI&N8%_v-gIj_H-_W{9E;;{yy=g9BFQA2j3?q0JjwK1 zo2LB1%1u}96Xi};?mp#CQSJ)mPF3!F`YB^4T~C=i)`C-`XW4m*QnO4=*>}Un=FURPJWwu2SxL<*ugp8k~>U;&rBb z4#_PbxdCs)g?N+c*Hvr%zeBl2?O)Q zrQ8F`J*M1)jClwjM(Tg=QEU5IdYt?Tbl2lj+RN4&^R#j=DEAEcv$!0e!{<%ER$nA} z317w)_=@S@@ipb%Qtox~H}Fln+|SB=q1?C1eaXnx_!WMQ-+8GzCqr^7Hp4OntuPcCfNqJ#qDr=)7^>k9hBco`5l$-r2J0w z?u@%&N2LDydE1SoGwzOiAobs^!2I6IcU68L@_lhX?1I#P_e7UJfTSB9hzDVJ(>r@T$Ie7#?o=S?y0U0FS^UaiHnv;b`TD zC_jk&7(5mS<8h|@d1!tp$uJy_BXFeY-|=|mCo4Z%`LW86q4xyyNcJi}j$}Mez==4? zbhRjdqVgvzKZX1xoQl(My6N})6p~YM2A+m9O@G$TQ2sLI&s6>#<CfM%FkE+3VN@^tMF>P#&plg`D;n8 z!|QPY-eCHxd!h2TDt{CC&3Fqg!o{ZFL+XG2cJe#$PNe?(t=*&i7s}tO{0imoQ+}!P z_bdO1@=F-`06vHh;lrk1;g6C$hL7VD_@wFQe3|mkDgPAt(@6c#KTCVL>G$?|k{9qr zr2gk$wzm8KLFZpl{ypViRsId-Ut3%mp|E2Q(D8E|yAL#l@`LAhwgWuwJ_`T`Ao6Y~I{O`*DME*1W zg1_Q#rn_I~{~-Aj*Wh3Hx9Ohn^Z%-_iSqxcu)YfGSYBv@>*9JS(|vDWp#B#&ByWow z;l`%>*H8e#?0wwP{J7q(Pk8x^)9-`ezhyDbUz zzpy>+9k7Gxx4)AL`>3$93Y}Hhh2D<1D|W)&O!v)IVRsVhe_>DBd*R-uf8Tvo=%xbo zztDx={jn<^V7j|%;Xo4Vf1x|=gRzI{kFJ*rLsU3Kg`-sHtwKK)4rNRq?2FX@!r|8T z`_P|!03Lxy;y}~AduyX`v} zj3GGz$Kp5~Z@SO6g^4OmRbdkOWIPe4;7O+Yo!i1RlIeIdQvVC5THD?C3#X~@pb9fp zxJHH3RhXl~87iEs!kLUe3(v+`c#i33_&k#H@dCUMXPbV^TovZ2a1r^%cnMyLmzjR9 zE+@GHuf(hHYSYipd=+k0;aU|Is&E~>*W&`b0dF+@*}RG5X1oO#;bPNo^EMUkQQ>y- zJMd1V{ul1Hwm+78$?wDaaS1+P`s?B$72Z_gVHK9E@Q4aaRd|#!k0JHH@C5BAO;?=? z%SfKWr|}tl)^vBt!gDIDP~my<7w|=V312qdQ&8a*l2`FHd>!8~{mi_j!iOrnt-^aM zyhHE1rhC>Z{Ey^)T#2iY`tN?)Uie6bFI4!L{1f~XKf}*Wf3BQ|pyDPf{HQ`}(f&z=KUDac@xS1&_#6Iiy8CS5Pm(qG7yga^nC`w-_)o?4 zRb0oCVjEl+*F%}^x+rcyvLUv`jc{Yr{nb@*Qx#i_b~_aV6*r@IbKC+$7&hIrTrolt z#TdphVfyz?saQ}kO`gFl<}h!%l~yd0l(38yteWn4i**(ER}2|V=uEOZ?t#?*;$GHv->nt* zQL(3r`>NPY#r+u51^36Uc!25tU8&-MBnM%4JQ#bJ{(XC?c$kWZkoU$zu@Ck&-FI=t z!%6y?{^$m%I9J6ZRGh5hkt&W*aiEHWRXmE3N8=zo29GuU`yNL!1c%}<9B#U2u;NG+ z$ErAr{CFIVWAFsiZ*3gOc$|O}agym)e(^*V&rorSil?YZ{Vz^s%ru;iC!2ouP9>Rv zr{PRI-SqE!ri$mOcozBDI1A6gb4~Z@wRk?s1$ZIO#yO@xzZa=^yNVa9c%6!usCcD{ zmonxuoQIbq_1~}Xt4OZKYj8eZYx@1XUd5YLTtI#U-iQnFCeuAn7H=V0gp2W3yv=k! z{VCp|;v*{Fsp9=A-bL@-cn{u-_nCg3EFpOSAH;|7VbeX=6(3dc2^AkBf86wY{v^p# zT!v5K)26=?pH=Bv6_=~Dvx?8Dw2q3;tN59UFR1vAiZ818nu;&+s+VyEzJjlsekNZh zc>~|XxA1M#zt_7eexTxeaV4%Y{q^!8$w&AxeuAHxer7&b@n;pkQ1M$8zod6H zeuZD-H>P{uE`CSyJ^p|{;!mb~LMZ;C;u;lyCI1b7$3O5-)BO#2@h_6U@gMvb|1;fs zD78^3qtd!6ZLZRKDs7~athcm2QvXXE(r#GZ+Q!qVk(8m!x&%$ zqo!K}r8r3flbFJ^>CQ_jt5S@V85ldJ${Why4HLPO;o2I+Vl-jGbol0Ah zZ-raqHn^?no{mb}lk9*Ua7Wz9?A@OBE-H;tsiR7VsWJRrM*mL$J5$=ckWK$Eeg- zr6W{2jNZesANI!qrk|@LNe1Fkcr*?&{i--trQs?KCO-~`;7}Z9x+lHT2$GRF3XjLp zrr*O8R60YYu_~QN*Ep5N)0lu0aS~28{VYvU=@gYtBA<%Wa5|oB`dK=aWCoswGx2oO zuevi;x=5w7R61X!v+13M=is?`p6O@l0+I`HHqODhru+GO>0*_xQ0Wr#OYt(ChnJgv z2CgKz3a`d%aK7pOExXcnD*da{^(wuj(gKwpQ0WGh?o#PSl@_bCknz<2(#^DQ!9}L4 z%%xjNZo}L04!qO!$8|T!J$NtPhxg+W(~o>mrDs%nNTnxKdYIlv@KJmWA2(f1EH^odF(>1 zz9IP*zr*kG2h-2ePb&SP($D0-;IH@_{%-oS`6tO5{0slae@uTY|EavK%Im0{R=JJJ zo2k66%57C%&&HI6>*EHvq3O0?-iTyl+ypnpcBb2Yd2^McDsMqf{V#`U2N*HkJ+vGn ziDLqjm@@s=GAcJ!&Z=BiIY)0E3s}UG>Bm<{s#wE1HcWS)ZEciWRBlhcC2oaV<2I&S zQRVGaK1k*5Ro+A89aQe9atFrjh&$oVxQprPMtN6~PPiL(#@$U5r=qNnbn+566C{ z`wQRl0F?)+d<6NCI1rCQ>c2nUV@Qt0!FU`FF6s60vKv214?j>ic&(R81z%ach?#3^_ZPBmS%FHcu_ zrphOipMuo?@(kLinSN$YCpiPp#Ix{h(~mhv<;zq)SLHb>pGWWcNc}HgNPD*FuHW)p zl8f+SyaX>b{T$9y`5KikC%*!(#H;XX({F7)$+dVLUXKe*zqK1xenRDiD&M2>O)B4} z^39C71sCCByw&utqW+ifAiopu!n;jZugdqT{E*7`k>8I?@Bw_#^t1FZ$s_nEK8BB* zevLh;^2;hORe8C}%jkUypT=kKS<}D!b0p8>3-}_wWcqEcQ29-jUm<@LU&Gh&4by#_ zRDO%(ZF~pc#rI6Vwf9xoLgkez|Dp0KmA_W`1C>8h`9ns2gdgK4_^Ih<;B%5M@Jn2c zUzvW)H!A<6^0(yF|MK^=f50D2_Zv0kpGkhfU-38m-Sk`gQ*DvTrmGK? ztyI}nm916jpvpG%Zj0OD_PB%T-+f1top5K|1v{F4Oea@N zDwnBpgDUe>xki=C>81WxuB3exUfrtyznxa*lTiOF*U`Qn7npvQZd7HlDhtVP!kh6H zTx9x@x02k3x8ognr|CZ1R_<2iLsjlk#Dp=?+SbcUq$M_ zzbfA#c@y8lxA7g*U5~Ae%6qE(kNkaHiL3Af)1T#!RQX$#k5&0zl}}Vzt;(m2`3yhD zFYrs#@AFqAU*k7O{jYpyZNKFoRQXMnAL;!GssEKH+D4WCEU&I(x^FM5>yoU8!u4?j(`}*JR@Kc^-H3c++ypnpcBZQ{)y+w^zz~Kp zF#Xn|s(z$uOw}o>##KF7)r6`$sG3x@rfN#nf~sj=mBB3LFmJlES*8A0OXOv&VAXW9 zU9GFSm8uQ$CbnRE+|qPEGpcS)vJGyF+u`=6yIQLqRNYI}9aZh5>Q40TjJse*+|_hz zySf`mXWSk4z&%Y@ORIaU+Evwk$oIwlunX>Qx~J&s0VLh> zb(E?@7&8=y;cy&*BTYX8$E!MC)zRc*@B|!-<4phV6G$fFB%F*VntoNBr0QL&PF3|% zRi~*sOV#PB&Q$eeMxKJF;tV{^^shagDT!j zlDSCzuU<_164M{iWvbqw>O57iQT1|qufQwuD!khCb2XpjTBQD0ucy7hbl+)IZ&Y=$ zstd_)!kh6HTx7cHQN5MqHoP70z&lO%8(h`9Ree^~dsKZw)q7QaNY(oob3ZP@2k=4D zAJ@YqkKm*D7(Q+e`oe7eull5_OKB{_r|@Zf#`Nc9xvFof`kbmORDGV_7w|=V312qd zeXaTm$*cGpzK(C0ew%Np`o5}flfQ%S;(N&M`T1N)vI;-I4^8(Mrqz#CJ5be6REwzk zsj7df`kAWVtNOXBt5xMlt6$o9KQmvkg|G1&{1(46{l5L6>Tjz4Nd6Q4jKAQoroY~Q zC;7v4zwuaIquPe5{-s(QRsW{FQpst!kU8wh{Tp zxCw5G?M%1kYnzj7fgucIV7eKoMOE8YwU}yU)#9pURZB1?i78BD#&n8`cfcB<{J+V-mLqS_AhcEBBx z`d{1G+V1q4?WcEtm*o9V9K+Ci$F zs#6x* z3XjG?rh7`P9ZNFUbk7yFA*zj6ZK!I;t2T_@;Wz?E;waP4%xID^cmj^aai+VjYZFvE zNwtaO)c@LK+9%=^(|uy9O(mIz)A3|H#q{fNhH96qcA9GEsWwx!S*o4R80vrROxkDR z*{1uyjnvK|IoI@ie!glKsdfSRg*Y4M;9S$caiQt2i^jmwBN>e@LhZlssDcV zR;t!o-dB--fFI&V__67a@gMxxba##VI@YeYG2LtH>#4ql>Qa4U z)z_zY17w!!ZE0_0y5GU8Z$h#uw!_VEbJHDZJ*0YE^)PvW5sYHY^!t+_Nn#4qm@)mB zoa%j4&#S(x>IK!eQoX2pU3Kbzz0CLuRz-pV-!SB-sgf#$B+Z>DFPrlj>bn-%a(sRqssi?zji;iPV38bo-F(i~C_0+~0KT zzkYz~Jyh>Tejpx%-SJ@4pUs{mz3>q1jfa|k5BsVpkB22U{k%#2fg3gLLw zC(xLPlW;PgX!>oQr246Uo&oKSUIZO3#RXAKs5k@B!1WkcU)%Q}u^cU#|KisxMXjQN}!mkK+^gr0M5*8Oc-lG(LmRntuI1 zr}_%jpC^9-U&NR2Wz%o%6_Qu+HGCc4FkMBhzoq&os=uxJO4Z+?_g#Ds|A+6JekNCu ze1IR~NBFVno|EgJs@_`OKO_GfzrZhXwdv>lYm#qFKX2cuQC0nWHCik1532v8`j4vr zuKG`m{2712U-387uZllN{=_x-7yfO!@3rdxs?l2B|FfjA4z|H{aXr&L8#mS`*#I}h zwz!e$-m$TX8VNNvRU@oMJ9;<6&2bA1neN;*0+I+uF@|x|Z!@VzUX2ua8Z(&1oatt- zQ6MQ|3Cmb9-RJa1O^v>5t_wlEbkd_QwIHyP6tDs=0$21J!s+jic1K zRE?w6n5xDgHAbs(j2gq#IF?rp#^Z1Z4mJI{8cs3-N8%_v-gI}R#uzmws&NAOSR9Ar zaf0cd@EemzCgX`X1y3^l+)h(tmKxL5n5o9e^qzvJ;tV{^^m}+Z$r*Sio`q+d?taub zM~&HPoJ)Qlo{twG_22#9OB-`Y=Hf+oFudP~$N*9wdJVAI3+J`tMio<0MbuleiR@nf}UsT8+Qect(wn)Oc2n zH`G|J#>;9v$4Kgb;|1C;;!CFA{tA*;@Kt;bUpM^`y{SfP4Sb9IZFE=7yR_dk{np+m zS&6Ig1N_kR^ZBtFtwsA2HCC(fDZQWJ=lBJFX}afu##ba?<2U#%erLL$J2!q%<2N;a zB>xG2#$WJP)9>N$B!A$axCZ|+eO>)W&DL7|ubQnz`#&|;S92ZfZMH$`e{((BGTkgS zHz3&%+amS9xv{m~?@>25RWqz+J9;<6&2bA1nQnzN1Cj_vF@|x|?PoKoW=+kMngun} z^iuzuS=u?wuQk3%Lj7-+X;-jnx(eK^tGSh$4RY##vxRnh+|qRCvAH$LHn=TrhufQe z4?C!NwVFGsIb6-1)I3h|&0W;oUCoY+-xWI{^}pHK+J08|Am0=B!o6`H)4$7p zYIaq#3;F)0JJ-zvNV?&Hco23s-S7Q2d#HJYnmyI*t7b2H55eAeDE2X3{b?RXLj7;{ zqun0|n69=oTkHR^Y7Qhn3XjG?c#P?fZZOGlI0T2{Fw?)|2sKYrbEKLR)f}bf7&VV) z%xKen*VjCOWGs%u@i@VBzf0Miq~*#rI4<=hXk^O7d0s0e)!udHYz+FV*~n{8Ri4KgTajKXNt6SNJu4gWsC| z9luxeZ#92V^EWkrr1vNM8GpfFP5146^LLUz@K0QWf0_Q+|53|&YW_?9pV_hww!w8x z_wFqsSsypR4Y951j-q8_ZFP)VHc|Wg)Uv5sK2u9OwMaVw<$yU%eg)c=<4$hXHGu!HHI?pk(I%Wi7fnS2-Qh`VAZ z(>*b^bSBvy_rN`IFVm0NM=b-@vaectsbxR49H^EqjM*Q%;sMyrba#Z7gGjpL!Po

    )YqCw>UeDAgX*Y8}{dws6`e%5!dz4qE`-+Q0)JWo(J0(HY! zc_TTTyotP7sIU7iG`Etsk++j~2-Wke?k?0lfV#Ws?;-Cc?<4OQs-K?JJxDW>97R4v zJ}lI|J&L+9sCx``&!Fycwmv~J|Ld6lbx(`Yci*#YeU5yd98JC;RNvv(y@ZYLX1Jq4L-P@>pgEeoG)5z)MTSE1W zsGC9a4*4$m9{IjdpUX_teT=#f>1UC%$&bi6LVaC6p_xn0BR?fS6Y9kH9Ch`{_66z| zqwY(#E+7|@i^#8pdghnVd`&JTmyyeb>Sw!k-=J<4>Q>NyOMXXwPp%Z|b^Zg*k3u~I zKOuJ_>V8J<0MxBPZWq-3g1XJ9TZ_8iQTHqB*OBYV4dib^^|Oh(KWH|Ro5(-Ozl7?i z^L1NLS0C?N>9>)8liSIEgnB$XX#NxCb|M>)I}24Z=YU*u&-u1Ky8&3&P6L7wVpi$Qj6$=*vQVjwX#o+N49e zLUoVieB?SK7a&(bE@W#&#$-aK!qL3GxhhRYb|jA?I|=oek4ElzKPOG~I;yTuwsncI3JvcL{PQBX=fpJ&-#Mxt^@-MV>;QO7<42XG-pLnm*(iWM8tM zQ2hiXcNTKzBX>6aIb?tGT$1^($94hD0P;feBJyIPKGRE)yB4{D$X$ipWo*5iWd7#{ zar;W4`ftkQuBI7G4k520hYHpGn7abDrs!-q8Zz5kmA=8krzZs_^_ZxC=A@>z>ZzK0Hax;*diQGHf>s|6a@_q6H zp+44!G_%Or$o+!ckMyg_pU9udHA3~>PHrvDujD#% zJ-I=sp3Ax4k*^QoKakss+(x!;BL5`+A~%y;gnFFYkoyn0zv;J=|B(NZJA|tL{7$l+ zZ$R!$?m|MSddoLLejns_MZOvGjoI3SY)bA%?k-f%m;4?ydy;#R&B?um`nWBS-w*kg z^sUI&{S5d6V8EZPFoKp<17LpC%xg|M`g9aZOE%d{^Wv$ahA* z%GQkRNFGIY5~^o${%D$G$YaSaR5JZl6K+73wQ^Ce2yo+2lE7f1!H+%%6w+#mJvee*rmw zypX&|sGd{#OK2`72a=bOmkZT5TKPf9--!H`$PY#SDz;ut4km|?*9g_!oxhgmI`Vq* z26C8CukGQ;--i56^f!|u$Xm!;g?ff>r@5oX+=cvRQp>KmKhu2{19GNN-)pmw{}%b#$S*+tBji6tehzCsCO;wPlJkUmug_@alb@4c zkY5UQk}O1iDe{ZxzakftOUSQ<>QhF38O?I?f8;mh3ZY8x{CCLzg8cW$|AhQXwyq+7 zAb%v8|9a+srdcCY|7K2pE%Np8&iv1>W9xcy1Noa!&)Xj~8_7-NpX6Uc^(L0zfH?nvFsW6b?e6B?@g(XvNmn3J#4+dZbSVLiIE(L?~n^#PkW7k`=Nl)V+12Ig0E=b|#M&>UldBg9w3&+s!SyoJKED7=Egb11xo!t<z_sI9j4}`k@Llizi zVHW*t@*|S@U-($I)o(Qv=F-n2KP5jS=L_|<{sM)6QTP&tUr|_q!nY_aL}4iki&*&; zxtLr+el64^Sw^#*{2%!Zxk9M>{|<%KD11-9l4SlDe&F_xLfzX>G(VGT$Y02{LS3^C zh5FE5kHRJtHn8riU*;%KU>?82apGn?S=a22h$uvb|4QW4-@K|BTy`& zcqDxtnIrRLL8y;jqA8OGX_A&u{luZ@p!f`mE{YeR=%IK#iav@J6a!XgyO76`U4?qgC!lybirrA`iQZ{O;<`nW&vNw5}P`x!3`=EF>if7RGCHs-g|KeG)JyOlgIrRO>bIJ3_^M!hZ15g}+ z;)N&Uv*n#+Xh6HxIAnnC21H};x+U`$!p2$ z$m@mrtcTGs|BJ)9eG_@JP$gmU78D;u@m3V?M)5Yb-cH^@-bvmiRQFVo`CnxI7w=>1 z{p15eeeNSsd5Eiv`~-mSrnI`_#BEeP<$T6S5X{| z;y4svVC5L{Me-$btWf>yG{u)`#*-7sSICJ%-T!MSzJcN-`q#tMP(4|SZ_-R7 zr;~4yZwqzJJ1EXY@m&;Wq4*wKng7KPxIL5nP^ee?Y?_bAIpoLWCqjMi%tP@@6hEc^ zjGRw?PJSWOGrxdlA-RbBid-zzBm5f0jVLZfaW#s|Q2Y+X<*fN1`3<>({8qT(WNv>? zt|V8HKaf8P^-TVR;yM(6re8z;Larr$73#BIPqTsijr^VbL#TV(gi?KI|B2$?DE`IP z&EytxE4fXmKEV~Y)BHpJOYR{56RO|IDK$W8SCn=ZQ`&_D*^q1`RQXwIOw)vHO72GP zE>t5d?SazIDD8>TH7M<3KP<=yQ>PT}G*@^5-9xYTWxpXW_ zeNpOy(n%;C$JVao@#G0)H}XWGT34m+D4mKDS8S;VTYHkd$Ww&sb5N-_&1vN6WFPVj zp}xNTP`VhUGf_GZrL)+2HhB)&pFCHn`#hiK0&)O(A$gHdeX=NBg3=(AE~OtxUPfL{ zULjPUE=yO^Tt!|@4km{P^(+lVX%b4;qVzCI*P(O=O4p-wGfFqGau~_{FAeARO+xjr zPn1T`+(O<;-bUUo)a&FXh{Eqxys6K0#R?+-G{z$GSe-i2=u0gpcO244o4yCmy zH$>@Il(wR@4yBDKt!MoP@;CB#@(-c2Lb&ncRhhQ2q8oxe>~Hp}Z@~O;K*l)+R!gf#uz3nE&Nw+}?xSQ>eb_ zDmO>DHOhO_??bjATavuKYUJg8Y1)wck!{KSg=)=|4?sCU`9PHOD7Q!XFq98s&B5d$ zWC!w4q00aA;WS5(N0N19PN-`NC|f8O=}TmpG)PmZ{${pp(>SC{dZaH@d0q}tJ_h9o zQy#w)M5>NPiUBiR?@sE!4ApEXv(b?m~YY*_CAemrsywm6PQY=}#iN zlP8lsg!+iRP`&}>Q&1j=@~J4FjdE|4`=HGHFP|=z`nYFs-@ar&@=Wq9q57V!d=AP3 zQ0`BEE_oh#K6!yqWls4*nv2Mb$xFyfh59OAhVo#_%Td098-vIz$*ah#g{sf`jq(tb zuc04GUQ1p_UN4-@HCY~p@+g#VMEM?+hogKO$~Up*W^x313wf(h-MQu4Y3?BJB<~{c z7V7!Dm*zh5e)0kGL2{%}pWQU+rYhbYfQc^1lZP@c`!kA&*4qRJoBF#mPW^H83T@~8Bl3H985PVo1SFaIn?y%Ck`^M4)6YgzfLP>*~)%?6f+oCf1m*7O#t&sGNW-{>Po@6{K^Supys@=T#V$Fph9 z5$chj3*%xK=fM~N<9xPWAXM+z2J_#zNQ}PLm%z9T2J_z-C|>=IjBz>ly+WwZP5wvjxmOU^a)z{5SWK8a1mX^WWS@jJo1xOPKq@ zY{hS|0LrUkPAvkbGy){;=q0Q288#i+Lt(}wB6bXe)uR5Jg~K#WQNGlF?7%ot`L zmqvU2$T75W;Hz@#XdXL^m#PQE-;UwXa1|Z!#s|L`LECG1eiTxc7xd+ z=80@QNvPI<$^18ah|yQ17tG!;PhsV$LVdoc(VQ++PZskGm>0wB3-er<{a~IAllgC+ zB{eEZOy zAx5vLTVdV-^ENT&?Lu`&n|IROCDbFl2j(c4_riPtCiCCCUt0A%F#pYwV)Qs4g83-S zhuO~~LVZU(M)SB(eX25_ggGAOQ!rnE`83SuU^4&BXQf7uocV8#7NbW#2Ig3p%zyJG z@p|T&|K`hL)Dy&<0P{_lufUuFb0W-1Fkh8c^EIKqI z&9}tsnPL8$%zs_^9<0}4z7MMe^8=Xwz?=#5dzc@>TmW+x%y}?p!~7T~-~Y`yHAi9o zn{(N}y1t*n{2V6p-<&UA&*T@fZ8HD${jw0|GMI~CE`iDXHy2Bdo-yXXxs*Mq%vla| z1x)6@`HlENdytR{1J!`C;VKsrZ3#>-4nEzHoX;oLv+LiTw%VE7MRM*1tX#%0TW;8Zhjl)zKCsS&bp~ttlKq6b|FdBAhs9NAG5_@yIhU2^)l^;pYapxvur7vm zAzPXMx*y&V)}`Y0>beZpAXt~PlKHP!>6J8B3H7lC!x{-|2&~&+T?6YzSVLi559?Z1 zaxJOUvTmRmCRE>+Si@nBfOQi+^IuoqLUXH7&)e;=?xws0)}7p7{_8b)53KuP-AjL; zQ2PgHnE&c+(;5Y9G^~eUJqhb!SdYPC{#%bqrTTniG5@V6#Hgo$^%SgUVLi>>o)N0Q zOR}D$d0wc#+p%7NH6GR&SYu(m$X4dR9?v+MmxX%fC%}3Y)+_WAh5G6<|E)=4^bAaf zU4%6S)<#%UVJ(972CUhz-h}lotZA^`hBcl2F#px(2x|t-J3{r1x>cY5Ghw|?|AA1S z1lm*0=O3|GB!Xl{Bk_daizi^((B^u-3r( ziLK0k-On#HYlZ6PMAkZ3zrk8hzd@+S`8&-YHD(j+y;qx9fZY~$OW6CuZpE6`LVff$H2VqFJk)R4`@?QW ze}GV(k=-8l;jj;a-2wK&Y-RqdZx8H4X$}*rtgw%Oor8TOeVtHUYdcR<5UOObOR%qo zU50%EYy)-%+l1}HwpeMC%zr&*4|WRMhaJIY{@bC{sCN%LW_==5ccNXPsR|z^?T)a! zz&;B0(XczQwX;x<@E98Azj}wPZ?cbr-Ie}$p}v~kV4n~BMA&D-J_&XY*xgxkvQW=M zPuOR`?gjfa*r%}dRFe6xR;hhDO&_6py4ihc`U&;?p9Q-=?6c|55q9UQvzh<)d1CYo zTmX9@>;bSZhJ7LHFJk=&ZZrSwOJ!T1?`5zD!M>cWR|xf}nEy8OUyorh?1y0wfqfh7 zYhd39dnoMdVPDIAd55Z1WZytDOsLY>9u9j1Z03o5vv`#xHuK-URgAvAx5K^<_8qYA zhJ7ddxl5?${2rQng}R6PVUL9U0R4kPJ@cbz9;&H)1on%tABFu4?8jg~37h$EKOr?L zGwr9i*V96kY4)?QN5f|R+t0H%wc1}`@Be0g1r=Wy_^es2J8=E zzXSVy*zfXK?+NuRG5_tEHGR&4JqPw|R(@1d$^5sO|2lK#!CnCSQ`n!w{*3kWYx-gS z+h2;&S8yTh#jqE#@++Zw*4s;HnE!f>ErY!V_Hx)OVb|Yf-@^WeH7kUAEiwP?@5Si5 zV-@Vxuzz6XkE~qGZRWqt{MSeP1@`Z-*TP;8`&ZVi6YBNM{I`E&4|CZ12kiR5-^lGv zLcNy$qS-7we=xVV!f6eA8=S_l|Ax~5_IB7iVE@C`e}#Jd%ztMmG3vO^&TtyS*+qnGt zoWtR?fzuw&esJ2sY0H}Zg?gOKf9F6kY95?};BE|pfQDN-8wcL4-WI+amB0O+;enA zbCyu=#r${ri_zzP9&64gFA%Cb*SQeRwg-YvJ4k=Q=pU;9Sqj8-yy&oEvF|3)Nle+zjVdI3wt9 z5$Zl~qq$wEM|dZk2jJWV=UzB>v-KXKo`?Hr?icDS^&p&w;EbdnB~*#wJWTV5P_L`U z;EaXyIGpF;JOSrvI8Uf3CKT{{r#|rCpnp@SulRJDw`wY9z-0LPQ!I=-|eK>RAd;n(_9Ol3Cp%myjoXuk9zwY^CIP>5z|DCzgsy+`opR)2Z znmOG59L{1mU%*)ihxzX;5U=}L#2V(mK9?nMmce2EJ4>Zir^<3x{!gg>ZF6S@oPXea z3uir?@8J9d=X*Fmz*))4RYLWa>-a_WlW}Q%9wGD9og7X`k zjc|Tv>mNcrGn;7s6zXfb8O}C1Tj;k6^_l)nvt6jZPjLQ)yE~j6aO-paKe#)?W&XPj zq-G%J%H2h_T?o}1g4+mg6S&NOx3PG&THL0r+)b$NQ@0u17I61~+Z^tmY~4#ZfY;aE zn`R%Ont8V++X)sD5|LP2e66H-+07ZUt^fxXgbylNvoIM{%!CLOuUS!|ei>`R^VpzHe{V zF#p}IvaPPTdji~^aJ#|n4ww1wo+Pd6PH|7>UOj~RSiRu(hIdkx&d^h1QYpP@9@3e{caUJv(fxHrJP1@17o zH^F88yUc&}S-`!SdyNpP=ZkwQ+&kbh|6S(4Uio*j@-Ftz%yI95I|}Z-a36rn{CAoE zdOQ!Zexy)kxcd+d^WS}>rk}^)Jq!17c=h+i6L1&7eG=|exKF{I0QYIQW8gjm_j$O? zfA=}rSFhXA?DGYozG^SR9S4{B?~WC(SM1BI952-O*DG)*!Dart%zyVaY1QL@o%NH+ zDMIyLrGzoY+NsAppp%@0Cdxf<>|xIe-D1@6ymT_aTQ zitbvPUxj-7>*4+mcLV)zLY-!R&}N9*Z+--2Tux6`J_x3m3|KM(i z`_KQMVZQ&nJETUf1aBwV_8JIPPI|k*YXpz^?==*!?jUbhRyG!@`S+T_YYuNWczeLx zovqD;>hFcUJ!zQ#>aOwjhSw6_KJ+bw>RdeLzt>uf`fkK)1Ftu{{on=g+QO@Yw?Di? z;I)I-9v8g!71&x7 zs&_(<`R^I*fhp%%@LYJzf6o!G&(7n%zEJ&@q8GyJ0xyEs5nc?h0xw}rD%A5|rOAZq zF7}RscQicazt>s3xczH;9bw&`2Mfg*o`#9g?b&{4DVKW%zy6|@p>ki|K9C2 zm3P8>0N!2j?uB4+$UqkK2#HdmP@Q+6|Cebke^%1AQdmG+Vc+=p$!PYm0DzUxkG|Ye9^9*?J z!DIe=?@Ft_`tP&y1EHS(58*9%n|C|KB1W_)c4D$@IHt48U1{r z`VPnYg62!1p3jBwmcd&DZwb7w*t%G#&+BWNr8Q=I(c>luNPXCWk{UwFBgNAEQtxvxJ{ATcXhTjDKF7O+{ht&8D zg=+2jyV5iks&(!+rP+<#U8v5;-vfS2_N@@QH z_&NB@f4@$=KD#{p68r+|ng9A+$}}qfuj94_KZI|?_uw=CeOJ65v(K79sMet$!B64G z^odY?I`Atr%zu5Xj_|v~KMMYF@H@dj27YJO94*u}$I^5W>Z{NdemD5X)1M$ztKC15 z<|Lus_hk5tdcOz!o^0(^(|RiW)8Y4~KTW9DMjx6pggvHnyC3`;;GYS9ApEo7UjYAX z_~*huhpqjEdJN~$oG;X~F#!I>@GqplNT}!S5}HeEDldaS82;t(uY`XETL%es&sWi0 z&3fKh{t)=r!oP-os8FA^x@y;p(PuOa{=M*Tgnt|S;qXVm=kw9OS!&c9m(Tq7Zxy5N zKL2+3cfr3yjDM$4{p8MP{`>cc(dT#{{D52U!20P(2@g=D+_C>zO(JBk&)G z|0pXT6YBed`R_j|M%~f=(}+jIe+J>J@SjCc&*u=-um9)auYq6RG#CC0@F&9`1Hb+k z`(K1V4*pB*nfb40;ANVc{P$mh{~G*>^vr*i(*7ix*M<6gr@((3{#5wW;J?9E=D!}H zS|QATeWhl=p9B9L__N@@3;zT7?{P2YfA9ZsdnWmzQ13OH<|CobjgM(Q5f0%U?azb1 z4F0F^7sCGx{ul7)v*vT5zK&ngED-9Iwg~N^~NIsBFI>o51W z@V{aG3ZZ(x^_ltK@0J^|5mJQEmYrZ1Z@zsN3b7)b_m+Cb$_9n`QQMW1BL2LgM$!sK*0PD znEz@{fu08bhd_Ac2LzMPSoA zLUpAAkH#13^9m7U2qFY2f|#w$e?7Je4f9{U#|9k{bVhI#eJ7zxp5SPjV`@wn1icX) zhoC!xt_ZpzVEzXuNR2)^^FKJL#+;0x7lIz_t*20ZD;4me5S%JT{bpKl8iKPBoQ|L` zfxJrbSul*| zMxjc%;3fpOAYlFnBgE^g&-@Q=6QeRGxC23b@ZO2w0R(p;xEBHQKVbgr*|?AW-!IfN z_8@|%5R63dID%0K9zpOBYaXttd6eccp?b0h%>Up?F?vp(X3aA~^=Un*&;PLqo<}eS z!DzO=P*eXR%}YYP>c%0MfPncQF#q)kUt#4$p}tbDA*{bICL#C@!RrXVL@*h_OaxO9 zyp3Qgf@uie;9kssz1MV_n*0xDAb1bKJM`}gRptlp(|jOQsTh2SU@n4L2<9MQ{s$jP zt9lv+%>RJ-ujhFlg82wOWj~*>AKrZd^FR2a#w}^g8$KfBUDe%;9HvSgnFH(${J>V`zfQ}aXqf-H{uc!65Ui#D zRj9ARdK%`xzT&?l+y}uQ2!UWDf^7&kA=r%IPgedV)RkLkwhDDp{f*#X1l#HV5$dDw zK-d7me_}%BznXz?XPRC9uQF_iaCd}_5H>-`{0|#Ts~TF1StsS_19NAT<-ps=j5T1mv8~uqwJ%;WyCkyoz>4~sE!d?i^KzItm(-5A@ zn%+WveNU(9BUCFY?2GU$g#GBx6zXyE`=9U}F?yEHMR+m7^AHX|cs}bd5bF8Akme$x z`aQ<*5`>o_Wd4T(#p@$7|HCW9s84F)l?X>7yb9q6gjXZH9^qhwLlF*PpVtWW_^+k8 zj{92Nz5(HIgu}Rfqfn2B@BiV=V$>T*cniY25#EaM4urR{{&u16`A(Xr$7z`VdW26Qd=??|KYT`7 z^&R&dE1wst&llkf2*)EFgK#WD=70E-w5qqVa2)HI|9Wjqpke-p6Knc;4N?6OCn1Uv zzK*ayh$bUkfN%=J4-rm9I0NAu2&W@t{)f|KUp+s}|L|=wD!s#Z5WbI)`5(R~UaxuP ze>k&d-&qLfA)JlyV}#8AaE`R;;hzY% zAY}fBo263E=T<~JA>4-WUxa_NpY3E#{)ang{u8RZENXxVh;|keG5@u1NYhBDMiMnf zv>T!(^i758Ssd+7(@dyVX0#`wR*3dOv=5@@Y-KX56%w_eX(?1Ak6I(z57EB#ZG>vY zMr~>K7pmWdiw;0kKy)CY!w|JcbO@q@SaYyY-31X7GCEX@y86-Ki0Tj>!OA0rdYn0$ zyii@osEEixR6=ATV*W>lwCa)bYDTsg^*#`}hyp|&`|*YPj6#}7sQzL%N)TO-C`Hs4 zQ3X*qL{&t`Aj%MRLe!D<%zr)GooS91>Z2cvs4Jo_^vr)@pk>rdzQsfbQT)SKI<3Dx}-^`SX~<~nZoLv$&kGZCGS=qyD25uHtc zj!^f1F3ovDy_POObP=Kf^cM=%Gb_57=8~Gqfrzd~bQz*Sh?xJ;71FB5!}tH_DlzKm z6AeZ*6cO`3x<q31UryzP8(Nsj!5WT@x=D!}{bQWL72OT+xvJ+DN( z6QWg!>Vx_RL~9ZKi0EfTt6BMzP#OTCvJ+k8RFgOcNeNNiua(|v&J+>yf5Ot5w}FV4_jLZ)!K_&(XUi%KF1T#U|nav4z-0Y_ru7>a*}@e4)A*;t+9yIHHe*>M0PX zG!>y*6>*06B*YyNcR_p<;-e9FVohhEKKEm2juq-Favb6l5O<|NUZ}2b+>Pc$p&m(h z#Jv%pjJOx#9&GI?R8PS86q-|odQMJ5dVB# zz7TPL#OEVEmzC!URer{ND#ZiDsAoic5#mb`GymgD#H*Db59Gd=3HAJ3f%qE4gAiYh znE4-HC9QfM2D5%hjTwsgdc@5C_&V__&EgwaIgEx^Djtq_6ylo@--GyO#CIYdf%rDW z%$E38snm0FJNLaqsAq%k|1tAl-GlMHh#x?FA1m({>b1fAk4K8pYw01xPa=L8@neV| zVf~{*eMKIpVgBpcdkXQhh@Yl^MyNgC|KsPy=rO#2^f|<1kktRM;6)?{Abtt)YQ$p^ z&p|v6@ifFQBc6nKJmQInC$P^~YI=B;<~5-{)7KGCMLd~)icrry^FMx5jGp1?h~G#2 z7UFjhzs>p?LVecn(!3{B&&v1%#Iq33r2kN;-U{N`G#?4|z8@oAg7_1}Um%`~_%p=w zSo5h+{TJ?H=70Qo&0b$3UW9l7D;Em&41Yz#{MSeP8u7P?mm;puy=81&F4Sqj{Et_N z(R1=0;#G+G{vWRtuby}D58U@hp}s~xA!&&CXT+NkuR;79;$IN2L%f!izY6 zyg|10)%+dtCd7ZRb)!%p{ZAU^zrO3YAl`v^E8^{lx3Tqap`JbFfBY}a*=+p}$<9c2 zlI^5{P_5O3@BazJs5i-^5t5cjc15xWlEz4OL(+tMHLclecbaBGb;M*(Bzq&-i@rHM zkDD<6lNMss$dgt`_G4LVB>QrsjZn>A(w1g_vYk+m^FSp1khDiqL2?k1GLnOl9Es!* zB!?mC!1_aL>JO)3{;QwMBy~s%NOJUfp~|$RNK+E3dp|Ld_()774iby4woqM*#HC^W z>oW?F#7IK=NT_>GXi}lBtRguPNrvQDBps1-M#A_1q*KjaM{_UczglBS7bM3cIgY-o zP~DHo2{he=y8n}qoQkA7lAcITW@`_jzDB)hP7&%^?Tw@llGEr=L+?x&ZlAit8aUf3z1xc*N|F*C827f2~k`Ym{71bAwRtdn1zjkPJt1JCd7_ z+=7Jf|H%lcQGe;5F#nU=#OV3F1IgV;?qqLw3H6n|hvr_PKI{9DJc8r_B%_cp|C5o@ zs?X~o)^l!k&yON`0?A|aj|){UB~Q{kCDiNf8KmuyJd5O8B+nsvAIbAbCLtM(bBP6p}Gh3*y=^UDm zg?jepBKZu-Jo-UFXdNqrtJqhBu6 zS@8|c3ZWj=cSv?1`5wt{NLC_QgJczw)kuC|<&Q%36Z7OJnxBRGxW6D-hh#1NuR=Zk z^)wrVdR_gFWDAl%ko<{cBU?8K_5Jb}&1Rt<)m9|ik!+*?Td1BR$v-sz3e{Uy@*mPY zknV(ZSELP)0_o1un(iW0M^78lH2S~2(#A-4L(2S5o3ipc)-eCmX0olGnCYHKTOr*G z={`uA|LNW}t<3+lr5JVYX=|kWA!YujZN%#_w3Y32f1#Sa^Z=x1BRvplinKk_64HZ^ z9)a{=q=zCsg!LV2>JOtiT&Vjz5@{Z39eu9G7ifw#ri|1>Y9O_dnryX%YIUU!jVsh+ z^N~hK1NxAagSj1(iBSDMWLiPm4QUnWF-S9{osf29%~8UW9_Dsu@@S!YUrLWf+7)RR z`s0N9jE<){L8!hFN>4<33euC1_CVU5ttSihZ1<$;B~(8JPESR8I?~?srwR2r_CeYY z=^6BWYy6osX9?A($n+efHzDnhbP&>WkzS1SJfs7Vp3lk)gnG0W(p*HN*3TtKFGG4M z{Xn6*AJfZet`Mrv0_l}VuSI$l(jiE%W-Dh{&)79ILxuXhu0uKu>GkwC2=$e^k!HA1 z_k1(b2a%3IdKc1Lklv1z`JdhHeMcgF z9O)>ek053Kr@YGQlWfZO|CIT!o<8XlNS{Xfr1X$JRnrgO|I=q{%=4%`g>*D3^|wa- z`~NDWW01~5`XbV)NMAxa5$RZ@A|)0bsm^;5r;`JXcX)$bvsuOfXNDf2&_B$fJ% zCd+op{8!JW^bMr%Abk_*TS%Gz>2#@4PmPrMpU$9R{-^IE{QxQRKYd@k&Wf4rneYGl z>dZ#E20G4D|MU~7)GK@*_hSC*BhE+qB~s>p`h~Qr_oZ|JD;Em&5x+uO ze=duWE=9V8tzQdOTBgfrnE!fReS`Enq$}vZ73w+R`+vGpj2_hwNb95ZN2HsOu12~J z=}$<1LCXA3*GQ$l;%nI(^I!M29_jB$ng8i;(yGtv4_0mz>Z|rA((Oq9Lb?^{X0~n- z>VCG-F#pxMt#3;ILHaNK4xxHWsqBQxo~SfHr7Q8kOd#v_NHVw(cWT^IU03(@Ln1wJ$1dQE5ZJ zpHSUpmHlbj3DxI<%7Li#L!~_`6;uvFrHsnKs2qvPA*dXN3iH2msMPB-J)AupA=G`= zp;AC4N1qp})lwRllt-5EI^`21APk>5{N=P5k59W44rb4yO zD^*lZL?uJzSX4Tq(is)zf2EVusI^yN{#T9>qi3lLD#xR89DD03RBuxi=6|J|7wYdqWgse-&@=z_$SBr zN>m1;aur*d|GISu4f9`Lg=Ta#vM{~bWpY?;NFzPEKQ5nTn=D)6g1eM28d6b^{ zugCcW4f9`DK27rs$^5T8$L;6I(c}x{7@;2LOEhE2aU}D|uYE(W(WeF;upz;MOb5Z#Wm3i#sQ{kK7_I&bl;RkB= zzC>jaD$M^1^Iwgm@)au=3&*M1_!^aOQCW&g{UDdIbvauf=k_<`3gPQa2sQkj3wZd2bJrm^vZ9jY((XE zdLB`ad=m}#n$nWnn^E}}l`W|JjmlProtHm{=&DP;`RZk9)#+F+-@&?`Cx7< z9wOV*kD@sgRU6gAP%WT(II4B1GXJYbO6z3iQZ>iQyigyph^m1q^S@daujaXGveFW& znXEdf#;Cfe2BIiBVOp*AO?dNQgf(Q_r}Iq5;uQ>d>p^S^p3s;8sco2{n_bw7P*&Zw#H zhmQ4AbSARysGf!DVpPvY^$}FhLG@Zx`=ffX>{~q-)$>ptfU2733#5k$d^S}tWSA)1l221y%g2UQ60!u=D)f(t5?tr66zkVLUjnLSJMv`j=h`P*N{VLm^sz!P`wM) z>rown>J6w4N0s?sy-{jr$jU_ZCh}&XKH@E?-i|8szj~W^JsZsb>YZZV=+C|GM)iJF z@8R~nB=cXTMD+nwN1^&4{Yat8gz7^y4-57E@+hirqWT!BV^Mt^)#p%s0@bHceUg=2 z`FdaGfAv}MdN!U%bquPbS^0u+%17LOk!1c)eVyCmP<;*6mr;EM)$ueFgnETfqBp#kj_N0X-BjgnET6 zqWMaw?}#PH>XYhgR5ziz6xAP5U54uSs4ho!1*-pJ{WrqbuH^Q&f~8V^J_gDwm*y8>rwq3)eYQcT8?YW?LWwkLY>ur zBHIPkzfk=L)y=4GLv;&lwhHyi{F`RGP(5X;|03H7)gAQz)l+A3)<8_Qvrt{l49Ipv z)(}}^WR2Lmt579v)`X_1aLS?F-W}PV$eM9`525ad`JXix^XBzz-3OV8tOc?|khMg% zKeATH+8}Gq)_sNJ18(m}at3s7?U1!cb^!f>LiOCw4x%|&_--$5cR-dyb||tVkR3*I zxNst`QFbIvoly6jM^-{spf3v5jAhLK%n+kiT4o{Zh|ES7A#;%V$XxEl{8wu=Q{!j; z>;7Y86=Vr3Q=y*8DorNTl}8~v4p}E;#~|y>)}vX!H@A-^y9jlCS7hCgG5@m@#E*Z6 zH7AnHf0eP>$;jSA)&to+$a*5X99b`9=OQ}=SzlzQB0C)!^FL$$tNSSH!+y>X>MPg} z+1bd>r02TTGjk3NQ*kQq$Lu_0mmoVI*@eiM|Ji{0n*YD*E@C}XT8+8>5ZR^32GTSC zRla3cAiDwCAY?<4U5RWkva49b{MYj^gogRAjP!Obvg_!%_H^YiWVa%_5!ubihO_l1 zp+43Knp=c=25v)kC$ih=ng6=-E}FZAy61b5J&Wu|v}>ug{l}y@G5!{RE+UT4fVyUKOgRQZ@vbR{t{MYBJ)+F;^&(-_Lb|Cuz*>}ihBKs2Ahsfq4n}uu+GUk8A{8!JW>|^%% ziBR`257~TVpVD)^4Px?SpVNF%Q@H@yQe+E}Ek?%t&zS#ul`diZ*ERLakbQ$}IsN}? zJm3E_=D&J&WZxtE4cSU$Ymlu%wi+4pKl`y}ubC#lzum%IcgN<}@=s_Zj8_C{DCt8W@?G#_kym#7%$^V3X?&2OAw0xhc~m_>>%N-ybsH~-+nSk zofm|+1>sXc_^BWqAB49D;T;b1PX}Qt2tN~q_XOdcLHK7uDE=Sbr8kJ@grCzp@8;F4 z#PHrA{6Y|l|A(K~lS}oC_!;j|#^(DPYd4HpfktAzaDl{_4T-9b201gtJvu2tx7yu#cdTh{8vMaBdKa|A%wDax)i?vBa#|@GC*MFbKaIgbRXD z{67@`x8v5YCLZV2;`2lhE)K#cRWAN-R#3P^C7MCo$7MnI-5^{Zggb(8MG!t8ge!w^ zZ4j;s!Zktow4Ptht68n#Gb(wOSKHI)f^b6+u2cDXUTs?&RkDd!qj86ugK%3Az7T{j z1>qLezUV!_RV6R0#H_nlg7CE&r3BrRxxL@T5c(pWtNF|5$q?zj@LHLazd@l&U7KDGP+P~t}uF#@N zzV1E$%^>`C5PnPLf9*Z_H!ArKuSO0J|27DJ5rp3h!k+};_k-~7gK!`Se;9;E_2dtD zHTp{^{vZAwOYGeJLlFLB5dKI{{+L%wSN}^T|KyeYa}W*%;lBjo&w}v(QSDE8wbU}G zl4E+_aHQcNJQ;+?Rer)N|G7&3l~>#M{~d%M1mQ1(@OMG@t04S;gYe(<%&)y)iT{Vc zWr=O^--GZELHK(;`G36f|4_*vy%O;MAPE06NP*%17t2#;@M>l%b*4&2dLM}iiNstm9ro{ivT1$O2 zNL?AE#Q#%Q@G&zEsgLO=S9$NhI!Ij~q`?0ZLFyXSUhCCfrxJ~}#qfq8H6}=j|EI+N zjf|Q~>dBjUwK&`oq&^pQTd&` z8l5Y3mrDMOSF^@bcL%93NZk{p!0_)?t@yu@xKdwGNx7cit@~7v0>dAt`wCv|n50!w z#jC}kCP>W)Qnf+q{vcHsq*{U$_&*qagPs)sH#D3Yuaah7ZLeE{6c~P+$|vw@-#JMo z_wi~tPik_Ini8ZQ2vT79?W+BvYRzmuq>_wRGBrqLgH#7g?3ho}Gt>3VLEU!-slFif zaFBW=NX-mVVEA1s@8;F^SNuOUizP>xEaNIk0ZFX=i*wO`gf zu3rgKkLms|cs2Yp^;MP3!!Ye8y9 zka}I^Z}4hyds8Jld9`x^%G@8M-U?Ftg47<>?)7TlR>?cOTADu)qz(ruGuMY$Zd-g; zPafgb_UkW$)c1qbUj?bZ4pLtWQr`$tMLqL%UTq)0sgiGbCEpHG-wjfKqw?=~<$tS^ z?|CHyLFylZ)X^aIevtZsYJcd}{+&wxo>zsEKjW1D4OUOh_4Ic3WP5rC z$4$+3WW(~7n(5hGPo_KjU}s11!Tc>1yf2&xJF*q!h0bhGnC%&dn@pH3B<>8S)BdW>x@iiSEi=}4JJ0Awdz&_?CDVZ4FfL@>>4;Qa0u6T2lghqD~I>&!gI~}?DWn; zZ#JLpK+8fVv0yMUB5__~F0r~g`}M@)u%^kNQ&E$dm0{|o`w{X5h(6zBVD2G-+^3)m~X^;NtT2#**{oF6u(fcS&?Pud}DoSV(` zm^n)~PUStPtxC7W9UMp87q{~nG}1V@;I+X8hd7V@OL0xKUH5ae)-dq=z`=oi8a?%+ zdT8q_!+V!v63sweyXRtbqrA;DT2tOv=*?%kOtaMvV#A}@VpPH=+t_6P;lTw52KyHc z_HQ5T2L@=^yrj6LOEcIE3VQ44{G$tw&I1;Q%xKmPAK3#$h8ArHK_xyIRqhS!r4Rl) zFsil#TUiZC5aCwvPMG`(n2ZBNBtW@a2mAL7_Akcd6_;7EsTp{VbYx<8w%MZ6Qas!-Gndbz`JVC3 z*;##4x;m#Oa?=vErm#?-;!UC>+m&eP%L6kO6t`y+9epV1z^K$=a8GVtJ-lm`2ycSw zJ2ST?@Veqbz7Id=`feL|bKq?Z)h^ID2=fRgX&=emykNV1!3WoW!$bFDy@!Er>qLWY zgT-)W!YzSHtl&qv+zM&l6}NDy;kLMwr9ckr;lzra4!Iki10L?X9e2}aVdI8AH zA9(L*|G;ii4vWD7hF0tvK5!)Q!4170QXl_%GmxsPHAq!e<$9*i#6JvSHSaNY1PY_a z02f@aDo<`(H@tsmq74w&$!e|jgSzfXbdUb?#0SwNjXo#w!RT|m);{**yU<#b<#x4A zGdjCEXU!rjMuQ$$K$F##tOR!`u<7T}^rXT5X9gF%#P!m@2E;qGaQD#DPidw`zXD{M z2ezWK?C^W|Z~wr%N0%nLt52+WYv{<*p*PX<(T{q#T=AoC0+$JPy`(2}W_!W)fya#> zMeDds%i}^m+rLf=b;)4=3yC)KVDTk&{^_GnVW=075C#roh)=w|WN6vi#0NKyL__3F z6>Z{8x0>Ottmw<74EFaA_OD8`p^gmo88Cu*7~uCb zjl*w%5m_!Y_S|jgL#15-HI?~H&&+(bbLtE>L1-$QNb62(@y6q5sEy-DzOx5B$QwjG zSA2!^-7v6KeCOSxPgrI!yyqE?^anS73thW$hT(#@KHZA;$5oi_)sD;d^%kbiup3x9 zoy~V=dgcIws`9QZZiPa1c^84{;_;Z$#o|PdpPcv7$pzayZ0v7l5S=EF**+k2IA+L| zLr31R2>p}@{mfuBCXE}nn+0F_H=tKtXGg!fkk4ehFf?QS4{*W-%Zp{j*Sjz(&BTK| zdHdi3%){%VD?G%(cy8bw4F{;}=u@DnV~1WovG}c_MQd%V+&Yt+{u7P0*s-W;nL6Xq zY=;QDvc=vNDqH%pQ#A^>E50gDJc*4i*fzM}6;1w=m=?FEr}5BsK2Iumb>JcnMFG8o^Gh2{1`1rlsi0THO)3$53 zpz7hrSC}oxYy3n1{(Cf@wscsR&Ua>~&dByyLa0pVvsqCh?`;3m`Qoc6({}i#+J9%T z|0N#_pc#bYkT5MoAmdX>$-WgiB%R}SF#@#@p zqQ%ZZ3xp@T2jjL=oV}tjD^uLf#?!nts{o=L=x)8)lEGqF(<8zM>5-GiWM7S)@c4=y z#}}{j+P%531?`sGxvwogO9{{MfwZI%5K*>}Jd+|oRe4`;9z24BKe<#Ep&;T-K~-@+ zXaJr?WTP zk*MwLnck5D+bz^K;{b(3DL@)l_!?&#wxbx-S{mJ&zrw?0Cb8#vRfWavD4r@x zQSl>v9JA&@ZV0ano5K;M1W9pCI zc_ddz6z8J~v!dbV4%=E>te+S3LQ}(a0rmvZ80+HMliQv>`3!lkVbzH?^R|xD-OX2sA^g;P5N>6Hr;I<1=?yjQ?Ddls8C%PMlRxdiS^3|b* zOM%_cCdl5&vo5#el02h@^wHuCQ}Qf|Q{$}gRz0q`wFf(EekLd&Jucg0ZVT1pAVlHb z5c0T;eMWKscN>Z1P)Bw~w0zdTftG6q*2HWFy4Zn})CEcr7`3b(2sBy7Q`MBq_x4TC zaEnczeIMwJR}2rXlHN9P*+A!600rQ6kI(P{vf0fPq@nTjWBEinPxXmaTTZNe92^g= zpPhE2F`^ORh(>SrMy&XIAk$KAX0N^_)7Q~irq!WcxK0ITxsVywt16RVad8LGY&6d% z3Yi>!iFKqY-KV{oD!x|1YTUSS!VijDrgWNDboO$aZVv{wU`qS3TO6VK<|Oi!5+B|& z1lTzI*1F@14@4`2{d(W^>#T1AJnNg@EZ?^CT=uKl^sBn1EB9#D?kiOQW&>b1qp@DDVaEvaGWa^f$bB!|=0D4(&QD%?muq zp?Ky5pm^p4f9U^{vUIiG|L?DcMP^}pZ|3Vtiey9(PP)nY7}NyiQ^8Q!>-S1g%@yW*!mNS;ITaI)$r|L_8E zY-lvYSk;irKboCxs&hF+bIVLInG7KJfs@HkR0)q;j{sRd;Qms&K{0fSS%b0&3zdVsw%66Gww zngyk@Ae-qfZdbvy{P=R+V>_bi%3lM?#-XRyib}UgntDCaW*?)@n&VR-X;A2ynC*R% zCFeN>b|nOBiq}?Ctj3#;A6Xu084qTEijixxVoj>8rJPvWEvBUxTMqY@h6->>ZU)ho zQd?Y%$^v(A?j*2#U=3O9uoaxx@`PmUV@o9W3w z+yrVVdsj&7uDFHF@%%X$8<=Cj8KGg$gKTqtKQO7&{y@cYFGr<%Xvqu1OW%X!?V2N9 zlc>zN5HbQqJZdAp?`oYCapt^{z^ug@Zz@~nKv1XZUBNq&T187IZ(xN}9WZMj!5vj5 zs=M zyJR}a&kkq0ZDt;_G^L#61xGl|ZBxNegft5zv0$CO&o9D1qrsmAb_mTK3VZ@o0&tl+k zheE?OKxX}GC6oAScJjhj%x@J9H?YynqtR%~^TYeLop@)bkx4Eb>$N@hx9_oSCzG^N z(wjQNOj|>0F79cZlC2APGjCnM-l;Q+uSRn0d}^Hwd@&_?;XeVn z_Ok|F0Y_N$|1)Qe!_dP{iC=mhb9d1+;NVDp zME}dcp?bXG6Wn|#9`WxZXgPV&2WXa8YXG43k8Q+tsI8I@LhR>+nLXzq^?&R(OBbW- zZ0+Y>kI(;P8(M3&n@n|cUpHhjt64PXj0psq1Dq0_C!!}*!nPSS8| zAMRwN!QCSmV@^a`_d*Kl4y@FWY<)7Z^~N&s;?aJHZPqeTJ+yK2iFtVTZH&#uzxGkM z@i=B24?9^kbqVEpuapZ_ibP;4$ur#9LkHa|+Jq1+K&QO%j=JHPY zH1}l0$&akZ7*wT;+f}P!Sg=d;Kv~p7qAHy&?!g<(T)jGuo=lcjw6S0<+h*+Qg<rJWzFt-yrRe^UX=JE_- z8{;iil>TS6)$IpyoMuE#UUmSOG!3lMMhCK>wM5(!%LHTZ>dOn+ z{FF>*2R0p}1eb$pqu^ml@U<42V`jY0fW@61tTqxoyrW=eU}`JH%z-1!_x>Vw?|9fu z`ULq+DU0sLiar3@=WVmH>p1P$CYNqJ{_GRL`lDC=4A+s9D&cnP>@EDXt+Vi80g`A} z7c{pAXXSIVJ7EGGakgav$uqx)$Itwp$BrI+gr1KkE7i7ts0n_ktp)jo3r1^!oh;Xr z>+Xb_Fa_QLiX7E=DyxSu9}`+(W$WzCW=AJ~@wh*1)=Ss?9W|G@r4cQcva z(x;8_;N*)>fET0Nm(v^J7~wgeppB!>*@^3*xAsW}tj6t(J}f}8pDF<69!$vITV@Cz z2o2u4OFcfs-}gD;N?aK@f-hscJpTI9lk46ddUFGj`44Xnf`@(sWE$)3=G=&l5QCh& zVjWPZXzaF}1fT>0w2X}r^t4BM!#F%ZH%t|5O>zuC2B1#8;V_!H;z_U15B{+Z%```L zS?_nrTdet}{Y+~18SKi5q`5m?cb2}NnJJ8o4o{O3H*6{V z1c-e51)?uVpICM~*n#9J1<}0SlxV9p#(*t)lWz^!MOq`XXfxJ;V~1D%cha8G(1J5y zVkIky?HTOnxgRM*KP#;PqpGsA$9V?QxHpD9y8Cpi-tZY?z88ZtUOyPBjCBBlS0ta+ z@X09b!FT}Qg#~s6_G0J9KC$EtBh-Ja+aro(;%;D7ZHc0i)(XX4q^qZ9ElyRYP$aed1Vu_*B zDhr5CuiA~-b|rR6VgrDDCi$d9G|*d$Ta1K)O#n8YL)=ltHt4NB_TDDwm66(Y)zgl4 zKTO*Fu&)E1)BWebuYR1tZ&H1(t0U8wNIJ_-!W7WJ)8h0I`rcWbn=O{2C%A@yzr82^ z5bwZDuth8exq9O`!Tz+=`A$ikN;-QY8ygu++wiLGSc5}b*B@W)xez}{e*AWC!q5Hf zAK3%9+%Bw`0b^-b=k#pi;lAlP%R)e%bX!)xKu+eU`9V6T=RsF&Qt>m%Qg?I`Xw8fmk_9~gGRo>@y=doZ+k z8N>}PL8u&CU#G;s@a>aZ-izOZj{er`=-8Pw7}nYKR$oVFTyM4qP9gfBdXiWF3hb3v zXg;`Vr>1E8^kDxJl60Z(zigt5v{}C)c3W2mpHcLheBT5L-Y{NcBf`G4NPiC)Ble=T z!)ta9KeG+$*zt9TKuK5s#1R&a*yIUk{UQq-E1Uxcwj;OvaEme5D1YL4pa^dm3k<2l zGs~S53JFIz9)Y$hJmto*VPJ>$%V-SijxX8`o2yZjfQcspe`0>gz~wHp~(29t}M!?4<*oK~APkXX1g!-9mJZ+OqUv>s`>%he$HTIyL0 zQg)5p>M*SO&_&Zchy!>2C!2s{lXZ1gH08RC4HGxwUxhU8G=La7-bRjgSl_XCp3XvH zw(oL7S4SH>9az>DH@pXf40}k79&wMMk9GSH-Bxkk*)UGU(1ox05Dj`!9lLegPcBEd zs;mH9Rh!Rcdad4^(me?x&0FI?)-9gET);yGV-L4Eid3akfgcpN7!P{Wz{}Q5y9=~x z_wI#Dp+m!qY4+}GS2;4h<{+r{nu8H|Ilz%ly(Yf5j~oqrLu-_p80HG(6N$c_jzm>9 zKQ}u)_oxYMo1m&p0+ZuvW~-*qYHQ|{luygIn3t9DJ;m+QA;~IKqW$8*{*9u3l0G%4 z{^!IuAD0nlFPTe;v8y#K?g3UAy(l}qxJT`hMzIlqJ{^M@fk~#sC__I2YEB+nHMDzo zytY0_CKzWHQLe1m@e&fK%1_YX9W5y1uZkQtTJ-<<5e!=01ha=!)n$9#s;{ie^m1#! z9HZ2duO6^VAG-u77wi5M4$5a@;@yC~jY6lHUGU2jkME8ov+HJ~7f#U``JI0QDmBhf zQ$q{9<@A%QG6if6&?B68nj4vU0ti;wXSI*H-&rQgxDnWJ$wWCnD`Yy|47Tb#2G#t5 z6Othuh$3O&b(2wf{NT3Xwc9X`qeei%8Iw+a^lyLK4BdvNk~!VEz5;cdFU^r+BT4HV z`oTn+@st?Yb@htIBDz}ZB#YWk7z-k&=A8WWIdctEsAZKrlw0VRsUtX}bFO(<_IpT_ z5H#Kd6~^SzRyV%S{Z5|E)`9g$mqNtY154FAvEtqgGXytjTs`;Zs9#`GsH4NSKpp*N zLmQRl)2uf{cXETIi}O(^lV+OL#)=6+9gE=^=krKjzh7(^wgXBzv_VrX*z|nl&A71Q z84O3WGrzz%+Sk)5J5=(93pl^cSrnK+SC+`(57`PkITjwa$vs1R-cGdH$JAq3=D_op zV;g*m8#gtcXSmx8?{-WtdHvJIZE?{H*P`|NocdLtnUm|4W|_QUDH`V$dkn5p6`}5c zq!0|YNNuv*h(FYgkHAw3zcE^aNC3KlOVMMhat)kH7m-8ESO_DKi?i&mWx%Z3ZGP2? zpTXvruFgAo7`NPHWFR!RWBU&sKY}3M zgNWvoS&?k5#J@t5*d$s*;a@hv8i^X)2;LprJ;mxKN4{jp@(4M>c7_)pJG|C7(r&zk z9ir#V*!?2WL-T$MLt*NyWwg4k?@QV4DSi3r=tzwLa)JsL0zmU@a?H)>57;so!cHm6 z;CV(7*@fvJa~E)I9oT?XL2ueVXz06XCLTbHX!X#t7l&VZbLfRFU|l5v7-zoz1aK+0 z(_U4c?{=Qb>hZWE&d@`H1co1@2^^qBQ?BZLVEz}4xvZ5_sm-bUx* z9<$bs69?wbwX=cD1j{!kg)sFP1)&CZ;%V>zb&@J6QBN>+GZGWXTYC~lRit02k++4! z1bE2cYtGU(R8I;;QD+uK^oveLn9|7?u$MziKnILOx#z^|`?copBh~V8zMzm`OWZ%E zB4`Z;qRV92vr$ixaR^~i^uoaz?OBXO=42Pm42#wbnk?plgngg6DI{uhNh2gHW4v#*VQ020 zmj|HLRu^_6atoe(#Qzupu^*8SU`?P9j4oVOk@=urzbuPmg{UPnqzpPT$aOxWJ?oCI zd)E&cx@oJU60N2&!^f;}H2P9>Vf3Xf`79iO1spGl4_O@J<`%ipljq$%t`|VA99Z}2KbHL1CeUI|cke2J7Y z+X`gubx~!+ozMLB+Ze7|N2#?Y7^bHJH)6rbTmBbE>y~3?w4j}z!XVP)`<#P~M@%B# zP<;Y^K*tz_LGsdHnmzpPTn*YxITZ}9-!8eMZ*AoC;A#%BbTMubLESL(zUGk}AE43l z6-*C|@!WXU9W-vDxZer@j6n@jELlr`j6sDA#UOPuPYhS=L{xj@w@NChUV6`}+2~m_ z%@HUXi6CQ9kHM>dQt~EI$k`0W#ym2t(akrfUn+x(qloo~D}HIKL6&2&nO(9wKeNHv5GT)l@K<`7Mts1?2#wnw>Y z(tQ~me986A5~+^;9Z;`kS*D9c7&jD&q3n_*ve)zBxBCS3~V(ybbqTYJnVeZPq!6L~Wy?7AaB?LK~R% z6N5bMu~b}pr;&g^xm>8=oDdkaTp~`$Z{|s%6)Ul3pL zgo8(?(fl%gTmco)feQL(wN>k^&T6Ww5|FVqH}aIl?&pU#?to-+a=}ZUJP)1DSkA^= z^#cy6)gUTxd6TnT3MP)kD8DJ$4`BJBYV`(uZmbxV|7 zASN_g>|%(_MUW9E&u{lDX*G!-r6J2a>Xe@k&3+iDS6GRvs`&WyIkR9<1ojmbyhR5p zE2ekO>ZO30E-qFzy202$82+%;A({p@fIk_Agjc{9r~W-7(dRwrWLRjGL!0}DRxGi& zh_%o=9OKDtJA%j`BS2#wN4%PyEQ-JtKa3zT)(A4cR6vF&cgHXn=x3JPgV7jgO%M~u z!PD4-2tatisZ=<_ItHiNR82)tr8BK#q}p)r&ZI>TkTfUy@jkA`*pMKuV`0M}flcsr ze^0voTNt?ZkHC6)1OhSxqNF-o@$tVuRMtkD`|dqlbnqiYa+M8ABa3HG@7+rkDs5Ga zaac~>q}V&=kz#QL_rXdWSPbBSg~2m+Z;pG9PFg!{i*4|V}h0N9#EWTH0`J9 z7A2ts&c2$Xas* z5B5BoxIc^2rF7gOOtvpOJA(peqZr?i>zj>;fNa_Q&*dm^2YiNL{ ziocKCcaw4QhjGzb0Ben6fVE*Ai`B!=?xJ;Hri{;Q#~eG6;p$z7fOU&wbS*gKl9`1g zrwAZ0_c(}3a=Y^pkee$)y*6NYU-rnGXAJfbU#e5~1yuYQt<41rKOT>GQmiK;Tz{LW zP~Z8Whsei1LeF=#_1e|o@NW)Us4=X=s$w81)t~(^DPKhlE#Xk%K!ZIaJlMaCrpyw} zI)0W|HQSTJ^ttSF@ka=g;R#}J2Mm)jvEO;Z!|u}6Z*X$mY4e6Gq93>xKl>a92UqN~ z4G3ODsn+2#oQmYc^}p`yseFi1-6k~3Q&NX$U4Y?j&k{*>$c}Ho>*wc_p`tA#`lub()wd#oE=7aPt=qSrw!@w=x4o8(k-5dpNb5!JBkUAnx zfR$u75w59GKXj0ku;gVcOW|AZb+ANuDdI7Ip(bJWf=IykK)HJKuxigP4XLKv%6nKr z9Pz`_ykbzAR}4yPi$Mxf-m9b`d9^(K6@xczb)Zun^1KW$fOF=UINJy+u+?}LAG=n z(!z^vTIOg>J3`eVjypu6E%>u_kD;lQ-GXaUIglfFVAI@UuKK$dW7YF2Co34Cp+juD zG;N?f-`4^qj_0``zPe49vNK}zL24(C9O1sZKcbW}eSq6Sa>(fJJF2C3u!Td^K@qUF2kkC%}m z`Kj3@m|)%j$1{+;p%2lowxciJBn4;puD3$`%^4lF36kr?`r z^~i2~3D#k^T}Y2z`wzftg2k(S1QDCiiIeTXi0)RTxk%txG0s?kV^f!CA8F8a57G0A z1Hkb^G|WB#bnqI!C7YO&ppiBWb&xN?@J`Dk8jGDOvo9&j_Lk9V8#P43ZTrW(j>7p0 zVvYI@6=j#=ma$Ntlp2d|D>CZd--2*Q*Nbd|xJ7Ma8@MqQC7~1#}&T7G^4toMzxQP25etzxogL{tcpAUj0ZBbLh1wxi%1e|=Q8Gr7N zOEJjhPBt#5v6-5>2DI9N5)?lFDGX0kWaR`XzL;rtQT8t12AsqXC?Bi@-h0fHOMa2# z3gLP$92h$E4siSY#n$9VmUZ2gk-?EHj&$&mxqVy-R+Om?Gd~W)Z)+3Vzt7P zFiWo`+S<=+&Q9+n4VHIM>tynp-cE=jIC;(k`d!9@#J2O!r^- z76`~q&c}aqGZ3k@Cp~aFwtGshgKjZ&zA7cic=vS=%Pbr?rdS8;z%jsPK|2U=Pd@Hoq~ndCkyHx)I8o949mERl+!Dh2lk0kT!SPPz>l0 zzjVbfID$4Lf$40r9i2E*NxT8@p6tTji!~%eMgYOIVu+pwczHdJ1En;l|p>QP#iFv`s}=uPdxaecXN+bHy-va*5=>!2)pb7<=3Pp&zNURh?0BV#BhQuNh`?D*D_btberZ(87 zL>Yoe3ODqglBwpJKdd5M*z7QfSL~UNNGqaY??ukZai1q8n_7(*WCoB0xDDcQObU@| z))x1etWL~u#KG8utBb@x@$|Z(6%_ZzUFQwMy(`}Z0u!yRa{R;$BHIhv@GARy`(&te zh1}p=VWH7JImZ=E%Qu-K?qT*Zu*I_m`*+Iod^iE?MnWMJ;7C%8`M%9?r`v;`vOX4!QW`rAYG} zfM3deBZ*RLC!tjiTRKityao#eGN>V(-~67N#>9awO3%bo5>OO2fD_3&L1~>QNfwhp zpJVnr^+4hJCD901T>5{2U7NE#wH2mhBL%vqZEg$|Y8_-x!Zh~Hol@LxAI4(C8Cp1m z4i3T(?Wxw@4A=1mo;KZz<@F9`8E27wjk;M!R1XX-g7G#^5m7Z7eb6wE`UQqrM-B)| zYmT5~)o524&sbc07DF84(+WzjaN$@=j#^%dRaYBw2*<8TZK?6hUc=X1bGaK-)yANf zaU533#b-POltUo_I#8i1cc1T@;<@%nGPg|}N0PB2A~h7_;Xy*?7_jDK^>;xqydn_D z$nUDtKDJ<=Bn)_#KrG9>vFGztDv`Kh;N3EA;2;=U*l5XxV9gzS$%Yd<54uqvdn@`l z_Ey_RA@!G3E$gipx&|B{ZjJ2pypXEVa>o@Rb*w?u3c@;3Cn-?71w37}ut7rI0Z{^v zGIoY1aCt=k2zLvjM8i+x>Cu@rE(wM?^`_Iqnkg9#;w36ydIZYR5gBCIi928WdvqeS z(Z+JDFo$nt2T{lY($04gQu~In-RWpy+1Z$3&(9)a9^gg+|3dZ8uNiF1q4hY=}ftK>$r_w4$)43nn)^m+IhX+k|XA18xo z-ay6KnI&js!3Y}_Z$M7+F@2^-h#XYx$@EPlzwvy!F-t>lCF8zpnVZ=RnYg@R7I?e8$u z<<>i$tY1zZQon&bq<%Xoz5X2x8}eYXCD1qu|J1vcpdnfRAGVKLdw0P^7qd3b>pdf? z&{&h@5#yS&d1;0X3(;H!pyENaSlNVgX1PAJieuO7B@V!y9fd0;@id)cn@M0)4J(ho z@*Gb1+O{Y{L&Ei2mZ{WRZs&c?!}7Yh7SM(uLuj-iFn6P|G3u?K!KyW&+23m~i{OZN zd-dWcPh`;H&~j>oYvsE^pd8}H+30hXEugi<-YXmqK1vWIe3V8Mo##Z+WaE?Q`vc@K zSX_r8Y3_y9$ef0Z)T`>_>y8XBe8x+YA#{mO??bIXCxtMMdR-4O+XyF=|jLL z&62q&z`UbC=0~g+U;!2VT`U_A0Ln@6>tV2hOo8U96T5M7wv@a6{GZv73oWnBb@g@I z^M+L^9LNBm9ifQ=pewNwAXH$qiRR~|70cf$9NkQ(fi&^;mfL|CLN@ECv2N!bBfF!3qaEQ!YQ#~GYLHFJ#{ z5z#qgYz(Oiyz1!^P$%DnvuZCvsDPzw7sYVl@_uyTe#@ZUX}6gP9V>TX>vi^2xrtZ@ zFT=s{;uaUb-eBX`Gl{ioi*@Pht%hn>K-C-s~C9nza zi2oS81xmV$r8EseEcagy*5!pcXb55zNus?nIj|vV1#xhnRH9hq_{d{;Q{2vITH*C3 zPb-Mpl^PdIl4?hCraGj!wHTD%CeV9TTrIav3`*(qp1%80AQHo3Ps`}`sI?k?o3R) zHy|h#38iE>z96;~gR&V@U=FpxjG+i%9v)dHCIF|yeKHo?mS)pvmrcMcO7viHV!|CTD0v`r;@!4+H;SICX9?GI8G$C&}R1z1SAk;3<3 zh`O{2BLf}|bQ;r;8jW`#fg%s86441V=;(wP2y)gp83^*x_aU7}*6q9h=@B3oT8>;5 z=DIp(TZP=*iyu!oA4sNcB{0QCv{4f7DZH4!FYYjh!5gq0$&#a?=8@Xt%MU^5b%&0| zP{Jm@q`0wNp930c7Zs33016_=A-nY?Cp^hv!WGO<<%l0Rd*fBtp`Bj~8%DT`Mcm$z(U4eU0a&b;lA)oh65M>hW%kZiT)xBAwM%x|&Y z+nRZ}(?NyW*32A1M(+g(i(I7kB7Oi<4SVhm=f(5=0(E?or}9pK*_+XYFxZtUy^V~~ zEIl-vOMKRN7C>#wh{`kbnNfA}qQ!E+kRH7}pp_ zJLqNtgwSP3f_sn2tw<4*)&nCrDQ6(l2TCX-;T|!jHj4ygB#;H{u_O+xBRtPt5RMC+ z$)$%#XK^cG7J?@TV>D@z8!{c!`_N`MFu1Phg*PiDdF#FI5wYUn3qOH zLQj+0Od`E9dEr>pM%zVF=CO#$YxlSq*-vR!iz2o>(u`YCqhlCj9tC?}znJH98|(r~ zH{k3x&$eT!tUKzMLaVeqU- zg*cM6FJmzqPNWeN>$zwehD>+Y9CUYAjdXW9J)~M0KjM+lwklF(tv0_1(zrxqEMGuW zXJQFsP(~DiUND4UGoKh+L8LL-wPWb|Z}<@MuR2iZDxx@UMsiW~B5eqQOrwgph#%Hu z#h|2uGrtGBsW-I<(Q}6gjAvZCNb@~zhK;BEQ?nh+^>M+B7R>nlHuk!zrL%iVX3C?q zN>tq+-51ijM=@r9@;5R2kQw2Yff$Wd@+{;>PiCyYcc7RqIcmR)ONDc zy)V<2y1)PA=4}|C$*=nOjM~qPt98~-${bdX0w1U$1>y=EaMkt!>xgV5rN&(RC?-0b zp{JQICOVzpf`7yi-2->I)|0n<8`#|PZ3lC7uD|NHz$R_EM@1S*dbAoI_>pk=k#PAD zaDji#aEc|~NQ_JKam84o`!d^C!og|m^bdT~HI%&XZ8Ut}+YV;KXI4!>!>!g-RMiTr z1Wep)oA-0geIeQ24h&ogH5?j3aY$v);DWb}7YR!eIT$^p@WB(rWWQ(n#ymA=3D zqE)x*KqSWbC=9Ak?0Y`av)cc`Z~l(k{|3z?xu-tnl5RlyQ`3I(i!(SQxI)4(#int_ z(LmKbRl>j{I{9b$5?d#km=VAPAz(8?;foV|6fVB&dZ18mStJ7PJ2KNVg_$}(~*ZiTPPayrsPr4RlEvA`8r;HtTZd}k%fCTc12z@|e}s8KVkhu&Pwh#$G* zADrp8IO+sb{-tbyZDU2(v~155rU+6f_!en``#IP3-%`Wn;fmr(>l8~Ks5Cso@MVC1Vg?B z^;`p#eCSTBp9g>9WB8%xUIK zkGEX(tj-`qgr-S^D+LPTiKQ!$u^H_?^i{vzk%gG8+m!W(&%sNNmvfukSEUw}_?$|alt!hLix6Xq~5?-Tl-&nn5ePf z;^0ANs9b0oivpAhEr3n`7sZ`hz8&i&(xJ%D$xAORXWUi2JAYfB>El6DW)%fGn>a8k zn%XIAuDK`kfPoOJ1tS8{2C*zJVdW;;5Wvuf6o!15b|ND67WWp3rTB1C-SEy0*j$Ep zFTiT`N92YrHvx;ZWnC5N%oI%!Z!|lVxUpyAr{1d8Nf#SS=R*%!YFv$`8LmNU1Y0

    !!(QW3`ddhL@Z>{9tBTbeP730@(_*i8_!t&U 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 Cg&Xt$ literal 0 HcmV?d00001 diff --git a/support/PackageScript b/support/PackageScript index a7b7f13f..f3524d0d 100644 --- a/support/PackageScript +++ b/support/PackageScript @@ -304,7 +304,7 @@ for filename in scripting_files: # Copy weird things. weirdfiles = [ - ('dlls/geoip/GeoIP.dat', 'base/addons/amxmodx/data'), + ('dlls/geoip/GeoLite2-Country.mmdb', 'base/addons/amxmodx/data'), ('plugins/esf/ESF_mod_tutorial.txt', 'esf/addons/amxmodx/scripting'), ] From 95bc1703a60f5f0ad1555a2d911adfff91962641 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Wed, 30 Jul 2014 16:02:32 +0200 Subject: [PATCH 36/71] Geoip: Add geoip_city() native. --- dlls/geoip/geoip_amxx.cpp | 19 +++++++++++++++++++ plugins/include/geoip.inc | 18 ++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/dlls/geoip/geoip_amxx.cpp b/dlls/geoip/geoip_amxx.cpp index 16c7e56c..a93cb200 100755 --- a/dlls/geoip/geoip_amxx.cpp +++ b/dlls/geoip/geoip_amxx.cpp @@ -147,9 +147,26 @@ static cell AMX_NATIVE_CALL amx_geoip_country(AMX *amx, cell *params) const char *path[] = { "country", "names", "en", NULL }; const char *country = lookupByIp(stripPort(ip), path, &length); + if (!country) + { + return 0; + } + return MF_SetAmxString(amx, params[2], country, length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. } +// native geoip_city(const ip[], result[], len); +static cell AMX_NATIVE_CALL amx_geoip_city(AMX *amx, cell *params) +{ + int length; + char *ip = MF_GetAmxString(amx, params[1], 0, &length); + + const char *path[] = { "city", "names", "en", NULL }; + const char *city = lookupByIp(stripPort(ip), path, &length); + + return MF_SetAmxString(amx, params[2], city ? city : "", length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. +} + void OnAmxxAttach() { @@ -215,6 +232,8 @@ AMX_NATIVE_INFO geoip_natives[] = { "geoip_code3_ex", amx_geoip_code3_ex }, { "geoip_country", amx_geoip_country }, + { "geoip_city" , amx_geoip_city }, + { NULL, NULL }, }; diff --git a/plugins/include/geoip.inc b/plugins/include/geoip.inc index df6343eb..106e601d 100755 --- a/plugins/include/geoip.inc +++ b/plugins/include/geoip.inc @@ -80,3 +80,21 @@ native geoip_code3(const ip[], result[4]); * @param len The maximum length of the result buffer. */ native geoip_country(const ip[], result[], len=45); + + + +/** + * The following natives require GeoIP City database, which can be retrieved from: + * http://dev.maxmind.com/geoip/geoip2/geolite2/ (MaxMind DB binary) + */ + +/** + * Look up the full city name for the given IP address. + * + * @param ip The IP address to look up. + * @param result The result of the geoip look up. + * @param len The maximum length of the result buffer. + * + * @return The result length on successful lookup, 0 otherwise. + */ +native geoip_city(const ip[], result[], len); \ No newline at end of file From b61ed9fa3e1a2c9500bfd5298e847407cba0c2c4 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Wed, 30 Jul 2014 22:19:23 +0200 Subject: [PATCH 37/71] Geoip: Add geoip_region_code() native. --- dlls/geoip/geoip_amxx.cpp | 44 ++++++++++++++++++++++++++++++++++++++- plugins/include/geoip.inc | 14 ++++++++++++- 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/dlls/geoip/geoip_amxx.cpp b/dlls/geoip/geoip_amxx.cpp index a93cb200..fedb187c 100755 --- a/dlls/geoip/geoip_amxx.cpp +++ b/dlls/geoip/geoip_amxx.cpp @@ -32,7 +32,9 @@ char *stripPort(char *ip_port) const char *lookupByIp(const char *ip, const char **path, int *length = NULL) { + static char buffer[64]; int gai_error = 0, mmdb_error = 0; + MMDB_lookup_result_s lookup = MMDB_lookup_string(&HandleDB, ip, &gai_error, &mmdb_error); if (gai_error != 0 || MMDB_SUCCESS != mmdb_error || !lookup.found_entry) @@ -53,7 +55,10 @@ const char *lookupByIp(const char *ip, const char **path, int *length = NULL) *length = entry_data.data_size; } - return entry_data.utf8_string; + memcpy(buffer, entry_data.utf8_string, entry_data.data_size); + buffer[entry_data.data_size] = '\0'; + + return buffer; } // native geoip_code2(const ip[], ccode[3]); @@ -167,6 +172,40 @@ static cell AMX_NATIVE_CALL amx_geoip_city(AMX *amx, cell *params) return MF_SetAmxString(amx, params[2], city ? city : "", length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. } +// native geoip_region_code(const ip[], result[], len); +static cell AMX_NATIVE_CALL amx_geoip_region_code(AMX *amx, cell *params) +{ + int length; + int finalLength = 0; + char code[12]; // This should be largely enough to hold xx-yyyy and more if needed. + + char *ip = MF_GetAmxString(amx, params[1], 0, &length); + + const char *pathCountry[] = { "country", "iso_code", NULL }; + const char *countryCode = lookupByIp(stripPort(ip), pathCountry, &length); + + if (countryCode) + { + finalLength = length + 1; // + 1 for dash. + snprintf(code, finalLength + 1, "%s-", countryCode); // + EOS. + + const char *pathRegion[] = { "subdivisions", "0", "iso_code", NULL }; // First result. + const char *regionCode = lookupByIp(ip, pathRegion, &length); + + if (regionCode) + { + finalLength += length; + strncat(code, regionCode, length); + } + else + { + finalLength = 0; + } + } + + return MF_SetAmxString(amx, params[2], finalLength ? code : "", finalLength >= params[3] ? params[3] : finalLength); +} + void OnAmxxAttach() { @@ -234,6 +273,9 @@ AMX_NATIVE_INFO geoip_natives[] = { "geoip_country", amx_geoip_country }, { "geoip_city" , amx_geoip_city }, + { "geoip_region_code", amx_geoip_region_code }, + { "geoip_region_name", amx_geoip_region_name }, + { NULL, NULL }, }; diff --git a/plugins/include/geoip.inc b/plugins/include/geoip.inc index 106e601d..e740112c 100755 --- a/plugins/include/geoip.inc +++ b/plugins/include/geoip.inc @@ -97,4 +97,16 @@ native geoip_country(const ip[], result[], len=45); * * @return The result length on successful lookup, 0 otherwise. */ -native geoip_city(const ip[], result[], len); \ No newline at end of file +native geoip_city(const ip[], result[], len); + +/** + * Look up the region/state code for the given IP address. + * e.g. "US-OH", "DE-HH", IT-82, "FR-U", etc. + * + * @param ip The IP address to look up. + * @param result The result of the geoip look up. + * @param len The maximum length of the result buffer. + * + * @return The result length on successful lookup, 0 otherwise. + */ +native geoip_region_code(const ip[], result[], len); \ No newline at end of file From c11f721ad46cd241b53997e87d08a828c466d5d3 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Wed, 30 Jul 2014 22:36:39 +0200 Subject: [PATCH 38/71] Geoip: Add geoip_region_name() native. --- dlls/geoip/geoip_amxx.cpp | 12 ++++++++++++ plugins/include/geoip.inc | 13 ++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/dlls/geoip/geoip_amxx.cpp b/dlls/geoip/geoip_amxx.cpp index fedb187c..80f63e2b 100755 --- a/dlls/geoip/geoip_amxx.cpp +++ b/dlls/geoip/geoip_amxx.cpp @@ -206,6 +206,18 @@ static cell AMX_NATIVE_CALL amx_geoip_region_code(AMX *amx, cell *params) return MF_SetAmxString(amx, params[2], finalLength ? code : "", finalLength >= params[3] ? params[3] : finalLength); } +// native geoip_region_name(const ip[], result[], len); +static cell AMX_NATIVE_CALL amx_geoip_region_name(AMX *amx, cell *params) +{ + int length; + char *ip = MF_GetAmxString(amx, params[1], 0, &length); + + const char *path[] = { "subdivisions", "0", "names", "en", NULL }; // First result. + const char *region = lookupByIp(stripPort(ip), path, &length); + + return MF_SetAmxString(amx, params[2], region ? region : "", length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. +} + void OnAmxxAttach() { diff --git a/plugins/include/geoip.inc b/plugins/include/geoip.inc index e740112c..d27f3fdf 100755 --- a/plugins/include/geoip.inc +++ b/plugins/include/geoip.inc @@ -109,4 +109,15 @@ native geoip_city(const ip[], result[], len); * * @return The result length on successful lookup, 0 otherwise. */ -native geoip_region_code(const ip[], result[], len); \ No newline at end of file +native geoip_region_code(const ip[], result[], len); + +/** + * Look up the full region/state name for the given IP address. + * + * @param ip The IP address to look up. + * @param result The result of the geoip look up. + * @param len The maximum length of the result buffer. + * + * @return The result length on successful lookup, 0 otherwise. + */ +native geoip_region_name(const ip[], result[], len); \ No newline at end of file From b439753ac56751e4127fa2759308f7c8f05cee6d Mon Sep 17 00:00:00 2001 From: Arkshine Date: Wed, 30 Jul 2014 22:45:44 +0200 Subject: [PATCH 39/71] Geoip: Add geoip_timezone() native. --- dlls/geoip/geoip_amxx.cpp | 14 ++++++++++++++ plugins/include/geoip.inc | 14 +++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/dlls/geoip/geoip_amxx.cpp b/dlls/geoip/geoip_amxx.cpp index 80f63e2b..519672a5 100755 --- a/dlls/geoip/geoip_amxx.cpp +++ b/dlls/geoip/geoip_amxx.cpp @@ -218,6 +218,18 @@ static cell AMX_NATIVE_CALL amx_geoip_region_name(AMX *amx, cell *params) return MF_SetAmxString(amx, params[2], region ? region : "", length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. } +// native geoip_timezone(const ip[], result[], len); +static cell AMX_NATIVE_CALL amx_geoip_timezone(AMX *amx, cell *params) +{ + int length; + char *ip = MF_GetAmxString(amx, params[1], 0, &length); + + const char *path[] = { "location", "time_zone", NULL }; + const char *timezone = lookupByIp(stripPort(ip), path, &length); + + return MF_SetAmxString(amx, params[2], timezone ? timezone : "", length >= params[3] ? params[3] : length); +} + void OnAmxxAttach() { @@ -288,6 +300,8 @@ AMX_NATIVE_INFO geoip_natives[] = { "geoip_region_code", amx_geoip_region_code }, { "geoip_region_name", amx_geoip_region_name }, + { "geoip_timezone", amx_geoip_timezone }, + { NULL, NULL }, }; diff --git a/plugins/include/geoip.inc b/plugins/include/geoip.inc index d27f3fdf..1badf802 100755 --- a/plugins/include/geoip.inc +++ b/plugins/include/geoip.inc @@ -120,4 +120,16 @@ native geoip_region_code(const ip[], result[], len); * * @return The result length on successful lookup, 0 otherwise. */ -native geoip_region_name(const ip[], result[], len); \ No newline at end of file +native geoip_region_name(const ip[], result[], len); + +/** + * Look up the full time zone for the given IP address. + * e.g. America/Los_Angeles, Europe/Paris. + * + * @param ip The IP address to look up. + * @param result The result of the geoip look up. + * @param len The maximum length of the result buffer. + * + * @return The result length on successful lookup, 0 otherwise. + */ +native geoip_timezone(const ip[], result[], len); \ No newline at end of file From 6941e406f4c82784df10300376de9b79a10c915a Mon Sep 17 00:00:00 2001 From: Arkshine Date: Wed, 30 Jul 2014 23:28:04 +0200 Subject: [PATCH 40/71] Geoip: Add geoip_latitude() and geoip_longitude() natives. --- dlls/geoip/geoip_amxx.cpp | 87 +++++++++++++++++++++++++++++++-------- plugins/include/geoip.inc | 20 ++++++++- 2 files changed, 88 insertions(+), 19 deletions(-) diff --git a/dlls/geoip/geoip_amxx.cpp b/dlls/geoip/geoip_amxx.cpp index 519672a5..e335dd59 100755 --- a/dlls/geoip/geoip_amxx.cpp +++ b/dlls/geoip/geoip_amxx.cpp @@ -30,37 +30,62 @@ char *stripPort(char *ip_port) return tmp; } -const char *lookupByIp(const char *ip, const char **path, int *length = NULL) +bool lookupByIp(const char *ip, const char **path, MMDB_entry_data_s *result) { - static char buffer[64]; int gai_error = 0, mmdb_error = 0; - MMDB_lookup_result_s lookup = MMDB_lookup_string(&HandleDB, ip, &gai_error, &mmdb_error); if (gai_error != 0 || MMDB_SUCCESS != mmdb_error || !lookup.found_entry) { - return NULL; + return false; } MMDB_entry_data_s entry_data; MMDB_aget_value(&lookup.entry, &entry_data, path); if (!entry_data.has_data) + { + return false; + } + + *result = entry_data; + + return true; +} + +const char *lookupString(const char *ip, const char **path, int *length = NULL) +{ + static char buffer[64]; + MMDB_entry_data_s result; + + if (!lookupByIp(ip, path, &result)) { return NULL; } if (length) { - *length = entry_data.data_size; + *length = result.data_size; } - memcpy(buffer, entry_data.utf8_string, entry_data.data_size); - buffer[entry_data.data_size] = '\0'; + memcpy(buffer, result.utf8_string, result.data_size); + buffer[result.data_size] = '\0'; return buffer; } +double lookupDouble(const char *ip, const char **path) +{ + MMDB_entry_data_s result; + + if (!lookupByIp(ip, path, &result)) + { + return NULL; + } + + return result.double_value; +} + // native geoip_code2(const ip[], ccode[3]); // Deprecated. static cell AMX_NATIVE_CALL amx_geoip_code2(AMX *amx, cell *params) @@ -69,7 +94,7 @@ static cell AMX_NATIVE_CALL amx_geoip_code2(AMX *amx, cell *params) char *ip = MF_GetAmxString(amx, params[1], 0, &length); const char *path[] = { "country", "iso_code", NULL }; - const char *code = lookupByIp(stripPort(ip), path); + const char *code = lookupString(stripPort(ip), path); return MF_SetAmxString(amx, params[2], code ? code : "error", 3); } @@ -82,7 +107,7 @@ static cell AMX_NATIVE_CALL amx_geoip_code3(AMX *amx, cell *params) char *ip = MF_GetAmxString(amx, params[1], 0, &length); const char *path[] = { "country", "iso_code", NULL }; - const char *code = lookupByIp(stripPort(ip), path); + const char *code = lookupString(stripPort(ip), path); for (size_t i = 0; i < ARRAYSIZE(GeoIPCountryCode); ++i) { @@ -103,7 +128,7 @@ static cell AMX_NATIVE_CALL amx_geoip_code2_ex(AMX *amx, cell *params) char *ip = MF_GetAmxString(amx, params[1], 0, &length); const char *path[] = { "country", "iso_code", NULL }; - const char *code = lookupByIp(stripPort(ip), path); + const char *code = lookupString(stripPort(ip), path); if (!code) { @@ -122,7 +147,7 @@ static cell AMX_NATIVE_CALL amx_geoip_code3_ex(AMX *amx, cell *params) char *ip = MF_GetAmxString(amx, params[1], 0, &length); const char *path[] = { "country", "iso_code", NULL }; - const char *code = lookupByIp(stripPort(ip), path, &length); + const char *code = lookupString(stripPort(ip), path, &length); if (!code) { @@ -150,7 +175,7 @@ static cell AMX_NATIVE_CALL amx_geoip_country(AMX *amx, cell *params) char *ip = MF_GetAmxString(amx, params[1], 0, &length); const char *path[] = { "country", "names", "en", NULL }; - const char *country = lookupByIp(stripPort(ip), path, &length); + const char *country = lookupString(stripPort(ip), path, &length); if (!country) { @@ -167,7 +192,7 @@ static cell AMX_NATIVE_CALL amx_geoip_city(AMX *amx, cell *params) char *ip = MF_GetAmxString(amx, params[1], 0, &length); const char *path[] = { "city", "names", "en", NULL }; - const char *city = lookupByIp(stripPort(ip), path, &length); + const char *city = lookupString(stripPort(ip), path, &length); return MF_SetAmxString(amx, params[2], city ? city : "", length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. } @@ -182,7 +207,7 @@ static cell AMX_NATIVE_CALL amx_geoip_region_code(AMX *amx, cell *params) char *ip = MF_GetAmxString(amx, params[1], 0, &length); const char *pathCountry[] = { "country", "iso_code", NULL }; - const char *countryCode = lookupByIp(stripPort(ip), pathCountry, &length); + const char *countryCode = lookupString(stripPort(ip), pathCountry, &length); if (countryCode) { @@ -190,7 +215,7 @@ static cell AMX_NATIVE_CALL amx_geoip_region_code(AMX *amx, cell *params) snprintf(code, finalLength + 1, "%s-", countryCode); // + EOS. const char *pathRegion[] = { "subdivisions", "0", "iso_code", NULL }; // First result. - const char *regionCode = lookupByIp(ip, pathRegion, &length); + const char *regionCode = lookupString(ip, pathRegion, &length); if (regionCode) { @@ -213,7 +238,7 @@ static cell AMX_NATIVE_CALL amx_geoip_region_name(AMX *amx, cell *params) char *ip = MF_GetAmxString(amx, params[1], 0, &length); const char *path[] = { "subdivisions", "0", "names", "en", NULL }; // First result. - const char *region = lookupByIp(stripPort(ip), path, &length); + const char *region = lookupString(stripPort(ip), path, &length); return MF_SetAmxString(amx, params[2], region ? region : "", length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. } @@ -225,11 +250,35 @@ static cell AMX_NATIVE_CALL amx_geoip_timezone(AMX *amx, cell *params) char *ip = MF_GetAmxString(amx, params[1], 0, &length); const char *path[] = { "location", "time_zone", NULL }; - const char *timezone = lookupByIp(stripPort(ip), path, &length); + const char *timezone = lookupString(stripPort(ip), path, &length); return MF_SetAmxString(amx, params[2], timezone ? timezone : "", length >= params[3] ? params[3] : length); } +// native geoip_latitude(const ip[]); +static cell AMX_NATIVE_CALL amx_geoip_latitude(AMX *amx, cell *params) +{ + int length; + char *ip = MF_GetAmxString(amx, params[1], 0, &length); + + const char *path[] = { "location", "latitude", NULL }; + double latitude = lookupDouble(stripPort(ip), path); + + return amx_ftoc(latitude); +} + +// native geoip_longitude(const ip[]); +static cell AMX_NATIVE_CALL amx_geoip_longitude(AMX *amx, cell *params) +{ + int length; + char *ip = MF_GetAmxString(amx, params[1], 0, &length); + + const char *path[] = { "location", "longitude", NULL }; + double longitude = lookupDouble(stripPort(ip), path); + + return amx_ftoc(longitude); +} + void OnAmxxAttach() { @@ -300,7 +349,9 @@ AMX_NATIVE_INFO geoip_natives[] = { "geoip_region_code", amx_geoip_region_code }, { "geoip_region_name", amx_geoip_region_name }, - { "geoip_timezone", amx_geoip_timezone }, + { "geoip_timezone" , amx_geoip_timezone }, + { "geoip_latitude" , amx_geoip_latitude }, + { "geoip_longitude", amx_geoip_longitude }, { NULL, NULL }, }; diff --git a/plugins/include/geoip.inc b/plugins/include/geoip.inc index 1badf802..eec43d56 100755 --- a/plugins/include/geoip.inc +++ b/plugins/include/geoip.inc @@ -132,4 +132,22 @@ native geoip_region_name(const ip[], result[], len); * * @return The result length on successful lookup, 0 otherwise. */ -native geoip_timezone(const ip[], result[], len); \ No newline at end of file +native geoip_timezone(const ip[], result[], len); + +/** + * Look up the city's latitude for the given IP address. + * + * @param ip The IP address to look up. + * + * @return The result of the geoip look up, 0 if latitude is not found. + */ +native Float:geoip_latitude(const ip[]); + +/** + * Look up the city's longitude for the given IP address. + * + * @param ip The IP address to look up. + * + * @return The result of the geoip look up, 0 if longitude is not found. + */ +native Float:geoip_longitude(const ip[]); \ No newline at end of file From 81d56dfdc01ee61a650ec80539262faacb4cc1c7 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Thu, 31 Jul 2014 11:33:58 +0200 Subject: [PATCH 41/71] Geoip: Add geoip_distance() native. --- dlls/geoip/geoip_amxx.cpp | 14 ++++++++++++++ plugins/include/geoip.inc | 18 +++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/dlls/geoip/geoip_amxx.cpp b/dlls/geoip/geoip_amxx.cpp index e335dd59..0ae6ba27 100755 --- a/dlls/geoip/geoip_amxx.cpp +++ b/dlls/geoip/geoip_amxx.cpp @@ -279,6 +279,19 @@ static cell AMX_NATIVE_CALL amx_geoip_longitude(AMX *amx, cell *params) return amx_ftoc(longitude); } +// native Float:geoip_distance(Float:lat1, Float:lon1, Float:lat2, Float:lon2, system = SYSTEM_METRIC); +static cell AMX_NATIVE_CALL amx_geoip_distance(AMX *amx, cell *params) +{ + float earthRadius = params[5] ? 3958.0 : 6370.997; // miles / km + + float lat1 = amx_ctof(params[1]) * (M_PI / 180); + float lon1 = amx_ctof(params[2]) * (M_PI / 180); + float lat2 = amx_ctof(params[3]) * (M_PI / 180); + float lon2 = amx_ctof(params[4]) * (M_PI / 180); + + return amx_ftoc(earthRadius * acos(sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon2 - lon1))); +} + void OnAmxxAttach() { @@ -352,6 +365,7 @@ AMX_NATIVE_INFO geoip_natives[] = { "geoip_timezone" , amx_geoip_timezone }, { "geoip_latitude" , amx_geoip_latitude }, { "geoip_longitude", amx_geoip_longitude }, + { "geoip_distance" , amx_geoip_distance }, { NULL, NULL }, }; diff --git a/plugins/include/geoip.inc b/plugins/include/geoip.inc index eec43d56..ef1295e5 100755 --- a/plugins/include/geoip.inc +++ b/plugins/include/geoip.inc @@ -150,4 +150,20 @@ native Float:geoip_latitude(const ip[]); * * @return The result of the geoip look up, 0 if longitude is not found. */ -native Float:geoip_longitude(const ip[]); \ No newline at end of file +native Float:geoip_longitude(const ip[]); + +/** + * Calculate the distance between geographical coordinates, latitude and longitude. + * + * @param lat1 The first IP latitude. + * @param lon1 The first IP longitude. + * @param lat2 The second IP latitude. + * @param lon2 The second IP longitude. + * @param system The system of measurement, 0 = Metric(kilometers) or 1 = English(miles). + * + * @return The distance as result in specified system of measurement. + */ +#define SYSTEM_METRIC 0 // kilometers +#define SYSTEM_IMPERIAL 1 // statute miles + +native Float:geoip_distance(Float:lat1, Float:lon1, Float:lat2, Float:lon2, system = SYSTEM_METRIC); \ No newline at end of file From fc19f53ea97e6c1881f4a7e96b8ad6f88bd67f95 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Thu, 31 Jul 2014 15:21:13 +0200 Subject: [PATCH 42/71] Geoip: Add geoip_continent_code() native. --- dlls/geoip/geoip_amxx.cpp | 50 +++++++++++++++++++++++++++++++++++++++ plugins/include/geoip.inc | 26 +++++++++++++++++++- 2 files changed, 75 insertions(+), 1 deletion(-) diff --git a/dlls/geoip/geoip_amxx.cpp b/dlls/geoip/geoip_amxx.cpp index 0ae6ba27..3e4ca3c5 100755 --- a/dlls/geoip/geoip_amxx.cpp +++ b/dlls/geoip/geoip_amxx.cpp @@ -86,6 +86,40 @@ double lookupDouble(const char *ip, const char **path) return result.double_value; } +int getContinentId(const char *code) +{ + #define CONTINENT_UNKNOWN 0 + #define CONTINENT_AFRICA 1 + #define CONTINENT_ASIA 2 + #define CONTINENT_EUROPE 3 + #define CONTINENT_NORTH_AMERICA 4 + #define CONTINENT_OCEANIA 5 + #define CONTINENT_SOUTH_AMERICA 6 + + int index = CONTINENT_UNKNOWN; + + if (code) + { + switch (code[0]) + { + case 'A': + { + switch (code[1]) + { + case 'F': index = CONTINENT_AFRICA; break; + case 'S': index = CONTINENT_ASIA; break; + } + } + case 'E': index = CONTINENT_EUROPE; break; + case 'O': index = CONTINENT_OCEANIA; break; + case 'N': index = CONTINENT_NORTH_AMERICA; break; + case 'S': index = CONTINENT_SOUTH_AMERICA; break; + } + } + + return index; +} + // native geoip_code2(const ip[], ccode[3]); // Deprecated. static cell AMX_NATIVE_CALL amx_geoip_code2(AMX *amx, cell *params) @@ -292,6 +326,20 @@ static cell AMX_NATIVE_CALL amx_geoip_distance(AMX *amx, cell *params) return amx_ftoc(earthRadius * acos(sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon2 - lon1))); } +// native Continent:geoip_continent_code(const ip[], result[3] = ""); +static cell AMX_NATIVE_CALL amx_geoip_continent_code(AMX *amx, cell *params) +{ + int length; + char *ip = MF_GetAmxString(amx, params[1], 0, &length); + + const char *path[] = { "continent", "code", NULL }; + const char *code = lookupString(stripPort(ip), path, &length); + + MF_SetAmxString(amx, params[2], code ? code : "", code ? 2 : 0); + + return getContinentId(code); +} + void OnAmxxAttach() { @@ -367,6 +415,8 @@ AMX_NATIVE_INFO geoip_natives[] = { "geoip_longitude", amx_geoip_longitude }, { "geoip_distance" , amx_geoip_distance }, + { "geoip_continent_code", amx_geoip_continent_code }, + { NULL, NULL }, }; diff --git a/plugins/include/geoip.inc b/plugins/include/geoip.inc index ef1295e5..f67c6275 100755 --- a/plugins/include/geoip.inc +++ b/plugins/include/geoip.inc @@ -166,4 +166,28 @@ native Float:geoip_longitude(const ip[]); #define SYSTEM_METRIC 0 // kilometers #define SYSTEM_IMPERIAL 1 // statute miles -native Float:geoip_distance(Float:lat1, Float:lon1, Float:lat2, Float:lon2, system = SYSTEM_METRIC); \ No newline at end of file +native Float:geoip_distance(Float:lat1, Float:lon1, Float:lat2, Float:lon2, system = SYSTEM_METRIC); + +/** + * Look up the continent code for a given IP address. + * + * @note The code can be retrieved as integer (See CONTINENT_* constants.) or string (2 characters). + * @note Possible continent codes are AF, AS, EU, NA, OC, SA for + * Africa(1), Asia(2), Europe(3), North America(4), Oceania(5) and South America(6). + * + * @param ip The IP address to look up. + * @param result The result of the geoip look up. + * + * @return The continent id on successful lookup, 0 otherwise. + */ +enum Continent +{ + CONTINENT_UNKNOW = 0, + CONTINENT_AFRICA, + CONTINENT_ASIA, + CONTINENT_EUROPE, + CONTINENT_NORTH_AMERICA, + CONTINENT_OCEANIA, + CONTINENT_SOUTH_AMERICA +}; +native Continent:geoip_continent_code(const ip[], result[3]); \ No newline at end of file From abaee9f4a3b6c0fbc9ebe43e7337564ed47a7e0e Mon Sep 17 00:00:00 2001 From: Arkshine Date: Thu, 31 Jul 2014 15:29:57 +0200 Subject: [PATCH 43/71] Geoip: Add geoip_continent_name() native. --- dlls/geoip/geoip_amxx.cpp | 13 +++++++++++++ plugins/include/geoip.inc | 13 ++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/dlls/geoip/geoip_amxx.cpp b/dlls/geoip/geoip_amxx.cpp index 3e4ca3c5..5063d2fa 100755 --- a/dlls/geoip/geoip_amxx.cpp +++ b/dlls/geoip/geoip_amxx.cpp @@ -340,6 +340,18 @@ static cell AMX_NATIVE_CALL amx_geoip_continent_code(AMX *amx, cell *params) return getContinentId(code); } +// native geoip_continent_name(const ip[], result[], len); +static cell AMX_NATIVE_CALL amx_geoip_continent_name(AMX *amx, cell *params) +{ + int length; + char *ip = MF_GetAmxString(amx, params[1], 0, &length); + + const char *path[] = { "continent", "names", "en", NULL }; + const char *continent = lookupString(stripPort(ip), path, &length); + + return MF_SetAmxString(amx, params[2], continent ? continent : "", length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. +} + void OnAmxxAttach() { @@ -416,6 +428,7 @@ AMX_NATIVE_INFO geoip_natives[] = { "geoip_distance" , amx_geoip_distance }, { "geoip_continent_code", amx_geoip_continent_code }, + { "geoip_continent_name", amx_geoip_continent_name }, { NULL, NULL }, }; diff --git a/plugins/include/geoip.inc b/plugins/include/geoip.inc index f67c6275..95942f22 100755 --- a/plugins/include/geoip.inc +++ b/plugins/include/geoip.inc @@ -190,4 +190,15 @@ enum Continent CONTINENT_OCEANIA, CONTINENT_SOUTH_AMERICA }; -native Continent:geoip_continent_code(const ip[], result[3]); \ No newline at end of file +native Continent:geoip_continent_code(const ip[], result[3]); + +/** + * Look up the full continent name for the given IP address. + * + * @param ip The IP address to look up. + * @param result The result of the geoip look up. + * @param len The maximum length of the result buffer. + * + * @return The result length on successful lookup, 0 otherwise. + */ +native geoip_continent_name(const ip[], result[], len); From 210cba53b9769c93f2108ca7b0d9813e8bacbcc9 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Thu, 31 Jul 2014 15:36:03 +0200 Subject: [PATCH 44/71] Geoip: Fix stripPort typo. --- dlls/geoip/geoip_amxx.cpp | 64 +++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/dlls/geoip/geoip_amxx.cpp b/dlls/geoip/geoip_amxx.cpp index 5063d2fa..bedba244 100755 --- a/dlls/geoip/geoip_amxx.cpp +++ b/dlls/geoip/geoip_amxx.cpp @@ -16,18 +16,16 @@ MMDB_s HandleDB; -char *stripPort(char *ip_port) +char *stripPort(char *ip) { - char *tmp = strchr(ip_port, ':'); + char *tmp = strchr(ip, ':'); - if (!tmp) + if (tmp) { - return ip_port; + *tmp = '\0'; } - *tmp = '\0'; - - return tmp; + return ip; } bool lookupByIp(const char *ip, const char **path, MMDB_entry_data_s *result) @@ -125,10 +123,10 @@ int getContinentId(const char *code) static cell AMX_NATIVE_CALL amx_geoip_code2(AMX *amx, cell *params) { int length; - char *ip = MF_GetAmxString(amx, params[1], 0, &length); + char *ip = stripPort(MF_GetAmxString(amx, params[1], 0, &length)); const char *path[] = { "country", "iso_code", NULL }; - const char *code = lookupString(stripPort(ip), path); + const char *code = lookupString(ip, path); return MF_SetAmxString(amx, params[2], code ? code : "error", 3); } @@ -138,10 +136,10 @@ static cell AMX_NATIVE_CALL amx_geoip_code2(AMX *amx, cell *params) static cell AMX_NATIVE_CALL amx_geoip_code3(AMX *amx, cell *params) { int length; - char *ip = MF_GetAmxString(amx, params[1], 0, &length); + char *ip = stripPort(MF_GetAmxString(amx, params[1], 0, &length)); const char *path[] = { "country", "iso_code", NULL }; - const char *code = lookupString(stripPort(ip), path); + const char *code = lookupString(ip, path); for (size_t i = 0; i < ARRAYSIZE(GeoIPCountryCode); ++i) { @@ -159,10 +157,10 @@ static cell AMX_NATIVE_CALL amx_geoip_code3(AMX *amx, cell *params) static cell AMX_NATIVE_CALL amx_geoip_code2_ex(AMX *amx, cell *params) { int length; - char *ip = MF_GetAmxString(amx, params[1], 0, &length); + char *ip = stripPort(MF_GetAmxString(amx, params[1], 0, &length)); const char *path[] = { "country", "iso_code", NULL }; - const char *code = lookupString(stripPort(ip), path); + const char *code = lookupString(ip, path); if (!code) { @@ -178,10 +176,10 @@ static cell AMX_NATIVE_CALL amx_geoip_code2_ex(AMX *amx, cell *params) static cell AMX_NATIVE_CALL amx_geoip_code3_ex(AMX *amx, cell *params) { int length; - char *ip = MF_GetAmxString(amx, params[1], 0, &length); + char *ip = stripPort(MF_GetAmxString(amx, params[1], 0, &length)); const char *path[] = { "country", "iso_code", NULL }; - const char *code = lookupString(stripPort(ip), path, &length); + const char *code = lookupString(ip, path, &length); if (!code) { @@ -206,10 +204,10 @@ static cell AMX_NATIVE_CALL amx_geoip_code3_ex(AMX *amx, cell *params) static cell AMX_NATIVE_CALL amx_geoip_country(AMX *amx, cell *params) { int length; - char *ip = MF_GetAmxString(amx, params[1], 0, &length); + char *ip = stripPort(MF_GetAmxString(amx, params[1], 0, &length)); const char *path[] = { "country", "names", "en", NULL }; - const char *country = lookupString(stripPort(ip), path, &length); + const char *country = lookupString(ip, path, &length); if (!country) { @@ -223,10 +221,10 @@ static cell AMX_NATIVE_CALL amx_geoip_country(AMX *amx, cell *params) static cell AMX_NATIVE_CALL amx_geoip_city(AMX *amx, cell *params) { int length; - char *ip = MF_GetAmxString(amx, params[1], 0, &length); + char *ip = stripPort(MF_GetAmxString(amx, params[1], 0, &length)); const char *path[] = { "city", "names", "en", NULL }; - const char *city = lookupString(stripPort(ip), path, &length); + const char *city = lookupString(ip, path, &length); return MF_SetAmxString(amx, params[2], city ? city : "", length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. } @@ -238,10 +236,10 @@ static cell AMX_NATIVE_CALL amx_geoip_region_code(AMX *amx, cell *params) int finalLength = 0; char code[12]; // This should be largely enough to hold xx-yyyy and more if needed. - char *ip = MF_GetAmxString(amx, params[1], 0, &length); + char *ip = stripPort(MF_GetAmxString(amx, params[1], 0, &length)); const char *pathCountry[] = { "country", "iso_code", NULL }; - const char *countryCode = lookupString(stripPort(ip), pathCountry, &length); + const char *countryCode = lookupString(ip, pathCountry, &length); if (countryCode) { @@ -269,10 +267,10 @@ static cell AMX_NATIVE_CALL amx_geoip_region_code(AMX *amx, cell *params) static cell AMX_NATIVE_CALL amx_geoip_region_name(AMX *amx, cell *params) { int length; - char *ip = MF_GetAmxString(amx, params[1], 0, &length); + char *ip = stripPort(MF_GetAmxString(amx, params[1], 0, &length)); const char *path[] = { "subdivisions", "0", "names", "en", NULL }; // First result. - const char *region = lookupString(stripPort(ip), path, &length); + const char *region = lookupString(ip, path, &length); return MF_SetAmxString(amx, params[2], region ? region : "", length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. } @@ -281,10 +279,10 @@ static cell AMX_NATIVE_CALL amx_geoip_region_name(AMX *amx, cell *params) static cell AMX_NATIVE_CALL amx_geoip_timezone(AMX *amx, cell *params) { int length; - char *ip = MF_GetAmxString(amx, params[1], 0, &length); + char *ip = stripPort(MF_GetAmxString(amx, params[1], 0, &length)); const char *path[] = { "location", "time_zone", NULL }; - const char *timezone = lookupString(stripPort(ip), path, &length); + const char *timezone = lookupString(ip, path, &length); return MF_SetAmxString(amx, params[2], timezone ? timezone : "", length >= params[3] ? params[3] : length); } @@ -293,10 +291,10 @@ static cell AMX_NATIVE_CALL amx_geoip_timezone(AMX *amx, cell *params) static cell AMX_NATIVE_CALL amx_geoip_latitude(AMX *amx, cell *params) { int length; - char *ip = MF_GetAmxString(amx, params[1], 0, &length); + char *ip = stripPort(MF_GetAmxString(amx, params[1], 0, &length)); const char *path[] = { "location", "latitude", NULL }; - double latitude = lookupDouble(stripPort(ip), path); + double latitude = lookupDouble(ip, path); return amx_ftoc(latitude); } @@ -305,10 +303,10 @@ static cell AMX_NATIVE_CALL amx_geoip_latitude(AMX *amx, cell *params) static cell AMX_NATIVE_CALL amx_geoip_longitude(AMX *amx, cell *params) { int length; - char *ip = MF_GetAmxString(amx, params[1], 0, &length); + char *ip = stripPort(MF_GetAmxString(amx, params[1], 0, &length)); const char *path[] = { "location", "longitude", NULL }; - double longitude = lookupDouble(stripPort(ip), path); + double longitude = lookupDouble(ip, path); return amx_ftoc(longitude); } @@ -330,10 +328,10 @@ static cell AMX_NATIVE_CALL amx_geoip_distance(AMX *amx, cell *params) static cell AMX_NATIVE_CALL amx_geoip_continent_code(AMX *amx, cell *params) { int length; - char *ip = MF_GetAmxString(amx, params[1], 0, &length); + char *ip = stripPort(MF_GetAmxString(amx, params[1], 0, &length)); const char *path[] = { "continent", "code", NULL }; - const char *code = lookupString(stripPort(ip), path, &length); + const char *code = lookupString(ip, path, &length); MF_SetAmxString(amx, params[2], code ? code : "", code ? 2 : 0); @@ -344,10 +342,10 @@ static cell AMX_NATIVE_CALL amx_geoip_continent_code(AMX *amx, cell *params) static cell AMX_NATIVE_CALL amx_geoip_continent_name(AMX *amx, cell *params) { int length; - char *ip = MF_GetAmxString(amx, params[1], 0, &length); + char *ip = stripPort(MF_GetAmxString(amx, params[1], 0, &length)); const char *path[] = { "continent", "names", "en", NULL }; - const char *continent = lookupString(stripPort(ip), path, &length); + const char *continent = lookupString(ip, path, &length); return MF_SetAmxString(amx, params[2], continent ? continent : "", length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. } From d2ed9e70cdf00c401868b86ef64e0bbeff8eb409 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Thu, 31 Jul 2014 18:23:28 +0200 Subject: [PATCH 45/71] Geoip: Add an optional parameter in some natves to get a result in player's language. This is new with Geoip2 database where some entries, like country, city, etc, are translated in several languages. So far: de, en, es, fr, ru, pt-BR, zh-CN. --- dlls/geoip/geoip_amxx.cpp | 100 ++++++++++++++++++++++++++++++++++---- plugins/include/geoip.inc | 28 +++++++++-- 2 files changed, 115 insertions(+), 13 deletions(-) diff --git a/dlls/geoip/geoip_amxx.cpp b/dlls/geoip/geoip_amxx.cpp index bedba244..e8e5d173 100755 --- a/dlls/geoip/geoip_amxx.cpp +++ b/dlls/geoip/geoip_amxx.cpp @@ -1,4 +1,5 @@ <<<<<<< HEAD +<<<<<<< HEAD // vim: set ts=4 sw=4 tw=99 noet: // // AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). @@ -12,9 +13,12 @@ // GeoIP Module // -#include "geoip_amxx.h" +#include "geoip_amxx.h" +#include +#include MMDB_s HandleDB; +ke::Vector LangList; char *stripPort(char *ip) { @@ -28,6 +32,33 @@ char *stripPort(char *ip) return ip; } +const char* stristr(const char* str, const char* substr) +{ + register char *needle = (char *)substr; + register char *prevloc = (char *)str; + register char *haystack = (char *)str; + + while (*haystack) + { + if (tolower(*haystack) == tolower(*needle)) + { + haystack++; + + if (!*++needle) + { + return prevloc; + } + } + else + { + haystack = ++prevloc; + needle = (char *)substr; + } + } + + return NULL; +} + bool lookupByIp(const char *ip, const char **path, MMDB_entry_data_s *result) { int gai_error = 0, mmdb_error = 0; @@ -118,6 +149,49 @@ int getContinentId(const char *code) return index; } +const char *getLang(int playerIndex) +{ + static cvar_t *amxmodx_language = NULL; + static cvar_t *amxmodx_cl_langs = NULL; + + if (!amxmodx_language) + amxmodx_language = CVAR_GET_POINTER("amx_language"); + + if (!amxmodx_cl_langs) + amxmodx_cl_langs = CVAR_GET_POINTER("amx_client_languages"); + + if (playerIndex >= 0 && amxmodx_cl_langs && amxmodx_language) + { + const char *value; + const char *lang; + + if (playerIndex == 0 || amxmodx_cl_langs->value <= 0 || !MF_IsPlayerIngame(playerIndex)) + { + value = amxmodx_language->string; + } + else + { + value = ENTITY_KEYVALUE(MF_GetPlayerEdict(playerIndex), "lang"); + } + + if (value && *value) + { + for (size_t i = 0; i < LangList.length(); ++i) + { + lang = LangList.at(i).chars(); + + if (stristr(lang, value) != NULL) + { + return lang; + } + } + } + } + + return "en"; +} + + // native geoip_code2(const ip[], ccode[3]); // Deprecated. static cell AMX_NATIVE_CALL amx_geoip_code2(AMX *amx, cell *params) @@ -200,13 +274,13 @@ static cell AMX_NATIVE_CALL amx_geoip_code3_ex(AMX *amx, cell *params) return 1; } -// native geoip_country(const ip[], result[], len); +// native geoip_country(const ip[], result[], len, id = -1); static cell AMX_NATIVE_CALL amx_geoip_country(AMX *amx, cell *params) { int length; char *ip = stripPort(MF_GetAmxString(amx, params[1], 0, &length)); - const char *path[] = { "country", "names", "en", NULL }; + const char *path[] = { "country", "names", getLang(params[4]), NULL }; const char *country = lookupString(ip, path, &length); if (!country) @@ -217,13 +291,13 @@ static cell AMX_NATIVE_CALL amx_geoip_country(AMX *amx, cell *params) return MF_SetAmxString(amx, params[2], country, length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. } -// native geoip_city(const ip[], result[], len); +// native geoip_city(const ip[], result[], len, id = -1); static cell AMX_NATIVE_CALL amx_geoip_city(AMX *amx, cell *params) { int length; char *ip = stripPort(MF_GetAmxString(amx, params[1], 0, &length)); - const char *path[] = { "city", "names", "en", NULL }; + const char *path[] = { "city", "names", getLang(params[4]), NULL }; const char *city = lookupString(ip, path, &length); return MF_SetAmxString(amx, params[2], city ? city : "", length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. @@ -263,13 +337,13 @@ static cell AMX_NATIVE_CALL amx_geoip_region_code(AMX *amx, cell *params) return MF_SetAmxString(amx, params[2], finalLength ? code : "", finalLength >= params[3] ? params[3] : finalLength); } -// native geoip_region_name(const ip[], result[], len); +// native geoip_region_name(const ip[], result[], len, id = -1); static cell AMX_NATIVE_CALL amx_geoip_region_name(AMX *amx, cell *params) { int length; char *ip = stripPort(MF_GetAmxString(amx, params[1], 0, &length)); - const char *path[] = { "subdivisions", "0", "names", "en", NULL }; // First result. + const char *path[] = { "subdivisions", "0", "names", getLang(params[4]), NULL }; // First result. const char *region = lookupString(ip, path, &length); return MF_SetAmxString(amx, params[2], region ? region : "", length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. @@ -338,13 +412,13 @@ static cell AMX_NATIVE_CALL amx_geoip_continent_code(AMX *amx, cell *params) return getContinentId(code); } -// native geoip_continent_name(const ip[], result[], len); +// native geoip_continent_name(const ip[], result[], len, id = -1); static cell AMX_NATIVE_CALL amx_geoip_continent_name(AMX *amx, cell *params) { int length; char *ip = stripPort(MF_GetAmxString(amx, params[1], 0, &length)); - const char *path[] = { "continent", "names", "en", NULL }; + const char *path[] = { "continent", "names", getLang(params[4]), NULL }; const char *continent = lookupString(ip, path, &length); return MF_SetAmxString(amx, params[2], continent ? continent : "", length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. @@ -397,12 +471,20 @@ void OnAmxxAttach() HandleDB.metadata.binary_format_major_version, HandleDB.metadata.binary_format_minor_version); + // Retrieve supported languages. + for (size_t i = 0; i < HandleDB.metadata.languages.count; i++) + { + LangList.append(ke::AString(HandleDB.metadata.languages.names[i])); + } + MF_AddNatives(geoip_natives); } void OnAmxxDetach() { MMDB_close(&HandleDB); + + LangList.clear(); } diff --git a/plugins/include/geoip.inc b/plugins/include/geoip.inc index 95942f22..02c95760 100755 --- a/plugins/include/geoip.inc +++ b/plugins/include/geoip.inc @@ -78,8 +78,13 @@ native geoip_code3(const ip[], result[4]); * @param ip The IP address to lookup. * @param result The result of the geoip lookup. * @param len The maximum length of the result buffer. + * @param id An optional player's index in order to return the result + * in the player's language, if supported. + * -1: the default language, which is english. + * 0: the server language. You can use LANG_SERVER define. + * >=1: the player's language. */ -native geoip_country(const ip[], result[], len=45); +native geoip_country(const ip[], result[], len, id = -1); @@ -94,10 +99,15 @@ native geoip_country(const ip[], result[], len=45); * @param ip The IP address to look up. * @param result The result of the geoip look up. * @param len The maximum length of the result buffer. + * @param id An optional player's index in order to return the result + * in the player's language, if supported. + * -1: the default language, which is english. + * 0: the server language. You can use LANG_SERVER define. + * >=1: the player's language. * * @return The result length on successful lookup, 0 otherwise. */ -native geoip_city(const ip[], result[], len); +native geoip_city(const ip[], result[], len, id = -1); /** * Look up the region/state code for the given IP address. @@ -117,10 +127,15 @@ native geoip_region_code(const ip[], result[], len); * @param ip The IP address to look up. * @param result The result of the geoip look up. * @param len The maximum length of the result buffer. + * @param id An optional player's index in order to return the result + * in the player's language, if supported. + * -1: the default language, which is english. + * 0: the server language. You can use LANG_SERVER define. + * >=1: the player's language. * * @return The result length on successful lookup, 0 otherwise. */ -native geoip_region_name(const ip[], result[], len); +native geoip_region_name(const ip[], result[], len, id = -1); /** * Look up the full time zone for the given IP address. @@ -198,7 +213,12 @@ native Continent:geoip_continent_code(const ip[], result[3]); * @param ip The IP address to look up. * @param result The result of the geoip look up. * @param len The maximum length of the result buffer. + * @param id An optional player's index in order to return the result + * in the player's language, if supported. + * -1: the default language, which is english. + * 0: the server language. You can use LANG_SERVER define. + * >=1: the player's language. * * @return The result length on successful lookup, 0 otherwise. */ -native geoip_continent_name(const ip[], result[], len); +native geoip_continent_name(const ip[], result[], len, id = -1); From 52543481dd9a0fab39c3f55a80b68a0f6d5e17bd Mon Sep 17 00:00:00 2001 From: Arkshine Date: Thu, 31 Jul 2014 18:36:52 +0200 Subject: [PATCH 46/71] Geoip: Increase buffer and fix potential overflow crash. --- dlls/geoip/geoip_amxx.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/dlls/geoip/geoip_amxx.cpp b/dlls/geoip/geoip_amxx.cpp index e8e5d173..cda14490 100755 --- a/dlls/geoip/geoip_amxx.cpp +++ b/dlls/geoip/geoip_amxx.cpp @@ -84,7 +84,7 @@ bool lookupByIp(const char *ip, const char **path, MMDB_entry_data_s *result) const char *lookupString(const char *ip, const char **path, int *length = NULL) { - static char buffer[64]; + static char buffer[256]; // This should be large enough for long name in UTF-8. MMDB_entry_data_s result; if (!lookupByIp(ip, path, &result)) @@ -92,14 +92,18 @@ const char *lookupString(const char *ip, const char **path, int *length = NULL) return NULL; } + // Let's avoid a crash in case we go over the buffer size. + size_t maxLength = ke::Min(result.data_size, sizeof(buffer)); + + // Strings from database are not null terminated. + memcpy(buffer, result.utf8_string, maxLength); + buffer[result.data_size] = '\0'; + if (length) { - *length = result.data_size; + *length = maxLength; } - memcpy(buffer, result.utf8_string, result.data_size); - buffer[result.data_size] = '\0'; - return buffer; } From 674600bab2bdccdc50e6c2b61e75196d106df6aa Mon Sep 17 00:00:00 2001 From: Arkshine Date: Thu, 31 Jul 2014 23:08:58 +0200 Subject: [PATCH 47/71] Geoip: Reorganize and update project files. --- dlls/geoip/AMBuilder | 4 +- dlls/geoip/GeoIP2/maxminddb_config.h | 2 +- dlls/geoip/Makefile | 2 +- dlls/geoip/geoip_main.cpp | 108 ++++++++ dlls/geoip/geoip_main.h | 37 +++ .../{geoip_amxx.cpp => geoip_natives.cpp} | 251 +----------------- dlls/geoip/geoip_natives.h | 39 +++ dlls/geoip/geoip_util.cpp | 205 ++++++++++++++ dlls/geoip/geoip_util.h | 49 ++++ 9 files changed, 448 insertions(+), 249 deletions(-) create mode 100644 dlls/geoip/geoip_main.cpp create mode 100644 dlls/geoip/geoip_main.h rename dlls/geoip/{geoip_amxx.cpp => geoip_natives.cpp} (70%) create mode 100644 dlls/geoip/geoip_natives.h create mode 100644 dlls/geoip/geoip_util.cpp create mode 100644 dlls/geoip/geoip_util.h diff --git a/dlls/geoip/AMBuilder b/dlls/geoip/AMBuilder index 715a32f2..3bc50513 100644 --- a/dlls/geoip/AMBuilder +++ b/dlls/geoip/AMBuilder @@ -10,7 +10,9 @@ binary.compiler.defines += [ binary.sources = [ 'sdk/amxxmodule.cpp', 'GeoIP2/maxminddb.cpp', - 'geoip_amxx.cpp', + 'geoip_main.cpp', + 'geoip_natives.cpp', + 'geoip_util.cpp', ] if builder.target_platform == 'windows': diff --git a/dlls/geoip/GeoIP2/maxminddb_config.h b/dlls/geoip/GeoIP2/maxminddb_config.h index 4c9f70eb..1a54c0e1 100644 --- a/dlls/geoip/GeoIP2/maxminddb_config.h +++ b/dlls/geoip/GeoIP2/maxminddb_config.h @@ -1,7 +1,7 @@ #ifndef MAXMINDDB_CONFIG_H #define MAXMINDDB_CONFIG_H -#define PACKAGE_VERSION "0.5.6" +#define PACKAGE_VERSION "0.5.6" // Arkshine: added manually. #ifndef MMDB_UINT128_USING_MODE /* Define as 1 if we we use unsigned int __atribute__ ((__mode__(TI))) for uint128 values */ diff --git a/dlls/geoip/Makefile b/dlls/geoip/Makefile index fce54680..01b27512 100755 --- a/dlls/geoip/Makefile +++ b/dlls/geoip/Makefile @@ -14,7 +14,7 @@ MM_ROOT = ../../../metamod/metamod PROJECT = geoip -OBJECTS = sdk/amxxmodule.cpp GeoIP.c geoip_amxx.cpp +OBJECTS = sdk/amxxmodule.cpp GeoIP2/maxminddb.cpp geoip_main.cpp geoip_natives.cpp geoip_util.cpp ############################################## ### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### diff --git a/dlls/geoip/geoip_main.cpp b/dlls/geoip/geoip_main.cpp new file mode 100644 index 00000000..1477d350 --- /dev/null +++ b/dlls/geoip/geoip_main.cpp @@ -0,0 +1,108 @@ +/* Geoip + * Copyright 2007-2014 + * By the AMX Mod X Development Team + * + * Geoip 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. + * + * Geoip 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 Geoip; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * In addition, as a special exception, the author gives permission to + * link the code of Ham Sandwich with the Half-Life Game Engine ("HL + * Engine") and Modified Game Libraries ("MODs") developed by Valve, + * L.L.C ("Valve"). You must obey the GNU General Public License in all + * respects for all of the code used other than the HL Engine and MODs + * from Valve. If you modify this file, you may extend this exception + * to your version of the file, but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. + */ +#include "geoip_main.h" +#include "geoip_natives.h" + +MMDB_s HandleDB; +ke::Vector LangList; + +void OnAmxxAttach() +{ + if (loadDatabase()) + { + MF_AddNatives(GeoipNatives); + } +} + +void OnAmxxDetach() +{ + MMDB_close(&HandleDB); + + LangList.clear(); +} + +bool loadDatabase() +{ + if (HandleDB.filename) // Already loaded. + { + return true; + } + + const char *databases[] = + { + "City", + "Country" // Is the default shipped database with AMXX. + }; + + const char *modName = MF_GetModname(); + const char *dataDir = MF_GetLocalInfo("amxx_datadir", "addons/amxmodx/data"); + + char file[255]; + int status = -1; + + for (size_t i = 0; i < ARRAYSIZE(databases); ++i) + { + snprintf(file, sizeof(file)-1, "%s/%s/GeoLite2-%s.mmdb", modName, dataDir, databases[i]); // MF_BuildPathname not used because backslash + // makes CreateFileMapping failing under windows. + status = MMDB_open(file, MMDB_MODE_MMAP, &HandleDB); + + if (status == MMDB_SUCCESS) + { + break; + } + else if (status != MMDB_FILE_OPEN_ERROR) + { + MF_Log("Could not open %s - %s", file, MMDB_strerror(status)); + + if (status == MMDB_IO_ERROR) + { + MF_Log(" IO error: %s", strerror(errno)); + } + } + } + + if (status != MMDB_SUCCESS) + { + MF_Log("Could not find GeoIP2 databases. Disabled natives."); + return false; + } + + MF_Log("Database info: %s %i.%i", + HandleDB.metadata.description.descriptions[0]->description, + HandleDB.metadata.binary_format_major_version, + HandleDB.metadata.binary_format_minor_version); + + // Retrieve supported languages. + for (size_t i = 0; i < HandleDB.metadata.languages.count; i++) + { + LangList.append(ke::AString(HandleDB.metadata.languages.names[i])); + } + + return true; +} diff --git a/dlls/geoip/geoip_main.h b/dlls/geoip/geoip_main.h new file mode 100644 index 00000000..e9da1f07 --- /dev/null +++ b/dlls/geoip/geoip_main.h @@ -0,0 +1,37 @@ +/* Geoip + * Copyright 2007-2014 + * By the AMX Mod X Development Team + * + * Geoip 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. + * + * Geoip 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 Geoip; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * In addition, as a special exception, the author gives permission to + * link the code of Ham Sandwich with the Half-Life Game Engine ("HL + * Engine") and Modified Game Libraries ("MODs") developed by Valve, + * L.L.C ("Valve"). You must obey the GNU General Public License in all + * respects for all of the code used other than the HL Engine and MODs + * from Valve. If you modify this file, you may extend this exception + * to your version of the file, but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. + */ +#ifndef _INCLUDE_GEOIPMAIN_H +#define _INCLUDE_GEOIPMAIN_H + +#include "GeoIP2/maxminddb.h" +#include "amxxmodule.h" + +bool loadDatabase(); + +#endif // _INCLUDE_GEOIPMAIN_H \ No newline at end of file diff --git a/dlls/geoip/geoip_amxx.cpp b/dlls/geoip/geoip_natives.cpp similarity index 70% rename from dlls/geoip/geoip_amxx.cpp rename to dlls/geoip/geoip_natives.cpp index cda14490..7a6bea6d 100755 --- a/dlls/geoip/geoip_amxx.cpp +++ b/dlls/geoip/geoip_natives.cpp @@ -1,5 +1,3 @@ -<<<<<<< HEAD -<<<<<<< HEAD // vim: set ts=4 sw=4 tw=99 noet: // // AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). @@ -13,189 +11,13 @@ // GeoIP Module // -#include "geoip_amxx.h" +#include "geoip_main.h" +#include "geoip_natives.h" +#include "geoip_util.h" + #include #include -MMDB_s HandleDB; -ke::Vector LangList; - -char *stripPort(char *ip) -{ - char *tmp = strchr(ip, ':'); - - if (tmp) - { - *tmp = '\0'; - } - - return ip; -} - -const char* stristr(const char* str, const char* substr) -{ - register char *needle = (char *)substr; - register char *prevloc = (char *)str; - register char *haystack = (char *)str; - - while (*haystack) - { - if (tolower(*haystack) == tolower(*needle)) - { - haystack++; - - if (!*++needle) - { - return prevloc; - } - } - else - { - haystack = ++prevloc; - needle = (char *)substr; - } - } - - return NULL; -} - -bool lookupByIp(const char *ip, const char **path, MMDB_entry_data_s *result) -{ - int gai_error = 0, mmdb_error = 0; - MMDB_lookup_result_s lookup = MMDB_lookup_string(&HandleDB, ip, &gai_error, &mmdb_error); - - if (gai_error != 0 || MMDB_SUCCESS != mmdb_error || !lookup.found_entry) - { - return false; - } - - MMDB_entry_data_s entry_data; - MMDB_aget_value(&lookup.entry, &entry_data, path); - - if (!entry_data.has_data) - { - return false; - } - - *result = entry_data; - - return true; -} - -const char *lookupString(const char *ip, const char **path, int *length = NULL) -{ - static char buffer[256]; // This should be large enough for long name in UTF-8. - MMDB_entry_data_s result; - - if (!lookupByIp(ip, path, &result)) - { - return NULL; - } - - // Let's avoid a crash in case we go over the buffer size. - size_t maxLength = ke::Min(result.data_size, sizeof(buffer)); - - // Strings from database are not null terminated. - memcpy(buffer, result.utf8_string, maxLength); - buffer[result.data_size] = '\0'; - - if (length) - { - *length = maxLength; - } - - return buffer; -} - -double lookupDouble(const char *ip, const char **path) -{ - MMDB_entry_data_s result; - - if (!lookupByIp(ip, path, &result)) - { - return NULL; - } - - return result.double_value; -} - -int getContinentId(const char *code) -{ - #define CONTINENT_UNKNOWN 0 - #define CONTINENT_AFRICA 1 - #define CONTINENT_ASIA 2 - #define CONTINENT_EUROPE 3 - #define CONTINENT_NORTH_AMERICA 4 - #define CONTINENT_OCEANIA 5 - #define CONTINENT_SOUTH_AMERICA 6 - - int index = CONTINENT_UNKNOWN; - - if (code) - { - switch (code[0]) - { - case 'A': - { - switch (code[1]) - { - case 'F': index = CONTINENT_AFRICA; break; - case 'S': index = CONTINENT_ASIA; break; - } - } - case 'E': index = CONTINENT_EUROPE; break; - case 'O': index = CONTINENT_OCEANIA; break; - case 'N': index = CONTINENT_NORTH_AMERICA; break; - case 'S': index = CONTINENT_SOUTH_AMERICA; break; - } - } - - return index; -} - -const char *getLang(int playerIndex) -{ - static cvar_t *amxmodx_language = NULL; - static cvar_t *amxmodx_cl_langs = NULL; - - if (!amxmodx_language) - amxmodx_language = CVAR_GET_POINTER("amx_language"); - - if (!amxmodx_cl_langs) - amxmodx_cl_langs = CVAR_GET_POINTER("amx_client_languages"); - - if (playerIndex >= 0 && amxmodx_cl_langs && amxmodx_language) - { - const char *value; - const char *lang; - - if (playerIndex == 0 || amxmodx_cl_langs->value <= 0 || !MF_IsPlayerIngame(playerIndex)) - { - value = amxmodx_language->string; - } - else - { - value = ENTITY_KEYVALUE(MF_GetPlayerEdict(playerIndex), "lang"); - } - - if (value && *value) - { - for (size_t i = 0; i < LangList.length(); ++i) - { - lang = LangList.at(i).chars(); - - if (stristr(lang, value) != NULL) - { - return lang; - } - } - } - } - - return "en"; -} - - // native geoip_code2(const ip[], ccode[3]); // Deprecated. static cell AMX_NATIVE_CALL amx_geoip_code2(AMX *amx, cell *params) @@ -429,70 +251,7 @@ static cell AMX_NATIVE_CALL amx_geoip_continent_name(AMX *amx, cell *params) } -void OnAmxxAttach() -{ - const char *databases[] = - { - "City", - "Country" // is the default shipped database with AMXX. - }; - - const char *modName = MF_GetModname(); - const char *dataDir = MF_GetLocalInfo("amxx_datadir", "addons/amxmodx/data"); - - char file[255]; - int status = -1; - - for (size_t i = 0; i < ARRAYSIZE(databases); ++i) - { - sprintf(file, "%s/%s/GeoLite2-%s.mmdb", modName, dataDir, databases[i]); // MF_BuildPathname not used because backslash - // makes CreateFileMapping failing under windows. - status = MMDB_open(file, MMDB_MODE_MMAP, &HandleDB); - - if (status == MMDB_SUCCESS) - { - break; - } - else if (status != MMDB_FILE_OPEN_ERROR) - { - MF_Log("Could not open %s - %s", file, MMDB_strerror(status)); - - if (status == MMDB_IO_ERROR) - { - MF_Log(" IO error: %s", strerror(errno)); - } - } - } - - if (status != MMDB_SUCCESS) - { - MF_Log("Could not find GeoIP2 databases. Disabled natives."); - return; - } - - MF_Log("Database info: %s %i.%i", - HandleDB.metadata.description.descriptions[0]->description, - HandleDB.metadata.binary_format_major_version, - HandleDB.metadata.binary_format_minor_version); - - // Retrieve supported languages. - for (size_t i = 0; i < HandleDB.metadata.languages.count; i++) - { - LangList.append(ke::AString(HandleDB.metadata.languages.names[i])); - } - - MF_AddNatives(geoip_natives); -} - -void OnAmxxDetach() -{ - MMDB_close(&HandleDB); - - LangList.clear(); -} - - -AMX_NATIVE_INFO geoip_natives[] = +AMX_NATIVE_INFO GeoipNatives[] = { { "geoip_code2", amx_geoip_code2 }, { "geoip_code3", amx_geoip_code3 }, diff --git a/dlls/geoip/geoip_natives.h b/dlls/geoip/geoip_natives.h new file mode 100644 index 00000000..4f31be0f --- /dev/null +++ b/dlls/geoip/geoip_natives.h @@ -0,0 +1,39 @@ +/* Geoip + * Copyright 2007-2014 + * By the AMX Mod X Development Team + * + * Geoip 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. + * + * Geoip 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 Geoip; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * In addition, as a special exception, the author gives permission to + * link the code of Ham Sandwich with the Half-Life Game Engine ("HL + * Engine") and Modified Game Libraries ("MODs") developed by Valve, + * L.L.C ("Valve"). You must obey the GNU General Public License in all + * respects for all of the code used other than the HL Engine and MODs + * from Valve. If you modify this file, you may extend this exception + * to your version of the file, but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. + */ +#ifndef _INCLUDE_GEOIPNATIVES_H +#define _INCLUDE_GEOIPNATIVES_H + +#include +#include + +extern MMDB_s HandleDB; +extern ke::Vector LangList; +extern AMX_NATIVE_INFO GeoipNatives[]; + +#endif // _INCLUDE_GEOIPNATIVES_H diff --git a/dlls/geoip/geoip_util.cpp b/dlls/geoip/geoip_util.cpp new file mode 100644 index 00000000..41a8de4a --- /dev/null +++ b/dlls/geoip/geoip_util.cpp @@ -0,0 +1,205 @@ +/* Geoip + * Copyright 2007-2014 + * By the AMX Mod X Development Team + * + * Geoip 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. + * + * Geoip 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 Geoip; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * In addition, as a special exception, the author gives permission to + * link the code of Ham Sandwich with the Half-Life Game Engine ("HL + * Engine") and Modified Game Libraries ("MODs") developed by Valve, + * L.L.C ("Valve"). You must obey the GNU General Public License in all + * respects for all of the code used other than the HL Engine and MODs + * from Valve. If you modify this file, you may extend this exception + * to your version of the file, but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. + */ +#include "geoip_util.h" +#include "geoip_natives.h" + +char *stripPort(char *ip) +{ + char *tmp = strchr(ip, ':'); + + if (tmp) + { + *tmp = '\0'; + } + + return ip; +} + +const char* stristr(const char* str, const char* substr) +{ + register char *needle = (char *)substr; + register char *prevloc = (char *)str; + register char *haystack = (char *)str; + + while (*haystack) + { + if (tolower(*haystack) == tolower(*needle)) + { + haystack++; + + if (!*++needle) + { + return prevloc; + } + } + else + { + haystack = ++prevloc; + needle = (char *)substr; + } + } + + return NULL; +} + +bool lookupByIp(const char *ip, const char **path, MMDB_entry_data_s *result) +{ + int gai_error = 0, mmdb_error = 0; + MMDB_lookup_result_s lookup = MMDB_lookup_string(&HandleDB, ip, &gai_error, &mmdb_error); + + if (gai_error != 0 || MMDB_SUCCESS != mmdb_error || !lookup.found_entry) + { + return false; + } + + MMDB_entry_data_s entry_data; + MMDB_aget_value(&lookup.entry, &entry_data, path); + + if (!entry_data.has_data) + { + return false; + } + + *result = entry_data; + + return true; +} + +const char *lookupString(const char *ip, const char **path, int *length) +{ + static char buffer[256]; // This should be large enough for long name in UTF-8. + MMDB_entry_data_s result; + + if (!lookupByIp(ip, path, &result)) + { + return NULL; + } + + // Let's avoid a crash in case we go over the buffer size. + size_t maxLength = ke::Min((size_t)result.data_size, sizeof(buffer)); + + // Strings from database are not null terminated. + memcpy(buffer, result.utf8_string, maxLength); + buffer[result.data_size] = '\0'; + + if (length) + { + *length = maxLength; + } + + return buffer; +} + +double lookupDouble(const char *ip, const char **path) +{ + MMDB_entry_data_s result; + + if (!lookupByIp(ip, path, &result)) + { + return 0; + } + + return result.double_value; +} + +int getContinentId(const char *code) +{ + #define CONTINENT_UNKNOWN 0 + #define CONTINENT_AFRICA 1 + #define CONTINENT_ASIA 2 + #define CONTINENT_EUROPE 3 + #define CONTINENT_NORTH_AMERICA 4 + #define CONTINENT_OCEANIA 5 + #define CONTINENT_SOUTH_AMERICA 6 + + int index = CONTINENT_UNKNOWN; + + if (code) + { + switch (code[0]) + { + case 'A': + { + switch (code[1]) + { + case 'F': index = CONTINENT_AFRICA; break; + case 'S': index = CONTINENT_ASIA; break; + } + } + case 'E': index = CONTINENT_EUROPE; break; + case 'O': index = CONTINENT_OCEANIA; break; + case 'N': index = CONTINENT_NORTH_AMERICA; break; + case 'S': index = CONTINENT_SOUTH_AMERICA; break; + } + } + + return index; +} + +const char *getLang(int playerIndex) +{ + static cvar_t *amxmodx_language = NULL; + static cvar_t *amxmodx_cl_langs = NULL; + + if (!amxmodx_language) + amxmodx_language = CVAR_GET_POINTER("amx_language"); + + if (!amxmodx_cl_langs) + amxmodx_cl_langs = CVAR_GET_POINTER("amx_client_languages"); + + if (playerIndex >= 0 && amxmodx_cl_langs && amxmodx_language) + { + const char *value; + const char *lang; + + if (playerIndex == 0 || amxmodx_cl_langs->value <= 0 || !MF_IsPlayerIngame(playerIndex)) + { + value = amxmodx_language->string; + } + else + { + value = ENTITY_KEYVALUE(MF_GetPlayerEdict(playerIndex), "lang"); + } + + if (value && *value) + { + for (size_t i = 0; i < LangList.length(); ++i) + { + lang = LangList.at(i).chars(); + + if (stristr(lang, value) != NULL) + { + return lang; + } + } + } + } + + return "en"; +} diff --git a/dlls/geoip/geoip_util.h b/dlls/geoip/geoip_util.h new file mode 100644 index 00000000..54ee61d7 --- /dev/null +++ b/dlls/geoip/geoip_util.h @@ -0,0 +1,49 @@ +/* Geoip + * Copyright 2007-2014 + * By the AMX Mod X Development Team + * + * Geoip 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. + * + * Geoip 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 Geoip; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * In addition, as a special exception, the author gives permission to + * link the code of Ham Sandwich with the Half-Life Game Engine ("HL + * Engine") and Modified Game Libraries ("MODs") developed by Valve, + * L.L.C ("Valve"). You must obey the GNU General Public License in all + * respects for all of the code used other than the HL Engine and MODs + * from Valve. If you modify this file, you may extend this exception + * to your version of the file, but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. + */ +#ifndef _INCLUDE_GEOIPUTIL_H +#define _INCLUDE_GEOIPUTIL_H + +#include "geoip_main.h" + +#if defined(WIN32) + #define snprintf _snprintf +#endif + +char *stripPort(char *ip); + +bool lookupByIp(const char *ip, const char **path, MMDB_entry_data_s *result); +double lookupDouble(const char *ip, const char **path); +const char *lookupString(const char *ip, const char **path, int *length = NULL); + +int getContinentId(const char *code); +const char *getLang(int playerIndex); + +const char* stristr(const char* str, const char* substr); + +#endif // _INCLUDE_GEOIPUTIL_H From 17e0ab99e61ddee0bdeabd60c35fbbde0ba387fe Mon Sep 17 00:00:00 2001 From: Arkshine Date: Fri, 1 Aug 2014 00:58:02 +0200 Subject: [PATCH 48/71] Geoip: Update documentation. --- plugins/include/geoip.inc | 172 ++++++++++++++++++++------------------ 1 file changed, 91 insertions(+), 81 deletions(-) diff --git a/plugins/include/geoip.inc b/plugins/include/geoip.inc index 02c95760..7739f0dc 100755 --- a/plugins/include/geoip.inc +++ b/plugins/include/geoip.inc @@ -12,77 +12,87 @@ // #if defined geoip_included - #endinput + #endinput #endif #define _geoip_included #if AMXX_VERSION_NUM >= 175 - #pragma reqlib geoip - #if !defined AMXMODX_NOAUTOLOAD - #pragma loadlib geoip - #endif + #pragma reqlib geoip + #if !defined AMXMODX_NOAUTOLOAD + #pragma loadlib geoip + #endif #else - #pragma library geoip + #pragma library geoip #endif -/// IP addresses passed to these natives can contain ports, the ports will be ignored. +/** + * @global IP addresses passed to these natives can contain ports, the ports will be ignored. + */ /** - * Lookup the two character country code for a given IP address. + * Look up the two character country code for a given IP address. * e.g: "US", "CA", etc. * - * @param ip The IP address to lookup. - * @param result The result buffer. If the lookup does not succeed, the buffer is not modified. - * @return true on a successful lookup, false on a failed lookup. + * @param ip The IP address to lookup. + * @param result The result buffer. If the lookup does not succeed, the buffer is not modified. + * + * @return true on a successful lookup, false on a failed lookup. */ native bool:geoip_code2_ex(const ip[], result[3]); /** - * Lookup the three character country code for a given IP address. + * Look up the three character country code for a given IP address. * e.g: "USA", "cAN", etc. * - * @param ip The IP address to lookup. - * @param result The result buffer. If the lookup does not succeed, the buffer is not modified. - * @return true on a successful lookup, false on a failed lookup. + * @param ip The IP address to lookup. + * @param result The result buffer. If the lookup does not succeed, the buffer is not modified. + * + * @return true on a successful lookup, false on a failed lookup. */ native bool:geoip_code3_ex(const ip[], result[4]); /** - * @deprecated * Lookup the two character country code for a given IP address. * - * @note This native will overflow the buffer by one cell on an unknown ip lookup! - * @note Use geoip_code2_ex instead! + * @deprecated This native will overflow the buffer by one cell on an unknown ip lookup! + * Use geoip_code2_ex instead. * - * @param ip The IP address to lookup. - * @param result The result buffer. + * @param ip The IP address to lookup. + * @param result The result buffer. + * + * @return 1 on a successful lookup, 0 otherwise. */ +//#pragma deprecated Use geoip_code2_ex() instead. native geoip_code2(const ip[], ccode[3]); /** - * @deprecated * Lookup the three character country code for a given IP address. * - * @note This native will overflow the buffer by one cell on an unknown ip lookup! - * @note Use geoip_code3_ex instead! + * @deprecated This native will overflow the buffer by one cell on an unknown ip lookup! + * Use geoip_code3_ex instead. * - * @param ip The IP address to lookup. - * @param result The result buffer. + * @param ip The IP address to lookup. + * @param result The result buffer. + * + * @return 1 on a successful lookup, 0 otherwise. */ +//#pragma deprecated Use geoip_code3() instead. native geoip_code3(const ip[], result[4]); /** * Lookup the full country name for the given IP address. Sets the buffer to "error" on * an unsuccessful lookup. * - * @param ip The IP address to lookup. - * @param result The result of the geoip lookup. - * @param len The maximum length of the result buffer. - * @param id An optional player's index in order to return the result + * @param ip The IP address to lookup. + * @param result The result of the geoip lookup. + * @param len The maximum length of the result buffer. + * @param id An optional player's index in order to return the result * in the player's language, if supported. * -1: the default language, which is english. * 0: the server language. You can use LANG_SERVER define. - * >=1: the player's language. + * >=1: the player's language. + * + * @return The result length on successful lookup, 0 otherwise. */ native geoip_country(const ip[], result[], len, id = -1); @@ -93,47 +103,47 @@ native geoip_country(const ip[], result[], len, id = -1); * http://dev.maxmind.com/geoip/geoip2/geolite2/ (MaxMind DB binary) */ -/** +/** * Look up the full city name for the given IP address. - * - * @param ip The IP address to look up. - * @param result The result of the geoip look up. - * @param len The maximum length of the result buffer. - * @param id An optional player's index in order to return the result + * + * @param ip The IP address to look up. + * @param result The result of the geoip look up. + * @param len The maximum length of the result buffer. + * @param id An optional player's index in order to return the result * in the player's language, if supported. * -1: the default language, which is english. * 0: the server language. You can use LANG_SERVER define. - * >=1: the player's language. + * >=1: the player's language. * * @return The result length on successful lookup, 0 otherwise. - */ -native geoip_city(const ip[], result[], len, id = -1); + */ +native geoip_city(const ip[], result[], len, id = -1); /** * Look up the region/state code for the given IP address. * e.g. "US-OH", "DE-HH", IT-82, "FR-U", etc. * - * @param ip The IP address to look up. - * @param result The result of the geoip look up. - * @param len The maximum length of the result buffer. + * @param ip The IP address to look up. + * @param result The result of the geoip look up. + * @param len The maximum length of the result buffer. * - * @return The result length on successful lookup, 0 otherwise. + * @return The result length on successful lookup, 0 otherwise. */ native geoip_region_code(const ip[], result[], len); /** * Look up the full region/state name for the given IP address. * - * @param ip The IP address to look up. - * @param result The result of the geoip look up. - * @param len The maximum length of the result buffer. - * @param id An optional player's index in order to return the result + * @param ip The IP address to look up. + * @param result The result of the geoip look up. + * @param len The maximum length of the result buffer. + * @param id An optional player's index in order to return the result * in the player's language, if supported. * -1: the default language, which is english. * 0: the server language. You can use LANG_SERVER define. - * >=1: the player's language. + * >=1: the player's language. * - * @return The result length on successful lookup, 0 otherwise. + * @return The result length on successful lookup, 0 otherwise. */ native geoip_region_name(const ip[], result[], len, id = -1); @@ -141,42 +151,42 @@ native geoip_region_name(const ip[], result[], len, id = -1); * Look up the full time zone for the given IP address. * e.g. America/Los_Angeles, Europe/Paris. * - * @param ip The IP address to look up. - * @param result The result of the geoip look up. - * @param len The maximum length of the result buffer. + * @param ip The IP address to look up. + * @param result The result of the geoip look up. + * @param len The maximum length of the result buffer. * - * @return The result length on successful lookup, 0 otherwise. + * @return The result length on successful lookup, 0 otherwise. */ native geoip_timezone(const ip[], result[], len); -/** +/** * Look up the city's latitude for the given IP address. - * - * @param ip The IP address to look up. * - * @return The result of the geoip look up, 0 if latitude is not found. - */ -native Float:geoip_latitude(const ip[]); + * @param ip The IP address to look up. + * + * @return The result of the geoip look up, 0 if latitude is not found. + */ +native Float:geoip_latitude(const ip[]); -/** - * Look up the city's longitude for the given IP address. - * - * @param ip The IP address to look up. +/** + * Look up the city's longitude for the given IP address. * - * @return The result of the geoip look up, 0 if longitude is not found. - */ + * @param ip The IP address to look up. + * + * @return The result of the geoip look up, 0 if longitude is not found. + */ native Float:geoip_longitude(const ip[]); /** * Calculate the distance between geographical coordinates, latitude and longitude. * - * @param lat1 The first IP latitude. - * @param lon1 The first IP longitude. - * @param lat2 The second IP latitude. - * @param lon2 The second IP longitude. - * @param system The system of measurement, 0 = Metric(kilometers) or 1 = English(miles). + * @param lat1 The first IP latitude. + * @param lon1 The first IP longitude. + * @param lat2 The second IP latitude. + * @param lon2 The second IP longitude. + * @param system The system of measurement, 0 = Metric(kilometers) or 1 = English(miles). * - * @return The distance as result in specified system of measurement. + * @return The distance as result in specified system of measurement. */ #define SYSTEM_METRIC 0 // kilometers #define SYSTEM_IMPERIAL 1 // statute miles @@ -187,13 +197,13 @@ native Float:geoip_distance(Float:lat1, Float:lon1, Float:lat2, Float:lon2, syst * Look up the continent code for a given IP address. * * @note The code can be retrieved as integer (See CONTINENT_* constants.) or string (2 characters). - * @note Possible continent codes are AF, AS, EU, NA, OC, SA for + * @note Possible continent codes are AF, AS, EU, NA, OC, SA for * Africa(1), Asia(2), Europe(3), North America(4), Oceania(5) and South America(6). * - * @param ip The IP address to look up. - * @param result The result of the geoip look up. + * @param ip The IP address to look up. + * @param result The result of the geoip look up. * - * @return The continent id on successful lookup, 0 otherwise. + * @return The continent id on successful lookup, 0 otherwise. */ enum Continent { @@ -210,15 +220,15 @@ native Continent:geoip_continent_code(const ip[], result[3]); /** * Look up the full continent name for the given IP address. * - * @param ip The IP address to look up. - * @param result The result of the geoip look up. - * @param len The maximum length of the result buffer. - * @param id An optional player's index in order to return the result + * @param ip The IP address to look up. + * @param result The result of the geoip look up. + * @param len The maximum length of the result buffer. + * @param id An optional player's index in order to return the result * in the player's language, if supported. * -1: the default language, which is english. * 0: the server language. You can use LANG_SERVER define. - * >=1: the player's language. + * >=1: the player's language. * - * @return The result length on successful lookup, 0 otherwise. + * @return The result length on successful lookup, 0 otherwise. */ native geoip_continent_name(const ip[], result[], len, id = -1); From 67bfe6bb36c76ecb1b5533c2f915b561a22c1bbd Mon Sep 17 00:00:00 2001 From: Arkshine Date: Fri, 1 Aug 2014 12:59:56 +0200 Subject: [PATCH 49/71] Geoip: Fix possible buffer overflow. --- dlls/geoip/geoip_util.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dlls/geoip/geoip_util.cpp b/dlls/geoip/geoip_util.cpp index 41a8de4a..4c675905 100644 --- a/dlls/geoip/geoip_util.cpp +++ b/dlls/geoip/geoip_util.cpp @@ -102,7 +102,7 @@ const char *lookupString(const char *ip, const char **path, int *length) } // Let's avoid a crash in case we go over the buffer size. - size_t maxLength = ke::Min((size_t)result.data_size, sizeof(buffer)); + size_t maxLength = ke::Min((size_t)result.data_size, sizeof(buffer)-1); // Strings from database are not null terminated. memcpy(buffer, result.utf8_string, maxLength); From ec3ff1deb92301f6d495bf1f1b411a254207d4d4 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Fri, 1 Aug 2014 16:19:50 +0200 Subject: [PATCH 50/71] Geoip: Add command to get database metadata and to dump all data of an IP address for debugging purposes. And for some reason some project files were not pushed. --- dlls/geoip/geoip_main.cpp | 143 +++++++++++++++++++++++- dlls/geoip/geoip_main.h | 1 + dlls/geoip/msvc10/geoip.vcxproj | 13 ++- dlls/geoip/msvc10/geoip.vcxproj.filters | 27 +++-- 4 files changed, 168 insertions(+), 16 deletions(-) diff --git a/dlls/geoip/geoip_main.cpp b/dlls/geoip/geoip_main.cpp index 1477d350..01a5bdeb 100644 --- a/dlls/geoip/geoip_main.cpp +++ b/dlls/geoip/geoip_main.cpp @@ -28,6 +28,8 @@ */ #include "geoip_main.h" #include "geoip_natives.h" +#include "geoip_util.h" +#include MMDB_s HandleDB; ke::Vector LangList; @@ -38,6 +40,8 @@ void OnAmxxAttach() { MF_AddNatives(GeoipNatives); } + + REG_SVR_COMMAND("geoip", OnGeoipCommand); } void OnAmxxDetach() @@ -47,6 +51,138 @@ void OnAmxxDetach() LangList.clear(); } +void OnGeoipCommand() +{ + const char *cmd = CMD_ARGV(1); + + if (!strcmp(cmd, "version")) + { + if (!HandleDB.filename) + { + printf("\n Database is not loaded.\n"); + return; + } + + const char *meta_dump = "\n" + " Database metadata\n" + " Node count: %i\n" + " Record size: %i bits\n" + " IP version: IPv%i\n" + " Binary format: %i.%i\n" + " Build epoch: %llu (%s)\n" + " Type: %s\n" + " Languages: "; + + char date[40]; + strftime(date, sizeof(date), "%Y-%m-%d %H:%M:%S UTC", gmtime((const time_t *)&HandleDB.metadata.build_epoch)); + + fprintf(stdout, meta_dump, + HandleDB.metadata.node_count, + HandleDB.metadata.record_size, + HandleDB.metadata.ip_version, + HandleDB.metadata.binary_format_major_version, + HandleDB.metadata.binary_format_minor_version, + HandleDB.metadata.build_epoch, + date, + HandleDB.metadata.database_type); + + for (size_t i = 0; i < HandleDB.metadata.languages.count; ++i) + { + fprintf(stdout, "%s", HandleDB.metadata.languages.names[i]); + + if (i language, + HandleDB.metadata.description.descriptions[i]->description); + } + fprintf(stdout, "\n"); + } + else if (!strcmp(cmd, "dump")) + { + if (!HandleDB.filename) + { + printf("\n Database is not loaded.\n\n"); + return; + } + + int num_args = CMD_ARGC(); + + if (num_args < 3) + { + printf("\n An IP address must be provided.\n\n"); + return; + } + + char *ip = stripPort((char *)CMD_ARGV(2)); + + int gai_error = 0; + int mmdb_error = 0; + + MMDB_lookup_result_s result = MMDB_lookup_string(&HandleDB, ip, &gai_error, &mmdb_error); + + if (gai_error != 0 || mmdb_error != MMDB_SUCCESS || !result.found_entry) + { + printf("\n Either look up failed or no found result.\n\n"); + return; + } + + MMDB_entry_data_list_s *entry_data_list = NULL; + int status = -1; + + if ((status = MMDB_get_entry_data_list(&result.entry, &entry_data_list)) != MMDB_SUCCESS || entry_data_list == NULL) + { + printf("\n Could not retrieve data list - %s.\n\n", MMDB_strerror(status)); + return; + } + + const char *file = NULL; + FILE *fp = NULL; + + if (num_args > 3) + { + file = CMD_ARGV(3); + fp = fopen(MF_BuildPathname("%s", file), "w"); + } + + if (!fp) + { + file = NULL; + fp = stdout; + } + + fprintf(fp, "\n"); + MMDB_dump_entry_data_list(fp, entry_data_list, 2); + fprintf(fp, "\n"); + + if (file) + { + fclose(fp); + } + + MMDB_free_entry_data_list(entry_data_list); + } + else + { + printf("\n"); + printf(" Usage: geoip [argument]\n"); + printf(" Commands:\n"); + printf(" version - display geoip database metadata\n"); + printf(" dump [output file] - dump all data from an IP address formatted in a JSON-ish fashion.\n"); + printf(" An output file is mod-based and if not provided, it will print in the console.\n"); + printf("\n"); + } +} + bool loadDatabase() { if (HandleDB.filename) // Already loaded. @@ -68,8 +204,11 @@ bool loadDatabase() for (size_t i = 0; i < ARRAYSIZE(databases); ++i) { - snprintf(file, sizeof(file)-1, "%s/%s/GeoLite2-%s.mmdb", modName, dataDir, databases[i]); // MF_BuildPathname not used because backslash - // makes CreateFileMapping failing under windows. + // MF_BuildPathname not used because backslash + // makes CreateFileMapping failing under windows. + + snprintf(file, sizeof(file)-1, "%s/%s/GeoLite2-%s.mmdb", modName, dataDir, databases[i]); + status = MMDB_open(file, MMDB_MODE_MMAP, &HandleDB); if (status == MMDB_SUCCESS) diff --git a/dlls/geoip/geoip_main.h b/dlls/geoip/geoip_main.h index e9da1f07..f6bb0ccb 100644 --- a/dlls/geoip/geoip_main.h +++ b/dlls/geoip/geoip_main.h @@ -33,5 +33,6 @@ #include "amxxmodule.h" bool loadDatabase(); +void OnGeoipCommand(); #endif // _INCLUDE_GEOIPMAIN_H \ No newline at end of file diff --git a/dlls/geoip/msvc10/geoip.vcxproj b/dlls/geoip/msvc10/geoip.vcxproj index c8645c01..3e1d5b8e 100644 --- a/dlls/geoip/msvc10/geoip.vcxproj +++ b/dlls/geoip/msvc10/geoip.vcxproj @@ -52,7 +52,7 @@ Disabled - ..\;..\sdk;..\GeoIP2;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\pm_shared;$(HLSDK)\public;%(AdditionalIncludeDirectories) + ..\;..\sdk;..\..\..\public\amtl;..\GeoIP2;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\pm_shared;$(HLSDK)\public;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;GEOIP_EXPORTS;HAVE_STDINT_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true EnableFastChecks @@ -75,7 +75,7 @@ - ..\;..\sdk;..\GeoIP2;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\pm_shared;$(HLSDK)\public;%(AdditionalIncludeDirectories) + ..\;..\sdk;..\..\..\public\amtl;..\GeoIP2;$(METAMOD)\metamod;$(HLSDK)\common;$(HLSDK)\engine;$(HLSDK)\dlls;$(HLSDK)\pm_shared;$(HLSDK)\public;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;GEOIP_EXPORTS;HAVE_STDINT_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreaded false @@ -96,15 +96,18 @@ - + + + - - + + + diff --git a/dlls/geoip/msvc10/geoip.vcxproj.filters b/dlls/geoip/msvc10/geoip.vcxproj.filters index be52e3c7..87f791de 100644 --- a/dlls/geoip/msvc10/geoip.vcxproj.filters +++ b/dlls/geoip/msvc10/geoip.vcxproj.filters @@ -23,23 +23,23 @@ - - Source Files - Module SDK\SDK Base GeoIP2 + + Source Files + + + Source Files + + + Source Files + - - Header Files - - - Header Files - Module SDK @@ -55,6 +55,15 @@ GeoIP2 + + Header Files + + + Header Files + + + Header Files + From 6babcafbec70cb9f8b1e0a410d6e13bb54b2a457 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Fri, 1 Aug 2014 17:11:33 +0200 Subject: [PATCH 51/71] Geoip: Add a fallback to default language (en) in case of unsuccessful lookup with user's language. --- dlls/geoip/geoip_util.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/dlls/geoip/geoip_util.cpp b/dlls/geoip/geoip_util.cpp index 4c675905..63b2d25c 100644 --- a/dlls/geoip/geoip_util.cpp +++ b/dlls/geoip/geoip_util.cpp @@ -73,7 +73,7 @@ bool lookupByIp(const char *ip, const char **path, MMDB_entry_data_s *result) int gai_error = 0, mmdb_error = 0; MMDB_lookup_result_s lookup = MMDB_lookup_string(&HandleDB, ip, &gai_error, &mmdb_error); - if (gai_error != 0 || MMDB_SUCCESS != mmdb_error || !lookup.found_entry) + if (gai_error != 0 || mmdb_error != MMDB_SUCCESS || !lookup.found_entry) { return false; } @@ -83,7 +83,30 @@ bool lookupByIp(const char *ip, const char **path, MMDB_entry_data_s *result) if (!entry_data.has_data) { - return false; + size_t i = 0; + + // Dirty fall back to default language ("en") in case provided user's language is not localized. + + // Searh "names" position. + while (strcmp(path[i++], "names")); + + // No localized entry or we use already default language. + if (!*path[i] || !strcmp(path[i], "en")) + { + return false; + } + + // Overwrite user's language. + path[i] = "en"; + + // Try again. + gai_error = mmdb_error = 0; + MMDB_aget_value(&lookup.entry, &entry_data, path); + + if (!entry_data.has_data) + { + return false; + } } *result = entry_data; From 178608c5f8524967fdd21c7f6be16a9dab1e4cc0 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Sat, 2 Aug 2014 22:16:17 +0200 Subject: [PATCH 52/71] Geoip: Make some natives UTF-8 safe. --- dlls/geoip/geoip_natives.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dlls/geoip/geoip_natives.cpp b/dlls/geoip/geoip_natives.cpp index 7a6bea6d..b1f010c7 100755 --- a/dlls/geoip/geoip_natives.cpp +++ b/dlls/geoip/geoip_natives.cpp @@ -114,7 +114,7 @@ static cell AMX_NATIVE_CALL amx_geoip_country(AMX *amx, cell *params) return 0; } - return MF_SetAmxString(amx, params[2], country, length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. + return MF_SetAmxStringUTF8Char(amx, params[2], country, length, params[3] + 1); } // native geoip_city(const ip[], result[], len, id = -1); @@ -126,7 +126,7 @@ static cell AMX_NATIVE_CALL amx_geoip_city(AMX *amx, cell *params) const char *path[] = { "city", "names", getLang(params[4]), NULL }; const char *city = lookupString(ip, path, &length); - return MF_SetAmxString(amx, params[2], city ? city : "", length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. + return MF_SetAmxStringUTF8Char(amx, params[2], city ? city : "", length, params[3] + 1); } // native geoip_region_code(const ip[], result[], len); @@ -160,7 +160,7 @@ static cell AMX_NATIVE_CALL amx_geoip_region_code(AMX *amx, cell *params) } } - return MF_SetAmxString(amx, params[2], finalLength ? code : "", finalLength >= params[3] ? params[3] : finalLength); + return MF_SetAmxString(amx, params[2], finalLength ? code : "", ke::Min(finalLength, params[3])); } // native geoip_region_name(const ip[], result[], len, id = -1); @@ -172,7 +172,7 @@ static cell AMX_NATIVE_CALL amx_geoip_region_name(AMX *amx, cell *params) const char *path[] = { "subdivisions", "0", "names", getLang(params[4]), NULL }; // First result. const char *region = lookupString(ip, path, &length); - return MF_SetAmxString(amx, params[2], region ? region : "", length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. + return MF_SetAmxStringUTF8Char(amx, params[2], region ? region : "", length, params[3] + 1); } // native geoip_timezone(const ip[], result[], len); @@ -184,7 +184,7 @@ static cell AMX_NATIVE_CALL amx_geoip_timezone(AMX *amx, cell *params) const char *path[] = { "location", "time_zone", NULL }; const char *timezone = lookupString(ip, path, &length); - return MF_SetAmxString(amx, params[2], timezone ? timezone : "", length >= params[3] ? params[3] : length); + return MF_SetAmxString(amx, params[2], timezone ? timezone : "", ke::Min(length, params[3])); } // native geoip_latitude(const ip[]); @@ -247,7 +247,7 @@ static cell AMX_NATIVE_CALL amx_geoip_continent_name(AMX *amx, cell *params) const char *path[] = { "continent", "names", getLang(params[4]), NULL }; const char *continent = lookupString(ip, path, &length); - return MF_SetAmxString(amx, params[2], continent ? continent : "", length >= params[3] ? params[3] : length); // TODO: make this utf8 safe. + return MF_SetAmxStringUTF8Char(amx, params[2], continent ? continent : "", length, params[3] + 1); } From adde73123f2ef5d4f2fc1cdaf699d23b28667f2b Mon Sep 17 00:00:00 2001 From: Arkshine Date: Tue, 5 Aug 2014 11:14:29 +0200 Subject: [PATCH 53/71] Geoip: Update license headers. Hope this won't break merging. --- dlls/geoip/geoip_main.cpp | 41 ++++++++++++------------------------ dlls/geoip/geoip_main.h | 41 ++++++++++++------------------------ dlls/geoip/geoip_natives.cpp | 2 +- dlls/geoip/geoip_natives.h | 41 ++++++++++++------------------------ dlls/geoip/geoip_util.cpp | 41 ++++++++++++------------------------ dlls/geoip/geoip_util.h | 41 ++++++++++++------------------------ 6 files changed, 66 insertions(+), 141 deletions(-) diff --git a/dlls/geoip/geoip_main.cpp b/dlls/geoip/geoip_main.cpp index 01a5bdeb..61344c22 100644 --- a/dlls/geoip/geoip_main.cpp +++ b/dlls/geoip/geoip_main.cpp @@ -1,31 +1,16 @@ -/* Geoip - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Geoip 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. - * - * Geoip 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 Geoip; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// GeoIP Module +// + #include "geoip_main.h" #include "geoip_natives.h" #include "geoip_util.h" diff --git a/dlls/geoip/geoip_main.h b/dlls/geoip/geoip_main.h index f6bb0ccb..6d9f58fb 100644 --- a/dlls/geoip/geoip_main.h +++ b/dlls/geoip/geoip_main.h @@ -1,31 +1,16 @@ -/* Geoip - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Geoip 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. - * - * Geoip 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 Geoip; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// GeoIP Module +// + #ifndef _INCLUDE_GEOIPMAIN_H #define _INCLUDE_GEOIPMAIN_H diff --git a/dlls/geoip/geoip_natives.cpp b/dlls/geoip/geoip_natives.cpp index b1f010c7..24785aa3 100755 --- a/dlls/geoip/geoip_natives.cpp +++ b/dlls/geoip/geoip_natives.cpp @@ -1,4 +1,4 @@ -// vim: set ts=4 sw=4 tw=99 noet: +// vim: set ts=4 sw=4 tw=99 noet: // // AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). // Copyright (C) The AMX Mod X Development Team. diff --git a/dlls/geoip/geoip_natives.h b/dlls/geoip/geoip_natives.h index 4f31be0f..06f6d216 100644 --- a/dlls/geoip/geoip_natives.h +++ b/dlls/geoip/geoip_natives.h @@ -1,31 +1,16 @@ -/* Geoip - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Geoip 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. - * - * Geoip 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 Geoip; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// GeoIP Module +// + #ifndef _INCLUDE_GEOIPNATIVES_H #define _INCLUDE_GEOIPNATIVES_H diff --git a/dlls/geoip/geoip_util.cpp b/dlls/geoip/geoip_util.cpp index 63b2d25c..0af8af34 100644 --- a/dlls/geoip/geoip_util.cpp +++ b/dlls/geoip/geoip_util.cpp @@ -1,31 +1,16 @@ -/* Geoip - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Geoip 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. - * - * Geoip 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 Geoip; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// GeoIP Module +// + #include "geoip_util.h" #include "geoip_natives.h" diff --git a/dlls/geoip/geoip_util.h b/dlls/geoip/geoip_util.h index 54ee61d7..c6c19909 100644 --- a/dlls/geoip/geoip_util.h +++ b/dlls/geoip/geoip_util.h @@ -1,31 +1,16 @@ -/* Geoip - * Copyright 2007-2014 - * By the AMX Mod X Development Team - * - * Geoip 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. - * - * Geoip 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 Geoip; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * In addition, as a special exception, the author gives permission to - * link the code of Ham Sandwich with the Half-Life Game Engine ("HL - * Engine") and Modified Game Libraries ("MODs") developed by Valve, - * L.L.C ("Valve"). You must obey the GNU General Public License in all - * respects for all of the code used other than the HL Engine and MODs - * from Valve. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If - * you do not wish to do so, delete this exception statement from your - * version. - */ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// GeoIP Module +// + #ifndef _INCLUDE_GEOIPUTIL_H #define _INCLUDE_GEOIPUTIL_H From 023c1e3baf8305f50401a6c28d0e93dfbad0c61d Mon Sep 17 00:00:00 2001 From: Arkshine Date: Tue, 5 Aug 2014 22:57:48 +0200 Subject: [PATCH 54/71] Geoip: Fix missing continent id and fix indentation. --- dlls/geoip/GeoIP2/maxminddb.cpp | 2 +- dlls/geoip/geoip_util.cpp | 14 ++++++++------ plugins/include/geoip.inc | 7 ++++--- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/dlls/geoip/GeoIP2/maxminddb.cpp b/dlls/geoip/GeoIP2/maxminddb.cpp index a380720d..116df6f4 100644 --- a/dlls/geoip/GeoIP2/maxminddb.cpp +++ b/dlls/geoip/GeoIP2/maxminddb.cpp @@ -611,7 +611,7 @@ MMDB_lookup_result_s MMDB_lookup_string(MMDB_s *const mmdb, LOCAL int resolve_any_address(const char *ipstr, struct addrinfo **addresses) { struct addrinfo hints; - memset(&hints, 0, sizeof(addrinfo)); // getaddrinfo doesn't like garbage. + memset(&hints, 0, sizeof(addrinfo)); // getaddrinfo doesn't like garbage. hints.ai_socktype = SOCK_STREAM; int gai_status; diff --git a/dlls/geoip/geoip_util.cpp b/dlls/geoip/geoip_util.cpp index 0af8af34..52b50b22 100644 --- a/dlls/geoip/geoip_util.cpp +++ b/dlls/geoip/geoip_util.cpp @@ -139,12 +139,13 @@ double lookupDouble(const char *ip, const char **path) int getContinentId(const char *code) { #define CONTINENT_UNKNOWN 0 - #define CONTINENT_AFRICA 1 - #define CONTINENT_ASIA 2 - #define CONTINENT_EUROPE 3 - #define CONTINENT_NORTH_AMERICA 4 - #define CONTINENT_OCEANIA 5 - #define CONTINENT_SOUTH_AMERICA 6 + #define CONTINENT_AFRICA 1 + #define CONTINENT_ANTARCTICA 2 + #define CONTINENT_ASIA 3 + #define CONTINENT_EUROPE 4 + #define CONTINENT_NORTH_AMERICA 5 + #define CONTINENT_OCEANIA 6 + #define CONTINENT_SOUTH_AMERICA 7 int index = CONTINENT_UNKNOWN; @@ -157,6 +158,7 @@ int getContinentId(const char *code) switch (code[1]) { case 'F': index = CONTINENT_AFRICA; break; + case 'N': index = CONTINENT_ANTARCTICA; break; case 'S': index = CONTINENT_ASIA; break; } } diff --git a/plugins/include/geoip.inc b/plugins/include/geoip.inc index 7739f0dc..19ea3746 100755 --- a/plugins/include/geoip.inc +++ b/plugins/include/geoip.inc @@ -197,8 +197,8 @@ native Float:geoip_distance(Float:lat1, Float:lon1, Float:lat2, Float:lon2, syst * Look up the continent code for a given IP address. * * @note The code can be retrieved as integer (See CONTINENT_* constants.) or string (2 characters). - * @note Possible continent codes are AF, AS, EU, NA, OC, SA for - * Africa(1), Asia(2), Europe(3), North America(4), Oceania(5) and South America(6). + * @note Possible continent codes are AF, AN, AS, EU, NA, OC, SA for + * Africa(1), Antarctica(2), Asia(3), Europe(4), North America(5), Oceania(6), South America(7). * * @param ip The IP address to look up. * @param result The result of the geoip look up. @@ -209,11 +209,12 @@ enum Continent { CONTINENT_UNKNOW = 0, CONTINENT_AFRICA, + CONTINENT_ANTARCTICA, CONTINENT_ASIA, CONTINENT_EUROPE, CONTINENT_NORTH_AMERICA, CONTINENT_OCEANIA, - CONTINENT_SOUTH_AMERICA + CONTINENT_SOUTH_AMERICA, }; native Continent:geoip_continent_code(const ip[], result[3]); From 9af7931a79501c192c48944dded818f8a728e00e Mon Sep 17 00:00:00 2001 From: Arkshine Date: Mon, 21 Jul 2014 21:12:35 +0200 Subject: [PATCH 55/71] Introduce TextParser API. --- amxmodx/AMBuilder | 2 + amxmodx/CTextParsers.cpp | 1113 +++++++++++++++++++++ amxmodx/CTextParsers.h | 90 ++ amxmodx/amxmodx.h | 1 + amxmodx/meta_api.cpp | 2 + amxmodx/modules.cpp | 3 +- amxmodx/msvc10/amxmodx_mm.vcxproj | 3 + amxmodx/msvc10/amxmodx_mm.vcxproj.filters | 20 +- amxmodx/textparse.cpp | 226 +++++ amxmodx/textparse.h | 191 ++++ plugins/include/textparse.inc | 223 +++++ plugins/testsuite/textparse_test.sma | 116 +++ public/ITextParsers.h | 450 +++++++++ 13 files changed, 2438 insertions(+), 2 deletions(-) create mode 100644 amxmodx/CTextParsers.cpp create mode 100644 amxmodx/CTextParsers.h create mode 100644 amxmodx/textparse.cpp create mode 100644 amxmodx/textparse.h create mode 100644 plugins/include/textparse.inc create mode 100644 plugins/testsuite/textparse_test.sma create mode 100644 public/ITextParsers.h diff --git a/amxmodx/AMBuilder b/amxmodx/AMBuilder index 16125cdc..1665ec89 100644 --- a/amxmodx/AMBuilder +++ b/amxmodx/AMBuilder @@ -94,6 +94,8 @@ binary.sources = [ 'CDataPack.cpp', 'datapacks.cpp', 'stackstructs.cpp', + 'CTextParsers.cpp', + 'textparse.cpp', ] if builder.target_platform == 'windows': diff --git a/amxmodx/CTextParsers.cpp b/amxmodx/CTextParsers.cpp new file mode 100644 index 00000000..4a3f63b1 --- /dev/null +++ b/amxmodx/CTextParsers.cpp @@ -0,0 +1,1113 @@ +/** +* vim: set ts=4 : +* ============================================================================= +* SourceMod +* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. +* ============================================================================= +* +* This program is free software; you can redistribute it and/or modify it under +* the terms of the GNU General Public License, version 3.0, as published by the +* Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +* details. +* +* You should have received a copy of the GNU General Public License along with +* this program. If not, see . +* +* As a special exception, AlliedModders LLC gives you permission to link the +* code of this program (as well as its derivative works) to "Half-Life 2," the +* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software +* by the Valve Corporation. You must obey the GNU General Public License in +* all respects for all other code used. Additionally, AlliedModders LLC grants +* this exception to all derivative works. AlliedModders LLC defines further +* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), +* or . +* +* Version: $Id$ +*/ + +#include "amxmodx.h" +#include "CTextParsers.h" +/* +#include +#include +#include +#include +#include +#include +#include */ + +TextParsers g_TextParser; +ITextParsers *textparsers = &g_TextParser; + +static int g_ini_chartable1[255] = { 0 }; +static int g_ws_chartable[255] = { 0 }; + +bool TextParsers::IsWhitespace(const char *stream) +{ + return g_ws_chartable[(unsigned char)*stream] == 1; +} + +TextParsers::TextParsers() +{ + g_ini_chartable1[(unsigned)'_'] = 1; + g_ini_chartable1[(unsigned)'-'] = 1; + g_ini_chartable1[(unsigned)','] = 1; + g_ini_chartable1[(unsigned)'+'] = 1; + g_ini_chartable1[(unsigned)'.'] = 1; + g_ini_chartable1[(unsigned)'$'] = 1; + g_ini_chartable1[(unsigned)'?'] = 1; + g_ini_chartable1[(unsigned)'/'] = 1; + g_ws_chartable[(unsigned)'\n'] = 1; + g_ws_chartable[(unsigned)'\v'] = 1; + g_ws_chartable[(unsigned)'\r'] = 1; + g_ws_chartable[(unsigned)'\t'] = 1; + g_ws_chartable[(unsigned)'\f'] = 1; + g_ws_chartable[(unsigned)' '] = 1; +} + +/* +void TextParsers::OnSourceModAllInitialized() +{ + sharesys->AddInterface(NULL, this); +}*/ + +unsigned int TextParsers::GetUTF8CharBytes(const char *stream) +{ + return _GetUTF8CharBytes(stream); +} + +/** +* File streams +*/ + +bool FileStreamReader(void *stream, char *buffer, size_t maxlength, unsigned int *read) +{ + size_t num = fread(buffer, 1, maxlength, (FILE *)stream); + + *read = static_cast(num); + + if (num == 0 && feof((FILE *)stream)) + { + return true; + } + + return (ferror((FILE *)stream) == 0); +} + +SMCError TextParsers::ParseFile_SMC(const char *file, ITextListener_SMC *smc, SMCStates *states) +{ + FILE *fp = fopen(file, "rt"); + + if (!fp) + { + if (states != NULL) + { + states->line = 0; + states->col = 0; + } + return SMCError_StreamOpen; + } + + SMCError result = ParseStream_SMC(fp, FileStreamReader, smc, states); + + fclose(fp); + + return result; +} + +SMCError TextParsers::ParseSMCFile(const char *file, + ITextListener_SMC *smc_listener, + SMCStates *states, + char *buffer, + size_t maxsize) +{ + const char *errstr; + FILE *fp = fopen(file, "rt"); + + if (fp == NULL) + { + char error[256] = "unknown"; + if (states != NULL) + { + states->line = 0; + states->col = 0; + } + /*libsys->GetPlatformError(error, sizeof(error));*/ + snprintf(buffer, maxsize, "File could not be opened: %s", error); + return SMCError_StreamOpen; + } + + SMCError result = ParseStream_SMC(fp, FileStreamReader, smc_listener, states); + + fclose(fp); + + errstr = GetSMCErrorString(result); + snprintf(buffer, maxsize, "%s", errstr != NULL ? errstr : "Unknown error"); + + return result; +} + +struct RawStream +{ + const char *stream; + size_t length; + size_t pos; +}; + +bool RawStreamReader(void *stream, char *buffer, size_t maxlength, unsigned int *read) +{ + RawStream *rs = (RawStream *)stream; + + if (rs->pos >= rs->length) + { + return false; + } + + size_t remaining = rs->length - rs->pos; + + /* Use the smaller of the two */ + size_t copy = (remaining > maxlength) ? maxlength : remaining; + + memcpy(buffer, &rs->stream[rs->pos], copy); + rs->pos += copy; + *read = copy; + assert(rs->pos <= rs->length); + + return true; +} + +SMCError TextParsers::ParseSMCStream(const char *stream, + size_t length, + ITextListener_SMC *smc_listener, + SMCStates *states, + char *buffer, + size_t maxsize) +{ + RawStream rs; + SMCError result; + + rs.stream = stream; + rs.length = length; + rs.pos = 0; + + result = ParseStream_SMC(&rs, RawStreamReader, smc_listener, states); + + const char *errstr = GetSMCErrorString(result); + snprintf(buffer, maxsize, "%s", errstr != NULL ? errstr : "Unknown error"); + + return result; +} + +/** +* Raw parsing of streams with helper functions +*/ + +struct StringInfo +{ + StringInfo() : quoted(false), ptr(NULL), end(NULL), special(false) { } + bool quoted; + char *ptr; + char *end; + bool special; +}; + +const char *FixupString(StringInfo &data) +{ + if (!data.ptr) + { + return NULL; + } + + if (data.quoted) + { + data.ptr++; + } +#if defined _DEBUG + else { + /* A string will never have beginning whitespace because we ignore it in the stream. + * Furthermore, if there is trailing whitespace, the end ptr will point to it, so it is valid + * to overwrite! Lastly, the last character must be whitespace or a comment/invalid character. + */ + } +#endif + + /* Do some extra work on strings that have special quoted characters. */ + if (data.special) + { + char *outptr = data.ptr; + size_t len = data.end - data.ptr; + if (len >= 2) + { + for (size_t i = 0; i= 0; i--) + { + if (info[i].ptr) + { + return info[i].ptr; + } + } + + return NULL; +} + +SMCError TextParsers::ParseStream_SMC(void *stream, + STREAMREADER srdr, + ITextListener_SMC *smc, + SMCStates *pStates) +{ + char *reparse_point = NULL; + char in_buf[4096]; + char *parse_point = in_buf; + char *line_begin = in_buf; + unsigned int read; + unsigned int curlevel = 0; + bool in_quote = false; + bool ignoring = false; + bool eol_comment = false; + bool ml_comment = false; + unsigned int i; + SMCError err = SMCError_Okay; + SMCResult res; + SMCStates states; + char c; + + StringInfo strings[3]; + StringInfo emptystring; + + states.line = 1; + states.col = 0; + + smc->ReadSMC_ParseStart(); + + /** + * The stream reader reads in as much as it can fill the buffer with. + * It then processes the buffer. If the buffer cannot be fully processed, for example, + * a line is left hanging with no newline, then the contents of the buffer is shifted + * down, and the buffer is filled from the stream reader again. + * + * What makes this particularly annoying is that we cache pointers everywhere, so when + * the shifting process takes place, all those pointers must be shifted as well. + */ + while (srdr(stream, parse_point, sizeof(in_buf)-(parse_point - in_buf) - 1, &read)) + { + if (!read) + { + break; + } + + /* Check for BOM markings, which is only relevant on the first line. + * Not worth it, but it could be moved out of the loop. + */ + if (states.line == 1 && + in_buf[0] == (char)0xEF && + in_buf[1] == (char)0xBB && + in_buf[2] == (char)0xBF) + { + /* Move EVERYTHING down :\ */ + memmove(in_buf, &in_buf[3], read - 3); + read -= 3; + } + + if (reparse_point) + { + read += (parse_point - reparse_point); + parse_point = reparse_point; + reparse_point = NULL; + } + + for (i = 0; iReadSMC_RawLine(&states, line_begin)) != SMCResult_Continue) + { + err = (res == SMCResult_HaltFail) ? SMCError_Custom : SMCError_Okay; + goto failed; + } + parse_point[i] = '\n'; + + /* Now we check the sanity of our staged strings! */ + if (strings[2].ptr) + { + if (!curlevel) + { + err = SMCError_InvalidProperty1; + goto failed; + } + /* Assume the next string is a property and pass the info on. */ + if ((res = smc->ReadSMC_KeyValue( + &states, + FixupString(strings[2]), + FixupString(strings[1]))) != SMCResult_Continue) + { + err = (res == SMCResult_HaltFail) ? SMCError_Custom : SMCError_Okay; + goto failed; + } + scrap(strings); + } + + /* Change the states for the next line */ + states.col = 0; + states.line++; + line_begin = &parse_point[i + 1]; //Note: safe because this gets relocated later + } + else if (ignoring) + { + if (in_quote) + { + /* If i was 0, we could have reparsed, so make sure there's no buffer underrun */ + if ((&parse_point[i] != in_buf) && c == '"' && parse_point[i - 1] != '\\') + { + /* If we reached a quote in an ignore phase, + * we're staging a string and we must rotate it out. + */ + in_quote = false; + ignoring = false; + /* Set our info */ + strings[0].end = &parse_point[i]; + strings[0].quoted = true; + if (rotate(strings) != NULL) + { + /* If we rotated too many strings, there was too much crap on one line */ + err = SMCError_InvalidTokens; + goto failed; + } + } + else if (c == '\\') + { + strings[0].special = true; + if (i == (read - 1)) + { + reparse_point = &parse_point[i]; + break; + } + } + } + else if (ml_comment) + { + if (c == '*') + { + /* Check if we need to get more input first */ + if (i == read - 1) + { + reparse_point = &parse_point[i]; + break; + } + if (parse_point[i + 1] == '/') + { + ml_comment = false; + ignoring = false; + /* We should not be staging anything right now. */ + assert(strings[0].ptr == NULL); + /* Advance the input stream so we don't choke on this token */ + i++; + states.col++; + } + } + } + } + else + { + /* Check if we're whitespace or not */ + if (!g_ws_chartable[(unsigned char)c]) + { + bool restage = false; + /* Check various special tokens: + * ; + * // + * / * + * { + * } + */ + if (c == ';' || c == '/') + { + /* If it's a line-based comment (that is, ; or //) + * we will need to scrap everything until the end of the line. + */ + if (c == '/') + { + if (i == read - 1) + { + /* If we reached the end of the look-ahead, we need to re-check our input. + * Breaking out will force this to be the new reparse point! + */ + reparse_point = &parse_point[i]; + break; + } + if (parse_point[i + 1] == '/') + { + /* standard comment */ + ignoring = true; + eol_comment = true; + restage = true; + } + else if (parse_point[i + 1] == '*') + { + /* inline comment - start ignoring */ + ignoring = true; + ml_comment = true; + /* yes, we restage, meaning that: + * STR/ *stuff* /ING (space because ml comments don't nest in C++) + * will not generate 'STRING', but rather 'STR' and 'ING'. + * This should be a rare occurrence and is done here for convenience. + */ + restage = true; + } + } + else + { + ignoring = true; + eol_comment = true; + restage = true; + } + } + else if (c == '{') + { + /* If we are staging a string, we must rotate here */ + if (strings[0].ptr) + { + /* We have unacceptable tokens on this line */ + if (rotate(strings) != NULL) + { + err = SMCError_InvalidSection1; + goto failed; + } + } + /* Sections must always be alone */ + if (strings[2].ptr != NULL) + { + err = SMCError_InvalidSection1; + goto failed; + } + else if (strings[1].ptr == NULL) + { + err = SMCError_InvalidSection2; + goto failed; + } + if ((res = smc->ReadSMC_NewSection(&states, FixupString(strings[1]))) + != SMCResult_Continue) + { + err = (res == SMCResult_HaltFail) ? SMCError_Custom : SMCError_Okay; + goto failed; + } + strings[1] = emptystring; + curlevel++; + } + else if (c == '}') + { + /* Unlike our matching friend, this can be on the same line as something prior */ + if (rotate(strings) != NULL) + { + err = SMCError_InvalidSection3; + goto failed; + } + if (strings[2].ptr) + { + if (!curlevel) + { + err = SMCError_InvalidProperty1; + goto failed; + } + if ((res = smc->ReadSMC_KeyValue( + &states, + FixupString(strings[2]), + FixupString(strings[1]))) + != SMCResult_Continue) + { + err = (res == SMCResult_HaltFail) ? SMCError_Custom : SMCError_Okay; + goto failed; + } + } + else if (strings[1].ptr) + { + err = SMCError_InvalidSection3; + goto failed; + } + else if (!curlevel) + { + err = SMCError_InvalidSection4; + goto failed; + } + /* Now it's safe to leave the section */ + scrap(strings); + if ((res = smc->ReadSMC_LeavingSection(&states)) != SMCResult_Continue) + { + err = (res == SMCResult_HaltFail) ? SMCError_Custom : SMCError_Okay; + goto failed; + } + curlevel--; + } + else if (c == '"') + { + /* If we get a quote mark, we always restage, but we need to do it beforehand */ + if (strings[0].ptr) + { + strings[0].end = &parse_point[i]; + if (rotate(strings) != NULL) + { + err = SMCError_InvalidTokens; + goto failed; + } + } + strings[0].ptr = &parse_point[i]; + in_quote = true; + ignoring = true; + } + else if (!strings[0].ptr) + { + /* If we have no string, we must start one */ + strings[0].ptr = &parse_point[i]; + } + if (restage && strings[0].ptr) + { + strings[0].end = &parse_point[i]; + if (rotate(strings) != NULL) + { + err = SMCError_InvalidTokens; + goto failed; + } + } + } + else + { + /* If we're eating a string and get whitespace, we need to restage. + * (Note that if we are quoted, this is being ignored) + */ + if (strings[0].ptr) + { + /* + * The specification says the second string in a pair does not need to be quoted. + * Thus, we check if there's already a string on the stack. + * If there's a newline, we always rotate so the newline has an empty starter. + */ + if (!strings[1].ptr) + { + /* There's no string, so we must move this one down and eat up another */ + strings[0].end = &parse_point[i]; + rotate(strings); + } + else if (!strings[1].quoted) + { + err = SMCError_InvalidTokens; + goto failed; + } + } + } + } + + /* Advance which token we're on */ + states.col++; + } + + if (line_begin != in_buf) + { + /* The line buffer has advanced, so it's safe to copy N bytes back to the beginning. + * What's N? N is the lowest point we're currently relying on. + */ + char *stage = lowstring(strings); + if (!stage || stage > line_begin) + { + stage = line_begin; + } + unsigned int bytes = read - (stage - parse_point); + + /* It is now safe to delete everything before the staged point */ + memmove(in_buf, stage, bytes); + + /* Calculate the number of bytes in the new buffer */ + bytes = stage - in_buf; + /* Relocate all the cached pointers to our new base */ + line_begin -= bytes; + reloc(strings[0], bytes); + reloc(strings[1], bytes); + reloc(strings[2], bytes); + if (reparse_point) + { + reparse_point -= bytes; + } + if (parse_point) + { + parse_point = &parse_point[read]; + parse_point -= bytes; + } + } + else if (read == sizeof(in_buf)-1) + { + err = SMCError_TokenOverflow; + goto failed; + } + } + + /* If we're done parsing and there are tokens left over... */ + if (curlevel) + { + err = SMCError_InvalidSection5; + goto failed; + } + else if (strings[0].ptr || strings[1].ptr) + { + err = SMCError_InvalidTokens; + goto failed; + } + + smc->ReadSMC_ParseEnd(false, false); + + if (pStates != NULL) + { + *pStates = states; + } + + return SMCError_Okay; + +failed: + if (pStates != NULL) + { + *pStates = states; + } + + smc->ReadSMC_ParseEnd(true, (err == SMCError_Custom)); + + return err; +} + + +/** +* INI parser +*/ + +bool TextParsers::ParseFile_INI(const char *file, ITextListener_INI *ini_listener, unsigned int *line, unsigned int *col) +{ + FILE *fp = fopen(file, "rt"); + unsigned int curline = 0; + unsigned int curtok; + size_t len; + + if (!fp) + { + if (line) + { + *line = 0; + } + + return false; + } + + char buffer[2048]; + char *ptr, *save_ptr; + bool in_quote; + + while (!feof(fp)) + { + curline++; + curtok = 0; + buffer[0] = '\0'; + if (fgets(buffer, sizeof(buffer), fp) == NULL) + { + break; + } + + //:TODO: this will only run once, so find a nice way to move it out of the while loop + /* If this is the first line, check the first three bytes for BOM */ + if (curline == 1 && + buffer[0] == (char)0xEF && + buffer[1] == (char)0xBB && + buffer[2] == (char)0xBF) + { + /* We have a UTF-8 marked file... skip these bytes */ + ptr = &buffer[3]; + } + else { + ptr = buffer; + } + + /*************************************************** + * We preprocess the string before parsing tokens! * + ***************************************************/ + + /* First strip beginning whitespace */ + while (*ptr != '\0' && g_ws_chartable[(unsigned char)*ptr] != 0) + { + ptr++; + } + + len = strlen(ptr); + + if (!len) + { + continue; + } + + /* Now search for comment characters */ + in_quote = false; + save_ptr = ptr; + for (size_t i = 0; iReadINI_RawLine(ptr, &curtok)) + { + goto event_failed; + } + + if (*ptr == '[') + { + bool invalid_tokens = false; + bool got_bracket = false; + bool extra_tokens = false; + char c; + bool alnum; + wchar_t wc; + + for (size_t i = 1; iReadINI_NewSection(&ptr[1], invalid_tokens, got_bracket, extra_tokens, &curtok)) + { + goto event_failed; + } + } + else { + char *key_ptr = ptr; + char *val_ptr = NULL; + char c; + size_t first_space = 0; + bool invalid_tokens = false; + bool equal_token = false; + bool quotes = false; + bool alnum; + wchar_t wc; + + for (size_t i = 0; iReadINI_KeyValue(key_ptr, val_ptr, invalid_tokens, equal_token, quotes, &curtok)) + { + curtok = 0; + goto event_failed; + } + } + } + + if (line) + { + *line = curline; + } + + fclose(fp); + + return true; + +event_failed: + if (line) + { + *line = curline; + } + + if (col) + { + *col = curtok; + } + + fclose(fp); + + return false; +} + +const char *TextParsers::GetSMCErrorString(SMCError err) +{ + static const char *s_errors[] = + { + NULL, + "Stream failed to open", + "Stream returned read error", + NULL, + "Un-quoted section has invalid tokens", + "Section declared without header", + "Section declared with unknown tokens", + "Section ending without a matching section beginning", + "Section beginning without a matching ending", + "Line contained too many invalid tokens", + "Token buffer overflowed", + "A property was declared outside of a section", + }; + + if (err < SMCError_Okay || err > SMCError_InvalidProperty1) + { + return NULL; + } + + return s_errors[err]; +} diff --git a/amxmodx/CTextParsers.h b/amxmodx/CTextParsers.h new file mode 100644 index 00000000..45ebe52c --- /dev/null +++ b/amxmodx/CTextParsers.h @@ -0,0 +1,90 @@ +/** +* vim: set ts=4 : +* ============================================================================= +* SourceMod +* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. +* ============================================================================= +* +* This program is free software; you can redistribute it and/or modify it under +* the terms of the GNU General Public License, version 3.0, as published by the +* Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +* details. +* +* You should have received a copy of the GNU General Public License along with +* this program. If not, see . +* +* As a special exception, AlliedModders LLC gives you permission to link the +* code of this program (as well as its derivative works) to "Half-Life 2," the +* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software +* by the Valve Corporation. You must obey the GNU General Public License in +* all respects for all other code used. Additionally, AlliedModders LLC grants +* this exception to all derivative works. AlliedModders LLC defines further +* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), +* or . +* +* Version: $Id$ +*/ + +#ifndef _INCLUDE_SOURCEMOD_TEXTPARSERS_H_ +#define _INCLUDE_SOURCEMOD_TEXTPARSERS_H_ + +#include +#include + +using namespace SourceMod; + +/** +* @param void * IN: Stream pointer +* @param char * IN/OUT: Stream buffer +* @param size_t IN: Maximum size of buffer +* @param unsigned int * OUT: Number of bytes read (0 = end of stream) +* @return True on success, false on failure +*/ +typedef bool(*STREAMREADER)(void *, char *, size_t, unsigned int *); + +class TextParsers : public ITextParsers +{ +public: + TextParsers(); +public: + bool ParseFile_INI(const char *file, + ITextListener_INI *ini_listener, + unsigned int *line, + unsigned int *col); + + SMCError ParseFile_SMC(const char *file, + ITextListener_SMC *smc_listener, + SMCStates *states); + + SMCError ParseSMCFile(const char *file, + ITextListener_SMC *smc_listener, + SMCStates *states, + char *buffer, + size_t maxsize); + + SMCError ParseSMCStream(const char *stream, + size_t length, + ITextListener_SMC *smc_listener, + SMCStates *states, + char *buffer, + size_t maxsize); + + unsigned int GetUTF8CharBytes(const char *stream); + + const char *GetSMCErrorString(SMCError err); + bool IsWhitespace(const char *stream); +private: + SMCError ParseStream_SMC(void *stream, + STREAMREADER srdr, + ITextListener_SMC *smc, + SMCStates *states); +}; + +extern TextParsers g_TextParser; + +#endif //_INCLUDE_SOURCEMOD_TEXTPARSERS_H_ + diff --git a/amxmodx/amxmodx.h b/amxmodx/amxmodx.h index c23ec57b..6b9973ca 100755 --- a/amxmodx/amxmodx.h +++ b/amxmodx/amxmodx.h @@ -64,6 +64,7 @@ extern AMX_NATIVE_INFO vector_Natives[]; extern AMX_NATIVE_INFO g_SortNatives[]; extern AMX_NATIVE_INFO g_DataStructNatives[]; extern AMX_NATIVE_INFO g_StackNatives[]; +extern AMX_NATIVE_INFO g_TextParserNatives[]; #if defined(_WIN32) #define DLLOAD(path) (DLHANDLE)LoadLibrary(path) diff --git a/amxmodx/meta_api.cpp b/amxmodx/meta_api.cpp index 75693f6d..c54ea4b3 100755 --- a/amxmodx/meta_api.cpp +++ b/amxmodx/meta_api.cpp @@ -30,6 +30,7 @@ #include #include "trie_natives.h" #include "CDataPack.h" +#include "textparse.h" plugin_info_t Plugin_info = { @@ -395,6 +396,7 @@ int C_Spawn(edict_t *pent) g_TrieHandles.clear(); g_TrieSnapshotHandles.clear(); g_DataPackHandles.clear(); + g_TextParsersHandles.clear(); char map_pluginsfile_path[256]; char prefixed_map_pluginsfile[256]; diff --git a/amxmodx/modules.cpp b/amxmodx/modules.cpp index 00639297..3929cb2e 100755 --- a/amxmodx/modules.cpp +++ b/amxmodx/modules.cpp @@ -552,7 +552,8 @@ int set_amxnatives(AMX* amx, char error[128]) amx_Register(amx, trie_Natives, -1); amx_Register(amx, g_DatapackNatives, -1); amx_Register(amx, g_StackNatives, -1); - + amx_Register(amx, g_TextParserNatives, -1); + //we're not actually gonna check these here anymore amx->flags |= AMX_FLAG_PRENIT; diff --git a/amxmodx/msvc10/amxmodx_mm.vcxproj b/amxmodx/msvc10/amxmodx_mm.vcxproj index 1da903e8..069d2c7a 100644 --- a/amxmodx/msvc10/amxmodx_mm.vcxproj +++ b/amxmodx/msvc10/amxmodx_mm.vcxproj @@ -306,6 +306,7 @@ + @@ -335,6 +336,7 @@ All + @@ -370,6 +372,7 @@ + diff --git a/amxmodx/msvc10/amxmodx_mm.vcxproj.filters b/amxmodx/msvc10/amxmodx_mm.vcxproj.filters index 06c8962c..67096bb7 100644 --- a/amxmodx/msvc10/amxmodx_mm.vcxproj.filters +++ b/amxmodx/msvc10/amxmodx_mm.vcxproj.filters @@ -173,9 +173,15 @@ Source Files - + Source Files + + + Source Files + + + Source Files @@ -317,6 +323,18 @@ Header Files +<<<<<<< HEAD +======= + + Header Files + + + Header Files + + + Header Files + +>>>>>>> Introduce TextParser API. diff --git a/amxmodx/textparse.cpp b/amxmodx/textparse.cpp new file mode 100644 index 00000000..0ed02579 --- /dev/null +++ b/amxmodx/textparse.cpp @@ -0,0 +1,226 @@ +/** +* vim: set ts=4 : +* ============================================================================= +* SourceMod +* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. +* ============================================================================= +* +* This program is free software; you can redistribute it and/or modify it under +* the terms of the GNU General Public License, version 3.0, as published by the +* Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +* details. +* +* You should have received a copy of the GNU General Public License along with +* this program. If not, see . +* +* As a special exception, AlliedModders LLC gives you permission to link the +* code of this program (as well as its derivative works) to "Half-Life 2," the +* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software +* by the Valve Corporation. You must obey the GNU General Public License in +* all respects for all other code used. Additionally, AlliedModders LLC grants +* this exception to all derivative works. AlliedModders LLC defines further +* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), +* or . +* +* Version: $Id$ +*/ + +#include "amxmodx.h" +#include +#include + +TextParserHandles g_TextParsersHandles; + +static cell AMX_NATIVE_CALL SMC_CreateParser(AMX *amx, cell *params) +{ + return static_cast(g_TextParsersHandles.create()); +} + +static cell AMX_NATIVE_CALL SMC_SetParseStart(AMX *amx, cell *params) +{ + ParseInfo *p = g_TextParsersHandles.lookup(params[1]); + + if (p == NULL) + { + LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + return 0; + } + + int length; + const char* functionName = get_amxstring(amx, params[2], 0, length); + int function = registerSPForwardByName(amx, functionName, FP_CELL, FP_DONE); + + if (function == -1) + { + LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", functionName, g_plugins.findPluginFast(amx)->getName()); + return 0; + } + + p->parse_start = function; + + return 1; +} + +static cell AMX_NATIVE_CALL SMC_SetParseEnd(AMX *amx, cell *params) +{ + ParseInfo *p = g_TextParsersHandles.lookup(params[1]); + + if (p == NULL) + { + LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + return 0; + } + + int length; + const char* funcName = get_amxstring(amx, params[2], 0, length); + int func = registerSPForwardByName(amx, funcName, FP_CELL, FP_DONE); + + if (func == -1) + { + LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", funcName, g_plugins.findPluginFast(amx)->getName()); + return 0; + } + + p->parse_end = func; + + return 1; +} + +static cell AMX_NATIVE_CALL SMC_SetReaders(AMX *amx, cell *params) +{ + ParseInfo *p = g_TextParsersHandles.lookup(params[1]); + + if (p == NULL) + { + LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + return 0; + } + + int length; + const char* NewSectionFuncName = get_amxstring(amx, params[2], 0, length); + const char* KeyValueFuncName = get_amxstring(amx, params[3], 1, length); + const char* EndSectionFuncName = get_amxstring(amx, params[4], 2, length); + + int NewSectionFunc = registerSPForwardByName(amx, NewSectionFuncName, FP_CELL, FP_STRING, FP_DONE); + if (NewSectionFunc == -1) + { + LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", NewSectionFuncName, g_plugins.findPluginFast(amx)->getName()); + return 0; + } + + int KeyValueFunc = registerSPForwardByName(amx, KeyValueFuncName, FP_CELL, FP_STRING, FP_STRING, FP_DONE); + if (KeyValueFunc == -1) + { + LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", KeyValueFuncName, g_plugins.findPluginFast(amx)->getName()); + return 0; + } + + int EndSectionFunc = registerSPForwardByName(amx, EndSectionFuncName, FP_CELL, FP_DONE); + if (EndSectionFunc == -1) + { + LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", EndSectionFuncName, g_plugins.findPluginFast(amx)->getName()); + return 0; + } + + p->new_section = NewSectionFunc; + p->key_value = KeyValueFunc; + p->end_section = EndSectionFunc; + + return 1; +} + +static cell AMX_NATIVE_CALL SMC_SetRawLine(AMX *amx, cell *params) +{ + ParseInfo *p = g_TextParsersHandles.lookup(params[1]); + + if (p == NULL) + { + LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + return 0; + } + + int length; + const char* funcName = get_amxstring(amx, params[2], 0, length); + + int func = registerSPForwardByName(amx, funcName, FP_CELL, FP_STRING, FP_CELL, FP_DONE); + if (func == -1) + { + LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", funcName, g_plugins.findPluginFast(amx)->getName()); + return 0; + } + + p->raw_line = func; + + return 1; +} + +static cell AMX_NATIVE_CALL SMC_ParseFile(AMX *amx, cell *params) +{ + ParseInfo *p = g_TextParsersHandles.lookup(params[1]); + + if (p == NULL) + { + LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + return 0; + } + + int length; + const char *file = build_pathname("%s", get_amxstring(amx, params[2], 0, length)); + + SMCStates states; + SMCError p_err = textparsers->ParseFile_SMC(file, p, &states); + + *get_amxaddr(amx, params[3]) = states.line; + *get_amxaddr(amx, params[4]) = states.col; + + return (cell)p_err; +} + +static cell AMX_NATIVE_CALL SMC_GetErrorString(AMX *amx, cell *params) +{ + const char *str = textparsers->GetSMCErrorString((SMCError)params[1]); + + if (!str) + { + return 0; + } + + return set_amxstring(amx, params[2], str, params[3]); +} + +static cell AMX_NATIVE_CALL SMC_DestroyParser(AMX *amx, cell *params) +{ + cell *ptr = get_amxaddr(amx, params[1]); + + ParseInfo *p = g_TextParsersHandles.lookup(*ptr); + + if (p == NULL) + { + return 0; + } + + if (g_TextParsersHandles.destroy(*ptr)) + { + *ptr = 0; + return 1; + } + + return 0; +} + +AMX_NATIVE_INFO g_TextParserNatives[] = +{ + { "SMC_CreateParser" , SMC_CreateParser }, + { "SMC_ParseFile" , SMC_ParseFile }, + { "SMC_GetErrorString", SMC_GetErrorString }, + { "SMC_SetParseStart" , SMC_SetParseStart }, + { "SMC_SetParseEnd" , SMC_SetParseEnd }, + { "SMC_SetReaders" , SMC_SetReaders }, + { "SMC_SetRawLine" , SMC_SetRawLine }, + { "SMC_DestroyParser" , SMC_DestroyParser }, + { NULL, NULL }, +}; diff --git a/amxmodx/textparse.h b/amxmodx/textparse.h new file mode 100644 index 00000000..cdb3ec02 --- /dev/null +++ b/amxmodx/textparse.h @@ -0,0 +1,191 @@ +/** +* vim: set ts=4 : +* ============================================================================= +* SourceMod +* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. +* ============================================================================= +* +* This program is free software; you can redistribute it and/or modify it under +* the terms of the GNU General Public License, version 3.0, as published by the +* Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +* details. +* +* You should have received a copy of the GNU General Public License along with +* this program. If not, see . +* +* As a special exception, AlliedModders LLC gives you permission to link the +* code of this program (as well as its derivative works) to "Half-Life 2," the +* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software +* by the Valve Corporation. You must obey the GNU General Public License in +* all respects for all other code used. Additionally, AlliedModders LLC grants +* this exception to all derivative works. AlliedModders LLC defines further +* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), +* or . +* +* Version: $Id$ +*/ + +#ifndef _INCLUDE_TEXTPARSE_H_ +#define _INCLUDE_TEXTPARSE_H_ + +#include "amxmodx.h" +#include "CTextParsers.h" + +class ParseInfo : public ITextListener_SMC +{ +public: + ParseInfo() + { + parse_start = -1; + parse_end = -1; + new_section = -1; + key_value = -1; + end_section = -1; + raw_line = -1; + handle = -1; + } + ~ParseInfo() {} +public: + void ReadSMC_ParseStart() + { + if (parse_start != -1) + { + executeForwards(parse_start, handle); + } + } + + void ReadSMC_ParseEnd(bool halted, bool failed) + { + if (parse_end != -1) + { + executeForwards(parse_end, handle, halted ? 1 : 0, failed ? 1 : 0); + } + } + + SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name) + { + if (new_section != -1) + { + return (SMCResult)executeForwards(new_section, handle, name); + } + + return SMCResult_Continue; + } + + SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value) + { + if (key_value != -1) + { + return (SMCResult)executeForwards(key_value, handle, key, value); + } + + return SMCResult_Continue; + } + + SMCResult ReadSMC_LeavingSection(const SMCStates *states) + { + if (end_section != -1) + { + return (SMCResult)executeForwards(end_section, handle, handle); + } + + return SMCResult_Continue; + } + + SMCResult ReadSMC_RawLine(const SMCStates *states, const char *line) + { + if (raw_line != -1) + { + return (SMCResult)executeForwards(raw_line, handle, line, states->line); + } + + return SMCResult_Continue; + } +public: + int parse_start; + int parse_end; + int new_section; + int key_value; + int end_section; + int raw_line; + int handle; +}; + +template +class TextParserHandles +{ +private: + ke::Vector m_textparsers; + +public: + TextParserHandles() { } + ~TextParserHandles() + { + this->clear(); + } + + void clear() + { + for (size_t i = 0; i < m_textparsers.length(); i++) + { + if (m_textparsers[i] != NULL) + { + delete m_textparsers[i]; + } + } + + m_textparsers.clear(); + } + T *lookup(int handle) + { + handle--; + + if (handle < 0 || handle >= static_cast(m_textparsers.length())) + { + return NULL; + } + + return m_textparsers[handle]; + } + int create() + { + for (size_t i = 0; i < m_textparsers.length(); i++) + { + if (m_textparsers[i] == NULL) + { + // reuse handle + m_textparsers[i] = new T; + + return static_cast(i)+1; + } + } + m_textparsers.append(new T); + return m_textparsers.length(); + } + bool destroy(int handle) + { + handle--; + + if (handle < 0 || handle >= static_cast(m_textparsers.length())) + { + return false; + } + + if (m_textparsers[handle] == NULL) + { + return false; + } + delete m_textparsers[handle]; + m_textparsers[handle] = NULL; + + return true; + } +}; + +extern TextParserHandles g_TextParsersHandles; + +#endif // _INCLUDE_TEXTPARSE_H_ \ No newline at end of file diff --git a/plugins/include/textparse.inc b/plugins/include/textparse.inc new file mode 100644 index 00000000..2ae996c5 --- /dev/null +++ b/plugins/include/textparse.inc @@ -0,0 +1,223 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This file is part of the SourceMod/SourcePawn SDK. + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or . + * + * Version: $Id$ + */ + +#if defined _textparse_included + #endinput +#endif +#define _textparse_included + + +/** + * Everything below describes the SMC Parse, or "SourceMod Configuration" format. + * This parser is entirely event based. You must hook events to receive data. + * The file format itself is nearly identical to Valve's KeyValues format. + */ + +/** + * Parse result directive. + */ +enum SMCResult +{ + SMCParse_Continue, /**< Continue parsing */ + SMCParse_Halt, /**< Stop parsing here */ + SMCParse_HaltFail /**< Stop parsing and return failure */ +}; + +/** + * Parse error codes. + */ +enum SMCError +{ + SMCError_Okay = 0, /**< No error */ + SMCError_StreamOpen, /**< Stream failed to open */ + SMCError_StreamError, /**< The stream died... somehow */ + SMCError_Custom, /**< A custom handler threw an error */ + SMCError_InvalidSection1, /**< A section was declared without quotes, and had extra tokens */ + SMCError_InvalidSection2, /**< A section was declared without any header */ + SMCError_InvalidSection3, /**< A section ending was declared with too many unknown tokens */ + SMCError_InvalidSection4, /**< A section ending has no matching beginning */ + SMCError_InvalidSection5, /**< A section beginning has no matching ending */ + SMCError_InvalidTokens, /**< There were too many unidentifiable strings on one line */ + SMCError_TokenOverflow, /**< The token buffer overflowed */ + SMCError_InvalidProperty1, /**< A property was declared outside of any section */ +}; + +enum TextParser +{ + Invalid_TextPaser = 0 +}; + +/** + * Creates a new SMC file format parser. + * This is used to set parse hooks. + * + * @return A new Handle to an SMC Parse structure. + */ +native TextParser:SMC_CreateParser(); + +/** + * Parses an SMC file. + * + * @param smc A Handle to an SMC Parse structure. + * @param file A string containing the file path. + * @param line An optional by reference cell to store the last line number read. + * @param col An optional by reference cell to store the last column number read. + + * @return An SMCParseError result. + * @error Invalid or corrupt Handle. + */ +native SMCError:SMC_ParseFile(TextParser:smc, const file[], &line = 0, &col = 0); + +/** + * Gets an error string for an SMCError code. + * + * @note SMCError_Okay returns false. + * @note SMCError_Custom (which is thrown on SMCParse_HaltFail) returns false. + * + * @param error The SMCParseError code. + * @param buffer A string buffer for the error (contents undefined on failure). + * @param buf_max The maximum size of the buffer. + * + * @return True on success, false otherwise. + */ +native bool:SMC_GetErrorString(SMCError:error, buffer[], buf_max); + +/** + * Sets the SMC_ParseStart function of a parse Handle. + * Below is the prototype of callback.: + * + * - ParseStart: + * Called when parsing is started. + * + * @param smc The SMC Parse Handle. + * @noreturn + * + * public SMC_ParseStart(TextParser:smc) + * + * @param smc Handle to an SMC Parse. + * @param func A ParseStart callback. + * + * @noreturn + * @error Invalid or corrupt Handle. + */ +native SMC_SetParseStart(TextParser:smc, const func[]); + +/** + * Sets the SMC_ParseEnd of a parse handle. + * Below is the prototype of callback.: + * + * - ParseEnd: + * Called when parsing is halted. + * + * @param smc The SMC Parse Handle. + * @param halted True if abnormally halted, false otherwise. + * @param failed True if parsing failed, false otherwise. + * @noreturn + * + * public SMC_ParseEnd(TextParser:smc, bool:halted, bool:failed) + * + * @param smc Handle to an SMC Parse. + * @param func A ParseEnd callback.. + * + * @noreturn + * @error Invalid or corrupt Handle. + */ +native SMC_SetParseEnd(TextParser:smc, const func[]); + +/** + * Sets the three main reader functions. + * Below are the different prototypes of callbacks: + * + * - NewSection: + * Called when the parser finds the end of the current section. + * @note Enclosing quotes are always stripped. + * + * @param smc The SMC Parse Handle. + * @param name String containing section name. + * @return An SMCResult action to take. + * + * public SMCResult:SMC_NewSection(TextParser:smc, const name[]) + * + * - KeyValue: + * Called when the parser finds a new key/value pair. + * @note Enclosing quotes are always stripped. + * + * @param smc The SMC Parse Handle. + * @param key String containing key name. + * @param value String containing value name. + * @return An SMCResult action to take. + * + * public SMCResult:SMC_KeyValue(TextParser:smc, const key[], const value[]) + * + * - EndSection: + * Called when the parser finds the end of the current section. + * + * @param smc The SMC Parse Handle. + * + * public SMCResult:SMC_EndSection(TextParser:smc) + * - + * @param smc An SMC parse Handle. + * @param ns A NewSection callback. + * @param kv A KeyValue callback. + * @param es An EndSection callback. + * + * @noreturn + */ +native SMC_SetReaders(TextParser:smc, const nsFunc[], const kvFunc[], const esFunc[]); + +/** + * Sets a raw line reader on an SMC parser Handle. + * Below is the prototype of callback.: + * + * - RawLine: + * Called whenever a raw line is read. + * + * @param smc The SMC Parse Handle. + * @param line A string containing the raw line from the file. + * @param lineno The line number it occurs on. + * @return An SMCResult action to take. + * + * public SMCResult:SMC_RawLine(TextParser:smc, const line[], lineno) + * + * @param smc Handle to an SMC Parse. + * @param func A RawLine callback.. + * @noreturn + */ +native SMC_SetRawLine(TextParser:smc, const func[]); + +/** + * Disposes of a text parser. + * + * @param smc Handle to an SMC Parse. + * @return True if disposed, false otherwise. + */ +native SMC_DestroyParser(&TextParser:smc); \ No newline at end of file diff --git a/plugins/testsuite/textparse_test.sma b/plugins/testsuite/textparse_test.sma new file mode 100644 index 00000000..d5ab402c --- /dev/null +++ b/plugins/testsuite/textparse_test.sma @@ -0,0 +1,116 @@ +#include +#include + +new SuccessCount; +new Trie:ExpectedKVData; + +public plugin_init() +{ + register_concmd("textparse_vdf", "ConsoleCommand_TextParseVDF"); + register_clcmd("textparse_ini", "ServerCommand_TextParseINI"); +} + +/** + * VDF Config format + */ + +public ConsoleCommand_TextParseVDF() +{ + server_print("Testing text parser with VDF config file format..."); + + new const configFile[] = "addons/amxmodx/scripting/testsuite/textparse_test.cfg"; + + ExpectedKVData = TrieCreate(); + TrieSetString(ExpectedKVData, "Logging", "on"); + TrieSetString(ExpectedKVData, "LogMode", "daily"); + TrieSetString(ExpectedKVData, "ServerLang", "en"); + TrieSetString(ExpectedKVData, "PublicChatTrigger", "!"); + TrieSetString(ExpectedKVData, "SilentChatTrigger", "/"); + TrieSetString(ExpectedKVData, "SilentFailSuppress", "no"); + TrieSetString(ExpectedKVData, "PassInfoVar", "_password"); + TrieSetString(ExpectedKVData, "MenuItemSound", "buttons/button14.wav"); + TrieSetString(ExpectedKVData, "MenuExitSound", "buttons/combine_button7.wav"); + TrieSetString(ExpectedKVData, "MenuExitBackSound", "buttons/combine_button7.wav"); + TrieSetString(ExpectedKVData, "AllowClLanguageVar", "On"); + TrieSetString(ExpectedKVData, "DisableAutoUpdate", "no"); + TrieSetString(ExpectedKVData, "ForceRestartAfterUpdate", "no"); + TrieSetString(ExpectedKVData, "AutoUpdateURL", "http://update.sourcemod.net/update/"); + TrieSetString(ExpectedKVData, "DebugSpew", "no"); + TrieSetString(ExpectedKVData, "SteamAuthstringValidation", "yes"); + TrieSetString(ExpectedKVData, "BlockBadPlugins", "yes"); + TrieSetString(ExpectedKVData, "SlowScriptTimeout", "8"); + + new const expectedSectionCount = 2; // Include start and end. + new const expectedStartEndCount = 2; + new const expectedKeyValueCount = TrieGetSize(ExpectedKVData); + new const expectedLineCount = file_size(configFile, .flag = 1) - 1; + + new TextParser:parser = SMC_CreateParser(); + + SMC_SetReaders(parser, "ReadCore_NewSection", "ReadCore_KeyValue", "ReadCore_EndSection"); + SMC_SetParseStart(parser, "ReadCore_ParseStart"); + SMC_SetRawLine(parser, "ReadCore_CurrentLine"); + SMC_SetParseEnd(parser, "ReadCore_ParseEnd"); + + new line, col; + new SMCError:err = SMC_ParseFile_VDF(parser, configFile, line, col); + + if (err != SMCError_Okay) + { + new buffer[64]; + server_print("%s", SMC_GetErrorString(err, buffer, charsmax(buffer)) ? buffer : "Fatal parse error"); + } + + if (line == expectedLineCount + 1 && col == 2) + { + ++SuccessCount; + } + + SMC_DestroyParser(parser); + + server_print("^tTests successful: %d/%d", SuccessCount, expectedStartEndCount + expectedSectionCount + expectedKeyValueCount + expectedLineCount + 1); +} + +public ReadCore_ParseStart(TextParser:smc) +{ + ++SuccessCount; +} + +public ReadCore_NewSection(TextParser:smc, const name[]) +{ + ++SuccessCount; +} + +public ReadCore_KeyValue(TextParser:smc, const key[], const value[]) +{ + new buffer[128]; + if (TrieGetString(ExpectedKVData, key, buffer, charsmax(buffer)) && equal(value, buffer)) + { + ++SuccessCount; + } +} + +public ReadCore_EndSection(TextParser:smc) +{ + ++SuccessCount; +} + +public ReadCore_CurrentLine(TextParser:smc, const line[], lineno) +{ + ++SuccessCount; +} + +public ReadCore_ParseEnd(TextParser:smc) +{ + ++SuccessCount; +} + + + +/** + * INI Config format + */ +public ServerCommand_TextParseINI() +{ + +} diff --git a/public/ITextParsers.h b/public/ITextParsers.h new file mode 100644 index 00000000..9dff6692 --- /dev/null +++ b/public/ITextParsers.h @@ -0,0 +1,450 @@ +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. + * ============================================================================= + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or . + * + * Version: $Id$ + */ + +#ifndef _INCLUDE_SOURCEMOD_TEXTPARSERS_INTERFACE_H_ +#define _INCLUDE_SOURCEMOD_TEXTPARSERS_INTERFACE_H_ + +/** + * @file ITextParsers.h + * @brief Defines various text/file parsing functions, as well as UTF-8 support code. + */ +namespace SourceMod +{ + + #define SMINTERFACE_TEXTPARSERS_NAME "ITextParsers" + #define SMINTERFACE_TEXTPARSERS_VERSION 4 + + /** + * The INI file format is defined as: + * WHITESPACE: 0x20, \n, \t, \r + * IDENTIFIER: A-Z a-z 0-9 _ - , + . $ ? / + * STRING: Any set of symbols + * + * Basic syntax is comprised of SECTIONs. + * A SECTION is defined as: + * [SECTIONNAME] + * OPTION + * OPTION + * OPTION... + * + * SECTIONNAME is an IDENTIFIER. + * OPTION can be repeated any number of times, once per line. + * OPTION is defined as one of: + * KEY = "VALUE" + * KEY = VALUE + * KEY + * Where KEY is an IDENTIFIER and VALUE is a STRING. + * + * WHITESPACE should always be omitted. + * COMMENTS should be stripped, and are defined as text occurring in: + * ; + * + * Example file below. Note that + * The second line is technically invalid. The event handler + * must decide whether this should be allowed. + * --FILE BELOW-- + * [gaben] + * hi = clams + * bye = "NO CLAMS" + * + * [valve] + * cannot + * maintain + * products + */ + + /** + * @brief Contains parse events for INI files. + */ + class ITextListener_INI + { + public: + /** + * @brief Returns version number. + */ + virtual unsigned int GetTextParserVersion1() + { + return SMINTERFACE_TEXTPARSERS_VERSION; + } + public: + /** + * @brief Called when a new section is encountered in an INI file. + * + * @param section Name of section in between the [ and ] characters. + * @param invalid_tokens True if invalid tokens were detected in the name. + * @param close_bracket True if a closing bracket was detected, false otherwise. + * @param extra_tokens True if extra tokens were detected on the line. + * @param curtok Contains current token in the line where the section name starts. + * You can add to this offset when failing to point to a token. + * @return True to keep parsing, false otherwise. + */ + virtual bool ReadINI_NewSection(const char *section, + bool invalid_tokens, + bool close_bracket, + bool extra_tokens, + unsigned int *curtok) + { + return true; + } + + /** + * @brief Called when encountering a key/value pair in an INI file. + * + * @param key Name of key. + * @param value String containing value (with quotes stripped, if any). + * @param invalid_tokens Whether or not the key contained invalid tokens. + * @param equal_token There was an '=' sign present (in case the value is missing). + * @param quotes Whether value was enclosed in quotes. + * @param curtok Contains the token index of the start of the value string. + * This can be changed when returning false. + * @return True to keep parsing, false otherwise. + */ + virtual bool ReadINI_KeyValue(const char *key, + const char *value, + bool invalid_tokens, + bool equal_token, + bool quotes, + unsigned int *curtok) + { + return true; + } + + /** + * @brief Called after a line has been preprocessed, if it has text. + * + * @param line Contents of line. + * @param curtok Pointer to optionally store failed position in string. + * @return True to keep parsing, false otherwise. + */ + virtual bool ReadINI_RawLine(const char *line, unsigned int *curtok) + { + return true; + } + }; + + /** + * :TODO: write this in CFG (context free grammar) format so it makes sense + * + * The SMC file format is defined as: + * WHITESPACE: 0x20, \n, \t, \r + * IDENTIFIER: Any ASCII character EXCLUDING ", {, }, ;, //, / *, or WHITESPACE. + * STRING: Any set of symbols enclosed in quotes. + * Note: if a STRING does not have quotes, it is parsed as an IDENTIFIER. + * + * Basic syntax is comprised of SECTIONBLOCKs. + * A SECTIONBLOCK defined as: + * + * SECTIONNAME + * { + * OPTION + * } + * + * OPTION can be repeated any number of times inside a SECTIONBLOCK. + * A new line will terminate an OPTION, but there can be more than one OPTION per line. + * OPTION is defined any of: + * "KEY" "VALUE" + * SECTIONBLOCK + * + * SECTIONNAME, KEY, VALUE, and SINGLEKEY are strings + * SECTIONNAME cannot have trailing characters if quoted, but the quotes can be optionally removed. + * If SECTIONNAME is not enclosed in quotes, the entire sectionname string is used (minus surrounding whitespace). + * If KEY is not enclosed in quotes, the key is terminated at first whitespace. + * If VALUE is not properly enclosed in quotes, the entire value string is used (minus surrounding whitespace). + * The VALUE may have inner quotes, but the key string may not. + * + * For an example, see configs/permissions.cfg + * + * WHITESPACE should be ignored. + * Comments are text occurring inside the following tokens, and should be stripped + * unless they are inside literal strings: + * ; + * // + * / * */ + + /** + * @brief Lists actions to take when an SMC parse hook is done. + */ + enum SMCResult + { + SMCResult_Continue, /**< Continue parsing */ + SMCResult_Halt, /**< Stop parsing here */ + SMCResult_HaltFail /**< Stop parsing and return SMCError_Custom */ + }; + + /** + * @brief Lists error codes possible from parsing an SMC file. + */ + enum SMCError + { + SMCError_Okay = 0, /**< No error */ + SMCError_StreamOpen, /**< Stream failed to open */ + SMCError_StreamError, /**< The stream died... somehow */ + SMCError_Custom, /**< A custom handler threw an error */ + SMCError_InvalidSection1, /**< A section was declared without quotes, and had extra tokens */ + SMCError_InvalidSection2, /**< A section was declared without any header */ + SMCError_InvalidSection3, /**< A section ending was declared with too many unknown tokens */ + SMCError_InvalidSection4, /**< A section ending has no matching beginning */ + SMCError_InvalidSection5, /**< A section beginning has no matching ending */ + SMCError_InvalidTokens, /**< There were too many unidentifiable strings on one line */ + SMCError_TokenOverflow, /**< The token buffer overflowed */ + SMCError_InvalidProperty1, /**< A property was declared outside of any section */ + }; + + /** + * @brief States for line/column + */ + struct SMCStates + { + unsigned int line; /**< Current line */ + unsigned int col; /**< Current col */ + }; + + /** + * @brief Describes the events available for reading an SMC stream. + */ + class ITextListener_SMC + { + public: + /** + * @brief Returns version number. + */ + virtual unsigned int GetTextParserVersion2() + { + return SMINTERFACE_TEXTPARSERS_VERSION; + } + public: + /** + * @brief Called when starting parsing. + */ + virtual void ReadSMC_ParseStart() + { + }; + + /** + * @brief Called when ending parsing. + * + * @param halted True if abnormally halted, false otherwise. + * @param failed True if parsing failed, false otherwise. + */ + virtual void ReadSMC_ParseEnd(bool halted, bool failed) + { + } + + /** + * @brief Called when entering a new section + * + * @param states Parsing states. + * @param name Name of section, with the colon omitted. + * @return SMCResult directive. + */ + virtual SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name) + { + return SMCResult_Continue; + } + + /** + * @brief Called when encountering a key/value pair in a section. + * + * @param states Parsing states. + * @param key Key string. + * @param value Value string. If no quotes were specified, this will be NULL, + * and key will contain the entire string. + * @return SMCResult directive. + */ + virtual SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value) + { + return SMCResult_Continue; + } + + /** + * @brief Called when leaving the current section. + * + * @param states Parsing states. + * @return SMCResult directive. + */ + virtual SMCResult ReadSMC_LeavingSection(const SMCStates *states) + { + return SMCResult_Continue; + } + + /** + * @brief Called after an input line has been preprocessed. + * + * @param states Parsing states. + * @param line Contents of the line, null terminated at the position + * of the newline character (thus, no newline will exist). + * @return SMCResult directive. + */ + virtual SMCResult ReadSMC_RawLine(const SMCStates *states, const char *line) + { + return SMCResult_Continue; + } + }; + + /** + * @brief Contains various text stream parsing functions. + */ + class ITextParsers /*: public SMInterface*/ + { + public: + virtual const char *GetInterfaceName() + { + return SMINTERFACE_TEXTPARSERS_NAME; + } + virtual unsigned int GetInterfaceVersion() + { + return SMINTERFACE_TEXTPARSERS_VERSION; + } + virtual bool IsVersionCompatible(unsigned int version) + { + if (version < 2) + { + return false; + } + + return true; + /*return SMInterface::IsVersionCompatible(version);*/ + } + public: + /** + * @brief Parses an INI-format file. + * + * @param file Path to file. + * @param ini_listener Event handler for reading file. + * @param line If non-NULL, will contain last line parsed (0 if file could not be opened). + * @param col If non-NULL, will contain last column parsed (undefined if file could not be opened). + * @return True if parsing succeeded, false if file couldn't be opened or there was a syntax error. + */ + virtual bool ParseFile_INI(const char *file, + ITextListener_INI *ini_listener, + unsigned int *line, + unsigned int *col) =0; + + /** + * @brief Parses an SMC-format text file. + * Note that the parser makes every effort to obey broken syntax. + * For example, if an open brace is missing, but the section name has a colon, + * it will let you know. It is up to the event handlers to decide whether to be strict or not. + * + * @param file Path to file. + * @param smc_listener Event handler for reading file. + * @param states Optional pointer to store last known states. + * @return An SMCError result code. + */ + virtual SMCError ParseFile_SMC(const char *file, + ITextListener_SMC *smc_listener, + SMCStates *states) =0; + + /** + * @brief Converts an SMCError to a string. + * + * @param err SMCError. + * @return String error message, or NULL if none. + */ + virtual const char *GetSMCErrorString(SMCError err) =0; + + public: + /** + * @brief Returns the number of bytes that a multi-byte character contains in a UTF-8 stream. + * If the current character is not multi-byte, the function returns 1. + * + * @param stream Pointer to multi-byte ANSI character string. + * @return Number of bytes in current character. + */ + virtual unsigned int GetUTF8CharBytes(const char *stream) =0; + + /** + * @brief Returns whether the first multi-byte character in the given stream + * is a whitespace character. + * + * @param stream Pointer to multi-byte character string. + * @return True if first character is whitespace, false otherwise. + */ + virtual bool IsWhitespace(const char *stream) =0; + + /** + * @brief Same as ParseFile_SMC, but with an extended error buffer. + * + * @param file Path to file. + * @param smc_listener Event handler for reading file. + * @param states Optional pointer to store last known states. + * @param buffer Error message buffer. + * @param maxsize Maximum size of the error buffer. + * @return Error code. + */ + virtual SMCError ParseSMCFile(const char *file, + ITextListener_SMC *smc_listener, + SMCStates *states, + char *buffer, + size_t maxsize) =0; + + /** + * @brief Parses a raw UTF8 stream as an SMC file. + * + * @param stream Memory containing data. + * @param length Number of bytes in the stream. + * @param smc_listener Event handler for reading file. + * @param states Optional pointer to store last known states. + * @param buffer Error message buffer. + * @param maxsize Maximum size of the error buffer. + * @return Error code. + */ + virtual SMCError ParseSMCStream(const char *stream, + size_t length, + ITextListener_SMC *smc_listener, + SMCStates *states, + char *buffer, + size_t maxsize) =0; + }; + + inline unsigned int _GetUTF8CharBytes(const char *stream) + { + unsigned char c = *(unsigned char *)stream; + if (c & (1<<7)) + { + if (c & (1<<5)) + { + if (c & (1<<4)) + { + return 4; + } + return 3; + } + return 2; + } + return 1; + } +} + +extern SourceMod::ITextParsers *textparsers; + +#endif //_INCLUDE_SOURCEMOD_TEXTPARSERS_INTERFACE_H_ + From 0cf5a2e12f2d0620c4a512c7591d0b415cf79eb9 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Wed, 23 Jul 2014 11:56:35 +0200 Subject: [PATCH 56/71] Expose ParseFile_INI to API. Some minor changes have been made in parser: - Added ReadINI_ParseStart and ReadINI_ParseEnd call. - Function returns SMCResult instead of bool. To avoid unecessary complexity and duplicating natives, this feels more appropriate to let these functions to share some SMCResult and SMCParse constants. Since properly documented, this should be ok. - Made sure curtok is set to 0 when ptr_val is null, otherwise unexpected value would be passed into the forward. --- amxmodx/CTextParsers.cpp | 36 +- amxmodx/CTextParsers.h | 2 +- amxmodx/msvc10/amxmodx_mm.vcxproj | 1 + amxmodx/msvc10/amxmodx_mm.vcxproj.filters | 14 +- amxmodx/textparse.cpp | 87 +++-- amxmodx/textparse.h | 57 ++- plugins/include/textparse.inc | 411 +++++++++++++--------- plugins/testsuite/textparse_test.cfg | 135 +++++++ plugins/testsuite/textparse_test.ini | 68 ++++ plugins/testsuite/textparse_test.sma | 140 +++++++- public/ITextParsers.h | 107 +++--- support/PackageScript | 3 + 12 files changed, 776 insertions(+), 285 deletions(-) create mode 100644 plugins/testsuite/textparse_test.cfg create mode 100644 plugins/testsuite/textparse_test.ini diff --git a/amxmodx/CTextParsers.cpp b/amxmodx/CTextParsers.cpp index 4a3f63b1..5ebcfaed 100644 --- a/amxmodx/CTextParsers.cpp +++ b/amxmodx/CTextParsers.cpp @@ -778,7 +778,7 @@ failed: * INI parser */ -bool TextParsers::ParseFile_INI(const char *file, ITextListener_INI *ini_listener, unsigned int *line, unsigned int *col) +SMCError TextParsers::ParseFile_INI(const char *file, ITextListener_INI *ini_listener, unsigned int *line, unsigned int *col) { FILE *fp = fopen(file, "rt"); unsigned int curline = 0; @@ -792,12 +792,16 @@ bool TextParsers::ParseFile_INI(const char *file, ITextListener_INI *ini_listene *line = 0; } - return false; + return SMCError_StreamOpen; } + ini_listener->ReadINI_ParseStart(); + char buffer[2048]; char *ptr, *save_ptr; bool in_quote; + SMCError err = SMCError_Okay; + SMCResult res = SMCResult_Continue; while (!feof(fp)) { @@ -897,8 +901,9 @@ bool TextParsers::ParseFile_INI(const char *file, ITextListener_INI *ini_listene continue; } - if (!ini_listener->ReadINI_RawLine(ptr, &curtok)) + if ((res = ini_listener->ReadINI_RawLine(ptr, curline, &curtok)) != SMCResult_Continue) { + err = (res == SMCResult_HaltFail) ? SMCError_Custom : SMCError_Okay; goto event_failed; } @@ -951,8 +956,9 @@ bool TextParsers::ParseFile_INI(const char *file, ITextListener_INI *ini_listene } /* Tell the handler */ - if (!ini_listener->ReadINI_NewSection(&ptr[1], invalid_tokens, got_bracket, extra_tokens, &curtok)) + if ((res = ini_listener->ReadINI_NewSection(&ptr[1], invalid_tokens, got_bracket, extra_tokens, &curtok)) != SMCResult_Continue) { + err = (res == SMCResult_HaltFail) ? SMCError_Custom : SMCError_Okay; goto event_failed; } } @@ -1052,9 +1058,14 @@ bool TextParsers::ParseFile_INI(const char *file, ITextListener_INI *ini_listene } skip_value: /* We're done! */ - curtok = val_ptr - buffer; - if (!ini_listener->ReadINI_KeyValue(key_ptr, val_ptr, invalid_tokens, equal_token, quotes, &curtok)) + if (val_ptr) + curtok = val_ptr - buffer; + else + curtok = 0; + + if ((res = ini_listener->ReadINI_KeyValue(key_ptr, val_ptr, invalid_tokens, equal_token, quotes, &curtok)) != SMCResult_Continue) { + err = (res == SMCResult_HaltFail) ? SMCError_Custom : SMCError_Okay; curtok = 0; goto event_failed; } @@ -1066,9 +1077,16 @@ bool TextParsers::ParseFile_INI(const char *file, ITextListener_INI *ini_listene *line = curline; } + if (col) + { + *col = curtok; + } + fclose(fp); - return true; + ini_listener->ReadINI_ParseEnd(false, false); + + return SMCError_Okay; event_failed: if (line) @@ -1083,7 +1101,9 @@ event_failed: fclose(fp); - return false; + ini_listener->ReadINI_ParseEnd(true, (err == SMCError_Custom)); + + return err; } const char *TextParsers::GetSMCErrorString(SMCError err) diff --git a/amxmodx/CTextParsers.h b/amxmodx/CTextParsers.h index 45ebe52c..7aaafb63 100644 --- a/amxmodx/CTextParsers.h +++ b/amxmodx/CTextParsers.h @@ -51,7 +51,7 @@ class TextParsers : public ITextParsers public: TextParsers(); public: - bool ParseFile_INI(const char *file, + SMCError ParseFile_INI(const char *file, ITextListener_INI *ini_listener, unsigned int *line, unsigned int *col); diff --git a/amxmodx/msvc10/amxmodx_mm.vcxproj b/amxmodx/msvc10/amxmodx_mm.vcxproj index 069d2c7a..1d8eec87 100644 --- a/amxmodx/msvc10/amxmodx_mm.vcxproj +++ b/amxmodx/msvc10/amxmodx_mm.vcxproj @@ -392,6 +392,7 @@ + diff --git a/amxmodx/msvc10/amxmodx_mm.vcxproj.filters b/amxmodx/msvc10/amxmodx_mm.vcxproj.filters index 67096bb7..bff2487d 100644 --- a/amxmodx/msvc10/amxmodx_mm.vcxproj.filters +++ b/amxmodx/msvc10/amxmodx_mm.vcxproj.filters @@ -323,18 +323,12 @@ Header Files -<<<<<<< HEAD -======= - - Header Files - - - Header Files - Header Files - ->>>>>>> Introduce TextParser API. + + + Header Files + diff --git a/amxmodx/textparse.cpp b/amxmodx/textparse.cpp index 0ed02579..b34bdc61 100644 --- a/amxmodx/textparse.cpp +++ b/amxmodx/textparse.cpp @@ -37,7 +37,12 @@ TextParserHandles g_TextParsersHandles; static cell AMX_NATIVE_CALL SMC_CreateParser(AMX *amx, cell *params) { - return static_cast(g_TextParsersHandles.create()); + int handle = g_TextParsersHandles.create(); + ParseInfo *p = g_TextParsersHandles.lookup(handle); + + p->ini_format = params[1] > 0 ? true : false; + + return static_cast(handle); } static cell AMX_NATIVE_CALL SMC_SetParseStart(AMX *amx, cell *params) @@ -77,7 +82,7 @@ static cell AMX_NATIVE_CALL SMC_SetParseEnd(AMX *amx, cell *params) int length; const char* funcName = get_amxstring(amx, params[2], 0, length); - int func = registerSPForwardByName(amx, funcName, FP_CELL, FP_DONE); + int func = registerSPForwardByName(amx, funcName, FP_CELL, FP_CELL, FP_CELL, FP_DONE); if (func == -1) { @@ -101,34 +106,50 @@ static cell AMX_NATIVE_CALL SMC_SetReaders(AMX *amx, cell *params) } int length; - const char* NewSectionFuncName = get_amxstring(amx, params[2], 0, length); - const char* KeyValueFuncName = get_amxstring(amx, params[3], 1, length); - const char* EndSectionFuncName = get_amxstring(amx, params[4], 2, length); + const char* newSectionFuncName = get_amxstring(amx, params[2], 0, length); + const char* keyValueFuncName = get_amxstring(amx, params[3], 1, length); + const char* endSectionFuncName = get_amxstring(amx, params[4], 2, length); - int NewSectionFunc = registerSPForwardByName(amx, NewSectionFuncName, FP_CELL, FP_STRING, FP_DONE); - if (NewSectionFunc == -1) + int newSectionFunc; + int keyValueFunc; + int endSectionFunc; + + if (p->ini_format) + newSectionFunc = registerSPForwardByName(amx, newSectionFuncName, FP_CELL, FP_STRING, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE); + else + newSectionFunc = registerSPForwardByName(amx, newSectionFuncName, FP_CELL, FP_STRING, FP_DONE); + + if (newSectionFunc == -1) { - LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", NewSectionFuncName, g_plugins.findPluginFast(amx)->getName()); + LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", newSectionFuncName, g_plugins.findPluginFast(amx)->getName()); return 0; } - int KeyValueFunc = registerSPForwardByName(amx, KeyValueFuncName, FP_CELL, FP_STRING, FP_STRING, FP_DONE); - if (KeyValueFunc == -1) + if (p->ini_format) + keyValueFunc = registerSPForwardByName(amx, keyValueFuncName, FP_CELL, FP_STRING, FP_STRING, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE); + else + keyValueFunc = registerSPForwardByName(amx, keyValueFuncName, FP_CELL, FP_STRING, FP_STRING, FP_DONE); + + if (keyValueFunc == -1) { - LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", KeyValueFuncName, g_plugins.findPluginFast(amx)->getName()); + LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", keyValueFuncName, g_plugins.findPluginFast(amx)->getName()); return 0; } - int EndSectionFunc = registerSPForwardByName(amx, EndSectionFuncName, FP_CELL, FP_DONE); - if (EndSectionFunc == -1) + if (!p->ini_format) { - LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", EndSectionFuncName, g_plugins.findPluginFast(amx)->getName()); - return 0; + endSectionFunc = registerSPForwardByName(amx, endSectionFuncName, FP_CELL, FP_DONE); + if (endSectionFunc == -1) + { + LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", endSectionFuncName, g_plugins.findPluginFast(amx)->getName()); + return 0; + } + + p->end_section = endSectionFunc; } - p->new_section = NewSectionFunc; - p->key_value = KeyValueFunc; - p->end_section = EndSectionFunc; + p->new_section = newSectionFunc; + p->key_value = keyValueFunc; return 1; } @@ -146,7 +167,12 @@ static cell AMX_NATIVE_CALL SMC_SetRawLine(AMX *amx, cell *params) int length; const char* funcName = get_amxstring(amx, params[2], 0, length); - int func = registerSPForwardByName(amx, funcName, FP_CELL, FP_STRING, FP_CELL, FP_DONE); + int func; + if (p->ini_format) + func = registerSPForwardByName(amx, funcName, FP_CELL, FP_STRING, FP_CELL, FP_CELL, FP_DONE); + else + func = registerSPForwardByName(amx, funcName, FP_CELL, FP_STRING, FP_CELL, FP_DONE); + if (func == -1) { LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", funcName, g_plugins.findPluginFast(amx)->getName()); @@ -171,13 +197,26 @@ static cell AMX_NATIVE_CALL SMC_ParseFile(AMX *amx, cell *params) int length; const char *file = build_pathname("%s", get_amxstring(amx, params[2], 0, length)); - SMCStates states; - SMCError p_err = textparsers->ParseFile_SMC(file, p, &states); + SMCError p_err; - *get_amxaddr(amx, params[3]) = states.line; - *get_amxaddr(amx, params[4]) = states.col; + if (p->ini_format) + { + size_t line, col; + p_err = textparsers->ParseFile_INI(file, p, &line, &col); - return (cell)p_err; + *get_amxaddr(amx, params[3]) = line; + *get_amxaddr(amx, params[4]) = col; + } + else + { + SMCStates states; + p_err = textparsers->ParseFile_SMC(file, p, &states); + + *get_amxaddr(amx, params[3]) = states.line; + *get_amxaddr(amx, params[4]) = states.col; + } + + return static_cast(p_err); } static cell AMX_NATIVE_CALL SMC_GetErrorString(AMX *amx, cell *params) diff --git a/amxmodx/textparse.h b/amxmodx/textparse.h index cdb3ec02..10b55dd3 100644 --- a/amxmodx/textparse.h +++ b/amxmodx/textparse.h @@ -35,7 +35,9 @@ #include "amxmodx.h" #include "CTextParsers.h" -class ParseInfo : public ITextListener_SMC +class ParseInfo : + public ITextListener_SMC, + public ITextListener_INI { public: ParseInfo() @@ -47,31 +49,43 @@ public: end_section = -1; raw_line = -1; handle = -1; + ini_format = false; } - ~ParseInfo() {} + public: void ReadSMC_ParseStart() { - if (parse_start != -1) - { + if (parse_start != -1) + executeForwards(parse_start, handle); + } + void ReadINI_ParseStart() + { + if (parse_start != -1) executeForwards(parse_start, handle); - } } void ReadSMC_ParseEnd(bool halted, bool failed) { - if (parse_end != -1) - { + if (parse_end != -1) + executeForwards(parse_end, handle, halted ? 1 : 0, failed ? 1 : 0); + } + void ReadINI_ParseEnd(bool halted, bool failed) + { + if (parse_end != -1) executeForwards(parse_end, handle, halted ? 1 : 0, failed ? 1 : 0); - } } SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name) { if (new_section != -1) - { return (SMCResult)executeForwards(new_section, handle, name); - } + + return SMCResult_Continue; + } + SMCResult ReadINI_NewSection(const char *section, bool invalid_tokens, bool close_bracket, bool extra_tokens, unsigned int *curtok) + { + if (new_section != -1) + return (SMCResult)executeForwards(new_section, handle, section, invalid_tokens, close_bracket, extra_tokens, *curtok); return SMCResult_Continue; } @@ -79,9 +93,14 @@ public: SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value) { if (key_value != -1) - { return (SMCResult)executeForwards(key_value, handle, key, value); - } + + return SMCResult_Continue; + } + SMCResult ReadINI_KeyValue(const char *key, const char *value, bool invalid_tokens, bool equal_token, bool quotes, unsigned int *curtok) + { + if (key_value != -1) + return (SMCResult)executeForwards(key_value, handle, key, value, invalid_tokens, equal_token, quotes, *curtok); return SMCResult_Continue; } @@ -89,9 +108,7 @@ public: SMCResult ReadSMC_LeavingSection(const SMCStates *states) { if (end_section != -1) - { - return (SMCResult)executeForwards(end_section, handle, handle); - } + return (SMCResult)executeForwards(end_section, handle); return SMCResult_Continue; } @@ -99,9 +116,14 @@ public: SMCResult ReadSMC_RawLine(const SMCStates *states, const char *line) { if (raw_line != -1) - { return (SMCResult)executeForwards(raw_line, handle, line, states->line); - } + + return SMCResult_Continue; + } + SMCResult ReadINI_RawLine(const char *line, unsigned int lineno, unsigned int *curtok) + { + if (raw_line != -1) + return (SMCResult)executeForwards(raw_line, handle, line, lineno, *curtok); return SMCResult_Continue; } @@ -113,6 +135,7 @@ public: int end_section; int raw_line; int handle; + bool ini_format; }; template diff --git a/plugins/include/textparse.inc b/plugins/include/textparse.inc index 2ae996c5..d7eef5ef 100644 --- a/plugins/include/textparse.inc +++ b/plugins/include/textparse.inc @@ -1,46 +1,98 @@ -/** - * vim: set ts=4 : - * ============================================================================= - * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. - * ============================================================================= - * - * This file is part of the SourceMod/SourcePawn SDK. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License, version 3.0, as published by the - * Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see . - * - * As a special exception, AlliedModders LLC gives you permission to link the - * code of this program (as well as its derivative works) to "Half-Life 2," the - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software - * by the Valve Corporation. You must obey the GNU General Public License in - * all respects for all other code used. Additionally, AlliedModders LLC grants - * this exception to all derivative works. AlliedModders LLC defines further - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), - * or . - * - * Version: $Id$ - */ - + #if defined _textparse_included #endinput #endif #define _textparse_included +/** + * This parser API is entirely event based. You must hook events to receive data. + * The file format can ben either INI or SMC (also known as "SourceMod Configuration". + * SMC format is nearly identical to VDF (also known as "Valve's KeyValues format"). + * Also please note INI format is handled differently. Because more "simple" to parse, some + * event doesn't exist and callback prototype can be different. + */ /** - * Everything below describes the SMC Parse, or "SourceMod Configuration" format. - * This parser is entirely event based. You must hook events to receive data. - * The file format itself is nearly identical to Valve's KeyValues format. + * The INI file format is defined as: + * WHITESPACE: 0x20, \n, \t, \r + * IDENTIFIER: A-Z a-z 0-9 _ - , + . $ ? / + * STRING : Any set of symbols + * + * Basic syntax is comprised of SECTIONs. + * A SECTION is defined as: + * [SECTIONNAME] + * OPTION + * OPTION + * OPTION... + * + * SECTIONNAME is an IDENTIFIER. + * OPTION can be repeated any number of times, once per line. + * OPTION is defined as one of: + * KEY = "VALUE" + * KEY = VALUE + * KEY + * Where KEY is an IDENTIFIER and VALUE is a STRING. + * + * WHITESPACE should always be omitted. + * COMMENTS should be stripped, and are defined as text occurring in: + * ; + * + * Example file below. Note that the second line is technically invalid. + * The event handler must decide whether this should be allowed. + * --FILE BELOW-- + * [gaben] + * hi = clams + * bye = "NO CLAMS" + * + * [valve] + * cannot + * maintain + * products */ + +/** + * The SMC file format is defined as: + * WHITESPACE: 0x20, \n, \t, \r + * IDENTIFIER: Any ASCII character EXCLUDING ", {, }, ;, //, / *, or WHITESPACE. + * STRING : Any set of symbols enclosed in quotes. + * + * Note: if a STRING does not have quotes, it is parsed as an IDENTIFIER. + * + * Basic syntax is comprised of SECTIONBLOCKs. + * A SECTIONBLOCK defined as: + * + * SECTIONNAME + * { + * OPTION + * } + * + * OPTION can be repeated any number of times inside a SECTIONBLOCK. + * A new line will terminate an OPTION, but there can be more than one OPTION per line. + * OPTION is defined any of: + * "KEY" "VALUE" + * SECTIONBLOCK + * + * SECTIONNAME, KEY, VALUE, and SINGLEKEY are strings + * SECTIONNAME cannot have trailing characters if quoted, but the quotes can be optionally removed. + * If SECTIONNAME is not enclosed in quotes, the entire sectionname string is used (minus surrounding whitespace). + * If KEY is not enclosed in quotes, the key is terminated at first whitespace. + * If VALUE is not properly enclosed in quotes, the entire value string is used (minus surrounding whitespace). + * The VALUE may have inner quotes, but the key string may not. + * + * For an example, see scripting/testsuite/textparse_test.cfg + * + * WHITESPACE should be ignored. + * Comments are text occurring inside the following tokens, and should be stripped + * unless they are inside literal strings: + * ; + * // + * / * * / + */ + +enum TextParser +{ + Invalid_TextParser = 0 +}; /** * Parse result directive. @@ -71,31 +123,183 @@ enum SMCError SMCError_InvalidProperty1, /**< A property was declared outside of any section */ }; -enum TextParser -{ - Invalid_TextPaser = 0 -}; /** - * Creates a new SMC file format parser. + * Creates a new text parser. * This is used to set parse hooks. * - * @return A new Handle to an SMC Parse structure. + * @param ini_format Sets whether INI format or SMC should be used. + * + * @return A new handle to an Text Parse structure. */ -native TextParser:SMC_CreateParser(); +native TextParser:SMC_CreateParser(bool:ini_format = false); /** - * Parses an SMC file. + * Disposes of a text parser. * - * @param smc A Handle to an SMC Parse structure. + * @param handle Handle to a Text Parse. + * @return True if disposed, false otherwise. + */ +native SMC_DestroyParser(&TextParser:handle); + +/** + * Parses a config file. + * + * @note If using INI format, you can expect only the following SMCError_* constants: + * SMCError_Okay, SMCError_StreamOpen and SMCError_Custom. + * + * @param handle A handle to an Text Parse structure. * @param file A string containing the file path. * @param line An optional by reference cell to store the last line number read. * @param col An optional by reference cell to store the last column number read. - * @return An SMCParseError result. - * @error Invalid or corrupt Handle. + * @return A SMCParseError result. + * @error Invalid or corrupt handle. */ -native SMCError:SMC_ParseFile(TextParser:smc, const file[], &line = 0, &col = 0); +native SMCError:SMC_ParseFile(TextParser:handle, const file[], &line = 0, &col = 0); + +/** + * Sets the SMC_ParseStart function of a parse handle. + * Below is the prototype of callback.: + * + * - ParseStart: + * Called when parsing is started. + * + * @param handle The Text Parse handle. + * @noreturn + * + * public SMC_ParseStart(TextParser:handle) + * + * @param handle Handle to a Text Parse. + * @param func A ParseStart callback. + * + * @noreturn + * @error Invalid or corrupt handle. + */ +native SMC_SetParseStart(TextParser:handle, const func[]); + +/** + * Sets the SMC_ParseEnd of a parse handle. + * Below is the prototype of callback.: + * + * - ParseEnd: + * Called when parsing is halted. + * + * @param handle The Text Parse handle. + * @param halted True if abnormally halted, false otherwise. + * @param failed True if parsing failed, false otherwise. + * If using INI format, this is only true when + * a callback returns SMCResult_HaltFail. + * @noreturn + * + * public SMC_ParseEnd(TextParser:handle, bool:halted, bool:failed) + * + * @param handle Handle to a Text Parse. + * @param func A ParseEnd callback.. + * + * @noreturn + * @error Invalid or corrupt handle. + */ +native SMC_SetParseEnd(TextParser:handle, const func[]); + +/** + * Sets the three main reader functions. + * Below are the different prototypes of callbacks: + * + * - NewSection: + * Called when the parser finds the end of the current section. + * + * INI: + * @param section Name of section in between the [ and ] characters. + * @param invalid_tokens True if invalid tokens were detected in the name. + * @param close_bracket True if a closing bracket was detected, false otherwise. + * @param extra_tokens True if extra tokens were detected on the line. + * @param curtok Contains current token in the line where the section name starts. + * can add to this offset when failing to point to a token. + * @return An SMCResult action to take. + * + * public SMCResult:SMC_NewSection(TextParser:handle, const section[], bool:invalid_tokens, bool:close_bracket, bool:extra_tokens, curtok) + * + * SMC: + * @note Enclosing quotes are always stripped. + * @param handle The Text Parse handle. + * @param name String containing section name. + * @return An SMCResult action to take. + * + * public SMCResult:SMC_NewSection(TextParser:handle, const name[]) + * + * - KeyValue: + * Called when the parser finds a new key/value pair. + * + * INI: + * @param handle The Text Parse handle. + * @param key Name of key. + * @param value String containing value (with quotes stripped, if any). + * @param invalid_tokens Whether or not the key contained invalid tokens. + * @param equal_token There was an '=' sign present (in case the value is missing). + * @param quotes Whether value was enclosed in quotes. + * @param curtok Contains the token index of the start of the value string. + * This can be changed when returning false. + * @return SMCResult directive. + * + * public SMCResult:SMC_KeyValue(TextParser:handle, const key[], const value[], bool:invalid_tokens, bool:equal_token, bool:quotes, curtok) + * + * SMC: + * @note Enclosing quotes are always stripped. + * + * @param handle The Text Parse handle. + * @param key String containing key name. + * @param value String containing value name. + * @return A SMCResult action to take. + * + * public SMCResult:SMC_KeyValue(TextParser:handle, const key[], const value[]) + * + * - EndSection: + * Called when the parser finds the end of the current section. + * Only with SMC format. + + * @param handle The Text Parse handle. + * + * public SMCResult:SMC_EndSection(TextParser:handle) + * - + * @param handle The Text parse handle. + * @param ns A NewSection callback. + * @param kv A KeyValue callback. + * @param es An EndSection callback. Only available for SMC config format. + * + * @noreturn + */ +native SMC_SetReaders(TextParser:smc, const nsFunc[], const kvFunc[], const esFunc[] = ""); + +/** + * Sets a raw line reader on an text parser handle. + * Below is the prototype of callback.: + * + * - RawLine: + * Called whenever a raw line is read. + * + * INI: + * @param handle The Text Parse handle. + * @param line Contents of line. + * @param lineno The line number it occurs on. + * @param curtok Pointer to optionally store failed position in string. + * @return SMCResult directive. + * + * public SMCResult:SMC_RawLine(TextParser:smc, const line[], lineno, curtok) + * + * SMC: + * @param handle The Text Parse handle. + * @param line A string containing the raw line from the file. + * @param lineno The line number it occurs on. + * @return An SMCResult action to take. + * + * public SMCResult:SMC_RawLine(TextParser:handle, const line[], lineno) + * + * @param handle Handle to an Text Parse. + * @param func A RawLine callback. + * @noreturn + */ +native SMC_SetRawLine(TextParser:handle, const func[]); /** * Gets an error string for an SMCError code. @@ -109,115 +313,4 @@ native SMCError:SMC_ParseFile(TextParser:smc, const file[], &line = 0, &col = 0) * * @return True on success, false otherwise. */ -native bool:SMC_GetErrorString(SMCError:error, buffer[], buf_max); - -/** - * Sets the SMC_ParseStart function of a parse Handle. - * Below is the prototype of callback.: - * - * - ParseStart: - * Called when parsing is started. - * - * @param smc The SMC Parse Handle. - * @noreturn - * - * public SMC_ParseStart(TextParser:smc) - * - * @param smc Handle to an SMC Parse. - * @param func A ParseStart callback. - * - * @noreturn - * @error Invalid or corrupt Handle. - */ -native SMC_SetParseStart(TextParser:smc, const func[]); - -/** - * Sets the SMC_ParseEnd of a parse handle. - * Below is the prototype of callback.: - * - * - ParseEnd: - * Called when parsing is halted. - * - * @param smc The SMC Parse Handle. - * @param halted True if abnormally halted, false otherwise. - * @param failed True if parsing failed, false otherwise. - * @noreturn - * - * public SMC_ParseEnd(TextParser:smc, bool:halted, bool:failed) - * - * @param smc Handle to an SMC Parse. - * @param func A ParseEnd callback.. - * - * @noreturn - * @error Invalid or corrupt Handle. - */ -native SMC_SetParseEnd(TextParser:smc, const func[]); - -/** - * Sets the three main reader functions. - * Below are the different prototypes of callbacks: - * - * - NewSection: - * Called when the parser finds the end of the current section. - * @note Enclosing quotes are always stripped. - * - * @param smc The SMC Parse Handle. - * @param name String containing section name. - * @return An SMCResult action to take. - * - * public SMCResult:SMC_NewSection(TextParser:smc, const name[]) - * - * - KeyValue: - * Called when the parser finds a new key/value pair. - * @note Enclosing quotes are always stripped. - * - * @param smc The SMC Parse Handle. - * @param key String containing key name. - * @param value String containing value name. - * @return An SMCResult action to take. - * - * public SMCResult:SMC_KeyValue(TextParser:smc, const key[], const value[]) - * - * - EndSection: - * Called when the parser finds the end of the current section. - * - * @param smc The SMC Parse Handle. - * - * public SMCResult:SMC_EndSection(TextParser:smc) - * - - * @param smc An SMC parse Handle. - * @param ns A NewSection callback. - * @param kv A KeyValue callback. - * @param es An EndSection callback. - * - * @noreturn - */ -native SMC_SetReaders(TextParser:smc, const nsFunc[], const kvFunc[], const esFunc[]); - -/** - * Sets a raw line reader on an SMC parser Handle. - * Below is the prototype of callback.: - * - * - RawLine: - * Called whenever a raw line is read. - * - * @param smc The SMC Parse Handle. - * @param line A string containing the raw line from the file. - * @param lineno The line number it occurs on. - * @return An SMCResult action to take. - * - * public SMCResult:SMC_RawLine(TextParser:smc, const line[], lineno) - * - * @param smc Handle to an SMC Parse. - * @param func A RawLine callback.. - * @noreturn - */ -native SMC_SetRawLine(TextParser:smc, const func[]); - -/** - * Disposes of a text parser. - * - * @param smc Handle to an SMC Parse. - * @return True if disposed, false otherwise. - */ -native SMC_DestroyParser(&TextParser:smc); \ No newline at end of file +native bool:SMC_GetErrorString(SMCError:error, buffer[], buf_max); \ No newline at end of file diff --git a/plugins/testsuite/textparse_test.cfg b/plugins/testsuite/textparse_test.cfg new file mode 100644 index 00000000..5bf0cea0 --- /dev/null +++ b/plugins/testsuite/textparse_test.cfg @@ -0,0 +1,135 @@ +/** + * This file is used to set various options that are important to SourceMod's core. + * If this file is missing or an option in this file is missing, then the default values will be used. + */ +"Core" +{ + /** + * This option determines if SourceMod logging is enabled. + * + * "on" - Logging is enabled (default) + * "off" - Logging is disabled + */ + "Logging" "on" + + /** + * This option determines how SourceMod logging should be handled. + * + * "daily" - New log file is created for each day (default) + * "map" - New log file is created for each map change + * "game" - Use game's log files + */ + "LogMode" "daily" + + /** + * Language that multilingual enabled plugins and extensions will use to print messages. + * Only languages listed in languages.cfg are valid. + * + * The default value is "en" + */ + "ServerLang" "en" + + /** + * String to use as the public chat trigger. Set an empty string to disable. + */ + "PublicChatTrigger" "!" + + /** + * String to use as the silent chat trigger. Set an empty string to disable. + */ + "SilentChatTrigger" "/" + + /** + * If a say command is a silent chat trigger, and is used by an admin, + * but it does not evaluate to an actual command, it will be displayed + * publicly. This setting allows you to suppress accidental typings. + * + * The default value is "no". A value of "yes" will supress. + */ + "SilentFailSuppress" "no" + + /** + * Password setinfo key that clients must set. You must change this in order for + * passwords to work, for security reasons. + */ + "PassInfoVar" "_password" + + /** + * Specifies the sound that gets played when an item is selected from a menu. + */ + "MenuItemSound" "buttons/button14.wav" + + /** + * Specifies the sound that gets played when an "Exit" button is selected + * from a menu. + */ + "MenuExitSound" "buttons/combine_button7.wav" + + /** + * Specifies the sound that gets played when an "Exit Back" button is selected + * from a menu. This is the special "Back" button that is intended to roll back + * to a previous menu. + */ + "MenuExitBackSound" "buttons/combine_button7.wav" + + /** + * Enables or disables whether SourceMod reads a client's cl_language cvar to set + * their language for server-side phrase translation. + * + * "on" - Translate using the client's language (default) + * "off" - Translate using default server's language + */ + "AllowClLanguageVar" "On" + + /** + * Enables or Disables SourceMod's automatic gamedata updating. + * + * The default value is "no". A value of "yes" will block the Auto Updater. + */ + "DisableAutoUpdate" "no" + + /** + * If set to yes, a successful gamedata update will attempt to restart SourceMod. + * SourceMod is unloaded and reloaded, and the map is changed to the current map. + * Since gamedata updates occur when the server loads, impact should be minimal. + * But to be safe, this option is disabled by default. + */ + "ForceRestartAfterUpdate" "no" + + /** + * URL to use for retrieving update information. + * SSL is not yet supported. + */ + "AutoUpdateURL" "http://update.sourcemod.net/update/" + + /** + * Whether to show debug spew. + * Currently this will log details about the gamedata updating process. + */ + "DebugSpew" "no" + + /** + * If set to yes, SourceMod will validate steamid auth strings with the Steam backend before giving out admin access. + * This can prevent malicious users from impersonating admins with stolen Steam apptickets. + * If Steam is down, admins will not be authenticated until Steam comes back up. + * This option increases the security of your server, but is still experimental. + */ + "SteamAuthstringValidation" "yes" + + /** + * Enables or disables whether SourceMod blocks known or potentially malicious plugins from loading. + * It is STRONGLY advised that this is left enabled, there have been cases in the past with plugins that + * allow anyone to delete files on the server, gain full rcon control, etc. + * + * "yes" - Block malware or illegal plugins from loading (default) + * "no" - Warn about malware or illegal plugins loading + */ + "BlockBadPlugins" "yes" + + /** + * If a plugin takes too long to execute, hanging or freezing the game server in the process, + * SourceMod will attempt to terminate that plugin after the specified timeout length has + * passed. You can disable this feature by setting the value to "0". + */ + "SlowScriptTimeout" "8" +} \ No newline at end of file diff --git a/plugins/testsuite/textparse_test.ini b/plugins/testsuite/textparse_test.ini new file mode 100644 index 00000000..88078331 --- /dev/null +++ b/plugins/testsuite/textparse_test.ini @@ -0,0 +1,68 @@ +;CSDM Configuration File +; Default settings by BAILOPAN + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;You must be running the Main plugin for this section +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[settings] + +;Sets whether CSDM is enabled or not. +enabled = 1 + +;Sets whether or not players should be stripped of weapons on round start +; (excludes knife) +strip_weapons = 1 + +;Sets how long weapons should stay on the ground for after being dropped +;in seconds. note that enabling this can create lots of lag for clients +; AND server. 0 is immediate, -1 is infinite. +weapons_stay = 0 + +;Sets the spawn mode. +; "none" - users spawn at normal map spawn points +; "preset" - csdm_spawn_preset.amxx required, uses predefined spawns in config files +; -- others may be supplied by 3rd party plugins +spawnmode = preset + +;Sets whether the bomb is removed +remove_bomb = 1 + +;Sets the spawn waiting time +spawn_wait_time = 0.75 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;You must be running the protection plugin for this section +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[protection] ; some comment + +;Is spawn protection enabled? +enabled = 1 + +;Colors of glow shell, leave this in quotes +;The digits are R, G, B, A where A is the alpha transparency +; (as A gets higher, the glow shell is thicker) +colors = "0 255 0 200" + +;Number of seconds someone is respawned for. +time = 2 + +;;;;;;;;;;;;;;;; +;;WEAPON MENUS;; +;;;;;;;;;;;;;;;; + +;Format for weapon menus is: +;shortname "Display Name" menupage +;Change the '1' to a '0' to block the weapon +;Removing or moving things +; from the list will change the order of the menus! + +[secondary] gabe // < just to test param. +usp USP 1 +glock18 Glock 1 +deagle Deagle 1 + +;List weapons here the bots can randomly have +;The short name must match one in the list above +[botsecondary +deagle +usp diff --git a/plugins/testsuite/textparse_test.sma b/plugins/testsuite/textparse_test.sma index d5ab402c..297aeeb7 100644 --- a/plugins/testsuite/textparse_test.sma +++ b/plugins/testsuite/textparse_test.sma @@ -6,17 +6,24 @@ new Trie:ExpectedKVData; public plugin_init() { - register_concmd("textparse_vdf", "ConsoleCommand_TextParseVDF"); - register_clcmd("textparse_ini", "ServerCommand_TextParseINI"); + register_concmd("textparse", "ConsoleCommand_TextParse"); +} + +public ConsoleCommand_TextParse() +{ + InitializeTextParseSMC(); + InitializeTextParseINI(); } /** - * VDF Config format + * SMC Config format */ -public ConsoleCommand_TextParseVDF() +InitializeTextParseSMC() { - server_print("Testing text parser with VDF config file format..."); + SuccessCount = 0; + + server_print("Testing text parser with SMC config file format..."); new const configFile[] = "addons/amxmodx/scripting/testsuite/textparse_test.cfg"; @@ -53,7 +60,7 @@ public ConsoleCommand_TextParseVDF() SMC_SetParseEnd(parser, "ReadCore_ParseEnd"); new line, col; - new SMCError:err = SMC_ParseFile_VDF(parser, configFile, line, col); + new SMCError:err = SMC_ParseFile(parser, configFile, line, col); if (err != SMCError_Okay) { @@ -66,22 +73,24 @@ public ConsoleCommand_TextParseVDF() ++SuccessCount; } - SMC_DestroyParser(parser); - server_print("^tTests successful: %d/%d", SuccessCount, expectedStartEndCount + expectedSectionCount + expectedKeyValueCount + expectedLineCount + 1); + + SMC_DestroyParser(parser); + TrieDestroy(ExpectedKVData); + SuccessCount = 0; } -public ReadCore_ParseStart(TextParser:smc) +public ReadCore_ParseStart(TextParser:handle) { ++SuccessCount; } -public ReadCore_NewSection(TextParser:smc, const name[]) +public ReadCore_NewSection(TextParser:handle, const name[]) { ++SuccessCount; } -public ReadCore_KeyValue(TextParser:smc, const key[], const value[]) +public ReadCore_KeyValue(TextParser:handle, const key[], const value[]) { new buffer[128]; if (TrieGetString(ExpectedKVData, key, buffer, charsmax(buffer)) && equal(value, buffer)) @@ -90,27 +99,124 @@ public ReadCore_KeyValue(TextParser:smc, const key[], const value[]) } } -public ReadCore_EndSection(TextParser:smc) +public ReadCore_EndSection(TextParser:handle) { ++SuccessCount; } -public ReadCore_CurrentLine(TextParser:smc, const line[], lineno) +public ReadCore_CurrentLine(TextParser:handle, const line[], lineno) { ++SuccessCount; } -public ReadCore_ParseEnd(TextParser:smc) +public ReadCore_ParseEnd(TextParser:handle, bool:halted, bool:failed) { ++SuccessCount; } - /** * INI Config format */ -public ServerCommand_TextParseINI() -{ +public InitializeTextParseINI() +{ + SuccessCount = 0; + + server_print("Testing text parser with INI config file format..."); + + new const configFile[] = "addons/amxmodx/scripting/testsuite/textparse_test.ini"; + + ExpectedKVData = TrieCreate(); + TrieSetString(ExpectedKVData, "settings", ""); + TrieSetString(ExpectedKVData, "enabled", "1"); + TrieSetString(ExpectedKVData, "strip_weapons", "1"); + TrieSetString(ExpectedKVData, "weapons_stay", "0"); + TrieSetString(ExpectedKVData, "spawnmode", "preset"); + TrieSetString(ExpectedKVData, "remove_bomb", "1"); + TrieSetString(ExpectedKVData, "spawn_wait_time", "0.75"); + TrieSetString(ExpectedKVData, "protection", ""); + TrieSetString(ExpectedKVData, "colors", "0 255 0 200"); + TrieSetString(ExpectedKVData, "time", "time"); + TrieSetString(ExpectedKVData, "secondary", ""); + TrieSetString(ExpectedKVData, "usp USP 1", ""); + TrieSetString(ExpectedKVData, "glock18 Glock 1", ""); + TrieSetString(ExpectedKVData, "deagle Deagle 1", ""); + TrieSetString(ExpectedKVData, "botsecondary", ""); + TrieSetString(ExpectedKVData, "deagle", ""); + TrieSetString(ExpectedKVData, "usp", ""); + + new const expectedSectionCount = 4; + new const expectedStartEndCount = 2; + new const expectedKeyValueCount = TrieGetSize(ExpectedKVData) - expectedSectionCount; + new const expectedLineCount = TrieGetSize(ExpectedKVData); // This doesn't include blanck/comments line. + + new TextParser:parser = SMC_CreateParser(.ini_format = true); + + SMC_SetReaders(parser, "ReadCSDM_NewSection", "ReadCSDM_KeyValue"); + SMC_SetParseStart(parser, "ReadCSDM_ParseStart"); + SMC_SetRawLine(parser, "ReadCSDM_CurrentLine"); + SMC_SetParseEnd(parser, "ReadCSDM_ParseEnd"); + + new line, col; + new SMCError:err = SMC_ParseFile(parser, configFile, line, col); + + if (err != SMCError_Okay) + { + new buffer[64]; + server_print("Error: %s", SMC_GetErrorString(err, buffer, charsmax(buffer)) ? buffer : "Fatal parse error"); + } + + if (line == expectedLineCount + 1) + { + ++SuccessCount; + } + + server_print("^tTests successful: %d/%d", SuccessCount, expectedStartEndCount + expectedSectionCount + expectedKeyValueCount + expectedLineCount + 1); + + SMC_DestroyParser(parser); + TrieDestroy(ExpectedKVData); } + +public ReadCSDM_ParseStart(TextParser:handle) +{ + ++SuccessCount; +} + +public ReadCSDM_NewSection(TextParser:handle, const section[], bool:invalid_tokens, bool:close_bracket, bool:extra_tokens, curtok) +{ + if (TrieKeyExists(ExpectedKVData, section)) + { + if ((equal(section, "secondary") && !extra_tokens) || + (equal(section, "botsecondary") && close_bracket)) + { + return; + } + + ++SuccessCount; + } +} + +public ReadCSDM_KeyValue(TextParser:handle, const key[], const value[], bool:invalid_tokens, bool:equal_token, bool:quotes, curtok) +{ + new buffer[128]; + if (TrieGetString(ExpectedKVData, key, buffer, charsmax(buffer)) && equal(value, buffer)) + { + if (equal(value, "colors") && !quotes) + { + return; + } + + ++SuccessCount; + } +} + +public ReadCSDM_CurrentLine(TextParser:handle, const line[], lineno, curtok) +{ + ++SuccessCount; +} + +public ReadCSDM_ParseEnd(TextParser:handle, bool:halted, bool:failed) +{ + ++SuccessCount; +} \ No newline at end of file diff --git a/public/ITextParsers.h b/public/ITextParsers.h index 9dff6692..a8ef31b4 100644 --- a/public/ITextParsers.h +++ b/public/ITextParsers.h @@ -81,6 +81,35 @@ namespace SourceMod * products */ + /** + * @brief Lists actions to take when an SMC parse hook is done. + */ + enum SMCResult + { + SMCResult_Continue, /**< Continue parsing */ + SMCResult_Halt, /**< Stop parsing here */ + SMCResult_HaltFail /**< Stop parsing and return SMCError_Custom */ + }; + + /** + * @brief Lists error codes possible from parsing an SMC file. + */ + enum SMCError + { + SMCError_Okay = 0, /**< No error */ + SMCError_StreamOpen, /**< Stream failed to open */ + SMCError_StreamError, /**< The stream died... somehow */ + SMCError_Custom, /**< A custom handler threw an error */ + SMCError_InvalidSection1, /**< A section was declared without quotes, and had extra tokens */ + SMCError_InvalidSection2, /**< A section was declared without any header */ + SMCError_InvalidSection3, /**< A section ending was declared with too many unknown tokens */ + SMCError_InvalidSection4, /**< A section ending has no matching beginning */ + SMCError_InvalidSection5, /**< A section beginning has no matching ending */ + SMCError_InvalidTokens, /**< There were too many unidentifiable strings on one line */ + SMCError_TokenOverflow, /**< The token buffer overflowed */ + SMCError_InvalidProperty1, /**< A property was declared outside of any section */ + }; + /** * @brief Contains parse events for INI files. */ @@ -95,6 +124,23 @@ namespace SourceMod return SMINTERFACE_TEXTPARSERS_VERSION; } public: + /** + * @brief Called when starting parsing. + */ + virtual void ReadINI_ParseStart() + { + }; + + /** + * @brief Called when ending parsing. + * + * @param halted True if abnormally halted, false otherwise. + * @param failed True if parsing failed, false otherwise. + */ + virtual void ReadINI_ParseEnd(bool halted, bool failed) + { + } + /** * @brief Called when a new section is encountered in an INI file. * @@ -104,15 +150,11 @@ namespace SourceMod * @param extra_tokens True if extra tokens were detected on the line. * @param curtok Contains current token in the line where the section name starts. * You can add to this offset when failing to point to a token. - * @return True to keep parsing, false otherwise. + * @return SMCResult directive. */ - virtual bool ReadINI_NewSection(const char *section, - bool invalid_tokens, - bool close_bracket, - bool extra_tokens, - unsigned int *curtok) + virtual SMCResult ReadINI_NewSection(const char *section, bool invalid_tokens, bool close_bracket, bool extra_tokens, unsigned int *curtok) { - return true; + return SMCResult_Continue; } /** @@ -125,28 +167,24 @@ namespace SourceMod * @param quotes Whether value was enclosed in quotes. * @param curtok Contains the token index of the start of the value string. * This can be changed when returning false. - * @return True to keep parsing, false otherwise. + * @return SMCResult directive. */ - virtual bool ReadINI_KeyValue(const char *key, - const char *value, - bool invalid_tokens, - bool equal_token, - bool quotes, - unsigned int *curtok) + virtual SMCResult ReadINI_KeyValue(const char *key, const char *value, bool invalid_tokens, bool equal_token, bool quotes, unsigned int *curtok) { - return true; + return SMCResult_Continue; } /** * @brief Called after a line has been preprocessed, if it has text. * * @param line Contents of line. + * @param lineno The line number it occurs on. * @param curtok Pointer to optionally store failed position in string. - * @return True to keep parsing, false otherwise. + * @return SMCResult directive. */ - virtual bool ReadINI_RawLine(const char *line, unsigned int *curtok) + virtual SMCResult ReadINI_RawLine(const char *line, unsigned int lineno, unsigned int *curtok) { - return true; + return SMCResult_Continue; } }; @@ -189,35 +227,6 @@ namespace SourceMod * // * / * */ - /** - * @brief Lists actions to take when an SMC parse hook is done. - */ - enum SMCResult - { - SMCResult_Continue, /**< Continue parsing */ - SMCResult_Halt, /**< Stop parsing here */ - SMCResult_HaltFail /**< Stop parsing and return SMCError_Custom */ - }; - - /** - * @brief Lists error codes possible from parsing an SMC file. - */ - enum SMCError - { - SMCError_Okay = 0, /**< No error */ - SMCError_StreamOpen, /**< Stream failed to open */ - SMCError_StreamError, /**< The stream died... somehow */ - SMCError_Custom, /**< A custom handler threw an error */ - SMCError_InvalidSection1, /**< A section was declared without quotes, and had extra tokens */ - SMCError_InvalidSection2, /**< A section was declared without any header */ - SMCError_InvalidSection3, /**< A section ending was declared with too many unknown tokens */ - SMCError_InvalidSection4, /**< A section ending has no matching beginning */ - SMCError_InvalidSection5, /**< A section beginning has no matching ending */ - SMCError_InvalidTokens, /**< There were too many unidentifiable strings on one line */ - SMCError_TokenOverflow, /**< The token buffer overflowed */ - SMCError_InvalidProperty1, /**< A property was declared outside of any section */ - }; - /** * @brief States for line/column */ @@ -341,9 +350,9 @@ namespace SourceMod * @param ini_listener Event handler for reading file. * @param line If non-NULL, will contain last line parsed (0 if file could not be opened). * @param col If non-NULL, will contain last column parsed (undefined if file could not be opened). - * @return True if parsing succeeded, false if file couldn't be opened or there was a syntax error. + * @return An SMCError result code. */ - virtual bool ParseFile_INI(const char *file, + virtual SMCError ParseFile_INI(const char *file, ITextListener_INI *ini_listener, unsigned int *line, unsigned int *col) =0; diff --git a/support/PackageScript b/support/PackageScript index f3524d0d..5185c646 100644 --- a/support/PackageScript +++ b/support/PackageScript @@ -235,6 +235,9 @@ scripting_files = [ 'testsuite/trietest.sma', 'testsuite/utf8test.sma', 'testsuite/stacktest.sma', + 'testsuite/textparse_test.sma', + 'testsuite/textparse_test.cfg', + 'testsuite/textparse_test.ini', 'include/amxconst.inc', 'include/amxmisc.inc', 'include/amxmodx.inc', From 037af0aec281cdc9ac42661e24c039ddda6e75d3 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Sun, 3 Aug 2014 20:43:32 +0200 Subject: [PATCH 57/71] Split INI/SMC API. --- amxmodx/CTextParsers.cpp | 93 +++---- amxmodx/CTextParsers.h | 42 +-- amxmodx/textparse.cpp | 377 ++++++++++++++++++--------- amxmodx/textparse.h | 119 ++++----- plugins/include/amxmodx.inc | 2 + plugins/include/textparse.inc | 316 ---------------------- plugins/include/textparse_ini.inc | 196 ++++++++++++++ plugins/include/textparse_smc.inc | 242 +++++++++++++++++ plugins/testsuite/textparse_test.sma | 80 ++++-- public/ITextParsers.h | 119 ++++----- 10 files changed, 897 insertions(+), 689 deletions(-) delete mode 100644 plugins/include/textparse.inc create mode 100644 plugins/include/textparse_ini.inc create mode 100644 plugins/include/textparse_smc.inc diff --git a/amxmodx/CTextParsers.cpp b/amxmodx/CTextParsers.cpp index 5ebcfaed..4e79cc87 100644 --- a/amxmodx/CTextParsers.cpp +++ b/amxmodx/CTextParsers.cpp @@ -1,33 +1,13 @@ -/** -* vim: set ts=4 : -* ============================================================================= -* SourceMod -* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. -* ============================================================================= -* -* This program is free software; you can redistribute it and/or modify it under -* the terms of the GNU General Public License, version 3.0, as published by the -* Free Software Foundation. -* -* This program is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -* details. -* -* You should have received a copy of the GNU General Public License along with -* this program. If not, see . -* -* As a special exception, AlliedModders LLC gives you permission to link the -* code of this program (as well as its derivative works) to "Half-Life 2," the -* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software -* by the Valve Corporation. You must obey the GNU General Public License in -* all respects for all other code used. Additionally, AlliedModders LLC grants -* this exception to all derivative works. AlliedModders LLC defines further -* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), -* or . -* -* Version: $Id$ -*/ +/** + * vim: set ts=4 sw=4 tw=99 noet: + * + * AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). + * Copyright (C) The AMX Mod X Development Team. + * + * This software is licensed under the GNU General Public License, version 3 or higher. + * Additional exceptions apply. For full license details, see LICENSE.txt or visit: + * https://alliedmods.net/amxmodx-license + */ #include "amxmodx.h" #include "CTextParsers.h" @@ -778,7 +758,7 @@ failed: * INI parser */ -SMCError TextParsers::ParseFile_INI(const char *file, ITextListener_INI *ini_listener, unsigned int *line, unsigned int *col) +bool TextParsers::ParseFile_INI(const char *file, ITextListener_INI *ini_listener, unsigned int *line, unsigned int *col) { FILE *fp = fopen(file, "rt"); unsigned int curline = 0; @@ -792,7 +772,7 @@ SMCError TextParsers::ParseFile_INI(const char *file, ITextListener_INI *ini_lis *line = 0; } - return SMCError_StreamOpen; + return false; } ini_listener->ReadINI_ParseStart(); @@ -800,8 +780,6 @@ SMCError TextParsers::ParseFile_INI(const char *file, ITextListener_INI *ini_lis char buffer[2048]; char *ptr, *save_ptr; bool in_quote; - SMCError err = SMCError_Okay; - SMCResult res = SMCResult_Continue; while (!feof(fp)) { @@ -853,22 +831,24 @@ SMCError TextParsers::ParseFile_INI(const char *file, ITextListener_INI *ini_lis { switch (*ptr) { - case '"': - { - in_quote = true; - break; - } - case ';': - { - /* Stop the loop */ - len = i; - /* Terminate the string here */ - *ptr = '\0'; - break; - } + case '"': + { + in_quote = true; + break; + } + case ';': + { + /* Stop the loop */ + len = i; + + /* Terminate the string here */ + *ptr = '\0'; + break; + } } } - else { + else + { if (*ptr == '"') { in_quote = false; @@ -901,9 +881,8 @@ SMCError TextParsers::ParseFile_INI(const char *file, ITextListener_INI *ini_lis continue; } - if ((res = ini_listener->ReadINI_RawLine(ptr, curline, &curtok)) != SMCResult_Continue) + if (!ini_listener->ReadINI_RawLine(ptr, &curtok)) { - err = (res == SMCResult_HaltFail) ? SMCError_Custom : SMCError_Okay; goto event_failed; } @@ -956,9 +935,8 @@ SMCError TextParsers::ParseFile_INI(const char *file, ITextListener_INI *ini_lis } /* Tell the handler */ - if ((res = ini_listener->ReadINI_NewSection(&ptr[1], invalid_tokens, got_bracket, extra_tokens, &curtok)) != SMCResult_Continue) + if (!ini_listener->ReadINI_NewSection(&ptr[1], invalid_tokens, got_bracket, extra_tokens, &curtok)) { - err = (res == SMCResult_HaltFail) ? SMCError_Custom : SMCError_Okay; goto event_failed; } } @@ -1063,9 +1041,8 @@ SMCError TextParsers::ParseFile_INI(const char *file, ITextListener_INI *ini_lis else curtok = 0; - if ((res = ini_listener->ReadINI_KeyValue(key_ptr, val_ptr, invalid_tokens, equal_token, quotes, &curtok)) != SMCResult_Continue) + if (!ini_listener->ReadINI_KeyValue(key_ptr, val_ptr, invalid_tokens, equal_token, quotes, &curtok)) { - err = (res == SMCResult_HaltFail) ? SMCError_Custom : SMCError_Okay; curtok = 0; goto event_failed; } @@ -1084,9 +1061,9 @@ SMCError TextParsers::ParseFile_INI(const char *file, ITextListener_INI *ini_lis fclose(fp); - ini_listener->ReadINI_ParseEnd(false, false); + ini_listener->ReadINI_ParseEnd(false); - return SMCError_Okay; + return true; event_failed: if (line) @@ -1101,9 +1078,9 @@ event_failed: fclose(fp); - ini_listener->ReadINI_ParseEnd(true, (err == SMCError_Custom)); + ini_listener->ReadINI_ParseEnd(true); - return err; + return false; } const char *TextParsers::GetSMCErrorString(SMCError err) diff --git a/amxmodx/CTextParsers.h b/amxmodx/CTextParsers.h index 7aaafb63..8ceeca6d 100644 --- a/amxmodx/CTextParsers.h +++ b/amxmodx/CTextParsers.h @@ -1,33 +1,13 @@ -/** -* vim: set ts=4 : -* ============================================================================= -* SourceMod -* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. -* ============================================================================= -* -* This program is free software; you can redistribute it and/or modify it under -* the terms of the GNU General Public License, version 3.0, as published by the -* Free Software Foundation. -* -* This program is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -* details. -* -* You should have received a copy of the GNU General Public License along with -* this program. If not, see . -* -* As a special exception, AlliedModders LLC gives you permission to link the -* code of this program (as well as its derivative works) to "Half-Life 2," the -* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software -* by the Valve Corporation. You must obey the GNU General Public License in -* all respects for all other code used. Additionally, AlliedModders LLC grants -* this exception to all derivative works. AlliedModders LLC defines further -* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), -* or . -* -* Version: $Id$ -*/ +/** + * vim: set ts=4 sw=4 tw=99 noet: + * + * AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). + * Copyright (C) The AMX Mod X Development Team. + * + * This software is licensed under the GNU General Public License, version 3 or higher. + * Additional exceptions apply. For full license details, see LICENSE.txt or visit: + * https://alliedmods.net/amxmodx-license + */ #ifndef _INCLUDE_SOURCEMOD_TEXTPARSERS_H_ #define _INCLUDE_SOURCEMOD_TEXTPARSERS_H_ @@ -51,7 +31,7 @@ class TextParsers : public ITextParsers public: TextParsers(); public: - SMCError ParseFile_INI(const char *file, + bool ParseFile_INI(const char *file, ITextListener_INI *ini_listener, unsigned int *line, unsigned int *col); diff --git a/amxmodx/textparse.cpp b/amxmodx/textparse.cpp index b34bdc61..e72efed0 100644 --- a/amxmodx/textparse.cpp +++ b/amxmodx/textparse.cpp @@ -1,33 +1,13 @@ -/** -* vim: set ts=4 : -* ============================================================================= -* SourceMod -* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. -* ============================================================================= -* -* This program is free software; you can redistribute it and/or modify it under -* the terms of the GNU General Public License, version 3.0, as published by the -* Free Software Foundation. -* -* This program is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -* details. -* -* You should have received a copy of the GNU General Public License along with -* this program. If not, see . -* -* As a special exception, AlliedModders LLC gives you permission to link the -* code of this program (as well as its derivative works) to "Half-Life 2," the -* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software -* by the Valve Corporation. You must obey the GNU General Public License in -* all respects for all other code used. Additionally, AlliedModders LLC grants -* this exception to all derivative works. AlliedModders LLC defines further -* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), -* or . -* -* Version: $Id$ -*/ +/** + * vim: set ts=4 sw=4 tw=99 noet: + * + * AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). + * Copyright (C) The AMX Mod X Development Team. + * + * This software is licensed under the GNU General Public License, version 3 or higher. + * Additional exceptions apply. For full license details, see LICENSE.txt or visit: + * https://alliedmods.net/amxmodx-license + */ #include "amxmodx.h" #include @@ -35,16 +15,41 @@ TextParserHandles g_TextParsersHandles; -static cell AMX_NATIVE_CALL SMC_CreateParser(AMX *amx, cell *params) +cell createParser() { - int handle = g_TextParsersHandles.create(); - ParseInfo *p = g_TextParsersHandles.lookup(handle); - - p->ini_format = params[1] > 0 ? true : false; - - return static_cast(handle); + return g_TextParsersHandles.create(); } +cell destroyParser(cell *handle) +{ + ParseInfo *p = g_TextParsersHandles.lookup(*handle); + + if (p == NULL) + { + return 0; + } + + if (g_TextParsersHandles.destroy(*handle)) + { + *handle = 0; + return 1; + } + + return 0; +} + + +/** + * SMC CONFIG. + */ + +// native SMCParser:SMC_CreateParser(); +static cell AMX_NATIVE_CALL SMC_CreateParser(AMX *amx, cell *params) +{ + return createParser(); +} + +// native SMC_SetParseStart(SMCParser:handle, const func[]); static cell AMX_NATIVE_CALL SMC_SetParseStart(AMX *amx, cell *params) { ParseInfo *p = g_TextParsersHandles.lookup(params[1]); @@ -55,21 +60,24 @@ static cell AMX_NATIVE_CALL SMC_SetParseStart(AMX *amx, cell *params) return 0; } - int length; - const char* functionName = get_amxstring(amx, params[2], 0, length); - int function = registerSPForwardByName(amx, functionName, FP_CELL, FP_DONE); + int length = 0; + const char *funcName = NULL; - if (function == -1) + if ((funcName = get_amxstring(amx, params[2], 0, length)) && length) { - LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", functionName, g_plugins.findPluginFast(amx)->getName()); - return 0; + p->parse_start = registerSPForwardByName(amx, funcName, FP_CELL, FP_DONE); } - p->parse_start = function; + if (p->parse_start == -1) + { + LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", funcName, g_plugins.findPluginFast(amx)->getName()); + return 0; + } return 1; } +// native SMC_SetParseEnd(SMCParser:handle, const func[]); static cell AMX_NATIVE_CALL SMC_SetParseEnd(AMX *amx, cell *params) { ParseInfo *p = g_TextParsersHandles.lookup(params[1]); @@ -80,21 +88,24 @@ static cell AMX_NATIVE_CALL SMC_SetParseEnd(AMX *amx, cell *params) return 0; } - int length; - const char* funcName = get_amxstring(amx, params[2], 0, length); - int func = registerSPForwardByName(amx, funcName, FP_CELL, FP_CELL, FP_CELL, FP_DONE); + int length = 0; + const char *funcName = NULL; - if (func == -1) + if ((funcName = get_amxstring(amx, params[2], 0, length)) && length) + { + p->parse_end = registerSPForwardByName(amx, funcName, FP_CELL, FP_CELL, FP_CELL, FP_DONE); + } + + if (p->parse_end == -1) { LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", funcName, g_plugins.findPluginFast(amx)->getName()); return 0; } - p->parse_end = func; - return 1; } +// native SMC_SetReaders(SMCParser:smc, const kvFunc[], const nsFunc[] = "", const esFunc[] = ""); static cell AMX_NATIVE_CALL SMC_SetReaders(AMX *amx, cell *params) { ParseInfo *p = g_TextParsersHandles.lookup(params[1]); @@ -105,55 +116,34 @@ static cell AMX_NATIVE_CALL SMC_SetReaders(AMX *amx, cell *params) return 0; } - int length; - const char* newSectionFuncName = get_amxstring(amx, params[2], 0, length); - const char* keyValueFuncName = get_amxstring(amx, params[3], 1, length); - const char* endSectionFuncName = get_amxstring(amx, params[4], 2, length); + int kvLength = 0, nsLength = 0, esLength = 0; + const char *funcName = NULL; - int newSectionFunc; - int keyValueFunc; - int endSectionFunc; - - if (p->ini_format) - newSectionFunc = registerSPForwardByName(amx, newSectionFuncName, FP_CELL, FP_STRING, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE); - else - newSectionFunc = registerSPForwardByName(amx, newSectionFuncName, FP_CELL, FP_STRING, FP_DONE); - - if (newSectionFunc == -1) + if ((funcName = get_amxstring(amx, params[2], 0, kvLength)) && kvLength) { - LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", newSectionFuncName, g_plugins.findPluginFast(amx)->getName()); + p->key_value = registerSPForwardByName(amx, funcName, FP_CELL, FP_STRING, FP_STRING, FP_DONE); + } + + if (kvLength && (funcName = get_amxstring(amx, params[3], 1, nsLength)) && nsLength) + { + p->new_section = registerSPForwardByName(amx, funcName, FP_CELL, FP_STRING, FP_DONE); + } + + if (kvLength && (funcName = get_amxstring(amx, params[4], 2, esLength)) && esLength) + { + p->end_section = registerSPForwardByName(amx, funcName, FP_CELL, FP_DONE); + } + + if (p->key_value == -1 || (nsLength && p->new_section == -1) || (esLength && p->end_section == -1)) + { + LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", funcName, g_plugins.findPluginFast(amx)->getName()); return 0; } - if (p->ini_format) - keyValueFunc = registerSPForwardByName(amx, keyValueFuncName, FP_CELL, FP_STRING, FP_STRING, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE); - else - keyValueFunc = registerSPForwardByName(amx, keyValueFuncName, FP_CELL, FP_STRING, FP_STRING, FP_DONE); - - if (keyValueFunc == -1) - { - LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", keyValueFuncName, g_plugins.findPluginFast(amx)->getName()); - return 0; - } - - if (!p->ini_format) - { - endSectionFunc = registerSPForwardByName(amx, endSectionFuncName, FP_CELL, FP_DONE); - if (endSectionFunc == -1) - { - LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", endSectionFuncName, g_plugins.findPluginFast(amx)->getName()); - return 0; - } - - p->end_section = endSectionFunc; - } - - p->new_section = newSectionFunc; - p->key_value = keyValueFunc; - return 1; } +// native SMC_SetRawLine(SMCParser:handle, const func[]); static cell AMX_NATIVE_CALL SMC_SetRawLine(AMX *amx, cell *params) { ParseInfo *p = g_TextParsersHandles.lookup(params[1]); @@ -164,26 +154,24 @@ static cell AMX_NATIVE_CALL SMC_SetRawLine(AMX *amx, cell *params) return 0; } - int length; - const char* funcName = get_amxstring(amx, params[2], 0, length); + int length = 0; + const char *funcName = NULL; - int func; - if (p->ini_format) - func = registerSPForwardByName(amx, funcName, FP_CELL, FP_STRING, FP_CELL, FP_CELL, FP_DONE); - else - func = registerSPForwardByName(amx, funcName, FP_CELL, FP_STRING, FP_CELL, FP_DONE); + if ((funcName = get_amxstring(amx, params[2], 0, length)) && length) + { + p->raw_line = registerSPForwardByName(amx, funcName, FP_CELL, FP_STRING, FP_CELL, FP_DONE); + } - if (func == -1) + if (p->raw_line == -1) { LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", funcName, g_plugins.findPluginFast(amx)->getName()); return 0; } - p->raw_line = func; - return 1; } +// native SMCError:SMC_ParseFile(SMCParser:handle, const file[], &line = 0, &col = 0); static cell AMX_NATIVE_CALL SMC_ParseFile(AMX *amx, cell *params) { ParseInfo *p = g_TextParsersHandles.lookup(params[1]); @@ -197,28 +185,16 @@ static cell AMX_NATIVE_CALL SMC_ParseFile(AMX *amx, cell *params) int length; const char *file = build_pathname("%s", get_amxstring(amx, params[2], 0, length)); - SMCError p_err; + SMCStates states; + SMCError p_err = textparsers->ParseFile_SMC(file, p, &states); - if (p->ini_format) - { - size_t line, col; - p_err = textparsers->ParseFile_INI(file, p, &line, &col); - - *get_amxaddr(amx, params[3]) = line; - *get_amxaddr(amx, params[4]) = col; - } - else - { - SMCStates states; - p_err = textparsers->ParseFile_SMC(file, p, &states); - - *get_amxaddr(amx, params[3]) = states.line; - *get_amxaddr(amx, params[4]) = states.col; - } + *get_amxaddr(amx, params[3]) = states.line; + *get_amxaddr(amx, params[4]) = states.col; return static_cast(p_err); } +// native bool:SMC_GetErrorString(SMCError:error, buffer[], buf_max); static cell AMX_NATIVE_CALL SMC_GetErrorString(AMX *amx, cell *params) { const char *str = textparsers->GetSMCErrorString((SMCError)params[1]); @@ -231,26 +207,170 @@ static cell AMX_NATIVE_CALL SMC_GetErrorString(AMX *amx, cell *params) return set_amxstring(amx, params[2], str, params[3]); } +// native SMC_DestroyParser(&SMCParser:handle); static cell AMX_NATIVE_CALL SMC_DestroyParser(AMX *amx, cell *params) { - cell *ptr = get_amxaddr(amx, params[1]); + return destroyParser(get_amxaddr(amx, params[1])); +} - ParseInfo *p = g_TextParsersHandles.lookup(*ptr); + +/** + * INI CONFIG + */ + +// native INIParser:INI_CreateParser(); +static cell AMX_NATIVE_CALL INI_CreateParser(AMX *amx, cell *params) +{ + return createParser(); +} + +// native bool:INI_ParseFile(INIParser:handle, const file[], &line = 0, &col = 0); +static cell AMX_NATIVE_CALL INI_ParseFile(AMX *amx, cell *params) +{ + ParseInfo *p = g_TextParsersHandles.lookup(params[1]); if (p == NULL) { + LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); return 0; } - if (g_TextParsersHandles.destroy(*ptr)) + int length; + const char *file = build_pathname("%s", get_amxstring(amx, params[2], 0, length)); + + size_t line, col; + bool result = textparsers->ParseFile_INI(file, p, &line, &col); + + *get_amxaddr(amx, params[3]) = line; + *get_amxaddr(amx, params[4]) = col; + + return result; +} + +// native INI_SetParseStart(INIParser:handle, const func[]); +static cell AMX_NATIVE_CALL INI_SetParseStart(AMX *amx, cell *params) +{ + ParseInfo *p = g_TextParsersHandles.lookup(params[1]); + + if (p == NULL) { - *ptr = 0; - return 1; + LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + return 0; } - return 0; + int length = 0; + const char *funcName = NULL; + + if ((funcName = get_amxstring(amx, params[2], 0, length)) && length) + { + p->parse_start = registerSPForwardByName(amx, funcName, FP_CELL, FP_DONE); + } + + if (p->parse_start == -1) + { + LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", funcName, g_plugins.findPluginFast(amx)->getName()); + return 0; + } + + return 1; } +// native INI_SetParseEnd(INIParser:handle, const func[]); +static cell AMX_NATIVE_CALL INI_SetParseEnd(AMX *amx, cell *params) +{ + ParseInfo *p = g_TextParsersHandles.lookup(params[1]); + + if (p == NULL) + { + LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + return 0; + } + + int length = 0; + const char *funcName = NULL; + + if ((funcName = get_amxstring(amx, params[2], 0, length))) + { + p->parse_end = registerSPForwardByName(amx, funcName, FP_CELL, FP_CELL, FP_CELL, FP_DONE); + } + + if (p->parse_end == -1) + { + LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", funcName, g_plugins.findPluginFast(amx)->getName()); + return 0; + } + + return 1; +} + +// native INI_SetReaders(INIParser:smc, const kvFunc[], const nsFunc[] = "" ); +static cell AMX_NATIVE_CALL INI_SetReaders(AMX *amx, cell *params) +{ + ParseInfo *p = g_TextParsersHandles.lookup(params[1]); + + if (p == NULL) + { + LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + return 0; + } + + int kvLength = 0, nsLength = 0; + const char *funcName = NULL; + + if ((funcName = get_amxstring(amx, params[2], 0, kvLength)) && kvLength) + { + p->key_value = registerSPForwardByName(amx, funcName, FP_CELL, FP_STRING, FP_STRING, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE); + } + + if (kvLength && (funcName = get_amxstring(amx, params[3], 1, nsLength)) && nsLength) + { + p->new_section = registerSPForwardByName(amx, funcName, FP_CELL, FP_STRING, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE); + } + + if (p->key_value == -1 || (nsLength && p->new_section == -1)) + { + LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", funcName, g_plugins.findPluginFast(amx)->getName()); + return 0; + } + + return 1; +} + +// native INI_SetRawLine(INIParser:handle, const func[]); +static cell AMX_NATIVE_CALL INI_SetRawLine(AMX *amx, cell *params) +{ + ParseInfo *p = g_TextParsersHandles.lookup(params[1]); + + if (p == NULL) + { + LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + return 0; + } + + int length = 0; + const char *funcName = NULL; + + if ((funcName = get_amxstring(amx, params[2], 0, length)) && length) + { + p->raw_line = registerSPForwardByName(amx, funcName, FP_CELL, FP_STRING, FP_CELL, FP_CELL, FP_DONE); + } + + if (p->raw_line == -1) + { + LogError(amx, AMX_ERR_NATIVE, "Function is not present (function \"%s\") (plugin \"%s\")", funcName, g_plugins.findPluginFast(amx)->getName()); + return 0; + } + + return 1; +} + +// native INI_DestroyParser(&INIParser:handle); +static cell AMX_NATIVE_CALL INI_DestroyParser(AMX *amx, cell *params) +{ + return destroyParser(get_amxaddr(amx, params[1])); +} + + AMX_NATIVE_INFO g_TextParserNatives[] = { { "SMC_CreateParser" , SMC_CreateParser }, @@ -261,5 +381,14 @@ AMX_NATIVE_INFO g_TextParserNatives[] = { "SMC_SetReaders" , SMC_SetReaders }, { "SMC_SetRawLine" , SMC_SetRawLine }, { "SMC_DestroyParser" , SMC_DestroyParser }, + + { "INI_CreateParser" , INI_CreateParser }, + { "INI_ParseFile" , INI_ParseFile }, + { "INI_SetParseStart" , INI_SetParseStart }, + { "INI_SetParseEnd" , INI_SetParseEnd }, + { "INI_SetReaders" , INI_SetReaders }, + { "INI_SetRawLine" , INI_SetRawLine }, + { "INI_DestroyParser" , INI_DestroyParser }, + { NULL, NULL }, }; diff --git a/amxmodx/textparse.h b/amxmodx/textparse.h index 10b55dd3..93d3ffc9 100644 --- a/amxmodx/textparse.h +++ b/amxmodx/textparse.h @@ -1,33 +1,13 @@ -/** -* vim: set ts=4 : -* ============================================================================= -* SourceMod -* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. -* ============================================================================= -* -* This program is free software; you can redistribute it and/or modify it under -* the terms of the GNU General Public License, version 3.0, as published by the -* Free Software Foundation. -* -* This program is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -* details. -* -* You should have received a copy of the GNU General Public License along with -* this program. If not, see . -* -* As a special exception, AlliedModders LLC gives you permission to link the -* code of this program (as well as its derivative works) to "Half-Life 2," the -* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software -* by the Valve Corporation. You must obey the GNU General Public License in -* all respects for all other code used. Additionally, AlliedModders LLC grants -* this exception to all derivative works. AlliedModders LLC defines further -* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), -* or . -* -* Version: $Id$ -*/ +/** + * vim: set ts=4 sw=4 tw=99 noet: + * + * AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). + * Copyright (C) The AMX Mod X Development Team. + * + * This software is licensed under the GNU General Public License, version 3 or higher. + * Additional exceptions apply. For full license details, see LICENSE.txt or visit: + * https://alliedmods.net/amxmodx-license + */ #ifndef _INCLUDE_TEXTPARSE_H_ #define _INCLUDE_TEXTPARSE_H_ @@ -43,37 +23,31 @@ public: ParseInfo() { parse_start = -1; - parse_end = -1; + parse_end = -1; new_section = -1; - key_value = -1; + key_value = -1; end_section = -1; - raw_line = -1; - handle = -1; - ini_format = false; + raw_line = -1; + handle = -1; } public: + + /** + * SMC CONFIG. + */ + void ReadSMC_ParseStart() { if (parse_start != -1) executeForwards(parse_start, handle); } - void ReadINI_ParseStart() - { - if (parse_start != -1) - executeForwards(parse_start, handle); - } void ReadSMC_ParseEnd(bool halted, bool failed) { if (parse_end != -1) executeForwards(parse_end, handle, halted ? 1 : 0, failed ? 1 : 0); } - void ReadINI_ParseEnd(bool halted, bool failed) - { - if (parse_end != -1) - executeForwards(parse_end, handle, halted ? 1 : 0, failed ? 1 : 0); - } SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name) { @@ -82,13 +56,6 @@ public: return SMCResult_Continue; } - SMCResult ReadINI_NewSection(const char *section, bool invalid_tokens, bool close_bracket, bool extra_tokens, unsigned int *curtok) - { - if (new_section != -1) - return (SMCResult)executeForwards(new_section, handle, section, invalid_tokens, close_bracket, extra_tokens, *curtok); - - return SMCResult_Continue; - } SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value) { @@ -97,13 +64,6 @@ public: return SMCResult_Continue; } - SMCResult ReadINI_KeyValue(const char *key, const char *value, bool invalid_tokens, bool equal_token, bool quotes, unsigned int *curtok) - { - if (key_value != -1) - return (SMCResult)executeForwards(key_value, handle, key, value, invalid_tokens, equal_token, quotes, *curtok); - - return SMCResult_Continue; - } SMCResult ReadSMC_LeavingSection(const SMCStates *states) { @@ -120,12 +80,46 @@ public: return SMCResult_Continue; } - SMCResult ReadINI_RawLine(const char *line, unsigned int lineno, unsigned int *curtok) + + + /** + * INI CONFIG. + */ + + void ReadINI_ParseStart() + { + if (parse_start != -1) + executeForwards(parse_start, handle); + } + + void ReadINI_ParseEnd(bool halted) + { + if (parse_end != -1) + executeForwards(parse_end, handle, halted ? 1 : 0); + } + + bool ReadINI_NewSection(const char *section, bool invalid_tokens, bool close_bracket, bool extra_tokens, unsigned int *curtok) + { + if (new_section != -1) + return executeForwards(new_section, handle, section, invalid_tokens, close_bracket, extra_tokens, *curtok) > 0 ? false : true; + + return true; + } + + bool ReadINI_KeyValue(const char *key, const char *value, bool invalid_tokens, bool equal_token, bool quotes, unsigned int *curtok) + { + if (key_value != -1) + return executeForwards(key_value, handle, key, value, invalid_tokens, equal_token, quotes, *curtok) > 0 ? false : true; + + return true; + } + + bool ReadINI_RawLine(const char *line, unsigned int *curtok) { if (raw_line != -1) - return (SMCResult)executeForwards(raw_line, handle, line, lineno, *curtok); + return executeForwards(raw_line, handle, line, *curtok) > 0 ? false : true; - return SMCResult_Continue; + return true; } public: int parse_start; @@ -135,7 +129,6 @@ public: int end_section; int raw_line; int handle; - bool ini_format; }; template diff --git a/plugins/include/amxmodx.inc b/plugins/include/amxmodx.inc index 36503ce0..cedbd6d6 100755 --- a/plugins/include/amxmodx.inc +++ b/plugins/include/amxmodx.inc @@ -27,6 +27,8 @@ #include #include #include +#include +#include /* Function is called just after server activation. * Good place for configuration loading, commands and cvars registration. */ diff --git a/plugins/include/textparse.inc b/plugins/include/textparse.inc deleted file mode 100644 index d7eef5ef..00000000 --- a/plugins/include/textparse.inc +++ /dev/null @@ -1,316 +0,0 @@ - -#if defined _textparse_included - #endinput -#endif -#define _textparse_included - -/** - * This parser API is entirely event based. You must hook events to receive data. - * The file format can ben either INI or SMC (also known as "SourceMod Configuration". - * SMC format is nearly identical to VDF (also known as "Valve's KeyValues format"). - * Also please note INI format is handled differently. Because more "simple" to parse, some - * event doesn't exist and callback prototype can be different. - */ - -/** - * The INI file format is defined as: - * WHITESPACE: 0x20, \n, \t, \r - * IDENTIFIER: A-Z a-z 0-9 _ - , + . $ ? / - * STRING : Any set of symbols - * - * Basic syntax is comprised of SECTIONs. - * A SECTION is defined as: - * [SECTIONNAME] - * OPTION - * OPTION - * OPTION... - * - * SECTIONNAME is an IDENTIFIER. - * OPTION can be repeated any number of times, once per line. - * OPTION is defined as one of: - * KEY = "VALUE" - * KEY = VALUE - * KEY - * Where KEY is an IDENTIFIER and VALUE is a STRING. - * - * WHITESPACE should always be omitted. - * COMMENTS should be stripped, and are defined as text occurring in: - * ; - * - * Example file below. Note that the second line is technically invalid. - * The event handler must decide whether this should be allowed. - * --FILE BELOW-- - * [gaben] - * hi = clams - * bye = "NO CLAMS" - * - * [valve] - * cannot - * maintain - * products - */ - -/** - * The SMC file format is defined as: - * WHITESPACE: 0x20, \n, \t, \r - * IDENTIFIER: Any ASCII character EXCLUDING ", {, }, ;, //, / *, or WHITESPACE. - * STRING : Any set of symbols enclosed in quotes. - * - * Note: if a STRING does not have quotes, it is parsed as an IDENTIFIER. - * - * Basic syntax is comprised of SECTIONBLOCKs. - * A SECTIONBLOCK defined as: - * - * SECTIONNAME - * { - * OPTION - * } - * - * OPTION can be repeated any number of times inside a SECTIONBLOCK. - * A new line will terminate an OPTION, but there can be more than one OPTION per line. - * OPTION is defined any of: - * "KEY" "VALUE" - * SECTIONBLOCK - * - * SECTIONNAME, KEY, VALUE, and SINGLEKEY are strings - * SECTIONNAME cannot have trailing characters if quoted, but the quotes can be optionally removed. - * If SECTIONNAME is not enclosed in quotes, the entire sectionname string is used (minus surrounding whitespace). - * If KEY is not enclosed in quotes, the key is terminated at first whitespace. - * If VALUE is not properly enclosed in quotes, the entire value string is used (minus surrounding whitespace). - * The VALUE may have inner quotes, but the key string may not. - * - * For an example, see scripting/testsuite/textparse_test.cfg - * - * WHITESPACE should be ignored. - * Comments are text occurring inside the following tokens, and should be stripped - * unless they are inside literal strings: - * ; - * // - * / * * / - */ - -enum TextParser -{ - Invalid_TextParser = 0 -}; - -/** - * Parse result directive. - */ -enum SMCResult -{ - SMCParse_Continue, /**< Continue parsing */ - SMCParse_Halt, /**< Stop parsing here */ - SMCParse_HaltFail /**< Stop parsing and return failure */ -}; - -/** - * Parse error codes. - */ -enum SMCError -{ - SMCError_Okay = 0, /**< No error */ - SMCError_StreamOpen, /**< Stream failed to open */ - SMCError_StreamError, /**< The stream died... somehow */ - SMCError_Custom, /**< A custom handler threw an error */ - SMCError_InvalidSection1, /**< A section was declared without quotes, and had extra tokens */ - SMCError_InvalidSection2, /**< A section was declared without any header */ - SMCError_InvalidSection3, /**< A section ending was declared with too many unknown tokens */ - SMCError_InvalidSection4, /**< A section ending has no matching beginning */ - SMCError_InvalidSection5, /**< A section beginning has no matching ending */ - SMCError_InvalidTokens, /**< There were too many unidentifiable strings on one line */ - SMCError_TokenOverflow, /**< The token buffer overflowed */ - SMCError_InvalidProperty1, /**< A property was declared outside of any section */ -}; - - -/** - * Creates a new text parser. - * This is used to set parse hooks. - * - * @param ini_format Sets whether INI format or SMC should be used. - * - * @return A new handle to an Text Parse structure. - */ -native TextParser:SMC_CreateParser(bool:ini_format = false); - -/** - * Disposes of a text parser. - * - * @param handle Handle to a Text Parse. - * @return True if disposed, false otherwise. - */ -native SMC_DestroyParser(&TextParser:handle); - -/** - * Parses a config file. - * - * @note If using INI format, you can expect only the following SMCError_* constants: - * SMCError_Okay, SMCError_StreamOpen and SMCError_Custom. - * - * @param handle A handle to an Text Parse structure. - * @param file A string containing the file path. - * @param line An optional by reference cell to store the last line number read. - * @param col An optional by reference cell to store the last column number read. - - * @return A SMCParseError result. - * @error Invalid or corrupt handle. - */ -native SMCError:SMC_ParseFile(TextParser:handle, const file[], &line = 0, &col = 0); - -/** - * Sets the SMC_ParseStart function of a parse handle. - * Below is the prototype of callback.: - * - * - ParseStart: - * Called when parsing is started. - * - * @param handle The Text Parse handle. - * @noreturn - * - * public SMC_ParseStart(TextParser:handle) - * - * @param handle Handle to a Text Parse. - * @param func A ParseStart callback. - * - * @noreturn - * @error Invalid or corrupt handle. - */ -native SMC_SetParseStart(TextParser:handle, const func[]); - -/** - * Sets the SMC_ParseEnd of a parse handle. - * Below is the prototype of callback.: - * - * - ParseEnd: - * Called when parsing is halted. - * - * @param handle The Text Parse handle. - * @param halted True if abnormally halted, false otherwise. - * @param failed True if parsing failed, false otherwise. - * If using INI format, this is only true when - * a callback returns SMCResult_HaltFail. - * @noreturn - * - * public SMC_ParseEnd(TextParser:handle, bool:halted, bool:failed) - * - * @param handle Handle to a Text Parse. - * @param func A ParseEnd callback.. - * - * @noreturn - * @error Invalid or corrupt handle. - */ -native SMC_SetParseEnd(TextParser:handle, const func[]); - -/** - * Sets the three main reader functions. - * Below are the different prototypes of callbacks: - * - * - NewSection: - * Called when the parser finds the end of the current section. - * - * INI: - * @param section Name of section in between the [ and ] characters. - * @param invalid_tokens True if invalid tokens were detected in the name. - * @param close_bracket True if a closing bracket was detected, false otherwise. - * @param extra_tokens True if extra tokens were detected on the line. - * @param curtok Contains current token in the line where the section name starts. - * can add to this offset when failing to point to a token. - * @return An SMCResult action to take. - * - * public SMCResult:SMC_NewSection(TextParser:handle, const section[], bool:invalid_tokens, bool:close_bracket, bool:extra_tokens, curtok) - * - * SMC: - * @note Enclosing quotes are always stripped. - * @param handle The Text Parse handle. - * @param name String containing section name. - * @return An SMCResult action to take. - * - * public SMCResult:SMC_NewSection(TextParser:handle, const name[]) - * - * - KeyValue: - * Called when the parser finds a new key/value pair. - * - * INI: - * @param handle The Text Parse handle. - * @param key Name of key. - * @param value String containing value (with quotes stripped, if any). - * @param invalid_tokens Whether or not the key contained invalid tokens. - * @param equal_token There was an '=' sign present (in case the value is missing). - * @param quotes Whether value was enclosed in quotes. - * @param curtok Contains the token index of the start of the value string. - * This can be changed when returning false. - * @return SMCResult directive. - * - * public SMCResult:SMC_KeyValue(TextParser:handle, const key[], const value[], bool:invalid_tokens, bool:equal_token, bool:quotes, curtok) - * - * SMC: - * @note Enclosing quotes are always stripped. - * - * @param handle The Text Parse handle. - * @param key String containing key name. - * @param value String containing value name. - * @return A SMCResult action to take. - * - * public SMCResult:SMC_KeyValue(TextParser:handle, const key[], const value[]) - * - * - EndSection: - * Called when the parser finds the end of the current section. - * Only with SMC format. - - * @param handle The Text Parse handle. - * - * public SMCResult:SMC_EndSection(TextParser:handle) - * - - * @param handle The Text parse handle. - * @param ns A NewSection callback. - * @param kv A KeyValue callback. - * @param es An EndSection callback. Only available for SMC config format. - * - * @noreturn - */ -native SMC_SetReaders(TextParser:smc, const nsFunc[], const kvFunc[], const esFunc[] = ""); - -/** - * Sets a raw line reader on an text parser handle. - * Below is the prototype of callback.: - * - * - RawLine: - * Called whenever a raw line is read. - * - * INI: - * @param handle The Text Parse handle. - * @param line Contents of line. - * @param lineno The line number it occurs on. - * @param curtok Pointer to optionally store failed position in string. - * @return SMCResult directive. - * - * public SMCResult:SMC_RawLine(TextParser:smc, const line[], lineno, curtok) - * - * SMC: - * @param handle The Text Parse handle. - * @param line A string containing the raw line from the file. - * @param lineno The line number it occurs on. - * @return An SMCResult action to take. - * - * public SMCResult:SMC_RawLine(TextParser:handle, const line[], lineno) - * - * @param handle Handle to an Text Parse. - * @param func A RawLine callback. - * @noreturn - */ -native SMC_SetRawLine(TextParser:handle, const func[]); - -/** - * Gets an error string for an SMCError code. - * - * @note SMCError_Okay returns false. - * @note SMCError_Custom (which is thrown on SMCParse_HaltFail) returns false. - * - * @param error The SMCParseError code. - * @param buffer A string buffer for the error (contents undefined on failure). - * @param buf_max The maximum size of the buffer. - * - * @return True on success, false otherwise. - */ -native bool:SMC_GetErrorString(SMCError:error, buffer[], buf_max); \ No newline at end of file diff --git a/plugins/include/textparse_ini.inc b/plugins/include/textparse_ini.inc new file mode 100644 index 00000000..f5891a1c --- /dev/null +++ b/plugins/include/textparse_ini.inc @@ -0,0 +1,196 @@ + +#if defined _textparse_ini_included + #endinput +#endif +#define _textparse_ini_included + +/** + * This parser API is entirely event based. You must hook events to receive data. + * The file format can ben either INI or SMC (also known as "SourceMod Configuration". + * SMC format is nearly identical to VDF (also known as "Valve's KeyValues format"). + * Also please note INI format is handled differently. Because more "simple" to parse, some + * event doesn't exist and callback prototype can be different. + */ + +/** + * The INI file format is defined as: + * WHITESPACE: 0x20, \n, \t, \r + * IDENTIFIER: A-Z a-z 0-9 _ - , + . $ ? / + * STRING : Any set of symbols + * + * Basic syntax is comprised of SECTIONs. + * A SECTION is defined as: + * [SECTIONNAME] + * OPTION + * OPTION + * OPTION... + * + * SECTIONNAME is an IDENTIFIER. + * OPTION can be repeated any number of times, once per line. + * OPTION is defined as one of: + * KEY = "VALUE" + * KEY = VALUE + * KEY + * Where KEY is an IDENTIFIER and VALUE is a STRING. + * + * WHITESPACE should always be omitted. + * COMMENTS should be stripped, and are defined as text occurring in: + * ; + * + * Example file below. Note that the second line is technically invalid. + * The event handler must decide whether this should be allowed. + * --FILE BELOW-- + * [gaben] + * hi = clams + * bye = "NO CLAMS" + * + * [valve] + * cannot + * maintain + * products + */ + +/** + * Parser invalid code. + */ +enum INIParser +{ + Invalid_INIParser = 0 +}; + +/** + * Creates a new INI parser. + * This is used to set parse hooks. + * + * @return A new handle to an INI Parse structure. + */ +native INIParser:INI_CreateParser(); + +/** + * Disposes of a INI parser. + * + * @param handle Handle to a INI Parse. + * + * @return True if disposed, false otherwise. + */ +native INI_DestroyParser(&INIParser:handle); + +/** + * Parses a INI config file. + * + * @param handle A handle to an INI Parse structure. + * @param file A string containing the file path. + * @param line An optional by reference cell to store the last line number read. + * @param col An optional by reference cell to store the last column number read. + + * @return A SMCParseError result. + * @error Invalid or corrupt handle. + */ +native bool:INI_ParseFile(INIParser:handle, const file[], &line = 0, &col = 0); + +/** + * Sets the INI_ParseStart function of a parse handle. + * + * @note Below is the prototype of callback: + * - + * Called when parsing is started. + * + * @param handle The INI Parse handle. + * + * @noreturn + * + * public OnParseStart(INIParser:handle) + * - + * @param handle Handle to a INI Parse. + * @param func A ParseStart callback. + * + * @noreturn + * @error Invalid or corrupt handle. + */ +native INI_SetParseStart(INIParser:handle, const func[]); + +/** + * Sets the INI_ParseEnd of a parse handle. + * + * @note Below is the prototype of callback: + * - + * Called when parsing is halted. + * + * @param handle The INI Parse handle. + * @param halted True if abnormally halted, false otherwise. + * + * @noreturn + * + * public OnParseEnd(INIParser:handle, bool:halted) + * - + * @param handle Handle to a INI Parse. + * @param func A ParseEnd callback.. + * + * @noreturn + * @error Invalid or corrupt handle. + */ +native INI_SetParseEnd(INIParser:handle, const func[]); + +/** + * Sets the three main reader functions. + * + * @note Below is the prototype of callback: + * - + * NewSection: + * Called when the parser finds the end of the current section. + * + * @param section Name of section in between the [ and ] characters. + * @param invalid_tokens True if invalid tokens were detected in the name. + * @param close_bracket True if a closing bracket was detected, false otherwise. + * @param extra_tokens True if extra tokens were detected on the line. + * @param curtok Contains current token in the line where the section name starts. + * can add to this offset when failing to point to a token. + * @return True to keep parsing, false otherwise. + * + * public bool:OnNewSection(INIParser:handle, const section[], bool:invalid_tokens, bool:close_bracket, bool:extra_tokens, curtok) + * + * KeyValue: + * Called when the parser finds a new key/value pair. + * + * @param handle The INI Parse handle. + * @param key Name of key. + * @param value String containing value (with quotes stripped, if any). + * @param invalid_tokens Whether or not the key contained invalid tokens. + * @param equal_token There was an '=' sign present (in case the value is missing). + * @param quotes Whether value was enclosed in quotes. + * @param curtok Contains the token index of the start of the value string. + * This can be changed when returning false. + * @return True to keep parsing, false otherwise. + * + * public bool:OnKeyValue(INIParser:handle, const key[], const value[], bool:invalid_tokens, bool:equal_token, bool:quotes, curtok) + * - + * @param handle The INI parse handle. + * @param kv A KeyValue callback. + * @param ns An optional NewSection callback. + * + * @noreturn + */ +native INI_SetReaders(INIParser:smc, const kvFunc[], const nsFunc[] = "" ); + +/** + * Sets a raw line reader on an INI parser handle. + * + * @note Below is the prototype of callback: + * - + * Called whenever a raw line is read. + * + * @param handle The INI Parse handle. + * @param line Contents of line. + * @param lineno The line number it occurs on. + * @param curtok Pointer to optionally store failed position in string. + * + * @return True to keep parsing, false otherwise. + * + * public bool:OnRawLine(INIParser:smc, const line[], lineno, curtok) + * + * @param handle Handle to an INI Parse. + * @param func A RawLine callback. + * + * @noreturn + */ +native INI_SetRawLine(INIParser:handle, const func[]); diff --git a/plugins/include/textparse_smc.inc b/plugins/include/textparse_smc.inc new file mode 100644 index 00000000..3b76102d --- /dev/null +++ b/plugins/include/textparse_smc.inc @@ -0,0 +1,242 @@ + +#if defined _textparse_smc_included + #endinput +#endif +#define _textparse_smc_included + +/** + * This parser API is entirely event based. You must hook events to receive data. + * The file format can ben either INI or SMC (also known as "SourceMod Configuration". + * SMC format is nearly identical to VDF (also known as "Valve's KeyValues format"). + * Also please note INI format is handled differently. Because more "simple" to parse, some + * event doesn't exist and callback prototype can be different. + */ + +/** + * The SMC file format is defined as: + * WHITESPACE: 0x20, \n, \t, \r + * IDENTIFIER: Any ASCII character EXCLUDING ", {, }, ;, //, / *, or WHITESPACE. + * STRING : Any set of symbols enclosed in quotes. + * + * Note: if a STRING does not have quotes, it is parsed as an IDENTIFIER. + * + * Basic syntax is comprised of SECTIONBLOCKs. + * A SECTIONBLOCK defined as: + * + * SECTIONNAME + * { + * OPTION + * } + * + * OPTION can be repeated any number of times inside a SECTIONBLOCK. + * A new line will terminate an OPTION, but there can be more than one OPTION per line. + * OPTION is defined any of: + * "KEY" "VALUE" + * SECTIONBLOCK + * + * SECTIONNAME, KEY, VALUE, and SINGLEKEY are strings + * SECTIONNAME cannot have trailing characters if quoted, but the quotes can be optionally removed. + * If SECTIONNAME is not enclosed in quotes, the entire sectionname string is used (minus surrounding whitespace). + * If KEY is not enclosed in quotes, the key is terminated at first whitespace. + * If VALUE is not properly enclosed in quotes, the entire value string is used (minus surrounding whitespace). + * The VALUE may have inner quotes, but the key string may not. + * + * For an example, see scripting/testsuite/textparse_test.cfg + * + * WHITESPACE should be ignored. + * Comments are text occurring inside the following tokens, and should be stripped + * unless they are inside literal strings: + * ; + * // + * / * * / + */ + +/** + * Parser invalid code. + */ +enum SMCParser +{ + Invalid_SMCParser = 0 +}; + +/** + * Parse result directive. + */ +enum SMCResult +{ + SMCParse_Continue, /* Continue parsing */ + SMCParse_Halt, /* Stop parsing here */ + SMCParse_HaltFail /* Stop parsing and return failure */ +}; + +/** + * Parse error codes. + */ +enum SMCError +{ + SMCError_Okay = 0, /* No error */ + SMCError_StreamOpen, /* Stream failed to open */ + SMCError_StreamError, /* The stream died... somehow */ + SMCError_Custom, /* A custom handler threw an error */ + SMCError_InvalidSection1, /* A section was declared without quotes, and had extra tokens */ + SMCError_InvalidSection2, /* A section was declared without any header */ + SMCError_InvalidSection3, /* A section ending was declared with too many unknown tokens */ + SMCError_InvalidSection4, /* A section ending has no matching beginning */ + SMCError_InvalidSection5, /* A section beginning has no matching ending */ + SMCError_InvalidTokens, /* There were too many unidentifiable strings on one line */ + SMCError_TokenOverflow, /* The token buffer overflowed */ + SMCError_InvalidProperty1, /* A property was declared outside of any section */ +}; + +/** + * Creates a new SMC parser. + * This is used to set parse hooks. + * + * @return A new handle to an SMC Parse structure. + */ +native SMCParser:SMC_CreateParser(); + +/** + * Disposes of a SMC parser. + * + * @param handle Handle to a SMC Parse + * + * @return True if disposed, false otherwise. + */ +native SMC_DestroyParser(&SMCParser:handle); + +/** + * Parses a config file. + * + * @param handle A handle to an SMC Parse structure. + * @param file A string containing the file path. + * @param line An optional by reference cell to store the last line number read. + * @param col An optional by reference cell to store the last column number read. + * + * @return A SMCParseError result. + * @error Invalid or corrupt handle. + */ +native SMCError:SMC_ParseFile(SMCParser:handle, const file[], &line = 0, &col = 0); + +/** + * Sets the SMC_ParseStart function of a parse handle. + * + * @note Below is the prototype of callback: + * - + * Called when parsing is started. + * + * @param handle The Text Parse handle. + * + * @noreturn + * + * public OnParseStart(SMCParser:handle) + * - + * @param handle Handle to a Text Parse. + * @param func A ParseStart callback. + * + * @noreturn + * @error Invalid or corrupt handle. + */ +native SMC_SetParseStart(SMCParser:handle, const func[]); + +/** + * Sets the SMC_ParseEnd of a parse handle. + * + * @note Below is the prototype of callback: + * - + * Called when parsing is halted. + * + * @param handle The Text Parse handle. + * @param halted True if abnormally halted, false otherwise. + * @param failed True if parsing failed, false otherwise. + * + * @noreturn + * + * public OnParseEnd(SMCParser:handle, bool:halted, bool:failed) + * - + * @param handle Handle to a Text Parse. + * @param func A ParseEnd callback.. + * + * @noreturn + * @error Invalid or corrupt handle. + */ +native SMC_SetParseEnd(SMCParser:handle, const func[]); + +/** + * Sets the three main reader functions. + * + * @note Enclosing quotes are always stripped. + * @note Below is the prototype of callbacks: + * - + * NewSection: + * Called when the parser finds the end of the current section. + * + * @param handle The Text Parse handle. + * @param name String containing section name. + * + * @return An SMCResult action to take. + * + * public SMCResult:OnNewSection(SMCParser:handle, const name[]) + * + * KeyValue: + * Called when the parser finds a new key/value pair. + * + * @param handle The Text Parse handle. + * @param key String containing key name. + * @param value String containing value name. + * + * @return A SMCResult action to take. + * + * public SMCResult:OnKeyValue(SMCParser:handle, const key[], const value[]) + * + * EndSection: + * Called when the parser finds the end of the current section. + * + * @param handle The Text Parse handle. + * + * public SMCResult:OnEndSection(SMCParser:handle) + * - + * @param handle The Text parse handle. + * @param kv A KeyValue callback. + * @param ns An optional NewSection callback. + * @param es An optional EndSection callback. + * + * @noreturn + */ +native SMC_SetReaders(SMCParser:smc, const kvFunc[], const nsFunc[] = "", const esFunc[] = ""); + +/** + * Sets a raw line reader on an text parser handle. + * + * @note Below is the prototype of callbacks: + * - + * Called whenever a raw line is read. + * + * @param handle The Text Parse handle. + * @param line A string containing the raw line from the file. + * @param lineno The line number it occurs on. + * + * @return An SMCResult action to take. + * + * public SMCResult:SMC_RawLine(SMCParser:handle, const line[], lineno) + * - + * @param handle Handle to an Text Parse. + * @param func A RawLine callback. + * + * @noreturn + */ +native SMC_SetRawLine(SMCParser:handle, const func[]); + +/** + * Gets an error string for an SMCError code. + * + * @note SMCError_Okay returns false. + * @note SMCError_Custom (which is thrown on SMCParse_HaltFail) returns false. + * + * @param error The SMCParseError code. + * @param buffer A string buffer for the error (contents undefined on failure). + * @param buf_max The maximum size of the buffer. + * + * @return True on success, false otherwise. + */ +native bool:SMC_GetErrorString(SMCError:error, buffer[], buf_max); diff --git a/plugins/testsuite/textparse_test.sma b/plugins/testsuite/textparse_test.sma index 297aeeb7..0bb37d28 100644 --- a/plugins/testsuite/textparse_test.sma +++ b/plugins/testsuite/textparse_test.sma @@ -1,12 +1,25 @@ +/** + * vim: set ts=4 sw=4 tw=99 noet: + * + * AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). + * Copyright (C) The AMX Mod X Development Team. + * + * This software is licensed under the GNU General Public License, version 3 or higher. + * Additional exceptions apply. For full license details, see LICENSE.txt or visit: + * https://alliedmods.net/amxmodx-license + */ + #include -#include new SuccessCount; new Trie:ExpectedKVData; +new bool:Debug; public plugin_init() { register_concmd("textparse", "ConsoleCommand_TextParse"); + + Debug = !!(plugin_flags() & AMX_FLAG_DEBUG); } public ConsoleCommand_TextParse() @@ -52,9 +65,9 @@ InitializeTextParseSMC() new const expectedKeyValueCount = TrieGetSize(ExpectedKVData); new const expectedLineCount = file_size(configFile, .flag = 1) - 1; - new TextParser:parser = SMC_CreateParser(); + new SMCParser:parser = SMC_CreateParser(); - SMC_SetReaders(parser, "ReadCore_NewSection", "ReadCore_KeyValue", "ReadCore_EndSection"); + SMC_SetReaders(parser, "ReadCore_KeyValue", "ReadCore_NewSection", "ReadCore_EndSection"); SMC_SetParseStart(parser, "ReadCore_ParseStart"); SMC_SetRawLine(parser, "ReadCore_CurrentLine"); SMC_SetParseEnd(parser, "ReadCore_ParseEnd"); @@ -80,18 +93,22 @@ InitializeTextParseSMC() SuccessCount = 0; } -public ReadCore_ParseStart(TextParser:handle) +public ReadCore_ParseStart(SMCParser:handle) { + Debug && server_print("ReadCore_ParseStart"); ++SuccessCount; } -public ReadCore_NewSection(TextParser:handle, const name[]) +public ReadCore_NewSection(SMCParser:handle, const name[]) { + Debug && server_print("^tReadCore_NewSection - %s", name); ++SuccessCount; } -public ReadCore_KeyValue(TextParser:handle, const key[], const value[]) +public ReadCore_KeyValue(SMCParser:handle, const key[], const value[]) { + Debug && server_print("^t^tReadCore_KeyValue - %-32s %s", key, value); + new buffer[128]; if (TrieGetString(ExpectedKVData, key, buffer, charsmax(buffer)) && equal(value, buffer)) { @@ -99,18 +116,21 @@ public ReadCore_KeyValue(TextParser:handle, const key[], const value[]) } } -public ReadCore_EndSection(TextParser:handle) +public ReadCore_EndSection(SMCParser:handle) { + Debug && server_print("^tReadCore_EndSection"); ++SuccessCount; } -public ReadCore_CurrentLine(TextParser:handle, const line[], lineno) +public ReadCore_CurrentLine(SMCParser:handle, const line[], lineno) { - ++SuccessCount; + //Debug && server_print("^t^tReadCore_CurrentLine - %s", line); + ++SuccessCount; } -public ReadCore_ParseEnd(TextParser:handle, bool:halted, bool:failed) -{ +public ReadCore_ParseEnd(SMCParser:handle, bool:halted, bool:failed) +{ + Debug &&server_print("ReadCore_ParseEnd - halted: %s, failed: %s", halted ? "yes" : "no", failed ? "yes" : "no"); ++SuccessCount; } @@ -151,20 +171,19 @@ public InitializeTextParseINI() new const expectedKeyValueCount = TrieGetSize(ExpectedKVData) - expectedSectionCount; new const expectedLineCount = TrieGetSize(ExpectedKVData); // This doesn't include blanck/comments line. - new TextParser:parser = SMC_CreateParser(.ini_format = true); + new INIParser:parser = INI_CreateParser(); - SMC_SetReaders(parser, "ReadCSDM_NewSection", "ReadCSDM_KeyValue"); - SMC_SetParseStart(parser, "ReadCSDM_ParseStart"); - SMC_SetRawLine(parser, "ReadCSDM_CurrentLine"); - SMC_SetParseEnd(parser, "ReadCSDM_ParseEnd"); + INI_SetReaders(parser, "ReadCSDM_KeyValue", "ReadCSDM_NewSection"); + INI_SetParseStart(parser, "ReadCSDM_ParseStart"); + INI_SetRawLine(parser, "ReadCSDM_CurrentLine"); + INI_SetParseEnd(parser, "ReadCSDM_ParseEnd"); new line, col; - new SMCError:err = SMC_ParseFile(parser, configFile, line, col); + new bool:result = INI_ParseFile(parser, configFile, line, col); - if (err != SMCError_Okay) + if (!result) { - new buffer[64]; - server_print("Error: %s", SMC_GetErrorString(err, buffer, charsmax(buffer)) ? buffer : "Fatal parse error"); + server_print("^tFatal parse error"); } if (line == expectedLineCount + 1) @@ -174,17 +193,20 @@ public InitializeTextParseINI() server_print("^tTests successful: %d/%d", SuccessCount, expectedStartEndCount + expectedSectionCount + expectedKeyValueCount + expectedLineCount + 1); - SMC_DestroyParser(parser); + INI_DestroyParser(parser); TrieDestroy(ExpectedKVData); } -public ReadCSDM_ParseStart(TextParser:handle) +public ReadCSDM_ParseStart(INIParser:handle) { + Debug && server_print("ReadCSDM_ParseStart"); ++SuccessCount; } -public ReadCSDM_NewSection(TextParser:handle, const section[], bool:invalid_tokens, bool:close_bracket, bool:extra_tokens, curtok) +public ReadCSDM_NewSection(INIParser:handle, const section[], bool:invalid_tokens, bool:close_bracket, bool:extra_tokens, curtok) { + Debug && server_print("^tReadCSDM_NewSection - [%s]", section); + if (TrieKeyExists(ExpectedKVData, section)) { if ((equal(section, "secondary") && !extra_tokens) || @@ -197,8 +219,10 @@ public ReadCSDM_NewSection(TextParser:handle, const section[], bool:invalid_toke } } -public ReadCSDM_KeyValue(TextParser:handle, const key[], const value[], bool:invalid_tokens, bool:equal_token, bool:quotes, curtok) +public ReadCSDM_KeyValue(INIParser:handle, const key[], const value[], bool:invalid_tokens, bool:equal_token, bool:quotes, curtok) { + Debug && server_print("^t^tReadCSDM_KeyValue - %-32s %s", key, value); + new buffer[128]; if (TrieGetString(ExpectedKVData, key, buffer, charsmax(buffer)) && equal(value, buffer)) { @@ -211,12 +235,14 @@ public ReadCSDM_KeyValue(TextParser:handle, const key[], const value[], bool:inv } } -public ReadCSDM_CurrentLine(TextParser:handle, const line[], lineno, curtok) +public ReadCSDM_CurrentLine(INIParser:handle, const line[], curtok) { - ++SuccessCount; + //Debug && server_print("^t^tReadCSDM_CurrentLine - %s", line); + ++SuccessCount; } -public ReadCSDM_ParseEnd(TextParser:handle, bool:halted, bool:failed) +public ReadCSDM_ParseEnd(INIParser:handle, bool:halted, bool:failed) { + Debug && server_print("ReadCSDM_ParseStart"); ++SuccessCount; } \ No newline at end of file diff --git a/public/ITextParsers.h b/public/ITextParsers.h index a8ef31b4..2d3dfc5e 100644 --- a/public/ITextParsers.h +++ b/public/ITextParsers.h @@ -1,32 +1,12 @@ -/** - * vim: set ts=4 : - * ============================================================================= - * SourceMod - * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. - * ============================================================================= +/** + * vim: set ts=4 sw=4 tw=99 noet: * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License, version 3.0, as published by the - * Free Software Foundation. - * - * 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. + * AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). + * Copyright (C) The AMX Mod X Development Team. * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see . - * - * As a special exception, AlliedModders LLC gives you permission to link the - * code of this program (as well as its derivative works) to "Half-Life 2," the - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software - * by the Valve Corporation. You must obey the GNU General Public License in - * all respects for all other code used. Additionally, AlliedModders LLC grants - * this exception to all derivative works. AlliedModders LLC defines further - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), - * or . - * - * Version: $Id$ + * This software is licensed under the GNU General Public License, version 3 or higher. + * Additional exceptions apply. For full license details, see LICENSE.txt or visit: + * https://alliedmods.net/amxmodx-license */ #ifndef _INCLUDE_SOURCEMOD_TEXTPARSERS_INTERFACE_H_ @@ -81,35 +61,6 @@ namespace SourceMod * products */ - /** - * @brief Lists actions to take when an SMC parse hook is done. - */ - enum SMCResult - { - SMCResult_Continue, /**< Continue parsing */ - SMCResult_Halt, /**< Stop parsing here */ - SMCResult_HaltFail /**< Stop parsing and return SMCError_Custom */ - }; - - /** - * @brief Lists error codes possible from parsing an SMC file. - */ - enum SMCError - { - SMCError_Okay = 0, /**< No error */ - SMCError_StreamOpen, /**< Stream failed to open */ - SMCError_StreamError, /**< The stream died... somehow */ - SMCError_Custom, /**< A custom handler threw an error */ - SMCError_InvalidSection1, /**< A section was declared without quotes, and had extra tokens */ - SMCError_InvalidSection2, /**< A section was declared without any header */ - SMCError_InvalidSection3, /**< A section ending was declared with too many unknown tokens */ - SMCError_InvalidSection4, /**< A section ending has no matching beginning */ - SMCError_InvalidSection5, /**< A section beginning has no matching ending */ - SMCError_InvalidTokens, /**< There were too many unidentifiable strings on one line */ - SMCError_TokenOverflow, /**< The token buffer overflowed */ - SMCError_InvalidProperty1, /**< A property was declared outside of any section */ - }; - /** * @brief Contains parse events for INI files. */ @@ -135,9 +86,8 @@ namespace SourceMod * @brief Called when ending parsing. * * @param halted True if abnormally halted, false otherwise. - * @param failed True if parsing failed, false otherwise. */ - virtual void ReadINI_ParseEnd(bool halted, bool failed) + virtual void ReadINI_ParseEnd(bool halted) { } @@ -150,11 +100,11 @@ namespace SourceMod * @param extra_tokens True if extra tokens were detected on the line. * @param curtok Contains current token in the line where the section name starts. * You can add to this offset when failing to point to a token. - * @return SMCResult directive. + * @return True to keep parsing, false otherwise. */ - virtual SMCResult ReadINI_NewSection(const char *section, bool invalid_tokens, bool close_bracket, bool extra_tokens, unsigned int *curtok) + virtual bool ReadINI_NewSection(const char *section, bool invalid_tokens, bool close_bracket, bool extra_tokens, unsigned int *curtok) { - return SMCResult_Continue; + return true; } /** @@ -167,24 +117,24 @@ namespace SourceMod * @param quotes Whether value was enclosed in quotes. * @param curtok Contains the token index of the start of the value string. * This can be changed when returning false. - * @return SMCResult directive. + * @return True to keep parsing, false otherwise. */ - virtual SMCResult ReadINI_KeyValue(const char *key, const char *value, bool invalid_tokens, bool equal_token, bool quotes, unsigned int *curtok) + virtual bool ReadINI_KeyValue(const char *key, const char *value, bool invalid_tokens, bool equal_token, bool quotes, unsigned int *curtok) { - return SMCResult_Continue; + return true; } /** * @brief Called after a line has been preprocessed, if it has text. * * @param line Contents of line. - * @param lineno The line number it occurs on. * @param curtok Pointer to optionally store failed position in string. - * @return SMCResult directive. + * + * @return True to keep parsing, false otherwise. */ - virtual SMCResult ReadINI_RawLine(const char *line, unsigned int lineno, unsigned int *curtok) + virtual bool ReadINI_RawLine(const char *line, unsigned int *curtok) { - return SMCResult_Continue; + return true; } }; @@ -227,6 +177,35 @@ namespace SourceMod * // * / * */ + /** + * @brief Lists actions to take when an SMC parse hook is done. + */ + enum SMCResult + { + SMCResult_Continue, /**< Continue parsing */ + SMCResult_Halt, /**< Stop parsing here */ + SMCResult_HaltFail /**< Stop parsing and return SMCError_Custom */ + }; + + /** + * @brief Lists error codes possible from parsing an SMC file. + */ + enum SMCError + { + SMCError_Okay = 0, /**< No error */ + SMCError_StreamOpen, /**< Stream failed to open */ + SMCError_StreamError, /**< The stream died... somehow */ + SMCError_Custom, /**< A custom handler threw an error */ + SMCError_InvalidSection1, /**< A section was declared without quotes, and had extra tokens */ + SMCError_InvalidSection2, /**< A section was declared without any header */ + SMCError_InvalidSection3, /**< A section ending was declared with too many unknown tokens */ + SMCError_InvalidSection4, /**< A section ending has no matching beginning */ + SMCError_InvalidSection5, /**< A section beginning has no matching ending */ + SMCError_InvalidTokens, /**< There were too many unidentifiable strings on one line */ + SMCError_TokenOverflow, /**< The token buffer overflowed */ + SMCError_InvalidProperty1, /**< A property was declared outside of any section */ + }; + /** * @brief States for line/column */ @@ -350,9 +329,9 @@ namespace SourceMod * @param ini_listener Event handler for reading file. * @param line If non-NULL, will contain last line parsed (0 if file could not be opened). * @param col If non-NULL, will contain last column parsed (undefined if file could not be opened). - * @return An SMCError result code. + * @return True if parsing succeeded, false if file couldn't be opened or there was a syntax error. */ - virtual SMCError ParseFile_INI(const char *file, + virtual bool ParseFile_INI(const char *file, ITextListener_INI *ini_listener, unsigned int *line, unsigned int *col) =0; From 7317f1d233d6f0cea32f403b5a1d8e3ba711960c Mon Sep 17 00:00:00 2001 From: Arkshine Date: Sun, 3 Aug 2014 23:49:53 +0200 Subject: [PATCH 58/71] Update PackageScript. --- support/PackageScript | 2 ++ 1 file changed, 2 insertions(+) diff --git a/support/PackageScript b/support/PackageScript index 5185c646..8fa1e99f 100644 --- a/support/PackageScript +++ b/support/PackageScript @@ -292,6 +292,8 @@ scripting_files = [ 'include/newmenus.inc', 'include/sorting.inc', 'include/sqlx.inc', + 'include/textparse_ini.inc', + 'include/textparse_smc.inc', 'include/time.inc', 'include/vector.inc', ] From 287cc1a0e8e6a88dbdfeb36c9e6bbd59f5b0d312 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Sun, 3 Aug 2014 23:54:48 +0200 Subject: [PATCH 59/71] Update MakeFile. --- amxmodx/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/amxmodx/Makefile b/amxmodx/Makefile index fc136574..10aae948 100755 --- a/amxmodx/Makefile +++ b/amxmodx/Makefile @@ -21,7 +21,8 @@ OBJECTS = meta_api.cpp CFile.cpp CVault.cpp vault.cpp float.cpp file.cpp modules CMenu.cpp util.cpp amx.cpp amxdbg.cpp natives.cpp newmenus.cpp debugger.cpp \ optimizer.cpp format.cpp messages.cpp libraries.cpp vector.cpp sorting.cpp \ nongpl_matches.cpp CFlagManager.cpp datastructs.cpp \ - trie_natives.cpp CDataPack.cpp datapacks.cpp stackstructs.cpp + trie_natives.cpp CDataPack.cpp datapacks.cpp stackstructs.cpp \ + CTextParsers.cpp textparse.cpp \ ############################################## ### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### From b97093a778dc5cf1a17bd7e22ed88e3699246cec Mon Sep 17 00:00:00 2001 From: Arkshine Date: Mon, 4 Aug 2014 00:03:16 +0200 Subject: [PATCH 60/71] Add more debug in plugin. --- plugins/testsuite/textparse_test.sma | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/testsuite/textparse_test.sma b/plugins/testsuite/textparse_test.sma index 0bb37d28..92f54912 100644 --- a/plugins/testsuite/textparse_test.sma +++ b/plugins/testsuite/textparse_test.sma @@ -205,7 +205,7 @@ public ReadCSDM_ParseStart(INIParser:handle) public ReadCSDM_NewSection(INIParser:handle, const section[], bool:invalid_tokens, bool:close_bracket, bool:extra_tokens, curtok) { - Debug && server_print("^tReadCSDM_NewSection - [%s]", section); + Debug && server_print("^tReadCSDM_NewSection - [%s] (invalid_tokens: '%s', close_bracked: '%s', extra_tokens: '%s')", section, invalid_tokens ? "yes" : "no", close_bracket ? "yes" : "no", extra_tokens ? "yes" : "no"); if (TrieKeyExists(ExpectedKVData, section)) { From 2d07189e38b3225f1112bc88a244882b2fa61124 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Mon, 4 Aug 2014 01:23:33 +0200 Subject: [PATCH 61/71] Fix few issues. --- amxmodx/textparse.h | 6 +++--- plugins/testsuite/textparse_test.sma | 15 ++++++++++----- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/amxmodx/textparse.h b/amxmodx/textparse.h index 93d3ffc9..0d844f30 100644 --- a/amxmodx/textparse.h +++ b/amxmodx/textparse.h @@ -101,7 +101,7 @@ public: bool ReadINI_NewSection(const char *section, bool invalid_tokens, bool close_bracket, bool extra_tokens, unsigned int *curtok) { if (new_section != -1) - return executeForwards(new_section, handle, section, invalid_tokens, close_bracket, extra_tokens, *curtok) > 0 ? false : true; + return executeForwards(new_section, handle, section, invalid_tokens, close_bracket, extra_tokens, *curtok) > 0 ? true : false; return true; } @@ -109,7 +109,7 @@ public: bool ReadINI_KeyValue(const char *key, const char *value, bool invalid_tokens, bool equal_token, bool quotes, unsigned int *curtok) { if (key_value != -1) - return executeForwards(key_value, handle, key, value, invalid_tokens, equal_token, quotes, *curtok) > 0 ? false : true; + return executeForwards(key_value, handle, key, value, invalid_tokens, equal_token, quotes, *curtok) > 0 ? true : false; return true; } @@ -117,7 +117,7 @@ public: bool ReadINI_RawLine(const char *line, unsigned int *curtok) { if (raw_line != -1) - return executeForwards(raw_line, handle, line, *curtok) > 0 ? false : true; + return executeForwards(raw_line, handle, line, *curtok) > 0 ? true : false; return true; } diff --git a/plugins/testsuite/textparse_test.sma b/plugins/testsuite/textparse_test.sma index 92f54912..64e6ce82 100644 --- a/plugins/testsuite/textparse_test.sma +++ b/plugins/testsuite/textparse_test.sma @@ -212,33 +212,38 @@ public ReadCSDM_NewSection(INIParser:handle, const section[], bool:invalid_token if ((equal(section, "secondary") && !extra_tokens) || (equal(section, "botsecondary") && close_bracket)) { - return; + return true; } ++SuccessCount; } + + return true; } -public ReadCSDM_KeyValue(INIParser:handle, const key[], const value[], bool:invalid_tokens, bool:equal_token, bool:quotes, curtok) +public bool:ReadCSDM_KeyValue(INIParser:handle, const key[], const value[], bool:invalid_tokens, bool:equal_token, bool:quotes, curtok) { Debug && server_print("^t^tReadCSDM_KeyValue - %-32s %s", key, value); new buffer[128]; if (TrieGetString(ExpectedKVData, key, buffer, charsmax(buffer)) && equal(value, buffer)) { - if (equal(value, "colors") && !quotes) + if (equal(key, "colors") && !quotes) { - return; + return true; } ++SuccessCount; } + + return true; } -public ReadCSDM_CurrentLine(INIParser:handle, const line[], curtok) +public bool:ReadCSDM_CurrentLine(INIParser:handle, const line[], curtok) { //Debug && server_print("^t^tReadCSDM_CurrentLine - %s", line); ++SuccessCount; + return true; } public ReadCSDM_ParseEnd(INIParser:handle, bool:halted, bool:failed) From 4b652198f080577c9fdc0ef0bdfc4e4103655310 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Mon, 4 Aug 2014 01:42:19 +0200 Subject: [PATCH 62/71] Fix compilation. --- amxmodx/CTextParsers.cpp | 3 ++- amxmodx/textparse.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/amxmodx/CTextParsers.cpp b/amxmodx/CTextParsers.cpp index 4e79cc87..5234fed8 100644 --- a/amxmodx/CTextParsers.cpp +++ b/amxmodx/CTextParsers.cpp @@ -14,12 +14,13 @@ /* #include #include -#include #include #include #include #include */ +#include + TextParsers g_TextParser; ITextParsers *textparsers = &g_TextParser; diff --git a/amxmodx/textparse.cpp b/amxmodx/textparse.cpp index e72efed0..f272b6ac 100644 --- a/amxmodx/textparse.cpp +++ b/amxmodx/textparse.cpp @@ -238,7 +238,7 @@ static cell AMX_NATIVE_CALL INI_ParseFile(AMX *amx, cell *params) int length; const char *file = build_pathname("%s", get_amxstring(amx, params[2], 0, length)); - size_t line, col; + unsigned int line, col; bool result = textparsers->ParseFile_INI(file, p, &line, &col); *get_amxaddr(amx, params[3]) = line; From 3369f6d115e9a3d1bbe2fbf4fdd1e9d247a53202 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Wed, 6 Aug 2014 09:24:09 +0200 Subject: [PATCH 63/71] Update license in pawn includes and add them in project files. --- amxmodx/msvc10/amxmodx_mm.vcxproj | 2 ++ amxmodx/msvc10/amxmodx_mm.vcxproj.filters | 16 +++++++++++----- plugins/include/textparse_ini.inc | 12 ++++++++++++ plugins/include/textparse_smc.inc | 12 ++++++++++++ 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/amxmodx/msvc10/amxmodx_mm.vcxproj b/amxmodx/msvc10/amxmodx_mm.vcxproj index 1d8eec87..43b7cb13 100644 --- a/amxmodx/msvc10/amxmodx_mm.vcxproj +++ b/amxmodx/msvc10/amxmodx_mm.vcxproj @@ -405,6 +405,8 @@ + + diff --git a/amxmodx/msvc10/amxmodx_mm.vcxproj.filters b/amxmodx/msvc10/amxmodx_mm.vcxproj.filters index bff2487d..3b1d4395 100644 --- a/amxmodx/msvc10/amxmodx_mm.vcxproj.filters +++ b/amxmodx/msvc10/amxmodx_mm.vcxproj.filters @@ -173,14 +173,14 @@ Source Files - + Source Files - + Source Files - + Source Files @@ -325,10 +325,10 @@ Header Files - + Header Files - + @@ -417,6 +417,12 @@ Pawn Includes + + Pawn Includes + + + Pawn Includes + diff --git a/plugins/include/textparse_ini.inc b/plugins/include/textparse_ini.inc index f5891a1c..699f6537 100644 --- a/plugins/include/textparse_ini.inc +++ b/plugins/include/textparse_ini.inc @@ -1,3 +1,15 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// INI Parser Functions +// #if defined _textparse_ini_included #endinput diff --git a/plugins/include/textparse_smc.inc b/plugins/include/textparse_smc.inc index 3b76102d..9e8ea983 100644 --- a/plugins/include/textparse_smc.inc +++ b/plugins/include/textparse_smc.inc @@ -1,3 +1,15 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// SMC Parser Functions +// #if defined _textparse_smc_included #endinput From fb4d05fd60be3e660f638e330e97f7e04679cbc8 Mon Sep 17 00:00:00 2001 From: Vincent Herbet Date: Wed, 6 Aug 2014 19:39:19 +0200 Subject: [PATCH 64/71] Fix documentation. --- plugins/include/geoip.inc | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/plugins/include/geoip.inc b/plugins/include/geoip.inc index 19ea3746..15f047e7 100755 --- a/plugins/include/geoip.inc +++ b/plugins/include/geoip.inc @@ -97,15 +97,12 @@ native geoip_code3(const ip[], result[4]); native geoip_country(const ip[], result[], len, id = -1); - -/** - * The following natives require GeoIP City database, which can be retrieved from: - * http://dev.maxmind.com/geoip/geoip2/geolite2/ (MaxMind DB binary) - */ - /** * Look up the full city name for the given IP address. * + * @note This native requires GeoIP City database, which can be retrieved from: + * http://dev.maxmind.com/geoip/geoip2/geolite2/ (MaxMind DB binary) + * * @param ip The IP address to look up. * @param result The result of the geoip look up. * @param len The maximum length of the result buffer. @@ -123,6 +120,9 @@ native geoip_city(const ip[], result[], len, id = -1); * Look up the region/state code for the given IP address. * e.g. "US-OH", "DE-HH", IT-82, "FR-U", etc. * + * @note This native requires GeoIP City database, which can be retrieved from: + * http://dev.maxmind.com/geoip/geoip2/geolite2/ (MaxMind DB binary) + * * @param ip The IP address to look up. * @param result The result of the geoip look up. * @param len The maximum length of the result buffer. @@ -134,6 +134,9 @@ native geoip_region_code(const ip[], result[], len); /** * Look up the full region/state name for the given IP address. * + * @note This native requires GeoIP City database, which can be retrieved from: + * http://dev.maxmind.com/geoip/geoip2/geolite2/ (MaxMind DB binary) + * * @param ip The IP address to look up. * @param result The result of the geoip look up. * @param len The maximum length of the result buffer. @@ -151,6 +154,9 @@ native geoip_region_name(const ip[], result[], len, id = -1); * Look up the full time zone for the given IP address. * e.g. America/Los_Angeles, Europe/Paris. * + * @note This native requires GeoIP City database, which can be retrieved from: + * http://dev.maxmind.com/geoip/geoip2/geolite2/ (MaxMind DB binary) + * * @param ip The IP address to look up. * @param result The result of the geoip look up. * @param len The maximum length of the result buffer. @@ -162,6 +168,9 @@ native geoip_timezone(const ip[], result[], len); /** * Look up the city's latitude for the given IP address. * + * @note This native requires GeoIP City database, which can be retrieved from: + * http://dev.maxmind.com/geoip/geoip2/geolite2/ (MaxMind DB binary) + * * @param ip The IP address to look up. * * @return The result of the geoip look up, 0 if latitude is not found. @@ -171,6 +180,9 @@ native Float:geoip_latitude(const ip[]); /** * Look up the city's longitude for the given IP address. * + * @note This native requires GeoIP City database, which can be retrieved from: + * http://dev.maxmind.com/geoip/geoip2/geolite2/ (MaxMind DB binary) + * * @param ip The IP address to look up. * * @return The result of the geoip look up, 0 if longitude is not found. @@ -180,6 +192,9 @@ native Float:geoip_longitude(const ip[]); /** * Calculate the distance between geographical coordinates, latitude and longitude. * + * @note This native requires GeoIP City database, which can be retrieved from: + * http://dev.maxmind.com/geoip/geoip2/geolite2/ (MaxMind DB binary) + * * @param lat1 The first IP latitude. * @param lon1 The first IP longitude. * @param lat2 The second IP latitude. @@ -196,6 +211,8 @@ native Float:geoip_distance(Float:lat1, Float:lon1, Float:lat2, Float:lon2, syst /** * Look up the continent code for a given IP address. * + * @note This native requires GeoIP City database, which can be retrieved from: + * http://dev.maxmind.com/geoip/geoip2/geolite2/ (MaxMind DB binary) * @note The code can be retrieved as integer (See CONTINENT_* constants.) or string (2 characters). * @note Possible continent codes are AF, AN, AS, EU, NA, OC, SA for * Africa(1), Antarctica(2), Asia(3), Europe(4), North America(5), Oceania(6), South America(7). @@ -207,7 +224,7 @@ native Float:geoip_distance(Float:lat1, Float:lon1, Float:lat2, Float:lon2, syst */ enum Continent { - CONTINENT_UNKNOW = 0, + CONTINENT_UNKNOWN = 0, CONTINENT_AFRICA, CONTINENT_ANTARCTICA, CONTINENT_ASIA, @@ -221,6 +238,9 @@ native Continent:geoip_continent_code(const ip[], result[3]); /** * Look up the full continent name for the given IP address. * + * @note This native requires GeoIP City database, which can be retrieved from: + * http://dev.maxmind.com/geoip/geoip2/geolite2/ (MaxMind DB binary) + * * @param ip The IP address to look up. * @param result The result of the geoip look up. * @param len The maximum length of the result buffer. From 8d2770f2f254260a0acc5b978ac87f077b6a733c Mon Sep 17 00:00:00 2001 From: Arkshine Date: Thu, 7 Aug 2014 00:43:29 +0200 Subject: [PATCH 65/71] Put back original SM headers. --- amxmodx/CTextParsers.cpp | 41 +++++++++++++++++++++++++++++----------- amxmodx/CTextParsers.h | 40 +++++++++++++++++++++++++++++---------- public/ITextParsers.h | 34 ++++++++++++++++++++++++++------- 3 files changed, 87 insertions(+), 28 deletions(-) diff --git a/amxmodx/CTextParsers.cpp b/amxmodx/CTextParsers.cpp index 5234fed8..5b2d0599 100644 --- a/amxmodx/CTextParsers.cpp +++ b/amxmodx/CTextParsers.cpp @@ -1,14 +1,33 @@ -/** - * vim: set ts=4 sw=4 tw=99 noet: - * - * AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). - * Copyright (C) The AMX Mod X Development Team. - * - * This software is licensed under the GNU General Public License, version 3 or higher. - * Additional exceptions apply. For full license details, see LICENSE.txt or visit: - * https://alliedmods.net/amxmodx-license - */ - +/** +* vim: set ts=4 : +* ============================================================================= +* SourceMod +* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. +* ============================================================================= +* +* This program is free software; you can redistribute it and/or modify it under +* the terms of the GNU General Public License, version 3.0, as published by the +* Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +* details. +* +* You should have received a copy of the GNU General Public License along with +* this program. If not, see . +* +* As a special exception, AlliedModders LLC gives you permission to link the +* code of this program (as well as its derivative works) to "Half-Life 2," the +* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software +* by the Valve Corporation. You must obey the GNU General Public License in +* all respects for all other code used. Additionally, AlliedModders LLC grants +* this exception to all derivative works. AlliedModders LLC defines further +* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), +* or . +* +* Version: $Id$ +*/ #include "amxmodx.h" #include "CTextParsers.h" /* diff --git a/amxmodx/CTextParsers.h b/amxmodx/CTextParsers.h index 8ceeca6d..45ebe52c 100644 --- a/amxmodx/CTextParsers.h +++ b/amxmodx/CTextParsers.h @@ -1,13 +1,33 @@ -/** - * vim: set ts=4 sw=4 tw=99 noet: - * - * AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). - * Copyright (C) The AMX Mod X Development Team. - * - * This software is licensed under the GNU General Public License, version 3 or higher. - * Additional exceptions apply. For full license details, see LICENSE.txt or visit: - * https://alliedmods.net/amxmodx-license - */ +/** +* vim: set ts=4 : +* ============================================================================= +* SourceMod +* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. +* ============================================================================= +* +* This program is free software; you can redistribute it and/or modify it under +* the terms of the GNU General Public License, version 3.0, as published by the +* Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +* details. +* +* You should have received a copy of the GNU General Public License along with +* this program. If not, see . +* +* As a special exception, AlliedModders LLC gives you permission to link the +* code of this program (as well as its derivative works) to "Half-Life 2," the +* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software +* by the Valve Corporation. You must obey the GNU General Public License in +* all respects for all other code used. Additionally, AlliedModders LLC grants +* this exception to all derivative works. AlliedModders LLC defines further +* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), +* or . +* +* Version: $Id$ +*/ #ifndef _INCLUDE_SOURCEMOD_TEXTPARSERS_H_ #define _INCLUDE_SOURCEMOD_TEXTPARSERS_H_ diff --git a/public/ITextParsers.h b/public/ITextParsers.h index 2d3dfc5e..0f88be9e 100644 --- a/public/ITextParsers.h +++ b/public/ITextParsers.h @@ -1,12 +1,32 @@ -/** - * vim: set ts=4 sw=4 tw=99 noet: +/** + * vim: set ts=4 : + * ============================================================================= + * SourceMod + * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. + * ============================================================================= * - * AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). - * Copyright (C) The AMX Mod X Development Team. + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, version 3.0, as published by the + * Free Software Foundation. + * + * 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. * - * This software is licensed under the GNU General Public License, version 3 or higher. - * Additional exceptions apply. For full license details, see LICENSE.txt or visit: - * https://alliedmods.net/amxmodx-license + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + * + * As a special exception, AlliedModders LLC gives you permission to link the + * code of this program (as well as its derivative works) to "Half-Life 2," the + * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software + * by the Valve Corporation. You must obey the GNU General Public License in + * all respects for all other code used. Additionally, AlliedModders LLC grants + * this exception to all derivative works. AlliedModders LLC defines further + * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), + * or . + * + * Version: $Id$ */ #ifndef _INCLUDE_SOURCEMOD_TEXTPARSERS_INTERFACE_H_ From 6da20780673f4edfc3b616f0cd6f0158711f2a68 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Thu, 7 Aug 2014 00:51:01 +0200 Subject: [PATCH 66/71] Replace snprintf by UTIL_Format. --- amxmodx/CTextParsers.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/amxmodx/CTextParsers.cpp b/amxmodx/CTextParsers.cpp index 5b2d0599..3d508899 100644 --- a/amxmodx/CTextParsers.cpp +++ b/amxmodx/CTextParsers.cpp @@ -137,7 +137,7 @@ SMCError TextParsers::ParseSMCFile(const char *file, states->col = 0; } /*libsys->GetPlatformError(error, sizeof(error));*/ - snprintf(buffer, maxsize, "File could not be opened: %s", error); + UTIL_Format(buffer, maxsize, "File could not be opened: %s", error); return SMCError_StreamOpen; } @@ -146,7 +146,7 @@ SMCError TextParsers::ParseSMCFile(const char *file, fclose(fp); errstr = GetSMCErrorString(result); - snprintf(buffer, maxsize, "%s", errstr != NULL ? errstr : "Unknown error"); + UTIL_Format(buffer, maxsize, "%s", errstr != NULL ? errstr : "Unknown error"); return result; } @@ -197,7 +197,7 @@ SMCError TextParsers::ParseSMCStream(const char *stream, result = ParseStream_SMC(&rs, RawStreamReader, smc_listener, states); const char *errstr = GetSMCErrorString(result); - snprintf(buffer, maxsize, "%s", errstr != NULL ? errstr : "Unknown error"); + UTIL_Format(buffer, maxsize, "%s", errstr != NULL ? errstr : "Unknown error"); return result; } From a0852adf1883e6562177f800358343479d2873f1 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Thu, 7 Aug 2014 00:53:15 +0200 Subject: [PATCH 67/71] Fix wrong log error message. --- amxmodx/textparse.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/amxmodx/textparse.cpp b/amxmodx/textparse.cpp index f272b6ac..d566221a 100644 --- a/amxmodx/textparse.cpp +++ b/amxmodx/textparse.cpp @@ -56,7 +56,7 @@ static cell AMX_NATIVE_CALL SMC_SetParseStart(AMX *amx, cell *params) if (p == NULL) { - LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + LogError(amx, AMX_ERR_NATIVE, "Invalid SMC parse handle (%d)", params[1]); return 0; } @@ -84,7 +84,7 @@ static cell AMX_NATIVE_CALL SMC_SetParseEnd(AMX *amx, cell *params) if (p == NULL) { - LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + LogError(amx, AMX_ERR_NATIVE, "Invalid SMC parse handle (%d)", params[1]); return 0; } @@ -112,7 +112,7 @@ static cell AMX_NATIVE_CALL SMC_SetReaders(AMX *amx, cell *params) if (p == NULL) { - LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + LogError(amx, AMX_ERR_NATIVE, "Invalid SMC parse handle (%d)", params[1]); return 0; } @@ -150,7 +150,7 @@ static cell AMX_NATIVE_CALL SMC_SetRawLine(AMX *amx, cell *params) if (p == NULL) { - LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + LogError(amx, AMX_ERR_NATIVE, "Invalid SMC parse handle (%d)", params[1]); return 0; } @@ -178,7 +178,7 @@ static cell AMX_NATIVE_CALL SMC_ParseFile(AMX *amx, cell *params) if (p == NULL) { - LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + LogError(amx, AMX_ERR_NATIVE, "Invalid SMC parse handle (%d)", params[1]); return 0; } @@ -231,7 +231,7 @@ static cell AMX_NATIVE_CALL INI_ParseFile(AMX *amx, cell *params) if (p == NULL) { - LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + LogError(amx, AMX_ERR_NATIVE, "Invalid INI parse handle (%d)", params[1]); return 0; } @@ -254,7 +254,7 @@ static cell AMX_NATIVE_CALL INI_SetParseStart(AMX *amx, cell *params) if (p == NULL) { - LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + LogError(amx, AMX_ERR_NATIVE, "Invalid INI parse handle (%d)", params[1]); return 0; } @@ -282,7 +282,7 @@ static cell AMX_NATIVE_CALL INI_SetParseEnd(AMX *amx, cell *params) if (p == NULL) { - LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + LogError(amx, AMX_ERR_NATIVE, "Invalid INI parse handle (%d)", params[1]); return 0; } @@ -310,7 +310,7 @@ static cell AMX_NATIVE_CALL INI_SetReaders(AMX *amx, cell *params) if (p == NULL) { - LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + LogError(amx, AMX_ERR_NATIVE, "Invalid INI parse handle (%d)", params[1]); return 0; } @@ -343,7 +343,7 @@ static cell AMX_NATIVE_CALL INI_SetRawLine(AMX *amx, cell *params) if (p == NULL) { - LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]); + LogError(amx, AMX_ERR_NATIVE, "Invalid INI parse handle (%d)", params[1]); return 0; } From 6b5387f4284fa51053b7cdef7892aada50703b18 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Thu, 7 Aug 2014 01:16:44 +0200 Subject: [PATCH 68/71] Fix documentation. --- plugins/include/textparse_ini.inc | 38 +++++++++++++------------- plugins/include/textparse_smc.inc | 44 +++++++++++++++---------------- 2 files changed, 40 insertions(+), 42 deletions(-) diff --git a/plugins/include/textparse_ini.inc b/plugins/include/textparse_ini.inc index 699f6537..70dd2711 100644 --- a/plugins/include/textparse_ini.inc +++ b/plugins/include/textparse_ini.inc @@ -17,11 +17,8 @@ #define _textparse_ini_included /** - * This parser API is entirely event based. You must hook events to receive data. - * The file format can ben either INI or SMC (also known as "SourceMod Configuration". - * SMC format is nearly identical to VDF (also known as "Valve's KeyValues format"). - * Also please note INI format is handled differently. Because more "simple" to parse, some - * event doesn't exist and callback prototype can be different. + * This parser API is entirely event based. + * You must hook events to receive data. */ /** @@ -79,23 +76,23 @@ enum INIParser native INIParser:INI_CreateParser(); /** - * Disposes of a INI parser. + * Disposes of an INI parser. * - * @param handle Handle to a INI Parse. + * @param handle Handle to an INI Parse structure. * * @return True if disposed, false otherwise. */ native INI_DestroyParser(&INIParser:handle); /** - * Parses a INI config file. + * Parses an INI config file. * * @param handle A handle to an INI Parse structure. * @param file A string containing the file path. * @param line An optional by reference cell to store the last line number read. * @param col An optional by reference cell to store the last column number read. - * @return A SMCParseError result. + * @return An SMCParseError result. * @error Invalid or corrupt handle. */ native bool:INI_ParseFile(INIParser:handle, const file[], &line = 0, &col = 0); @@ -107,7 +104,7 @@ native bool:INI_ParseFile(INIParser:handle, const file[], &line = 0, &col = 0); * - * Called when parsing is started. * - * @param handle The INI Parse handle. + * @param handle A handle to an INI Parse structure. * * @noreturn * @@ -122,21 +119,21 @@ native bool:INI_ParseFile(INIParser:handle, const file[], &line = 0, &col = 0); native INI_SetParseStart(INIParser:handle, const func[]); /** - * Sets the INI_ParseEnd of a parse handle. + * Sets the INI_ParseEnd function of a parse handle. * * @note Below is the prototype of callback: * - * Called when parsing is halted. * - * @param handle The INI Parse handle. + * @param handle A handle to an INI Parse structure. * @param halted True if abnormally halted, false otherwise. * * @noreturn * * public OnParseEnd(INIParser:handle, bool:halted) * - - * @param handle Handle to a INI Parse. - * @param func A ParseEnd callback.. + * @param handle Handle to an INI Parse structure. + * @param func A ParseEnd callback. * * @noreturn * @error Invalid or corrupt handle. @@ -144,19 +141,20 @@ native INI_SetParseStart(INIParser:handle, const func[]); native INI_SetParseEnd(INIParser:handle, const func[]); /** - * Sets the three main reader functions. + * Sets the two main reader functions. * * @note Below is the prototype of callback: * - * NewSection: - * Called when the parser finds the end of the current section. + * Called when the parser finds a new section. * + * @param handle Handle to an INI Parse structure. * @param section Name of section in between the [ and ] characters. * @param invalid_tokens True if invalid tokens were detected in the name. * @param close_bracket True if a closing bracket was detected, false otherwise. * @param extra_tokens True if extra tokens were detected on the line. * @param curtok Contains current token in the line where the section name starts. - * can add to this offset when failing to point to a token. + * You can add to this offset when failing to point to a token. * @return True to keep parsing, false otherwise. * * public bool:OnNewSection(INIParser:handle, const section[], bool:invalid_tokens, bool:close_bracket, bool:extra_tokens, curtok) @@ -164,7 +162,7 @@ native INI_SetParseEnd(INIParser:handle, const func[]); * KeyValue: * Called when the parser finds a new key/value pair. * - * @param handle The INI Parse handle. + * @param handle Handle to an INI Parse structure. * @param key Name of key. * @param value String containing value (with quotes stripped, if any). * @param invalid_tokens Whether or not the key contained invalid tokens. @@ -176,7 +174,7 @@ native INI_SetParseEnd(INIParser:handle, const func[]); * * public bool:OnKeyValue(INIParser:handle, const key[], const value[], bool:invalid_tokens, bool:equal_token, bool:quotes, curtok) * - - * @param handle The INI parse handle. + * @param handle Handle to an INI Parse structure. * @param kv A KeyValue callback. * @param ns An optional NewSection callback. * @@ -200,7 +198,7 @@ native INI_SetReaders(INIParser:smc, const kvFunc[], const nsFunc[] = "" ); * * public bool:OnRawLine(INIParser:smc, const line[], lineno, curtok) * - * @param handle Handle to an INI Parse. + * @param handle Handle to an INI Parse structure. * @param func A RawLine callback. * * @noreturn diff --git a/plugins/include/textparse_smc.inc b/plugins/include/textparse_smc.inc index 9e8ea983..5e54af18 100644 --- a/plugins/include/textparse_smc.inc +++ b/plugins/include/textparse_smc.inc @@ -17,11 +17,9 @@ #define _textparse_smc_included /** - * This parser API is entirely event based. You must hook events to receive data. - * The file format can ben either INI or SMC (also known as "SourceMod Configuration". - * SMC format is nearly identical to VDF (also known as "Valve's KeyValues format"). - * Also please note INI format is handled differently. Because more "simple" to parse, some - * event doesn't exist and callback prototype can be different. + * Everything below describes the SMC Parse, or "SourceMod Configuration" format. + * This parser is entirely event based. You must hook events to receive data. + * The file format itself is nearly identical to Valve's KeyValues format (also known as VDF). */ /** @@ -109,9 +107,9 @@ enum SMCError native SMCParser:SMC_CreateParser(); /** - * Disposes of a SMC parser. + * Disposes of an SMC parser. * - * @param handle Handle to a SMC Parse + * @param handle Handle to an SMC Parse structure. * * @return True if disposed, false otherwise. */ @@ -125,7 +123,7 @@ native SMC_DestroyParser(&SMCParser:handle); * @param line An optional by reference cell to store the last line number read. * @param col An optional by reference cell to store the last column number read. * - * @return A SMCParseError result. + * @return An SMCParseError result. * @error Invalid or corrupt handle. */ native SMCError:SMC_ParseFile(SMCParser:handle, const file[], &line = 0, &col = 0); @@ -137,13 +135,13 @@ native SMCError:SMC_ParseFile(SMCParser:handle, const file[], &line = 0, &col = * - * Called when parsing is started. * - * @param handle The Text Parse handle. + * @param handle Handle to an SMC Parse structure. * * @noreturn * * public OnParseStart(SMCParser:handle) * - - * @param handle Handle to a Text Parse. + * @param handle Handle to an SMC Parse structure. * @param func A ParseStart callback. * * @noreturn @@ -152,13 +150,13 @@ native SMCError:SMC_ParseFile(SMCParser:handle, const file[], &line = 0, &col = native SMC_SetParseStart(SMCParser:handle, const func[]); /** - * Sets the SMC_ParseEnd of a parse handle. + * Sets the SMC_ParseEnd function of a parse handle. * * @note Below is the prototype of callback: * - * Called when parsing is halted. * - * @param handle The Text Parse handle. + * @param handle Handle to an SMC Parse structure. * @param halted True if abnormally halted, false otherwise. * @param failed True if parsing failed, false otherwise. * @@ -166,8 +164,8 @@ native SMC_SetParseStart(SMCParser:handle, const func[]); * * public OnParseEnd(SMCParser:handle, bool:halted, bool:failed) * - - * @param handle Handle to a Text Parse. - * @param func A ParseEnd callback.. + * @param handle Handle to an SMC Parse structure. + * @param func A ParseEnd callback. * * @noreturn * @error Invalid or corrupt handle. @@ -181,9 +179,9 @@ native SMC_SetParseEnd(SMCParser:handle, const func[]); * @note Below is the prototype of callbacks: * - * NewSection: - * Called when the parser finds the end of the current section. + * Called when the parser finds a new section or sub-section. * - * @param handle The Text Parse handle. + * @param handle Handle to an SMC Parse structure. * @param name String containing section name. * * @return An SMCResult action to take. @@ -193,22 +191,24 @@ native SMC_SetParseEnd(SMCParser:handle, const func[]); * KeyValue: * Called when the parser finds a new key/value pair. * - * @param handle The Text Parse handle. + * @param handle Handle to an SMC Parse structure. * @param key String containing key name. * @param value String containing value name. * - * @return A SMCResult action to take. + * @return An SMCResult action to take. * * public SMCResult:OnKeyValue(SMCParser:handle, const key[], const value[]) * * EndSection: * Called when the parser finds the end of the current section. * - * @param handle The Text Parse handle. + * @param handle Handle to an SMC Parse structure. + * + * @return An SMCResult action to take. * * public SMCResult:OnEndSection(SMCParser:handle) * - - * @param handle The Text parse handle. + * @param handle Handle to an SMC Parse structure. * @param kv A KeyValue callback. * @param ns An optional NewSection callback. * @param es An optional EndSection callback. @@ -224,7 +224,7 @@ native SMC_SetReaders(SMCParser:smc, const kvFunc[], const nsFunc[] = "", const * - * Called whenever a raw line is read. * - * @param handle The Text Parse handle. + * @param handle Handle to an SMC Parse structure. * @param line A string containing the raw line from the file. * @param lineno The line number it occurs on. * @@ -232,7 +232,7 @@ native SMC_SetReaders(SMCParser:smc, const kvFunc[], const nsFunc[] = "", const * * public SMCResult:SMC_RawLine(SMCParser:handle, const line[], lineno) * - - * @param handle Handle to an Text Parse. + * @param handle Handle to an SMC Parse structure. * @param func A RawLine callback. * * @noreturn From 29eb4e4647e16ea40df2e0321cfada96ff52ce1b Mon Sep 17 00:00:00 2001 From: Arkshine Date: Thu, 7 Aug 2014 01:18:45 +0200 Subject: [PATCH 69/71] Fix documentation. --- plugins/include/textparse_ini.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/include/textparse_ini.inc b/plugins/include/textparse_ini.inc index 70dd2711..eb96b532 100644 --- a/plugins/include/textparse_ini.inc +++ b/plugins/include/textparse_ini.inc @@ -110,7 +110,7 @@ native bool:INI_ParseFile(INIParser:handle, const file[], &line = 0, &col = 0); * * public OnParseStart(INIParser:handle) * - - * @param handle Handle to a INI Parse. + * @param handle Handle to an INI Parse structure. * @param func A ParseStart callback. * * @noreturn From e9eaae4dd1b9945bf38bb7d0df0ad7fd6e5c521e Mon Sep 17 00:00:00 2001 From: Arkshine Date: Thu, 7 Aug 2014 01:21:22 +0200 Subject: [PATCH 70/71] Fix documentation. --- plugins/include/amxmodx.inc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/include/amxmodx.inc b/plugins/include/amxmodx.inc index 84354d75..439d1a33 100755 --- a/plugins/include/amxmodx.inc +++ b/plugins/include/amxmodx.inc @@ -88,8 +88,9 @@ native precache_generic(const szFile[]); * Changes map. * * @note This calls the pfnChangelLevel engine function. - * @note This has the same behavior as calling "changelevel" server command, - * but this will trigger properly server_changelevel() forward. + * @note This has the same behavior as calling the "changelevel" server command,, + * but this will also trigger the server_changelevel() forward in AMXX plugins. + * It will also notify any Metamod plugins that are hooking pfnChangeLevel. * * @param map The map name to change. * From 58b6f9f3538f4686da40d9606b237d2136f2803e Mon Sep 17 00:00:00 2001 From: Arkshine Date: Thu, 7 Aug 2014 01:26:05 +0200 Subject: [PATCH 71/71] fix the documentation. How it's possible to not see a double comma! --- plugins/include/amxmodx.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/include/amxmodx.inc b/plugins/include/amxmodx.inc index 439d1a33..2d6604cc 100755 --- a/plugins/include/amxmodx.inc +++ b/plugins/include/amxmodx.inc @@ -88,7 +88,7 @@ native precache_generic(const szFile[]); * Changes map. * * @note This calls the pfnChangelLevel engine function. - * @note This has the same behavior as calling the "changelevel" server command,, + * @note This has the same behavior as calling the "changelevel" server command, * but this will also trigger the server_changelevel() forward in AMXX plugins. * It will also notify any Metamod plugins that are hooking pfnChangeLevel. *