Platform

Choose application
HAL
DRM provides functions for drm devices.<\/p>\n<h2 id=\"content-required-header\"><a href=https://samsungtizenos.com/"#content-required-header\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Required Header<\/h2>\n<p>#include &lt;hal-drm.h&gt;<\/p>\n<h2 id=\"content-overview\"><a href=https://samsungtizenos.com/"#content-overview\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Overview<\/h2>\n<p>The drm devices have various specifications, so it's hard to control them using single code. The drm HAL provides common abstraction interfaces to control drm devices which are different.<\/p>\n<p>The DRM HAL allows creation of components required in secure playback including:<\/p>\n<ul>\n<li>managing drm sessions.<\/li>\n<li>device provisioning.<\/li>\n<li>decrypt DRM content.<\/li>\n<\/ul>\n<h3 id=\"content-state-diagram\"><a href=https://samsungtizenos.com/"#content-state-diagram\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>State Diagram<\/h3>\n<p><img src=https://samsungtizenos.com/"media//hal_drm_state_diagram.png/" alt=\"hal_drm_state_diagram.png\" \/><\/p>\n<h3 id=\"content-state-transitions\"><a href=https://samsungtizenos.com/"#content-state-transitions\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>State Transitions<\/h3>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><strong>FUNCTION<\/strong><\/th>\n<th><strong>PRE-STATE<\/strong><\/th>\n<th><strong>POST-STATE<\/strong><\/th>\n<th><strong>SYNC TYPE<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>hal_drm_init()<\/td>\n<td>NONE<\/td>\n<td>INITIALIZED<\/td>\n<td>SYNC<\/td>\n<\/tr>\n<tr>\n<td>hal_drm_deinit()<\/td>\n<td>INITIALIZED<\/td>\n<td>NONE<\/td>\n<td>SYNC<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<p>For more information on the DRM features and the macros, see HAL DRM programming guides and tutorials.<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Typedefs<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga716779e9be706c30c6d193aad1055063\">hal_drm_error<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gab95ca811be0d04dbbdc0980515dc00dc\">hal_drm_error_e<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Enumeration for the DRM error.<\/td>\n<\/tr>\n<tr>\n<td>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gab1306033826f9454df29dba54d716476\">hal_drm_state<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga6e98acb01928d76d160123d32550a586\">hal_drm_state_e<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Enumeration for the DRM state.<\/td>\n<\/tr>\n<tr>\n<td>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gab845af85b49c4b4e469521db36ed6bf7\">hal_drm_command<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga7f0c102b942ceb618a0f9a5a780bcf18\">hal_drm_command_e<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Enumeration for the DRM command.<\/td>\n<\/tr>\n<tr>\n<td>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__batch__command__control\">hal_drm_batch_command_control<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gad09b445913a6a26ac0dc6c46c72ebf6e\">hal_drm_batch_command_control_s<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>The structure type of batch command.<\/td>\n<\/tr>\n<tr>\n<td>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga6b8d106fb57f43714b47952a298f4c5d\">hal_drm_message_type<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gaaa96ec795e38d05cce6ba29a0629735a\">hal_drm_message_type_e<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Enumeration for the DRM message type.<\/td>\n<\/tr>\n<tr>\n<td>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__message\">hal_drm_message<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga609da48a67d4332e2766d491ad075d34\">hal_drm_message_s<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>The structure type of the DRM message.<\/td>\n<\/tr>\n<tr>\n<td>typedef int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gac6464002d7a16a529de0c6b3706e4b95\">hal_drm_message_cb<\/a> )(<a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga609da48a67d4332e2766d491ad075d34\">hal_drm_message_s<\/a> *message, void *user_data)<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Callback function for notification from DRM HAL.<\/td>\n<\/tr>\n<tr>\n<td>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga04b391172b03e56a7872be41cc9a776d\">hal_drm_media_type<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga14a885880b64f31a63066a019bbc8f5c\">hal_drm_media_type_e<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Enumeration for encrypted content media type.<\/td>\n<\/tr>\n<tr>\n<td>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga07a898bc3f9da13d8cb5c03788b9fb91\">hal_drm_cipher_phase<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gaf090fa5fcc442a408df06b9aaa15c4b7\">hal_drm_cipher_phase_e<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Enumeration for cipher phase.<\/td>\n<\/tr>\n<tr>\n<td>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#struct__hal__backend__drm__funcs\">_hal_backend_drm_funcs<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gab46b81e87b53e9a9d39cee73a832679d\">hal_backend_drm_funcs<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>The structure type of the DRM HAL functions.<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h2 id=\"content-data-structure-documentation\"><a href=https://samsungtizenos.com/"#content-data-structure-documentation\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Data Structure Documentation<\/h2>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct hal_drm_custom_command_s<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The structure type of the DRM HAL custom command.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>const char *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ab70f4742069e60ee4ea35cb979952ac8\">name<\/a><\/td>\n<\/tr>\n<tr>\n<td>void *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#addc36ba931d4d39d3a373a91fa785b86\">value<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation\"><a href=https://samsungtizenos.com/"#content-field-documentation\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>const char* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ab70f4742069e60ee4ea35cb979952ac8\">hal_drm_custom_command_s::name<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The name of custom command<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>void* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#addc36ba931d4d39d3a373a91fa785b86\">hal_drm_custom_command_s::value<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The value of custom command<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct hal_drm_batch_command_control<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The structure type of batch command.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>uint64_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a8ad696d0ca4b6dfe5db6e080a6c202ae\">command_set_flag<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__custom__command__s\">hal_drm_custom_command_s<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a559c29607b18b59fcbeb35aa740ead4e\">custom<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation-1\"><a href=https://samsungtizenos.com/"#content-field-documentation-1\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint64_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a8ad696d0ca4b6dfe5db6e080a6c202ae\">hal_drm_batch_command_control::command_set_flag<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>flag for updating commands<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__custom__command__s\">hal_drm_custom_command_s<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a559c29607b18b59fcbeb35aa740ead4e\">hal_drm_batch_command_control::custom<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The value for custom command<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct hal_drm_message<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The structure type of the DRM message.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gaaa96ec795e38d05cce6ba29a0629735a\">hal_drm_message_type_e<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#af01acfdceeffcdd790991e6209b50a3f\">type<\/a><\/td>\n<\/tr>\n<tr>\n<td>const char *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a1a5ae83ea61ed897689ab592ae6853d6\">license_request<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gab95ca811be0d04dbbdc0980515dc00dc\">hal_drm_error_e<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a4fa7fe2d772157d50d0761ff7d5940ea\">error_code<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation-2\"><a href=https://samsungtizenos.com/"#content-field-documentation-2\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gab95ca811be0d04dbbdc0980515dc00dc\">hal_drm_error_e<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a4fa7fe2d772157d50d0761ff7d5940ea\">hal_drm_message::error_code<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The error code<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>const char* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a1a5ae83ea61ed897689ab592ae6853d6\">hal_drm_message::license_request<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The license request message<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gaaa96ec795e38d05cce6ba29a0629735a\">hal_drm_message_type_e<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#af01acfdceeffcdd790991e6209b50a3f\">hal_drm_message::type<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The type of message<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct hal_drm_data_s<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Serialized byte data with specific size.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>uint32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#aa6598bf7645e31a3113559f2c0c327df\">size<\/a><\/td>\n<\/tr>\n<tr>\n<td>unsigned char *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#aed001c5486f3784ba215e8e68b7d95a8\">data<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation-3\"><a href=https://samsungtizenos.com/"#content-field-documentation-3\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>unsigned char* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#aed001c5486f3784ba215e8e68b7d95a8\">hal_drm_data_s::data<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The pointer of byte data array<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#aa6598bf7645e31a3113559f2c0c327df\">hal_drm_data_s::size<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The size of data<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct hal_drm_key_info_s<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The key id that indicates decryption key and status of decryption key.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#aa89532c5d1e306873d70c76c481bf34f\">key_id<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga73d2fa6762a1145af322b2075ab7340b\">hal_drm_key_status_e<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ad5c715c8f2fc928b35c78ba965516986\">status<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation-4\"><a href=https://samsungtizenos.com/"#content-field-documentation-4\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#aa89532c5d1e306873d70c76c481bf34f\">hal_drm_key_info_s::key_id<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Key ID<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga73d2fa6762a1145af322b2075ab7340b\">hal_drm_key_status_e<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ad5c715c8f2fc928b35c78ba965516986\">hal_drm_key_info_s::status<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Status of decryption key indicated by key_id<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct hal_drm_key_info_list_s<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The set of key status information.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>uint32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a7588b03e8abec8cdd7511a2ced31b696\">num_of_key_infos<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__key__info__s\">hal_drm_key_info_s<\/a> *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ae7b78a4df90886d8361b73e4edddca20\">key_infos<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation-5\"><a href=https://samsungtizenos.com/"#content-field-documentation-5\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__key__info__s\">hal_drm_key_info_s<\/a>* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ae7b78a4df90886d8361b73e4edddca20\">hal_drm_key_info_list_s::key_infos<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Key ID and key status<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a7588b03e8abec8cdd7511a2ced31b696\">hal_drm_key_info_list_s::num_of_key_infos<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The number of key information<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct hal_drm_crypto_info_s<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The structure type of crypto information for decryption.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga6f6f78ca0f345deb47e895eb3476e630\">hal_drm_cipher_algorithm_e<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a19c0562b496c1ba778a6bc778885cf42\">algorithm<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga14a885880b64f31a63066a019bbc8f5c\">hal_drm_media_type_e<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#acd43d3c8d2b7df012656f3f5c598da9f\">type<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gaf090fa5fcc442a408df06b9aaa15c4b7\">hal_drm_cipher_phase_e<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#aca619f8c3d839935c7487cdf30ed29e3\">phase<\/a><\/td>\n<\/tr>\n<tr>\n<td>unsigned char *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a42d5880152a7e70955d65fb0e18826af\">key_id<\/a><\/td>\n<\/tr>\n<tr>\n<td>uint32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#abb82f2074931336ac36d9978a5db214a\">key_id_size<\/a><\/td>\n<\/tr>\n<tr>\n<td>unsigned char *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a8184c115a23f069db355cc6cf653c939\">iv<\/a><\/td>\n<\/tr>\n<tr>\n<td>uint32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#aa10490cd9c4274139f331883ff5dfce4\">iv_size<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation-6\"><a href=https://samsungtizenos.com/"#content-field-documentation-6\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga6f6f78ca0f345deb47e895eb3476e630\">hal_drm_cipher_algorithm_e<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a19c0562b496c1ba778a6bc778885cf42\">hal_drm_crypto_info_s::algorithm<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Cipher algorithm<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>unsigned char* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a8184c115a23f069db355cc6cf653c939\">hal_drm_crypto_info_s::iv<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The IV(Initialization Vector) for block cipher modes of operation<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#aa10490cd9c4274139f331883ff5dfce4\">hal_drm_crypto_info_s::iv_size<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The size of IV<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>unsigned char* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a42d5880152a7e70955d65fb0e18826af\">hal_drm_crypto_info_s::key_id<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The Key ID<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#abb82f2074931336ac36d9978a5db214a\">hal_drm_crypto_info_s::key_id_size<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The size of Key ID<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gaf090fa5fcc442a408df06b9aaa15c4b7\">hal_drm_cipher_phase_e<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#aca619f8c3d839935c7487cdf30ed29e3\">hal_drm_crypto_info_s::phase<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Cipher phase<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga14a885880b64f31a63066a019bbc8f5c\">hal_drm_media_type_e<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#acd43d3c8d2b7df012656f3f5c598da9f\">hal_drm_crypto_info_s::type<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Media type<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct hal_drm_subsample_s<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The structure type of subsample.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>uint32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#acec29b50364ed9354079223eca0089bf\">bytes_of_clear_data<\/a><\/td>\n<\/tr>\n<tr>\n<td>uint32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a3d1eda5a563b582f209104b488538d5d\">bytes_of_protected_data<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation-7\"><a href=https://samsungtizenos.com/"#content-field-documentation-7\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#acec29b50364ed9354079223eca0089bf\">hal_drm_subsample_s::bytes_of_clear_data<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The size of clear data(BytesOfClearData in CENC specification)<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a3d1eda5a563b582f209104b488538d5d\">hal_drm_subsample_s::bytes_of_protected_data<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The size of protected data(BytesOfProtectedData in CENC specification)<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct hal_drm_protection_pattern_s<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The structure type of protection pattern information for pattern encryption.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>bool<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#acae21517f69b83feaaae4494a627f21e\">use_pattern<\/a><\/td>\n<\/tr>\n<tr>\n<td>uint32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a97eb4715042b85c7b0f12faf54f8f4bd\">crypt_byte_block<\/a><\/td>\n<\/tr>\n<tr>\n<td>uint32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#af896757a70857d722d57ab414a058c1f\">skip_byte_block<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation-8\"><a href=https://samsungtizenos.com/"#content-field-documentation-8\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a97eb4715042b85c7b0f12faf54f8f4bd\">hal_drm_protection_pattern_s::crypt_byte_block<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>If use_pattern is true, count of the encrypted blocks in the protection pattern<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#af896757a70857d722d57ab414a058c1f\">hal_drm_protection_pattern_s::skip_byte_block<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>If use_pattern is true, count of the unencrypted blocks in the protection pattern<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>bool <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#acae21517f69b83feaaae4494a627f21e\">hal_drm_protection_pattern_s::use_pattern<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>true if cbcs pattern scheme is used, otherwise false<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct hal_drm_buffer_s<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The structure type of DRM buffer.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>int<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a05f58c9448eb84734ddbc7e47cc8cb83\">index<\/a><\/td>\n<\/tr>\n<tr>\n<td>bool<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a8e4d047af31f39403bfecc056737cf01\">is_secure<\/a><\/td>\n<\/tr>\n<tr>\n<td>uint32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ada570719a219cdcb4055568d60acd379\">size<\/a><\/td>\n<\/tr>\n<tr>\n<td>unsigned char *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a5cc3210b6e8bb6f7ebd1ce602cc3ddcd\">data<\/a><\/td>\n<\/tr>\n<tr>\n<td>int<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#aa84ec9c239d61bc9d1bc9d1c4ce56294\">fd<\/a><\/td>\n<\/tr>\n<tr>\n<td>int<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a09924bb12f02d2e8eb0d61ebb4803c86\">secure_handle<\/a><\/td>\n<\/tr>\n<tr>\n<td>int *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a5de9a8541ee3f851de1da901a3fd1859\">split_offsets<\/a><\/td>\n<\/tr>\n<tr>\n<td>uint32_t<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#afca0f82298f8cbcf915e6e74a0ceeb56\">num_of_subsamples<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__subsample__s\">hal_drm_subsample_s<\/a> *<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a920e8a3d5928707816a6bc0da7bacc7c\">subsamples<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__protection__pattern__s\">hal_drm_protection_pattern_s<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a26205a69aa6adc983e5548d9f7cbf309\">pattern_encryption<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation-9\"><a href=https://samsungtizenos.com/"#content-field-documentation-9\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>unsigned char* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a5cc3210b6e8bb6f7ebd1ce602cc3ddcd\">hal_drm_buffer_s::data<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The pointer of data buffer<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#aa84ec9c239d61bc9d1bc9d1c4ce56294\">hal_drm_buffer_s::fd<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The fd(file descriptor) of data buffer. When fd is not used, it will be set -1<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a05f58c9448eb84734ddbc7e47cc8cb83\">hal_drm_buffer_s::index<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The index of buffer<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>bool <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a8e4d047af31f39403bfecc056737cf01\">hal_drm_buffer_s::is_secure<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The flag which indicates the real data is managed in secure world or not<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#afca0f82298f8cbcf915e6e74a0ceeb56\">hal_drm_buffer_s::num_of_subsamples<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The number of subsamples<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__protection__pattern__s\">hal_drm_protection_pattern_s<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a26205a69aa6adc983e5548d9f7cbf309\">hal_drm_buffer_s::pattern_encryption<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The information of pattern encryption<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a09924bb12f02d2e8eb0d61ebb4803c86\">hal_drm_buffer_s::secure_handle<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The secure handle of data buffer. When handle is not used, it will be set 0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>uint32_t <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ada570719a219cdcb4055568d60acd379\">hal_drm_buffer_s::size<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The size of data buffer<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a5de9a8541ee3f851de1da901a3fd1859\">hal_drm_buffer_s::split_offsets<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Sample offset. Nullable. If used, -1 terminated int array. The max number of split_offsets are 15<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__subsample__s\">hal_drm_subsample_s<\/a>* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a920e8a3d5928707816a6bc0da7bacc7c\">hal_drm_buffer_s::subsamples<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The subsamples in CENC(Common Encryption)<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct _hal_backend_drm_funcs<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The structure type of the DRM HAL functions.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ac3dccbd6ee95d281fd722f9958ed9072\">init<\/a> )(void **drm_handle)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a4329dcab7214a046e69f75f4e6704a5b\">deinit<\/a> )(void *drm_handle)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a87a775b1daeddaeec9f7b67db47b6342\">set_message_callback<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gac6464002d7a16a529de0c6b3706e4b95\">hal_drm_message_cb<\/a> callback, void *user_data)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a56f3fa911ea2b342891cd9ee2815bde2\">get_cdm_version<\/a> )(void *drm_handle, char **version)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#af65810742f77d77db8c9eebce6b0405a\">session_create<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga23a2c184bfc03d1f29f49a01af8293da\">hal_drm_session_type_e<\/a> type, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> **session_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ad5626a5d87482bec51a867f57aab9f67\">session_load<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *session_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#aa21d4d44ede27dec5e84164a94b4f90f\">session_generate_request<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *session_id, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gaaffb8103322c5da83836553f132243c7\">hal_drm_init_data_type_e<\/a> type, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *init_data, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> **request)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ae9330eca0e1e348f1aeb4c99e013cbd0\">session_update<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *session_id, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *license)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a605ee0c36e252ef7c9ef62b2aa757488\">session_get_expiration<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *session_id, int64_t *expiration)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a88fcfe4b5773c54fae5245ed37cb1d9d\">session_get_key_infos<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *session_id, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__key__info__list__s\">hal_drm_key_info_list_s<\/a> **key_info_list)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a7f3b54d6f151473fc3af0f062ea865ac\">session_close<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *session_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a79d86e510ce25cee68ddfd99b2204df7\">session_remove<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *session_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a484d79103dc12c9860937fe91b16075e\">get_provisioning_request<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> **request)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#aa95104ef6b09003b502d7a04d6f3b5d7\">set_provisioning_response<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *response)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a22aab6b73230893b0c2fb0bedae90b45\">get_service_certificate_request<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> **request)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ab12ea337a2d931bb5cf43cef932d0423\">load_service_certificate_response<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *response, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> **certificate)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#adf03e9726bb71e91d4407277f34147d6\">set_service_certificate<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *certificate)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ad73b25ad93235535791bdf03dc8513cc\">allocate_output_buffer<\/a> )(void *drm_handle, uint32_t size, bool is_secure, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__buffer__s\">hal_drm_buffer_s<\/a> **buffer)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a1fe5cf10ac6d9c7cd7010af0364a833d\">release_output_buffer<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__buffer__s\">hal_drm_buffer_s<\/a> *buffer)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a7f7995143d5e3fe9f9d679d7bdec519d\">release_data<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *data)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a37e537aeadc3f42eb4b7697768bea3a0\">release_key_info_list<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__key__info__list__s\">hal_drm_key_info_list_s<\/a> *key_info_list)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ab4ed607e7440ff6c2ef2a91a495130cf\">decrypt<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__buffer__s\">hal_drm_buffer_s<\/a> *input, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__crypto__info__s\">hal_drm_crypto_info_s<\/a> *decrypt_info, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__buffer__s\">hal_drm_buffer_s<\/a> *output)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a73dd6778a282b5b79d2476ae39c2910e\">set_command<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga7f0c102b942ceb618a0f9a5a780bcf18\">hal_drm_command_e<\/a> command, void *value)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a15e1ff89b99f0c1553c453f8582f560c\">get_command<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga7f0c102b942ceb618a0f9a5a780bcf18\">hal_drm_command_e<\/a> command, void **value)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#af596498d39489cfb8a7cf530481085ca\">set_batch_command<\/a> )(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gad09b445913a6a26ac0dc6c46c72ebf6e\">hal_drm_batch_command_control_s<\/a> *batch_command, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga7f0c102b942ceb618a0f9a5a780bcf18\">hal_drm_command_e<\/a> *error_command)<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation-10\"><a href=https://samsungtizenos.com/"#content-field-documentation-10\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ad73b25ad93235535791bdf03dc8513cc\">_hal_backend_drm_funcs::allocate_output_buffer<\/a>)(void *drm_handle, uint32_t size, bool is_secure, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__buffer__s\">hal_drm_buffer_s<\/a> **buffer)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Allocates drm output buffer<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ab4ed607e7440ff6c2ef2a91a495130cf\">_hal_backend_drm_funcs::decrypt<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__buffer__s\">hal_drm_buffer_s<\/a> *input, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__crypto__info__s\">hal_drm_crypto_info_s<\/a> *decrypt_info, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__buffer__s\">hal_drm_buffer_s<\/a> *output)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Decrypts encrypted data<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a4329dcab7214a046e69f75f4e6704a5b\">_hal_backend_drm_funcs::deinit<\/a>)(void *drm_handle)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Deinitializes DRM HAL backend handle<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a56f3fa911ea2b342891cd9ee2815bde2\">_hal_backend_drm_funcs::get_cdm_version<\/a>)(void *drm_handle, char **version)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Gets the cdm version<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a15e1ff89b99f0c1553c453f8582f560c\">_hal_backend_drm_funcs::get_command<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga7f0c102b942ceb618a0f9a5a780bcf18\">hal_drm_command_e<\/a> command, void **value)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Gets the current value of command<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a484d79103dc12c9860937fe91b16075e\">_hal_backend_drm_funcs::get_provisioning_request<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> **request)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Gets the provisioning request message<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a22aab6b73230893b0c2fb0bedae90b45\">_hal_backend_drm_funcs::get_service_certificate_request<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> **request)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Gets the service certificate request<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ac3dccbd6ee95d281fd722f9958ed9072\">_hal_backend_drm_funcs::init<\/a>)(void **drm_handle)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Initializes DRM HAL backend handle<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ab12ea337a2d931bb5cf43cef932d0423\">_hal_backend_drm_funcs::load_service_certificate_response<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *response, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> **certificate)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Loads the service certificate response<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a7f7995143d5e3fe9f9d679d7bdec519d\">_hal_backend_drm_funcs::release_data<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *data)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Releases <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\" title=\"Serialized byte data with specific size.\">hal_drm_data_s<\/a> type data<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a37e537aeadc3f42eb4b7697768bea3a0\">_hal_backend_drm_funcs::release_key_info_list<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__key__info__list__s\">hal_drm_key_info_list_s<\/a> *key_info_list)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Releases <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__key__info__list__s\" title=\"The set of key status information.\">hal_drm_key_info_list_s<\/a> type data<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a1fe5cf10ac6d9c7cd7010af0364a833d\">_hal_backend_drm_funcs::release_output_buffer<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__buffer__s\">hal_drm_buffer_s<\/a> *buffer)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Releases drm output buffer<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a7f3b54d6f151473fc3af0f062ea865ac\">_hal_backend_drm_funcs::session_close<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *session_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Closes session<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#af65810742f77d77db8c9eebce6b0405a\">_hal_backend_drm_funcs::session_create<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga23a2c184bfc03d1f29f49a01af8293da\">hal_drm_session_type_e<\/a> type, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> **session_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Creates session<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#aa21d4d44ede27dec5e84164a94b4f90f\">_hal_backend_drm_funcs::session_generate_request<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *session_id, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gaaffb8103322c5da83836553f132243c7\">hal_drm_init_data_type_e<\/a> type, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *init_data, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> **request)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Generates request<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a605ee0c36e252ef7c9ef62b2aa757488\">_hal_backend_drm_funcs::session_get_expiration<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *session_id, int64_t *expiration)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Gets the key expiration<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a88fcfe4b5773c54fae5245ed37cb1d9d\">_hal_backend_drm_funcs::session_get_key_infos<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *session_id, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__key__info__list__s\">hal_drm_key_info_list_s<\/a> **key_info_list)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Gets the key information including key id and key status<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ad5626a5d87482bec51a867f57aab9f67\">_hal_backend_drm_funcs::session_load<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *session_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Loads session<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a79d86e510ce25cee68ddfd99b2204df7\">_hal_backend_drm_funcs::session_remove<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *session_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Removes session<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ae9330eca0e1e348f1aeb4c99e013cbd0\">_hal_backend_drm_funcs::session_update<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *session_id, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *license)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Updates session<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#af596498d39489cfb8a7cf530481085ca\">_hal_backend_drm_funcs::set_batch_command<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gad09b445913a6a26ac0dc6c46c72ebf6e\">hal_drm_batch_command_control_s<\/a> *batch_command, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga7f0c102b942ceb618a0f9a5a780bcf18\">hal_drm_command_e<\/a> *error_command)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Sets a set of commands<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a73dd6778a282b5b79d2476ae39c2910e\">_hal_backend_drm_funcs::set_command<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga7f0c102b942ceb618a0f9a5a780bcf18\">hal_drm_command_e<\/a> command, void *value)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Sets the various command and value<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#a87a775b1daeddaeec9f7b67db47b6342\">_hal_backend_drm_funcs::set_message_callback<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gac6464002d7a16a529de0c6b3706e4b95\">hal_drm_message_cb<\/a> callback, void *user_data)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Sets a callback of message<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#aa95104ef6b09003b502d7a04d6f3b5d7\">_hal_backend_drm_funcs::set_provisioning_response<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *response)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Sets the provisioning response message<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#adf03e9726bb71e91d4407277f34147d6\">_hal_backend_drm_funcs::set_service_certificate<\/a>)(void *drm_handle, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__data__s\">hal_drm_data_s<\/a> *certificate)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Sets the service certificate<\/p>\n<hr \/>\n<h2 id=\"content-typedef-documentation\"><a href=https://samsungtizenos.com/"#content-typedef-documentation\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Typedef Documentation<\/h2>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#struct__hal__backend__drm__funcs\">_hal_backend_drm_funcs<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gab46b81e87b53e9a9d39cee73a832679d\">hal_backend_drm_funcs<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The structure type of the DRM HAL functions.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__batch__command__control\">hal_drm_batch_command_control<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gad09b445913a6a26ac0dc6c46c72ebf6e\">hal_drm_batch_command_control_s<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The structure type of batch command.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga07a898bc3f9da13d8cb5c03788b9fb91\">hal_drm_cipher_phase<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gaf090fa5fcc442a408df06b9aaa15c4b7\">hal_drm_cipher_phase_e<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for cipher phase.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gab845af85b49c4b4e469521db36ed6bf7\">hal_drm_command<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga7f0c102b942ceb618a0f9a5a780bcf18\">hal_drm_command_e<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for the DRM command.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga716779e9be706c30c6d193aad1055063\">hal_drm_error<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gab95ca811be0d04dbbdc0980515dc00dc\">hal_drm_error_e<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for the DRM error.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga04b391172b03e56a7872be41cc9a776d\">hal_drm_media_type<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga14a885880b64f31a63066a019bbc8f5c\">hal_drm_media_type_e<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for encrypted content media type.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gac6464002d7a16a529de0c6b3706e4b95\">hal_drm_message_cb<\/a>)(<a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga609da48a67d4332e2766d491ad075d34\">hal_drm_message_s<\/a> *message, void *user_data)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Callback function for notification from DRM HAL.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<p><strong>Parameters:<\/strong>\n: | [in] | message | The message from DRM HAL |\n| --- | --- | --- |\n| [in] | user_data | The user data for callback |<\/p>\n<p><strong>See also:<\/strong>\n: hal_hal_drm_add_message_callback()\n: hal_hal_drm_remove_message_callback()<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#structhal__drm__message\">hal_drm_message<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga609da48a67d4332e2766d491ad075d34\">hal_drm_message_s<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The structure type of the DRM message.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga6b8d106fb57f43714b47952a298f4c5d\">hal_drm_message_type<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gaaa96ec795e38d05cce6ba29a0629735a\">hal_drm_message_type_e<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for the DRM message type.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gab1306033826f9454df29dba54d716476\">hal_drm_state<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga6e98acb01928d76d160123d32550a586\">hal_drm_state_e<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for the DRM state.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<hr \/>\n<h2 id=\"content-enumeration-type-documentation\"><a href=https://samsungtizenos.com/"#content-enumeration-type-documentation\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Enumeration Type Documentation<\/h2>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga6f6f78ca0f345deb47e895eb3476e630\">hal_drm_cipher_algorithm_e<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for cipher algorithm.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<p><strong>Enumerator:<\/strong>\n: | <em>HAL_DRM_CIPHER_RC4<\/em> | Rivest Cipher 4 stream cipher algorithm |\n| --- | --- |\n| <em>HAL_DRM_CIPHER_AES128_CTR<\/em> | AES(Advanced Encryption Standard) 128bit key with CTR(CounTeR) operation mode |\n| <em>HAL_DRM_CIPHER_AES128_CBC<\/em> | AES(Advanced Encryption Standard) 128bit key with CBC(Cipher Block Chaining) operation mode |\n| <em>HAL_DRM_CIPHER_AES128_CBC_PKCS5<\/em> | AES(Advanced Encryption Standard) 128bit key with CBC(Cipher Block Chaining) operation mode, PKCS5 padding |<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga07a898bc3f9da13d8cb5c03788b9fb91\">hal_drm_cipher_phase<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for cipher phase.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<p><strong>Enumerator:<\/strong>\n: | <em>HAL_DRM_CIPHER_PHASE_NONE<\/em> | None |\n| --- | --- |\n| <em>HAL_DRM_CIPHER_PHASE_INIT<\/em> | Initialize phase |\n| <em>HAL_DRM_CIPHER_PHASE_UPDATE<\/em> | Update phase |\n| <em>HAL_DRM_CIPHER_PHASE_FINAL<\/em> | Final phase |<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gab845af85b49c4b4e469521db36ed6bf7\">hal_drm_command<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for the DRM command.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<p><strong>Enumerator:<\/strong>\n: | <em>HAL_DRM_COMMAND_BASE<\/em> | Base of command |\n| --- | --- |\n| <em>HAL_DRM_COMMAND_CUSTOM<\/em> | Custom |<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga716779e9be706c30c6d193aad1055063\">hal_drm_error<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for the DRM error.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<p><strong>Enumerator:<\/strong>\n: | <em>HAL_DRM_ERROR_NONE<\/em> | Error none |\n| --- | --- |\n| <em>HAL_DRM_ERROR_NOT_SUPPORTED<\/em> | Not supported |\n| <em>HAL_DRM_ERROR_INVALID_PARAMETER<\/em> | Invalid parameter |\n| <em>HAL_DRM_ERROR_INVALID_STATE<\/em> | Invalid state |\n| <em>HAL_DRM_ERROR_OUT_OF_MEMORY<\/em> | Out of memory |\n| <em>HAL_DRM_ERROR_NEED_PROVISIONING<\/em> | Need to device provisioning |\n| <em>HAL_DRM_ERROR_NEED_KEY<\/em> | Need key |\n| <em>HAL_DRM_ERROR_TYPE<\/em> | Type error |\n| <em>HAL_DRM_ERROR_INTERNAL<\/em> | Internal |\n| <em>HAL_DRM_ERROR_NOT_IMPLEMENTED<\/em> | Not implemented |\n| <em>HAL_DRM_ERROR_UNKNOWN<\/em> | Unknown |<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gaaffb8103322c5da83836553f132243c7\">hal_drm_init_data_type_e<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The type of init data which is used for generating license request.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<p><strong>Enumerator:<\/strong>\n: | <em>HAL_DRM_INIT_DATA_TYPE_CENC<\/em> | Common encryption |\n| --- | --- |\n| <em>HAL_DRM_INIT_DATA_TYPE_KEY_IDS<\/em> | Key IDs |\n| <em>HAL_DRM_INIT_DATA_TYPE_WEBM<\/em> | WebM |<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga73d2fa6762a1145af322b2075ab7340b\">hal_drm_key_status_e<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The status of decryption key.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<p><strong>Enumerator:<\/strong>\n: | <em>HAL_DRM_KEY_STATUS_USABLE<\/em> | Key is usable |\n| --- | --- |\n| <em>HAL_DRM_KEY_STATUS_EXPIRED<\/em> | Key is expired |\n| <em>HAL_DRM_KEY_STATUS_OUTPUT_RESTRICTED<\/em> | Key is usable but output restricted |\n| <em>HAL_DRM_KEY_STATUS_PENDING<\/em> | Key status not clear |\n| <em>HAL_DRM_KEY_STATUS_ERROR<\/em> | Key status internal error |\n| <em>HAL_DRM_KEY_STATUS_RELEASED<\/em> | Key is released |<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga04b391172b03e56a7872be41cc9a776d\">hal_drm_media_type<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for encrypted content media type.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<p><strong>Enumerator:<\/strong>\n: | <em>HAL_DRM_MEDIA_TYPE_NONE<\/em> | None |\n| --- | --- |\n| <em>HAL_DRM_MEDIA_TYPE_FMP4<\/em> | FMP4(Fragmented MP4) |\n| <em>HAL_DRM_MEDIA_TYPE_TS<\/em> | TS(Transport Stream) |\n| <em>HAL_DRM_MEDIA_TYPE_ASF<\/em> | ASF(Advanced Systems Format) |\n| <em>HAL_DRM_MEDIA_TYPE_FMP4_AUDIO<\/em> | FMP4 Audio |\n| <em>HAL_DRM_MEDIA_TYPE_FMP4_VIDEO<\/em> | FMP4 Video |\n| <em>HAL_DRM_MEDIA_TYPE_CLEAN_AUDIO<\/em> | Clean Audio Data |\n| <em>HAL_DRM_MEDIA_TYPE_PES<\/em> | Packetized ES(Elementary Stream) Payload |<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga6b8d106fb57f43714b47952a298f4c5d\">hal_drm_message_type<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for the DRM message type.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<p><strong>Enumerator:<\/strong>\n: | <em>HAL_DRM_MESSAGE_TYPE_LICENSE_REQUEST_GENERATED<\/em> | DRM license request message is generated |\n| --- | --- |\n| <em>HAL_DRM_MESSAGE_TYPE_KEY_STATUS_CHANGED<\/em> | DRM key status is changed |\n| <em>HAL_DRM_MESSAGE_TYPE_ERROR<\/em> | The error |<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#ga23a2c184bfc03d1f29f49a01af8293da\">hal_drm_session_type_e<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>The type of DRM session.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<p><strong>Enumerator:<\/strong>\n: | <em>HAL_DRM_SESSION_TYPE_TEMPORARY<\/em> | Temporary |\n| --- | --- |\n| <em>HAL_DRM_SESSION_TYPE_PERSISTENT_LICENSE<\/em> | Persistent license |\n| <em>HAL_DRM_SESSION_TYPE_PERSISTENT_USAGE_RECORD<\/em> | Persistent usage record |<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__DRM__MODULE.md#gab1306033826f9454df29dba54d716476\">hal_drm_state<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for the DRM state.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_DRM 1.0<\/p>\n<p><strong>Enumerator:<\/strong>\n: | <em>HAL_DRM_STATE_NONE<\/em> | None state |\n| --- | --- |\n| <em>HAL_DRM_STATE_INITIALIZED<\/em> | Initialized state for DRM device |\n| <em>HAL_DRM_STATE_SESSION_CREATED<\/em> | Created session state for DRM device |<\/p>\n<hr \/>\n<p>Except as noted, this content - excluding the Code Examples - is licensed under <a href=https://samsungtizenos.com/"http:////creativecommons.org//licenses//by//3.0//legalcode/">Creative Commons Attribution 3.0<\/a>\nand all of the Code Examples contained herein are licensed under <a href=https://samsungtizenos.com/"https:////www.tizen.org//bsd-3-clause-license/">BSD-3-Clause.
Content License<\/a>.<\/p>\n","table_of_content":"<ul class=\"table-of-contents\">\n<li><a href=https://samsungtizenos.com/"#content-required-header\">Required Header<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-overview\">Overview<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-state-diagram\">State Diagram<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-state-transitions\">State Transitions<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-data-structure-documentation\">Data Structure Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-1\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-2\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-3\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-4\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-5\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-6\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-7\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-8\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-9\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation-10\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-typedef-documentation\">Typedef Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-enumeration-type-documentation\">Enumeration Type Documentation<\/a><\/li>\n<\/ul>\n","title":"Tizen HAL API: DRM","raw":null},{"class":"App\\Services\\Documentation\\Data\\RenderedMarkdown","s":"wrbl"}]},"memo":{"id":"XH5U6M6HFF0I2qEcmccL","name":"documentation::article","path":"docs\/platform\/hal\/api\/1.0.0\/group__HALAPI__HAL__DRM__MODULE","method":"GET","release":"a-a-a","children":[],"scripts":[],"assets":[],"lazyLoaded":false,"lazyIsolated":true,"errors":[],"locale":"en","islands":[]},"checksum":"3b5ca1a07d5643b9f8ec007a75fb71fe856cb6fae4215f61567a4bbc1e0b33bf"}" wire:effects="[]" wire:id="XH5U6M6HFF0I2qEcmccL" wire:name="documentation::article" x-init="$wire.__lazyLoad('eyJkYXRhIjp7ImZvck1vdW50IjpbeyJtYXJrZG93biI6W3siYm9keSI6IjxoMSBpZD1cImNvbnRlbnQtdGl6ZW4taGFsLWFwaS1kcm1cIj48YSBocmVmPVwiI2NvbnRlbnQtdGl6ZW4taGFsLWFwaS1kcm1cIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPlRpemVuIEhBTCBBUEk6IERSTTxcL2gxPjxkaXYgZGF0YS1rbm93bGVkZ2UtYmFzZS1tZXRhZGF0YT48XC9kaXY+XG48aHIgXC8+XG48cD5UaGUgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWRcIj5EUk08XC9hPiBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIGRybSBkZXZpY2VzLjxcL3A+XG48aDIgaWQ9XCJjb250ZW50LXJlcXVpcmVkLWhlYWRlclwiPjxhIGhyZWY9XCIjY29udGVudC1yZXF1aXJlZC1oZWFkZXJcIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPlJlcXVpcmVkIEhlYWRlcjxcL2gyPlxuPHA+I2luY2x1ZGUgJmx0O2hhbC1kcm0uaCZndDs8XC9wPlxuPGgyIGlkPVwiY29udGVudC1vdmVydmlld1wiPjxhIGhyZWY9XCIjY29udGVudC1vdmVydmlld1wiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+T3ZlcnZpZXc8XC9oMj5cbjxwPlRoZSBkcm0gZGV2aWNlcyBoYXZlIHZhcmlvdXMgc3BlY2lmaWNhdGlvbnMsIHNvIGl0J3MgaGFyZCB0byBjb250cm9sIHRoZW0gdXNpbmcgc2luZ2xlIGNvZGUuIFRoZSBkcm0gSEFMIHByb3ZpZGVzIGNvbW1vbiBhYnN0cmFjdGlvbiBpbnRlcmZhY2VzIHRvIGNvbnRyb2wgZHJtIGRldmljZXMgd2hpY2ggYXJlIGRpZmZlcmVudC48XC9wPlxuPHA+VGhlIERSTSBIQUwgYWxsb3dzIGNyZWF0aW9uIG9mIGNvbXBvbmVudHMgcmVxdWlyZWQgaW4gc2VjdXJlIHBsYXliYWNrIGluY2x1ZGluZzo8XC9wPlxuPHVsPlxuPGxpPm1hbmFnaW5nIGRybSBzZXNzaW9ucy48XC9saT5cbjxsaT5kZXZpY2UgcHJvdmlzaW9uaW5nLjxcL2xpPlxuPGxpPmRlY3J5cHQgRFJNIGNvbnRlbnQuPFwvbGk+XG48XC91bD5cbjxoMyBpZD1cImNvbnRlbnQtc3RhdGUtZGlhZ3JhbVwiPjxhIGhyZWY9XCIjY29udGVudC1zdGF0ZS1kaWFncmFtXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5TdGF0ZSBEaWFncmFtPFwvaDM+XG48cD48aW1nIHNyYz1cIm1lZGlhXC9oYWxfZHJtX3N0YXRlX2RpYWdyYW0ucG5nXCIgYWx0PVwiaGFsX2RybV9zdGF0ZV9kaWFncmFtLnBuZ1wiIFwvPjxcL3A+XG48aDMgaWQ9XCJjb250ZW50LXN0YXRlLXRyYW5zaXRpb25zXCI+PGEgaHJlZj1cIiNjb250ZW50LXN0YXRlLXRyYW5zaXRpb25zXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5TdGF0ZSBUcmFuc2l0aW9uczxcL2gzPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PHN0cm9uZz5GVU5DVElPTjxcL3N0cm9uZz48XC90aD5cbjx0aD48c3Ryb25nPlBSRS1TVEFURTxcL3N0cm9uZz48XC90aD5cbjx0aD48c3Ryb25nPlBPU1QtU1RBVEU8XC9zdHJvbmc+PFwvdGg+XG48dGg+PHN0cm9uZz5TWU5DIFRZUEU8XC9zdHJvbmc+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPHRib2R5PlxuPHRyPlxuPHRkPmhhbF9kcm1faW5pdCgpPFwvdGQ+XG48dGQ+Tk9ORTxcL3RkPlxuPHRkPklOSVRJQUxJWkVEPFwvdGQ+XG48dGQ+U1lOQzxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aGFsX2RybV9kZWluaXQoKTxcL3RkPlxuPHRkPklOSVRJQUxJWkVEPFwvdGQ+XG48dGQ+Tk9ORTxcL3RkPlxuPHRkPlNZTkM8XC90ZD5cbjxcL3RyPlxuPFwvdGJvZHk+XG48XC90YWJsZT48XC9kaXY+XG48cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgRFJNIGZlYXR1cmVzIGFuZCB0aGUgbWFjcm9zLCBzZWUgSEFMIERSTSBwcm9ncmFtbWluZyBndWlkZXMgYW5kIHR1dG9yaWFscy48XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+VHlwZWRlZnM8XC90aD5cbjx0aD48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48dGJvZHk+XG48dHI+XG48dGQ+dHlwZWRlZiBlbnVtIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhNzE2Nzc5ZTliZTcwNmMzMGM2ZDE5M2FhZDEwNTUwNjNcIj5oYWxfZHJtX2Vycm9yPFwvYT48XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYWI5NWNhODExYmUwZDA0ZGJiZGMwOTgwNTE1ZGMwMGRjXCI+aGFsX2RybV9lcnJvcl9lPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxcL3RkPlxuPHRkPkVudW1lcmF0aW9uIGZvciB0aGUgRFJNIGVycm9yLjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dHlwZWRlZiBlbnVtIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhYjEzMDYwMzM4MjZmOTQ1NGRmMjlkYmE1NGQ3MTY0NzZcIj5oYWxfZHJtX3N0YXRlPFwvYT48XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYTZlOThhY2IwMTkyOGQ3NmQxNjAxMjNkMzI1NTBhNTg2XCI+aGFsX2RybV9zdGF0ZV9lPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxcL3RkPlxuPHRkPkVudW1lcmF0aW9uIGZvciB0aGUgRFJNIHN0YXRlLjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dHlwZWRlZiBlbnVtIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhYjg0NWFmODViNDljNGI0ZTQ2OTUyMWRiMzZlZDZiZjdcIj5oYWxfZHJtX2NvbW1hbmQ8XC9hPjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhN2YwYzEwMmI5NDJjZWI2MThhMGY5YTVhNzgwYmNmMThcIj5oYWxfZHJtX2NvbW1hbmRfZTxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48XC90ZD5cbjx0ZD5FbnVtZXJhdGlvbiBmb3IgdGhlIERSTSBjb21tYW5kLjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dHlwZWRlZiBzdHJ1Y3QgICA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fYmF0Y2hfX2NvbW1hbmRfX2NvbnRyb2xcIj5oYWxfZHJtX2JhdGNoX2NvbW1hbmRfY29udHJvbDxcL2E+PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjZ2FkMDliNDQ1OTEzYTZhMjZhYzBkYzZjNDZjNzJlYmY2ZVwiPmhhbF9kcm1fYmF0Y2hfY29tbWFuZF9jb250cm9sX3M8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PFwvdGQ+XG48dGQ+VGhlIHN0cnVjdHVyZSB0eXBlIG9mIGJhdGNoIGNvbW1hbmQuPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD50eXBlZGVmIGVudW0gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjZ2E2YjhkMTA2ZmI1N2Y0MzcxNGI0Nzk1MmEyOThmNGM1ZFwiPmhhbF9kcm1fbWVzc2FnZV90eXBlPFwvYT48XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYWFhOTZlYzc5NWUzOGQwNWNjZTZiYTI5YTA2Mjk3MzVhXCI+aGFsX2RybV9tZXNzYWdlX3R5cGVfZTxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48XC90ZD5cbjx0ZD5FbnVtZXJhdGlvbiBmb3IgdGhlIERSTSBtZXNzYWdlIHR5cGUuPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD50eXBlZGVmIHN0cnVjdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fbWVzc2FnZVwiPmhhbF9kcm1fbWVzc2FnZTxcL2E+PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjZ2E2MDlkYTQ4YTY3ZDQzMzJlMjc2NmQ0OTFhZDA3NWQzNFwiPmhhbF9kcm1fbWVzc2FnZV9zPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxcL3RkPlxuPHRkPlRoZSBzdHJ1Y3R1cmUgdHlwZSBvZiB0aGUgRFJNIG1lc3NhZ2UuPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD50eXBlZGVmIGludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjZ2FjNjQ2NDAwMmQ3YTE2YTUyOWRlMGM2YjM3MDZlNGI5NVwiPmhhbF9kcm1fbWVzc2FnZV9jYjxcL2E+ICkoPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjZ2E2MDlkYTQ4YTY3ZDQzMzJlMjc2NmQ0OTFhZDA3NWQzNFwiPmhhbF9kcm1fbWVzc2FnZV9zPFwvYT4gKm1lc3NhZ2UsIHZvaWQgKnVzZXJfZGF0YSk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxcL3RkPlxuPHRkPkNhbGxiYWNrIGZ1bmN0aW9uIGZvciBub3RpZmljYXRpb24gZnJvbSBEUk0gSEFMLjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dHlwZWRlZiBlbnVtIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhMDRiMzkxMTcyYjAzZTU2YTc4NzJiZTQxY2M5YTc3NmRcIj5oYWxfZHJtX21lZGlhX3R5cGU8XC9hPjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhMTRhODg1ODgwYjY0ZjMxYTYzMDY2YTAxOWJiYzhmNWNcIj5oYWxfZHJtX21lZGlhX3R5cGVfZTxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48XC90ZD5cbjx0ZD5FbnVtZXJhdGlvbiBmb3IgZW5jcnlwdGVkIGNvbnRlbnQgbWVkaWEgdHlwZS48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPnR5cGVkZWYgZW51bSA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYTA3YTg5OGJjM2Y5ZGExM2Q4Y2I1YzAzNzg4YjlmYjkxXCI+aGFsX2RybV9jaXBoZXJfcGhhc2U8XC9hPjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhZjA5MGZhNWZjYzQ0MmE0MDhkZjA2YjlhYWExNWM0YjdcIj5oYWxfZHJtX2NpcGhlcl9waGFzZV9lPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxcL3RkPlxuPHRkPkVudW1lcmF0aW9uIGZvciBjaXBoZXIgcGhhc2UuPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD50eXBlZGVmIHN0cnVjdCAgIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdF9faGFsX19iYWNrZW5kX19kcm1fX2Z1bmNzXCI+X2hhbF9iYWNrZW5kX2RybV9mdW5jczxcL2E+PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjZ2FiNDZiODFlODdiNTNlOWE5ZDM5Y2VlNzNhODMyNjc5ZFwiPmhhbF9iYWNrZW5kX2RybV9mdW5jczxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48XC90ZD5cbjx0ZD5UaGUgc3RydWN0dXJlIHR5cGUgb2YgdGhlIERSTSBIQUwgZnVuY3Rpb25zLjxcL3RkPlxuPFwvdHI+XG48XC90Ym9keT5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxociBcLz5cbjxoMiBpZD1cImNvbnRlbnQtZGF0YS1zdHJ1Y3R1cmUtZG9jdW1lbnRhdGlvblwiPjxhIGhyZWY9XCIjY29udGVudC1kYXRhLXN0cnVjdHVyZS1kb2N1bWVudGF0aW9uXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5EYXRhIFN0cnVjdHVyZSBEb2N1bWVudGF0aW9uPFwvaDI+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5zdHJ1Y3QgaGFsX2RybV9jdXN0b21fY29tbWFuZF9zPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VGhlIHN0cnVjdHVyZSB0eXBlIG9mIHRoZSBEUk0gSEFMIGN1c3RvbSBjb21tYW5kLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0RSTSAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+RGF0YSBGaWVsZHM8XC90aD5cbjx0aD48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48dGJvZHk+XG48dHI+XG48dGQ+Y29uc3QgY2hhciAqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWI3MGY0NzQyMDY5ZTYwZWU0ZWEzNWNiOTc5OTUyYWM4XCI+bmFtZTxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD52b2lkICo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhZGRjMzZiYTkzMWQ0ZDM5ZDNhMzczYTkxZmE3ODViODZcIj52YWx1ZTxcL2E+PFwvdGQ+XG48XC90cj5cbjxcL3Rib2R5PlxuPFwvdGFibGU+PFwvZGl2PlxuPGhyIFwvPlxuPGg0IGlkPVwiY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uXCI+PGEgaHJlZj1cIiNjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb25cIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPkZpZWxkIERvY3VtZW50YXRpb248XC9oND5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmNvbnN0IGNoYXIqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FiNzBmNDc0MjA2OWU2MGVlNGVhMzVjYjk3OTk1MmFjOFwiPmhhbF9kcm1fY3VzdG9tX2NvbW1hbmRfczo6bmFtZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VGhlIG5hbWUgb2YgY3VzdG9tIGNvbW1hbmQ8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dm9pZCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWRkYzM2YmE5MzFkNGQzOWQzYTM3M2E5MWZhNzg1Yjg2XCI+aGFsX2RybV9jdXN0b21fY29tbWFuZF9zOjp2YWx1ZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VGhlIHZhbHVlIG9mIGN1c3RvbSBjb21tYW5kPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnN0cnVjdCBoYWxfZHJtX2JhdGNoX2NvbW1hbmRfY29udHJvbDxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSBzdHJ1Y3R1cmUgdHlwZSBvZiBiYXRjaCBjb21tYW5kLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0RSTSAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+RGF0YSBGaWVsZHM8XC90aD5cbjx0aD48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48dGJvZHk+XG48dHI+XG48dGQ+dWludDY0X3Q8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhOGFkNjk2ZDBjYTRiNmRmZTVkYjZlMDgwYTZjMjAyYWVcIj5jb21tYW5kX3NldF9mbGFnPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19jdXN0b21fX2NvbW1hbmRfX3NcIj5oYWxfZHJtX2N1c3RvbV9jb21tYW5kX3M8XC9hPjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2E1NTljMjk2MDdiMThiNTlmY2JlYjM1YWE3NDBlYWQ0ZVwiPmN1c3RvbTxcL2E+PFwvdGQ+XG48XC90cj5cbjxcL3Rib2R5PlxuPFwvdGFibGU+PFwvZGl2PlxuPGhyIFwvPlxuPGg0IGlkPVwiY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTFcIj48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi0xXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5GaWVsZCBEb2N1bWVudGF0aW9uPFwvaDQ+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD51aW50NjRfdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhOGFkNjk2ZDBjYTRiNmRmZTVkYjZlMDgwYTZjMjAyYWVcIj5oYWxfZHJtX2JhdGNoX2NvbW1hbmRfY29udHJvbDo6Y29tbWFuZF9zZXRfZmxhZzxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+ZmxhZyBmb3IgdXBkYXRpbmcgY29tbWFuZHM8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2N1c3RvbV9fY29tbWFuZF9fc1wiPmhhbF9kcm1fY3VzdG9tX2NvbW1hbmRfczxcL2E+IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2E1NTljMjk2MDdiMThiNTlmY2JlYjM1YWE3NDBlYWQ0ZVwiPmhhbF9kcm1fYmF0Y2hfY29tbWFuZF9jb250cm9sOjpjdXN0b208XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSB2YWx1ZSBmb3IgY3VzdG9tIGNvbW1hbmQ8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+c3RydWN0IGhhbF9kcm1fbWVzc2FnZTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSBzdHJ1Y3R1cmUgdHlwZSBvZiB0aGUgRFJNIG1lc3NhZ2UuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfRFJNIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5EYXRhIEZpZWxkczxcL3RoPlxuPHRoPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjx0Ym9keT5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYWFhOTZlYzc5NWUzOGQwNWNjZTZiYTI5YTA2Mjk3MzVhXCI+aGFsX2RybV9tZXNzYWdlX3R5cGVfZTxcL2E+PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWYwMWFjZmRjZWVmZmNkZDc5MDk5MWU2MjA5YjUwYTNmXCI+dHlwZTxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5jb25zdCBjaGFyICo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhMWE1YWU4M2VhNjFlZDg5NzY4OWFiNTkyYWU2ODUzZDZcIj5saWNlbnNlX3JlcXVlc3Q8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjZ2FiOTVjYTgxMWJlMGQwNGRiYmRjMDk4MDUxNWRjMDBkY1wiPmhhbF9kcm1fZXJyb3JfZTxcL2E+PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTRmYTdmZTJkNzcyMTU3ZDUwZDA3NjFmZjdkNTk0MGVhXCI+ZXJyb3JfY29kZTxcL2E+PFwvdGQ+XG48XC90cj5cbjxcL3Rib2R5PlxuPFwvdGFibGU+PFwvZGl2PlxuPGhyIFwvPlxuPGg0IGlkPVwiY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTJcIj48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi0yXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5GaWVsZCBEb2N1bWVudGF0aW9uPFwvaDQ+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYWI5NWNhODExYmUwZDA0ZGJiZGMwOTgwNTE1ZGMwMGRjXCI+aGFsX2RybV9lcnJvcl9lPFwvYT4gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTRmYTdmZTJkNzcyMTU3ZDUwZDA3NjFmZjdkNTk0MGVhXCI+aGFsX2RybV9tZXNzYWdlOjplcnJvcl9jb2RlPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5UaGUgZXJyb3IgY29kZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5jb25zdCBjaGFyKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhMWE1YWU4M2VhNjFlZDg5NzY4OWFiNTkyYWU2ODUzZDZcIj5oYWxfZHJtX21lc3NhZ2U6OmxpY2Vuc2VfcmVxdWVzdDxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VGhlIGxpY2Vuc2UgcmVxdWVzdCBtZXNzYWdlPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhYWE5NmVjNzk1ZTM4ZDA1Y2NlNmJhMjlhMDYyOTczNWFcIj5oYWxfZHJtX21lc3NhZ2VfdHlwZV9lPFwvYT4gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWYwMWFjZmRjZWVmZmNkZDc5MDk5MWU2MjA5YjUwYTNmXCI+aGFsX2RybV9tZXNzYWdlOjp0eXBlPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5UaGUgdHlwZSBvZiBtZXNzYWdlPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnN0cnVjdCBoYWxfZHJtX2RhdGFfczxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlNlcmlhbGl6ZWQgYnl0ZSBkYXRhIHdpdGggc3BlY2lmaWMgc2l6ZS48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9EUk0gMS4wPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPkRhdGEgRmllbGRzPFwvdGg+XG48dGg+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPHRib2R5PlxuPHRyPlxuPHRkPnVpbnQzMl90PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWE2NTk4YmY3NjQ1ZTMxYTMxMTM1NTlmMmMwYzMyN2RmXCI+c2l6ZTxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD51bnNpZ25lZCBjaGFyICo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhZWQwMDFjNTQ4NmYzNzg0YmEyMTVlOGU2OGI3ZDk1YThcIj5kYXRhPFwvYT48XC90ZD5cbjxcL3RyPlxuPFwvdGJvZHk+XG48XC90YWJsZT48XC9kaXY+XG48aHIgXC8+XG48aDQgaWQ9XCJjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tM1wiPjxhIGhyZWY9XCIjY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTNcIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPkZpZWxkIERvY3VtZW50YXRpb248XC9oND5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnVuc2lnbmVkIGNoYXIqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FlZDAwMWM1NDg2ZjM3ODRiYTIxNWU4ZTY4YjdkOTVhOFwiPmhhbF9kcm1fZGF0YV9zOjpkYXRhPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5UaGUgcG9pbnRlciBvZiBieXRlIGRhdGEgYXJyYXk8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dWludDMyX3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWE2NTk4YmY3NjQ1ZTMxYTMxMTM1NTlmMmMwYzMyN2RmXCI+aGFsX2RybV9kYXRhX3M6OnNpemU8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSBzaXplIG9mIGRhdGE8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+c3RydWN0IGhhbF9kcm1fa2V5X2luZm9fczxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSBrZXkgaWQgdGhhdCBpbmRpY2F0ZXMgZGVjcnlwdGlvbiBrZXkgYW5kIHN0YXR1cyBvZiBkZWNyeXB0aW9uIGtleS48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9EUk0gMS4wPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPkRhdGEgRmllbGRzPFwvdGg+XG48dGg+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPHRib2R5PlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19kYXRhX19zXCI+aGFsX2RybV9kYXRhX3M8XC9hPjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FhODk1MzJjNWQxZTMwNjg3M2Q3MGM3NmM0ODFiZjM0ZlwiPmtleV9pZDxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYTczZDJmYTY3NjJhMTE0NWFmMzIyYjIwNzVhYjczNDBiXCI+aGFsX2RybV9rZXlfc3RhdHVzX2U8XC9hPjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FkNWM3MTVjOGYyZmM5MjhiMzVjNzhiYTk2NTUxNjk4NlwiPnN0YXR1czxcL2E+PFwvdGQ+XG48XC90cj5cbjxcL3Rib2R5PlxuPFwvdGFibGU+PFwvZGl2PlxuPGhyIFwvPlxuPGg0IGlkPVwiY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTRcIj48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi00XCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5GaWVsZCBEb2N1bWVudGF0aW9uPFwvaDQ+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fZGF0YV9fc1wiPmhhbF9kcm1fZGF0YV9zPFwvYT4gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWE4OTUzMmM1ZDFlMzA2ODczZDcwYzc2YzQ4MWJmMzRmXCI+aGFsX2RybV9rZXlfaW5mb19zOjprZXlfaWQ8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPktleSBJRDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYTczZDJmYTY3NjJhMTE0NWFmMzIyYjIwNzVhYjczNDBiXCI+aGFsX2RybV9rZXlfc3RhdHVzX2U8XC9hPiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhZDVjNzE1YzhmMmZjOTI4YjM1Yzc4YmE5NjU1MTY5ODZcIj5oYWxfZHJtX2tleV9pbmZvX3M6OnN0YXR1czxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U3RhdHVzIG9mIGRlY3J5cHRpb24ga2V5IGluZGljYXRlZCBieSBrZXlfaWQ8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+c3RydWN0IGhhbF9kcm1fa2V5X2luZm9fbGlzdF9zPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VGhlIHNldCBvZiBrZXkgc3RhdHVzIGluZm9ybWF0aW9uLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0RSTSAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+RGF0YSBGaWVsZHM8XC90aD5cbjx0aD48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48dGJvZHk+XG48dHI+XG48dGQ+dWludDMyX3Q8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhNzU4OGIwM2U4YWJlYzhjZGQ3NTExYTJjZWQzMWI2OTZcIj5udW1fb2Zfa2V5X2luZm9zPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19rZXlfX2luZm9fX3NcIj5oYWxfZHJtX2tleV9pbmZvX3M8XC9hPiAqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWU3Yjc4YTRkZjkwODg2ZDgzNjFiNzNlNGVkZGRjYTIwXCI+a2V5X2luZm9zPFwvYT48XC90ZD5cbjxcL3RyPlxuPFwvdGJvZHk+XG48XC90YWJsZT48XC9kaXY+XG48aHIgXC8+XG48aDQgaWQ9XCJjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tNVwiPjxhIGhyZWY9XCIjY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTVcIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPkZpZWxkIERvY3VtZW50YXRpb248XC9oND5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19rZXlfX2luZm9fX3NcIj5oYWxfZHJtX2tleV9pbmZvX3M8XC9hPiogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWU3Yjc4YTRkZjkwODg2ZDgzNjFiNzNlNGVkZGRjYTIwXCI+aGFsX2RybV9rZXlfaW5mb19saXN0X3M6OmtleV9pbmZvczxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+S2V5IElEIGFuZCBrZXkgc3RhdHVzPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnVpbnQzMl90IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2E3NTg4YjAzZThhYmVjOGNkZDc1MTFhMmNlZDMxYjY5NlwiPmhhbF9kcm1fa2V5X2luZm9fbGlzdF9zOjpudW1fb2Zfa2V5X2luZm9zPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5UaGUgbnVtYmVyIG9mIGtleSBpbmZvcm1hdGlvbjxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5zdHJ1Y3QgaGFsX2RybV9jcnlwdG9faW5mb19zPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VGhlIHN0cnVjdHVyZSB0eXBlIG9mIGNyeXB0byBpbmZvcm1hdGlvbiBmb3IgZGVjcnlwdGlvbi48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9EUk0gMS4wPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPkRhdGEgRmllbGRzPFwvdGg+XG48dGg+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPHRib2R5PlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhNmY2Zjc4Y2EwZjM0NWRlYjQ3ZTg5NWViMzQ3NmU2MzBcIj5oYWxfZHJtX2NpcGhlcl9hbGdvcml0aG1fZTxcL2E+PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTE5YzA1NjJiNDk2YzFiYTc3OGE2YmM3Nzg4ODVjZjQyXCI+YWxnb3JpdGhtPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhMTRhODg1ODgwYjY0ZjMxYTYzMDY2YTAxOWJiYzhmNWNcIj5oYWxfZHJtX21lZGlhX3R5cGVfZTxcL2E+PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWNkNDNkM2M4ZDJiN2RmMDEyNjU2ZjNmNWM1OThkYTlmXCI+dHlwZTxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYWYwOTBmYTVmY2M0NDJhNDA4ZGYwNmI5YWFhMTVjNGI3XCI+aGFsX2RybV9jaXBoZXJfcGhhc2VfZTxcL2E+PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWNhNjE5ZjhjM2Q4Mzk5MzVjNzQ4N2NkZjMwZWQyOWUzXCI+cGhhc2U8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dW5zaWduZWQgY2hhciAqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTQyZDU4ODAxNTJhN2U3MDk1NWQ2NWZiMGUxODgyNmFmXCI+a2V5X2lkPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPnVpbnQzMl90PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWJiODJmMjA3NDkzMTMzNmFjMzZkOTk3OGE1ZGIyMTRhXCI+a2V5X2lkX3NpemU8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dW5zaWduZWQgY2hhciAqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTgxODRjMTE1YTIzZjA2OWRiMzU1Y2M2Y2Y2NTNjOTM5XCI+aXY8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dWludDMyX3Q8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhYTEwNDkwY2Q5YzQyNzQxMzlmMzMxODgzZmY1ZGZjZTRcIj5pdl9zaXplPFwvYT48XC90ZD5cbjxcL3RyPlxuPFwvdGJvZHk+XG48XC90YWJsZT48XC9kaXY+XG48aHIgXC8+XG48aDQgaWQ9XCJjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tNlwiPjxhIGhyZWY9XCIjY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTZcIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPkZpZWxkIERvY3VtZW50YXRpb248XC9oND5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhNmY2Zjc4Y2EwZjM0NWRlYjQ3ZTg5NWViMzQ3NmU2MzBcIj5oYWxfZHJtX2NpcGhlcl9hbGdvcml0aG1fZTxcL2E+IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2ExOWMwNTYyYjQ5NmMxYmE3NzhhNmJjNzc4ODg1Y2Y0MlwiPmhhbF9kcm1fY3J5cHRvX2luZm9fczo6YWxnb3JpdGhtPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5DaXBoZXIgYWxnb3JpdGhtPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnVuc2lnbmVkIGNoYXIqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2E4MTg0YzExNWEyM2YwNjlkYjM1NWNjNmNmNjUzYzkzOVwiPmhhbF9kcm1fY3J5cHRvX2luZm9fczo6aXY8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSBJVihJbml0aWFsaXphdGlvbiBWZWN0b3IpIGZvciBibG9jayBjaXBoZXIgbW9kZXMgb2Ygb3BlcmF0aW9uPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnVpbnQzMl90IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FhMTA0OTBjZDljNDI3NDEzOWYzMzE4ODNmZjVkZmNlNFwiPmhhbF9kcm1fY3J5cHRvX2luZm9fczo6aXZfc2l6ZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VGhlIHNpemUgb2YgSVY8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dW5zaWduZWQgY2hhciogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTQyZDU4ODAxNTJhN2U3MDk1NWQ2NWZiMGUxODgyNmFmXCI+aGFsX2RybV9jcnlwdG9faW5mb19zOjprZXlfaWQ8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSBLZXkgSUQ8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dWludDMyX3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWJiODJmMjA3NDkzMTMzNmFjMzZkOTk3OGE1ZGIyMTRhXCI+aGFsX2RybV9jcnlwdG9faW5mb19zOjprZXlfaWRfc2l6ZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VGhlIHNpemUgb2YgS2V5IElEPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhZjA5MGZhNWZjYzQ0MmE0MDhkZjA2YjlhYWExNWM0YjdcIj5oYWxfZHJtX2NpcGhlcl9waGFzZV9lPFwvYT4gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWNhNjE5ZjhjM2Q4Mzk5MzVjNzQ4N2NkZjMwZWQyOWUzXCI+aGFsX2RybV9jcnlwdG9faW5mb19zOjpwaGFzZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+Q2lwaGVyIHBoYXNlPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhMTRhODg1ODgwYjY0ZjMxYTYzMDY2YTAxOWJiYzhmNWNcIj5oYWxfZHJtX21lZGlhX3R5cGVfZTxcL2E+IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FjZDQzZDNjOGQyYjdkZjAxMjY1NmYzZjVjNTk4ZGE5ZlwiPmhhbF9kcm1fY3J5cHRvX2luZm9fczo6dHlwZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+TWVkaWEgdHlwZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5zdHJ1Y3QgaGFsX2RybV9zdWJzYW1wbGVfczxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSBzdHJ1Y3R1cmUgdHlwZSBvZiBzdWJzYW1wbGUuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfRFJNIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5EYXRhIEZpZWxkczxcL3RoPlxuPHRoPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjx0Ym9keT5cbjx0cj5cbjx0ZD51aW50MzJfdDxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FjZWMyOWI1MDM2NGVkOTM1NDA3OTIyM2VjYTAwODliZlwiPmJ5dGVzX29mX2NsZWFyX2RhdGE8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dWludDMyX3Q8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhM2QxZWRhNWE1NjNiNTgyZjIwOTEwNGI0ODg1MzhkNWRcIj5ieXRlc19vZl9wcm90ZWN0ZWRfZGF0YTxcL2E+PFwvdGQ+XG48XC90cj5cbjxcL3Rib2R5PlxuPFwvdGFibGU+PFwvZGl2PlxuPGhyIFwvPlxuPGg0IGlkPVwiY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTdcIj48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi03XCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5GaWVsZCBEb2N1bWVudGF0aW9uPFwvaDQ+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD51aW50MzJfdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhY2VjMjliNTAzNjRlZDkzNTQwNzkyMjNlY2EwMDg5YmZcIj5oYWxfZHJtX3N1YnNhbXBsZV9zOjpieXRlc19vZl9jbGVhcl9kYXRhPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5UaGUgc2l6ZSBvZiBjbGVhciBkYXRhKEJ5dGVzT2ZDbGVhckRhdGEgaW4gQ0VOQyBzcGVjaWZpY2F0aW9uKTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD51aW50MzJfdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhM2QxZWRhNWE1NjNiNTgyZjIwOTEwNGI0ODg1MzhkNWRcIj5oYWxfZHJtX3N1YnNhbXBsZV9zOjpieXRlc19vZl9wcm90ZWN0ZWRfZGF0YTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VGhlIHNpemUgb2YgcHJvdGVjdGVkIGRhdGEoQnl0ZXNPZlByb3RlY3RlZERhdGEgaW4gQ0VOQyBzcGVjaWZpY2F0aW9uKTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5zdHJ1Y3QgaGFsX2RybV9wcm90ZWN0aW9uX3BhdHRlcm5fczxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSBzdHJ1Y3R1cmUgdHlwZSBvZiBwcm90ZWN0aW9uIHBhdHRlcm4gaW5mb3JtYXRpb24gZm9yIHBhdHRlcm4gZW5jcnlwdGlvbi48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9EUk0gMS4wPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPkRhdGEgRmllbGRzPFwvdGg+XG48dGg+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPHRib2R5PlxuPHRyPlxuPHRkPmJvb2w8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhY2FlMjE1MTdmNjliODNmZWFhYWU0NDk0YTYyN2YyMWVcIj51c2VfcGF0dGVybjxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD51aW50MzJfdDxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2E5N2ViNDcxNTA0MmI4NWM3YjBmMTJmYWY1NGY4ZjRiZFwiPmNyeXB0X2J5dGVfYmxvY2s8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+dWludDMyX3Q8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhZjg5Njc1N2E3MDg1N2Q3MjJkNTdhYjQxNGEwNThjMWZcIj5za2lwX2J5dGVfYmxvY2s8XC9hPjxcL3RkPlxuPFwvdHI+XG48XC90Ym9keT5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxociBcLz5cbjxoNCBpZD1cImNvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi04XCI+PGEgaHJlZj1cIiNjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tOFwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2g0PlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dWludDMyX3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTk3ZWI0NzE1MDQyYjg1YzdiMGYxMmZhZjU0ZjhmNGJkXCI+aGFsX2RybV9wcm90ZWN0aW9uX3BhdHRlcm5fczo6Y3J5cHRfYnl0ZV9ibG9jazxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+SWYgdXNlX3BhdHRlcm4gaXMgdHJ1ZSwgY291bnQgb2YgdGhlIGVuY3J5cHRlZCBibG9ja3MgaW4gdGhlIHByb3RlY3Rpb24gcGF0dGVybjxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD51aW50MzJfdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhZjg5Njc1N2E3MDg1N2Q3MjJkNTdhYjQxNGEwNThjMWZcIj5oYWxfZHJtX3Byb3RlY3Rpb25fcGF0dGVybl9zOjpza2lwX2J5dGVfYmxvY2s8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPklmIHVzZV9wYXR0ZXJuIGlzIHRydWUsIGNvdW50IG9mIHRoZSB1bmVuY3J5cHRlZCBibG9ja3MgaW4gdGhlIHByb3RlY3Rpb24gcGF0dGVybjxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5ib29sIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FjYWUyMTUxN2Y2OWI4M2ZlYWFhZTQ0OTRhNjI3ZjIxZVwiPmhhbF9kcm1fcHJvdGVjdGlvbl9wYXR0ZXJuX3M6OnVzZV9wYXR0ZXJuPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD50cnVlIGlmIGNiY3MgcGF0dGVybiBzY2hlbWUgaXMgdXNlZCwgb3RoZXJ3aXNlIGZhbHNlPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnN0cnVjdCBoYWxfZHJtX2J1ZmZlcl9zPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VGhlIHN0cnVjdHVyZSB0eXBlIG9mIERSTSBidWZmZXIuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfRFJNIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5EYXRhIEZpZWxkczxcL3RoPlxuPHRoPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjx0Ym9keT5cbjx0cj5cbjx0ZD5pbnQ8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhMDVmNThjOTQ0OGViODQ3MzRkZGJjN2U0N2NjOGNiODNcIj5pbmRleDxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5ib29sPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYThlNGQwNDdhZjMxZjM5NDAzYmZlY2MwNTY3MzdjZjAxXCI+aXNfc2VjdXJlPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPnVpbnQzMl90PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWRhNTcwNzE5YTIxOWNkY2I0MDU1NTY4ZDYwYWNkMzc5XCI+c2l6ZTxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD51bnNpZ25lZCBjaGFyICo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhNWNjMzIxMGI2ZThiYjZmN2ViZDFjZTYwMmNjM2RkY2RcIj5kYXRhPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludDxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FhODRlYzljMjM5ZDYxYmM5ZDFiYzlkMWM0Y2U1NjI5NFwiPmZkPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludDxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2EwOTkyNGJiMTJmMDJkMmU4ZWIwZDYxZWJiNDgwM2M4NlwiPnNlY3VyZV9oYW5kbGU8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50ICo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhNWRlOWE4NTQxZWUzZjg1MWRlMWRhOTAxYTNmZDE4NTlcIj5zcGxpdF9vZmZzZXRzPFwvYT48XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPnVpbnQzMl90PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWZjYTBmODIyOThmOGNiY2Y5MTVlNmU3NGEwY2VlYjU2XCI+bnVtX29mX3N1YnNhbXBsZXM8XC9hPjxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX3N1YnNhbXBsZV9fc1wiPmhhbF9kcm1fc3Vic2FtcGxlX3M8XC9hPiAqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTkyMGU4YTNkNTkyODcwNzgxNmE2YmMwZGE3YmFjYzdjXCI+c3Vic2FtcGxlczxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fcHJvdGVjdGlvbl9fcGF0dGVybl9fc1wiPmhhbF9kcm1fcHJvdGVjdGlvbl9wYXR0ZXJuX3M8XC9hPjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2EyNjIwNWE2OWFhNmFkYzk4M2U1NTQ4ZDlmN2NiZjMwOVwiPnBhdHRlcm5fZW5jcnlwdGlvbjxcL2E+PFwvdGQ+XG48XC90cj5cbjxcL3Rib2R5PlxuPFwvdGFibGU+PFwvZGl2PlxuPGhyIFwvPlxuPGg0IGlkPVwiY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTlcIj48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi05XCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5GaWVsZCBEb2N1bWVudGF0aW9uPFwvaDQ+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD51bnNpZ25lZCBjaGFyKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhNWNjMzIxMGI2ZThiYjZmN2ViZDFjZTYwMmNjM2RkY2RcIj5oYWxfZHJtX2J1ZmZlcl9zOjpkYXRhPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5UaGUgcG9pbnRlciBvZiBkYXRhIGJ1ZmZlcjxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWE4NGVjOWMyMzlkNjFiYzlkMWJjOWQxYzRjZTU2Mjk0XCI+aGFsX2RybV9idWZmZXJfczo6ZmQ8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSBmZChmaWxlIGRlc2NyaXB0b3IpIG9mIGRhdGEgYnVmZmVyLiBXaGVuIGZkIGlzIG5vdCB1c2VkLCBpdCB3aWxsIGJlIHNldCAtMTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTA1ZjU4Yzk0NDhlYjg0NzM0ZGRiYzdlNDdjYzhjYjgzXCI+aGFsX2RybV9idWZmZXJfczo6aW5kZXg8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSBpbmRleCBvZiBidWZmZXI8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+Ym9vbCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhOGU0ZDA0N2FmMzFmMzk0MDNiZmVjYzA1NjczN2NmMDFcIj5oYWxfZHJtX2J1ZmZlcl9zOjppc19zZWN1cmU8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSBmbGFnIHdoaWNoIGluZGljYXRlcyB0aGUgcmVhbCBkYXRhIGlzIG1hbmFnZWQgaW4gc2VjdXJlIHdvcmxkIG9yIG5vdDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD51aW50MzJfdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhZmNhMGY4MjI5OGY4Y2JjZjkxNWU2ZTc0YTBjZWViNTZcIj5oYWxfZHJtX2J1ZmZlcl9zOjpudW1fb2Zfc3Vic2FtcGxlczxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VGhlIG51bWJlciBvZiBzdWJzYW1wbGVzPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19wcm90ZWN0aW9uX19wYXR0ZXJuX19zXCI+aGFsX2RybV9wcm90ZWN0aW9uX3BhdHRlcm5fczxcL2E+IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2EyNjIwNWE2OWFhNmFkYzk4M2U1NTQ4ZDlmN2NiZjMwOVwiPmhhbF9kcm1fYnVmZmVyX3M6OnBhdHRlcm5fZW5jcnlwdGlvbjxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VGhlIGluZm9ybWF0aW9uIG9mIHBhdHRlcm4gZW5jcnlwdGlvbjxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTA5OTI0YmIxMmYwMmQyZThlYjBkNjFlYmI0ODAzYzg2XCI+aGFsX2RybV9idWZmZXJfczo6c2VjdXJlX2hhbmRsZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VGhlIHNlY3VyZSBoYW5kbGUgb2YgZGF0YSBidWZmZXIuIFdoZW4gaGFuZGxlIGlzIG5vdCB1c2VkLCBpdCB3aWxsIGJlIHNldCAwPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnVpbnQzMl90IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FkYTU3MDcxOWEyMTljZGNiNDA1NTU2OGQ2MGFjZDM3OVwiPmhhbF9kcm1fYnVmZmVyX3M6OnNpemU8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSBzaXplIG9mIGRhdGEgYnVmZmVyPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTVkZTlhODU0MWVlM2Y4NTFkZTFkYTkwMWEzZmQxODU5XCI+aGFsX2RybV9idWZmZXJfczo6c3BsaXRfb2Zmc2V0czxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U2FtcGxlIG9mZnNldC4gTnVsbGFibGUuIElmIHVzZWQsIC0xIHRlcm1pbmF0ZWQgaW50IGFycmF5LiBUaGUgbWF4IG51bWJlciBvZiBzcGxpdF9vZmZzZXRzIGFyZSAxNTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fc3Vic2FtcGxlX19zXCI+aGFsX2RybV9zdWJzYW1wbGVfczxcL2E+KiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhOTIwZThhM2Q1OTI4NzA3ODE2YTZiYzBkYTdiYWNjN2NcIj5oYWxfZHJtX2J1ZmZlcl9zOjpzdWJzYW1wbGVzPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5UaGUgc3Vic2FtcGxlcyBpbiBDRU5DKENvbW1vbiBFbmNyeXB0aW9uKTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5zdHJ1Y3QgX2hhbF9iYWNrZW5kX2RybV9mdW5jczxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSBzdHJ1Y3R1cmUgdHlwZSBvZiB0aGUgRFJNIEhBTCBmdW5jdGlvbnMuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfRFJNIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5EYXRhIEZpZWxkczxcL3RoPlxuPHRoPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjx0Ym9keT5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FjM2RjY2JkNmVlOTVkMjgxZmQ3MjJmOTk1OGVkOTA3MlwiPmluaXQ8XC9hPiApKHZvaWQgKipkcm1faGFuZGxlKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhNDMyOWRjYWI3MjE0YTA0NmU2OWY3NWY0ZTY3MDRhNWJcIj5kZWluaXQ8XC9hPiApKHZvaWQgKmRybV9oYW5kbGUpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2E4N2E3NzViMWRhZWRkYWVlYzlmN2I2N2RiNDdiNjM0MlwiPnNldF9tZXNzYWdlX2NhbGxiYWNrPFwvYT4gKSh2b2lkICpkcm1faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYWM2NDY0MDAyZDdhMTZhNTI5ZGUwYzZiMzcwNmU0Yjk1XCI+aGFsX2RybV9tZXNzYWdlX2NiPFwvYT4gY2FsbGJhY2ssIHZvaWQgKnVzZXJfZGF0YSk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTU2ZjNmYTkxMWVhMmIzNDI4OTFjZDllZTI4MTViZGUyXCI+Z2V0X2NkbV92ZXJzaW9uPFwvYT4gKSh2b2lkICpkcm1faGFuZGxlLCBjaGFyICoqdmVyc2lvbik8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWY2NTgxMDc0MmY3N2Q3N2RiOGM5ZWViY2U2YjA0MDVhXCI+c2Vzc2lvbl9jcmVhdGU8XC9hPiApKHZvaWQgKmRybV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhMjNhMmMxODRiZmMwM2QxZjI5ZjQ5YTAxYWY4MjkzZGFcIj5oYWxfZHJtX3Nlc3Npb25fdHlwZV9lPFwvYT4gdHlwZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2RhdGFfX3NcIj5oYWxfZHJtX2RhdGFfczxcL2E+ICoqc2Vzc2lvbl9pZCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWQ1NjI2YTVkODc0ODJiZWM1MWE4NjdmNTdhYWI5ZjY3XCI+c2Vzc2lvbl9sb2FkPFwvYT4gKSh2b2lkICpkcm1faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fZGF0YV9fc1wiPmhhbF9kcm1fZGF0YV9zPFwvYT4gKnNlc3Npb25faWQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FhMjFkNGQ0NGVkZTI3ZGVjNWU4NDE2NGE5NGI0ZjkwZlwiPnNlc3Npb25fZ2VuZXJhdGVfcmVxdWVzdDxcL2E+ICkodm9pZCAqZHJtX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2RhdGFfX3NcIj5oYWxfZHJtX2RhdGFfczxcL2E+ICpzZXNzaW9uX2lkLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYWFmZmI4MTAzMzIyYzVkYTgzODM2NTUzZjEzMjI0M2M3XCI+aGFsX2RybV9pbml0X2RhdGFfdHlwZV9lPFwvYT4gdHlwZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2RhdGFfX3NcIj5oYWxfZHJtX2RhdGFfczxcL2E+ICppbml0X2RhdGEsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19kYXRhX19zXCI+aGFsX2RybV9kYXRhX3M8XC9hPiAqKnJlcXVlc3QpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FlOTMzMGVjYTBlMWUzNDhmMWFlYjRjOTllMDEzY2JkMFwiPnNlc3Npb25fdXBkYXRlPFwvYT4gKSh2b2lkICpkcm1faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fZGF0YV9fc1wiPmhhbF9kcm1fZGF0YV9zPFwvYT4gKnNlc3Npb25faWQsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19kYXRhX19zXCI+aGFsX2RybV9kYXRhX3M8XC9hPiAqbGljZW5zZSk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTYwNWVlMGMzNmUyNTJlZjdjOWVmNjJiMmFhNzU3NDg4XCI+c2Vzc2lvbl9nZXRfZXhwaXJhdGlvbjxcL2E+ICkodm9pZCAqZHJtX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2RhdGFfX3NcIj5oYWxfZHJtX2RhdGFfczxcL2E+ICpzZXNzaW9uX2lkLCBpbnQ2NF90ICpleHBpcmF0aW9uKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhODhmY2ZlNGI1NzczYzU0ZmFlNTI0NWVkMzdjYjFkOWRcIj5zZXNzaW9uX2dldF9rZXlfaW5mb3M8XC9hPiApKHZvaWQgKmRybV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19kYXRhX19zXCI+aGFsX2RybV9kYXRhX3M8XC9hPiAqc2Vzc2lvbl9pZCwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2tleV9faW5mb19fbGlzdF9fc1wiPmhhbF9kcm1fa2V5X2luZm9fbGlzdF9zPFwvYT4gKiprZXlfaW5mb19saXN0KTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhN2YzYjU0ZDZmMTUxNDczZmMzYWYwZjA2MmVhODY1YWNcIj5zZXNzaW9uX2Nsb3NlPFwvYT4gKSh2b2lkICpkcm1faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fZGF0YV9fc1wiPmhhbF9kcm1fZGF0YV9zPFwvYT4gKnNlc3Npb25faWQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2E3OWQ4NmU1MTBjZTI1Y2VlNjhkZGZkOTliMjIwNGRmN1wiPnNlc3Npb25fcmVtb3ZlPFwvYT4gKSh2b2lkICpkcm1faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fZGF0YV9fc1wiPmhhbF9kcm1fZGF0YV9zPFwvYT4gKnNlc3Npb25faWQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2E0ODRkNzkxMDNkYzEyYzk4NjA5MzdmZTkxYjE2MDc1ZVwiPmdldF9wcm92aXNpb25pbmdfcmVxdWVzdDxcL2E+ICkodm9pZCAqZHJtX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2RhdGFfX3NcIj5oYWxfZHJtX2RhdGFfczxcL2E+ICoqcmVxdWVzdCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWE5NTEwNGVmNmIwOTAwM2I1MDJkN2EwNGQ2ZjNiNWQ3XCI+c2V0X3Byb3Zpc2lvbmluZ19yZXNwb25zZTxcL2E+ICkodm9pZCAqZHJtX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2RhdGFfX3NcIj5oYWxfZHJtX2RhdGFfczxcL2E+ICpyZXNwb25zZSk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTIyYWFiNmI3MzIzMDg5M2IwYzJmYjBiZWRhZTkwYjQ1XCI+Z2V0X3NlcnZpY2VfY2VydGlmaWNhdGVfcmVxdWVzdDxcL2E+ICkodm9pZCAqZHJtX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2RhdGFfX3NcIj5oYWxfZHJtX2RhdGFfczxcL2E+ICoqcmVxdWVzdCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWIxMmVhMzM3YTJkOTMxYmI1Y2Y0M2NlZjkzMmQwNDIzXCI+bG9hZF9zZXJ2aWNlX2NlcnRpZmljYXRlX3Jlc3BvbnNlPFwvYT4gKSh2b2lkICpkcm1faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fZGF0YV9fc1wiPmhhbF9kcm1fZGF0YV9zPFwvYT4gKnJlc3BvbnNlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fZGF0YV9fc1wiPmhhbF9kcm1fZGF0YV9zPFwvYT4gKipjZXJ0aWZpY2F0ZSk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWRmMDNlOTcyNmJiNzFlOTFkNDQwNzI3N2YzNDE0N2Q2XCI+c2V0X3NlcnZpY2VfY2VydGlmaWNhdGU8XC9hPiApKHZvaWQgKmRybV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19kYXRhX19zXCI+aGFsX2RybV9kYXRhX3M8XC9hPiAqY2VydGlmaWNhdGUpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FkNzNiMjVhZDkzMjM1NTM1NzkxYmRmMDNkYzg1MTNjY1wiPmFsbG9jYXRlX291dHB1dF9idWZmZXI8XC9hPiApKHZvaWQgKmRybV9oYW5kbGUsIHVpbnQzMl90IHNpemUsIGJvb2wgaXNfc2VjdXJlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fYnVmZmVyX19zXCI+aGFsX2RybV9idWZmZXJfczxcL2E+ICoqYnVmZmVyKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhMWZlNWNmMTBhYzZkOWM3Y2Q3MDEwYWYwMzY0YTgzM2RcIj5yZWxlYXNlX291dHB1dF9idWZmZXI8XC9hPiApKHZvaWQgKmRybV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19idWZmZXJfX3NcIj5oYWxfZHJtX2J1ZmZlcl9zPFwvYT4gKmJ1ZmZlcik8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTdmNzk5NTE0M2Q1ZTNmZTlmOWQ2NzlkN2JkZWM1MTlkXCI+cmVsZWFzZV9kYXRhPFwvYT4gKSh2b2lkICpkcm1faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fZGF0YV9fc1wiPmhhbF9kcm1fZGF0YV9zPFwvYT4gKmRhdGEpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2EzN2U1MzdhZWFkYzNmNDJlYjRiNzY5Nzc2OGJlYTNhMFwiPnJlbGVhc2Vfa2V5X2luZm9fbGlzdDxcL2E+ICkodm9pZCAqZHJtX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2tleV9faW5mb19fbGlzdF9fc1wiPmhhbF9kcm1fa2V5X2luZm9fbGlzdF9zPFwvYT4gKmtleV9pbmZvX2xpc3QpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FiNGVkNjA3ZTc0NDBmZjZjMmVmMmE5MWE0OTUxMzBjZlwiPmRlY3J5cHQ8XC9hPiApKHZvaWQgKmRybV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19idWZmZXJfX3NcIj5oYWxfZHJtX2J1ZmZlcl9zPFwvYT4gKmlucHV0LCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fY3J5cHRvX19pbmZvX19zXCI+aGFsX2RybV9jcnlwdG9faW5mb19zPFwvYT4gKmRlY3J5cHRfaW5mbywgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2J1ZmZlcl9fc1wiPmhhbF9kcm1fYnVmZmVyX3M8XC9hPiAqb3V0cHV0KTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhNzNkZDY3NzhhMjgyYjViNzlkMjQ3NmFlMzljMjkxMGVcIj5zZXRfY29tbWFuZDxcL2E+ICkodm9pZCAqZHJtX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjZ2E3ZjBjMTAyYjk0MmNlYjYxOGEwZjlhNWE3ODBiY2YxOFwiPmhhbF9kcm1fY29tbWFuZF9lPFwvYT4gY29tbWFuZCwgdm9pZCAqdmFsdWUpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2ExNWUxZmY4OWI5OWYwYzE1NTNjNDUzZjg1ODJmNTYwY1wiPmdldF9jb21tYW5kPFwvYT4gKSh2b2lkICpkcm1faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYTdmMGMxMDJiOTQyY2ViNjE4YTBmOWE1YTc4MGJjZjE4XCI+aGFsX2RybV9jb21tYW5kX2U8XC9hPiBjb21tYW5kLCB2b2lkICoqdmFsdWUpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FmNTk2NDk4ZDM5NDg5Y2ZiOGE3Y2Y1MzA0ODEwODVjYVwiPnNldF9iYXRjaF9jb21tYW5kPFwvYT4gKSh2b2lkICpkcm1faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYWQwOWI0NDU5MTNhNmEyNmFjMGRjNmM0NmM3MmViZjZlXCI+aGFsX2RybV9iYXRjaF9jb21tYW5kX2NvbnRyb2xfczxcL2E+ICpiYXRjaF9jb21tYW5kLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYTdmMGMxMDJiOTQyY2ViNjE4YTBmOWE1YTc4MGJjZjE4XCI+aGFsX2RybV9jb21tYW5kX2U8XC9hPiAqZXJyb3JfY29tbWFuZCk8XC90ZD5cbjxcL3RyPlxuPFwvdGJvZHk+XG48XC90YWJsZT48XC9kaXY+XG48aHIgXC8+XG48aDQgaWQ9XCJjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tMTBcIj48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi0xMFwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2g0PlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWQ3M2IyNWFkOTMyMzU1MzU3OTFiZGYwM2RjODUxM2NjXCI+X2hhbF9iYWNrZW5kX2RybV9mdW5jczo6YWxsb2NhdGVfb3V0cHV0X2J1ZmZlcjxcL2E+KSh2b2lkICpkcm1faGFuZGxlLCB1aW50MzJfdCBzaXplLCBib29sIGlzX3NlY3VyZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2J1ZmZlcl9fc1wiPmhhbF9kcm1fYnVmZmVyX3M8XC9hPiAqKmJ1ZmZlcik8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5BbGxvY2F0ZXMgZHJtIG91dHB1dCBidWZmZXI8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWI0ZWQ2MDdlNzQ0MGZmNmMyZWYyYTkxYTQ5NTEzMGNmXCI+X2hhbF9iYWNrZW5kX2RybV9mdW5jczo6ZGVjcnlwdDxcL2E+KSh2b2lkICpkcm1faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fYnVmZmVyX19zXCI+aGFsX2RybV9idWZmZXJfczxcL2E+ICppbnB1dCwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2NyeXB0b19faW5mb19fc1wiPmhhbF9kcm1fY3J5cHRvX2luZm9fczxcL2E+ICpkZWNyeXB0X2luZm8sIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19idWZmZXJfX3NcIj5oYWxfZHJtX2J1ZmZlcl9zPFwvYT4gKm91dHB1dCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5EZWNyeXB0cyBlbmNyeXB0ZWQgZGF0YTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhNDMyOWRjYWI3MjE0YTA0NmU2OWY3NWY0ZTY3MDRhNWJcIj5faGFsX2JhY2tlbmRfZHJtX2Z1bmNzOjpkZWluaXQ8XC9hPikodm9pZCAqZHJtX2hhbmRsZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5EZWluaXRpYWxpemVzIERSTSBIQUwgYmFja2VuZCBoYW5kbGU8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTU2ZjNmYTkxMWVhMmIzNDI4OTFjZDllZTI4MTViZGUyXCI+X2hhbF9iYWNrZW5kX2RybV9mdW5jczo6Z2V0X2NkbV92ZXJzaW9uPFwvYT4pKHZvaWQgKmRybV9oYW5kbGUsIGNoYXIgKip2ZXJzaW9uKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkdldHMgdGhlIGNkbSB2ZXJzaW9uPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2ExNWUxZmY4OWI5OWYwYzE1NTNjNDUzZjg1ODJmNTYwY1wiPl9oYWxfYmFja2VuZF9kcm1fZnVuY3M6OmdldF9jb21tYW5kPFwvYT4pKHZvaWQgKmRybV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhN2YwYzEwMmI5NDJjZWI2MThhMGY5YTVhNzgwYmNmMThcIj5oYWxfZHJtX2NvbW1hbmRfZTxcL2E+IGNvbW1hbmQsIHZvaWQgKip2YWx1ZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIGNvbW1hbmQ8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTQ4NGQ3OTEwM2RjMTJjOTg2MDkzN2ZlOTFiMTYwNzVlXCI+X2hhbF9iYWNrZW5kX2RybV9mdW5jczo6Z2V0X3Byb3Zpc2lvbmluZ19yZXF1ZXN0PFwvYT4pKHZvaWQgKmRybV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19kYXRhX19zXCI+aGFsX2RybV9kYXRhX3M8XC9hPiAqKnJlcXVlc3QpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+R2V0cyB0aGUgcHJvdmlzaW9uaW5nIHJlcXVlc3QgbWVzc2FnZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhMjJhYWI2YjczMjMwODkzYjBjMmZiMGJlZGFlOTBiNDVcIj5faGFsX2JhY2tlbmRfZHJtX2Z1bmNzOjpnZXRfc2VydmljZV9jZXJ0aWZpY2F0ZV9yZXF1ZXN0PFwvYT4pKHZvaWQgKmRybV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19kYXRhX19zXCI+aGFsX2RybV9kYXRhX3M8XC9hPiAqKnJlcXVlc3QpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+R2V0cyB0aGUgc2VydmljZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0PFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FjM2RjY2JkNmVlOTVkMjgxZmQ3MjJmOTk1OGVkOTA3MlwiPl9oYWxfYmFja2VuZF9kcm1fZnVuY3M6OmluaXQ8XC9hPikodm9pZCAqKmRybV9oYW5kbGUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+SW5pdGlhbGl6ZXMgRFJNIEhBTCBiYWNrZW5kIGhhbmRsZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhYjEyZWEzMzdhMmQ5MzFiYjVjZjQzY2VmOTMyZDA0MjNcIj5faGFsX2JhY2tlbmRfZHJtX2Z1bmNzOjpsb2FkX3NlcnZpY2VfY2VydGlmaWNhdGVfcmVzcG9uc2U8XC9hPikodm9pZCAqZHJtX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2RhdGFfX3NcIj5oYWxfZHJtX2RhdGFfczxcL2E+ICpyZXNwb25zZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2RhdGFfX3NcIj5oYWxfZHJtX2RhdGFfczxcL2E+ICoqY2VydGlmaWNhdGUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+TG9hZHMgdGhlIHNlcnZpY2UgY2VydGlmaWNhdGUgcmVzcG9uc2U8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTdmNzk5NTE0M2Q1ZTNmZTlmOWQ2NzlkN2JkZWM1MTlkXCI+X2hhbF9iYWNrZW5kX2RybV9mdW5jczo6cmVsZWFzZV9kYXRhPFwvYT4pKHZvaWQgKmRybV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19kYXRhX19zXCI+aGFsX2RybV9kYXRhX3M8XC9hPiAqZGF0YSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5SZWxlYXNlcyA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fZGF0YV9fc1wiIHRpdGxlPVwiU2VyaWFsaXplZCBieXRlIGRhdGEgd2l0aCBzcGVjaWZpYyBzaXplLlwiPmhhbF9kcm1fZGF0YV9zPFwvYT4gdHlwZSBkYXRhPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2EzN2U1MzdhZWFkYzNmNDJlYjRiNzY5Nzc2OGJlYTNhMFwiPl9oYWxfYmFja2VuZF9kcm1fZnVuY3M6OnJlbGVhc2Vfa2V5X2luZm9fbGlzdDxcL2E+KSh2b2lkICpkcm1faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fa2V5X19pbmZvX19saXN0X19zXCI+aGFsX2RybV9rZXlfaW5mb19saXN0X3M8XC9hPiAqa2V5X2luZm9fbGlzdCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5SZWxlYXNlcyA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fa2V5X19pbmZvX19saXN0X19zXCIgdGl0bGU9XCJUaGUgc2V0IG9mIGtleSBzdGF0dXMgaW5mb3JtYXRpb24uXCI+aGFsX2RybV9rZXlfaW5mb19saXN0X3M8XC9hPiB0eXBlIGRhdGE8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTFmZTVjZjEwYWM2ZDljN2NkNzAxMGFmMDM2NGE4MzNkXCI+X2hhbF9iYWNrZW5kX2RybV9mdW5jczo6cmVsZWFzZV9vdXRwdXRfYnVmZmVyPFwvYT4pKHZvaWQgKmRybV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19idWZmZXJfX3NcIj5oYWxfZHJtX2J1ZmZlcl9zPFwvYT4gKmJ1ZmZlcik8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5SZWxlYXNlcyBkcm0gb3V0cHV0IGJ1ZmZlcjxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhN2YzYjU0ZDZmMTUxNDczZmMzYWYwZjA2MmVhODY1YWNcIj5faGFsX2JhY2tlbmRfZHJtX2Z1bmNzOjpzZXNzaW9uX2Nsb3NlPFwvYT4pKHZvaWQgKmRybV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19kYXRhX19zXCI+aGFsX2RybV9kYXRhX3M8XC9hPiAqc2Vzc2lvbl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5DbG9zZXMgc2Vzc2lvbjxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhZjY1ODEwNzQyZjc3ZDc3ZGI4YzllZWJjZTZiMDQwNWFcIj5faGFsX2JhY2tlbmRfZHJtX2Z1bmNzOjpzZXNzaW9uX2NyZWF0ZTxcL2E+KSh2b2lkICpkcm1faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYTIzYTJjMTg0YmZjMDNkMWYyOWY0OWEwMWFmODI5M2RhXCI+aGFsX2RybV9zZXNzaW9uX3R5cGVfZTxcL2E+IHR5cGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19kYXRhX19zXCI+aGFsX2RybV9kYXRhX3M8XC9hPiAqKnNlc3Npb25faWQpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+Q3JlYXRlcyBzZXNzaW9uPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FhMjFkNGQ0NGVkZTI3ZGVjNWU4NDE2NGE5NGI0ZjkwZlwiPl9oYWxfYmFja2VuZF9kcm1fZnVuY3M6OnNlc3Npb25fZ2VuZXJhdGVfcmVxdWVzdDxcL2E+KSh2b2lkICpkcm1faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fZGF0YV9fc1wiPmhhbF9kcm1fZGF0YV9zPFwvYT4gKnNlc3Npb25faWQsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhYWZmYjgxMDMzMjJjNWRhODM4MzY1NTNmMTMyMjQzYzdcIj5oYWxfZHJtX2luaXRfZGF0YV90eXBlX2U8XC9hPiB0eXBlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fZGF0YV9fc1wiPmhhbF9kcm1fZGF0YV9zPFwvYT4gKmluaXRfZGF0YSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2RhdGFfX3NcIj5oYWxfZHJtX2RhdGFfczxcL2E+ICoqcmVxdWVzdCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZW5lcmF0ZXMgcmVxdWVzdDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhNjA1ZWUwYzM2ZTI1MmVmN2M5ZWY2MmIyYWE3NTc0ODhcIj5faGFsX2JhY2tlbmRfZHJtX2Z1bmNzOjpzZXNzaW9uX2dldF9leHBpcmF0aW9uPFwvYT4pKHZvaWQgKmRybV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19kYXRhX19zXCI+aGFsX2RybV9kYXRhX3M8XC9hPiAqc2Vzc2lvbl9pZCwgaW50NjRfdCAqZXhwaXJhdGlvbik8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXRzIHRoZSBrZXkgZXhwaXJhdGlvbjxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhODhmY2ZlNGI1NzczYzU0ZmFlNTI0NWVkMzdjYjFkOWRcIj5faGFsX2JhY2tlbmRfZHJtX2Z1bmNzOjpzZXNzaW9uX2dldF9rZXlfaW5mb3M8XC9hPikodm9pZCAqZHJtX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2RhdGFfX3NcIj5oYWxfZHJtX2RhdGFfczxcL2E+ICpzZXNzaW9uX2lkLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fa2V5X19pbmZvX19saXN0X19zXCI+aGFsX2RybV9rZXlfaW5mb19saXN0X3M8XC9hPiAqKmtleV9pbmZvX2xpc3QpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+R2V0cyB0aGUga2V5IGluZm9ybWF0aW9uIGluY2x1ZGluZyBrZXkgaWQgYW5kIGtleSBzdGF0dXM8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWQ1NjI2YTVkODc0ODJiZWM1MWE4NjdmNTdhYWI5ZjY3XCI+X2hhbF9iYWNrZW5kX2RybV9mdW5jczo6c2Vzc2lvbl9sb2FkPFwvYT4pKHZvaWQgKmRybV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19kYXRhX19zXCI+aGFsX2RybV9kYXRhX3M8XC9hPiAqc2Vzc2lvbl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5Mb2FkcyBzZXNzaW9uPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2E3OWQ4NmU1MTBjZTI1Y2VlNjhkZGZkOTliMjIwNGRmN1wiPl9oYWxfYmFja2VuZF9kcm1fZnVuY3M6OnNlc3Npb25fcmVtb3ZlPFwvYT4pKHZvaWQgKmRybV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19kYXRhX19zXCI+aGFsX2RybV9kYXRhX3M8XC9hPiAqc2Vzc2lvbl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5SZW1vdmVzIHNlc3Npb248XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWU5MzMwZWNhMGUxZTM0OGYxYWViNGM5OWUwMTNjYmQwXCI+X2hhbF9iYWNrZW5kX2RybV9mdW5jczo6c2Vzc2lvbl91cGRhdGU8XC9hPikodm9pZCAqZHJtX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2RhdGFfX3NcIj5oYWxfZHJtX2RhdGFfczxcL2E+ICpzZXNzaW9uX2lkLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fZGF0YV9fc1wiPmhhbF9kcm1fZGF0YV9zPFwvYT4gKmxpY2Vuc2UpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VXBkYXRlcyBzZXNzaW9uPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2FmNTk2NDk4ZDM5NDg5Y2ZiOGE3Y2Y1MzA0ODEwODVjYVwiPl9oYWxfYmFja2VuZF9kcm1fZnVuY3M6OnNldF9iYXRjaF9jb21tYW5kPFwvYT4pKHZvaWQgKmRybV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhZDA5YjQ0NTkxM2E2YTI2YWMwZGM2YzQ2YzcyZWJmNmVcIj5oYWxfZHJtX2JhdGNoX2NvbW1hbmRfY29udHJvbF9zPFwvYT4gKmJhdGNoX2NvbW1hbmQsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhN2YwYzEwMmI5NDJjZWI2MThhMGY5YTVhNzgwYmNmMThcIj5oYWxfZHJtX2NvbW1hbmRfZTxcL2E+ICplcnJvcl9jb21tYW5kKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlNldHMgYSBzZXQgb2YgY29tbWFuZHM8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYTczZGQ2Nzc4YTI4MmI1Yjc5ZDI0NzZhZTM5YzI5MTBlXCI+X2hhbF9iYWNrZW5kX2RybV9mdW5jczo6c2V0X2NvbW1hbmQ8XC9hPikodm9pZCAqZHJtX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjZ2E3ZjBjMTAyYjk0MmNlYjYxOGEwZjlhNWE3ODBiY2YxOFwiPmhhbF9kcm1fY29tbWFuZF9lPFwvYT4gY29tbWFuZCwgdm9pZCAqdmFsdWUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U2V0cyB0aGUgdmFyaW91cyBjb21tYW5kIGFuZCB2YWx1ZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhODdhNzc1YjFkYWVkZGFlZWM5ZjdiNjdkYjQ3YjYzNDJcIj5faGFsX2JhY2tlbmRfZHJtX2Z1bmNzOjpzZXRfbWVzc2FnZV9jYWxsYmFjazxcL2E+KSh2b2lkICpkcm1faGFuZGxlLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYWM2NDY0MDAyZDdhMTZhNTI5ZGUwYzZiMzcwNmU0Yjk1XCI+aGFsX2RybV9tZXNzYWdlX2NiPFwvYT4gY2FsbGJhY2ssIHZvaWQgKnVzZXJfZGF0YSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5TZXRzIGEgY2FsbGJhY2sgb2YgbWVzc2FnZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNhYTk1MTA0ZWY2YjA5MDAzYjUwMmQ3YTA0ZDZmM2I1ZDdcIj5faGFsX2JhY2tlbmRfZHJtX2Z1bmNzOjpzZXRfcHJvdmlzaW9uaW5nX3Jlc3BvbnNlPFwvYT4pKHZvaWQgKmRybV9oYW5kbGUsIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI3N0cnVjdGhhbF9fZHJtX19kYXRhX19zXCI+aGFsX2RybV9kYXRhX3M8XC9hPiAqcmVzcG9uc2UpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U2V0cyB0aGUgcHJvdmlzaW9uaW5nIHJlc3BvbnNlIG1lc3NhZ2U8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjYWRmMDNlOTcyNmJiNzFlOTFkNDQwNzI3N2YzNDE0N2Q2XCI+X2hhbF9iYWNrZW5kX2RybV9mdW5jczo6c2V0X3NlcnZpY2VfY2VydGlmaWNhdGU8XC9hPikodm9pZCAqZHJtX2hhbmRsZSwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2RhdGFfX3NcIj5oYWxfZHJtX2RhdGFfczxcL2E+ICpjZXJ0aWZpY2F0ZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5TZXRzIHRoZSBzZXJ2aWNlIGNlcnRpZmljYXRlPFwvcD5cbjxociBcLz5cbjxoMiBpZD1cImNvbnRlbnQtdHlwZWRlZi1kb2N1bWVudGF0aW9uXCI+PGEgaHJlZj1cIiNjb250ZW50LXR5cGVkZWYtZG9jdW1lbnRhdGlvblwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+VHlwZWRlZiBEb2N1bWVudGF0aW9uPFwvaDI+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD50eXBlZGVmIHN0cnVjdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RfX2hhbF9fYmFja2VuZF9fZHJtX19mdW5jc1wiPl9oYWxfYmFja2VuZF9kcm1fZnVuY3M8XC9hPiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYWI0NmI4MWU4N2I1M2U5YTlkMzljZWU3M2E4MzI2NzlkXCI+aGFsX2JhY2tlbmRfZHJtX2Z1bmNzPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5UaGUgc3RydWN0dXJlIHR5cGUgb2YgdGhlIERSTSBIQUwgZnVuY3Rpb25zLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0RSTSAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dHlwZWRlZiBzdHJ1Y3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjc3RydWN0aGFsX19kcm1fX2JhdGNoX19jb21tYW5kX19jb250cm9sXCI+aGFsX2RybV9iYXRjaF9jb21tYW5kX2NvbnRyb2w8XC9hPiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYWQwOWI0NDU5MTNhNmEyNmFjMGRjNmM0NmM3MmViZjZlXCI+aGFsX2RybV9iYXRjaF9jb21tYW5kX2NvbnRyb2xfczxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VGhlIHN0cnVjdHVyZSB0eXBlIG9mIGJhdGNoIGNvbW1hbmQuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfRFJNIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD50eXBlZGVmIGVudW0gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjZ2EwN2E4OThiYzNmOWRhMTNkOGNiNWMwMzc4OGI5ZmI5MVwiPmhhbF9kcm1fY2lwaGVyX3BoYXNlPFwvYT4gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjZ2FmMDkwZmE1ZmNjNDQyYTQwOGRmMDZiOWFhYTE1YzRiN1wiPmhhbF9kcm1fY2lwaGVyX3BoYXNlX2U8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkVudW1lcmF0aW9uIGZvciBjaXBoZXIgcGhhc2UuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfRFJNIDEuMDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD50eXBlZGVmIGVudW0gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjZ2FiODQ1YWY4NWI0OWM0YjRlNDY5NTIxZGIzNmVkNmJmN1wiPmhhbF9kcm1fY29tbWFuZDxcL2E+IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhN2YwYzEwMmI5NDJjZWI2MThhMGY5YTVhNzgwYmNmMThcIj5oYWxfZHJtX2NvbW1hbmRfZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+RW51bWVyYXRpb24gZm9yIHRoZSBEUk0gY29tbWFuZC48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9EUk0gMS4wPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnR5cGVkZWYgZW51bSA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYTcxNjc3OWU5YmU3MDZjMzBjNmQxOTNhYWQxMDU1MDYzXCI+aGFsX2RybV9lcnJvcjxcL2E+IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhYjk1Y2E4MTFiZTBkMDRkYmJkYzA5ODA1MTVkYzAwZGNcIj5oYWxfZHJtX2Vycm9yX2U8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkVudW1lcmF0aW9uIGZvciB0aGUgRFJNIGVycm9yLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0RSTSAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dHlwZWRlZiBlbnVtIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhMDRiMzkxMTcyYjAzZTU2YTc4NzJiZTQxY2M5YTc3NmRcIj5oYWxfZHJtX21lZGlhX3R5cGU8XC9hPiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYTE0YTg4NTg4MGI2NGYzMWE2MzA2NmEwMTliYmM4ZjVjXCI+aGFsX2RybV9tZWRpYV90eXBlX2U8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkVudW1lcmF0aW9uIGZvciBlbmNyeXB0ZWQgY29udGVudCBtZWRpYSB0eXBlLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0RSTSAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dHlwZWRlZiBpbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYWM2NDY0MDAyZDdhMTZhNTI5ZGUwYzZiMzcwNmU0Yjk1XCI+aGFsX2RybV9tZXNzYWdlX2NiPFwvYT4pKDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhNjA5ZGE0OGE2N2Q0MzMyZTI3NjZkNDkxYWQwNzVkMzRcIj5oYWxfZHJtX21lc3NhZ2VfczxcL2E+ICptZXNzYWdlLCB2b2lkICp1c2VyX2RhdGEpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+Q2FsbGJhY2sgZnVuY3Rpb24gZm9yIG5vdGlmaWNhdGlvbiBmcm9tIERSTSBIQUwuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfRFJNIDEuMDxcL3A+XG48cD48c3Ryb25nPlBhcmFtZXRlcnM6PFwvc3Ryb25nPlxuOiAgIHwgW2luXSB8IG1lc3NhZ2UgfCBUaGUgbWVzc2FnZSBmcm9tIERSTSBIQUwgfFxufCAtLS0gfCAtLS0gfCAtLS0gfFxufCBbaW5dIHwgdXNlcl9kYXRhIHwgVGhlIHVzZXIgZGF0YSBmb3IgY2FsbGJhY2sgfDxcL3A+XG48cD48c3Ryb25nPlNlZSBhbHNvOjxcL3N0cm9uZz5cbjogICBoYWxfaGFsX2RybV9hZGRfbWVzc2FnZV9jYWxsYmFjaygpXG46ICAgaGFsX2hhbF9kcm1fcmVtb3ZlX21lc3NhZ2VfY2FsbGJhY2soKTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD50eXBlZGVmIHN0cnVjdCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNzdHJ1Y3RoYWxfX2RybV9fbWVzc2FnZVwiPmhhbF9kcm1fbWVzc2FnZTxcL2E+IDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhNjA5ZGE0OGE2N2Q0MzMyZTI3NjZkNDkxYWQwNzVkMzRcIj5oYWxfZHJtX21lc3NhZ2VfczxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+VGhlIHN0cnVjdHVyZSB0eXBlIG9mIHRoZSBEUk0gbWVzc2FnZS48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9EUk0gMS4wPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPnR5cGVkZWYgZW51bSA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYTZiOGQxMDZmYjU3ZjQzNzE0YjQ3OTUyYTI5OGY0YzVkXCI+aGFsX2RybV9tZXNzYWdlX3R5cGU8XC9hPiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYWFhOTZlYzc5NWUzOGQwNWNjZTZiYTI5YTA2Mjk3MzVhXCI+aGFsX2RybV9tZXNzYWdlX3R5cGVfZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+RW51bWVyYXRpb24gZm9yIHRoZSBEUk0gbWVzc2FnZSB0eXBlLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0RSTSAxLjA8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dHlwZWRlZiBlbnVtIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhYjEzMDYwMzM4MjZmOTQ1NGRmMjlkYmE1NGQ3MTY0NzZcIj5oYWxfZHJtX3N0YXRlPFwvYT4gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjZ2E2ZTk4YWNiMDE5MjhkNzZkMTYwMTIzZDMyNTUwYTU4NlwiPmhhbF9kcm1fc3RhdGVfZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+RW51bWVyYXRpb24gZm9yIHRoZSBEUk0gc3RhdGUuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfRFJNIDEuMDxcL3A+XG48aHIgXC8+XG48aDIgaWQ9XCJjb250ZW50LWVudW1lcmF0aW9uLXR5cGUtZG9jdW1lbnRhdGlvblwiPjxhIGhyZWY9XCIjY29udGVudC1lbnVtZXJhdGlvbi10eXBlLWRvY3VtZW50YXRpb25cIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPkVudW1lcmF0aW9uIFR5cGUgRG9jdW1lbnRhdGlvbjxcL2gyPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+ZW51bSA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYTZmNmY3OGNhMGYzNDVkZWI0N2U4OTVlYjM0NzZlNjMwXCI+aGFsX2RybV9jaXBoZXJfYWxnb3JpdGhtX2U8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkVudW1lcmF0aW9uIGZvciBjaXBoZXIgYWxnb3JpdGhtLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0RSTSAxLjA8XC9wPlxuPHA+PHN0cm9uZz5FbnVtZXJhdG9yOjxcL3N0cm9uZz5cbjogICB8IDxlbT5IQUxfRFJNX0NJUEhFUl9SQzQ8XC9lbT4gfCBSaXZlc3QgQ2lwaGVyIDQgc3RyZWFtIGNpcGhlciBhbGdvcml0aG0gfFxufCAtLS0gfCAtLS0gfFxufCA8ZW0+SEFMX0RSTV9DSVBIRVJfQUVTMTI4X0NUUjxcL2VtPiB8IEFFUyhBZHZhbmNlZCBFbmNyeXB0aW9uIFN0YW5kYXJkKSAxMjhiaXQga2V5IHdpdGggQ1RSKENvdW5UZVIpIG9wZXJhdGlvbiBtb2RlIHxcbnwgPGVtPkhBTF9EUk1fQ0lQSEVSX0FFUzEyOF9DQkM8XC9lbT4gfCBBRVMoQWR2YW5jZWQgRW5jcnlwdGlvbiBTdGFuZGFyZCkgMTI4Yml0IGtleSB3aXRoIENCQyhDaXBoZXIgQmxvY2sgQ2hhaW5pbmcpIG9wZXJhdGlvbiBtb2RlIHxcbnwgPGVtPkhBTF9EUk1fQ0lQSEVSX0FFUzEyOF9DQkNfUEtDUzU8XC9lbT4gfCBBRVMoQWR2YW5jZWQgRW5jcnlwdGlvbiBTdGFuZGFyZCkgMTI4Yml0IGtleSB3aXRoIENCQyhDaXBoZXIgQmxvY2sgQ2hhaW5pbmcpIG9wZXJhdGlvbiBtb2RlLCBQS0NTNSBwYWRkaW5nIHw8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+ZW51bSA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYTA3YTg5OGJjM2Y5ZGExM2Q4Y2I1YzAzNzg4YjlmYjkxXCI+aGFsX2RybV9jaXBoZXJfcGhhc2U8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkVudW1lcmF0aW9uIGZvciBjaXBoZXIgcGhhc2UuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfRFJNIDEuMDxcL3A+XG48cD48c3Ryb25nPkVudW1lcmF0b3I6PFwvc3Ryb25nPlxuOiAgIHwgPGVtPkhBTF9EUk1fQ0lQSEVSX1BIQVNFX05PTkU8XC9lbT4gfCBOb25lIHxcbnwgLS0tIHwgLS0tIHxcbnwgPGVtPkhBTF9EUk1fQ0lQSEVSX1BIQVNFX0lOSVQ8XC9lbT4gfCBJbml0aWFsaXplIHBoYXNlIHxcbnwgPGVtPkhBTF9EUk1fQ0lQSEVSX1BIQVNFX1VQREFURTxcL2VtPiB8IFVwZGF0ZSBwaGFzZSB8XG58IDxlbT5IQUxfRFJNX0NJUEhFUl9QSEFTRV9GSU5BTDxcL2VtPiB8IEZpbmFsIHBoYXNlIHw8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+ZW51bSA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYWI4NDVhZjg1YjQ5YzRiNGU0Njk1MjFkYjM2ZWQ2YmY3XCI+aGFsX2RybV9jb21tYW5kPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5FbnVtZXJhdGlvbiBmb3IgdGhlIERSTSBjb21tYW5kLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX0RSTSAxLjA8XC9wPlxuPHA+PHN0cm9uZz5FbnVtZXJhdG9yOjxcL3N0cm9uZz5cbjogICB8IDxlbT5IQUxfRFJNX0NPTU1BTkRfQkFTRTxcL2VtPiB8IEJhc2Ugb2YgY29tbWFuZCB8XG58IC0tLSB8IC0tLSB8XG58IDxlbT5IQUxfRFJNX0NPTU1BTkRfQ1VTVE9NPFwvZW0+IHwgQ3VzdG9tIHw8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+ZW51bSA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYTcxNjc3OWU5YmU3MDZjMzBjNmQxOTNhYWQxMDU1MDYzXCI+aGFsX2RybV9lcnJvcjxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+RW51bWVyYXRpb24gZm9yIHRoZSBEUk0gZXJyb3IuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfRFJNIDEuMDxcL3A+XG48cD48c3Ryb25nPkVudW1lcmF0b3I6PFwvc3Ryb25nPlxuOiAgIHwgPGVtPkhBTF9EUk1fRVJST1JfTk9ORTxcL2VtPiB8IEVycm9yIG5vbmUgfFxufCAtLS0gfCAtLS0gfFxufCA8ZW0+SEFMX0RSTV9FUlJPUl9OT1RfU1VQUE9SVEVEPFwvZW0+IHwgTm90IHN1cHBvcnRlZCB8XG58IDxlbT5IQUxfRFJNX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSPFwvZW0+IHwgSW52YWxpZCBwYXJhbWV0ZXIgfFxufCA8ZW0+SEFMX0RSTV9FUlJPUl9JTlZBTElEX1NUQVRFPFwvZW0+IHwgSW52YWxpZCBzdGF0ZSB8XG58IDxlbT5IQUxfRFJNX0VSUk9SX09VVF9PRl9NRU1PUlk8XC9lbT4gfCBPdXQgb2YgbWVtb3J5IHxcbnwgPGVtPkhBTF9EUk1fRVJST1JfTkVFRF9QUk9WSVNJT05JTkc8XC9lbT4gfCBOZWVkIHRvIGRldmljZSBwcm92aXNpb25pbmcgfFxufCA8ZW0+SEFMX0RSTV9FUlJPUl9ORUVEX0tFWTxcL2VtPiB8IE5lZWQga2V5IHxcbnwgPGVtPkhBTF9EUk1fRVJST1JfVFlQRTxcL2VtPiB8IFR5cGUgZXJyb3IgfFxufCA8ZW0+SEFMX0RSTV9FUlJPUl9JTlRFUk5BTDxcL2VtPiB8IEludGVybmFsIHxcbnwgPGVtPkhBTF9EUk1fRVJST1JfTk9UX0lNUExFTUVOVEVEPFwvZW0+IHwgTm90IGltcGxlbWVudGVkIHxcbnwgPGVtPkhBTF9EUk1fRVJST1JfVU5LTk9XTjxcL2VtPiB8IFVua25vd24gfDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5lbnVtIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhYWZmYjgxMDMzMjJjNWRhODM4MzY1NTNmMTMyMjQzYzdcIj5oYWxfZHJtX2luaXRfZGF0YV90eXBlX2U8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSB0eXBlIG9mIGluaXQgZGF0YSB3aGljaCBpcyB1c2VkIGZvciBnZW5lcmF0aW5nIGxpY2Vuc2UgcmVxdWVzdC48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9EUk0gMS4wPFwvcD5cbjxwPjxzdHJvbmc+RW51bWVyYXRvcjo8XC9zdHJvbmc+XG46ICAgfCA8ZW0+SEFMX0RSTV9JTklUX0RBVEFfVFlQRV9DRU5DPFwvZW0+IHwgQ29tbW9uIGVuY3J5cHRpb24gfFxufCAtLS0gfCAtLS0gfFxufCA8ZW0+SEFMX0RSTV9JTklUX0RBVEFfVFlQRV9LRVlfSURTPFwvZW0+IHwgS2V5IElEcyB8XG58IDxlbT5IQUxfRFJNX0lOSVRfREFUQV9UWVBFX1dFQk08XC9lbT4gfCBXZWJNIHw8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+ZW51bSA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYTczZDJmYTY3NjJhMTE0NWFmMzIyYjIwNzVhYjczNDBiXCI+aGFsX2RybV9rZXlfc3RhdHVzX2U8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlRoZSBzdGF0dXMgb2YgZGVjcnlwdGlvbiBrZXkuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfRFJNIDEuMDxcL3A+XG48cD48c3Ryb25nPkVudW1lcmF0b3I6PFwvc3Ryb25nPlxuOiAgIHwgPGVtPkhBTF9EUk1fS0VZX1NUQVRVU19VU0FCTEU8XC9lbT4gfCBLZXkgaXMgdXNhYmxlIHxcbnwgLS0tIHwgLS0tIHxcbnwgPGVtPkhBTF9EUk1fS0VZX1NUQVRVU19FWFBJUkVEPFwvZW0+IHwgS2V5IGlzIGV4cGlyZWQgfFxufCA8ZW0+SEFMX0RSTV9LRVlfU1RBVFVTX09VVFBVVF9SRVNUUklDVEVEPFwvZW0+IHwgS2V5IGlzIHVzYWJsZSBidXQgb3V0cHV0IHJlc3RyaWN0ZWQgfFxufCA8ZW0+SEFMX0RSTV9LRVlfU1RBVFVTX1BFTkRJTkc8XC9lbT4gfCBLZXkgc3RhdHVzIG5vdCBjbGVhciB8XG58IDxlbT5IQUxfRFJNX0tFWV9TVEFUVVNfRVJST1I8XC9lbT4gfCBLZXkgc3RhdHVzIGludGVybmFsIGVycm9yIHxcbnwgPGVtPkhBTF9EUk1fS0VZX1NUQVRVU19SRUxFQVNFRDxcL2VtPiB8IEtleSBpcyByZWxlYXNlZCB8PFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmVudW0gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjZ2EwNGIzOTExNzJiMDNlNTZhNzg3MmJlNDFjYzlhNzc2ZFwiPmhhbF9kcm1fbWVkaWFfdHlwZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+RW51bWVyYXRpb24gZm9yIGVuY3J5cHRlZCBjb250ZW50IG1lZGlhIHR5cGUuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfRFJNIDEuMDxcL3A+XG48cD48c3Ryb25nPkVudW1lcmF0b3I6PFwvc3Ryb25nPlxuOiAgIHwgPGVtPkhBTF9EUk1fTUVESUFfVFlQRV9OT05FPFwvZW0+IHwgTm9uZSB8XG58IC0tLSB8IC0tLSB8XG58IDxlbT5IQUxfRFJNX01FRElBX1RZUEVfRk1QNDxcL2VtPiB8IEZNUDQoRnJhZ21lbnRlZCBNUDQpIHxcbnwgPGVtPkhBTF9EUk1fTUVESUFfVFlQRV9UUzxcL2VtPiB8IFRTKFRyYW5zcG9ydCBTdHJlYW0pIHxcbnwgPGVtPkhBTF9EUk1fTUVESUFfVFlQRV9BU0Y8XC9lbT4gfCBBU0YoQWR2YW5jZWQgU3lzdGVtcyBGb3JtYXQpIHxcbnwgPGVtPkhBTF9EUk1fTUVESUFfVFlQRV9GTVA0X0FVRElPPFwvZW0+IHwgRk1QNCBBdWRpbyB8XG58IDxlbT5IQUxfRFJNX01FRElBX1RZUEVfRk1QNF9WSURFTzxcL2VtPiB8IEZNUDQgVmlkZW8gfFxufCA8ZW0+SEFMX0RSTV9NRURJQV9UWVBFX0NMRUFOX0FVRElPPFwvZW0+IHwgQ2xlYW4gQXVkaW8gRGF0YSB8XG58IDxlbT5IQUxfRFJNX01FRElBX1RZUEVfUEVTPFwvZW0+IHwgUGFja2V0aXplZCBFUyhFbGVtZW50YXJ5IFN0cmVhbSkgUGF5bG9hZCB8PFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmVudW0gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUubWQjZ2E2YjhkMTA2ZmI1N2Y0MzcxNGI0Nzk1MmEyOThmNGM1ZFwiPmhhbF9kcm1fbWVzc2FnZV90eXBlPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5FbnVtZXJhdGlvbiBmb3IgdGhlIERSTSBtZXNzYWdlIHR5cGUuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfRFJNIDEuMDxcL3A+XG48cD48c3Ryb25nPkVudW1lcmF0b3I6PFwvc3Ryb25nPlxuOiAgIHwgPGVtPkhBTF9EUk1fTUVTU0FHRV9UWVBFX0xJQ0VOU0VfUkVRVUVTVF9HRU5FUkFURUQ8XC9lbT4gfCBEUk0gbGljZW5zZSByZXF1ZXN0IG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIHxcbnwgLS0tIHwgLS0tIHxcbnwgPGVtPkhBTF9EUk1fTUVTU0FHRV9UWVBFX0tFWV9TVEFUVVNfQ0hBTkdFRDxcL2VtPiB8IERSTSBrZXkgc3RhdHVzIGlzIGNoYW5nZWQgfFxufCA8ZW0+SEFMX0RSTV9NRVNTQUdFX1RZUEVfRVJST1I8XC9lbT4gfCBUaGUgZXJyb3IgfDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5lbnVtIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX0RSTV9fTU9EVUxFLm1kI2dhMjNhMmMxODRiZmMwM2QxZjI5ZjQ5YTAxYWY4MjkzZGFcIj5oYWxfZHJtX3Nlc3Npb25fdHlwZV9lPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5UaGUgdHlwZSBvZiBEUk0gc2Vzc2lvbi48XC9wPlxuPHA+PHN0cm9uZz5TaW5jZTo8XC9zdHJvbmc+XG46ICAgSEFMX01PRFVMRV9EUk0gMS4wPFwvcD5cbjxwPjxzdHJvbmc+RW51bWVyYXRvcjo8XC9zdHJvbmc+XG46ICAgfCA8ZW0+SEFMX0RSTV9TRVNTSU9OX1RZUEVfVEVNUE9SQVJZPFwvZW0+IHwgVGVtcG9yYXJ5IHxcbnwgLS0tIHwgLS0tIHxcbnwgPGVtPkhBTF9EUk1fU0VTU0lPTl9UWVBFX1BFUlNJU1RFTlRfTElDRU5TRTxcL2VtPiB8IFBlcnNpc3RlbnQgbGljZW5zZSB8XG58IDxlbT5IQUxfRFJNX1NFU1NJT05fVFlQRV9QRVJTSVNURU5UX1VTQUdFX1JFQ09SRDxcL2VtPiB8IFBlcnNpc3RlbnQgdXNhZ2UgcmVjb3JkIHw8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+ZW51bSA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19EUk1fX01PRFVMRS5tZCNnYWIxMzA2MDMzODI2Zjk0NTRkZjI5ZGJhNTRkNzE2NDc2XCI+aGFsX2RybV9zdGF0ZTxcL2E+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+RW51bWVyYXRpb24gZm9yIHRoZSBEUk0gc3RhdGUuPFwvcD5cbjxwPjxzdHJvbmc+U2luY2U6PFwvc3Ryb25nPlxuOiAgIEhBTF9NT0RVTEVfRFJNIDEuMDxcL3A+XG48cD48c3Ryb25nPkVudW1lcmF0b3I6PFwvc3Ryb25nPlxuOiAgIHwgPGVtPkhBTF9EUk1fU1RBVEVfTk9ORTxcL2VtPiB8IE5vbmUgc3RhdGUgfFxufCAtLS0gfCAtLS0gfFxufCA8ZW0+SEFMX0RSTV9TVEFURV9JTklUSUFMSVpFRDxcL2VtPiB8IEluaXRpYWxpemVkIHN0YXRlIGZvciBEUk0gZGV2aWNlIHxcbnwgPGVtPkhBTF9EUk1fU1RBVEVfU0VTU0lPTl9DUkVBVEVEPFwvZW0+IHwgQ3JlYXRlZCBzZXNzaW9uIHN0YXRlIGZvciBEUk0gZGV2aWNlIHw8XC9wPlxuPGhyIFwvPlxuPHA+RXhjZXB0IGFzIG5vdGVkLCB0aGlzIGNvbnRlbnQgLSBleGNsdWRpbmcgdGhlIENvZGUgRXhhbXBsZXMgLSBpcyBsaWNlbnNlZCB1bmRlciA8YSBocmVmPVwiaHR0cDpcL1wvY3JlYXRpdmVjb21tb25zLm9yZ1wvbGljZW5zZXNcL2J5XC8zLjBcL2xlZ2FsY29kZVwiPkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gMy4wPFwvYT5cbmFuZCBhbGwgb2YgdGhlIENvZGUgRXhhbXBsZXMgY29udGFpbmVkIGhlcmVpbiBhcmUgbGljZW5zZWQgdW5kZXIgPGEgaHJlZj1cImh0dHBzOlwvXC93d3cudGl6ZW4ub3JnXC9ic2QtMy1jbGF1c2UtbGljZW5zZVwiPkJTRC0zLUNsYXVzZTxcL2E+LjxiciBcLz5cbkZvciBkZXRhaWxzLCBzZWUgdGhlIDxhIGhyZWY9XCJodHRwczpcL1wvd3d3LnRpemVuLm9yZ1wvY29udGVudC1saWNlbnNlXCI+Q29udGVudCBMaWNlbnNlPFwvYT4uPFwvcD5cbiIsInRhYmxlX29mX2NvbnRlbnQiOiI8dWwgY2xhc3M9XCJ0YWJsZS1vZi1jb250ZW50c1wiPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1yZXF1aXJlZC1oZWFkZXJcIj5SZXF1aXJlZCBIZWFkZXI8XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1vdmVydmlld1wiPk92ZXJ2aWV3PFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtc3RhdGUtZGlhZ3JhbVwiPlN0YXRlIERpYWdyYW08XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1zdGF0ZS10cmFuc2l0aW9uc1wiPlN0YXRlIFRyYW5zaXRpb25zPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtZGF0YS1zdHJ1Y3R1cmUtZG9jdW1lbnRhdGlvblwiPkRhdGEgU3RydWN0dXJlIERvY3VtZW50YXRpb248XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uXCI+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tMVwiPkZpZWxkIERvY3VtZW50YXRpb248XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTJcIj5GaWVsZCBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi0zXCI+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tNFwiPkZpZWxkIERvY3VtZW50YXRpb248XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLTVcIj5GaWVsZCBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi02XCI+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tN1wiPkZpZWxkIERvY3VtZW50YXRpb248XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1maWVsZC1kb2N1bWVudGF0aW9uLThcIj5GaWVsZCBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvbi05XCI+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb24tMTBcIj5GaWVsZCBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtdHlwZWRlZi1kb2N1bWVudGF0aW9uXCI+VHlwZWRlZiBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtZW51bWVyYXRpb24tdHlwZS1kb2N1bWVudGF0aW9uXCI+RW51bWVyYXRpb24gVHlwZSBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxcL3VsPlxuIiwidGl0bGUiOiJUaXplbiBIQUwgQVBJOiBEUk0iLCJyYXciOm51bGx9LHsiY2xhc3MiOiJBcHBcXFNlcnZpY2VzXFxEb2N1bWVudGF0aW9uXFxEYXRhXFxSZW5kZXJlZE1hcmtkb3duIiwicyI6IndyYmwifV19LHsicyI6ImFyciJ9XX0sIm1lbW8iOnsiaWQiOiJyZjNDMHBLN1FrYkpoVGFQTWxHUyIsIm5hbWUiOiJfX21vdW50UGFyYW1zQ29udGFpbmVyIiwicGF0aCI6ImRvY3NcL3BsYXRmb3JtXC9oYWxcL2FwaVwvMS4wLjBcL2dyb3VwX19IQUxBUElfX0hBTF9fRFJNX19NT0RVTEUiLCJtZXRob2QiOiJHRVQiLCJyZWxlYXNlIjoiYS1hLWEifSwiY2hlY2tzdW0iOiJhMzE3OGEzNmQ3MGM2Mzg5NGI3MDZmMTVlMzZkZTU2MzkxYmQ2MTIzMTFjODEzYjIwYjY5YzI5MWM4MjcxN2QwIn0=')" >

For the best experience,
Please visit us from a computer

Copyright © 2026 SAMSUNG. All rights reserved.

Customize your cookie preferences

You can enable or disable non-essential cookies. Essential cookies are always on to ensure the site works properly and to keep you signed in.

Necessary

These cookies are necessary for the website to function properly and cannot be switched off. They help with things like logging in and setting your privacy preferences.

Always on

Analytics

These cookies help us improve the site by tracking which pages are most popular and how visitors move around the site.

Enable analytics cookies
Public Forum Public Forum
Employees only. Please sign in with your company account.