diff --git a/VERSION b/VERSION index 308bbae79..897063bb3 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.7.0 +11.8.0 diff --git a/agent/fw_magento2.c b/agent/fw_magento2.c index f96994f25..8d053b25e 100644 --- a/agent/fw_magento2.c +++ b/agent/fw_magento2.c @@ -12,6 +12,8 @@ #include "nr_txn.h" #include "util_logging.h" +#define PHP_PACKAGE_NAME "magento/magento2-base" + /* * Magento 2 adds (depending on how you count) * either three or four completely separate routing paths in the Community @@ -540,7 +542,10 @@ void nr_magento2_enable(TSRMLS_D) { nr_magento2_ui_controller_execute TSRMLS_CC); if (NRINI(vulnerability_management_package_detection_enabled)) { - nr_txn_add_php_package(NRPRG(txn), "magento", + nr_txn_add_php_package(NRPRG(txn), PHP_PACKAGE_NAME, PHP_PACKAGE_VERSION_UNKNOWN); } + + nr_txn_suggest_package_supportability_metric(NRPRG(txn), PHP_PACKAGE_NAME, + PHP_PACKAGE_VERSION_UNKNOWN); } diff --git a/agent/lib_aws_sdk_php.c b/agent/lib_aws_sdk_php.c index 02a0ef4bb..596c3995e 100644 --- a/agent/lib_aws_sdk_php.c +++ b/agent/lib_aws_sdk_php.c @@ -14,17 +14,16 @@ #include "fw_hooks.h" #include "fw_support.h" #include "util_logging.h" -#include "nr_segment_message.h" -#include "nr_segment_external.h" #include "lib_aws_sdk_php.h" #define PHP_PACKAGE_NAME "aws/aws-sdk-php" -#define AWS_LAMBDA_ARN_REGEX "(arn:(aws[a-zA-Z-]*)?:lambda:)?" \ - "((?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1}):)?" \ - "((?\\d{12}):)?" \ - "(function:)?" \ - "(?[a-zA-Z0-9-\\.]+)" \ - "(:(?\\$LATEST|[a-zA-Z0-9-]+))?" +#define AWS_LAMBDA_ARN_REGEX \ + "(arn:(aws[a-zA-Z-]*)?:lambda:)?" \ + "((?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1}):)?" \ + "((?\\d{12}):)?" \ + "(function:)?" \ + "(?[a-zA-Z0-9-\\.]+)" \ + "(:(?\\$LATEST|[a-zA-Z0-9-]+))?" #if ZEND_MODULE_API_NO >= ZEND_8_1_X_API_NO /* PHP8.1+ */ /* Service instrumentation only supported above PHP 8.1+*/ @@ -309,9 +308,7 @@ void nr_lib_aws_sdk_php_lambda_handle(nr_segment_t* auto_segment, nr_segment_t* external_segment = NULL; zval** retval_ptr = NR_GET_RETURN_VALUE_PTR; - nr_segment_cloud_attrs_t cloud_attrs = { - .cloud_platform = "aws_lambda" - }; + nr_segment_cloud_attrs_t cloud_attrs = {.cloud_platform = "aws_lambda"}; if (NULL == auto_segment) { return; @@ -332,7 +329,8 @@ void nr_lib_aws_sdk_php_lambda_handle(nr_segment_t* auto_segment, /* Determine if we instrument this command. */ if (AWS_COMMAND_IS("invoke")) { /* reconstruct the ARN */ - nr_aws_sdk_lambda_client_invoke_parse_args(NR_EXECUTE_ORIG_ARGS, &cloud_attrs); + nr_aws_sdk_lambda_client_invoke_parse_args(NR_EXECUTE_ORIG_ARGS, + &cloud_attrs); } else { return; } @@ -362,7 +360,7 @@ void nr_lib_aws_sdk_php_lambda_handle(nr_segment_t* auto_segment, external_params.status = Z_LVAL_P(status_code); } zval* metadata = nr_php_zend_hash_find(Z_ARRVAL_P(data), "@metadata"); - if (NULL != metadata && IS_REFERENCE == Z_TYPE_P(metadata)) { + if (NULL != metadata && IS_REFERENCE == Z_TYPE_P(metadata)) { metadata = Z_REFVAL_P(metadata); } if (nr_php_is_zval_valid_array(metadata)) { @@ -371,14 +369,13 @@ void nr_lib_aws_sdk_php_lambda_handle(nr_segment_t* auto_segment, external_params.uri = Z_STRVAL_P(uri); } } - } nr_segment_external_end(&external_segment, &external_params); nr_free(cloud_attrs.cloud_resource_id); } -/* This stores the compiled regex to parse AWS ARNs. The compilation happens when - * it is first needed and is destroyed in mshutdown +/* This stores the compiled regex to parse AWS ARNs. The compilation happens + * when it is first needed and is destroyed in mshutdown */ static nr_regex_t* aws_arn_regex; @@ -390,7 +387,9 @@ void nr_aws_sdk_mshutdown(void) { nr_regex_destroy(&aws_arn_regex); } -void nr_aws_sdk_lambda_client_invoke_parse_args(NR_EXECUTE_PROTO, nr_segment_cloud_attrs_t* cloud_attrs) { +void nr_aws_sdk_lambda_client_invoke_parse_args( + NR_EXECUTE_PROTO, + nr_segment_cloud_attrs_t* cloud_attrs) { zval* call_args = nr_php_get_user_func_arg(2, NR_EXECUTE_ORIG_ARGS); zval* this_obj = NR_PHP_USER_FN_THIS(); char* arn = NULL; @@ -409,7 +408,8 @@ void nr_aws_sdk_lambda_client_invoke_parse_args(NR_EXECUTE_PROTO, nr_segment_clo if (!nr_php_is_zval_valid_array(lambda_args)) { return; } - zval* lambda_name = nr_php_zend_hash_find(Z_ARRVAL_P(lambda_args), "FunctionName"); + zval* lambda_name + = nr_php_zend_hash_find(Z_ARRVAL_P(lambda_args), "FunctionName"); if (!nr_php_is_zval_non_empty_string(lambda_name)) { return; } @@ -420,10 +420,8 @@ void nr_aws_sdk_lambda_client_invoke_parse_args(NR_EXECUTE_PROTO, nr_segment_clo } /* Extract all information possible from the passed lambda name via regex */ - nr_regex_substrings_t* matches = - nr_regex_match_capture(aws_arn_regex, - Z_STRVAL_P(lambda_name), - Z_STRLEN_P(lambda_name)); + nr_regex_substrings_t* matches = nr_regex_match_capture( + aws_arn_regex, Z_STRVAL_P(lambda_name), Z_STRLEN_P(lambda_name)); function_name = nr_regex_substrings_get_named(matches, "functionName"); accountID = nr_regex_substrings_get_named(matches, "accountId"); region = nr_regex_substrings_get_named(matches, "region"); @@ -449,11 +447,12 @@ void nr_aws_sdk_lambda_client_invoke_parse_args(NR_EXECUTE_PROTO, nr_segment_clo } if (nr_strempty(region)) { zend_class_entry* base_class = NULL; - if (NULL != execute_data->func && NULL!= execute_data->func->common.scope) { - base_class = execute_data->func->common.scope; + if (NULL != execute_data->func + && NULL != execute_data->func->common.scope) { + base_class = execute_data->func->common.scope; } - region_zval - = nr_php_get_zval_object_property_with_class(this_obj, base_class, "region"); + region_zval = nr_php_get_zval_object_property_with_class( + this_obj, base_class, "region"); if (nr_php_is_zval_valid_string(region_zval)) { /* * In this case, region is likely to be NULL, but could be an empty @@ -467,11 +466,11 @@ void nr_aws_sdk_lambda_client_invoke_parse_args(NR_EXECUTE_PROTO, nr_segment_clo if (!nr_strempty(accountID) && !nr_strempty(region)) { /* construct the ARN */ if (!nr_strempty(qualifier)) { - arn = nr_formatf("arn:aws:lambda:%s:%s:function:%s:%s", - region, accountID, function_name, qualifier); + arn = nr_formatf("arn:aws:lambda:%s:%s:function:%s:%s", region, accountID, + function_name, qualifier); } else { - arn = nr_formatf("arn:aws:lambda:%s:%s:function:%s", - region, accountID, function_name); + arn = nr_formatf("arn:aws:lambda:%s:%s:function:%s", region, accountID, + function_name); } /* Attach the ARN */ @@ -519,6 +518,170 @@ char* nr_lib_aws_sdk_php_get_command_arg_value(char* command_arg_name, return command_arg_value; } +void nr_lib_aws_sdk_php_dynamodb_set_params( + nr_segment_datastore_params_t* datastore_params, + nr_segment_cloud_attrs_t* cloud_attrs, + NR_EXECUTE_PROTO) { + zval* endpoint_zval = NULL; + zval* region_zval = NULL; + zval* host_zval = NULL; + zval* port_zval = NULL; + zval* this_obj = NULL; + zend_function* func = NULL; + zend_class_entry* base_class = NULL; + char* table_name = NULL; + char* account_id = NULL; + + if (NULL == datastore_params || NULL == cloud_attrs) { + return; + } + + this_obj = NR_PHP_USER_FN_THIS(); + func = nr_php_execute_function(NR_EXECUTE_ORIG_ARGS); + + if (NULL == this_obj || NULL == func) { + return; + } + + if (NULL != func->common.scope) { + base_class = func->common.scope; + + region_zval = nr_php_get_zval_object_property_with_class( + this_obj, base_class, "region"); + if (nr_php_is_zval_non_empty_string(region_zval)) { + cloud_attrs->cloud_region = Z_STRVAL_P(region_zval); + } + + endpoint_zval = nr_php_get_zval_object_property_with_class( + this_obj, base_class, "endpoint"); + if (nr_php_is_zval_valid_object(endpoint_zval)) { + host_zval = nr_php_get_zval_object_property(endpoint_zval, "host"); + if (nr_php_is_zval_non_empty_string(host_zval)) { + datastore_params->instance->host = Z_STRVAL_P(host_zval); + + /* Only try to get a port if we have a valid host. */ + port_zval = nr_php_get_zval_object_property(endpoint_zval, "port"); + if (nr_php_is_zval_valid_integer(port_zval)) { + /* Must be freed by caller */ + datastore_params->instance->port_path_or_id + = nr_formatf(NR_INT64_FMT, Z_LVAL_P(port_zval)); + } else { + /* In case where host was found but port was not, spec says return + * unknown for port. */ + datastore_params->instance->port_path_or_id = nr_strdup("unknown"); + } + } + } + } + if (NULL == datastore_params->instance->host) { + /* Unable to retrieve the endpoint, go with AWS defaults. */ + datastore_params->instance->host = AWS_SDK_PHP_DYNAMODBCLIENT_DEFAULT_HOST; + /* Need to strdup because the calling function will free it. */ + datastore_params->instance->port_path_or_id + = nr_strdup(AWS_SDK_PHP_DYNAMODBCLIENT_DEFAULT_PORT); + } + + table_name = nr_lib_aws_sdk_php_get_command_arg_value( + AWS_SDK_PHP_DYNAMODBCLIENT_TABLENAME_ARG, NR_EXECUTE_ORIG_ARGS); + if (!nr_strempty(table_name)) { + /* Must be freed by caller */ + datastore_params->collection = table_name; + } + if (!nr_strempty(NRINI(aws_account_id))) { + account_id = NRINI(aws_account_id); + } + + if (NULL != datastore_params->collection && NULL != account_id + && NULL != cloud_attrs->cloud_region) { + /* Must be freed by caller */ + cloud_attrs->cloud_resource_id = nr_formatf( + "arn:aws:dynamodb:%s:%s:table/%s", cloud_attrs->cloud_region, + account_id, datastore_params->collection); + } +} + +void nr_lib_aws_sdk_php_dynamodb_handle(nr_segment_t* auto_segment, + char* command_name_string, + size_t command_name_len, + NR_EXECUTE_PROTO) { + nr_segment_t* datastore_segment = NULL; + nr_segment_cloud_attrs_t cloud_attrs = {0}; + nr_datastore_instance_t instance = {0}; + nr_segment_datastore_params_t datastore_params = { + .db_system = AWS_SDK_PHP_DYNAMODBCLIENT_DATASTORE_SYSTEM, + .datastore = { + .type = NR_DATASTORE_DYNAMODB, + }, + .instance = &instance, + .callbacks = { + .backtrace = nr_php_backtrace_callback, + }, + }; + if (NULL == auto_segment) { + return; + } + + if (NULL == command_name_string || 0 == command_name_len) { + return; + } + +#define AWS_COMMAND_IS(CMD) \ + (command_name_len == (sizeof(CMD) - 1) && nr_streq(CMD, command_name_string)) + + /* Determine if we instrument this command. */ + if (AWS_COMMAND_IS("createTable")) { + datastore_params.operation = AWS_SDK_PHP_DYNAMODBCLIENT_CREATE_TABLE; + } else if (AWS_COMMAND_IS("deleteItem")) { + datastore_params.operation = AWS_SDK_PHP_DYNAMODBCLIENT_DELETE_ITEM; + } else if (AWS_COMMAND_IS("deleteTable")) { + datastore_params.operation = AWS_SDK_PHP_DYNAMODBCLIENT_DELETE_TABLE; + } else if (AWS_COMMAND_IS("getItem")) { + datastore_params.operation = AWS_SDK_PHP_DYNAMODBCLIENT_GET_ITEM; + } else if (AWS_COMMAND_IS("putItem")) { + datastore_params.operation = AWS_SDK_PHP_DYNAMODBCLIENT_PUT_ITEM; + } else if (AWS_COMMAND_IS("query")) { + datastore_params.operation = AWS_SDK_PHP_DYNAMODBCLIENT_QUERY; + } else if (AWS_COMMAND_IS("scan")) { + datastore_params.operation = AWS_SDK_PHP_DYNAMODBCLIENT_SCAN; + } else if (AWS_COMMAND_IS("updateItem")) { + datastore_params.operation = AWS_SDK_PHP_DYNAMODBCLIENT_UPDATE_ITEM; + } else { + /* Nothing to do here so exit. */ + return; + } +#undef AWS_COMMAND_IS + + /* + * nr_lib_aws_sdk_php_dynamodb_set_params sets: + * the cloud_attrs->region and cloud_resource_id(needs to be freed) + * datastore->instance host and port_path_or_id(needs to be freed) + * datastore->collection (needs to be freed) + */ + nr_lib_aws_sdk_php_dynamodb_set_params(&datastore_params, &cloud_attrs, + NR_EXECUTE_ORIG_ARGS); + + /* + * By this point, the datastore params are decoded, grab the parent segment + * start time, add the special segment attributes/metrics then close the newly + * created segment. + */ + datastore_segment = nr_segment_start(NRPRG(txn), NULL, NULL); + if (NULL != datastore_segment) { + /* re-use start time from auto_segment started in func_begin */ + datastore_segment->start_time = auto_segment->start_time; + cloud_attrs.aws_operation = command_name_string; + + /* Add cloud attributes, if available. */ + nr_segment_traces_add_cloud_attributes(datastore_segment, &cloud_attrs); + + /* Now end the instrumented segment as a message segment. */ + nr_segment_datastore_end(&datastore_segment, &datastore_params); + } + nr_free(datastore_params.collection); + nr_free(cloud_attrs.cloud_resource_id); + nr_free(instance.port_path_or_id); +} + /* * For Aws/AwsClient::__call see * https://github.com/aws/aws-sdk-php/blob/master/src/AwsClientInterface.php @@ -580,8 +743,12 @@ NR_PHP_WRAPPER(nr_aws_client_call) { NR_EXECUTE_ORIG_ARGS); } else if (AWS_CLASS_IS("Aws\\Lambda\\LambdaClient", "LambdaClient")) { nr_lib_aws_sdk_php_lambda_handle(auto_segment, command_name_string, - Z_STRLEN_P(command_name), - NR_EXECUTE_ORIG_ARGS); + Z_STRLEN_P(command_name), + NR_EXECUTE_ORIG_ARGS); + } else if (AWS_CLASS_IS("Aws\\DynamoDb\\DynamoDbClient", "DynamoDbClient")) { + nr_lib_aws_sdk_php_dynamodb_handle(auto_segment, command_name_string, + Z_STRLEN_P(command_name), + NR_EXECUTE_ORIG_ARGS); } #undef AWS_CLASS_IS diff --git a/agent/lib_aws_sdk_php.h b/agent/lib_aws_sdk_php.h index 2e6bfc74c..05a0dc30c 100644 --- a/agent/lib_aws_sdk_php.h +++ b/agent/lib_aws_sdk_php.h @@ -8,6 +8,11 @@ #define LIB_AWS_SDK_PHP_HDR #include "nr_segment_message.h" +#include "nr_segment_external.h" +#include "nr_datastore_instance.h" +#include "nr_segment_datastore.h" +#include "nr_segment_datastore_private.h" + #if ZEND_MODULE_API_NO >= ZEND_8_1_X_API_NO /* PHP8.1+ */ /* Service instrumentation only supported above PHP 8.1+*/ @@ -21,6 +26,24 @@ #define AWS_QUEUEURL_AWS_POSTFIX "amazonaws.com/" #define AWS_QUEUEURL_AWS_POSTFIX_LEN sizeof(AWS_QUEUEURL_AWS_POSTFIX) - 1 +/* DynamoDb */ +#define AWS_SDK_PHP_DYNAMODBCLIENT_DATASTORE_SYSTEM "dynamodb" +#define AWS_SDK_PHP_DYNAMODBCLIENT_TABLENAME_ARG "TableName" +/* DynamoDb uses a set host then does magic under the hood to resolve the + * connection. */ +#define AWS_SDK_PHP_DYNAMODBCLIENT_DEFAULT_HOST "dynamodb.amazonaws.com" +#define AWS_SDK_PHP_DYNAMODBCLIENT_DEFAULT_PORT "8000" +/* Spec defined format for the operations so all agents will send consistent + * strings. */ +#define AWS_SDK_PHP_DYNAMODBCLIENT_CREATE_TABLE "create_table" +#define AWS_SDK_PHP_DYNAMODBCLIENT_DELETE_ITEM "delete_item" +#define AWS_SDK_PHP_DYNAMODBCLIENT_DELETE_TABLE "delete_table" +#define AWS_SDK_PHP_DYNAMODBCLIENT_GET_ITEM "get_item" +#define AWS_SDK_PHP_DYNAMODBCLIENT_PUT_ITEM "put_item" +#define AWS_SDK_PHP_DYNAMODBCLIENT_QUERY "query" +#define AWS_SDK_PHP_DYNAMODBCLIENT_SCAN "scan" +#define AWS_SDK_PHP_DYNAMODBCLIENT_UPDATE_ITEM "update_item" + #endif /* PHP 8.1+ */ #define PHP_AWS_SDK_SERVICE_NAME_METRIC_PREFIX \ @@ -87,7 +110,9 @@ extern void nr_lib_aws_sdk_php_sqs_handle(nr_segment_t* segment, * * Note: The caller is responsible for freeing cloud_attrs->cloud_resource_id */ -void nr_aws_sdk_lambda_client_invoke_parse_args(NR_EXECUTE_PROTO, nr_segment_cloud_attrs_t* cloud_attrs); +void nr_aws_sdk_lambda_client_invoke_parse_args( + NR_EXECUTE_PROTO, + nr_segment_cloud_attrs_t* cloud_attrs); /* * Purpose : Handles regex destruction during mshutdown @@ -111,6 +136,45 @@ void nr_aws_sdk_mshutdown(void); extern char* nr_lib_aws_sdk_php_get_command_arg_value(char* command_arg_name, NR_EXECUTE_PROTO); +/* + * Purpose : Handle when a DynamoDbClient initiates a command + * + * Params : 1. segment : end the segment as a datastore segment + * 2. command_name_string : the string of the command being called + * 3. command_name_len : the length of the command being called + * 4. NR_EXECUTE_ORIG_ARGS (execute_data, func_return_value) + * + * Returns : + * + */ +extern void nr_lib_aws_sdk_php_dynamodb_handle(nr_segment_t* segment, + char* command_name_string, + size_t command_name_len, + NR_EXECUTE_PROTO); + +/* + * Purpose : Populate DynamoDbClient datastore_params and cloud_attrs. This + * will extract region and host/port and set the value in the + * appropriate struct. + * + * Note: A host/port other than the AWS DynamoDb default is very + * uncommon and used only for development environments + * + * Params : 1. datastore_params : datastore params to modify + * 2. cloud_attrs : cloud attributes to modify + * 3. NR_EXECUTE_ORIG_ARGS (execute_data, func_return_value) + * Returns : + * Note: caller is responsible for freeing: + * - cloud_attrs->cloud_resource_id + * - datastore_params->collection + * - datastore_params.instance.port_path_or_id + */ + +extern void nr_lib_aws_sdk_php_dynamodb_set_params( + nr_segment_datastore_params_t* datastore_params, + nr_segment_cloud_attrs_t* cloud_attrs, + NR_EXECUTE_PROTO); + #endif /* PHP8.1+ */ #endif /* LIB_AWS_SDK_PHP_HDR */ diff --git a/agent/lib_php_amqplib.c b/agent/lib_php_amqplib.c index 94e15fe96..5bc4bbfa2 100644 --- a/agent/lib_php_amqplib.c +++ b/agent/lib_php_amqplib.c @@ -365,7 +365,7 @@ static inline void nr_php_amqplib_insert_dt_headers(zval* amqp_msg) { * the actual zval. */ - if (IS_REFERENCE == Z_TYPE_P(amqp_table_data)) { + if (NULL != amqp_table_data && IS_REFERENCE == Z_TYPE_P(amqp_table_data)) { amqp_table_data = Z_REFVAL_P(amqp_table_data); } if (!nr_php_is_zval_valid_array(amqp_table_data)) { diff --git a/agent/tests/test_lib_aws_sdk_php.c b/agent/tests/test_lib_aws_sdk_php.c index 83c6962a8..4077e9d0c 100644 --- a/agent/tests/test_lib_aws_sdk_php.c +++ b/agent/tests/test_lib_aws_sdk_php.c @@ -61,24 +61,83 @@ NR_PHP_WRAPPER(expect_arg_value_null) { } NR_PHP_WRAPPER_END +NR_PHP_WRAPPER(aws_dynamodb_set_params_wrapper) { + (void)wraprec; + nr_segment_cloud_attrs_t cloud_attrs = {0}; + nr_datastore_instance_t instance = {0}; + nr_segment_datastore_params_t datastore_params = {0}; + char* expected_string = NULL; + char* test_name_string = NULL; + zval* test_name = NULL; + zval* expected = NULL; + + datastore_params.instance = &instance; + + /* + * argument 1 is is used to pass in the test name + */ + + test_name = nr_php_get_user_func_arg(1, NR_EXECUTE_ORIG_ARGS); + + /* + * argument 3 is is used to pass in the expected value + */ + + expected = nr_php_get_user_func_arg(3, NR_EXECUTE_ORIG_ARGS); + + /* + * nr_lib_aws_sdk_php_dynamodb_set_params sets: + * the cloud_attrs->region and cloud_resource_id(needs to be freed) + * datastore->instance host and port_path_or_id(needs to be freed) + * datastore->collection (needs to be freed) + */ + NR_PHP_WRAPPER_CALL; + nr_lib_aws_sdk_php_dynamodb_set_params(&datastore_params, &cloud_attrs, + NR_EXECUTE_ORIG_ARGS); + + char* result_string = nr_formatf( + "region:%s cloud_resource_id:%s host:%s port:%s collection:%s", + NRSAFESTR(cloud_attrs.cloud_region), + NRSAFESTR(cloud_attrs.cloud_resource_id), NRSAFESTR(instance.host), + NRSAFESTR(instance.port_path_or_id), + NRSAFESTR(datastore_params.collection)); + + if (nr_php_is_zval_valid_string(expected)) { + expected_string = Z_STRVAL_P(expected); + } + + if (nr_php_is_zval_valid_string(test_name)) { + test_name_string = Z_STRVAL_P(test_name); + } else { + test_name_string = "Params should match expected."; + } + + tlib_pass_if_str_equal(test_name_string, expected_string, result_string); + + nr_free(datastore_params.collection); + nr_free(result_string); + nr_free(cloud_attrs.cloud_resource_id); + nr_free(instance.port_path_or_id); +} +NR_PHP_WRAPPER_END + NR_PHP_WRAPPER(aws_lambda_invoke_wrapper) { nr_segment_cloud_attrs_t cloud_attrs = {0}; - /* + /* * Because argument 1 is not used in instrumentation, we will use it * to pass in the expected value */ zval* expected = nr_php_get_user_func_arg(1, NR_EXECUTE_ORIG_ARGS); - nr_aws_sdk_lambda_client_invoke_parse_args(NR_EXECUTE_ORIG_ARGS, &cloud_attrs); + nr_aws_sdk_lambda_client_invoke_parse_args(NR_EXECUTE_ORIG_ARGS, + &cloud_attrs); (void)wraprec; if (nr_php_is_zval_valid_string(expected)) { tlib_pass_if_str_equal("Expected should match reconstructed arn", - Z_STRVAL_P(expected), - cloud_attrs.cloud_resource_id); + Z_STRVAL_P(expected), cloud_attrs.cloud_resource_id); } else { - tlib_pass_if_str_equal("Expected should match reconstructed arn", - NULL, - cloud_attrs.cloud_resource_id); + tlib_pass_if_str_equal("Expected should match reconstructed arn", NULL, + cloud_attrs.cloud_resource_id); } NR_PHP_WRAPPER_CALL; nr_free(cloud_attrs.cloud_resource_id); @@ -225,8 +284,8 @@ static inline void test_message_param_queueurl_settings_expect_val( char* cloud_region, char* cloud_account_id, char* destination_name) { - tlib_pass_if_str_equal("cloud_region should match.", cloud_attrs->cloud_region, - cloud_region); + tlib_pass_if_str_equal("cloud_region should match.", + cloud_attrs->cloud_region, cloud_region); tlib_pass_if_str_equal("cloud_account_id should match.", cloud_attrs->cloud_account_id, cloud_account_id); tlib_pass_if_str_equal("destination_name should match.", @@ -237,7 +296,8 @@ static inline void test_message_param_queueurl_settings_expect_null( nr_segment_message_params_t* message_params, nr_segment_cloud_attrs_t* cloud_attrs) { if (NULL != cloud_attrs) { - tlib_pass_if_null("cloud_region should be null.", cloud_attrs->cloud_region); + tlib_pass_if_null("cloud_region should be null.", + cloud_attrs->cloud_region); tlib_pass_if_null("cloud_account_id should be null.", cloud_attrs->cloud_account_id); } @@ -272,65 +332,76 @@ static void test_nr_lib_aws_sdk_php_sqs_parse_queueurl() { /* Test null queueurl. Extracted message_param values should be null.*/ nr_lib_aws_sdk_php_sqs_parse_queueurl(NULL, &message_params, &cloud_attrs); - test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, + &cloud_attrs); /* Test null message_params. No values extracted, all values should be * null.*/ nr_lib_aws_sdk_php_sqs_parse_queueurl(NULL, NULL, &cloud_attrs); - test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, + &cloud_attrs); /* Test null cloud_attrs. No values extracted, all values should be null.*/ nr_lib_aws_sdk_php_sqs_parse_queueurl(NULL, &message_params, NULL); - test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, + &cloud_attrs); /* Test Invalid values. Extracted message_param values should be null.*/ nr_strcpy(modifiable_string, INVALID_QUEUE_URL_1); nr_lib_aws_sdk_php_sqs_parse_queueurl(modifiable_string, &message_params, &cloud_attrs); - test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, + &cloud_attrs); /* Test Invalid values. Extracted message_param values should be null.*/ nr_strcpy(modifiable_string, INVALID_QUEUE_URL_2); nr_lib_aws_sdk_php_sqs_parse_queueurl(modifiable_string, &message_params, &cloud_attrs); - test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, + &cloud_attrs); /* Test Invalid values. Extracted message_param values should be null.*/ nr_strcpy(modifiable_string, INVALID_QUEUE_URL_3); nr_lib_aws_sdk_php_sqs_parse_queueurl(modifiable_string, &message_params, &cloud_attrs); - test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, + &cloud_attrs); /* Test Invalid values. Extracted message_param values should be null.*/ nr_strcpy(modifiable_string, INVALID_QUEUE_URL_4); nr_lib_aws_sdk_php_sqs_parse_queueurl(modifiable_string, &message_params, &cloud_attrs); - test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, + &cloud_attrs); /* Test Invalid values. Extracted message_param values should be null.*/ nr_strcpy(modifiable_string, INVALID_QUEUE_URL_5); nr_lib_aws_sdk_php_sqs_parse_queueurl(modifiable_string, &message_params, &cloud_attrs); - test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, + &cloud_attrs); /* Test Invalid values. Extracted message_param values should be null.*/ nr_strcpy(modifiable_string, INVALID_QUEUE_URL_6); nr_lib_aws_sdk_php_sqs_parse_queueurl(modifiable_string, &message_params, &cloud_attrs); - test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, + &cloud_attrs); /* Test Invalid values. Extracted message_param values should be null.*/ nr_strcpy(modifiable_string, INVALID_QUEUE_URL_7); nr_lib_aws_sdk_php_sqs_parse_queueurl(modifiable_string, &message_params, &cloud_attrs); - test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, + &cloud_attrs); /* Test Invalid values. Extracted message_param values should be null.*/ nr_strcpy(modifiable_string, INVALID_QUEUE_URL_8); nr_lib_aws_sdk_php_sqs_parse_queueurl(modifiable_string, &message_params, &cloud_attrs); - test_message_param_queueurl_settings_expect_null(&message_params, &cloud_attrs); + test_message_param_queueurl_settings_expect_null(&message_params, + &cloud_attrs); /* * Test 'https://sqs.us-east-2.amazonaws.com/123456789012/SQS_QUEUE_NAME'. @@ -483,12 +554,389 @@ static void test_nr_lib_aws_sdk_php_handle_version(void) { } #if ZEND_MODULE_API_NO >= ZEND_8_1_X_API_NO +static void setup_inherited_classes() { + // clang-format off + const char* classes = + "class endpoint_class {" + "public ?string $host;" + "public ?int $port;" + "function __construct(?int $port = null, ?string $host = null) {" + "$this->host = $host;" + "$this->port = $port;" + "}" + "}" + "class base_class {" + "private ?string $region;" + "private ?endpoint_class $endpoint;" + "function base_func($command, $args, $expects) {return;}" + "function __construct(?string $region = null, ?int $port = null, ?string $host = null) {" + "$this->region = $region;" + "$this->endpoint = new endpoint_class($port, $host);" + "}" + "}" + "class top_class extends base_class {}"; + // clang-format on + tlib_php_request_eval(classes); +} +static void test_nr_lib_aws_sdk_php_dynamodb_set_params() { + zval* obj = NULL; + zval* expect_arg = NULL; + zval* array_arg = NULL; + zval* command_arg = NULL; + zval* expr = NULL; + char* args = NULL; + char* expect = NULL; + char* command = NULL; + + tlib_php_engine_create(""); + tlib_php_request_start(); + + setup_inherited_classes(); + + /* Get class with all values set to NULL*/ + obj = tlib_php_request_eval_expr("new top_class"); + tlib_pass_if_not_null("object shouldn't be NULL", obj); + nr_php_wrap_user_function(NR_PSTR("base_class::base_func"), + aws_dynamodb_set_params_wrapper); + + /* + * no 'TableName', region is null, host is null, port is null, account id is + * default empty string expected values to set in structs: region: + * cloud_resource_id: host:dynamodb.amazonaws.com port:8000 + * collection: + */ + args + = "array(" + " 0 => array(" + " 'Name' => 'my_table_name'" + " )" + ")"; + + expect + = "'region: cloud_resource_id: host:dynamodb.amazonaws.com " + "port:8000 collection:'"; + command = "'my_command_name'"; + command_arg = tlib_php_request_eval_expr(command); + array_arg = tlib_php_request_eval_expr(args); + expect_arg = tlib_php_request_eval_expr(expect); + + expr = nr_php_call(obj, "base_func", command_arg, array_arg, expect_arg); + nr_php_zval_free(&expr); + nr_php_zval_free(&expect_arg); + nr_php_zval_free(&array_arg); + nr_php_zval_free(&command_arg); + + /* + * 'TableName' exists, region is null, host is null, port is null, account id + * is default empty string expected values to set in structs: region: + * cloud_resource_id: host:dynamodb.amazonaws.com port:8000 + * collection:my_table_name + */ + args + = "array(" + " 0 => array(" + " 'TableName' => 'my_table_name'" + " )" + ")"; + + expect + = "'region: cloud_resource_id: host:dynamodb.amazonaws.com " + "port:8000 collection:my_table_name'"; + command = "'my_command_name'"; + command_arg = tlib_php_request_eval_expr(command); + array_arg = tlib_php_request_eval_expr(args); + expect_arg = tlib_php_request_eval_expr(expect); + + expr = nr_php_call(obj, "base_func", command_arg, array_arg, expect_arg); + nr_php_zval_free(&expr); + nr_php_zval_free(&expect_arg); + nr_php_zval_free(&array_arg); + nr_php_zval_free(&command_arg); + + /* Done with obj where region is null, host is null, port is null*/ + nr_php_zval_free(&obj); + + /* Get class with empty string region*/ + obj = tlib_php_request_eval_expr("new top_class(region:'')"); + tlib_pass_if_not_null("object shouldn't be NULL", obj); + nr_php_wrap_user_function(NR_PSTR("base_class::base_func"), + aws_dynamodb_set_params_wrapper); + + /* + * 'TableName' exists, region is valid, host is null, port is null, account id + * is default empty string expected values to set in structs: region:my_region + * cloud_resource_id: host:dynamodb.amazonaws.com port:8000 + * collection:my_table_name + */ + args + = "array(" + " 0 => array(" + " 'TableName' => 'my_table_name'" + " )" + ")"; + + expect + = "'region: cloud_resource_id: host:dynamodb.amazonaws.com " + "port:8000 collection:my_table_name'"; + command = "'my_command_name'"; + command_arg = tlib_php_request_eval_expr(command); + array_arg = tlib_php_request_eval_expr(args); + expect_arg = tlib_php_request_eval_expr(expect); + expr = nr_php_call(obj, "base_func", command_arg, array_arg, expect_arg); + nr_php_zval_free(&expr); + nr_php_zval_free(&expect_arg); + nr_php_zval_free(&array_arg); + nr_php_zval_free(&command_arg); + /* Done with obj where region is empty string*/ + nr_php_zval_free(&obj); + + /* Get class with non-empty string region*/ + obj = tlib_php_request_eval_expr("new top_class(region:'my_region')"); + tlib_pass_if_not_null("object shouldn't be NULL", obj); + + nr_php_wrap_user_function(NR_PSTR("base_class::base_func"), + aws_dynamodb_set_params_wrapper); + + /* + * 'TableName' exists, region is valid, host is null, port is null, account id + * is default empty string expected values to set in structs: region:my_region + * cloud_resource_id: host:dynamodb.amazonaws.com port:8000 + * collection:my_table_name + */ + args + = "array(" + " 0 => array(" + " 'TableName' => 'my_table_name'" + " )" + ")"; + + expect + = "'region:my_region cloud_resource_id: " + "host:dynamodb.amazonaws.com port:8000 collection:my_table_name'"; + command = "'my_command_name'"; + command_arg = tlib_php_request_eval_expr(command); + array_arg = tlib_php_request_eval_expr(args); + expect_arg = tlib_php_request_eval_expr(expect); + expr = nr_php_call(obj, "base_func", command_arg, array_arg, expect_arg); + nr_php_zval_free(&expr); + nr_php_zval_free(&expect_arg); + nr_php_zval_free(&array_arg); + nr_php_zval_free(&command_arg); + + /* Done with obj where region is non-empty string*/ + nr_php_zval_free(&obj); + + /* Get class with empty string host*/ + obj = tlib_php_request_eval_expr( + "new top_class(region:'my_region', port:null, host:'')"); + tlib_pass_if_not_null("object shouldn't be NULL", obj); + + nr_php_wrap_user_function(NR_PSTR("base_class::base_func"), + aws_dynamodb_set_params_wrapper); + + /* + * 'TableName' exists, region is valid, host is empty string, port is null, + * account id is default empty string expected values to set in structs: + * region:my_region cloud_resource_id: host:dynamodb.amazonaws.com + * port:8000 collection:my_table_name + */ + args + = "array(" + " 0 => array(" + " 'TableName' => 'my_table_name'" + " )" + ")"; + + expect + = "'region:my_region cloud_resource_id: " + "host:dynamodb.amazonaws.com port:8000 collection:my_table_name'"; + command = "'my_command_name'"; + command_arg = tlib_php_request_eval_expr(command); + array_arg = tlib_php_request_eval_expr(args); + expect_arg = tlib_php_request_eval_expr(expect); + expr = nr_php_call(obj, "base_func", command_arg, array_arg, expect_arg); + nr_php_zval_free(&expr); + nr_php_zval_free(&expect_arg); + nr_php_zval_free(&array_arg); + nr_php_zval_free(&command_arg); + + /* Done with obj where host is empty string*/ + nr_php_zval_free(&obj); + + /* + *Get obj where host is empty string but port is valid. Will not happen in + *real life, the test is just to check code paths because port without a host + *is useless. + */ + obj = tlib_php_request_eval_expr( + "new top_class(region:'my_region', port:1234, host:'')"); + tlib_pass_if_not_null("object shouldn't be NULL", obj); + + nr_php_wrap_user_function(NR_PSTR("base_class::base_func"), + aws_dynamodb_set_params_wrapper); + + /* + * 'TableName' exists, region is valid, host is empty string, port is null, + * account id is default empty string expected values to set in structs: + * region:my_region cloud_resource_id: host:dynamodb.amazonaws.com + * port:8000 collection:my_table_name + */ + args + = "array(" + " 0 => array(" + " 'TableName' => 'my_table_name'" + " )" + ")"; + + expect + = "'region:my_region cloud_resource_id: " + "host:dynamodb.amazonaws.com port:8000 collection:my_table_name'"; + command = "'my_command_name'"; + command_arg = tlib_php_request_eval_expr(command); + array_arg = tlib_php_request_eval_expr(args); + expect_arg = tlib_php_request_eval_expr(expect); + expr = nr_php_call(obj, "base_func", command_arg, array_arg, expect_arg); + nr_php_zval_free(&expr); + nr_php_zval_free(&expect_arg); + nr_php_zval_free(&array_arg); + nr_php_zval_free(&command_arg); + + /* + *Done with obj where host is empty string but port is valid. Will not happen + *in real life, the test is just to check code paths. + */ + nr_php_zval_free(&obj); + + /* Get class with non-empty string host and valid port*/ + obj = tlib_php_request_eval_expr( + "new top_class(region:'my_region', port:1234, host:'my_host')"); + tlib_pass_if_not_null("object shouldn't be NULL", obj); + + nr_php_wrap_user_function(NR_PSTR("base_class::base_func"), + aws_dynamodb_set_params_wrapper); + + /* + * 'TableName' exists, region is valid, host is valid string, port is valid, + * account id is default empty string expected values to set in structs: + * region:my_region cloud_resource_id: host:my_host port:1234 + * collection:my_table_name + */ + args + = "array(" + " 0 => array(" + " 'TableName' => 'my_table_name'" + " )" + ")"; + + expect + = "'region:my_region cloud_resource_id: host:my_host port:1234 " + "collection:my_table_name'"; + command = "'my_command_name'"; + command_arg = tlib_php_request_eval_expr(command); + array_arg = tlib_php_request_eval_expr(args); + expect_arg = tlib_php_request_eval_expr(expect); + expr = nr_php_call(obj, "base_func", command_arg, array_arg, expect_arg); + nr_php_zval_free(&expr); + nr_php_zval_free(&expect_arg); + nr_php_zval_free(&array_arg); + nr_php_zval_free(&command_arg); + + /* Done with obj where host is non-empty string and port is not null*/ + nr_php_zval_free(&obj); + + /* Get class with valid tablename, host and port are NULL so we get the most + * common use case with defaults*/ + obj = tlib_php_request_eval_expr( + "new top_class(region:'my_region', port:NULL, host:NULL)"); + tlib_pass_if_not_null("object shouldn't be NULL", obj); + + nr_php_wrap_user_function(NR_PSTR("base_class::base_func"), + aws_dynamodb_set_params_wrapper); + + /* + * 'TableName' exists, region is valid, host and port will revert to defaults, + * accountid is valid This is the only scenario that will generate an arn. + * expected values to set in structs: + * region:my_region + * cloud_resource_id:arn:aws:dynamodb:my_region:111122223333:table/my_table_name + * host:dynamodb.amazonaws.com port:8000 collection:my_table_name + */ + NRINI(aws_account_id) = "111122223333"; + args + = "array(" + " 0 => array(" + " 'TableName' => 'my_table_name'" + " )" + ")"; + + expect + = "'region:my_region " + "cloud_resource_id:arn:aws:dynamodb:my_region:111122223333:table/" + "my_table_name host:dynamodb.amazonaws.com port:8000 " + "collection:my_table_name'"; + command = "'my_command_name'"; + command_arg = tlib_php_request_eval_expr(command); + array_arg = tlib_php_request_eval_expr(args); + expect_arg = tlib_php_request_eval_expr(expect); + expr = nr_php_call(obj, "base_func", command_arg, array_arg, expect_arg); + nr_php_zval_free(&expr); + nr_php_zval_free(&expect_arg); + nr_php_zval_free(&array_arg); + nr_php_zval_free(&command_arg); + + /* Done with obj where host is non-empty string and port is not null*/ + nr_php_zval_free(&obj); + + /* Get class with valid tablename, host and port are NULL so we get the most + * common use case with defaults*/ + obj = tlib_php_request_eval_expr( + "new top_class(region:'my_region', port:NULL, host:NULL)"); + tlib_pass_if_not_null("object shouldn't be NULL", obj); + + nr_php_wrap_user_function(NR_PSTR("base_class::base_func"), + aws_dynamodb_set_params_wrapper); + + /* + * 'TableName' exists, region is valid, host and port will revert to defaults, + * accountid is NULL expected values to set in structs: region:my_region + * cloud_resource_id: host:dynamodb.amazonaws.com port:8000 + * collection:my_table_name + */ + NRINI(aws_account_id) = NULL; + args + = "array(" + " 0 => array(" + " 'TableName' => 'my_table_name'" + " )" + ")"; + + expect + = "'region:my_region cloud_resource_id: " + "host:dynamodb.amazonaws.com port:8000 collection:my_table_name'"; + command = "'my_command_name'"; + command_arg = tlib_php_request_eval_expr(command); + array_arg = tlib_php_request_eval_expr(args); + expect_arg = tlib_php_request_eval_expr(expect); + expr = nr_php_call(obj, "base_func", command_arg, array_arg, expect_arg); + nr_php_zval_free(&expr); + nr_php_zval_free(&expect_arg); + nr_php_zval_free(&array_arg); + nr_php_zval_free(&command_arg); + + /* Done with obj where host is non-empty string and port is not null*/ + nr_php_zval_free(&obj); + + tlib_php_request_end(); + tlib_php_engine_destroy(); +} + static void test_nr_lib_aws_sdk_php_lambda_invoke() { tlib_php_engine_create(""); tlib_php_request_start(); tlib_php_request_eval("function lambda_invoke($a, $b) { return; }"); - nr_php_wrap_user_function(NR_PSTR("lambda_invoke"), aws_lambda_invoke_wrapper); + nr_php_wrap_user_function(NR_PSTR("lambda_invoke"), + aws_lambda_invoke_wrapper); NRINI(aws_account_id) = "111122223333"; @@ -496,7 +944,8 @@ static void test_nr_lib_aws_sdk_php_lambda_invoke() { char* args = "array(" " 0 => array(" - " 'FunctionName' => 'us-east-2:012345678901:function:my-function'" + " 'FunctionName' => " + "'us-east-2:012345678901:function:my-function'" " )" ")"; zval* array_arg = tlib_php_request_eval_expr(args); @@ -512,7 +961,8 @@ static void test_nr_lib_aws_sdk_php_lambda_invoke() { args = "array(" " 0 => array(" - " 'FunctionName' => 'us-east-2:012345678901:function:my-function:v1'" + " 'FunctionName' => " + "'us-east-2:012345678901:function:my-function:v1'" " )" ")"; array_arg = tlib_php_request_eval_expr(args); @@ -642,16 +1092,16 @@ static void test_nr_lib_aws_sdk_ini() { /* test too short */ tlib_php_engine_create("newrelic.cloud.aws.account_id=\"12345678901\""); tlib_php_request_start(); - tlib_pass_if_str_equal("Expected short account id to be dropped", - NULL, NRINI(aws_account_id)); + tlib_pass_if_str_equal("Expected short account id to be dropped", NULL, + NRINI(aws_account_id)); tlib_php_request_end(); tlib_php_engine_destroy(); /* test too long */ tlib_php_engine_create("newrelic.cloud.aws.account_id=\"1234567890123\""); tlib_php_request_start(); - tlib_pass_if_str_equal("Expected short account id to be dropped", - NULL, NRINI(aws_account_id)); + tlib_pass_if_str_equal("Expected short account id to be dropped", NULL, + NRINI(aws_account_id)); tlib_php_request_end(); tlib_php_engine_destroy(); } @@ -666,6 +1116,7 @@ void test_main(void* p NRUNUSED) { test_nr_lib_aws_sdk_php_sqs_parse_queueurl(); test_nr_lib_aws_sdk_php_get_command_arg_value(); test_nr_lib_aws_sdk_php_lambda_invoke(); + test_nr_lib_aws_sdk_php_dynamodb_set_params(); #endif /* PHP 8.1+ */ } #else diff --git a/axiom/nr_datastore.h b/axiom/nr_datastore.h index 00d295974..c54b0cf7f 100644 --- a/axiom/nr_datastore.h +++ b/axiom/nr_datastore.h @@ -32,6 +32,7 @@ typedef enum { NR_DATASTORE_SYBASE, NR_DATASTORE_INFORMIX, NR_DATASTORE_PDO, + NR_DATASTORE_DYNAMODB, NR_DATASTORE_MUST_BE_LAST } nr_datastore_t; diff --git a/axiom/nr_datastore_private.h b/axiom/nr_datastore_private.h index 481c158bc..5f9c7dc09 100644 --- a/axiom/nr_datastore_private.h +++ b/axiom/nr_datastore_private.h @@ -32,6 +32,7 @@ static const nr_datastore_mapping_t datastore_mappings[] = { {NR_DATASTORE_SYBASE, "Sybase", "sybase", 1}, {NR_DATASTORE_INFORMIX, "Informix", "informix", 1}, {NR_DATASTORE_PDO, "PDO", "pdo", 0}, + {NR_DATASTORE_DYNAMODB, "DynamoDB", "dynamodb", 0}, {NR_DATASTORE_MUST_BE_LAST, NULL, NULL, 0}, }; static size_t datastore_mappings_len diff --git a/axiom/nr_segment.c b/axiom/nr_segment.c index ade63d454..366d3294a 100644 --- a/axiom/nr_segment.c +++ b/axiom/nr_segment.c @@ -262,6 +262,9 @@ static void nr_populate_datastore_spans(nr_span_event_t* span_event, nr_span_event_set_datastore(span_event, NR_SPAN_DATASTORE_COMPONENT, component); + nr_span_event_set_datastore(span_event, NR_SPAN_DATASTORE_DB_SYSTEM, + segment->typed_attributes->datastore.db_system); + host = segment->typed_attributes->datastore.instance.host; nr_span_event_set_datastore(span_event, NR_SPAN_DATASTORE_PEER_HOSTNAME, host); @@ -595,6 +598,7 @@ bool nr_segment_set_datastore(nr_segment_t* segment, .input_query_json = datastore->input_query_json ? nr_strdup(datastore->input_query_json) : NULL, .backtrace_json = datastore->backtrace_json ? nr_strdup(datastore->backtrace_json) : NULL, .explain_plan_json = datastore->explain_plan_json ? nr_strdup(datastore->explain_plan_json) : NULL, + .db_system = datastore->db_system ? nr_strdup(datastore->db_system) : NULL, }; segment->typed_attributes->datastore.instance = (nr_datastore_instance_t){ diff --git a/axiom/nr_segment.h b/axiom/nr_segment.h index 1e9cce8ec..af6a756dc 100644 --- a/axiom/nr_segment.h +++ b/axiom/nr_segment.h @@ -99,6 +99,7 @@ typedef struct _nr_segment_datastore_t { char* input_query_json; char* backtrace_json; char* explain_plan_json; + char* db_system; nr_datastore_instance_t instance; } nr_segment_datastore_t; diff --git a/axiom/nr_segment_datastore.c b/axiom/nr_segment_datastore.c index 6ccc3391e..d6674c85b 100644 --- a/axiom/nr_segment_datastore.c +++ b/axiom/nr_segment_datastore.c @@ -15,6 +15,7 @@ static char* create_metrics(nr_segment_t* segment, nrtime_t duration, const char* product, + nr_datastore_t type, const char* collection, const char* operation, nr_segment_datastore_t* datastore, @@ -59,12 +60,23 @@ static char* create_metrics(nr_segment_t* segment, } if (txn->options.database_name_reporting_enabled) { - nr_datastore_instance_set_database_name(&datastore->instance, - instance->database_name); + /* + * According the agent-specs Datastore-Metrics-PORTED.md: + * There are datastores that do not have the notion of a database name and + * they are exempt from collecting it. The following list recognizes + * datastores for which a database name is not applicable. DynamoDb is one + * such case and as such the db.instance attribute should not be set. + */ + + if (NR_DATASTORE_DYNAMODB != type) { + nr_datastore_instance_set_database_name(&datastore->instance, + instance->database_name); + } } instance_metric = nr_formatf("Datastore/instance/%s/%s/%s", product, instance->host, instance->port_path_or_id); + nr_segment_add_metric(segment, instance_metric, false); nr_datastore_instance_set_host(&datastore->instance, instance->host); nr_datastore_instance_set_port_path_or_id(&datastore->instance, @@ -208,9 +220,9 @@ bool nr_segment_datastore_end(nr_segment_t** segment_ptr, * The allWeb and allOther rollup metrics are created at the end of the * transaction since the background status may change. */ - scoped_metric - = create_metrics(segment, duration, datastore_string, collection, - operation, &datastore, params->instance); + scoped_metric = create_metrics(segment, duration, datastore_string, + params->datastore.type, collection, operation, + &datastore, params->instance); nr_segment_set_name(segment, scoped_metric); @@ -256,8 +268,8 @@ bool nr_segment_datastore_end(nr_segment_t** segment_ptr, break; } } - datastore.component = nr_strdup(datastore_string); + datastore.db_system = params->db_system; if (input_query) { nrobj_t* obj = nro_new_hash(); diff --git a/axiom/nr_segment_datastore.h b/axiom/nr_segment_datastore.h index a89a2acdb..5488833cd 100644 --- a/axiom/nr_segment_datastore.h +++ b/axiom/nr_segment_datastore.h @@ -22,6 +22,7 @@ typedef struct _nr_segment_datastore_params_t { extracted from the SQL for SQL segments. */ char* operation; /* The null-terminated operation; if NULL, this will be extracted from the SQL for SQL segments. */ + char* db_system; /* Database management system (DBMS) product being used.*/ nr_datastore_instance_t* instance; /* Any instance information that was collected. */ diff --git a/axiom/nr_segment_private.c b/axiom/nr_segment_private.c index ea5bbf8cc..b29b72e75 100644 --- a/axiom/nr_segment_private.c +++ b/axiom/nr_segment_private.c @@ -23,6 +23,7 @@ void nr_segment_datastore_destroy_fields(nr_segment_datastore_t* datastore) { nr_free(datastore->input_query_json); nr_free(datastore->backtrace_json); nr_free(datastore->explain_plan_json); + nr_free(datastore->db_system); nr_free(datastore->instance.host); nr_free(datastore->instance.port_path_or_id); nr_free(datastore->instance.database_name); diff --git a/axiom/nr_span_event.c b/axiom/nr_span_event.c index 7c8c2dbe0..b9b8d48e5 100644 --- a/axiom/nr_span_event.c +++ b/axiom/nr_span_event.c @@ -312,6 +312,9 @@ void nr_span_event_set_datastore(nr_span_event_t* event, case NR_SPAN_DATASTORE_COMPONENT: nro_set_hash_string(event->intrinsics, "component", new_value); break; + case NR_SPAN_DATASTORE_DB_SYSTEM: + nro_set_hash_string(event->agent_attributes, "db.system", new_value); + break; case NR_SPAN_DATASTORE_DB_STATEMENT: nro_set_hash_string(event->agent_attributes, "db.statement", new_value); break; @@ -525,6 +528,8 @@ const char* nr_span_event_get_datastore( switch (member) { case NR_SPAN_DATASTORE_COMPONENT: return nro_get_hash_string(event->intrinsics, "component", NULL); + case NR_SPAN_DATASTORE_DB_SYSTEM: + return nro_get_hash_string(event->agent_attributes, "db.system", NULL); case NR_SPAN_DATASTORE_DB_STATEMENT: return nro_get_hash_string(event->agent_attributes, "db.statement", NULL); case NR_SPAN_DATASTORE_DB_INSTANCE: diff --git a/axiom/nr_span_event.h b/axiom/nr_span_event.h index 54d52e025..432ac911d 100644 --- a/axiom/nr_span_event.h +++ b/axiom/nr_span_event.h @@ -67,7 +67,8 @@ typedef enum { NR_SPAN_DATASTORE_DB_STATEMENT, NR_SPAN_DATASTORE_DB_INSTANCE, NR_SPAN_DATASTORE_PEER_ADDRESS, - NR_SPAN_DATASTORE_PEER_HOSTNAME + NR_SPAN_DATASTORE_PEER_HOSTNAME, + NR_SPAN_DATASTORE_DB_SYSTEM } nr_span_event_datastore_member_t; /* diff --git a/axiom/nr_version.c b/axiom/nr_version.c index 4654c4d26..e81165a44 100644 --- a/axiom/nr_version.c +++ b/axiom/nr_version.c @@ -48,8 +48,9 @@ * diamond 09Dec2024 (11.4) * emerald 13Jan2025 (11.5) * fluorite 18Feb2025 (11.6) + * gaspeite 19Mar2025 (11.7) */ -#define NR_CODENAME "gaspeite" +#define NR_CODENAME "hiddenite" const char* nr_version(void) { return NR_STR2(NR_VERSION); diff --git a/axiom/tests/test_span_event.c b/axiom/tests/test_span_event.c index a00700a6b..a9c8fe542 100644 --- a/axiom/tests/test_span_event.c +++ b/axiom/tests/test_span_event.c @@ -432,6 +432,23 @@ static void test_span_event_datastore_string_get_and_set(void) { "set db_statement to rabbit", "rabbit", nr_span_event_get_datastore(event, NR_SPAN_DATASTORE_PEER_HOSTNAME)); + // Test : setting and getting db.system + tlib_pass_if_null( + "if unset, the db.system should be NULL", + nr_span_event_get_datastore(event, NR_SPAN_DATASTORE_DB_SYSTEM)); + nr_span_event_set_datastore(event, NR_SPAN_DATASTORE_DB_SYSTEM, NULL); + tlib_pass_if_null( + "if passed NULL, the db.system should be NULL", + nr_span_event_get_datastore(event, NR_SPAN_DATASTORE_DB_SYSTEM)); + nr_span_event_set_datastore(event, NR_SPAN_DATASTORE_DB_SYSTEM, "wombat"); + tlib_pass_if_str_equal( + "set db.system to wombat", "wombat", + nr_span_event_get_datastore(event, NR_SPAN_DATASTORE_DB_SYSTEM)); + nr_span_event_set_datastore(event, NR_SPAN_DATASTORE_DB_SYSTEM, "rabbit"); + tlib_pass_if_str_equal( + "set db.system to rabbit", "rabbit", + nr_span_event_get_datastore(event, NR_SPAN_DATASTORE_DB_SYSTEM)); + nr_span_event_destroy(&event); } diff --git a/daemon/cmd/integration_runner/reports.go b/daemon/cmd/integration_runner/reports.go index 6ad16c1de..5bd1c3764 100644 --- a/daemon/cmd/integration_runner/reports.go +++ b/daemon/cmd/integration_runner/reports.go @@ -97,7 +97,7 @@ func tapOutput(tests []*integration.Test) { } } default: - fmt.Printf(Good("pass - ")) + fmt.Printf("%s", Good("pass - ")) fmt.Printf("%s", name) if test.Duration > 0 { fmt.Printf(" # time=%vs", test.Duration.Seconds()) diff --git a/daemon/go.mod b/daemon/go.mod index d5e113a57..01a06cd6b 100644 --- a/daemon/go.mod +++ b/daemon/go.mod @@ -1,18 +1,18 @@ module github.com/newrelic/newrelic-php-agent/daemon -go 1.23.0 -toolchain go1.23.6 +go 1.24.0 +toolchain go1.24.2 require ( github.com/golang/protobuf v1.5.3 github.com/google/flatbuffers v23.5.26+incompatible - golang.org/x/net v0.36.0 + golang.org/x/net v0.38.0 google.golang.org/grpc v1.61.0 google.golang.org/protobuf v1.33.0 ) require ( - golang.org/x/sys v0.30.0 // indirect - golang.org/x/text v0.22.0 // indirect + golang.org/x/sys v0.31.0 // indirect + golang.org/x/text v0.23.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect ) diff --git a/daemon/go.sum b/daemon/go.sum index 6c632bed6..37c40e683 100644 --- a/daemon/go.sum +++ b/daemon/go.sum @@ -6,12 +6,12 @@ github.com/google/flatbuffers v23.5.26+incompatible/go.mod h1:1AeVuKshWv4vARoZat github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -golang.org/x/net v0.36.0 h1:vWF2fRbw4qslQsQzgFqZff+BItCvGFQqKzKIzx1rmoA= -golang.org/x/net v0.36.0/go.mod h1:bFmbeoIPfrw4sMHNhb4J9f6+tPziuGjq7Jk/38fxi1I= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= -golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= -golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= +golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 h1:Jyp0Hsi0bmHXG6k9eATXoYtjd6e2UzZ1SCn/wIupY14= google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA= diff --git a/daemon/internal/newrelic/integration/php_packages.go b/daemon/internal/newrelic/integration/php_packages.go index fc9a10a59..380548a54 100644 --- a/daemon/internal/newrelic/integration/php_packages.go +++ b/daemon/internal/newrelic/integration/php_packages.go @@ -290,18 +290,20 @@ func (pkgs *PhpPackagesCollection) OverrideVersionsFile() string { // // Returns: // - []PhpPackage with extracted package info, sorted by package name +// - []string notes to be added to the test // - nil upon error processing JSON // // Notes: Currently only supports an application created with composer -func (pkgs *PhpPackagesCollection) GatherInstalledPackages() ([]PhpPackage, error) { +func (pkgs *PhpPackagesCollection) GatherInstalledPackages() ([]PhpPackage, []string, error) { var err error if nil == pkgs { - return nil, fmt.Errorf("GatherInstallPackages(): pkgs is nil") + return nil, nil, fmt.Errorf("GatherInstallPackages(): pkgs is nil") } var supported []string + var notes []string // get list of packages we expected the agent to detect // this can be one of 3 scenarios: @@ -331,12 +333,12 @@ func (pkgs *PhpPackagesCollection) GatherInstalledPackages() ([]PhpPackage, erro if 0 < len(pkgs.config.supportedListFile) { supported, err = LoadSupportedPackagesList(pkgs.config.path, pkgs.config.supportedListFile) if nil != err { - return nil, err + return nil, nil, err } } else if 0 < len(pkgs.config.expectedPackages) { supported = pkgs.config.expectedPackages } else if !pkgs.config.expectAllDetected { - return nil, fmt.Errorf("Error determining expected packages - supported_packages and expected_packages are both empty " + + return nil, nil, fmt.Errorf("Error determining expected packages - supported_packages and expected_packages are both empty " + "and expect_all is false") } @@ -366,6 +368,16 @@ func (pkgs *PhpPackagesCollection) GatherInstalledPackages() ([]PhpPackage, erro } else { version = v.Version } + + // Remove any additional information extracted (hashes, etc). + // The composer versioning standard is to not include any spaces + // yet sometimes this standard is broken + version_splits := strings.Split(version, " ") + if len(version_splits) > 1 { + notes = append(notes, fmt.Sprintf("Used shortened package version from composer. Originally was \"%s\"", version)) + version = version_splits[0] + } + pkgs.packages = append(pkgs.packages, PhpPackage{v.Name, version}) //fmt.Printf(" -> %s in supported!\n", v.Name) } else { @@ -402,7 +414,7 @@ func (pkgs *PhpPackagesCollection) GatherInstalledPackages() ([]PhpPackage, erro } } } else { - return nil, fmt.Errorf("ERROR - unknown method '%s'\n", splitCmd[0]) + return nil, nil, fmt.Errorf("ERROR - unknown method '%s'\n", splitCmd[0]) } // sort by package name to aid comparision later @@ -410,7 +422,7 @@ func (pkgs *PhpPackagesCollection) GatherInstalledPackages() ([]PhpPackage, erro return pkgs.packages[i].Name < pkgs.packages[j].Name }) - return pkgs.packages, nil + return pkgs.packages, notes, nil } // convert PhpPackage to collector JSON representation diff --git a/daemon/internal/newrelic/integration/test.go b/daemon/internal/newrelic/integration/test.go index 3e70e769a..1911ac58c 100644 --- a/daemon/internal/newrelic/integration/test.go +++ b/daemon/internal/newrelic/integration/test.go @@ -641,6 +641,7 @@ func (t *Test) comparePhpPackages(harvest *newrelic.Harvest) { if nil != t.phpPackagesConfig { var err error + var notes []string expectNullPkgs = "null" == string(t.phpPackagesConfig) if expectNullPkgs { @@ -652,11 +653,16 @@ func (t *Test) comparePhpPackages(harvest *newrelic.Harvest) { return } - expectedPackages, err = expectedPkgsCollection.GatherInstalledPackages() + expectedPackages, notes, err = expectedPkgsCollection.GatherInstalledPackages() if nil != err { t.Fatal(err) return } + if nil != notes { + for _, note := range notes { + t.AddNote(note) + } + } // Determine if we expect an exact match between expected and actual packages // when using the composer API in the agent to detect packages it is possible diff --git a/tests/include/monolog.php b/tests/include/monolog.php deleted file mode 100644 index 8f77925b0..000000000 --- a/tests/include/monolog.php +++ /dev/null @@ -1,52 +0,0 @@ -/dev/null'); - } - - return file_exists($libdir); -} - -/* - * `require_monolog` imports the desired version of Monolog. The main purpose of - * this function is to avoid dealing with absolute import paths in tests. In - * this way, the archive could be unpacked in some different directory without - * altering any test code. - */ -function require_monolog($version) { - require_once( - realpath(dirname(__FILE__)) . - '/monolog' . $version . - '/vendor/autoload.php'); -} diff --git a/tests/include/monolog2.tar.bz2 b/tests/include/monolog2.tar.bz2 deleted file mode 100644 index 21332f674..000000000 Binary files a/tests/include/monolog2.tar.bz2 and /dev/null differ diff --git a/tests/include/monolog3.tar.bz2 b/tests/include/monolog3.tar.bz2 deleted file mode 100644 index 2cea2a67e..000000000 Binary files a/tests/include/monolog3.tar.bz2 and /dev/null differ diff --git a/tests/integration/logging/monolog2/checkdecorateformatter.php b/tests/integration/logging/monolog2/checkdecorateformatter.php deleted file mode 100644 index 5f4a77940..000000000 --- a/tests/integration/logging/monolog2/checkdecorateformatter.php +++ /dev/null @@ -1,38 +0,0 @@ -', $matches[2], "entity.guid correct"); - tap_equal($linkmeta['hostname'] ?? '', $matches[3], "hostname correct"); - tap_equal($linkmeta['trace.id'] ?? '', $matches[4], "trace.id correct"); - tap_equal(true, strlen($matches[5]) > 0 && preg_match("/[\w\d]+/",$matches[5]), "span.id is non-zero length and alphanumeric"); - if (isset($linkmeta['entity.name'])) { - $name = urlencode($linkmeta['entity.name']); - } else { - $name = ''; - } - tap_equal($name, $matches[6], "entity.name correct"); - } - - /* have to return a non-null value which is the output string */ - return ""; - } - - public function formatBatch(array $records) { - foreach ($records as $key => $record) { - $records[$key] = $this->format($record); - } - - return $records; - } -} diff --git a/tests/integration/logging/monolog2/skipif.inc b/tests/integration/logging/monolog2/skipif.inc deleted file mode 100644 index 19cee3447..000000000 --- a/tests/integration/logging/monolog2/skipif.inc +++ /dev/null @@ -1,15 +0,0 @@ -= 7.2 required\n"); -} - -require_once(realpath(dirname(__FILE__)) . '/../../../include/monolog.php'); - -if (!unpack_monolog(2)) { - die("skip: monolog2 installation required\n"); -} diff --git a/tests/integration/logging/monolog2/test_monolog_basic.php b/tests/integration/logging/monolog2/test_monolog_basic.php deleted file mode 100644 index 467e6fddd..000000000 --- a/tests/integration/logging/monolog2/test_monolog_basic.php +++ /dev/null @@ -1,205 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_basic_clm.php b/tests/integration/logging/monolog2/test_monolog_basic_clm.php deleted file mode 100644 index 18ff817c2..000000000 --- a/tests/integration/logging/monolog2/test_monolog_basic_clm.php +++ /dev/null @@ -1,162 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_basic_clm_off.php b/tests/integration/logging/monolog2/test_monolog_basic_clm_off.php deleted file mode 100644 index 9174b57a7..000000000 --- a/tests/integration/logging/monolog2/test_monolog_basic_clm_off.php +++ /dev/null @@ -1,156 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_cat.php b/tests/integration/logging/monolog2/test_monolog_cat.php deleted file mode 100644 index 28b07a510..000000000 --- a/tests/integration/logging/monolog2/test_monolog_cat.php +++ /dev/null @@ -1,187 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_context_default.php b/tests/integration/logging/monolog2/test_monolog_context_default.php deleted file mode 100644 index dcf714534..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_default.php +++ /dev/null @@ -1,105 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value"); - $logger->debug("None converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_exception.php b/tests/integration/logging/monolog2/test_monolog_context_exception.php deleted file mode 100644 index 1a3af273e..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_exception.php +++ /dev/null @@ -1,106 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - $context = ['exception' => new \RuntimeException('Foo')]; - $logger->alert("context is nested array", $context); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_context_filter_extra1.php b/tests/integration/logging/monolog2/test_monolog_context_filter_extra1.php deleted file mode 100644 index 2ca1f2861..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_filter_extra1.php +++ /dev/null @@ -1,117 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("AA" => "AA value", "AB" => "AB value", "AC" => "AC value", "BB" => "BB value"); - $logger->debug("AA AB AC converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_filter_extra2.php b/tests/integration/logging/monolog2/test_monolog_context_filter_extra2.php deleted file mode 100644 index 4d2797632..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_filter_extra2.php +++ /dev/null @@ -1,112 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("AA" => "AA value", "AB" => "AB value", "AC" => "AC value", "BB" => "BB value"); - $logger->debug("None converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_filter_extra3.php b/tests/integration/logging/monolog2/test_monolog_context_filter_extra3.php deleted file mode 100644 index a9f8a6b9d..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_filter_extra3.php +++ /dev/null @@ -1,117 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("AA" => "AA value", "AB" => "AB value", "AC" => "AC value", "BB" => "BB value"); - $logger->debug("AA AB AC converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_filter_extra4.php b/tests/integration/logging/monolog2/test_monolog_context_filter_extra4.php deleted file mode 100644 index 047fb2027..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_filter_extra4.php +++ /dev/null @@ -1,117 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("AA" => "AA value", "AB" => "AB value", "AC" => "AC value", "BB" => "BB value"); - $logger->debug("AA AB AC converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_filter_extra5.php b/tests/integration/logging/monolog2/test_monolog_context_filter_extra5.php deleted file mode 100644 index d0a0b4d91..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_filter_extra5.php +++ /dev/null @@ -1,116 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("AA" => "AA value", "AB" => "AB value", "AC" => "AC value", "BB" => "BB value"); - $logger->debug("AA AC converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_filter_rule1.php b/tests/integration/logging/monolog2/test_monolog_context_filter_rule1.php deleted file mode 100644 index 8dbfdddc4..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_filter_rule1.php +++ /dev/null @@ -1,117 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value"); - $logger->debug("A B C converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_filter_rule10.php b/tests/integration/logging/monolog2/test_monolog_context_filter_rule10.php deleted file mode 100644 index 18697f092..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_filter_rule10.php +++ /dev/null @@ -1,115 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("AA" => "AA value", "AB" => "AB value", "AC" => "AC value", "BB" => "BB value"); - $logger->debug("AB converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_filter_rule11.php b/tests/integration/logging/monolog2/test_monolog_context_filter_rule11.php deleted file mode 100644 index ffd6f579b..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_filter_rule11.php +++ /dev/null @@ -1,116 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("AA" => "AA value", "AB" => "AB value", "AC" => "AC value", "BB" => "BB value"); - $logger->debug("AA AC converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_filter_rule2.php b/tests/integration/logging/monolog2/test_monolog_context_filter_rule2.php deleted file mode 100644 index 5a248a86a..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_filter_rule2.php +++ /dev/null @@ -1,115 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value"); - $logger->debug("B C converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_filter_rule3.php b/tests/integration/logging/monolog2/test_monolog_context_filter_rule3.php deleted file mode 100644 index 9876b0a80..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_filter_rule3.php +++ /dev/null @@ -1,115 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value"); - $logger->debug("A B converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_filter_rule4.php b/tests/integration/logging/monolog2/test_monolog_context_filter_rule4.php deleted file mode 100644 index 54706fcd8..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_filter_rule4.php +++ /dev/null @@ -1,116 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value", "D" => "D value"); - $logger->debug("A B converted", $context); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_context_filter_rule5.php b/tests/integration/logging/monolog2/test_monolog_context_filter_rule5.php deleted file mode 100644 index b37e07c53..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_filter_rule5.php +++ /dev/null @@ -1,114 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value", "D" => "D value"); - $logger->debug("A converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_filter_rule6.php b/tests/integration/logging/monolog2/test_monolog_context_filter_rule6.php deleted file mode 100644 index ed89207a6..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_filter_rule6.php +++ /dev/null @@ -1,112 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value"); - $logger->debug("None converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_filter_rule7.php b/tests/integration/logging/monolog2/test_monolog_context_filter_rule7.php deleted file mode 100644 index ae85e5201..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_filter_rule7.php +++ /dev/null @@ -1,114 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value"); - $logger->debug("A converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_filter_rule8.php b/tests/integration/logging/monolog2/test_monolog_context_filter_rule8.php deleted file mode 100644 index 8f9e4ca28..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_filter_rule8.php +++ /dev/null @@ -1,116 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value"); - $logger->debug("B C converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_filter_rule9.php b/tests/integration/logging/monolog2/test_monolog_context_filter_rule9.php deleted file mode 100644 index 3b01a0dfc..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_filter_rule9.php +++ /dev/null @@ -1,116 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("AA" => "AA value", "AB" => "AB value", "AC" => "AC value","BB" => "BB value"); - $logger->debug("AA AC converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_hsm_disable_forwarding.php b/tests/integration/logging/monolog2/test_monolog_context_hsm_disable_forwarding.php deleted file mode 100644 index 9d7deb336..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_hsm_disable_forwarding.php +++ /dev/null @@ -1,137 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $context = ["testkey_string" => "value"]; - $logger->debug("key is string converted", $context); - usleep(10000); - - $context = [1 => "value"]; - $logger->info("key is int not converted", $context); - usleep(10000); - - $context = ["int" => 1]; - $logger->notice("int value converted", $context); - usleep(10000); - - $context = ["dbl" => 3.1415926]; - $logger->warning("dbl value converted", $context); - usleep(10000); - - $context = ["TRUE" => TRUE]; - $logger->error("TRUE value converted", $context); - usleep(10000); - - $context = array("FALSE" => FALSE); - $logger->critical("FALSE value converted", $context); - usleep(10000); - - $context = ["array" => array('foo' => 'bar', 'baz' => 'long')]; - $logger->alert("array value not converted", $context); - usleep(10000); - - $context = ["object" => $logger]; - $logger->emergency("object value not converted", $context); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_context_limits_1.php b/tests/integration/logging/monolog2/test_monolog_context_limits_1.php deleted file mode 100644 index 5d55319d8..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_limits_1.php +++ /dev/null @@ -1,107 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $key = str_repeat("A", 300); - $context = array($key => "value"); - $logger->debug("None converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_limits_2.php b/tests/integration/logging/monolog2/test_monolog_context_limits_2.php deleted file mode 100644 index f314a45c1..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_limits_2.php +++ /dev/null @@ -1,110 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $value = str_repeat("A", 300); - $context = array("key" => $value); - $logger->debug("Value truncated", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_context_precedence_1.php b/tests/integration/logging/monolog2/test_monolog_context_precedence_1.php deleted file mode 100644 index 498cef79b..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_precedence_1.php +++ /dev/null @@ -1,108 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - $context = ["testkey_string" => "value"]; - $logger->debug("key is string converted", $context); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_context_precedence_2.php b/tests/integration/logging/monolog2/test_monolog_context_precedence_2.php deleted file mode 100644 index 929c7c5ac..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_precedence_2.php +++ /dev/null @@ -1,108 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - $context = ["testkey_string" => "value"]; - $logger->debug("key is string converted", $context); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_context_simple.php b/tests/integration/logging/monolog2/test_monolog_context_simple.php deleted file mode 100644 index 977d3c139..000000000 --- a/tests/integration/logging/monolog2/test_monolog_context_simple.php +++ /dev/null @@ -1,238 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $context = ["testkey_string" => "value"]; - $logger->debug("key is string converted", $context); - usleep(10000); - - $context = [1 => "value"]; - $logger->info("key is int not converted", $context); - usleep(10000); - - $context = ["int" => 1]; - $logger->notice("int value converted", $context); - usleep(10000); - - $context = ["dbl" => 3.1415926]; - $logger->warning("dbl value converted", $context); - usleep(10000); - - $context = ["TRUE" => TRUE]; - $logger->error("TRUE value converted", $context); - usleep(10000); - - $context = array("FALSE" => FALSE); - $logger->critical("FALSE value converted", $context); - usleep(10000); - - $context = ["array" => array('foo' => 'bar', 'baz' => 'long')]; - $logger->alert("array value not converted", $context); - usleep(10000); - - $context = ["object" => $logger]; - $logger->emergency("object value not converted", $context); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_decoration_and_forwarding.php b/tests/integration/logging/monolog2/test_monolog_decoration_and_forwarding.php deleted file mode 100644 index 8bab481b2..000000000 --- a/tests/integration/logging/monolog2/test_monolog_decoration_and_forwarding.php +++ /dev/null @@ -1,261 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_decoration_basic.php b/tests/integration/logging/monolog2/test_monolog_decoration_basic.php deleted file mode 100644 index 1b3141a65..000000000 --- a/tests/integration/logging/monolog2/test_monolog_decoration_basic.php +++ /dev/null @@ -1,171 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_decoration_multiple_handlers.php b/tests/integration/logging/monolog2/test_monolog_decoration_multiple_handlers.php deleted file mode 100644 index bd0a93b75..000000000 --- a/tests/integration/logging/monolog2/test_monolog_decoration_multiple_handlers.php +++ /dev/null @@ -1,228 +0,0 @@ -setFormatter($formatter); - $noopHandler = new NoopHandler(); - $processHandler = new ProcessHandler('cat > /dev/null', logger::DEBUG); - $processHandler->setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - $logger->pushHandler($noopHandler); - $logger->pushHandler($processHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_disable_forwarding.php b/tests/integration/logging/monolog2/test_monolog_disable_forwarding.php deleted file mode 100644 index 99bc62edc..000000000 --- a/tests/integration/logging/monolog2/test_monolog_disable_forwarding.php +++ /dev/null @@ -1,104 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $logger->debug("debug"); - $logger->info("info"); - $logger->notice("notice"); - $logger->warning("warning"); - $logger->error("error"); - $logger->critical("critical"); - $logger->alert("alert"); - $logger->emergency("emergency"); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_disable_logging.php b/tests/integration/logging/monolog2/test_monolog_disable_logging.php deleted file mode 100644 index e6ccdfe0e..000000000 --- a/tests/integration/logging/monolog2/test_monolog_disable_logging.php +++ /dev/null @@ -1,95 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $logger->debug("debug"); - $logger->info("info"); - $logger->notice("notice"); - $logger->warning("warning"); - $logger->error("error"); - $logger->critical("critical"); - $logger->alert("alert"); - $logger->emergency("emergency"); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_disable_metrics.php b/tests/integration/logging/monolog2/test_monolog_disable_metrics.php deleted file mode 100644 index 718b14468..000000000 --- a/tests/integration/logging/monolog2/test_monolog_disable_metrics.php +++ /dev/null @@ -1,157 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $logger->debug("debug"); - $logger->info("info"); - $logger->notice("notice"); - $logger->warning("warning"); - $logger->error("error"); - $logger->critical("critical"); - $logger->alert("alert"); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_drop_empty.php b/tests/integration/logging/monolog2/test_monolog_drop_empty.php deleted file mode 100644 index 45504d370..000000000 --- a/tests/integration/logging/monolog2/test_monolog_drop_empty.php +++ /dev/null @@ -1,175 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug(""); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning(""); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert(""); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_escape_chars.php b/tests/integration/logging/monolog2/test_monolog_escape_chars.php deleted file mode 100644 index fbba6143c..000000000 --- a/tests/integration/logging/monolog2/test_monolog_escape_chars.php +++ /dev/null @@ -1,97 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $logger->debug("This string has some characters which should be escaped: \" \\ / \x08 \f \n \r \t GBP sign \xc2\xa3xxx"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_hsm_disable_forwarding.php b/tests/integration/logging/monolog2/test_monolog_hsm_disable_forwarding.php deleted file mode 100644 index 3fd7ae3bb..000000000 --- a/tests/integration/logging/monolog2/test_monolog_hsm_disable_forwarding.php +++ /dev/null @@ -1,104 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $logger->debug("debug"); - $logger->info("info"); - $logger->notice("notice"); - $logger->warning("warning"); - $logger->error("error"); - $logger->critical("critical"); - $logger->alert("alert"); - $logger->emergency("emergency"); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_basic.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_basic.php deleted file mode 100644 index b4a8d03c5..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_basic.php +++ /dev/null @@ -1,216 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_basic_comma.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_basic_comma.php deleted file mode 100644 index c34a97ebc..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_basic_comma.php +++ /dev/null @@ -1,215 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_basic_mixedcase.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_basic_mixedcase.php deleted file mode 100644 index c91d88ca1..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_basic_mixedcase.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_basic_mixedsources.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_basic_mixedsources.php deleted file mode 100644 index 0857491a9..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_basic_mixedsources.php +++ /dev/null @@ -1,227 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_basic_withspaces.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_basic_withspaces.php deleted file mode 100644 index 34ffafde0..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_basic_withspaces.php +++ /dev/null @@ -1,218 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_disabled_01.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_disabled_01.php deleted file mode 100644 index 8a3769dec..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_disabled_01.php +++ /dev/null @@ -1,214 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_disabled_02.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_disabled_02.php deleted file mode 100644 index f29ebff4e..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_disabled_02.php +++ /dev/null @@ -1,126 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_disabled_03.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_disabled_03.php deleted file mode 100644 index b9c15401f..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_disabled_03.php +++ /dev/null @@ -1,117 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_disabled_04.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_disabled_04.php deleted file mode 100644 index e9abceeab..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_disabled_04.php +++ /dev/null @@ -1,209 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_disabled_05.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_disabled_05.php deleted file mode 100644 index fbec1ce44..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_disabled_05.php +++ /dev/null @@ -1,118 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_01.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_01.php deleted file mode 100644 index cd570d649..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_01.php +++ /dev/null @@ -1,216 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_02.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_02.php deleted file mode 100644 index c9423d45a..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_02.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_03.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_03.php deleted file mode 100644 index e86c53bbb..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_03.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_04.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_04.php deleted file mode 100644 index f2ad40f0f..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_04.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_05.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_05.php deleted file mode 100644 index 7526e8210..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_05.php +++ /dev/null @@ -1,216 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_06.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_06.php deleted file mode 100644 index a2ccce1d4..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_06.php +++ /dev/null @@ -1,218 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_07.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_07.php deleted file mode 100644 index 843e08fab..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_07.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_08.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_08.php deleted file mode 100644 index 7477c5823..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_08.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_08a.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_08a.php deleted file mode 100644 index b3da4cf03..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_08a.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_09.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_09.php deleted file mode 100644 index 783bd276a..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_09.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_10.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_10.php deleted file mode 100644 index aaf272ea6..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_10.php +++ /dev/null @@ -1,218 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_11.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_11.php deleted file mode 100644 index b96840866..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_11.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_11a.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_11a.php deleted file mode 100644 index 731e7fc6a..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_11a.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_12.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_12.php deleted file mode 100644 index 959443b2a..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_12.php +++ /dev/null @@ -1,215 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_13.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_13.php deleted file mode 100644 index de5c2b882..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_13.php +++ /dev/null @@ -1,217 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_14.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_14.php deleted file mode 100644 index baef46cba..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_14.php +++ /dev/null @@ -1,221 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_15.php b/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_15.php deleted file mode 100644 index b3ff5150b..000000000 --- a/tests/integration/logging/monolog2/test_monolog_labels_forwarding_exclude_15.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_large_message_limit.php b/tests/integration/logging/monolog2/test_monolog_large_message_limit.php deleted file mode 100644 index 58898c208..000000000 --- a/tests/integration/logging/monolog2/test_monolog_large_message_limit.php +++ /dev/null @@ -1,82 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - /* maximum log event pool is 833 events every 5 second fast - * harvest cycle. Send that number of events and verify - * all are accepted. - */ - for ($i = 0; $i < 833; $i++) { - $logger->debug("message " . $i); - } -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_large_message_limit_drops.php b/tests/integration/logging/monolog2/test_monolog_large_message_limit_drops.php deleted file mode 100644 index 23ba7f185..000000000 --- a/tests/integration/logging/monolog2/test_monolog_large_message_limit_drops.php +++ /dev/null @@ -1,82 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - /* maximum log event pool is 833 events every 5 second fast - * harvest cycle. Send more than that number of events and verify - * correct number are dropped. - */ - for ($i = 0; $i < 833*2; $i++) { - $logger->debug("message " . $i); - } -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_limit_log_events.php b/tests/integration/logging/monolog2/test_monolog_limit_log_events.php deleted file mode 100644 index 61d3e9ac1..000000000 --- a/tests/integration/logging/monolog2/test_monolog_limit_log_events.php +++ /dev/null @@ -1,165 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_limit_zero_events.php b/tests/integration/logging/monolog2/test_monolog_limit_zero_events.php deleted file mode 100644 index 27259ec45..000000000 --- a/tests/integration/logging/monolog2/test_monolog_limit_zero_events.php +++ /dev/null @@ -1,105 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $logger->debug("debug"); - $logger->info("info"); - $logger->notice("notice"); - $logger->warning("warning"); - $logger->error("error"); - $logger->critical("critical"); - $logger->alert("alert"); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid1.php b/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid1.php deleted file mode 100644 index 45d6d243c..000000000 --- a/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid1.php +++ /dev/null @@ -1,85 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - /* maximum log event pool is 833 events every 5 second fast - * harvest cycle. Send that number of events and verify - * all are accepted. - */ - for ($i = 0; $i < 833; $i++) { - $logger->debug("message " . $i); - } -} - - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid2.php b/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid2.php deleted file mode 100644 index c755300e8..000000000 --- a/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid2.php +++ /dev/null @@ -1,85 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - /* maximum log event pool is 833 events every 5 second fast - * harvest cycle. Send that number of events and verify - * all are accepted. - */ - for ($i = 0; $i < 833; $i++) { - $logger->debug("message " . $i); - } -} - - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid3.php b/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid3.php deleted file mode 100644 index 4a8bda669..000000000 --- a/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid3.php +++ /dev/null @@ -1,85 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - /* maximum log event pool is 833 events every 5 second fast - * harvest cycle. Send that number of events and verify - * all are accepted. - */ - for ($i = 0; $i < 833; $i++) { - $logger->debug("message " . $i); - } -} - - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid4.php b/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid4.php deleted file mode 100644 index 48ce72595..000000000 --- a/tests/integration/logging/monolog2/test_monolog_log_events_max_samples_stored_invalid4.php +++ /dev/null @@ -1,85 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - /* maximum log event pool is 833 events every 5 second fast - * harvest cycle. Send that number of events and verify - * all are accepted. - */ - for ($i = 0; $i < 833; $i++) { - $logger->debug("message " . $i); - } -} - - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_log_level_filter.php b/tests/integration/logging/monolog2/test_monolog_log_level_filter.php deleted file mode 100644 index 527546f47..000000000 --- a/tests/integration/logging/monolog2/test_monolog_log_level_filter.php +++ /dev/null @@ -1,175 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_log_level_filter_invalid.php b/tests/integration/logging/monolog2/test_monolog_log_level_filter_invalid.php deleted file mode 100644 index 75a63ad64..000000000 --- a/tests/integration/logging/monolog2/test_monolog_log_level_filter_invalid.php +++ /dev/null @@ -1,176 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog2/test_monolog_truncate_long_msgs.php b/tests/integration/logging/monolog2/test_monolog_truncate_long_msgs.php deleted file mode 100644 index eb09c117e..000000000 --- a/tests/integration/logging/monolog2/test_monolog_truncate_long_msgs.php +++ /dev/null @@ -1,107 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $too_long_msg = "FDTZJACCUOBPXLNMOIRNOTGWNDYSIFHLRNXKIZHOIUSOGBZEBVLCOFJZYGJRVYAYYZDAHNGNLLLCFMWJFARUOJXOWJXOOULAQCUFMWFRGJYIQWNEAMJYHUYTNIYQNXSMIKRWIOZLUUBCTTBFRCUVYXWBHBWHOCNLBEZLMVKRLIGNBUTWAIZFLDZKTGWOOJPCOAOGAABJYNPPVPACIGELXNWYTPTWJIRIMNBIYZNOOFPUQNAELRZBFCHKMIDFYMFWZEOYHGJJKARRBBWXZVXOIXSONHSLUGBWMYTAAJXLCYJWVKIHHHQBMGMEJPTYFYTEXTOFRNJWJDEUDJXDOJJDHCEZIEVUDUQPPFTPDIILIDQHGTTTLTMVFMKZQSRPXSXLNNDGAZQNGRKKQCZLHQJTSXTEQXQYYVQUBVEHUBGELMPOCTTOUUDRUCPWOVUWFNNEHIBPOYZLAENPWNDDYGJIXVXVRFHNRLNSKKUISMQDFXETOSAHDJHWPTGOBVFZXDVRTDJCQOZXVYDMZIXRFOYJQWXXSOITDYMTPEIUMYIUPTGZEZZRGGCYYBAJZFCBIXUFIMNTXXVEFWTKSBAQGIUBHMWGXMOUDEBZMURZTPUBLACSEIPVRJLIPXBSFIXPRPLIQSXDIKCPGFUDSUQSUYWYLAHJSEAQVAZTRJUMYFIXHOBQWBNCZBTTJDGXNXGWGOWEJXQKIMEBEMMFMGXEQPPKFFGHOBHROCMOLBIIMDUHNBVMCOHOCCFSSQDUKLHHUSQWKCBYTYLAUJPIXDPJROCBNVFLGSSKNWGVCVFQARBBWOFQUMFMLOXRXYWIHQPEWVTRMPLLIZJYNWTGRVCOUXLSVOLKBBPQAVLBXAFZACRWAWBIGSISYEPKIXUTKSSAOBMUNXVPWBBJLPFRVLWMVGMRLKRWCRHGPYGRQJMLONHMDVUCGDDBFNTJFZJAPCIENKTYYWJVDTRNEHSGFRECXIBCUIHJBSPVZHXWWJHGPOQLKHATHASRHGCTRBSHMHHKPPRMGTMHPLLAVAQWBRMZAIQBZUAHIYZRILBFSETYNGEYFCQTXCUYONBUIRUMNFFXIDERILPLPNWKSJSZFBNEZIJVIJTXDHVWRNQXVXBRREQSPLNSLTQVTQMIJITAWSXQWTCUUSBMFMDQGGDWQZYZYVYBDYCQPVQTJRWLFBHMUPXDEMHKELTETYGCHWQIWPKUILCHSZNNXICSAWWZXWPBJGGHSLQJMCXNDMZZKOXXRMRBMHXOQIUTCKVFJPFHXAUFTNZQTKBQDMSDDFTAGOBPMJBOHQBESQPOSXKAXXRUTTSLPMVVKWCGELHFOAPEQKGJAQQVSDFRGRFCNKUFEUDAGGBMGDPQFUTZICDIEJYTJDITEVBFQGUHKQVGTUUXDOYITUYYMEMUECHMDIMHKBAQBCEZALVHXUVVRGMFAVLXBVMZLUJIBEPVVTWAADGGLJGDAGXIVWTNROTZTTUANDROKYHABSVBPHIFHOXZUAONPYNRYLTIMZCQMHMSWLRAQBSJJYTPZVHGEEEJJEGJTPSWUXUBANUKBDPJDLUUQENVLTJYDBEEPSUMMOBLRYUVDXQQKPMGAMUAPJVNQZXFUOIBWNVSJTEFDQKONKNDNWCEAXRSVVUHEHELCNHKEJTQAEJHWJHCTDYLIXYZEAJHDKAPPVEBVPGNOODVDZRVVIBTKCVVFYTMYLIXAXNWOYTBYTJOLXZGFMGHTEBJERDFUREHVDFMLPBCAIJPXQMSMVMNMBSKVLLPILSEDPVLNJFLFNBMJYKROTJBCLRQEASNKNDCTOOWKDMNYXPTDGAHWWEAZMCTZMHYKHQFDNGBFUEETSRCSPYWJOEWPXARSXRGROJAJBAXVGABCQDIKHWDRELNTQEFFZXOEDAACIWIZTRWTFCHZMYBJPIYDXGESSFJCXUSMLRUVVXDKBHUZFNHLEKWQKYEZAADGBKRLLGRNIZSDVUOZACNMDQUHXGZYFKGGHSMUDSALIQACDLPPJIZSAYEEODNJYYFOLMNYZCECNWEKOBNWSGUVAEHWXBUEIFLQOUFBOJWGIPUQAOBQAUJLVLLVDVYWVWLCMNFXUOLXORMCMTQRCJHEOWRPSFZTSVYBPJSMJWUXYWRBTSCKJNFXBHZLWXMDZFFYWTXOOHPONPUBQCPLNEDRRKUUDNYPLMPIGKFWFISKBAMZBECUCCRYDPLMDLIFYSOULJGYFEYKHYAVCRSWRYZVKSCNYPVLJXFMQHCUCBQPINBWLFNHXLQZPOAXPBGHKDHAVASAETZUZAVULASJZTZUQOMDBDCXREESMELDFWKZVBGTTBWMGDZJAINMEMIVVWJZXBOPJXAEAYGSJIWDRIIEGXVEQCISINOSRNTMHQPSBQIXVBKYRDYBBGJCMGGVRWZBFVLGNUNUVCFGIGMJFHMTKZLCAFGARQCUMBLLIACPRTDRCMVWIMLUNYKJKLMIFZCCCKBGLSKRHHXMWDCQQTNWMMSHWSZUVEGVDTCUPNJOXILZAUQJSRVCHXMXKGBOFCHSLMZFKIPAADCKIBZDZCFYWBZPLHMEUSJBJWKQEGRZKJPTKAZSHKHPKPPJDNTKQHBCOYXFKSFQAAIBORMBPTMJWALZGAFMZZTESNMBZDFXXHWSNQDZUUMUVGVWCCEUNMNBIIMGVDORHJCBHGSVONJLCFLRNRRBWCJOZOFHNBCMNVDVHCVJRVCIYOSWJKQCXYKQLDOJNFQQFFTTTLLXQDZJRUZNRRQGDZRNMLYLUQLWUOQGZENTYXHUIBESVDARZHQZGYMTBNPMLQLJYELEYJRFPCQCWSCLUJHDHYFUAYPCNHBKWZBJXNNHDGOAUZWRXQZIISJCVGLGDYYCFHMPGAFRHRKCFZFDFAAEPLSAQLMCVLRPIRHPYATWKHGMTBJRFAMDEBHPMLNEGLKTAYBXVDGJKRPFPAMAYDESIFDLCLLXKOHTDFXZOWAZNFEXSNRGCCAZPACHBOGMFITVRJLOJZHXIEPHNWBDSLMTWKBEVOXIWCFQZLTXGAUKZMFGRDTODMDPLCFTQDVITFMJDPJYNCLUXRYLXWMFPROLVJXIFVZYPXZSEAYBFGUZTNEZGZLEODAYHFJDLJRMWNJHJDSEWBOJFASHVROUCISICLQGDOOHWABTXSTNQCDHKGNZMNPEFVLCIDMSOJGONMYALGOHBRLKDKPURDPVIWATIEIQZTXCHJQDMLIHXZZVLKRWQNDDELMCXURKQIUFXJBPQIIRYRRPGIZUOOSFTDXEYJRYRDAVKSBWWCCJJZRJDBIYQLQHYEYUMBTPPQOSRFFFBBLAXWWYEBWECSEJBOVVWXKKEVPNNMEHQKEACOAWIWOVCSHFOUCFBFIBRZWKDWWIVSFGBWXHIINCRLPJUXQRYTUJNMMMRBWOFTSLYZCPWFYGUIRDVEUWQQAXFGNNVNPCPMSVBSPHRGUMLCUOVWCPJPJCOEFIIJVVDYQYLEBNOPBDMTWAXSBVSQLMKEZFJJXIQINPFVEFAGJGJJETJZRJHKSVNZMYNNNWHQSJLKDGXSAYNLRHHVEVZPSZZPAOEUGGMGUMBXVPKRVDPWIFDJENWBLGCINUBVXKVECNQJNESWNCUTZTSFYTWJCQRIMJVWCPRAJCWICYOVTZNKWXNJRMGMOUQRGLYRACXZDXVITRPTMNEVTPULUWLKSJKIHVCBQYCWQXGNIJNLZVZAGWMTRUVMOJJYUETQVEDFWVLAVPWNVBHZJZZOMXGVCDLHLTOPXZIDRNTNONWHIBFLNAELCOAQTZCNIIABCQQISBXDKESKHXEPCKJYUYDYRHDTOMJJNLUKQUADFDHQUCYFLCBYZCJXRAFBPNSETGNLZGBPDYYKZXEDJEWZPBRKEBHUCZZOYYUNXSRKYAUWAUXPXTDOJLKBQOSOZOEHRSWXDINYYPGMEJWVSCVJGMWMHOWZXTJYDDNXTFPMEUKVWQXAQWEHBESNSHEXNSHRPKKWTKCIAFLQZESCEZYTFOVMMOAOATHGDYXSAGGZMTEINMAUWEFNZWAVIJZALNOFBLAJIRFYRULUXDNASTAGNNLVAAQGRWEAJIFCVKWPELZXOWOURWKDTBXFQQJSVXNENEHPZNNTTBLXZHHBHLZNSMVRYGGZEQVVIDMJRHXZOPTRWGNQQKAUJVSPJKKBIMEECDXNGPADXBNFGDIWDVBFUUDUYJUJMVSXASGXTVYKFGUUBLYQRSAYOOYVJBQPCGQWFYSGQQDEVGPDWLIUBGOKQJGSYDJEPNHMAFOYKQGJCIYCWYTYKXUTORXTVIBSRVTOIMULODBDPPTHAONXLVYBTDHPBRCBTTKVDMCIQZRKOLLCTXORFBFWNSUVSFZHYYGZNSUULQHZQPQAJIKTSPBCTOBPTQIECQRTQKFEFKBAUIKWCOHUFQVXNCYSJSEUPBZOTLCDMIGBIQMYNXCNRPHGNZVHUEGNIOPCXVVQFWVVFOQHXGGTQMRORMNULXKKHAGBZSRONTTGSSSZUVHFIRAJQYHYNRIEKZMAESBEOFDGFKFWMNMDKAOBBWSNGSRIKNUELXQIIKEIOVGKPYGGASGTKMOSJWIMWEBPYKWWGLVYQVOPOCECPMPCZOZNQRTWWVHSXQDUWSCJMAZLBCXXSDMFEXTMXMVNSLCOKMHAJGEIWBSVOYALFTLWYOHKCEAHZXDRGOBSXTAVPADGRCPTMAPVTUMIVQENJUNIDUGUDKYOBCPKSLPZBLTDRBPRVFWCEGQJEKJIECKXXGSUPMKXLOORYGKFCMHZETJSFTBZLLGPOEXVXDQMPTUWOULQKHBBPUSYAOAKITHTAILKIRPBBKCSUYDAYLPWXDUOCIGUGIKQJLEYJFLQNOARSGPERBKWNQWQBSQWNSYMHQGVSESIDHYSBWECKLQKHROMFSRXVOYPCYECZMCTBBWJSHEZZOSPQFTVUKUDQHKVGEBZBRCXHEJDHQTTMOUUOVTGPZTRRJFVBCYUEWFOSVYDBKSJHWAGGOAJHYVCNGMRAVROPNHDJDNJVHLFFSOUXCTBSBELJNNUIEYWOTMFYLCHVMTXCWHCJZRNKHRNMIYFCGJNQHJBSRDLJBDGUWJXDNKYEGWBMJNQPALTTKOKZSHOUOQKDGKPZGHCSJVIKKDPKLSDHUJNLAEXAIKRUVROIQOZSREGIIRHDXCQNHMUJXPXKTDPBIDNZCPVWZVGFFEKZPXEZKGXTMKSZWTQNBSGNWRYPIXMUHGITKUTQFGZSPXENFFDFNNCYDKWKOAKUSOKVASHPUUSVZFQLLSWMFKMLMYXNLFCVZLVYWRUWPZFLAHZPNBIRNMGOBGMCKJCFIRIIECJWWUSWSOJBCFUYXZCSHYCOWSGCFAMFMBLCZABCMBHVWLAJNEDWOQBSDKCXFYPYNCNJTKGPYVWAKKMZBVXXFAKKJTMBWUPZVNTXZSCBOAWGGRTLEOOVQYWLQVAXPMVQETIQXRCKBIWHUUMFKBNRNKHKPERNKOYFWWTBADZRJACAAJZCBNTGDOGZBFFTFCFUZRJBEMJDZOTNZNDWFVGSMMYSRLKAWUVLVVPQSXUUKKJBPNJAMDTEGXYAYYYDVJZNYXVCVDSITTITSALGGJXKEJWNXLAVHBFVLOFNDGDURAYMIWCITVZIUHQHPWTYXOUGVYVSYJYIQTGAWAKDMROSWXNFWNEPNRRSCKBWTGPRTYLMRLRCQVKRQQERJZWIHUXANMXJHBRSGKKBMPSOYDVESDOIOMCHKQWTBUCZUINXGNXULDDMYDHBUDTXPORDPWQWCLBIAROLIGVSWMEGFBSQRNAXWDJUBOLEPEOHBKNEHYHNDDOZAORCQFLWLGLZJUBNYNTOEGYVIATDBBURPVCCXUQKAODJWUWOMBJJOBSZHTESIKSVQIYSPXADPBHFVSLOEKBCBXTKBJKNSQJHVJNHPTAIBLLUWAFEXQWCBPVONOHWDJSIVILROUTBDLRZOYJCEYGWWCUFNMNOVMMMIZKGDXNCNBKNBWFAMQSEEHREYCVBDCVFJRGQDTEFXFEQYEUQKNPRFMWBHUDKZADIXDOZMKUCITKTYPPCXWZUJNALEWRCWYRPQSEYEMJVNRDNORLQLWLXABYXVLGPGHMRLFWQDDREOKECHXJLXGSHOZKKBKGTIMJEWVRFZACCQGSCYFTCPVUHXSDMDKYBDBFGPDCERHBJJNBUBRFPKNXNUQKFFKFSGQRZRDAVRBCRZYUZBWTKUSWNLAGSNJENCZHJIBKELOEFTWLEOGPSTSHDLTMBEJILUYXMWIYHWHLXERKLKENHWFHHMZMLTQHKDQNRVCLEVGFFGPVRFCMARRKGWONBKJDIKUNHIKSRUKDSZGHGQNHQKPPMTVSINUJXJHLZLULGIQQHIIEYOOBNJHZGQRRSHONVWESSHUUSCNWRDQOIZNEHDHSUZUIRQLBWEFYFPTJSRDZVIDIHTGRCWXNGKRAORPYMCQHSBHOCNVKRCZULABTDOPWPDABOCWRWEQBYLEDOUGWVCCTZXIFYHKDFBKWWUZSZZTBLDRTQJBOOJXCLUGOMWWVYFGKIDDRIXQOEXHJKTJTMQIYITFUVTOSLKVOMSDVGUHXEGEZRZZUAAKGCZYAEFJIPWPMCFHFLQRGHHWEOTHDBKHVEOOUSXAINIZOVPONIYMNLDOIJEUPSKREEHTWHTSREKDCIWDPCRWYSRAVBTNALIBNXYCWKPSWLVEKLLYHDWRXQUTMNFJHPJCSVKEOESCQBQAWZQRSCYASNJZZAJFUNGRFCFUHQOCCJKCUIRDTZZEKROYHJWXYACPTBVCOEVXKKLHZOZRAZBHZPOFESQSAPKCHXSBDXGUNKKXJHEGRIUVOZYLYQAJBMQGIWPVHGAFQXBXHKIDORYRZTOVLKBNKVKXPORFDBECOMZVSOIJWBSNFNJPAVTORWOPEKFBWHHLZQYSSOXXILILQIKMKUXJUAEMLTMHOSXUEGRKZEWAUDMWBLOKKDAZWSKBUYIWFFGOLFVNRAAYAMUVLBOATKLEAUJBZOTTTRBPPDZAJFUHZRPFRRDPATFUYDYJTRFLFUIIRSXMVCUZXDLRBHDQQZHNHBKSWEXWZBUBLRDJJLXHPYYNVYFTQXSDHAVHYQFXLFTONEAKDXMCWPSJALQEPNXJGVOEUZYKGOLIBDRXBAOAHIWJVTAIESFDWPZLVJOZLNVIDHARYYODBCXZWYLGWPQEGUVYUSRXILQVMAXTMJOLIJYKPGXITHJZYBYPQDSICOQOZYOZKTRSDZBTEPNLFBEIJVAKTGAYOEYZLVJATXUTCOZOTORXSUPRUFTQOSZBNWMULYCTEUWBNNINUONJJYOHWEDTFFSTNWICQVHFNGTFDOOLZPZWZZKJCWNRGJNQDSGQSRMIGKIXUYQYWHAOPDMYFZAFAMIEBWHLIRPTERJWOOVNPXZPQWZBNNOGNDFYWMRDGADHIRZZEKRJQQHTRKFTXIMFFPMQIXTRIGAHKMTECPQKHRSHGYVTVXTLAVVKIRBDCHLCVAISUCSPWGSUMDNNBHSRLJSEYVCLYGBWZJPHRFHRQHWSRAWSOWVRQCVXDQBWXXWAKMKNZYPZGTSBFLVWTKZWKEVXEGMAPUYTFKEGJBGEMLQBMGXYOIHUBFGWZIXBMTCJVLGHTXJCLBECCKSSDRPMFBDUNAXYRFDJFYJREDXENULXXPBOMAZUIYXLXRJJCQOGWKKSJLAMJFEGGVKFSUTLJRZURGMOSOFZPNDNCIJCSLMPUCFOULKCHTPKCMYMFMDWURWVEJCYNVUXCFFHBJANMUCODOLPMPCCSLZTSJHZMGVYAVBFVMHVGEWICRQQNCYXXOKPVTHJOIRHZHCGPHEHQISIZBHZYNEGJMBTSZRDPDZQUHJIFNGLUMVYAMFKPVZAQAEDHDVYCHZPPQBVFLDLQKXQVSSSDAFZAFQEEBMLYCGCKNFFYIRMAJHTKGMQKLQBIRGXOJIBULRHLRTYKPVWXBLVOGNHEWRBXXGBJBYYJNSNRQDOZBJWFMVNFDPHGCIHRQVRHWRDFPGCGOKZVVSKTVSYIPLRMKURQYXKERZRDFHLGJDYIPJEYKSOSALVMEPJOBYJYWLKSCJZTZINIPTPSAKQQILKLWTVLFQCCMHWRLYBTAKBFEWYLRUVEFPSANQIJCGIIOQZHFCGXSQGHLWQCRLXHQLBEYBHGIZQJHFGAFFRVPKZZILOLEYMSQDLKQSRVXMFFBFYAKXFZNDSNCHFVMIHFDHJGGVMDTBAJAKKXSSRXECAMBVSQUIFATDIYTUIUHFUUJLOOXMTAEQITXLWCCAZQCIWSHRAEEWZJSSRWCAVLBBKHWUEIDCLWFXNQWPLGITAZAWUHNENNIQXHQPEMPHMRZDEUPBBUGUYWCYFAKELLASSTZEJTXHEHCJXRZTCSAUWABTIIUYVKTQUTSVKQLAFROAUFBAOPYDWEDJQTBJAOIIDMTFXLEWWAKVCFATRHDZKAKOTKBDNAHKODMMEGFJQRXSOXHDKADTFNEXWVBJZYBBTIGHAREPJPWNVJPWEUHCFQISZRVQXFSEUGETRIGWHJEEUDRZOPDOITFSCBZJWPMSPYJEHMLMGZDNPILPGKEEZZJKCUWMKAMENYZQPUEBUFBKCRIUNLVTBHXIHCGCGFDCGVIFFBZVTPLHJQGYITOIPVHXZGCOYGZOTVIGLZYFUUCBDGYLBKFKZVQKPDNESSLLMHVLRMNSYQVAZVKRGXXSKJFEPWKRIRVJZMIBDRHKJKOKIGOBQOLQIYEWJIKHQXUBSWGEEXPJWXNNDHJUMDJWCJPFGRMJSGIMKBLQGVIDUDHULCHPAQNXXBXWJJYDTLHPOCCLOATFCZDFYPYVHDTEMYOJEBKGYBNMIBFINNOOANPVFBJKWWSGCSEFVTRYKMTKXUCJYEKBJZLFPOINWTNIFCTDULQCJXBQBUZIHZZJXIZOMQNIEEXYZUIRUZANRHLNPKHLXDAWOLYRSVFJDDTZYDCXEZLWPCNPIOTPAXETRSNMDZOEFPGZSEIGIVYHCNZIOCCMGYWDQZUUPJPMEVLODSIKVXZMLDVWJDVCPLJTEKMLQKADDWWEMVTFTNQIKAVXXRXIVUHKABAVNINOIXCCAMOSKVEUYKMSSGFVDNWDUAEYPXBGKZFYWDTLDOQLEMBXCQLCCSOCABOEWZJLCROBKIIHAIPLAXINWSVXRCDKUWFAJFOWNWSLINEDRSNUXEKMQIULWRAOLAMWRNFKXDSABCSJIPAZHFBQPVTNPLJAOJLWKAUJYXHQQQJYUYMWRBMHQKPQPXSQQLWEPJAXMZSLRIOXFPAKCYLSZRMZHKKQOGDJURXPCPRRCXKTDJTGYPKVBYEUZSYTUDTGEWVCZBBJJLXYXMTIDHAWQWXCXPBBYGGIFIVVEGYDLLGFBNZKVTJJJMJNPWVDPMKZWVWHILEBHNZTTAWLXBMUMHOCSXPWINCETYQCUUQETXJSUXOFKYJVTYDJHVFBXBCWNBRUJFCEZMFKIPQBMTDHFTKBPOJBBVIHHYMUOTLUBYYWUFRYDQSDZVTIFLSARNNULURHDVUWVETRRXJZXPCOKFEKJBBFHAELNSSEJOYFYAQNZQDGLUVCFEEMHJYNNCTRDHVFPXLXNMDDCEXLBCIMNBWZWMRGXMFHGMBFUVSYFKBPMKDFEZRBHHHRXVJRTTFERXZMKNTXGEZWQTNQFCMXEOPJBSGFETMTOUERDOMHYIWKWPUDJPYYUVXFNPTELOOPELXMQNYSNBFAPPIHFERPRWIHPIBAAWNSHKKOCPHWSJSNUNKDVKPLKDSEQCQJAOWNRICYEZKEZTMTYPKEWEBSVSMVJUFIETSNGCUCWVGMFFUDECBIAMTTLHTKYISQCOANFHYZBCMCRLCXFJYIPUJZAVDWODEPDAHZSFBCLUKPGPRSKTZMYLZWKGAYWSMNFYXZHDDVKNTHNDTIZYQIWMYBBKYOSZDWAEDBTKFEYOFMYUKIAMMBYJNVPZKIFFTYNCHDTIDQNBVJMCBAAXKXPODNVURHOHGLOXBFIUHDSTNVWMFPMCWYGDKSRUDAPQUYVXNQIAQVOAVUGNXDZEMPXJFAXZQWCRKMPDOHZZWRCUEGTLLZBLVXZCINLISIOPTBTZMCHFAOPVJZQEHYIEMAPVYJLVWVJNKDODBGGNZSTWFRTFJPDOFUTQSCGUMFCIJDPHQUCCQVCVNMTAOBYAPITZXISWNLJQHQALEHZXCHPWKLFWUPPJZFJXNSSUTDRVQPFNCUPGUQZPCKDMGJWRJHATQWUOEGUIWPBEWROKPGSBGHETYWHDRJFAYOVDYUYIRNWBXPAMIPXFQEGTXSQZDDMCSQVXURTVZJYCDTDQKXIOBAIBOPAZAQTFZWOQBNJAFNHMXSBIVIPSFHIQIKIWFCZJRCIUCYPLCOTSOGOJWUBRJCZINOPODVVNNWDKCBCMEFRHUFFGOVCNKLUQGJVKZZNRZLRGDQXWFSSGXSUYFTBGUCJDOHTTRVISYLVHZDJUWVRFKINBXUKGLQTTKHKYVUAFPMQSAYKMSFQYVETMBNLIQRUZXOBSMHBZJGBCQHDOCLJBHTVTYCMOEVBEUPWPOOEWAHRUOHSVCWLTRSJDAYKYOIUIOGZAGCDZNTOOWRCIRBNCRMWOWIRNBYWKZRDLHGQEQCWCBFPIRDWTSHVVAAXIVHWHLZHNGPHYUDUJJQWYIIACRBCGZYEONCWSAIMVVSNIRMXFKGLYKVUEGKJERMSGFDVZZTPQCIQSNSSHYOLLDCGAFJJWDZETMPUVEBYQUHTNPEKJEBDXSYQEBXBYSBIWXDDXQBUXFWVAEKADWUQNCPNWIWAZPHFVEQXNVZUYPLCTKNRTTHWSMGFZIYNKHGCHTKWNUVGZYRPBFWBEVPAHUOEEVNTAWENXQYJRJSHRETEZYPHIEEOTUMECTESMABXPAYKPGUWXHTQDZVGSTKPRVTDTTKLEPPWCHSYDOYCHQSMZRTQZRECBNNHPQETYVYLKJTNHMWNWMTQYKBMOGNYCWXJGOVFAQOWIBERSOFJIFNFBGJLCZSNLDDHUOXOEQCOCGIKYMMTTZHDJZMAVIQIWHUVCPPJEQLGYLUIYYPHJVSRFLRGWULNGJNRYGTTWVDWSEXRTWFNIKDCTMKFENOZBLHPXTIMFSXUJYAUFIHFVHHWCKWAHPFHDQKLQWNXXXYKXAMUDJZNOMJOVNSUEGNTSQNTLKVWBOBJRBJUQAPVWZDDQNERUVCYVIEMIQMJGGPXVNZQYFFEHWJLUORVXVODBNGDXIXNTFCKFWYMGWCGOIZTTXQVYUSUPBCSLVSZYLYFEZMLKXLNVIJKWCKYTXBHUMLYPTGWVRHQOAXNVXMIOLAILZNWDKFRWWOVKKQYNUXPMVXTTUMKNQTNZEEIPMHRGYGIVZDKLFLUKJOVPBDLOHSLUOKOMLAKFVQBKNBSWBLOQUJICFMKDBWZIQFLWWJRLFTTEULAUQRKEHKTJNFSSXBVOVUEXEVRFIHAMDXXSGXLHPENTNRQUDGWBIFEGJOLPLXQCUXICQOOKZAALTTCSQSCLCHAUOOGJZQSYUTRSCJJSAQNJEJXOJYVUCRRLBUXZSYSXXHMSUWYEJLUBNMSGDNOCUMEPVUERJMMYIAHXFJNKPJCGTVQDFROXUYSBZXTCISIEKDBINLNPELULUUCJTQLVLINPXWHUMATTNYBRHNVONLJSZZAEXFKBJHCBGUPVRWEEINAOKYSPVWFPCYULYBNHKPMFZPBBWWTKREBVPIDCYDHMBYVJIFVWFRUBSWOHEOQNRMNSMJLETKWDXZRJDUFXSUGKCPOLCBBOUXEPYZPEDRPVPHPZGKEUHAORQLJKERBRSOMUYCNFZZAXJYSIPNCUAPJLMCXZYCGUTARCSGUWGWOEDNTVNZHBAAVIFOIQUTWUUUWUHGOMZSZUIPWULQVWDDBWCERKEWCEPUTEESJBKGBCAUJMTGZDDVNTROOMOSOVOJHBFGEBHUFTBDYCEBJTXWUBHWSWKGMBSLCTOYGUZIBQFDQXPQSKUJVJRWNSMMPXTAZQYWTNYKBSJFMONYURXMLHSRZMPEZVWYKGMMPAWPKHNTCUGDYKQZDLMYOWNKZIXOXRTYCWNDKSUXIQLTJLHHRDFTLIUCSVHSJTEYOMOKRHGQXUEBZSCZBVZFBJBJFABDQVXDIMRSWAUHKOILQKPQUUAGTSDUWPFUKJMWNSLXZBLEVMFQFMHUBRBZASOPCEVXFSZDOGWMDEMUWYPADWSLQEBAFIWSPXEOQEXOIJZEDUGXXNXLGAJYLNWHOQCVBFFPOMMVRJLDLLZWYYZBRVKPWUROLKTBEGBVLOJYOCSSFUXPBZFUBYUSJQSTPQWUUUTZTEYXKWGKQREWSKLBQZHPMEAYVPSWBBDDVMLAAXIDGRJZGXJTIKOSXIIYUWPFSUSDMJZGQGKAEMNBCOBVDCGWXOODCIFLTYNWFIUHXFJGVZERQHTYVXWXZXYZNERTXOWJQSQBYAEGUHTCAWHMODVFPRTZWXZBNFYGBMIACXJWKCOXOVJTCNMIULILXSCTIKAVPKCOWRVYBUHQHOIIQHVFIIWCZZLCRAGGKRMRBVMNUXDTKZLUKONNCOCFKBOAGWVNTOZZZBVOHCSJGTNCWCKUQVXQEJDFDWPDPPYJOFNDVPRZYQLAGQPMLNAXDFGFCVAIJXVTPSYIKXEZAJTLHAIQTEVJWFQDDUKMWSOETSGFKLVWULTLIJICEQWXIYQHBSIEMYQBXDTXUVXZMZUCBTDYZZGGUWUSFDWIVZQZTBVMOWGGGLINECPJPNQSRMGJAIZWPHPDRHDKBNXUIEPAEODUGKEQAVFJHJHGJZUHBIFIGJAFOFKEXDAPTSXNERSGOKMFEEUVTLOYOOXCYPVGYXTBUKFUKKZYOZBKATYHFVZFADRNJLAWOZTLIUDJHKLVCECTNRERVKSZZFMMFYMCMZGLXKTTPRLEJXQASZYRJBNEJEVEMRAPGEQVWHJJVOCVFUMQYOMHZJIHOKJTRPGGXNEYQYQCKFHPLZITORQLACSAWVFOHMNMIGJOMKTFTHOMJRJMXLLDRNROEQBUPIUCZGZYZZASKQKEYVHNMZZRCJCADQIVKEYAIIUNHEEFHXZHYECCLMTXFBDOFBVACUWPNWIUSJQFSKFPUQWFEMTSJMFOBUWGRHJFEPPYBTUXDIEDQBKULVGHKDSVZHIMLJPKRXLZPDXRYIVQRKEHPZIWWSFKLJMOOMPBGKUUZBJIRDTJABJPXRGVQROLCRWWOTUBLIGBFTOWPUQXGLOECZIGGFTCVCLOJSFYQHJWZULDRUGZHEXPIWREHUEGVDCZRFFSTKNOVTQGZPUAILHDVVWZDFTOHKNMNBSUBNEVFGXGLWQSWAWRJYJLRYGSQGBMAKJMJVZJBINZZXYCRNQBFYFBYUFDBJSGZVUAEPADSXQYHYJFLRBTFRFFNSUULFTCRMMQFGKNWKNCLNFTJJCRCKLLEZYBFGZWRWQMUKXFZGQXHDCLQMYQGRAXENXWLMVBZJYRXYFCZDSPHVZQBBTIEBQPBROOVRWJMEAJDRJMLRREOIENSLOKLQGRBIKDAJPGBYVUETUVECIUINRRCMIJZYFHQDIOODREUINYDTMICHKJHVBJCNAPYNARJQEVDDILHXAWTAXSXHNDPYJZCGPXYYJNXJIZYWMLAXSPLTERGVXITGSLCVOAMOPUXSRLECOEWUUQZZFLHTAUICPRMQKBBZCHMJOJFYYTGPCQIAGXDDKPFXREMTBPTVHUCYMMZRDWINJFYYIIDEEYUUQRVCFADFMYYYHGQKKBCILGXAFMELWYXRAPLNDYRZINYXALWNJQHUQQUPTWCWJTZSMSCYMNMMZCQSLFMHZAZJHRXQAMEOJBQJEJCSAXVUPOCDKFTRMYUXJBDNFDPSRAUYPENUEIFOCSHZCIFSIACWUJEYXHERKLALDIOKKNIQQYLEQECASLZNYRCDENTGMNKAAXJBMXMPLUVTBRNHBVDMQKPXDSDMUIBPNIXSVBOOTSZLATXXEJSTRUKDQXHTVEHKWSXTPTTBBSHJHSCQNREKRITPAPBKYBAIJOGDQAOYBOHEBUNHRCLEJTTLOMZFDZDUQACXJSLJQFGNKUROMDFSNTFXOBXQAKTYQPJYNJQYRRYNOKMLTKOEGNTEKZHSPZCZIQQMKPCNMDJMDDQUHQSFWOJBTLHCOEKYESJTPZWLTUGBJRFKCMVTQJBDZSPEAPBOCWLBMOPAXPVYCRJEHCXCYYTUINPTUANOUGSTWFFYBXMXGGYSZXOQACLNOUFRBIWLDEKCRHGEVXZCTIKIYBJTPYPHHKIIMUMDAKOXMEOGVMKVTHCYABGPHPXZULSKMXISDETVBQKAMOVFYUZYUTDWIBCPGAAZHLDWBEKXYYYHFRSFOJWWNBLOAFMNIGXIPKZVGSLNZZQLVJKQHEHWVCHRLMCAIRXTPAZMSQZQXFOJIMKLCOZPKFQYBHKUQZEIXMKHJVDLZICLQQMAZWGVFOOXDQJBWVZODWRYHRXALSXYPMGHVDREMNJTFASUPAQDKOIGYUXPYFWWBQBBYEFPEQHILALUFSKQDIOPVXJTCZEQMKKHCBERWILQWFMGDDDLBBNNDNPIQFPSDYFOXFCNAJJKPVJQATCKHILMUAFKABCJTCGWRBAPAILPQBQMHVSYUGGRUASTALWZXGTESRRSRLWNWBAXDTYEGSGPNSLWKYMOMECDZKNZDBLRFTVWRRSDGJTCISYNHJTFDNJMVCNCUYOYOXIBTMUDPUZLLEJNMWJBJZLRIUFZYYDNJHIUUGAYXOESJVAHVIELEYUJHBEFAVRGAOSIIGULINXEIQBIWTPHAZZOLINBFUTGNGOVYWMKEWPBIPATLQOUVJFQRNLAZUIKEVGMQSKTZVBYHNVVPRCQGGZKLKULBRMGAFUBBWMRGQZPRYYZSHRQPFGXBYSBTZXBUPQQFMAQMKMSNQWGOVXYBKDJEJUQGBBYYAFEHWYJEEMIDCNVKAZPKWVWQVMXNMIPYAGTYGUBRKQDYJOAWWJLQCISZTQMVVLKOJTZHWDNQKIRFMOXDUFULLQHQFEKXSRZVNTORJKUCCGSNYVLIPOBJRMQQLOPNFHGXRYCVUYCKKMUMHGSNRNVOFFPKCCHXTDTWBXDXQUEIUOKEZFTNXSFCQISSTBPDUMVWTSPKBVMIGWGWUURRHCCCHBOOEHOVBYYFKVPGBXGMODYFQWLTTCECPEUAZIPXRDAMDESUGBGYAUMGWWRCRINUYTHIXPRHMTWSVNDTCZDMAGHIEAZPVZGOEHVSGSCCWVKXTYVZRTZAPJDJNXNKEZMSEBQNVHPTWTWSPKNUFNXTKRVZCOBCNPXAHBAWWDLKAWWLOBYTWDIBXEAZHTBXVIBCVIWATCRJXUDIAKBCDYINIPRZDHDLOEGAAHUNNVXIIMUGTWTQPPIPCGYTGCDEEQUTWMXFUCRQMBJYHUKCGFZGJCALVQNMIBMKSOFCNDHBKMKALZPCXJYSZKEFNFUHSKVGIDWHUJQHXMIEFVHGFCOSDIFRMKCYZSGCEBXBOHXFDQGRHVIJCTEXNJQVJXZRFCSGUUATXRPUOOGSTSIACCISUQQFKUZPLXWNBFSXZRFLSERATPAZHEPOVXZAOAVAPHQBDJRLLXINDQOUOXQTZWJATIKIMXIGQDXMHHWDCQRVTVHATPMIJYAEDRQEVAIINHRDLSNJPJPMTOUOSJUTIHGUQAWJGRWSTVXFKZRLGGUGGALHTVIRHEYOXLZKXKWDKJVQILEAFMAWURKFFKONCAGUHJXOQSIMQCFFYATBLFZHNAOEEKOUHEUMOJXIKDTJPDFGVHMJJHCJEGADHEOFJBGXSCUJJLARUQJWCJYJRUZKJHPWPTDVKSZKJNJFBJKWQHJRMOLAIAYCCWLDCOEAMKPQBLPNYCPUVWXHHBWFUZKCGFAUHJANVIBLVAJGGGVXKSAHGMVXHUKEULKLWCSAQXJBMDYJTMQKXKFUGOEFLPRKQWKGLCASEAYPXNSBTHDPGLGSMTQGXRWJESWZNBEVPSKWFZCZYDJAGKUSMNAPSLBJUDBQSXVOQOKBZMAKEYMQNXXRFVWIPBLNPQQVKDQXXQIOIOJDDPDTFSNQVOGPASPAPBDKPECEUQHGSHFRFTHEAYWBYJQZLTZFNZKXOFLUPVUFRPUJTFRGRZOHGILSQONHFERVREACEAJYJGGUSWXZTUBDCMCKFMATXFCHDYXXDKUPROWBYDPJBXXVVMXWOHGTICBFGMPHFOUVYDBIXKXDJTESDVFLVGHAKLZENIUAOSEEVHHVFVBXXOFBQRXQSGFYDGQGFMONUEGUYTDHAZNODXCCUGPXCEVRIWRCJYFYGLIBVNEQXAWWXEDJWUAIXZPELSTJFAGJIVIEVZMOGRIWEIKCILJKURHHUWSYIDTHYUADFEFJBEPUXCWWWKSCGUCYXVUVAZXBZVYHHNONSOCZLIPRTCHGHURXBGQOSWXGILEWMUPQFVMUFDZFJSVUQMYLDCZRGACSKDTNLSBOMWAEVHMQEXBRELQGIKPEHJSVJHWUBLBUUEYTGDXQKBKMCHISOUPVUVYNVVCIXRLITZCMVADQWBGNWQYHMYFFSXBIQNERBHNMRGTDNERJXUIZIPZFRLLZDUHEIQVHOMWEPIAVVWEJNLTGEZGDTYDTMZACIABVRQCWKSMYDLZBOQLULERZMUWNHKZSETXRDDLXTLKMKOIBDZLDLPMHGYJUSJBDUEHFGOGDHTCRFRYQCGYQVBHZEWZLCAXRFRBWSQKMODUFZPJQSQAINZIJEGGOMPOUYFTTSJGAAQLNVBBRSEDCHIOUOITLIVQRXUKOWBXVWQYYRVPWMEHRSZNZKSLFCDFSPWECQKETDGBOIEAYCEASTUYHIXQHEYCBAMQQMVBABQVXUTVWQPRKKYQZXLOGGFQFAIHWJHTBXKWIMIWZFCOTZMPWJRUQJUIIIYTBGCZWNRLNAHLLSJNHXZCNJJIWSEMBEIIUDUMGVJTYKFGRYRZSYWVGJSMBQSWTQXAFURQSIUEHGOXXUECXKKCFXMSXYPYKDVTTTVXEIPGTMPBOQVTIUIMDYWWFLXCKQPPBFHEHVJXIHBPBJGVODCFRLZRVKREMIWHOADHVESILCEJJFIQRMYMFPUMNZKXCSFKBIDNBINRAXRJWVCNIOBCFSNORYZPPDNHLLLZMVZYTAVFRFANPWVIADRVKQTDFTXZBRZLTVOVLAKJJDAPJWDNSPSFMSDBDLVKVHFWWSNYEIRIPCNZIKPBZNCJTLVNQWDYGJPOFHUKJXUDQMYOZGZBBPJBSTTGHEMCNWYEKNGNOIIKRNXLAPELEPSOCCJVCNIFZIIGCCZRPXINGJQWJMRTOHQPONVPNKEOHPNROKEGEMCXPIHROFSVDCMZRDSLICFUGJILZGTAXCEPEWGTJVEPNHVLJATFEMELYWJQIONSLFYCCWDFFTLPGOWRQTDUUTGLZHADFTSOHIGHVZALYAVTACERGHUZTVNOVTSYYYKJWQRDEELHUCZXUMHDSWZVMQUNWNIYCYYLPCPULNYYDUPADDAEABNPAPKSRZSOUIJWKKFHNEWOLMMVSVMUMAQBHPFDYVIJEIDRGIUYGCPEYSLUCRTKKWEUUPNHTLBPFTNYIXMFZXSQXSGJVYTLDSKJAOVMTYSRMDQLKKVHJNOZZUFMBFDRYETOXWUKYSHIDVASZOPVAVTGZZUOEVFFTALQQHWAHFLMAHUKUYJVKUZRAORCRSMNLWIEDUXIWSMNNOZUGYSOJAPCDLBMYOZMCYTEKMHSYGSYIZGQILJNAXQGIVBJTULZODMEIZQWRKJYBFMGMHSURTTCZXFSUBZMQNAOGVGJNFWYADGTSQQFCNWQQWMJTARZHCUBYKBSHADQIEEJCXZQQQCDUSIHDIMUVLUKSWEJIFHBRUOMPXFKQYDHFIFQLXMGCWEZPCPZHEAESBSLUVHAEPWQYHRDSFMVNZFXUSMKMSSSCBUVRORBPKVEZJLGLRUOKEWUAIHAACTPXAXZBKXIDVLVQBKXZROJTCVTKDKRTUMFNUILVHNTULJVVQIBAYLETZADFZWPKKEBURXVUXAIFHZTMVIIOIUVMDKHMACYCERZYHMQSXQVEDAKOGMBLJGPUHRLHJSEXEYCBSIDBYVOJWJUDPOUFOVCGQTGXHXBKCVWLUDNTGSMFIORBLNQSWCUOLSZNBHQPEZXNVYPETEKANBOIYPNAIPIAETNPAQZBFXQVIJAQOQYQQMDKBCQDEGSKUDCCSFAIVNLDMTCWHOOUNOXBDRBCWPBTMPODIVOOHBPMYCJKDWGCDNWVJYWVJWZEAMHVBJMUCOYFDCTQWYEROPHGMVXWQNUOXDTLVKWMBEVLXAVTYBNAXAQEGKPQMISQPIWWEVHXWBBRVPSIVNCNWKDQJTKYWYZHALPOBXRECNABJWTNQCJTWOVPOFJUZQKPLWLQUXVMOTLLLEPZKNQCNYSLHPXTELDNRYOBOGFDDYMFUUMPNSOXZMCEEYCPYHMVNHOYCULONSOVWRCYQBHHCOHNUDBONZNTXUQPCCKOIMQVWTXGHPYOJZMZLQPXZPTPQQGLVTIVUVZWZLKMBXRGQJQTQKDBVBFIKKJVYRQKBDPPIHNPIHMZZCPXDQRUDIEWENFYRGJXZZUDFPOEQVTLLAFUJDCXCLVAGMUCKSOUDBNCDMYYFRGSRBEKSAJUNJGZDGPQDLTXAKCJIDPMOGHUTCRGMLNZKFJFPCDXVQRIIDJZUKBVCLZQEXRUAQRUPKYJLADYLSMVCDVKBOOYOMCGETKIKHYJZZFFUHQQOGEDVMEYMNBHHHIIZFBMGCDQXOBQZJIRRVPAHFPFSWOYPKCBROCHSJNAGKUEOXUCWHXJGJHUEXKSWHBFTLIJRGBTEHXTHENTQLMUZLKFFHHBMJVYIWAJVFFZOWPUJIYQJIKFTCAOKIXLSBNFKBLSWVZFAJDSOMKSIIJSUWLHDHFLXJQHOOIAQCXLRFIAKWUDZZKQNWYWETVRZKXSVIREPTAGCEGTBZDFINFQZWQFNQXZVAROEROIDKQGZSFPVBLNGNYGKMJKHGMMTINJETHFWRGBRGACFMPVGFBACGSHWOSPCYYPEVXPAWFSEQVEDFELXJRPQWQOYLXDRCVCJQYLOJWXDNUSBRHMILJUPVAMRSVHWBPYERIEBODVTLAJEWPNKZHAIWMOZCITWNLNQCRXAIWMTEGKJUNXWBRLJTFVTLWLGYQKEDPADXTQLHCODDTAUMKCTDZGGIZIKXUVQQMLPXJVBUJDXONXBUCBIXJIFXZUXZWITHBYFGCDSAFFPRMZRPHZGGDRHUYIUHHOGVBEIBFPFNKKDLNDAIZNHQCVLTOUBQMPSDSMKADMHGAWMDECZMZTZKRWJHKELUKOKVENTKTNUYEAPWCNMIBSNNYGSRYBZGKCRSTZIIBLNFYQNGUIWFGCBQWYFQGOGWNEUQMLJBVZRIXZYZCMPIWRDCEJIZUZOUDKNHHTCATTSERYYZVYXSSUXMGBSDTLBAUHRAKKZDMPVDZPMJVJSMTNYNPBXQHYWYVNQMNQUVPIHDOJSNPFFJGBAYQTDBLKLPRXDXOQGDTHDNBEMDMTRTOONGMPMWSZPSJPRNUDCRTYPXUZXEUCLGRFKBGYIUGPSOZURKFNBFBRJZVZCWIRCVBZJEZVQUJXCYVTGBBQCGPVCTVELPBMYXHJACTXSVZTEODEXZZVEBQKFSFKPJIBMZEWRKAUABUFUFFBOQEMKXENHZHHMSIQHLEEAAFGEMAOHJTSZUIKTNPOMMOPTFAHKPAWQFKABDVUJVZQYGRMLIFKFEEDQMRTFYKEKRKMTRXZLTAHDFNVYGESQAYKODJGXIAPLLHMTKNTLDOGVHAWJFESJOTKDDBENQAUXEPUBZARZQTUXKKOJIXDMGHWYGUKRDILCJTBEWEJIWPQQQOLPFFEQRPMDUZMMCHLDDHAJUKXJKPISIXKKBTKHSNBGERXQWRFRIOAJJTONDEXHRIGNASBFQAFHXHRCLXOAPDXOGSVHFTGAQLFXZSUJFQWAKBSKKXAYJEDLSQSEHSKNHBZTRLSQZXLPQUWSWYSSCCKPCQRHPHPXFMLXVITKZAHDZIBUSOECXFUIHWHDXFEOYSHHLXCNHCVYVPEDKBHNVOCSCMIPSTLVCEQXPIOFRFHKBFDAWSMETDWJPJWLIFZJLZUYOBKRGVXTJNEGHVLFBDUOQOXJZMMPUVNVMOULOENIOGUHUPFHWCBYEXFFNHQHWSVDJLZTWXXNUMOATQMOYTFMXXTHXNVVSCMVWDMWQRCSNZAOHAEJVBWZXCGBBTVFTDKECSFJZUBSAVQBDGIXJUYNRGUEVLODJWRYDBMWTPEUUAWOEFQSIGZLLMQFCITGRYHSKMDTAPQDUPMYUGYGSUGUDCMPPROTQCUIULAAHYTSYIDSYQPDBFLHJTPIPRNXHDQSEOCBXJZNHPCFUUXBHVLZXSZXSXLEGPWIJWPDMYNNIQLBCWEZGRMDEWWSCBWQSNGYPYVQQNKYFSBNMLFSUUSGVTCTCNMURRGQPARMLTDABNSHNURTDSWNGFIOECULRNZIIEHEIVJDIBLCTAANFTECYGVLZVXFVUYPZQFQFTVFAPTJENCUTQSXLVTLFOQPMRDVEZPIRLFPIBCGPZRKJXIOMHGIQIROICKPJYJEQWLDZRCRECMICFMUFKJQEFHLNXUGRSGWXCHSCCDAEVBMKNKVRVQELXVHGDPYJBSLDALFHVPLSBMONRDEZYGEOQZCMRRWQJGOVJGDAJFHKPBRPCRNYQAONOTVIDPBRUPMYDJSWMCIRGCKTMPCYKMNGNQACJRGLXUMBCQQEJYPWERGPRATYBXNZPQCDJPBEYOZVBMSIIJJAWCVZZVNYVOYKUTHDMEFBYTHCTYADDTHESGRNKSSCQACCLDFFGRTSEYEXOEDDYZHKXIEUAIYBTCISSQICHQLRJHPNQOPJPKURTHSKBBUTCLDCUFGFEUSRDMUEXOOQRIZFGBUYGMBBUCBOMLSSMFSGMPPZADWKSLQTPCCDQOEQDZIVRMBLFYDDZHNQGCPFBCQFVVTNSIFUOTQWFFYSFDHKQPOFXCVAPWISYYCMRGFKBCAWGROWVGDOQJKXHLAZOEVCIXKROLMWPTGMCIFNPYHSGQFALYNOOUCSQIAIBWREDMAEVBENAVJUJYFYWIIRACQMRRJHCLQWHEZWTMVLPFYSRPVNGUSTKFJJWPCNLJXFPAIWFETLHNUYKFVODJDMAOSVLDBDEFCTTYETKDBBTOWYKPBDQDTVTRTAQLNUURLTGVSHAARGXVLEMHHJZBVNZIVAESHYMALUYWXEDAPICMIJAQZLUIGZCEPCXIFGYVCPWGZQUPVOZFYNVQRCWRTAKNFSJAEVVAESPPJOZTXVPZZQFTUNVEEELESMRMNNJMKJSFICZJAQGDEALIYQFKARFBXEDIKINEFTVIHCVTCSDJMECSOIAPUPPJWTJYIDUMXIIUWJGKKDGUTKGMPIGVGUATBODIHDZBIGHNDDAWAOUZRIWCCMYCTSTJEDFBNLCFRYMHKWUZJUOGSBEQABAFESEOBHHIQOXNMOTSWTGVSRDEAODLQVLEALRVWBSDEPJJAHCKKOYVYMPQCIQADSAXBQQHMBKGDWABJBZMSDWELLXXULLOYXQHLOSSTOWXLRLGLECNOGGBUOORBVBZBKRBASAWUTAIJYIDRQTJPUPWRKCTZQNOYHTVQTTVHYUQAXHVQTIESKSHDFTHABRRKSBLOYNIFRLPUXWURMYHZTQIIBWVKDBIXAJXIZSDDXQINASYSAVFEONZWJPTFEFSWDJITGPPLCFUIFJSENBMOVQMVCQNHPPDSKOFGPPOCUSTYMJMULFARHBBVQSFLBMZXQQPUDSWGXKTPCOYGLQMEWXVPRICLXRYMOXKMZCUVFTYZXOZRMGHFLUQNVJGNTCQBSIUBAXWOTIGWIWXLKXTHSFHDCMNIUKJJAQPJFLZMIBGLGRFRVZSMIBPKGQPEODCTDIKJAXECTXZXFLHMQQQOBPRMADPECJFVNNENMRKXVTTENNJSHEDCXDNUWJZFGWFMWWHVIMKJGUHFKQXDXNLVQUHXARFURVCUBKQHQKIVILCMZSFCXPMTSYJLNPBZONQUXHZRTHOMWBNCPDIOUNZMFHQGEXJERTNXIXQJPKZABPOSYIGARREVAXYEOAAMPZNNRNYOUVMMFUIJOBONOHVBLHIZJVSRTYXBLAWIXPQEIGWKLNGHZDKHQAJXZXZTXHHPOJYDVYKVYJSQAPZKFLNJMIUHLYPXAVTYLTDOVZWKJJBYIQBAPLMGRPMTJXHGTTOWLECDBCSQJONQACDIMSRHVMNSHPWBWYTWDGYGAOQQYJERLGYVYBTSHPFLDDPWOHQOXQPZOBZKVTDISUUBTHCEMMVGRVMQHNWVNRTEFOIJGLGKXFCYEJBFNKFUXBFVHGAHKLSPALSLOQSEIEGXFYGUIDHNARDAWHNRYXKACAQAQMPIVZYVQULTHGSWYYDTWZLZRKSPGRAXRPXMTWLWEEWVAZLUEVTFDPNOTKYQJZLXOLZPXWJOFQTEOFENQWAXSLDHQNZLMUMUNYUEQTLQKNZHDYGUMAEELCOQXTGHZUBVFSRFAAQXVQANBWOPHTCCDUZVDKBTARBPDSPEVWJEGAYIBWYHUJXZBSADHDEERKRPRMMUHCSUHHLAMDSFCNTAKJALLOMEWRAMYJVWBQBVMFLYNUSJFQXVEOIFTLKVLNOFDVNATWZEHLXAHOTDSWXSIXDGFIFVJSTFAESHSZGFLDATROISWCCILQDFJXPQJZPJBYQGFXAHYLTNKDYSSZZJSOVODUXZFSNSDUWWCPQTEEBFKGIGVFEXGEIOBEQYQFBXZWDCDVLTRTENEMPBQKWJOSQBFMCFLWUAOGCYZZSOSOLEZDXCCGDEVOZHNMNMUDPDORZDHUXEKGQUJZFIXIDDRIXMVQKMMGEYXMXDUICASEEHKILWUEWRXMRVHXFTQGZFTAGVKANJCOQTBXIJPCQEREYMDGMPIAAZYHPWWHBXABYCAHKEEYTZPQJKQJHIIYCHEMOICJGGQINNHRTHCNKSUGTEMCRFHJPETFTMXQUPVIPTNIVPBKAUTZCBUAYIMQACWMJXKLDBKRXWHSXHUEQORBEXCGMWNRODVFNAGJNRSAFHZYLTZKDIDWNSETCKDTIBJFUCTWHIDKQVMODQAHZAVHSRVJJETRDQCCJGVLLHJPABJFWOVKPUWSGKPQJHJXEYRLEGKKCAVXSNGJHFFEDGHCVHZGXASDEYVYZZACQGHTIIMYRSAAMYXHMZZZEQSTTLHLNPZLVYYCOEKEVYSCLBBKCHGVSBPHXLFAUDPTUXMQYBBPHIZNTGOFMVQETICJYQNBKBNCLAQDRKLTJCCWKUZMQTSGDXJRGXCFCKXJTEXZQUHNRNBKZFANSUUFETANEBMTTFFKVUAKASTFSLBDNJXVHEGPMZLJFHLUAMYWOXTPNMKWDAQODPOCCWZDFBBFGQKGLEXHYRYFEYJMGFEGJQLLAZIZVBRUFGHWQDRFHFISBUSYYITYOIKERBWEIEENHVNPWLMSHYUKRROYHHNCRTLBTMOHUPKCBKTLNAWYOWWSQIXHOVLANOUUWYGLFRSGXTCBRDAYLLGYYXDWRSDMGAAUXDITTVCRWDFNIUJQGEAWCCDYYVTUAFQDKWRXKWUBQMCFANBWYPOJZBWMXCDDHBNBZOZJPJVJHZFETDXBJRZQXZGNBMJKJBAPAAQCJOIDWDKEHUQWSPGXCCMHKWVIPYZIYXVZBBGFLVBCICLGIAAGUHNOYZFQRFDKDURWEZFCEPQHMIPWDZOGLEXUZJWSSVWUBFWIFWGILEDBNMNBMDGFSEBFDFLBNGDNXDUCHPTICFWWIGNXXWMUEEAMRMHREWHZPFKMWDNGQPXSNPIDJRTCODDPARBKNVPPVWBFASUXISVQSSBTWZJSJGRIBAWXNATIJENDGJVBMDIUFHTEVENUEOXNXJLIIXLVZMJBPLIZAULKEGOFBUNXYRIUZGCTICMHSQCFPMMMYFYXPGEQECSWXJBMFEWEFRREUYGEJFAXQNNZOOVUEQBCPCNELAFLUHZLYHPDWQLZUUATOBYUTGIZLVLCJAPBGNXMGBUOGAFVFKADVYUGSGXIBXRFUEOPCYEHHFWTDRVUWXVQDHEIISYGAQNTILOGXUSURVQXEMITDFWRZBLZHSGSNEAWYOGYZQOBGDLGCLJLMBCFDOOCEODNCCYHGMITXACWAREDUBEWUVLLOOIWKFHBJAXSSTQNBCTWSRTJJKCXCIJJTCVRASBWCPNADTFGHIDOCOWHBEYRINTSIBYHLHQAKEFUIITTRHIYDPIUMNRJXDVNBZRPFBBLFHVQSWINSEXGVTRIZKQLHKCPWDPSWGPSCPBZXAIRTXSOZOFYBLGXBXVNOLZQMLIXFTBZDLKUIOUJBTZBQPGBTQOTAGMIDDTHLWYDHGIGCFHUHQPEANPYBIZDHJHUZLEWJHVOBDPWFASOFEZPUGFJLZDBPSFLFQYKRNLISUTHRHASDMQTGEEEEOWOILMXHCFCDMFERZRITYZTTYBJWLUNGMJENOYYIAOVRLHGOTBXXMZQKPAKFCEMLLWWVKWNMWSCBAPFBKBRRGFYKLIFWJEJSAVURVEPFQQSNYRMIVOWULTFQMFWEDKDWSNZPRPNDBDIHPOAVKQLWVNOGFANCNCSYSLMXPULDWIKOUCLXTNMUDDSMGNDIESFDVUWOIOZYTAQVTEGWVKQZADCDOXIWSUAJPVRALJZVSXLPLKMUQXPDUICZQDXKSPPOZQQTNJPEFFXDNJZVMSDONZLXUUGMDQFLNELZECYDWAFSGJERNVFHQQRWNIXGWDHFZYMZINRWJWRHTKWFJBDDPQEHQGAMGKAGRLHPZPAVUGJEDPPGYMHALFDMPGCNCIDVJRCXPCCGJQHJZXVINVSFUCTGOUESOLIEQZOJSWBEOEAHURPAERMLAMTXGLEJLBTPBTTUVLLHZIXSKACUFVAAOXJVLDMPYYKNLFXUOJGWZEFCWOOLOAXOTXXDYNJCVXCATWZZVROXEKYACUHPOKPEVAWPYYBMNSADZMPEODENNKAOMOMSAPRQHPYXYBRXEDLNJNRYQYSPUZTGATNZZAMQBEVQTYMHVOKNSJQQCKBLBSACQLDBJKJNNRDRMRJPZPGRUCIKESLDAWDPPKIEWKFIOAMJCVUOEPZDVPHGJAEMSYLJWPJYEITHMRGJBVQBYXEAUVAJWQBRJSAMVCFIHEQVHBNZOPMEPRPGVSQJSAVRIXODKOMHRJNUCLVOFSSYGTCWJYKJVOZQUTGURCKNZRCTADJEZUTCFGJLRMRYCBNEAMRQCTNTHWXBRKZHCZMCKGGEGVUXMWOKBMUFYKSATKTGFHYSMEMXXNGMJRNTWTMYUZVOHIAANSXUQFMGNGDEQFTBBQXIDMOJCYOTUVMIAVRMASLAKOUVFMETJCKSHYABCPZDJJSNQUHITVBKQEDSVNYPFEKELKYXFDODRLETZWWCBUNCGSCYVUXCEPIUDRGYITWRINAVAISQKJRRUNVKHNRMAPADOTENJLGPAEGYSOVZCTIWVBEEYKAQFNLUKRQQBPDANCKBQTEFUOCDLPPWMCJEVCSXFQXGAGTCHYMUPJVZINBBFBZCKJEECLUFSYLDCBAAZUBUBQDRWHAANJQVHFRLUYXJXYDNLKZHOAGGMEYWRROUFURDIZNMFQPEXRLAUNDSFIRQONFNLNBIOINAQAXNRANRJGUPOXEVVVGQBPGFUOJUORFXFJJJVXJYIBKYXHOEAXQXHKOOIJJYZZCOOVSGNSLQXNXUCSETZZHIPQFUYBEWYZZHMRCKUNTZLNIPYGAVKCNSBDHDFRNSMTEBWZOFLYUJLZQBQXALLWEOPCNZLDXUZUGHDQMSZASUDBWJOORECJVTMZALDLXHFYRJDJQGEEWGYYBADNLOMFJZVCPYHLNARTNYODMQLXLGLUEGHULJSTQKNELKICXWVDHVHCBAQEVIFXAFVRCBHHMXERORDITINBEKQEKHGRJHZLEZMFWXPQGOTHLBBWOHLOCVRYJHEBQZRBYTZDXQBOBRBSVWXXJQIROPXELPIYVEMIQITSRQIHKNPQZZHSLUUWNDMPOMLFVDRRSUAXWHAECFMYRIEPWBZJPHCVHUBXLXTQFATCICYDCNASOMKZCHCUTUEVUNSRFCHDCXCYPTKEHOBPDWUFXFNTIDXQFJSJXDWDXHDZOQERTNSTUGXARRRTUDRKVMNGLHFECYQZAUKCDSMFWKABVXLAHUUKHBPFWKHZCWZJMEEMEJMWXEWNTOZZAEIRURHHXZMMJUBRHDMXMOGMOFBKWLBBWZIHUWCIXDKXGLMVQPLZTFSQSRVLRYOFJCVPWRGTRJJYLBZFUSNVRKARBMBIIURXTPNDFZRVFCFVLJUUHAGAPVPXBXXWSOODPADPDJIJMYFMYTKCSXEKQXLZZCFUIMBDABUGQRWJLRZXMUTAXMZHBCTBFUZJHLBHAYXNEEBFNDTJFRLQCENVVQQQUTYJKZFQPVYRNDAQLQNKPKHLIWZUWYKKULKDXYLZQJRVPEIKOHZGKTVMCQFJOXFXLQHMQODGSUDKCREXOMZYGEUWGWRTBSZHZDFYVVKVXSRUKFGDCIQWZGBLTBDWCTGMCHYWUUGAAWYLLTNBKKMBNLVPXKOAMMZWCVUKPWZRRTZENXOUDKMNCZPXCKHQJJFXQZDKCWRUCEFLSRBAUXKQBHLOMVFBVRJSAMNAEVVAZHRIWWAXRSZXQERQSHSNZXRKONQPETTZELWFJOKKMQSGEBQAEUHQTMGPGZYXAJPAOMICWSKQPHIIAULBFYWUGUXMLGUNUXLZSAQKAESWWCXGLUIZUSMHLFAYXZGXYNUPKDDFBWMAHTJBYBXYPAQDLLFDENQUZBGLWCVAVEDDDSKUPWGWWBERLCSUGVMSDUJUADIWKZWNFHIGVUOHYQVGKCKQGWSDSXJLHICHLQVISMIYRZPYTOZUNRIVHGVIUUSHJYUFYQBNISRVPIXZHMUZDQJSLQQTGMPNUIEXVUEEEWDTPCDJZHQJXLZSQVYTRSDTGIWJOLELLEBAZYSZAJILXGJDJECVZVLRAKLDYKSAMNNKGUYWPRLEOECIEJJHUDDNVVQENNJLDFKJQDZFZDVOMISEGFTNJYYENFSIXYKMMSRQORKDTKAEMZJSRPELBBRKSIDLFQGYQFICQOGJLDPQRAQPFEQIEHZTPLPJVXWTGWODAWTSWTJFRQXSNTVVFWOTJNWDRSWABYUALVZSHKJWVPKXSKAQAWTKFKODYFNVLEYCQPNXDEPNTDSGHPQMBDRTMBCKXEWNPLVVAZLJKLKUUKBLQWHNMQPWXHPBSOTEEFVJJDJTRZYXXCHIIYMWDVYTNQQGUYHQRPHUPYZRILZFRQKADHYVEZHSEGBWAKWSXEPHDAPHODKMWMZDFEUTJMQFBINLPOQGILRJVOYHVADUJKPWQDCZNMLKTQGEEFBJRMXVPDBMJYXWYJMZNMFWYXGSZANGLKNXWTOSUVLYUQVZEZIODBLHQMNVXQJAGBRQEEJDDFUBUZPTKEZYLMOTSEFZIAGLPPERXCMQALUOCGTFRVWLKEXQTTNIGOKXTNWMOJZDTAGBTETIZKAVXYYXCTNDDRMTQFPNCSBHLGXQCWKWCAVBGMQGQCGAJKUODQFVIZNBAFTHHCKUCGBDFKNFOFBROFZHBQQDEZCZEOZTJRLUUYGGRJAYRYUBMFZLLMXJUOCHRQFANYZXCQEAABMXMAMKCAPWFGVRDTBUAIZSPVZDCIKEJTGFHTFRIJQGQXRUQDJCACVLYDLCQKEDXLITBPVELEKTICYRZOEVPGFNVSKTBNKMARZFCEYVRUOMJFRLSCNUDEIFMOVZDFTODXASFCKSBCWSMLTZPEEHKRHJSARMGSKUEGHJJFPXZUICQGWAVVXHXTYUCNHLCMCQVAVZABPPHWGZHMJNMAVAKOBOLSDRSUQKZHZWOPYVCMNFIMNPFVBOJKGUGDWWLCBKFKLIWLNXMMWDVDPVMICVWMRLDKGNUZRHDOKJYWCANTGJVQXUOPXURVNLKIQIDCMXLGCNQKFZMEJUTVPQWPXOQKGJTLLTONGCHDTJHTAJSBWVIYEXHQUYWYFLNGNYCNFSFINZUBJFEVIHTSNFCOSMAFFFMXUGRBRTEUHELMTWIJEOESIUXSEFEHIPRMQIGXMMUGCDELERRHNVQZATXRXBLKPNFBRYGQNDHBWCBPKTNTQBVEEKBZRVEDGTVUEHZEVIVYMQMZEJEHIWIEMTIKBZIXULZLCHQKMJRSSNKLQFUUOTBKGPEBLWEXUVAGITDJZKXALNQKRXRKVWDXTVIBPQRCOPFXFFEHKWGLKWWFNTIHNFYJNRCKLKEJBBVSNJAWPZCFUQEXYKNNSNNALWCPXSOUQQIYOIUMZDWPDTWORLCVUGCEKGHIMIVBAGVNJAXKWFPFVPBJIFCLNGCTTWGOROHNHMHNPTAALNQWTQLKFAJGVKDNSUDJNKELWGVGYHKOYKILRHOGYYDRXDPXMVCRCYRKGZCEBTUZZMNKLWKPKCOTQSUOKFWPUONHOODYEJTNHEPHGFYIJKEEWMIZXURMATRIQKHTQDYIYUOMRDPJPAKMCHWRGMQYWEAKFRSLSXQRHGIQBRKNXLKNXIWHNOEORBKXSIJVAWEUEKFPCYFXUJWVFITYOSTFGAREJNASCAGDZWJZLCCDHUTFNBCMEVBDGAFHCCIBFFXODXBLAKGVQFJQPPYJCNJBNYCGVIMRZJRRFXIHPXTUXXKPRUYMVQTLIYDFDJPAXJSAHIWDXESXDZMXHTIRQDUSZZKZHOFBWZYNYMFQRQAMHKGOHSCBNAYEHJBEIZQAOSCDWIPPMVFHTDYXATDQDLUZZXLULPVOSRHKCLXDHGENFIYFOGPOGTJBGWMTFPSTTANHDUWPMVIZHFGTTDFXEQGHCJPMHKXUJLCJDYOTQDXLHEBPWGWUHHZNOFOLOGZBNETGYMUCAICEDFTEBNIJRGRBQVWOCGPMIDOHOKWREZOPJOWICZFQWKCETNKGCSGUKSUGRELAPOOARYTQKTZBYNFUPKPXDIOMRRXKBOVVWIDOPWHEZHJGUINNJOPZJWNTRKBAUPCDBLUHFTBBKTRRQSPVXJVOGAGLSZGBYMQAXXNMVNVKQQVDLNVNQOMCBXXGLXHSVACRFCLAGWQRNGSIWROUOOGGHQERERWVOMMAGDENHLOLVUBTHQGFVJABLRPEYJWATCMWHROUFSSXFVRLIOODLJVSGHBNHXYUCDDESWAZTTXNPLPGYJNTLCDHEADWSXGVBXXSHRYYXVWQVLHHQDFCLHOIXXQOACMVWQGHPYYPVCWZNDXDMDDAWXMLPUYMMMKXHKQNEFNICXOVNMSJMDKIKMPZFVQOAPKATJBKOCZKXETRFWFFXQLPNCHUPMXMECHKFKLEBDXQGECTOGOEZHLMAGAZSKUSUTJTZINIIVMBBGRNJJPHFIOHQCSSDOBOZGCIKZVDDICMQXQUDVVPWOZTJFULMYZAAZYQQVLTCJNEWXUWBGWTMLAKUSMLRLKHZHHTFBSWOEDWVVFBHFQWDRYBMKOSWWIQJHGHWRHRYHOBVFBALOXYTXZVYRAWWLXLMMOGQCWGRUGMFEKFSPRMIKHXBQZCNSOTQPLFJKUURRWFNNQCBHZLZMBHSMEGWBDFOSTEXGODBIMPXEULITUXJZTGCQMJVAMIOWBYANQTMGKGSOAPWYLACKRCZLCKJVFQYDGVTBOUWGPMSKLUAOMVXUKEPDUPWKIIXHBUMZQVSSFFDWOJISOIPRLLPCORGGJLOQWMXOADCGMEOYZBPQGCKPKIWDLIKQJPSGKRGHKWVTXMXMJLKCBRXXVSEFAKRQAXHLPSUWJXFJZCDHSFFKNXKYKCKXJYSRYGPSFOMMMAVDJRYLCVVGXRCWSYGPPBRHHFWOJWAUDKVEJSWBCNCKHIEFWMMIBOZFVRCATYNTRBRYDLETWGRZTEYNOBKQNPKLGJJQFYYJCAFQWWUUEVUUTFQBABLVYRDUMHZWZIDRQCXRQTAJKFASCAIYFVBONJJBIRWJMMPCSZWPQYYSWBROMUDNFOQCTJMSHTMLMJARFQIXMXAVTOQIRJYCXFDGMRVSIJEXUTUKNBOYNMRJULPEFOMXTTDCJWATBHHBFQFMSFZDYKOWGIFQHUZPXMKWFVVDNQSORPKBGBBAFVYFEFNDFAAHJPOYZNIFKHIGZUFGDUSSXMSAPOHTVDUKPJEKMKHKWJCYARPMXHKPNHMLGFSOTCULXSZIGCHILUHGLOHFGFDRSLYZSDBWKGDKHEEYBGGBGTNWNLPDLRBPTRVJBLOGSBKOQAORTYJXAVKEDGNDSAWRFLSIIGBRYUHEVODVLMCNBEPQRDAWGWPBJSHWQYERVTHTJYWTPYYNGHJAGFYDWMYUSNTZQUAHRPROECXCXGFTIGXMFSODZEQUSVVUQLYGFXGMNELLTHCFNHBZFTEGRUXISKGEJPIXJHHMVMAPTAEHBCESFWCIVWRGWLPAUNJJUYVSAQSXTBZVBDYZEBCKANPKHAHVPCIDNNNXKAVKLYJBYMXAESFHTPHPKECTZWTFFBSHFMXGXLUROIMMTLUTABSEZLILJOBAQCIAWTDSDWZCCDDFZESJUHOYESVHUXIYQQNDGMYAPLXIVAXNTZTZWQYGXTNWYQPABNWSYQGMCGZAMMNPHYSGZBNZAXNQFDOCIAMLHIMPGKJYZLQXMSPCTOGWDRFNDMNONJLAQKTOXFDOWXWGJUWJXZTGFORVPFZIBRRDISELNJSXZHALAWKNDCWWVFOCZVSLVHKSLSKCMYICRHMBDLGXRXLWPZTETSKILCTXBBXKKWYPPILMCXCZXJKQFIFUBNDTBWAAXPAMDKJXSMRFPJHTPZDNHSJMYPFIWOBAZZWVLEHBKXLMOCLAVZSVMZNECOXUKYUBCTCYYRRVNTRQFHAPRNTUPPLDMVJQYPCBCOEINUYXAHWFJWUJWMCTZVUKXBAPLIQOPYOJSCMRYUGGKRNSEYKCFIKBLZVXRLFAIAXXMJMXMXWGRRZXDGDVQWWIEHKERQXEFSYBXRHHWVTHPIFIXPEWMUSITEXKPQVDNENJASSCRDJYSABZJRJHATDKYTVZUPIHTGCFPZJFLPHASRVSQKMJWVBYKFRESRCSLOMIIBPIPIPZEWABDNCKXHPFZGMCBFUAISFUSOILTZNQPYPYDEHSUCUFPZRNUJXNZPXGQCYCWDFEUSYZBDJFROVVPTSGFJZFQMXNUCUDSLUGVISLDCKCVLNYJOUXOSROOSRSXSQKNZWETRXNSZIHWGLNLTOBPSOKIVUBSEOHSCPKHAMJAXAZNPNSQRARQGYOVFABKAIYPTDXCQNCZUKOUOEOISJOSHQFLBCSLVPYQWURKWBYNSEJTSIMVFGYKHHAWBHSIAHFGBWMKBYDESFBSXEQEVXZCAZUWMEUENRJNTHXSQAKTXPKPIQVPVXWQKFWXXDFYXYJTSHARYBYGFYPUKFWDFTSBHZWTDBNHFBDPPCNBQBXXDYICVCMHMVXRRFAFKNOCUPBOHMIDPCBDXWHLEVZUXGVJFWTTFEEITBEUKCORTMWIREBUQAGXCGAATHYVLNOPVPWXJXZJFJLMUXWOPDVGZBUHAJOWQUQUHTAWGNEZGAJLYVZDDMQVTBWSWTVJXCJDQHHUDCCJRYEKFFHNCDIZOEIPCEXEZQUGIRBEIAIMINWHJIKBKQXXIPEEHTRZSDCWQSJCKGTUUZQIIMDZPBDJDMWNMKFGOIWPHIDGDGTGFSPJJOFTUYZEPQRGZAKSVYWDWKHUIBMWLIXYOUMQDYIAQCQWYVXTEILAEWKDSMUWNSLVHVACXLXDNDSGCPKZUXHKICTEZWWLCXKYLEAYIWLXRGRIEDYGHIVJJPHBRIMGFFXTXTPXNIXVPOYFXXNNUKBIYNKIDMSFFCUJMEEGMHXXOGUJMYCOEJUSJQJTZNYIKIKLPPYYWLTLTJYGNSLKYHEDCIZJRZSXXJANZUUSCBJDWRRZUZGAQJETOMYVIPZZISHJVLYWLYKSJRPMJPCBVANAMSTSSIXYNDRCMEIMYNBBSSCFXIVWNNSRTIBNTXAUCHBLWWSUDPQIPUNRFELKURCNJQVPXKDDVGHCCHWNSAIUINGSINTMRKLOTIBLSVCJLTYGMWMMXCFQXAZVCOXTFLBKMRLQCUUDBRMGQVFHXWHAVIXQORXHUAVVDXMWMBSAXEPWKHYILYEVUQEUWECTSRTZPNGQPYBMNFIRIGPASLJIPEVAWSECKSPPJKQSAENLYQVCTBPAITRAZBKGHNPQUTYMTEASFMYPQSRBRPRLEYNDJEKZCAKXKVAQIRMIFUNKMVUXCXXIDVWZXNVYWUBCSPLXNWDTAUFUPLWQKKIFSZFIWMRLVVVGEABJMYLOVPLUBOTAWJAJMKXZOZIBOHNZMGTPKGJZUWDGIIVFHVPQXHJIPUCJGEXRMWGKBUDBUOCBOPPEQOTLYDGWKVAAPSITVSXCAHRBNGZOIDHOJRBCZIHRYALAJTUKUQSELBCDMXTDZVVAASKHRJTEZDVVKUVFXHVHSIPMD"; - -// echo "msg len = " . strlen($too_long_msg); - - // create a message which is too long by adding extra - $logger->debug($too_long_msg . "_EXTRA"); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog2/test_supportability_metric.php b/tests/integration/logging/monolog2/test_supportability_metric.php new file mode 100644 index 000000000..a8cf91415 --- /dev/null +++ b/tests/integration/logging/monolog2/test_supportability_metric.php @@ -0,0 +1,24 @@ +', $matches[2], "entity.guid correct"); - tap_equal($linkmeta['hostname'] ?? '', $matches[3], "hostname correct"); - tap_equal($linkmeta['trace.id'] ?? '', $matches[4], "trace.id correct"); - tap_equal(true, strlen($matches[5]) > 0 && preg_match("/[\w\d]+/",$matches[5]), "span.id is non-zero length and alphanumeric"); - if (isset($linkmeta['entity.name'])) { - $name = urlencode($linkmeta['entity.name']); - } else { - $name = ''; - } - tap_equal($name, $matches[6], "entity.name correct"); - } - - /* have to return a non-null value which is the output string */ - return ""; - } - - public function formatBatch(array $records) { - foreach ($records as $key => $record) { - $records[$key] = $this->format($record); - } - - return $records; - } -} diff --git a/tests/integration/logging/monolog3/skipif.inc b/tests/integration/logging/monolog3/skipif.inc deleted file mode 100644 index f0a4bfec5..000000000 --- a/tests/integration/logging/monolog3/skipif.inc +++ /dev/null @@ -1,15 +0,0 @@ -= 8.1 required\n"); -} - -require_once(realpath(dirname(__FILE__)) . '/../../../include/monolog.php'); - -if (!unpack_monolog(3)) { - die("skip: monolog3 installation required\n"); -} diff --git a/tests/integration/logging/monolog3/test_monolog_basic.php b/tests/integration/logging/monolog3/test_monolog_basic.php deleted file mode 100644 index fde0fa773..000000000 --- a/tests/integration/logging/monolog3/test_monolog_basic.php +++ /dev/null @@ -1,204 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_basic_clm.php b/tests/integration/logging/monolog3/test_monolog_basic_clm.php deleted file mode 100644 index ed86b56d2..000000000 --- a/tests/integration/logging/monolog3/test_monolog_basic_clm.php +++ /dev/null @@ -1,162 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_basic_clm_off.php b/tests/integration/logging/monolog3/test_monolog_basic_clm_off.php deleted file mode 100644 index 848fb4e5d..000000000 --- a/tests/integration/logging/monolog3/test_monolog_basic_clm_off.php +++ /dev/null @@ -1,156 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_cat.php b/tests/integration/logging/monolog3/test_monolog_cat.php deleted file mode 100644 index 5fe59bc0a..000000000 --- a/tests/integration/logging/monolog3/test_monolog_cat.php +++ /dev/null @@ -1,188 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_context_default.php b/tests/integration/logging/monolog3/test_monolog_context_default.php deleted file mode 100644 index 98406c7a4..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_default.php +++ /dev/null @@ -1,105 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value"); - $logger->debug("None converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_exception.php b/tests/integration/logging/monolog3/test_monolog_context_exception.php deleted file mode 100644 index 1440756f7..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_exception.php +++ /dev/null @@ -1,106 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - $context = ['exception' => new \RuntimeException('Foo')]; - $logger->alert("context is nested array", $context); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_context_filter_extra1.php b/tests/integration/logging/monolog3/test_monolog_context_filter_extra1.php deleted file mode 100644 index b711eb871..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_filter_extra1.php +++ /dev/null @@ -1,117 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("AA" => "AA value", "AB" => "AB value", "AC" => "AC value", "BB" => "BB value"); - $logger->debug("AA AB AC converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_filter_extra2.php b/tests/integration/logging/monolog3/test_monolog_context_filter_extra2.php deleted file mode 100644 index d46aa28e1..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_filter_extra2.php +++ /dev/null @@ -1,112 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("AA" => "AA value", "AB" => "AB value", "AC" => "AC value", "BB" => "BB value"); - $logger->debug("None converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_filter_extra3.php b/tests/integration/logging/monolog3/test_monolog_context_filter_extra3.php deleted file mode 100644 index 4283e6aa5..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_filter_extra3.php +++ /dev/null @@ -1,117 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("AA" => "AA value", "AB" => "AB value", "AC" => "AC value", "BB" => "BB value"); - $logger->debug("AA AB AC converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_filter_extra4.php b/tests/integration/logging/monolog3/test_monolog_context_filter_extra4.php deleted file mode 100644 index 94d994f1a..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_filter_extra4.php +++ /dev/null @@ -1,117 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("AA" => "AA value", "AB" => "AB value", "AC" => "AC value", "BB" => "BB value"); - $logger->debug("AA AB AC converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_filter_extra5.php b/tests/integration/logging/monolog3/test_monolog_context_filter_extra5.php deleted file mode 100644 index d4f181642..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_filter_extra5.php +++ /dev/null @@ -1,116 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("AA" => "AA value", "AB" => "AB value", "AC" => "AC value", "BB" => "BB value"); - $logger->debug("AA AC converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_filter_rule1.php b/tests/integration/logging/monolog3/test_monolog_context_filter_rule1.php deleted file mode 100644 index d0be4ff36..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_filter_rule1.php +++ /dev/null @@ -1,117 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value"); - $logger->debug("A B C converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_filter_rule10.php b/tests/integration/logging/monolog3/test_monolog_context_filter_rule10.php deleted file mode 100644 index 2f7a7d347..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_filter_rule10.php +++ /dev/null @@ -1,115 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("AA" => "AA value", "AB" => "AB value", "AC" => "AC value", "BB" => "BB value"); - $logger->debug("AB converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_filter_rule11.php b/tests/integration/logging/monolog3/test_monolog_context_filter_rule11.php deleted file mode 100644 index bb4a0911a..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_filter_rule11.php +++ /dev/null @@ -1,116 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("AA" => "AA value", "AB" => "AB value", "AC" => "AC value", "BB" => "BB value"); - $logger->debug("AA AC converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_filter_rule2.php b/tests/integration/logging/monolog3/test_monolog_context_filter_rule2.php deleted file mode 100644 index e927f8e08..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_filter_rule2.php +++ /dev/null @@ -1,115 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value"); - $logger->debug("B C converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_filter_rule3.php b/tests/integration/logging/monolog3/test_monolog_context_filter_rule3.php deleted file mode 100644 index a90a8a77e..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_filter_rule3.php +++ /dev/null @@ -1,115 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value"); - $logger->debug("A B converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_filter_rule4.php b/tests/integration/logging/monolog3/test_monolog_context_filter_rule4.php deleted file mode 100644 index 36506085b..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_filter_rule4.php +++ /dev/null @@ -1,116 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value", "D" => "D value"); - $logger->debug("A B converted", $context); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_context_filter_rule5.php b/tests/integration/logging/monolog3/test_monolog_context_filter_rule5.php deleted file mode 100644 index 5a07e3c42..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_filter_rule5.php +++ /dev/null @@ -1,114 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value", "D" => "D value"); - $logger->debug("A converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_filter_rule6.php b/tests/integration/logging/monolog3/test_monolog_context_filter_rule6.php deleted file mode 100644 index e764a9271..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_filter_rule6.php +++ /dev/null @@ -1,112 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value"); - $logger->debug("None converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_filter_rule7.php b/tests/integration/logging/monolog3/test_monolog_context_filter_rule7.php deleted file mode 100644 index 47627d215..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_filter_rule7.php +++ /dev/null @@ -1,114 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value"); - $logger->debug("A converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_filter_rule8.php b/tests/integration/logging/monolog3/test_monolog_context_filter_rule8.php deleted file mode 100644 index 9a65b85ca..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_filter_rule8.php +++ /dev/null @@ -1,116 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("A" => "A value", "B" => "B value", "C" => "C value"); - $logger->debug("B C converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_filter_rule9.php b/tests/integration/logging/monolog3/test_monolog_context_filter_rule9.php deleted file mode 100644 index ce3056def..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_filter_rule9.php +++ /dev/null @@ -1,116 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $context = array("AA" => "AA value", "AB" => "AB value", "AC" => "AC value","BB" => "BB value"); - $logger->debug("AA AC converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_hsm_disable_forwarding.php b/tests/integration/logging/monolog3/test_monolog_context_hsm_disable_forwarding.php deleted file mode 100644 index 206dbbb37..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_hsm_disable_forwarding.php +++ /dev/null @@ -1,137 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $context = ["testkey_string" => "value"]; - $logger->debug("key is string converted", $context); - usleep(10000); - - $context = [1 => "value"]; - $logger->info("key is int not converted", $context); - usleep(10000); - - $context = ["int" => 1]; - $logger->notice("int value converted", $context); - usleep(10000); - - $context = ["dbl" => 3.1415926]; - $logger->warning("dbl value converted", $context); - usleep(10000); - - $context = ["TRUE" => TRUE]; - $logger->error("TRUE value converted", $context); - usleep(10000); - - $context = array("FALSE" => FALSE); - $logger->critical("FALSE value converted", $context); - usleep(10000); - - $context = ["array" => array('foo' => 'bar', 'baz' => 'long')]; - $logger->alert("array value not converted", $context); - usleep(10000); - - $context = ["object" => $logger]; - $logger->emergency("object value not converted", $context); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_context_limits_1.php b/tests/integration/logging/monolog3/test_monolog_context_limits_1.php deleted file mode 100644 index d82678e1e..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_limits_1.php +++ /dev/null @@ -1,107 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $key = str_repeat("A", 300); - $context = array($key => "value"); - $logger->debug("None converted", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_limits_2.php b/tests/integration/logging/monolog3/test_monolog_context_limits_2.php deleted file mode 100644 index 475d21fcf..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_limits_2.php +++ /dev/null @@ -1,110 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $value = str_repeat("A", 300); - $context = array("key" => $value); - $logger->debug("Value truncated", $context); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_context_precedence_1.php b/tests/integration/logging/monolog3/test_monolog_context_precedence_1.php deleted file mode 100644 index 3ff167db1..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_precedence_1.php +++ /dev/null @@ -1,108 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - $context = ["testkey_string" => "value"]; - $logger->debug("key is string converted", $context); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_context_precedence_2.php b/tests/integration/logging/monolog3/test_monolog_context_precedence_2.php deleted file mode 100644 index 4e3d80a7b..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_precedence_2.php +++ /dev/null @@ -1,108 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - $context = ["testkey_string" => "value"]; - $logger->debug("key is string converted", $context); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_context_simple.php b/tests/integration/logging/monolog3/test_monolog_context_simple.php deleted file mode 100644 index cb4330cf0..000000000 --- a/tests/integration/logging/monolog3/test_monolog_context_simple.php +++ /dev/null @@ -1,238 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $context = ["testkey_string" => "value"]; - $logger->debug("key is string converted", $context); - usleep(10000); - - $context = [1 => "value"]; - $logger->info("key is int not converted", $context); - usleep(10000); - - $context = ["int" => 1]; - $logger->notice("int value converted", $context); - usleep(10000); - - $context = ["dbl" => 3.1415926]; - $logger->warning("dbl value converted", $context); - usleep(10000); - - $context = ["TRUE" => TRUE]; - $logger->error("TRUE value converted", $context); - usleep(10000); - - $context = array("FALSE" => FALSE); - $logger->critical("FALSE value converted", $context); - usleep(10000); - - $context = ["array" => array('foo' => 'bar', 'baz' => 'long')]; - $logger->alert("array value not converted", $context); - usleep(10000); - - $context = ["object" => $logger]; - $logger->emergency("object value not converted", $context); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_decoration_and_forwarding.php b/tests/integration/logging/monolog3/test_monolog_decoration_and_forwarding.php deleted file mode 100644 index 31cf32430..000000000 --- a/tests/integration/logging/monolog3/test_monolog_decoration_and_forwarding.php +++ /dev/null @@ -1,261 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_decoration_basic.php b/tests/integration/logging/monolog3/test_monolog_decoration_basic.php deleted file mode 100644 index 443c5f1ce..000000000 --- a/tests/integration/logging/monolog3/test_monolog_decoration_basic.php +++ /dev/null @@ -1,171 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_decoration_multiple_handlers.php b/tests/integration/logging/monolog3/test_monolog_decoration_multiple_handlers.php deleted file mode 100644 index c9661addc..000000000 --- a/tests/integration/logging/monolog3/test_monolog_decoration_multiple_handlers.php +++ /dev/null @@ -1,229 +0,0 @@ -setFormatter($formatter); - $noopHandler = new NoopHandler(); - $processHandler = new ProcessHandler('cat > /dev/null', logger::DEBUG); - $processHandler->setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - $logger->pushHandler($noopHandler); - $logger->pushHandler($processHandler); - - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_disable_forwarding.php b/tests/integration/logging/monolog3/test_monolog_disable_forwarding.php deleted file mode 100644 index dc0e451c9..000000000 --- a/tests/integration/logging/monolog3/test_monolog_disable_forwarding.php +++ /dev/null @@ -1,104 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $logger->debug("debug"); - $logger->info("info"); - $logger->notice("notice"); - $logger->warning("warning"); - $logger->error("error"); - $logger->critical("critical"); - $logger->alert("alert"); - $logger->emergency("emergency"); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_disable_logging.php b/tests/integration/logging/monolog3/test_monolog_disable_logging.php deleted file mode 100644 index 3aa2781e0..000000000 --- a/tests/integration/logging/monolog3/test_monolog_disable_logging.php +++ /dev/null @@ -1,95 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $logger->debug("debug"); - $logger->info("info"); - $logger->notice("notice"); - $logger->warning("warning"); - $logger->error("error"); - $logger->critical("critical"); - $logger->alert("alert"); - $logger->emergency("emergency"); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_disable_metrics.php b/tests/integration/logging/monolog3/test_monolog_disable_metrics.php deleted file mode 100644 index 9546cc454..000000000 --- a/tests/integration/logging/monolog3/test_monolog_disable_metrics.php +++ /dev/null @@ -1,157 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $logger->debug("debug"); - $logger->info("info"); - $logger->notice("notice"); - $logger->warning("warning"); - $logger->error("error"); - $logger->critical("critical"); - $logger->alert("alert"); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_drop_empty.php b/tests/integration/logging/monolog3/test_monolog_drop_empty.php deleted file mode 100644 index 563e5e9ef..000000000 --- a/tests/integration/logging/monolog3/test_monolog_drop_empty.php +++ /dev/null @@ -1,175 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug(""); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning(""); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert(""); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_escape_chars.php b/tests/integration/logging/monolog3/test_monolog_escape_chars.php deleted file mode 100644 index e40597c9d..000000000 --- a/tests/integration/logging/monolog3/test_monolog_escape_chars.php +++ /dev/null @@ -1,97 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $logger->debug("This string has some characters which should be escaped: \" \\ / \x08 \f \n \r \t GBP sign \xc2\xa3xxx"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_hsm_disable_forwarding.php b/tests/integration/logging/monolog3/test_monolog_hsm_disable_forwarding.php deleted file mode 100644 index 40f39a35b..000000000 --- a/tests/integration/logging/monolog3/test_monolog_hsm_disable_forwarding.php +++ /dev/null @@ -1,104 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $logger->debug("debug"); - $logger->info("info"); - $logger->notice("notice"); - $logger->warning("warning"); - $logger->error("error"); - $logger->critical("critical"); - $logger->alert("alert"); - $logger->emergency("emergency"); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_basic.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_basic.php deleted file mode 100644 index 54ba9bd1c..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_basic.php +++ /dev/null @@ -1,216 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_basic_comma.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_basic_comma.php deleted file mode 100644 index 74d2fc01c..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_basic_comma.php +++ /dev/null @@ -1,215 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_basic_mixedcase.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_basic_mixedcase.php deleted file mode 100644 index 008b412e7..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_basic_mixedcase.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_basic_mixedsources.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_basic_mixedsources.php deleted file mode 100644 index 68728a9f2..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_basic_mixedsources.php +++ /dev/null @@ -1,227 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_basic_withspaces.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_basic_withspaces.php deleted file mode 100644 index c2299f734..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_basic_withspaces.php +++ /dev/null @@ -1,218 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_disabled_01.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_disabled_01.php deleted file mode 100644 index bc144bdc1..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_disabled_01.php +++ /dev/null @@ -1,214 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_disabled_02.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_disabled_02.php deleted file mode 100644 index 49c113cee..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_disabled_02.php +++ /dev/null @@ -1,126 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_disabled_03.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_disabled_03.php deleted file mode 100644 index b0d4cad79..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_disabled_03.php +++ /dev/null @@ -1,118 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_disabled_04.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_disabled_04.php deleted file mode 100644 index 7efe003a7..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_disabled_04.php +++ /dev/null @@ -1,209 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_disabled_05.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_disabled_05.php deleted file mode 100644 index ccb13b0e0..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_disabled_05.php +++ /dev/null @@ -1,118 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_01.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_01.php deleted file mode 100644 index abc65e9fe..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_01.php +++ /dev/null @@ -1,216 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_02.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_02.php deleted file mode 100644 index a128dd494..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_02.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_03.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_03.php deleted file mode 100644 index 8b00f549a..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_03.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_04.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_04.php deleted file mode 100644 index 6a2eb0af8..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_04.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_05.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_05.php deleted file mode 100644 index 30d59ef21..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_05.php +++ /dev/null @@ -1,216 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_06.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_06.php deleted file mode 100644 index eeb791d84..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_06.php +++ /dev/null @@ -1,218 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_07.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_07.php deleted file mode 100644 index e5dd1f196..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_07.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_08.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_08.php deleted file mode 100644 index 5f7df639e..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_08.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_08a.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_08a.php deleted file mode 100644 index 806da77d0..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_08a.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_09.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_09.php deleted file mode 100644 index 27e890384..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_09.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_10.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_10.php deleted file mode 100644 index 7832c5027..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_10.php +++ /dev/null @@ -1,218 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_11.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_11.php deleted file mode 100644 index 86aa719ef..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_11.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_11a.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_11a.php deleted file mode 100644 index b39c20c6d..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_11a.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_12.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_12.php deleted file mode 100644 index 8801c47d0..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_12.php +++ /dev/null @@ -1,215 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_13.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_13.php deleted file mode 100644 index 4453099ba..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_13.php +++ /dev/null @@ -1,217 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_14.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_14.php deleted file mode 100644 index 3a5714eac..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_14.php +++ /dev/null @@ -1,221 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_15.php b/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_15.php deleted file mode 100644 index 64bcb6697..000000000 --- a/tests/integration/logging/monolog3/test_monolog_labels_forwarding_exclude_15.php +++ /dev/null @@ -1,219 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_large_message_limit.php b/tests/integration/logging/monolog3/test_monolog_large_message_limit.php deleted file mode 100644 index 0af1e2286..000000000 --- a/tests/integration/logging/monolog3/test_monolog_large_message_limit.php +++ /dev/null @@ -1,82 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - /* maximum log event pool is 833 events every 5 second fast - * harvest cycle. Send that number of events and verify - * all are accepted. - */ - for ($i = 0; $i < 833; $i++) { - $logger->debug("message " . $i); - } -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_large_message_limit_drops.php b/tests/integration/logging/monolog3/test_monolog_large_message_limit_drops.php deleted file mode 100644 index 91aeaea64..000000000 --- a/tests/integration/logging/monolog3/test_monolog_large_message_limit_drops.php +++ /dev/null @@ -1,82 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - /* maximum log event pool is 833 events every 5 second fast - * harvest cycle. Send more than that number of events and verify - * correct number are dropped. - */ - for ($i = 0; $i < 833*2; $i++) { - $logger->debug("message " . $i); - } -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_limit_log_events.php b/tests/integration/logging/monolog3/test_monolog_limit_log_events.php deleted file mode 100644 index 65be7e65a..000000000 --- a/tests/integration/logging/monolog3/test_monolog_limit_log_events.php +++ /dev/null @@ -1,165 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_limit_zero_events.php b/tests/integration/logging/monolog3/test_monolog_limit_zero_events.php deleted file mode 100644 index f021b5029..000000000 --- a/tests/integration/logging/monolog3/test_monolog_limit_zero_events.php +++ /dev/null @@ -1,105 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $logger->debug("debug"); - $logger->info("info"); - $logger->notice("notice"); - $logger->warning("warning"); - $logger->error("error"); - $logger->critical("critical"); - $logger->alert("alert"); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid1.php b/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid1.php deleted file mode 100644 index c57aed5c1..000000000 --- a/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid1.php +++ /dev/null @@ -1,85 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - /* maximum log event pool is 833 events every 5 second fast - * harvest cycle. Send that number of events and verify - * all are accepted. - */ - for ($i = 0; $i < 833; $i++) { - $logger->debug("message " . $i); - } -} - - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid2.php b/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid2.php deleted file mode 100644 index 7e891359b..000000000 --- a/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid2.php +++ /dev/null @@ -1,85 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - /* maximum log event pool is 833 events every 5 second fast - * harvest cycle. Send that number of events and verify - * all are accepted. - */ - for ($i = 0; $i < 833; $i++) { - $logger->debug("message " . $i); - } -} - - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid3.php b/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid3.php deleted file mode 100644 index 827eaa4d8..000000000 --- a/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid3.php +++ /dev/null @@ -1,85 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - /* maximum log event pool is 833 events every 5 second fast - * harvest cycle. Send that number of events and verify - * all are accepted. - */ - for ($i = 0; $i < 833; $i++) { - $logger->debug("message " . $i); - } -} - - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid4.php b/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid4.php deleted file mode 100644 index f1185ac24..000000000 --- a/tests/integration/logging/monolog3/test_monolog_log_events_max_samples_stored_invalid4.php +++ /dev/null @@ -1,85 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - /* maximum log event pool is 833 events every 5 second fast - * harvest cycle. Send that number of events and verify - * all are accepted. - */ - for ($i = 0; $i < 833; $i++) { - $logger->debug("message " . $i); - } -} - - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_log_level_filter.php b/tests/integration/logging/monolog3/test_monolog_log_level_filter.php deleted file mode 100644 index e5b91554a..000000000 --- a/tests/integration/logging/monolog3/test_monolog_log_level_filter.php +++ /dev/null @@ -1,175 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_log_level_filter_invalid.php b/tests/integration/logging/monolog3/test_monolog_log_level_filter_invalid.php deleted file mode 100644 index 18849c9de..000000000 --- a/tests/integration/logging/monolog3/test_monolog_log_level_filter_invalid.php +++ /dev/null @@ -1,176 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - // insert delays between log messages to allow priority sampling - // to resolve that later messages have higher precedence - // since timestamps are only millisecond resolution - // without delays sometimes order in output will reflect - // all having the same timestamp. - $logger->debug("debug"); - usleep(10000); - $logger->info("info"); - usleep(10000); - $logger->notice("notice"); - usleep(10000); - $logger->warning("warning"); - usleep(10000); - $logger->error("error"); - usleep(10000); - $logger->critical("critical"); - usleep(10000); - $logger->alert("alert"); - usleep(10000); - $logger->emergency("emergency"); -} - -test_logging(); diff --git a/tests/integration/logging/monolog3/test_monolog_truncate_long_msgs.php b/tests/integration/logging/monolog3/test_monolog_truncate_long_msgs.php deleted file mode 100644 index 09e2ed91a..000000000 --- a/tests/integration/logging/monolog3/test_monolog_truncate_long_msgs.php +++ /dev/null @@ -1,107 +0,0 @@ -setFormatter($formatter); - - $logger->pushHandler($stdoutHandler); - - $too_long_msg = "FDTZJACCUOBPXLNMOIRNOTGWNDYSIFHLRNXKIZHOIUSOGBZEBVLCOFJZYGJRVYAYYZDAHNGNLLLCFMWJFARUOJXOWJXOOULAQCUFMWFRGJYIQWNEAMJYHUYTNIYQNXSMIKRWIOZLUUBCTTBFRCUVYXWBHBWHOCNLBEZLMVKRLIGNBUTWAIZFLDZKTGWOOJPCOAOGAABJYNPPVPACIGELXNWYTPTWJIRIMNBIYZNOOFPUQNAELRZBFCHKMIDFYMFWZEOYHGJJKARRBBWXZVXOIXSONHSLUGBWMYTAAJXLCYJWVKIHHHQBMGMEJPTYFYTEXTOFRNJWJDEUDJXDOJJDHCEZIEVUDUQPPFTPDIILIDQHGTTTLTMVFMKZQSRPXSXLNNDGAZQNGRKKQCZLHQJTSXTEQXQYYVQUBVEHUBGELMPOCTTOUUDRUCPWOVUWFNNEHIBPOYZLAENPWNDDYGJIXVXVRFHNRLNSKKUISMQDFXETOSAHDJHWPTGOBVFZXDVRTDJCQOZXVYDMZIXRFOYJQWXXSOITDYMTPEIUMYIUPTGZEZZRGGCYYBAJZFCBIXUFIMNTXXVEFWTKSBAQGIUBHMWGXMOUDEBZMURZTPUBLACSEIPVRJLIPXBSFIXPRPLIQSXDIKCPGFUDSUQSUYWYLAHJSEAQVAZTRJUMYFIXHOBQWBNCZBTTJDGXNXGWGOWEJXQKIMEBEMMFMGXEQPPKFFGHOBHROCMOLBIIMDUHNBVMCOHOCCFSSQDUKLHHUSQWKCBYTYLAUJPIXDPJROCBNVFLGSSKNWGVCVFQARBBWOFQUMFMLOXRXYWIHQPEWVTRMPLLIZJYNWTGRVCOUXLSVOLKBBPQAVLBXAFZACRWAWBIGSISYEPKIXUTKSSAOBMUNXVPWBBJLPFRVLWMVGMRLKRWCRHGPYGRQJMLONHMDVUCGDDBFNTJFZJAPCIENKTYYWJVDTRNEHSGFRECXIBCUIHJBSPVZHXWWJHGPOQLKHATHASRHGCTRBSHMHHKPPRMGTMHPLLAVAQWBRMZAIQBZUAHIYZRILBFSETYNGEYFCQTXCUYONBUIRUMNFFXIDERILPLPNWKSJSZFBNEZIJVIJTXDHVWRNQXVXBRREQSPLNSLTQVTQMIJITAWSXQWTCUUSBMFMDQGGDWQZYZYVYBDYCQPVQTJRWLFBHMUPXDEMHKELTETYGCHWQIWPKUILCHSZNNXICSAWWZXWPBJGGHSLQJMCXNDMZZKOXXRMRBMHXOQIUTCKVFJPFHXAUFTNZQTKBQDMSDDFTAGOBPMJBOHQBESQPOSXKAXXRUTTSLPMVVKWCGELHFOAPEQKGJAQQVSDFRGRFCNKUFEUDAGGBMGDPQFUTZICDIEJYTJDITEVBFQGUHKQVGTUUXDOYITUYYMEMUECHMDIMHKBAQBCEZALVHXUVVRGMFAVLXBVMZLUJIBEPVVTWAADGGLJGDAGXIVWTNROTZTTUANDROKYHABSVBPHIFHOXZUAONPYNRYLTIMZCQMHMSWLRAQBSJJYTPZVHGEEEJJEGJTPSWUXUBANUKBDPJDLUUQENVLTJYDBEEPSUMMOBLRYUVDXQQKPMGAMUAPJVNQZXFUOIBWNVSJTEFDQKONKNDNWCEAXRSVVUHEHELCNHKEJTQAEJHWJHCTDYLIXYZEAJHDKAPPVEBVPGNOODVDZRVVIBTKCVVFYTMYLIXAXNWOYTBYTJOLXZGFMGHTEBJERDFUREHVDFMLPBCAIJPXQMSMVMNMBSKVLLPILSEDPVLNJFLFNBMJYKROTJBCLRQEASNKNDCTOOWKDMNYXPTDGAHWWEAZMCTZMHYKHQFDNGBFUEETSRCSPYWJOEWPXARSXRGROJAJBAXVGABCQDIKHWDRELNTQEFFZXOEDAACIWIZTRWTFCHZMYBJPIYDXGESSFJCXUSMLRUVVXDKBHUZFNHLEKWQKYEZAADGBKRLLGRNIZSDVUOZACNMDQUHXGZYFKGGHSMUDSALIQACDLPPJIZSAYEEODNJYYFOLMNYZCECNWEKOBNWSGUVAEHWXBUEIFLQOUFBOJWGIPUQAOBQAUJLVLLVDVYWVWLCMNFXUOLXORMCMTQRCJHEOWRPSFZTSVYBPJSMJWUXYWRBTSCKJNFXBHZLWXMDZFFYWTXOOHPONPUBQCPLNEDRRKUUDNYPLMPIGKFWFISKBAMZBECUCCRYDPLMDLIFYSOULJGYFEYKHYAVCRSWRYZVKSCNYPVLJXFMQHCUCBQPINBWLFNHXLQZPOAXPBGHKDHAVASAETZUZAVULASJZTZUQOMDBDCXREESMELDFWKZVBGTTBWMGDZJAINMEMIVVWJZXBOPJXAEAYGSJIWDRIIEGXVEQCISINOSRNTMHQPSBQIXVBKYRDYBBGJCMGGVRWZBFVLGNUNUVCFGIGMJFHMTKZLCAFGARQCUMBLLIACPRTDRCMVWIMLUNYKJKLMIFZCCCKBGLSKRHHXMWDCQQTNWMMSHWSZUVEGVDTCUPNJOXILZAUQJSRVCHXMXKGBOFCHSLMZFKIPAADCKIBZDZCFYWBZPLHMEUSJBJWKQEGRZKJPTKAZSHKHPKPPJDNTKQHBCOYXFKSFQAAIBORMBPTMJWALZGAFMZZTESNMBZDFXXHWSNQDZUUMUVGVWCCEUNMNBIIMGVDORHJCBHGSVONJLCFLRNRRBWCJOZOFHNBCMNVDVHCVJRVCIYOSWJKQCXYKQLDOJNFQQFFTTTLLXQDZJRUZNRRQGDZRNMLYLUQLWUOQGZENTYXHUIBESVDARZHQZGYMTBNPMLQLJYELEYJRFPCQCWSCLUJHDHYFUAYPCNHBKWZBJXNNHDGOAUZWRXQZIISJCVGLGDYYCFHMPGAFRHRKCFZFDFAAEPLSAQLMCVLRPIRHPYATWKHGMTBJRFAMDEBHPMLNEGLKTAYBXVDGJKRPFPAMAYDESIFDLCLLXKOHTDFXZOWAZNFEXSNRGCCAZPACHBOGMFITVRJLOJZHXIEPHNWBDSLMTWKBEVOXIWCFQZLTXGAUKZMFGRDTODMDPLCFTQDVITFMJDPJYNCLUXRYLXWMFPROLVJXIFVZYPXZSEAYBFGUZTNEZGZLEODAYHFJDLJRMWNJHJDSEWBOJFASHVROUCISICLQGDOOHWABTXSTNQCDHKGNZMNPEFVLCIDMSOJGONMYALGOHBRLKDKPURDPVIWATIEIQZTXCHJQDMLIHXZZVLKRWQNDDELMCXURKQIUFXJBPQIIRYRRPGIZUOOSFTDXEYJRYRDAVKSBWWCCJJZRJDBIYQLQHYEYUMBTPPQOSRFFFBBLAXWWYEBWECSEJBOVVWXKKEVPNNMEHQKEACOAWIWOVCSHFOUCFBFIBRZWKDWWIVSFGBWXHIINCRLPJUXQRYTUJNMMMRBWOFTSLYZCPWFYGUIRDVEUWQQAXFGNNVNPCPMSVBSPHRGUMLCUOVWCPJPJCOEFIIJVVDYQYLEBNOPBDMTWAXSBVSQLMKEZFJJXIQINPFVEFAGJGJJETJZRJHKSVNZMYNNNWHQSJLKDGXSAYNLRHHVEVZPSZZPAOEUGGMGUMBXVPKRVDPWIFDJENWBLGCINUBVXKVECNQJNESWNCUTZTSFYTWJCQRIMJVWCPRAJCWICYOVTZNKWXNJRMGMOUQRGLYRACXZDXVITRPTMNEVTPULUWLKSJKIHVCBQYCWQXGNIJNLZVZAGWMTRUVMOJJYUETQVEDFWVLAVPWNVBHZJZZOMXGVCDLHLTOPXZIDRNTNONWHIBFLNAELCOAQTZCNIIABCQQISBXDKESKHXEPCKJYUYDYRHDTOMJJNLUKQUADFDHQUCYFLCBYZCJXRAFBPNSETGNLZGBPDYYKZXEDJEWZPBRKEBHUCZZOYYUNXSRKYAUWAUXPXTDOJLKBQOSOZOEHRSWXDINYYPGMEJWVSCVJGMWMHOWZXTJYDDNXTFPMEUKVWQXAQWEHBESNSHEXNSHRPKKWTKCIAFLQZESCEZYTFOVMMOAOATHGDYXSAGGZMTEINMAUWEFNZWAVIJZALNOFBLAJIRFYRULUXDNASTAGNNLVAAQGRWEAJIFCVKWPELZXOWOURWKDTBXFQQJSVXNENEHPZNNTTBLXZHHBHLZNSMVRYGGZEQVVIDMJRHXZOPTRWGNQQKAUJVSPJKKBIMEECDXNGPADXBNFGDIWDVBFUUDUYJUJMVSXASGXTVYKFGUUBLYQRSAYOOYVJBQPCGQWFYSGQQDEVGPDWLIUBGOKQJGSYDJEPNHMAFOYKQGJCIYCWYTYKXUTORXTVIBSRVTOIMULODBDPPTHAONXLVYBTDHPBRCBTTKVDMCIQZRKOLLCTXORFBFWNSUVSFZHYYGZNSUULQHZQPQAJIKTSPBCTOBPTQIECQRTQKFEFKBAUIKWCOHUFQVXNCYSJSEUPBZOTLCDMIGBIQMYNXCNRPHGNZVHUEGNIOPCXVVQFWVVFOQHXGGTQMRORMNULXKKHAGBZSRONTTGSSSZUVHFIRAJQYHYNRIEKZMAESBEOFDGFKFWMNMDKAOBBWSNGSRIKNUELXQIIKEIOVGKPYGGASGTKMOSJWIMWEBPYKWWGLVYQVOPOCECPMPCZOZNQRTWWVHSXQDUWSCJMAZLBCXXSDMFEXTMXMVNSLCOKMHAJGEIWBSVOYALFTLWYOHKCEAHZXDRGOBSXTAVPADGRCPTMAPVTUMIVQENJUNIDUGUDKYOBCPKSLPZBLTDRBPRVFWCEGQJEKJIECKXXGSUPMKXLOORYGKFCMHZETJSFTBZLLGPOEXVXDQMPTUWOULQKHBBPUSYAOAKITHTAILKIRPBBKCSUYDAYLPWXDUOCIGUGIKQJLEYJFLQNOARSGPERBKWNQWQBSQWNSYMHQGVSESIDHYSBWECKLQKHROMFSRXVOYPCYECZMCTBBWJSHEZZOSPQFTVUKUDQHKVGEBZBRCXHEJDHQTTMOUUOVTGPZTRRJFVBCYUEWFOSVYDBKSJHWAGGOAJHYVCNGMRAVROPNHDJDNJVHLFFSOUXCTBSBELJNNUIEYWOTMFYLCHVMTXCWHCJZRNKHRNMIYFCGJNQHJBSRDLJBDGUWJXDNKYEGWBMJNQPALTTKOKZSHOUOQKDGKPZGHCSJVIKKDPKLSDHUJNLAEXAIKRUVROIQOZSREGIIRHDXCQNHMUJXPXKTDPBIDNZCPVWZVGFFEKZPXEZKGXTMKSZWTQNBSGNWRYPIXMUHGITKUTQFGZSPXENFFDFNNCYDKWKOAKUSOKVASHPUUSVZFQLLSWMFKMLMYXNLFCVZLVYWRUWPZFLAHZPNBIRNMGOBGMCKJCFIRIIECJWWUSWSOJBCFUYXZCSHYCOWSGCFAMFMBLCZABCMBHVWLAJNEDWOQBSDKCXFYPYNCNJTKGPYVWAKKMZBVXXFAKKJTMBWUPZVNTXZSCBOAWGGRTLEOOVQYWLQVAXPMVQETIQXRCKBIWHUUMFKBNRNKHKPERNKOYFWWTBADZRJACAAJZCBNTGDOGZBFFTFCFUZRJBEMJDZOTNZNDWFVGSMMYSRLKAWUVLVVPQSXUUKKJBPNJAMDTEGXYAYYYDVJZNYXVCVDSITTITSALGGJXKEJWNXLAVHBFVLOFNDGDURAYMIWCITVZIUHQHPWTYXOUGVYVSYJYIQTGAWAKDMROSWXNFWNEPNRRSCKBWTGPRTYLMRLRCQVKRQQERJZWIHUXANMXJHBRSGKKBMPSOYDVESDOIOMCHKQWTBUCZUINXGNXULDDMYDHBUDTXPORDPWQWCLBIAROLIGVSWMEGFBSQRNAXWDJUBOLEPEOHBKNEHYHNDDOZAORCQFLWLGLZJUBNYNTOEGYVIATDBBURPVCCXUQKAODJWUWOMBJJOBSZHTESIKSVQIYSPXADPBHFVSLOEKBCBXTKBJKNSQJHVJNHPTAIBLLUWAFEXQWCBPVONOHWDJSIVILROUTBDLRZOYJCEYGWWCUFNMNOVMMMIZKGDXNCNBKNBWFAMQSEEHREYCVBDCVFJRGQDTEFXFEQYEUQKNPRFMWBHUDKZADIXDOZMKUCITKTYPPCXWZUJNALEWRCWYRPQSEYEMJVNRDNORLQLWLXABYXVLGPGHMRLFWQDDREOKECHXJLXGSHOZKKBKGTIMJEWVRFZACCQGSCYFTCPVUHXSDMDKYBDBFGPDCERHBJJNBUBRFPKNXNUQKFFKFSGQRZRDAVRBCRZYUZBWTKUSWNLAGSNJENCZHJIBKELOEFTWLEOGPSTSHDLTMBEJILUYXMWIYHWHLXERKLKENHWFHHMZMLTQHKDQNRVCLEVGFFGPVRFCMARRKGWONBKJDIKUNHIKSRUKDSZGHGQNHQKPPMTVSINUJXJHLZLULGIQQHIIEYOOBNJHZGQRRSHONVWESSHUUSCNWRDQOIZNEHDHSUZUIRQLBWEFYFPTJSRDZVIDIHTGRCWXNGKRAORPYMCQHSBHOCNVKRCZULABTDOPWPDABOCWRWEQBYLEDOUGWVCCTZXIFYHKDFBKWWUZSZZTBLDRTQJBOOJXCLUGOMWWVYFGKIDDRIXQOEXHJKTJTMQIYITFUVTOSLKVOMSDVGUHXEGEZRZZUAAKGCZYAEFJIPWPMCFHFLQRGHHWEOTHDBKHVEOOUSXAINIZOVPONIYMNLDOIJEUPSKREEHTWHTSREKDCIWDPCRWYSRAVBTNALIBNXYCWKPSWLVEKLLYHDWRXQUTMNFJHPJCSVKEOESCQBQAWZQRSCYASNJZZAJFUNGRFCFUHQOCCJKCUIRDTZZEKROYHJWXYACPTBVCOEVXKKLHZOZRAZBHZPOFESQSAPKCHXSBDXGUNKKXJHEGRIUVOZYLYQAJBMQGIWPVHGAFQXBXHKIDORYRZTOVLKBNKVKXPORFDBECOMZVSOIJWBSNFNJPAVTORWOPEKFBWHHLZQYSSOXXILILQIKMKUXJUAEMLTMHOSXUEGRKZEWAUDMWBLOKKDAZWSKBUYIWFFGOLFVNRAAYAMUVLBOATKLEAUJBZOTTTRBPPDZAJFUHZRPFRRDPATFUYDYJTRFLFUIIRSXMVCUZXDLRBHDQQZHNHBKSWEXWZBUBLRDJJLXHPYYNVYFTQXSDHAVHYQFXLFTONEAKDXMCWPSJALQEPNXJGVOEUZYKGOLIBDRXBAOAHIWJVTAIESFDWPZLVJOZLNVIDHARYYODBCXZWYLGWPQEGUVYUSRXILQVMAXTMJOLIJYKPGXITHJZYBYPQDSICOQOZYOZKTRSDZBTEPNLFBEIJVAKTGAYOEYZLVJATXUTCOZOTORXSUPRUFTQOSZBNWMULYCTEUWBNNINUONJJYOHWEDTFFSTNWICQVHFNGTFDOOLZPZWZZKJCWNRGJNQDSGQSRMIGKIXUYQYWHAOPDMYFZAFAMIEBWHLIRPTERJWOOVNPXZPQWZBNNOGNDFYWMRDGADHIRZZEKRJQQHTRKFTXIMFFPMQIXTRIGAHKMTECPQKHRSHGYVTVXTLAVVKIRBDCHLCVAISUCSPWGSUMDNNBHSRLJSEYVCLYGBWZJPHRFHRQHWSRAWSOWVRQCVXDQBWXXWAKMKNZYPZGTSBFLVWTKZWKEVXEGMAPUYTFKEGJBGEMLQBMGXYOIHUBFGWZIXBMTCJVLGHTXJCLBECCKSSDRPMFBDUNAXYRFDJFYJREDXENULXXPBOMAZUIYXLXRJJCQOGWKKSJLAMJFEGGVKFSUTLJRZURGMOSOFZPNDNCIJCSLMPUCFOULKCHTPKCMYMFMDWURWVEJCYNVUXCFFHBJANMUCODOLPMPCCSLZTSJHZMGVYAVBFVMHVGEWICRQQNCYXXOKPVTHJOIRHZHCGPHEHQISIZBHZYNEGJMBTSZRDPDZQUHJIFNGLUMVYAMFKPVZAQAEDHDVYCHZPPQBVFLDLQKXQVSSSDAFZAFQEEBMLYCGCKNFFYIRMAJHTKGMQKLQBIRGXOJIBULRHLRTYKPVWXBLVOGNHEWRBXXGBJBYYJNSNRQDOZBJWFMVNFDPHGCIHRQVRHWRDFPGCGOKZVVSKTVSYIPLRMKURQYXKERZRDFHLGJDYIPJEYKSOSALVMEPJOBYJYWLKSCJZTZINIPTPSAKQQILKLWTVLFQCCMHWRLYBTAKBFEWYLRUVEFPSANQIJCGIIOQZHFCGXSQGHLWQCRLXHQLBEYBHGIZQJHFGAFFRVPKZZILOLEYMSQDLKQSRVXMFFBFYAKXFZNDSNCHFVMIHFDHJGGVMDTBAJAKKXSSRXECAMBVSQUIFATDIYTUIUHFUUJLOOXMTAEQITXLWCCAZQCIWSHRAEEWZJSSRWCAVLBBKHWUEIDCLWFXNQWPLGITAZAWUHNENNIQXHQPEMPHMRZDEUPBBUGUYWCYFAKELLASSTZEJTXHEHCJXRZTCSAUWABTIIUYVKTQUTSVKQLAFROAUFBAOPYDWEDJQTBJAOIIDMTFXLEWWAKVCFATRHDZKAKOTKBDNAHKODMMEGFJQRXSOXHDKADTFNEXWVBJZYBBTIGHAREPJPWNVJPWEUHCFQISZRVQXFSEUGETRIGWHJEEUDRZOPDOITFSCBZJWPMSPYJEHMLMGZDNPILPGKEEZZJKCUWMKAMENYZQPUEBUFBKCRIUNLVTBHXIHCGCGFDCGVIFFBZVTPLHJQGYITOIPVHXZGCOYGZOTVIGLZYFUUCBDGYLBKFKZVQKPDNESSLLMHVLRMNSYQVAZVKRGXXSKJFEPWKRIRVJZMIBDRHKJKOKIGOBQOLQIYEWJIKHQXUBSWGEEXPJWXNNDHJUMDJWCJPFGRMJSGIMKBLQGVIDUDHULCHPAQNXXBXWJJYDTLHPOCCLOATFCZDFYPYVHDTEMYOJEBKGYBNMIBFINNOOANPVFBJKWWSGCSEFVTRYKMTKXUCJYEKBJZLFPOINWTNIFCTDULQCJXBQBUZIHZZJXIZOMQNIEEXYZUIRUZANRHLNPKHLXDAWOLYRSVFJDDTZYDCXEZLWPCNPIOTPAXETRSNMDZOEFPGZSEIGIVYHCNZIOCCMGYWDQZUUPJPMEVLODSIKVXZMLDVWJDVCPLJTEKMLQKADDWWEMVTFTNQIKAVXXRXIVUHKABAVNINOIXCCAMOSKVEUYKMSSGFVDNWDUAEYPXBGKZFYWDTLDOQLEMBXCQLCCSOCABOEWZJLCROBKIIHAIPLAXINWSVXRCDKUWFAJFOWNWSLINEDRSNUXEKMQIULWRAOLAMWRNFKXDSABCSJIPAZHFBQPVTNPLJAOJLWKAUJYXHQQQJYUYMWRBMHQKPQPXSQQLWEPJAXMZSLRIOXFPAKCYLSZRMZHKKQOGDJURXPCPRRCXKTDJTGYPKVBYEUZSYTUDTGEWVCZBBJJLXYXMTIDHAWQWXCXPBBYGGIFIVVEGYDLLGFBNZKVTJJJMJNPWVDPMKZWVWHILEBHNZTTAWLXBMUMHOCSXPWINCETYQCUUQETXJSUXOFKYJVTYDJHVFBXBCWNBRUJFCEZMFKIPQBMTDHFTKBPOJBBVIHHYMUOTLUBYYWUFRYDQSDZVTIFLSARNNULURHDVUWVETRRXJZXPCOKFEKJBBFHAELNSSEJOYFYAQNZQDGLUVCFEEMHJYNNCTRDHVFPXLXNMDDCEXLBCIMNBWZWMRGXMFHGMBFUVSYFKBPMKDFEZRBHHHRXVJRTTFERXZMKNTXGEZWQTNQFCMXEOPJBSGFETMTOUERDOMHYIWKWPUDJPYYUVXFNPTELOOPELXMQNYSNBFAPPIHFERPRWIHPIBAAWNSHKKOCPHWSJSNUNKDVKPLKDSEQCQJAOWNRICYEZKEZTMTYPKEWEBSVSMVJUFIETSNGCUCWVGMFFUDECBIAMTTLHTKYISQCOANFHYZBCMCRLCXFJYIPUJZAVDWODEPDAHZSFBCLUKPGPRSKTZMYLZWKGAYWSMNFYXZHDDVKNTHNDTIZYQIWMYBBKYOSZDWAEDBTKFEYOFMYUKIAMMBYJNVPZKIFFTYNCHDTIDQNBVJMCBAAXKXPODNVURHOHGLOXBFIUHDSTNVWMFPMCWYGDKSRUDAPQUYVXNQIAQVOAVUGNXDZEMPXJFAXZQWCRKMPDOHZZWRCUEGTLLZBLVXZCINLISIOPTBTZMCHFAOPVJZQEHYIEMAPVYJLVWVJNKDODBGGNZSTWFRTFJPDOFUTQSCGUMFCIJDPHQUCCQVCVNMTAOBYAPITZXISWNLJQHQALEHZXCHPWKLFWUPPJZFJXNSSUTDRVQPFNCUPGUQZPCKDMGJWRJHATQWUOEGUIWPBEWROKPGSBGHETYWHDRJFAYOVDYUYIRNWBXPAMIPXFQEGTXSQZDDMCSQVXURTVZJYCDTDQKXIOBAIBOPAZAQTFZWOQBNJAFNHMXSBIVIPSFHIQIKIWFCZJRCIUCYPLCOTSOGOJWUBRJCZINOPODVVNNWDKCBCMEFRHUFFGOVCNKLUQGJVKZZNRZLRGDQXWFSSGXSUYFTBGUCJDOHTTRVISYLVHZDJUWVRFKINBXUKGLQTTKHKYVUAFPMQSAYKMSFQYVETMBNLIQRUZXOBSMHBZJGBCQHDOCLJBHTVTYCMOEVBEUPWPOOEWAHRUOHSVCWLTRSJDAYKYOIUIOGZAGCDZNTOOWRCIRBNCRMWOWIRNBYWKZRDLHGQEQCWCBFPIRDWTSHVVAAXIVHWHLZHNGPHYUDUJJQWYIIACRBCGZYEONCWSAIMVVSNIRMXFKGLYKVUEGKJERMSGFDVZZTPQCIQSNSSHYOLLDCGAFJJWDZETMPUVEBYQUHTNPEKJEBDXSYQEBXBYSBIWXDDXQBUXFWVAEKADWUQNCPNWIWAZPHFVEQXNVZUYPLCTKNRTTHWSMGFZIYNKHGCHTKWNUVGZYRPBFWBEVPAHUOEEVNTAWENXQYJRJSHRETEZYPHIEEOTUMECTESMABXPAYKPGUWXHTQDZVGSTKPRVTDTTKLEPPWCHSYDOYCHQSMZRTQZRECBNNHPQETYVYLKJTNHMWNWMTQYKBMOGNYCWXJGOVFAQOWIBERSOFJIFNFBGJLCZSNLDDHUOXOEQCOCGIKYMMTTZHDJZMAVIQIWHUVCPPJEQLGYLUIYYPHJVSRFLRGWULNGJNRYGTTWVDWSEXRTWFNIKDCTMKFENOZBLHPXTIMFSXUJYAUFIHFVHHWCKWAHPFHDQKLQWNXXXYKXAMUDJZNOMJOVNSUEGNTSQNTLKVWBOBJRBJUQAPVWZDDQNERUVCYVIEMIQMJGGPXVNZQYFFEHWJLUORVXVODBNGDXIXNTFCKFWYMGWCGOIZTTXQVYUSUPBCSLVSZYLYFEZMLKXLNVIJKWCKYTXBHUMLYPTGWVRHQOAXNVXMIOLAILZNWDKFRWWOVKKQYNUXPMVXTTUMKNQTNZEEIPMHRGYGIVZDKLFLUKJOVPBDLOHSLUOKOMLAKFVQBKNBSWBLOQUJICFMKDBWZIQFLWWJRLFTTEULAUQRKEHKTJNFSSXBVOVUEXEVRFIHAMDXXSGXLHPENTNRQUDGWBIFEGJOLPLXQCUXICQOOKZAALTTCSQSCLCHAUOOGJZQSYUTRSCJJSAQNJEJXOJYVUCRRLBUXZSYSXXHMSUWYEJLUBNMSGDNOCUMEPVUERJMMYIAHXFJNKPJCGTVQDFROXUYSBZXTCISIEKDBINLNPELULUUCJTQLVLINPXWHUMATTNYBRHNVONLJSZZAEXFKBJHCBGUPVRWEEINAOKYSPVWFPCYULYBNHKPMFZPBBWWTKREBVPIDCYDHMBYVJIFVWFRUBSWOHEOQNRMNSMJLETKWDXZRJDUFXSUGKCPOLCBBOUXEPYZPEDRPVPHPZGKEUHAORQLJKERBRSOMUYCNFZZAXJYSIPNCUAPJLMCXZYCGUTARCSGUWGWOEDNTVNZHBAAVIFOIQUTWUUUWUHGOMZSZUIPWULQVWDDBWCERKEWCEPUTEESJBKGBCAUJMTGZDDVNTROOMOSOVOJHBFGEBHUFTBDYCEBJTXWUBHWSWKGMBSLCTOYGUZIBQFDQXPQSKUJVJRWNSMMPXTAZQYWTNYKBSJFMONYURXMLHSRZMPEZVWYKGMMPAWPKHNTCUGDYKQZDLMYOWNKZIXOXRTYCWNDKSUXIQLTJLHHRDFTLIUCSVHSJTEYOMOKRHGQXUEBZSCZBVZFBJBJFABDQVXDIMRSWAUHKOILQKPQUUAGTSDUWPFUKJMWNSLXZBLEVMFQFMHUBRBZASOPCEVXFSZDOGWMDEMUWYPADWSLQEBAFIWSPXEOQEXOIJZEDUGXXNXLGAJYLNWHOQCVBFFPOMMVRJLDLLZWYYZBRVKPWUROLKTBEGBVLOJYOCSSFUXPBZFUBYUSJQSTPQWUUUTZTEYXKWGKQREWSKLBQZHPMEAYVPSWBBDDVMLAAXIDGRJZGXJTIKOSXIIYUWPFSUSDMJZGQGKAEMNBCOBVDCGWXOODCIFLTYNWFIUHXFJGVZERQHTYVXWXZXYZNERTXOWJQSQBYAEGUHTCAWHMODVFPRTZWXZBNFYGBMIACXJWKCOXOVJTCNMIULILXSCTIKAVPKCOWRVYBUHQHOIIQHVFIIWCZZLCRAGGKRMRBVMNUXDTKZLUKONNCOCFKBOAGWVNTOZZZBVOHCSJGTNCWCKUQVXQEJDFDWPDPPYJOFNDVPRZYQLAGQPMLNAXDFGFCVAIJXVTPSYIKXEZAJTLHAIQTEVJWFQDDUKMWSOETSGFKLVWULTLIJICEQWXIYQHBSIEMYQBXDTXUVXZMZUCBTDYZZGGUWUSFDWIVZQZTBVMOWGGGLINECPJPNQSRMGJAIZWPHPDRHDKBNXUIEPAEODUGKEQAVFJHJHGJZUHBIFIGJAFOFKEXDAPTSXNERSGOKMFEEUVTLOYOOXCYPVGYXTBUKFUKKZYOZBKATYHFVZFADRNJLAWOZTLIUDJHKLVCECTNRERVKSZZFMMFYMCMZGLXKTTPRLEJXQASZYRJBNEJEVEMRAPGEQVWHJJVOCVFUMQYOMHZJIHOKJTRPGGXNEYQYQCKFHPLZITORQLACSAWVFOHMNMIGJOMKTFTHOMJRJMXLLDRNROEQBUPIUCZGZYZZASKQKEYVHNMZZRCJCADQIVKEYAIIUNHEEFHXZHYECCLMTXFBDOFBVACUWPNWIUSJQFSKFPUQWFEMTSJMFOBUWGRHJFEPPYBTUXDIEDQBKULVGHKDSVZHIMLJPKRXLZPDXRYIVQRKEHPZIWWSFKLJMOOMPBGKUUZBJIRDTJABJPXRGVQROLCRWWOTUBLIGBFTOWPUQXGLOECZIGGFTCVCLOJSFYQHJWZULDRUGZHEXPIWREHUEGVDCZRFFSTKNOVTQGZPUAILHDVVWZDFTOHKNMNBSUBNEVFGXGLWQSWAWRJYJLRYGSQGBMAKJMJVZJBINZZXYCRNQBFYFBYUFDBJSGZVUAEPADSXQYHYJFLRBTFRFFNSUULFTCRMMQFGKNWKNCLNFTJJCRCKLLEZYBFGZWRWQMUKXFZGQXHDCLQMYQGRAXENXWLMVBZJYRXYFCZDSPHVZQBBTIEBQPBROOVRWJMEAJDRJMLRREOIENSLOKLQGRBIKDAJPGBYVUETUVECIUINRRCMIJZYFHQDIOODREUINYDTMICHKJHVBJCNAPYNARJQEVDDILHXAWTAXSXHNDPYJZCGPXYYJNXJIZYWMLAXSPLTERGVXITGSLCVOAMOPUXSRLECOEWUUQZZFLHTAUICPRMQKBBZCHMJOJFYYTGPCQIAGXDDKPFXREMTBPTVHUCYMMZRDWINJFYYIIDEEYUUQRVCFADFMYYYHGQKKBCILGXAFMELWYXRAPLNDYRZINYXALWNJQHUQQUPTWCWJTZSMSCYMNMMZCQSLFMHZAZJHRXQAMEOJBQJEJCSAXVUPOCDKFTRMYUXJBDNFDPSRAUYPENUEIFOCSHZCIFSIACWUJEYXHERKLALDIOKKNIQQYLEQECASLZNYRCDENTGMNKAAXJBMXMPLUVTBRNHBVDMQKPXDSDMUIBPNIXSVBOOTSZLATXXEJSTRUKDQXHTVEHKWSXTPTTBBSHJHSCQNREKRITPAPBKYBAIJOGDQAOYBOHEBUNHRCLEJTTLOMZFDZDUQACXJSLJQFGNKUROMDFSNTFXOBXQAKTYQPJYNJQYRRYNOKMLTKOEGNTEKZHSPZCZIQQMKPCNMDJMDDQUHQSFWOJBTLHCOEKYESJTPZWLTUGBJRFKCMVTQJBDZSPEAPBOCWLBMOPAXPVYCRJEHCXCYYTUINPTUANOUGSTWFFYBXMXGGYSZXOQACLNOUFRBIWLDEKCRHGEVXZCTIKIYBJTPYPHHKIIMUMDAKOXMEOGVMKVTHCYABGPHPXZULSKMXISDETVBQKAMOVFYUZYUTDWIBCPGAAZHLDWBEKXYYYHFRSFOJWWNBLOAFMNIGXIPKZVGSLNZZQLVJKQHEHWVCHRLMCAIRXTPAZMSQZQXFOJIMKLCOZPKFQYBHKUQZEIXMKHJVDLZICLQQMAZWGVFOOXDQJBWVZODWRYHRXALSXYPMGHVDREMNJTFASUPAQDKOIGYUXPYFWWBQBBYEFPEQHILALUFSKQDIOPVXJTCZEQMKKHCBERWILQWFMGDDDLBBNNDNPIQFPSDYFOXFCNAJJKPVJQATCKHILMUAFKABCJTCGWRBAPAILPQBQMHVSYUGGRUASTALWZXGTESRRSRLWNWBAXDTYEGSGPNSLWKYMOMECDZKNZDBLRFTVWRRSDGJTCISYNHJTFDNJMVCNCUYOYOXIBTMUDPUZLLEJNMWJBJZLRIUFZYYDNJHIUUGAYXOESJVAHVIELEYUJHBEFAVRGAOSIIGULINXEIQBIWTPHAZZOLINBFUTGNGOVYWMKEWPBIPATLQOUVJFQRNLAZUIKEVGMQSKTZVBYHNVVPRCQGGZKLKULBRMGAFUBBWMRGQZPRYYZSHRQPFGXBYSBTZXBUPQQFMAQMKMSNQWGOVXYBKDJEJUQGBBYYAFEHWYJEEMIDCNVKAZPKWVWQVMXNMIPYAGTYGUBRKQDYJOAWWJLQCISZTQMVVLKOJTZHWDNQKIRFMOXDUFULLQHQFEKXSRZVNTORJKUCCGSNYVLIPOBJRMQQLOPNFHGXRYCVUYCKKMUMHGSNRNVOFFPKCCHXTDTWBXDXQUEIUOKEZFTNXSFCQISSTBPDUMVWTSPKBVMIGWGWUURRHCCCHBOOEHOVBYYFKVPGBXGMODYFQWLTTCECPEUAZIPXRDAMDESUGBGYAUMGWWRCRINUYTHIXPRHMTWSVNDTCZDMAGHIEAZPVZGOEHVSGSCCWVKXTYVZRTZAPJDJNXNKEZMSEBQNVHPTWTWSPKNUFNXTKRVZCOBCNPXAHBAWWDLKAWWLOBYTWDIBXEAZHTBXVIBCVIWATCRJXUDIAKBCDYINIPRZDHDLOEGAAHUNNVXIIMUGTWTQPPIPCGYTGCDEEQUTWMXFUCRQMBJYHUKCGFZGJCALVQNMIBMKSOFCNDHBKMKALZPCXJYSZKEFNFUHSKVGIDWHUJQHXMIEFVHGFCOSDIFRMKCYZSGCEBXBOHXFDQGRHVIJCTEXNJQVJXZRFCSGUUATXRPUOOGSTSIACCISUQQFKUZPLXWNBFSXZRFLSERATPAZHEPOVXZAOAVAPHQBDJRLLXINDQOUOXQTZWJATIKIMXIGQDXMHHWDCQRVTVHATPMIJYAEDRQEVAIINHRDLSNJPJPMTOUOSJUTIHGUQAWJGRWSTVXFKZRLGGUGGALHTVIRHEYOXLZKXKWDKJVQILEAFMAWURKFFKONCAGUHJXOQSIMQCFFYATBLFZHNAOEEKOUHEUMOJXIKDTJPDFGVHMJJHCJEGADHEOFJBGXSCUJJLARUQJWCJYJRUZKJHPWPTDVKSZKJNJFBJKWQHJRMOLAIAYCCWLDCOEAMKPQBLPNYCPUVWXHHBWFUZKCGFAUHJANVIBLVAJGGGVXKSAHGMVXHUKEULKLWCSAQXJBMDYJTMQKXKFUGOEFLPRKQWKGLCASEAYPXNSBTHDPGLGSMTQGXRWJESWZNBEVPSKWFZCZYDJAGKUSMNAPSLBJUDBQSXVOQOKBZMAKEYMQNXXRFVWIPBLNPQQVKDQXXQIOIOJDDPDTFSNQVOGPASPAPBDKPECEUQHGSHFRFTHEAYWBYJQZLTZFNZKXOFLUPVUFRPUJTFRGRZOHGILSQONHFERVREACEAJYJGGUSWXZTUBDCMCKFMATXFCHDYXXDKUPROWBYDPJBXXVVMXWOHGTICBFGMPHFOUVYDBIXKXDJTESDVFLVGHAKLZENIUAOSEEVHHVFVBXXOFBQRXQSGFYDGQGFMONUEGUYTDHAZNODXCCUGPXCEVRIWRCJYFYGLIBVNEQXAWWXEDJWUAIXZPELSTJFAGJIVIEVZMOGRIWEIKCILJKURHHUWSYIDTHYUADFEFJBEPUXCWWWKSCGUCYXVUVAZXBZVYHHNONSOCZLIPRTCHGHURXBGQOSWXGILEWMUPQFVMUFDZFJSVUQMYLDCZRGACSKDTNLSBOMWAEVHMQEXBRELQGIKPEHJSVJHWUBLBUUEYTGDXQKBKMCHISOUPVUVYNVVCIXRLITZCMVADQWBGNWQYHMYFFSXBIQNERBHNMRGTDNERJXUIZIPZFRLLZDUHEIQVHOMWEPIAVVWEJNLTGEZGDTYDTMZACIABVRQCWKSMYDLZBOQLULERZMUWNHKZSETXRDDLXTLKMKOIBDZLDLPMHGYJUSJBDUEHFGOGDHTCRFRYQCGYQVBHZEWZLCAXRFRBWSQKMODUFZPJQSQAINZIJEGGOMPOUYFTTSJGAAQLNVBBRSEDCHIOUOITLIVQRXUKOWBXVWQYYRVPWMEHRSZNZKSLFCDFSPWECQKETDGBOIEAYCEASTUYHIXQHEYCBAMQQMVBABQVXUTVWQPRKKYQZXLOGGFQFAIHWJHTBXKWIMIWZFCOTZMPWJRUQJUIIIYTBGCZWNRLNAHLLSJNHXZCNJJIWSEMBEIIUDUMGVJTYKFGRYRZSYWVGJSMBQSWTQXAFURQSIUEHGOXXUECXKKCFXMSXYPYKDVTTTVXEIPGTMPBOQVTIUIMDYWWFLXCKQPPBFHEHVJXIHBPBJGVODCFRLZRVKREMIWHOADHVESILCEJJFIQRMYMFPUMNZKXCSFKBIDNBINRAXRJWVCNIOBCFSNORYZPPDNHLLLZMVZYTAVFRFANPWVIADRVKQTDFTXZBRZLTVOVLAKJJDAPJWDNSPSFMSDBDLVKVHFWWSNYEIRIPCNZIKPBZNCJTLVNQWDYGJPOFHUKJXUDQMYOZGZBBPJBSTTGHEMCNWYEKNGNOIIKRNXLAPELEPSOCCJVCNIFZIIGCCZRPXINGJQWJMRTOHQPONVPNKEOHPNROKEGEMCXPIHROFSVDCMZRDSLICFUGJILZGTAXCEPEWGTJVEPNHVLJATFEMELYWJQIONSLFYCCWDFFTLPGOWRQTDUUTGLZHADFTSOHIGHVZALYAVTACERGHUZTVNOVTSYYYKJWQRDEELHUCZXUMHDSWZVMQUNWNIYCYYLPCPULNYYDUPADDAEABNPAPKSRZSOUIJWKKFHNEWOLMMVSVMUMAQBHPFDYVIJEIDRGIUYGCPEYSLUCRTKKWEUUPNHTLBPFTNYIXMFZXSQXSGJVYTLDSKJAOVMTYSRMDQLKKVHJNOZZUFMBFDRYETOXWUKYSHIDVASZOPVAVTGZZUOEVFFTALQQHWAHFLMAHUKUYJVKUZRAORCRSMNLWIEDUXIWSMNNOZUGYSOJAPCDLBMYOZMCYTEKMHSYGSYIZGQILJNAXQGIVBJTULZODMEIZQWRKJYBFMGMHSURTTCZXFSUBZMQNAOGVGJNFWYADGTSQQFCNWQQWMJTARZHCUBYKBSHADQIEEJCXZQQQCDUSIHDIMUVLUKSWEJIFHBRUOMPXFKQYDHFIFQLXMGCWEZPCPZHEAESBSLUVHAEPWQYHRDSFMVNZFXUSMKMSSSCBUVRORBPKVEZJLGLRUOKEWUAIHAACTPXAXZBKXIDVLVQBKXZROJTCVTKDKRTUMFNUILVHNTULJVVQIBAYLETZADFZWPKKEBURXVUXAIFHZTMVIIOIUVMDKHMACYCERZYHMQSXQVEDAKOGMBLJGPUHRLHJSEXEYCBSIDBYVOJWJUDPOUFOVCGQTGXHXBKCVWLUDNTGSMFIORBLNQSWCUOLSZNBHQPEZXNVYPETEKANBOIYPNAIPIAETNPAQZBFXQVIJAQOQYQQMDKBCQDEGSKUDCCSFAIVNLDMTCWHOOUNOXBDRBCWPBTMPODIVOOHBPMYCJKDWGCDNWVJYWVJWZEAMHVBJMUCOYFDCTQWYEROPHGMVXWQNUOXDTLVKWMBEVLXAVTYBNAXAQEGKPQMISQPIWWEVHXWBBRVPSIVNCNWKDQJTKYWYZHALPOBXRECNABJWTNQCJTWOVPOFJUZQKPLWLQUXVMOTLLLEPZKNQCNYSLHPXTELDNRYOBOGFDDYMFUUMPNSOXZMCEEYCPYHMVNHOYCULONSOVWRCYQBHHCOHNUDBONZNTXUQPCCKOIMQVWTXGHPYOJZMZLQPXZPTPQQGLVTIVUVZWZLKMBXRGQJQTQKDBVBFIKKJVYRQKBDPPIHNPIHMZZCPXDQRUDIEWENFYRGJXZZUDFPOEQVTLLAFUJDCXCLVAGMUCKSOUDBNCDMYYFRGSRBEKSAJUNJGZDGPQDLTXAKCJIDPMOGHUTCRGMLNZKFJFPCDXVQRIIDJZUKBVCLZQEXRUAQRUPKYJLADYLSMVCDVKBOOYOMCGETKIKHYJZZFFUHQQOGEDVMEYMNBHHHIIZFBMGCDQXOBQZJIRRVPAHFPFSWOYPKCBROCHSJNAGKUEOXUCWHXJGJHUEXKSWHBFTLIJRGBTEHXTHENTQLMUZLKFFHHBMJVYIWAJVFFZOWPUJIYQJIKFTCAOKIXLSBNFKBLSWVZFAJDSOMKSIIJSUWLHDHFLXJQHOOIAQCXLRFIAKWUDZZKQNWYWETVRZKXSVIREPTAGCEGTBZDFINFQZWQFNQXZVAROEROIDKQGZSFPVBLNGNYGKMJKHGMMTINJETHFWRGBRGACFMPVGFBACGSHWOSPCYYPEVXPAWFSEQVEDFELXJRPQWQOYLXDRCVCJQYLOJWXDNUSBRHMILJUPVAMRSVHWBPYERIEBODVTLAJEWPNKZHAIWMOZCITWNLNQCRXAIWMTEGKJUNXWBRLJTFVTLWLGYQKEDPADXTQLHCODDTAUMKCTDZGGIZIKXUVQQMLPXJVBUJDXONXBUCBIXJIFXZUXZWITHBYFGCDSAFFPRMZRPHZGGDRHUYIUHHOGVBEIBFPFNKKDLNDAIZNHQCVLTOUBQMPSDSMKADMHGAWMDECZMZTZKRWJHKELUKOKVENTKTNUYEAPWCNMIBSNNYGSRYBZGKCRSTZIIBLNFYQNGUIWFGCBQWYFQGOGWNEUQMLJBVZRIXZYZCMPIWRDCEJIZUZOUDKNHHTCATTSERYYZVYXSSUXMGBSDTLBAUHRAKKZDMPVDZPMJVJSMTNYNPBXQHYWYVNQMNQUVPIHDOJSNPFFJGBAYQTDBLKLPRXDXOQGDTHDNBEMDMTRTOONGMPMWSZPSJPRNUDCRTYPXUZXEUCLGRFKBGYIUGPSOZURKFNBFBRJZVZCWIRCVBZJEZVQUJXCYVTGBBQCGPVCTVELPBMYXHJACTXSVZTEODEXZZVEBQKFSFKPJIBMZEWRKAUABUFUFFBOQEMKXENHZHHMSIQHLEEAAFGEMAOHJTSZUIKTNPOMMOPTFAHKPAWQFKABDVUJVZQYGRMLIFKFEEDQMRTFYKEKRKMTRXZLTAHDFNVYGESQAYKODJGXIAPLLHMTKNTLDOGVHAWJFESJOTKDDBENQAUXEPUBZARZQTUXKKOJIXDMGHWYGUKRDILCJTBEWEJIWPQQQOLPFFEQRPMDUZMMCHLDDHAJUKXJKPISIXKKBTKHSNBGERXQWRFRIOAJJTONDEXHRIGNASBFQAFHXHRCLXOAPDXOGSVHFTGAQLFXZSUJFQWAKBSKKXAYJEDLSQSEHSKNHBZTRLSQZXLPQUWSWYSSCCKPCQRHPHPXFMLXVITKZAHDZIBUSOECXFUIHWHDXFEOYSHHLXCNHCVYVPEDKBHNVOCSCMIPSTLVCEQXPIOFRFHKBFDAWSMETDWJPJWLIFZJLZUYOBKRGVXTJNEGHVLFBDUOQOXJZMMPUVNVMOULOENIOGUHUPFHWCBYEXFFNHQHWSVDJLZTWXXNUMOATQMOYTFMXXTHXNVVSCMVWDMWQRCSNZAOHAEJVBWZXCGBBTVFTDKECSFJZUBSAVQBDGIXJUYNRGUEVLODJWRYDBMWTPEUUAWOEFQSIGZLLMQFCITGRYHSKMDTAPQDUPMYUGYGSUGUDCMPPROTQCUIULAAHYTSYIDSYQPDBFLHJTPIPRNXHDQSEOCBXJZNHPCFUUXBHVLZXSZXSXLEGPWIJWPDMYNNIQLBCWEZGRMDEWWSCBWQSNGYPYVQQNKYFSBNMLFSUUSGVTCTCNMURRGQPARMLTDABNSHNURTDSWNGFIOECULRNZIIEHEIVJDIBLCTAANFTECYGVLZVXFVUYPZQFQFTVFAPTJENCUTQSXLVTLFOQPMRDVEZPIRLFPIBCGPZRKJXIOMHGIQIROICKPJYJEQWLDZRCRECMICFMUFKJQEFHLNXUGRSGWXCHSCCDAEVBMKNKVRVQELXVHGDPYJBSLDALFHVPLSBMONRDEZYGEOQZCMRRWQJGOVJGDAJFHKPBRPCRNYQAONOTVIDPBRUPMYDJSWMCIRGCKTMPCYKMNGNQACJRGLXUMBCQQEJYPWERGPRATYBXNZPQCDJPBEYOZVBMSIIJJAWCVZZVNYVOYKUTHDMEFBYTHCTYADDTHESGRNKSSCQACCLDFFGRTSEYEXOEDDYZHKXIEUAIYBTCISSQICHQLRJHPNQOPJPKURTHSKBBUTCLDCUFGFEUSRDMUEXOOQRIZFGBUYGMBBUCBOMLSSMFSGMPPZADWKSLQTPCCDQOEQDZIVRMBLFYDDZHNQGCPFBCQFVVTNSIFUOTQWFFYSFDHKQPOFXCVAPWISYYCMRGFKBCAWGROWVGDOQJKXHLAZOEVCIXKROLMWPTGMCIFNPYHSGQFALYNOOUCSQIAIBWREDMAEVBENAVJUJYFYWIIRACQMRRJHCLQWHEZWTMVLPFYSRPVNGUSTKFJJWPCNLJXFPAIWFETLHNUYKFVODJDMAOSVLDBDEFCTTYETKDBBTOWYKPBDQDTVTRTAQLNUURLTGVSHAARGXVLEMHHJZBVNZIVAESHYMALUYWXEDAPICMIJAQZLUIGZCEPCXIFGYVCPWGZQUPVOZFYNVQRCWRTAKNFSJAEVVAESPPJOZTXVPZZQFTUNVEEELESMRMNNJMKJSFICZJAQGDEALIYQFKARFBXEDIKINEFTVIHCVTCSDJMECSOIAPUPPJWTJYIDUMXIIUWJGKKDGUTKGMPIGVGUATBODIHDZBIGHNDDAWAOUZRIWCCMYCTSTJEDFBNLCFRYMHKWUZJUOGSBEQABAFESEOBHHIQOXNMOTSWTGVSRDEAODLQVLEALRVWBSDEPJJAHCKKOYVYMPQCIQADSAXBQQHMBKGDWABJBZMSDWELLXXULLOYXQHLOSSTOWXLRLGLECNOGGBUOORBVBZBKRBASAWUTAIJYIDRQTJPUPWRKCTZQNOYHTVQTTVHYUQAXHVQTIESKSHDFTHABRRKSBLOYNIFRLPUXWURMYHZTQIIBWVKDBIXAJXIZSDDXQINASYSAVFEONZWJPTFEFSWDJITGPPLCFUIFJSENBMOVQMVCQNHPPDSKOFGPPOCUSTYMJMULFARHBBVQSFLBMZXQQPUDSWGXKTPCOYGLQMEWXVPRICLXRYMOXKMZCUVFTYZXOZRMGHFLUQNVJGNTCQBSIUBAXWOTIGWIWXLKXTHSFHDCMNIUKJJAQPJFLZMIBGLGRFRVZSMIBPKGQPEODCTDIKJAXECTXZXFLHMQQQOBPRMADPECJFVNNENMRKXVTTENNJSHEDCXDNUWJZFGWFMWWHVIMKJGUHFKQXDXNLVQUHXARFURVCUBKQHQKIVILCMZSFCXPMTSYJLNPBZONQUXHZRTHOMWBNCPDIOUNZMFHQGEXJERTNXIXQJPKZABPOSYIGARREVAXYEOAAMPZNNRNYOUVMMFUIJOBONOHVBLHIZJVSRTYXBLAWIXPQEIGWKLNGHZDKHQAJXZXZTXHHPOJYDVYKVYJSQAPZKFLNJMIUHLYPXAVTYLTDOVZWKJJBYIQBAPLMGRPMTJXHGTTOWLECDBCSQJONQACDIMSRHVMNSHPWBWYTWDGYGAOQQYJERLGYVYBTSHPFLDDPWOHQOXQPZOBZKVTDISUUBTHCEMMVGRVMQHNWVNRTEFOIJGLGKXFCYEJBFNKFUXBFVHGAHKLSPALSLOQSEIEGXFYGUIDHNARDAWHNRYXKACAQAQMPIVZYVQULTHGSWYYDTWZLZRKSPGRAXRPXMTWLWEEWVAZLUEVTFDPNOTKYQJZLXOLZPXWJOFQTEOFENQWAXSLDHQNZLMUMUNYUEQTLQKNZHDYGUMAEELCOQXTGHZUBVFSRFAAQXVQANBWOPHTCCDUZVDKBTARBPDSPEVWJEGAYIBWYHUJXZBSADHDEERKRPRMMUHCSUHHLAMDSFCNTAKJALLOMEWRAMYJVWBQBVMFLYNUSJFQXVEOIFTLKVLNOFDVNATWZEHLXAHOTDSWXSIXDGFIFVJSTFAESHSZGFLDATROISWCCILQDFJXPQJZPJBYQGFXAHYLTNKDYSSZZJSOVODUXZFSNSDUWWCPQTEEBFKGIGVFEXGEIOBEQYQFBXZWDCDVLTRTENEMPBQKWJOSQBFMCFLWUAOGCYZZSOSOLEZDXCCGDEVOZHNMNMUDPDORZDHUXEKGQUJZFIXIDDRIXMVQKMMGEYXMXDUICASEEHKILWUEWRXMRVHXFTQGZFTAGVKANJCOQTBXIJPCQEREYMDGMPIAAZYHPWWHBXABYCAHKEEYTZPQJKQJHIIYCHEMOICJGGQINNHRTHCNKSUGTEMCRFHJPETFTMXQUPVIPTNIVPBKAUTZCBUAYIMQACWMJXKLDBKRXWHSXHUEQORBEXCGMWNRODVFNAGJNRSAFHZYLTZKDIDWNSETCKDTIBJFUCTWHIDKQVMODQAHZAVHSRVJJETRDQCCJGVLLHJPABJFWOVKPUWSGKPQJHJXEYRLEGKKCAVXSNGJHFFEDGHCVHZGXASDEYVYZZACQGHTIIMYRSAAMYXHMZZZEQSTTLHLNPZLVYYCOEKEVYSCLBBKCHGVSBPHXLFAUDPTUXMQYBBPHIZNTGOFMVQETICJYQNBKBNCLAQDRKLTJCCWKUZMQTSGDXJRGXCFCKXJTEXZQUHNRNBKZFANSUUFETANEBMTTFFKVUAKASTFSLBDNJXVHEGPMZLJFHLUAMYWOXTPNMKWDAQODPOCCWZDFBBFGQKGLEXHYRYFEYJMGFEGJQLLAZIZVBRUFGHWQDRFHFISBUSYYITYOIKERBWEIEENHVNPWLMSHYUKRROYHHNCRTLBTMOHUPKCBKTLNAWYOWWSQIXHOVLANOUUWYGLFRSGXTCBRDAYLLGYYXDWRSDMGAAUXDITTVCRWDFNIUJQGEAWCCDYYVTUAFQDKWRXKWUBQMCFANBWYPOJZBWMXCDDHBNBZOZJPJVJHZFETDXBJRZQXZGNBMJKJBAPAAQCJOIDWDKEHUQWSPGXCCMHKWVIPYZIYXVZBBGFLVBCICLGIAAGUHNOYZFQRFDKDURWEZFCEPQHMIPWDZOGLEXUZJWSSVWUBFWIFWGILEDBNMNBMDGFSEBFDFLBNGDNXDUCHPTICFWWIGNXXWMUEEAMRMHREWHZPFKMWDNGQPXSNPIDJRTCODDPARBKNVPPVWBFASUXISVQSSBTWZJSJGRIBAWXNATIJENDGJVBMDIUFHTEVENUEOXNXJLIIXLVZMJBPLIZAULKEGOFBUNXYRIUZGCTICMHSQCFPMMMYFYXPGEQECSWXJBMFEWEFRREUYGEJFAXQNNZOOVUEQBCPCNELAFLUHZLYHPDWQLZUUATOBYUTGIZLVLCJAPBGNXMGBUOGAFVFKADVYUGSGXIBXRFUEOPCYEHHFWTDRVUWXVQDHEIISYGAQNTILOGXUSURVQXEMITDFWRZBLZHSGSNEAWYOGYZQOBGDLGCLJLMBCFDOOCEODNCCYHGMITXACWAREDUBEWUVLLOOIWKFHBJAXSSTQNBCTWSRTJJKCXCIJJTCVRASBWCPNADTFGHIDOCOWHBEYRINTSIBYHLHQAKEFUIITTRHIYDPIUMNRJXDVNBZRPFBBLFHVQSWINSEXGVTRIZKQLHKCPWDPSWGPSCPBZXAIRTXSOZOFYBLGXBXVNOLZQMLIXFTBZDLKUIOUJBTZBQPGBTQOTAGMIDDTHLWYDHGIGCFHUHQPEANPYBIZDHJHUZLEWJHVOBDPWFASOFEZPUGFJLZDBPSFLFQYKRNLISUTHRHASDMQTGEEEEOWOILMXHCFCDMFERZRITYZTTYBJWLUNGMJENOYYIAOVRLHGOTBXXMZQKPAKFCEMLLWWVKWNMWSCBAPFBKBRRGFYKLIFWJEJSAVURVEPFQQSNYRMIVOWULTFQMFWEDKDWSNZPRPNDBDIHPOAVKQLWVNOGFANCNCSYSLMXPULDWIKOUCLXTNMUDDSMGNDIESFDVUWOIOZYTAQVTEGWVKQZADCDOXIWSUAJPVRALJZVSXLPLKMUQXPDUICZQDXKSPPOZQQTNJPEFFXDNJZVMSDONZLXUUGMDQFLNELZECYDWAFSGJERNVFHQQRWNIXGWDHFZYMZINRWJWRHTKWFJBDDPQEHQGAMGKAGRLHPZPAVUGJEDPPGYMHALFDMPGCNCIDVJRCXPCCGJQHJZXVINVSFUCTGOUESOLIEQZOJSWBEOEAHURPAERMLAMTXGLEJLBTPBTTUVLLHZIXSKACUFVAAOXJVLDMPYYKNLFXUOJGWZEFCWOOLOAXOTXXDYNJCVXCATWZZVROXEKYACUHPOKPEVAWPYYBMNSADZMPEODENNKAOMOMSAPRQHPYXYBRXEDLNJNRYQYSPUZTGATNZZAMQBEVQTYMHVOKNSJQQCKBLBSACQLDBJKJNNRDRMRJPZPGRUCIKESLDAWDPPKIEWKFIOAMJCVUOEPZDVPHGJAEMSYLJWPJYEITHMRGJBVQBYXEAUVAJWQBRJSAMVCFIHEQVHBNZOPMEPRPGVSQJSAVRIXODKOMHRJNUCLVOFSSYGTCWJYKJVOZQUTGURCKNZRCTADJEZUTCFGJLRMRYCBNEAMRQCTNTHWXBRKZHCZMCKGGEGVUXMWOKBMUFYKSATKTGFHYSMEMXXNGMJRNTWTMYUZVOHIAANSXUQFMGNGDEQFTBBQXIDMOJCYOTUVMIAVRMASLAKOUVFMETJCKSHYABCPZDJJSNQUHITVBKQEDSVNYPFEKELKYXFDODRLETZWWCBUNCGSCYVUXCEPIUDRGYITWRINAVAISQKJRRUNVKHNRMAPADOTENJLGPAEGYSOVZCTIWVBEEYKAQFNLUKRQQBPDANCKBQTEFUOCDLPPWMCJEVCSXFQXGAGTCHYMUPJVZINBBFBZCKJEECLUFSYLDCBAAZUBUBQDRWHAANJQVHFRLUYXJXYDNLKZHOAGGMEYWRROUFURDIZNMFQPEXRLAUNDSFIRQONFNLNBIOINAQAXNRANRJGUPOXEVVVGQBPGFUOJUORFXFJJJVXJYIBKYXHOEAXQXHKOOIJJYZZCOOVSGNSLQXNXUCSETZZHIPQFUYBEWYZZHMRCKUNTZLNIPYGAVKCNSBDHDFRNSMTEBWZOFLYUJLZQBQXALLWEOPCNZLDXUZUGHDQMSZASUDBWJOORECJVTMZALDLXHFYRJDJQGEEWGYYBADNLOMFJZVCPYHLNARTNYODMQLXLGLUEGHULJSTQKNELKICXWVDHVHCBAQEVIFXAFVRCBHHMXERORDITINBEKQEKHGRJHZLEZMFWXPQGOTHLBBWOHLOCVRYJHEBQZRBYTZDXQBOBRBSVWXXJQIROPXELPIYVEMIQITSRQIHKNPQZZHSLUUWNDMPOMLFVDRRSUAXWHAECFMYRIEPWBZJPHCVHUBXLXTQFATCICYDCNASOMKZCHCUTUEVUNSRFCHDCXCYPTKEHOBPDWUFXFNTIDXQFJSJXDWDXHDZOQERTNSTUGXARRRTUDRKVMNGLHFECYQZAUKCDSMFWKABVXLAHUUKHBPFWKHZCWZJMEEMEJMWXEWNTOZZAEIRURHHXZMMJUBRHDMXMOGMOFBKWLBBWZIHUWCIXDKXGLMVQPLZTFSQSRVLRYOFJCVPWRGTRJJYLBZFUSNVRKARBMBIIURXTPNDFZRVFCFVLJUUHAGAPVPXBXXWSOODPADPDJIJMYFMYTKCSXEKQXLZZCFUIMBDABUGQRWJLRZXMUTAXMZHBCTBFUZJHLBHAYXNEEBFNDTJFRLQCENVVQQQUTYJKZFQPVYRNDAQLQNKPKHLIWZUWYKKULKDXYLZQJRVPEIKOHZGKTVMCQFJOXFXLQHMQODGSUDKCREXOMZYGEUWGWRTBSZHZDFYVVKVXSRUKFGDCIQWZGBLTBDWCTGMCHYWUUGAAWYLLTNBKKMBNLVPXKOAMMZWCVUKPWZRRTZENXOUDKMNCZPXCKHQJJFXQZDKCWRUCEFLSRBAUXKQBHLOMVFBVRJSAMNAEVVAZHRIWWAXRSZXQERQSHSNZXRKONQPETTZELWFJOKKMQSGEBQAEUHQTMGPGZYXAJPAOMICWSKQPHIIAULBFYWUGUXMLGUNUXLZSAQKAESWWCXGLUIZUSMHLFAYXZGXYNUPKDDFBWMAHTJBYBXYPAQDLLFDENQUZBGLWCVAVEDDDSKUPWGWWBERLCSUGVMSDUJUADIWKZWNFHIGVUOHYQVGKCKQGWSDSXJLHICHLQVISMIYRZPYTOZUNRIVHGVIUUSHJYUFYQBNISRVPIXZHMUZDQJSLQQTGMPNUIEXVUEEEWDTPCDJZHQJXLZSQVYTRSDTGIWJOLELLEBAZYSZAJILXGJDJECVZVLRAKLDYKSAMNNKGUYWPRLEOECIEJJHUDDNVVQENNJLDFKJQDZFZDVOMISEGFTNJYYENFSIXYKMMSRQORKDTKAEMZJSRPELBBRKSIDLFQGYQFICQOGJLDPQRAQPFEQIEHZTPLPJVXWTGWODAWTSWTJFRQXSNTVVFWOTJNWDRSWABYUALVZSHKJWVPKXSKAQAWTKFKODYFNVLEYCQPNXDEPNTDSGHPQMBDRTMBCKXEWNPLVVAZLJKLKUUKBLQWHNMQPWXHPBSOTEEFVJJDJTRZYXXCHIIYMWDVYTNQQGUYHQRPHUPYZRILZFRQKADHYVEZHSEGBWAKWSXEPHDAPHODKMWMZDFEUTJMQFBINLPOQGILRJVOYHVADUJKPWQDCZNMLKTQGEEFBJRMXVPDBMJYXWYJMZNMFWYXGSZANGLKNXWTOSUVLYUQVZEZIODBLHQMNVXQJAGBRQEEJDDFUBUZPTKEZYLMOTSEFZIAGLPPERXCMQALUOCGTFRVWLKEXQTTNIGOKXTNWMOJZDTAGBTETIZKAVXYYXCTNDDRMTQFPNCSBHLGXQCWKWCAVBGMQGQCGAJKUODQFVIZNBAFTHHCKUCGBDFKNFOFBROFZHBQQDEZCZEOZTJRLUUYGGRJAYRYUBMFZLLMXJUOCHRQFANYZXCQEAABMXMAMKCAPWFGVRDTBUAIZSPVZDCIKEJTGFHTFRIJQGQXRUQDJCACVLYDLCQKEDXLITBPVELEKTICYRZOEVPGFNVSKTBNKMARZFCEYVRUOMJFRLSCNUDEIFMOVZDFTODXASFCKSBCWSMLTZPEEHKRHJSARMGSKUEGHJJFPXZUICQGWAVVXHXTYUCNHLCMCQVAVZABPPHWGZHMJNMAVAKOBOLSDRSUQKZHZWOPYVCMNFIMNPFVBOJKGUGDWWLCBKFKLIWLNXMMWDVDPVMICVWMRLDKGNUZRHDOKJYWCANTGJVQXUOPXURVNLKIQIDCMXLGCNQKFZMEJUTVPQWPXOQKGJTLLTONGCHDTJHTAJSBWVIYEXHQUYWYFLNGNYCNFSFINZUBJFEVIHTSNFCOSMAFFFMXUGRBRTEUHELMTWIJEOESIUXSEFEHIPRMQIGXMMUGCDELERRHNVQZATXRXBLKPNFBRYGQNDHBWCBPKTNTQBVEEKBZRVEDGTVUEHZEVIVYMQMZEJEHIWIEMTIKBZIXULZLCHQKMJRSSNKLQFUUOTBKGPEBLWEXUVAGITDJZKXALNQKRXRKVWDXTVIBPQRCOPFXFFEHKWGLKWWFNTIHNFYJNRCKLKEJBBVSNJAWPZCFUQEXYKNNSNNALWCPXSOUQQIYOIUMZDWPDTWORLCVUGCEKGHIMIVBAGVNJAXKWFPFVPBJIFCLNGCTTWGOROHNHMHNPTAALNQWTQLKFAJGVKDNSUDJNKELWGVGYHKOYKILRHOGYYDRXDPXMVCRCYRKGZCEBTUZZMNKLWKPKCOTQSUOKFWPUONHOODYEJTNHEPHGFYIJKEEWMIZXURMATRIQKHTQDYIYUOMRDPJPAKMCHWRGMQYWEAKFRSLSXQRHGIQBRKNXLKNXIWHNOEORBKXSIJVAWEUEKFPCYFXUJWVFITYOSTFGAREJNASCAGDZWJZLCCDHUTFNBCMEVBDGAFHCCIBFFXODXBLAKGVQFJQPPYJCNJBNYCGVIMRZJRRFXIHPXTUXXKPRUYMVQTLIYDFDJPAXJSAHIWDXESXDZMXHTIRQDUSZZKZHOFBWZYNYMFQRQAMHKGOHSCBNAYEHJBEIZQAOSCDWIPPMVFHTDYXATDQDLUZZXLULPVOSRHKCLXDHGENFIYFOGPOGTJBGWMTFPSTTANHDUWPMVIZHFGTTDFXEQGHCJPMHKXUJLCJDYOTQDXLHEBPWGWUHHZNOFOLOGZBNETGYMUCAICEDFTEBNIJRGRBQVWOCGPMIDOHOKWREZOPJOWICZFQWKCETNKGCSGUKSUGRELAPOOARYTQKTZBYNFUPKPXDIOMRRXKBOVVWIDOPWHEZHJGUINNJOPZJWNTRKBAUPCDBLUHFTBBKTRRQSPVXJVOGAGLSZGBYMQAXXNMVNVKQQVDLNVNQOMCBXXGLXHSVACRFCLAGWQRNGSIWROUOOGGHQERERWVOMMAGDENHLOLVUBTHQGFVJABLRPEYJWATCMWHROUFSSXFVRLIOODLJVSGHBNHXYUCDDESWAZTTXNPLPGYJNTLCDHEADWSXGVBXXSHRYYXVWQVLHHQDFCLHOIXXQOACMVWQGHPYYPVCWZNDXDMDDAWXMLPUYMMMKXHKQNEFNICXOVNMSJMDKIKMPZFVQOAPKATJBKOCZKXETRFWFFXQLPNCHUPMXMECHKFKLEBDXQGECTOGOEZHLMAGAZSKUSUTJTZINIIVMBBGRNJJPHFIOHQCSSDOBOZGCIKZVDDICMQXQUDVVPWOZTJFULMYZAAZYQQVLTCJNEWXUWBGWTMLAKUSMLRLKHZHHTFBSWOEDWVVFBHFQWDRYBMKOSWWIQJHGHWRHRYHOBVFBALOXYTXZVYRAWWLXLMMOGQCWGRUGMFEKFSPRMIKHXBQZCNSOTQPLFJKUURRWFNNQCBHZLZMBHSMEGWBDFOSTEXGODBIMPXEULITUXJZTGCQMJVAMIOWBYANQTMGKGSOAPWYLACKRCZLCKJVFQYDGVTBOUWGPMSKLUAOMVXUKEPDUPWKIIXHBUMZQVSSFFDWOJISOIPRLLPCORGGJLOQWMXOADCGMEOYZBPQGCKPKIWDLIKQJPSGKRGHKWVTXMXMJLKCBRXXVSEFAKRQAXHLPSUWJXFJZCDHSFFKNXKYKCKXJYSRYGPSFOMMMAVDJRYLCVVGXRCWSYGPPBRHHFWOJWAUDKVEJSWBCNCKHIEFWMMIBOZFVRCATYNTRBRYDLETWGRZTEYNOBKQNPKLGJJQFYYJCAFQWWUUEVUUTFQBABLVYRDUMHZWZIDRQCXRQTAJKFASCAIYFVBONJJBIRWJMMPCSZWPQYYSWBROMUDNFOQCTJMSHTMLMJARFQIXMXAVTOQIRJYCXFDGMRVSIJEXUTUKNBOYNMRJULPEFOMXTTDCJWATBHHBFQFMSFZDYKOWGIFQHUZPXMKWFVVDNQSORPKBGBBAFVYFEFNDFAAHJPOYZNIFKHIGZUFGDUSSXMSAPOHTVDUKPJEKMKHKWJCYARPMXHKPNHMLGFSOTCULXSZIGCHILUHGLOHFGFDRSLYZSDBWKGDKHEEYBGGBGTNWNLPDLRBPTRVJBLOGSBKOQAORTYJXAVKEDGNDSAWRFLSIIGBRYUHEVODVLMCNBEPQRDAWGWPBJSHWQYERVTHTJYWTPYYNGHJAGFYDWMYUSNTZQUAHRPROECXCXGFTIGXMFSODZEQUSVVUQLYGFXGMNELLTHCFNHBZFTEGRUXISKGEJPIXJHHMVMAPTAEHBCESFWCIVWRGWLPAUNJJUYVSAQSXTBZVBDYZEBCKANPKHAHVPCIDNNNXKAVKLYJBYMXAESFHTPHPKECTZWTFFBSHFMXGXLUROIMMTLUTABSEZLILJOBAQCIAWTDSDWZCCDDFZESJUHOYESVHUXIYQQNDGMYAPLXIVAXNTZTZWQYGXTNWYQPABNWSYQGMCGZAMMNPHYSGZBNZAXNQFDOCIAMLHIMPGKJYZLQXMSPCTOGWDRFNDMNONJLAQKTOXFDOWXWGJUWJXZTGFORVPFZIBRRDISELNJSXZHALAWKNDCWWVFOCZVSLVHKSLSKCMYICRHMBDLGXRXLWPZTETSKILCTXBBXKKWYPPILMCXCZXJKQFIFUBNDTBWAAXPAMDKJXSMRFPJHTPZDNHSJMYPFIWOBAZZWVLEHBKXLMOCLAVZSVMZNECOXUKYUBCTCYYRRVNTRQFHAPRNTUPPLDMVJQYPCBCOEINUYXAHWFJWUJWMCTZVUKXBAPLIQOPYOJSCMRYUGGKRNSEYKCFIKBLZVXRLFAIAXXMJMXMXWGRRZXDGDVQWWIEHKERQXEFSYBXRHHWVTHPIFIXPEWMUSITEXKPQVDNENJASSCRDJYSABZJRJHATDKYTVZUPIHTGCFPZJFLPHASRVSQKMJWVBYKFRESRCSLOMIIBPIPIPZEWABDNCKXHPFZGMCBFUAISFUSOILTZNQPYPYDEHSUCUFPZRNUJXNZPXGQCYCWDFEUSYZBDJFROVVPTSGFJZFQMXNUCUDSLUGVISLDCKCVLNYJOUXOSROOSRSXSQKNZWETRXNSZIHWGLNLTOBPSOKIVUBSEOHSCPKHAMJAXAZNPNSQRARQGYOVFABKAIYPTDXCQNCZUKOUOEOISJOSHQFLBCSLVPYQWURKWBYNSEJTSIMVFGYKHHAWBHSIAHFGBWMKBYDESFBSXEQEVXZCAZUWMEUENRJNTHXSQAKTXPKPIQVPVXWQKFWXXDFYXYJTSHARYBYGFYPUKFWDFTSBHZWTDBNHFBDPPCNBQBXXDYICVCMHMVXRRFAFKNOCUPBOHMIDPCBDXWHLEVZUXGVJFWTTFEEITBEUKCORTMWIREBUQAGXCGAATHYVLNOPVPWXJXZJFJLMUXWOPDVGZBUHAJOWQUQUHTAWGNEZGAJLYVZDDMQVTBWSWTVJXCJDQHHUDCCJRYEKFFHNCDIZOEIPCEXEZQUGIRBEIAIMINWHJIKBKQXXIPEEHTRZSDCWQSJCKGTUUZQIIMDZPBDJDMWNMKFGOIWPHIDGDGTGFSPJJOFTUYZEPQRGZAKSVYWDWKHUIBMWLIXYOUMQDYIAQCQWYVXTEILAEWKDSMUWNSLVHVACXLXDNDSGCPKZUXHKICTEZWWLCXKYLEAYIWLXRGRIEDYGHIVJJPHBRIMGFFXTXTPXNIXVPOYFXXNNUKBIYNKIDMSFFCUJMEEGMHXXOGUJMYCOEJUSJQJTZNYIKIKLPPYYWLTLTJYGNSLKYHEDCIZJRZSXXJANZUUSCBJDWRRZUZGAQJETOMYVIPZZISHJVLYWLYKSJRPMJPCBVANAMSTSSIXYNDRCMEIMYNBBSSCFXIVWNNSRTIBNTXAUCHBLWWSUDPQIPUNRFELKURCNJQVPXKDDVGHCCHWNSAIUINGSINTMRKLOTIBLSVCJLTYGMWMMXCFQXAZVCOXTFLBKMRLQCUUDBRMGQVFHXWHAVIXQORXHUAVVDXMWMBSAXEPWKHYILYEVUQEUWECTSRTZPNGQPYBMNFIRIGPASLJIPEVAWSECKSPPJKQSAENLYQVCTBPAITRAZBKGHNPQUTYMTEASFMYPQSRBRPRLEYNDJEKZCAKXKVAQIRMIFUNKMVUXCXXIDVWZXNVYWUBCSPLXNWDTAUFUPLWQKKIFSZFIWMRLVVVGEABJMYLOVPLUBOTAWJAJMKXZOZIBOHNZMGTPKGJZUWDGIIVFHVPQXHJIPUCJGEXRMWGKBUDBUOCBOPPEQOTLYDGWKVAAPSITVSXCAHRBNGZOIDHOJRBCZIHRYALAJTUKUQSELBCDMXTDZVVAASKHRJTEZDVVKUVFXHVHSIPMD"; - -// echo "msg len = " . strlen($too_long_msg); - - // create a message which is too long by adding extra - $logger->debug($too_long_msg . "_EXTRA"); -} - -test_logging(); \ No newline at end of file diff --git a/tests/integration/logging/monolog3/test_supportability_metric.php b/tests/integration/logging/monolog3/test_supportability_metric.php new file mode 100644 index 000000000..a8cf91415 --- /dev/null +++ b/tests/integration/logging/monolog3/test_supportability_metric.php @@ -0,0 +1,24 @@ +