From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 81D3F46611 for ; Fri, 26 May 2023 12:19:45 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D08A968C123; Fri, 26 May 2023 15:19:41 +0300 (EEST) Received: from smtp.tiscali.it (michael-notr.mail.tiscali.it [213.205.33.216]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 03F1D68BA7B for ; Fri, 26 May 2023 15:19:34 +0300 (EEST) Received: from [192.168.20.100] ([95.243.137.154]) by michael.mail.tiscali.it with id 1QKY2A01X3L3PKz01QKYeW; Fri, 26 May 2023 12:19:33 +0000 X-Spam-Final-Verdict: clean X-Spam-State: 0 X-Spam-Score: 0 X-Spam-Verdict: clean x-auth-user: klimklim@tiscali.it Content-Type: multipart/mixed; boundary="------------m2rq341R7iyzE47iZEyWRv7E" Message-ID: Date: Fri, 26 May 2023 14:19:31 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Content-Language: it, en-US To: ffmpeg-devel@ffmpeg.org References: <8d713a21-f2f0-5c8d-fa93-0278965509e5@tiscali.it> <47ee718c-bce0-cffa-9c6a-2889a6547017@tiscali.it> <9ae25c06-73ce-f3b6-7a29-3dd8e3e530c3@tiscali.it> <167898554590.31370.14710235662474104045@lain.khirnov.net> <6ff579f4-dbed-5d62-a72c-96a2b9a18aef@tiscali.it> From: Francesco Carusi In-Reply-To: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tiscali.it; s=smtp; t=1685103574; bh=N1lMHw1NBMit3EdPSkkaC1OL06Q/LygmpMDZYyCdyxc=; h=Date:Subject:To:References:From:In-Reply-To; b=V4lIRzQvORrt4i34nfN1TBl+XQrWoQlccv4XMU1+32SSya4HHEr9500V+XqmgdZTf jTZgpux5Wi3RN7g1ZWAiz0w07qSUNbnaMcyQ1odTxrSWxPVQrcvVRxHjiJcNxIU3jw 8CsASoIWTMlu2lMA4lpMrwC2LmAMlocZ03WXKvsM= Subject: Re: [FFmpeg-devel] drawtext filter X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: This is a multi-part message in MIME format. --------------m2rq341R7iyzE47iZEyWRv7E Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit I added a patch specifically to include cosmetic changes. I also removed the change log section, the forward declarations and improved error checking. The changes to the configure file are in a dedicated patch (the last one: 0009). On 20/03/2023 09:50, Paul B Mahol wrote: > On Mon, Mar 20, 2023 at 8:41 AM Francesco Carusi > wrote: > >> Would it be ok if I split the patch so that one is dedicated to >> cosmetics and one to the implementation? >> I'll also remove the change log section and the forward declarations and >> improve the error checking. >> > Yes split it. > > > Note that reviewers here tend to review only after big time passes and are > usually nitpicking all the time. > > >> On 16/03/2023 17:52, Anton Khirnov wrote: >>> Overall this patch could use a lot more polish. I really wish you >>> developed it in a more review-friendly form. >>> The commit message should use standard form and elaborate on what >>> advantage do we get from this huge change, which also adds a new >>> dependendency. >>> >>> >>> Quoting Francesco Carusi (2023-02-03 15:18:21) >>>> diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c >>>> index 50012bb258..7a0a255c5e 100644 >>>> --- a/libavfilter/vf_drawtext.c >>>> +++ b/libavfilter/vf_drawtext.c >>> You are adding a bunch of trailing whitespace in the file, which is >>> forbidden. >>> >>>> @@ -1,4 +1,5 @@ >>>> /* >>>> + * Copyright (c) 2023 Francesco Carusi >>>> * Copyright (c) 2011 Stefano Sabatini >>>> * Copyright (c) 2010 S.N. Hemanth Meenakshisundaram >>>> * Copyright (c) 2003 Gustavo Sverzut Barbieri < >> gsbarbieri@yahoo.com.br> >>>> @@ -20,6 +21,14 @@ >>>> * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA >> 02110-1301 USA >>>> */ >>>> >>>> +/* >>>> + * Changelog - 2023 >>>> + * >>>> + * - This filter now depends on libharfbuzz for text shaping. >>>> + * - Glyphs position is now accurate to 1/4 pixel in both directions >>>> + * - The default line height is now the one defined in the font >>>> + */ >>> This is not the place for a changelog, that's what commit messages and >>> the Changelog file are for. >>> >>>> + >>>> /** >>>> * @file >>>> * drawtext filter, based on the original vhook/drawtext.c >>>> @@ -72,14 +81,20 @@ >>>> #include FT_GLYPH_H >>>> #include FT_STROKER_H >>>> >>>> +#include >>>> +#include >>>> + >>>> +// Ceiling operation for positive integers division >>>> +#define POS_CEIL(x, y) ((x)/(y) + ((x)%(y) != 0)) >>>> + >>>> static const char *const var_names[] = { >>>> "dar", >>>> "hsub", "vsub", >>>> - "line_h", "lh", ///< line height, same as max_glyph_h >>>> + "line_h", "lh", ///< line height >>>> "main_h", "h", "H", ///< height of the input video >>>> "main_w", "w", "W", ///< width of the input video >>>> - "max_glyph_a", "ascent", ///< max glyph ascent >>>> - "max_glyph_d", "descent", ///< min glyph descent >>>> + "max_glyph_a", "ascent", ///< max glyph ascender >>>> + "max_glyph_d", "descent", ///< min glyph descender >>> Seems like this should not be in this patch. >>> >>>> static const AVOption drawtext_options[]= { >>>> - {"fontfile", "set font file", OFFSET(fontfile), >> AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS}, >>>> - {"text", "set text", OFFSET(text), >> AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS}, >>>> - {"textfile", "set text file", OFFSET(textfile), >> AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS}, >>>> - {"fontcolor", "set foreground color", OFFSET(fontcolor.rgba), >> AV_OPT_TYPE_COLOR, {.str="black"}, 0, 0, FLAGS}, >>>> + {"fontfile", "set font file", OFFSET(fontfile), >> AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS}, >>>> + {"text", "set text", OFFSET(text), >> AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS}, >>>> + {"textfile", "set text file", OFFSET(textfile), >> AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS}, >>>> + {"fontcolor", "set foreground color", >> OFFSET(fontcolor.rgba), AV_OPT_TYPE_COLOR, {.str="black"}, 0, 0, >> FLAGS}, >>>> {"fontcolor_expr", "set foreground color expression", >> OFFSET(fontcolor_expr), AV_OPT_TYPE_STRING, {.str=""}, 0, 0, FLAGS}, >>>> - {"boxcolor", "set box color", OFFSET(boxcolor.rgba), >> AV_OPT_TYPE_COLOR, {.str="white"}, 0, 0, FLAGS}, >>>> - {"bordercolor", "set border color", OFFSET(bordercolor.rgba), >> AV_OPT_TYPE_COLOR, {.str="black"}, 0, 0, FLAGS}, >>>> - {"shadowcolor", "set shadow color", OFFSET(shadowcolor.rgba), >> AV_OPT_TYPE_COLOR, {.str="black"}, 0, 0, FLAGS}, >>>> - {"box", "set box", OFFSET(draw_box), >> AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1 , FLAGS}, >>>> - {"boxborderw", "set box border width", OFFSET(boxborderw), >> AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX , FLAGS}, >>>> - {"line_spacing", "set line spacing in pixels", >> OFFSET(line_spacing), AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, >> INT_MAX,FLAGS}, >>>> - {"fontsize", "set font size", OFFSET(fontsize_expr), >> AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0 , FLAGS}, >>>> - {"x", "set x expression", OFFSET(x_expr), >> AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS}, >>>> - {"y", "set y expression", OFFSET(y_expr), >> AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS}, >>>> - {"shadowx", "set shadow x offset", OFFSET(shadowx), >> AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX , FLAGS}, >>>> - {"shadowy", "set shadow y offset", OFFSET(shadowy), >> AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX , FLAGS}, >>>> - {"borderw", "set border width", OFFSET(borderw), >> AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX , FLAGS}, >>>> - {"tabsize", "set tab size", OFFSET(tabsize), >> AV_OPT_TYPE_INT, {.i64=4}, 0, INT_MAX , FLAGS}, >>>> - {"basetime", "set base time", OFFSET(basetime), >> AV_OPT_TYPE_INT64, {.i64=AV_NOPTS_VALUE}, INT64_MIN, INT64_MAX , FLAGS}, >>>> + {"boxcolor", "set box color", >> OFFSET(boxcolor.rgba), AV_OPT_TYPE_COLOR, {.str="white"}, 0, 0, >> FLAGS}, >>>> + {"bordercolor", "set border color", >> OFFSET(bordercolor.rgba), AV_OPT_TYPE_COLOR, {.str="black"}, 0, 0, >> FLAGS}, >>>> + {"shadowcolor", "set shadow color", >> OFFSET(shadowcolor.rgba), AV_OPT_TYPE_COLOR, {.str="black"}, 0, 0, >> FLAGS}, >>>> + {"box", "set box", OFFSET(draw_box), >> AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, >>>> + {"boxborderw", "set box borders width", OFFSET(boxborderw), >> AV_OPT_TYPE_INT, {.i64=0}, 0, INT_MAX, FLAGS}, >>>> + {"line_spacing", "set line spacing in pixels", >> OFFSET(line_spacing), AV_OPT_TYPE_INT, {.i64=-1}, INT_MIN, INT_MAX, >> FLAGS}, >>>> + {"fontsize", "set font size", >> OFFSET(fontsize_expr), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS}, >>>> + {"x", "set x expression", OFFSET(x_expr), >> AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS}, >>>> + {"y", "set y expression", OFFSET(y_expr), >> AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS}, >>>> + {"shadowx", "set shadow x offset", OFFSET(shadowx), >> AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX, FLAGS}, >>>> + {"shadowy", "set shadow y offset", OFFSET(shadowy), >> AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX, FLAGS}, >>>> + {"borderw", "set border width", OFFSET(borderw), >> AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX, FLAGS}, >>>> + {"tabsize", "set tab size", OFFSET(tabsize), >> AV_OPT_TYPE_INT, {.i64=4}, 0, INT_MAX, FLAGS}, >>>> + {"basetime", "set base time", OFFSET(basetime), >> AV_OPT_TYPE_INT64, {.i64=AV_NOPTS_VALUE}, INT64_MIN, INT64_MAX, >> FLAGS}, >>>> #if CONFIG_LIBFONTCONFIG >>>> { "font", "Font name", OFFSET(font), >> AV_OPT_TYPE_STRING, { .str = "Sans" }, .flags = FLAGS }, >>>> #endif >>>> @@ -248,15 +338,15 @@ static const AVOption drawtext_options[]= { >>>> {"strftime", "set strftime expansion (deprecated)", >> OFFSET(exp_mode), AV_OPT_TYPE_CONST, {.i64=EXP_STRFTIME}, 0, 0, FLAGS, >> "expansion"}, >>>> {"timecode", "set initial timecode", >> OFFSET(tc_opt_string), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS}, >>>> - {"tc24hmax", "set 24 hours max (timecode only)", >> OFFSET(tc24hmax), AV_OPT_TYPE_BOOL, {.i64=0}, 0, >> 1, FLAGS}, >>>> - {"timecode_rate", "set rate (timecode only)", >> OFFSET(tc_rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, >> INT_MAX, FLAGS}, >>>> - {"r", "set rate (timecode only)", >> OFFSET(tc_rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, >> INT_MAX, FLAGS}, >>>> - {"rate", "set rate (timecode only)", >> OFFSET(tc_rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, >> INT_MAX, FLAGS}, >>>> - {"reload", "reload text file at specified frame interval", >> OFFSET(reload), AV_OPT_TYPE_INT, {.i64=0}, 0, INT_MAX, FLAGS}, >>>> - { "alpha", "apply alpha while rendering", OFFSET(a_expr), >> AV_OPT_TYPE_STRING, { .str = "1" }, .flags = FLAGS }, >>>> - {"fix_bounds", "check and fix text coords to avoid clipping", >> OFFSET(fix_bounds), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, >>>> - {"start_number", "start frame number for n/frame_num variable", >> OFFSET(start_number), AV_OPT_TYPE_INT, {.i64=0}, 0, INT_MAX, FLAGS}, >>>> - {"text_source", "the source of text", OFFSET(text_source_string), >> AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS }, >>>> + {"tc24hmax", "set 24 hours max (timecode only)", >> OFFSET(tc24hmax), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, >>>> + {"timecode_rate", "set rate (timecode only)", >> OFFSET(tc_rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX, >> FLAGS}, >>>> + {"r", "set rate (timecode only)", >> OFFSET(tc_rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX, >> FLAGS}, >>>> + {"rate", "set rate (timecode only)", >> OFFSET(tc_rate), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX, >> FLAGS}, >>>> + {"reload", "reload text file at specified frame >> interval", OFFSET(reload), AV_OPT_TYPE_INT, {.i64=0}, 0, INT_MAX, FLAGS}, >>>> + {"alpha", "apply alpha while rendering", >> OFFSET(a_expr), AV_OPT_TYPE_STRING, {.str = "1"}, .flags = FLAGS}, >>>> + {"fix_bounds", "check and fix text coords to avoid clipping", >> OFFSET(fix_bounds), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, >>>> + {"start_number", "start frame number for n/frame_num variable", >> OFFSET(start_number), AV_OPT_TYPE_INT, {.i64=0}, 0, INT_MAX, FLAGS}, >>>> + {"text_source", "the source of text", >> OFFSET(text_source_string), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS }, >>> Most of these changes seem cosmetic, they do not belong in this patch. >>> >>>> #if CONFIG_LIBFRIBIDI >>>> {"text_shaping", "attempt to shape text before drawing", >> OFFSET(text_shaping), AV_OPT_TYPE_BOOL, {.i64=1}, 0, 1, FLAGS}, >>>> @@ -297,18 +387,24 @@ static const struct ft_error { >>>> >>>> #define FT_ERRMSG(e) ft_errors[e].err_msg >>>> >>>> -typedef struct Glyph { >>>> - FT_Glyph glyph; >>>> - FT_Glyph border_glyph; >>>> - uint32_t code; >>>> - unsigned int fontsize; >>>> - FT_Bitmap bitmap; ///< array holding bitmaps of font >>>> - FT_Bitmap border_bitmap; ///< array holding bitmaps of font border >>>> - FT_BBox bbox; >>>> - int advance; >>>> - int bitmap_left; >>>> - int bitmap_top; >>>> -} Glyph; >>>> + >>>> +// Loads and (optionally) renders a glyph >>>> +static int load_glyph(AVFilterContext *ctx, Glyph **glyph_ptr, >> uint32_t code, >>>> + int8_t shift_x64, int8_t shift_y64); >>>> + >>>> +// Shapes a line of text using libharfbuzz >>>> +static void shape_text_hb(DrawTextContext *s, HarfbuzzData* hb, const >> char* text, int textLen); >>>> + >>>> +// Performs text measurements >>>> +static int measure_text(AVFilterContext *ctx, TextMetrics *metrics); >>>> + >>>> +// Draws glyphs on the frame >>>> +static int draw_glyphs(DrawTextContext *s, AVFrame *frame, >>>> + FFDrawColor *color, TextMetrics *metrics, >>>> + int x, int y, int borderw); >>>> + >>>> +// Draws text on the frame >>>> +static int draw_text(AVFilterContext *ctx, AVFrame *frame); >>> Why is there a need for forward declarations? >>> >>>> static int glyph_cmp(const void *key, const void *b) >>>> { >>>> @@ -316,80 +412,9 @@ static int glyph_cmp(const void *key, const void >> *b) >>>> int64_t diff = (int64_t)a->code - (int64_t)bb->code; >>>> >>>> if (diff != 0) >>>> - return diff > 0 ? 1 : -1; >>>> + return diff > 0 ? 1 : -1; >>> unrelated cosmetics >>> >>>> @@ -439,7 +464,6 @@ static av_cold int update_fontsize(AVFilterContext >> *ctx) >>>> return err; >>>> >>>> size = av_expr_eval(s->fontsize_pexpr, s->var_values, >> &s->prng); >>>> - >>> unrelated cosmetics >>> >>>> if (!isnan(size)) { >>>> roundedsize = round(size); >>>> // test for overflow before cast >>>> @@ -447,7 +471,6 @@ static av_cold int update_fontsize(AVFilterContext >> *ctx) >>>> av_log(ctx, AV_LOG_ERROR, "fontsize overflow\n"); >>>> return AVERROR(EINVAL); >>>> } >>>> - >>> unrelated cosmetics >>> >>>> fontsize = roundedsize; >>>> } >>>> } >>>> @@ -548,7 +571,7 @@ static int load_font_fontconfig(AVFilterContext >> *ctx) >>>> goto fail; >>>> } >>>> >>>> - av_log(ctx, AV_LOG_INFO, "Using \"%s\"\n", filename); >>>> + av_log(ctx, AV_LOG_VERBOSE, "Using \"%s\"\n", filename); >>> unrelated cosmetics >>> >>>> if (parse_err) >>>> s->default_fontsize = size + 0.5; >>>> >>>> @@ -690,6 +713,7 @@ static int shape_text(AVFilterContext *ctx) >>>> s->text = tmp; >>>> len = fribidi_unicode_to_charset(FRIBIDI_CHAR_SET_UTF8, >>>> unicodestr, len, s->text); >>>> + >>> unrelated cosmetics >>> >>>> +static void shape_text_hb(DrawTextContext *s, HarfbuzzData* hb, const >> char* text, int textLen) >>>> +{ >>>> + hb->buf = hb_buffer_create(); >>> Seems like it at least this needs to be checked for errors, maybe some >>> of the other calls too. >>> >>>> @@ -1559,56 +1795,142 @@ continue_on_invalid2: >>>> update_color_with_alpha(s, &bordercolor, s->bordercolor); >>>> update_color_with_alpha(s, &boxcolor , s->boxcolor ); >>>> >>>> - box_w = max_text_line_w; >>>> - box_h = y + s->max_glyph_h; >>>> + if (s->draw_box && s->boxborderw) { >>>> + s->bb_top = s->bb_right = s->bb_bottom = s->bb_left = >> s->boxborderw; >>>> + } else { >>>> + s->bb_top = s->bb_right = s->bb_bottom = s->bb_left = 0; >>>> + } >>>> >>>> if (s->fix_bounds) { >>>> - >>>> /* calculate footprint of text effects */ >>>> - int boxoffset = s->draw_box ? FFMAX(s->boxborderw, 0) : 0; >>>> int borderoffset = s->borderw ? FFMAX(s->borderw, 0) : 0; >>>> >>>> - int offsetleft = FFMAX3(boxoffset, borderoffset, >>>> + int offsetleft = FFMAX3(FFMAX(s->bb_left, 0), borderoffset, >>>> (s->shadowx < 0 ? FFABS(s->shadowx) : >> 0)); >>>> - int offsettop = FFMAX3(boxoffset, borderoffset, >>>> + int offsettop = FFMAX3(FFMAX(s->bb_top, 0), borderoffset, >>>> (s->shadowy < 0 ? FFABS(s->shadowy) : >> 0)); >>>> - >>>> - int offsetright = FFMAX3(boxoffset, borderoffset, >>>> + int offsetright = FFMAX3(FFMAX(s->bb_right, 0), borderoffset, >>>> (s->shadowx > 0 ? s->shadowx : 0)); >>>> - int offsetbottom = FFMAX3(boxoffset, borderoffset, >>>> + int offsetbottom = FFMAX3(FFMAX(s->bb_bottom, 0), borderoffset, >>>> (s->shadowy > 0 ? s->shadowy : 0)); >>>> >>>> - >>>> if (s->x - offsetleft < 0) s->x = offsetleft; >>>> if (s->y - offsettop < 0) s->y = offsettop; >>>> >>>> - if (s->x + box_w + offsetright > width) >>>> - s->x = FFMAX(width - box_w - offsetright, 0); >>>> - if (s->y + box_h + offsetbottom > height) >>>> - s->y = FFMAX(height - box_h - offsetbottom, 0); >>>> + if (s->x + metrics.width + offsetright > width) >>>> + s->x = FFMAX(width - metrics.width - offsetright, 0); >>>> + if (s->y + metrics.height + offsetbottom > height) >>>> + s->y = FFMAX(height - metrics.height - offsetbottom, 0); >>>> } >>>> >>>> - /* draw box */ >>>> - if (s->draw_box) >>>> - ff_blend_rectangle(&s->dc, &boxcolor, >>>> - frame->data, frame->linesize, width, height, >>>> - s->x - s->boxborderw, s->y - s->boxborderw, >>>> - box_w + s->boxborderw * 2, box_h + >> s->boxborderw * 2); >>>> + x = 0; >>>> + y = 0; >>>> + x64 = (int)(s->x * 64.); >>>> + y64 = (int)(s->y * 64. + metrics.offset_top64); >>>> + >>>> + for (int l = 0; l < s->line_count; ++l) { >>>> + TextLine *line = &s->lines[l]; >>>> + HarfbuzzData *hb = &line->hb_data; >>>> + line->glyphs = av_mallocz(hb->glyph_count * sizeof(GlyphInfo)); >>>> + >>>> + for (int t = 0; t < hb->glyph_count; ++t) { >>>> + GlyphInfo *g_info = &line->glyphs[t]; >>>> + uint8_t is_tab = last_tab_idx < s->tab_count && >>>> + hb->glyph_info[t].cluster == >> s->tab_clusters[last_tab_idx] - line->cluster_offset; >>>> + int true_x, true_y; >>>> + if (is_tab) { >>>> + ++last_tab_idx; >>>> + } >>>> + true_x = x + hb->glyph_pos[t].x_offset; >>>> + true_y = y + hb->glyph_pos[t].y_offset; >>>> + shift_x64 = (((x64 + true_x) >> 4) & 0b0011) << 4; >>>> + shift_y64 = ((4 - (((y64 + true_y) >> 4) & 0b0011)) & >> 0b0011) << 4; >>>> + >>>> + ret = load_glyph(ctx, &glyph, hb->glyph_info[t].codepoint, >> shift_x64, shift_y64); >>>> + if (ret != 0) { >>>> + return ret; >>>> + } >>>> + g_info->code = hb->glyph_info[t].codepoint; >>>> + g_info->x = (x64 + true_x) >> 6; >>>> + g_info->y = ((y64 + true_y) >> 6) + (shift_y64 > 0 ? 1 : >> 0); >>>> + g_info->shift_x64 = shift_x64; >>>> + g_info->shift_y64 = shift_y64; >>>> + >>>> + if (!is_tab) { >>>> + x += hb->glyph_pos[t].x_advance; >>>> + } else { >>>> + int size = s->blank_advance64 * s->tabsize; >>>> + x = (x / size + 1) * size; >>>> + } >>>> + y += hb->glyph_pos[t].y_advance; >>>> + } >>>> >>>> - if (s->shadowx || s->shadowy) { >>>> - if ((ret = draw_glyphs(s, frame, width, height, >>>> - &shadowcolor, s->shadowx, s->shadowy, >> 0)) < 0) >>>> - return ret; >>>> + y += metrics.line_height64 + s->line_spacing * 64; >>>> + x = 0; >>>> } >>>> >>>> - if (s->borderw) { >>>> - if ((ret = draw_glyphs(s, frame, width, height, >>>> - &bordercolor, 0, 0, s->borderw)) < 0) >>>> + metrics.rect_x = s->x; >>>> + metrics.rect_y = s->y; >>>> + >>>> + s->box_width = metrics.width; >>>> + s->box_height = metrics.height; >>> What is the point of duplicating these values in both structs? >>> >>> >> _______________________________________________ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org >> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> >> To unsubscribe, visit link above, or email >> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". >> > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --------------m2rq341R7iyzE47iZEyWRv7E Content-Type: text/plain; charset=UTF-8; name="0001-cosmetics.patch" Content-Disposition: attachment; filename="0001-cosmetics.patch" Content-Transfer-Encoding: base64 RnJvbSA5MGM0YTlkODE3Y2E3MmVlM2M1ZDEyYmE1MjExMDc5ZDNkNDk3YmU1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB5ZXRoaWUgPGtsaW1rbGltQHRpc2NhbGkuaXQ+CkRh dGU6IE1vbiwgMTUgTWF5IDIwMjMgMTc6MDA6MzAgKzAyMDAKU3ViamVjdDogW1BBVENIIDEv OV0gY29zbWV0aWNzCgotLS0KIGxpYmF2ZmlsdGVyL3ZmX2RyYXd0ZXh0LmMgfCA4OSArKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA0 NCBpbnNlcnRpb25zKCspLCA0NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWJhdmZp bHRlci92Zl9kcmF3dGV4dC5jIGIvbGliYXZmaWx0ZXIvdmZfZHJhd3RleHQuYwppbmRleCA3 MWFiODUxNDYyLi4wYzRkYjNlYzUzIDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci92Zl9kcmF3 dGV4dC5jCisrKyBiL2xpYmF2ZmlsdGVyL3ZmX2RyYXd0ZXh0LmMKQEAgLTc4LDggKzc4LDgg QEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHZhcl9uYW1lc1tdID0gewogICAgICJsaW5l X2giLCAibGgiLCAgICAgICAgICAgLy8vPCBsaW5lIGhlaWdodCwgc2FtZSBhcyBtYXhfZ2x5 cGhfaAogICAgICJtYWluX2giLCAiaCIsICJIIiwgICAgICAgLy8vPCBoZWlnaHQgb2YgdGhl IGlucHV0IHZpZGVvCiAgICAgIm1haW5fdyIsICJ3IiwgIlciLCAgICAgICAvLy88IHdpZHRo ICBvZiB0aGUgaW5wdXQgdmlkZW8KLSAgICAibWF4X2dseXBoX2EiLCAiYXNjZW50IiwgIC8v LzwgbWF4IGdseXBoIGFzY2VudAotICAgICJtYXhfZ2x5cGhfZCIsICJkZXNjZW50IiwgLy8v PCBtaW4gZ2x5cGggZGVzY2VudAorICAgICJtYXhfZ2x5cGhfYSIsICJhc2NlbnQiLCAgLy8v PCBtYXggZ2x5cGggYXNjZW5kZXIKKyAgICAibWF4X2dseXBoX2QiLCAiZGVzY2VudCIsIC8v LzwgbWluIGdseXBoIGRlc2NlbmRlcgogICAgICJtYXhfZ2x5cGhfaCIsICAgICAgICAgICAg Ly8vPCBtYXggZ2x5cGggaGVpZ2h0CiAgICAgIm1heF9nbHlwaF93IiwgICAgICAgICAgICAv Ly88IG1heCBnbHlwaCB3aWR0aAogICAgICJuIiwgICAgICAgICAgICAgICAgICAgICAgLy8v PCBudW1iZXIgb2YgZnJhbWUKQEAgLTE2MSw3ICsxNjEsNyBAQCB0eXBlZGVmIHN0cnVjdCBE cmF3VGV4dENvbnRleHQgewogICAgIGludCBleHBfbW9kZTsgICAgICAgICAgICAgICAgICAg Ly8vPCBleHBhbnNpb24gbW9kZSB0byB1c2UgZm9yIHRoZSB0ZXh0CiAgICAgaW50IHJlaW5p dDsgICAgICAgICAgICAgICAgICAgICAvLy88IHRlbGxzIGlmIHRoZSBmaWx0ZXIgaXMgYmVp bmcgcmVpbml0ZWQKICNpZiBDT05GSUdfTElCRk9OVENPTkZJRwotICAgIHVpbnQ4X3QgKmZv bnQ7ICAgICAgICAgICAgICAvLy88IGZvbnQgdG8gYmUgdXNlZAorICAgIHVpbnQ4X3QgKmZv bnQ7ICAgICAgICAgICAgICAgICAgLy8vPCBmb250IHRvIGJlIHVzZWQKICNlbmRpZgogICAg IHVpbnQ4X3QgKmZvbnRmaWxlOyAgICAgICAgICAgICAgLy8vPCBmb250IHRvIGJlIHVzZWQK ICAgICB1aW50OF90ICp0ZXh0OyAgICAgICAgICAgICAgICAgIC8vLzwgdGV4dCB0byBiZSBk cmF3bgpAQCAtMjI3LDI1ICsyMjcsMjUgQEAgdHlwZWRlZiBzdHJ1Y3QgRHJhd1RleHRDb250 ZXh0IHsKICNkZWZpbmUgRkxBR1MgQVZfT1BUX0ZMQUdfRklMVEVSSU5HX1BBUkFNfEFWX09Q VF9GTEFHX1ZJREVPX1BBUkFNCiAKIHN0YXRpYyBjb25zdCBBVk9wdGlvbiBkcmF3dGV4dF9v cHRpb25zW109IHsKLSAgICB7ImZvbnRmaWxlIiwgICAgInNldCBmb250IGZpbGUiLCAgICAg ICAgT0ZGU0VUKGZvbnRmaWxlKSwgICAgICAgICAgIEFWX09QVF9UWVBFX1NUUklORywgey5z dHI9TlVMTH0sICAwLCAwLCBGTEFHU30sCi0gICAgeyJ0ZXh0IiwgICAgICAgICJzZXQgdGV4 dCIsICAgICAgICAgICAgIE9GRlNFVCh0ZXh0KSwgICAgICAgICAgICAgICBBVl9PUFRfVFlQ RV9TVFJJTkcsIHsuc3RyPU5VTEx9LCAgMCwgMCwgRkxBR1N9LAotICAgIHsidGV4dGZpbGUi LCAgICAic2V0IHRleHQgZmlsZSIsICAgICAgICBPRkZTRVQodGV4dGZpbGUpLCAgICAgICAg ICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj1OVUxMfSwgIDAsIDAsIEZMQUdTfSwKLSAg ICB7ImZvbnRjb2xvciIsICAgInNldCBmb3JlZ3JvdW5kIGNvbG9yIiwgT0ZGU0VUKGZvbnRj b2xvci5yZ2JhKSwgICAgIEFWX09QVF9UWVBFX0NPTE9SLCAgey5zdHI9ImJsYWNrIn0sIDAs IDAsIEZMQUdTfSwKKyAgICB7ImZvbnRmaWxlIiwgICAgICAgInNldCBmb250IGZpbGUiLCAg ICAgICAgIE9GRlNFVChmb250ZmlsZSksICAgICAgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcs IHsuc3RyPU5VTEx9LCAgMCwgMCwgRkxBR1N9LAorICAgIHsidGV4dCIsICAgICAgICAgICAi c2V0IHRleHQiLCAgICAgICAgICAgICAgT0ZGU0VUKHRleHQpLCAgICAgICAgICAgICAgIEFW X09QVF9UWVBFX1NUUklORywgey5zdHI9TlVMTH0sICAwLCAwLCBGTEFHU30sCisgICAgeyJ0 ZXh0ZmlsZSIsICAgICAgICJzZXQgdGV4dCBmaWxlIiwgICAgICAgICBPRkZTRVQodGV4dGZp bGUpLCAgICAgICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj1OVUxMfSwgIDAsIDAs IEZMQUdTfSwKKyAgICB7ImZvbnRjb2xvciIsICAgICAgInNldCBmb3JlZ3JvdW5kIGNvbG9y IiwgIE9GRlNFVChmb250Y29sb3IucmdiYSksICAgICBBVl9PUFRfVFlQRV9DT0xPUiwgIHsu c3RyPSJibGFjayJ9LCAwLCAwLCBGTEFHU30sCiAgICAgeyJmb250Y29sb3JfZXhwciIsICJz ZXQgZm9yZWdyb3VuZCBjb2xvciBleHByZXNzaW9uIiwgT0ZGU0VUKGZvbnRjb2xvcl9leHBy KSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj0iIn0sIDAsIDAsIEZMQUdTfSwKLSAgICB7 ImJveGNvbG9yIiwgICAgInNldCBib3ggY29sb3IiLCAgICAgICAgT0ZGU0VUKGJveGNvbG9y LnJnYmEpLCAgICAgIEFWX09QVF9UWVBFX0NPTE9SLCAgey5zdHI9IndoaXRlIn0sIDAsIDAs IEZMQUdTfSwKLSAgICB7ImJvcmRlcmNvbG9yIiwgInNldCBib3JkZXIgY29sb3IiLCAgICAg T0ZGU0VUKGJvcmRlcmNvbG9yLnJnYmEpLCAgIEFWX09QVF9UWVBFX0NPTE9SLCAgey5zdHI9 ImJsYWNrIn0sIDAsIDAsIEZMQUdTfSwKLSAgICB7InNoYWRvd2NvbG9yIiwgInNldCBzaGFk b3cgY29sb3IiLCAgICAgT0ZGU0VUKHNoYWRvd2NvbG9yLnJnYmEpLCAgIEFWX09QVF9UWVBF X0NPTE9SLCAgey5zdHI9ImJsYWNrIn0sIDAsIDAsIEZMQUdTfSwKLSAgICB7ImJveCIsICAg ICAgICAgInNldCBib3giLCAgICAgICAgICAgICAgT0ZGU0VUKGRyYXdfYm94KSwgICAgICAg ICAgIEFWX09QVF9UWVBFX0JPT0wsICAgey5pNjQ9MH0sICAgICAwLCAgICAgICAgMSAgICAg ICAsIEZMQUdTfSwKLSAgICB7ImJveGJvcmRlcnciLCAgInNldCBib3ggYm9yZGVyIHdpZHRo IiwgT0ZGU0VUKGJveGJvcmRlcncpLCAgICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAgey5p NjQ9MH0sICAgICBJTlRfTUlOLCAgSU5UX01BWCAsIEZMQUdTfSwKLSAgICB7ImxpbmVfc3Bh Y2luZyIsICAic2V0IGxpbmUgc3BhY2luZyBpbiBwaXhlbHMiLCBPRkZTRVQobGluZV9zcGFj aW5nKSwgICBBVl9PUFRfVFlQRV9JTlQsICAgIHsuaTY0PTB9LCAgICAgSU5UX01JTiwgIElO VF9NQVgsRkxBR1N9LAotICAgIHsiZm9udHNpemUiLCAgICAic2V0IGZvbnQgc2l6ZSIsICAg ICAgICBPRkZTRVQoZm9udHNpemVfZXhwciksICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7 LnN0cj1OVUxMfSwgIDAsIDAgLCBGTEFHU30sCi0gICAgeyJ4IiwgICAgICAgICAgICJzZXQg eCBleHByZXNzaW9uIiwgICAgIE9GRlNFVCh4X2V4cHIpLCAgICAgICAgICAgICBBVl9PUFRf VFlQRV9TVFJJTkcsIHsuc3RyPSIwIn0sICAgMCwgMCwgRkxBR1N9LAotICAgIHsieSIsICAg ICAgICAgICAic2V0IHkgZXhwcmVzc2lvbiIsICAgICBPRkZTRVQoeV9leHByKSwgICAgICAg ICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj0iMCJ9LCAgIDAsIDAsIEZMQUdTfSwK LSAgICB7InNoYWRvd3giLCAgICAgInNldCBzaGFkb3cgeCBvZmZzZXQiLCAgT0ZGU0VUKHNo YWRvd3gpLCAgICAgICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICBJ TlRfTUlOLCAgSU5UX01BWCAsIEZMQUdTfSwKLSAgICB7InNoYWRvd3kiLCAgICAgInNldCBz aGFkb3cgeSBvZmZzZXQiLCAgT0ZGU0VUKHNoYWRvd3kpLCAgICAgICAgICAgIEFWX09QVF9U WVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICBJTlRfTUlOLCAgSU5UX01BWCAsIEZMQUdTfSwK LSAgICB7ImJvcmRlcnciLCAgICAgInNldCBib3JkZXIgd2lkdGgiLCAgICAgT0ZGU0VUKGJv cmRlcncpLCAgICAgICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICBJ TlRfTUlOLCAgSU5UX01BWCAsIEZMQUdTfSwKLSAgICB7InRhYnNpemUiLCAgICAgInNldCB0 YWIgc2l6ZSIsICAgICAgICAgT0ZGU0VUKHRhYnNpemUpLCAgICAgICAgICAgIEFWX09QVF9U WVBFX0lOVCwgICAgey5pNjQ9NH0sICAgICAwLCAgICAgICAgSU5UX01BWCAsIEZMQUdTfSwK LSAgICB7ImJhc2V0aW1lIiwgICAgInNldCBiYXNlIHRpbWUiLCAgICAgICAgT0ZGU0VUKGJh c2V0aW1lKSwgICAgICAgICAgIEFWX09QVF9UWVBFX0lOVDY0LCAgey5pNjQ9QVZfTk9QVFNf VkFMVUV9LCBJTlQ2NF9NSU4sIElOVDY0X01BWCAsIEZMQUdTfSwKKyAgICB7ImJveGNvbG9y IiwgICAgICAgInNldCBib3ggY29sb3IiLCAgICAgICAgIE9GRlNFVChib3hjb2xvci5yZ2Jh KSwgICAgICBBVl9PUFRfVFlQRV9DT0xPUiwgIHsuc3RyPSJ3aGl0ZSJ9LCAwLCAwLCBGTEFH U30sCisgICAgeyJib3JkZXJjb2xvciIsICAgICJzZXQgYm9yZGVyIGNvbG9yIiwgICAgICBP RkZTRVQoYm9yZGVyY29sb3IucmdiYSksICAgQVZfT1BUX1RZUEVfQ09MT1IsICB7LnN0cj0i YmxhY2sifSwgMCwgMCwgRkxBR1N9LAorICAgIHsic2hhZG93Y29sb3IiLCAgICAic2V0IHNo YWRvdyBjb2xvciIsICAgICAgT0ZGU0VUKHNoYWRvd2NvbG9yLnJnYmEpLCAgIEFWX09QVF9U WVBFX0NPTE9SLCAgey5zdHI9ImJsYWNrIn0sIDAsIDAsIEZMQUdTfSwKKyAgICB7ImJveCIs ICAgICAgICAgICAgInNldCBib3giLCAgICAgICAgICAgICAgIE9GRlNFVChkcmF3X2JveCks ICAgICAgICAgICBBVl9PUFRfVFlQRV9CT09MLCAgIHsuaTY0PTB9LCAgICAgMCwgMSwgRkxB R1N9LAorICAgIHsiYm94Ym9yZGVydyIsICAgICAic2V0IGJveCBib3JkZXJzIHdpZHRoIiwg T0ZGU0VUKGJveGJvcmRlcncpLCAgICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9 MH0sICAgICBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHU30sCisgICAgeyJsaW5lX3NwYWNpbmci LCAgICJzZXQgbGluZSBzcGFjaW5nIGluIHBpeGVscyIsIE9GRlNFVChsaW5lX3NwYWNpbmcp LCAgQVZfT1BUX1RZUEVfSU5ULCAgICB7Lmk2ND0wfSwgICAgIElOVF9NSU4sIElOVF9NQVgs IEZMQUdTfSwKKyAgICB7ImZvbnRzaXplIiwgICAgICAgInNldCBmb250IHNpemUiLCAgICAg ICAgIE9GRlNFVChmb250c2l6ZV9leHByKSwgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsu c3RyPU5VTEx9LCAgMCwgMCwgRkxBR1N9LAorICAgIHsieCIsICAgICAgICAgICAgICAic2V0 IHggZXhwcmVzc2lvbiIsICAgICAgT0ZGU0VUKHhfZXhwciksICAgICAgICAgICAgIEFWX09Q VF9UWVBFX1NUUklORywgey5zdHI9IjAifSwgICAwLCAwLCBGTEFHU30sCisgICAgeyJ5Iiwg ICAgICAgICAgICAgICJzZXQgeSBleHByZXNzaW9uIiwgICAgICBPRkZTRVQoeV9leHByKSwg ICAgICAgICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj0iMCJ9LCAgIDAsIDAsIEZM QUdTfSwKKyAgICB7InNoYWRvd3giLCAgICAgICAgInNldCBzaGFkb3cgeCBvZmZzZXQiLCAg IE9GRlNFVChzaGFkb3d4KSwgICAgICAgICAgICBBVl9PUFRfVFlQRV9JTlQsICAgIHsuaTY0 PTB9LCAgICAgSU5UX01JTiwgSU5UX01BWCwgRkxBR1N9LAorICAgIHsic2hhZG93eSIsICAg ICAgICAic2V0IHNoYWRvdyB5IG9mZnNldCIsICAgT0ZGU0VUKHNoYWRvd3kpLCAgICAgICAg ICAgIEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICBJTlRfTUlOLCBJTlRfTUFY LCBGTEFHU30sCisgICAgeyJib3JkZXJ3IiwgICAgICAgICJzZXQgYm9yZGVyIHdpZHRoIiwg ICAgICBPRkZTRVQoYm9yZGVydyksICAgICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7 Lmk2ND0wfSwgICAgIElOVF9NSU4sIElOVF9NQVgsIEZMQUdTfSwKKyAgICB7InRhYnNpemUi LCAgICAgICAgInNldCB0YWIgc2l6ZSIsICAgICAgICAgIE9GRlNFVCh0YWJzaXplKSwgICAg ICAgICAgICBBVl9PUFRfVFlQRV9JTlQsICAgIHsuaTY0PTR9LCAgICAgMCwgSU5UX01BWCwg RkxBR1N9LAorICAgIHsiYmFzZXRpbWUiLCAgICAgICAic2V0IGJhc2UgdGltZSIsICAgICAg ICAgT0ZGU0VUKGJhc2V0aW1lKSwgICAgICAgICAgIEFWX09QVF9UWVBFX0lOVDY0LCAgey5p NjQ9QVZfTk9QVFNfVkFMVUV9LCBJTlQ2NF9NSU4sIElOVDY0X01BWCwgRkxBR1N9LAogI2lm IENPTkZJR19MSUJGT05UQ09ORklHCiAgICAgeyAiZm9udCIsICAgICAgICAiRm9udCBuYW1l IiwgICAgICAgICAgICBPRkZTRVQoZm9udCksICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVf U1RSSU5HLCB7IC5zdHIgPSAiU2FucyIgfSwgICAgICAgICAgIC5mbGFncyA9IEZMQUdTIH0s CiAjZW5kaWYKQEAgLTI1NiwxNSArMjU2LDE1IEBAIHN0YXRpYyBjb25zdCBBVk9wdGlvbiBk cmF3dGV4dF9vcHRpb25zW109IHsKICAgICAgICAgeyJzdHJmdGltZSIsICJzZXQgc3RyZnRp bWUgZXhwYW5zaW9uIChkZXByZWNhdGVkKSIsIE9GRlNFVChleHBfbW9kZSksIEFWX09QVF9U WVBFX0NPTlNULCB7Lmk2ND1FWFBfU1RSRlRJTUV9LCAwLCAwLCBGTEFHUywgImV4cGFuc2lv biJ9LAogCiAgICAgeyJ0aW1lY29kZSIsICAgICAgICAic2V0IGluaXRpYWwgdGltZWNvZGUi LCAgICAgICAgICAgICBPRkZTRVQodGNfb3B0X3N0cmluZyksIEFWX09QVF9UWVBFX1NUUklO RywgICB7LnN0cj1OVUxMfSwgMCwgMCwgRkxBR1N9LAotICAgIHsidGMyNGhtYXgiLCAgICAg ICAgInNldCAyNCBob3VycyBtYXggKHRpbWVjb2RlIG9ubHkpIiwgT0ZGU0VUKHRjMjRobWF4 KSwgICAgICBBVl9PUFRfVFlQRV9CT09MLCAgICAgey5pNjQ9MH0sICAgICAgICAgICAwLCAg ICAgICAgMSwgRkxBR1N9LAotICAgIHsidGltZWNvZGVfcmF0ZSIsICAgInNldCByYXRlICh0 aW1lY29kZSBvbmx5KSIsICAgICAgICAgT0ZGU0VUKHRjX3JhdGUpLCAgICAgICBBVl9PUFRf VFlQRV9SQVRJT05BTCwgey5kYmw9MH0sICAgICAgICAgICAwLCAgSU5UX01BWCwgRkxBR1N9 LAotICAgIHsiciIsICAgICAgICAgICAgICAgInNldCByYXRlICh0aW1lY29kZSBvbmx5KSIs ICAgICAgICAgT0ZGU0VUKHRjX3JhdGUpLCAgICAgICBBVl9PUFRfVFlQRV9SQVRJT05BTCwg ey5kYmw9MH0sICAgICAgICAgICAwLCAgSU5UX01BWCwgRkxBR1N9LAotICAgIHsicmF0ZSIs ICAgICAgICAgICAgInNldCByYXRlICh0aW1lY29kZSBvbmx5KSIsICAgICAgICAgT0ZGU0VU KHRjX3JhdGUpLCAgICAgICBBVl9PUFRfVFlQRV9SQVRJT05BTCwgey5kYmw9MH0sICAgICAg ICAgICAwLCAgSU5UX01BWCwgRkxBR1N9LAotICAgIHsicmVsb2FkIiwgICAgICJyZWxvYWQg dGV4dCBmaWxlIGF0IHNwZWNpZmllZCBmcmFtZSBpbnRlcnZhbCIsIE9GRlNFVChyZWxvYWQp LCAgICAgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2ND0wfSwgMCwgSU5UX01BWCwgRkxBR1N9LAot ICAgIHsgImFscGhhIiwgICAgICAgImFwcGx5IGFscGhhIHdoaWxlIHJlbmRlcmluZyIsIE9G RlNFVChhX2V4cHIpLCAgICAgIEFWX09QVF9UWVBFX1NUUklORywgeyAuc3RyID0gIjEiICAg ICB9LCAgICAgICAgICAuZmxhZ3MgPSBGTEFHUyB9LAotICAgIHsiZml4X2JvdW5kcyIsICJj aGVjayBhbmQgZml4IHRleHQgY29vcmRzIHRvIGF2b2lkIGNsaXBwaW5nIiwgT0ZGU0VUKGZp eF9ib3VuZHMpLCBBVl9PUFRfVFlQRV9CT09MLCB7Lmk2ND0wfSwgMCwgMSwgRkxBR1N9LAot ICAgIHsic3RhcnRfbnVtYmVyIiwgInN0YXJ0IGZyYW1lIG51bWJlciBmb3Igbi9mcmFtZV9u dW0gdmFyaWFibGUiLCBPRkZTRVQoc3RhcnRfbnVtYmVyKSwgQVZfT1BUX1RZUEVfSU5ULCB7 Lmk2ND0wfSwgMCwgSU5UX01BWCwgRkxBR1N9LAotICAgIHsidGV4dF9zb3VyY2UiLCAidGhl IHNvdXJjZSBvZiB0ZXh0IiwgT0ZGU0VUKHRleHRfc291cmNlX3N0cmluZyksIEFWX09QVF9U WVBFX1NUUklORywgey5zdHI9TlVMTH0sIDAsIDEsIEZMQUdTIH0sCisgICAgeyJ0YzI0aG1h eCIsICAgICAgICAic2V0IDI0IGhvdXJzIG1heCAodGltZWNvZGUgb25seSkiLCBPRkZTRVQo dGMyNGhtYXgpLCAgICAgIEFWX09QVF9UWVBFX0JPT0wsICAgICB7Lmk2ND0wfSwgICAgMCwg MSwgRkxBR1N9LAorICAgIHsidGltZWNvZGVfcmF0ZSIsICAgInNldCByYXRlICh0aW1lY29k ZSBvbmx5KSIsICAgICAgICAgT0ZGU0VUKHRjX3JhdGUpLCAgICAgICBBVl9PUFRfVFlQRV9S QVRJT05BTCwgey5kYmw9MH0sICAgIDAsIElOVF9NQVgsIEZMQUdTfSwKKyAgICB7InIiLCAg ICAgICAgICAgICAgICJzZXQgcmF0ZSAodGltZWNvZGUgb25seSkiLCAgICAgICAgIE9GRlNF VCh0Y19yYXRlKSwgICAgICAgQVZfT1BUX1RZUEVfUkFUSU9OQUwsIHsuZGJsPTB9LCAgICAw LCBJTlRfTUFYLCBGTEFHU30sCisgICAgeyJyYXRlIiwgICAgICAgICAgICAic2V0IHJhdGUg KHRpbWVjb2RlIG9ubHkpIiwgICAgICAgICBPRkZTRVQodGNfcmF0ZSksICAgICAgIEFWX09Q VF9UWVBFX1JBVElPTkFMLCB7LmRibD0wfSwgICAgMCwgSU5UX01BWCwgRkxBR1N9LAorICAg IHsicmVsb2FkIiwgICAgICAgICAgInJlbG9hZCB0ZXh0IGZpbGUgYXQgc3BlY2lmaWVkIGZy YW1lIGludGVydmFsIiwgT0ZGU0VUKHJlbG9hZCksIEFWX09QVF9UWVBFX0lOVCwgey5pNjQ9 MH0sICAgIDAsIElOVF9NQVgsIEZMQUdTfSwKKyAgICB7ImFscGhhIiwgICAgICAgICAgICJh cHBseSBhbHBoYSB3aGlsZSByZW5kZXJpbmciLCAgICAgIE9GRlNFVChhX2V4cHIpLCAgICAg ICAgQVZfT1BUX1RZUEVfU1RSSU5HLCAgIHsuc3RyID0gIjEifSwgLmZsYWdzID0gRkxBR1N9 LAorICAgIHsiZml4X2JvdW5kcyIsICAgICAgImNoZWNrIGFuZCBmaXggdGV4dCBjb29yZHMg dG8gYXZvaWQgY2xpcHBpbmciLCBPRkZTRVQoZml4X2JvdW5kcyksIEFWX09QVF9UWVBFX0JP T0wsIHsuaTY0PTB9LCAwLCAxLCBGTEFHU30sCisgICAgeyJzdGFydF9udW1iZXIiLCAgICAi c3RhcnQgZnJhbWUgbnVtYmVyIGZvciBuL2ZyYW1lX251bSB2YXJpYWJsZSIsIE9GRlNFVChz dGFydF9udW1iZXIpLCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0PTB9LCAwLCBJTlRfTUFYLCBG TEFHU30sCisgICAgeyJ0ZXh0X3NvdXJjZSIsICAgICAidGhlIHNvdXJjZSBvZiB0ZXh0Iiwg T0ZGU0VUKHRleHRfc291cmNlX3N0cmluZyksIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9 TlVMTH0sIDAsIDEsIEZMQUdTIH0sCiAKICNpZiBDT05GSUdfTElCRlJJQklESQogICAgIHsi dGV4dF9zaGFwaW5nIiwgImF0dGVtcHQgdG8gc2hhcGUgdGV4dCBiZWZvcmUgZHJhd2luZyIs IE9GRlNFVCh0ZXh0X3NoYXBpbmcpLCBBVl9PUFRfVFlQRV9CT09MLCB7Lmk2ND0xfSwgMCwg MSwgRkxBR1N9LApAQCAtMzI0LDkgKzMyNCw5IEBAIHN0YXRpYyBpbnQgZ2x5cGhfY21wKGNv bnN0IHZvaWQgKmtleSwgY29uc3Qgdm9pZCAqYikKICAgICBpbnQ2NF90IGRpZmYgPSAoaW50 NjRfdClhLT5jb2RlIC0gKGludDY0X3QpYmItPmNvZGU7CiAKICAgICBpZiAoZGlmZiAhPSAw KQotICAgICAgICAgcmV0dXJuIGRpZmYgPiAwID8gMSA6IC0xOworICAgICAgICByZXR1cm4g ZGlmZiA+IDAgPyAxIDogLTE7CiAgICAgZWxzZQotICAgICAgICAgcmV0dXJuIEZGRElGRlNJ R04oKGludDY0X3QpYS0+Zm9udHNpemUsIChpbnQ2NF90KWJiLT5mb250c2l6ZSk7CisgICAg ICAgIHJldHVybiBGRkRJRkZTSUdOKChpbnQ2NF90KWEtPmZvbnRzaXplLCAoaW50NjRfdCli Yi0+Zm9udHNpemUpOwogfQogCiAvKioKQEAgLTQ0Nyw3ICs0NDcsNiBAQCBzdGF0aWMgYXZf Y29sZCBpbnQgdXBkYXRlX2ZvbnRzaXplKEFWRmlsdGVyQ29udGV4dCAqY3R4KQogICAgICAg ICAgICByZXR1cm4gZXJyOwogCiAgICAgICAgIHNpemUgPSBhdl9leHByX2V2YWwocy0+Zm9u dHNpemVfcGV4cHIsIHMtPnZhcl92YWx1ZXMsICZzLT5wcm5nKTsKLQogICAgICAgICBpZiAo IWlzbmFuKHNpemUpKSB7CiAgICAgICAgICAgICByb3VuZGVkc2l6ZSA9IHJvdW5kKHNpemUp OwogICAgICAgICAgICAgLy8gdGVzdCBmb3Igb3ZlcmZsb3cgYmVmb3JlIGNhc3QKQEAgLTQ1 NSw3ICs0NTQsNiBAQCBzdGF0aWMgYXZfY29sZCBpbnQgdXBkYXRlX2ZvbnRzaXplKEFWRmls dGVyQ29udGV4dCAqY3R4KQogICAgICAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwgImZvbnRzaXplIG92ZXJmbG93XG4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4g QVZFUlJPUihFSU5WQUwpOwogICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBmb250c2l6 ZSA9IHJvdW5kZWRzaXplOwogICAgICAgICB9CiAgICAgfQpAQCAtNTU2LDcgKzU1NCw3IEBA IHN0YXRpYyBpbnQgbG9hZF9mb250X2ZvbnRjb25maWcoQVZGaWx0ZXJDb250ZXh0ICpjdHgp CiAgICAgICAgIGdvdG8gZmFpbDsKICAgICB9CiAKLSAgICBhdl9sb2coY3R4LCBBVl9MT0df SU5GTywgIlVzaW5nIFwiJXNcIlxuIiwgZmlsZW5hbWUpOworICAgIGF2X2xvZyhjdHgsIEFW X0xPR19WRVJCT1NFLCAiVXNpbmcgXCIlc1wiXG4iLCBmaWxlbmFtZSk7CiAgICAgaWYgKHBh cnNlX2VycikKICAgICAgICAgcy0+ZGVmYXVsdF9mb250c2l6ZSA9IHNpemUgKyAwLjU7CiAK QEAgLTY5OCw2ICs2OTYsNyBAQCBzdGF0aWMgaW50IHNoYXBlX3RleHQoQVZGaWx0ZXJDb250 ZXh0ICpjdHgpCiAgICAgcy0+dGV4dCA9IHRtcDsKICAgICBsZW4gPSBmcmliaWRpX3VuaWNv ZGVfdG9fY2hhcnNldChGUklCSURJX0NIQVJfU0VUX1VURjgsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5pY29kZXN0ciwgbGVuLCBzLT50ZXh0KTsKKwogICAg IHJldCA9IDA7CiAKIG91dDoKQEAgLTg4OCwxNSArODg3LDE1IEBAIHN0YXRpYyBpbnQgY29u ZmlnX2lucHV0KEFWRmlsdGVyTGluayAqaW5saW5rKQogICAgIGZmX2RyYXdfY29sb3IoJnMt PmRjLCAmcy0+Ym9yZGVyY29sb3IsIHMtPmJvcmRlcmNvbG9yLnJnYmEpOwogICAgIGZmX2Ry YXdfY29sb3IoJnMtPmRjLCAmcy0+Ym94Y29sb3IsICAgIHMtPmJveGNvbG9yLnJnYmEpOwog Ci0gICAgcy0+dmFyX3ZhbHVlc1tWQVJfd10gICAgID0gcy0+dmFyX3ZhbHVlc1tWQVJfV10g ICAgID0gcy0+dmFyX3ZhbHVlc1tWQVJfTUFJTl9XXSA9IGlubGluay0+dzsKLSAgICBzLT52 YXJfdmFsdWVzW1ZBUl9oXSAgICAgPSBzLT52YXJfdmFsdWVzW1ZBUl9IXSAgICAgPSBzLT52 YXJfdmFsdWVzW1ZBUl9NQUlOX0hdID0gaW5saW5rLT5oOwotICAgIHMtPnZhcl92YWx1ZXNb VkFSX1NBUl0gICA9IGlubGluay0+c2FtcGxlX2FzcGVjdF9yYXRpby5udW0gPyBhdl9xMmQo aW5saW5rLT5zYW1wbGVfYXNwZWN0X3JhdGlvKSA6IDE7Ci0gICAgcy0+dmFyX3ZhbHVlc1tW QVJfREFSXSAgID0gKGRvdWJsZSlpbmxpbmstPncgLyBpbmxpbmstPmggKiBzLT52YXJfdmFs dWVzW1ZBUl9TQVJdOwotICAgIHMtPnZhcl92YWx1ZXNbVkFSX0hTVUJdICA9IDEgPDwgcy0+ ZGMuaHN1Yl9tYXg7Ci0gICAgcy0+dmFyX3ZhbHVlc1tWQVJfVlNVQl0gID0gMSA8PCBzLT5k Yy52c3ViX21heDsKLSAgICBzLT52YXJfdmFsdWVzW1ZBUl9YXSAgICAgPSBOQU47Ci0gICAg cy0+dmFyX3ZhbHVlc1tWQVJfWV0gICAgID0gTkFOOwotICAgIHMtPnZhcl92YWx1ZXNbVkFS X1RdICAgICA9IE5BTjsKKyAgICBzLT52YXJfdmFsdWVzW1ZBUl93XSAgICA9IHMtPnZhcl92 YWx1ZXNbVkFSX1ddID0gcy0+dmFyX3ZhbHVlc1tWQVJfTUFJTl9XXSA9IGlubGluay0+dzsK KyAgICBzLT52YXJfdmFsdWVzW1ZBUl9oXSAgICA9IHMtPnZhcl92YWx1ZXNbVkFSX0hdID0g cy0+dmFyX3ZhbHVlc1tWQVJfTUFJTl9IXSA9IGlubGluay0+aDsKKyAgICBzLT52YXJfdmFs dWVzW1ZBUl9TQVJdICA9IGlubGluay0+c2FtcGxlX2FzcGVjdF9yYXRpby5udW0gPyBhdl9x MmQoaW5saW5rLT5zYW1wbGVfYXNwZWN0X3JhdGlvKSA6IDE7CisgICAgcy0+dmFyX3ZhbHVl c1tWQVJfREFSXSAgPSAoZG91YmxlKWlubGluay0+dyAvIGlubGluay0+aCAqIHMtPnZhcl92 YWx1ZXNbVkFSX1NBUl07CisgICAgcy0+dmFyX3ZhbHVlc1tWQVJfSFNVQl0gPSAxIDw8IHMt PmRjLmhzdWJfbWF4OworICAgIHMtPnZhcl92YWx1ZXNbVkFSX1ZTVUJdID0gMSA8PCBzLT5k Yy52c3ViX21heDsKKyAgICBzLT52YXJfdmFsdWVzW1ZBUl9YXSAgICA9IE5BTjsKKyAgICBz LT52YXJfdmFsdWVzW1ZBUl9ZXSAgICA9IE5BTjsKKyAgICBzLT52YXJfdmFsdWVzW1ZBUl9U XSAgICA9IE5BTjsKIAogICAgIGF2X2xmZ19pbml0KCZzLT5wcm5nLCBhdl9nZXRfcmFuZG9t X3NlZWQoKSk7CiAKQEAgLTE0MjMsNyArMTQyMiw3IEBAIHN0YXRpYyBpbnQgZHJhd190ZXh0 KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBBVkZyYW1lICpmcmFtZSwKIAogICAgIGF2X2Jwcmlu dF9jbGVhcihicCk7CiAKLSAgICBpZihzLT5iYXNldGltZSAhPSBBVl9OT1BUU19WQUxVRSkK KyAgICBpZiAocy0+YmFzZXRpbWUgIT0gQVZfTk9QVFNfVkFMVUUpCiAgICAgICAgIG5vdz0g ZnJhbWUtPnB0cyphdl9xMmQoY3R4LT5pbnB1dHNbMF0tPnRpbWVfYmFzZSkgKyBzLT5iYXNl dGltZS8xMDAwMDAwOwogCiAgICAgc3dpdGNoIChzLT5leHBfbW9kZSkgewotLSAKMi4zMC4y Cgo= --------------m2rq341R7iyzE47iZEyWRv7E Content-Type: text/plain; charset=UTF-8; name="0002-text-is-now-shaped-using-libharfbuz.patch" Content-Disposition: attachment; filename="0002-text-is-now-shaped-using-libharfbuz.patch" Content-Transfer-Encoding: base64 RnJvbSAwMzNiYmJlZGFkZjA5ZmQyN2FjMTExNTU1ODllZjRjNjIyYzM1MWU5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB5ZXRoaWUgPGtsaW1rbGltQHRpc2NhbGkuaXQ+CkRh dGU6IEZyaSwgMjYgTWF5IDIwMjMgMTI6MTE6NDEgKzAyMDAKU3ViamVjdDogW1BBVENIIDIv OV0gLSB0ZXh0IGlzIG5vdyBzaGFwZWQgdXNpbmcgbGliaGFyZmJ1eiAtIGdseXBocyBwb3Np dGlvbgogaXMgbm93IGFjY3VyYXRlIHRvIDEvNCBwaXhlbCBpbiBib3RoIGRpcmVjdGlvbnMg LSB0aGUgZGVmYXVsdCBsaW5lIGhlaWdodCBpcwogbm93IHRoZSBvbmUgZGVmaW5lZCBpbiB0 aGUgZm9udAoKLS0tCiBkb2MvZmlsdGVycy50ZXhpICAgICAgICAgIHwgICA4ICstCiBsaWJh dmZpbHRlci92Zl9kcmF3dGV4dC5jIHwgODYzICsrKysrKysrKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDU5MSBpbnNlcnRpb25zKCspLCAyODAg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL2ZpbHRlcnMudGV4aSBiL2RvYy9maWx0 ZXJzLnRleGkKaW5kZXggZDkzNWU2MmIzZi4uYmEzOWEyNDdjYSAxMDA2NDQKLS0tIGEvZG9j L2ZpbHRlcnMudGV4aQorKysgYi9kb2MvZmlsdGVycy50ZXhpCkBAIC0xMjIzNCw3ICsxMjIz NCw3IEBAIERyYXcgYSB0ZXh0IHN0cmluZyBvciB0ZXh0IGZyb20gYSBzcGVjaWZpZWQgZmls ZSBvbiB0b3Agb2YgYSB2aWRlbywgdXNpbmcgdGhlCiBsaWJmcmVldHlwZSBsaWJyYXJ5Lgog CiBUbyBlbmFibGUgY29tcGlsYXRpb24gb2YgdGhpcyBmaWx0ZXIsIHlvdSBuZWVkIHRvIGNv bmZpZ3VyZSBGRm1wZWcgd2l0aAotQGNvZGV7LS1lbmFibGUtbGliZnJlZXR5cGV9LgorQGNv ZGV7LS1lbmFibGUtbGliZnJlZXR5cGV9IGFuZCBAY29kZXstLWVuYWJsZS1saWJoYXJmYnV6 en0uCiBUbyBlbmFibGUgZGVmYXVsdCBmb250IGZhbGxiYWNrIGFuZCB0aGUgQHZhcntmb250 fSBvcHRpb24geW91IG5lZWQgdG8KIGNvbmZpZ3VyZSBGRm1wZWcgd2l0aCBAY29kZXstLWVu YWJsZS1saWJmb250Y29uZmlnfS4KIFRvIGVuYWJsZSB0aGUgQHZhcnt0ZXh0X3NoYXBpbmd9 IG9wdGlvbiwgeW91IG5lZWQgdG8gY29uZmlndXJlIEZGbXBlZyB3aXRoCkBAIC0xMjI2Miw4 ICsxMjI2Miw3IEBAIG9wdGlvbiwgY2hlY2sgdGhlIEByZWZ7Y29sb3Igc3ludGF4LCwiQ29s b3IiIHNlY3Rpb24gaW4gdGhlIGZmbXBlZy11dGlscyBtYW51YWwsCiBUaGUgZGVmYXVsdCB2 YWx1ZSBvZiBAdmFye2JveGNvbG9yfSBpcyAid2hpdGUiLgogCiBAaXRlbSBsaW5lX3NwYWNp bmcKLVNldCB0aGUgbGluZSBzcGFjaW5nIGluIHBpeGVscyBvZiB0aGUgYm9yZGVyIHRvIGJl IGRyYXduIGFyb3VuZCB0aGUgYm94IHVzaW5nIEB2YXJ7Ym94fS4KLVRoZSBkZWZhdWx0IHZh bHVlIG9mIEB2YXJ7bGluZV9zcGFjaW5nfSBpcyAwLgorU2V0IHRoZSBsaW5lIHNwYWNpbmcg aW4gcGl4ZWxzLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBAdmFye2xpbmVfc3BhY2luZ30gaXMg MC4KIAogQGl0ZW0gYm9yZGVydwogU2V0IHRoZSB3aWR0aCBvZiB0aGUgYm9yZGVyIHRvIGJl IGRyYXduIGFyb3VuZCB0aGUgdGV4dCB1c2luZyBAdmFye2JvcmRlcmNvbG9yfS4KQEAgLTEy NzYzLDYgKzEyNzYyLDkgQEAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZm9udGNvbmZp ZywgY2hlY2s6CiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBsaWJmcmliaWRpLCBjaGVj azoKIEB1cmx7aHR0cDovL2ZyaWJpZGkub3JnL30uCiAKK0ZvciBtb3JlIGluZm9ybWF0aW9u IGFib3V0IGxpYmhhcmZidXp6LCBjaGVjazoKK0B1cmx7aHR0cHM6Ly9naXRodWIuY29tL2hh cmZidXp6L2hhcmZidXp6fS4KKwogQHNlY3Rpb24gZWRnZWRldGVjdAogCiBEZXRlY3QgYW5k IGRyYXcgZWRnZXMuIFRoZSBmaWx0ZXIgdXNlcyB0aGUgQ2FubnkgRWRnZSBEZXRlY3Rpb24g YWxnb3JpdGhtLgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdmZfZHJhd3RleHQuYyBiL2xp YmF2ZmlsdGVyL3ZmX2RyYXd0ZXh0LmMKaW5kZXggMGM0ZGIzZWM1My4uNGUyZGJkZDFjMCAx MDA2NDQKLS0tIGEvbGliYXZmaWx0ZXIvdmZfZHJhd3RleHQuYworKysgYi9saWJhdmZpbHRl ci92Zl9kcmF3dGV4dC5jCkBAIC0xLDQgKzEsNSBAQAogLyoKKyAqIENvcHlyaWdodCAoYykg MjAyMyBGcmFuY2VzY28gQ2FydXNpCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgU3RlZmFubyBT YWJhdGluaQogICogQ29weXJpZ2h0IChjKSAyMDEwIFMuTi4gSGVtYW50aCBNZWVuYWtzaGlz dW5kYXJhbQogICogQ29weXJpZ2h0IChjKSAyMDAzIEd1c3Rhdm8gU3Zlcnp1dCBCYXJiaWVy aSA8Z3NiYXJiaWVyaUB5YWhvby5jb20uYnI+CkBAIC03MiwxMCArNzMsMTYgQEAKICNpbmNs dWRlIEZUX0dMWVBIX0gKICNpbmNsdWRlIEZUX1NUUk9LRVJfSAogCisjaW5jbHVkZSA8aGIu aD4KKyNpbmNsdWRlIDxoYi1mdC5oPgorCisvLyBDZWlsaW5nIG9wZXJhdGlvbiBmb3IgcG9z aXRpdmUgaW50ZWdlcnMgZGl2aXNpb24KKyNkZWZpbmUgUE9TX0NFSUwoeCwgeSkgKCh4KS8o eSkgKyAoKHgpJSh5KSAhPSAwKSkKKwogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHZhcl9u YW1lc1tdID0gewogICAgICJkYXIiLAogICAgICJoc3ViIiwgInZzdWIiLAotICAgICJsaW5l X2giLCAibGgiLCAgICAgICAgICAgLy8vPCBsaW5lIGhlaWdodCwgc2FtZSBhcyBtYXhfZ2x5 cGhfaAorICAgICJsaW5lX2giLCAibGgiLCAgICAgICAgICAgLy8vPCBsaW5lIGhlaWdodAog ICAgICJtYWluX2giLCAiaCIsICJIIiwgICAgICAgLy8vPCBoZWlnaHQgb2YgdGhlIGlucHV0 IHZpZGVvCiAgICAgIm1haW5fdyIsICJ3IiwgIlciLCAgICAgICAvLy88IHdpZHRoICBvZiB0 aGUgaW5wdXQgdmlkZW8KICAgICAibWF4X2dseXBoX2EiLCAiYXNjZW50IiwgIC8vLzwgbWF4 IGdseXBoIGFzY2VuZGVyCkBAIC0xNTYsNiArMTYzLDcyIEBAIGVudW0gZXhwYW5zaW9uX21v ZGUgewogICAgIEVYUF9TVFJGVElNRSwKIH07CiAKK3R5cGVkZWYgc3RydWN0IEhhcmZidXp6 RGF0YSB7CisgICAgaGJfYnVmZmVyX3QqIGJ1ZjsKKyAgICBoYl9mb250X3QqIGZvbnQ7Cisg ICAgdW5zaWduZWQgaW50IGdseXBoX2NvdW50OworICAgIGhiX2dseXBoX2luZm9fdCogZ2x5 cGhfaW5mbzsKKyAgICBoYl9nbHlwaF9wb3NpdGlvbl90KiBnbHlwaF9wb3M7Cit9IEhhcmZi dXp6RGF0YTsKKworLyoqIEluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIGdseXBoIGluIGEg dGV4dCBsaW5lICovCit0eXBlZGVmIHN0cnVjdCBHbHlwaEluZm8geworICAgIHVpbnQzMl90 IGNvZGU7ICAgICAgICAgICAgICAgICAgLy8vPCB0aGUgZ2x5cGggY29kZSBwb2ludAorICAg IGludCB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCB0aGUgeCBwb3NpdGlvbiBv ZiB0aGUgZ2x5cGgKKyAgICBpbnQgeTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwg dGhlIHkgcG9zaXRpb24gb2YgdGhlIGdseXBoCisgICAgaW50IHNoaWZ0X3g2NDsgICAgICAg ICAgICAgICAgICAvLy88IHRoZSBob3Jpem9udGFsIHNoaWZ0IG9mIHRoZSBnbHlwaCBpbiAy Ni42IHVuaXRzCisgICAgaW50IHNoaWZ0X3k2NDsgICAgICAgICAgICAgICAgICAvLy88IHRo ZSB2ZXJ0aWNhbCBzaGlmdCBvZiB0aGUgZ2x5cGggaW4gMjYuNiB1bml0cworfSBHbHlwaElu Zm87CisKKy8qKiBJbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBsaW5lIG9mIHRleHQgKi8K K3R5cGVkZWYgc3RydWN0IFRleHRMaW5lIHsKKyAgICBpbnQgb2Zmc2V0X2xlZnQ2NDsgICAg ICAgICAgICAgIC8vLzwgb2Zmc2V0IGJldHdlZW4gdGhlIG9yaWdpbiBhbmQKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLyAgdGhlIGxlZnRtb3N0IHBpeGVsIG9m IHRoZSBmaXJzdCBnbHlwaAorICAgIGludCBvZmZzZXRfcmlnaHQ2NDsgICAgICAgICAgICAg Ly8vPCBtYXhpbXVtIG9mZnNldCBiZXR3ZWVuIHRoZSBvcmlnaW4gYW5kCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8gIHRoZSByaWdodG1vc3QgcGl4ZWwgb2Yg dGhlIGxhc3QgZ2x5cGgKKyAgICBpbnQgd2lkdGg2NDsgICAgICAgICAgICAgICAgICAgIC8v Lzwgd2lkdGggb2YgdGhlIGxpbmUKKyAgICBIYXJmYnV6ekRhdGEgaGJfZGF0YTsgICAgICAg ICAgIC8vLzwgbGliaGFyZmJ1enogZGF0YSBvZiB0aGlzIHRleHQgbGluZQorICAgIEdseXBo SW5mbyogZ2x5cGhzOyAgICAgICAgICAgICAgLy8vPCBhcnJheSBvZiBnbHlwaHMgaW4gdGhp cyB0ZXh0IGxpbmUKKyAgICBpbnQgY2x1c3Rlcl9vZmZzZXQ7ICAgICAgICAgICAgIC8vLzwg dGhlIG9mZnNldCBhdCB3aGljaCB0aGlzIGxpbmUgYmVnaW5zCit9IFRleHRMaW5lOworCisv KiogQSBnbHlwaCBhcyBsb2FkZWQgYW5kIHJlbmRlcmVkIHVzaW5nIGxpYmZyZWV0eXBlICov Cit0eXBlZGVmIHN0cnVjdCBHbHlwaCB7CisgICAgRlRfR2x5cGggZ2x5cGg7CisgICAgRlRf R2x5cGggYm9yZGVyX2dseXBoOworICAgIHVpbnQzMl90IGNvZGU7CisgICAgdW5zaWduZWQg aW50IGZvbnRzaXplOworICAgIC8qKiBHbHlwaCBiaXRtYXBzIHdpdGggMS80IHBpeGVsIHBy ZWNpc2lvbiBpbiBib3RoIGRpcmVjdGlvbnMgKi8KKyAgICBGVF9CaXRtYXBHbHlwaCBiZ2x5 cGhbMTZdOworICAgIC8qKiBPdXRsaW5lZCBnbHlwaCBiaXRtYXBzIHdpdGggMS80IHBpeGVs IHByZWNpc2lvbiBpbiBib3RoIGRpcmVjdGlvbnMgKi8KKyAgICBGVF9CaXRtYXBHbHlwaCBi b3JkZXJfYmdseXBoWzE2XTsKKyAgICBGVF9CQm94IGJib3g7Cit9IEdseXBoOworCisvKiog R2xvYmFsIHRleHQgbWV0cmljcyAqLwordHlwZWRlZiBzdHJ1Y3QgVGV4dE1ldHJpY3Mgewor ICAgIGludCBvZmZzZXRfdG9wNjQ7ICAgICAgICAgICAgICAgLy8vPCBhc2NlbmRlciBhbW91 bnQgb2YgdGhlIGZpcnN0IGxpbmUgKGluIDI2LjYgdW5pdHMpCisgICAgaW50IG9mZnNldF9i b3R0b202NDsgICAgICAgICAgICAvLy88IGRlc2NlbmRlciBhbW91bnQgb2YgdGhlIGxhc3Qg bGluZSAoaW4gMjYuNiB1bml0cykKKyAgICBpbnQgb2Zmc2V0X2xlZnQ2NDsgICAgICAgICAg ICAgIC8vLzwgbWF4aW11bSBvZmZzZXQgYmV0d2VlbiB0aGUgb3JpZ2luIGFuZAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vICB0aGUgbGVmdG1vc3QgcGl4ZWwg b2YgdGhlIGZpcnN0IGdseXBoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvLy8gIG9mIGVhY2ggbGluZSAoaW4gMjYuNiB1bml0cykKKyAgICBpbnQgb2Zmc2V0X3Jp Z2h0NjQ7ICAgICAgICAgICAgIC8vLzwgbWF4aW11bSBvZmZzZXQgYmV0d2VlbiB0aGUgb3Jp Z2luIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vICB0aGUg cmlnaHRtb3N0IHBpeGVsIG9mIHRoZSBsYXN0IGdseXBoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLy8gIG9mIGVhY2ggbGluZSAoaW4gMjYuNiB1bml0cykKKyAg ICBpbnQgbGluZV9oZWlnaHQ2NDsgICAgICAgICAgICAgIC8vLzwgdGhlIGZvbnQtZGVmaW5l ZCBsaW5lIGhlaWdodAorICAgIGludCB3aWR0aDsgICAgICAgICAgICAgICAgICAgICAgLy8v PCB3aWR0aCBvZiB0aGUgbG9uZ2VzdCBsaW5lIC0gY2VpbCh3aWR0aDY0LzY0KQorICAgIGlu dCBoZWlnaHQ7ICAgICAgICAgICAgICAgICAgICAgLy8vPCB0b3RhbCBoZWlnaHQgb2YgdGhl IHRleHQgLSBjZWlsKGhlaWdodDY0LzY0KQorCisgICAgaW50IG1pbl95NjQ7ICAgICAgICAg ICAgICAgICAgICAvLy88IG1pbmltdW0gdmFsdWUgb2YgYmJveC55TWluIGFtb25nIGdseXBo cyAoaW4gMjYuNiB1bml0cykKKyAgICBpbnQgbWF4X3k2NDsgICAgICAgICAgICAgICAgICAg IC8vLzwgbWF4aW11bSB2YWx1ZSBvZiBiYm94LnlNYXggYW1vbmcgZ2x5cGhzIChpbiAyNi42 IHVuaXRzKQorICAgIGludCBtaW5feDY0OyAgICAgICAgICAgICAgICAgICAgLy8vPCBtaW5p bXVtIHZhbHVlIG9mIGJib3gueE1pbiBhbW9uZyBnbHlwaHMgKGluIDI2LjYgdW5pdHMpCisg ICAgaW50IG1heF94NjQ7ICAgICAgICAgICAgICAgICAgICAvLy88IG1heGltdW0gdmFsdWUg b2YgYmJveC54TWF4IGFtb25nIGdseXBocyAoaW4gMjYuNiB1bml0cykKKworICAgIC8vIFBv c2l0aW9uIG9mIHRoZSBiYWNrZ3JvdW5kIGJveCAod2l0aG91dCBib3JkZXJzKQorICAgIGlu dCByZWN0X3g7ICAgICAgICAgICAgICAgICAgICAgLy8vPCB4IHBvc2l0aW9uIG9mIHRoZSBi b3gKKyAgICBpbnQgcmVjdF95OyAgICAgICAgICAgICAgICAgICAgIC8vLzwgeSBwb3NpdGlv biBvZiB0aGUgYm94Cit9IFRleHRNZXRyaWNzOworCiB0eXBlZGVmIHN0cnVjdCBEcmF3VGV4 dENvbnRleHQgewogICAgIGNvbnN0IEFWQ2xhc3MgKmNsYXNzOwogICAgIGludCBleHBfbW9k ZTsgICAgICAgICAgICAgICAgICAgLy8vPCBleHBhbnNpb24gbW9kZSB0byB1c2UgZm9yIHRo ZSB0ZXh0CkBAIC0xNjksMTEgKzI0Miw5IEBAIHR5cGVkZWYgc3RydWN0IERyYXdUZXh0Q29u dGV4dCB7CiAgICAgdWludDhfdCAqZm9udGNvbG9yX2V4cHI7ICAgICAgICAvLy88IGZvbnRj b2xvciBleHByZXNzaW9uIHRvIGV2YWx1YXRlCiAgICAgQVZCUHJpbnQgZXhwYW5kZWRfZm9u dGNvbG9yOyAgICAvLy88IHVzZWQgdG8gY29udGFpbiB0aGUgZXhwYW5kZWQgZm9udGNvbG9y IHNwZWMKICAgICBpbnQgZnRfbG9hZF9mbGFnczsgICAgICAgICAgICAgIC8vLzwgZmxhZ3Mg dXNlZCBmb3IgbG9hZGluZyBmb250cywgc2VlIEZUX0xPQURfKgotICAgIEZUX1ZlY3RvciAq cG9zaXRpb25zOyAgICAgICAgICAgLy8vPCBwb3NpdGlvbnMgZm9yIGVhY2ggZWxlbWVudCBp biB0aGUgdGV4dAotICAgIHNpemVfdCBuYl9wb3NpdGlvbnM7ICAgICAgICAgICAgLy8vPCBu dW1iZXIgb2YgZWxlbWVudHMgb2YgcG9zaXRpb25zIGFycmF5CiAgICAgY2hhciAqdGV4dGZp bGU7ICAgICAgICAgICAgICAgICAvLy88IGZpbGUgd2l0aCB0ZXh0IHRvIGJlIGRyYXduCi0g ICAgaW50IHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IHggcG9zaXRpb24gdG8g c3RhcnQgZHJhd2luZyB0ZXh0Ci0gICAgaW50IHk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvLy88IHkgcG9zaXRpb24gdG8gc3RhcnQgZHJhd2luZyB0ZXh0CisgICAgZG91YmxlIHg7 ICAgICAgICAgICAgICAgICAgICAgICAvLy88IHggcG9zaXRpb24gdG8gc3RhcnQgZHJhd2lu ZyB0ZXh0CisgICAgZG91YmxlIHk7ICAgICAgICAgICAgICAgICAgICAgICAvLy88IHkgcG9z aXRpb24gdG8gc3RhcnQgZHJhd2luZyB0ZXh0CiAgICAgaW50IG1heF9nbHlwaF93OyAgICAg ICAgICAgICAgICAvLy88IG1heCBnbHlwaCB3aWR0aAogICAgIGludCBtYXhfZ2x5cGhfaDsg ICAgICAgICAgICAgICAgLy8vPCBtYXggZ2x5cGggaGVpZ2h0CiAgICAgaW50IHNoYWRvd3gs IHNoYWRvd3k7CkBAIC0xODYsNyArMjU3LDEwIEBAIHR5cGVkZWYgc3RydWN0IERyYXdUZXh0 Q29udGV4dCB7CiAgICAgaW50IGxpbmVfc3BhY2luZzsgICAgICAgICAgICAgICAvLy88IGxp bmVzIHNwYWNpbmcgaW4gcGl4ZWxzCiAgICAgc2hvcnQgaW50IGRyYXdfYm94OyAgICAgICAg ICAgICAvLy88IGRyYXcgYm94IGFyb3VuZCB0ZXh0IC0gdHJ1ZSBvciBmYWxzZQogICAgIGlu dCBib3hib3JkZXJ3OyAgICAgICAgICAgICAgICAgLy8vPCBib3ggYm9yZGVyIHdpZHRoCi0g ICAgaW50IHVzZV9rZXJuaW5nOyAgICAgICAgICAgICAgICAvLy88IGZvbnQga2VybmluZyBp cyB1c2VkIC0gdHJ1ZS9mYWxzZQorICAgIGludCBiYl90b3A7ICAgICAgICAgICAgICAgICAg ICAgLy8vPCB0aGUgc2l6ZSBvZiB0aGUgdG9wIGJveCBib3JkZXIKKyAgICBpbnQgYmJfcmln aHQ7ICAgICAgICAgICAgICAgICAgIC8vLzwgdGhlIHNpemUgb2YgdGhlIHJpZ2h0IGJveCBi b3JkZXIKKyAgICBpbnQgYmJfYm90dG9tOyAgICAgICAgICAgICAgICAgIC8vLzwgdGhlIHNp emUgb2YgdGhlIGJvdHRvbSBib3ggYm9yZGVyCisgICAgaW50IGJiX2xlZnQ7ICAgICAgICAg ICAgICAgICAgICAvLy88IHRoZSBzaXplIG9mIHRoZSBsZWZ0IGJveCBib3JkZXIKICAgICBp bnQgdGFic2l6ZTsgICAgICAgICAgICAgICAgICAgIC8vLzwgdGFiIHNpemUKICAgICBpbnQg Zml4X2JvdW5kczsgICAgICAgICAgICAgICAgIC8vLzwgZG8gd2UgbGV0IGl0IGdvIG91dCBv ZiBmcmFtZSBib3VuZHMgLSB0L2YKIApAQCAtMjIxLDYgKzI5NSwxMiBAQCB0eXBlZGVmIHN0 cnVjdCBEcmF3VGV4dENvbnRleHQgewogICAgIGludCB0ZXh0X3NoYXBpbmc7ICAgICAgICAg ICAgICAgLy8vPCAxIHRvIHNoYXBlIHRoZSB0ZXh0IGJlZm9yZSBkcmF3aW5nIGl0CiAjZW5k aWYKICAgICBBVkRpY3Rpb25hcnkgKm1ldGFkYXRhOworCisgICAgVGV4dExpbmUgKmxpbmVz OyAgICAgICAgICAgICAgICAvLy88IGNvbXB1dGVkIGluZm9ybWF0aW9uIGFib3V0IHRleHQg bGluZXMKKyAgICBpbnQgbGluZV9jb3VudDsgICAgICAgICAgICAgICAgIC8vLzwgdGhlIG51 bWJlciBvZiB0ZXh0IGxpbmVzCisgICAgdWludDMyX3QgKnRhYl9jbHVzdGVyczsgICAgICAg ICAvLy88IHRoZSBwb3NpdGlvbiBvZiB0YWIgY2hhcmFjdGVycyBpbiB0aGUgdGV4dAorICAg IGludCB0YWJfY291bnQ7ICAgICAgICAgICAgICAgICAgLy8vPCB0aGUgbnVtYmVyIG9mIHRh YiBjaGFyYWN0ZXJzCisgICAgaW50IGJsYW5rX2FkdmFuY2U2NDsgICAgICAgICAgICAvLy88 IHRoZSBzaXplIG9mIHRoZSBzcGFjZSBjaGFyYWN0ZXIKIH0gRHJhd1RleHRDb250ZXh0Owog CiAjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihEcmF3VGV4dENvbnRleHQsIHgpCkBAIC0y MzYsNyArMzE2LDcgQEAgc3RhdGljIGNvbnN0IEFWT3B0aW9uIGRyYXd0ZXh0X29wdGlvbnNb XT0gewogICAgIHsiYm9yZGVyY29sb3IiLCAgICAic2V0IGJvcmRlciBjb2xvciIsICAgICAg T0ZGU0VUKGJvcmRlcmNvbG9yLnJnYmEpLCAgIEFWX09QVF9UWVBFX0NPTE9SLCAgey5zdHI9 ImJsYWNrIn0sIDAsIDAsIEZMQUdTfSwKICAgICB7InNoYWRvd2NvbG9yIiwgICAgInNldCBz aGFkb3cgY29sb3IiLCAgICAgIE9GRlNFVChzaGFkb3djb2xvci5yZ2JhKSwgICBBVl9PUFRf VFlQRV9DT0xPUiwgIHsuc3RyPSJibGFjayJ9LCAwLCAwLCBGTEFHU30sCiAgICAgeyJib3gi LCAgICAgICAgICAgICJzZXQgYm94IiwgICAgICAgICAgICAgICBPRkZTRVQoZHJhd19ib3gp LCAgICAgICAgICAgQVZfT1BUX1RZUEVfQk9PTCwgICB7Lmk2ND0wfSwgICAgIDAsIDEsIEZM QUdTfSwKLSAgICB7ImJveGJvcmRlcnciLCAgICAgInNldCBib3ggYm9yZGVycyB3aWR0aCIs IE9GRlNFVChib3hib3JkZXJ3KSwgICAgICAgICBBVl9PUFRfVFlQRV9JTlQsICAgIHsuaTY0 PTB9LCAgICAgSU5UX01JTiwgSU5UX01BWCwgRkxBR1N9LAorICAgIHsiYm94Ym9yZGVydyIs ICAgICAic2V0IGJveCBib3JkZXJzIHdpZHRoIiwgT0ZGU0VUKGJveGJvcmRlcncpLCAgICAg ICAgIEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICAwLCBJTlRfTUFYLCBGTEFH U30sCiAgICAgeyJsaW5lX3NwYWNpbmciLCAgICJzZXQgbGluZSBzcGFjaW5nIGluIHBpeGVs cyIsIE9GRlNFVChsaW5lX3NwYWNpbmcpLCAgQVZfT1BUX1RZUEVfSU5ULCAgICB7Lmk2ND0w fSwgICAgIElOVF9NSU4sIElOVF9NQVgsIEZMQUdTfSwKICAgICB7ImZvbnRzaXplIiwgICAg ICAgInNldCBmb250IHNpemUiLCAgICAgICAgIE9GRlNFVChmb250c2l6ZV9leHByKSwgICAg ICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyPU5VTEx9LCAgMCwgMCwgRkxBR1N9LAogICAg IHsieCIsICAgICAgICAgICAgICAic2V0IHggZXhwcmVzc2lvbiIsICAgICAgT0ZGU0VUKHhf ZXhwciksICAgICAgICAgICAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9IjAifSwgICAw LCAwLCBGTEFHU30sCkBAIC0zMDUsMTkgKzM4NSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZnRfZXJyb3IgewogCiAjZGVmaW5lIEZUX0VSUk1TRyhlKSBmdF9lcnJvcnNbZV0uZXJyX21z ZwogCi10eXBlZGVmIHN0cnVjdCBHbHlwaCB7Ci0gICAgRlRfR2x5cGggZ2x5cGg7Ci0gICAg RlRfR2x5cGggYm9yZGVyX2dseXBoOwotICAgIHVpbnQzMl90IGNvZGU7Ci0gICAgdW5zaWdu ZWQgaW50IGZvbnRzaXplOwotICAgIEZUX0JpdG1hcCBiaXRtYXA7IC8vLzwgYXJyYXkgaG9s ZGluZyBiaXRtYXBzIG9mIGZvbnQKLSAgICBGVF9CaXRtYXAgYm9yZGVyX2JpdG1hcDsgLy8v PCBhcnJheSBob2xkaW5nIGJpdG1hcHMgb2YgZm9udCBib3JkZXIKLSAgICBGVF9CQm94IGJi b3g7Ci0gICAgaW50IGFkdmFuY2U7Ci0gICAgaW50IGJpdG1hcF9sZWZ0OwotICAgIGludCBi aXRtYXBfdG9wOwotfSBHbHlwaDsKLQogc3RhdGljIGludCBnbHlwaF9jbXAoY29uc3Qgdm9p ZCAqa2V5LCBjb25zdCB2b2lkICpiKQogewogICAgIGNvbnN0IEdseXBoICphID0ga2V5LCAq YmIgPSBiOwpAQCAtMzI5LDc3ICszOTYsNiBAQCBzdGF0aWMgaW50IGdseXBoX2NtcChjb25z dCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmIpCiAgICAgICAgIHJldHVybiBGRkRJRkZTSUdO KChpbnQ2NF90KWEtPmZvbnRzaXplLCAoaW50NjRfdCliYi0+Zm9udHNpemUpOwogfQogCi0v KioKLSAqIExvYWQgZ2x5cGhzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVURi0zMiBjb2RlcG9p bnQgY29kZS4KLSAqLwotc3RhdGljIGludCBsb2FkX2dseXBoKEFWRmlsdGVyQ29udGV4dCAq Y3R4LCBHbHlwaCAqKmdseXBoX3B0ciwgdWludDMyX3QgY29kZSkKLXsKLSAgICBEcmF3VGV4 dENvbnRleHQgKnMgPSBjdHgtPnByaXY7Ci0gICAgRlRfQml0bWFwR2x5cGggYml0bWFwZ2x5 cGg7Ci0gICAgR2x5cGggKmdseXBoOwotICAgIHN0cnVjdCBBVlRyZWVOb2RlICpub2RlID0g TlVMTDsKLSAgICBpbnQgcmV0OwotCi0gICAgLyogbG9hZCBnbHlwaCBpbnRvIHMtPmZhY2Ut PmdseXBoICovCi0gICAgaWYgKEZUX0xvYWRfQ2hhcihzLT5mYWNlLCBjb2RlLCBzLT5mdF9s b2FkX2ZsYWdzKSkKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLQotICAgIGds eXBoID0gYXZfbWFsbG9jeihzaXplb2YoKmdseXBoKSk7Ci0gICAgaWYgKCFnbHlwaCkgewot ICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0g ICAgfQotICAgIGdseXBoLT5jb2RlICA9IGNvZGU7Ci0gICAgZ2x5cGgtPmZvbnRzaXplID0g cy0+Zm9udHNpemU7Ci0KLSAgICBpZiAoRlRfR2V0X0dseXBoKHMtPmZhY2UtPmdseXBoLCAm Z2x5cGgtPmdseXBoKSkgewotICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Ci0gICAg ICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIGlmIChzLT5ib3JkZXJ3KSB7Ci0gICAgICAg IGdseXBoLT5ib3JkZXJfZ2x5cGggPSBnbHlwaC0+Z2x5cGg7Ci0gICAgICAgIGlmIChGVF9H bHlwaF9TdHJva2VCb3JkZXIoJmdseXBoLT5ib3JkZXJfZ2x5cGgsIHMtPnN0cm9rZXIsIDAs IDApIHx8Ci0gICAgICAgICAgICBGVF9HbHlwaF9Ub19CaXRtYXAoJmdseXBoLT5ib3JkZXJf Z2x5cGgsIEZUX1JFTkRFUl9NT0RFX05PUk1BTCwgMCwgMSkpIHsKLSAgICAgICAgICAgIHJl dCA9IEFWRVJST1JfRVhURVJOQUw7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAg ICB9Ci0gICAgICAgIGJpdG1hcGdseXBoID0gKEZUX0JpdG1hcEdseXBoKSBnbHlwaC0+Ym9y ZGVyX2dseXBoOwotICAgICAgICBnbHlwaC0+Ym9yZGVyX2JpdG1hcCA9IGJpdG1hcGdseXBo LT5iaXRtYXA7Ci0gICAgfQotICAgIGlmIChGVF9HbHlwaF9Ub19CaXRtYXAoJmdseXBoLT5n bHlwaCwgRlRfUkVOREVSX01PREVfTk9STUFMLCAwLCAxKSkgewotICAgICAgICByZXQgPSBB VkVSUk9SX0VYVEVSTkFMOwotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLSAgICBiaXRt YXBnbHlwaCA9IChGVF9CaXRtYXBHbHlwaCkgZ2x5cGgtPmdseXBoOwotCi0gICAgZ2x5cGgt PmJpdG1hcCAgICAgID0gYml0bWFwZ2x5cGgtPmJpdG1hcDsKLSAgICBnbHlwaC0+Yml0bWFw X2xlZnQgPSBiaXRtYXBnbHlwaC0+bGVmdDsKLSAgICBnbHlwaC0+Yml0bWFwX3RvcCAgPSBi aXRtYXBnbHlwaC0+dG9wOwotICAgIGdseXBoLT5hZHZhbmNlICAgICA9IHMtPmZhY2UtPmds eXBoLT5hZHZhbmNlLnggPj4gNjsKLQotICAgIC8qIG1lYXN1cmUgdGV4dCBoZWlnaHQgdG8g Y2FsY3VsYXRlIHRleHRfaGVpZ2h0IChvciB0aGUgbWF4aW11bSB0ZXh0IGhlaWdodCkgKi8K LSAgICBGVF9HbHlwaF9HZXRfQ0JveChnbHlwaC0+Z2x5cGgsIGZ0X2dseXBoX2Jib3hfcGl4 ZWxzLCAmZ2x5cGgtPmJib3gpOwotCi0gICAgLyogY2FjaGUgdGhlIG5ld2x5IGNyZWF0ZWQg Z2x5cGggKi8KLSAgICBpZiAoIShub2RlID0gYXZfdHJlZV9ub2RlX2FsbG9jKCkpKSB7Ci0g ICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAg ICB9Ci0gICAgYXZfdHJlZV9pbnNlcnQoJnMtPmdseXBocywgZ2x5cGgsIGdseXBoX2NtcCwg Jm5vZGUpOwotCi0gICAgaWYgKGdseXBoX3B0cikKLSAgICAgICAgKmdseXBoX3B0ciA9IGds eXBoOwotICAgIHJldHVybiAwOwotCi1lcnJvcjoKLSAgICBpZiAoZ2x5cGgpCi0gICAgICAg IGF2X2ZyZWVwKCZnbHlwaC0+Z2x5cGgpOwotCi0gICAgYXZfZnJlZXAoJmdseXBoKTsKLSAg ICBhdl9mcmVlcCgmbm9kZSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGF2X2Nv bGQgaW50IHNldF9mb250c2l6ZShBVkZpbHRlckNvbnRleHQgKmN0eCwgdW5zaWduZWQgaW50 IGZvbnRzaXplKQogewogICAgIGludCBlcnI7CkBAIC03MTgsMTEgKzcxNCwxMTQgQEAgc3Rh dGljIGVudW0gQVZGcmFtZVNpZGVEYXRhVHlwZSB0ZXh0X3NvdXJjZV9zdHJpbmdfcGFyc2Uo Y29uc3QgY2hhciAqdGV4dF9zb3VyY2UKICAgICB9CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50 IGdldF9zdWJwaXhlbF9pZHgoaW50IHNoaWZ0X3g2NCwgaW50IHNoaWZ0X3k2NCkKK3sKKyAg ICBpbnQgaWR4ID0gKHNoaWZ0X3g2NCA+PiAyKSArIChzaGlmdF95NjQgPj4gNCk7CisgICAg cmV0dXJuIGlkeDsKK30KKworLy8gTG9hZHMgYW5kIChvcHRpb25hbGx5KSByZW5kZXJzIGEg Z2x5cGgKK3N0YXRpYyBpbnQgbG9hZF9nbHlwaChBVkZpbHRlckNvbnRleHQgKmN0eCwgR2x5 cGggKipnbHlwaF9wdHIsIHVpbnQzMl90IGNvZGUsIGludDhfdCBzaGlmdF94NjQsIGludDhf dCBzaGlmdF95NjQpCit7CisgICAgRHJhd1RleHRDb250ZXh0ICpzID0gY3R4LT5wcml2Owor ICAgIEdseXBoIGR1bW15ID0geyAwIH07CisgICAgR2x5cGggKmdseXBoOworICAgIEZUX1Zl Y3RvciBzaGlmdDsKKyAgICBzdHJ1Y3QgQVZUcmVlTm9kZSAqbm9kZSA9IE5VTEw7CisgICAg aW50IHJldCA9IDA7CisKKyAgICAvKiBnZXQgZ2x5cGggKi8KKyAgICBkdW1teS5jb2RlID0g Y29kZTsKKyAgICBkdW1teS5mb250c2l6ZSA9IHMtPmZvbnRzaXplOworICAgIGdseXBoID0g YXZfdHJlZV9maW5kKHMtPmdseXBocywgJmR1bW15LCBnbHlwaF9jbXAsIE5VTEwpOworICAg IGlmICghZ2x5cGgpIHsKKyAgICAgICAgaWYgKEZUX0xvYWRfR2x5cGgocy0+ZmFjZSwgY29k ZSwgcy0+ZnRfbG9hZF9mbGFncykpIHsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7CisgICAgICAgIH0KKyAgICAgICAgZ2x5cGggPSBhdl9tYWxsb2N6KHNpemVvZigq Z2x5cGgpKTsKKyAgICAgICAgaWYgKCFnbHlwaCkgeworICAgICAgICAgICAgcmV0ID0gQVZF UlJPUihFTk9NRU0pOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAg ICAgICBnbHlwaC0+Y29kZSAgPSBjb2RlOworICAgICAgICBnbHlwaC0+Zm9udHNpemUgPSBz LT5mb250c2l6ZTsKKyAgICAgICAgaWYgKEZUX0dldF9HbHlwaChzLT5mYWNlLT5nbHlwaCwg JmdseXBoLT5nbHlwaCkpIHsKKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsK KyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHMtPmJv cmRlcncpIHsKKyAgICAgICAgICAgIGdseXBoLT5ib3JkZXJfZ2x5cGggPSBnbHlwaC0+Z2x5 cGg7CisgICAgICAgICAgICBpZiAoRlRfR2x5cGhfU3Ryb2tlQm9yZGVyKCZnbHlwaC0+Ym9y ZGVyX2dseXBoLCBzLT5zdHJva2VyLCAwLCAwKSkgeworICAgICAgICAgICAgICAgIHJldCA9 IEFWRVJST1JfRVhURVJOQUw7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBtZWFzdXJlIHRleHQgaGVpZ2h0IHRv IGNhbGN1bGF0ZSB0ZXh0X2hlaWdodCAob3IgdGhlIG1heGltdW0gdGV4dCBoZWlnaHQpICov CisgICAgICAgIEZUX0dseXBoX0dldF9DQm94KGdseXBoLT5nbHlwaCwgRlRfR0xZUEhfQkJP WF9TVUJQSVhFTFMsICZnbHlwaC0+YmJveCk7CisKKyAgICAgICAgLyogY2FjaGUgdGhlIG5l d2x5IGNyZWF0ZWQgZ2x5cGggKi8KKyAgICAgICAgaWYgKCEobm9kZSA9IGF2X3RyZWVfbm9k ZV9hbGxvYygpKSkgeworICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAg ICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBhdl90cmVlX2luc2Vy dCgmcy0+Z2x5cGhzLCBnbHlwaCwgZ2x5cGhfY21wLCAmbm9kZSk7CisgICAgfSBlbHNlIHsK KyAgICAgICAgaWYgKHMtPmJvcmRlcncgJiYgIWdseXBoLT5ib3JkZXJfZ2x5cGgpIHsKKyAg ICAgICAgICAgIGdseXBoLT5ib3JkZXJfZ2x5cGggPSBnbHlwaC0+Z2x5cGg7CisgICAgICAg ICAgICBpZiAoRlRfR2x5cGhfU3Ryb2tlQm9yZGVyKCZnbHlwaC0+Ym9yZGVyX2dseXBoLCBz LT5zdHJva2VyLCAwLCAwKSkgeworICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfRVhU RVJOQUw7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgIH0KKworICAgIC8vIENoZWNrIGlmIGEgYml0bWFwIGlzIG5lZWRlZAor ICAgIGlmIChzaGlmdF94NjQgPj0gMCAmJiBzaGlmdF95NjQgPj0gMCkgeworICAgICAgICAv LyBHZXQgdGhlIGJpdG1hcCBzdWJwaXhlbCBpbmRleCAoMCAtPiAxNSkKKyAgICAgICAgaW50 IGlkeCA9IGdldF9zdWJwaXhlbF9pZHgoc2hpZnRfeDY0LCBzaGlmdF95NjQpOworICAgICAg ICBzaGlmdC54ID0gc2hpZnRfeDY0OworICAgICAgICBzaGlmdC55ID0gc2hpZnRfeTY0Owor CisgICAgICAgIGlmICghZ2x5cGgtPmJnbHlwaFtpZHhdKSB7CisgICAgICAgICAgICBGVF9H bHlwaCB0bXBfZ2x5cGggPSBnbHlwaC0+Z2x5cGg7CisgICAgICAgICAgICBpZiAoRlRfR2x5 cGhfVG9fQml0bWFwKCZ0bXBfZ2x5cGgsIEZUX1JFTkRFUl9NT0RFX05PUk1BTCwgJnNoaWZ0 LCAwKSkgeworICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfRVhURVJOQUw7CisgICAg ICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGds eXBoLT5iZ2x5cGhbaWR4XSA9IChGVF9CaXRtYXBHbHlwaCl0bXBfZ2x5cGg7CisgICAgICAg ICAgICBpZiAoZ2x5cGgtPmJnbHlwaFtpZHhdLT5iaXRtYXAucGl4ZWxfbW9kZSA9PSBGVF9Q SVhFTF9NT0RFX01PTk8pIHsKKyAgICAgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsICJNb25vY3JvbWF0aWMgKDFicHApIGZvbnRzIGFyZSBub3Qgc3VwcG9ydGVkLlxu Iik7CisgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOworICAgICAgICAg ICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg aWYgKHMtPmJvcmRlcncgJiYgIWdseXBoLT5ib3JkZXJfYmdseXBoW2lkeF0pIHsKKyAgICAg ICAgICAgIEZUX0dseXBoIHRtcF9nbHlwaCA9IGdseXBoLT5ib3JkZXJfZ2x5cGg7CisgICAg ICAgICAgICBpZiAoRlRfR2x5cGhfVG9fQml0bWFwKCZ0bXBfZ2x5cGgsIEZUX1JFTkRFUl9N T0RFX05PUk1BTCwgJnNoaWZ0LCAwKSkgeworICAgICAgICAgICAgICAgIHJldCA9IEFWRVJS T1JfRVhURVJOQUw7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGdseXBoLT5ib3JkZXJfYmdseXBoW2lkeF0gPSAoRlRfQml0bWFw R2x5cGgpdG1wX2dseXBoOworICAgICAgICB9CisgICAgfQorICAgIGlmIChnbHlwaF9wdHIp IHsKKyAgICAgICAgKmdseXBoX3B0ciA9IGdseXBoOworICAgIH0KKyAgICByZXR1cm4gMDsK KworZXJyb3I6CisgICAgaWYgKGdseXBoICYmIGdseXBoLT5nbHlwaCkKKyAgICAgICAgRlRf RG9uZV9HbHlwaChnbHlwaC0+Z2x5cGgpOworCisgICAgYXZfZnJlZXAoJmdseXBoKTsKKyAg ICBhdl9mcmVlcCgmbm9kZSk7CisgICAgcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGF2X2Nv bGQgaW50IGluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCiB7CiAgICAgaW50IGVycjsKICAg ICBEcmF3VGV4dENvbnRleHQgKnMgPSBjdHgtPnByaXY7Ci0gICAgR2x5cGggKmdseXBoOwog CiAgICAgYXZfZXhwcl9mcmVlKHMtPmZvbnRzaXplX3BleHByKTsKICAgICBzLT5mb250c2l6 ZV9wZXhwciA9IE5VTEw7CkBAIC04MTEsMTcgKzkxMCw4IEBAIHN0YXRpYyBhdl9jb2xkIGlu dCBpbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQogICAgICAgICAgICAgICAgICAgICAgICBG VF9TVFJPS0VSX0xJTkVKT0lOX1JPVU5ELCAwKTsKICAgICB9CiAKLSAgICBzLT51c2Vfa2Vy bmluZyA9IEZUX0hBU19LRVJOSU5HKHMtPmZhY2UpOwotCiAgICAgLyogbG9hZCB0aGUgZmFs bGJhY2sgZ2x5cGggd2l0aCBjb2RlIDAgKi8KLSAgICBsb2FkX2dseXBoKGN0eCwgTlVMTCwg MCk7Ci0KLSAgICAvKiBzZXQgdGhlIHRhYnNpemUgaW4gcGl4ZWxzICovCi0gICAgaWYgKChl cnIgPSBsb2FkX2dseXBoKGN0eCwgJmdseXBoLCAnICcpKSA8IDApIHsKLSAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQ291bGQgbm90IHNldCB0YWJzaXplLlxuIik7Ci0g ICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAgIHMtPnRhYnNpemUgKj0gZ2x5cGgtPmFk dmFuY2U7CisgICAgbG9hZF9nbHlwaChjdHgsIE5VTEwsIDAsIDAsIDApOwogCiAgICAgaWYg KHMtPmV4cF9tb2RlID09IEVYUF9TVFJGVElNRSAmJgogICAgICAgICAoc3RyY2hyKHMtPnRl eHQsICclJykgfHwgc3RyY2hyKHMtPnRleHQsICdcXCcpKSkKQEAgLTg0NCw2ICs5MzQsMTQg QEAgc3RhdGljIGludCBnbHlwaF9lbnVfZnJlZSh2b2lkICpvcGFxdWUsIHZvaWQgKmVsZW0p CiAKICAgICBGVF9Eb25lX0dseXBoKGdseXBoLT5nbHlwaCk7CiAgICAgRlRfRG9uZV9HbHlw aChnbHlwaC0+Ym9yZGVyX2dseXBoKTsKKyAgICBmb3IgKGludCB0ID0gMDsgdCA8IDE2OyAr K3QpIHsKKyAgICAgICAgaWYgKGdseXBoLT5iZ2x5cGhbdF0gIT0gTlVMTCkgeworICAgICAg ICAgICAgRlRfRG9uZV9HbHlwaCgoRlRfR2x5cGgpZ2x5cGgtPmJnbHlwaFt0XSk7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKGdseXBoLT5ib3JkZXJfYmdseXBoW3RdICE9IE5VTEwpIHsK KyAgICAgICAgICAgIEZUX0RvbmVfR2x5cGgoKEZUX0dseXBoKWdseXBoLT5ib3JkZXJfYmds eXBoW3RdKTsKKyAgICAgICAgfQorICAgIH0KICAgICBhdl9mcmVlKGVsZW0pOwogICAgIHJl dHVybiAwOwogfQpAQCAtODU5LDkgKzk1Nyw2IEBAIHN0YXRpYyBhdl9jb2xkIHZvaWQgdW5p bml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQogCiAgICAgcy0+eF9wZXhwciA9IHMtPnlfcGV4 cHIgPSBzLT5hX3BleHByID0gcy0+Zm9udHNpemVfcGV4cHIgPSBOVUxMOwogCi0gICAgYXZf ZnJlZXAoJnMtPnBvc2l0aW9ucyk7Ci0gICAgcy0+bmJfcG9zaXRpb25zID0gMDsKLQogICAg IGF2X3RyZWVfZW51bWVyYXRlKHMtPmdseXBocywgTlVMTCwgTlVMTCwgZ2x5cGhfZW51X2Zy ZWUpOwogICAgIGF2X3RyZWVfZGVzdHJveShzLT5nbHlwaHMpOwogICAgIHMtPmdseXBocyA9 IE5VTEw7CkBAIC0xMzI1LDUyICsxNDIwLDYgQEAgc3RhdGljIGludCBleHBhbmRfdGV4dChB VkZpbHRlckNvbnRleHQgKmN0eCwgY2hhciAqdGV4dCwgQVZCUHJpbnQgKmJwKQogICAgIHJl dHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRyYXdfZ2x5cGhzKERyYXdUZXh0Q29udGV4dCAq cywgQVZGcmFtZSAqZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwg aW50IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgRkZEcmF3Q29sb3IgKmNvbG9y LAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCBib3JkZXJ3KQot ewotICAgIGNoYXIgKnRleHQgPSBzLT5leHBhbmRlZF90ZXh0LnN0cjsKLSAgICB1aW50MzJf dCBjb2RlID0gMDsKLSAgICBpbnQgaSwgeDEsIHkxOwotICAgIHVpbnQ4X3QgKnA7Ci0gICAg R2x5cGggKmdseXBoID0gTlVMTDsKLQotICAgIGZvciAoaSA9IDAsIHAgPSB0ZXh0OyAqcDsg aSsrKSB7Ci0gICAgICAgIEZUX0JpdG1hcCBiaXRtYXA7Ci0gICAgICAgIEdseXBoIGR1bW15 ID0geyAwIH07Ci0gICAgICAgIEdFVF9VVEY4KGNvZGUsICpwID8gKnArKyA6IDAsIGNvZGUg PSAweGZmZmQ7IGdvdG8gY29udGludWVfb25faW52YWxpZDspOwotY29udGludWVfb25faW52 YWxpZDoKLQotICAgICAgICAvKiBza2lwIG5ldyBsaW5lIGNoYXJzLCBqdXN0IGdvIHRvIG5l dyBsaW5lICovCi0gICAgICAgIGlmIChjb2RlID09ICdcbicgfHwgY29kZSA9PSAnXHInIHx8 IGNvZGUgPT0gJ1x0JykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGR1bW15 LmNvZGUgPSBjb2RlOwotICAgICAgICBkdW1teS5mb250c2l6ZSA9IHMtPmZvbnRzaXplOwot ICAgICAgICBnbHlwaCA9IGF2X3RyZWVfZmluZChzLT5nbHlwaHMsICZkdW1teSwgZ2x5cGhf Y21wLCBOVUxMKTsKLQotICAgICAgICBiaXRtYXAgPSBib3JkZXJ3ID8gZ2x5cGgtPmJvcmRl cl9iaXRtYXAgOiBnbHlwaC0+Yml0bWFwOwotCi0gICAgICAgIGlmIChnbHlwaC0+Yml0bWFw LnBpeGVsX21vZGUgIT0gRlRfUElYRUxfTU9ERV9NT05PICYmCi0gICAgICAgICAgICBnbHlw aC0+Yml0bWFwLnBpeGVsX21vZGUgIT0gRlRfUElYRUxfTU9ERV9HUkFZKQotICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLQotICAgICAgICB4MSA9IHMtPnBvc2l0aW9u c1tpXS54K3MtPngreCAtIGJvcmRlcnc7Ci0gICAgICAgIHkxID0gcy0+cG9zaXRpb25zW2ld Lnkrcy0+eSt5IC0gYm9yZGVydzsKLQotICAgICAgICBmZl9ibGVuZF9tYXNrKCZzLT5kYywg Y29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmRhdGEsIGZyYW1lLT5saW5l c2l6ZSwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAuYnVm ZmVyLCBiaXRtYXAucGl0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgYml0bWFwLndpZHRo LCBiaXRtYXAucm93cywKLSAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAucGl4ZWxfbW9k ZSA9PSBGVF9QSVhFTF9NT0RFX01PTk8gPyAwIDogMywKLSAgICAgICAgICAgICAgICAgICAg ICAwLCB4MSwgeTEpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi0KIHN0YXRpYyB2 b2lkIHVwZGF0ZV9jb2xvcl93aXRoX2FscGhhKERyYXdUZXh0Q29udGV4dCAqcywgRkZEcmF3 Q29sb3IgKmNvbG9yLCBjb25zdCBGRkRyYXdDb2xvciBpbmNvbG9yKQogewogICAgICpjb2xv ciA9IGluY29sb3I7CkBAIC0xMzkzLDIzICsxNDQyLDI2MyBAQCBzdGF0aWMgdm9pZCB1cGRh dGVfYWxwaGEoRHJhd1RleHRDb250ZXh0ICpzKQogICAgICAgICBzLT5hbHBoYSA9IDI1NiAq IGFscGhhOwogfQogCi1zdGF0aWMgaW50IGRyYXdfdGV4dChBVkZpbHRlckNvbnRleHQgKmN0 eCwgQVZGcmFtZSAqZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGlu dCBoZWlnaHQpCitzdGF0aWMgaW50IGRyYXdfZ2x5cGhzKERyYXdUZXh0Q29udGV4dCAqcywg QVZGcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgIEZGRHJhd0NvbG9yICpj b2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgVGV4dE1ldHJpY3MgKm1ldHJpY3MsCisg ICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IGJvcmRlcncpCit7Cisg ICAgaW50IGcsIGwsIHgxLCB5MSwgdzEsIGgxLCBpZHg7CisgICAgaW50IGR4ID0gMCwgZHkg PSAwLCBwZHggPSAwOworICAgIEdseXBoSW5mbyAqaW5mbzsKKyAgICBHbHlwaCBkdW1teSA9 IHsgMCB9LCAqZ2x5cGg7CisgICAgRlRfQml0bWFwIGJpdG1hcDsKKyAgICBGVF9CaXRtYXBH bHlwaCBiX2dseXBoOworICAgIGludCBjbGlwX3ggPSAwLCBjbGlwX3kgPSAwOworCisgICAg Y2xpcF94ID0gRkZNSU4obWV0cmljcy0+cmVjdF94ICsgbWV0cmljcy0+d2lkdGggKyBzLT5i Yl9yaWdodCwgZnJhbWUtPndpZHRoKTsKKyAgICBjbGlwX3kgPSBGRk1JTihtZXRyaWNzLT5y ZWN0X3kgKyBtZXRyaWNzLT5oZWlnaHQgKyBzLT5iYl9ib3R0b20sIGZyYW1lLT5oZWlnaHQp OworCisgICAgZm9yIChsID0gMDsgbCA8IHMtPmxpbmVfY291bnQ7ICsrbCkgeworICAgICAg ICBUZXh0TGluZSAqbGluZSA9ICZzLT5saW5lc1tsXTsKKyAgICAgICAgZm9yIChnID0gMDsg ZyA8IGxpbmUtPmhiX2RhdGEuZ2x5cGhfY291bnQ7ICsrZykgeworICAgICAgICAgICAgaW5m byA9ICZsaW5lLT5nbHlwaHNbZ107CisgICAgICAgICAgICBkdW1teS5mb250c2l6ZSA9IHMt PmZvbnRzaXplOworICAgICAgICAgICAgZHVtbXkuY29kZSA9IGluZm8tPmNvZGU7CisgICAg ICAgICAgICBnbHlwaCA9IGF2X3RyZWVfZmluZChzLT5nbHlwaHMsICZkdW1teSwgZ2x5cGhf Y21wLCBOVUxMKTsKKyAgICAgICAgICAgIGlmICghZ2x5cGgpIHsKKyAgICAgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg ICBpZHggPSBnZXRfc3VicGl4ZWxfaWR4KGluZm8tPnNoaWZ0X3g2NCwgaW5mby0+c2hpZnRf eTY0KTsKKyAgICAgICAgICAgIGJfZ2x5cGggPSBib3JkZXJ3ID8gZ2x5cGgtPmJvcmRlcl9i Z2x5cGhbaWR4XSA6IGdseXBoLT5iZ2x5cGhbaWR4XTsKKyAgICAgICAgICAgIGJpdG1hcCA9 IGJfZ2x5cGgtPmJpdG1hcDsKKyAgICAgICAgICAgIHgxID0geCArIGluZm8tPnggKyBiX2ds eXBoLT5sZWZ0OworICAgICAgICAgICAgeTEgPSB5ICsgaW5mby0+eSAtIGJfZ2x5cGgtPnRv cDsKKyAgICAgICAgICAgIHcxID0gYml0bWFwLndpZHRoOworICAgICAgICAgICAgaDEgPSBi aXRtYXAucm93czsKKworICAgICAgICAgICAgLy8gT2Zmc2V0IG9mIHRoZSBnbHlwaCdzIGJp dG1hcCBpbiB0aGUgdmlzaWJsZSByZWdpb24KKyAgICAgICAgICAgIGR4ID0gZHkgPSAwOwor ICAgICAgICAgICAgaWYgKHgxIDwgbWV0cmljcy0+cmVjdF94IC0gcy0+YmJfbGVmdCkgewor ICAgICAgICAgICAgICAgIGR4ID0gbWV0cmljcy0+cmVjdF94IC0gcy0+YmJfbGVmdCAtIHgx OworICAgICAgICAgICAgICAgIHgxID0gbWV0cmljcy0+cmVjdF94IC0gcy0+YmJfbGVmdDsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh5MSA8IG1ldHJpY3MtPnJlY3RfeSAt IHMtPmJiX3RvcCkgeworICAgICAgICAgICAgICAgIGR5ID0gbWV0cmljcy0+cmVjdF95IC0g cy0+YmJfdG9wIC0geTE7CisgICAgICAgICAgICAgICAgeTEgPSBtZXRyaWNzLT5yZWN0X3kg LSBzLT5iYl90b3A7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGNoZWNrIGlm IHRoZSBnbHlwaCBpcyBlbXB0eSBvciBvdXQgb2YgdGhlIGNsaXBwaW5nIHJlZ2lvbgorICAg ICAgICAgICAgaWYgKGR4ID49IHcxIHx8IGR5ID49IGgxIHx8IHgxID49IGNsaXBfeCB8fCB5 MSA+PSBjbGlwX3kpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg IH0KKworICAgICAgICAgICAgcGR4ID0gZHggKyBkeSAqIGJpdG1hcC5waXRjaDsKKyAgICAg ICAgICAgIHcxID0gRkZNSU4oY2xpcF94IC0geDEsIHcxIC0gZHgpOworICAgICAgICAgICAg aDEgPSBGRk1JTihjbGlwX3kgLSB5MSwgaDEgLSBkeSk7CisKKyAgICAgICAgICAgIGZmX2Js ZW5kX21hc2soJnMtPmRjLCBjb2xvciwgZnJhbWUtPmRhdGEsIGZyYW1lLT5saW5lc2l6ZSwg Y2xpcF94LCBjbGlwX3ksCisgICAgICAgICAgICAgICAgYml0bWFwLmJ1ZmZlciArIHBkeCwg Yml0bWFwLnBpdGNoLCB3MSwgaDEsIDMsIDAsIHgxLCB5MSk7CisgICAgICAgIH0KKyAgICB9 CisKKyAgICByZXR1cm4gMDsKK30KKworLy8gU2hhcGVzIGEgbGluZSBvZiB0ZXh0IHVzaW5n IGxpYmhhcmZidXp6CitzdGF0aWMgaW50IHNoYXBlX3RleHRfaGIoRHJhd1RleHRDb250ZXh0 ICpzLCBIYXJmYnV6ekRhdGEqIGhiLCBjb25zdCBjaGFyKiB0ZXh0LCBpbnQgdGV4dExlbikg Cit7CisgICAgaGItPmJ1ZiA9IGhiX2J1ZmZlcl9jcmVhdGUoKTsKKyAgICBpZighaGJfYnVm ZmVyX2FsbG9jYXRpb25fc3VjY2Vzc2Z1bChoYi0+YnVmKSkgeworICAgICAgICByZXR1cm4g QVZFUlJPUihFTk9NRU0pOworICAgIH0KKyAgICBoYl9idWZmZXJfc2V0X2RpcmVjdGlvbiho Yi0+YnVmLCBIQl9ESVJFQ1RJT05fTFRSKTsKKyAgICBoYl9idWZmZXJfc2V0X3NjcmlwdCho Yi0+YnVmLCBIQl9TQ1JJUFRfTEFUSU4pOworICAgIGhiX2J1ZmZlcl9zZXRfbGFuZ3VhZ2Uo aGItPmJ1ZiwgaGJfbGFuZ3VhZ2VfZnJvbV9zdHJpbmcoImVuIiwgLTEpKTsKKyAgICBoYl9i dWZmZXJfZ3Vlc3Nfc2VnbWVudF9wcm9wZXJ0aWVzKGhiLT5idWYpOworICAgIGhiLT5mb250 ID0gaGJfZnRfZm9udF9jcmVhdGUocy0+ZmFjZSwgTlVMTCk7CisgICAgaWYoaGItPmZvbnQg PT0gTlVMTCkgeworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIH0KKyAg ICBoYl9mdF9mb250X3NldF9mdW5jcyhoYi0+Zm9udCk7CisgICAgaGJfYnVmZmVyX2FkZF91 dGY4KGhiLT5idWYsIHRleHQsIHRleHRMZW4sIDAsIC0xKTsKKyAgICBoYl9zaGFwZShoYi0+ Zm9udCwgaGItPmJ1ZiwgTlVMTCwgMCk7CisgICAgaGItPmdseXBoX2luZm8gPSBoYl9idWZm ZXJfZ2V0X2dseXBoX2luZm9zKGhiLT5idWYsICZoYi0+Z2x5cGhfY291bnQpOworICAgIGhi LT5nbHlwaF9wb3MgPSBoYl9idWZmZXJfZ2V0X2dseXBoX3Bvc2l0aW9ucyhoYi0+YnVmLCAm aGItPmdseXBoX2NvdW50KTsKKyAgICAKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgaGJfZGVzdHJveShIYXJmYnV6ekRhdGEgKmhiKSAKK3sKKyAgICBoYl9idWZmZXJfZGVz dHJveShoYi0+YnVmKTsKKyAgICBoYl9mb250X2Rlc3Ryb3koaGItPmZvbnQpOworICAgIGhi LT5idWYgPSBOVUxMOworICAgIGhiLT5mb250ID0gTlVMTDsKKyAgICBoYi0+Z2x5cGhfaW5m byA9IE5VTEw7CisgICAgaGItPmdseXBoX3BvcyA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQg bWVhc3VyZV90ZXh0KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBUZXh0TWV0cmljcyAqbWV0cmlj cykKIHsKICAgICBEcmF3VGV4dENvbnRleHQgKnMgPSBjdHgtPnByaXY7Ci0gICAgQVZGaWx0 ZXJMaW5rICppbmxpbmsgPSBjdHgtPmlucHV0c1swXTsKKyAgICBjaGFyICp0ZXh0ID0gcy0+ ZXhwYW5kZWRfdGV4dC5zdHI7CisgICAgY2hhciAqdGV4dGR1cCwgKnN0YXJ0OworICAgIGlu dCBudW1fY2hhcnMgPSAwOworICAgIGludCB3aWR0aDY0ID0gMCwgdzY0ID0gMDsKKyAgICBp bnQgY3VyX21pbl95NjQgPSAwLCBmaXJzdF9tYXhfeTY0ID0gLTMyMDAwOworICAgIGludCBm aXJzdF9taW5feDY0ID0gMzIwMDAsIGxhc3RfbWF4X3g2NCA9IC0zMjAwMDsKKyAgICBpbnQg bWluX3k2NCA9IDMyMDAwLCBtYXhfeTY0ID0gLTMyMDAwLCBtaW5feDY0ID0gMzIwMDAsIG1h eF94NjQgPSAtMzIwMDA7CisgICAgaW50IGxpbmVfY291bnQgPSAwOworICAgIHVpbnQzMl90 IGNvZGUgPSAwOworICAgIEdseXBoICpnbHlwaCA9IE5VTEw7CisgICAgaW50IGhlaWdodDY0 OworCisgICAgaW50IGksIHRhYl9pZHggPSAwLCBsYXN0X3RhYl9pZHggPSAwLCBsaW5lX29m ZnNldCA9IDA7CisgICAgY2hhciogcDsKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIC8vIENv dW50IHRoZSBsaW5lcyBhbmQgdGhlIHRhYiBjaGFyYWN0ZXJzCisgICAgcy0+dGFiX2NvdW50 ID0gMDsKKyAgICBmb3IgKGkgPSAwLCBwID0gdGV4dDsgMTsgaSsrKSB7CisgICAgICAgIEdF VF9VVEY4KGNvZGUsICpwID8gKnArKyA6IDAsIGNvZGUgPSAweGZmZmQ7IGdvdG8gY29udGlu dWVfb25fZmFpbGVkOyk7Citjb250aW51ZV9vbl9mYWlsZWQ6CisgICAgICAgIGlmIChpc19u ZXdsaW5lKGNvZGUpIHx8IGNvZGUgPT0gMCkgeworICAgICAgICAgICAgKytsaW5lX2NvdW50 OworICAgICAgICAgICAgaWYgKGNvZGUgPT0gMCkgeworICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gJ1x0Jykgewor ICAgICAgICAgICAgKytzLT50YWJfY291bnQ7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICB1 aW50MzJfdCBjb2RlID0gMCwgcHJldl9jb2RlID0gMDsKLSAgICBpbnQgeCA9IDAsIHkgPSAw LCBpID0gMCwgcmV0OwotICAgIGludCBtYXhfdGV4dF9saW5lX3cgPSAwLCBsZW47Ci0gICAg aW50IGJveF93LCBib3hfaDsKLSAgICBjaGFyICp0ZXh0OwotICAgIHVpbnQ4X3QgKnA7Ci0g ICAgaW50IHlfbWluID0gMzIwMDAsIHlfbWF4ID0gLTMyMDAwOwotICAgIGludCB4X21pbiA9 IDMyMDAwLCB4X21heCA9IC0zMjAwMDsKLSAgICBGVF9WZWN0b3IgZGVsdGE7Ci0gICAgR2x5 cGggKmdseXBoID0gTlVMTCwgKnByZXZfZ2x5cGggPSBOVUxMOwotICAgIEdseXBoIGR1bW15 ID0geyAwIH07CisgICAgLy8gRXZhbHVhdGUgdGhlIHdpZHRoIG9mIHRoZSBzcGFjZSBjaGFy YWN0ZXIgaWYgbmVlZGVkIHRvIHJlcGxhY2UgdGFicworICAgIGlmIChzLT50YWJfY291bnQg PiAwICYmICFzLT5ibGFua19hZHZhbmNlNjQpIHsKKyAgICAgICAgSGFyZmJ1enpEYXRhIGhi X2RhdGE7CisgICAgICAgIHJldCA9IHNoYXBlX3RleHRfaGIocywgJmhiX2RhdGEsICIgIiwg MSk7CisgICAgICAgIGlmKHJldCAhPSAwKSB7CisgICAgICAgICAgICBnb3RvIGRvbmU7Cisg ICAgICAgIH0KKyAgICAgICAgcy0+YmxhbmtfYWR2YW5jZTY0ID0gaGJfZGF0YS5nbHlwaF9w b3NbMF0ueF9hZHZhbmNlOworICAgICAgICBoYl9kZXN0cm95KCZoYl9kYXRhKTsKKyAgICB9 CisKKyAgICBzLT5saW5lX2NvdW50ID0gbGluZV9jb3VudDsKKyAgICBzLT5saW5lcyA9IGF2 X21hbGxvY3oobGluZV9jb3VudCAqIHNpemVvZihUZXh0TGluZSkpOworICAgIHMtPnRhYl9j bHVzdGVycyA9IGF2X21hbGxvY3oocy0+dGFiX2NvdW50ICogc2l6ZW9mKHVpbnQzMl90KSk7 CisgICAgZm9yIChpID0gMDsgaSA8IHMtPnRhYl9jb3VudDsgKytpKSB7CisgICAgICAgIHMt PnRhYl9jbHVzdGVyc1tpXSA9IC0xOworICAgIH0KKworICAgIHN0YXJ0ID0gdGV4dGR1cCA9 IGF2X3N0cmR1cCh0ZXh0KTsKKyAgICBpZiAodGV4dGR1cCA9PSBOVUxMKSB7CisgICAgICAg IHJldCA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKyAg ICBsaW5lX2NvdW50ID0gMDsKKyAgICBmb3IgKGkgPSAwLCBwID0gdGV4dGR1cDsgMTsgaSsr KSB7CisgICAgICAgIGlmICgqcCA9PSAnXHQnKSB7CisgICAgICAgICAgICBzLT50YWJfY2x1 c3RlcnNbdGFiX2lkeCsrXSA9IGk7CisgICAgICAgICAgICAqcCA9ICcgJzsKKyAgICAgICAg fQorICAgICAgICBHRVRfVVRGOChjb2RlLCAqcCA/ICpwKysgOiAwLCBjb2RlID0gMHhmZmZk OyBnb3RvIGNvbnRpbnVlX29uX2ZhaWxlZDI7KTsKK2NvbnRpbnVlX29uX2ZhaWxlZDI6Cisg ICAgICAgIGlmIChpc19uZXdsaW5lKGNvZGUpIHx8IGNvZGUgPT0gMCkgeworICAgICAgICAg ICAgVGV4dExpbmUgKmN1cl9saW5lID0gJnMtPmxpbmVzW2xpbmVfY291bnRdOworICAgICAg ICAgICAgSGFyZmJ1enpEYXRhICpoYiA9ICZjdXJfbGluZS0+aGJfZGF0YTsKKyAgICAgICAg ICAgIGN1cl9saW5lLT5jbHVzdGVyX29mZnNldCA9IGxpbmVfb2Zmc2V0OworICAgICAgICAg ICAgcmV0ID0gc2hhcGVfdGV4dF9oYihzLCBoYiwgc3RhcnQsIG51bV9jaGFycyk7CisgICAg ICAgICAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICB3NjQgPSAwOworICAgICAgICAgICAgY3VyX21p bl95NjQgPSAzMjAwMDsKKyAgICAgICAgICAgIGZvciAoaW50IHQgPSAwOyB0IDwgaGItPmds eXBoX2NvdW50OyArK3QpIHsKKyAgICAgICAgICAgICAgICB1aW50OF90IGlzX3RhYiA9IGxh c3RfdGFiX2lkeCA8IHMtPnRhYl9jb3VudCAmJgorICAgICAgICAgICAgICAgICAgICBoYi0+ Z2x5cGhfaW5mb1t0XS5jbHVzdGVyID09IHMtPnRhYl9jbHVzdGVyc1tsYXN0X3RhYl9pZHhd IC0gbGluZV9vZmZzZXQ7CisgICAgICAgICAgICAgICAgaWYgKGlzX3RhYikgeworICAgICAg ICAgICAgICAgICAgICArK2xhc3RfdGFiX2lkeDsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgcmV0ID0gbG9hZF9nbHlwaChjdHgsICZnbHlwaCwgaGItPmdseXBoX2lu Zm9bdF0uY29kZXBvaW50LCAtMSwgLTEpOworICAgICAgICAgICAgICAgIGlmIChyZXQgIT0g MCkgeworICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIGlmIChsaW5lX2NvdW50ID09IDApIHsKKyAgICAgICAgICAg ICAgICAgICAgZmlyc3RfbWF4X3k2NCA9IEZGTUFYKGdseXBoLT5iYm94LnlNYXgsIGZpcnN0 X21heF95NjQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodCA9 PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cl9saW5lLT5vZmZzZXRfbGVmdDY0ID0g Z2x5cGgtPmJib3gueE1pbjsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RfbWluX3g2NCA9 IEZGTUlOKGdseXBoLT5iYm94LnhNaW4sIGZpcnN0X21pbl94NjQpOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodCA9PSBoYi0+Z2x5cGhfY291bnQgLSAxKSB7 CisgICAgICAgICAgICAgICAgICAgIHc2NCArPSBnbHlwaC0+YmJveC54TWF4OworICAgICAg ICAgICAgICAgICAgICBsYXN0X21heF94NjQgPSBGRk1BWChnbHlwaC0+YmJveC54TWF4LCBs YXN0X21heF94NjQpOworICAgICAgICAgICAgICAgICAgICBjdXJfbGluZS0+b2Zmc2V0X3Jp Z2h0NjQgPSBnbHlwaC0+YmJveC54TWF4OworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgICAgIGlmIChpc190YWIpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGludCBzaXplID0gcy0+YmxhbmtfYWR2YW5jZTY0ICogcy0+dGFic2l6ZTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHc2NCA9ICh3NjQgLyBzaXplICsgMSkgKiBzaXplOworICAg ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdzY0 ICs9IGhiLT5nbHlwaF9wb3NbdF0ueF9hZHZhbmNlOworICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN1cl9taW5feTY0ID0gRkZN SU4oZ2x5cGgtPmJib3gueU1pbiwgY3VyX21pbl95NjQpOworICAgICAgICAgICAgICAgIG1p bl95NjQgPSBGRk1JTihnbHlwaC0+YmJveC55TWluLCBtaW5feTY0KTsKKyAgICAgICAgICAg ICAgICBtYXhfeTY0ID0gRkZNQVgoZ2x5cGgtPmJib3gueU1heCwgbWF4X3k2NCk7CisgICAg ICAgICAgICAgICAgbWluX3g2NCA9IEZGTUlOKGdseXBoLT5iYm94LnhNaW4sIG1pbl94NjQp OworICAgICAgICAgICAgICAgIG1heF94NjQgPSBGRk1BWChnbHlwaC0+YmJveC54TWF4LCBt YXhfeDY0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3VyX2xpbmUtPndpZHRo NjQgPSB3NjQ7CisKKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICIgIExp bmU6ICVkIC0tIGdseXBocyBjb3VudDogJWQgLSB3aWR0aDY0OiAlZCAtIG9mZnNldF9sZWZ0 NjQ6ICVkIC0gb2Zmc2V0X3JpZ2h0NjQ6ICVkKVxuIiwKKyAgICAgICAgICAgICAgICBsaW5l X2NvdW50LCBoYi0+Z2x5cGhfY291bnQsIGN1cl9saW5lLT53aWR0aDY0LCBjdXJfbGluZS0+ b2Zmc2V0X2xlZnQ2NCwgY3VyX2xpbmUtPm9mZnNldF9yaWdodDY0KTsKKworICAgICAgICAg ICAgaWYgKHc2NCA+IHdpZHRoNjQpIHsKKyAgICAgICAgICAgICAgICB3aWR0aDY0ID0gdzY0 OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbnVtX2NoYXJzID0gLTE7CisgICAgICAg ICAgICBzdGFydCA9IHA7CisgICAgICAgICAgICArK2xpbmVfY291bnQ7CisgICAgICAgICAg ICBsaW5lX29mZnNldCA9IGkgKyAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvZGUg PT0gMCkgYnJlYWs7CisgICAgICAgICsrbnVtX2NoYXJzOworICAgIH0KKworICAgIG1ldHJp Y3MtPmxpbmVfaGVpZ2h0NjQgPSBzLT5mYWNlLT5zaXplLT5tZXRyaWNzLmhlaWdodDsKKyAg ICAKKyAgICBtZXRyaWNzLT53aWR0aCA9IFBPU19DRUlMKHdpZHRoNjQsIDY0KTsKKyAgICBo ZWlnaHQ2NCA9IChtZXRyaWNzLT5saW5lX2hlaWdodDY0ICsgcy0+bGluZV9zcGFjaW5nICog NjQpICoKKyAgICAgICAgKEZGTUFYKDAsIGxpbmVfY291bnQgLSAxKSkgKyBmaXJzdF9tYXhf eTY0IC0gY3VyX21pbl95NjQ7CisgICAgbWV0cmljcy0+aGVpZ2h0ID0gUE9TX0NFSUwoaGVp Z2h0NjQsIDY0KTsKKworICAgIG1ldHJpY3MtPm9mZnNldF90b3A2NCA9IGZpcnN0X21heF95 NjQ7CisgICAgbWV0cmljcy0+b2Zmc2V0X3JpZ2h0NjQgPSBsYXN0X21heF94NjQ7CisgICAg bWV0cmljcy0+b2Zmc2V0X2JvdHRvbTY0ID0gY3VyX21pbl95NjQ7CisgICAgbWV0cmljcy0+ b2Zmc2V0X2xlZnQ2NCA9IGZpcnN0X21pbl94NjQ7CisgICAgbWV0cmljcy0+bWluX3g2NCA9 IG1pbl94NjQ7CisgICAgbWV0cmljcy0+bWluX3k2NCA9IG1pbl95NjQ7CisgICAgbWV0cmlj cy0+bWF4X3g2NCA9IG1heF94NjQ7CisgICAgbWV0cmljcy0+bWF4X3k2NCA9IG1heF95NjQ7 CisKK2RvbmU6CisgICAgaWYgKHRleHRkdXAgIT0gTlVMTCkgeworICAgICAgICBhdl9mcmVl KHRleHRkdXApOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRy YXdfdGV4dChBVkZpbHRlckNvbnRleHQgKmN0eCwgQVZGcmFtZSAqZnJhbWUpCit7CisgICAg RHJhd1RleHRDb250ZXh0ICpzID0gY3R4LT5wcml2OworICAgIEFWRmlsdGVyTGluayAqaW5s aW5rID0gY3R4LT5pbnB1dHNbMF07CisgICAgaW50IHggPSAwLCB5ID0gMCwgcmV0OworICAg IGludCBzaGlmdF94NjQsIHNoaWZ0X3k2NDsKKyAgICBpbnQgeDY0LCB5NjQ7CisgICAgR2x5 cGggKmdseXBoID0gTlVMTDsKIAogICAgIHRpbWVfdCBub3cgPSB0aW1lKDApOwogICAgIHN0 cnVjdCB0bSBsdGltZTsKQEAgLTE0MjAsNiArMTcwOSwxNCBAQCBzdGF0aWMgaW50IGRyYXdf dGV4dChBVkZpbHRlckNvbnRleHQgKmN0eCwgQVZGcmFtZSAqZnJhbWUsCiAgICAgRkZEcmF3 Q29sb3IgYm9yZGVyY29sb3I7CiAgICAgRkZEcmF3Q29sb3IgYm94Y29sb3I7CiAKKyAgICBp bnQgd2lkdGggPSBmcmFtZS0+d2lkdGg7CisgICAgaW50IGhlaWdodCA9IGZyYW1lLT5oZWln aHQ7CisgICAgaW50IHJlY194ID0gMCwgcmVjX3kgPSAwLCByZWNfd2lkdGggPSAwLCByZWNf aGVpZ2h0ID0gMDsKKyAgICBpbnQgaXNfb3V0c2lkZSA9IDA7CisgICAgaW50IGxhc3RfdGFi X2lkeCA9IDA7CisKKyAgICBUZXh0TWV0cmljcyBtZXRyaWNzOworCiAgICAgYXZfYnByaW50 X2NsZWFyKGJwKTsKIAogICAgIGlmIChzLT5iYXNldGltZSAhPSBBVl9OT1BUU19WQUxVRSkK QEAgLTE0NDgsMTMgKzE3NDUsNiBAQCBzdGF0aWMgaW50IGRyYXdfdGV4dChBVkZpbHRlckNv bnRleHQgKmN0eCwgQVZGcmFtZSAqZnJhbWUsCiAKICAgICBpZiAoIWF2X2JwcmludF9pc19j b21wbGV0ZShicCkpCiAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0gICAgdGV4 dCA9IHMtPmV4cGFuZGVkX3RleHQuc3RyOwotICAgIGlmICgobGVuID0gcy0+ZXhwYW5kZWRf dGV4dC5sZW4pID4gcy0+bmJfcG9zaXRpb25zKSB7Ci0gICAgICAgIGlmICghKHMtPnBvc2l0 aW9ucyA9Ci0gICAgICAgICAgICAgIGF2X3JlYWxsb2Mocy0+cG9zaXRpb25zLCBsZW4qc2l6 ZW9mKCpzLT5wb3NpdGlvbnMpKSkpCi0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOwotICAgICAgICBzLT5uYl9wb3NpdGlvbnMgPSBsZW47Ci0gICAgfQogCiAgICAgaWYg KHMtPmZvbnRjb2xvcl9leHByWzBdKSB7CiAgICAgICAgIC8qIElmIGV4cHJlc3Npb24gaXMg c2V0LCBldmFsdWF0ZSBhbmQgcmVwbGFjZSB0aGUgc3RhdGljIHZhbHVlICovCkBAIC0xNDcw LDg1ICsxNzYwLDI2IEBAIHN0YXRpYyBpbnQgZHJhd190ZXh0KEFWRmlsdGVyQ29udGV4dCAq Y3R4LCBBVkZyYW1lICpmcmFtZSwKICAgICAgICAgZmZfZHJhd19jb2xvcigmcy0+ZGMsICZz LT5mb250Y29sb3IsIHMtPmZvbnRjb2xvci5yZ2JhKTsKICAgICB9CiAKLSAgICB4ID0gMDsK LSAgICB5ID0gMDsKLQotICAgIGlmICgocmV0ID0gdXBkYXRlX2ZvbnRzaXplKGN0eCkpIDwg MCkKKyAgICBpZiAoKHJldCA9IHVwZGF0ZV9mb250c2l6ZShjdHgpKSA8IDApIHsKICAgICAg ICAgcmV0dXJuIHJldDsKLQotICAgIC8qIGxvYWQgYW5kIGNhY2hlIGdseXBocyAqLwotICAg IGZvciAoaSA9IDAsIHAgPSB0ZXh0OyAqcDsgaSsrKSB7Ci0gICAgICAgIEdFVF9VVEY4KGNv ZGUsICpwID8gKnArKyA6IDAsIGNvZGUgPSAweGZmZmQ7IGdvdG8gY29udGludWVfb25faW52 YWxpZDspOwotY29udGludWVfb25faW52YWxpZDoKLQotICAgICAgICAvKiBnZXQgZ2x5cGgg Ki8KLSAgICAgICAgZHVtbXkuY29kZSA9IGNvZGU7Ci0gICAgICAgIGR1bW15LmZvbnRzaXpl ID0gcy0+Zm9udHNpemU7Ci0gICAgICAgIGdseXBoID0gYXZfdHJlZV9maW5kKHMtPmdseXBo cywgJmR1bW15LCBnbHlwaF9jbXAsIE5VTEwpOwotICAgICAgICBpZiAoIWdseXBoKSB7Ci0g ICAgICAgICAgICByZXQgPSBsb2FkX2dseXBoKGN0eCwgJmdseXBoLCBjb2RlKTsKLSAgICAg ICAgICAgIGlmIChyZXQgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAg ICAgIH0KLQotICAgICAgICB5X21pbiA9IEZGTUlOKGdseXBoLT5iYm94LnlNaW4sIHlfbWlu KTsKLSAgICAgICAgeV9tYXggPSBGRk1BWChnbHlwaC0+YmJveC55TWF4LCB5X21heCk7Ci0g ICAgICAgIHhfbWluID0gRkZNSU4oZ2x5cGgtPmJib3gueE1pbiwgeF9taW4pOwotICAgICAg ICB4X21heCA9IEZGTUFYKGdseXBoLT5iYm94LnhNYXgsIHhfbWF4KTsKICAgICB9Ci0gICAg cy0+bWF4X2dseXBoX2ggPSB5X21heCAtIHlfbWluOwotICAgIHMtPm1heF9nbHlwaF93ID0g eF9tYXggLSB4X21pbjsKLQotICAgIC8qIGNvbXB1dGUgYW5kIHNhdmUgcG9zaXRpb24gZm9y IGVhY2ggZ2x5cGggKi8KLSAgICBnbHlwaCA9IE5VTEw7Ci0gICAgZm9yIChpID0gMCwgcCA9 IHRleHQ7ICpwOyBpKyspIHsKLSAgICAgICAgR0VUX1VURjgoY29kZSwgKnAgPyAqcCsrIDog MCwgY29kZSA9IDB4ZmZmZDsgZ290byBjb250aW51ZV9vbl9pbnZhbGlkMjspOwotY29udGlu dWVfb25faW52YWxpZDI6Ci0KLSAgICAgICAgLyogc2tpcCB0aGUgXG4gaW4gdGhlIHNlcXVl bmNlIFxyXG4gKi8KLSAgICAgICAgaWYgKHByZXZfY29kZSA9PSAnXHInICYmIGNvZGUgPT0g J1xuJykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHByZXZfY29kZSA9IGNv ZGU7Ci0gICAgICAgIGlmIChpc19uZXdsaW5lKGNvZGUpKSB7Ci0KLSAgICAgICAgICAgIG1h eF90ZXh0X2xpbmVfdyA9IEZGTUFYKG1heF90ZXh0X2xpbmVfdywgeCk7Ci0gICAgICAgICAg ICB5ICs9IHMtPm1heF9nbHlwaF9oICsgcy0+bGluZV9zcGFjaW5nOwotICAgICAgICAgICAg eCA9IDA7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8q IGdldCBnbHlwaCAqLwotICAgICAgICBwcmV2X2dseXBoID0gZ2x5cGg7Ci0gICAgICAgIGR1 bW15LmNvZGUgPSBjb2RlOwotICAgICAgICBkdW1teS5mb250c2l6ZSA9IHMtPmZvbnRzaXpl OwotICAgICAgICBnbHlwaCA9IGF2X3RyZWVfZmluZChzLT5nbHlwaHMsICZkdW1teSwgZ2x5 cGhfY21wLCBOVUxMKTsKLQotICAgICAgICAvKiBrZXJuaW5nICovCi0gICAgICAgIGlmIChz LT51c2Vfa2VybmluZyAmJiBwcmV2X2dseXBoICYmIGdseXBoLT5jb2RlKSB7Ci0gICAgICAg ICAgICBGVF9HZXRfS2VybmluZyhzLT5mYWNlLCBwcmV2X2dseXBoLT5jb2RlLCBnbHlwaC0+ Y29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0X2tlcm5pbmdfZGVmYXVsdCwg JmRlbHRhKTsKLSAgICAgICAgICAgIHggKz0gZGVsdGEueCA+PiA2OwotICAgICAgICB9CiAK LSAgICAgICAgLyogc2F2ZSBwb3NpdGlvbiAqLwotICAgICAgICBzLT5wb3NpdGlvbnNbaV0u eCA9IHggKyBnbHlwaC0+Yml0bWFwX2xlZnQ7Ci0gICAgICAgIHMtPnBvc2l0aW9uc1tpXS55 ID0geSAtIGdseXBoLT5iaXRtYXBfdG9wICsgeV9tYXg7Ci0gICAgICAgIGlmIChjb2RlID09 ICdcdCcpIHggID0gKHggLyBzLT50YWJzaXplICsgMSkqcy0+dGFic2l6ZTsKLSAgICAgICAg ZWxzZSAgICAgICAgICAgICAgeCArPSBnbHlwaC0+YWR2YW5jZTsKKyAgICBpZiAoKHJldCA9 IG1lYXN1cmVfdGV4dChjdHgsICZtZXRyaWNzKSkgPCAwKSB7CisgICAgICAgIHJldHVybiBy ZXQ7CiAgICAgfQogCi0gICAgbWF4X3RleHRfbGluZV93ID0gRkZNQVgoeCwgbWF4X3RleHRf bGluZV93KTsKKyAgICBzLT5tYXhfZ2x5cGhfaCA9IFBPU19DRUlMKG1ldHJpY3MubWF4X3k2 NCAtIG1ldHJpY3MubWluX3k2NCwgNjQpOworICAgIHMtPm1heF9nbHlwaF93ID0gUE9TX0NF SUwobWV0cmljcy5tYXhfeDY0IC0gbWV0cmljcy5taW5feDY0LCA2NCk7CiAKLSAgICBzLT52 YXJfdmFsdWVzW1ZBUl9UV10gPSBzLT52YXJfdmFsdWVzW1ZBUl9URVhUX1ddID0gbWF4X3Rl eHRfbGluZV93OwotICAgIHMtPnZhcl92YWx1ZXNbVkFSX1RIXSA9IHMtPnZhcl92YWx1ZXNb VkFSX1RFWFRfSF0gPSB5ICsgcy0+bWF4X2dseXBoX2g7CisgICAgcy0+dmFyX3ZhbHVlc1tW QVJfVFddID0gcy0+dmFyX3ZhbHVlc1tWQVJfVEVYVF9XXSA9IG1ldHJpY3Mud2lkdGg7Cisg ICAgcy0+dmFyX3ZhbHVlc1tWQVJfVEhdID0gcy0+dmFyX3ZhbHVlc1tWQVJfVEVYVF9IXSA9 IG1ldHJpY3MuaGVpZ2h0OwogCiAgICAgcy0+dmFyX3ZhbHVlc1tWQVJfTUFYX0dMWVBIX1dd ID0gcy0+bWF4X2dseXBoX3c7CiAgICAgcy0+dmFyX3ZhbHVlc1tWQVJfTUFYX0dMWVBIX0hd ID0gcy0+bWF4X2dseXBoX2g7Ci0gICAgcy0+dmFyX3ZhbHVlc1tWQVJfTUFYX0dMWVBIX0Fd ID0gcy0+dmFyX3ZhbHVlc1tWQVJfQVNDRU5UIF0gPSB5X21heDsKLSAgICBzLT52YXJfdmFs dWVzW1ZBUl9NQVhfR0xZUEhfRF0gPSBzLT52YXJfdmFsdWVzW1ZBUl9ERVNDRU5UXSA9IHlf bWluOworICAgIHMtPnZhcl92YWx1ZXNbVkFSX01BWF9HTFlQSF9BXSA9IHMtPnZhcl92YWx1 ZXNbVkFSX0FTQ0VOVF0gPSBQT1NfQ0VJTChtZXRyaWNzLm1heF95NjQsIDY0KTsKKyAgICBz LT52YXJfdmFsdWVzW1ZBUl9NQVhfR0xZUEhfRF0gPSBzLT52YXJfdmFsdWVzW1ZBUl9ERVND RU5UXSA9IFBPU19DRUlMKG1ldHJpY3MubWluX3k2NCwgNjQpOwogCi0gICAgcy0+dmFyX3Zh bHVlc1tWQVJfTElORV9IXSA9IHMtPnZhcl92YWx1ZXNbVkFSX0xIXSA9IHMtPm1heF9nbHlw aF9oOworICAgIHMtPnZhcl92YWx1ZXNbVkFSX0xJTkVfSF0gPSBzLT52YXJfdmFsdWVzW1ZB Ul9MSF0gPSBtZXRyaWNzLmxpbmVfaGVpZ2h0NjQgLyA2NC47CiAKICAgICBpZiAocy0+dGV4 dF9zb3VyY2UgPT0gQVZfRlJBTUVfREFUQV9ERVRFQ1RJT05fQkJPWEVTKSB7CiAgICAgICAg IHMtPnZhcl92YWx1ZXNbVkFSX1hdID0gcy0+eDsKQEAgLTE1NjYsNTYgKzE3OTcsMTM5IEBA IGNvbnRpbnVlX29uX2ludmFsaWQyOgogICAgIHVwZGF0ZV9jb2xvcl93aXRoX2FscGhhKHMs ICZib3JkZXJjb2xvciwgcy0+Ym9yZGVyY29sb3IpOwogICAgIHVwZGF0ZV9jb2xvcl93aXRo X2FscGhhKHMsICZib3hjb2xvciAgICwgcy0+Ym94Y29sb3IgICApOwogCi0gICAgYm94X3cg PSBtYXhfdGV4dF9saW5lX3c7Ci0gICAgYm94X2ggPSB5ICsgcy0+bWF4X2dseXBoX2g7Cisg ICAgaWYgKHMtPmRyYXdfYm94ICYmIHMtPmJveGJvcmRlcncpIHsKKyAgICAgICAgcy0+YmJf dG9wID0gcy0+YmJfcmlnaHQgPSBzLT5iYl9ib3R0b20gPSBzLT5iYl9sZWZ0ID0gcy0+Ym94 Ym9yZGVydzsKKyAgICB9IGVsc2UgeworICAgICAgICBzLT5iYl90b3AgPSBzLT5iYl9yaWdo dCA9IHMtPmJiX2JvdHRvbSA9IHMtPmJiX2xlZnQgPSAwOworICAgIH0KIAogICAgIGlmIChz LT5maXhfYm91bmRzKSB7Ci0KICAgICAgICAgLyogY2FsY3VsYXRlIGZvb3RwcmludCBvZiB0 ZXh0IGVmZmVjdHMgKi8KLSAgICAgICAgaW50IGJveG9mZnNldCAgICAgPSBzLT5kcmF3X2Jv eCA/IEZGTUFYKHMtPmJveGJvcmRlcncsIDApIDogMDsKICAgICAgICAgaW50IGJvcmRlcm9m ZnNldCAgPSBzLT5ib3JkZXJ3ICA/IEZGTUFYKHMtPmJvcmRlcncsIDApIDogMDsKIAotICAg ICAgICBpbnQgb2Zmc2V0bGVmdCA9IEZGTUFYMyhib3hvZmZzZXQsIGJvcmRlcm9mZnNldCwK KyAgICAgICAgaW50IG9mZnNldGxlZnQgPSBGRk1BWDMoRkZNQVgocy0+YmJfbGVmdCwgMCks IGJvcmRlcm9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMtPnNo YWRvd3ggPCAwID8gRkZBQlMocy0+c2hhZG93eCkgOiAwKSk7Ci0gICAgICAgIGludCBvZmZz ZXR0b3AgPSBGRk1BWDMoYm94b2Zmc2V0LCBib3JkZXJvZmZzZXQsCisgICAgICAgIGludCBv ZmZzZXR0b3AgPSBGRk1BWDMoRkZNQVgocy0+YmJfdG9wLCAwKSwgYm9yZGVyb2Zmc2V0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocy0+c2hhZG93eSA8IDAgPyBGRkFC UyhzLT5zaGFkb3d5KSA6IDApKTsKLQotICAgICAgICBpbnQgb2Zmc2V0cmlnaHQgPSBGRk1B WDMoYm94b2Zmc2V0LCBib3JkZXJvZmZzZXQsCisgICAgICAgIGludCBvZmZzZXRyaWdodCA9 IEZGTUFYMyhGRk1BWChzLT5iYl9yaWdodCwgMCksIGJvcmRlcm9mZnNldCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChzLT5zaGFkb3d4ID4gMCA/IHMtPnNoYWRvd3gg OiAwKSk7Ci0gICAgICAgIGludCBvZmZzZXRib3R0b20gPSBGRk1BWDMoYm94b2Zmc2V0LCBi b3JkZXJvZmZzZXQsCisgICAgICAgIGludCBvZmZzZXRib3R0b20gPSBGRk1BWDMoRkZNQVgo cy0+YmJfYm90dG9tLCAwKSwgYm9yZGVyb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChzLT5zaGFkb3d5ID4gMCA/IHMtPnNoYWRvd3kgOiAwKSk7CiAKLQog ICAgICAgICBpZiAocy0+eCAtIG9mZnNldGxlZnQgPCAwKSBzLT54ID0gb2Zmc2V0bGVmdDsK ICAgICAgICAgaWYgKHMtPnkgLSBvZmZzZXR0b3AgPCAwKSAgcy0+eSA9IG9mZnNldHRvcDsK IAotICAgICAgICBpZiAocy0+eCArIGJveF93ICsgb2Zmc2V0cmlnaHQgPiB3aWR0aCkKLSAg ICAgICAgICAgIHMtPnggPSBGRk1BWCh3aWR0aCAtIGJveF93IC0gb2Zmc2V0cmlnaHQsIDAp OwotICAgICAgICBpZiAocy0+eSArIGJveF9oICsgb2Zmc2V0Ym90dG9tID4gaGVpZ2h0KQot ICAgICAgICAgICAgcy0+eSA9IEZGTUFYKGhlaWdodCAtIGJveF9oIC0gb2Zmc2V0Ym90dG9t LCAwKTsKKyAgICAgICAgaWYgKHMtPnggKyBtZXRyaWNzLndpZHRoICsgb2Zmc2V0cmlnaHQg PiB3aWR0aCkKKyAgICAgICAgICAgIHMtPnggPSBGRk1BWCh3aWR0aCAtIG1ldHJpY3Mud2lk dGggLSBvZmZzZXRyaWdodCwgMCk7CisgICAgICAgIGlmIChzLT55ICsgbWV0cmljcy5oZWln aHQgKyBvZmZzZXRib3R0b20gPiBoZWlnaHQpCisgICAgICAgICAgICBzLT55ID0gRkZNQVgo aGVpZ2h0IC0gbWV0cmljcy5oZWlnaHQgLSBvZmZzZXRib3R0b20sIDApOwogICAgIH0KIAot ICAgIC8qIGRyYXcgYm94ICovCi0gICAgaWYgKHMtPmRyYXdfYm94KQotICAgICAgICBmZl9i bGVuZF9yZWN0YW5nbGUoJnMtPmRjLCAmYm94Y29sb3IsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICBmcmFtZS0+ZGF0YSwgZnJhbWUtPmxpbmVzaXplLCB3aWR0aCwgaGVpZ2h0LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+eCAtIHMtPmJveGJvcmRlcncsIHMtPnkg LSBzLT5ib3hib3JkZXJ3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94X3cgKyBz LT5ib3hib3JkZXJ3ICogMiwgYm94X2ggKyBzLT5ib3hib3JkZXJ3ICogMik7CisgICAgeCA9 IDA7CisgICAgeSA9IDA7CisgICAgeDY0ID0gKGludCkocy0+eCAqIDY0Lik7CisgICAgeTY0 ID0gKGludCkocy0+eSAqIDY0LiArIG1ldHJpY3Mub2Zmc2V0X3RvcDY0KTsKKworICAgIGZv ciAoaW50IGwgPSAwOyBsIDwgcy0+bGluZV9jb3VudDsgKytsKSB7CisgICAgICAgIFRleHRM aW5lICpsaW5lID0gJnMtPmxpbmVzW2xdOworICAgICAgICBIYXJmYnV6ekRhdGEgKmhiID0g JmxpbmUtPmhiX2RhdGE7CisgICAgICAgIGxpbmUtPmdseXBocyA9IGF2X21hbGxvY3ooaGIt PmdseXBoX2NvdW50ICogc2l6ZW9mKEdseXBoSW5mbykpOworCisgICAgICAgIGZvciAoaW50 IHQgPSAwOyB0IDwgaGItPmdseXBoX2NvdW50OyArK3QpIHsKKyAgICAgICAgICAgIEdseXBo SW5mbyAqZ19pbmZvID0gJmxpbmUtPmdseXBoc1t0XTsKKyAgICAgICAgICAgIHVpbnQ4X3Qg aXNfdGFiID0gbGFzdF90YWJfaWR4IDwgcy0+dGFiX2NvdW50ICYmCisgICAgICAgICAgICAg ICAgaGItPmdseXBoX2luZm9bdF0uY2x1c3RlciA9PSBzLT50YWJfY2x1c3RlcnNbbGFzdF90 YWJfaWR4XSAtIGxpbmUtPmNsdXN0ZXJfb2Zmc2V0OworICAgICAgICAgICAgaW50IHRydWVf eCwgdHJ1ZV95OworICAgICAgICAgICAgaWYgKGlzX3RhYikgeworICAgICAgICAgICAgICAg ICsrbGFzdF90YWJfaWR4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ1ZV94ID0g eCArIGhiLT5nbHlwaF9wb3NbdF0ueF9vZmZzZXQ7CisgICAgICAgICAgICB0cnVlX3kgPSB5 ICsgaGItPmdseXBoX3Bvc1t0XS55X29mZnNldDsKKyAgICAgICAgICAgIHNoaWZ0X3g2NCA9 ICgoKHg2NCArIHRydWVfeCkgPj4gNCkgJiAwYjAwMTEpIDw8IDQ7CisgICAgICAgICAgICBz aGlmdF95NjQgPSAoKDQgLSAoKCh5NjQgKyB0cnVlX3kpID4+IDQpICYgMGIwMDExKSkgJiAw YjAwMTEpIDw8IDQ7CisKKyAgICAgICAgICAgIHJldCA9IGxvYWRfZ2x5cGgoY3R4LCAmZ2x5 cGgsIGhiLT5nbHlwaF9pbmZvW3RdLmNvZGVwb2ludCwgc2hpZnRfeDY0LCBzaGlmdF95NjQp OworICAgICAgICAgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu IHJldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdfaW5mby0+Y29kZSA9IGhiLT5n bHlwaF9pbmZvW3RdLmNvZGVwb2ludDsKKyAgICAgICAgICAgIGdfaW5mby0+eCA9ICh4NjQg KyB0cnVlX3gpID4+IDY7CisgICAgICAgICAgICBnX2luZm8tPnkgPSAoKHk2NCArIHRydWVf eSkgPj4gNikgKyAoc2hpZnRfeTY0ID4gMCA/IDEgOiAwKTsKKyAgICAgICAgICAgIGdfaW5m by0+c2hpZnRfeDY0ID0gc2hpZnRfeDY0OworICAgICAgICAgICAgZ19pbmZvLT5zaGlmdF95 NjQgPSBzaGlmdF95NjQ7CisKKyAgICAgICAgICAgIGlmICghaXNfdGFiKSB7CisgICAgICAg ICAgICAgICAgeCArPSBoYi0+Z2x5cGhfcG9zW3RdLnhfYWR2YW5jZTsKKyAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IHNpemUgPSBzLT5ibGFua19hZHZhbmNl NjQgKiBzLT50YWJzaXplOworICAgICAgICAgICAgICAgIHggPSAoeCAvIHNpemUgKyAxKSAq IHNpemU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB5ICs9IGhiLT5nbHlwaF9wb3Nb dF0ueV9hZHZhbmNlOworICAgICAgICB9CiAKLSAgICBpZiAocy0+c2hhZG93eCB8fCBzLT5z aGFkb3d5KSB7Ci0gICAgICAgIGlmICgocmV0ID0gZHJhd19nbHlwaHMocywgZnJhbWUsIHdp ZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNoYWRvd2Nv bG9yLCBzLT5zaGFkb3d4LCBzLT5zaGFkb3d5LCAwKSkgPCAwKQotICAgICAgICAgICAgcmV0 dXJuIHJldDsKKyAgICAgICAgeSArPSBtZXRyaWNzLmxpbmVfaGVpZ2h0NjQgKyBzLT5saW5l X3NwYWNpbmcgKiA2NDsKKyAgICAgICAgeCA9IDA7CiAgICAgfQogCi0gICAgaWYgKHMtPmJv cmRlcncpIHsKLSAgICAgICAgaWYgKChyZXQgPSBkcmF3X2dseXBocyhzLCBmcmFtZSwgd2lk dGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYm9yZGVyY29s b3IsIDAsIDAsIHMtPmJvcmRlcncpKSA8IDApCisgICAgbWV0cmljcy5yZWN0X3ggPSBzLT54 OworICAgIG1ldHJpY3MucmVjdF95ID0gcy0+eTsKKyAgICAKKyAgICBpZiAoIXMtPmRyYXdf Ym94KSB7CisgICAgICAgIC8vIENyZWF0ZSBhIGJvcmRlciBmb3IgdGhlIGNsaXBwaW5nIHJl Z2lvbiB0byB0YWtlIGludG8gYWNjb3VudCBzdWJwaXhlbAorICAgICAgICAvLyBlcnJvcnMg aW4gdGV4dCBtZWFzdXJlbWVudCBhbmQgZWZmZWN0cy4KKyAgICAgICAgaW50IGJvcmRlcm9m ZnNldCA9IHMtPmJvcmRlcncgPyBGRk1BWChzLT5ib3JkZXJ3LCAwKSA6IDA7CisgICAgICAg IHMtPmJiX2xlZnQgPSBib3JkZXJvZmZzZXQgKyAocy0+c2hhZG93eCA8IDAgPyBGRkFCUyhz LT5zaGFkb3d4KSA6IDApICsgMTsKKyAgICAgICAgcy0+YmJfdG9wID0gYm9yZGVyb2Zmc2V0 ICsgKHMtPnNoYWRvd3kgPCAwID8gRkZBQlMocy0+c2hhZG93eSkgOiAwKSArIDE7CisgICAg ICAgIHMtPmJiX3JpZ2h0ID0gYm9yZGVyb2Zmc2V0ICsgKHMtPnNoYWRvd3ggPiAwID8gcy0+ c2hhZG93eCA6IDApICsgMTsKKyAgICAgICAgcy0+YmJfYm90dG9tID0gYm9yZGVyb2Zmc2V0 ICsgKHMtPnNoYWRvd3kgPiAwID8gcy0+c2hhZG93eSA6IDApICsgMTsKKyAgICB9CisKKyAg ICAvKiBDaGVjayBpZiB0aGUgd2hvbGUgYm94IGlzIG91dCBvZiB0aGUgZnJhbWUgKi8gICAg ICAgIAorICAgIGlzX291dHNpZGUgPSBtZXRyaWNzLnJlY3RfeCAtIHMtPmJiX2xlZnQgPj0g d2lkdGggfHwKKyAgICAgICAgICAgICAgICAgICAgbWV0cmljcy5yZWN0X3kgLSBzLT5iYl90 b3AgPj0gaGVpZ2h0IHx8CisgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MucmVjdF94ICsg bWV0cmljcy53aWR0aCArIHMtPmJiX3JpZ2h0IDw9IDAgfHwKKyAgICAgICAgICAgICAgICAg ICAgbWV0cmljcy5yZWN0X3kgKyBtZXRyaWNzLmhlaWdodCArIHMtPmJiX2JvdHRvbSA8PSAw OworCisgICAgaWYgKCFpc19vdXRzaWRlKSB7CisgICAgICAgIC8qIGRyYXcgYm94ICovCisg ICAgICAgIGlmIChzLT5kcmF3X2JveCkgeworICAgICAgICAgICAgcmVjX3ggPSBtZXRyaWNz LnJlY3RfeCAtIHMtPmJiX2xlZnQ7CisgICAgICAgICAgICByZWNfeSA9IG1ldHJpY3MucmVj dF95IC0gcy0+YmJfdG9wOworICAgICAgICAgICAgcmVjX3dpZHRoID0gbWV0cmljcy53aWR0 aCArIHMtPmJiX3JpZ2h0ICsgcy0+YmJfbGVmdDsKKyAgICAgICAgICAgIHJlY19oZWlnaHQg PSBtZXRyaWNzLmhlaWdodCArIHMtPmJiX2JvdHRvbSArIHMtPmJiX3RvcDsKKyAgICAgICAg ICAgIGZmX2JsZW5kX3JlY3RhbmdsZSgmcy0+ZGMsICZib3hjb2xvciwKKyAgICAgICAgICAg ICAgICBmcmFtZS0+ZGF0YSwgZnJhbWUtPmxpbmVzaXplLCB3aWR0aCwgaGVpZ2h0LAorICAg ICAgICAgICAgICAgIHJlY194LCByZWNfeSwgcmVjX3dpZHRoLCByZWNfaGVpZ2h0KTsKKyAg ICAgICAgfQorCisgICAgICAgIGlmIChzLT5zaGFkb3d4IHx8IHMtPnNoYWRvd3kpIHsKKyAg ICAgICAgICAgIGlmICgocmV0ID0gZHJhd19nbHlwaHMocywgZnJhbWUsICZzaGFkb3djb2xv ciwgJm1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgIHMtPnNoYWRvd3gsIHMtPnNoYWRv d3ksIHMtPmJvcmRlcncpKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owor ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHMtPmJvcmRlcncpIHsK KyAgICAgICAgICAgIGlmICgocmV0ID0gZHJhd19nbHlwaHMocywgZnJhbWUsICZib3JkZXJj b2xvciwgJm1ldHJpY3MsCisgICAgICAgICAgICAgICAgICAgIDAsIDAsIHMtPmJvcmRlcncp KSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgfQor ICAgICAgICB9CisKKyAgICAgICAgaWYgKChyZXQgPSBkcmF3X2dseXBocyhzLCBmcmFtZSwg JmZvbnRjb2xvciwgJm1ldHJpY3MsIDAsCisgICAgICAgICAgICAgICAgMCwgMCkpIDwgMCkg ewogICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQogICAgIH0KLSAgICBpZiAo KHJldCA9IGRyYXdfZ2x5cGhzKHMsIGZyYW1lLCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmZvbnRjb2xvciwgMCwgMCwgMCkpIDwgMCkKLSAgICAgICAg cmV0dXJuIHJldDsKKworICAgIC8vIEZSRUUgZGF0YSBzdHJ1Y3R1cmVzCisgICAgZm9yIChp bnQgbCA9IDA7IGwgPCBzLT5saW5lX2NvdW50OyArK2wpIHsKKyAgICAgICAgVGV4dExpbmUg KmxpbmUgPSAmcy0+bGluZXNbbF07CisgICAgICAgIGF2X2ZyZWVwKCZsaW5lLT5nbHlwaHMp OworICAgICAgICBoYl9kZXN0cm95KCZsaW5lLT5oYl9kYXRhKTsKKyAgICB9CisgICAgYXZf ZnJlZXAoJnMtPmxpbmVzKTsKKyAgICBhdl9mcmVlcCgmcy0+dGFiX2NsdXN0ZXJzKTsKIAog ICAgIHJldHVybiAwOwogfQpAQCAtMTY5MSwxNCArMjAwNSw5IEBAIEZGX0VOQUJMRV9ERVBS RUNBVElPTl9XQVJOSU5HUwogICAgICAgICAgICAgcy0+eCA9IGJib3gtPng7CiAgICAgICAg ICAgICBzLT55ID0gYmJveC0+eSAtIHMtPmZvbnRzaXplOwogICAgICAgICB9Ci0gICAgICAg IGRyYXdfdGV4dChjdHgsIGZyYW1lLCBmcmFtZS0+d2lkdGgsIGZyYW1lLT5oZWlnaHQpOwor ICAgICAgICBkcmF3X3RleHQoY3R4LCBmcmFtZSk7CiAgICAgfQogCi0gICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0RFQlVHLCAibjolZCB0OiVmIHRleHRfdzolZCB0ZXh0X2g6JWQgeDolZCB5 OiVkXG4iLAotICAgICAgICAgICAoaW50KXMtPnZhcl92YWx1ZXNbVkFSX05dLCBzLT52YXJf dmFsdWVzW1ZBUl9UXSwKLSAgICAgICAgICAgKGludClzLT52YXJfdmFsdWVzW1ZBUl9URVhU X1ddLCAoaW50KXMtPnZhcl92YWx1ZXNbVkFSX1RFWFRfSF0sCi0gICAgICAgICAgIHMtPngs IHMtPnkpOwotCiAgICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFtZShvdXRsaW5rLCBmcmFtZSk7 CiB9CiAKLS0gCjIuMzAuMgoK --------------m2rq341R7iyzE47iZEyWRv7E Content-Type: text/plain; charset=UTF-8; name="0003-the-boxborderw-parameter-can-now-contain-a-different.patch" Content-Disposition: attachment; filename*0="0003-the-boxborderw-parameter-can-now-contain-a-different.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAxNTc0ZDQ1YTlmNWE0MGQ4OWZkN2ZiYTMzMDgzZjQxODQzMjI1MzczIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB5ZXRoaWUgPGtsaW1rbGltQHRpc2NhbGkuaXQ+CkRh dGU6IEZyaSwgMjYgTWF5IDIwMjMgMTI6MjE6MzEgKzAyMDAKU3ViamVjdDogW1BBVENIIDMv OV0gdGhlIGJveGJvcmRlcncgcGFyYW1ldGVyIGNhbiBub3cgY29udGFpbiBhIGRpZmZlcmVu dAogdmFsdWUgZm9yIGVhY2ggYm9yZGVyCgotLS0KIGRvYy9maWx0ZXJzLnRleGkgICAgICAg ICAgfCAxMiArKysrKysrKysrKy0KIGxpYmF2ZmlsdGVyL3ZmX2RyYXd0ZXh0LmMgfCAzOSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KIDIgZmlsZXMgY2hhbmdl ZCwgNDcgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mv ZmlsdGVycy50ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQppbmRleCBiYTM5YTI0N2NhLi43NmFk ZmJmNzlhIDEwMDY0NAotLS0gYS9kb2MvZmlsdGVycy50ZXhpCisrKyBiL2RvYy9maWx0ZXJz LnRleGkKQEAgLTEyMjUzLDcgKzEyMjUzLDE3IEBAIFRoZSBkZWZhdWx0IHZhbHVlIG9mIEB2 YXJ7Ym94fSBpcyAwLgogCiBAaXRlbSBib3hib3JkZXJ3CiBTZXQgdGhlIHdpZHRoIG9mIHRo ZSBib3JkZXIgdG8gYmUgZHJhd24gYXJvdW5kIHRoZSBib3ggdXNpbmcgQHZhcntib3hjb2xv cn0uCi1UaGUgZGVmYXVsdCB2YWx1ZSBvZiBAdmFye2JveGJvcmRlcnd9IGlzIDAuCitUaGUg dmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQgdXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9y bWF0czoKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtIEBjb2Rle2JveGJvcmRlcnc9MTB9IHNl dCB0aGUgd2lkdGggb2YgYWxsIHRoZSBib3JkZXJzIHRvIDEwCitAaXRlbSBAY29kZXtib3hi b3JkZXJ3PTEwfDIwfSBzZXQgdGhlIHdpZHRoIG9mIHRoZSB0b3AgYW5kIGJvdHRvbSBib3Jk ZXJzIHRvIDEwCisgICAgYW5kIHRoZSB3aWR0aCBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgYm9y ZGVycyB0byAyMAorQGl0ZW0gQGNvZGV7Ym94Ym9yZGVydz0xMHwyMHwzMH0gc2V0IHRoZSB3 aWR0aCBvZiB0aGUgdG9wIGJvcmRlciB0byAxMCwgdGhlIHdpZHRoCisgICAgb2YgdGhlIGJv dHRvbSBib3JkZXIgdG8gMzAgYW5kIHRoZSB3aWR0aCBvZiB0aGUgbGVmdCBhbmQgcmlnaHQg Ym9yZGVycyB0byAyMAorQGl0ZW0gQGNvZGV7Ym94Ym9yZGVydz0xMHwyMHwzMHw0MH0gc2V0 IHRoZSBib3JkZXJzIHdpZHRoIHRvIDEwICh0b3ApLCAyMCAocmlnaHQpLAorICAgIDMwIChi b3R0b20pLCA0MCAobGVmdCkKK0BlbmQgaXRlbWl6ZQorVGhlIGRlZmF1bHQgdmFsdWUgb2Yg QHZhcntib3hib3JkZXJ3fSBpcyAiMCIuCiAKIEBpdGVtIGJveGNvbG9yCiBUaGUgY29sb3Ig dG8gYmUgdXNlZCBmb3IgZHJhd2luZyBib3ggYXJvdW5kIHRleHQuIEZvciB0aGUgc3ludGF4 IG9mIHRoaXMKZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3ZmX2RyYXd0ZXh0LmMgYi9saWJh dmZpbHRlci92Zl9kcmF3dGV4dC5jCmluZGV4IDRlMmRiZGQxYzAuLjQwY2MyZWYwYzcgMTAw NjQ0Ci0tLSBhL2xpYmF2ZmlsdGVyL3ZmX2RyYXd0ZXh0LmMKKysrIGIvbGliYXZmaWx0ZXIv dmZfZHJhd3RleHQuYwpAQCAtMjU2LDcgKzI1Niw4IEBAIHR5cGVkZWYgc3RydWN0IERyYXdU ZXh0Q29udGV4dCB7CiAKICAgICBpbnQgbGluZV9zcGFjaW5nOyAgICAgICAgICAgICAgIC8v LzwgbGluZXMgc3BhY2luZyBpbiBwaXhlbHMKICAgICBzaG9ydCBpbnQgZHJhd19ib3g7ICAg ICAgICAgICAgIC8vLzwgZHJhdyBib3ggYXJvdW5kIHRleHQgLSB0cnVlIG9yIGZhbHNlCi0g ICAgaW50IGJveGJvcmRlcnc7ICAgICAgICAgICAgICAgICAvLy88IGJveCBib3JkZXIgd2lk dGgKKyAgICBjaGFyKiBib3hib3JkZXJ3OyAgICAgICAgICAgICAgIC8vLzwgYm94IGJvcmRl ciB3aWR0aCAocGFkZGluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vLyAgYWxsb3dlZCBmb3JtYXRzOiAiYWxsIiwgInZlcnR8b3JpeiIsICJ0b3B8cmlnaHR8 Ym90dG9tfGxlZnQiCiAgICAgaW50IGJiX3RvcDsgICAgICAgICAgICAgICAgICAgICAvLy88 IHRoZSBzaXplIG9mIHRoZSB0b3AgYm94IGJvcmRlcgogICAgIGludCBiYl9yaWdodDsgICAg ICAgICAgICAgICAgICAgLy8vPCB0aGUgc2l6ZSBvZiB0aGUgcmlnaHQgYm94IGJvcmRlcgog ICAgIGludCBiYl9ib3R0b207ICAgICAgICAgICAgICAgICAgLy8vPCB0aGUgc2l6ZSBvZiB0 aGUgYm90dG9tIGJveCBib3JkZXIKQEAgLTMxNiw3ICszMTcsNyBAQCBzdGF0aWMgY29uc3Qg QVZPcHRpb24gZHJhd3RleHRfb3B0aW9uc1tdPSB7CiAgICAgeyJib3JkZXJjb2xvciIsICAg ICJzZXQgYm9yZGVyIGNvbG9yIiwgICAgICBPRkZTRVQoYm9yZGVyY29sb3IucmdiYSksICAg QVZfT1BUX1RZUEVfQ09MT1IsICB7LnN0cj0iYmxhY2sifSwgMCwgMCwgRkxBR1N9LAogICAg IHsic2hhZG93Y29sb3IiLCAgICAic2V0IHNoYWRvdyBjb2xvciIsICAgICAgT0ZGU0VUKHNo YWRvd2NvbG9yLnJnYmEpLCAgIEFWX09QVF9UWVBFX0NPTE9SLCAgey5zdHI9ImJsYWNrIn0s IDAsIDAsIEZMQUdTfSwKICAgICB7ImJveCIsICAgICAgICAgICAgInNldCBib3giLCAgICAg ICAgICAgICAgIE9GRlNFVChkcmF3X2JveCksICAgICAgICAgICBBVl9PUFRfVFlQRV9CT09M LCAgIHsuaTY0PTB9LCAgICAgMCwgMSwgRkxBR1N9LAotICAgIHsiYm94Ym9yZGVydyIsICAg ICAic2V0IGJveCBib3JkZXJzIHdpZHRoIiwgT0ZGU0VUKGJveGJvcmRlcncpLCAgICAgICAg IEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICAwLCBJTlRfTUFYLCBGTEFHU30s CisgICAgeyJib3hib3JkZXJ3IiwgICAgICJzZXQgYm94IGJvcmRlcnMgd2lkdGgiLCBPRkZT RVQoYm94Ym9yZGVydyksICAgICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj0iMCJ9 LCAgIDAsIDAsIEZMQUdTfSwKICAgICB7ImxpbmVfc3BhY2luZyIsICAgInNldCBsaW5lIHNw YWNpbmcgaW4gcGl4ZWxzIiwgT0ZGU0VUKGxpbmVfc3BhY2luZyksICBBVl9PUFRfVFlQRV9J TlQsICAgIHsuaTY0PTB9LCAgICAgSU5UX01JTiwgSU5UX01BWCwgRkxBR1N9LAogICAgIHsi Zm9udHNpemUiLCAgICAgICAic2V0IGZvbnQgc2l6ZSIsICAgICAgICAgT0ZGU0VUKGZvbnRz aXplX2V4cHIpLCAgICAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9TlVMTH0sICAwLCAw LCBGTEFHU30sCiAgICAgeyJ4IiwgICAgICAgICAgICAgICJzZXQgeCBleHByZXNzaW9uIiwg ICAgICBPRkZTRVQoeF9leHByKSwgICAgICAgICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7 LnN0cj0iMCJ9LCAgIDAsIDAsIEZMQUdTfSwKQEAgLTgxOCw2ICs4MTksMjEgQEAgZXJyb3I6 CiAgICAgcmV0dXJuIHJldDsKIH0KIAorLy8gQ29udmVydCBhIHN0cmluZyBmb3JtYXR0ZWQg YXMgIm4xfG4yfC4uLnxuTiIgaW50byBhbiBpbnRlZ2VyIGFycmF5CitzdGF0aWMgaW50IHN0 cmluZ190b19hcnJheShjb25zdCBjaGFyKiBzb3VyY2UsIGludCogcmVzdWx0LCBpbnQgcmVz dWx0X3NpemUpCit7CisgICAgaW50IGNvdW50ZXIgPSAwLCBzaXplID0gc3RybGVuKHNvdXJj ZSkgKyAxOworICAgIGNoYXIgKnNhdmVwdHIsICpjdXJ2YWwsICpkdXAgPSBhdl9tYWxsb2Mo c2l6ZSk7CisgICAgYXZfc3RybGNweShkdXAsIHNvdXJjZSwgc2l6ZSk7CisgICAgaWYgKHJl c3VsdF9zaXplID4gMCAmJiAoY3VydmFsID0gYXZfc3RydG9rKGR1cCwgInwiLCAmc2F2ZXB0 cikpKSB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHJlc3VsdFtjb3VudGVyKytdID0g YXRvaShjdXJ2YWwpOworICAgICAgICB9IHdoaWxlICgoY3VydmFsID0gYXZfc3RydG9rKE5V TEwsICJ8IiwgJnNhdmVwdHIpKSAmJiBjb3VudGVyIDwgcmVzdWx0X3NpemUpOworICAgIH0K KyAgICBhdl9mcmVlKGR1cCk7CisgICAgcmV0dXJuIGNvdW50ZXI7Cit9CisKIHN0YXRpYyBh dl9jb2xkIGludCBpbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQogewogICAgIGludCBlcnI7 CkBAIC0xNzk4LDcgKzE4MTQsMjQgQEAgc3RhdGljIGludCBkcmF3X3RleHQoQVZGaWx0ZXJD b250ZXh0ICpjdHgsIEFWRnJhbWUgKmZyYW1lKQogICAgIHVwZGF0ZV9jb2xvcl93aXRoX2Fs cGhhKHMsICZib3hjb2xvciAgICwgcy0+Ym94Y29sb3IgICApOwogCiAgICAgaWYgKHMtPmRy YXdfYm94ICYmIHMtPmJveGJvcmRlcncpIHsKLSAgICAgICAgcy0+YmJfdG9wID0gcy0+YmJf cmlnaHQgPSBzLT5iYl9ib3R0b20gPSBzLT5iYl9sZWZ0ID0gcy0+Ym94Ym9yZGVydzsKKyAg ICAgICAgaW50IGJic2l6ZVs0XTsKKyAgICAgICAgaW50IGNvdW50OworICAgICAgICBjb3Vu dCA9IHN0cmluZ190b19hcnJheShzLT5ib3hib3JkZXJ3LCBiYnNpemUsIDQpOworICAgICAg ICBpZiAoY291bnQgPT0gMSkgeworICAgICAgICAgICAgcy0+YmJfdG9wID0gcy0+YmJfcmln aHQgPSBzLT5iYl9ib3R0b20gPSBzLT5iYl9sZWZ0ID0gYmJzaXplWzBdOworICAgICAgICB9 IGVsc2UgaWYgKGNvdW50ID09IDIpIHsKKyAgICAgICAgICAgIHMtPmJiX3RvcCA9IHMtPmJi X2JvdHRvbSA9IGJic2l6ZVswXTsKKyAgICAgICAgICAgIHMtPmJiX3JpZ2h0ID0gcy0+YmJf bGVmdCA9IGJic2l6ZVsxXTsKKyAgICAgICAgfSBlbHNlIGlmIChjb3VudCA9PSAzKSB7Cisg ICAgICAgICAgICBzLT5iYl90b3AgPSBiYnNpemVbMF07CisgICAgICAgICAgICBzLT5iYl9y aWdodCA9IHMtPmJiX2xlZnQgPSBiYnNpemVbMV07CisgICAgICAgICAgICBzLT5iYl9ib3R0 b20gPSBiYnNpemVbMl07CisgICAgICAgIH0gZWxzZSBpZiAoY291bnQgPT0gNCkgeworICAg ICAgICAgICAgcy0+YmJfdG9wID0gYmJzaXplWzBdOworICAgICAgICAgICAgcy0+YmJfcmln aHQgPSBiYnNpemVbMV07CisgICAgICAgICAgICBzLT5iYl9ib3R0b20gPSBiYnNpemVbMl07 CisgICAgICAgICAgICBzLT5iYl9sZWZ0ID0gYmJzaXplWzNdOworICAgICAgICB9CiAgICAg fSBlbHNlIHsKICAgICAgICAgcy0+YmJfdG9wID0gcy0+YmJfcmlnaHQgPSBzLT5iYl9ib3R0 b20gPSBzLT5iYl9sZWZ0ID0gMDsKICAgICB9Ci0tIAoyLjMwLjIKCg== --------------m2rq341R7iyzE47iZEyWRv7E Content-Type: text/plain; charset=UTF-8; name="0004-the-size-of-the-background-box-can-now-be-specified-.patch" Content-Disposition: attachment; filename*0="0004-the-size-of-the-background-box-can-now-be-specified-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBjYmQ1YTFmNzY0MDVhZmNiZjU4N2I0ZWQ2YzRhZTVjZGIwZTBiYTg0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB5ZXRoaWUgPGtsaW1rbGltQHRpc2NhbGkuaXQ+CkRh dGU6IEZyaSwgMjYgTWF5IDIwMjMgMTI6MjY6MzEgKzAyMDAKU3ViamVjdDogW1BBVENIIDQv OV0gdGhlIHNpemUgb2YgdGhlIGJhY2tncm91bmQgYm94IGNhbiBub3cgYmUgc3BlY2lmaWVk IHdpdGgKIHRoZSBib3h3IGFuZCBib3hoIHBhcmFtZXRlcnMKCi0tLQogZG9jL2ZpbHRlcnMu dGV4aSAgICAgICAgICB8ICA4ICsrKysrKysrCiBsaWJhdmZpbHRlci92Zl9kcmF3dGV4dC5j IHwgMjIgKysrKysrKysrKysrKysrKy0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAyNCBpbnNl cnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9maWx0ZXJzLnRl eGkgYi9kb2MvZmlsdGVycy50ZXhpCmluZGV4IDc2YWRmYmY3OWEuLmExOGZiZGFiNzcgMTAw NjQ0Ci0tLSBhL2RvYy9maWx0ZXJzLnRleGkKKysrIGIvZG9jL2ZpbHRlcnMudGV4aQpAQCAt MTIyNTEsNiArMTIyNTEsMTQgQEAgVXNlZCB0byBkcmF3IGEgYm94IGFyb3VuZCB0ZXh0IHVz aW5nIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLgogVGhlIHZhbHVlIG11c3QgYmUgZWl0aGVyIDEg KGVuYWJsZSkgb3IgMCAoZGlzYWJsZSkuCiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBAdmFye2Jv eH0gaXMgMC4KIAorQGl0ZW0gYm94dworU2V0IHRoZSB3aWR0aCBvZiB0aGUgYm94IHRvIGJl IGRyYXduIGFyb3VuZCB0ZXh0LgorVGhlIGRlZmF1bHQgdmFsdWUgb2YgQHZhcntib3h3fSBp cyBjb21wdXRlZCBhdXRvbWF0aWNhbGx5IHRvIG1hdGNoIHRoZSB0ZXh0IHdpZHRoCisKK0Bp dGVtIGJveGgKK1NldCB0aGUgaGVpZ2h0IG9mIHRoZSBib3ggdG8gYmUgZHJhd24gYXJvdW5k IHRleHQuCitUaGUgZGVmYXVsdCB2YWx1ZSBvZiBAdmFye2JveGh9IGlzIGNvbXB1dGVkIGF1 dG9tYXRpY2FsbHkgdG8gbWF0Y2ggdGhlIHRleHQgaGVpZ2h0CisKIEBpdGVtIGJveGJvcmRl cncKIFNldCB0aGUgd2lkdGggb2YgdGhlIGJvcmRlciB0byBiZSBkcmF3biBhcm91bmQgdGhl IGJveCB1c2luZyBAdmFye2JveGNvbG9yfS4KIFRoZSB2YWx1ZSBtdXN0IGJlIHNwZWNpZmll ZCB1c2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtYXRzOgpkaWZmIC0tZ2l0IGEvbGli YXZmaWx0ZXIvdmZfZHJhd3RleHQuYyBiL2xpYmF2ZmlsdGVyL3ZmX2RyYXd0ZXh0LmMKaW5k ZXggNDBjYzJlZjBjNy4uNTlhOTg1MjkxOSAxMDA2NDQKLS0tIGEvbGliYXZmaWx0ZXIvdmZf ZHJhd3RleHQuYworKysgYi9saWJhdmZpbHRlci92Zl9kcmF3dGV4dC5jCkBAIC0yNjIsNiAr MjYyLDggQEAgdHlwZWRlZiBzdHJ1Y3QgRHJhd1RleHRDb250ZXh0IHsKICAgICBpbnQgYmJf cmlnaHQ7ICAgICAgICAgICAgICAgICAgIC8vLzwgdGhlIHNpemUgb2YgdGhlIHJpZ2h0IGJv eCBib3JkZXIKICAgICBpbnQgYmJfYm90dG9tOyAgICAgICAgICAgICAgICAgIC8vLzwgdGhl IHNpemUgb2YgdGhlIGJvdHRvbSBib3ggYm9yZGVyCiAgICAgaW50IGJiX2xlZnQ7ICAgICAg ICAgICAgICAgICAgICAvLy88IHRoZSBzaXplIG9mIHRoZSBsZWZ0IGJveCBib3JkZXIKKyAg ICBpbnQgYm94X3dpZHRoOyAgICAgICAgICAgICAgICAgIC8vLzwgdGhlIHdpZHRoIG9mIGJv eAorICAgIGludCBib3hfaGVpZ2h0OyAgICAgICAgICAgICAgICAgLy8vPCB0aGUgaGVpZ2h0 IG9mIGJveAogICAgIGludCB0YWJzaXplOyAgICAgICAgICAgICAgICAgICAgLy8vPCB0YWIg c2l6ZQogICAgIGludCBmaXhfYm91bmRzOyAgICAgICAgICAgICAgICAgLy8vPCBkbyB3ZSBs ZXQgaXQgZ28gb3V0IG9mIGZyYW1lIGJvdW5kcyAtIHQvZgogCkBAIC0yOTcsNiArMjk5LDkg QEAgdHlwZWRlZiBzdHJ1Y3QgRHJhd1RleHRDb250ZXh0IHsKICNlbmRpZgogICAgIEFWRGlj dGlvbmFyeSAqbWV0YWRhdGE7CiAKKyAgICBpbnQgYm94dzsgICAgICAgICAgICAgICAgICAg ICAgIC8vLzwgdGhlIHZhbHVlIG9mIHRoZSBib3h3IHBhcmFtZXRlcgorICAgIGludCBib3ho OyAgICAgICAgICAgICAgICAgICAgICAgLy8vPCB0aGUgdmFsdWUgb2YgdGhlIGJveGggcGFy YW1ldGVyCisKICAgICBUZXh0TGluZSAqbGluZXM7ICAgICAgICAgICAgICAgIC8vLzwgY29t cHV0ZWQgaW5mb3JtYXRpb24gYWJvdXQgdGV4dCBsaW5lcwogICAgIGludCBsaW5lX2NvdW50 OyAgICAgICAgICAgICAgICAgLy8vPCB0aGUgbnVtYmVyIG9mIHRleHQgbGluZXMKICAgICB1 aW50MzJfdCAqdGFiX2NsdXN0ZXJzOyAgICAgICAgIC8vLzwgdGhlIHBvc2l0aW9uIG9mIHRh YiBjaGFyYWN0ZXJzIGluIHRoZSB0ZXh0CkBAIC0zMjIsNiArMzI3LDggQEAgc3RhdGljIGNv bnN0IEFWT3B0aW9uIGRyYXd0ZXh0X29wdGlvbnNbXT0gewogICAgIHsiZm9udHNpemUiLCAg ICAgICAic2V0IGZvbnQgc2l6ZSIsICAgICAgICAgT0ZGU0VUKGZvbnRzaXplX2V4cHIpLCAg ICAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9TlVMTH0sICAwLCAwLCBGTEFHU30sCiAg ICAgeyJ4IiwgICAgICAgICAgICAgICJzZXQgeCBleHByZXNzaW9uIiwgICAgICBPRkZTRVQo eF9leHByKSwgICAgICAgICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj0iMCJ9LCAg IDAsIDAsIEZMQUdTfSwKICAgICB7InkiLCAgICAgICAgICAgICAgInNldCB5IGV4cHJlc3Np b24iLCAgICAgIE9GRlNFVCh5X2V4cHIpLCAgICAgICAgICAgICBBVl9PUFRfVFlQRV9TVFJJ TkcsIHsuc3RyPSIwIn0sICAgMCwgMCwgRkxBR1N9LAorICAgIHsiYm94dyIsICAgICAgICAg ICAic2V0IGJveCB3aWR0aCIsICAgICAgICAgT0ZGU0VUKGJveHcpLCAgICAgICAgICAgICAg IEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICAwLCBJTlRfTUFYLCBGTEFHU30s CisgICAgeyJib3hoIiwgICAgICAgICAgICJzZXQgYm94IGhlaWdodCIsICAgICAgICBPRkZT RVQoYm94aCksICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7Lmk2ND0wfSwg ICAgIDAsIElOVF9NQVgsIEZMQUdTfSwKICAgICB7InNoYWRvd3giLCAgICAgICAgInNldCBz aGFkb3cgeCBvZmZzZXQiLCAgIE9GRlNFVChzaGFkb3d4KSwgICAgICAgICAgICBBVl9PUFRf VFlQRV9JTlQsICAgIHsuaTY0PTB9LCAgICAgSU5UX01JTiwgSU5UX01BWCwgRkxBR1N9LAog ICAgIHsic2hhZG93eSIsICAgICAgICAic2V0IHNoYWRvdyB5IG9mZnNldCIsICAgT0ZGU0VU KHNoYWRvd3kpLCAgICAgICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9MH0sICAg ICBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHU30sCiAgICAgeyJib3JkZXJ3IiwgICAgICAgICJz ZXQgYm9yZGVyIHdpZHRoIiwgICAgICBPRkZTRVQoYm9yZGVydyksICAgICAgICAgICAgQVZf T1BUX1RZUEVfSU5ULCAgICB7Lmk2ND0wfSwgICAgIElOVF9NSU4sIElOVF9NQVgsIEZMQUdT fSwKQEAgLTE0NzEsOCArMTQ3OCw4IEBAIHN0YXRpYyBpbnQgZHJhd19nbHlwaHMoRHJhd1Rl eHRDb250ZXh0ICpzLCBBVkZyYW1lICpmcmFtZSwKICAgICBGVF9CaXRtYXBHbHlwaCBiX2ds eXBoOwogICAgIGludCBjbGlwX3ggPSAwLCBjbGlwX3kgPSAwOwogCi0gICAgY2xpcF94ID0g RkZNSU4obWV0cmljcy0+cmVjdF94ICsgbWV0cmljcy0+d2lkdGggKyBzLT5iYl9yaWdodCwg ZnJhbWUtPndpZHRoKTsKLSAgICBjbGlwX3kgPSBGRk1JTihtZXRyaWNzLT5yZWN0X3kgKyBt ZXRyaWNzLT5oZWlnaHQgKyBzLT5iYl9ib3R0b20sIGZyYW1lLT5oZWlnaHQpOworICAgIGNs aXBfeCA9IEZGTUlOKG1ldHJpY3MtPnJlY3RfeCArIHMtPmJveF93aWR0aCArIHMtPmJiX3Jp Z2h0LCBmcmFtZS0+d2lkdGgpOworICAgIGNsaXBfeSA9IEZGTUlOKG1ldHJpY3MtPnJlY3Rf eSArIHMtPmJveF9oZWlnaHQgKyBzLT5iYl9ib3R0b20sIGZyYW1lLT5oZWlnaHQpOwogCiAg ICAgZm9yIChsID0gMDsgbCA8IHMtPmxpbmVfY291bnQ7ICsrbCkgewogICAgICAgICBUZXh0 TGluZSAqbGluZSA9ICZzLT5saW5lc1tsXTsKQEAgLTE5MDcsNiArMTkxNCw5IEBAIHN0YXRp YyBpbnQgZHJhd190ZXh0KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBBVkZyYW1lICpmcmFtZSkK ICAgICBtZXRyaWNzLnJlY3RfeCA9IHMtPng7CiAgICAgbWV0cmljcy5yZWN0X3kgPSBzLT55 OwogICAgIAorICAgIHMtPmJveF93aWR0aCA9IHMtPmJveHcgPT0gMCA/IG1ldHJpY3Mud2lk dGggOiBzLT5ib3h3OworICAgIHMtPmJveF9oZWlnaHQgPSBzLT5ib3hoID09IDAgPyBtZXRy aWNzLmhlaWdodCA6IHMtPmJveGg7CisKICAgICBpZiAoIXMtPmRyYXdfYm94KSB7CiAgICAg ICAgIC8vIENyZWF0ZSBhIGJvcmRlciBmb3IgdGhlIGNsaXBwaW5nIHJlZ2lvbiB0byB0YWtl IGludG8gYWNjb3VudCBzdWJwaXhlbAogICAgICAgICAvLyBlcnJvcnMgaW4gdGV4dCBtZWFz dXJlbWVudCBhbmQgZWZmZWN0cy4KQEAgLTE5MjAsMTYgKzE5MzAsMTYgQEAgc3RhdGljIGlu dCBkcmF3X3RleHQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEFWRnJhbWUgKmZyYW1lKQogICAg IC8qIENoZWNrIGlmIHRoZSB3aG9sZSBib3ggaXMgb3V0IG9mIHRoZSBmcmFtZSAqLyAgICAg ICAgCiAgICAgaXNfb3V0c2lkZSA9IG1ldHJpY3MucmVjdF94IC0gcy0+YmJfbGVmdCA+PSB3 aWR0aCB8fAogICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLnJlY3RfeSAtIHMtPmJiX3Rv cCA+PSBoZWlnaHQgfHwKLSAgICAgICAgICAgICAgICAgICAgbWV0cmljcy5yZWN0X3ggKyBt ZXRyaWNzLndpZHRoICsgcy0+YmJfcmlnaHQgPD0gMCB8fAotICAgICAgICAgICAgICAgICAg ICBtZXRyaWNzLnJlY3RfeSArIG1ldHJpY3MuaGVpZ2h0ICsgcy0+YmJfYm90dG9tIDw9IDA7 CisgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MucmVjdF94ICsgcy0+Ym94X3dpZHRoICsg cy0+YmJfcmlnaHQgPD0gMCB8fAorICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLnJlY3Rf eSArIHMtPmJveF9oZWlnaHQgKyBzLT5iYl9ib3R0b20gPD0gMDsKIAogICAgIGlmICghaXNf b3V0c2lkZSkgewogICAgICAgICAvKiBkcmF3IGJveCAqLwogICAgICAgICBpZiAocy0+ZHJh d19ib3gpIHsKICAgICAgICAgICAgIHJlY194ID0gbWV0cmljcy5yZWN0X3ggLSBzLT5iYl9s ZWZ0OwogICAgICAgICAgICAgcmVjX3kgPSBtZXRyaWNzLnJlY3RfeSAtIHMtPmJiX3RvcDsK LSAgICAgICAgICAgIHJlY193aWR0aCA9IG1ldHJpY3Mud2lkdGggKyBzLT5iYl9yaWdodCAr IHMtPmJiX2xlZnQ7Ci0gICAgICAgICAgICByZWNfaGVpZ2h0ID0gbWV0cmljcy5oZWlnaHQg KyBzLT5iYl9ib3R0b20gKyBzLT5iYl90b3A7CisgICAgICAgICAgICByZWNfd2lkdGggPSBz LT5ib3hfd2lkdGggKyBzLT5iYl9yaWdodCArIHMtPmJiX2xlZnQ7CisgICAgICAgICAgICBy ZWNfaGVpZ2h0ID0gcy0+Ym94X2hlaWdodCArIHMtPmJiX2JvdHRvbSArIHMtPmJiX3RvcDsK ICAgICAgICAgICAgIGZmX2JsZW5kX3JlY3RhbmdsZSgmcy0+ZGMsICZib3hjb2xvciwKICAg ICAgICAgICAgICAgICBmcmFtZS0+ZGF0YSwgZnJhbWUtPmxpbmVzaXplLCB3aWR0aCwgaGVp Z2h0LAogICAgICAgICAgICAgICAgIHJlY194LCByZWNfeSwgcmVjX3dpZHRoLCByZWNfaGVp Z2h0KTsKLS0gCjIuMzAuMgoK --------------m2rq341R7iyzE47iZEyWRv7E Content-Type: text/plain; charset=UTF-8; name="0005-the-following-new-variables-can-be-used-in-the-x-and.patch" Content-Disposition: attachment; filename*0="0005-the-following-new-variables-can-be-used-in-the-x-and.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBlNDE1YmM4NmE5ZmVkMGRiMTM3NzEyYmMyYTAzYTJkOWRhN2FkZGE5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB5ZXRoaWUgPGtsaW1rbGltQHRpc2NhbGkuaXQ+CkRh dGU6IEZyaSwgMjYgTWF5IDIwMjMgMTI6NDY6MTAgKzAyMDAKU3ViamVjdDogW1BBVENIIDUv OV0gdGhlIGZvbGxvd2luZyBuZXcgdmFyaWFibGVzIGNhbiBiZSB1c2VkIGluIHRoZSB4IGFu ZCB5CiBleHByZXNzaW9uczogZm9udF9hLCBmb250X2QsIHRvcF9hLCBib3R0b21fZAoKLS0t CiBkb2MvZmlsdGVycy50ZXhpICAgICAgICAgIHwgMTIgKysrKysrKysrKysrCiBsaWJhdmZp bHRlci92Zl9kcmF3dGV4dC5jIHwgMTIgKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQs IDI0IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9kb2MvZmlsdGVycy50ZXhpIGIvZG9j L2ZpbHRlcnMudGV4aQppbmRleCBhMThmYmRhYjc3Li4zMzA5ZGRhOGQzIDEwMDY0NAotLS0g YS9kb2MvZmlsdGVycy50ZXhpCisrKyBiL2RvYy9maWx0ZXJzLnRleGkKQEAgLTEyNDg3LDYg KzEyNDg3LDE4IEBAIGNvbnRhaW5lZCBpbiB0aGUgcmVuZGVyZWQgdGV4dCwgaXQgaXMgZXF1 aXZhbGVudCB0byBAdmFye2FzY2VudH0gLQogbWF4aW11bSBnbHlwaCB3aWR0aCwgdGhhdCBp cyB0aGUgbWF4aW11bSB3aWR0aCBmb3IgYWxsIHRoZSBnbHlwaHMKIGNvbnRhaW5lZCBpbiB0 aGUgcmVuZGVyZWQgdGV4dAogCitAaXRlbSBmb250X2EKK3RoZSBhc2NlbnQgc2l6ZSBkZWZp bmVkIGluIHRoZSBmb250IG1ldHJpY3MKKworQGl0ZW0gZm9udF9kCit0aGUgZGVzY2VudCBz aXplIGRlZmluZWQgaW4gdGhlIGZvbnQgbWV0cmljcworCitAaXRlbSB0b3BfYQordGhlIG1h eGltdW0gYXNjZW5kZXIgb2YgdGhlIGdseXBocyBvZiB0aGUgZmlyc3QgdGV4dCBsaW5lCisK K0BpdGVtIGJvdHRvbV9kCit0aGUgbWF4aW11bSBkZXNjZW5kZXIgb2YgdGhlIGdseXBocyBv ZiB0aGUgbGFzdCB0ZXh0IGxpbmUKKwogQGl0ZW0gbgogdGhlIG51bWJlciBvZiBpbnB1dCBm cmFtZSwgc3RhcnRpbmcgZnJvbSAwCiAKZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3ZmX2Ry YXd0ZXh0LmMgYi9saWJhdmZpbHRlci92Zl9kcmF3dGV4dC5jCmluZGV4IDU5YTk4NTI5MTku LjQ4ZDc3Y2IyYjEgMTAwNjQ0Ci0tLSBhL2xpYmF2ZmlsdGVyL3ZmX2RyYXd0ZXh0LmMKKysr IGIvbGliYXZmaWx0ZXIvdmZfZHJhd3RleHQuYwpAQCAtODksNiArODksMTAgQEAgc3RhdGlj IGNvbnN0IGNoYXIgKmNvbnN0IHZhcl9uYW1lc1tdID0gewogICAgICJtYXhfZ2x5cGhfZCIs ICJkZXNjZW50IiwgLy8vPCBtaW4gZ2x5cGggZGVzY2VuZGVyCiAgICAgIm1heF9nbHlwaF9o IiwgICAgICAgICAgICAvLy88IG1heCBnbHlwaCBoZWlnaHQKICAgICAibWF4X2dseXBoX3ci LCAgICAgICAgICAgIC8vLzwgbWF4IGdseXBoIHdpZHRoCisgICAgImZvbnRfYSIsICAgICAg ICAgICAgICAgICAvLy88IGZvbnQtZGVmaW5lZCBhc2NlbnQKKyAgICAiZm9udF9kIiwgICAg ICAgICAgICAgICAgIC8vLzwgZm9udC1kZWZpbmVkIGRlc2NlbnQKKyAgICAidG9wX2EiLCAg ICAgICAgICAgICAgICAgIC8vLzwgbWF4IGdseXBoIGFzY2VuZGVyIG9mIHRoZSB0b3AgbGlu ZQorICAgICJib3R0b21fZCIsICAgICAgICAgICAgICAgLy8vPCBtYXggZ2x5cGggZGVzY2Vu ZGVyIG9mIHRoZSBib3R0b20gbGluZQogICAgICJuIiwgICAgICAgICAgICAgICAgICAgICAg Ly8vPCBudW1iZXIgb2YgZnJhbWUKICAgICAic2FyIiwKICAgICAidCIsICAgICAgICAgICAg ICAgICAgICAgIC8vLzwgdGltZXN0YW1wIGV4cHJlc3NlZCBpbiBzZWNvbmRzCkBAIC0xMzYs NiArMTQwLDEwIEBAIGVudW0gdmFyX25hbWUgewogICAgIFZBUl9NQVhfR0xZUEhfRCwgVkFS X0RFU0NFTlQsCiAgICAgVkFSX01BWF9HTFlQSF9ILAogICAgIFZBUl9NQVhfR0xZUEhfVywK KyAgICBWQVJfRk9OVF9BLAorICAgIFZBUl9GT05UX0QsCisgICAgVkFSX1RPUF9BLAorICAg IFZBUl9CT1RUT01fRCwKICAgICBWQVJfTiwKICAgICBWQVJfU0FSLAogICAgIFZBUl9ULApA QCAtMTgwMCw4ICsxODA4LDEyIEBAIHN0YXRpYyBpbnQgZHJhd190ZXh0KEFWRmlsdGVyQ29u dGV4dCAqY3R4LCBBVkZyYW1lICpmcmFtZSkKICAgICBzLT52YXJfdmFsdWVzW1ZBUl9NQVhf R0xZUEhfV10gPSBzLT5tYXhfZ2x5cGhfdzsKICAgICBzLT52YXJfdmFsdWVzW1ZBUl9NQVhf R0xZUEhfSF0gPSBzLT5tYXhfZ2x5cGhfaDsKICAgICBzLT52YXJfdmFsdWVzW1ZBUl9NQVhf R0xZUEhfQV0gPSBzLT52YXJfdmFsdWVzW1ZBUl9BU0NFTlRdID0gUE9TX0NFSUwobWV0cmlj cy5tYXhfeTY0LCA2NCk7CisgICAgcy0+dmFyX3ZhbHVlc1tWQVJfRk9OVF9BXSA9IHMtPmZh Y2UtPnNpemUtPm1ldHJpY3MuYXNjZW5kZXIgLyA2NDsKICAgICBzLT52YXJfdmFsdWVzW1ZB Ul9NQVhfR0xZUEhfRF0gPSBzLT52YXJfdmFsdWVzW1ZBUl9ERVNDRU5UXSA9IFBPU19DRUlM KG1ldHJpY3MubWluX3k2NCwgNjQpOworICAgIHMtPnZhcl92YWx1ZXNbVkFSX0ZPTlRfRF0g PSAtcy0+ZmFjZS0+c2l6ZS0+bWV0cmljcy5kZXNjZW5kZXIgLyA2NDsKIAorICAgIHMtPnZh cl92YWx1ZXNbVkFSX1RPUF9BXSA9IFBPU19DRUlMKG1ldHJpY3Mub2Zmc2V0X3RvcDY0LCA2 NCk7CisgICAgcy0+dmFyX3ZhbHVlc1tWQVJfQk9UVE9NX0RdID0gLVBPU19DRUlMKG1ldHJp Y3Mub2Zmc2V0X2JvdHRvbTY0LCA2NCk7CiAgICAgcy0+dmFyX3ZhbHVlc1tWQVJfTElORV9I XSA9IHMtPnZhcl92YWx1ZXNbVkFSX0xIXSA9IG1ldHJpY3MubGluZV9oZWlnaHQ2NCAvIDY0 LjsKIAogICAgIGlmIChzLT50ZXh0X3NvdXJjZSA9PSBBVl9GUkFNRV9EQVRBX0RFVEVDVElP Tl9CQk9YRVMpIHsKLS0gCjIuMzAuMgoK --------------m2rq341R7iyzE47iZEyWRv7E Content-Type: text/plain; charset=UTF-8; name="0006-text-can-be-aligned-horizontally-top-middle-bottom-a.patch" Content-Disposition: attachment; filename*0="0006-text-can-be-aligned-horizontally-top-middle-bottom-a.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBiZjI5N2JlNjlmOTMyNzk1ODVkZDQ3Y2FlNDc2MDE2ZjAzZWMwNDJhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB5ZXRoaWUgPGtsaW1rbGltQHRpc2NhbGkuaXQ+CkRh dGU6IEZyaSwgMjYgTWF5IDIwMjMgMTI6NTE6MDUgKzAyMDAKU3ViamVjdDogW1BBVENIIDYv OV0gdGV4dCBjYW4gYmUgYWxpZ25lZCBob3Jpem9udGFsbHkgKHRvcCwgbWlkZGxlLCBib3R0 b20pCiBhbmQgdmVydGljYWxseSAobGVmdCwgY2VudGVyLCByaWdodCkgcmVsYXRpdmUgdG8g dGhlIGJhY2tncm91bmQgYm94CgotLS0KIGRvYy9maWx0ZXJzLnRleGkgICAgICAgICAgfCAg NiArKysrKwogbGliYXZmaWx0ZXIvdmZfZHJhd3RleHQuYyB8IDUxICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLQogMiBmaWxlcyBjaGFuZ2VkLCA1NiBpbnNlcnRp b25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL2ZpbHRlcnMudGV4aSBi L2RvYy9maWx0ZXJzLnRleGkKaW5kZXggMzMwOWRkYThkMy4uYjJjMWVhNmM2NSAxMDA2NDQK LS0tIGEvZG9jL2ZpbHRlcnMudGV4aQorKysgYi9kb2MvZmlsdGVycy50ZXhpCkBAIC0xMjI4 Miw2ICsxMjI4MiwxMiBAQCBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBAdmFye2JveGNvbG9yfSBp cyAid2hpdGUiLgogQGl0ZW0gbGluZV9zcGFjaW5nCiBTZXQgdGhlIGxpbmUgc3BhY2luZyBp biBwaXhlbHMuIFRoZSBkZWZhdWx0IHZhbHVlIG9mIEB2YXJ7bGluZV9zcGFjaW5nfSBpcyAw LgogCitAaXRlbSB0ZXh0X2FsaWduCitTZXQgdGhlIHZlcnRpY2FsIGFuZCBob3Jpem9udGFs IGFsaWdubWVudCBvZiB0aGUgdGV4dCB3aXRoIHJlc3BlY3QgdG8gdGhlIGJveCBib3VuZGFy aWVzLgorVGhlIHZhbHVlIG11c3QgY29udGFpbiBleGFjdGx5IHR3byBsZXR0ZXJzLCBvbmUg Zm9yIHRoZSB2ZXJ0aWNhbCBhbGlnbm1lbnQgKFQ9dG9wLAorTT1taWRkbGUsIEI9Ym90dG9t KSBhbmQgb25lIGZvciB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgKEw9bGVmdCwgQz1jZW50 ZXIsIFI9cmlnaHQpLgorUGxlYXNlIG5vdGUgdGhhdCB0YWIgY2hhcmFjdGVycyBhcmUgb25s eSBzdXBwb3J0ZWQgd2l0aCB0aGUgbGVmdCBob3Jpem9udGFsIGFsaWdubWVudC4KKwogQGl0 ZW0gYm9yZGVydwogU2V0IHRoZSB3aWR0aCBvZiB0aGUgYm9yZGVyIHRvIGJlIGRyYXduIGFy b3VuZCB0aGUgdGV4dCB1c2luZyBAdmFye2JvcmRlcmNvbG9yfS4KIFRoZSBkZWZhdWx0IHZh bHVlIG9mIEB2YXJ7Ym9yZGVyd30gaXMgMC4KZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3Zm X2RyYXd0ZXh0LmMgYi9saWJhdmZpbHRlci92Zl9kcmF3dGV4dC5jCmluZGV4IDQ4ZDc3Y2Iy YjEuLjY4ZmNhZTUxYTAgMTAwNjQ0Ci0tLSBhL2xpYmF2ZmlsdGVyL3ZmX2RyYXd0ZXh0LmMK KysrIGIvbGliYXZmaWx0ZXIvdmZfZHJhd3RleHQuYwpAQCAtMzA5LDEyICszMDksMTQgQEAg dHlwZWRlZiBzdHJ1Y3QgRHJhd1RleHRDb250ZXh0IHsKIAogICAgIGludCBib3h3OyAgICAg ICAgICAgICAgICAgICAgICAgLy8vPCB0aGUgdmFsdWUgb2YgdGhlIGJveHcgcGFyYW1ldGVy CiAgICAgaW50IGJveGg7ICAgICAgICAgICAgICAgICAgICAgICAvLy88IHRoZSB2YWx1ZSBv ZiB0aGUgYm94aCBwYXJhbWV0ZXIKKyAgICB1aW50OF90ICp0ZXh0X2FsaWduOyAgICAgICAg ICAgIC8vLzwgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHRleHQgYWxpZ25tZW50CiAK ICAgICBUZXh0TGluZSAqbGluZXM7ICAgICAgICAgICAgICAgIC8vLzwgY29tcHV0ZWQgaW5m b3JtYXRpb24gYWJvdXQgdGV4dCBsaW5lcwogICAgIGludCBsaW5lX2NvdW50OyAgICAgICAg ICAgICAgICAgLy8vPCB0aGUgbnVtYmVyIG9mIHRleHQgbGluZXMKICAgICB1aW50MzJfdCAq dGFiX2NsdXN0ZXJzOyAgICAgICAgIC8vLzwgdGhlIHBvc2l0aW9uIG9mIHRhYiBjaGFyYWN0 ZXJzIGluIHRoZSB0ZXh0CiAgICAgaW50IHRhYl9jb3VudDsgICAgICAgICAgICAgICAgICAv Ly88IHRoZSBudW1iZXIgb2YgdGFiIGNoYXJhY3RlcnMKICAgICBpbnQgYmxhbmtfYWR2YW5j ZTY0OyAgICAgICAgICAgIC8vLzwgdGhlIHNpemUgb2YgdGhlIHNwYWNlIGNoYXJhY3Rlcgor ICAgIGludCB0YWJfd2FybmluZ19wcmludGVkOyAgICAgICAgLy8vPCBlbnN1cmUgdGhlIHRh YiB3YXJuaW5nIHRvIGJlIHByaW50ZWQgb25seSBvbmNlCiB9IERyYXdUZXh0Q29udGV4dDsK IAogI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoRHJhd1RleHRDb250ZXh0LCB4KQpAQCAt MzMzLDYgKzMzNSw3IEBAIHN0YXRpYyBjb25zdCBBVk9wdGlvbiBkcmF3dGV4dF9vcHRpb25z W109IHsKICAgICB7ImJveGJvcmRlcnciLCAgICAgInNldCBib3ggYm9yZGVycyB3aWR0aCIs IE9GRlNFVChib3hib3JkZXJ3KSwgICAgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3Ry PSIwIn0sICAgMCwgMCwgRkxBR1N9LAogICAgIHsibGluZV9zcGFjaW5nIiwgICAic2V0IGxp bmUgc3BhY2luZyBpbiBwaXhlbHMiLCBPRkZTRVQobGluZV9zcGFjaW5nKSwgIEFWX09QVF9U WVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHU30sCiAg ICAgeyJmb250c2l6ZSIsICAgICAgICJzZXQgZm9udCBzaXplIiwgICAgICAgICBPRkZTRVQo Zm9udHNpemVfZXhwciksICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj1OVUxMfSwg IDAsIDAsIEZMQUdTfSwKKyAgICB7InRleHRfYWxpZ24iLCAgICAgInNldCB0ZXh0IGFsaWdu bWVudCIsICAgIE9GRlNFVCh0ZXh0X2FsaWduKSwgICAgICAgICBBVl9PUFRfVFlQRV9TVFJJ TkcsIHsuc3RyPSJUTCJ9LCAgMCwgMCwgRkxBR1N9LAogICAgIHsieCIsICAgICAgICAgICAg ICAic2V0IHggZXhwcmVzc2lvbiIsICAgICAgT0ZGU0VUKHhfZXhwciksICAgICAgICAgICAg IEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9IjAifSwgICAwLCAwLCBGTEFHU30sCiAgICAg eyJ5IiwgICAgICAgICAgICAgICJzZXQgeSBleHByZXNzaW9uIiwgICAgICBPRkZTRVQoeV9l eHByKSwgICAgICAgICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj0iMCJ9LCAgIDAs IDAsIEZMQUdTfSwKICAgICB7ImJveHciLCAgICAgICAgICAgInNldCBib3ggd2lkdGgiLCAg ICAgICAgIE9GRlNFVChib3h3KSwgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9JTlQsICAg IHsuaTY0PTB9LCAgICAgMCwgSU5UX01BWCwgRkxBR1N9LApAQCAtODQ5LDYgKzg1MiwxOSBA QCBzdGF0aWMgaW50IHN0cmluZ190b19hcnJheShjb25zdCBjaGFyKiBzb3VyY2UsIGludCog cmVzdWx0LCBpbnQgcmVzdWx0X3NpemUpCiAgICAgcmV0dXJuIGNvdW50ZXI7CiB9CiAKK3N0 YXRpYyBpbnQgdmFsaWRhdGVfdGV4dF9hbGlnbihjaGFyKiB0ZXh0X2FsaWduKQoreworICAg IGludCBlcnIgPSAwOworICAgIGlmIChzdHJsZW4odGV4dF9hbGlnbikgIT0gMgorICAgICAg ICB8fCBzdHJjaHIoIkxDUlRNQiIsIHRleHRfYWxpZ25bMF0pID09IE5VTEwgfHwgc3RyY2hy KCJMQ1JUTUIiLCB0ZXh0X2FsaWduWzFdKSA9PSBOVUxMCisgICAgICAgIHx8IChzdHJjaHIo IlRNQiIsIHRleHRfYWxpZ25bMF0pICE9IE5VTEwgJiYgc3RyY2hyKCJMQ1IiLCB0ZXh0X2Fs aWduWzFdKSA9PSBOVUxMKQorICAgICAgICB8fCAoc3RyY2hyKCJMQ1IiLCB0ZXh0X2FsaWdu WzBdKSAhPSBOVUxMICYmIHN0cmNocigiVE1CIiwgdGV4dF9hbGlnblsxXSkgPT0gTlVMTCkp IHsKKyAgICAgICAgZXJyID0gQVZFUlJPUihFSU5WQUwpOworICAgIH0KKworICAgIHJldHVy biBlcnI7Cit9CisKIHN0YXRpYyBhdl9jb2xkIGludCBpbml0KEFWRmlsdGVyQ29udGV4dCAq Y3R4KQogewogICAgIGludCBlcnI7CkBAIC05MTQsNiArOTMwLDE0IEBAIHN0YXRpYyBhdl9j b2xkIGludCBpbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQogICAgICAgICByZXR1cm4gQVZF UlJPUihFSU5WQUwpOwogICAgIH0KIAorICAgIGlmICgoZXJyID0gdmFsaWRhdGVfdGV4dF9h bGlnbihzLT50ZXh0X2FsaWduKSkpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VS Uk9SLAorICAgICAgICAgICAgICAgIlRoZSB2YWx1ZSBwcm92aWRlZCBmb3IgcGFyYW1ldGVy ICd0ZXh0X2FsaWduJyBpcyBub3QgdmFsaWQsXG4iKTsKKyAgICAgICAgYXZfbG9nKGN0eCwg QVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgInBsZWFzZSBzcGVjaWZ5IGEgdHdvIGNo YXJhY3RlcnMgc3RyaW5nIGNvbnRhaW5pbmcgb25seSBvbmUgbGV0dGVyIGZvciBob3Jpem9u dGFsIGFsaWdubWVudCAoJ0xDUicpIGFuZCBvbmUgZm9yIHZlcnRpY2FsIGFsaWdubWVudCAo J1RNQicpXG4iKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKICNpZiBDT05GSUdf TElCRlJJQklESQogICAgIGlmIChzLT50ZXh0X3NoYXBpbmcpCiAgICAgICAgIGlmICgoZXJy ID0gc2hhcGVfdGV4dChjdHgpKSA8IDApCkBAIC0xNDg0LDEzICsxNTA4LDMyIEBAIHN0YXRp YyBpbnQgZHJhd19nbHlwaHMoRHJhd1RleHRDb250ZXh0ICpzLCBBVkZyYW1lICpmcmFtZSwK ICAgICBHbHlwaCBkdW1teSA9IHsgMCB9LCAqZ2x5cGg7CiAgICAgRlRfQml0bWFwIGJpdG1h cDsKICAgICBGVF9CaXRtYXBHbHlwaCBiX2dseXBoOworICAgIHVpbnQ4X3Qgal9jZW50ZXIg PSAwLCBqX3JpZ2h0ID0gMCwgal9taWRkbGUgPSAwLCBqX2JvdHRvbSA9IDA7CisgICAgaW50 IGxpbmVfdywgb2Zmc2V0X3kgPSAwOwogICAgIGludCBjbGlwX3ggPSAwLCBjbGlwX3kgPSAw OwogCisgICAgal9jZW50ZXIgPSBzdHJzdHIocy0+dGV4dF9hbGlnbiwgIkMiKSA+IDA7Cisg ICAgal9yaWdodCA9IHN0cnN0cihzLT50ZXh0X2FsaWduLCAiUiIpID4gMDsKKyAgICBqX21p ZGRsZSA9IHN0cnN0cihzLT50ZXh0X2FsaWduLCAiTSIpID4gMDsKKyAgICBqX2JvdHRvbSA9 IHN0cnN0cihzLT50ZXh0X2FsaWduLCAiQiIpID4gMDsKKworICAgIGlmIChqX21pZGRsZSkg eworICAgICAgICBvZmZzZXRfeSA9IChzLT5ib3hfaGVpZ2h0IC0gbWV0cmljcy0+aGVpZ2h0 KSAvIDI7CisgICAgfSBlbHNlIGlmIChqX2JvdHRvbSkgeworICAgICAgICBvZmZzZXRfeSA9 IHMtPmJveF9oZWlnaHQgLSBtZXRyaWNzLT5oZWlnaHQ7CisgICAgfQorCisgICAgaWYgKChq X3JpZ2h0IHx8IGpfY2VudGVyKSAmJiAhcy0+dGFiX3dhcm5pbmdfcHJpbnRlZCAmJiBzLT50 YWJfY291bnQgPiAwKSB7CisgICAgICAgIHMtPnRhYl93YXJuaW5nX3ByaW50ZWQgPSAxOwor ICAgICAgICBhdl9sb2cocywgQVZfTE9HX1dBUk5JTkcsICJUYWIgY2hhcmFjdGVycyBhcmUg b25seSBzdXBwb3J0ZWQgd2l0aCBsZWZ0IGhvcml6b250YWwgYWxpZ25tZW50XG4iKTsKKyAg ICB9CisgICAgCiAgICAgY2xpcF94ID0gRkZNSU4obWV0cmljcy0+cmVjdF94ICsgcy0+Ym94 X3dpZHRoICsgcy0+YmJfcmlnaHQsIGZyYW1lLT53aWR0aCk7CiAgICAgY2xpcF95ID0gRkZN SU4obWV0cmljcy0+cmVjdF95ICsgcy0+Ym94X2hlaWdodCArIHMtPmJiX2JvdHRvbSwgZnJh bWUtPmhlaWdodCk7CiAKICAgICBmb3IgKGwgPSAwOyBsIDwgcy0+bGluZV9jb3VudDsgKyts KSB7CiAgICAgICAgIFRleHRMaW5lICpsaW5lID0gJnMtPmxpbmVzW2xdOworICAgICAgICBs aW5lX3cgPSBQT1NfQ0VJTChsaW5lLT53aWR0aDY0LCA2NCk7CiAgICAgICAgIGZvciAoZyA9 IDA7IGcgPCBsaW5lLT5oYl9kYXRhLmdseXBoX2NvdW50OyArK2cpIHsKICAgICAgICAgICAg IGluZm8gPSAmbGluZS0+Z2x5cGhzW2ddOwogICAgICAgICAgICAgZHVtbXkuZm9udHNpemUg PSBzLT5mb250c2l6ZTsKQEAgLTE1MDQsMTAgKzE1NDcsMTYgQEAgc3RhdGljIGludCBkcmF3 X2dseXBocyhEcmF3VGV4dENvbnRleHQgKnMsIEFWRnJhbWUgKmZyYW1lLAogICAgICAgICAg ICAgYl9nbHlwaCA9IGJvcmRlcncgPyBnbHlwaC0+Ym9yZGVyX2JnbHlwaFtpZHhdIDogZ2x5 cGgtPmJnbHlwaFtpZHhdOwogICAgICAgICAgICAgYml0bWFwID0gYl9nbHlwaC0+Yml0bWFw OwogICAgICAgICAgICAgeDEgPSB4ICsgaW5mby0+eCArIGJfZ2x5cGgtPmxlZnQ7Ci0gICAg ICAgICAgICB5MSA9IHkgKyBpbmZvLT55IC0gYl9nbHlwaC0+dG9wOworICAgICAgICAgICAg eTEgPSB5ICsgaW5mby0+eSAtIGJfZ2x5cGgtPnRvcCArIG9mZnNldF95OwogICAgICAgICAg ICAgdzEgPSBiaXRtYXAud2lkdGg7CiAgICAgICAgICAgICBoMSA9IGJpdG1hcC5yb3dzOwog CisgICAgICAgICAgICBpZiAoal9jZW50ZXIpIHsKKyAgICAgICAgICAgICAgICB4MSArPSAo cy0+Ym94X3dpZHRoIC0gbGluZV93KSAvIDI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGpf cmlnaHQpIHsKKyAgICAgICAgICAgICAgICB4MSArPSBzLT5ib3hfd2lkdGggLSBsaW5lX3c7 CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIE9mZnNldCBvZiB0aGUgZ2x5cGgn cyBiaXRtYXAgaW4gdGhlIHZpc2libGUgcmVnaW9uCiAgICAgICAgICAgICBkeCA9IGR5ID0g MDsKICAgICAgICAgICAgIGlmICh4MSA8IG1ldHJpY3MtPnJlY3RfeCAtIHMtPmJiX2xlZnQp IHsKLS0gCjIuMzAuMgoK --------------m2rq341R7iyzE47iZEyWRv7E Content-Type: text/plain; charset=UTF-8; name="0007-the-new-y_align-parameter-specifies-if-the-user-prov.patch" Content-Disposition: attachment; filename*0="0007-the-new-y_align-parameter-specifies-if-the-user-prov.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA0NzUzODZkNjM4MGVlODFmMTBmZWY4YmEyY2ZiZWQ3ZDYxZmZmZDA1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB5ZXRoaWUgPGtsaW1rbGltQHRpc2NhbGkuaXQ+CkRh dGU6IEZyaSwgMjYgTWF5IDIwMjMgMTM6MDE6MjQgKzAyMDAKU3ViamVjdDogW1BBVENIIDcv OV0gdGhlIG5ldyB5X2FsaWduIHBhcmFtZXRlciBzcGVjaWZpZXMgaWYgdGhlIHVzZXIgcHJv dmlkZWQKIHkgdmFsdWUgaXMgcmVmZXJyZWQgdG8gdGhlIHRvcCBvZiB0aGUgdGV4dCwgdG8g dGhlIGZvbnQgYmFzZWxpbmUgb3IgdG8gdGhlCiB0b3Agb2YgdGhlIGZvbnQKCi0tLQogZG9j L2ZpbHRlcnMudGV4aSAgICAgICAgICB8IDEwICsrKysrKysrKwogbGliYXZmaWx0ZXIvdmZf ZHJhd3RleHQuYyB8IDQ3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t LQogMiBmaWxlcyBjaGFuZ2VkLCA0NiBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9kb2MvZmlsdGVycy50ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQppbmRl eCBiMmMxZWE2YzY1Li4xZWNlZjc0Y2M4IDEwMDY0NAotLS0gYS9kb2MvZmlsdGVycy50ZXhp CisrKyBiL2RvYy9maWx0ZXJzLnRleGkKQEAgLTEyMjg4LDYgKzEyMjg4LDE2IEBAIFRoZSB2 YWx1ZSBtdXN0IGNvbnRhaW4gZXhhY3RseSB0d28gbGV0dGVycywgb25lIGZvciB0aGUgdmVy dGljYWwgYWxpZ25tZW50IChUPXRvCiBNPW1pZGRsZSwgQj1ib3R0b20pIGFuZCBvbmUgZm9y IHRoZSBob3Jpem9udGFsIGFsaWdubWVudCAoTD1sZWZ0LCBDPWNlbnRlciwgUj1yaWdodCku CiBQbGVhc2Ugbm90ZSB0aGF0IHRhYiBjaGFyYWN0ZXJzIGFyZSBvbmx5IHN1cHBvcnRlZCB3 aXRoIHRoZSBsZWZ0IGhvcml6b250YWwgYWxpZ25tZW50LgogCitAaXRlbSB5X2FsaWduCitT cGVjaWZ5IHdoYXQgdGhlIEB2YXJ7eX0gdmFsdWUgaXMgcmVmZXJyZWQgdG8uIFBvc3NpYmxl IHZhbHVlcyBhcmU6CitAaXRlbWl6ZSBAYnVsbGV0CitAaXRlbSBAY29kZXt0ZXh0fSB0aGUg dG9wIG9mIHRoZSBoaWdoZXN0IGdseXBoIG9mIHRoZSBmaXJzdCB0ZXh0IGxpbmUgaXMgcGxh Y2VkIGF0IEB2YXJ7eX0KK0BpdGVtIEBjb2Rle2Jhc2VsaW5lfSB0aGUgYmFzZWxpbmUgb2Yg dGhlIGZpcnN0IHRleHQgbGluZSBpcyBwbGFjZWQgYXQgQHZhcnt5fQorQGl0ZW0gQGNvZGV7 Zm9udH0gdGhlIGJhc2VsaW5lIG9mIHRoZSBmaXJzdCB0ZXh0IGxpbmUgaXMgcGxhY2VkIGF0 IEB2YXJ7eX0gcGx1cyB0aGUKKyAgICBhc2NlbnQgKGluIHBpeGVscykgZGVmaW5lZCBpbiB0 aGUgZm9udCBtZXRyaWNzCitAZW5kIGl0ZW1pemUKK1RoZSBkZWZhdWx0IHZhbHVlIG9mIEB2 YXJ7eV9hbGlnbn0gaXMgInRleHQiIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCiBA aXRlbSBib3JkZXJ3CiBTZXQgdGhlIHdpZHRoIG9mIHRoZSBib3JkZXIgdG8gYmUgZHJhd24g YXJvdW5kIHRoZSB0ZXh0IHVzaW5nIEB2YXJ7Ym9yZGVyY29sb3J9LgogVGhlIGRlZmF1bHQg dmFsdWUgb2YgQHZhcntib3JkZXJ3fSBpcyAwLgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIv dmZfZHJhd3RleHQuYyBiL2xpYmF2ZmlsdGVyL3ZmX2RyYXd0ZXh0LmMKaW5kZXggNjhmY2Fl NTFhMC4uMTA2Yjc0ZGM5ZSAxMDA2NDQKLS0tIGEvbGliYXZmaWx0ZXIvdmZfZHJhd3RleHQu YworKysgYi9saWJhdmZpbHRlci92Zl9kcmF3dGV4dC5jCkBAIC0xNzEsNiArMTcxLDEyIEBA IGVudW0gZXhwYW5zaW9uX21vZGUgewogICAgIEVYUF9TVFJGVElNRSwKIH07CiAKK2VudW0g eV9hbGlnbm1lbnQgeworICAgIFlBX1RFWFQsCisgICAgWUFfQkFTRUxJTkUsCisgICAgWUFf Rk9OVCwKK307CisKIHR5cGVkZWYgc3RydWN0IEhhcmZidXp6RGF0YSB7CiAgICAgaGJfYnVm ZmVyX3QqIGJ1ZjsKICAgICBoYl9mb250X3QqIGZvbnQ7CkBAIC0zMTAsNiArMzE2LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgRHJhd1RleHRDb250ZXh0IHsKICAgICBpbnQgYm94dzsgICAgICAg ICAgICAgICAgICAgICAgIC8vLzwgdGhlIHZhbHVlIG9mIHRoZSBib3h3IHBhcmFtZXRlcgog ICAgIGludCBib3hoOyAgICAgICAgICAgICAgICAgICAgICAgLy8vPCB0aGUgdmFsdWUgb2Yg dGhlIGJveGggcGFyYW1ldGVyCiAgICAgdWludDhfdCAqdGV4dF9hbGlnbjsgICAgICAgICAg ICAvLy88IHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCB0ZXh0IGFsaWdubWVudAorICAg IGludCB5X2FsaWduOyAgICAgICAgICAgICAgICAgICAgLy8vPCB0aGUgdmFsdWUgb2YgdGhl IHlfYWxpZ24gcGFyYW1ldGVyCiAKICAgICBUZXh0TGluZSAqbGluZXM7ICAgICAgICAgICAg ICAgIC8vLzwgY29tcHV0ZWQgaW5mb3JtYXRpb24gYWJvdXQgdGV4dCBsaW5lcwogICAgIGlu dCBsaW5lX2NvdW50OyAgICAgICAgICAgICAgICAgLy8vPCB0aGUgbnVtYmVyIG9mIHRleHQg bGluZXMKQEAgLTM1Myw2ICszNjAsMTAgQEAgc3RhdGljIGNvbnN0IEFWT3B0aW9uIGRyYXd0 ZXh0X29wdGlvbnNbXT0gewogICAgICAgICB7Im5vbmUiLCAgICAgInNldCBubyBleHBhbnNp b24iLCAgICAgICAgICAgICAgICAgICAgT0ZGU0VUKGV4cF9tb2RlKSwgQVZfT1BUX1RZUEVf Q09OU1QsIHsuaTY0PUVYUF9OT05FfSwgICAgIDAsIDAsIEZMQUdTLCAiZXhwYW5zaW9uIn0s CiAgICAgICAgIHsibm9ybWFsIiwgICAic2V0IG5vcm1hbCBleHBhbnNpb24iLCAgICAgICAg ICAgICAgICBPRkZTRVQoZXhwX21vZGUpLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9RVhQ X05PUk1BTH0sICAgMCwgMCwgRkxBR1MsICJleHBhbnNpb24ifSwKICAgICAgICAgeyJzdHJm dGltZSIsICJzZXQgc3RyZnRpbWUgZXhwYW5zaW9uIChkZXByZWNhdGVkKSIsIE9GRlNFVChl eHBfbW9kZSksIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1FWFBfU1RSRlRJTUV9LCAwLCAw LCBGTEFHUywgImV4cGFuc2lvbiJ9LAorICAgIHsieV9hbGlnbiIsICAgInNldCB0aGUgeSBh bGlnbm1lbnQiLCAgICBPRkZTRVQoeV9hbGlnbiksIEFWX09QVF9UWVBFX0lOVCwgIHsuaTY0 PVlBX1RFWFR9LCAwLCAyLCBGTEFHUywgInlfYWxpZ24ifSwKKyAgICAgICAgeyJ0ZXh0Iiwg ICAgICJ5IGlzIHJlZmVycmVkIHRvIHRoZSB0b3Agb2YgdGhlIGZpcnN0IHRleHQgbGluZSIs IE9GRlNFVCh5X2FsaWduKSwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVlBX1RFWFR9LCAg ICAgMCwgMCwgRkxBR1MsICJ5X2FsaWduIn0sCisgICAgICAgIHsiYmFzZWxpbmUiLCAieSBp cyByZWZlcnJlZCB0byB0aGUgYmFzZWxpbmUgb2YgdGhlIGZpcnN0IGxpbmUiLCBPRkZTRVQo eV9hbGlnbiksIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1ZQV9CQVNFTElORX0sIDAsIDAs IEZMQUdTLCAieV9hbGlnbiJ9LAorICAgICAgICB7ImZvbnQiLCAgICAgInkgaXMgcmVmZXJy ZWQgdG8gdGhlIGZvbnQgZGVmaW5lZCBsaW5lIG1ldHJpY3MiLCAgT0ZGU0VUKHlfYWxpZ24p LCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9WUFfRk9OVH0sICAgICAwLCAwLCBGTEFHUywg InlfYWxpZ24ifSwKIAogICAgIHsidGltZWNvZGUiLCAgICAgICAgInNldCBpbml0aWFsIHRp bWVjb2RlIiwgICAgICAgICAgICAgT0ZGU0VUKHRjX29wdF9zdHJpbmcpLCBBVl9PUFRfVFlQ RV9TVFJJTkcsICAgey5zdHI9TlVMTH0sIDAsIDAsIEZMQUdTfSwKICAgICB7InRjMjRobWF4 IiwgICAgICAgICJzZXQgMjQgaG91cnMgbWF4ICh0aW1lY29kZSBvbmx5KSIsIE9GRlNFVCh0 YzI0aG1heCksICAgICAgQVZfT1BUX1RZUEVfQk9PTCwgICAgIHsuaTY0PTB9LCAgICAwLCAx LCBGTEFHU30sCkBAIC05NTYsMTEgKzk2NywxMyBAQCBzdGF0aWMgYXZfY29sZCBpbnQgaW5p dChBVkZpbHRlckNvbnRleHQgKmN0eCkKICAgICBpZiAoKGVyciA9IHVwZGF0ZV9mb250c2l6 ZShjdHgpKSA8IDApCiAgICAgICAgIHJldHVybiBlcnI7CiAKKyAgICAvLyBBbHdheXMgaW5p dCB0aGUgc3Ryb2tlciwgbWF5IGJlIG5lZWRlZCBpZiBib3JkZXJ3IGlzIHNldCB2aWEgY29t bWFuZAorICAgIGlmIChGVF9TdHJva2VyX05ldyhzLT5saWJyYXJ5LCAmcy0+c3Ryb2tlcikp IHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQ291bHQgbm90IGluaXQg RlQgc3Ryb2tlclxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAg IH0KKwogICAgIGlmIChzLT5ib3JkZXJ3KSB7Ci0gICAgICAgIGlmIChGVF9TdHJva2VyX05l dyhzLT5saWJyYXJ5LCAmcy0+c3Ryb2tlcikpIHsKLSAgICAgICAgICAgIGF2X2xvZyhjdHgs IEFWX0xPR19FUlJPUiwgIkNvdWx0IG5vdCBpbml0IEZUIHN0cm9rZXJcbiIpOwotICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgICAgIH0KICAgICAgICAgRlRf U3Ryb2tlcl9TZXQocy0+c3Ryb2tlciwgcy0+Ym9yZGVydyA8PCA2LCBGVF9TVFJPS0VSX0xJ TkVDQVBfUk9VTkQsCiAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NUUk9LRVJfTElORUpP SU5fUk9VTkQsIDApOwogICAgIH0KQEAgLTE2MzIsNyArMTY0NSw2IEBAIHN0YXRpYyBpbnQg bWVhc3VyZV90ZXh0KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBUZXh0TWV0cmljcyAqbWV0cmlj cykKICAgICBpbnQgbGluZV9jb3VudCA9IDA7CiAgICAgdWludDMyX3QgY29kZSA9IDA7CiAg ICAgR2x5cGggKmdseXBoID0gTlVMTDsKLSAgICBpbnQgaGVpZ2h0NjQ7CiAKICAgICBpbnQg aSwgdGFiX2lkeCA9IDAsIGxhc3RfdGFiX2lkeCA9IDAsIGxpbmVfb2Zmc2V0ID0gMDsKICAg ICBjaGFyKiBwOwpAQCAtMTc1MSwxMCArMTc2MywxMyBAQCBjb250aW51ZV9vbl9mYWlsZWQy OgogICAgIG1ldHJpY3MtPmxpbmVfaGVpZ2h0NjQgPSBzLT5mYWNlLT5zaXplLT5tZXRyaWNz LmhlaWdodDsKICAgICAKICAgICBtZXRyaWNzLT53aWR0aCA9IFBPU19DRUlMKHdpZHRoNjQs IDY0KTsKLSAgICBoZWlnaHQ2NCA9IChtZXRyaWNzLT5saW5lX2hlaWdodDY0ICsgcy0+bGlu ZV9zcGFjaW5nICogNjQpICoKLSAgICAgICAgKEZGTUFYKDAsIGxpbmVfY291bnQgLSAxKSkg KyBmaXJzdF9tYXhfeTY0IC0gY3VyX21pbl95NjQ7Ci0gICAgbWV0cmljcy0+aGVpZ2h0ID0g UE9TX0NFSUwoaGVpZ2h0NjQsIDY0KTsKLQorICAgIGlmIChzLT55X2FsaWduID09IFlBX0ZP TlQpIHsKKyAgICAgICAgbWV0cmljcy0+aGVpZ2h0ID0gUE9TX0NFSUwobWV0cmljcy0+bGlu ZV9oZWlnaHQ2NCAqIGxpbmVfY291bnQsIDY0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBp bnQgaGVpZ2h0NjQgPSAobWV0cmljcy0+bGluZV9oZWlnaHQ2NCArIHMtPmxpbmVfc3BhY2lu ZyAqIDY0KSAqCisgICAgICAgICAgICAoRkZNQVgoMCwgbGluZV9jb3VudCAtIDEpKSArIGZp cnN0X21heF95NjQgLSBjdXJfbWluX3k2NDsKKyAgICAgICAgbWV0cmljcy0+aGVpZ2h0ID0g UE9TX0NFSUwoaGVpZ2h0NjQsIDY0KTsKKyAgICB9CiAgICAgbWV0cmljcy0+b2Zmc2V0X3Rv cDY0ID0gZmlyc3RfbWF4X3k2NDsKICAgICBtZXRyaWNzLT5vZmZzZXRfcmlnaHQ2NCA9IGxh c3RfbWF4X3g2NDsKICAgICBtZXRyaWNzLT5vZmZzZXRfYm90dG9tNjQgPSBjdXJfbWluX3k2 NDsKQEAgLTE5MjksNyArMTk0NCwxMyBAQCBzdGF0aWMgaW50IGRyYXdfdGV4dChBVkZpbHRl ckNvbnRleHQgKmN0eCwgQVZGcmFtZSAqZnJhbWUpCiAgICAgeCA9IDA7CiAgICAgeSA9IDA7 CiAgICAgeDY0ID0gKGludCkocy0+eCAqIDY0Lik7Ci0gICAgeTY0ID0gKGludCkocy0+eSAq IDY0LiArIG1ldHJpY3Mub2Zmc2V0X3RvcDY0KTsKKyAgICBpZiAocy0+eV9hbGlnbiA9PSBZ QV9GT05UKSB7CisgICAgICAgIHk2NCA9IChpbnQpKHMtPnkgKiA2NC4gKyBzLT5mYWNlLT5z aXplLT5tZXRyaWNzLmFzY2VuZGVyKTsKKyAgICB9IGVsc2UgaWYgKHMtPnlfYWxpZ24gPT0g WUFfQkFTRUxJTkUpIHsKKyAgICAgICAgeTY0ID0gKGludCkocy0+eSAqIDY0Lik7CisgICAg fSBlbHNlIHsKKyAgICAgICAgeTY0ID0gKGludCkocy0+eSAqIDY0LiArIG1ldHJpY3Mub2Zm c2V0X3RvcDY0KTsKKyAgICB9CiAKICAgICBmb3IgKGludCBsID0gMDsgbCA8IHMtPmxpbmVf Y291bnQ7ICsrbCkgewogICAgICAgICBUZXh0TGluZSAqbGluZSA9ICZzLT5saW5lc1tsXTsK QEAgLTE5NzMsNyArMTk5NCwxMSBAQCBzdGF0aWMgaW50IGRyYXdfdGV4dChBVkZpbHRlckNv bnRleHQgKmN0eCwgQVZGcmFtZSAqZnJhbWUpCiAgICAgfQogCiAgICAgbWV0cmljcy5yZWN0 X3ggPSBzLT54OwotICAgIG1ldHJpY3MucmVjdF95ID0gcy0+eTsKKyAgICBpZiAocy0+eV9h bGlnbiA9PSBZQV9CQVNFTElORSkgeworICAgICAgICBtZXRyaWNzLnJlY3RfeSA9IHMtPnkg LSBtZXRyaWNzLm9mZnNldF90b3A2NCAvIDY0OworICAgIH0gZWxzZSB7CisgICAgICAgIG1l dHJpY3MucmVjdF95ID0gcy0+eTsKKyAgICB9CiAgICAgCiAgICAgcy0+Ym94X3dpZHRoID0g cy0+Ym94dyA9PSAwID8gbWV0cmljcy53aWR0aCA6IHMtPmJveHc7CiAgICAgcy0+Ym94X2hl aWdodCA9IHMtPmJveGggPT0gMCA/IG1ldHJpY3MuaGVpZ2h0IDogcy0+Ym94aDsKLS0gCjIu MzAuMgoK --------------m2rq341R7iyzE47iZEyWRv7E Content-Type: text/plain; charset=UTF-8; name="0008-many-filter-parameters-are-now-supported-as-commands.patch" Content-Disposition: attachment; filename*0="0008-many-filter-parameters-are-now-supported-as-commands.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA2ZGEwYTNkZDYzNDVlZWNiYzY4OTIzZTY2NzQxZjZkNGU2ZTZjMWFlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB5ZXRoaWUgPGtsaW1rbGltQHRpc2NhbGkuaXQ+CkRh dGU6IEZyaSwgMjYgTWF5IDIwMjMgMTM6MDY6NDcgKzAyMDAKU3ViamVjdDogW1BBVENIIDgv OV0gbWFueSBmaWx0ZXIgcGFyYW1ldGVycyBhcmUgbm93IHN1cHBvcnRlZCBhcyBjb21tYW5k cwoKLS0tCiBkb2MvZmlsdGVycy50ZXhpICAgICAgICAgIHwgMjUgKysrKysrKysrKystCiBs aWJhdmZpbHRlci92Zl9kcmF3dGV4dC5jIHwgODIgKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0tLS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDg0IGluc2VydGlvbnMoKyksIDIz IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9maWx0ZXJzLnRleGkgYi9kb2MvZmls dGVycy50ZXhpCmluZGV4IDFlY2VmNzRjYzguLmY0YzgwYWYzMjIgMTAwNjQ0Ci0tLSBhL2Rv Yy9maWx0ZXJzLnRleGkKKysrIGIvZG9jL2ZpbHRlcnMudGV4aQpAQCAtMTI2ODEsMTEgKzEy NjgxLDM0IEBAIEZ1bGwgZmlsdGVyIGludm9jYXRpb24gd2l0aCBzZW5kY21kIHdvdWxkIGxv b2sgbGlrZSB0aGlzOgogQGV4YW1wbGUKIHNlbmRjbWQ9Yz0nNTYuMCBkcmF3dGV4dCByZWlu aXQgZm9udHNpemU9NTZcOmZvbnRjb2xvcj1ncmVlblw6dGV4dD1IZWxsb1xcIFdvcmxkJwog QGVuZCBleGFtcGxlCi1AZW5kIHRhYmxlCiAKIElmIHRoZSBlbnRpcmUgYXJndW1lbnQgY2Fu J3QgYmUgcGFyc2VkIG9yIGFwcGxpZWQgYXMgdmFsaWQgdmFsdWVzIHRoZW4gdGhlIGZpbHRl ciB3aWxsCiBjb250aW51ZSB3aXRoIGl0cyBleGlzdGluZyBwYXJhbWV0ZXJzLgogCitAZW5k IHRhYmxlCisKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYWxzbyBzdXBwb3J0ZWQgYXMg QHJlZntjb21tYW5kc306CisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtIHgKK0BpdGVtIHkK K0BpdGVtIGFscGhhCitAaXRlbSBmb250c2l6ZQorQGl0ZW0gZm9udGNvbG9yCitAaXRlbSBi b3hjb2xvcgorQGl0ZW0gYm9yZGVyY29sb3IKK0BpdGVtIHNoYWRvd2NvbG9yCitAaXRlbSBi b3gKK0BpdGVtIGJveHcKK0BpdGVtIGJveGgKK0BpdGVtIGJveGJvcmRlcncKK0BpdGVtIGxp bmVfc3BhY2luZworQGl0ZW0gdGV4dF9hbGlnbgorQGl0ZW0gc2hhZG93eAorQGl0ZW0gc2hh ZG93eQorQGl0ZW0gYm9yZGVydworQGVuZCBpdGVtaXplCisKIEBzdWJzZWN0aW9uIEV4YW1w bGVzCiAKIEBpdGVtaXplCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci92Zl9kcmF3dGV4dC5j IGIvbGliYXZmaWx0ZXIvdmZfZHJhd3RleHQuYwppbmRleCAxMDZiNzRkYzllLi4xZDlmNTNm NWRkIDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci92Zl9kcmF3dGV4dC5jCisrKyBiL2xpYmF2 ZmlsdGVyL3ZmX2RyYXd0ZXh0LmMKQEAgLTMyOCwyOSArMzI4LDMwIEBAIHR5cGVkZWYgc3Ry dWN0IERyYXdUZXh0Q29udGV4dCB7CiAKICNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKERy YXdUZXh0Q29udGV4dCwgeCkKICNkZWZpbmUgRkxBR1MgQVZfT1BUX0ZMQUdfRklMVEVSSU5H X1BBUkFNfEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNCisjZGVmaW5lIFRGTEFHUyBBVl9PUFRf RkxBR19GSUxURVJJTkdfUEFSQU18QVZfT1BUX0ZMQUdfVklERU9fUEFSQU18QVZfT1BUX0ZM QUdfUlVOVElNRV9QQVJBTQogCiBzdGF0aWMgY29uc3QgQVZPcHRpb24gZHJhd3RleHRfb3B0 aW9uc1tdPSB7CiAgICAgeyJmb250ZmlsZSIsICAgICAgICJzZXQgZm9udCBmaWxlIiwgICAg ICAgICBPRkZTRVQoZm9udGZpbGUpLCAgICAgICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7 LnN0cj1OVUxMfSwgIDAsIDAsIEZMQUdTfSwKLSAgICB7InRleHQiLCAgICAgICAgICAgInNl dCB0ZXh0IiwgICAgICAgICAgICAgIE9GRlNFVCh0ZXh0KSwgICAgICAgICAgICAgICBBVl9P UFRfVFlQRV9TVFJJTkcsIHsuc3RyPU5VTEx9LCAgMCwgMCwgRkxBR1N9LAorICAgIHsidGV4 dCIsICAgICAgICAgICAic2V0IHRleHQiLCAgICAgICAgICAgICAgT0ZGU0VUKHRleHQpLCAg ICAgICAgICAgICAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9TlVMTH0sICAwLCAwLCBU RkxBR1N9LAogICAgIHsidGV4dGZpbGUiLCAgICAgICAic2V0IHRleHQgZmlsZSIsICAgICAg ICAgT0ZGU0VUKHRleHRmaWxlKSwgICAgICAgICAgIEFWX09QVF9UWVBFX1NUUklORywgey5z dHI9TlVMTH0sICAwLCAwLCBGTEFHU30sCi0gICAgeyJmb250Y29sb3IiLCAgICAgICJzZXQg Zm9yZWdyb3VuZCBjb2xvciIsICBPRkZTRVQoZm9udGNvbG9yLnJnYmEpLCAgICAgQVZfT1BU X1RZUEVfQ09MT1IsICB7LnN0cj0iYmxhY2sifSwgMCwgMCwgRkxBR1N9LAorICAgIHsiZm9u dGNvbG9yIiwgICAgICAic2V0IGZvcmVncm91bmQgY29sb3IiLCAgT0ZGU0VUKGZvbnRjb2xv ci5yZ2JhKSwgICAgIEFWX09QVF9UWVBFX0NPTE9SLCAgey5zdHI9ImJsYWNrIn0sIDAsIDAs IFRGTEFHU30sCiAgICAgeyJmb250Y29sb3JfZXhwciIsICJzZXQgZm9yZWdyb3VuZCBjb2xv ciBleHByZXNzaW9uIiwgT0ZGU0VUKGZvbnRjb2xvcl9leHByKSwgQVZfT1BUX1RZUEVfU1RS SU5HLCB7LnN0cj0iIn0sIDAsIDAsIEZMQUdTfSwKLSAgICB7ImJveGNvbG9yIiwgICAgICAg InNldCBib3ggY29sb3IiLCAgICAgICAgIE9GRlNFVChib3hjb2xvci5yZ2JhKSwgICAgICBB Vl9PUFRfVFlQRV9DT0xPUiwgIHsuc3RyPSJ3aGl0ZSJ9LCAwLCAwLCBGTEFHU30sCi0gICAg eyJib3JkZXJjb2xvciIsICAgICJzZXQgYm9yZGVyIGNvbG9yIiwgICAgICBPRkZTRVQoYm9y ZGVyY29sb3IucmdiYSksICAgQVZfT1BUX1RZUEVfQ09MT1IsICB7LnN0cj0iYmxhY2sifSwg MCwgMCwgRkxBR1N9LAotICAgIHsic2hhZG93Y29sb3IiLCAgICAic2V0IHNoYWRvdyBjb2xv ciIsICAgICAgT0ZGU0VUKHNoYWRvd2NvbG9yLnJnYmEpLCAgIEFWX09QVF9UWVBFX0NPTE9S LCAgey5zdHI9ImJsYWNrIn0sIDAsIDAsIEZMQUdTfSwKLSAgICB7ImJveCIsICAgICAgICAg ICAgInNldCBib3giLCAgICAgICAgICAgICAgIE9GRlNFVChkcmF3X2JveCksICAgICAgICAg ICBBVl9PUFRfVFlQRV9CT09MLCAgIHsuaTY0PTB9LCAgICAgMCwgMSwgRkxBR1N9LAotICAg IHsiYm94Ym9yZGVydyIsICAgICAic2V0IGJveCBib3JkZXJzIHdpZHRoIiwgT0ZGU0VUKGJv eGJvcmRlcncpLCAgICAgICAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9IjAifSwgICAw LCAwLCBGTEFHU30sCi0gICAgeyJsaW5lX3NwYWNpbmciLCAgICJzZXQgbGluZSBzcGFjaW5n IGluIHBpeGVscyIsIE9GRlNFVChsaW5lX3NwYWNpbmcpLCAgQVZfT1BUX1RZUEVfSU5ULCAg ICB7Lmk2ND0wfSwgICAgIElOVF9NSU4sIElOVF9NQVgsIEZMQUdTfSwKLSAgICB7ImZvbnRz aXplIiwgICAgICAgInNldCBmb250IHNpemUiLCAgICAgICAgIE9GRlNFVChmb250c2l6ZV9l eHByKSwgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyPU5VTEx9LCAgMCwgMCwgRkxB R1N9LAotICAgIHsidGV4dF9hbGlnbiIsICAgICAic2V0IHRleHQgYWxpZ25tZW50IiwgICAg T0ZGU0VUKHRleHRfYWxpZ24pLCAgICAgICAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9 IlRMIn0sICAwLCAwLCBGTEFHU30sCi0gICAgeyJ4IiwgICAgICAgICAgICAgICJzZXQgeCBl eHByZXNzaW9uIiwgICAgICBPRkZTRVQoeF9leHByKSwgICAgICAgICAgICAgQVZfT1BUX1RZ UEVfU1RSSU5HLCB7LnN0cj0iMCJ9LCAgIDAsIDAsIEZMQUdTfSwKLSAgICB7InkiLCAgICAg ICAgICAgICAgInNldCB5IGV4cHJlc3Npb24iLCAgICAgIE9GRlNFVCh5X2V4cHIpLCAgICAg ICAgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyPSIwIn0sICAgMCwgMCwgRkxBR1N9 LAotICAgIHsiYm94dyIsICAgICAgICAgICAic2V0IGJveCB3aWR0aCIsICAgICAgICAgT0ZG U0VUKGJveHcpLCAgICAgICAgICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9MH0s ICAgICAwLCBJTlRfTUFYLCBGTEFHU30sCi0gICAgeyJib3hoIiwgICAgICAgICAgICJzZXQg Ym94IGhlaWdodCIsICAgICAgICBPRkZTRVQoYm94aCksICAgICAgICAgICAgICAgQVZfT1BU X1RZUEVfSU5ULCAgICB7Lmk2ND0wfSwgICAgIDAsIElOVF9NQVgsIEZMQUdTfSwKLSAgICB7 InNoYWRvd3giLCAgICAgICAgInNldCBzaGFkb3cgeCBvZmZzZXQiLCAgIE9GRlNFVChzaGFk b3d4KSwgICAgICAgICAgICBBVl9PUFRfVFlQRV9JTlQsICAgIHsuaTY0PTB9LCAgICAgSU5U X01JTiwgSU5UX01BWCwgRkxBR1N9LAotICAgIHsic2hhZG93eSIsICAgICAgICAic2V0IHNo YWRvdyB5IG9mZnNldCIsICAgT0ZGU0VUKHNoYWRvd3kpLCAgICAgICAgICAgIEFWX09QVF9U WVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHU30sCi0g ICAgeyJib3JkZXJ3IiwgICAgICAgICJzZXQgYm9yZGVyIHdpZHRoIiwgICAgICBPRkZTRVQo Ym9yZGVydyksICAgICAgICAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7Lmk2ND0wfSwgICAg IElOVF9NSU4sIElOVF9NQVgsIEZMQUdTfSwKLSAgICB7InRhYnNpemUiLCAgICAgICAgInNl dCB0YWIgc2l6ZSIsICAgICAgICAgIE9GRlNFVCh0YWJzaXplKSwgICAgICAgICAgICBBVl9P UFRfVFlQRV9JTlQsICAgIHsuaTY0PTR9LCAgICAgMCwgSU5UX01BWCwgRkxBR1N9LAorICAg IHsiYm94Y29sb3IiLCAgICAgICAic2V0IGJveCBjb2xvciIsICAgICAgICAgT0ZGU0VUKGJv eGNvbG9yLnJnYmEpLCAgICAgIEFWX09QVF9UWVBFX0NPTE9SLCAgey5zdHI9IndoaXRlIn0s IDAsIDAsIFRGTEFHU30sCisgICAgeyJib3JkZXJjb2xvciIsICAgICJzZXQgYm9yZGVyIGNv bG9yIiwgICAgICBPRkZTRVQoYm9yZGVyY29sb3IucmdiYSksICAgQVZfT1BUX1RZUEVfQ09M T1IsICB7LnN0cj0iYmxhY2sifSwgMCwgMCwgVEZMQUdTfSwKKyAgICB7InNoYWRvd2NvbG9y IiwgICAgInNldCBzaGFkb3cgY29sb3IiLCAgICAgIE9GRlNFVChzaGFkb3djb2xvci5yZ2Jh KSwgICBBVl9PUFRfVFlQRV9DT0xPUiwgIHsuc3RyPSJibGFjayJ9LCAwLCAwLCBURkxBR1N9 LAorICAgIHsiYm94IiwgICAgICAgICAgICAic2V0IGJveCIsICAgICAgICAgICAgICAgT0ZG U0VUKGRyYXdfYm94KSwgICAgICAgICAgIEFWX09QVF9UWVBFX0JPT0wsICAgey5pNjQ9MH0s ICAgICAwLCAxLCBURkxBR1N9LAorICAgIHsiYm94Ym9yZGVydyIsICAgICAic2V0IGJveCBi b3JkZXJzIHdpZHRoIiwgT0ZGU0VUKGJveGJvcmRlcncpLCAgICAgICAgIEFWX09QVF9UWVBF X1NUUklORywgey5zdHI9IjAifSwgICAwLCAwLCBURkxBR1N9LAorICAgIHsibGluZV9zcGFj aW5nIiwgICAic2V0IGxpbmUgc3BhY2luZyBpbiBwaXhlbHMiLCBPRkZTRVQobGluZV9zcGFj aW5nKSwgIEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICBJTlRfTUlOLCBJTlRf TUFYLCBURkxBR1N9LAorICAgIHsiZm9udHNpemUiLCAgICAgICAic2V0IGZvbnQgc2l6ZSIs ICAgICAgICAgT0ZGU0VUKGZvbnRzaXplX2V4cHIpLCAgICAgIEFWX09QVF9UWVBFX1NUUklO Rywgey5zdHI9TlVMTH0sICAwLCAwLCBURkxBR1N9LAorICAgIHsidGV4dF9hbGlnbiIsICAg ICAic2V0IHRleHQgYWxpZ25tZW50IiwgICAgT0ZGU0VUKHRleHRfYWxpZ24pLCAgICAgICAg IEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9IlRMIn0sICAwLCAwLCBURkxBR1N9LAorICAg IHsieCIsICAgICAgICAgICAgICAic2V0IHggZXhwcmVzc2lvbiIsICAgICAgT0ZGU0VUKHhf ZXhwciksICAgICAgICAgICAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9IjAifSwgICAw LCAwLCBURkxBR1N9LAorICAgIHsieSIsICAgICAgICAgICAgICAic2V0IHkgZXhwcmVzc2lv biIsICAgICAgT0ZGU0VUKHlfZXhwciksICAgICAgICAgICAgIEFWX09QVF9UWVBFX1NUUklO Rywgey5zdHI9IjAifSwgICAwLCAwLCBURkxBR1N9LAorICAgIHsiYm94dyIsICAgICAgICAg ICAic2V0IGJveCB3aWR0aCIsICAgICAgICAgT0ZGU0VUKGJveHcpLCAgICAgICAgICAgICAg IEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICAwLCBJTlRfTUFYLCBURkxBR1N9 LAorICAgIHsiYm94aCIsICAgICAgICAgICAic2V0IGJveCBoZWlnaHQiLCAgICAgICAgT0ZG U0VUKGJveGgpLCAgICAgICAgICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9MH0s ICAgICAwLCBJTlRfTUFYLCBURkxBR1N9LAorICAgIHsic2hhZG93eCIsICAgICAgICAic2V0 IHNoYWRvdyB4IG9mZnNldCIsICAgT0ZGU0VUKHNoYWRvd3gpLCAgICAgICAgICAgIEFWX09Q VF9UWVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICBJTlRfTUlOLCBJTlRfTUFYLCBURkxBR1N9 LAorICAgIHsic2hhZG93eSIsICAgICAgICAic2V0IHNoYWRvdyB5IG9mZnNldCIsICAgT0ZG U0VUKHNoYWRvd3kpLCAgICAgICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9MH0s ICAgICBJTlRfTUlOLCBJTlRfTUFYLCBURkxBR1N9LAorICAgIHsiYm9yZGVydyIsICAgICAg ICAic2V0IGJvcmRlciB3aWR0aCIsICAgICAgT0ZGU0VUKGJvcmRlcncpLCAgICAgICAgICAg IEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9MH0sICAgICBJTlRfTUlOLCBJTlRfTUFYLCBU RkxBR1N9LAorICAgIHsidGFic2l6ZSIsICAgICAgICAic2V0IHRhYiBzaXplIiwgICAgICAg ICAgT0ZGU0VUKHRhYnNpemUpLCAgICAgICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAgey5p NjQ9NH0sICAgICAwLCBJTlRfTUFYLCBURkxBR1N9LAogICAgIHsiYmFzZXRpbWUiLCAgICAg ICAic2V0IGJhc2UgdGltZSIsICAgICAgICAgT0ZGU0VUKGJhc2V0aW1lKSwgICAgICAgICAg IEFWX09QVF9UWVBFX0lOVDY0LCAgey5pNjQ9QVZfTk9QVFNfVkFMVUV9LCBJTlQ2NF9NSU4s IElOVDY0X01BWCwgRkxBR1N9LAogI2lmIENPTkZJR19MSUJGT05UQ09ORklHCiAgICAgeyAi Zm9udCIsICAgICAgICAiRm9udCBuYW1lIiwgICAgICAgICAgICBPRkZTRVQoZm9udCksICAg ICAgICAgICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7IC5zdHIgPSAiU2FucyIgfSwgICAg ICAgICAgIC5mbGFncyA9IEZMQUdTIH0sCkBAIC0zNjAsNyArMzYxLDcgQEAgc3RhdGljIGNv bnN0IEFWT3B0aW9uIGRyYXd0ZXh0X29wdGlvbnNbXT0gewogICAgICAgICB7Im5vbmUiLCAg ICAgInNldCBubyBleHBhbnNpb24iLCAgICAgICAgICAgICAgICAgICAgT0ZGU0VUKGV4cF9t b2RlKSwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PUVYUF9OT05FfSwgICAgIDAsIDAsIEZM QUdTLCAiZXhwYW5zaW9uIn0sCiAgICAgICAgIHsibm9ybWFsIiwgICAic2V0IG5vcm1hbCBl eHBhbnNpb24iLCAgICAgICAgICAgICAgICBPRkZTRVQoZXhwX21vZGUpLCBBVl9PUFRfVFlQ RV9DT05TVCwgey5pNjQ9RVhQX05PUk1BTH0sICAgMCwgMCwgRkxBR1MsICJleHBhbnNpb24i fSwKICAgICAgICAgeyJzdHJmdGltZSIsICJzZXQgc3RyZnRpbWUgZXhwYW5zaW9uIChkZXBy ZWNhdGVkKSIsIE9GRlNFVChleHBfbW9kZSksIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1F WFBfU1RSRlRJTUV9LCAwLCAwLCBGTEFHUywgImV4cGFuc2lvbiJ9LAotICAgIHsieV9hbGln biIsICAgInNldCB0aGUgeSBhbGlnbm1lbnQiLCAgICBPRkZTRVQoeV9hbGlnbiksIEFWX09Q VF9UWVBFX0lOVCwgIHsuaTY0PVlBX1RFWFR9LCAwLCAyLCBGTEFHUywgInlfYWxpZ24ifSwK KyAgICB7InlfYWxpZ24iLCAgICJzZXQgdGhlIHkgYWxpZ25tZW50IiwgICAgT0ZGU0VUKHlf YWxpZ24pLCBBVl9PUFRfVFlQRV9JTlQsICB7Lmk2ND1ZQV9URVhUfSwgMCwgMiwgVEZMQUdT LCAieV9hbGlnbiJ9LAogICAgICAgICB7InRleHQiLCAgICAgInkgaXMgcmVmZXJyZWQgdG8g dGhlIHRvcCBvZiB0aGUgZmlyc3QgdGV4dCBsaW5lIiwgT0ZGU0VUKHlfYWxpZ24pLCBBVl9P UFRfVFlQRV9DT05TVCwgey5pNjQ9WUFfVEVYVH0sICAgICAwLCAwLCBGTEFHUywgInlfYWxp Z24ifSwKICAgICAgICAgeyJiYXNlbGluZSIsICJ5IGlzIHJlZmVycmVkIHRvIHRoZSBiYXNl bGluZSBvZiB0aGUgZmlyc3QgbGluZSIsIE9GRlNFVCh5X2FsaWduKSwgQVZfT1BUX1RZUEVf Q09OU1QsIHsuaTY0PVlBX0JBU0VMSU5FfSwgMCwgMCwgRkxBR1MsICJ5X2FsaWduIn0sCiAg ICAgICAgIHsiZm9udCIsICAgICAieSBpcyByZWZlcnJlZCB0byB0aGUgZm9udCBkZWZpbmVk IGxpbmUgbWV0cmljcyIsICBPRkZTRVQoeV9hbGlnbiksIEFWX09QVF9UWVBFX0NPTlNULCB7 Lmk2ND1ZQV9GT05UfSwgICAgIDAsIDAsIEZMQUdTLCAieV9hbGlnbiJ9LApAQCAtMzcxLDcg KzM3Miw3IEBAIHN0YXRpYyBjb25zdCBBVk9wdGlvbiBkcmF3dGV4dF9vcHRpb25zW109IHsK ICAgICB7InIiLCAgICAgICAgICAgICAgICJzZXQgcmF0ZSAodGltZWNvZGUgb25seSkiLCAg ICAgICAgIE9GRlNFVCh0Y19yYXRlKSwgICAgICAgQVZfT1BUX1RZUEVfUkFUSU9OQUwsIHsu ZGJsPTB9LCAgICAwLCBJTlRfTUFYLCBGTEFHU30sCiAgICAgeyJyYXRlIiwgICAgICAgICAg ICAic2V0IHJhdGUgKHRpbWVjb2RlIG9ubHkpIiwgICAgICAgICBPRkZTRVQodGNfcmF0ZSks ICAgICAgIEFWX09QVF9UWVBFX1JBVElPTkFMLCB7LmRibD0wfSwgICAgMCwgSU5UX01BWCwg RkxBR1N9LAogICAgIHsicmVsb2FkIiwgICAgICAgICAgInJlbG9hZCB0ZXh0IGZpbGUgYXQg c3BlY2lmaWVkIGZyYW1lIGludGVydmFsIiwgT0ZGU0VUKHJlbG9hZCksIEFWX09QVF9UWVBF X0lOVCwgey5pNjQ9MH0sICAgIDAsIElOVF9NQVgsIEZMQUdTfSwKLSAgICB7ImFscGhhIiwg ICAgICAgICAgICJhcHBseSBhbHBoYSB3aGlsZSByZW5kZXJpbmciLCAgICAgIE9GRlNFVChh X2V4cHIpLCAgICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCAgIHsuc3RyID0gIjEifSwgLmZs YWdzID0gRkxBR1N9LAorICAgIHsiYWxwaGEiLCAgICAgICAgICAgImFwcGx5IGFscGhhIHdo aWxlIHJlbmRlcmluZyIsICAgICAgT0ZGU0VUKGFfZXhwciksICAgICAgICBBVl9PUFRfVFlQ RV9TVFJJTkcsICAgey5zdHIgPSAiMSJ9LCAuZmxhZ3MgPSBURkxBR1N9LAogICAgIHsiZml4 X2JvdW5kcyIsICAgICAgImNoZWNrIGFuZCBmaXggdGV4dCBjb29yZHMgdG8gYXZvaWQgY2xp cHBpbmciLCBPRkZTRVQoZml4X2JvdW5kcyksIEFWX09QVF9UWVBFX0JPT0wsIHsuaTY0PTB9 LCAwLCAxLCBGTEFHU30sCiAgICAgeyJzdGFydF9udW1iZXIiLCAgICAic3RhcnQgZnJhbWUg bnVtYmVyIGZvciBuL2ZyYW1lX251bSB2YXJpYWJsZSIsIE9GRlNFVChzdGFydF9udW1iZXIp LCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0PTB9LCAwLCBJTlRfTUFYLCBGTEFHU30sCiAgICAg eyJ0ZXh0X3NvdXJjZSIsICAgICAidGhlIHNvdXJjZSBvZiB0ZXh0IiwgT0ZGU0VUKHRleHRf c291cmNlX3N0cmluZyksIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9TlVMTH0sIDAsIDEs IEZMQUdTIH0sCkBAIC05OTYsNiArOTk3LDIzIEBAIHN0YXRpYyBpbnQgcXVlcnlfZm9ybWF0 cyhBVkZpbHRlckNvbnRleHQgKmN0eCkKICAgICByZXR1cm4gZmZfc2V0X2NvbW1vbl9mb3Jt YXRzKGN0eCwgZmZfZHJhd19zdXBwb3J0ZWRfcGl4ZWxfZm9ybWF0cygwKSk7CiB9CiAKK3N0 YXRpYyBpbnQgZ2x5cGhfZW51X2JvcmRlcl9mcmVlKHZvaWQgKm9wYXF1ZSwgdm9pZCAqZWxl bSkKK3sKKyAgICBHbHlwaCAqZ2x5cGggPSBlbGVtOworCisgICAgaWYgKGdseXBoLT5ib3Jk ZXJfZ2x5cGggIT0gTlVMTCkgeworICAgICAgICBmb3IgKGludCB0ID0gMDsgdCA8IDE2OyAr K3QpIHsKKyAgICAgICAgICAgIGlmIChnbHlwaC0+Ym9yZGVyX2JnbHlwaFt0XSAhPSBOVUxM KSB7CisgICAgICAgICAgICAgICAgRlRfRG9uZV9HbHlwaCgoRlRfR2x5cGgpZ2x5cGgtPmJv cmRlcl9iZ2x5cGhbdF0pOworICAgICAgICAgICAgICAgIGdseXBoLT5ib3JkZXJfYmdseXBo W3RdID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBGVF9Eb25l X0dseXBoKGdseXBoLT5ib3JkZXJfZ2x5cGgpOworICAgICAgICBnbHlwaC0+Ym9yZGVyX2ds eXBoID0gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZ2x5 cGhfZW51X2ZyZWUodm9pZCAqb3BhcXVlLCB2b2lkICplbGVtKQogewogICAgIEdseXBoICpn bHlwaCA9IGVsZW07CkBAIC0xMTE4LDggKzExMzYsMjggQEAgc3RhdGljIGludCBjb21tYW5k KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKmFy ZywgY2hhcgogCiAgICAgICAgIGN0eC0+cHJpdiA9IG5ldzsKICAgICAgICAgcmV0dXJuIGNv bmZpZ19pbnB1dChjdHgtPmlucHV0c1swXSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVy biBBVkVSUk9SKEVOT1NZUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IG9sZF9ib3Jk ZXJ3ID0gb2xkLT5ib3JkZXJ3OworICAgICAgICBpZiAoKHJldCA9IGZmX2ZpbHRlcl9wcm9j ZXNzX2NvbW1hbmQoY3R4LCBjbWQsIGFyZywgcmVzLCByZXNfbGVuLCBmbGFncykpIDwgMCkg eworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgICAgICBpZiAob2xk LT5ib3JkZXJ3ICE9IG9sZF9ib3JkZXJ3KSB7CisgICAgICAgICAgICBGVF9TdHJva2VyX1Nl dChvbGQtPnN0cm9rZXIsIG9sZC0+Ym9yZGVydyA8PCA2LCBGVF9TVFJPS0VSX0xJTkVDQVBf Uk9VTkQsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9TVFJPS0VSX0xJTkVKT0lOX1JP VU5ELCAwKTsKKyAgICAgICAgICAgIC8vIERpc3Bvc2UgdGhlIG9sZCBib3JkZXIgZ2x5cGhz CisgICAgICAgICAgICBhdl90cmVlX2VudW1lcmF0ZShvbGQtPmdseXBocywgTlVMTCwgTlVM TCwgZ2x5cGhfZW51X2JvcmRlcl9mcmVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNtZCwgInRleHRfYWxpZ24iKSA9PSAwKSB7 CisgICAgICAgICAgICBpZiAodmFsaWRhdGVfdGV4dF9hbGlnbihvbGQtPnRleHRfYWxpZ24p ICE9IDApIHsKKyAgICAgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisg ICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGNvbW1hbmQgdmFsdWUgJyVzJyBmb3IgJ3Rl eHRfYWxpZ24nXG4iLCBvbGQtPnRleHRfYWxpZ24pOworICAgICAgICAgICAgfQorICAgICAg ICB9IGVsc2UgaWYgKHN0cmNtcChjbWQsICJmb250c2l6ZSIpID09IDApIHsKKyAgICAgICAg ICAgIGF2X2V4cHJfZnJlZShvbGQtPmZvbnRzaXplX3BleHByKTsKKyAgICAgICAgICAgIG9s ZC0+Zm9udHNpemVfcGV4cHIgPSBOVUxMOworICAgICAgICAgICAgb2xkLT5ibGFua19hZHZh bmNlNjQgPSAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjb25maWdfaW5wdXQoY3R4 LT5pbnB1dHNbMF0pOworICAgIH0KIAogZmFpbDoKICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsICJGYWlsZWQgdG8gcHJvY2VzcyBjb21tYW5kLiBDb250aW51aW5nIHdpdGggZXhp c3RpbmcgcGFyYW1ldGVycy5cbiIpOwotLSAKMi4zMC4yCgo= --------------m2rq341R7iyzE47iZEyWRv7E Content-Type: text/plain; charset=UTF-8; name="0009-add-an-option-for-enabling-libharfbuzz.patch" Content-Disposition: attachment; filename="0009-add-an-option-for-enabling-libharfbuzz.patch" Content-Transfer-Encoding: base64 RnJvbSBkNTBmMWY2ODg5ODY2MzFmOWEyYmYyMDRjNTUyNzZmMmVlOTNmOWUxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB5ZXRoaWUgPGtsaW1rbGltQHRpc2NhbGkuaXQ+CkRh dGU6IEZyaSwgMjYgTWF5IDIwMjMgMTM6MjA6NTEgKzAyMDAKU3ViamVjdDogW1BBVENIIDkv OV0gYWRkIGFuIG9wdGlvbiBmb3IgZW5hYmxpbmcgbGliaGFyZmJ1enoKCi0tLQogY29uZmln dXJlIHwgNSArKysrLQogMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbigtKQoKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBiYjdi ZTY3Njc2Li45YTEzM2U1OTUwIDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmln dXJlCkBAIC0yMzYsNiArMjM2LDcgQEAgRXh0ZXJuYWwgbGlicmFyeSBzdXBwb3J0OgogICAt LWVuYWJsZS1saWJmb250Y29uZmlnICAgZW5hYmxlIGxpYmZvbnRjb25maWcsIHVzZWZ1bCBm b3IgZHJhd3RleHQgZmlsdGVyIFtub10KICAgLS1lbmFibGUtbGliZnJlZXR5cGUgICAgIGVu YWJsZSBsaWJmcmVldHlwZSwgbmVlZGVkIGZvciBkcmF3dGV4dCBmaWx0ZXIgW25vXQogICAt LWVuYWJsZS1saWJmcmliaWRpICAgICAgZW5hYmxlIGxpYmZyaWJpZGksIGltcHJvdmVzIGRy YXd0ZXh0IGZpbHRlciBbbm9dCisgIC0tZW5hYmxlLWxpYmhhcmZidXp6ICAgICBlbmFibGUg bGliaGFyZmJ1enosIG5lZWRlZCBmb3IgZHJhd3RleHQgZmlsdGVyIFtub10KICAgLS1lbmFi bGUtbGliZ2xzbGFuZyAgICAgIGVuYWJsZSBHTFNMLT5TUElSViBjb21waWxhdGlvbiB2aWEg bGliZ2xzbGFuZyBbbm9dCiAgIC0tZW5hYmxlLWxpYmdtZSAgICAgICAgICBlbmFibGUgR2Ft ZSBNdXNpYyBFbXUgdmlhIGxpYmdtZSBbbm9dCiAgIC0tZW5hYmxlLWxpYmdzbSAgICAgICAg ICBlbmFibGUgR1NNIGRlL2VuY29kaW5nIHZpYSBsaWJnc20gW25vXQpAQCAtMTgyMCw2ICsx ODIxLDcgQEAgRVhURVJOQUxfTElCUkFSWV9MSVNUPSIKICAgICBsaWJmb250Y29uZmlnCiAg ICAgbGliZnJlZXR5cGUKICAgICBsaWJmcmliaWRpCisgICAgbGliaGFyZmJ1enoKICAgICBs aWJnbHNsYW5nCiAgICAgbGliZ21lCiAgICAgbGliZ3NtCkBAIC0zNjYwLDcgKzM2NjIsNyBA QCBkaWxhdGlvbl9vcGVuY2xfZmlsdGVyX2RlcHM9Im9wZW5jbCIKIGRubl9jbGFzc2lmeV9m aWx0ZXJfc2VsZWN0PSJkbm4iCiBkbm5fZGV0ZWN0X2ZpbHRlcl9zZWxlY3Q9ImRubiIKIGRu bl9wcm9jZXNzaW5nX2ZpbHRlcl9zZWxlY3Q9ImRubiIKLWRyYXd0ZXh0X2ZpbHRlcl9kZXBz PSJsaWJmcmVldHlwZSIKK2RyYXd0ZXh0X2ZpbHRlcl9kZXBzPSJsaWJmcmVldHlwZSBsaWJo YXJmYnV6eiIKIGRyYXd0ZXh0X2ZpbHRlcl9zdWdnZXN0PSJsaWJmb250Y29uZmlnIGxpYmZy aWJpZGkiCiBlbGJnX2ZpbHRlcl9kZXBzPSJhdmNvZGVjIgogZXFfZmlsdGVyX2RlcHM9Imdw bCIKQEAgLTY1OTQsNiArNjU5Niw3IEBAIGVuYWJsZWQgZm9udGNvbmZpZyAgICAgICAgJiYg ZW5hYmxlIGxpYmZvbnRjb25maWcKIGVuYWJsZWQgbGliZm9udGNvbmZpZyAgICAgJiYgcmVx dWlyZV9wa2dfY29uZmlnIGxpYmZvbnRjb25maWcgZm9udGNvbmZpZyAiZm9udGNvbmZpZy9m b250Y29uZmlnLmgiIEZjSW5pdAogZW5hYmxlZCBsaWJmcmVldHlwZSAgICAgICAmJiByZXF1 aXJlX3BrZ19jb25maWcgbGliZnJlZXR5cGUgZnJlZXR5cGUyICJmdDJidWlsZC5oIEZUX0ZS RUVUWVBFX0giIEZUX0luaXRfRnJlZVR5cGUKIGVuYWJsZWQgbGliZnJpYmlkaSAgICAgICAg JiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmZyaWJpZGkgZnJpYmlkaSBmcmliaWRpLmggZnJp YmlkaV92ZXJzaW9uX2luZm8KK2VuYWJsZWQgbGliaGFyZmJ1enogICAgICAgJiYgcmVxdWly ZV9wa2dfY29uZmlnIGxpYmhhcmZidXp6IGhhcmZidXp6IGhiLmggaGJfYnVmZmVyX2NyZWF0 ZQogZW5hYmxlZCBsaWJnbHNsYW5nICYmIHsgY2hlY2tfbGliIHNwaXJ2X2NvbXBpbGVyIGds c2xhbmcvSW5jbHVkZS9nbHNsYW5nX2NfaW50ZXJmYWNlLmggZ2xzbGFuZ19pbml0aWFsaXpl X3Byb2Nlc3MgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1sZ2xzbGFuZyAtbE1h Y2hpbmVJbmRlcGVuZGVudCAtbE9TRGVwZW5kZW50IC1sSExTTCAtbE9HTENvbXBpbGVyIC1s R2VuZXJpY0NvZGVHZW4gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1sU1BWUmVt YXBwZXIgLWxTUElSViAtbFNQSVJWLVRvb2xzLW9wdCAtbFNQSVJWLVRvb2xzIC1scHRocmVh ZCAtbHN0ZGMrKyAtbG0gfHwKLS0gCjIuMzAuMgoK --------------m2rq341R7iyzE47iZEyWRv7E Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --------------m2rq341R7iyzE47iZEyWRv7E--