From 6a59fee30abc86dc5642f808202a51e81336b0e8 Mon Sep 17 00:00:00 2001 From: Fred Gylys-Colwell Date: Fri, 9 Apr 2021 14:43:02 -0700 Subject: [PATCH 1/9] Update ODK library for OPK compatibility This is a merge from http://go/wvgerrit of several changes to the ODK library that allow it to be used in the same compilation unit as the OPK serialization/deserialization code. Merge of: http://go/wvgerrit/104403 http://go/wvgerrit/105663 http://go/wvgerrit/106004 http://go/wvgerrit/107903 http://go/wvgerrit/107985 http://go/wvgerrit/110167 http://go/wvgerrit/110403 http://go/wvgerrit/110423 http://go/wvgerrit/110663 http://go/wvgerrit/110703 http://go/wvgerrit/110985 http://go/wvgerrit/111703 http://go/wvgerrit/112563 http://go/wvgerrit/113243 http://go/wvgerrit/115204 http://go/wvgerrit/117803 http://go/wvgerrit/121949 bug: 174518179 bug: 175920940 bug: 175126254 Change-Id: I433459182043ca43a040cdbc16d04f2b8215067a --- libwvdrmengine/oemcrypto/odk/Android.bp | 1 + libwvdrmengine/oemcrypto/odk/README | 6 +- .../odk/include/OEMCryptoCENCCommon.h | 1 + .../oemcrypto/odk/include/odk_message.h | 143 +++++++++++++ .../oemcrypto/odk/include/odk_structs.h | 8 +- .../odk/src/core_message_deserialize.cpp | 12 +- .../odk/src/core_message_serialize.cpp | 16 +- libwvdrmengine/oemcrypto/odk/src/odk.c | 74 +++---- libwvdrmengine/oemcrypto/odk/src/odk_endian.h | 14 +- .../oemcrypto/odk/src/odk_message.c | 171 +++++++++++++++ .../oemcrypto/odk/src/odk_message_priv.h | 41 ++++ .../oemcrypto/odk/src/odk_overflow.c | 10 + .../oemcrypto/odk/src/odk_overflow.h | 1 + .../oemcrypto/odk/src/odk_serialize.c | 58 ++--- .../oemcrypto/odk/src/odk_serialize.h | 26 +-- .../oemcrypto/odk/src/serialization_base.c | 200 +++++++----------- .../oemcrypto/odk/src/serialization_base.h | 80 ++----- .../odk/test/fuzzing/odk_fuzz_helper.cpp | 8 +- ...rovisioning_response_fuzz_with_mutator.cpp | 4 +- ...odk_renewal_response_fuzz_with_mutator.cpp | 4 +- .../oemcrypto/odk/test/odk_test.cpp | 2 - .../oemcrypto/odk/test/odk_test_helper.cpp | 32 +-- 22 files changed, 588 insertions(+), 324 deletions(-) create mode 100644 libwvdrmengine/oemcrypto/odk/include/odk_message.h create mode 100644 libwvdrmengine/oemcrypto/odk/src/odk_message.c create mode 100644 libwvdrmengine/oemcrypto/odk/src/odk_message_priv.h diff --git a/libwvdrmengine/oemcrypto/odk/Android.bp b/libwvdrmengine/oemcrypto/odk/Android.bp index 01af3332..ef284bdf 100644 --- a/libwvdrmengine/oemcrypto/odk/Android.bp +++ b/libwvdrmengine/oemcrypto/odk/Android.bp @@ -27,6 +27,7 @@ cc_library_static { srcs: [ "src/odk.c", + "src/odk_message.c", "src/odk_overflow.c", "src/odk_serialize.c", "src/odk_timer.c", diff --git a/libwvdrmengine/oemcrypto/odk/README b/libwvdrmengine/oemcrypto/odk/README index ba8c8c73..408fc448 100644 --- a/libwvdrmengine/oemcrypto/odk/README +++ b/libwvdrmengine/oemcrypto/odk/README @@ -1,8 +1,6 @@ This ODK Library is used to generate and parse core OEMCrypto messages for -OEMCrypto v16 and above. - -This library is used by both OEMCrypto on a device, and by Widevine license and -provisioning servers. +OEMCrypto v16 and above. This library is used by both OEMCrypto on a device +and by Widevine license and provisioning servers. The source of truth for these files is in the server code base on piper. Do not edit these files in the Android directory tree or in the Widevine Git diff --git a/libwvdrmengine/oemcrypto/odk/include/OEMCryptoCENCCommon.h b/libwvdrmengine/oemcrypto/odk/include/OEMCryptoCENCCommon.h index 5e54cc6b..69ba2ad3 100644 --- a/libwvdrmengine/oemcrypto/odk/include/OEMCryptoCENCCommon.h +++ b/libwvdrmengine/oemcrypto/odk/include/OEMCryptoCENCCommon.h @@ -87,6 +87,7 @@ typedef enum OEMCryptoResult { OEMCrypto_ERROR_LICENSE_RELOAD = 57, OEMCrypto_ERROR_MULTIPLE_USAGE_ENTRIES = 58, OEMCrypto_WARNING_MIXED_OUTPUT_PROTECTION = 59, + OEMCrypto_ERROR_INVALID_ENTITLED_KEY_SESSION = 60, /* ODK return values */ ODK_ERROR_BASE = 1000, ODK_ERROR_CORE_MESSAGE = ODK_ERROR_BASE, diff --git a/libwvdrmengine/oemcrypto/odk/include/odk_message.h b/libwvdrmengine/oemcrypto/odk/include/odk_message.h new file mode 100644 index 00000000..4e97804c --- /dev/null +++ b/libwvdrmengine/oemcrypto/odk/include/odk_message.h @@ -0,0 +1,143 @@ +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +#ifndef WIDEVINE_ODK_INCLUDE_ODK_MESSAGE_H_ +#define WIDEVINE_ODK_INCLUDE_ODK_MESSAGE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +/* + * ODK_Message is the structure that defines the serialized messages passed + * between the REE and TEE. ODK_Message is an abstract data type that represents + * the concept of a message without disclosing the implementation details. By + * hiding the internal structure, modification of the message fields by code + * that is not privy to the message definition can be prevented. If the message + * definition was exposed, there could be serious yet subtle errors in message + * manipulation anywhere in the code base. By restricting message modification + * it is possible to enforce validity and integrity with a small set of + * primitives that can be carefully reviewed. Checks can be added to verify that + * a message's fields are internally consistent before every operation. As an + * example, it can be guaranteed that the message status will be checked prior + * to accessing any field so parsing will be stopped when the message status is + * set after any parse error is detected. This also makes development easier + * since any access to the message structure can be tracked through a single + * point so, for example, it becomes possible to add trace statements globally + * to all message operations by only changing the field accessors. Finally it + * simplifies maintenance by localizing changes to the message structure to a + * few files. + */ + +#if defined(__GNUC__) || defined(__clang__) +# define ALIGNED __attribute__((aligned)) +#else +# define ALIGNED +# error ODK_Message must be aligned to the maximum useful alignment of the \ + machine you are compiling for. Define the ALIGNED macro accordingly. +#endif + +typedef struct { +#define SIZE_OF_ODK_MESSAGE_IMPL 64 + uint8_t opaque_data[SIZE_OF_ODK_MESSAGE_IMPL]; +} ALIGNED ODK_Message; + +typedef enum { + MESSAGE_STATUS_OK = 0xe937fcf7, + MESSAGE_STATUS_UNKNOWN_ERROR = 0xe06c1190, + MESSAGE_STATUS_OVERFLOW_ERROR = 0xc43ae4bc, + MESSAGE_STATUS_UNDERFLOW_ERROR = 0x7123cd0b, + MESSAGE_STATUS_PARSE_ERROR = 0x0b9f6189, + MESSAGE_STATUS_NULL_POINTER_ERROR = 0x2d66837a, + MESSAGE_STATUS_API_VALUE_ERROR = 0x6ba34f47, + MESSAGE_STATUS_END_OF_MESSAGE_ERROR = 0x998db72a, + MESSAGE_STATUS_INVALID_ENUM_VALUE = 0xedb88197, + MESSAGE_STATUS_INVALID_TAG_ERROR = 0x14dce06a, + MESSAGE_STATUS_NOT_INITIALIZED = 0x2990b6c6, + MESSAGE_STATUS_OUT_OF_MEMORY = 0xfc5c64cc, + MESSAGE_STATUS_MAP_SHARED_MEMORY_FAILED = 0xfafecacf, + MESSAGE_STATUS_SECURE_BUFFER_ERROR = 0x78f0e873 +} ODK_MessageStatus; + +/* + * Create a message structure that references a separate data buffer. An + * initialized message is returned. The caller is responsible for ensuring that + * the buffer remains allocated for the lifetime of the message. If |buffer| + * is NULL or |capacity| is zero, the message is invalid and the status + * will be set to MESSAGE_STATUS_NOT_INITIALIZED. + */ +ODK_Message ODK_Message_Create(uint8_t* buffer, size_t capacity); + +/* + * Erase the contents of the message, set it to an empty state by setting the + * message size and read offset to 0, effectively erasing the contents of the + * message. The message data buffer pointer remains unchanged, i.e. the message + * retains ownership of the buffer. The message status is reset to + * MESSAGE_STATUS_OK. + */ +void ODK_Message_Clear(ODK_Message* message); + +/* + * Reset read pointer to the beginning of the message and clear status + * so that parsing of the message will restart at the beginning of the + * message. The message status is reset to MESSAGE_STATUS_OK. + */ +void ODK_Message_Reset(ODK_Message* message); + +/* + * Return a pointer to the message data buffer, i.e. the message payload. + * This is the buffer address that was passed into ODK_Message_Create. + */ +uint8_t* ODK_Message_GetBase(ODK_Message* message); + +/* + * Get the maximum number of bytes the message can hold. + */ +size_t ODK_Message_GetCapacity(ODK_Message* message); + +/* + * Get the number of bytes currently in the message + */ +size_t ODK_Message_GetSize(ODK_Message* message); + +/* + * Get the offset of where the next bytes will be read from the message data + * buffer. + */ +size_t ODK_Message_GetOffset(ODK_Message* message); + +/* + * Return the status of the message + */ +ODK_MessageStatus ODK_Message_GetStatus(ODK_Message* message); + +/* + * Set the message status to a specific value + */ +void ODK_Message_SetStatus(ODK_Message* message, ODK_MessageStatus status); + +/* + * Set the size of the message to a value. This may be needed after writing data + * into the message data buffer. + */ +void ODK_Message_SetSize(ODK_Message* message, size_t size); + +/* + * Test if the integrity of a message. This means that the status must be + * MESSAGE_STATUS_OK and that the internal fields of the message are + * within the range of valid values. + */ +bool ODK_Message_IsValid(ODK_Message* message); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // WIDEVINE_ODK_INCLUDE_ODK_MESSAGE_H_ diff --git a/libwvdrmengine/oemcrypto/odk/include/odk_structs.h b/libwvdrmengine/oemcrypto/odk/include/odk_structs.h index bd500d87..5ed6f1ab 100644 --- a/libwvdrmengine/oemcrypto/odk/include/odk_structs.h +++ b/libwvdrmengine/oemcrypto/odk/include/odk_structs.h @@ -12,10 +12,14 @@ /* The version of this library. */ #define ODK_MAJOR_VERSION 16 -#define ODK_MINOR_VERSION 3 +// TODO(b/163416999): Do not change minor version to 16.5 on master branch. The +// version 16.5 is reserved for Alcatraz, iOS, and other L3 platforms using +// third-party obfuscation tools. The version should not be used for CE CDM or +// Android CDM. We should jump straight to 17.0. +#define ODK_MINOR_VERSION 4 /* ODK Version string. Date changed automatically on each release. */ -#define ODK_RELEASE_DATE "ODK v16.3 2020-08-18" +#define ODK_RELEASE_DATE "ODK v16.4 2020-10-23" /* The lowest version number for an ODK message. */ #define ODK_FIRST_VERSION 16 diff --git a/libwvdrmengine/oemcrypto/odk/src/core_message_deserialize.cpp b/libwvdrmengine/oemcrypto/odk/src/core_message_deserialize.cpp index 47d4478c..f659a6db 100644 --- a/libwvdrmengine/oemcrypto/odk/src/core_message_deserialize.cpp +++ b/libwvdrmengine/oemcrypto/odk/src/core_message_deserialize.cpp @@ -39,13 +39,11 @@ bool ParseRequest(uint32_t message_type, reinterpret_cast(oemcrypto_core_message.c_str()); const size_t buf_length = oemcrypto_core_message.size(); - uint8_t blk[SIZE_OF_MESSAGE_STRUCT]; - Message* msg = reinterpret_cast(blk); - InitMessage(msg, const_cast(buf), buf_length); - SetSize(msg, buf_length); + ODK_Message msg = ODK_Message_Create(const_cast(buf), buf_length); + ODK_Message_SetSize(&msg, buf_length); - unpacker(msg, prepared); - if (!ValidMessage(msg)) { + unpacker(&msg, prepared); + if (!ODK_Message_IsValid(&msg)) { return false; } @@ -80,7 +78,7 @@ bool ParseRequest(uint32_t message_type, // than the total message size. We allow the total message size to be larger // for forward compatibility because future messages might have extra fields // that we can ignore. - if (core_message.message_length < GetOffset(msg)) return false; + if (core_message.message_length < ODK_Message_GetOffset(&msg)) return false; return true; } diff --git a/libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp b/libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp index 0e05330a..e4c6fe07 100644 --- a/libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp +++ b/libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp @@ -50,18 +50,16 @@ bool CreateResponse(uint32_t message_type, const S& core_request, static constexpr size_t BUF_CAPACITY = 2048; std::vector buf(BUF_CAPACITY, 0); - uint8_t blk[SIZE_OF_MESSAGE_STRUCT]; - Message* msg = reinterpret_cast(blk); - InitMessage(msg, buf.data(), buf.capacity()); - packer(msg, &response); - if (!ValidMessage(msg)) { + ODK_Message msg = ODK_Message_Create(buf.data(), buf.capacity()); + packer(&msg, &response); + if (!ODK_Message_IsValid(&msg)) { return false; } - uint32_t message_length = GetSize(msg); - InitMessage(msg, buf.data() + sizeof(header->message_type), - sizeof(header->message_length)); - Pack_uint32_t(msg, &message_length); + uint32_t message_length = ODK_Message_GetSize(&msg); + msg = ODK_Message_Create(buf.data() + sizeof(header->message_type), + sizeof(header->message_length)); + Pack_uint32_t(&msg, &message_length); oemcrypto_core_message->assign(reinterpret_cast(buf.data()), message_length); return true; diff --git a/libwvdrmengine/oemcrypto/odk/src/odk.c b/libwvdrmengine/oemcrypto/odk/src/odk.c index 0bb6ab18..f0ec34ec 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk.c +++ b/libwvdrmengine/oemcrypto/odk/src/odk.c @@ -27,9 +27,7 @@ static OEMCryptoResult ODK_PrepareRequest( return ODK_ERROR_CORE_MESSAGE; } - uint8_t blk[SIZE_OF_MESSAGE_STRUCT]; - Message* msg = (Message*)blk; - InitMessage(msg, message, *core_message_length); + ODK_Message msg = ODK_Message_Create(message, *core_message_length); /* The core message should be at the beginning of the buffer, and with a * shorter length. */ @@ -52,7 +50,7 @@ static OEMCryptoResult ODK_PrepareRequest( return ODK_ERROR_CORE_MESSAGE; } Pack_ODK_PreparedLicenseRequest( - msg, (ODK_PreparedLicenseRequest*)prepared_request_buffer); + &msg, (ODK_PreparedLicenseRequest*)prepared_request_buffer); break; } case ODK_Renewal_Request_Type: { @@ -61,7 +59,7 @@ static OEMCryptoResult ODK_PrepareRequest( return ODK_ERROR_CORE_MESSAGE; } Pack_ODK_PreparedRenewalRequest( - msg, (ODK_PreparedRenewalRequest*)prepared_request_buffer); + &msg, (ODK_PreparedRenewalRequest*)prepared_request_buffer); break; } case ODK_Provisioning_Request_Type: { @@ -71,7 +69,7 @@ static OEMCryptoResult ODK_PrepareRequest( return ODK_ERROR_CORE_MESSAGE; } Pack_ODK_PreparedProvisioningRequest( - msg, (ODK_PreparedProvisioningRequest*)prepared_request_buffer); + &msg, (ODK_PreparedProvisioningRequest*)prepared_request_buffer); break; } default: { @@ -80,13 +78,13 @@ static OEMCryptoResult ODK_PrepareRequest( } *core_message_length = core_message->message_length; - if (GetStatus(msg) != MESSAGE_STATUS_OK) { + if (ODK_Message_GetStatus(&msg) != MESSAGE_STATUS_OK) { /* This is to indicate the caller that the core_message_length has been * appropriately set, but the message buffer is either empty or too small, * which needs to be initialized and filled in the subsequent call. */ return OEMCrypto_ERROR_SHORT_BUFFER; } - if (GetSize(msg) != *core_message_length) { + if (ODK_Message_GetSize(&msg) != *core_message_length) { /* This should not happen. Something is wrong. */ return ODK_ERROR_CORE_MESSAGE; } @@ -102,20 +100,11 @@ static OEMCryptoResult ODK_ParseResponse( return ODK_ERROR_CORE_MESSAGE; } - uint8_t blk[SIZE_OF_MESSAGE_STRUCT]; - Message* msg = (Message*)blk; - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wcast-qual" - /* We initialize the message buffer with a size of the entire message - * length. */ - /* TODO(b/164486737): Fix the cast-qual warning */ - InitMessage(msg, (uint8_t*)message, message_length); -#pragma GCC diagnostic pop + ODK_Message msg = ODK_Message_Create((uint8_t*)message, message_length); /* The core message should be at the beginning of the buffer, and with a * shorter length. The core message is the part we are parsing. */ - SetSize(msg, core_message_length); + ODK_Message_SetSize(&msg, core_message_length); /* Parse message and unpack it into response buffer. */ switch (message_type) { @@ -123,14 +112,14 @@ static OEMCryptoResult ODK_ParseResponse( if (sizeof(ODK_LicenseResponse) > response_buffer_length) { return ODK_ERROR_CORE_MESSAGE; } - Unpack_ODK_LicenseResponse(msg, (ODK_LicenseResponse*)response_buffer); + Unpack_ODK_LicenseResponse(&msg, (ODK_LicenseResponse*)response_buffer); break; } case ODK_Renewal_Response_Type: { if (sizeof(ODK_RenewalResponse) > response_buffer_length) { return ODK_ERROR_CORE_MESSAGE; } - Unpack_ODK_RenewalResponse(msg, (ODK_RenewalResponse*)response_buffer); + Unpack_ODK_RenewalResponse(&msg, (ODK_RenewalResponse*)response_buffer); break; } case ODK_Provisioning_Response_Type: { @@ -138,7 +127,7 @@ static OEMCryptoResult ODK_ParseResponse( return ODK_ERROR_CORE_MESSAGE; } Unpack_ODK_ProvisioningResponse( - msg, (ODK_ProvisioningResponse*)response_buffer); + &msg, (ODK_ProvisioningResponse*)response_buffer); break; } default: { @@ -147,9 +136,9 @@ static OEMCryptoResult ODK_ParseResponse( } ODK_CoreMessage* core_message = (ODK_CoreMessage*)response_buffer; - if (GetStatus(msg) != MESSAGE_STATUS_OK || + if (ODK_Message_GetStatus(&msg) != MESSAGE_STATUS_OK || message_type != core_message->message_type || - GetOffset(msg) != core_message->message_length) { + ODK_Message_GetOffset(&msg) != core_message->message_length) { return ODK_ERROR_CORE_MESSAGE; } @@ -307,20 +296,24 @@ OEMCryptoResult ODK_ParseLicense( return ODK_ERROR_CORE_MESSAGE; } - if (parsed_license->nonce_required) { - if (initial_license_load) { - if (nonce_values->nonce != - license_response.request.core_message.nonce_values.nonce || - nonce_values->session_id != - license_response.request.core_message.nonce_values.session_id) { - return OEMCrypto_ERROR_INVALID_NONCE; - } - } else { /* !initial_license_load */ - nonce_values->nonce = - license_response.request.core_message.nonce_values.nonce; - nonce_values->session_id = - license_response.request.core_message.nonce_values.session_id; + /* If this is the first time we load this license, then we verify that the + * nonce values are the correct, otherwise we copy the nonce values. If the + * nonce values are not required to be correct, then we don't know if this is + * an initial load or not. In that case, we also copy the values so that we + * can use the nonce values later for a renewal. + */ + if (parsed_license->nonce_required && initial_license_load) { + if (nonce_values->nonce != + license_response.request.core_message.nonce_values.nonce || + nonce_values->session_id != + license_response.request.core_message.nonce_values.session_id) { + return OEMCrypto_ERROR_INVALID_NONCE; } + } else { /* !initial_license_load, or can't tell if initial. */ + nonce_values->nonce = + license_response.request.core_message.nonce_values.nonce; + nonce_values->session_id = + license_response.request.core_message.nonce_values.session_id; } /* For v16, in order to be backwards compatible with a v15 license server, * OEMCrypto stores a hash of the core license request and only signs the @@ -367,9 +360,12 @@ OEMCryptoResult ODK_ParseRenewal(const uint8_t* message, size_t message_length, */ /* If a renewal request is lost in transit, we should throw it out and create * a new one. We use the timestamp to make sure we have the latest request. + * We only do this if playback has already started. This allows us to reload + * an offline license and also reload a renewal before starting playback. */ - if (clock_values->time_of_renewal_request < - renewal_response.request.playback_time) { + if (clock_values->timer_status != ODK_CLOCK_TIMER_STATUS_LICENSE_LOADED && + clock_values->time_of_renewal_request < + renewal_response.request.playback_time) { return ODK_STALE_RENEWAL; } return ODK_ComputeRenewalDuration(timer_limits, clock_values, system_time, diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_endian.h b/libwvdrmengine/oemcrypto/odk/src/odk_endian.h index 00dc01ec..f65234ec 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk_endian.h +++ b/libwvdrmengine/oemcrypto/odk/src/odk_endian.h @@ -11,11 +11,23 @@ extern "C" { #if defined(__linux__) || defined(__ANDROID__) #include +#define oemcrypto_htobe16 htobe16 +#define oemcrypto_be16toh be16toh #define oemcrypto_htobe32 htobe32 #define oemcrypto_be32toh be32toh #define oemcrypto_htobe64 htobe64 #define oemcrypto_be64toh be64toh -#else /* defined(__linux__) || defined(__ANDROID__) */ +#elif defined(__APPLE__) +#include +#define oemcrypto_htobe16 OSSwapHostToBigInt16 +#define oemcrypto_be16toh OSSwapBigToHostInt16 +#define oemcrypto_htobe32 OSSwapHostToBigInt32 +#define oemcrypto_be32toh OSSwapBigToHostInt32 +#define oemcrypto_htobe64 OSSwapHostToBigInt64 +#define oemcrypto_be64toh OSSwapBigToHostInt64 +#else /* defined(__linux__) || defined(__ANDROID__) */ +uint32_t oemcrypto_htobe16(uint16_t u16); +uint32_t oemcrypto_be16toh(uint16_t u16); uint32_t oemcrypto_htobe32(uint32_t u32); uint32_t oemcrypto_be32toh(uint32_t u32); uint64_t oemcrypto_htobe64(uint64_t u64); diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_message.c b/libwvdrmengine/oemcrypto/odk/src/odk_message.c new file mode 100644 index 00000000..890c8d17 --- /dev/null +++ b/libwvdrmengine/oemcrypto/odk/src/odk_message.c @@ -0,0 +1,171 @@ +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +#include "odk_message.h" +#include "odk_message_priv.h" + +#include +#include +#include + +/* + * C11 defines static_assert in assert.h. If it is available, force a compile + * time error if the abstract ODK_Message struct size does not match its + * implementation. If static_assert is not available, the runtime assert in + * InitMessage will catch the mismatch at the time a message is initialized. + */ +#ifdef static_assert +static_assert( + sizeof(ODK_Message) >= sizeof(ODK_Message_Impl), + "sizeof(ODK_Message) is too small. You can increase " + "SIZE_OF_ODK_MESSAGE_IMPL in odk_message.h to make it large enough."); +#endif + +/* + * Create a message structure that references a separate data buffer. An + * initialized message is returned. The caller is responsible for ensuring that + * the buffer remains allocated for the lifetime of the message. |buffer| may be + * NULL. Serialization into a message with a NULL buffer will cause the message + * size to be incremented, but no data will be written into the message + * buffer. This is useful for calculating the amount of space a message will + * need, prior to doing the actual serialization. The buffer contents are + * unchanged by this function. + */ +ODK_Message ODK_Message_Create(uint8_t* buffer, size_t capacity) { + assert(sizeof(ODK_Message) >= sizeof(ODK_Message_Impl)); + ODK_Message message; + ODK_Message_Impl* message_impl = (ODK_Message_Impl*)&message; + message_impl->base = buffer; + message_impl->capacity = capacity; + message_impl->size = 0; + message_impl->read_offset = 0; + message_impl->status = MESSAGE_STATUS_OK; + return message; +} + +/* + * Erase the contents of the message, set it to an empty state by setting the + * message size and read offset to 0, effectively erasing the contents of the + * message. The message data buffer pointer remains unchanged, i.e. the message + * retains ownership of the buffer. The message buffer is zero-filled. The + * message status is reset to MESSAGE_STATUS_OK. + */ +void ODK_Message_Clear(ODK_Message* message) { + ODK_Message_Impl* message_impl = (ODK_Message_Impl*)message; + assert(message_impl != NULL); + message_impl->read_offset = 0; + message_impl->size = 0; + message_impl->status = MESSAGE_STATUS_OK; + if (message_impl->base) { + memset(message_impl->base, 0, message_impl->capacity); + } +} + +/* + * Reset read pointer to the beginning of the message and clear status + * so that parsing of the message will restart at the beginning of the + * message. The message status is reset to MESSAGE_STATUS_OK. + */ +void ODK_Message_Reset(ODK_Message* message) { + ODK_Message_Impl* message_impl = (ODK_Message_Impl*)message; + assert(message_impl != NULL); + message_impl->read_offset = 0; + message_impl->status = MESSAGE_STATUS_OK; +} + +/* + * Return a pointer to the message data buffer, i.e. the message payload. + * This is the buffer address that was passed into ODK_Message_Create. + */ +uint8_t* ODK_Message_GetBase(ODK_Message* message) { + ODK_Message_Impl* message_impl = (ODK_Message_Impl*)message; + assert(message_impl != NULL); + return message_impl->base; +} + +/* + * Get the maximum number of bytes the message can hold. + */ +size_t ODK_Message_GetCapacity(ODK_Message* message) { + ODK_Message_Impl* message_impl = (ODK_Message_Impl*)message; + assert(message_impl != NULL); + return message_impl->capacity; +} + +/* + * Get the number of bytes currently in the message + */ +size_t ODK_Message_GetSize(ODK_Message* message) { + ODK_Message_Impl* message_impl = (ODK_Message_Impl*)message; + assert(message_impl != NULL); + return message_impl->size; +} + +/* + * Get the offset of where the next bytes will be read from the message data + * buffer. + */ +size_t ODK_Message_GetOffset(ODK_Message* message) { + ODK_Message_Impl* message_impl = (ODK_Message_Impl*)message; + assert(message_impl != NULL); + return message_impl->read_offset; +} + +/* + * Return the status of the message + */ +ODK_MessageStatus ODK_Message_GetStatus(ODK_Message* message) { + ODK_Message_Impl* message_impl = (ODK_Message_Impl*)message; + assert(message_impl != NULL); + return message_impl->status; +} + +/* + * Set the message status to a specific value + */ +void ODK_Message_SetStatus(ODK_Message* message, ODK_MessageStatus status) { + ODK_Message_Impl* message_impl = (ODK_Message_Impl*)message; + assert(message_impl != NULL); + /* preserve the first error */ + if (message_impl->status == MESSAGE_STATUS_OK) { + message_impl->status = status; + } +} + +/* + * Set the size of the message to a value. This may be needed after writing data + * into the message data buffer. + */ +void ODK_Message_SetSize(ODK_Message* message, size_t size) { + ODK_Message_Impl* message_impl = (ODK_Message_Impl*)message; + assert(message_impl != NULL); + assert(size <= message_impl->capacity); + message_impl->size = size; +} + +/* + * Test if the integrity of a message. This means that the status must be + * MESSAGE_STATUS_OK and that the base, read_offset, size and capacity of the + * message are within the range of valid values. The message's base pointer + * may be NULL if the buffer has not been assigned yet, that is not invalid. + */ +bool ODK_Message_IsValid(ODK_Message* message) { + assert(message); + ODK_Message_Impl* message_impl = (ODK_Message_Impl*)message; + if (message_impl == NULL) { + return false; + } + if (message_impl->status != MESSAGE_STATUS_OK) { + return false; + } + if (message_impl->read_offset > message_impl->capacity || + message_impl->size > message_impl->capacity || + message_impl->read_offset > message_impl->size) { + message_impl->status = MESSAGE_STATUS_OVERFLOW_ERROR; + return false; + } + return true; +} diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_message_priv.h b/libwvdrmengine/oemcrypto/odk/src/odk_message_priv.h new file mode 100644 index 00000000..c13cca47 --- /dev/null +++ b/libwvdrmengine/oemcrypto/odk/src/odk_message_priv.h @@ -0,0 +1,41 @@ +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +#ifndef WIDEVINE_ODK_INCLUDE_ODK_MESSAGE_PRIV_H_ +#define WIDEVINE_ODK_INCLUDE_ODK_MESSAGE_PRIV_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This file must only be included by odk_message.c and serialization_base.c. + */ + +#include +#include + +/* + * This is the implementation of a message. This structure is private, i.e. it + * should only be included by files that are allowed to modify the internals of + * a message, that being odk_message.c and serialization_base.c. To ensure + * proper alignment and message size, an ODK_Message_Impl should never be + * allocated directly, instead allocate ODK_Message and cast to ODK_Message_Impl + * because ODK_Message_Impl may be smaller than ODK_Message. + */ +typedef struct { + uint8_t* base; + size_t capacity; + size_t size; + size_t read_offset; + ODK_MessageStatus status; +} ODK_Message_Impl; + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // WIDEVINE_ODK_INCLUDE_ODK_MESSAGE_PRIV_H_ diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_overflow.c b/libwvdrmengine/oemcrypto/odk/src/odk_overflow.c index a03f0f61..ce62a4f7 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk_overflow.c +++ b/libwvdrmengine/oemcrypto/odk/src/odk_overflow.c @@ -34,3 +34,13 @@ int odk_add_overflow_ux(size_t a, size_t b, size_t* c) { } return 1; } + +int odk_mul_overflow_ux(size_t a, size_t b, size_t* c) { + if (b > 0 && a > SIZE_MAX / b) { + return 1; + } + if (c) { + *c = a * b; + } + return 0; +} diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_overflow.h b/libwvdrmengine/oemcrypto/odk/src/odk_overflow.h index 6f3f994e..a7a670bc 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk_overflow.h +++ b/libwvdrmengine/oemcrypto/odk/src/odk_overflow.h @@ -15,6 +15,7 @@ extern "C" { int odk_sub_overflow_u64(uint64_t a, uint64_t b, uint64_t* c); int odk_add_overflow_u64(uint64_t a, uint64_t b, uint64_t* c); int odk_add_overflow_ux(size_t a, size_t b, size_t* c); +int odk_mul_overflow_ux(size_t a, size_t b, size_t* c); #ifdef __cplusplus } diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_serialize.c b/libwvdrmengine/oemcrypto/odk/src/odk_serialize.c index ae53e735..d881e3df 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk_serialize.c +++ b/libwvdrmengine/oemcrypto/odk/src/odk_serialize.c @@ -13,20 +13,20 @@ /* @@ private serialize */ -static void Pack_ODK_NonceValues(Message* msg, ODK_NonceValues const* obj) { +static void Pack_ODK_NonceValues(ODK_Message* msg, ODK_NonceValues const* obj) { Pack_uint16_t(msg, &obj->api_minor_version); Pack_uint16_t(msg, &obj->api_major_version); Pack_uint32_t(msg, &obj->nonce); Pack_uint32_t(msg, &obj->session_id); } -static void Pack_ODK_CoreMessage(Message* msg, ODK_CoreMessage const* obj) { +static void Pack_ODK_CoreMessage(ODK_Message* msg, ODK_CoreMessage const* obj) { Pack_uint32_t(msg, &obj->message_type); Pack_uint32_t(msg, &obj->message_length); Pack_ODK_NonceValues(msg, &obj->nonce_values); } -static void Pack_OEMCrypto_KeyObject(Message* msg, +static void Pack_OEMCrypto_KeyObject(ODK_Message* msg, OEMCrypto_KeyObject const* obj) { Pack_OEMCrypto_Substring(msg, &obj->key_id); Pack_OEMCrypto_Substring(msg, &obj->key_data_iv); @@ -35,7 +35,7 @@ static void Pack_OEMCrypto_KeyObject(Message* msg, Pack_OEMCrypto_Substring(msg, &obj->key_control); } -static void Pack_ODK_TimerLimits(Message* msg, ODK_TimerLimits const* obj) { +static void Pack_ODK_TimerLimits(ODK_Message* msg, ODK_TimerLimits const* obj) { Pack_bool(msg, &obj->soft_enforce_rental_duration); Pack_bool(msg, &obj->soft_enforce_playback_duration); Pack_uint64_t(msg, &obj->earliest_playback_start_seconds); @@ -44,10 +44,11 @@ static void Pack_ODK_TimerLimits(Message* msg, ODK_TimerLimits const* obj) { Pack_uint64_t(msg, &obj->initial_renewal_duration_seconds); } -static void Pack_ODK_ParsedLicense(Message* msg, ODK_ParsedLicense const* obj) { +static void Pack_ODK_ParsedLicense(ODK_Message* msg, + ODK_ParsedLicense const* obj) { /* hand-coded */ if (obj->key_array_length > ODK_MAX_NUM_KEYS) { - SetStatus(msg, MESSAGE_STATUS_OVERFLOW_ERROR); + ODK_Message_SetStatus(msg, MESSAGE_STATUS_OVERFLOW_ERROR); return; } Pack_OEMCrypto_Substring(msg, &obj->enc_mac_keys_iv); @@ -64,7 +65,7 @@ static void Pack_ODK_ParsedLicense(Message* msg, ODK_ParsedLicense const* obj) { } } -static void Pack_ODK_ParsedProvisioning(Message* msg, +static void Pack_ODK_ParsedProvisioning(ODK_Message* msg, ODK_ParsedProvisioning const* obj) { Pack_enum(msg, obj->key_type); Pack_OEMCrypto_Substring(msg, &obj->enc_private_key); @@ -74,19 +75,19 @@ static void Pack_ODK_ParsedProvisioning(Message* msg, /* @@ odk serialize */ -void Pack_ODK_PreparedLicenseRequest(Message* msg, +void Pack_ODK_PreparedLicenseRequest(ODK_Message* msg, ODK_PreparedLicenseRequest const* obj) { Pack_ODK_CoreMessage(msg, &obj->core_message); } -void Pack_ODK_PreparedRenewalRequest(Message* msg, +void Pack_ODK_PreparedRenewalRequest(ODK_Message* msg, ODK_PreparedRenewalRequest const* obj) { Pack_ODK_CoreMessage(msg, &obj->core_message); Pack_uint64_t(msg, &obj->playback_time); } void Pack_ODK_PreparedProvisioningRequest( - Message* msg, ODK_PreparedProvisioningRequest const* obj) { + ODK_Message* msg, ODK_PreparedProvisioningRequest const* obj) { Pack_ODK_CoreMessage(msg, &obj->core_message); Pack_uint32_t(msg, &obj->device_id_length); PackArray(msg, &obj->device_id[0], sizeof(obj->device_id)); @@ -94,18 +95,20 @@ void Pack_ODK_PreparedProvisioningRequest( /* @@ kdo serialize */ -void Pack_ODK_LicenseResponse(Message* msg, ODK_LicenseResponse const* obj) { +void Pack_ODK_LicenseResponse(ODK_Message* msg, + ODK_LicenseResponse const* obj) { Pack_ODK_PreparedLicenseRequest(msg, &obj->request); Pack_ODK_ParsedLicense(msg, (const ODK_ParsedLicense*)obj->parsed_license); PackArray(msg, &obj->request_hash[0], sizeof(obj->request_hash)); } -void Pack_ODK_RenewalResponse(Message* msg, ODK_RenewalResponse const* obj) { +void Pack_ODK_RenewalResponse(ODK_Message* msg, + ODK_RenewalResponse const* obj) { Pack_ODK_PreparedRenewalRequest(msg, &obj->request); Pack_uint64_t(msg, &obj->renewal_duration_seconds); } -void Pack_ODK_ProvisioningResponse(Message* msg, +void Pack_ODK_ProvisioningResponse(ODK_Message* msg, ODK_ProvisioningResponse const* obj) { Pack_ODK_PreparedProvisioningRequest(msg, &obj->request); Pack_ODK_ParsedProvisioning( @@ -116,20 +119,21 @@ void Pack_ODK_ProvisioningResponse(Message* msg, /* @@ private deserialize */ -static void Unpack_ODK_NonceValues(Message* msg, ODK_NonceValues* obj) { +static void Unpack_ODK_NonceValues(ODK_Message* msg, ODK_NonceValues* obj) { Unpack_uint16_t(msg, &obj->api_minor_version); Unpack_uint16_t(msg, &obj->api_major_version); Unpack_uint32_t(msg, &obj->nonce); Unpack_uint32_t(msg, &obj->session_id); } -static void Unpack_ODK_CoreMessage(Message* msg, ODK_CoreMessage* obj) { +static void Unpack_ODK_CoreMessage(ODK_Message* msg, ODK_CoreMessage* obj) { Unpack_uint32_t(msg, &obj->message_type); Unpack_uint32_t(msg, &obj->message_length); Unpack_ODK_NonceValues(msg, &obj->nonce_values); } -static void Unpack_OEMCrypto_KeyObject(Message* msg, OEMCrypto_KeyObject* obj) { +static void Unpack_OEMCrypto_KeyObject(ODK_Message* msg, + OEMCrypto_KeyObject* obj) { Unpack_OEMCrypto_Substring(msg, &obj->key_id); Unpack_OEMCrypto_Substring(msg, &obj->key_data_iv); Unpack_OEMCrypto_Substring(msg, &obj->key_data); @@ -137,7 +141,7 @@ static void Unpack_OEMCrypto_KeyObject(Message* msg, OEMCrypto_KeyObject* obj) { Unpack_OEMCrypto_Substring(msg, &obj->key_control); } -static void Unpack_ODK_TimerLimits(Message* msg, ODK_TimerLimits* obj) { +static void Unpack_ODK_TimerLimits(ODK_Message* msg, ODK_TimerLimits* obj) { Unpack_bool(msg, &obj->soft_enforce_rental_duration); Unpack_bool(msg, &obj->soft_enforce_playback_duration); Unpack_uint64_t(msg, &obj->earliest_playback_start_seconds); @@ -146,7 +150,7 @@ static void Unpack_ODK_TimerLimits(Message* msg, ODK_TimerLimits* obj) { Unpack_uint64_t(msg, &obj->initial_renewal_duration_seconds); } -static void Unpack_ODK_ParsedLicense(Message* msg, ODK_ParsedLicense* obj) { +static void Unpack_ODK_ParsedLicense(ODK_Message* msg, ODK_ParsedLicense* obj) { Unpack_OEMCrypto_Substring(msg, &obj->enc_mac_keys_iv); Unpack_OEMCrypto_Substring(msg, &obj->enc_mac_keys); Unpack_OEMCrypto_Substring(msg, &obj->pst); @@ -156,7 +160,7 @@ static void Unpack_ODK_ParsedLicense(Message* msg, ODK_ParsedLicense* obj) { Unpack_ODK_TimerLimits(msg, &obj->timer_limits); Unpack_uint32_t(msg, &obj->key_array_length); if (obj->key_array_length > ODK_MAX_NUM_KEYS) { - SetStatus(msg, MESSAGE_STATUS_OVERFLOW_ERROR); + ODK_Message_SetStatus(msg, MESSAGE_STATUS_OVERFLOW_ERROR); return; } uint32_t i; @@ -165,7 +169,7 @@ static void Unpack_ODK_ParsedLicense(Message* msg, ODK_ParsedLicense* obj) { } } -static void Unpack_ODK_ParsedProvisioning(Message* msg, +static void Unpack_ODK_ParsedProvisioning(ODK_Message* msg, ODK_ParsedProvisioning* obj) { obj->key_type = (OEMCrypto_PrivateKeyType)Unpack_enum(msg); Unpack_OEMCrypto_Substring(msg, &obj->enc_private_key); @@ -175,42 +179,42 @@ static void Unpack_ODK_ParsedProvisioning(Message* msg, /* @ kdo deserialize */ -void Unpack_ODK_PreparedLicenseRequest(Message* msg, +void Unpack_ODK_PreparedLicenseRequest(ODK_Message* msg, ODK_PreparedLicenseRequest* obj) { Unpack_ODK_CoreMessage(msg, &obj->core_message); } -void Unpack_ODK_PreparedRenewalRequest(Message* msg, +void Unpack_ODK_PreparedRenewalRequest(ODK_Message* msg, ODK_PreparedRenewalRequest* obj) { Unpack_ODK_CoreMessage(msg, &obj->core_message); Unpack_uint64_t(msg, &obj->playback_time); } void Unpack_ODK_PreparedProvisioningRequest( - Message* msg, ODK_PreparedProvisioningRequest* obj) { + ODK_Message* msg, ODK_PreparedProvisioningRequest* obj) { Unpack_ODK_CoreMessage(msg, &obj->core_message); Unpack_uint32_t(msg, &obj->device_id_length); UnpackArray(msg, &obj->device_id[0], sizeof(obj->device_id)); } -void Unpack_ODK_PreparedCommonRequest(Message* msg, +void Unpack_ODK_PreparedCommonRequest(ODK_Message* msg, ODK_PreparedCommonRequest* obj) { Unpack_ODK_CoreMessage(msg, &obj->core_message); } /* @@ odk deserialize */ -void Unpack_ODK_LicenseResponse(Message* msg, ODK_LicenseResponse* obj) { +void Unpack_ODK_LicenseResponse(ODK_Message* msg, ODK_LicenseResponse* obj) { Unpack_ODK_PreparedLicenseRequest(msg, &obj->request); Unpack_ODK_ParsedLicense(msg, obj->parsed_license); UnpackArray(msg, &obj->request_hash[0], sizeof(obj->request_hash)); } -void Unpack_ODK_RenewalResponse(Message* msg, ODK_RenewalResponse* obj) { +void Unpack_ODK_RenewalResponse(ODK_Message* msg, ODK_RenewalResponse* obj) { Unpack_ODK_PreparedRenewalRequest(msg, &obj->request); Unpack_uint64_t(msg, &obj->renewal_duration_seconds); } -void Unpack_ODK_ProvisioningResponse(Message* msg, +void Unpack_ODK_ProvisioningResponse(ODK_Message* msg, ODK_ProvisioningResponse* obj) { Unpack_ODK_PreparedProvisioningRequest(msg, &obj->request); Unpack_ODK_ParsedProvisioning(msg, obj->parsed_provisioning); diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_serialize.h b/libwvdrmengine/oemcrypto/odk/src/odk_serialize.h index 73f4abd1..33944b5d 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk_serialize.h +++ b/libwvdrmengine/oemcrypto/odk/src/odk_serialize.h @@ -16,34 +16,34 @@ extern "C" { #endif /* odk pack */ -void Pack_ODK_PreparedLicenseRequest(Message* msg, +void Pack_ODK_PreparedLicenseRequest(ODK_Message* msg, const ODK_PreparedLicenseRequest* obj); -void Pack_ODK_PreparedRenewalRequest(Message* msg, +void Pack_ODK_PreparedRenewalRequest(ODK_Message* msg, const ODK_PreparedRenewalRequest* obj); void Pack_ODK_PreparedProvisioningRequest( - Message* msg, const ODK_PreparedProvisioningRequest* obj); + ODK_Message* msg, const ODK_PreparedProvisioningRequest* obj); /* odk unpack */ -void Unpack_ODK_LicenseResponse(Message* msg, ODK_LicenseResponse* obj); -void Unpack_ODK_RenewalResponse(Message* msg, ODK_RenewalResponse* obj); -void Unpack_ODK_ProvisioningResponse(Message* msg, +void Unpack_ODK_LicenseResponse(ODK_Message* msg, ODK_LicenseResponse* obj); +void Unpack_ODK_RenewalResponse(ODK_Message* msg, ODK_RenewalResponse* obj); +void Unpack_ODK_ProvisioningResponse(ODK_Message* msg, ODK_ProvisioningResponse* obj); /* kdo pack */ -void Pack_ODK_LicenseResponse(Message* msg, const ODK_LicenseResponse* obj); -void Pack_ODK_RenewalResponse(Message* msg, const ODK_RenewalResponse* obj); -void Pack_ODK_ProvisioningResponse(Message* msg, +void Pack_ODK_LicenseResponse(ODK_Message* msg, const ODK_LicenseResponse* obj); +void Pack_ODK_RenewalResponse(ODK_Message* msg, const ODK_RenewalResponse* obj); +void Pack_ODK_ProvisioningResponse(ODK_Message* msg, const ODK_ProvisioningResponse* obj); /* kdo unpack */ -void Unpack_ODK_PreparedLicenseRequest(Message* msg, +void Unpack_ODK_PreparedLicenseRequest(ODK_Message* msg, ODK_PreparedLicenseRequest* obj); -void Unpack_ODK_PreparedRenewalRequest(Message* msg, +void Unpack_ODK_PreparedRenewalRequest(ODK_Message* msg, ODK_PreparedRenewalRequest* obj); void Unpack_ODK_PreparedProvisioningRequest( - Message* msg, ODK_PreparedProvisioningRequest* obj); + ODK_Message* msg, ODK_PreparedProvisioningRequest* obj); -void Unpack_ODK_PreparedCommonRequest(Message* msg, +void Unpack_ODK_PreparedCommonRequest(ODK_Message* msg, ODK_PreparedCommonRequest* obj); #ifdef __cplusplus diff --git a/libwvdrmengine/oemcrypto/odk/src/serialization_base.c b/libwvdrmengine/oemcrypto/odk/src/serialization_base.c index 1b32d055..b9d55452 100644 --- a/libwvdrmengine/oemcrypto/odk/src/serialization_base.c +++ b/libwvdrmengine/oemcrypto/odk/src/serialization_base.c @@ -4,71 +4,61 @@ #include "serialization_base.h" +#include #include #include #include #include "OEMCryptoCENCCommon.h" +#include "odk_message.h" +#include "odk_message_priv.h" #include "odk_overflow.h" -struct _Message { - uint8_t* base; - size_t capacity; - size_t size; /* bytes written */ - size_t read_offset; /* bytes read */ - MessageStatus status; -}; - -bool ValidMessage(Message* message) { - if (message == NULL) { - return false; - } - if (message->status != MESSAGE_STATUS_OK) { - return false; - } - if (message->base == NULL) { - message->status = MESSAGE_STATUS_NULL_POINTER_ERROR; - return false; - } - if (message->size > message->capacity || - message->read_offset > message->size) { - message->status = MESSAGE_STATUS_OVERFLOW_ERROR; - return false; - } - return true; +/* + * An ODK_Message_Impl pointer must only be obtained by calling GetMessageImpl. + * This forces any message to pass the validity check before being operated on, + * which means that no function can modify or access the internals of a message + * without having it be validated first. + */ +static ODK_Message_Impl* GetMessageImpl(ODK_Message* message) { + if (!ODK_Message_IsValid(message)) return NULL; + return (ODK_Message_Impl*)message; } -static void PackBytes(Message* message, const uint8_t* ptr, size_t count) { - if (count <= message->capacity - message->size) { - memcpy((void*)(message->base + message->size), (void*)ptr, count); - message->size += count; +static void PackBytes(ODK_Message* message, const uint8_t* ptr, size_t count) { + ODK_Message_Impl* message_impl = GetMessageImpl(message); + if (!message_impl) return; + if (count <= message_impl->capacity - message_impl->size) { + memcpy((void*)(message_impl->base + message_impl->size), (const void*)ptr, + count); + message_impl->size += count; } else { - message->status = MESSAGE_STATUS_OVERFLOW_ERROR; + message_impl->status = MESSAGE_STATUS_OVERFLOW_ERROR; } } -void Pack_enum(Message* message, int value) { +void Pack_enum(ODK_Message* message, int value) { uint32_t v32 = value; Pack_uint32_t(message, &v32); } -void Pack_bool(Message* message, const bool* value) { - if (!ValidMessage(message)) return; +void Pack_bool(ODK_Message* message, const bool* value) { + assert(value); uint8_t data[4] = {0}; data[3] = *value ? 1 : 0; PackBytes(message, data, sizeof(data)); } -void Pack_uint16_t(Message* message, const uint16_t* value) { - if (!ValidMessage(message)) return; +void Pack_uint16_t(ODK_Message* message, const uint16_t* value) { + assert(value); uint8_t data[2] = {0}; data[0] = *value >> 8; data[1] = *value >> 0; PackBytes(message, data, sizeof(data)); } -void Pack_uint32_t(Message* message, const uint32_t* value) { - if (!ValidMessage(message)) return; +void Pack_uint32_t(ODK_Message* message, const uint32_t* value) { + assert(value); uint8_t data[4] = {0}; data[0] = *value >> 24; data[1] = *value >> 16; @@ -77,160 +67,112 @@ void Pack_uint32_t(Message* message, const uint32_t* value) { PackBytes(message, data, sizeof(data)); } -void Pack_uint64_t(Message* message, const uint64_t* value) { - if (!ValidMessage(message)) return; +void Pack_uint64_t(ODK_Message* message, const uint64_t* value) { + assert(value); uint32_t hi = *value >> 32; uint32_t lo = *value; Pack_uint32_t(message, &hi); Pack_uint32_t(message, &lo); } -void PackArray(Message* message, const uint8_t* base, size_t size) { - if (!ValidMessage(message)) return; +void PackArray(ODK_Message* message, const uint8_t* base, size_t size) { PackBytes(message, base, size); } -void Pack_OEMCrypto_Substring(Message* msg, const OEMCrypto_Substring* obj) { +void Pack_OEMCrypto_Substring(ODK_Message* message, + const OEMCrypto_Substring* obj) { + assert(obj); uint32_t offset = (uint32_t)obj->offset; uint32_t length = (uint32_t)obj->length; - Pack_uint32_t(msg, &offset); - Pack_uint32_t(msg, &length); + Pack_uint32_t(message, &offset); + Pack_uint32_t(message, &length); } -static void UnpackBytes(Message* message, uint8_t* ptr, size_t count) { - if (count <= message->size - message->read_offset) { - memcpy((void*)ptr, (void*)(message->base + message->read_offset), count); - message->read_offset += count; +static void UnpackBytes(ODK_Message* message, uint8_t* ptr, size_t count) { + assert(ptr); + ODK_Message_Impl* message_impl = GetMessageImpl(message); + if (!message_impl) return; + if (count <= message_impl->size - message_impl->read_offset) { + memcpy((void*)ptr, (void*)(message_impl->base + message_impl->read_offset), + count); + message_impl->read_offset += count; } else { - message->status = MESSAGE_STATUS_UNDERFLOW_ERROR; + message_impl->status = MESSAGE_STATUS_UNDERFLOW_ERROR; } } -int Unpack_enum(Message* message) { +int Unpack_enum(ODK_Message* message) { uint32_t v32; Unpack_uint32_t(message, &v32); return v32; } -void Unpack_bool(Message* message, bool* value) { - if (!ValidMessage(message)) return; +void Unpack_bool(ODK_Message* message, bool* value) { uint8_t data[4] = {0}; UnpackBytes(message, data, sizeof(data)); + assert(value); *value = (0 != data[3]); } -void Unpack_uint16_t(Message* message, uint16_t* value) { - if (!ValidMessage(message)) return; +void Unpack_uint16_t(ODK_Message* message, uint16_t* value) { + assert(value); uint8_t data[2] = {0}; UnpackBytes(message, data, sizeof(data)); *value = data[0]; *value = *value << 8 | data[1]; } -void Unpack_uint32_t(Message* message, uint32_t* value) { - if (!ValidMessage(message)) return; +void Unpack_uint32_t(ODK_Message* message, uint32_t* value) { + ODK_Message_Impl* message_impl = GetMessageImpl(message); + if (!message_impl) return; uint8_t data[4] = {0}; UnpackBytes(message, data, sizeof(data)); + assert(value); *value = data[0]; *value = *value << 8 | data[1]; *value = *value << 8 | data[2]; *value = *value << 8 | data[3]; } -void Unpack_uint64_t(Message* message, uint64_t* value) { - if (!ValidMessage(message)) return; +void Unpack_uint64_t(ODK_Message* message, uint64_t* value) { uint32_t hi = 0; uint32_t lo = 0; Unpack_uint32_t(message, &hi); Unpack_uint32_t(message, &lo); + assert(value); *value = hi; *value = *value << 32 | lo; } -void Unpack_OEMCrypto_Substring(Message* msg, OEMCrypto_Substring* obj) { +void Unpack_OEMCrypto_Substring(ODK_Message* message, + OEMCrypto_Substring* obj) { uint32_t offset = 0, length = 0; - Unpack_uint32_t(msg, &offset); - Unpack_uint32_t(msg, &length); - if (!ValidMessage(msg)) return; + Unpack_uint32_t(message, &offset); + Unpack_uint32_t(message, &length); + ODK_Message_Impl* message_impl = GetMessageImpl(message); + if (!message_impl) return; + /* Each substring should be contained within the message body, which is in the * total message, just after the core message. The offset of a substring is * relative to the message body. So we need to verify: - * 0 < offset and offset + length < message->capacity - message->size - * or offset + length + message->size < message->capacity + * 0 < offset and offset + length < message_impl->capacity - + * message_impl->size or offset + length + message_impl->size < + * message_impl->capacity */ size_t substring_end = 0; /* = offset + length; */ - size_t end = 0; /* = substring_end + message->size; */ + size_t end = 0; /* = substring_end + message_impl->size; */ if (odk_add_overflow_ux(offset, length, &substring_end) || - odk_add_overflow_ux(substring_end, msg->size, &end) || - end > msg->capacity) { - msg->status = MESSAGE_STATUS_OVERFLOW_ERROR; + odk_add_overflow_ux(substring_end, message_impl->size, &end) || + end > message_impl->capacity) { + message_impl->status = MESSAGE_STATUS_OVERFLOW_ERROR; return; } + assert(obj); obj->offset = offset; obj->length = length; } /* copy out */ -void UnpackArray(Message* message, uint8_t* address, size_t size) { - if (!ValidMessage(message)) return; +void UnpackArray(ODK_Message* message, uint8_t* address, size_t size) { UnpackBytes(message, address, size); } - -/* - * The message structure, which is separate from the buffer, - * is initialized to reference the buffer - */ -void InitMessage(Message* message, uint8_t* buffer, size_t capacity) { - if (message == NULL) return; - memset(message, 0, sizeof(Message)); - message->base = buffer; - message->capacity = capacity; - message->size = 0; - message->read_offset = 0; - message->status = MESSAGE_STATUS_OK; -} - -/* - * Set the message to an empty state - */ -void ResetMessage(Message* message) { - message->size = 0; - message->read_offset = 0; - message->status = MESSAGE_STATUS_OK; -} - -uint8_t* GetBase(Message* message) { - if (message == NULL) return NULL; - return message->base; -} - -size_t GetCapacity(Message* message) { - if (message == NULL) return 0; - return message->capacity; -} - -size_t GetSize(Message* message) { - if (message == NULL) return 0; - return message->size; -} - -void SetSize(Message* message, size_t size) { - if (message == NULL) return; - if (size > message->capacity) - message->status = MESSAGE_STATUS_OVERFLOW_ERROR; - else - message->size = size; -} - -MessageStatus GetStatus(Message* message) { return message->status; } - -void SetStatus(Message* message, MessageStatus status) { - message->status = status; -} - -size_t GetOffset(Message* message) { - if (message == NULL) return 0; - return message->read_offset; -} - -size_t SizeOfMessageStruct() { return sizeof(Message); } diff --git a/libwvdrmengine/oemcrypto/odk/src/serialization_base.h b/libwvdrmengine/oemcrypto/odk/src/serialization_base.h index 9e7776bf..36276449 100644 --- a/libwvdrmengine/oemcrypto/odk/src/serialization_base.h +++ b/libwvdrmengine/oemcrypto/odk/src/serialization_base.h @@ -13,74 +13,24 @@ extern "C" { #include #include "OEMCryptoCENCCommon.h" +#include "odk_message.h" -#define SIZE_OF_MESSAGE_STRUCT 64 +void Pack_enum(ODK_Message* message, int value); +void Pack_bool(ODK_Message* message, const bool* value); +void Pack_uint16_t(ODK_Message* message, const uint16_t* value); +void Pack_uint32_t(ODK_Message* message, const uint32_t* value); +void Pack_uint64_t(ODK_Message* message, const uint64_t* value); +void PackArray(ODK_Message* message, const uint8_t* base, size_t size); +void Pack_OEMCrypto_Substring(ODK_Message* msg, const OEMCrypto_Substring* obj); -/* - * Description: - * Point |msg| to stack-array |blk|. - * |blk| is guaranteed large enough to hold a |Message| struct. - * |blk| cannot be used in the same scope as a variable name. - * |msg| points to valid memory in the same scope |AllocateMessage| is used. - * Parameters: - * msg: pointer to pointer to |Message| struct - * blk: variable name for stack-array - */ -#define AllocateMessage(msg, blk) \ - uint8_t blk[SIZE_OF_MESSAGE_STRUCT]; \ - *(msg) = (Message*)(blk) - -typedef struct _Message Message; - -typedef enum { - MESSAGE_STATUS_OK, - MESSAGE_STATUS_UNKNOWN_ERROR, - MESSAGE_STATUS_OVERFLOW_ERROR, - MESSAGE_STATUS_UNDERFLOW_ERROR, - MESSAGE_STATUS_PARSE_ERROR, - MESSAGE_STATUS_NULL_POINTER_ERROR, - MESSAGE_STATUS_API_VALUE_ERROR -} MessageStatus; - -bool ValidMessage(Message* message); - -void Pack_enum(Message* message, int value); -void Pack_bool(Message* message, const bool* value); -void Pack_uint16_t(Message* message, const uint16_t* value); -void Pack_uint32_t(Message* message, const uint32_t* value); -void Pack_uint64_t(Message* message, const uint64_t* value); -void PackArray(Message* message, const uint8_t* base, size_t size); -void Pack_OEMCrypto_Substring(Message* msg, const OEMCrypto_Substring* obj); - -int Unpack_enum(Message* message); -void Unpack_bool(Message* message, bool* value); -void Unpack_uint16_t(Message* message, uint16_t* value); -void Unpack_uint32_t(Message* message, uint32_t* value); -void Unpack_uint64_t(Message* message, uint64_t* value); -void UnpackArray(Message* message, uint8_t* address, +int Unpack_enum(ODK_Message* message); +void Unpack_bool(ODK_Message* message, bool* value); +void Unpack_uint16_t(ODK_Message* message, uint16_t* value); +void Unpack_uint32_t(ODK_Message* message, uint32_t* value); +void Unpack_uint64_t(ODK_Message* message, uint64_t* value); +void UnpackArray(ODK_Message* message, uint8_t* address, size_t size); /* copy out */ -void Unpack_OEMCrypto_Substring(Message* msg, OEMCrypto_Substring* obj); - -/* - * Initialize a message structure to reference a separate buffer. The caller - * is responsible for ensuring that the buffer remains allocated for the - * lifetime of the message. - */ -void InitMessage(Message* message, uint8_t* buffer, size_t capacity); - -/* - * Reset an existing the message to an empty state - */ -void ResetMessage(Message* message); -uint8_t* GetBase(Message* message); -size_t GetCapacity(Message* message); -size_t GetSize(Message* message); -void SetSize(Message* message, size_t size); -MessageStatus GetStatus(Message* message); -void SetStatus(Message* message, MessageStatus status); -size_t GetOffset(Message* message); - -size_t SizeOfMessageStruct(); +void Unpack_OEMCrypto_Substring(ODK_Message* msg, OEMCrypto_Substring* obj); #ifdef __cplusplus } // extern "C" diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp index d87e4647..5ea04c15 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp @@ -99,11 +99,9 @@ OEMCryptoResult odk_deserialize_RenewalResponse( // odk_kdo method, we call Unpack_ODK_PreparedRenewalRequest private method. // playback_time cannot be captured from publicly exposed API // ODK_ParseRenewal. - uint8_t blk[SIZE_OF_MESSAGE_STRUCT]; - Message* msg = reinterpret_cast(blk); - InitMessage(msg, const_cast(buf), len); - SetSize(msg, len); - Unpack_ODK_PreparedRenewalRequest(msg, renewal_msg); + ODK_Message msg = ODK_Message_Create(const_cast(buf), len); + ODK_Message_SetSize(&msg, len); + Unpack_ODK_PreparedRenewalRequest(&msg, renewal_msg); return OEMCrypto_SUCCESS; } diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_provisioning_response_fuzz_with_mutator.cpp b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_provisioning_response_fuzz_with_mutator.cpp index 2be4a91b..17787a41 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_provisioning_response_fuzz_with_mutator.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_provisioning_response_fuzz_with_mutator.cpp @@ -6,15 +6,13 @@ #include #include "fuzzing/odk_fuzz_helper.h" -#include "odk_attributes.h" namespace oemcrypto_core_message { // The custom mutator: Ensure that each input can be deserialized properly // by ODK function after mutation. extern "C" size_t LLVMFuzzerCustomMutator(uint8_t* data, size_t size, - size_t max_size, - unsigned int seed UNUSED) { + size_t max_size, unsigned int seed) { const size_t kProvisioningResponseArgsSize = sizeof(ODK_ParseProvisioning_Args); if (size < kProvisioningResponseArgsSize) { diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_renewal_response_fuzz_with_mutator.cpp b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_renewal_response_fuzz_with_mutator.cpp index 25fa7b00..0073c4ee 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_renewal_response_fuzz_with_mutator.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_renewal_response_fuzz_with_mutator.cpp @@ -6,15 +6,13 @@ #include #include "fuzzing/odk_fuzz_helper.h" -#include "odk_attributes.h" namespace oemcrypto_core_message { // The custom mutator: Ensure that each input can be deserialized properly // by ODK function after mutation. extern "C" size_t LLVMFuzzerCustomMutator(uint8_t* data, size_t size, - size_t max_size, - unsigned int seed UNUSED) { + size_t max_size, unsigned int seed) { const size_t kRenewalResponseArgsSize = sizeof(ODK_ParseRenewal_Args); if (size < kRenewalResponseArgsSize) { return 0; diff --git a/libwvdrmengine/oemcrypto/odk/test/odk_test.cpp b/libwvdrmengine/oemcrypto/odk/test/odk_test.cpp index b6526df8..6428fd1e 100644 --- a/libwvdrmengine/oemcrypto/odk/test/odk_test.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/odk_test.cpp @@ -4,8 +4,6 @@ #include "odk.h" -#include // TODO(b/147944591): use this one? Or odk_endian.h? - #include #include diff --git a/libwvdrmengine/oemcrypto/odk/test/odk_test_helper.cpp b/libwvdrmengine/oemcrypto/odk/test/odk_test_helper.cpp index 167d9e59..9650c337 100644 --- a/libwvdrmengine/oemcrypto/odk/test/odk_test_helper.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/odk_test_helper.cpp @@ -4,8 +4,6 @@ #include "odk_test_helper.h" -#include - #include #include #include @@ -15,6 +13,7 @@ #include "OEMCryptoCENCCommon.h" #include "gtest/gtest.h" +#include "odk_endian.h" #include "odk_structs.h" #include "odk_structs_priv.h" @@ -226,24 +225,27 @@ OEMCryptoResult ODK_WriteSingleField(uint8_t* buf, const ODK_Field* field) { } switch (field->type) { case ODK_UINT16: { - const uint16_t u16 = htobe16(*static_cast(field->value)); + const uint16_t u16 = + oemcrypto_htobe16(*static_cast(field->value)); memcpy(buf, &u16, sizeof(u16)); break; } case ODK_UINT32: { - const uint32_t u32 = htobe32(*static_cast(field->value)); + const uint32_t u32 = + oemcrypto_htobe32(*static_cast(field->value)); memcpy(buf, &u32, sizeof(u32)); break; } case ODK_UINT64: { - const uint64_t u64 = htobe64(*static_cast(field->value)); + const uint64_t u64 = + oemcrypto_htobe64(*static_cast(field->value)); memcpy(buf, &u64, sizeof(u64)); break; } case ODK_SUBSTRING: { OEMCrypto_Substring* s = static_cast(field->value); - const uint32_t off = htobe32(s->offset); - const uint32_t len = htobe32(s->length); + const uint32_t off = oemcrypto_htobe32(s->offset); + const uint32_t len = oemcrypto_htobe32(s->length); memcpy(buf, &off, sizeof(off)); memcpy(buf + sizeof(off), &len, sizeof(len)); break; @@ -271,19 +273,19 @@ OEMCryptoResult ODK_ReadSingleField(const uint8_t* buf, case ODK_UINT16: { memcpy(field->value, buf, sizeof(uint16_t)); uint16_t* u16p = static_cast(field->value); - *u16p = be16toh(*u16p); + *u16p = oemcrypto_be16toh(*u16p); break; } case ODK_UINT32: { memcpy(field->value, buf, sizeof(uint32_t)); uint32_t* u32p = static_cast(field->value); - *u32p = be32toh(*u32p); + *u32p = oemcrypto_be32toh(*u32p); break; } case ODK_UINT64: { memcpy(field->value, buf, sizeof(uint64_t)); uint64_t* u64p = static_cast(field->value); - *u64p = be64toh(*u64p); + *u64p = oemcrypto_be64toh(*u64p); break; } case ODK_SUBSTRING: { @@ -292,8 +294,8 @@ OEMCryptoResult ODK_ReadSingleField(const uint8_t* buf, uint32_t len = 0; memcpy(&off, buf, sizeof(off)); memcpy(&len, buf + sizeof(off), sizeof(len)); - s->offset = be32toh(off); - s->length = be32toh(len); + s->offset = oemcrypto_be32toh(off); + s->length = oemcrypto_be32toh(len); break; } case ODK_DEVICEID: @@ -318,7 +320,7 @@ OEMCryptoResult ODK_DumpSingleField(const uint8_t* buf, case ODK_UINT16: { uint16_t val; memcpy(&val, buf, sizeof(uint16_t)); - val = be16toh(val); + val = oemcrypto_be16toh(val); std::cerr << field->name << ": " << val << " = 0x" << std::hex << val << "\n"; break; @@ -326,7 +328,7 @@ OEMCryptoResult ODK_DumpSingleField(const uint8_t* buf, case ODK_UINT32: { uint32_t val; memcpy(&val, buf, sizeof(uint32_t)); - val = be32toh(val); + val = oemcrypto_be32toh(val); std::cerr << field->name << ": " << val << " = 0x" << std::hex << val << "\n"; break; @@ -334,7 +336,7 @@ OEMCryptoResult ODK_DumpSingleField(const uint8_t* buf, case ODK_UINT64: { uint64_t val; memcpy(&val, buf, sizeof(uint64_t)); - val = be64toh(val); + val = oemcrypto_be64toh(val); std::cerr << field->name << ": " << val << " = 0x" << std::hex << val << "\n"; break; From 504b05492b1a1651b16e47ba84734a6c7ace6531 Mon Sep 17 00:00:00 2001 From: Fred Gylys-Colwell Date: Fri, 9 Apr 2021 18:19:16 -0700 Subject: [PATCH 2/9] Use either spelling of AllocateSecureBuffer in dynamic adapter Merge from Widevine repo of http://go/wvgerrit/121883 There was a problem in the v16.3 header that did not rename OEMCrypto_AllocateSecureBuffer to _oecc109 or OEMCrypto_FreeSecureBuffer to _oecc110. These functions are only used in testing. This changes the dynamic adapter to accept either name for those functions. Bug: 171121061 Change-Id: I30121c7524e8db580ba85f3e686a7a7c429d80a9 --- .../cdm/core/src/oemcrypto_adapter_dynamic.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp index e3633a2c..194b2ee6 100644 --- a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp +++ b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp @@ -885,6 +885,16 @@ class Adapter { LOOKUP_ALL(16, MinorAPIVersion, OEMCrypto_MinorAPIVersion); // clang-format on + // There was a mistake in version 16.3 of the header that did not rename + // OEMCrypto_AllocateSecureBuffer or OEMCrypto_FreeSecureBuffer + if (level1_.AllocateSecureBuffer == NULL || + level1_.FreeSecureBuffer == NULL) { + level1_.AllocateSecureBuffer = (L1_AllocateSecureBuffer_t)dlsym( + level1_library_, "OEMCrypto_AllocateSecureBuffer"); + level1_.FreeSecureBuffer = (L1_FreeSecureBuffer_t)dlsym( + level1_library_, "OEMCrypto_FreeSecureBuffer"); + } + // TODO(119830252): make the code below available to a static adapter. // Check if the keybox or oem certificate is valid, if so, we are finished // with initialization. From e998b08de7d9e0ea8cee5bf4f728f0534cc31fe9 Mon Sep 17 00:00:00 2001 From: Fred Gylys-Colwell Date: Fri, 9 Apr 2021 18:21:22 -0700 Subject: [PATCH 3/9] Clean up duration tests Merge from Widevine repo of http://go/wvgerrit/120903 Some comments in the duration tests had stale numbers in them. This was fixed. Also, the tests CdmUseCase_LicenseDuration were failing with a v16 CDM and a v15 OEMCrypto because the exact cutoff time is different in those two cases. That is exactly why specifying the license duration is not recommended. The tests have been modified to handle both acceptable behaviors. Bug: 182237739 Change-Id: I05765beacfe69d02e7366bb3f651f0d5888ab3e5 --- .../cdm/core/test/duration_use_case_test.cpp | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/libwvdrmengine/cdm/core/test/duration_use_case_test.cpp b/libwvdrmengine/cdm/core/test/duration_use_case_test.cpp index fe7e71b6..d8c83938 100644 --- a/libwvdrmengine/cdm/core/test/duration_use_case_test.cpp +++ b/libwvdrmengine/cdm/core/test/duration_use_case_test.cpp @@ -468,7 +468,7 @@ class CdmDurationTest : public WvCdmTestBaseWithEngine, // // In the document, we use realistic rental times in hours or days. In these // tests, we will use round numbers so that it is easier to read. For example, -// instead of a seven day rental duration, we will use a 200 rental duration. +// instead of a seven day rental duration, we will use a 100 rental duration. /*****************************************************************************/ /*****************************************************************************/ @@ -477,8 +477,6 @@ class CdmDurationTest : public WvCdmTestBaseWithEngine, class CdmUseCase_Streaming : public CdmDurationTest { public: CdmUseCase_Streaming() : CdmDurationTest("CDM_Streaming") { - // Rental duration = 3 hours hard. (use 300 for readability) - // Playback duration = 0 (unlimited) timer_limits_.soft_enforce_rental_duration = false; timer_limits_.rental_duration_seconds = 40; timer_limits_.total_playback_duration_seconds = 0; @@ -1055,11 +1053,11 @@ class RenewalTest : public CdmDurationTest { void LoadRenewal(uint64_t time_of_load, const RenewalPolicy& renewal_policy) { ASSERT_NE(renewal_in_flight_, nullptr); std::string http_response; - // TODO(fredgc): Tune this. Most of the network latency will probably show - // up in the next few commands. I think the tests have enough slop to - // account for reasonable latency with the current value of - // kRoundTripTime. But We'll know I made a mistake if we see errors about - // "Test Clock skew..." in the SleepUntil call below. + // Most of the network latency will probably show up in the next few + // commands. I think the tests have enough slop to account for reasonable + // latency with the current value of kRoundTripTime. But We'll know I made a + // mistake if we see errors about "Test Clock skew..." in the SleepUntil + // call below. ASSERT_TRUE(renewal_in_flight_->GetResponse(&http_response)); int status_code = renewal_in_flight_->GetStatusCode(http_response); ASSERT_EQ(kHttpOk, status_code); @@ -1683,9 +1681,9 @@ INSTANTIATE_TEST_CASE_P(Both, CdmUseCase_UnlimitedStreaming, class CdmUseCase_LicenseDuration : public CdmDurationTest { public: CdmUseCase_LicenseDuration() : CdmDurationTest("CDM_LicenseDuration") { - // Rental duration = 3 hours hard. (use 300 for readability) - // Playback duration = 0 (unlimited) timer_limits_.soft_enforce_rental_duration = true; + // The policy does not specify a rental duration, but the server adjusts it + // so that it looks like this to a v16 device. timer_limits_.rental_duration_seconds = 40u; timer_limits_.soft_enforce_playback_duration = false; timer_limits_.total_playback_duration_seconds = 40u; @@ -1695,13 +1693,18 @@ class CdmUseCase_LicenseDuration : public CdmDurationTest { // Playback within rental duration. TEST_P(CdmUseCase_LicenseDuration, Case1) { // Allow playback within the playback window. - LoadAndAllowPlayback(start_of_playback_, EndOfPlaybackWindow()); + LoadAndAllowPlayback(start_of_playback_, EndOfRentalWindow()); } // Playback exceeds rental duration. TEST_P(CdmUseCase_LicenseDuration, Case2) { - // Allow playback within the playback window, but not beyond. - LoadAndTerminatePlayback(start_of_playback_, EndOfPlaybackWindow()); + LoadAndAllowPlayback(start_of_playback_, EndOfRentalWindow()); + // Do not allow playback after playback window. For a v16 CDM with a v15 + // OEMCrypto, playback is cutoff at the rental window, and for a v16 CDM with + // a v16 OEMCrypto, playback is allowed a little longer. In both cases, + // playback is not allowed after the end of the playback window. + SleepUntil(EndOfPlaybackWindow() + kFudge); + FailDecrypt(); } // Playback with stops/restarts within rental duration, last one exceeds @@ -1713,8 +1716,12 @@ TEST_P(CdmUseCase_LicenseDuration, Case3) { start_of_playback_ + 3 * kPlayDuration); UnloadLicense(); AllowLenience(); - LoadAndTerminatePlayback(start_of_playback_ + 4 * kPlayDuration, - EndOfPlaybackWindow()); + LoadAndAllowPlayback(start_of_playback_ + 4 * kPlayDuration, + EndOfRentalWindow()); + // As above, do not allow playback after playback window. + AllowLenience(); + SleepUntil(EndOfPlaybackWindow() + kFudge); + FailDecrypt(); } // Playback within rental duration, restart exceeds playback duration. From d265a5fe73256dd4d637d4de38694e283d5dc5d1 Mon Sep 17 00:00:00 2001 From: Fred Gylys-Colwell Date: Fri, 9 Apr 2021 18:24:36 -0700 Subject: [PATCH 4/9] Update OEMCryptoCENC.h header to obfuscate missing functions This CL adds AllocateSecureBuffer and FreeSecureBuffer to the list of function names that are obfuscated. It also corrects some spelling and formatting in OEMCrypto headers. This is still version 16.4. Merge from Widevine repo of http://go/wvgerrit/115803 http://go/wvgerrit/111104 http://go/wvgerrit/108703 http://go/wvgerrit/108703 Bug: 139814713 Bug: 141202789 bug: 168634557 bug: 168635928 bug: 168637230 bug: 168639188 Change-Id: I6f06549b2cf104c6751b2947964569e974fcdcd2 --- .../oemcrypto/include/OEMCryptoCENC.h | 122 +++++++++++++++--- libwvdrmengine/oemcrypto/include/level3.h | 7 +- 2 files changed, 106 insertions(+), 23 deletions(-) diff --git a/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h b/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h index 4bbdfa67..04ef8e1b 100644 --- a/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h +++ b/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h @@ -480,8 +480,8 @@ typedef enum OEMCrypto_ProvisioningMethod { OEMCrypto_ProvisioningError = 0, // Device cannot be provisioned. OEMCrypto_DrmCertificate = 1, // Device has baked in DRM certificate // (level 3 only) - OEMCrypto_Keybox = 2, // Device has factory installed unique keybox. - OEMCrypto_OEMCertificate = 3 // Device has factory installed OEM certificate. + OEMCrypto_Keybox = 2, // Device has factory installed unique keybox. + OEMCrypto_OEMCertificate = 3 // Device has factory installed OEM certificate. } OEMCrypto_ProvisioningMethod; /** @@ -489,7 +489,7 @@ typedef enum OEMCrypto_ProvisioningMethod { */ #define OEMCrypto_Supports_RSA_2048bit 0x1 #define OEMCrypto_Supports_RSA_3072bit 0x2 -#define OEMCrypto_Supports_RSA_CAST 0x10 +#define OEMCrypto_Supports_RSA_CAST 0x10 #define OEMCrypto_Supports_ECC_secp256r1 0x100 #define OEMCrypto_Supports_ECC_secp384r1 0x200 #define OEMCrypto_Supports_ECC_secp521r1 0x400 @@ -504,12 +504,12 @@ typedef enum OEMCrypto_ProvisioningMethod { /** * Return values from OEMCrypto_GetAnalogOutputFlags. */ -#define OEMCrypto_No_Analog_Output 0x0 -#define OEMCrypto_Supports_Analog_Output 0x1 -#define OEMCrypto_Can_Disable_Analog_Ouptput 0x2 -#define OEMCrypto_Supports_CGMS_A 0x4 +#define OEMCrypto_No_Analog_Output 0x0 +#define OEMCrypto_Supports_Analog_Output 0x1 +#define OEMCrypto_Can_Disable_Analog_Ouptput 0x2 +#define OEMCrypto_Supports_CGMS_A 0x4 // Unknown_Analog_Output is used only for backwards compatibility. -#define OEMCrypto_Unknown_Analog_Output (1<<31) +#define OEMCrypto_Unknown_Analog_Output (1 << 31) /// @} @@ -622,6 +622,8 @@ typedef enum OEMCrypto_ProvisioningMethod { #define OEMCrypto_DecryptCENC _oecc105 #define OEMCrypto_LoadDRMPrivateKey _oecc107 #define OEMCrypto_MinorAPIVersion _oecc108 +#define OEMCrypto_AllocateSecureBuffer _oecc109 +#define OEMCrypto_FreeSecureBuffer _oecc110 // clang-format on /// @addtogroup initcontrol @@ -956,7 +958,7 @@ OEMCryptoResult OEMCrypto_GenerateNonce(OEMCrypto_SESSION session, /** * OEMCrypto will use ODK_PrepareCoreLicenseRequest to prepare the core * message. If it returns OEMCrypto_SUCCESS, then OEMCrypto shall sign the - * the message body using the DRM certificate's private key. If it returns an + * message body using the DRM certificate's private key. If it returns an * error, the error should be returned by OEMCrypto to the CDM layer. * ODK_PrepareCoreLicenseRequest is described in the document "Widevine Core * Message Serialization". @@ -1667,6 +1669,7 @@ OEMCryptoResult OEMCrypto_LoadKeys( * @param[in] signature: pointer to memory containing the signature. * @param[in] signature_length: length of the signature, in bytes. * + * @retval OEMCrypto_SUCCESS success OEMCrypto_ERROR_NO_DEVICE_KEY * @retval OEMCrypto_SUCCESS success * @retval OEMCrypto_ERROR_NO_DEVICE_KEY * @retval OEMCrypto_ERROR_INVALID_SESSION @@ -3011,10 +3014,10 @@ OEMCryptoResult OEMCrypto_GetDeviceID(uint8_t* device_id, /** * Return the Key Data field from the Keybox. * - * @param[out] keyData: pointer to the buffer to hold the Key Data field from + * @param[out] key_data: pointer to the buffer to hold the Key Data field from * the Keybox - * @param[in,out] keyDataLength: on input, the allocated buffer size. On output, - * the number of bytes in Key Data + * @param[in,out] key_data_length: on input, the allocated buffer size. On + * output, the number of bytes in Key Data * * @retval OEMCrypto_SUCCESS success * @retval OEMCrypto_ERROR_SHORT_BUFFER if the buffer is too small to return @@ -4722,12 +4725,25 @@ OEMCryptoResult OEMCrypto_FreeSecureBuffer( * current version of OEMCrypto. They are being declared here to help with * backwards compatibility. */ + +/* + * OEMCrypto_GenerateSignature + * @deprecated + * Not required for the current version of OEMCrypto. Declared here to + * help with backward compatibility. + */ OEMCryptoResult OEMCrypto_GenerateSignature(OEMCrypto_SESSION session, const uint8_t* message, size_t message_length, uint8_t* signature, size_t* signature_length); +/* + * OEMCrypto_RewrapDeviceRSAKey30 + * @deprecated + * Not required for the current version of OEMCrypto. Declared here to + * help with backward compatibility. + */ OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey30( OEMCrypto_SESSION session, const uint32_t* unaligned_nonce, const uint8_t* encrypted_message_key, size_t encrypted_message_key_length, @@ -4735,6 +4751,12 @@ OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey30( const uint8_t* enc_rsa_key_iv, uint8_t* wrapped_rsa_key, size_t* wrapped_rsa_key_length); +/* + * OEMCrypto_RewrapDeviceRSAKey + * @deprecated + * Not required for the current version of OEMCrypto. Declared here to + * help with backward compatibility. + */ OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey( OEMCrypto_SESSION session, const uint8_t* message, size_t message_length, const uint8_t* signature, size_t signature_length, @@ -4742,26 +4764,70 @@ OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey( size_t enc_rsa_key_length, const uint8_t* enc_rsa_key_iv, uint8_t* wrapped_rsa_key, size_t* wrapped_rsa_key_length); +/* + * OEMCrypto_UpdateUsageTable + * @deprecated + * Not required for the current version of OEMCrypto. Declared here to + * help with backward compatibility. + */ OEMCryptoResult OEMCrypto_UpdateUsageTable(void); -OEMCryptoResult OEMCrypto_DeleteUsageEntry(OEMCrypto_SESSION, const uint8_t*, - size_t, const uint8_t*, size_t, - const uint8_t*, size_t); +/* + * OEMCrypto_DeleteUsageEntry + * @deprecated + * Not required for the current version of OEMCrypto. Declared here to + * help with backward compatibility. + */ +OEMCryptoResult OEMCrypto_DeleteUsageEntry( + OEMCrypto_SESSION session, const uint8_t* pst, size_t pst_length, + const uint8_t* message, size_t message_length, const uint8_t* signature, + size_t signature_length); -OEMCryptoResult OEMCrypto_ForceDeleteUsageEntry(const uint8_t*, size_t); +/* + * OEMCrypto_ForceDeleteUsageEntry + * @deprecated + * Not required for the current version of OEMCrypto. Declared here to + * help with backward compatibility. + */ +OEMCryptoResult OEMCrypto_ForceDeleteUsageEntry(const uint8_t* pst, + size_t pst_length); +/* + * OEMCrypto_CopyOldUsageEntry + * @deprecated + * Not required for the current version of OEMCrypto. Declared here to + * help with backward compatibility. + */ OEMCryptoResult OEMCrypto_CopyOldUsageEntry(OEMCrypto_SESSION session, const uint8_t* pst, size_t pst_length); +/* + * OEMCrypto_DeleteOldUsageTable + * @deprecated + * Not required for the current version of OEMCrypto. Declared here to + * help with backward compatibility. + */ OEMCryptoResult OEMCrypto_DeleteOldUsageTable(void); +/* + * OEMCrypto_CreateOldUsageEntry + * @deprecated + * Not required for the current version of OEMCrypto. Declared here to + * help with backward compatibility. + */ OEMCryptoResult OEMCrypto_CreateOldUsageEntry( uint64_t time_since_license_received, uint64_t time_since_first_decrypt, uint64_t time_since_last_decrypt, OEMCrypto_Usage_Entry_Status status, uint8_t* server_mac_key, uint8_t* client_mac_key, const uint8_t* pst, size_t pst_length); +/* + * OEMCrypto_GenerateDerivedKeys_V15 + * @deprecated + * Not required for the current version of OEMCrypto. Declared here to + * help with backward compatibility. + */ OEMCryptoResult OEMCrypto_GenerateDerivedKeys_V15( OEMCrypto_SESSION session, const uint8_t* mac_key_context, uint32_t mac_key_context_length, const uint8_t* enc_key_context, @@ -4773,18 +4839,36 @@ typedef struct { size_t offset; // offset into the pattern in blocks for this call. } OEMCrypto_CENCEncryptPatternDesc_V15; +/* + * OEMCrypto_DecryptCENC_V15 + * @deprecated + * Not required for the current version of OEMCrypto. Declared here to + * help with backward compatibility. + */ OEMCryptoResult OEMCrypto_DecryptCENC_V15( - OEMCrypto_SESSION session, const uint8_t* data_addr, size_t data_length, - bool is_encrypted, const uint8_t* iv, + OEMCrypto_SESSION session, const uint8_t* data_addr, + size_t data_addr_length, bool is_encrypted, const uint8_t* iv, size_t block_offset, // used for CTR "cenc" mode only. - OEMCrypto_DestBufferDesc* out_buffer_descriptor, + OEMCrypto_DestBufferDesc* out_buffer, const OEMCrypto_CENCEncryptPatternDesc_V15* pattern, uint8_t subsample_flags); +/* + * OEMCrypto_GetOEMPublicCertificate_V15 + * @deprecated + * Not required for the current version of OEMCrypto. Declared here to + * help with backward compatibility. + */ OEMCryptoResult OEMCrypto_GetOEMPublicCertificate_V15( OEMCrypto_SESSION session, uint8_t* public_cert, size_t* public_cert_length); +/* + * OEMCrypto_LoadDeviceRSAKey + * @deprecated + * Not required for the current version of OEMCrypto. Declared here to + * help with backward compatibility. + */ OEMCryptoResult OEMCrypto_LoadDeviceRSAKey(OEMCrypto_SESSION session, const uint8_t* wrapped_rsa_key, size_t wrapped_rsa_key_length); diff --git a/libwvdrmengine/oemcrypto/include/level3.h b/libwvdrmengine/oemcrypto/include/level3.h index 9573c167..8ae6646b 100644 --- a/libwvdrmengine/oemcrypto/include/level3.h +++ b/libwvdrmengine/oemcrypto/include/level3.h @@ -96,7 +96,6 @@ namespace wvoec3 { #define Level3_AllocateSecureBuffer _lcc111 #define Level3_FreeSecureBuffer _lcc112 #else -#define Level3_IsInApp _oecc00 #define Level3_Initialize _oecc01 #define Level3_Terminate _oecc02 #define Level3_InstallKeyboxOrOEMCert _oecc03 @@ -173,11 +172,11 @@ namespace wvoec3 { // of the two functions below. This is to be fixed when // OEMCrypto_AllocateSecureBuffer and OEMCrypto_FreeSecureBuffer are added to // OEMCryptoCENC.h -#define Level3_AllocateSecureBuffer OEMCrypto_AllocateSecureBuffer -#define Level3_FreeSecureBuffer OEMCrypto_FreeSecureBuffer +#define Level3_AllocateSecureBuffer OEMCrypto_AllocateSecureBuffer +#define Level3_FreeSecureBuffer OEMCrypto_FreeSecureBuffer #endif -#define Level3_GetInitializationState _oecl3o01 +#define Level3_GetInitializationState _oecl3o01 // clang-format on extern "C" { From 6628c7f693f6c25ddb64f4dc038db7e95a9efbd3 Mon Sep 17 00:00:00 2001 From: Fred Gylys-Colwell Date: Sat, 10 Apr 2021 11:11:31 -0700 Subject: [PATCH 5/9] Update OEMCrypto test comments and logs Merge from Widevine repo of http://go/wvgerrit/121886 This CL merges some changes from branch rvc-dev to sc-dev that prepared it for merge. One change is that the unit tests now say they are part of Android S instead of R. Bug: 180546871 Change-Id: I2ebbd8f7b8586389ebb75f3743a2dc2ad8caa214 --- libwvdrmengine/oemcrypto/test/README.md | 125 +++++++++ .../fuzz_tests/oemcrypto_decrypt_cenc_fuzz.cc | 8 +- .../test/fuzz_tests/oemcrypto_fuzz_helper.h | 4 +- .../oemcrypto_odkitee_dispatcher_fuzz.cc | 77 ++++++ .../oemcrypto/test/oec_device_features.cpp | 1 + .../oemcrypto/test/oec_session_util.cpp | 8 +- .../oemcrypto/test/oec_session_util.h | 5 +- .../oemcrypto/test/oemcrypto_test.cpp | 259 ++++++++++++++---- 8 files changed, 427 insertions(+), 60 deletions(-) create mode 100644 libwvdrmengine/oemcrypto/test/README.md create mode 100644 libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_odkitee_dispatcher_fuzz.cc diff --git a/libwvdrmengine/oemcrypto/test/README.md b/libwvdrmengine/oemcrypto/test/README.md new file mode 100644 index 00000000..a85b663d --- /dev/null +++ b/libwvdrmengine/oemcrypto/test/README.md @@ -0,0 +1,125 @@ +# OEMCrypto Unit Tests + +## Basic Functionality Tests + +Most unit tests in this category verify that the basic functionality of opening +sessions, initializing and terminating the system, and reporting status work +correctly. + +## Decrypt Tests + +The decrypt tests verify that encrypted data is correctly decrypted with the +desired key. These tests cover a large variety of patterns, sample sizes, and +subsample sizes. + +## Secure Buffers + +If OEMCrypto implements the function `OEMCrypto_AllocateSecureBuffer`, then all +of the decrypt tests will also run with the output buffer being a secure +buffer. If the function `OEMCrypto_SupportsDecryptHash` returns +`OEMCrypto_CRC_Clear_Buffer`, then the secure buffer decryption will be verified +with the CRC32 hash of the input data. + +## Usage Table Tests + +Usage table tests verify that the usage table is correctly procesed. The usage +table is used to control reloading keys for offline playback, and for reporting +secure stops for online playback. + +## Duration Tests + +Duration tests verify that license durations are enforced correctly. Most of +this functionality can be met by keeping an accurate system time, and calling +the ODK functions as described in the document "License Duration and Renewal". + +## OEMCrypto Memory Unit Tests + +### Objective + +* Add OEMCrypto buffer overflow unit tests (indirect way of fuzzing) to verify + OEMCrypto API behavior when the parameters passed to the API are out of + range or not reasonable. The API can return an error code, but shouldn't + crash. + +* A lot of OEMCrypto APIs take buffers and their length as inputs to the APIs + and we have added unit tests with buffers of varying lengths (small + to huge) to verify API behavior which is an indirect and simplest way of + fuzz testing to detect buffer overflows. + +* Add the tests for OEMCrypto APIs with prefix `OEMCryptoMemory` in the + following format. Huge length is set at 100 MB as of now. + + ```cpp + for (size_t length=small_length; length subsamples.size()) return 0; } // Sample loop. // Allocate input/output buffers for each sample description. vector input_buffer(total_input_data_length); - RAND_bytes(input_buffer.data(), total_input_data_length); size_t input_buffer_index = 0; for (size_t i = 0; i < samples_length; i++) { sample_descriptions[i].buffers.input_data = diff --git a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_fuzz_helper.h b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_fuzz_helper.h index 7dc707ee..c524196b 100644 --- a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_fuzz_helper.h +++ b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_fuzz_helper.h @@ -36,9 +36,7 @@ class OEMCryptoLicenseAPIFuzz : public InitializeFuzz { session_.GenerateNonce(); } - ~OEMCryptoLicenseAPIFuzz() { - session_.close(); - } + ~OEMCryptoLicenseAPIFuzz() { session_.close(); } LicenseRoundTrip& license_messages() { return license_messages_; } diff --git a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_odkitee_dispatcher_fuzz.cc b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_odkitee_dispatcher_fuzz.cc new file mode 100644 index 00000000..1a3c770b --- /dev/null +++ b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_odkitee_dispatcher_fuzz.cc @@ -0,0 +1,77 @@ +#include + +#include "dispatcher.h" +#include "marshaller_base.h" +#include "transport_interface.h" + +namespace wvoec { + +void InitializeODKMessage(ODK_Message* message, uint8_t* data, size_t size) { + ODK_Message_Impl* impl = (ODK_Message_Impl*)message; + impl->base = data; + impl->size = size; + impl->capacity = size; + impl->read_offset = 0; + impl->status = MESSAGE_STATUS_OK; +} + +void OpenOEMCryptoTASession() { + ODK_Message request; + ODK_Message* response = NULL; + uint8_t response_buffer[0x1000]; + uint8_t request_body[] = { + 0x06, // TAG_UINT32 + 0x09, 0x00, 0x00, 0x00, // API value (0x09) + 0x01, // TAG_BOOL + 0x00, // value (false) + 0x0a // TAG_EOM + }; + + InitializeODKMessage(&request, request_body, sizeof(request_body)); + + ODK_DispatchMessage(&request, &response); + if (response != NULL) ODK_Transport_DeallocateMessage(response); +} + +void InitializeOEMCryptoTA() { + ODK_Message init_request; + ODK_Message* init_response = NULL; + uint8_t response_buffer[0x1000]; + uint8_t init_request_body[] = { + 0x06, // TAG_UINT32 + 0x01, 0x00, 0x00, 0x00, // API value(0x01) + 0x0a // TAG_EOM + }; + + InitializeODKMessage(&init_request, init_request_body, + sizeof(init_request_body)); + + ODK_DispatchMessage(&init_request, &init_response); + if (init_response != NULL) ODK_Transport_DeallocateMessage(init_response); +} + +extern "C" int LLVMFuzzerInitialize(int* argc, char*** argv) { + ODK_InitializeDispatcher(); + InitializeOEMCryptoTA(); + OpenOEMCryptoTASession(); + return 0; +} + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + ODK_Message request; + ODK_Message* response = NULL; + unsigned char response_buffer[0x1000]; + + uint8_t* input = new uint8_t[size]; + memcpy(input, data, size); + + InitializeODKMessage(&request, input, size); + + ODK_DispatchMessage(&request, &response); + if (response != NULL) ODK_Transport_DeallocateMessage(response); + + delete[] input; + return 0; +} + +} // namespace wvoec diff --git a/libwvdrmengine/oemcrypto/test/oec_device_features.cpp b/libwvdrmengine/oemcrypto/test/oec_device_features.cpp index b4988edd..9649ce66 100644 --- a/libwvdrmengine/oemcrypto/test/oec_device_features.cpp +++ b/libwvdrmengine/oemcrypto/test/oec_device_features.cpp @@ -129,6 +129,7 @@ std::string DeviceFeatures::RestrictFilter(const std::string& initial_filter) { if (!generic_crypto) FilterOut(&filter, "*GenericCrypto*"); if (!cast_receiver) FilterOut(&filter, "*CastReceiver*"); if (!usage_table) FilterOut(&filter, "*UsageTable*"); + if (!usage_table) FilterOut(&filter, "*BadRange_pst*"); if (derive_key_method == NO_METHOD) FilterOut(&filter, "*SessionTest*"); if (provisioning_method != OEMCrypto_OEMCertificate) FilterOut(&filter, "*Prov30*"); diff --git a/libwvdrmengine/oemcrypto/test/oec_session_util.cpp b/libwvdrmengine/oemcrypto/test/oec_session_util.cpp index f5d45775..0fc0f909 100644 --- a/libwvdrmengine/oemcrypto/test/oec_session_util.cpp +++ b/libwvdrmengine/oemcrypto/test/oec_session_util.cpp @@ -154,8 +154,7 @@ RoundTrip:: constexpr size_t small_size = 42; // arbitrary. uint32_t session_id = session()->session_id(); GetDefaultRequestSignatureAndCoreMessageLengths( - session_id, required_message_size_, small_size, &gen_signature_length, - &core_message_length); + session_id, small_size, &gen_signature_length, &core_message_length); // Used to test request APIs with varying lengths of core message. core_message_length = std::max(core_message_length, required_core_message_size_); @@ -192,9 +191,8 @@ RoundTrip:: template void GetDefaultRequestSignatureAndCoreMessageLengths( - uint32_t& session_id, size_t& required_message_size, - const size_t& small_size, size_t* gen_signature_length, - size_t* core_message_length) { + uint32_t& session_id, const size_t& small_size, + size_t* gen_signature_length, size_t* core_message_length) { vector data(small_size); for (size_t i = 0; i < data.size(); i++) data[i] = i & 0xFF; ASSERT_EQ( diff --git a/libwvdrmengine/oemcrypto/test/oec_session_util.h b/libwvdrmengine/oemcrypto/test/oec_session_util.h index 264a8ae9..3ede5dc0 100644 --- a/libwvdrmengine/oemcrypto/test/oec_session_util.h +++ b/libwvdrmengine/oemcrypto/test/oec_session_util.h @@ -669,9 +669,8 @@ void WriteRequestApiCorpus(size_t signature_length, size_t core_message_length, vector& data); template void GetDefaultRequestSignatureAndCoreMessageLengths( - uint32_t& session_id, size_t& required_message_size, - const size_t& small_size, size_t* gen_signature_length, - size_t* core_message_length); + uint32_t& session_id, const size_t& small_size, + size_t* gen_signature_length, size_t* core_message_length); } // namespace wvoec #endif // CDM_OEC_SESSION_UTIL_H_ diff --git a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp index 264d63f3..b03c2161 100644 --- a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp +++ b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp @@ -137,6 +137,11 @@ void TestHugeLengthDoesNotCrashAPI(oemcrypto_function f, !check_status); buffer_length *= 2) { sts = f(buffer_length); + if (check_status && sts != OEMCrypto_SUCCESS && + sts != OEMCrypto_ERROR_SHORT_BUFFER) { + LOGI("Test exits huge buffer loop for length:%zu, status:%d", + buffer_length, sts); + } } } @@ -170,6 +175,17 @@ const size_t kLargeMessageSize[] = { 8*KiB, 8*KiB, 16*KiB, 32*KiB}; // const size_t kAV1NumberSubsamples[] = { 72, 144, 288, 576}; // clang-format on +// Return a printable string from data. If all the characters are printable, +// then just use the string. Otherwise, convert to hex. +std::string MaybeHex(const uint8_t* data, size_t length) { + for (size_t i = 0; i < length; i++) { + if (!isprint(data[i])) return "0x" + wvcdm::HexEncode(data, length); + } + return std::string(reinterpret_cast(data), length); +} +std::string MaybeHex(const std::vector& data) { + return MaybeHex(data.data(), data.size()); +} } // namespace class OEMCryptoClientTest : public ::testing::Test, public SessionUtil { @@ -202,6 +218,17 @@ class OEMCryptoClientTest : public ::testing::Test, public SessionUtil { } }; +TEST_F(OEMCryptoClientTest, FreeUnallocatedSecureBufferNoFailure) { + Session s; + s.open(); + OEMCrypto_DestBufferDesc output_descriptor; + int secure_fd = kHugeRandomNumber; + ASSERT_NE(OEMCrypto_SUCCESS, + OEMCrypto_FreeSecureBuffer(s.session_id(), &output_descriptor, + secure_fd)); + s.close(); +} + /// @addtogroup basic /// @{ @@ -212,15 +239,20 @@ class OEMCryptoClientTest : public ::testing::Test, public SessionUtil { */ TEST_F(OEMCryptoClientTest, VersionNumber) { const std::string log_message = - "OEMCrypto unit tests for API 16.4. Tests last updated 2020-10-07"; + "OEMCrypto unit tests for API 16.3 or 4. Tests last updated 2021-02-22"; cout << " " << log_message << "\n"; + cout << " " + << "These tests are part of Android S." + << "\n"; LOGI("%s", log_message.c_str()); // If any of the following fail, then it is time to update the log message // above. EXPECT_EQ(ODK_MAJOR_VERSION, 16); // Note on minor versions. Widevine requires version 16.3 or greater for CE // CDM and Android devices. For CE CDM devices that do not support usage - // tables, we strongly recommend 16.4. + // tables, we strongly recommend 16.4. Note: This is the version of the ODK + // library built into the tests, which might be different from the version + // that is pre-compiled into liboemcrypto.so. EXPECT_GE(ODK_MINOR_VERSION, 3); EXPECT_LE(ODK_MINOR_VERSION, 4); EXPECT_EQ(kCurrentAPI, 16u); @@ -229,7 +261,9 @@ TEST_F(OEMCryptoClientTest, VersionNumber) { ASSERT_EQ('L', level[0]); cout << " OEMCrypto Security Level is " << level << endl; uint32_t version = OEMCrypto_APIVersion(); - cout << " OEMCrypto API version is " << version << endl; + uint32_t minor_version = OEMCrypto_MinorAPIVersion(); + cout << " OEMCrypto API version is " << version << "." + << minor_version << endl; if (OEMCrypto_SupportsUsageTable()) { cout << " OEMCrypto supports usage tables" << endl; } else { @@ -661,8 +695,8 @@ TEST_F(OEMCryptoClientTest, ClearCopyTestAPI10) { OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample)); dest_buffer_descriptor.buffer.clear.address = output_buffer.data(); dest_buffer_descriptor.buffer.clear.address_length = output_buffer.size() - 1; - ASSERT_EQ( - OEMCrypto_ERROR_SHORT_BUFFER, + ASSERT_NE( + OEMCrypto_SUCCESS, OEMCrypto_CopyBuffer(s.session_id(), input_buffer.data(), input_buffer.size(), &dest_buffer_descriptor, OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample)); @@ -896,8 +930,8 @@ TEST_F(OEMCryptoKeyboxTest, NormalGetDeviceId) { uint8_t dev_id[128] = {0}; size_t dev_id_len = 128; sts = OEMCrypto_GetDeviceID(dev_id, &dev_id_len); - cout << " NormalGetDeviceId: dev_id = " << dev_id - << " len = " << dev_id_len << endl; + cout << " NormalGetDeviceId: dev_id = " + << MaybeHex(dev_id, dev_id_len) << " len = " << dev_id_len << endl; ASSERT_EQ(OEMCrypto_SUCCESS, sts); } @@ -1039,7 +1073,7 @@ TEST_F(OEMCryptoProv30Test, GetDeviceId) { } ASSERT_EQ(OEMCrypto_SUCCESS, sts); dev_id.resize(dev_id_len); - cout << " NormalGetDeviceId: dev_id = " << dev_id.data() + cout << " NormalGetDeviceId: dev_id = " << MaybeHex(dev_id) << " len = " << dev_id_len << endl; ASSERT_EQ(OEMCrypto_SUCCESS, sts); } @@ -2355,6 +2389,39 @@ TEST_P(OEMCryptoLicenseTest, !kCheckStatus); } +TEST_P(OEMCryptoLicenseTest, + DecryptCENCForNumBytesClearPlusEncryptedOverflowsSize) { + LoadLicense(); + OEMCrypto_SelectKey(session_.session_id(), session_.license().keys[0].key_id, + session_.license().keys[0].key_id_length, + OEMCrypto_CipherMode_CTR); + + size_t input_buffer_size = 1; + vector in_buffer(input_buffer_size); + vector out_buffer(in_buffer.size()); + + OEMCrypto_SampleDescription sample_description; + OEMCrypto_SubSampleDescription subsample_description; + GenerateSimpleSampleDescription(in_buffer, out_buffer, &sample_description, + &subsample_description); + + OEMCrypto_SubSampleDescription* sub_samples = + const_cast( + sample_description.subsamples); + // If Decrypt cenc API does not check for overflow on clear + encrypted + // addition operation. This will result in 1 which will match with input data + // length, which causes validation to pass. + sub_samples[0].num_bytes_clear = 2; + sub_samples[0].num_bytes_encrypted = 0xFFFFFFFFFFFFFFFF; + + // Create the pattern description (always 0,0 for CTR) + OEMCrypto_CENCEncryptPatternDesc pattern = {0, 0}; + // Try to decrypt the data + ASSERT_NE(OEMCrypto_SUCCESS, + OEMCrypto_DecryptCENC(session_.session_id(), &sample_description, 1, + &pattern)); +} + TEST_P(OEMCryptoLicenseTest, OEMCryptoMemoryDecryptCENCForHugeNumBytesEncryptedAndBuffers) { TestDecryptCENCForHugeBufferLengths( @@ -3850,50 +3917,17 @@ class OEMCryptoSessionTestsDecryptTests OEMCrypto_SUCCESS); } - void TestDecryptCENC() { - OEMCryptoResult sts; + void TestDecryptCENC() { ASSERT_EQ(DecryptCENC(), OEMCrypto_SUCCESS); } - // OEMCrypto only supports providing a decrypt hash for one sample. - if (samples_.size() > 1) verify_crc_ = false; - - // If supported, check the decrypt hashes. - if (verify_crc_) { - const TestSample& sample = samples_[0]; - - uint32_t hash = - wvcrc32(sample.truth_buffer.data(), sample.truth_buffer.size()); - ASSERT_EQ(OEMCrypto_SetDecryptHash( - session_.session_id(), 1, - reinterpret_cast(&hash), sizeof(hash)), - OEMCrypto_SUCCESS); - } - - // Build an array of just the sample descriptions. - std::vector sample_descriptions; - sample_descriptions.reserve(samples_.size()); - for (TestSample& sample : samples_) { - // This must be deferred until this point in case the test modifies the - // buffer before testing decrypt. - sample.description.buffers.input_data = sample.encrypted_buffer.data(); - // Append to the description array. - sample_descriptions.push_back(sample.description); - } - - // Perform decryption using the test data that was previously set up. - sts = DecryptFallbackChain::Decrypt( - session_.session_id(), sample_descriptions.data(), - sample_descriptions.size(), cipher_mode_, &pattern_); - ASSERT_EQ(sts, OEMCrypto_SUCCESS); - - // Validate the decrypted data. + void ValidateDecryptedData() { for (TestSample& sample : samples_) { if (sample.description.buffers.output_descriptor.type == OEMCrypto_BufferType_Clear) { const size_t total_size = sample.description.buffers.input_data_length; // To verify there is no buffer overrun after decrypting, look at the - // padded bytes just after the data buffer that was written. It should - // not have changed from the original 0xaa that we set in MakeBuffer - // function. + // padded bytes just after the data buffer that was written. It + // should not have changed from the original 0xaa that we set in + // MakeBuffer function. if (decrypt_inplace_) { EXPECT_EQ(std::count(sample.encrypted_buffer.begin() + total_size, sample.encrypted_buffer.end(), 0xaa), @@ -3919,6 +3953,41 @@ class OEMCryptoSessionTestsDecryptTests } } + OEMCryptoResult DecryptCENC() { + // OEMCrypto only supports providing a decrypt hash for one sample. + if (samples_.size() > 1) verify_crc_ = false; + + // If supported, check the decrypt hashes. + if (verify_crc_) { + const TestSample& sample = samples_[0]; + + uint32_t hash = + wvcrc32(sample.truth_buffer.data(), sample.truth_buffer.size()); + OEMCrypto_SetDecryptHash(session_.session_id(), 1, + reinterpret_cast(&hash), + sizeof(hash)); + } + + // Build an array of just the sample descriptions. + std::vector sample_descriptions; + sample_descriptions.reserve(samples_.size()); + for (TestSample& sample : samples_) { + // This must be deferred until this point in case the test modifies the + // buffer before testing decrypt. + sample.description.buffers.input_data = sample.encrypted_buffer.data(); + // Append to the description array. + sample_descriptions.push_back(sample.description); + } + + // Perform decryption using the test data that was previously set up. + OEMCryptoResult result = DecryptFallbackChain::Decrypt( + session_.session_id(), sample_descriptions.data(), + sample_descriptions.size(), cipher_mode_, &pattern_); + if (result != OEMCrypto_SUCCESS) return result; + ValidateDecryptedData(); + return result; + } + // Parameters of test case OEMCrypto_CENCEncryptPatternDesc pattern_; OEMCryptoCipherMode cipher_mode_; @@ -4094,7 +4163,6 @@ TEST_P(OEMCryptoSessionTestsDecryptTests, DecryptMaxSampleAPI16) { // max_sample_size. const size_t subsample_size = std::min(max_sample_size / max_num_subsamples + 1, max_subsample_size); - size_t bytes_remaining = max_sample_size; std::vector subsample_sizes; while (bytes_remaining > 0 && subsample_sizes.size() < max_num_subsamples) { @@ -4113,6 +4181,103 @@ TEST_P(OEMCryptoSessionTestsDecryptTests, DecryptMaxSampleAPI16) { ASSERT_NO_FATAL_FAILURE(TestDecryptCENC()); } +TEST_P(OEMCryptoSessionTestsDecryptTests, + OEMCryptoMemoryDecryptCENCForHugeNumberOfSubSamples) { + auto oemcrypto_function = [&](size_t number_of_subsamples) { + std::vector subsample_sizes; + while (number_of_subsamples-- > 0) { + subsample_sizes.push_back({1, 1}); + } + SetSubsampleSizes(subsample_sizes); + LoadLicense(); + MakeBuffers(); + EncryptData(); + OEMCryptoResult result = DecryptCENC(); + // Closing the session and opening it for next iteration. + // If it is last iteration, session will be closed in teardown method of + // class. + session_.close(); + session_.open(); + InstallTestRSAKey(&session_); + return result; + }; + TestHugeLengthDoesNotCrashAPI(oemcrypto_function, 1, 2 * MiB, kCheckStatus); +} + +TEST_P(OEMCryptoSessionTestsDecryptTests, + OEMCryptoMemoryCheckDecryptCENCStatusForHugeNumberOfSubSamples) { + size_t number_of_subsamples = 10000; + std::vector subsample_sizes; + while (number_of_subsamples-- > 0) { + subsample_sizes.push_back({100, 100}); + } + SetSubsampleSizes(subsample_sizes); + LoadLicense(); + MakeBuffers(); + EncryptData(); + // Build an array of just the sample descriptions. + std::vector sample_descriptions; + sample_descriptions.reserve(samples_.size()); + for (TestSample& sample : samples_) { + // This must be deferred until this point in case the test modifies the + // buffer before testing decrypt. + sample.description.buffers.input_data = sample.encrypted_buffer.data(); + // Append to the description array. + sample_descriptions.push_back(sample.description); + } + OEMCryptoResult result = OEMCrypto_DecryptCENC( + session_.session_id(), sample_descriptions.data(), 1, &pattern_); + LOGD("Large number of subsamples test has return code %d", result); +} + +TEST_P(OEMCryptoSessionTestsDecryptTests, + OEMCryptoMemoryCheckDecryptCENCStatusForHugeSubSample) { + std::vector subsample_sizes; + subsample_sizes.push_back({100000, 100000}); + SetSubsampleSizes(subsample_sizes); + LoadLicense(); + MakeBuffers(); + EncryptData(); + // Build an array of just the sample descriptions. + std::vector sample_descriptions; + sample_descriptions.reserve(samples_.size()); + for (TestSample& sample : samples_) { + // This must be deferred until this point in case the test modifies the + // buffer before testing decrypt. + sample.description.buffers.input_data = sample.encrypted_buffer.data(); + // Append to the description array. + sample_descriptions.push_back(sample.description); + } + OEMCryptoResult result = OEMCrypto_DecryptCENC( + session_.session_id(), sample_descriptions.data(), 1, &pattern_); + LOGD("Large subsample test has return code %d", result); +} + +TEST_P(OEMCryptoSessionTestsDecryptTests, + OEMCryptoMemoryDecryptCENCForHugeNumberOfSamples) { + auto oemcrypto_function = [&](size_t number_of_samples) { + std::vector> samples; + std::vector subsample_sizes; + subsample_sizes.push_back({1, 1}); + while (number_of_samples-- > 0) { + samples.push_back(subsample_sizes); + } + SetSampleSizes(samples); + LoadLicense(); + MakeBuffers(); + EncryptData(); + OEMCryptoResult result = DecryptCENC(); + // Closing the session and opening it for next iteration. + // If it is last iteration, session will be closed in teardown method of + // class. + session_.close(); + session_.open(); + InstallTestRSAKey(&session_); + return result; + }; + TestHugeLengthDoesNotCrashAPI(oemcrypto_function, 1, 2 * MiB, kCheckStatus); +} + // Based on the resource rating, OEMCrypto should be able to handle the maximum // subsample size. TEST_P(OEMCryptoSessionTestsDecryptTests, DecryptMaxSubsample) { From ef65e86ee279162458428359c10d3116c3a72918 Mon Sep 17 00:00:00 2001 From: Fred Gylys-Colwell Date: Sat, 10 Apr 2021 11:14:18 -0700 Subject: [PATCH 6/9] Modify OEMCrypto unit tests to allow 16.3 or 16.4 Merge from Widevine repo of http://go/wvgerrit/121790 Some unit tests expected OEMCrypto to be the latest ODK version, but we do not require this for v16. Bug: 184905579 Change-Id: Iccdbcc0b28587aad79a2a63d8c39a564a47fb585 --- libwvdrmengine/oemcrypto/test/oec_session_util.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libwvdrmengine/oemcrypto/test/oec_session_util.cpp b/libwvdrmengine/oemcrypto/test/oec_session_util.cpp index 0fc0f909..b2bf3de7 100644 --- a/libwvdrmengine/oemcrypto/test/oec_session_util.cpp +++ b/libwvdrmengine/oemcrypto/test/oec_session_util.cpp @@ -502,9 +502,13 @@ void LicenseRoundTrip::FillAndVerifyCoreRequest( oemcrypto_core_message::deserialize::CoreLicenseRequestFromMessage( core_message_string, &core_request_)); EXPECT_EQ(global_features.api_version, core_request_.api_major_version); - // If we are testing the latest OEMCrypto version, make sure it is built with - // the latest ODK version, too: - if (global_features.api_version == ODK_MAJOR_VERSION) { + if (global_features.api_version == 16) { + // We support either 16.3 or 16.4 for OEMCrypto 16. + EXPECT_LE(3, core_request_.api_minor_version); + EXPECT_GE(4, core_request_.api_minor_version); + } else if (global_features.api_version == ODK_MAJOR_VERSION) { + // If we are testing the latest OEMCrypto version, make sure it is built + // with the latest ODK version, too: EXPECT_EQ(ODK_MINOR_VERSION, core_request_.api_minor_version); } if (expect_request_has_correct_nonce_) { From 64e2176047f2de3b5985547874717f05522e41fe Mon Sep 17 00:00:00 2001 From: Fred Gylys-Colwell Date: Sat, 10 Apr 2021 11:16:42 -0700 Subject: [PATCH 7/9] Update Version Compatibility Document Merge from Widevine repo of http://go/wvgerrit/110024 The document now has a date for the R release, and talks about 16.4. It also more clearly describes how the CDM matches the HIDL interface version, not the Android OS version. Test: Doc change only Bug: 169155700 Change-Id: I463642fbb779388a2ff7758db1a03d998e89510c --- ...devine_OEMCrypto_Version_Compatibility.pdf | Bin 139391 -> 140734 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/libwvdrmengine/docs/Widevine_OEMCrypto_Version_Compatibility.pdf b/libwvdrmengine/docs/Widevine_OEMCrypto_Version_Compatibility.pdf index 996cc62efeed5069b806e8ac76ee521624d17aad..20174fbed81d34526f4675d09edf14cf940abf21 100644 GIT binary patch literal 140734 zcmZsCb3mqByZ2<r9-`#%qIcJ}JzW#ZtXWi>w zmwp!)g|fIL0}CTNEXCIL^gJvJF*C8Fi4812Ka+x^nYgi=Ikh-1D>ExI3kwS;3p+at zGYbPVHx)B86%CV^i@C9zqYJfyqmQ+noiP&!BQvo+wKfY2AF;f(gS!{87dNLNC%Zlk zv51qCow=5|iJY|?69*d?BO52MP)=H1L7tx2&f3|*`*gMYu)+R@=(hhqhnv#`cCY{ccP%*@OT@1zp5sIzIS6N_q! ziqHrO!kRmnz4L_ie|RJ2=-_7V;O0uq2K-NzN!{DYoJrZ((ws@v+||+D#njvtU?6Y= zQ#Erpz4x~>y}yV_#vWKB`kxQ6|9r@NWRmc5lTvd7SPeX*ZOu%~{@0#TY{VSzzX%F4 zX)Br7n47x2f6YP6`S(91fg}9&01GkKUk^yK6LbIPJKzyDHy3wPH)Ug&zfQ>v9Pa%$ zVxGTNDwvyD8;d%6=`jO;a`CVdvjEKd_&LP_mi=3Y_lVnCb)KPtA_-X zn?&uK(3p!!2a7-XN3b8|2eIfv1`$M+vU>72xvbATN3U>8yf??)K2;6Sv)B^7sim1m z!&En^%PPUexIY3+Ka@Rx>r~zypSN#r7j}QrKL!yqD2}sRy6TvtVUDX6G%R$+Y3&%{ zh3xJ40!g^a7$ik4xA`!CGe%x(nrA(YE2Oxzc=VITX;qDquEKpoev-J(x~y48%EsT& zpL6IJR`aWx|3@W~Eg(0Z~Yv*v_Ho4`u@m; zSNK}izKq|V{hjlf$Ghr|cF(A(j|E4o`%j}9d}x1lY~(i%Q);uMa}a8;Jx2Bq*Brg9 zV8T-p0T%w%+QRji!gHM5#5NFZ+C~&07$8K?tdBv*_cUiBRci)6c^QQ1yNT@@#^F|KC{f2Wz_a8)VMrWgCzg5KalH&uE;leY zCu)plqX#G@*)Kut9=>isX`Jx<7~a6Hn3mZ=+`H#*JT$_W%`HqpvN%&CaL;YZz9_~Dt6=w9Po$OEiy2!m!SRxV=Sn=!# zVv@!kdSMyj@&qsvNWG}?k&*)`mNV~#D|uW#3Fs~gpJjVS(nJ@{aE6^gH&|;dsDq@; zLiM{a?zka>v>b@E3^Z{no2x!eu}|1xeGl0x#h1Q?!#3{jmYhuAYtFcp+4Metge(UxP@b-Cmcyzg{Z@xt`rj@mMhq%9O z`ERg$2cf?)z|@!+0OJ3Fhj&=|`zuieCPhaVdt*B$V9`I8yo1!=OT--Q99`6$j7`m% z#LYddP0dxMM48mwP2Aow^DjVTk~X)tv~nY6Wn*Xh|KQDE;QBWNGHF?x0ocRB$;`~8 zreN%9OU&|)VX91`)^4uK<}PB6_D+rt??}h}UpU3i%+AI352QNjg7MN@On*C1*Y-?Q zc(Po5wP>Fh_`pCeOk98Ke}g%k*}0a`ESHik5cHuKA&J{}1k%{nD*qFM_vqLXr?KOq zvMf!uA{;k}tad{kW$(n>-M!~@vW)$3eT=EhzO0YX^wUm$G-;q4<{WR$D+1G;B zpf&??TDqh1X2dU+cMt?`-a>~op#NAp@^O#oKHiy_I&x{e@Me&LOhrefsl{u0D|uib zM(CVEK<*!lKYWYyzngo23Me|X4c+N;E;(^zzkR68U1@OfO1q{9`Nz^7#*$Y=F+*hn zTe2Fg@UaLV8w7vCwKIv`r&_ZAeb#T0hxHuoL0>ydRW_hTgH5ZKjSsGx1iHE&FEVAO zQU9^0@L2)2wv~@vbp0k%WWrLUxJ86^FyoRzyQj?B{M!Fndv@M=)CcJw*iluQ(q=|Z zt0t8>e#e*@_zQAQ4g4S5#?4!q3X0_#ZXo^j_WTq3O96k!0W@1_C6s?G6IL`mLc%=P z0Ur&vJl1L#^gP@s?k)v5^e@hLPfuo6r8XImv(iN@O|1of{Qi0@GY#m%fBy(8sDV_8e6+taSWn=}7$dmLCJX&4&Nf6_lz#J}z=c@{D;fH6wV$ z=aByQ**<*ulvT3Z%4gq!RZ+;G-05Gncm%269#Ct4NBVEJ9X#@nSw*rgN$WD9rUI&+ z@f2+SRO{$%f%R`4TL2?*H|*eDrHvK2{G}bq>sEhzLj>>n{9CKY66PQ8CiYYr)ISP} z3+M$K4c?YtUpB#oULsm;e+@RCYy4j_>#%y{mk_wAc(nky^FtoZw$j^AWT!`{u@~2CQXG{5WcY2bN;0x zDE8EAttJ~m{|8gkTi+fth64%?9Eky}nm*E3I(OrrRrnWUGPVRFy@LNzq?w!6wL3-^ zfv$fW7^4vWqv>~3p@pGUv#z2W(s&&eNBfmm^I~7D#D7sc^s@F8z05md2E~Yz3m$RPI6)>uKGZC2AJ9V*7{e;&$yGC(+gn z1f9=WyV3n}#^rhD_hK-|2KJ%AXh}@byH;&^KM0TsX0@7>9v30Ona?5d-_#ndP9Vi# z14ckBt0{2NzaDrdS0oE_i#uc)M}bBhs)`8EkXZhuqVZ?Ga zxd6|~=vDqLR+mEO%czc=552HSjbE8J@WPi*Pzg}O>8wj;gzy~rKN~I%m=ATv__0mD zHi{Q5N#|F)qSDn#YOBS~K2hLu9gl`t10#Syx@joF3mD`gq#h6EURdjoMcy~omdV1s(SmlMwmro1m z{W<~-bN68T%TQCOiih4QKR~^&f}jxiI zuGMR&^ByzVCEi29!$Ov(7*M z(WW(2z0ogB^NzPSZ>?VIGSk1N&q6<1H}EVRde5%^@hf{#np*8+R2l_C-lz01>&mGl zvQfSjyZoi|sL?cfanBGRe3zJ05EZfng}u?kU=a5!-TZuus|7VWbIwNwi3diy#-W7K z6I}{3cL%T za%t^tS&y;a;8K~$Q`q9ZGF5UhA!;@-FsPctU%fakg~aH4@|huYOh0jgQ%7?d&eR@! zW0;uG)jTzZmtHQo5!Br;ZZvV0hAzCV!)016Sf%QsZ~Sor$1Rt(S)n#|yO3=e&d_@Z z`Ye%l&yU5lQ>(O;gdpdJ`ukind?K{|7x6_!uV|hp8-=T?3sw(`BJ=moCu11%h=A{S zDPra@^}Isu!HlkeDvdo@EH=Q6W0GfBU28?L^a`m-$9k&1`WtLWT*0BWQ|Q<|yYwlU zANJQSzQqXkH|$f&R#{?sUn`O{oA*DG+IWLQX)b*tr&seL->_gk7Oo(eEo=N7Q5<@e zYAlbOpkEfbr-r40jBhU*7ho=c|n0SonGc5Mj9rre6c8ivmNWdlGo!bp;>L;rg_23Jq~CFul>) zv8OsFNN8-x1dfufsxvU&bOQyZx+Zda;b&^QwFEB%sKQQdZ-nUSrMBePV+u9a6w@6k zYH`Cy6<3x6R2#Red%Jz54Qp2henrbUcDdSa{Q09CecJZ%A;0)QEAm-LZ&t=fUl{b- zUvOI(8HgO_YHg~638scy#SKH5C$EAueXT>G9AlA<5lAEtOBicN1&$8;4_-z_#aXDZ zm27tS!>$<9xwbPT=fH9qqZ*Pk*1oW;TLq3;gGI#@QR#38uAtvkKD=vj(b3nBJ^hW& zpsBw`$t1?{MYobs!nFyc&Q*axWb=D>f($Z^IWO6;0h3N4^kqmjsoq+h572O;u|-;W(f-|=T|m|kK3Q+u<# zeXM2D6WODM_^1Km6NHh3S(tO)4P{up7Vxw4k==S!THiv?ceQ1&(AM`Beqe(ghac~j zpU4ic)A>+2`6fi;Hb^7jCoNG$(=+W%yVEe`Tp`$$%=hl&Yk!At$PVHLtfJ~#aEYps z$TyG*ydXCc;hlA7Y7-=H5484miG~hz5B3r=f>A>wACTb4Y>O8ObyND?8k;~KlbP4c zNJ%LiC!bn4-Amhrw;Abeh6rMj9~0X9%rKu#vlpMXXA=@PTb`4%0?pYdsGJ=4+5;%` zTca3zt-6}%x4R-`KD^MbO|16SzNz}xDWh2Ze7LJvQ~a?Mpr{W}qO znu*eX)Pi4+tNO`2^=*Y&7LVUS&Ce)#_@?qMk^|1uu6=uWIf0PaNzpDCj`sGWlmR_z zZaHK|YNuQ86MTqOju1822y(BV-31<|jUwD3i4t5ni@MQST1FHxdgTslPdBWo=x!7$ z5#PBwo@iD4p8$~S$_dVZO46jogpB^EKBe(hoa)?J%V!1fM-4w074@Um<~KhX*i1@v zOb%BcBHKQl2Jq2!?4p~MxZi>bR>g_457_Eh0?yhTrs5>R4_ch1fmwNm--!&Gs-l;W zzXrT`H;9m;VwTDQNw zW>-4=Xt!Qh=8(mUiqz^PXdK%}x8%mQCen{XOV(mT7wa+H+y`R6@MDRB1|TfD60X~t zJq9@N3BV%e1Bq%xxgOC)4g?X(0XZY*l00>*QTF70_b|624!j^z5}A-jHz&-js077w z8u&*Imrp-e^$krM!`Lnb z`D;5fxLnn4TRY)bv0x$^l!e%z0x-CS@I@)WZ*+VQKL;ecf7vip)+MUEc)MTb6GeKx z>x?GS)66A(M~0JQ!R3wTeEapMBBmAiy~D4qmJgpxp3VachkW`eg~$w|LyRygH?m57 z`DaenHWYk{dcl9((a+y{NBA7=s8DYRE)~Sgb;;3#r8CeVLpA^4geX36&bt4|@HVmK znO79X&%liy9CBgelLfPdkvTd%l`i?{L&g6?G(WL9NnB!c_ESKz2IWs@d|lzsRU{+l z85Fc!hdew)!aWgqJ+gJ82Z}b+E&U3H^Iz14X>#U94xUj_%biHKNYN-9jjscupm-~M zr*be0}RAt+p z)p{s?(T)ZXEx+6AE*F4i<;%N8P|=cI7lT#nwf#2TS{dQL*3r7&7I$qF1jBqCcIul_ zZpxtiY?DRvlzGh(>-|Z1bDy4Ug9(1%P!tqe7H?GB3kyY~xmiB{ei6qs&Nc&t@%q~@ zdE=>&d_$OYZj&_gnc9X~k?VQZ#8?P^3I3< z?BnK&6702NsaREX`<2B)KNxLR5eBdyI}=wggbnKZ%mD6nWfg}pj&T%7lmApx##)}C zzxhFTqV52MIh?9*KM;}}@7C2+LfgVKw^vOL^oy{z2C4F}P^o12K)9d+Jn=tt`9fSd zE-fQO0$6N5%sHHee(>0DpFoec%Kh3UhY=!tM+&^|EYG#DNg@B>YmH1}e0_AE(e*#F zwv&KYlkd9?r>Ih$)T3C{$`C(&-lxoXg*YnHo1G_)6}hOaUpi*KeL4#0s(+5hlbKc> zN(?l&f7Q1H$qD$51FCP)uKhEMQuEk6N==DSeCRC^ae<1O?HFvHlE}8-rgVyLE@^1| zd`1Qd2cVPlH?MeK+#a&!6gdpsbtQ{t%csU-PVfvMAP__Dk*Qfg-*VCJH@OjPnlc(( z!GwOq=*tI+BSYXaL^ty?&Wa9?ATP9h2oDiu=fYakhQ}>EhAppT)Il6mRkm-f52cRW zXI_y2fin2I$X0>|WkUgTq?zKKTc<@Dw>G{5U<}RP@z94sV5V_5Z5%If@GM9` zWW**>C4yn!e5#{;cN|@0NwfX1FDHA|twP@X>nk3?g+2EnNiI@TXLRO#2!8Cr&5amIAZIJY^I* zQ}8gFBdzjGsX0t7Vg(S!n{Pu|B!hTUcqyX3Sfy94A+QN(VQk>V&!nb9Wfs=QJ5eCI z5)Hpl0c#Z)>2F#cxA;hMhrd)ST{}m^p-1(!_;JPQ=}Ez})6oEdCdBln@{EbLwNvZc z&BumiJBtfd-}QWmpaIhkgdDclG1cqTy|GT|qK8#m86M#pcrD4x?p!Q3uoXQb+x3igg86sBQ%bNZ}+O}>zci72wT{tCc$HA$wZ<& z5XP|?xuv7W#4kP^*k(v0@p#_Q<X{8zSypZHQy9|U ztv^DCZx(cr$q!%oOGzMCz~+KrLjTc{KoK;{S8l&HF-V)YXR?)o|2S7k1ZC* z2JXBh9{`r)sZ(84mi)^KK>4Sm-D$}7Pi(a093(uIhVh04YMrlG0T{h29(O9!{*IX) zJ>-ly;p6Q}dL2UPt%t!S9fnlCD;D7X%Z5*Oy$>$@_Q+zLxG;URi)SyRN)Fl}#UX>C zl&dx8cOy^4-cD6Fyh&Zr_B|WAR|k_trPOkH&1v>y@c|OYe)5prq-O9SB=uXJXl-#= z0;Y;rQAb4af=T5h*=rMrepxVdAW)0Yxal)QGxX3*DaetW1jg!nBdEB=&h9aD%_UU!F!NG$*;R~e z4Hix}bgvWG1E|eZ9BMR(YTV^K4Dz~<(gl>?xD_O;2t;GYkxfTvAwEFK9*V43a>HDT z#)~D92k0=2f&>R}^z}(@k(BFOXws&|;V;%!5wM}x*crTeKhY}p?B=xUod?tc$=%L- zHTjO_IAc2FETGF{c+HGS@8ZgC@JWAW(etI*ap8xeE?N;nOiOH4gCRpK|2ObUsPCcO zn?S)XPD18b!lcn4tY%uL)6#gYwlyKAfIdjIgT@=r0+!^cjlqRzn?9{lSJ?n&Pwv?j zyT?^3+-o&y7>^uFa+WfCEz2v@2;~xsT`(S9cuM7E48Pze0QQh@s;E6fQKZL3)+<(* z=BrjG&Buod517DnTYhxax~`@^B|Olw#S$8WblO23FR>s!h^0TFi_3<7ACuTfts~h& zxBTUb$<~oe^3A^&B7%FTU(-`S8un}{p%>oB?9`Yk6-!Uh(AXrRH>24P%5zIW#+gT0C@U7{dUOxB|c4PHJ(^iWqMr)VUZ36}morl9_2lunxpl=bc zNZ)PaX^6yaMdK}oCBk9whu5I}Zy#H_-~bf_jpU`hHPrJqqBx`(Bc%4mtGqLn#xGQz zu;5B0yg@fga@ea#Ipj@wmRw6P-YvNb8I+L?Zr)DGh<{SB6~EZy(z>Z+9@x|`n3(Rm zZ$D_&T{h76o&V|;T2Q1;Pp1wj zh3B5(INtH7m4%IB*wWyMIwmCNF8^)K&mbJv?`uK?BJv?PJ?6zT8Z=o53ah_ z8eh6-_^<$j1h#0i?#J_W813tRBp7B`NB+zKgcJ8@m(~w^cLaB@q1W``N$D>yLTBCH z-=|K)Dof%xy@q0RcBSMN0&Q}Lo=A$2BSKfHG<|c{C}J1mmm>!)Si;WBv!j*VfZ{l3dqUJbHC7NoAL3c0|ENA9AWyeyJ?DEA@+m+fDnBJImqM|7j~%Zeu$kQW3B%mgFTHq=KE?t>7n?kx%r%lr=D<9ib$X0WyuOkxwxFp+b@CP( zc4-xazc?NCP2u}&MP@a;EU$Vn#Yu_u;954f_uVG=!}%+nk_$-aK)@C--~Y*~jPXkj z(<~`Gk!e6q$Y+KPCTCaY5f>*_GI{L^(QJ2;8-_mPIz);6@Tg%SQYm0HP;4{ZQPt3U zoeUNmXsN@8Z5lW0L$SrUgZPL+qg|c5XvD4}K_%3W4VF~Ja=zvQ$QrGxLZ`rGo4?~h zu61VNJI?5Nl}Jy9UkP6bk zpgyEQCFsy%4BR;PqddW@XvnTp(D}w|dY)=!U|s#HPMg3&d}`W}b9 z7hgBNx2!8yGK|(i5?LaeoFdv$uSk(=bUPbe2jo994dol(ldGCC2VYm>G~#=|8K{0z zL8o8@4=;7cI?%!yHBVMop)2%g^vQLTjbM3`an&wxQ{6($1bK--uNoT00n_Gy-+sC2 zX2@k}jJhtH2ee0z2(-sPWz98T(OpxL0Af5~rt{C$j> zC`d_M>vld?A*D6$i)+>eV63xFRgK#;>hXsItx>6nYdZOSGWy9ZeBKQ*lj~PdHqCL< zDAWDcVh~NLqmQ>ZW#1;7=03(TJEKxKg^F{O0y@T6MM&^j{18)D)aZP#Dw`Ty?k5df zo*@eOy11m!k}b3?RI!K59yj2U3D7e@4eiU&veHHMs7jHXwx}JD9x;Xr5kCGIq&rnY zo2hjPD)u$7>)NkAVi>l!1vJif-EgAkRBZm}&a&p72~b$f9N5;LpSoAFa*KFsOg{oz z2wKNt7Lxe=*0&6yR;7t>;w%YISdrXleKSXoCAJ!L*Yo5S*Bo%Pflft3oFltqQU;h; zv#nQZgIETPlI2;3rsnZBSAvW*VH8mt&%_Zw>85#Z(Bjov7x9+>3>1w&8iar(W5f?j znhj(ZV-_(?t|b=*}48HPUc#47Yq$=#f(X*p4_O~3TMm*Md>uBy}krIM-| zD}2JomH{k(PGC9naa5|ulIRWdhxS0)nfLs*!;TE>&A*6CiU zo-?&0{kXySIpW0h{vtzh2(5GE%(_gL@XXw_^?8T&lJy5*d4|RU>-5IqV+xidPYnPh z(MoA!ztrLpJ}B|c)#kl>q1w023IeI>8$0rZmGj?MC&7LLlqTjB)9*C6zxn5za%g5#+k)Rz zpsBU5d^1vakUjo>fdN5U(+?rJR2BbN#iTy_9Vj#4yEmqXj^@o@nNatQ^iH9 zMwTN-I?!s9E1(#}m0&u_!UI${1fXzw$@kTu`6k4hqX;>MPYl}=HLI(msfkEQjd&MRY2$UzJ&lZ)oT1vTaRU>i=oXE2MOS*0Tycc=gMeqj44+63)OZ=W zWu9#wEV!o=qA01G+v%UEv1E66#dbcUpF%BQaxB{WS}Y0;P;3zi-5--X>m@_9^#I`c z*{{yK?Awp$XpqYIMLldli4y`f1gdXmAfxnT4y?jSV;YVfa1j`6%`KKq zQ_{9`Pol=e3^$~G7RYv50yv6ovP4H(hveu49vWF4Jt5!eetP&lG9Y&AZkUi7C2qc6 z>P5Ha)DW=0R#f^G9_!|`!}Vbcpg%URsqYZeE_X(-W$caZ#CsOvLW^8Q>f@JJVj$OR zwaTVlHN%D06mUTU0xMnWZ)ycj#*goTx{IZlivk&i?Z5>)H=Asj`1!H(EvP7zodSs$Eu2^ydr!%?><+}S}f#i(a`)+94eY)RZLfWsgf2yl`C0 zG>zj_cn{@drDJ(1W-2^nkNZ%C??WZbR1Fx9wX#S;v=UvLB2lMu7v)F4C%lFO%Kc5u z>DQ;H?qwU#EY?j}iaNg$+3epp*%?f&*TDn0~;uo`nuOFkgiJkD{5!QvKfO1 z{2+aP%>cqcHD#OrgC(p@tIUA{n;%?=lDo#cgyj@p>-nG?E;%I^6@5lbfjVfWFawf2 zN#{n1u`ZF38|nJ@zbHN3<@%`s4b0FZ)~!rpnnu&lM;t!Z@Di0R1@`S*D(g z7W>ZKVedd5esyy`V>y`}jh``kW?~vkVy`I>o(^RGGd!}R8|JI89@2#TYdc-;&9R&M zErC3MP%X+Tk8r9}zpq%qwf9L>B7XeQo_<|69gZ&HPkx&LYoCqk-ceL0VFN46K#)d& z&C{nt;s13Xycq8ndQGfj(~Y1eV@f-zkz;8k?{6!5oyWe6UD4yUhCo;Cs39TY(Q!T&_Bey4Q0w5d0h{bROpW2t$z*p@Q*T@`5q>~Ch%Wl-P;T09b09|JvqzMeg= z39==oM2TCJ$}R<}`VQ;Gzjy*s{q=>O<8e2J9AYV}y;IamGE|4(OC;MbYEgBANG zsl?`w2R}u87SKLCCQJXCu3q@scqgUtv$&*gAx^{ff(fHlwi*rxO%s*E5-~y2 zg6nkveyO9MWhj>=<*wrz=PC-YnNq8+eTB`JS`9}Y7@CmniSDx`_sQ@Eg<)wW6<%)a z+wO%Uui|e$Wve-q7h|+S4r=fkx`>dvwd)Nr*DxbIvbXe$L#yUp?tpLVlpw%(s%=DK z1ag2Cq{3ULFCR4P&DB4Wi__^|b{7&099=lc3Y8*3PmxQK_+-bvR4_x6IVMwo)P4=8 zn81FHqF%4YY1FgSU!-m(Up3d`<=!CL;}Ss*Og3@R@7c<~2^c#VZmSOIRcsDZji@Bn z!=I@Y2laQyu#&Pj`{w{GX>4Fbe7P0znoiP5CBy~c z{uFwa%DO9d@$ukWdb|X{RmI;OZ_STuo7F$A^X(`1-)Gg*-6ydqj)fRD{)k+pkjynE z>EY!DzW6*Fe&*!Nr@;S)}AfU#1&WW6TWL_JZ#bqkS*akX3vgFc?jeGtt zq*as-<*7f&X#@{8l81EJ=Xu&3kow4Y$;_U40JDo_d^oPuk^j=UYC53%l#0G`|Ic}czZ++;W902+AfY7R$4j?;$-*LZX zlss43N+WsmM=dGY`g03HqGDbPmira;GI{DyRN7cZgUCO`WUR^4WSJq|+QrG)$z<_s zTOIGLOGutl2y6f*O*?MXBshgV2y;T;Bmq?0W+PeHu&(Lq|J+2D74Xt%s>z|xN?G%( zxBS$ENTI+=sWx#oDT=2=HbYmuO)!}&Bn12x*;_;)_%X9za(w`n&*<0w*1_sqXuw0- zwt05p1RUHXxaVsB-AIvL%GG>1Aba|92N*#Gw)VGY@4z)WhDEW(7WPOjGE~j*$4M7| z!@BB&mYX6aNkn5@{k-tzao?le|1?n$*Nlp8zd35*bKDstygDlq_c-sp$f#>`INM03&H3EF(3g`5V0|8lMH9gq&0WtDl5@K> z1yYR_peOJfV&YFnl6Yj!4FlwEbDV}06p3=O0z1)fde=mysDO$IZ#VICLL14kz83z!%N z+7pHa@3FHpRk+L3P5i*zA%U1YE~O);Wy5`;6Ia$Ky7_FnvV|ZsP>=ISYxoOS&Dx)= z>Fn30zFCi-q`uVw8zfrm>nJROHw_r>6CW4m%c3|?{u()J7ff|`GQP;60K8flkoc$E z#nt<`h7~i|tRLIC9;#=2O+RnRn|7=$Wd%bel~ zFWvI@c(0gh2jJr*M}xPHCsClTE7{)Sx|^a>nq?OZ@Z&8fc&*`8*le-A@%joCff$`< zWQywi;0ULo>VfDoA-?TI{h~dVuC;qV@Q)HeLAf8N{_S9*_wW}aE!~(kjiSLy6qri+ zCrO2i^XwI5+iaAH2%jC5Qp#1zzs4<(-K`3zh728Y0)I&X@jzG}I%D`;^s#I@m}=qI zh(%^dAxlJZ^i3d=k?vJdKn{p4f<$vLwQVocaB;VPM7q)^zCh@>AT7i&y{O~|{5c9@ za^^r(3Jl4`5ue0=kzEK^rz<2`s3B6r6*kz-H}pxRT}NQ4vKTbKmEIQ64TY@MfbV1~ zzBv9LvD>ky7{>Ds-8r#$pep#h_}GJr zfNH4zoclcJY_jO;bno*J4UsYhT9q^^9TYC4jUtdb4Dz_x78tXtcklv%9j!H#OJoaG zd84A$jLP#~8B7j_N7{e!axxqsAWCx#MLjc}SoLrBS?h>ddjrfnLCkJ<%+i0#@}*`V z8I$F!7WI4kWxpk(r&&Egkn3CjqQI0~fS}UirYMktWzrNzn?I!{6KRV8{w(rY$GvH2 z;8&7x?D>LQfFfnY0{qm$zCiI{v2wgGkqP@o=lBuTE1_Cv1MJZ6LRce{iyE5h)HyFy z%T#SL`oR144-}5TkXJZR0eFf_VM@8=qBJm_?+nbnQ%X%rB)s$z?m@-7FsKY|sR_Zt zcvJobFKtXLuyZA4qem~TjlE`>#I&L~X$@2^TtOcfS2l?k+rE8cNIOT65&#Ka(5Q|Q zEeic9(le%jdw$>Rz5JAN#`INAvVawsNP1dTqHXOye)vu#qojiBwX`2mt?%77=hK6(Zd=P=h!BT2MBY#Wsbx z5Q&xa76Uk)Y}`q3zTw5)$5##owi+99fsG3Q**Ll74l1Af20>aUqzw}wfLtg?x*E=k zOwy#|kMh)$$3;~7)@1&Nm!lKMUwbW1x*He0KA&Sbr?Aa{J`L57l??!Hi6wk7OZGyV zEhyJOZ`6Oadk<}z>Gg-x-EmQ=l`j6tbTS8f(AcYBF9CXj76zf-pe8yFhG730uHOVu&2P#${zTi~;ud9fd&Aa{`X+VYq zbD)J57~U64i<(xd4h?q`pYKMfJFhsI&YhD*oM*U8d3x8ia3_aq{1m3BuOAYYTfZkGC!g62zL)o2Yr19@ozU5F%&&^MTqz|pU(%&;lL-io8e z#k%Sxls8BdQbjX(1V(QSp~PCM;bN{P(tiS$bcHQB)nY(z-Z2FUG@8MalLvl$x{`x6 zMV6D_wgOb1B&t)Qz%9Q*89USe%O=@z=ZW0~BxN?-t4Ch*#^9wRf4=+~>HuCb5ceHr zZJHtmXmlIN>Vz2EC<+wjJFCwZ z-ku@m8r^a_7c@QV$egtO;WWirx=GH`UlzEzoiNsa&00q1NbM zR#*F+^Sn%wmwCTvtY4xSgG$A%yHKO4oVn31rNx?J-bDKY$PxtMUkAO}TND@E@UAP_ z0dJI5yH$&7SOC$FL-rp#7fnmwjhd6d`<%w-FMIl1NXchGEm*Z>I&EFw==(vXEez1T zClfsN#LqKSxYh6xirg6^R)mN6*c+{BM>Uyg?E_Iw63Pit`KeMcUJ0O16A8`7ERj$Jr60Be$wUgGCrBi)D+2>%bQtuu2UZQ zU?y;LNe#^SR~p_dt=`dVKTiz({teuW03=?PO0-n+>8^oXm#COnr~hMt)p+h&R-0#R zo>v~L&MLS|qWHFPQ~+ctYA8p4npo3NqEeFqqs6p%KtoXq;>ERm7Bb-40rAzM9%-Sx znySv!e&Dx?&Q*c^=8kR4VF}G5+q(0#SR^F?fsIg-5%f8T2bh|T(1QYmuKE%Yrr9EA z!A0Rf!GEiN5y*6&F+ON@4@AbNLIm5UwlrOSb!#`8zg1UykVcH0mD)J12<}bBO43t~xmFR^qt$`PJ=( zjMb2rOPo&9ByK&DcQK?6U2`bs_L=x*5o*+j{aiz}$$(24ZB@W!ue)TzwvEn?NFW1a zSC3Czd}3awN=mh)+z#-YoY62k>qTg3{Q`HQT?1iz>AFX(Iqsqdj*(2d@6S>~92{@- zIYZ*;B}%a~8)_Q>nq(lH?I9bOt>tb?`xF52>+|i&p7PcQ^>Jwo&-`Ww3p32T*A~gD zvD4?N3=T+ZcSw4`6&d?e9W|jQ>HY~>K@rO};~Bl4w7pT;#Z#V5yY7^iNcj)=<9bdbqs%Agk!GC6hxf zRp6dW2{eOkVi}7pF|1^vpKE<8$V6lq{gI#clR40hwJU8(pJf5sJrlLX><$~{zpxT% z)ca7QIKsS!KY1~U0`z5-@CjOV9s6G$O^5$gHkqbt!M8nJ>yoWP7(;abV(7xzxo{+G z9bE8NHxj6vR5bS-RUG&10t(9tr*hqdA)sD*VEcYKXxxY3$jWt*jBDkNo>D+Un6Uaz zZRmsMNJ!p>@{!wqiNF1ZNqL>I`~l2W4AeQ>dq`7m@BNM%-;KuFrv%_)DXkbspJFxc)UlsR)YDHYUcSI%XTl?RB#kwt)saY*eM=%e z^A{k*Jb14hOwo&@xu-*s#_@Z#1W=sYGb4gm5P~cw@h7!sYx)+Ygsgr=Zm79cU3Ghs zQ`OtCy~1=&3CSFTmTj1S@NV^n-F#KxVX&3Vu6By}QMjQ5qMLcfl>_)hJ(JuBPpf7@ z&10pjKT}}u=oJ2wCZ5On=uk%HE;tSFM1%1D&Jfj3D$lZCTPI811$BQund_b=k2tvw zTXm(fSoE$E0%>%)|2LdNtv2)L9$xn{tw@#;WcwZ1M~#?yzkR)Cz0LBC$MOeFX%c+< z(i2-D`_8AYPqQ7;O0(dd2X;OMjaN?Qd&R)?5fX!hlBZAZ=}1)C&V(qM?ed_0g8|U0 z{6T+I2k)Vsf0f6bhpt#rhI6$}WdCQr-K}FrRSv3fSk;l*|I?C^w^!8AxK$UodC)^{ zUb6#l*WzqCDORPF`yQIt)J60s-VqyCqgb#<4NX!So8*yIWw20jw()b%qAj^|&==Vq zWnHG?%U_}6lK1`s)fan)v%)?L``{3Uz-+Hxhi)+vd_SF2dTj({~5^1 z`K3)D_&eQ3jGj4AAq(znq2Oyx5UkaaILt9$6-?!a&4!w8NGrUZ1un`~19`-U&$Kp@ z=j9iw*w|uURXWPYE9W@*b(e+!;~Nd$V=lhPlJdeXbYo-1vh4G@2}ivyVT@OR(*11_ zp&!0EJAAkB1?c6qH;7ukQ=cHzs=?X{G5iMg0?Um=oeWjo8_uT_Rh9Cf#XiG|b*Q2= zu}lvKI{_4j_O(f)SVmA08q;ZksOsj)+Vs=n1CJ?oCGI|TVJNCik_oNx{wNrr-B96L zd>hpp&++!BSbrCU_gk8CQyh6U{fChcb#Q-=e!8RSxeLP6LeRjmZ$P-y(M74 zpzvsvt**s{wV1ALft4hH*H^(T;5q_B^JA!tP42+RZ6T_)i%1a9CC4~umYLowTNw*f z_*~>Z0&p$i3XPVCZ8-V9C|W4USoXIWG{!B!K&#aUhxOC*$+i3PbRc(N<@?xuF>u89 zWvumUG2CyW3<4#{PAOXZbnQBS(id5eCV9`gdA>GkupDBXkecbjLswuFb_%$ZJ=q~v zBH}Fc-35N?CrPtA1tT-Xy#;EL# zpSot}Vq@mH7zb22VX0^v*E)5gv_)zJ^>pI@f2<2MOcgd=#d{wgG3>xq?yoxV`X?8Y z%mE@?GKx%;MZqdztKZ^7E7g{_eZWrN`MO5!t8ptQqELkdISd86=a|zmal(G;^jc8Vs+~dI!rm zAl3`k%~d&f$~>Sg_PO$3E0L0MmC6w@OS42>sYnq>F%U>Mr41!yf@ZRr1e(ETa6pz> z%khBtzjQ^+Y!=@d7`N$yRzci-5dZos+u^$ed4mX$O9Evohw*5Uj*2yde9ble7>Wn) zx_w#kPQw~-#=Q8;2x$G3%*m)4Uag?LwOMMr=^y>~6pXJuV|t=n6wWGear^GfSG;RM zc*$96-exb#Xoud@wu7o~W5}n7(eEE!Y&%=Dm*kUSO3&Tz+pxW7Wi)9+7j#UP0#S;+ zQj4v2F4!%D!0>-km`J+-z*}b2j}ZZUrRaLc#?fGs4jC#yQ1fBr>_UZ>`UUV)r9zr} z=xy|1Lxv;fQiMSBED}4A@!Yhz)&SSL%13O!oPgzt(k_!`fJu;h!w5&lLglq1amC*W z36<*d-MV9o=Sjm%fPGvRwC3DqF!K58?2)RtSiSSLVSp&R(66IM47Jjg%OnP` zn8uB90`p|pr(b2$bhfnT>b5fGj+w&X3xGjl)XO{83QwYvZ>foRr2b&D&y06`%*7NF z^K?wgRFK$ZR)TZc#ENNvF-2r}G;bCy`yrs0@nPH6MSOa*9U!Rh$27VXF7WljKZs^A zbOS`Jy2LBS7r+9tQ74GJSAcO{8t$XotmdaXA!-+U*8RLlTT-u(gG@q$@!)W*C9TpDP-B+md3yWJA$2KqB2=?o!~O~@dXa~{P}t;Qn$@S^QzdG zMO@9W%xdf40Z_!gX3mStjCE8DKHfCqjaR%A+il8B%EnIzhiR9AK@u6;WnE5YZzZ6h z1Rk0H&G7FdD^)|N!EQ5p(cH4Ij zo-s|~;C|_ZtR3Vs{jt@X-gI#6_lcH_c2$1P45pOSRe3N6dSKO9ZxQX+GS2kD53fvb zQw`>-%380V_CYC-Em7g%^qo|14F-37sT}5s=HJZU!Oi^(msr0~9e8PTIg$DS0V8Lp zh-JI@34_561-5k=!=Iw16lT$*Uts9-pU;~t1Gh+$^WFd-$PUagbob5K;+AZCb%YSa%1;7J?e! zWJ{ox7}h7nMHS6A*svv8a}lpdJ;f1!cPWuPByn9<7WHX}Qg5hFZk#P&V;>Mi0R}1Q z4-)*B&gs%B`ZbW@<5EMK5>XoKU)?Qi;0v0C~nE9|rGhxkGbgHK z%pZ@`41H}aK8)!E6ZAJ8Fv6cY*x}v_H7d-_DfD zP95jFk_D{}c@E+IJUUz5uzO;HCjx(zJ4k`$dB${wIq*KE%X$~7a+h?J%9Jzpb9p?E zL+>H{{)UzycIhQ1IS?oO4!bYuDigF0vF*>$WNh@urfi*70sYatVnZos%?8o*~bR3wc$p8ofWB$(6SGr46B$fL{VvWfD%)gM? zyrzqx`o3W3Ui-Bt+4YW2%{fmAfa_1npjCgfzqxhsn*>d9;B`9Ie^aa5ACvTGC;)&N zn(^Y==XALTCh8F#|00hi1cplPPygSJ4h!z4`pd~Q2{{z{4|T&b<~;03HsgfK=nQ$z zU%>)b+6X$&+~qfuLuN4IBTMocVw<%7`!r;QU+7zAI1R(s&-61sWboB0qr9U}^iLeM z4G^`Lb{B%?=2-u`Zv?_sSS(8=TeOzi{BrBlJaH2?c}ljqFTUUFGs-B4(pG?GGaf%* z`6L`iNEXLsA=yuGRG;%ZGf=kd7f*SQThGpR(%vb6!m^bt=-kS>m81exH7=VLpiI5F zSbqtk3Ud?ytRzHIlW|flU@Y`Ls*-TgrFom+2Ld;{^r2j*L$fsNzuorX6$^AM?T3h^SsKk{^KX1ufEcu84Uf{+ukJA z_{M-bqeGJ@bOnd>{ejQiQ5E5j4vgX(m4U}8E4+@-uS;DG=*DHm%1G;c5U${P4{E`g z^qh3V)rr&za&_hjP+X$t4x+?S=eHY0( zJ~J*758F=tvLmQd@GYk6$otm>-tURTx}E%k@p-Do7r+x{&lLX$*Rp{nYwpyw&}L6_ zh;ugX{3!Y?NnkB9&BiUaguNADzm{O7Ch@gzD(hwoHV{l1cAhF`kzC_H%KX=8wl#KG ztzCwS*#HRjPw&Kh-8nB(&>ls#D4#9GxA1-$swGrg|8l%=g2BV*ve5*8{Pvnug;oZt zxT@VBxpz|N#i-AdVW8Euo{Kjbf>oMrvCN#9JjnNVa2SjFXuxGNh8dT|6joH?{JjIr zVt~``CNMA`l@gy!Blb!I9iu(9!5toMmH*D;iRMH)H=p?5jcQ)dfvN^l2oCyWchY)(OT?lBYth!gYWx( zn%ato<&N9j5^J#~{CmTi@!MwC;`-Bhg0&b)4@@j8zNL5IibQ(@q_iM_L6+WumwhZfq>Tt z$EJHMVe)adv;OVpTnWe?cr`Knn-R|w)1lrKDQM$}Ezc(CEMa*j^KJldQUgv>J&!`* zv%Z$IR;Y2hY-BCH%jcBj4!S7~Zxr+Zq25qsKH{B$06zHtrXMXvD}^UW&(#;FGX=%j$B&F;sfbx}BSiktgT2y>H97?0@`bHN874p{p6eJ7*TG2c z?R0({fZadLa|n4?USe6>kE`XMtqUn^h12US$&+(?VrU!tt3yon0hg;!&1Cx#F`~Y2lnl8E`IIVo_gpda?HX^26_h*C) z_x_p>WvK+kaS!6gy-DKr5o1?3U_Zl9ydr36q%40pmrqKZpu~zOT$dOV82>?w_v78| zM*{rC8h3ybuqu6x;q(IZ)VsrZQ@UD|0;b$4^0~mfXov}O4;&dyr;!xEK{Mo_Liz?@uKF8&9LwoE#wa2BEplR-xd*ZM1suOa%Gq?EfW+WCI==kA^A9S&L zw9WJ7edCpzuGd25P662LAAz&{p7F>2TQrfv!V({je6yq?ZdklNL1hAB>C)Krt^p5& z0M&1FD6{ipt#yoi&=T>UwQtLUHA_) zn?6hdN6?<)@g94V$gQfA{qdu5CtP7kk(6`p(bbWGj)?6?U~7+&YAK%Gm|K$sUvx~y zPY1YhA5Jp{IY1g3YQ_~Lyw z;*5pn{mXN`#)?)b*{-ck!VuryYku-s(li!m{SdV4!<@kL19<}*Rn?YA^u!390Ks@^dY;Rixl>jrsgO9;jZ+p^8Dj>md2L9s3Sl&$b z|2u%q5bk@>{K{E;*;6khU@JUU?z1Kv{Teyixs^bic{0F-)xK}Vv2E^wm;Ytg>|K

*&*cdIy?ljt(WM*)h^F4?gu5W2T!?xVmMXl2%paw~@Gz4!PoBxA2yD{c{ z#9tTmnS>!M%)IAahHNgQ2=NGg(XE8h61hhRS1g6|0eWF>rQkdBI9>?AgLTv8-$x5~ zq8-0Tlal7fqWFFU|3>ztD$BO1vF{>DMi0Ew1+)qw0m$bMvI(e zokzFnSU*bPMgru6a`-PacVs0=5iftcc zINI>)P05A_FfwK}vN!9SJ91BLQ7*KcTE=|lBYlAQ_E@O&cx-VBOY7#2#!pd1NoX32 z`AjD#vf+KV5}?gwnRH&^7w>d|27oSVPb(q&D$G>V^#{%c`vdzAH1_8SEP`K^RCqH~ z-PCwwWiXV{)GXjIiMb#{S)if+dQW{&iy2P3Yv05Hu>;T69FUWj0d1Xhjn!nOnO_nU zbXCr){A4$>IY(b-5~2#Ws2k13Et=(({#9wv;hC!IsM z@b??(|3%xt`{wU5zmZBaK=VGvEh~Shxrn^8XaGl-DZO~MI@(=a_9Sp*{2zV1sOqv- zGq`oCoG)ccRZ^rmH(hdUO$tz}V>4dmhrEsUKcs=hOVnzH5Kb*!!MuV?Sw>>`1Qb8) zW01F_B+yS3EhQNhDN-!^6Cy$k|7@C^leK%cD7$K=(nCft1d-=coq6;Pz1%PZHAofm z!7s&VAxHNDJ&^{(hCf`r)|viNRW)sHhI^d6E$UBlJYZw-{t-^<$MoOuAV=RWkiPVy zrk}!+x^AL4Wr~=?4HMXnP_MiX;_k}oJZQedbG*ZP_uMQT4ATtk+VV2IFnKN=-b4v^ zciOWcsbKiIIswKrBU{jtZicPbaMJ0W5>CWPl8gBxQBBa%j@SG2(q6q%Xnv29&(6>7 z4ieaFrYBI$6Th0)q*PlESpNw^_{PZF(+PYCR(>xYtd;4inCZs%>hkr3Q++jG6_LjN zK!Rrw^LG)H?7VfFx*U}L!spR%?mB;ZwA6jNOo ziTQ)S2ndnUn>bqrZ%0}I)J`o4{BH^XX+zE8^nb{Mfem~>)G?Ls`U4E2NAk=AWCH{V z_$~uxUeSX-SWg3lUyz#fY)2rHqrw4!BhUENpdHK{|9F1Xr5`oEKN9x~V|>L*m&-^V zPQ`HFXCc{i4SwJRhD4D^4Ae?VEJt>f+Bw9zZ>Xr(Q*{Xibvkv91F%SFf~h#=VvJl@ zirs)FN99nIusJ7Cp+zmj#Uh}}-}j?(jpiy)$D4t7JtU{!v~vMkI^|VuJyE(Umxr_r zS8wIBTyn~@+2aBtr>mdE5A{a`Ez15QxU^`?VE+4}J@`WAvO5b!8caQRlhJx|XhsEO zZL5M{R_rIg-7Z7`n5{Ez9jb~R^?0@pVEam6D#GAoypYNjq92t!gyh0kr zf?VkvZ%UNYr@Jar)#^lT)9@!8|PA$J|SK$Hlxv zVMi=)Uu@s9aXBi*3Ur0qZ~HlnpX}#2Uz__!tqT%{5TXbGY)gS3HIav^eSWX*e_QM34i}HLh#jDGPRq{if^v!L};mn?mtcr5GDci93?BhWy{mK zvfM%C$6raQM{lZ{yvo`R-4(L+dQBHNpZBH?IuApNqWtr0wq#w@mOtBlI3;Wca=zV^V;V zI_)^J`0=P3k)jfNrBxT-L0lD@Fqc7k(#i>^AN~h6PL%0|else6d>Kib-MJG(fT}Qg(Lden>kh&ACVHf+E%M1WL zZYj+R(N93`#0~7-e~#~_5m!?>5E;~c2F6YjgsfD#^RN1i&|t+_nUC8Y`dX8U1CzW$Vn6 z+{ecRmO&b?Zo(@@H}FMz>$W%U_vs^KAtxjxGc-DhG7{pL`DHcwcMi6O6$tety_%g} zd&j`ML%o@N<7?ymWEFMn(yZFhqe*(`mtpM9h-=qh4Ck5-uM+;vVPft7jI7<(Y73pk zC9(3ma8TXRda>JnHu(4a0w)9#D8RA3F=v0l4&W3^19ED28Sfv`+)E+Am){oiy~5SJ z`HJRm#e7MFr;)l>>bszaO6N}fpJb7HPdRl2d zLE8_BE1PIvi7Y(IQL=i=J3f77H+6XH&Zlcyd?eH-utv7f(LVs4CE{2(pJ+VAg;Q6= znouGxo1N(rpS^GMEBI!X-g!rQb(#h&8l*SIHuPa2MSw!Bd5|X1n9aPy$C!R-?!L?~ zLNynp6aVL8SHSEhP_`Q7u0dioGX7MzOV4&9s{>fbuS{9>?w?WSzKKeN;lKmcF=YFx zK2{138dk{%nyO6wv3&dqkh{Obb!KUWXeO7MPvHhiz6uUWMzU~mH+iH2ZH$IiLDm_H zO5&*^Aao%3uh?fODSnD=DtB-7F5k};;t%lg#hr(3AQPusg=Ej#l;rY~GfxuuQQd#E zTdf%>A$J89=DZ0}|6o1N*>{73q*RPOwnF8G5~%7@uXZ4ehPtLUm8f}hBMT;u9kr@y zJv-ig0B6eaCK}yk++|$0b-E3QnD2odGSjs9)aZag?|MA?stdVyAJ#(SR#G^z$(oGz zDz9T-Q1i$e5qprFu9J1#QhoL5WmJJFUVWZnQeaNEhD`D20$k0KW4SSSk676{rhIUU zO$M8_lfWV_`RZzqVrGi5+8Iu*NsRl;O%n(f23O;3JDrf29F`KHKyp(~X|sRy`{+Cc z=^XK{RwjG3==qUZIgtTg>Y#n?{xze*jY4bMB$BLJTzN-0Ld|cK5KyPFlVBj>7rAf74K;$TeNokTXgm%Y z(QK_V+zahs%aXp$6;`&~ZXKBHvtq~B%P4}G$F8*!#;*Ugqp;8BCWX*xapi;67nvLt z=lP#i|)6kv&O$6)cgaApck%w0`_G|qrS~ATo{^!g+Q%?_eQ6T4d=wE zJ^(1v4473W0>Ta`c?^MouDIV{MsCC{@s_vv2}=CRlNhqWH5=HUXn_q(+yCwpeVvnzq^T!3kbti&u@)@XAf%hT;!s!bpe_NeCwlH1+4%!am3R5j4b#d>OU zl68H8H#-k}Z>e7SO8lcj7xVPTJKC1h!{Chb$zZTo#_Iy*PO1Spcy@$w4kNFUVy+_Y z_9OiM*XFK#dN?kt5VOwp@1qspnso-kbYV%5aJiT1;x?oo_qz@#j3fzqP6YgwV47)Y zP#Hd5Sv&ZN=_6YNS>F!J5DcpH0$&(|#B(x7ddN&Aag#Y9o&NNjiE5j(T0st0BZ!-u zWZFCeT)JtS0GHu{711CUud z$ieIK7cW7hzjbdK-gZ_TUHi39yv8)WR8AaOoPd~rl(<2g`*mriQ5e6aQ^?#-i4g=; z+19Yq&X$+UxN-8mEO;Kf$IM9AHVD3HMVR+^E|)?fAlpz4nBjGQ{h%B<#DpyZZGAZF zykVVN96Q5q?j+2`JSq9LxFKXTR~XuL_M5$yGVea z|3PkaGlX+k=UFgq2y1!{{z>-#10LH^DNHLwBki?T=Bge?B|uzfYx zFwhucfVY8=yX{^IKBlL@KA7{$d#7>G>7(b(r$>wltjL7V7H=qb6;TSJ z$IMjO%4o6#3TfX{96s)Pzc~bXbzFw($fPR&8NpmK9d&{cgo{9`ZeZhCTyF#ozY7A& zf~I&Uqhy88SKtNkKaHMV2AtjwgHAT0d$|8f+1~HH=w(l=_RRdR`Xf#JpF`ta5@7F_b(ZT0 zD3L_>CbjN`iL5=1Z6^)~ZK)>ypUUt3`rQ6)JSP>o(Ml3r+^Y2FDKd|qFVk$xdFr5; z$5HC%*qC_gmxbriS(1XiBNLVtKaT{T4~)ljaUqk#!VI!a#STWd7_fM zo=?CxB@PgX(x_||>rI<9MY=cwosiwosLr5De%8U6v{5rX86co2~HMh zyNRa$t-FCkd`CQWrA_A-Q`KZFSh=d~%*nBD2MwGAIN8g^H1uy&D7o zl{9LWvNUN@@B#xc`1D75$cGLemOWY~ygR!{QPsey307sSS9Vs=xnq*LZ#F+4G%UT+ zV*?%nE?Is}&gutF6x(H4R;l{#^$jgN&cUfvV6OBcZ+F(U;L@;5{q((2jhKUp_LUTv zf3xYnZCg4yzMa^$DJfLXA1vC^STd37gTMwo8e`@`HHT*g+ z6eRv`tJq2kKc=79c4^32LNsW`T;-R15BCHcK9zg{+*@BtPvfXA?qkkE#B?G9UVi>gI0|wS)gyH0QgA)y zK9Zj&VE4qBK&n5|8E(CsPI39pA_!ZSS)l!#aWZ$eMn%b0@*vg9P`r}7Y$9y|eL-1= znn?1pg_C%)*{YyVZz=ZS1HJ2;FO3 zT&`fjhO)Uulu6hidMme&4M+kt9_pLKv&@vv>RH!*6h}(u46?xTv3Pg8l8coCbuP?Z8&{L@t0k7E zN?7i17cZxs9Wn2b8}9tVG^n(l>UEm4mv4RnC3e`zo>+bj)BNq=LCt@pg&rz`Si}cr2m(TD+Z1x3Y{KCTl3)gD&H=E8i=gFQl=|@_c%$k`kR_=-IR_ zq%~jBxVv*+f&Pb)ncT>#bok5arGM!#bFE@wI{sQwXwX7i6x!Re!!5Vdu9EL2_{@c` z>awEXKI`ATPu9QLXs`a%P~zw+_kYx5kDIGVT8(%_n=o5+G7NPL}BquL$Z&VN=U5Xr&H#AlimsWj_ zXV?qCSkf4Za>fK1<>VZOrpD(OfHqU}wWT05pnAOOk;<-=ohXZdg``6Z*87E@P?B|Dc0Y&QrSM9U!}uq$WZ*-$w+QgH5~q> zwNm;u^mPEyyO`k3aV_BF_$;c%6yMPMD*tTMP`@g-gK5djw7$C2(paqik;qz1%_wML z^7Fz~hu+(L0pFJG7+YhlA=oO1>&2e0`l7AR=^>JMc3R8OHYqoAGTB+vM_DmiN?muC;Kx#ep!)%&28H^6RAXQvw(@p z2x}DPDCQQaTqK{M_jn8^m#gTWO7i6Q3}H#RMv21g53d<4TQUF$D~LyAO#Kt-(>-{9 zT^oUuSEz}0f>eqMs4TN^C%@;EV>H=n?kyCC{4nXt9hFk%?mNd3XS*bU>5N?zRu}on zPlpsOI}G=g%i;2Y1copfs<-pt68!NGQKkKqo3~+VhX0Wq0XiDCX{9wXk~%o~jvhuFbek5N zDu(Mirs`;6rh`Vg$wr$ppFl}A8IHeqv4hL&)8^f1j{HuAK8s_<9}^W|7A<_OtQ%qM zBNe6>ZCobo&fau>vG{tc{RT5)ToZnIIu`jyHTWz}JVZ8MIFeycUjvHjpCh2cX{!7ckb4NRZhc&zR)Gu#htt{$s52kY^#O+>eQB-SkVL z+Jg%Cyzg95emdafI@5C|4N9%|zNmMJ=~D>jxxQEJzrJ5=-Cr-VU#kCxs(z!;>N*15 zxrBj&TKh^jKO-h^--|5x8T6GhUOdkBkoA`OH9VloWHPQ7jU6MaJ5TgrbsBM2H}F^8 zmN&aCv|l$|Bltvf;_&9W5cz=JVG`Yh9d}A{HYqVR1MU~TOx(RfAYeQb8~hA|hn5`dn1IE^m*^;22bIrzXX){KTW zNrlPd2z7n-FIKD&0!f-7sVe$_13cO~`SVotwNKkd7~Az8{3qZXA>(<%2PVJ$C> zqr4f!4LrEDAPv?IYD3?&=^;nzN8i4rTL0+n+n^V5AOvcx4d9G<#G z6t)g>$RL~#Kw_5I_6%X&a9h8<|Fq8sBMhl=5P!4`*9B!geK8N!i*4*_F%coy)S3cW zTw~DD7iOem-WCIk|Ne4qk+35^Hru&_kOP+8Tx9jn=_x-?yD&fjm#L@M1hOH#h1PLw zUiy+`0KnHjKm#M@z-+7BtV5T6J9oUyW+LlxfM}^%`}!ko0Ty+xvdoX9CaoQlB;*{!tcTP9K$a= zjCkG5)9}XT1_-M8VO1{HusnsDzK%C;g+O1eCi6Hoa-CIERglF03i7)18ZB@Vgwv;c z8J6=r!q4h(s?B{+SO!5t_@gMAC*&uQ!MIZtJuo)bI+7GUQ8m&^QH0<#X-@13JZbr* zNhirqeT$`#CM1-;-`ZrA`Dx)zpk|s#&2x7cA^1{qZ=!Xp8jd@$^<*Klc3`6Xg9$I1@eg^)`PUhL;R+(zr zcHv>#ga-B0dWjw23Jzza{+JTpI*J?(j>1{4e`b{9qa}FZVGrq!bOO@PmQvQw)$)=;aUjFhoaa{SQ|61-l1~^*FoP18OmHx8Y5DznOqbfxR zRQdLy2wVaSGY^rzn-n)Y;jzyL@YYmtP!I^ zg!R*vdUlyt&{skfXg`&?0-mIuY#pA0TgdLmF8``r1bpLrZxlm6O(1G(C1Tp!oL2Ge ztbex!#MYrIMnlFISbJgSE@7BSNGt?TGQZw-;--h2s5JD^?H_Wth3mq|5*qCA>74mH zyLnc5vu9Z;%axlBO)A5>mEFci)BX;2l*|_bjXH#%zNx){U*REtMKfS@T<;p$=dNa|k7R~m_Z&i8nG5KXu!r0!z#J-3TIpmF3`yiiGvRjnU{*$N) zlLg{B^<7@59V9?Vtj*uKDPHx{*bKyafP(#f7RT$gQRjj~5} z7uU)WcAO+oY*kaosDQJxjHz?P>1ARI{e$$wJ05%Tm!vXgMpVvY{wH|aKa7I5$Jqb9 z0+0$o&|~9rtJwZcbui1RS&5C*MhPX{BC4#bOd4~e^B!KU;dqg|eC?l^>*sr(@D%<0 zHAtH!Hqz-a2+#2ETasL3n}owGH^h&+!KhX{->EpUM0J6JjF!_D1H~_f$dAZOha%%{ zT*`slw53h<4|R*lcN?_|8f3*77RJGc8@UdeD7^i40KPmXU~7(&QuDPO zwg!ns5sXW8@oWR*c#NJ2i_iIWA#S?SdIBoT#iOD3@TPFy)O64=^A6ioLYdyPex?{} z$iMvh0Km~Su!O&iGh&uuV9@D-WB8MalPv!+p9)}@A?U?dsgobZk151RO$@LCa{A=Q zO0`}(HrvQ5+jpG^E4krYl3lM}T6rM3G=*UZ?esjHcr{u{W zMKe4>nzkf`lr7V;xyq)ozCD+I4<4&a+NYurtWi_Tm>dmPlL==@Rum>y*DY)H2rZ& zOdj=wbX_&Y8C#@!r<+#OUq^^P!GdS1=Q~LvRti)&Jrs(o$w=^zDpoz%TH!icS1e&z?Jk4tPB0g+VDF_c!&_)!DBTMr89yn4p=sW4|79ge z`JukLMbV>{CqyVEn2~*gSF>ns_cmofZ3Wya>+HA}7g9bl@WqG%Ice^=nB0AHF+fGG zf^_j?PJwIB*58@EZx-KPl;SqY#0j{ETAq6a-tKSG22K_|C6eWUSi^nkj)%-5 z$7KqxF?Cw54tk3)mqq>N#4GMq*o+D=RBExXz;fo_t}9DiV<_@#5K85VH8J)O26WlE zXdh-0&U3KD=F)2eiqokUfjB? zmL%TA&TIEZ!h5eMmGtRIJ$NW2q&cs|QgzCX^Uw(jk{72q?*Y25j%Qt*`Qn_&cWaBc zamJP|X)^AGSYn+PlfzjAo|%z@iy8L3k8QdBZTwRqI>44Bu;SQS-wo3(mqVIv{sMve z%TZgnFI}@_2%Rebuv&#IE=-{w8AZY|ew^mwWFwdYH06%MGyPD9!dWZm{8|_HmM+Ru zwgM@G@IcQ>Xnc5H&18pXk_=EC{o=|XitFzTt;xb+Npm*~GZ1vZd*)sa%;1v}vHBPB z{Sh`<;CGwyc4-PywLph6(=T`~Y928eiLtub#Pb&Tb3LZGP^HBd6<|d2t z;ZsD)27C1fe$ELCu3Ser6KT87KiE8VEkRdu#_@4Q+rD~JS~59ZRP$0TW)BCo75F<~ z`S2{il7%cj8P>k`L$lvk zb8#CvpyWFf%a)fV(uTbZ)7Bwf=b9I zx(Y+|9`ZXsBFA0$r#(_)p`m!h@f5y`#=4=NBT%;uD&U@tXAKX+AqDCr19n6h7cENK zk39RKDQlw^eq#b^;Oo5VjYts*XQY%?*(_<4IN`rMNq1V7l!SQps zd?)YjT>AtsRI0>doHk@ROK~#9vMaeAA3fi%F#3Kh)uT|>i_Y6UjRLw=jhN*~_N!+t z^V`a^d1Vq7++P#jxKY`a@!e0U+0gn(N9O}xJ&~UC-a~$4ik{^N5ZQvP**@Rm$OtDO z+q2`2Rvb>~TAfaH(V+Yy*=@5Noru-H7h;9ag*-bd%pQ9XM@@WUquD32_b`eJlBLL< z@|Xuly>})I^3qj-gBIIsX30Hn8dKW;a?EK4r_=m(`U|uhFkC#J z-&BdT(LFf6yDIEZPvuLN&>34ydc^vq1Nl-?2=42D863v9YOuZ73q17v1OY1;Ih3oy z+5z8OMMO5wX|`hDsm)NV+J*HKb@8jaM7>|Ek-Gw&5!!CFxhg}SM{_x?*8(G<9rrfI z0mwJat2T+%wMiQ(LviknJ_j(X7{D?%$5-x=)f1P=kw0W(Talx zO#PgEV9PZGHt~~*+|y`|MOt1rEsn%MWZ{=Y%(f&xCm>vb@pHwuZm-wyp5rVo_2??u zhNi6N%f^Me6)^cP=w9~0w|RC{;k-@-cdVD%0YWz5*QYI@;Y=@9c@vZ+MTI65mPM38 z)=Hxri8jkg8h2uN8h$-di3BQDIF3NS@EDRTa+>GfdIC>3URu$Fl9}I>A$) zq=csZUmSI(z^eFWz;y;WvGjS3WWFMDy)vx*CR~Q#-;|f+%FqX42Ry%Rp$H>#Hpf3v zH5W_TAfEylJ-BXBfFxm)R}$q}Mc$CQ_3<);D|b9pS`s zys0&vj|t4Q9rlq$3|V*N@x#a40sg1gjkU+W9-~QX>r8VE1U)uwj4H+e&+RynCF`K{Ux`qTcqt@+VJESJfx*Dg0T2whX3Kc`hZHN?94`b5pB3~O zja=f7dr9Tgc^m`+%5%FYmmdJZmZCsPSyi=182Z2hWS8H3suga_Td%I6%`8$O+PvMg zI(S2KZ7Lf4-w<5!bDUB%Sf?7m0$(1$KWBb_>m{)70_{_>x0-DXrZ+ck8fC|Q{@2B@xj6RK zt$C6)y_F-)Ulw(oTIW;#FQoF}6TmM9@L3;!jgsfqBW`EGtd07yzK7;*)4uzuVamg< zrojoO5V;{$ajAx-QbS6WrmewZwzjuRelGQ&nr%~Uc3wut1T=*|56uMQ^Vck(8qHyGXy>njqYSpV9IRK!-GTyYpM$N}(K z=yU&m_5)Y>xtrz1lsl3kd&hF!Dh=3=ZiGBa4p#kC2>rhjh=}|tfb=qoNs2z8N*Ei+ zofCXJF1(U6o%a7?Cqp%byUBF&zm3m!s;9p7CV)CDXkZ@@))wS1RSgf>j*BWxfGK@m zS!oD+ua5iEZt-7R*)I=uAANqxW0&+QbMMP`{GJ*qu5%D=x>vz4v>UonP`wD5s9>yA6ynHHRI+!KhGcf+gs|@?UlJ{BmZcAF3FH#Qy_{NZb zzeWrk?SkovTD`>kbuXZo>TMHu(L9!@&U7&fI98{NJR9|&8;=+8j_m+o{jKOtP3C}ZO+|ORI23QVRna^sp{f+zoL#-8AG0&;*%rgaTdU3GdI7XJ zRew}BkxLiXlF0SK;)r8BYgi1%EMh#AVK(@bIX-^v4@AKtE3BkoC0J?hQn1=)aDm$1^|#x`+`AQGDU zP3!9~iPbHo_7kZy3*Yvwd#i&}<;s$- z0eAElj#Rhu*nBBQ?i|J83!5NddA7nZ4$cLZTy89Uv7SfSRk_Geor5HaxeB0D%MR>b zH@K#akx&fpm#|DHl=Bchihs1>N&oNJ5cteBlhHpY0ON>4_Ef?z@zIo&U!3FCoI$W=5)tXcOEBfQum>KE`#`J%+1Fx6XC~D9Ue*%tu z59+2U8=#xdZ|8(E`LtOZAb@?l$i(_M!h4E0Y#2p{bmdO52Rlts6yd;eYY#G(=MB?J z(Grdi>NOEzXkQ)nayn=dXc&`C6MLxw$37#!pFxBWiTo+$T$O}P)qxF)l(Q#92q5{I z2EIa)*Jnu5VceLZ=>tH(2m5w+&x@Jn&P(VZJIrX&a1qn|>)}s&UUF*P%sj>*6wAZf^21rTY zi4YK>T`oc=NqWTX8cC5KKG6F>h z1tOSu|0aD3^Cx|OrL=xY&a7+zYbeQDF9p0Yj%vIzOA(l-Xc#Uxk~G9n55f2)G#2}ifekhAUo21!rxw|!fTe6ez^Pi!) zNl~;)Fk@SeZn?PiayN$2-4w`6l1#6G9?>}V^`^sdi}^Td+I>Rv&(l(yTiV__o@bcmlEMbw zDhw}EQ!jqr%KsR*2NqX&6ik9!M^fe;YnU$;SK!B|mi%XZ^0*+EVSP>OSZ`C_iN}DKJqz--_9hYnW6%X+TQ)j=L z;+R5f(vSe;b9*wb#VmRy`TfN&>M&~6rpl_@N>jH)gw|ag_A|<@?=||d&8C2Wq6g(M z4^`N5Z&Mpnm)RPN*A796LJu!K`;aT;rW#&pRAn+;&}wiGBfxo_k_z#@JboVAtEEk$ zBOcz(b%``T5IAG(*T+$sUaZmGU{?rYXDxVU5lnCv_)@tw&}ySZQa~QFr8d?eEX^IB6v3w)341!c8)E?I-0*d z!&Gk=t5@ADBI6Dx@$ zE7L@-t{e`Cru)hi6H%@1M;cTn?9__+k-4+F*q6^bf~dcSjW=S^FvGjZ_h=+ZHgV7g;i02Bo9Y5CLKbFknh*UK?j_F#tLp-IEL^TI=?tQcLk{6vnU zdYa#bdkYt9GNIq`=!iCu7dPS)AM=O5_>22GOiY0XZOsFly7lf@ z4R|w@b!LkX2UckXb7S$R!jd}`VA^#+*e4rxvxbd$#EUmAW63{0+V_8#p57woHc2>r zsMPD??5DS`n}k3hK)lIn)a#QPvAKSs}vgBitS6S{<>N&GC*&e*zG8|2*?AqHi!t4oZC?A&Ybbj8*Db z@5Sv6OAK(~{eV(zlU9oXkJ=8ccV6pDmtqhD=H~%cGCYc#SDOne(Ec|Z`Z8%E`|BBP}losPLCSpzf*o)F)7{X(;oszbUQ zB}o(#a|TMsGsI z-5Buo+lCJ8W?>r5qZg+#T?@UIBYLT>lX3MU2FOg!PLo6aTr1pN1*~ck_Nftnog&$^;W(1{ z-S7)x=|u^VgEVQ>eB?^)&)S%mg~wYl`A4#*zTJU7VpKxKjNWed9`>#z#~6BVrNzSA z{uNN$OIGtYi@H`z08;73q3~}&ztMiyMOuw&AA{r0ZZa>03K6EHINKk^*)YM)9+{px zvK3hhcP!;LbBATM$s6*{cCtTowi>u!P$#xVGq0(C0D3qkZ>0&E!%($RN9v2Li@gIn z$n?A&1FWu<-;tLOXwdu)7Gx zuSedY6_X7}=6G-99W?#bDA`+@V{Cb7mA6M!u@0Cv;Q{H^u!;skRBFbY4()D!qr<4- zw}(yXeu-Esi9#{>lcl2vEaku$+{ruO;DBsc?ESk)GVU90$ND|#_j`h`tiXFshQ(8@ zJAVf7ufK@lZX6iA+5YkL!MOo5qpF=~$z*!m$|SK=rRmkp1G3Ex>O2NZs@tTyIua`2 z^Y#=>7jGUXmbH3MuCiDEESiq#B+1fTEF;@*0UdR=i{R@@u~8SNgpz85=0*&9joo^`D zAPu;^tV&5ipK*($>}oSUIYpE=}PczYp#07LoIw^ueehk8g^@5MldaGS~v_ z#TrRQgt0*jmX7MT7hQ!+XwG#yW500&i z>fwXL!u;#F8YKlTk&cVODKAK&0hd(XiPMdrL-=zl`oB=>8tKVezfG1M5Toej%E#A~ zwXYw}rg!XG?9v_&U5Wp};9`IWY#p7+T_#K?blYAAO6?mZ7J2}C!J}UXi(U@5$C%VW zE!S`D_*EXWN_5+rt{k~ofp{M=<(`6dv&#F9vyJVLiyOlLj<4=XB4p8{Z>PK71Hmw& z17m;LcHqG>1?|I!g;BCQoQ~tF_NAKh-jXJLe=28d;S@^s+RreP6%9C=+rMl?DqD|w zU5OR62JzFe0Nk_xzj($E3-TPBt9HM~U^VhhwL03d&73Aw`^-A^HLnXV+TamcOywSz zww|^g=Aq*iXu`CCj+O35hSyiF2l5&hH=Wqg#dQJ&kgh_~NM;V= z>E6=1d7BeT?Vb03$kCaN6)i{HM4!;9{g8w!^hZ$kbDwf7w-|h}tbi{)eMS`z2Um;J}lb^ekBj zW>M+{B9(ekzRTQJ7Z+E$Rx90}n}$eQKpRld8DNKXF3j4@+=qOd5Lpy`@efBHw(;e* zTw_GHwNv)8aG%N=NK3D0DfPL>${u>M>vqU=n~oVRF18SAynr>aKUjgGZ!?UtgPLFc zH!oTV@EB_4j!#v>LKW4HGB3j&nUyMsjv(dw$LEBx!>$?6Zzg?$&03oHf4J{0qI_Be zQYxm47^dsAse9%u82?Soh@`l&qNT#zefg5b^}XVfk#{4}wA=-rsZFDmgz&D>jfSHK z@yeDzW)aEs+_#$Y%oIIlpC{%2Sy%lrRBs#ifIBgKA@uWO!Bmtr+e}%ne0ben$bL4) zYD!p{WuL>?8&l`Bx0gUh?N3LKJ=0q2^d40Y5Z(WCeSdQiXlK%FcQW$ZC^@U+gF111 zkyH1UtM;dc4{L#t*c9mV7 zkXASSAWuj0*Z-~H4U&FdU1 zAow4h<)VTS6+Db%J?bKywS7?S_y0pm^+9$5Y(nQw?k?z(B~s_$K)ASPy*F)6=j@7F z&g$WU-tl{aYTEP*@f9p5Grs*_TGjRD@Dq(nM2tmJuuJ$qm_7T&bWmFN*nKwxV*Df^ z2(&L`-YaA~Ea{;>p2XlbR4-V8+&jW0Xv4SfBxVJD(*)4KY(#o z-L@niYdmdrUH;5MOR#58Rxzdn=)JkI5<+jZpdGv14SNhvhES|6%d{GkEng{dn~Amm zw-6Hm0sDAb-&WWn&Pl(x1psBtfX|hrRh*^QGvg$APsA^fo zQT~q7kPL=44IaT3r#l;fyZ`6JNb(LG>x9hUy8N&g5A#TpsnlB8Y z{O|pnbtX5}ylD-JV=teIA}B~u;2d90*qy^r9^?ZlA#Q}|;! zc7J5#zEZn2-^l)R#QoA#Q5hL-x~geVQSL=j*ppQF$78` zp(WiaHywHk)N0mGMF#3UZo1N1Q$4~b%&O;HF8XP2TXjEvJ~+oNezY2yk(gJ)kX!r@ z&$1gfWQRK2aChYWvvqv}afo9n#czI4rOB=iY4e` z3YG*rYw-W?HYsX=>_u!z5Hse!YFf~&G0$zZe#}&nU#=s%8T%fdtRhRuDgg^6UPAs< z=B%8iH>)M@lx79@KYNW@>2VUhaij8Wq!jw9hp~FK;||N@u!hsd`CXWKyBm|V?#6aL zi1qQxy~U@5>`&c}di0xXA0@_J?|6}Cv`{ojr8WT&+PfHZ}Ve;(xkL;>-_?MVt@jCoj-_}=u+)6z=H1|?+ZMJ z)w(WPdOh^NJ7&?n3iAowRZ`hrHV;*+@blIv&V{%G?%BZ1HBw41*Qwz;PiNc>p`9l% zYT8-RAABryeQCVXgyiP?-&&4*aniQLx^(4iwD(4a2Iw||G@=!#mlSI={|2=L1HfT+8RRJF;fH||FRH^1@Qr`zXp|utt}HZ_v8Bn#K1U-|A1}p3oM_w z>$uHxZ_aF6rb`1L*BWO$x0YX0ntW2~$u0n|)d{r%ncZE)9(H?fYyEY;RhTF%g}s?% zW+yR=^Kyy)4|2cg8{uyj%O2z!Gnqy00?h$qeiU7edhC8SMi{d}Vu)jtc1EYc9J*^5 zqXW#!&`W;Q5}E^_n144hl>Bck{Wvt`z}bABCFnPo2+?fne ze0@Wo8Rt?Xwj!5$rg7aQ{`9B33zSuS9~!JCb3-=%*D6E7_E-z>sXO@My9&iQoBT4= zPX!5$<;N)QORkIX!Op6Qw4^})Bl!BTgzS$%)8cP267L|e)R`7by#Myd9i|wZb*I+~ zN5l3y(hi$bYpNU90|XL33Du#Z0`9t09g>aXIg;6w<2OV>=QiXWo0f#wgLvYy|JYWuj5B-ZAt-!z|8p|hYj z8UyNYn$2Cp+FJ1m?SHls%TQyx1B}b;YeQ#!4&KRDkU69c`kkws!^1_j-247G`kUD* z@XDXlKSN6NfJad!WUlYIY5vE`aMr9&zY!sBTv|>(-mheFUvIWyK7QRzRPDKw@|kTP zoQo<_cT-hDw$6ARF*3_gr|@6)+-7F6b)<1Gl`59|YB%IY&HZ4*!0hqG%}?!L60SNo zEXMFdFaAm$u7%yFMAuekT9#t`KN$43ckcPbZu%&C=DIev)_PiIfBv%2Hb!Bfe@FlB z&mWwebo>^k7S=MBS~_}k-}LN_bo7L*wVdc=?6hs2EcNJw&9n^kfH{ap28OopzA!S; z2^yK&>RHnXnrhkVebdvi(AA@p{qsdd32kFN9a}mDBVAj=cML4_^mKeiwl6QTTORc@PajBO)OjoU~6i%{#p}iuQAG3)@Qu2VW;nnsPgu=x+ZUTw4#<&wYj zdPjf8nd^!Jiu~8FNLUQG9`RHECgD77wcqQaBq4$Mf>(2$Py8;All)%<#a#RHK~xog zbA*r!5gT;2|3mu?S`yUi$8;q&z(bs4pbYn7k-?waSe_B*y7ry`F90_&i$}mclX0ha z!#=6#a&ZBOcm_y|!{Q?U1rIITR;L@~!Q3AR#9rx6gZ(>6s!RKRae?u)6tQm#j z(BJr&biTGP`&Xxm0ZcqP~!RuVeq%If7p9KVAiNh!c{`CuN6+pfi zpSdVrdW|YM)uhOP(fj_Ep@z+XP(SUz?y{=2Z~`Ez@o&CkjKyJ&Y=29NbNDkzPvLKL zkO8Rj5A^;()j+w_Xg1iRQIV2_d)Tk+d|LR2ne+#VX?V;yr5-1n#Ki94;ga7OGnSz{ zs%zE!GKswlWh=P3Sc;1f%7np<7i7s2>D>V+XtmyGxn{XDjiI?}NBa@$Z?UM=)x^)m;ulFd0={eoudw zXw{~DWGYcGj{q-C7h*Z6vD+6K1O4^qUcXAD~cl|GOXOe6`@Ir`g`veY=_ zIIwJO>m;EaeV)3imH{Uyij@%$W`RP^Zu;-nuBN<)amm7UPdL;Toivzeer#VgWpw=M2<*f-yk&=8bq$Oa3%csGBTp@5O<}3K-0;3F zS@E8sgSPdz1jN@j4CseFMjWW!3-65_`%guu6}7VVf(mJQF8Kf#ZqTS zB_vs_IdI>>`vV`4aykk|ux&&2&jKGmcI=_LC>B`X_UD3*U#Xdp>|S{vjMlR$a3RmAW4= za_jth;w6gos_wiY(Y)1dG}-$E#C=}R%AHb&k2rgqKZ;?(2W8l4y7+*Y({<;DWgE&l z8*4K1-V3=5DVyShAk0!|FQIevK!~oQ)qTY#F<1lVu9!J%T{S^2c++r2s)*+GyP{!a z)QOa#enVFAGsL5ILf2(J>k-(qn$+ji`2&RYkfNzMOKA7&nI>6T`A}@{YN;Ytir!4n zMAgu)6>(ChvUhDBeW)@Dd!8)&_4;I3gN^OcdtlwVio`^{Z{IK75}X;rvo%i6nC;h2 zW8y1J+eMm^jDA73x3KN2GCGaoW-fQa{T=n>t*zq>8x5PE-L45EkFJNLj55dNLx{d0 z4ZpWC?%d==U0Il{31PeHq~Ye7dDrC(+hzIW2xU55*}Q(qMpX6D|Nb$FN;I5K-z%jM_bw?jDvsAnru~eUWAxVsx&f!9M=VIoI*xYrs;piV@tPLTBze;_DFZ(BdeU1N^ zEYLDu5RYLxfzdm+FSoM)pfVv_1GV}j&G)5unuXSjwU@HGm8cZL)L5IK-3kd_U2H2b zXo*b4C0d0cSd=1bg&fVSpwA#JA&Z&+dR%SCd&N@L&~9eA1qyJ3j@fR&+AG;VCFnI) zOkp5x(Z`>YYae8W+f~>6hDtrEs6`UbmV$cA5kE`H5}@QN2wRr!J$;8`>vE^(@5_Aq z`=#E+m(!sZJ+r>7SJo#tKK3GVDhqj_;rt8E!OXWWBFZ6YhqC5$+6RVDybNQgm5{pB z-Gsw72+Y!pufA_}=q)`_>dVYYL7K59Ny z0Xl0VP^zqQKxBl1nS9{wh90UZbfrt~)30ZL5&o=rHJ1-+8Q4-WR_a#E-^-6uP(~!7>#u!v`6AG>(sCYa3$QJ})?UuLCvB z{dZ0aM>VXpU4LX?uEy4JwlLKqiC%R&A%n#Cx$yLgL46A)o=gWj5KCj`f&iJhtIp&C zld2G+U4QH-QLo_Gz21eumCkbSyT%H;#3;|AcrC>*yj|z$L|*n$LpGxWGM%eh-@890 zuweMZopwVDhRgs--TUv-I88&#G1#@_?21D-1@cN|WHm-^uR4iKOsb zp-lo;QI%#Gwz^FpWI)p)e;goJvt+}T~c2=x?Hmo_&qhOB;%uUI*l z?NbI@Zdd8~ynmP2_G?;j%OeQqGIN|BUWnv!!!HkkK05)@gdnbjw{&F2xkP!2yi+hd zq%Z!4*CLkrX7}w^L~-5toin|r?YOxCfVL^+fXZb=V_OeVS16y zdTaNo?MtW>c$!dBvMRS^N&h?z)L0)pnb^{fP+^y3K`oR296_E5ixV zTiO}C&!&(Wzc;t&#!b)Q?yz-zz27@wX?1!2T(1N)d*<@6t!qCfo(ENeZ-x}v`ME@9 zC*o=ic|#s(*Wb+(Es+mUJQCSmkG(2S^hZoGng4F*AdQesAAh-`%%YjXf5X&UDgDN9 zu8FXqx`$?59acvGyRAl9&?^OvykmV3XyxETG0KGT&w#6-&*F_!O4Pn5}D4tciSm{_kf;V$MUlbEN6P2#?b<6fx% zwigWTkDMN(4{wI7##%*mNg~jC$j{`}8jOY&b8>|Kh>G)}-{b@PH3kkvnNP zCpIVuG?jN&nIudVUGqMFQobs(@Pm#$1mPo^kx>*J?Y!BYZcc4@?s5g6nu$xCrPU4x z<6&km$Se9_G-Y|YITpszbcT7d54_1T0|f6iE)bcX?7$v;TE^QZwy%z>r6wI|k@Yrc zjlPQVT}N%m{CnT0`WMcp)2hW<7Zi^Ela83xO5hZ~*2gUvGqqwGC{IxHBIna{!nDOt z1al}(mz@f|b@pW?dr7-U5YDu1uK98jY?te?-w~unjdGjIWjGQalYY%LjanTyt>h8T zB0TB`p)4p2gL-*0H<$!{n^d2&wc4~{Y{Yl07*l1Mo{$HudePww26n`j{?LilWYR%IoIOYh@{Of;A z5?3rr&2flX_I%zc7lCf0C3aNIJRxi&ox;?t{Szz04Slcqd#U0?!Ncbd>S)#>+x%d^ zvK;#NZpz|KbXoPY-&_al(^kxrmbylHXr(PMsxxYsy*8b9g=AnDcA29tGjizgmWR_A zIL*Z}33G_BI+E-|a$%7(48sapa>{T~Fp>0ka9rI?4=Il$;L)tB~!@GH*lbu;I3Ep{l~>7$}%z-Tq!YUTWvy#ii3q8VT*wr?rZ0pOgP+H^l!3L5!+IT*r{nbl zoFv-J%{}p$VZccaJr3 zk)GHJe@)c?)rvtYPv~b}ZwObTSGe#b zRvo9N5lpAUh}Y(e#wng_`$ASJ#t3X&D9q-Al*#a~IyIstI%&H4Lm+I+MKoD?7LiC+ zUgHb?$Bf9x_h&^qs3CKBth`?rqfZ3O81kf_@E)G#0$IX*`$sRkru1QLw5W}FwYB`< zP@V~TTFeH9#g}#xlNIgxphm~eSCCopUPtxIPQnYm0iwXy$Ay;HV{ihc&Wku;Hn#$a zA#?2?oXGBVHulmc!O~pbSjVxQPo*+MV-&a7=b_pgc;}fQ0@?}tT_p5-X4)bj)g-b5 zST_)T+~tzPiJg?w(Lvjli?!bhe4(r!DukOOW|Rm8C2=di<=$n(XhDpjl8^MJy~mAp zcz9YnEnTn-N*KH0U7##}wPSyPM3e|!`^60PK9A5RJDq)+~!K8^;?rxa!2fdDUEN=>H zYrlb61TW%h(!s_)w$ z1@M>l*;v{2;7i!mgL*hej`X?PW@Gj^re-yS6M;N0oM#LVHjD8|ifMq(mas~;#Kczx zY@d95cSI{??*{1MW#DHDb3bPR<2I}1kghD(AJuGu8&h+pqQOdBVko1K2X7QK3oi}b zFu`Cyb2R}MDn;MWh)*a-?*M!x>y{<*Yik9-mSi!}90ZDd5{C0vd39Hv^}{M%P!+k2 z`Z0`U95TVz@8$<;WLXb_-(pxpKh!nQ9oPnY08hyq{zU)EnSRiij+3$j&^@Z!_vVN> zK$=f;;csqchFZOcelYpCVv6*3Ki$Mv4V+}4icz2u^sw7&u$(Wg{i|bhC;M!>livAg z%#Ybg*eJ%RS(#@}kN}rp81BfGmt=RO=vU5z@$9j=?-)DPd!E;_#UQf?w76z5S!3v9R7XvHeSa9!avm*Yo<)qhZ`-OuU{> z#!h0u&I%purx@ZrGPjM96l>r?{u({y!b+9;tnc0#p3gs}1;3qtj42WWv0*!8h2k%= z49{qP!(Clp@AfLuBbPqbcPF1Jrf+f{t!1TwhBs1%4iT#rdx`dXIb&Zh5gj8YDjH$KMy)@|5JqxPhqxOQ|jY$eO_B^i3{CZk6gSExH4rhtsiRU>vu+B z5K~VSy^%>~?{k{48IU*ubj|hT4q=9}nRMqn7_mN>`l)>Q7rF+C#aFCmQ#}2$9IQcV zGA!$_MeEf?3LWx^C5Xk`=kB4y1lVBx*5?m31;^j#2ZE-co}tNwQws~3pgQqy)j3ps z`SjT8A;;mdkr9CDlYXa1*<+Ih+Nlek-2IrjZRt*6DNeuFUFW+X zZR2Wq--c#~={i9tOc49hJ0aFMn~erg?Mq(`57&cU*9s!x>e74Ac${4`XjI3I` ze?8rj>G)$C9j%^5h4r4oHWbS zyeQdUJ9Uu-nsF4>56{?V)5W?O^YnD^BP;3`ts)No$!l&^OK$81x%O0ez*$m> z*qXV2Q6*W-fdJ?Sy0?V1(+q}V?NnoY`pL2-KrpK_*oGjUmLf z&W3sa2;WLU?jh~6{{7aRk7w6AsqtSltFb1+r_2Ns%p54pRc(9uPeUx5;Crz2@_gfsgwSyy<>Z;TfhB0Gd(L8 zG#o^6&OPhN^;2~ZY1l$=sBLrO-Fy?}X?KI`AZ}Z{-}8&HI5w(rFSr1tkA~0O3o0M+ ztX~%prhY7W(NiR`AgA>}0@x=m&6hSq>;p$f<6(?im#NO|DgK%V-Gqc_p9Ek$E0b{5 z_vBwv=wO=7cb|qIroFB4ul7hh7Dd=>K>_?%x1Jb}#|~#RPp=^U8t9GtB!HzWNw4!O#{KaKj;KVv#kUco_gkJMlJNJEj5~H`VHqsOf)_^k1>t%gddxw55 zQvFtt+;pIchut1SG*rZnR%-EOYb3I^hmZ$aX@aCe)1zf#-Fly5VXXH8q*>T7dkR|4 z_^P4sF38$t@KOhJeoOLaHq|I0?43Oep>P3|Vf@}i97p*V9gJ<5LrBC}T!iJNR~c^~ zRTAp9x8=^zNRn(Wmav3ljta#2@ahzgjn(viVD6Q95OdelR@%*RgpWq)9}8Zbt}&R< z9JN3S`+i!|hbHnedsj0oB8%n=(f0!AnGg=k%D16n4i(i)gQjWi3_KwUhiP|r1vQ9Fit zksD_)7OPxL5w`$?Mx>e-FaHr(0i zOOk%sM{}xD3pMQY%qj#8FD*xlNlqoIgMSC?8q2zxxCL&oRuLD}g`pGp?-n=Utwdme zG%+=Pj3}LoYv9Dvybz1moC*1?0XH9Y*z$Z3ct$6#Kd_xOW$LY zp2lzwIK3qpTr1BrW8646Lu~v@il6W_^zMD7Velvs1Gw6n>j}C9wB8k zYC$3=+9`P;sH>5;y2T$0+l)Kt#WXB|CTybJr_m)t*5+AkJ|FZxE-x%Z%u*tJoe1Mn zs(j)CF^-WcS_{RyuVCARv;L04(deHM<5fv!*b0zBn0}N}I7TQfn*BU(%(^>cyshvN z8cuYvGSN@*;#;~PhDai#5Liv0%ILt~Ca9KWGz#2{KN1gN+c0eG5L;xjPFWadKdzA? zDPIx)twN1$NSdZE=y&POPe|x?l({+%B_^fwMK0EMEtT+Kb*pS>0o;LG)PhPbsP5ZN zN7wszOQY9iXV-F2=$dHOEZdhJ$K^{MF&$SIGh>XPByxrA`MMbr_7>d)UPjT$6QZKF z@~KC%bLrcrJG-hWhxEDF4|D<+%>AO2FSM#54YS9{E8%bT0wq)T+>XPS$A7~db zTBN&rMl%DeqdP5iF-PHpdD6v#Oh7WONsh* zXjWtaqO}+xG=nm9w-__}1;Lh>ZrEtAsYFUaH;J%25QL3v`hX!e+{sg| zLPXvZ`wCAz{AL{~Lqd;IMsmFeg}&u@0;Mk#-cAf zW6VZx)?!`O*3Qr*tMY`4@6o@EhebAh)(-0I9KDEkuWbvVCFQ-M#P}o;ze}3j43eKQ zfO8Nqo=(Q-sl8k*8#MQym?c|2lvrzSqMU?3kh7HQmbla(4Fya)uHNJI;emUVCD=Mg z9B+=!tczhWHY zP)G3{lg}4-sON#G^o9g`TZ_|F*Eti)4c9OMOiSt1iIH^mnFd-TN{%dqDnLngot>KI ze!1-0UmE@N-5-A^32R@RDK$e_;wRkj?w{#6_;Ev}(kBKcvPfy#FGID-0~HA;$vdiZ z-egM5lJIN<9TxhD9)`;hzhMbSmSkvMd4HQgv&LjDrfuiWbnz>w#Bb&>=j)?AK)aQ< z^)$gQYGENCl$asAQZDgK;nSToMMN?r>DX=hm5uRWIz&}t?aLR;tLpovTRa@sjuzu# zbQ?DE)3;AAm^@yuYQ4={UFhoghFiwM7y9`AD^B{GP35JtTHr`~h`=>&Jo$(Auv9I2T`hA_mP`6M{vW#HX!qMzmJ}k5s!rgfhY(iY-p)SY2 zZn$Q_l#bH!Y{>7HnQu;$ zjS7XJiy2)Mv{@btEcjNRPX}|=^_F(0p9+Fp4O|dionpyeLHE&7lS#0neF*|!kfk%_PfbHXHDX;{0A!_m*rpk z+KS=ebjZO_arT*D4e)H3Epo70T=FDsK_-@C?JaqoreD290uYts1hXD|gEHW!q_KX} zB`|a*^>t4@9}GbJl@DQ);c7jretKC)5esc^h+IiAc7Z%(`@~K8|MX`OO7@3difHD0 zvK)CWpM`q4Z*|>^d23P(-KG^pkD7klkIGUk2KDl@`if_P+MrdZKPfRO z)Ii5ZR47R)$VF+dHsoTXODzr@uA@msojA_;u&r=D6v-PHdaYltYbWqC_oEBhSX+ysa?LX3AmYv)LQ&3U=1m}g0H_eA|hD;Dg;=5 z$XW``@TCd4DQ(=rzX9DnPd{cDLAaX?dmUn)t2=kUDSGw7WIh5-EUW3@n#po(ZvX!TU92p)x1Qh#LLEFF~yro8Pe=LKKiIKM8w z_G#ag0kgb)xXqI%apv*Wy76N)y<{zP3X8{<)KF1tp^T^)kMN12r7P{uey<<~9U)I8 z+li!W74PuzJaaGq&12x9;KIF#yckm$6(N49g76!9ZJP2NG)zwbp#pY}2yXssWL=>6 zMMQ@7UP;`)L&vM)7t>dE-BOUFcdbWmhdTF_cgTC0X07|=pA|lPU)gbEJ8(~@pS?v} z*4Z&F(!Ms>@R%d8C^x}(zVev6RRKh4?k8Gwi8tfb4K1e5uRM)?ZVp+l&lYg=U}i{ipVYD%T1ENLJ0 zZ!&Vt|*gd<{FjC{AP#xjH0yzM|h;^!EASM1xR9SlW$Tbb(r2qSI0FE@_-2 z9os=ErhJ5!!#j*Rt5Gee)ebHpT&s2$taBj`M>+8KPg54Q2y2oM%WwE z5Zad|5$OTMz&2yi^=J*=6?zut^d>mgB9W`dy(cjSLZe`tag*4;p zx@?$svG&G4r`Idu-6Ar#hky{DPRtabL!(Q24p-Oq0It*X^z-*;;I&RCU#D#PpES_5 z;HyQk{rTi^0kD^2#}Bkq!H1c^+rcZTONk@S2YA0U_gCB=p`XGE7X-9yY}%00@YG1d zClZ0QQ;Yte47m#UT9ACV<%MKwn?!5o(L4ccckPE~6_m9&^(W+oRd}r}3gK?a@em9D zz^m-ry5SeU+v)Q&U#@Mhwu;ipvMykg)fepDK8d!)=B8-gB3NgF3i+&EziHJ%*mPDO zD9zhIDbIV=pH#~b)QZM1lCSC_G&TjNAp4`y{DbdOBig(RLo#0)k z)0LK2^1>e08Y|@t*EqK)SQlfgI+c(^)K)!4Z%$R6GF31%)4zY_%pap|gc8ELP{{@L zbUQ?;>In#hyg09SsCSI}>C#;Or6qtnOt&&>&IY9Fd%y7HLVK%GoaGSKemG6+F5I*tJ4X(+`z=y8vo`b`c-f&jK^G$wr;Yc z%g(BFNm0XPc}V{=&9f4|M#6TfcQ@u+M(p}7{4ACE(4)G=G0smsT0Ca8fu(*%?YQ*;m5B8EQgemY*QEqxBMebg=EL8s4Q``}_ z^9=#~qYN6p;?!{jTx6^)F%LZyj^zMpk;K+c+IGGKB#xH!exA|s4J1Q~or)mwveT*C z<^R}v=kU6l?R_}5ZL_g$yRmJjv28bOW81cEn@!`SL4zH?yXSY#)91S0?|;KJ_gb@N zU!R%1?inHL_+iX9n30!`5#hd^7aE|*!bL+#KH(q^doDvyuH`#>e+a>EEyIt4uF|F- z5hj56?Pt(!7+>7@WMFIq32~()0Jh=+_Z#6PMCBd0<1!{q=oZkVgT%ptr;qOj9>({3 z%hL9%JU9@V`R2PTr-&i5kFgHKBi`3BLX8|?s5^E!rMSI+zJuY22?~t+fpHiy{*rqH zH~u)U_2G55Qtz^^ElTUBFw0*9Z!2>2dp*Qma3dcUo~+0SEo_<~Gsu|a691JBx$ckm~)<`bAZ zSW1~;qvZVQdWr?zP8stBTtj+)FEe~R@&anpT@eenVhb}qY#sB68##7uUxDFZGzh&X z!iexI=MijpGxY`As6E7Y7xpAb?@m>V$n@z7OS|OHsNu8w-&3MUyNM>&tp|(CYx00^ z&r+!~j0!UsXp}oM6mjY8m`{H|atW3Wu`9(7KLQ7wzRhF38Gf!VCBEL21-BKMSidmQP1+p zal`itVy6>vRwZs1__rz%VJ`I5#E4O^KX>vz#WCT=ZLW~$rj8D2+5B1waT|f}WKlng zgb>K8r)m!h8mc8bPfxR8Yfc3c8D7uy zb5I2mdryTa8T9iFjrXmCf_dDI;I_eCw@xYX37uM=KNSo->Klk1-}E6_1sch@trD!Y zTP8oKAF?Gj*_-f*;ic)byJJK?Xk*6v0oL`JvLc6f<~=wSzB^sByR=IlFp40@R)AKj zpBNJ%djq(+EgZf4XFn77aD&^k_L{zocfoN=pjqeY@x$3R zc3vqKaFQY(ZB>eHe!l5Ff!Dy=OD0kxx&s&TY<&ej2u*_g?qs)wd^{5g!!eIMCMK_L zSGfI(lsmX+3x8GAx(rcb}--w;-2x|)*2a~B?TM)o1ea2TV;8x-8 z`e)Oc=%g&;9k|7z2OXn(mP>m72k9g`NWF@X!+m&uEBSMfCy!k=LgeiARxABZw4fR2 zyw`z68(hd6O7OND=t1-MamBXM0CI% z!Zf1D9e97@fSGf!!{9D5Y^3ws*-{op2L&%~CWvJO9+5cPtwq&RLY(05DNk|VOcLjO z;;_qVurPHV#RNk6(`VCX5a6=zfMAQE5^1KBC885Z`IqD83tQN#WQ!t zD3alN!gHQUDP3{7tVaVqwPfj}40Zou)+uZfUe(@WQHq~W_IIBxjBWr<53)Aid;&f5lW zGQwXR(}OKiIBr1W4Y1hOr;hU0r?-vLCZ9pU^I}!PzLO^Sn;Uz|;+YX%FG1EcA=tkk z2^lk8HMRq>^6ubAD>eOtVr$f>+vTCS5E9&n`u)-AyvCc;4AScikh|+WgY+>%^Lv{( z+5LszxK=RDZ5^>{Z{zm&kJob3r*(kvASH&WLxh1)(@e)>@6V`lI*ljJnhe@_MCI8UTPf*d-XU4z9uVgNi1Kd+uU`ERgbBvs|4RRdyGIb3(n7&>5Q;>E7g zoM*KPQ7i5_W(pCycWT$l0Y|uo*x^3fNkg4OS%3G0YP4vHY$2heAu_1EKDy1IzkRvi zh5EiJ1o%tb2_>$%cmlni8!-IoIXclMt5Ibi8)JA$0n=Nb=||p77A!#&mb1uQZSGJm z&$U_DfD`oHvq-GPi4>c(5RKP_(Pz+C&XfF2bA*ZpEupOZ_fZzSH=hsB;T&uaQ3jcN~ULPi|YDnFqJwNjOFe)T!Om2pL<{#;1lopysejOu%f%&3g) zv<7|=I|<$~gt|TVqo)@3tpQl5gw25)a{Yej6!ER$1{EG7tv(YJJ42osEYNVneCDm7 z?dSSetitgxr_jc4saOvH(y~mIGlvb}7V&k~6zFITrl(YuqmUSj-)^CY4O-#7Rj3XW z(o!ctL7NY4AE@f}PFwBVrS5@yA$ewcxshVxJ1IXyXt&>BUR?ITSdX`Ec;if9ysl}- zxQ!@t4DDI>ZK|LvZqCH*z}4$}x;SReD}MZ;<(!topvfD}N9pO$wmY#(921Hl?Iljq zs}jV{dvI(=_shkER+!_8@h*V!NFui#%5_onaSW>vxnXhEb-W`jQ3(tGoF$<0-kQGE zxZ3|!_?p~&Az=i3I^u}Zs3?|JhG8|~lG+Dr3mBu@7UWcu!EeP2Tg@EkFkkZ!jn6-CqK3dv_5QdRR~M4dy^TVc4`~97_Eg>fBkyrR zQ9U8j`Q}D`^>X=mLs(|IIR!q2nm_1!s+20O;M&2OjCMy0F5g|D%}v!!uHWnHJ@mX{ zyp&M1b`qZ81y4p*PiA4d#>HyFfpLQ-@NXaTjq)?&q$#Hi_t%AfvltxlbOqyE90TY9 zY!)TAPtNHxmvfJ@jb<`=kJbpbbZIlWg6|=#Ik-Ho*Lgvu1YMw)T^YDIdmnc34}-cC z-2z^G8Vz>~6ST~YLGI#bINUqEpW|n5UW?v~Els)Ng?e@6_>>iDR+yv&WqN_+PI5hI zV*QrLKMau!!1+&#p_8X$ZQ1VY2KMu=6d>tDA9S0nMKx|9I=oRb5TQ_q07&p4P09D> z*;02g@ZzRqUPQtyv`&)*Qcohu%Iw7H!*BPw(aSi%Sz9NuNHHKpq*1e-e;!G2e<(2G zCHldxNc?Geq<+8o`%xF?k+&|~fPjXyiIrj6Pra!ML z9KqP6JF;iU2&&bR5S0HE{-8Fj*v_<^3-v_$p&XB8<3WjA2;>i;NC?jy!8D<@K=)G+ zGIS|&$o>cI<_gW$x6`CTCQEeW^Z^n1KN3uZ!Z4^7TPe;T5C!j@wtsAokI(`kgt9Q+ z*ndAd=?d$_Jsi|$3w0_28bOqKmU3E2NoT!Qs1o|BGDQp%$PEHJZRcGVczW4YeR!tc zo{EbCJkO?>{-;L!`$-zV5A}wD5HQSn0^Jk#KTv5bJ{a9xT`OiT3}LJ?675b$21 zQt-ZW~vAehDi4@8+5Aif)I>3)2g)(pd|UBLJs-O;fmx1(Y>P0rl;Oa19h z@S1>~K>+MOB>6L|S2KC;P45-#4zPggY;cERXkhiIU~I8z_IfCTKgZ3dKwcfa?I}gI=*^b z|FIl;E5uIF@x}P&xmR)4^9}RW9;66LD3}PB(GD;g3a%J=`TMM(?;ogT1YRrwwYgu; zB8r$%fqoN&?d!2y(EIz5H}M|iC&fD~&=js-jK6n$k8g+lK$6mCmVY#|TLAT$8$Lat zl@esib~pwSp>AD|{*)Cz-5;N<@cC@IcK9W#3Vn)~wL}8~($84k%k~g~vm~CTp!F+L zcsoh40Q%lsYI|YB!3ZC9v%#Zr90+du2JrE8lnzGSS;yYX+msl%BLN_%iI-&f`yUkQ zC9T_T$CsHVwMtHBqZzuYSy4b$HH#T=)xCicB@QstuX6q5N%^73}J> zz2~F&24LMD|06;n19|TFBHOuk*Xc}ZT9I}ZxPtQOZj~1iTRqR4eEecLAiAYC7J-I1 z3C{Zd44nLridaohKLf=8(LZX$6aCtvZ}E}kzBjdoLPrBOvvKtS%+YuFWvU9Tn6Z!p zP3rzmEWcns^Z(}_a{Z+q{*Pq%hd{{k|7e7gjt;I&qQ)-f|4B%j+qs*&TALa(NjLzh zhSm<2Kz^Zvh=Ysu|MG%@|Kl`r|KD<%|1Y^B&eq0u3Tl6)%9sK9iPo-O4AMXnq>Cw# zCTZ;8`UirGE(;4#u!=sDnxndd^&h??2@C6=lD{MWr^SESl;WBs%>R%l#bm_)$oQik zD-$rI>gD2UZZG3t;Rxhis=7Hj*_qq_;YBhtshC?@1KE&XG$KHLra3K>lCzn)Gf-Wc z{{f>F6#SPWf297w>1^%f>gY_u!uAKyU$gyBJxyI^T`rD4Tu){aRxU0^ZZ=kCHhmHx zUZ4tWY;26o%v{{S42SMNwf`#qTlP;1*q4Wdm79cvgOibk14suYVdeSTSD%E9Lzjh_ zg@ciWjgyO&gp-q#k%xyB*yV4EiYQ~$#JkInv7`;RqP|4IFk^f&j9M*1YcnF1Q-Z)a`}-M@4ApI-mi>~Et#<$rbj z4@zcc;54%F=yI`fGIFzUvaleaef>YKtL7*rBd%cV z#PmOh{FnRx@xK4L|9=*bD+vQD3kxF;3p+C>lbEs7f9b@e85eG{< zbKp|?Q!Og$=&8%V$;r;h!2xt}5(YL_c1A8{E@n0oR%TXi#y{(TgoT-ni;;zyhmBjG zN#xI(cO~Ir=3r#yVq<6jmv(;!|F3rckG;%7!VVPoe=?!}OK)anox``+_b0!dSwEp(`C}goxuYqUoWqwaml7EA zP%{v`d{D6sw>9RILz3}qhzIV@1dF0qkmX=SN4+3$CPnz7l4qIJ3 z?{VtHQ(|Kc1f-lECd);*t(F&|=lb_BEN;moGc}@$6eKCU2HlfIr|?v1*{su2G?(b1 z&rehdxhw$}hD0c+9f|f{V_MSJBah8@b`g7@VVF8jmFkcm2h%Go zW^$6pB=J$bFZAzym#bjacdshm(H;VXrR_w%>BQNhg1ZHL8xL{xOrpFO%#fbq7jvao zSVA6yQ$7h-TA$jqAcK4o8~uiUBf_0<9{u$X7&$A*#2AbfSXcDa7=)FGg)m(M$OcF)310&k zZzAFxECAn`6xy!yD}0N<7~;t?Go%-Y-&iI9T6TFZK?MYy29p`_2{a_Ix4;zx1Rg*liNEnOLD0>ZA)ST_Z64M_sTMH#>EA+R?Osf@vh$Oigb zf-`#h=b-SgG65sh3Gj=^TXdnqvheKBphlL6G0LPy*lG}Km~IgCBJ)GLd6>MQ?qb=X zj-tbX+n^uO-g%6H#btCxN@_`Mk=~?`bzEmqYtY*eo{iyt${v0GWza^rXWs#^_p44I zXOP?|_fQ0(&lLXRAsht34p0Qq&r})n%xX~FdV{ECLPk7zi2zXbyr4jG(9C%nc9<5a zLefAMc8qH*#L+zCs4HbkJS1+cIFK&PYd&@)b&z-|a!~3#(LpTpWda*HvO=h+8S~n$;P&|0 zF|XbGep?ACr!LAC;r=zzANR)hJ%REIZag3RVkpE&eI%x4T8pP)8jT`M;s zU9%t(OFe=)h@6AA7U=ZZ2j=Ee&-n!^6(9y~&c6jJJ=!=EVkZJ)68@!oOo5%n!vF>QdgA=^V%Nhwh%=D(ec4^f{4 zhBFmh1|pu&_Jy2S_emlm=Mx4-%+Cyso>1P=@8z=l;tD{oh2}u}LSBOTVs?W7@HVo! zqvG>;`-BPwq7vrL@p^(Dzwu_MlJ1?x_0`<|YHFl~sTE-PMQZ=4pZ|<*$M$6_N+$+5oWcEc<5X z&I5A`xzI-EaS>+=TG2-5uuts!nCAHc4Xr(qy5T*E2qC)ycfeoq2$i}bdgiZn?*#We zPC|y1?*w>30U_bjCt`iX^W#IEC)9T=dlHBr(So3__`Hw+HeN(enL)!jL$s^B$rHA| z-ojbX07zf_H}GuGSHx_{uHYV!t_oxL=TA3S(SG~ZZ<_%(r@ODvx$pPAfIIjP@Ld029ZI?Pz=Gv~>r+E(!M93a3qu>hw@G~8=kyGv z50&4ihC6$Uy#VZ7e~sU#mK?eM5504xxz8VCr2&8d!8hPI0oh6)j>o4T-GXmIH+LVu zPd|Bxj&l3w?)5}@`ES_Dz!!@V0LtSxKIW$XKEo_t#= zJ%A3#02j35&cgROXdluH&>Erak&oqjSt|`#`E^Y!C{OO(e`b**!pMv86(lH(yw0EI zKoxDb?07lJ7aE(ZsRoAK8#@OqN4#G3xkVnDjOlb&z;0qpjd^cnje6JJ9Q5{35Z4>Z29;|>+ zNxeYerD|-v%1|995k6B9hT8}$ULa{ub@hu{CX7@qV*E}b=XXKJ~n)04f+D8Jq8*=y|aIPZ-Xs( zfxEUOv9Ft9s>5#`1iyAllCVe`E!XZtcHZl}?Eg>#^#bxHJ_w|)LCLjI83qtHjUQZ_LHA2#1s@_jqp@j4Al3oCfFKWg^f^=aKnn$V>}9tR{cbj) z{GvoS1QV3CHLb{u-=rq|kly}aawL3QGb8$6gc7H4_%SsPo=C8jsl5#)%7~ z0P3>F9M5LnR!Yd9RIDIrx?>P33O3_VDoTn;yEO3&%90b3=BnLgI2=J4VhnklDsD@i zOO{LNOXg>v=wWq=R8QG?<)uyx?r^*r-?-m6-Zom0zvni4~?={sZ3mdCyH<3_Ze zTkRUUG<$kbh zNnp9)XHIWi>zcuJhif?rkliVIcF-t}Vwg%yeu?$|_7;@|Cg>82HGjPH`}2$GPsobc zo-u@x!7` zW-KD#nc#RvMi{R{_>10OsrHRX1!DUkFE@(GfM*QhFnbb)o_PES3F;I;tTIAlE=BC~ z6@u_@fbstVJ=Az_1#N)Z3-0+Hnf};iE8$coo<#uNehkk!8i5r5W37ke62)D#=mkkj zLTM?LCv;_w7#x~GrYhu{LkQq26h|j!+Xav31o1vncR5uG_Lb5Dg|~|Ob(dvefMBxp zFd1{tX`c;pVJSCM+##84tAnh}D&ufAp9CKk=Fej{tK7{R`^+q9cMS_k?i3<L30 z&q=lQ9;jXoLU}>D8QdO=j=tsX0&_Uk%oX>m`1xA_Caps1Q|a@0=$=CVxNV7s=wjRI zQhq-?n9sJuAxWaWM|r^X+^tbw%@BGO&gNj}X!Ht#LEUUIKtF(gk;*c`P8QBRp?|G| z^we?do6}oXOR;{9!#$y|euGxEavd^_cy>S*v5g8*sO4GNKxn+xbX&X=uJ0#i-%1Dm zrm+;>e4j(S_GE9pH-AF(q>y)xUXr;$quDF^gV{I(T;B^7+O?)A{!)v${9r1j zrkH&sM7!X#GHdU3RWPr#dqH{|G`RI0JwMiIJ)_^Aq(!#gCL@yNgO}xbejYwkY*&+t z*h^SW@%9BD4biZXs_V7P)?4R`!Zabd7J5|?`%&=BPz`vqtzND=$9OvMKNh<9$oF2r zgZqRaQg=1?)pjK^fE&6Zt;;xf1&o~tkpUUdxtecm^qmx7E6whvwhE_|4MuieV*v7; z&cD?05&{C;&$JRos>|#5|1ieZ?QJbW>s+Ou@pqdpf zexReIKkJ4`QaRqHiq9~+7sUU4iPV_knC7*0lHUmS>{in*Oqvh#L)JUl;*7L|;SH57 z#w%HW0y0Qb&k!I2hLskB^(7Th6Tf^pub&DfmwDHE-im{T?{#2u0Da53i00z>oAozq z%%II{Ddl8_IlBGkrNqM{;co&VzFe0uz1Gf|P9{%Y?|3h|u47fK7mD4xC42vw03{>O z4XOUOQ@#(b^tqOg)WhQs-FMyeI_2LHKi`PG6$1*rV(S6eJHSid&!TEs8Ui(~LQVADQLn5>dp@z&5jZBt0 z1xr!L82!z7NSf27i=Jz*%g-t%C_;thi!MSdiEPO$hJ=8lw_Ub(rPk!3#gjAJRw;x- zkSVvk{F6kOgcm(@jKT%^2iu{83#)1XRYcWRQr4f7CaTiq3f=v-Q8U@@sihAW_mC8y?9n@?P&6^ zO^mqk=|n`@?(~8%xx$B=89vff$VTe*=v0yy7!df-{TQ15q{g4=RU@vns` zW6MoM>mp;mO4F=~*h$qaf{Zy^fLZRsDKx6L+M_T1P`Oy(X>Zqp`cg^5HOVl&W)|Nv zJ54v%sIARdSXXz_Hy=dKD-K^?C{?){KB;Fa)$iB255<}~6^J#XtfyWSO=jMP;D9SW zG_BST$=Gp5WLebf%SdG?d^wS^d0b%QITjpPjXyqs`0`k3zY0?aXQPy#_=Cd6JSJIv zEAFJ)$)B!z`PP{p%GpLyqvGadzVOUL`G+kUWV@=>n20!~;I3_4Quxqu^e&!XKTsAlhsu3D+) z>@hcjP&}q6PV;Zc)ZZ2mV<@yQ)DIC@Y_sn8l6Kl+T_ZaS=FG>Z)H>G|y**@~vg@2f zMZKQfp%mxPnqW~S*uBG|`x&hNRS%S01S|4$rcFj13GXK;?lUPkwd$3}5gi42)VVS( zH*w6gPmBbWk}ONgZ$?@S4eiXeA=?g6hbAG`xW+Mdv*(|!k_P+P;|V!0hgQ6Nj+GV3nchFcG^#laCm~Ow+^3JUVcO^-gv$?>t`AaB@7ckpOWRomcDbF7jIx$ z3JYrrbCP9L185~2Cvqj3NYBSDa{O~fz)WyOVG+_`{B@Vk95ixajF*+N?GBTuq>@Gf*yL_h2 z>HMpc4x0Ng1IGmAb4`THX^}VI6WiiCw#DxPLtRruKX&$ZZ=L;$;H=AxGuU_P=DOyb zTc7Hlx?Z}D3v|7;9}B`f&1$pAUd$epqGBRLppNn}(6BLEl~TOY{5H>9yt^HC&Y`jo zwhd&jlJUnL{J`bcmIAY1?gi;Wd=Y;pnhc4fS@J0g`z<{TMU1KZlw$o=CSCGIX@>A! zCJiNnJ;^mCdi6?%lg8@!FtVa3gOA?YAu5~g`?4jpmbn!^OW*+2C8oaZVLVN^X`^V1 za2pJTik4O)@^mFGYm>k?c5be;!uCpuAyn_%{akmu9@F(gK;Gf%qmtgQx2Z~{*oVuF z;YoB!Zka;Z2bwR9De)vpaXca{uBSMvge< z>EEA2E*B5WS8g8KpCMOLpE*`K1(Z%DMwB=Ll}}ugc7$EH%hKyUkwE%iplI+x-nZo$ zB-u4JezlWgWYv~wed9lF(C7&J&%5s(sfkb>!stLGflCZ5r;&Bqpk|D<6`W_T z7L`UPsG>qH4h){F5@)rTJ)+0_e%7AuSVyEQRn)euM)rLicx^3JAn2{)e4ifIL<2A$ zAE~=dV%aweDjqQrwc0&7f4p;1T@nf%&A0TV|FVz%a0a!xfVxciE?Gw;&{2euFO%07oi5k)T1N{D>o#qKJypO!!(4@|0G!m`QVVcM~p(o)Hg_xwM8#J zNlEzuUG0v9JW#Ys)}x9B<*-h55qoI&7kd9RkdC|2W!dUGDHi}zK- z+63%97A0lqnw?iQU;J+)Aq~=LU%lROW?;xRbUEGN-D@Oj=pt zc3hM{S=&1#nKj|mlv*M=8;5UO`mH#$s-Oyq?v(0r#B&u`?7|}Lm_KpaHF`}Ol`!F1 z`-(0rFdI-xzjS#o;&_#Gi5oC2vYzCtE{ai0Dz3|9HT(ZI)(eaUh|K+n_d$I5$QCSl zS0)ZvmF74JCQ4%uksOh)69ovgMmypg3%5x(+Dzwtal4QlhOlpfumgo-M_aEV@VvdQ zOSj7`Wvbk5b{OiI%6?2zWne`~k(kC_6nsF;c)lNW9;FWw@>}|2^X3NvR!mBF)Noch**ziYzota z_Kf5|e+*l(7>LjASGqM8wLgc&H(MbZNY(yKKTDINyMN@~;plc?DHUAO^N*{DYp$xc;3W#A%V z|7?})wEczGj~a6iW#6XEalKS=if!QV?6485{y4;x%Zu6TyIW0Hs$lTtaY&|;@4lR{ z!F9C8TrMY{UpuqJLBP-Ad?=#9Ilf9TOBjc%Isg(myX&=vH-n~<@Y;2{!P29t zK_Y#GyJ0>z^tV7qKkq4U{0MCMp!zf^3y=zeM_s_80&`_JWZ+|jN^<|P5QiaZsU z%atXT9gI53CS)ZWWB4BgB$z{osn|G zpOj{dp7sHniPOG>yN?5tYVYLG@%$Z%&CJ0_!QZQk26eF3m2VaiOn8FohS}9)weg(8 z+{++PQ^gz(bQ{0hEb9c$+eYV~hC`}A!L5WOa(>2?N-*$)T7V9=7=ivm%tD-RU9Q3 z7H_B21ORayIyY41^(&0FaY2(iy>qp=3b6{V6X8}Eydbax=!>IZX%w?_7;X$JfC`hTUSE!ytX-4zEfU0nHk)i1kPh zGGwo=o+49sUOlEf5-&Z}S4d!xrJ#xaf=dcVYZ)okif{QLfm4>nQcXJ#6qE~+nF<;o zblm2dgjy1gN~UTvCIf>L#-Z}KJN+ki?4QYZMtBN#8f@9eN)bihibJeVPjQ{xzT!gi z&e=p)4Cll$x3ru=TLlNrd3bDcmYIyEP=9dR4js%l`8D@cr3CLcYVc$4y4`gGek2GE zJbnag``SLecNreczTf`_Y~L7mA`|wa^aiII-fU=_?h0JXoHADmIv8>`9Tc4HRE~UF zR!yaTiO+Z)Utnl6J1<)!XE0sG6~NVpGI@KpblQN=9ijGnlzY9&cJol=={8$=f;N1< zTd-Vsxmns&41;?4#g^JWf4l28V*4Ly!cQX7}B3< zNr{xCB1Emd50XzK#Gt(o*FVbKl~B9}rBVzNnckxgLsf)&-sg9M(fCseo!jPG_!-A9 zyu`*@p3A7}1WHz63pc7FwXW#bq~tFgsWc}Jg8g4yIj`L17mQl_v#@dJ?&C%SGf5^~ z?C$j$3tW}33@B0R_Ss)o=s``ST~mF3M(&S&RhMso5WCVX#b0Qh;j%LG60k4wtU+ZZ zNCBuff57oq@?wRmaZ5we$OXb#))7eD?oc1*3as9awWtDWGkr?Det#R;_5LwK9yP51KTA%e!31mg^hgE zQVA6zW<5PSJ2k9}RxnYeV%Ac$i){)CF^tkfF?zPvJhoo?cs}EC!8?XAox@Nr!3gq7 z9U+!uV+KS0$uDUKTzQNQ(qZok3T-F|Y5XS*0mSoqzVxEu+K%)9-_Cb|FALH4Mo+3V}q(^IC3fe3gh6JN}1;5;jlp1+jAP0N&vOsd+<4^Fu(sXm9O zb-yFNeQ{+xJjO`w&oYsf$!}PfS8Z9%-H;R7;vL}J;`shO%{juW`pMX)ao_j~sVn<} z+0U$wgwAO{NkA9>NXDF zZ`v{t#ngP&DoqAmn*vRh5BZw@Vve4;$W(C_yzzLTqF0kJ7dyn0#%bJD3b08z3^#!ar@z#ld zl8t|Qv1;&~&29CH(Vgf`$wMfeqUe(n z;F#|!Pq5QFXQ>%M?P|kXb5a}-hHC^4-47*tf?m92dcP)Z4%HLZYQ&bB6Axwq4NKa_ zXF(_k4%wvK$DM^L`xpXE`5r5~H`Qpv>Le+<#$+;&NyK%Qv642<@;QvPEI0$JX<@*9 zc*B9UHKF1wl3F1&;hpEUL3+ALaUDTJnChT!BoefkqMt0tdR!Wao?SD5XHCvj6!c;_ zC|*keM359k_!I*~MOA$cvt4WDR_C(N22o2!Wb6)_uAZ;01!7A4Qd)zY=HzSCnUqCU z0`cy%jIZ3AApi9u1CAri71EZs(NVOfBeJVr*tnmE!G)}B&M1SW<+Na=E#f%cwXjf8|i0`gJ^xml?DGfW|EDJuzeVc zlM;|Bk-p2?q+J8Q<}h*&) zPL#PIU`^MrHncZ^1nXL_hOo+2Mj0p=i*RGR;1B zB`#-Cw~^r)wvZ!B7kw*QiclZOfZ-EGUY5EviovDCFOiK_E^k5D9qyI(9&ag*hdoDa zO;!f`%?RnIsy`+P!bNg{#r=uk+Oe*j4ufh_gLUqD4bg|*>5pK(Fj0Na{=+k{jZcwa zOsp6RFSzp)%yrOkLty#F5~wVpBcY2ok=V2agOLs-*%+pbA+4-#^5`yU`QJ0W?!Pgn z5BleQawC8gcP}nje9|RcM~Z6|&Qad3a&}uziB{*JW7N>BGe~VL^UL_m+bl>GpC0pM zvPYx1M?P!bV;c?u~0)*<-k zsa%i#uuK$_xN9HQoJx9;p)uX4h|*&jx?(O$*~DjQzgRUa!i8g;iE`yT{x{#jPXe{% z2*k_Sc)(j!)Q}bTC-1m$hZM}%n!j$2UFGHMYq7E5A+#d|g;RDFtsb-T+ubf09T-)C zP#$`TES=tYhloga34faAurP6;;7cTG-JJwHL2VhJQi|NsEuayua3t;bWxF|rvx9ua zB&mMHuQa3QO5A69{w`Y*p8pN1!8BLqo`KP=j8@|!RBE;DlU--+RaOkB3nXHqqt;fR zrMkUVvzBSy=fE#-it2`7;<}Q7++2w_uF}L|tp!C`?N>U-E>q9NXj}nRJ z45ov87*tS}FZQ*iy%&+d{xU394P-TJWz`C#g%2*q3B;EW$z+i#D_-hwLm$!;!2)SG z;wnC!El%^@-S8?X;j<=idG@*#2MYQO*Paa&8jY9hguXc>XqS4|gE_TyWgt88S=#oa67IlcIi7k zZIJ;rUdB7~Dz?Pf5?&0-Q8qYD+`2$H>=Rdu_w0krBuvUYn>TV^lgEyAhN7#&a{E{S zg|{oA;8HbOEOB`6IPREk(#gfbpc4+O$HS>Ro#&!i0E{eiM_ST$Lx`)o6hnR6;obwu zWg#X5zs;kRE#8c*ZdgA1;>pj>u&9wOcAW3Qi-cpq^%*H*QS6mA+B(oYQ0z-O+u;C= z*Ej1}^CHt&mo}eJ%W6}$ulj<~tS_#?3>VN~2Q@PNv?Fz&=+Yl0b?{ZaF5^Osg>4ub zGI}a7lw#H-SSQW{<)0v|81N!A4+cD(W{=MfpbZ4E9Jg+$6rTX97uwgCepkanRE`I@ zfO^dXrME+Q-}85_n=zr`4tjY&PuhUYY1 zDXA+mg3Ka6ov7B+c&0kv91sE=N_&>2+8pHVD@@ZTGin>F&2Sv1%?Ska_9#%8`ybrG zWg9qC6m~z~n7&p6Y0m=boU+3}{(k*2sY9Id@_2F}xBdnQXFGSaAjnfr%w z*5}LHX>i8EI>Mr-H;zfV8t|%9%CD%|CQe&yaFgxN$k!LDwh=GR&QlYZhC@ycvVG?( z3!CD#A^c6^{cR&Yr%+Ioczw3;cl>X~*7T@6yAn2F5F6r5+sSuqOsmwOUzT52 zad~ln&;Gt|yY)BwA`i2P>m}58RBP35Q7zW{d;^c(SBL>;uX1bV;4fR}Q5BAwH2VC? zqU&t5jBFQ8Y>{DRz{`l;pjl1@bH9@Lb|j#08Bb0RUC!2wQ>_Ove@mT7y_a&Mk)z_# zNn4afB~&(>NZw7_m9-GCN;?CqunY?v6zT8*FIQEEipOd>i=E3|x^Lc0Wx+{ZC7$&PM@QAe;C{)TFIKVfI5_0nn zc%2fsG)eezVnDw`{K1WcJ-R!2auK|;4&@J#BtKWczNN&H;Ra>Lco#39JvJ*{JdGH| z^!R=I>9fIBdfHb5Ya0CDrJBX7z#s+d8I5VAiun&6GEjwm-eWa3?&a0iPuv9IL;CnT z^6?I=s}TpfLgQa4zG}uQ7jBK4{VMV%)~n|60_SFFrLzI!vJ79&^DJZy_2pr}Tsilz z{1F}xB7ILUQo#Va32WnCp|ON~98DmAKnaI(Hc zkbz{5@mbl?qXK!AshGW4%6m4JR1K1g*IfK)8%wN2FiUZvJoa-wi_jXm+J-|>fTxp| zRfj``e}-{^Td+%zL%x6hmwJ9KKX)t2W=W4$|F|0>FNtUUe8lItkvL96n(e$*7SOR= z0shei4C5~}0*LV<8OPR*M85Kkgw0>;iIIm=+u&ABu(TYq(QFQWuhWjKN?wOqjsj1giO0|9GDJ!( zt+sDBxNU5if~U{w7Llqs)WqNu{FQ}{ria;b30a+7j{$cgs#M!gtVIjCIIzm$1tPjK*Qy`2Z9G)I)YJj#tPyXB-1$0jq= z*1bNu+D9#BpRjUBvAdiLS2nqX=h=p!e~4^^+T{mL?Hnt)cXW?EvsjnLOB!_%Qzuh$ zPZFj65|xBYD0c1L5Qb7f#Pak#2w@x&Ndtc9m240MS+`qB zvz>f=uwr=~g|k^2Uinkt?5|b zTuS$Dp4kiJ@L>wtM|Et`a0<#U`HjeD=4YnA4(X-HHJ? zV7)`;X|x$E8mE6b@sc`YT$v^=)}|$`7o|-|<6nOoGlof|t9)<_^xUy@(Xr<&)kcHJ zokqyCNH$}CHcwVhQ?L;EkMT=VgvY@3DJoGsv<1mrk9mH#zFNHmB_u{e!NGb5$Sf+UmZG z2?w*j0Q$bnYSuBScn}QY_7*pC;Z2-;dwCo53<*oIAI=T^qE5^&k5IPe%TU}6N-8+T zg)8BWOHfS|_;V)V14+@JQR`2EK*KC9t$)j8)AP0U8Qaiapsm8q5RcU>V8%&L%D{ z@bnd+Km5K;l=Ap8+z#6}8VN1bT!EeDq zgR+P*Zr!H_H)r;wl>+zDsOKYY^6n=1G>yXNNvpr2PNC>EAm)t7WSd%=xsVFNc5mKluN`Azn6_QIaVoEY&yE@ppRNd;WB2XG6ApXt{yAsqOL|t#IIu4atm( zwN%wVKOmWM-6BsrnBQPdZ~lnm1bC06o7M_#qSNw;)i!~&{%0agvLaY9wXNv$YYF+% zA87m_s%wYm>Px&dLUNb3T}30EXBueQ1&FK^(2Et8`Del?4J0s5ebeR`@{@TaJ#T_z zTSwoYwS646^{ab^2EA~LJHDl_AbRj>POAM>lu%*>HG-z z>PTUnK(Pju5st3LX^X*ON5OP3^SJ7WLjMt9pXCt?3Etsd#p*yJO%Itb1R6%=3c=9^ zbsb`Ma8Ow3BDdwDBej(`L#a7uM);uBHjBYuT=5Ic>LR!`bpT4LinrN`Ioj+v-|v++ z*ISP%i<{LXL@K-;UayNDw~!+dBesyJIU|OrS610(3p!kOcS}aOYTW$dCh8;U(v&k{ zfy*HeuWz{S#l7k~IQ+rk0ab#X38SvY{`Ax8r&i*hv9F_dY3H4XosVQA&(-(opnnw< zh^&<^-`bUM4%Xrwy?&lgknci+U`?k`rJwr@xRBCQhn$*}kv95W&O z%;h*uaD@pH7>FlEq*Pfcip3S8!dRymN_r-7_NQ$jqLq!s8Q(QAa>6@V86(3P81z!D0a>Eb zC?scZ8RP3D87E6pw<}XNH9Z{2R6K0h9MU>6Tw>iCEoxmV-GV(TU3j>*ozpa($48^1 z+(Qgm@xp2}2ZzkZuA{Wobk5RlIUz*C;R`k1LAe z^WBFPGtFlb7C1<_xxPW;n%49SD-W>?N8&~g&q9-TS{kJ_$*s$1t#RIEj>cQvmsyM? zNZ*ucb025+d|4eri>%EiUvGC>ZgXlM>G1S`y5FK&U4~knXiCQL%l2mTgrz3rEze6szH`y_GTkGEsN|drq{B9J1EVuohD0nJ-qpF>&HB@bS#!kIF=lh+_;M~y8p2xLZ}ETRwcHs)3@l)pN)o(BCiLq;O2W@bD3Om z_ZPA;_omr67b`iZw-y3$#E2M$h=D6ZxRK9=proK#J_-|-8jFLgu+#^MJ|rj{ zjqN5tvUu15k2a*!3Ma}{ZMc){^Y8TkAWTXLz$rI2RXE$cGDnahsG0exn7 zj&yg`dTjj2CYp>1Iv&vg|-Udz|acNVtO-LJhGhHg#-#xBjMn7;sz>G69f`$ zD7M`P+^?r}Ft?XB@kDxIcu@!*(=)MxF_iHtUgL>D$}*>Bfc;f-5`HiV zQ3{H2T7z*w!qQZxeEMbNl)Tlp+{SPmukcvW7s0XUCqUzDOiVUZntV#$x_s=juUQb* z;e^vZqt>}*)_Z@()8)GU{*0~t@(?J~@^#uVB}1p(Xt2`%$~C?jAb>L*LtU;B5y872 zc-t<;qEhnZZu#Y)`1CGC*Ym!1Uc-N0BM>S-f>32T!*8fUX0wLO-IpW^*!!whSYR%d)Xql!Rf7O83>~-G1EvpGt!UJVrg-z7qd0iFX^}HOh7(C zQ-&=?_+Wg1$QVUqajsYbqyYAF89$x2*@F-Xvj;d)AH$on8m-#bO;fy54bO?s5)8ED<1MIHByQb;0ksx|q z(Xz^6tPGseRVmSjoumddtK0|h@r7_<`c<$cXX1`Pj)~JoKgnnx+KXe?$W46Iq%h0n z#L|}ijI1wv#fu@`+$s!tIN+^!j0{p!{=lI^XM&Mn@q0ZI&IBhoq%Xx$I9*MTzr7qZ z_Alo5zja!}J?8azeSi9F)cu_`0pfleUnVlzSGoqhEAd_uF5Xhwz~;)tp^z2+oS8IA z#uVP9MPxc}F%6JJdro7z10g@pV`f_O^L6G^gB4LtH#Th+Jpq~5TMs?lyIj<~Wqw4N z;GWvU$2t=5OuQsdJOMkQI)QA?tbj*dfJ&X}KfeHb5PQOYr+IdH!t0!(4u}3TCxlap z=(_6XNu7wDpKr>Uh~12scW8zy_|9k^UAjPkfatleO$vi(T!8ps@iC+Yl_!EGKn&ao z$B)bS>tTxIv z5#=Q@QQryO+$Nk8^Kn?4q57rx1jk^sL%OXK z;zZ{uS&q3RJP;otuF7q2CO~FJg9#8p=FY+5Vqb(#ix&b+ev9NFb=zh>GvP6$d=B=# z2ly}Sqmfgd+}E?#z)He5@V7{y#)Q~fnOcMf_M*b%sb3yOt$Lf3E(dVe7PZ2UK?UE~ z1uAt*%Ey({Alny(VBUOq^QHzzwkJ;^a0tXm21y;q6 z1x&fGv$&LX&F4!8ue6V2ul-h@GBNLa6~1n(8dy*`=1z1!UXS7Jpkr^hSOR)H+<&LJ z6biw+;5}Nt8{Py{XB;(H7;$vB^_UPey#9Cv!t1U%RJ6cu`!!!*;DQ1rSch6KXdT;= z-`%WPNUNc$-t_kgzZZmYix|%(+le%@F{cHy(wPYud2;PBe+wUD-br0?PVZ&m(Zw95 zOc>?(4_TSLwbL?3MrLCIp&P4*g)YOlgszK7 z4aSVhPAlOSnCs?JhdB3Nc+~is*S{jmO>H-d;&oP83yDBzpRAK!NPogkqX%h6 z^m}^tij2X^U!eq33Hqxhs{mnGt>=z<3YP!gu-V7qu3vxMm#lh^JX_2RX24x(HQ8Tx zqf|U0LQS{2Xn#Z`7i`lF@KpLdXSr;D-*edvRH+P=%mTzlV5n{}98!o`6S>5_k2{9- zOv}iBs>#zA{oEXmOHn9&sq=1+&5b!U>>JB~@QPzzqF<(s%On(!GGQ#Dv9NG|#QQv%`PXAlAvI+g8ncnM?sV)Wsp*rmNi(k*kNa*~e%!)vmqOju1wQ3zPP+YI{zyG&8d z@H4@C+$-RF)kBuTG@+UNASwxnJl?zlrdV;T!hFee&Bb;*t!p(RQSqZP+d&rSGUO>T zBRjO4=oDv^Dl6r%xIt7L>omh>MkUkGGgx*8aa&6Gw-Qe&W`=sgL%*`|dq^S^*?XQI z-H=bZ+uk&<3hx}EtM}JMiOWpJyP+rKF4yyj6+;V)_sYWa*K*dH)5D2{ji>7!Op;XP zul5H{(UHI_dCryw-LzqT&YUZ0xID6X2UBJGTR^%K8dClka@=!f7QXygwFv{BDVsjj zc;mMi>ZOhIQKw{g>1eI=qG?41JWBV=Arj)Art#b<;?ODik=KOFoJkM%8x*SS6V4*T zMH(%e_Og2#WjvfM<;{)-CX6m|N|Pqf(&ZlFTbL%Wvz!PSil0!V3B4es3PaW5(SS6uVwv;cIDRP z%t|_V)idrRtHm|A7kY1K@$oJ&nxe>6iz z=|^AU(s{?uGT|`rz>))vBp1yJ-YcIxt=>v!bjL?pFHaIrDTs$G_DyXxw92tM7PP{L z(yq<%3!dyx|Joi#Y@OU%W?o+9dQ(CF^)w18hAk`C0w62HR@*$ODLB`jHW#1m@p5+YOWc(E9#D*FiH!BQ1C;eoyRz2 zP7HoLiVZ}<)}c&PwpY@GQJI(n*Pm3bj<(o~cA#DnEhZ$R-C$xcqh5pBiCxN4=;CYO zEH82g5G8L!xK$-av?qSgUd#qmh+x!f-$;xi|+^EA2n}$#G z;G!j?kx^3zbpx%wZFSp(M!;9J(P%k~^?2qQ&*_8C4oc$|o6Sa&P;zlmw1dDeqt3O< z*sl(F_~Mn0r&NDZpplJ@e}3jvybcP}-s13C@YrPnO`a;n+IZ1X;#I>hxLiXjCyHA4 zR!#N@Gb%9H(y983!abdWvV6Ic?GH$<%4;WNA;Ik?54oKMgo$7`?a}xdM2EoFe{{aM$3jD|^|_L{OM3VOqZo!coEc?WG|AuTHC$ zW{^r;(&FZZxp&kJ`Wo>D8Ba_$yp8~!y~kk7Y|hZa3DGUsLy{|q7NUdDV5qbq8k3wV zH6j@Ps3rQ4<%|h3emEhq8UcSJq<<(m;A)3d ztWk`c7WtCp-jHQ}KM}|Alh#REWv8#qR1m1kM6Hw1QKrgdC(xa0!l>ipZf-HOAfp3*kAbTroVN+g1QI| z&m_~x6>{`OnT=D|)wuEr?=L^Zy^$VcAE3ARolmlpp9+913wEVO!(|}0XSdONSatM$ zkUEXUu@Dc@`H|hSh{Ni~fS;CJ@B${kf`#ym@=cjvbeQZqbC}Ym5P|~~)0jfzk>{~0 z-MjqQFrpCRTKZR(?B0JVwmGTibHW_H02Jta zT6GiHdD5j+eC=s3#xav#JARJT_{`*a%_OpS$UH1~KXQMCThu6FA>!fEi^xT*Wq>w~ zATG5-HA1Uql$BDp74M^lu<}S4$+p^j$nH-ga@rjC(ST^dUPQ0pt))FOkbe>#OWGu? ztFv}FBuaMLr&F)_JffTSAbiZ}@V^^*zDEc%u@<+*BN@ZB<`YF>oko2a4-5>G7Kd5w zZ81O!58*l~p!OBJOn|f|SW|SXjI=Ptq^Ce9o#T;!E#D#)@Jr)7U68 zbphx7b2Ki~yeV_RoCc;Du?Cz-xRHo6HLtOW$RO%aL3mU5nk3WE~A*gBhaTg}ZJW zlMv*2XbprzfoU5(FeV(F{JU}~8fl{p2+19QF)fOg85a^~_Te=c-4ipziD$KMgDcvE zULj9oj2@WN+@dP(l58~kE;d@V@0!L^{-uFmw80^V=|3vLR$gIU+caf)?V?V|+3fn* z(}hqIzkki6v@wfP-eWCiaElcK!9sBDzEx7i(cp0&wPIDU{Czk?*1;4oZlfCIQ|O`N zf<3K*(X}dW=^^2<}QV&!cK5u_5AcClZh|nJU zVv9MmYlQPtk9>t}qI#61s6S#=3C>>2nOQ*f5X z{xwBIbzZO{d+;F!0)u6=te(#x0z>d4f=nv`tA=nHJu&JQst{wc|Ek%qDXD;E)r3Sl zg+eu9WodBz98g5Ab4bFPX%wNHHjXw)`mT|Q8#T7icrMN?q?i^`!SVfS<)3RHZ01`g z{cT_7MrkA()rI%l)9yKfcSPmWQ0De!KV~n@<9RPF=C|_4)a>^Ai1k!Y_uI}B&TFsp z_cF-e4x8=91Jupiy1h-hNR(@CcjOuz4}coH_ouDB8oVtH&%-$pJJ0KZR_kjFf``kF zZ7%19)f*U<_ahot*XJv|YLeqe&?&H1!DmGMxn#!!_D@==%aRe(GbB)-oL2-vqck7g z(uq_S`ZoV0h6?^kBxbkU1Uw7rf!@h{=SXrXuKbKN^2*q;D$!y*Z6>?#BEIVIUd!*v zzcro$^qV3XJs^QSMIQ|V!WA_>?N=rCA9ra|4J>QC-)}nI>&|15ZPAATg;7MNCC%#h z6nppyzt1_|NzFgmWGtyr;eIPnTXW^TI^Ks(h~=#C#eq zZCHpXnu)Rpr3^kS0@aj}wmgUlUSGGZh;6pA4;<^2jY6gRPZU8I6gL7I&0tV5l|}UJ zM=V5p?S6maRR*Qe*t15(f_WNa8EW=#4I}1SVHlVSrh+liEr=*+&o)$)33_5$?76Xk zNoEZ*&DDEB(v$w^2mlEG(+E3;M6o7tYU(5c+{$1*7;FpwC>H!=x|MuKD|MiPC3<+Y zoA>oS{d7)65ARWCQlffQ_B(gkq*3;&g>%OQJ2{%Qg$AP#UC5`Xnc?&l`}o z%TZD09~~BJbv6sBQn?Tbd~nZ2y00Gy0&HN2o+nv8WYV;DsXS*^;#RTK$Wl@Mmx@cX}Et@cY{7-yss3(Wis0Dut&HSFiQ6qv-plyxQ{xPMk7`Dn5lxJ!*++XSH zexzu8*R~CtHD*HBE>t^ZWY>=4VpLAaKA<(U7Go%^HI&eTz;3rEd}3Re6**coVTD(c zUV6ZM%aks`Jgjw7yJr3L9<$QAPlv|-b}|j3DlikaPAsj+)-*}*22+m8ERifPl1>ibSAztR zlKzVX8+-tN5SvNf<`z4$|KK`_8#8ypEF6k=eeioacfsu+Wt6ghT#2H&ml;f)XDDcB zpC$E%(=cS2{4*{v{rlhp2{9Qv0_G!SnbCu=AxS5iMB}k);|&>qRxSo-_E;sZ%u_n* zj{<)zvK``_8jVSpXZq<7Lh1|GxZ}^C4k?o*hs+E8<7P9egB2B|A1jzwY)|9egI4Q} zH{#Z&j`tF#y>%SrPWjUvOOiP1yWvjha_~*fQ^Zj4NxE|Wz!mtwKboxN+YYhmqs z&GBhfvZ_P*@y{*CYy2`^=jjCn#6CVYM&PZG0e>+TMHwdH`ESQ8m6ouH6;Dud=th}2 zsaEYWmL+ekt-ZaiVMIMHm#^8Dch@x|*q1hU9H0vC+M?(V=w;XJX@uq!jAOzsgZL-0 zm@F^mp-lIdU@YbO)v(D_H*C`5u5LPeR7#fr%y}6qC@{{g8O9JB;7C=CEf*Woh{Gms z=#!&H{9;9IP$f*3-aC$7HQ4=|2MG!-P*x^LmFXwLRQ@MG&|y?ag#==mQF`oD^5^FU zx=8-=vMjjT*@Qaj#Nt}qsi_20&b;;@nJ-L;I?k2^F`tEYn#5avGA(ruH9~ngGx|qX z>mUaVMOZTJIT4aplA$V}t6@yZ&oyMECL-eEBI4lFLN+%?KfAd-x4k*%&q+(y#*!Nx zEF>7vQrBl((=Y|rBFwRCR(e@pRaME+r4XWQ8|Hv1&!p~k_%nH0E~E`i143eUN2|SL zZzLn*<0CUN^eJCo;#T{;mmTr$arCo6*Pdo-YV62Zr~L1(C}(gl4T_}rRKwA9xo$5$ zv(1^Th!KknlevmFP;9nBC;B7!$pTpfjDW=}8o5N^^>U7qkax&u4ZHwy(nIm65RROW?Kq++IQxS zN4Dii(!oBoR!0P4b%1bvz0~=gfwm)K@-=SeZbN!u5xu~ke3&S}u4u-7683TRZb5hx zjQW5%!ZnJ)#jnJN-7%AF`bg$z=;O0uebubrpm_cH-WGj_#3T@e?8b_hW{z|W6#y(3 ztc_hvk2J{zBWM9zFoiHxm7u*uor4qS6c%4LkKly_q6?Yk8zzisN!){A#lMm(w6mOGT zm0J@yzf4y}@=K!iRhAQaIZAgsv^o&e#BLmtr;UGma2^amYC!y5()UFA&xSLoT>e^1-)0%zdRb=#Q74}USt!fLS|RzS zLisfi+%r23upAGX7h?$#h6?O9tJvynbdKSIgOy+1qFPI#E9`R=J9fG-@dQ;s+P^xn zUD0lEb-VnDNU;2De(?Z)cnrlavx{6=ilXstl!wk$uo5R-h_iG!rp4oYc0^Jh>*SAb zMJTFPKxQnJqLQ^MVPutwGh|L8m>tB=IB_t;K2YgGTKOX@%n;!k5Ep>4I46P?Gr!4; zsS`y96OM6>y0XUogt=FH)#>j4g^RhLi`r*)Cd&U7edicit z$^k4cW5Y)&T^V~VFBG~4E-qam_&M7#=mMpX>4IFVSge?B+$SnaKH&cowvvR*p(&ra z6;H?+4|2vvRAMp;a<)0gr|Df=kQiu!Tp^RWs#@PJsUK_~Yu!zEN`Eocdj>`Vz-2!_MOWMOsD5n~(Ew z7EC6NdQS2tKsI35_lduqkx6uz~Ctx?->38bl}d3&)N^?|!d4p9=qg3&jtr2gjD| z#(oFOR|eob=_nJhcy?GGDMt}gS;hPTFuq_|_vfKm6l8&iA8}8h$2cX>jaPdI?^%K3 zFrNyMCbG!44ajHj>w^pyqaAt?XOZ?GfX}mr*d;3SX$-{kTJ)fH!)W9?@oEnci{-lkKKLky=w z7vsioT3KR}2I#|G%V2?f*{yPnTu{)CTfVP0J?2`<*zbK^CjcxuwfGe!m;Fw5U(n$8 z`>9($KyGg{9u&OM1t>b5PP~0CM%nZdYYJWF##Y}Eu{l^9?F#}r`=Ml<7LTyXzjhv^ z0h-ZPS=G{Z(M5+AUB{xziSrG(oeo~Y&xh9-=$e^68!2OCVT@N3&<8!d=&J26_+P-^ z-8IknU#X#!djaVjFA3ceVr|CKHl$3ly%EURkUKE|VB4uNDA@ZV0RDmi!!>(X3U+!o zV49)ey%^Bsl{@{QKP$fa{_8m~kB?VyLCBFzzV(o#=g^r^9H^j@?3KFM9FCHG*bWEa zq`V@2qKJGS@qm4}#1!xl9>}BlVxn3Q^$pN}%PzzM$Qa_ocek>8ZEb)^d6d)_aANl7 znkR4OyIGdJsLJ1$f7Og`w_8%FCc`Z@>gi<=7u@>_*)MOocvC#e&F@h2^iZax3 zP&lS933a3Ws}g=e_2-F&ja%g}ntb;@6xy|ktV^*;8KnrtGWhli%9d{NI)P<+fv4NL zfAx7+h^|0AT-~kYmf~jCv2R#eb47DR>P{vhDHHNNNy7PCbM7%;ig1!^GZU0t7_=P`){>UD`3xfVZMg-|2NqAhcoSHWKZ`)n07Q0GWrMdPWRs^XC`{4{{!T#6}N6aKo1>! z{fXRtK`Wjq*nujLD+O_&50?B0Ag^%>9btg|OlZTaK}j>r%}Pw`Kcf8hH+2z@$PJrg4bIzbz!A5u3fotUDkBKZ$$o|fr{ zjsO2A0r*$ee|M_j4+#7R>h17@{QgJC|H$~E?K{{w*&7%+{9yQH?QIMcj2t!SWQBz3 z6pdUR>BOvl+7bA#Lh!!|F)g}3u8txKjz8n$r;e%_BmRFe$wip(|JDA7&i@a0{O3Di zh97+UzbOOggnwB1|C;zyfeHU#yXb_O@&C1q=jZiPVGrfN}=KpBV#_@weXJlm7`X5vOwd(&le%UxU*#D0Ke5s{&eb8#>^X(JvEeWW4 zdSq`2X7nv+0(Yq=gVusx0v{_b$UpT_v^xl&)3A|cfZ45yF9Somzr&88(@6z z^Y4!@mzG<+o{!i4mY#$b-fu7T2qr7*E%&*YM_#P@$1+!xsCd$r-1w5NwwB2DHMY2Fv?bU|}!+pBuhGFs=6L_YtT&|(O zJKoH>&)HZ3g}_jo|9>?!NiAqI6%KzJNjnt zS{#G>;)ng*dV_Jbl-+9VL3rvXDHd}gWjM2nX5uSP~Q$&XaNq~ImevhLwnBIxemc*ge*3_ z8r6X915O6jRU+#x70rCSQFyXhq-_{DO|nd=bED;p<}B#1+-^bM4|YAGD5Yg%UiJrm z-sC-*m-(5UDYN&B9jjtI!x^Ict=&!lXG$?hi^64)K|$WkUIAe@qfS3 z8J)Q>tu$m=NAtJ_UOtROSEji`(UVn-Q>0;6m38w#`R%$^SK{%WzdK)c zzfz8VLfR|0jVduC!`&GF6tNlOu_KG{s`~O~nL1UvrWiZUQ?trW^%>3v`|psM;*j=jfW4BqxFl+{Wk@;RL$`n@kwR_OpyZ zhZW4F$OR{m;F-LTZTBXKE8Xmla!sQZ%ml#TE5Pd}J2z%#Q=ehl4jT@vv^6$D028be zS$=BEP-u3@u%#5L2|CNq5X!09Zj|LmafLk=qDFO?(c|MA@2yfPyzr~;k^F_47T8Nj zUBH@Lw3rmEeljvY)1{lo&=H67;Dl|Pn-jBNz2*p{i|R!al9Z+3rP&VJ3ikqP#UZeZ zZ<2-L%?r8Lmw`DZt`Ts{B?-XZBEZ`#N|K2k3|PTD_PHa8`-dFLiih#8Ty_?3 zWK?F>A6t9CQhqOmE;J-R^P%sTHNH5dg0)3|rh(}Usn^I%pI`uFhM=(vOu3o^$3 zJFK>T))Lm})OjP`yQKJJv$&Y=UWP(d0;@UV8z=hjhdj5VX<6a37#m~} z*o4d#RvWS9o%JE_=l$MAtHN(Lp$Z(?H^igLQIn98PS=emdu@BPO32!C=xF$~jkmeXU8oQpk= zJFV~TfBdttNC*wcr2jCB@rf_scl#E_ez7t%Zi^g;8*MJ<@`PQVlitnUa3uRHcK`l* zc7p;jlM7oxGsz_fYxM7WN$5iJ>aEFeVTqaU_ybD=?W}JgFun~7X9^#o55%V@_N`L0 zgP%Ji+($A{#k3in7K$yN1?va-a^yfRJ-z@hYc!!XibxKEGR>Z(6lL)#$`JjLa5ca8 z>kE3@2RJPaG$1cy>|g)B6N0tyaFu#yKW>(-TRlY7SgX^&9QIu|L>-xlRv2;{GbeI+ zYL+vN>_9Pv1dW=f-dvOUNtr|)5!`xS*#!^~oA;i4hEMBMS=PJf+$NhBDk;Zi@Y+6s zl?FM!seS@C_e6*C0k-jCR+C zlJ#8NtF^73G?5r-k;4DFC>@mT?)@^m$96x)P!In706ph`Tt2JN`v)XOr}`8^D5IL| z`B~z!Y&ITtSl?3b_ejEo9?JO{-)EZIb)U1kxZA|{l}3&Y?$_OMO!sB$!St5q_Q3CE zmg{fe&|AFSsshq!=O4=D{@7>EUoU!$W%mp0p75V!NgKc{ZLFD(nP{$LTxJ~NDC-oo ziAxzgW9xW}E+-*>&yOdWx{dc}fY-$98zfy#t}WZkHq@QOIn5vi_&^M#FE_nR0*~C+ zncPD}vFG{g<);m7jx;2(Dm5}5NOt4l51{U>c1C8dNikW@u6KuYhG&n-nvd(~2* zh~EHUg3thISv3_zrCxCM4~|-0cw%Y#wkCt13W<*>$pzF!A-z6RRoU~se2#!VKH=Dx zLFQfTO{tTr)H!T@3^TY|;5O8b2df;^Ur&!>wPUPtL18#HCJ-Lb;mldIfe8b1a2bo@E>!8|(^>5YF?SqDVh>5>Rf50+WPfPDu)V~7eS%6WXP5Jzv@Nb^IsvBQ)mMPEU3~Cqo5^vAU|F4 z`qOz~Khh^e(gt=|2Wl9wI-_y>fUW8*%APMlEp0{B5om;fKaW$k6IX`a%TciC_`9j2f4eG=8KCiEe#xuo4#H9QD zS7^ts%%Ar+^;|2b{0%|7$D=xg!95+kw>p(U=Gn0XFe_45>%5=-J)!jRmSRbo;`r(Q z5=~LOVJDWp2nsSP5B}hz7okv&=Pq)Vq{q7|9<|Rm~p{_H;EgR_F zWgnaR{3e@@cRn=Oh-y{xgtB?Qz@qv|_VtX#3(dT%a&<6?dN>K5bs?l zCCKan0y2;35<|>?7fps7#lfzVa6X%B(A8d_PVLKbjuNGG|`)SZx0sHk_b9|_?tAJZ;oH=L9Z=}8EIT& zg2@ckNa4GCED1R0DN1%SLbBrHSN2ar1XNETH7MRoGb`zuk zf-vd*Kd`3=$rNQ>u2N+TrYUt1=r>l0itnXe^PrGH4iE+*X_EEYska`T^>RgmLDqU> zJ)SUeNh3imnS4XhQ)a|D#5?3TyWuKD+FGNw+A$((EqmMMN;?>q8 zzlrZ5OiJQ$kT{7i@H3QQ0I877QItTgU2y0NN=f665pxK>jAb6cG8Z1;sJ=@-FeKta z*>TaFg3&?%hHSXud zUMuROwYB!pm@NYQpr|}Lj;)%t=WY%TSAhfsAA!358{qF#A%G*aW>!S$A1oQ zEz+TH6^bD^9nC+_C1PcteNH$IE}n4HEAKj^#sV75#@1e*mKqvkVxG(cu3KoD$UWh) zrrFQ~Jq&s8=p?qw3(?%y@3ueD9f;vb0FIo;CF)uu;a1c^CLGk8C&KMk+;SK&9v*?; z)?!2E-rt*{t%W|wu_tA61E0-T&|gJ_z%Jh*21yMu2)@8U>yP0CYBAaa-!%cK1Vf!mQ8L($Z+Nd@diLJPKKZzt zKVSu!CB{5IVFDtP9z&}j@v053k6f4w1O!i(;=T}JW5Mgqz@JYWR+Zak`P*iyL)To5 z$XBjA_a|a<;lu)d=DCMiH|FqUS1Ndx>b_XfTN@cR2)}x5l(t6IA8O7w0!?QaWmSTM z#+DD$%J9wG>Xu*317eJQLc;-hh#VCx6@iO-L#~g_)85k4J^5}0Wje{klRoMCMR^Y6 zQJ9V9WWfuikwb1a1RKvkhqHsBIRCeev%w_4mv*5Mmx|IeUY>#%E@k<^7s=fl-d-G` zOX`loGy#|t?7V2Q0PI^SFg>l2y%^QXT`v`j6NxVqoyxc zKuc-p7XjWvzl2x{n4`PoOi?pUJvmB?0r`u}WO5lSK1BYR`?1XsFd>waAn(z4 z>%DF6Me0tH0v(~Sm^?uilI&R+5VU27H#uOpR?GprfOhaz#1#TV%x-oS2=Pgt#wGah0(vM?qa;ht2y-VdiU=!4akK*{x5^knkvZH`Fn}QcT<0^umu;`&$A(y|1fhmd zJ=uf$5o4{j@#DwUWkLJ5j?+W|Dk<4y-ae}sApaHt22hDF#O)C_OJ;$e-yRtQO7rrL zoBm^V-X%a&4U*z!C-{Nemw8qoI0A~Oc@Y3YX=lO~p9na~#p}4yMii2OnYeqotUimo z(ymxX+m46G%3_ffnD|C?!i_ z04>`9#08f-xf+0YdG}YXQB>T{hfvhqE4xcM!#I3dDMNZ*o^s5f~EZf-|XvhvlYF=ezn{r!}(4q8|68LdY4Oy3Au0wwXUF(FIa!dy{pfJo6$37LvG+ zsX_eaz5TsN{Yj7t`9-%+|4GpG={e#nWjUqSPnLO*7i@q|7l_%0(47?f=4x^PNPTN^ zfN^I80Ci*A)ulPKhe=*=S9^ziQ1GvtSj=3E$8cX0z~JgQ?dCok`ws!&fDWE>7rpG* zt7A{jj`;iAh)BqXeKaO|XNQOSP49qOV|}u6Na^3u5(FnwRySqBj?3s-oPXS(BLjdO ztYxo&E>6g>(lgu1%n$KOR)DmnQ&fM}qLsZb;Y*!)UUIxdUNMIXvr;iZH|HeBXz910 zIm^oQc4QWT=3oM-&i&ZC4&{x}d!r@h=tCE6G9a_)L~2Yw1ee!p^cg4p>_nQ|8x&3b zhgk(R50ixjwZ8izdk#l2tD(jvPdgETF=1+T&Yid^XH2P62e=slmy4m6j;-a&5@8!b z+b~|re3uWNI$|uW1bIeXNngO{R~-|c5%_OJ0>$afZ#Xq&l?(9S&5f>w?~iK92weD) zn8`}Sfrp8 ztd+4@8L*RiHZfQ(iXx`qGr!RC^(wh7B=V;f9SJAD#`GG}n zck*#`;z~h0I4me#pS(kd01p*BKm|6?nq&r5nN1a2V~_rbsP4dp3dcYTYRYvr4*TS3 zSvfC*KMM&#E%^&SXmdF}*!GNOsyKZKP7zoR_#eN~Tho6{!}{YXUl_TL?UfxsUN1r+ z4V-vvnZ^0!>a#wJ#hiV@t4P(=deq1EouW&?KX0x+a})@0G&XJ`CM$!H_UkCYY6W_1 zn>bkhUTH?{QiSQEYtM7lx{k2+mG0czi9xry9uE|Cn_oXKqq&8KF&HPjs9o*~3c6|L zsrLM$w?S2TI*3@jYpvhj3TY0dBGYf4(u10TGnjb5enPwCjO4UjI;b_dTRf;mVumIt zQL@Goeo}f)F{Xyiz*f?f;O}lf@Iso%YkN4f)^E$Dj(7&h%BwFCC<01Pqa0s#aLJ zK#g!U9TwoC-!U|FDzn)D!Z=`X?NrjRMFgo%M=w~FQ~fZ-iVvXv(0A7DNXNg=7xw=V z_ZCofG~Jpof#5E|-QCXN;O_1Y!QC~uOK=G8?oN;pED+pXf(LhZ$sFEK?mIL0&YfB7 zU+agpn(nHus=aqrozpz~>Afx2spauqe6zOMN?|N!rJd5JLZyDN){zrWQ8TgH`|9m* zFPG@yX{HaUVroiHa@CM$v`EWFOU#`{wB@hVaDncz_$TV}{D%w90WxR`?i)6z-)OFR zn{qaTsurSi`FCDaH3bzNVV-IJ5F( zZ&5*tZizRa!7S*q2;l!P7#r%Bt;SKjMRh*vqxeIr&EmXzT^;yr%YqwMvAW@Gwyej2ZwvuQ!mx|NO zl&gFx1}G06p_bkO0LVFZ0Py(uG8A+K&0!cuDCl-4M+&03bUr@JE_8#uyx%AR>BITy zM?p#iDLRB4aT)X9t>ER2xe8i=Umti=uNL)Cct+Hm_=#`C7(1GGhgbkVb_`}8!y?aG zOF|xk-Y4L!dY~(Wo=z(a*e7{^uM~r{(x3?>*As7l@O^r$oOkSy%|S37gl6x)S2*1K z810#ho+rN7UuPFYjR38>KuX@di2)TBU)r!^QX*f;2vpDR6UZDl-urR5R;p! zL9?)Tv&v*k`5UI}{ang@0#2llMl3Vh!9ch~kr-()>nS-(m`d~h^PS82c|o<14KZkG zY91QZ1qNeTM^CgUi^gn7+4r&B&Ih7hUuqnIfIyW-KCIAMVr2Idz{dSI5B(z5Gue&? z;P3<9$a^Fxr-Vm4KnnfM$dfgDN*SuIe80-nGQ2sSEc7yb37VeXP8i-uueF%&r(Flj zqiG7&50XAZhp%!!VCG1+$bZv@v}02{v^v5>l_GKJIbcp_oB9-GjZ$&>$eB+8-X*~j zzx#gawPe0vcN>l`xzH)n1(Q4-QBRJ@uxPrzsJz`QM_^rkIF>nc$7F8x6E7j7(I_Zv zepqaz8Cl=W`q5>_EYtL{>+=Tyr|aCcxwN*ZCbI4WHG{d%OG$cfZ?GDG+Q~0e2ihyj zZyM(i%ekjCLf=Ur4~hH9(Km*p>5qBeOX0Tp?Y5Ft@bneVfz|b*tD3xO$HM2I*y;7` z0|jLXi6gBzK!ob_cE;o`2s)V^mPdsi_gv2{J}YYxo9Rz}axR*SIvT_F(TFEnI#k2T z3&~5AT-3&+5^z@OEb&%Ka3ESwUy}F=r77Axe;EG94_jgje=Zxsf?OMrEaNz+ulz`b zzA}eX+Ut!Rg6u;~E@w<<%R5&c`&;A{>IK8YLZ`kVPPH{K9o-~+wW#rBY^BmF=8`uy zo%U-o|8`0vyhR(=(tZ*X^h%AC7#;|ZD{q-z_50#u5uT{Xvt%EL6&}CepFDZlywdg1 z#og=^gxBDH4;QNSgH~eo^fky)yIJPvd>AGkrb2GTAtipB2@NrqgtpFe4c` z6Q#*Gc1ZttQjy?Sn@gR$2mJ(mT?uIlng+C1^&zmoiJ}VVSelbnS?OSM`xSweR@0b z{R8wCP_--(?(&qHjdnHEi3NyqvqEZw=6(vxO-mUyyY;J18=cgEyz79zUnyZr5OL;~*I}-{|HZ6|7 z*bvirl)gHGi~fX!nuT|rH8gjUA3>ZZoyK77CWJjl9rj(4EcEXkx&`6!Z;?9i>D_az zTs8K>ZMpV_35wjEKXYh)4Nno^M=WUI6Ve^ zCwY|mgLLYdH9cJJ&`^(4jo|CfOqZYvkhU*<7W?2$!__PmwCgc5aX3vjUN=^rU0Bna zEbwu+FBFrykf=(L$6$R!tB$h&_%p?VowfrHN3kT~VPvW?q%f@8i3nszxJ`Nu3Orv) zm}!3)pzjE2=3vL3jziG zpLyejK*JMhm5dd=taIYO_KAWP4Hid4&@7H?OWWa(UO%N|=_xElAkg98nw6eOPcC6t zWoF|hnRavQey4Lbs}3v9wH%X2_bA{WI~E^kn2fN*jbp-u@!S)_#q2}ITPAkMiPrso+oa+;&y-&uxZHAWXSHIz z_Tw9WS$ZK}%lCr%4cnE&;PD`+z)ZYmuZwpdvLW(cyzhl%>C44#K^_$uM-sqV+U6UCKWRaH(MiT7IAwp z&BV&yg5_Tc)tRJN-m;&Y*_#@H6Q6^dg830|nbqIe4-V?~R&T5nQue=S2Y(|0{5|)& zCOG@~zr+BiY=7(HO&a#M{OziqF5sN&()Q*KV2*;So1>$xncW-LfE7%Ju&{D*b@rqc zHgzyIqhnEYHZ^kw3r71d!NBy2zv=VV>wjcvCuRSO{_tOFsj17V3j_j~0UU2>)=4>Z z*@0ZltUwSK_<{|f3jne+vvYBPsUHAvIU5kj@um+4h?5z>#SYGQ&&Ca6=Hvt?WG7|k z1Th0ZoM1i(I|#rGKH=gb1+uX-b8vHlK>BZt3&2}Lc4k&KHcoa@0GBR^gPj=w1aQ6y z2;yL6=HleyW&@vrn87l0fWS%M-((`?0N(~40DJ~!S+Id6{p&V%PH_5qPIk~6Ck4dL z$qWRt0oh1709?!*oIo(CgNqaJ4>kVQ2E@h5%*_Rsn-l~95BFE^;MQ#50l``3fu!I9 zX0S9IV4Xmm+#qgJ5LoBG1Ox%VYO-;GE4jdZu)pQ0*C*v<)#U(NjvH(f@W>!GW)606 zVtP{W@gI#iz;@sUcL6Q}5BFErdaxBanZX+VrQp9CfOY5OVgr}4gS%q`0a@Ra;$Q_a zbAc@Yw(P%4xxhB&29E~jw1ADm4g|4slX7sfG6UWk|4o8_+YSJ>2iISd0-i!bR#Q|XEU;`@+o@}sae_KfUZ|hslK~h>w-pKLa+v#t6>O zhq;n6u>--KgG~Wo5jAp@GPAOi>_0{}j4^2Y9A0EtLl4MJi6+fF>n+izw&oJi=Gw^+}=eJxzq{j(Lo~Q5aVI28ih5Z zkR8Keu>y>z+K_plT*U^LFv()P7o+2q8g$|BnriB@8KTgUb2*_>_zYwJ$3DDcZIcxe0lycn7ji4-RfW}W z?GUvYDThxXE%n~*xk`*qds@LU?|IAw??SLsei3R#G!apSiM#g`6(xWmJCsoKa&C`0 z0%0Jz-yt_AzO#gzRPtWm6ru=tgzSLFf&fBTB29{s8swqnIXU!E!!1Uh?LXec?I+b3%70N4dKS~ zwB6W`+;kNTZ@|$m?UD%B{y~>4XbrGYVx|`hpZrt?ZF9bU4%z-r(~#jntUu9h!VrBU zj&P#m2QmcVxI9GGK=rn}quGi>JHv*dK#t-j;)C<+xPdY&LSl&6rpsnYk1(4YdWjbF zH&NxPd+i~Hj->8kpjl^wLa6$xn)#f^oR50gp$VQ@lCs3#4u7aTV)KI&quGb={Us0V zkf-7ZbO5_PN~K-=V%h4`vKhnPsJsnZO9>>8p!o=k?22_nF$%<;RFkh1=ZIVG+e(F z(Hjv+i5AEl(TFpoG-}@7sDK|+n;BG=4YZemB8zCNfyOiOf25nob+yBR|3Uoiz0K%F zVmXVx(0b{|?x{7c;5&9^iH+ZgdRcj!VxOn?3zfYwgQphM3&}d$YGCnk^uTFAMsYoS zaqwhVrj)O1K3$voz|?-YD3IuCHTO!5g%K#6^jgbY5B~*4lC4uapYCRzMt&x5p>4@E z-nfB;AtrynO~aL|VEUzPdSo%0nT*x=6OIM6)Gdd}RZ{(C_e!z+S(b;1m@$HPOaxL9 z!GTn#>Dh<+sBt-->Ak^JZEZ)Ij-7Y0;_JcU3AHV8sSJ)6tVO7i#P9!<+>r2n^Y2>t zXhPV?1fQkTAkd=~$K90H67wFh&p%7!+N_q}MCb6~R)p$)$8!k53$-Ub8+eLeJ++*7 zr$jq9UPH}7V$k`r1y~1N$$Lmr7^Hk@WKZ@v_nWqs+nu!aLgw9yK)pb!Dn_*mJe=ZG z|73L%OftR(^$<$B-L8btDTymbk=B-Yh5bFHEOfeL(?|aD)VhRl(&tXt+QB!XQCT!CxM{fT*1vj%2P{cM>2uv*4G9N^q(0-Cgv6=I@*!ydjk3j zeN?XOTX?f76CCdpp@5^*8~dgv`xIg!J#96&f{nh$$W4{++Kxn=Y>hy(id5 z`%uHlvX_;C7yPt2uJEC0^JI@i-y)sT%ZIR)&&^Cl%AV8bg4fH8vtJrh@pmz*%a;ij z1*z6!gNu{b8-}iIL5*RAUIIgj(JN*&FCKscnjnwJTJt<&pOJiVkBc^1vWxIng$*jr zB2nKo`}VfdrR9MIL)MlHtUWu3b?HYdyTHxk!_%Lif;^%MQ85cdcV9m?|G9f0bHQYx zHjt9b!b~q(Ztz$tkx#SjwW*lM25T;u=Rb8UTB<-4Nqa1~0dYW*o`D76uyx zJuSU(K#jaW z{OW}Go`EH`7f9-qFpk)IfSiZ#U+P3(l!m-7%{y?NF2f|(0`(b+Gf6!s(DsP zJJ!4ID|vKbyYh+Qw&!ZUwn^LjpveFSqud=gKgSLcZayX*#O9^7eZqwq++O~O>5&F0XGW5q2Dg|a9-W?Z$ zUO!3=JyB-(zSc%XaMJAhyHgfv`x)L`SuEHDD`V!PB|1$#<2{BlTc3QKZ310=IcvXf z`^p~`{P^T9dr9-PGFzQkz@OQmTnk%klo)X@s65U=qOePqA7hMt^QE0tin9UUp-dB z!;&+nfkdOi-~Dx1dQYON$R9Y(@1fG&9|LU~?}2q)!{r-18>!wJRT!nq?aQ<@6yqth zFf5z@Ub}jQi$P3Nn7i{4jn`Hyf<~*wWGf|Wbk#ITiyX^#%w<>2NugY<$qIuGTtixlPm6mzSg2fgqEBhCU2hBe@zu*4&&bQKP(UM#A?U4AxoDVwIzRD}xf~ERN z^>07(oXC*58;~GE$DkihIRLj9e+bFOtHD`zNB87-cRD*+mjByS@=>|6rvvh;dW^c8 zLH{VSfl;fzw$Gdpktk=omRRM_XotsGX4%K>DEMwRzQ8hA0W(90aU~$%`OGi=34QS|mKq#xO zso73G$V}>!v6%`E3xhRS4V#%$zS2nR&}=8+HCy$3ehmGHbABXvf+C-8fU(F>MhVks z;r(Tu@`Q}VO`?B^*2&!@IjnU}lSw;{U>8mOX3oyJ^jXO?eUXB@&~jz5XLRl=vHq^Q zCdT83^Y6Kk&pc=5D4pQMM{(L=2QR$)CkO(32N?sJxM}VKX@LOWCW0zKHWygqQlzO ziz(3R#RIf*?d-436VrzRI$G954~)sBIT=Gkw>QFHMStB~es$#hMt;OqLu;ozB~U6C zUg#t@gT|B7hMFM|7yY9z*zOxu>Wh^nr$GvOHJIWq;uY=9N={irYIKx!Nx@m8NtC%& zR|-8vEREM^avdego_KK2_I0;vJs!IevTJ1n5+oC0)2Zhj&Kv*9h1VXJJzX2VP|X9s z6_VJn^+!P;F>j5%hKF7SJftK%bX)AZhnvb`)cm9)leNRhfS42Y1Te+2pBf_KU z`-jkGW;0Gd)E_}LeR0@R@1YxD27W6Yvebkn=o;O>hxTePm#0QBd;sr z%}nT>lh25cWBRk$c-@@d^Zap%v#3f-%aPpH!XY;f$H%$OcBpE9=Y&zV^~>0NX1l?0 zM*Ued0y8fi3gtkes0MU5zGjE*EoNI_63E@fd)_{mey!5pglmn(N|vBaK5&!+3id!+ z^a%O!dn*?Oc5z8FFMTRq9fG>i2T77YJ~0B#wrgL~W4?anbfD%x-4MR+m0u;&34J-; zo?9RG_FL}oUM{K-3VyKvp*zgb{d2K`SgaFZq+wMJzuiG`HH<*GOT_EBNnY&TA2Ttb z)i&=Laj*5Q&XEZV3WpY1Z;ra&O0+`_MQeQ8@N_|AZS>LZ=XH73OB18D|ILjJ4T@xC z?~DyVAcM=vVqRyhc1Y-+%UiDIGnUQO;R3qduMQ$mz+ItMpSmV;^xczwkwR2s=%Jb}ugJRg6h4&na4s%^gkU!kTz9y)i=X2W&>+OVF z?6TszY_XGp5tIA&iUsg*j+OChw`H2sM75p}fn zqR_Z0KYXzNhL={H6O@q;OS~Io|JOYa5Zdh~VO{qLz8}A$i_>;%Nr?`jaLa`s5W5!L zAu81oCR>~@f+6u#W_>%-s1egLUx}VST7nbKI%VTWB#fpj!7Pq9^!VkzaH?MnFNfwy zNp_toj3B!!%KC&?>`|Y`k6?y7ymQC86N0)}exz_mb0-{a%T@7yC(lgGDnTchS6#FX3YN!x(psnAso31+0OXbQ&L0zxgXS^r8acQHeo zP-9+bOh;hzX>l&y8BaOc4`kh@aMF#B1yhRZK3NLGg4u!Ix+%{cU)nBgU*cHqr@P9- zSyvw{^)lQD6C;w)vG_{dt*dPOwy(#(u0xl{I?){yP0s{W|GD2Hb4H{3vSmxGb z>;ZKs;}aj~DtxdaRkV|ukDDiwCzMA@3Qz(~(&s4)O$qrYEMteHE)l8(rz(0}wOkqg&E=3%zG!N^XqGgDX%R zKQ$<5P{8tNBQ1*X-mx*G4bo~ne@&0#u#ZTx#xd)8VxK%1iG7gt|8V$&@fYy|h>IlWf>##;_3NTCjm1vTrsRD?~GurgqPBxNj(=6UIs?;?fBEQvE9 zsy%68LVtE}*NJ%L`|VSiim((4tJpv^`b@EYBY-X>&udv%eO}4k+`BU!omp6p#e>9( z!S0@O+((C5(4p#hZ((QFT8N%E=Q=q=gdE0z{-u3hna%xxZJN+{(}MPT+m_lc{bt=C z^V%S!?tuP3fy>{(>;LwRH2^#N-%u%il@a@3RjBo+9U#O(F zUv%jE*~bIBYCB{x%2Oc5PDcg!dgZ-so17V6>k{{W)C*f#8RgVyK=A$qhcc2*SL>;U zTQ@$I$MSY+8Aa*WKvh*!kM7GA;N@+rEA7Y{KPT)v(+E<3?8)iO9N#*%9%YHnBid5d z2fzo{UjNE$@q3S5Xged5t7*UFF&2E$glkCmJER0XF=Xi)(zccbO?@RdL!HL|5U%k# zl|{;pxL463LEi(kM^_6a)AIR}GEe_IVls-4xVMO>keTQx{{XX1$EC#p4ubLjV^ zMXJruUpPGS=68@c-{V0`=U@P6JS8rpsVAg!PG}c5N~PG+YLDW5qP)+8w)-N2!rk8C zbFXMQ-r9$M(>cl(dYTGye31G1g36W%Uvd8YZdShN#?{}+$NKVGl=U;Q$Fsra9`E4Z0i-*9(*u(tv1QUHVD z++ffctO5rZyaxcdxxh6Xth!+A9_%jwW5rmN6Was7tmve(#0GPR0!M=ch;Q3&j z{|zL6dp-2+mjlQOM)lv^8~?ZlgU#T25ZHgg4gy2^900Jx;-7bduUR?3{eW?J4rXxo zVE4gW4FG%v7VpiE!3Jc0gVuqh001X5*I!a{{JRy{w*dfxv3l^}|HjY%rP+UrpT7c!N~>2^8d^C!oeO2?!SFZo#^`7sxEvGyz9KPrQwJoi9K->?Itn2 zgPPuqqjYW%79pdglnS?G*S*(x_f}jcI{f_g_@Ukf z$SopZe5=&p$6C3*S>wDI_S-&eszxT*Mp^fPFc!z=Xtw=$*E3Zs@vgxR;xaemH!|Dz zk#^W0e#9qN8RtPK1GjS!xm^K|Stawg;~$N}EUH)Gb)HFj`z$Oce(BM`H%^I_x2 zDX4>d0R`HY8z0vv@jrcFUJUm_kJYRvTbj?Y55@hF+H&zkI`XtnN((WpKox@hl}6_P zSXF5GgB#weLPbYiJ@VBax2|ex98zn35_VO{{mR=}P5NM}HQd%C2l(isMDd;3DEXWH z925#}VD6tdCpm`?@}nK|_YU$rBZt(}s%B;*S2sBxuAZ?YabWVSv+4lHpwvH0#N z7+)MEf8!;-kCWw)@yXx||C+@deoD(p9deJPEoB_$lSnwb!$dy=!6dFtBla1MOe6#j zo%~-Xmw#vQ&! zCYFnylCY!qo2If7-x)YZs6rJ{3Y-7#baKd`GV%T}E!M-(T|o>-ej-2!xK z=WJFZ`*_R?vvv5Z_h4N*ATFV!)8D!CXAr1`BlCU1N7&tw?0FSp;TC=_in*zGd3mWN z%!gHxiL^7T#re9R9p~f9ce&v50f$94p!HJg!Hbc2Xme_b;YH`DD5`Nw=1{cxq~uoi z=kzslV=o?Nkb6b;{bwTGxW;7H_`M}Zlp~)^x7|9UOTL5D)t1VkDAzxW@q}~4W&~5J zaryVu5)>8Tjuwo;aoJNSg$q94qbGD9Pdw_s;2Tg9Nun|~VhE!q3eY1clgsscrb$E7 zQS5l-tC-Xd%X*rn6iJ#UKEsU$K?Dqtus*cEN^!AZ^;F!qqoBG6D}*1qa_?TMJhW3w zHYa|}@l-TEs{w4ac+qQ~7^m8IUHxM6>T<8HntE{6y>j+98p!W7Xm56W*y`|gAm;6N zeyp73jD!kCF7|v(GvnH|B?J&ihPF}@Vn8Oah6DkKP~v9r5Oy(ZhmIreUmB=e;Oc|qm!UdA)*F~_i{0)=DmO_v8BXY)O=ZIY9n=aUNoNjAr zHS6sG5XYN*Sz^sYN1Am3)o~{tNP?83%=8RVHrA0ibF*1{;*wq05V{JtM}Fhwe#~(h zF`h8wY5J7P15mTv5qG_TkyNd%6LRoZC!$@dwWhWMZkGMN#y_>4thQ= zD$0J3T%`Jvy!84+f`Z|G;Y2rIH00da_J=dI$=R!}oN!Mm$W132-TWNNmX`&Mi*V`3 z2nQzt=FrT-pqfY($trpJ@zxaTQkh))Ma|fS$3hA&a&)}NZ8-V>907TE*OhPZ(MFGm{Fl?%!OJ6_=7uobNk~;dsv9V^Yxx=Z_XbD3ClM zkb7J0aoE?<_6c)h^C$Gf)hWQ=X~0j1OYYRD@aL~K)QPX>wD48=$f?+x-GvUP5Mh(6 z^~pb`eQfXOp3`TUU+v#rQ0IEyAo15E^VPQ}#Ks{z`LE;;!(Za*! z)9$bBnJ7K4JKT4F2xZa)LmfG5vn|iw0|ZQx`9F2l4$!?H>EbQXLy;{xsLZpiP_PhX za4Ui>S#lNr`piU|-iQ}ilm!KStr;J2hv9|dzsW#P`rrJVuZO*&AZbfyS2uhe zZ39rh#0UfUy8n^i&AHi)J+-KO3v@3Auim{*V-)m*S)(0uGe=%+GKKe^bDbEn=P%(*}ng1rz!7ajo**h@j>Vd9Rsi%Y{Ywb|I zzp7tgbl$a3XNs-Hr`Ax1m~?Rrkp zOAYkDp)Nx#jokv)@E5lUc`97XHNq#Me-LBdw@O4iiHH;u$1G#ywg;kI)#)lr>wmZTU-4G{Y4d-FN&!<%-k!zYXhVO6TlxPWR0{CF43(l~1*U}j z}GYgAfvSq} zAg}7|(c&7M`EBOR{|Dwkh#M-_sngVR@}LudmFk0Fk_(*DGz;5Tal}-B&MrEpe02&z zU0R@wOa!RZrOCIqWcR&1rzO(|^yBt=c=lxyYQ4yA+=39`L*p4AeRL8kin7`w^8Fc) zN@su~+HYHJwHucMz_4y2{w&ryxmnuY@$Dq1N+p_QQR0I!6orJ1bLy+G*^l%93hOj@ zu5u-A>r1w*^o=L?#-Sfc4K6Gg5<8^YT!l_!rqF%95Wa1bu-F*|rtuQ2TgTUzBQ)no zCHaGUZFi^@BFCws`@L6^w!qCx0$|o72+49Q5>kk!#KU-*JHQ4G#E1V*A~*%5-^CU` zNsA+^$^u5NKRe(W@A}>NWhoC-{r;4jxJ}2akd+n5h~!TTpzaWs=8uO4`S?}YLboDgf2$1a}Svc)A@4xTaDA$dG5Ax?rwXGR2??5vBpu!27t-)%wJfC3_9C_tU`FzDz(d%8tl&U4e(_eJj1N1=!|qkh;|?A|N4l&G z_Dq8+pbLRSt8nc5X$#Lvq^ahhtjo$@m6OE6_by0`C@sd?7#06G+`3Vc{uSH27L@<~ z6b#-wa_9A44{OD{1uLMQB=|rL+XTlGC((UXZpT$Esjd)EOoArpO)3~UWX#M&*KLbN2O6x_J~OWk+Y=!PZQ!wR_`Y$|6_oP0I`Ybk z3&E&|Gb_`>O(~`U>1XY4YkgFPB_DEz0tEA#V$Hz;esjdMPf*1J=(eJadUSeZu$=VM zM!gdylh3&-l2PIax+8pro|XCQ(Iy{PUTOQ24}HArHmuQij#g%#eP zv=)f%{y6_K<;UYq@akx7-h_C|Y2Ms(psRFM??j+iezUrdPQ#f7jk{jh7l8~DtWHALYs@l_y+V;p?|@iL^l1J9weQe!r8vtXUWbFsxOf5 z7UjZeEH|ubhvB_VZ5jUJ)7Cl41q zFT%)7t1=XPIM_9AI)c@(<;YlE3A;FQxqf;u#EWJC-NL-QOZyb$RDL6kH1Ef+dBr2} z;|Fh>26r$aPzR@50P6r>pJaZL?mhh9JbVOl*0{`gClAS+8vhtp=D zk@E?b@8&hcspyU!RGP&;TGc|$K>sI@g#QGSHuU)P&`i9Nw7@?4wX&%eBjfgSiA4u1 zl~4P1l_M%qgJ0TmnB(WDC)mQ4L!z6nQb$;! zat+<|sLycGeLeQw=p)M^d(bp#?8vfvQjxrr;YWy^DiWnC<11+9tG%0eCB{0$LF}6w zK9Lz;EWW@SFrV!X=TOvdq>qRU<#Gp_@&-h(uL=;z`~a1ti6hH|CO+Tc#=~%wCc7=* zp%a;Vvb*y}hCgQWSE`aF9}7^-%yrZmveQ8A$iq;jh}BjU9E98H;h`Nu&vJ@ke8gX$ zt$~0eUEv~x?cpTc_+Up)5#SxDHfd6=*!>Fc^?^Gs>*Z^!f5$-{4qQLxfLeXnd1QbM zZ4TTRi1&dPqt2;uJI;dE9xK$fzt3pCkNc7^sSXD|plC5Gdd(9{O*lMZT#N?q+q9US z!^+a(2EuM$J(F`!#A5}Urh`=p7HY)>5Gk=Iv>qtt=LvLY9-Z4rNnvB^5rEhhn}-c( zfH#?dIR6P7aK?NsBVQP;z)4x6Jbd+OM|PLQ8vgs%Q>fjI%Uv<)i*c1(?MJ<+rr)2> z@ND=^sx7LTaG2THeIpGC?z0fvE+bYeafnTr`j1SQ=0fTR26W)0X1%5JwgC&D<}mpM$vP;2R_0=b%0FdP$=z2PbWjjo@6;Sg4-&3Do8ckmItxaBBO z*-PkWD)GBi@l{ow^lyu1KVoVCSfkw%LWxe2YIeHI^M58S5Df-VkX)4`pPnoGTNi$e zB(E2a#eo+4b2DP7y6rYM8B4eL1>sDDL5Z?M5iOU&gQb`m` z$O7W)pmh%J1l=q(;Q$TVpOjzNTOz@O--P6i)r2vpf2v&PCFD7Y9lZ`i9A7|;`@U-l z9+8pw^L13Gm6bph@hc0TrAgWZLP)ki^YP1m3G4gh6&xjc2j)e>7urG~md^Jir@icc z_WmUm+Sat<8&->V%bkJdlXM_2f1-J*#q{yD zTtl!YZOq6;vj=L7QcK1gjQe_a-Jh|+6@(%!hLIb_%dQMPH4 z-(ZX-u>F&46D#m!ZrA}xvZTUf*{A;XSOQR7)pX1UQDNU2`BjoiJRxX0Ar8|$(YA2K zb=#`R(s(+dbgn>JUNT2R_aZ))ueynx4)0;SaJm34Woht*Tte(hugV%}*(VPMCBqYHu9V(tnVgZpwblu$(r?4RDDzx4&L0kaNdP}!GDWT!gD&gO zh6Y8OY`3MG28k@*q^RKoOJNrS*^offG=EP<1eWwm0j=SeWiqp0xJSjm;0mmHN99Dz zEwLukPbLA?#RbX%gPf0p9O;oY7rO;R9PP5nnFuxAM;fhG=$4L5kHJrOI14Z&&&$sJ z-;sWFIhVoQaZYfw%J@I7o{)5oqpg*?c;&ucf1nywe*pi_VBkODAozl9{Arl%Mf^qT zT8>yAHu$ziKFy$N*=GmY_tj2@rFi{VdGvTivBMJ!OkHaZ{8A#jApawC?`t%iO)@%< zTuX}Oj}aodh|Kc?8!GSVcSJJvM%^#~*ItQ$LH^C|vi)n&cMU%S#3v8nZA-p^_dHWO%#`>sVM56ho} zx}1!n)GQJ+d-vXaZ2w+Ug1_es-h5mg(%feYHiY_lma0+Da{L^)B_8JO(~WZ5O81x( zmI390BtPQpGGm_6S)MJpe;c_FKxxafyJ$=p!U2_U1U)C~BD$_;hOq~xhThV3Lb}*WX2xQeXNm>qVjK*z zclp)A-e|e&+nJG@U?DbB@r`Jy$zvp zAk)U!fnOj$`OS*-K{5PdlPE0tHt1*F7Z5K};e!n?lB`tQPe;&p&`(xIC)~3MB^M}p z2%X9Jys}c5L%<~LJ!L8#k~yCx&QsA2%&=GDw& zzF+aSW+W)g_Se6(6-)fnDh23**u`){MAu?4yX=myPyVzE%XQmUzg{@t7=A z%C!oXlI;=jlRVOC`m|WzNd6gzj8Q$sU>H0z411YSm+$NOMWw$rBGT4#5q4wDzsqz~ zvV{bT(?5+%3{G)N{Vu5#I^eq_I#x&6p=QbIafH~(cdx!!Zq_EJ3Dl4>_z%TKZ7;pkxfWiD@Lc& z(Y>?p#LgnA|5V~yl|;13D8F6xDY7gTwa51xmNKe6iu4Mu#FD70n1^dMwPey3bo#SKQEKEM=h=352XM5Cw+7k&^~SJ4&mwJg2= zr&*Vj#ontcSBGIE5t0<2^6FzE$XR_pq5JBYFo_C4Figi5(^3FGEP5fb)0kcaaZUf; zbTVf;qI3x+{Y`;h2{Um8ny(tB&xUQQwfPlkboQaRV>6=1^UnD8RngqKdLLAkgx5=H z|M(g#&ugq1A}G{srl}vIRfa#-Q-$PLLZ8icjuowIZ*^-wH~i2bhJXf( zw|MHy82@Hc&-K+*YUeS4X5m1V?TYFKKQ`?<%%(D(>K@{g=<3Rh;kZRr1KR4o1*D z^vg#uHaZ~PtV&SDKtdKf%mk*%2heT2&Z#$bQI>x-6Y1=3!gWfufz?fFpvZDcRf#{4 z)8%}f&gA0zpcko>@0+>`E#x)J9pX&86l_CFZy1ljcjcIh#*`(CC> zKAXL8)T8^iQe>T{etp;327YhK5b^i&5 z4%eDkEZ7lc1mL%8kXYOfefIiNJhj64InuOzCGoxRgA)|I3hMOd_uZuWQfR0%|h*tX*^GEUPX0$j$_7j7W`fKv6bP%DQ`LS9=C}% zk@yp;g~VE+*w1~bF({8XFXY;G$>8HMbSFQ?gUz%kpo*O_MT`()8>_IyZKqM#W9>Tb z<;5Z?miZkbYI!mg{2go+J_`=@Ri{KS>w>~4b1CJKzFHLIxQFvaJzh$|ddvMGf@C!y4L$%9rh!0YrA?}KF(NgC`TGW2> zmgthU<9s)R@o*S61FwUf%OX8y6=qGB%5>*)5FW#h3e&KvLnOM+ODy3mcNTTkB~A5J zjU|!vw$GAt2MPKuYyYrSHr3I-$O#+)%lEJ?hP$uqXrcyb77WyhA>R99)asf1eMFEy z?>KKmRH?1QloUbMeUrsXL`1U@$QbUNLdofttqHP8@#Ww}y0^tLWG zrSsJ;)i|7L&eE|$y8#aKBswHXln+>m6&hxZ1Bat$#~Futcn!3w9!!=8rD5_0F+GboGCKKk`kCmXDEe)=-N$$ZV_gt< z_rQ0tQSASQWkiLG?JeodKVHTpRK3-&{hhE$s?=w}BV9Q2fUcN4)l54|YWFJ6B7#_8O*+PvI<{w~fhorxP8fg(R*`J7S{trH_Lpnw&}*rELeb zN3eJ;O&0A~1w`co|c=>7jk#$>JF*lnm7*?x1869*FUDQFN=^3HY+JNGtEla zBEmAPx}x;|$vsoK)?7%h$6?l9yd`Hq>KH^2WohV{jH+_99T=>aoBozv#oCzoAzm+|rgN$R=@ z*|Bt$%{7tPe%mH871foLL^I=GzZ6&w6`SCvdPjCt{j&a`a%?uI5%uLaRb{hI;d^h- z1rWckyl!NNVNC;@r)v7Rs)k)t*#RH;CY!875csA`)11p1JFn*Np{_YWKbH<{1r)w( zo1|NAD>MvDjeQ>xqqs}rkF}pyq{eS;J9YvZZmT5Og}{`EIkVYwxAZx4 zWtH^!n<|=mb9$4Eh#Po>8GP$o&z2xj=_f&wu+wWrhB$>z@iWGO9}*?d|wsFweau$Z!hD1wMMLAf9t^iTHV)2(xkPMZ*hUqf?KYPyO1& zRY;onByiW4=tv)T@qU36V2JG8UR{`X5|jeBDhnxyjIxJ|-^4&|-MPLs(U_|~c2?y9?y8JZc0;amY^&V_=IpWK>j}@2TIG*$ zk0K7{-IHhRcc_EEmtHoh44Nfv^KzQM6_lnR@_rhBuHptHjAK(s5SJ}SGiE-7@gwGETetr~+&f1{*6oeDNhck2Y}>YN z+wR!5ZQD*dM#r|(v7L%-^XA>(-ru|Tz4trk{CCEv8f&e&R!y!^Rb$O(K0m36C^kSd zy8Zasoz1&HhMog{egH>z6E*B)z>AI9_4Q;xLA`!#XDUpajMtRLy+Ys1_*g`2i^Ksg zCSk&Nq5Z>;fu3LTW@7A851ch1yo!Y1Pq**k99Z+;V?rt8(WrS@b_IWy3n|OPU|taZ zWYr~c1Il12K8?c67g>)TK5*hnxkuth&M<;#tVi0UK^G2PI&oEqoPx}FzVZf{Em{<7 zqM2&qB$9!=7hYWx$vBnentcQOQYxx4S2Qh3XD0L_Jhvv8F#TE^P#={;WG%r{ggG@! z&EEbQY1VgXg7|)&5c}$VQ_sF?;x#l;er=%7>ARUHkoF?I#Kw(*?ByQm{1HPuu-ct9`s#Tl(x!{90|76M7$c&77{z0 z#*9aI*tUf>UY#ZP6x9Hpteow;-RuwO3&t4VZ%~SOhUodxc7sF6BAy>-ms01X%bqpe zfh>{53&+vH-j<*USPk zrsxe@Nk4BgJ+&?mU!NMAl||ybVlT-(4L9h7WxU) zZf%AB)Yg^Tg~j|<{Y+iOZ;-GX9hk6REO19qC2?TLJ;%pJa9L*yaH&J){46;;%s{*5 z5+E--6h^>u+?}*JJJflYa`vb|*9|7X-q*+peq=eiXma+5^3f&ikbZ8O2|!$c(p`W0 z&q)?TyesRZ7vXJUc?(IEv$G;pmUEB%H1hppff95PZV*TU6(wmQPifUc~cJ6ZiEY#0`%4TQ6awke<4p z%WpjJ@3s_=J1H`cBP>8^SPb2$tz=n;y4eKuqWP1005eYRQ{4}F#ru@+> zOJBjP$X?6Am6N>n`Kwm`N<02X+WTK=J_P)o>)fS2?$0k%zGzIOA8)Siw|em}Ymu3F zy&HC2gn@uXs-MrF0PylX{Dlei&*JZoZ=X*Wxy_%?hut>5Z`U=xpXYkrAFsZj?=^Uz zj@IX&z_10oP5UQ`{0|8R(?6UO ze=mOj#})r9U-{NJg6=kxz}mgCDB!Or~U-uSD;f7MF| zpOyVf+wf0c!N1kyf1UPsC;VOJ-+TYry1$Ru**U(thMwWe{_)j)>`ebw96O5^)4$IC zdzb!qfBc>M-!=QYXTHGPf3-p9e+S3@W9a{N@BKF%%kX6n`O7ZxA94v6TK2DzXZWXG z;>)$c@DJz5|BjCRCn53wwoClSJ@!B0v45#cIQ{_((=dG%_+RdguS$FwRKDu>g~xvR zLca7XEUbUKCFs9^;xAVCi?sO{vCZ^X4gT50f8nu=Us@8@|1}=V@b9qBS*N>~vd9Cw zNBPC(YnSoyg;Rp;Y*0{<5Co_L2mv($WCbK9Bv%XnGH5nJL4g%*3vl%S47O8|1Uym- z!$l#J&mc~={huiIQX-ID`Y_41t+KUj2&T!7t;=`b%h*R=M>^;7lSPikEKcXiGA%Y3 zc%WMRZD3Ma3d+{k7w>+cFyLI-TwSJo{kG{k)LTd3%Ev#g9;#4$sh;3HE~w*pS&kDC zJ$kWUPc(sEd4Oi)o@t<}eUe@)Kzc%_f*7DoXl#M0$bo>tEsc9smL}x}Hp78Hd4Oib z&?Y-QoKxKp*D_on_~X$gGg%&^x$ca^wgR65(RM)Aq(XH4#`T809{MWODnFhyE#YtV ze&(ubHyTY=u6e_Chdr&R`y8EURA><|cwpu|GyVZbooe&Y)x9k}rT=sUqHLnp=ps}A z!u$3|cX&)IWx~?^k8>f?ZLHyA^|!uGF*tue?`}QvLDbmlGyDXNM<*i2MoEXFx8@E*?lCpTrJREFVSxBM?4? z;EfA91Tkn|KEe({7(taEqc0z#+h1QkrWP>-9~%}0LJa>6OSxA*h*FubG6WE=M2{$n zk6ql0St`hmsT|ZOA8i)}Hr!V_Ab}3f65ieCh8|rDYk{C!)C)-u1{kD=1qh?Z*5aPP z%L+cRNQXoslKuQ4&CiZPE6OetIG2wLAfboU2ay*2BbpXq7Xn5XTn0fGcpTo%kE9)N z27rUj=;i{5FdnOP@+D`!z>p z2x`z$pJLFG`ITucG+;{KeFt3|jtahdW?Qp`^ctg~k1~j@$0CTWuMxs_cAK*W7BF#D zKajhP+JX!42=WbrsRaXwsz=%(H4v^tv*CBB1UC1|K-h*lhvT+@*od}#w-InF0lN&i z50?YjEc;#IE(cxd2Ko9`)nWixTTpVXLf7Co!JCOX^a9~}P=nz5vLWyS+7WYm`Z3pm zU5Ts$J>hx3X(90bSgXw$W`1I~8YYwL@rH2idxvl(c;n%Qgd_C<@AeC&@5I6teL_Ct ze`4<2>ZQwv0We)b^zmGw_n~vg*wuio0m27{r-8W;E&_GJW4AS6E<*M2yF5uOP>A@;#-8!yLReMRsA zR7{6ovA}#_wjo~jpV|QduI%4T7xV2Kuk;(77o-@1&v!hM&7kg{ zVTkUKEdp-fZm}n|Cs2UI6G)%Z6-8e+!5fVi2oJ<3tgrMNm~6i(#AkjllN~gm`HG{j z{>n6HtM_^U>x#$A{|fvG5y0{EL!a*LyFNDHG|sOE;X|$DGf9@O>iBLhLzeHIj`RI8 zL-zBv`{>S=Ir}5}*If6E)63S^E}Klrr_9{3@7&knhe%28tka8xOiAwi|F8-FJh}T6 z<9x6GG|c`G`}(ZH+%Zpv?B$G;N9?aTz6Gb3lFx?6`Jll^}e1{Gn%h(sdhlKjkQp-&)N+@ zewJ(~JCTUP>KKv7YCyz97>a6KW4EEiv7mW@Ua=|r)Yl0D%f7g+1NlaeJ7bP{uVzH*6ZjSnG|jdlkaeawNLEdn!MzXPQ2ReT{i& z@bI*>MD?Jz$p9JVgeRaScUp&Q1~<%CWP*)1^#)tD0@_vCj`fPPHZ(QYEOav@Hc2;J zEzD3%FNVnxQtcUAc&swCm>(sGd_vI_1&tH^yfguH5*X?Hx!W+|2rV9TgD5YS*mUjf z&r;7ieZ|-1147|wGlYC%PJ8g~0^|rbmz@OH;yV}(=dJAh{r2l~3d37L75C0bBeqAY z1DaX46w5bM#DSpVv<`0|C&iXWm=`(?1q)_$)xtQPAdTW&7J-2+AACLc^B}oM;1Wc; zqgD=N&movc+ApY&K+Un9v1D&_aa#lp>)%UvbNM%Jw6qs&5r9wWNbmQ4)CE})!NucZ z7V6E}x~F%CfBIjdIPCIV;~}CICO_nD*&&>KG>)td%WItrd0+8XXLt8w7!U}J2;M-1 z$K&3xsF1U`ko zLG$`EDG^2?{DP4CAqPqKqhvtRzIvI^hhT%eD$#dMYx*^meE@C9@ESHr2ZQ98b8n#E z4Ceu#4z^(NjmBY*C@Xl59f}u`SpUrRdl`wd(YMwhZP9~xtWggKv=v!g{MZCjJ5Y8o zO8qUOh78&K`XlbPnCg<|8E-edyqY<zsRM z+3PkJG#5G-?2q4FznM-AdlNSOW+F79DsfIcROc&B2a+9Ptsn3_8?^ zHSoE}pTyy_Kg)Di$ves3b!-TZi-0_F+4Z#K>8g9B+cG(y8uvhXNAS5{@>~T$5A}ak zM|2CJpbfh-{B}6YO!RQ)DnwS{4Y{Kl5g;e3>CudLIK$5aUmd+Phx6_i(~=S!uW+61 zl}0%4?s1E`6-L+{e$;~7f$*VqmVLU#|7hUR8^Sw?ew$L@b1rC}4qH7}x`BGifjCNU zRiG>ZU>?qZyF)jE&UwhROfK$t+!cVeN_s&(ARzElqKREC<%>MSb|J&&2}cXdcyM=x z`KEnRE98(5poCOF^8}$B6-W1?+;T{c>i?-TayFW@CK!hW; zk<`vq|JE(AdN~So!(-l$G82xRY*ytPU9m@0hp_}m`{bVVbsan``1*Caj>A?AI0XdR zMc0Zf)0`pskaSSM3fj~N!5uf7dCC=T{)po+JM9jz4Ucl%6{+Ekc*hCww)LwpBXUI- zMZnXnakVGjKe8ngtHZWzMQDA*uRiQ=VU^9#X@TxcDhxtoi!p<3qBG=i9yv@8>qIiW zBAxY@J1AJB<%jy1>$m6PxmhOx)lD!`~?{^vh6Zs{kfDk_I}& zqYka};k~qsHU#scdF0Z{z(1Zik~_v}qD4@qWw#8Tmk1ebfKC=VKeDCY%n79Je`0PoSw#!d8) z9$e2)=^Wq*FoQh7<#D3>z7m!l@hr$vXt*g4b1D!uj=^JTQ|Y7Ff0WViv-Yq5-MT)m7TYs_;Eh3ngQ0bW`B>9g9me6?9lRXFz)IWf!NB4^K=4(6Xa3X~bzJHe%E>d7GSsq5v z?5ecuVaax~D;-4afmi{*A6e6g7K)5}@5RsDp2(*BGbCNlgR4etb*%h2BXhp$QGIIjm_8r}XqbjN-4ri~)MO@ayYTOk`u ziJKPNeSmhIm${)RosUt9IsL#B_8XanAP?J6zPtsTcpj^X zIc{c9blcCXtyw3@8+YOCaHS~8NFQRUdq!4f2YsLA@6S*krpp8RzR%j4Y|cZ!WZIy{ zEEIsPSCz4T%-dLOGFLFoaB?Bn2C+KN=r}F?N|~APMp{j0ujQao^|T~{H6Xyy9EpMp z{Xi0F7qctre-ID!z4^efc!jbN9I0@+?(UwE`e8qHtMFlSet}Zn=o!u~)~4H;T)By9+)y=WmuPQ4bLBD;t01}vXBYpZe2 zy=w5dyxH8(EP{mfem%`TCB2_yR{Ico7|U?>zN?qCUb;KGdT8$Y{Lrp3Zs5kUPyXn{ zFoyK^hVJnPC3;jqL@SonEM67Z-o-v5=9TTCiWJOp2oLHeClc2?D~?9k>Q zXiK83zv=+no41q4Vm2YbKm7%OY`0C7eX~&j@nUP^v@`ZX)FJPPrO9RF*>zbBa3sz0I1ONiKs}qzUMwUPC<>NUZYSJon8N01R>(eIB7u$wuZ8tFw&p z3Q#TefNx&yVYcAv@v%rao)}OdOX&hpchvFx0`Od#f!m*^XY%T zr(on=JslmGTTQ7pn>#a+)US~E7L)!Bf%ABOYBYksCvRJ}4!AgZnsk92=<*Q6E9%g_ z<^pIXm^Ym)pngV~!+!!wR$OKO_!kmNU_?FzdP9Wb%J$ifA}yQG+eb4RlBQP_oHa)F zh|fFfVxZz(2+VRIG@_y@@9E0rsibG1?}X!khGB2fJ+avIY?v#y>X&d#+ zw>Ywt*P)w2?!t~jFNY?wwaoKf?bbIZpTNW32Jkt&Kg-!&TtZC(AtXd`4CK2RQO+1z zjJzXpOq@s?<>P=T6Zy#AEPa2VX&~f6twCT^=Vfh$qoP{Xagky^lTXIJEz=$ar zuJZtg`F%mQFuy5VUJDJ8&h*Q!(rC}VV zp{#`~dwZL1diMjz3tIE36~-{KbTk8EQpm$Q$ge{j^`+L9x+9>omzHbgV|)Q5Hx+o< zI86D>J|q{K0|=Ilt%S52Bu znWwCer?MBO$C-1-vKMH5w8K6ZezjZIzYmdW&K%16n%w@f!WNK{LNBJ`K;S2@`T%OcK%40_T5g;OzVw`0WrNP<(#5-(>2fc% z)aCph;JRcL`T3l^w6m3%83=_|W7)cMI62iSk{V^3w#L1EfRkF?ZqW}lJ_oz;Cipgg zxSC1VgL4QxZ^fxN`(1ITv^+^oc#sxl#5xieL1Rw9m(>DS+H6!$I z`+~`UA1wisy9ZEE``_E>*l*q9>Axa{AP1)+2VfD6`oGdC0G|EuIY9-IoXhD9gJM|n zAB}~bIg)mTb&rWdl@rMo{0|{Vz?#=WXL+R-Uc(<=3X|=M5_gziP!ua0D3v+*>;1)` zN&MP+D!RR79g^ja?sLpFJ=)C6N*;G+ZY@5dPH~*&RrZ6BMy?2x-o*Dk^nV(?-_zCL z9qGp#l~rng-i))OIWxQ`wW*V0uG4NKUc00(;fN2!vm8D|yu}evFv!sc{fz6+1U<(l zW~bGTd6@^lEJLzUVC7_ObLnxp zX4&Vt;Cbg`ClMQE+QYcTd9F_GliWuYNI6SbvvzI2H3v>55_cCwNf*CBYNDudtT`fK zT=`Z6?kb_I1f?pc9O*0?H443OPO)d4Xi+C3hjPMxD>3K9 z4yjH;(zWB1Z~@&cF+lxXY!EK=>S8Ijnn59Dh=5uTI+q(n z;~}so1YE0$k8an#E=ZfGQxOcwtS9nDv}@~w^Xcsc(i$Tiem&Ysa=rDO({k{8>#glP zV}tp8R!J{`YXrJ3ZM}W>M*Y0bS#PjA_RAfm`e5^bn>4LKo{xIfui3~97i<&diOV;I zkK97FZm1Jo9ZZ|w$HQ*zz3Sbk+PU3)0H5cg6|+L<+3!i*H_#$9Bes&K>}eSX8Zan; z*|7Qzz7|=lv^de`0s=Z?))d!6L4=it2dP)z(xhFoes#J5`CJVit-z#1*d;WeltXGv zOkTUJ6|g?d!@S#ifW?^!HGU}9V*aq(d7025=cCK(Vq(0nq9n>qg)Khi&EWIqo6}il zEvw_7>wB%8KFa!@ywUzR)tsJY(~eg4hXT6{x2d$>*gtg-d*%R5{CBNbUO=9m7c7Z# z$=(q#Te&kfP6Y_h%Y$-M;J}74Q4gj6fdH}JD}QVfe}(w0;cpR7yA{H-V&Z3AlhYi+g5Me&DX_S2AB4A zLEow#W6L;x&>gXtA33iIRu3*)6j|Y0 z57`je7QO7rx1}%4fz{vi9c#G!qS#k6AIAiyJuQOSZJ4q96Y|_}lq)*NmiOUFHCo6* zOy|?^7-yIF=&t$hP1Bk0N)vOenw8?sP70f1rhP&lF8ZBRHXoZtwF3Ks9HLyFuHgqy zz&2V&Fe)Iar};-qB{}C*(ksOKF!~+P(gZ3M7BUwTK%arnOw7WYMhd1_(lH^0wtutk zV?**L2xM!?fDc!2)J@P0EPEPIUZZQ^d|QgdfAAgeMd47coxSw*%{;c=gY52C`J(8# z7sT)y5%+C>i*5S+1|+_ReH7SDL-~?pt3!3puKlDuv@(genKBwWCv~|KsRyUx?-#ch zey<3AWupz#u_ewNH78CknM0ZgJ+uOlCqKoYiyc9q9EV^V6rBma>a#_j3he1@g|4Mm zmn*F#oHn)OC11R+Z*pNthS+yB|LOb@Hw- zohhjnW;l9<^T)LDbPAYG31VtS5wrPT${4>Y7$vY-t_li{vgU`|QMB*+=LH-1fOS=q z5Mx~Ju;uPKbs)tUB<>l9G2A3!IGGg^&e#x?$QWE|ANjzK;H|6atR*LZdydVQ$`h8& zYNn5bE)iP7o`QIQoEHfxW64%Wgyj(;COyFn^prC&+BatDdJrQ1R{mH}JigWRNPVEK zx^t&CbHDQ6UslXQizIDlbsY@;MP7hG@QR#d%rR51hW8V-M53K}C5+#QB2!W@?XKX` zrZW+nn3FJG=o;x-ZYOu})6ZqN-}~B|#&;LaQoYB0Gv<^j=(aL0yIcYwyfWTuycvQR zp#+1&>W!jBWi?N&3T4Ny9Zt+eEOB5YNg^xYLQuh;1CwS7av(L(%navMf1+}K|6;$Ligj19ms)VN{<`t~`@9N}*IBIr^PS%XM>1v@puD-PYbvRtxEmPB{?tDR^Bk zQ6Lyf?ChfZsgHO1dO6)3C-*uVJ*Augz8!6KkP=5%O1s7;Ve{zu4TG##x~J5K`oTBt zcWl&5P zYZD+x2qQ`f+_BbTU}kEV!s6LM=GPKYuwn`^;IRJ1!|RCX zLP?+2pN8ON1Z=}g18~FbJC-APe3u)qD`ZnVOF~p7?^t4-FzSNUXX22P~DMa zh~bW=zCXQwHr-N7vhDU$vWOwKVe8=9MDe3S;6corOfY0f$C>DZ%|q9n>b-qS@i^rVQ!D5-PE@I zDPl>_&1s6IkQPsCkrdnRJKsuumt*|G$}7RAL5KVH*~v?=C=TnNN(xOPJ3;u#ayHep z;dHwA>S;aw<*GBr#^8s{7)nkBRA-x&Vl1n2mW2$Gl>&7f($E!s3@c14Tti*+w#A!j z*=|jZ^G;I3z`9;fsgTkZ?1)~g3DA30(g|yX6D0#Q2#gKFyJQz$>ks&BaUp`Lr?J{F*2PjE zH$JD4bj*6bB4TdxVg~v8|62-qLZ?rpO=B_ zgDWsZ!+I9*Y5Q2YPfVXM)!D$rzhE!xTujcUJe`4JZJLobY)Z%&<1>jL+<&O(M!hG%r;}IWoyP>jN{cu z$c1SnAsw7GGsz^z!A_#<1G0~$oBU4Uq14xBSMpQ9oN$ku8|A%f068M_U|858#9t{x z&);SY3KBeKrJLed5s5a0NqzTK^n!!Qy!8EdIMVHqnk`(#Hk=jNm)NH9Z0ZN5;i`$q zszxF2P`eTnp4%v3JOyxOORY`p)gtYUFxI|PM`zhYU`q{+6An*@k*K5|1Q-+W%`%GO z^TibHOs$@yXpG=S(LZ{$NAJg!nrHFyMomMvyyNL`#?pqhm>1B)KlgLbUH*1Za=MCC`z`EjF>HEv6 zExH=>Pl)i&#+yaZufLd-AHdJV?~^b~vJo*-^)T41@2jSox*4AnSVP5*V|A1T93ryeqf)FYh~fN>ZZVShR4w8AON?9+KUA{G z0lcV-bt(ZGRHo%6G!4l%`P}zoopL2Dyk+`yBGrY%n?aVKz!&&L!98px(=V z&C6@&`yE#KuOC&GK7v|j8B&&Tn)Z^~tFt1RCJZz3sB4VL8!|U{4_rQ7zZS%9B5c`T z{&3+{*&F4>zup1}n5uPa?=ff{XmR;ouNQ|j;H0%2!5SW?@udf^!|m!o*a_=(BC7-) z)k zRqG|%aGcXEsJSB0cc^giJn|1A1!?d*$&;Q!{#2#MPD)Axjs;s7-1hlYXiUS;I>Un*2f%X~iRZYZ7z9sFCL7p%VgI*&}=v$K&|s zYwf;$INg)~8w7*^WUIOk`SYF=LI2lRH!G{R_T(jXu4Z!YrsgF{>uo2LgY9VNxM#C% zNe$IG%T~=Cbb*;un{W*k^#K=FXT=eXQ^`~1Q@NQN?@N5JiBT$a9W1>`MZEuv6$=%d zKO0dS@vAoLMD@a^A6n+0830C5XIZSVS8A`R5j1{r-j342t700e@?4dQ0Lw%`&u%0b z*KvfY`{>Vkn4h?$Ddr5QmJ9~a{Lm`SM@-=RW6zQ~zh`Wh_48WXrMEv6SXv9fwg$+< zS$8wKvMHix-?pXMp66vq+f3V1TR57VofMq6+Cdsdq~w@?qjAR@U8Mc;R2Z7p-X@i- zpUY@Q;rMFh&Y2yl)NBN`wZS5DR8!)!MppkmETbc3L}_-q1Pz{c&fNs0qj@&0^7g8y zHzOT_`(c$(wzIaT>>E|5$j%V&=G_zE7;gQ3OypkbyR=0(PZx%8(h;`o#Pkp4qm!;Dw zKMc4x*PM@a7f^9rt>$I@AQ#i4RD{5Bp|dc|`Odq$qK zJ5wP))O{-CEbCo2vvi_irmLfI(79|~Y>&2K>acKMxXs@OnM&PBy-9tb%Qh8xg@1)V zbX#*%t16kP9l?ibOl}|JS*O%bcJH){bT53ASff=-weFT;FuzGfWicNbMPNzBTtTum zQI4EgEWHK-2!wLiYux7%QkI5+7i-D?fXfp-_)Wf@0^uncAa7&@X=q2-2HnL>adh>9 zS*{d{e?-kH!;Zk=P1v`I!G;q_tcQVTcoHXpbHn_cppI10yZ5tmPDl6BYqDtN1WIcEitofq+Nre zb)^7x6?0Hjr;vt%W=(;4l2TI2#F7+eOaw+KTjA2JdWe2gW4BXI0Xw7RD1E+^w9|-j zSNUlDnbeS0Kf!=C@Di4kOJF5)Mt+5_uh=vJvC!RQ)VsRLQ9y%%77^_jbtPezkd*~2 z(6|hECuS+S{pD69I2YwJ-{UgsaEEU|&#F7#&C^*#Z9%ImDFCo&VH7B|bwvWDGkG?J3mt7Sr>`0g)p$+=NP!K2HG)q~|2$;Mb*3e7*8 zO;@c(4q$a{Z|Pl3Pe~vW2u&5kA{b3gXh+xMM@=&V>nxbX;sF#oXsz4mJD@hq%AsNt zj>_)y(oEl!YjJ;tH+l=I)HEUd)+dASAL0xYZ%QIGvG>F~IZo1FgaCrFLaCfPw?Q4` zMBad)(ZZ>mm3G}__$8Rxa3DkJFgk$A^80ItQHtp@dKCf5CUjbhe1ZGtJZez58&I|` z>2A+=7T@KZ_1`VWj{{6k<2={h>m6b2n>+$m1~p?F?3Q~`^vxbG#>vS+(zI=#@urt= zpvDA$q6ZaZ70Lmpy3lI%aK9);=pWy7C-Zp|;BEd$ zaaO9+Yf_djf8ASmTxYjFA11q=$ncdHmYhFO!8m0qo%m^m;S~AX86FRx0COiof`VpW znK2?}2Xi7iW+?0UdCtCkQgdpxsz0i@THn1G#7^s?e7pj~ZfyE=aUuB8CsCR^j{eF>ED#td>qq6 zNOcGdn>Q)kI}8N6c$W_KDaEcmyt}x-;sr|mI8|_xOu(%-cYHP+Ig7oi$*4PrU!+wo zkLNQ73=#Uc=^ki4xwxQA`D=iYno>ml7gl2r+#%{bh|-ZJ^J+soX0&#_P^ z+sjzF2huT|V1DR)^vq3dUh~c%ZP8uwupLbMQ&G0tu+3!pTu&3h@y$HI*X_}+OR*JP zxCpdkG9dAl{Y*5*kPy}U{P9n+?TZ zGoFmX5{I)<7#AdnY()B+LrBHdHaK^XPm`mB>oF_Dy*=X0!Lkt4VlC@1CXuDKWd8yQ7Ryc)N&YGS3v^N~%de>i~ z-x4i#D7NtU(`$G+1;+JmQv&=vLqWCvI%TuQeww`7b=SaClgm8erwSVRnbl}{g<`Tt za1$j%u@*-`mNIDfY-Od&>Xm;_IAWe{Y>MQ9Y!bVfV7C~uaQKn}n!o+bBQt`yCz z0v@R?n5b`b4|rKK9|jL%83R@ak~WoJPp)VDQ%X+JI+b)yCfl_N7`}Pe0ya@!CoXng zW*OB&E>Ot{qd;3Z#-kt~lT#D-ybKcKo3_FSaxq6Yi?7(n?hdVa2|(joLx}oQ+()hp z@+R`;^!N7jo80Z7*Fq|8Ri9UdD!I6T?u{|M^HOzUK*r)ON#p{itd!go%xPSAL9Krzs-ZuykPJ{Ej<*hh#JXfOYOsMF%fnKFhE;dbJ z6`}M+7PGdEh|E22OSqIBt%Fc1AvS>HOgFq-T=#62LYlJccKaYNvxI1F_54`eSrwzx zdN#uyvlMlktqlg*9cHQkQ=_Af!aH=ld>foMpZhi0QEB37OO*Y5)id@xvw4W3%KPV# z->UQDeU4NP(M>eFDeZE;2XXrvuaGYJZ8mrBO5OYj%K;rtKq-w{g%M)}SSPLywWNbi z9*x@iN?lFL$ArVeu_FxWkY3@;bhib}9`eZ{lv>qLnXg96>PP1m7nE+TGz%$UXCG^K zxSmWUN((^%fX3Rr=JYAdH{s>68TaCRZqJwdy4|G!we%iUwJ>_*x)DpnQjppugY){G zgVxvbb8)m=v>U#3g31kL)hyj6_rl`Ns&H-a{DxJi`^t0QyWbwr@)SH%C-njI zUiFmlRxY4UVT-&pnx&E`*qQlzq*p5D$LLblVuI+Lv_MNwm8^|y!lX&As2ZxqL19hn zNI%lANr^-ri++898_)dptXrqYJ(*6pk7(iD8eea25!TIcH>&r6*SH>!!Yf8xPC*DQQ8yI41XBY z{W{h%>0j18-&L!)9bpCY zEBF^GR*ljhux|fNeQ|WNWc>nvOwMCU7QF=dE)L3*8~)$qgOZVbR9%ftIINs=O^Z## zE(1er)N$jR!hk0VYZB`-m88b<$ReRFmj=D8DQ0&v;tjGrP)S!2i3Aj>eA-5H=V~=13aOSM-@)ju1bnRmH&J727u zbTo9p$~cQmmiA~zGBVpYn>OvG7G+i>-7n03tMYBK&uC*|r;`{PhdPeK828py*2!x$ z5ubooAl{+(hg4Qp#wBGJ!>Ze;pSLW!%Y2Llz)U)Sf8@HPSx#-FGqNIaZLz&ySG$S~ zSO#LKV7kUS(D|-ppW&5Yhx-$hi8VIh_~rOyoX+& zn0KSgD2`KEul#)Ruh&8!v}a_V8$}NFTt_k32?ZXE8SE{f^L|if+ItZ3Yam5tKj;x? zRIRXLWY>KPkfb+SX|-hL?g)elTO(((#7ajq<%T6u3XxG*=Jc1S+Q4kmb0e~S(K_na zO-l{N@vO0~r8J2eZwg(R(My{;q?(F|O;zJbAwQ<8dmqE#Uj5Raqb?v^YtI%nU4m=4 z2rfOH%+3-0T}Uv8A@z+)*d}F@d;|JhJax?qg9D~o+=nMO*rATvZ^u$gUT@FCm-~a= zjgwaDieJ-oBy`NIS-j5*bQBTNIVq{S$ab8S&P2bqnvbW?Gr^c@Wf z{~qpT;nKv>!WP3W!T!ch9phKH+{@L`wP5WX(oL%xW9gCh09imZGXWbgNiyY6UDBvC z4|(qCAj~twOF$!YUXTG{la7rkw_$MNH;73|MKk_;_O$IDaChZ4b(X8=q!X;$3IN;L zb@bd(vW+S#@z$2-G{4L99M$5vg~cB<;HBwV8|K~?44 zFzJycnQ>^ne@{Ejfzu)|pkq)y2PvJNuALzwXG8KCD5AFKqePpi#2EkC36jGM{%JIt znNXwb;J6Z>usb|Qa0O1N_`SB=?T>F4Guo$392QPn_mah%R(wKHZ|gr%d2 zU4rYKg267!^QPkb!@aAZbii-K?+?&YI{T{s?*nOYFQLN6Tj9OCx=N-a`(b|TEV=9B zx;**Mj7>kN^Q4Sags?9)1y@hSl>awxSKIlFMv22OFBD)sr$;y@^fVjUr=3c4NAKM8Xn z$ug!DncW+aplE8ILs8G$*#o%vn>2}J&ParB+Eox6+E-3>JmcaHca$WamV`D6MsL6% zhvEr3eLY+nDr)0QEONR7HlN`468ycYVZZUr_=`IyZnbN(jRv$hI ziYQ4FU1%7>u-JZ#QhlNZQI)E~xdQrBAEaA%InQdkip>iY@A?wzk_zv5lg;b9-t};h z;h0*RVaVk+*GH6{Drccr36~)`GAGhyx#a3Jd2S^Cv9wp^z7w_S5fw-ZQX^WvP~sPf z#E`FsP$XMQ`t_z&lv;*d@a1$yOe~RYBUDNbuPY>L)g(A00~PjQIbta7L73|Ty2jMI zAnYp2H!YDZ6DrwDSDO3m%TN3jKu{*lk{uC&kw&^%q85$9o>PA=>O$>-x=^djQcG4M z592s0Ze)7xk#c&hG`8wVb)ZBKsIB)U9?W9eQo6RySquHfnBr1* z)jxb!wrNgI^y`V(hjA<{TljJ12Gqb5b=i?l{;pt`@N=b*D zJMYpOdtF9zTLndE+ww>ac?mcXl8s5NZT=nP>S-lU4yYMk1UYZ@*I)}q&5ASBb~OJ9 zrC>z&au6nJn_;iI>LKEG5+t;-AEAv)08+&8T$22!Aq9>?S`96}V}r|)x|LMV_2@2`^TaE=+SP)o1bQjr~7!mu}OzYkP66jPo4(p-aOFw1cVtZ8s8x4G=^hh z6Q2^uB{~MiICxO~{WuWNc+jE8o?*wIl5hnFe@()dp2riv#+KSWQfCuF<3pu ztG=K|;eru^|B4YaM)vzXmYqD<=*TMC*)rn@_3+7Ki}f^}$$R~n{A73Kh}c;u3c`de z)kSY5YW>2_kc-ljNr!QLy0$DUKM)@{iAppJ3OX=6dAzq@k0 zzu&K&xt*T7oaNGP*oY1NoIDZf0(;;5EPmm!!7jlPZoYk^f|;GI#WNSbd?+z?BbYdqy$zXOkpr|}v$kwh zehM_N!I1vpV6yZ24ggxr6l6+&c{z2_llKKPGBMy|M3_MvgZ?FC;-P8ck@n6lhqx8` z^&Gz6K`3VG5CrOAT>yKlM;zj1utm?}uXf-C2=MU(9nU#_TS>b&1${#pIqR1jUdzgv zJeiV`lM|z$FR|REq8JZ&)fieJOG`4y`XQnTd`9@4@og+7R+lVb3Uo3V%=! zP|#HCr`{8up55ASZhx=qrsw9u@&4IQ5>l^pmz5ahT0`2jWPN^uKOY%DlQd>^wvS zsbOW+R3T&chB_}o=;MC6L9WgQ+(80kO*$PB-Kz92T#$(scSdIA8Y7UO@kE?oRusD**h^`nJa&6_l5+#k?;T0+FJnEu_WojmMoSmX12x5%*@Qp%*@QPWHB={Gcz+Yv&9zke>}50 zJJ)yLzW+sRN1W_a+0_MERS}h)S@}H$RS;jdi_`1ru`iSd=M>;yDH+|xYt2E*})}}be|BD zqnr*N6y8DXJD1e6-*J#g7w-uI2WqJ+@aJpq5*}HsbP9*BsTo z!]yj1&CXxgE@5>!o*P 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 HFx3ACQndot literal 139391 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 z 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 From e51c9fbbb8192b4ad979282644f6fbd0a71a02ed Mon Sep 17 00:00:00 2001 From: Fred Gylys-Colwell Date: Mon, 12 Apr 2021 14:10:08 -0700 Subject: [PATCH 8/9] Update license comment Merge from Widevine repo of http://go/wvgerrit/121950 Remove term "Master" from "Widevine Master License Agreement". Bug: 168562298 Change-Id: I655babf1bc447f4872f6a0f849107262be42df7a --- libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h | 2 +- libwvdrmengine/oemcrypto/include/level3.h | 2 +- libwvdrmengine/oemcrypto/include/level3_file_system.h | 2 +- libwvdrmengine/oemcrypto/include/oemcrypto_types.h | 2 +- libwvdrmengine/oemcrypto/include/pst_report.h | 2 +- libwvdrmengine/oemcrypto/odk/Android.bp | 2 +- libwvdrmengine/oemcrypto/odk/include/OEMCryptoCENCCommon.h | 2 +- libwvdrmengine/oemcrypto/odk/include/core_message_deserialize.h | 2 +- libwvdrmengine/oemcrypto/odk/include/core_message_serialize.h | 2 +- .../oemcrypto/odk/include/core_message_serialize_proto.h | 2 +- libwvdrmengine/oemcrypto/odk/include/core_message_types.h | 2 +- libwvdrmengine/oemcrypto/odk/include/odk.h | 2 +- libwvdrmengine/oemcrypto/odk/include/odk_attributes.h | 2 +- libwvdrmengine/oemcrypto/odk/include/odk_message.h | 2 +- libwvdrmengine/oemcrypto/odk/include/odk_structs.h | 2 +- libwvdrmengine/oemcrypto/odk/include/odk_target.h | 2 +- libwvdrmengine/oemcrypto/odk/src/core_message_deserialize.cpp | 2 +- libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp | 2 +- .../oemcrypto/odk/src/core_message_serialize_proto.cpp | 2 +- libwvdrmengine/oemcrypto/odk/src/odk.c | 2 +- libwvdrmengine/oemcrypto/odk/src/odk_assert.h | 2 +- libwvdrmengine/oemcrypto/odk/src/odk_endian.h | 2 +- libwvdrmengine/oemcrypto/odk/src/odk_message.c | 2 +- libwvdrmengine/oemcrypto/odk/src/odk_message_priv.h | 2 +- libwvdrmengine/oemcrypto/odk/src/odk_overflow.c | 2 +- libwvdrmengine/oemcrypto/odk/src/odk_overflow.h | 2 +- libwvdrmengine/oemcrypto/odk/src/odk_serialize.c | 2 +- libwvdrmengine/oemcrypto/odk/src/odk_serialize.h | 2 +- libwvdrmengine/oemcrypto/odk/src/odk_structs_priv.h | 2 +- libwvdrmengine/oemcrypto/odk/src/odk_timer.c | 2 +- libwvdrmengine/oemcrypto/odk/src/odk_util.c | 2 +- libwvdrmengine/oemcrypto/odk/src/odk_util.h | 2 +- libwvdrmengine/oemcrypto/odk/src/serialization_base.c | 2 +- libwvdrmengine/oemcrypto/odk/src/serialization_base.h | 2 +- libwvdrmengine/oemcrypto/odk/test/fuzzing/Android.bp | 2 +- .../oemcrypto/odk/test/fuzzing/corpus_generator/Android.bp | 2 +- .../odk/test/fuzzing/corpus_generator/odk_corpus_generator.c | 2 +- .../test/fuzzing/corpus_generator/odk_corpus_generator_helper.c | 2 +- .../test/fuzzing/corpus_generator/odk_corpus_generator_helper.h | 2 +- libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp | 2 +- libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.h | 2 +- libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_structs.h | 2 +- .../oemcrypto/odk/test/fuzzing/odk_license_request_fuzz.cpp | 2 +- .../oemcrypto/odk/test/fuzzing/odk_license_response_fuzz.cpp | 2 +- .../odk/test/fuzzing/odk_license_response_fuzz_with_mutator.cpp | 2 +- .../odk/test/fuzzing/odk_provisioning_request_fuzz.cpp | 2 +- .../odk/test/fuzzing/odk_provisioning_response_fuzz.cpp | 2 +- .../fuzzing/odk_provisioning_response_fuzz_with_mutator.cpp | 2 +- .../oemcrypto/odk/test/fuzzing/odk_renewal_request_fuzz.cpp | 2 +- .../oemcrypto/odk/test/fuzzing/odk_renewal_response_fuzz.cpp | 2 +- .../odk/test/fuzzing/odk_renewal_response_fuzz_with_mutator.cpp | 2 +- libwvdrmengine/oemcrypto/odk/test/odk_core_message_test.cpp | 2 +- libwvdrmengine/oemcrypto/odk/test/odk_test.cpp | 2 +- libwvdrmengine/oemcrypto/odk/test/odk_test_helper.cpp | 2 +- libwvdrmengine/oemcrypto/odk/test/odk_test_helper.h | 2 +- libwvdrmengine/oemcrypto/odk/test/odk_timer_test.cpp | 2 +- libwvdrmengine/oemcrypto/ref/src/oemcrypto_auth_ref.cpp | 2 +- libwvdrmengine/oemcrypto/ref/src/oemcrypto_auth_ref.h | 2 +- .../oemcrypto/ref/src/oemcrypto_engine_device_properties.cpp | 2 +- .../oemcrypto/ref/src/oemcrypto_engine_device_properties_L1.cpp | 2 +- .../ref/src/oemcrypto_engine_device_properties_cert.cpp | 2 +- .../ref/src/oemcrypto_engine_device_properties_prov30.cpp | 2 +- libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_ref.cpp | 2 +- libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_ref.h | 2 +- libwvdrmengine/oemcrypto/ref/src/oemcrypto_key_ref.cpp | 2 +- libwvdrmengine/oemcrypto/ref/src/oemcrypto_key_ref.h | 2 +- libwvdrmengine/oemcrypto/ref/src/oemcrypto_keybox_ref.cpp | 2 +- libwvdrmengine/oemcrypto/ref/src/oemcrypto_keybox_ref.h | 2 +- libwvdrmengine/oemcrypto/ref/src/oemcrypto_ref.cpp | 2 +- libwvdrmengine/oemcrypto/ref/src/oemcrypto_session.cpp | 2 +- libwvdrmengine/oemcrypto/ref/src/oemcrypto_session.h | 2 +- .../oemcrypto/ref/src/oemcrypto_session_key_table.cpp | 2 +- libwvdrmengine/oemcrypto/ref/src/oemcrypto_session_key_table.h | 2 +- libwvdrmengine/oemcrypto/ref/src/oemcrypto_usage_table_ref.cpp | 2 +- libwvdrmengine/oemcrypto/ref/src/oemcrypto_usage_table_ref.h | 2 +- libwvdrmengine/oemcrypto/ref/src/wvcrc.cpp | 2 +- libwvdrmengine/oemcrypto/ref/src/wvcrc32.h | 2 +- libwvdrmengine/oemcrypto/renewal/derive_key.cpp | 2 +- .../oemcrypto/test/fuzz_tests/oemcrypto_decrypt_cenc_fuzz.cc | 2 +- .../oemcrypto/test/fuzz_tests/oemcrypto_fuzz_helper.cc | 2 +- .../oemcrypto/test/fuzz_tests/oemcrypto_fuzz_helper.h | 2 +- .../oemcrypto/test/fuzz_tests/oemcrypto_fuzz_structs.h | 2 +- .../oemcrypto/test/fuzz_tests/oemcrypto_license_request_fuzz.cc | 2 +- .../fuzz_tests/oemcrypto_load_entitled_content_keys_fuzz.cc | 2 +- .../oemcrypto/test/fuzz_tests/oemcrypto_load_license_fuzz.cc | 2 +- .../test/fuzz_tests/oemcrypto_load_provisioning_fuzz.cc | 2 +- .../oemcrypto/test/fuzz_tests/oemcrypto_load_renewal_fuzz.cc | 2 +- .../test/fuzz_tests/oemcrypto_provisioning_request_fuzz.cc | 2 +- .../oemcrypto/test/fuzz_tests/oemcrypto_renewal_request_fuzz.cc | 2 +- libwvdrmengine/oemcrypto/test/oec_decrypt_fallback_chain.cpp | 2 +- libwvdrmengine/oemcrypto/test/oec_decrypt_fallback_chain.h | 2 +- libwvdrmengine/oemcrypto/test/oec_device_features.cpp | 2 +- libwvdrmengine/oemcrypto/test/oec_key_deriver.cpp | 2 +- libwvdrmengine/oemcrypto/test/oec_key_deriver.h | 2 +- libwvdrmengine/oemcrypto/test/oec_session_util.cpp | 2 +- libwvdrmengine/oemcrypto/test/oec_session_util.h | 2 +- libwvdrmengine/oemcrypto/test/oec_test_data.h | 2 +- .../oemcrypto/test/oemcrypto_corpus_generator_helper.cpp | 2 +- .../oemcrypto/test/oemcrypto_corpus_generator_helper.h | 2 +- libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp | 2 +- libwvdrmengine/oemcrypto/test/oemcrypto_test_android.cpp | 2 +- libwvdrmengine/oemcrypto/test/wvcrc.cpp | 2 +- libwvdrmengine/oemcrypto/test/wvcrc32.h | 2 +- 103 files changed, 103 insertions(+), 103 deletions(-) diff --git a/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h b/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h index 04ef8e1b..4b8dc03b 100644 --- a/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h +++ b/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. /** diff --git a/libwvdrmengine/oemcrypto/include/level3.h b/libwvdrmengine/oemcrypto/include/level3.h index 8ae6646b..c4e7c435 100644 --- a/libwvdrmengine/oemcrypto/include/level3.h +++ b/libwvdrmengine/oemcrypto/include/level3.h @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. /********************************************************************* diff --git a/libwvdrmengine/oemcrypto/include/level3_file_system.h b/libwvdrmengine/oemcrypto/include/level3_file_system.h index eceec5a3..232fbf8e 100644 --- a/libwvdrmengine/oemcrypto/include/level3_file_system.h +++ b/libwvdrmengine/oemcrypto/include/level3_file_system.h @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. /********************************************************************* diff --git a/libwvdrmengine/oemcrypto/include/oemcrypto_types.h b/libwvdrmengine/oemcrypto/include/oemcrypto_types.h index bf2158f6..4a5728c2 100644 --- a/libwvdrmengine/oemcrypto/include/oemcrypto_types.h +++ b/libwvdrmengine/oemcrypto/include/oemcrypto_types.h @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #ifndef WV_OEMCRYPTO_TYPES_H_ diff --git a/libwvdrmengine/oemcrypto/include/pst_report.h b/libwvdrmengine/oemcrypto/include/pst_report.h index 3d2c6ced..251ac525 100644 --- a/libwvdrmengine/oemcrypto/include/pst_report.h +++ b/libwvdrmengine/oemcrypto/include/pst_report.h @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. /********************************************************************* diff --git a/libwvdrmengine/oemcrypto/odk/Android.bp b/libwvdrmengine/oemcrypto/odk/Android.bp index ef284bdf..45ec6608 100644 --- a/libwvdrmengine/oemcrypto/odk/Android.bp +++ b/libwvdrmengine/oemcrypto/odk/Android.bp @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // ---------------------------------------------------------------- diff --git a/libwvdrmengine/oemcrypto/odk/include/OEMCryptoCENCCommon.h b/libwvdrmengine/oemcrypto/odk/include/OEMCryptoCENCCommon.h index 69ba2ad3..369a364c 100644 --- a/libwvdrmengine/oemcrypto/odk/include/OEMCryptoCENCCommon.h +++ b/libwvdrmengine/oemcrypto/odk/include/OEMCryptoCENCCommon.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. /********************************************************************* diff --git a/libwvdrmengine/oemcrypto/odk/include/core_message_deserialize.h b/libwvdrmengine/oemcrypto/odk/include/core_message_deserialize.h index 93cf8002..76dccc5c 100644 --- a/libwvdrmengine/oemcrypto/odk/include/core_message_deserialize.h +++ b/libwvdrmengine/oemcrypto/odk/include/core_message_deserialize.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. /********************************************************************* diff --git a/libwvdrmengine/oemcrypto/odk/include/core_message_serialize.h b/libwvdrmengine/oemcrypto/odk/include/core_message_serialize.h index 619a0857..781259aa 100644 --- a/libwvdrmengine/oemcrypto/odk/include/core_message_serialize.h +++ b/libwvdrmengine/oemcrypto/odk/include/core_message_serialize.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. /********************************************************************* diff --git a/libwvdrmengine/oemcrypto/odk/include/core_message_serialize_proto.h b/libwvdrmengine/oemcrypto/odk/include/core_message_serialize_proto.h index b9dd34e0..ce5df09a 100644 --- a/libwvdrmengine/oemcrypto/odk/include/core_message_serialize_proto.h +++ b/libwvdrmengine/oemcrypto/odk/include/core_message_serialize_proto.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. /********************************************************************* diff --git a/libwvdrmengine/oemcrypto/odk/include/core_message_types.h b/libwvdrmengine/oemcrypto/odk/include/core_message_types.h index 0f45f006..3d02aa91 100644 --- a/libwvdrmengine/oemcrypto/odk/include/core_message_types.h +++ b/libwvdrmengine/oemcrypto/odk/include/core_message_types.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // clang-format off diff --git a/libwvdrmengine/oemcrypto/odk/include/odk.h b/libwvdrmengine/oemcrypto/odk/include/odk.h index 588f185a..4f0c9f69 100644 --- a/libwvdrmengine/oemcrypto/odk/include/odk.h +++ b/libwvdrmengine/oemcrypto/odk/include/odk.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. /** diff --git a/libwvdrmengine/oemcrypto/odk/include/odk_attributes.h b/libwvdrmengine/oemcrypto/odk/include/odk_attributes.h index 623a0571..72321b14 100644 --- a/libwvdrmengine/oemcrypto/odk/include/odk_attributes.h +++ b/libwvdrmengine/oemcrypto/odk/include/odk_attributes.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #ifndef WIDEVINE_ODK_INCLUDE_ODK_ATTRIBUTES_H_ diff --git a/libwvdrmengine/oemcrypto/odk/include/odk_message.h b/libwvdrmengine/oemcrypto/odk/include/odk_message.h index 4e97804c..07abebb6 100644 --- a/libwvdrmengine/oemcrypto/odk/include/odk_message.h +++ b/libwvdrmengine/oemcrypto/odk/include/odk_message.h @@ -1,6 +1,6 @@ /* * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary - * source code may only be used and distributed under the Widevine Master + * source code may only be used and distributed under the Widevine * License Agreement. */ diff --git a/libwvdrmengine/oemcrypto/odk/include/odk_structs.h b/libwvdrmengine/oemcrypto/odk/include/odk_structs.h index 5ed6f1ab..5794dd5c 100644 --- a/libwvdrmengine/oemcrypto/odk/include/odk_structs.h +++ b/libwvdrmengine/oemcrypto/odk/include/odk_structs.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #ifndef WIDEVINE_ODK_INCLUDE_ODK_STRUCTS_H_ diff --git a/libwvdrmengine/oemcrypto/odk/include/odk_target.h b/libwvdrmengine/oemcrypto/odk/include/odk_target.h index cb2774fb..d1c0652d 100644 --- a/libwvdrmengine/oemcrypto/odk/include/odk_target.h +++ b/libwvdrmengine/oemcrypto/odk/include/odk_target.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file is distributed -// under the Widevine Master License Agreement. +// under the Widevine License Agreement. // Partners are expected to edit this file to support target specific code // and limits. diff --git a/libwvdrmengine/oemcrypto/odk/src/core_message_deserialize.cpp b/libwvdrmengine/oemcrypto/odk/src/core_message_deserialize.cpp index f659a6db..e5c1bd38 100644 --- a/libwvdrmengine/oemcrypto/odk/src/core_message_deserialize.cpp +++ b/libwvdrmengine/oemcrypto/odk/src/core_message_deserialize.cpp @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "core_message_deserialize.h" diff --git a/libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp b/libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp index e4c6fe07..177e39ca 100644 --- a/libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp +++ b/libwvdrmengine/oemcrypto/odk/src/core_message_serialize.cpp @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "core_message_serialize.h" diff --git a/libwvdrmengine/oemcrypto/odk/src/core_message_serialize_proto.cpp b/libwvdrmengine/oemcrypto/odk/src/core_message_serialize_proto.cpp index 4b8da06e..224f8173 100644 --- a/libwvdrmengine/oemcrypto/odk/src/core_message_serialize_proto.cpp +++ b/libwvdrmengine/oemcrypto/odk/src/core_message_serialize_proto.cpp @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "core_message_serialize_proto.h" diff --git a/libwvdrmengine/oemcrypto/odk/src/odk.c b/libwvdrmengine/oemcrypto/odk/src/odk.c index f0ec34ec..c128890d 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk.c +++ b/libwvdrmengine/oemcrypto/odk/src/odk.c @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "odk.h" diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_assert.h b/libwvdrmengine/oemcrypto/odk/src/odk_assert.h index 149021fd..0517818b 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk_assert.h +++ b/libwvdrmengine/oemcrypto/odk/src/odk_assert.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #ifndef WIDEVINE_ODK_SRC_ODK_ASSERT_H_ diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_endian.h b/libwvdrmengine/oemcrypto/odk/src/odk_endian.h index f65234ec..1e9f50d2 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk_endian.h +++ b/libwvdrmengine/oemcrypto/odk/src/odk_endian.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #ifndef WIDEVINE_ODK_SRC_ODK_ENDIAN_H_ diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_message.c b/libwvdrmengine/oemcrypto/odk/src/odk_message.c index 890c8d17..ea0f9e4b 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk_message.c +++ b/libwvdrmengine/oemcrypto/odk/src/odk_message.c @@ -1,6 +1,6 @@ /* * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary - * source code may only be used and distributed under the Widevine Master + * source code may only be used and distributed under the Widevine * License Agreement. */ diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_message_priv.h b/libwvdrmengine/oemcrypto/odk/src/odk_message_priv.h index c13cca47..4a911649 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk_message_priv.h +++ b/libwvdrmengine/oemcrypto/odk/src/odk_message_priv.h @@ -1,6 +1,6 @@ /* * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary - * source code may only be used and distributed under the Widevine Master + * source code may only be used and distributed under the Widevine * License Agreement. */ diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_overflow.c b/libwvdrmengine/oemcrypto/odk/src/odk_overflow.c index ce62a4f7..0ebc0846 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk_overflow.c +++ b/libwvdrmengine/oemcrypto/odk/src/odk_overflow.c @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_overflow.h b/libwvdrmengine/oemcrypto/odk/src/odk_overflow.h index a7a670bc..e7257051 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk_overflow.h +++ b/libwvdrmengine/oemcrypto/odk/src/odk_overflow.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #ifndef WIDEVINE_ODK_SRC_ODK_OVERFLOW_H_ diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_serialize.c b/libwvdrmengine/oemcrypto/odk/src/odk_serialize.c index d881e3df..35a5539e 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk_serialize.c +++ b/libwvdrmengine/oemcrypto/odk/src/odk_serialize.c @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. /* diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_serialize.h b/libwvdrmengine/oemcrypto/odk/src/odk_serialize.h index 33944b5d..ca5b5401 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk_serialize.h +++ b/libwvdrmengine/oemcrypto/odk/src/odk_serialize.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. /* diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_structs_priv.h b/libwvdrmengine/oemcrypto/odk/src/odk_structs_priv.h index 7b1f6de7..6b138f4d 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk_structs_priv.h +++ b/libwvdrmengine/oemcrypto/odk/src/odk_structs_priv.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #ifndef WIDEVINE_ODK_SRC_ODK_STRUCTS_PRIV_H_ diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_timer.c b/libwvdrmengine/oemcrypto/odk/src/odk_timer.c index 67c34700..c817bbbf 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk_timer.c +++ b/libwvdrmengine/oemcrypto/odk/src/odk_timer.c @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_util.c b/libwvdrmengine/oemcrypto/odk/src/odk_util.c index 682bf8eb..76ee242a 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk_util.c +++ b/libwvdrmengine/oemcrypto/odk/src/odk_util.c @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "odk_util.h" diff --git a/libwvdrmengine/oemcrypto/odk/src/odk_util.h b/libwvdrmengine/oemcrypto/odk/src/odk_util.h index 138791fc..def0865e 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk_util.h +++ b/libwvdrmengine/oemcrypto/odk/src/odk_util.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #ifndef WIDEVINE_ODK_SRC_ODK_UTIL_H_ diff --git a/libwvdrmengine/oemcrypto/odk/src/serialization_base.c b/libwvdrmengine/oemcrypto/odk/src/serialization_base.c index b9d55452..3a0364c0 100644 --- a/libwvdrmengine/oemcrypto/odk/src/serialization_base.c +++ b/libwvdrmengine/oemcrypto/odk/src/serialization_base.c @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "serialization_base.h" diff --git a/libwvdrmengine/oemcrypto/odk/src/serialization_base.h b/libwvdrmengine/oemcrypto/odk/src/serialization_base.h index 36276449..0a8b2e28 100644 --- a/libwvdrmengine/oemcrypto/odk/src/serialization_base.h +++ b/libwvdrmengine/oemcrypto/odk/src/serialization_base.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #ifndef WIDEVINE_ODK_SRC_SERIALIZATION_BASE_H_ diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/Android.bp b/libwvdrmengine/oemcrypto/odk/test/fuzzing/Android.bp index 28465c39..3b8fe6d6 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/Android.bp +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/Android.bp @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // *** THIS PACKAGE HAS SPECIAL LICENSING CONDITIONS. PLEASE diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/corpus_generator/Android.bp b/libwvdrmengine/oemcrypto/odk/test/fuzzing/corpus_generator/Android.bp index bcbbfd3b..78519cb0 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/corpus_generator/Android.bp +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/corpus_generator/Android.bp @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // ---------------------------------------------------------------- diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/corpus_generator/odk_corpus_generator.c b/libwvdrmengine/oemcrypto/odk/test/fuzzing/corpus_generator/odk_corpus_generator.c index 9a3e9853..0a2d0747 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/corpus_generator/odk_corpus_generator.c +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/corpus_generator/odk_corpus_generator.c @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // We must define this macro to get RTLD_NEXT definition from diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/corpus_generator/odk_corpus_generator_helper.c b/libwvdrmengine/oemcrypto/odk/test/fuzzing/corpus_generator/odk_corpus_generator_helper.c index 3a720d20..534b2457 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/corpus_generator/odk_corpus_generator_helper.c +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/corpus_generator/odk_corpus_generator_helper.c @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "fuzzing/corpus_generator/odk_corpus_generator_helper.h" diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/corpus_generator/odk_corpus_generator_helper.h b/libwvdrmengine/oemcrypto/odk/test/fuzzing/corpus_generator/odk_corpus_generator_helper.h index c2f164ae..d6c1e99a 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/corpus_generator/odk_corpus_generator_helper.h +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/corpus_generator/odk_corpus_generator_helper.h @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #ifndef WIDEVINE_ODK_TEST_FUZZING_CORPUS_GENERATOR_ODK_CORPUS_GENERATOR_HELPER_H_ #define WIDEVINE_ODK_TEST_FUZZING_CORPUS_GENERATOR_ODK_CORPUS_GENERATOR_HELPER_H_ diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp index 5ea04c15..ef90a00b 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.cpp @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "fuzzing/odk_fuzz_helper.h" diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.h b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.h index fe90657b..34fe8fcd 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.h +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_helper.h @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #ifndef WIDEVINE_ODK_TEST_FUZZING_ODK_FUZZ_HELPER_H_ #define WIDEVINE_ODK_TEST_FUZZING_ODK_FUZZ_HELPER_H_ diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_structs.h b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_structs.h index 37d1b230..b35c56a0 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_structs.h +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_fuzz_structs.h @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #ifndef WIDEVINE_ODK_TEST_FUZZING_ODK_FUZZ_STRUCTS_H_ #define WIDEVINE_ODK_TEST_FUZZING_ODK_FUZZ_STRUCTS_H_ diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_license_request_fuzz.cpp b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_license_request_fuzz.cpp index 463c604a..d089c4ad 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_license_request_fuzz.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_license_request_fuzz.cpp @@ -1,5 +1,5 @@ /* Copyright 2020 Google LLC. All rights reserved. This file and proprietary - * source code may only be used and distributed under the Widevine Master + * source code may only be used and distributed under the Widevine * License Agreement. */ diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_license_response_fuzz.cpp b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_license_response_fuzz.cpp index 12398fd1..f3655248 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_license_response_fuzz.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_license_response_fuzz.cpp @@ -1,5 +1,5 @@ /* Copyright 2020 Google LLC. All rights reserved. This file and proprietary - * source code may only be used and distributed under the Widevine Master + * source code may only be used and distributed under the Widevine * License Agreement. */ diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_license_response_fuzz_with_mutator.cpp b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_license_response_fuzz_with_mutator.cpp index 42472fbd..880e1d88 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_license_response_fuzz_with_mutator.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_license_response_fuzz_with_mutator.cpp @@ -1,5 +1,5 @@ /* Copyright 2020 Google LLC. All rights reserved. This file and proprietary - * source code may only be used and distributed under the Widevine Master + * source code may only be used and distributed under the Widevine * License Agreement. */ diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_provisioning_request_fuzz.cpp b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_provisioning_request_fuzz.cpp index 984534e6..deac024a 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_provisioning_request_fuzz.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_provisioning_request_fuzz.cpp @@ -1,5 +1,5 @@ /* Copyright 2020 Google LLC. All rights reserved. This file and proprietary - * source code may only be used and distributed under the Widevine Master + * source code may only be used and distributed under the Widevine * License Agreement. */ diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_provisioning_response_fuzz.cpp b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_provisioning_response_fuzz.cpp index 90dc017c..3a0457d4 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_provisioning_response_fuzz.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_provisioning_response_fuzz.cpp @@ -1,5 +1,5 @@ /* Copyright 2020 Google LLC. All rights reserved. This file and proprietary - * source code may only be used and distributed under the Widevine Master + * source code may only be used and distributed under the Widevine * License Agreement. */ diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_provisioning_response_fuzz_with_mutator.cpp b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_provisioning_response_fuzz_with_mutator.cpp index 17787a41..52492534 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_provisioning_response_fuzz_with_mutator.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_provisioning_response_fuzz_with_mutator.cpp @@ -1,5 +1,5 @@ /* Copyright 2020 Google LLC. All rights reserved. This file and proprietary - * source code may only be used and distributed under the Widevine Master + * source code may only be used and distributed under the Widevine * License Agreement. */ diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_renewal_request_fuzz.cpp b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_renewal_request_fuzz.cpp index 602b37af..d715eeb6 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_renewal_request_fuzz.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_renewal_request_fuzz.cpp @@ -1,5 +1,5 @@ /* Copyright 2020 Google LLC. All rights reserved. This file and proprietary - * source code may only be used and distributed under the Widevine Master + * source code may only be used and distributed under the Widevine * License Agreement. */ diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_renewal_response_fuzz.cpp b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_renewal_response_fuzz.cpp index 8d669089..c0903758 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_renewal_response_fuzz.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_renewal_response_fuzz.cpp @@ -1,5 +1,5 @@ /* Copyright 2020 Google LLC. All rights reserved. This file and proprietary - * source code may only be used and distributed under the Widevine Master + * source code may only be used and distributed under the Widevine * License Agreement. */ diff --git a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_renewal_response_fuzz_with_mutator.cpp b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_renewal_response_fuzz_with_mutator.cpp index 0073c4ee..d6a9dd4a 100644 --- a/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_renewal_response_fuzz_with_mutator.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/fuzzing/odk_renewal_response_fuzz_with_mutator.cpp @@ -1,5 +1,5 @@ /* Copyright 2020 Google LLC. All rights reserved. This file and proprietary - * source code may only be used and distributed under the Widevine Master + * source code may only be used and distributed under the Widevine * License Agreement. */ diff --git a/libwvdrmengine/oemcrypto/odk/test/odk_core_message_test.cpp b/libwvdrmengine/oemcrypto/odk/test/odk_core_message_test.cpp index c8247592..24fbe6da 100644 --- a/libwvdrmengine/oemcrypto/odk/test/odk_core_message_test.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/odk_core_message_test.cpp @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "OEMCryptoCENCCommon.h" diff --git a/libwvdrmengine/oemcrypto/odk/test/odk_test.cpp b/libwvdrmengine/oemcrypto/odk/test/odk_test.cpp index 6428fd1e..cf41b77a 100644 --- a/libwvdrmengine/oemcrypto/odk/test/odk_test.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/odk_test.cpp @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "odk.h" diff --git a/libwvdrmengine/oemcrypto/odk/test/odk_test_helper.cpp b/libwvdrmengine/oemcrypto/odk/test/odk_test_helper.cpp index 9650c337..9eeb49c4 100644 --- a/libwvdrmengine/oemcrypto/odk/test/odk_test_helper.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/odk_test_helper.cpp @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "odk_test_helper.h" diff --git a/libwvdrmengine/oemcrypto/odk/test/odk_test_helper.h b/libwvdrmengine/oemcrypto/odk/test/odk_test_helper.h index 1d90dc07..c32318e4 100644 --- a/libwvdrmengine/oemcrypto/odk/test/odk_test_helper.h +++ b/libwvdrmengine/oemcrypto/odk/test/odk_test_helper.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All rights reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #ifndef WIDEVINE_ODK_TEST_ODK_TEST_HELPER_H_ diff --git a/libwvdrmengine/oemcrypto/odk/test/odk_timer_test.cpp b/libwvdrmengine/oemcrypto/odk/test/odk_timer_test.cpp index 15a6f78e..9bb0b547 100644 --- a/libwvdrmengine/oemcrypto/odk/test/odk_timer_test.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/odk_timer_test.cpp @@ -1,5 +1,5 @@ /* Copyright 2019 Google LLC. All rights reserved. This file and proprietary - * source code may only be used and distributed under the Widevine Master + * source code may only be used and distributed under the Widevine * License Agreement. */ diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_auth_ref.cpp b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_auth_ref.cpp index b62cd39f..5b92ee0a 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_auth_ref.cpp +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_auth_ref.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_auth_ref.h b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_auth_ref.h index c1ae01db..c2a88dcd 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_auth_ref.h +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_auth_ref.h @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_device_properties.cpp b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_device_properties.cpp index a3bdf4e3..8c4bd22a 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_device_properties.cpp +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_device_properties.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_device_properties_L1.cpp b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_device_properties_L1.cpp index 5e92a88a..9e9b7c51 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_device_properties_L1.cpp +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_device_properties_L1.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_device_properties_cert.cpp b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_device_properties_cert.cpp index 7fd4e596..146a8290 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_device_properties_cert.cpp +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_device_properties_cert.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_device_properties_prov30.cpp b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_device_properties_prov30.cpp index 96134b99..d2115ca1 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_device_properties_prov30.cpp +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_device_properties_prov30.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_ref.cpp b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_ref.cpp index 9a6f1d47..d0f5f581 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_ref.cpp +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_ref.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_ref.h b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_ref.h index 0fddd30f..f7f92c14 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_ref.h +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_ref.h @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_key_ref.cpp b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_key_ref.cpp index 9d28eec5..19a80f28 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_key_ref.cpp +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_key_ref.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_key_ref.h b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_key_ref.h index c6c74416..a94f24fb 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_key_ref.h +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_key_ref.h @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_keybox_ref.cpp b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_keybox_ref.cpp index cfb070ad..987a5103 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_keybox_ref.cpp +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_keybox_ref.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_keybox_ref.h b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_keybox_ref.h index 47b8c070..c9831c60 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_keybox_ref.h +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_keybox_ref.h @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_ref.cpp b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_ref.cpp index 0f65f489..6aa2f19e 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_ref.cpp +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_ref.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session.cpp b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session.cpp index 96f0b8ea..657867aa 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session.cpp +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session.h b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session.h index e01054eb..8811b9eb 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session.h +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session.h @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session_key_table.cpp b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session_key_table.cpp index 00c16ed8..0247bec4 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session_key_table.cpp +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session_key_table.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session_key_table.h b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session_key_table.h index ad74b873..d534510d 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session_key_table.h +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session_key_table.h @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_usage_table_ref.cpp b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_usage_table_ref.cpp index d61ec052..b3750c1f 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_usage_table_ref.cpp +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_usage_table_ref.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_usage_table_ref.h b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_usage_table_ref.h index d112695b..7fdd1785 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_usage_table_ref.h +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_usage_table_ref.h @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Reference implementation of OEMCrypto APIs diff --git a/libwvdrmengine/oemcrypto/ref/src/wvcrc.cpp b/libwvdrmengine/oemcrypto/ref/src/wvcrc.cpp index 192e783f..000ac260 100644 --- a/libwvdrmengine/oemcrypto/ref/src/wvcrc.cpp +++ b/libwvdrmengine/oemcrypto/ref/src/wvcrc.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Compute CRC32/MPEG2 Checksum. Needed for verification of WV Keybox. diff --git a/libwvdrmengine/oemcrypto/ref/src/wvcrc32.h b/libwvdrmengine/oemcrypto/ref/src/wvcrc32.h index 99677ec4..b1e0ee6b 100644 --- a/libwvdrmengine/oemcrypto/ref/src/wvcrc32.h +++ b/libwvdrmengine/oemcrypto/ref/src/wvcrc32.h @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Compute CRC32 Checksum. Needed for verification of WV Keybox. diff --git a/libwvdrmengine/oemcrypto/renewal/derive_key.cpp b/libwvdrmengine/oemcrypto/renewal/derive_key.cpp index 9cde5a92..9a377dc3 100644 --- a/libwvdrmengine/oemcrypto/renewal/derive_key.cpp +++ b/libwvdrmengine/oemcrypto/renewal/derive_key.cpp @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // #include diff --git a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_decrypt_cenc_fuzz.cc b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_decrypt_cenc_fuzz.cc index b69bdf70..3f30ccb3 100644 --- a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_decrypt_cenc_fuzz.cc +++ b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_decrypt_cenc_fuzz.cc @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "FuzzedDataProvider.h" diff --git a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_fuzz_helper.cc b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_fuzz_helper.cc index 3596d619..8939f118 100644 --- a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_fuzz_helper.cc +++ b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_fuzz_helper.cc @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "oemcrypto_fuzz_helper.h" diff --git a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_fuzz_helper.h b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_fuzz_helper.h index c524196b..14c18f5c 100644 --- a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_fuzz_helper.h +++ b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_fuzz_helper.h @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #ifndef OEMCRYPTO_FUZZ_HELPER_H_ #define OEMCRYPTO_FUZZ_HELPER_H_ diff --git a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_fuzz_structs.h b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_fuzz_structs.h index 52fb400d..67dd588c 100644 --- a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_fuzz_structs.h +++ b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_fuzz_structs.h @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #ifndef OEMCRYPTO_FUZZ_STRUCTS_H_ #define OEMCRYPTO_FUZZ_STRUCTS_H_ diff --git a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_license_request_fuzz.cc b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_license_request_fuzz.cc index d100ddea..52d34938 100644 --- a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_license_request_fuzz.cc +++ b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_license_request_fuzz.cc @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "oemcrypto_fuzz_helper.h" diff --git a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_load_entitled_content_keys_fuzz.cc b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_load_entitled_content_keys_fuzz.cc index 892d6e93..fbb33e67 100644 --- a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_load_entitled_content_keys_fuzz.cc +++ b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_load_entitled_content_keys_fuzz.cc @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "FuzzedDataProvider.h" diff --git a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_load_license_fuzz.cc b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_load_license_fuzz.cc index e125ae04..73ba25cd 100644 --- a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_load_license_fuzz.cc +++ b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_load_license_fuzz.cc @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "oemcrypto_fuzz_helper.h" diff --git a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_load_provisioning_fuzz.cc b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_load_provisioning_fuzz.cc index 739f79f4..757ab241 100644 --- a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_load_provisioning_fuzz.cc +++ b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_load_provisioning_fuzz.cc @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "oemcrypto_fuzz_helper.h" diff --git a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_load_renewal_fuzz.cc b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_load_renewal_fuzz.cc index f521b477..1b6ecfc6 100644 --- a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_load_renewal_fuzz.cc +++ b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_load_renewal_fuzz.cc @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "oemcrypto_fuzz_helper.h" diff --git a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_provisioning_request_fuzz.cc b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_provisioning_request_fuzz.cc index 1cda2abd..b66aab6d 100644 --- a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_provisioning_request_fuzz.cc +++ b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_provisioning_request_fuzz.cc @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "oemcrypto_fuzz_helper.h" diff --git a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_renewal_request_fuzz.cc b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_renewal_request_fuzz.cc index 67ecb0a9..8b7fd79d 100644 --- a/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_renewal_request_fuzz.cc +++ b/libwvdrmengine/oemcrypto/test/fuzz_tests/oemcrypto_renewal_request_fuzz.cc @@ -1,5 +1,5 @@ // Copyright 2020 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "oemcrypto_fuzz_helper.h" diff --git a/libwvdrmengine/oemcrypto/test/oec_decrypt_fallback_chain.cpp b/libwvdrmengine/oemcrypto/test/oec_decrypt_fallback_chain.cpp index 7c589c51..b3d36dc5 100644 --- a/libwvdrmengine/oemcrypto/test/oec_decrypt_fallback_chain.cpp +++ b/libwvdrmengine/oemcrypto/test/oec_decrypt_fallback_chain.cpp @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #include "oec_decrypt_fallback_chain.h" diff --git a/libwvdrmengine/oemcrypto/test/oec_decrypt_fallback_chain.h b/libwvdrmengine/oemcrypto/test/oec_decrypt_fallback_chain.h index 2379dafc..06ca62f8 100644 --- a/libwvdrmengine/oemcrypto/test/oec_decrypt_fallback_chain.h +++ b/libwvdrmengine/oemcrypto/test/oec_decrypt_fallback_chain.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. #ifndef CDM_OEC_DECRYPT_FALLBACK_CHAIN_H_ diff --git a/libwvdrmengine/oemcrypto/test/oec_device_features.cpp b/libwvdrmengine/oemcrypto/test/oec_device_features.cpp index 9649ce66..1fab63f5 100644 --- a/libwvdrmengine/oemcrypto/test/oec_device_features.cpp +++ b/libwvdrmengine/oemcrypto/test/oec_device_features.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // OEMCrypto device features for unit tests diff --git a/libwvdrmengine/oemcrypto/test/oec_key_deriver.cpp b/libwvdrmengine/oemcrypto/test/oec_key_deriver.cpp index d2bff254..f6abdb6a 100644 --- a/libwvdrmengine/oemcrypto/test/oec_key_deriver.cpp +++ b/libwvdrmengine/oemcrypto/test/oec_key_deriver.cpp @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // OEMCrypto unit tests diff --git a/libwvdrmengine/oemcrypto/test/oec_key_deriver.h b/libwvdrmengine/oemcrypto/test/oec_key_deriver.h index 7e05038a..65b4ad71 100644 --- a/libwvdrmengine/oemcrypto/test/oec_key_deriver.h +++ b/libwvdrmengine/oemcrypto/test/oec_key_deriver.h @@ -1,5 +1,5 @@ // Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // #ifndef CDM_OEC_KEY_DERIVER_H_ diff --git a/libwvdrmengine/oemcrypto/test/oec_session_util.cpp b/libwvdrmengine/oemcrypto/test/oec_session_util.cpp index b2bf3de7..243c7984 100644 --- a/libwvdrmengine/oemcrypto/test/oec_session_util.cpp +++ b/libwvdrmengine/oemcrypto/test/oec_session_util.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // OEMCrypto unit tests diff --git a/libwvdrmengine/oemcrypto/test/oec_session_util.h b/libwvdrmengine/oemcrypto/test/oec_session_util.h index 3ede5dc0..272e85e1 100644 --- a/libwvdrmengine/oemcrypto/test/oec_session_util.h +++ b/libwvdrmengine/oemcrypto/test/oec_session_util.h @@ -2,7 +2,7 @@ #define CDM_OEC_SESSION_UTIL_H_ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // OEMCrypto unit tests diff --git a/libwvdrmengine/oemcrypto/test/oec_test_data.h b/libwvdrmengine/oemcrypto/test/oec_test_data.h index 144c4d37..fbd202da 100644 --- a/libwvdrmengine/oemcrypto/test/oec_test_data.h +++ b/libwvdrmengine/oemcrypto/test/oec_test_data.h @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Test data for OEMCrypto unit tests. diff --git a/libwvdrmengine/oemcrypto/test/oemcrypto_corpus_generator_helper.cpp b/libwvdrmengine/oemcrypto/test/oemcrypto_corpus_generator_helper.cpp index 0478de69..31b9bb52 100644 --- a/libwvdrmengine/oemcrypto/test/oemcrypto_corpus_generator_helper.cpp +++ b/libwvdrmengine/oemcrypto/test/oemcrypto_corpus_generator_helper.cpp @@ -1,5 +1,5 @@ /* Copyright 2020 Google LLC. All rights reserved. This file and proprietary */ -/* source code may only be used and distributed under the Widevine Master */ +/* source code may only be used and distributed under the Widevine */ /* License Agreement. */ #include "oemcrypto_corpus_generator_helper.h" diff --git a/libwvdrmengine/oemcrypto/test/oemcrypto_corpus_generator_helper.h b/libwvdrmengine/oemcrypto/test/oemcrypto_corpus_generator_helper.h index 9086a0c1..7b7b399b 100644 --- a/libwvdrmengine/oemcrypto/test/oemcrypto_corpus_generator_helper.h +++ b/libwvdrmengine/oemcrypto/test/oemcrypto_corpus_generator_helper.h @@ -1,5 +1,5 @@ /* Copyright 2020 Google LLC. All rights reserved. This file and proprietary */ -/* source code may only be used and distributed under the Widevine Master */ +/* source code may only be used and distributed under the Widevine */ /* License Agreement. */ #ifndef CDM_OEMCRYPTO_CORPUS_GENERATOR_HELPER_H_ #define CDM_OEMCRYPTO_CORPUS_GENERATOR_HELPER_H_ diff --git a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp index b03c2161..07d2a1e7 100644 --- a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp +++ b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // diff --git a/libwvdrmengine/oemcrypto/test/oemcrypto_test_android.cpp b/libwvdrmengine/oemcrypto/test/oemcrypto_test_android.cpp index 1d05553a..647017bc 100644 --- a/libwvdrmengine/oemcrypto/test/oemcrypto_test_android.cpp +++ b/libwvdrmengine/oemcrypto/test/oemcrypto_test_android.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // OEMCrypto unit tests - extra tests required for Android platform. diff --git a/libwvdrmengine/oemcrypto/test/wvcrc.cpp b/libwvdrmengine/oemcrypto/test/wvcrc.cpp index 3336c77c..1f0fbcf1 100644 --- a/libwvdrmengine/oemcrypto/test/wvcrc.cpp +++ b/libwvdrmengine/oemcrypto/test/wvcrc.cpp @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Compute CRC32 Checksum. Needed for verification of WV Keybox. diff --git a/libwvdrmengine/oemcrypto/test/wvcrc32.h b/libwvdrmengine/oemcrypto/test/wvcrc32.h index 24362119..9cf72af1 100644 --- a/libwvdrmengine/oemcrypto/test/wvcrc32.h +++ b/libwvdrmengine/oemcrypto/test/wvcrc32.h @@ -1,5 +1,5 @@ // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master +// source code may only be used and distributed under the Widevine // License Agreement. // // Compute CRC32 Checksum. Needed for verification of WV Keybox. From 79b2a933e41efcc7ded92faf7ec3d0a9008d565b Mon Sep 17 00:00:00 2001 From: Fred Gylys-Colwell Date: Wed, 14 Apr 2021 09:53:02 -0700 Subject: [PATCH 9/9] Fix another typo Merge from Widevine repo of http://go/wvgerrit/122123 Bug: 171912044 Change-Id: Ic7459870ac532f04f254913e685a306dbdfe1f7a --- libwvdrmengine/oemcrypto/odk/include/OEMCryptoCENCCommon.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libwvdrmengine/oemcrypto/odk/include/OEMCryptoCENCCommon.h b/libwvdrmengine/oemcrypto/odk/include/OEMCryptoCENCCommon.h index 369a364c..d279c5c4 100644 --- a/libwvdrmengine/oemcrypto/odk/include/OEMCryptoCENCCommon.h +++ b/libwvdrmengine/oemcrypto/odk/include/OEMCryptoCENCCommon.h @@ -117,7 +117,7 @@ typedef enum OEMCrypto_Usage_Entry_Status { typedef enum OEMCrypto_LicenseType { OEMCrypto_ContentLicense = 0, OEMCrypto_EntitlementLicense = 1, - OEMCrypto_LicenstType_MaxValue = OEMCrypto_EntitlementLicense, + OEMCrypto_LicenseType_MaxValue = OEMCrypto_EntitlementLicense, } OEMCrypto_LicenseType; /* Private key type used in the provisioning response. */