From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7751 invoked by alias); 4 Nov 2011 14:25:23 -0000 Received: (qmail 7705 invoked by uid 22791); 4 Nov 2011 14:25:15 -0000 X-SWARE-Spam-Status: No, hits=0.1 required=5.0 tests=AWL,BAYES_50,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,TW_BP,TW_EG,TW_GJ,TW_WB,TW_YB X-Spam-Check-By: sourceware.org Received: from mail-vw0-f41.google.com (HELO mail-vw0-f41.google.com) (209.85.212.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 04 Nov 2011 14:24:49 +0000 Received: by vws16 with SMTP id 16so2588375vws.0 for ; Fri, 04 Nov 2011 07:24:48 -0700 (PDT) Received: by 10.52.30.42 with SMTP id p10mr15040858vdh.127.1320416688156; Fri, 04 Nov 2011 07:24:48 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.195.129 with HTTP; Fri, 4 Nov 2011 07:24:27 -0700 (PDT) In-Reply-To: References: From: Kevin Pouget Date: Fri, 04 Nov 2011 14:25:00 -0000 Message-ID: Subject: Re: [RFC] Python Finish Breakpoints To: Tom Tromey Cc: gdb-patches@sourceware.org, pmuldoon@redhat.com Content-Type: multipart/mixed; boundary=20cf3079c0b4a7301c04b0e97786 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-11/txt/msg00113.txt.bz2 --20cf3079c0b4a7301c04b0e97786 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 15958 On Wed, Nov 2, 2011 at 3:43 PM, Kevin Pouget wrote: > On Fri, Oct 28, 2011 at 10:37 PM, Tom Tromey wrote: > > Hello, > thanks for you're answer, I reply inline > >> You need a ChangeLog. > > sorry, I forgot to include it in the e-mail, you'll find it at the bottom > >> Kevin> -static PyTypeObject breakpoint_object_type; >> Kevin> +PyTypeObject breakpoint_object_type; >> >> The old line here was a forward declaration. >> I think you should just entirely remove it. >> >> Kevin> + =A0/* If it's a temporary breakpoint. =A0*/ >> Kevin> + =A0if (bpfinishpy_is_finish_bp (py_bp)) >> Kevin> + =A0 =A0{ >> Kevin> + =A0 =A0 =A0/* Can't delete it here. =A0*/ >> Kevin> + =A0 =A0 =A0gdb_assert (b->disposition =3D=3D disp_del); >> Kevin> + =A0 =A0 =A0disable_breakpoint (b); >> Kevin> + =A0 =A0} >> >> I don't understand this code. >> It seems to me that disp_del is a better setting here. > > I need to do it this way because as far as I've seen, > "breakpoint_auto_delete" is only triggered in infrun.c::normal_stop, > so if Breakpoint.stop returns False, the breakpoint is not deleted > immediately, and may be hit twice. > So I disable the breakpoint to avoid it. > >> Kevin> + =A0 =A0 =A0newbp->is_finish_bp =3D bpfinishpy_is_finish_bp ((Py= Object *) newbp); >> >> I think this flag could be set more cleanly in bpfinishpy_init. > > you're right, fixed > >> Kevin> + =A0/* gdb.Type object of the function finished by this breakpoi= nt. =A0*/ >> Kevin> + =A0PyObject *function_type; >> Kevin> + =A0/* gdb.Type object of the value return by the breakpointed f= unction. =A0*/ >> Kevin> + =A0PyObject *return_type; >> Kevin> + =A0/* When stopped at this FinishBreakpoint, value returned by = the function; >> Kevin> + =A0 =A0 Py_None if the value is not computable; NULL if GDB is = not stopped at >> Kevin> + =A0 =A0 a FinishBreakpoint. =A0*/ >> Kevin> + =A0PyObject *return_value; >> >> I think the new class needs a destructor which decrefs these. > > fixed > >> Kevin> +static void >> Kevin> +bpfinish_stopped_at_finish_bp (struct finish_breakpoint_object *= py_bp) >> Kevin> +{ >> Kevin> + =A0if (py_bp->return_type) >> Kevin> + =A0 =A0{ >> Kevin> + =A0 =A0 =A0struct value *ret =3D >> Kevin> + =A0 =A0 =A0 =A0 =A0get_return_value (type_object_to_type (py_bp= ->function_type), >> Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0type_obj= ect_to_type (py_bp->return_type)); >> >> Calls into gdb have to be wrapped in TRY_CATCH. >> Then errors have to be propagated to Python somehow, or printed and >> ignored via gdbpy_print_stack. =A0Given the context I would say propagat= e. > > you're right, > > bpfinish_stopped_at_finish_bp is called in 2 situations, so it just > sets the error flag, then > > - direct access to returnvalue member --> propage exception to Python > - bpfinishpy_handle_stop --> bpfinishpy_handle_stop() > >> Kevin> + =A0/* Check if we have a cached value. =A0*/ >> Kevin> + =A0if (!self_finishbp->return_value) >> Kevin> + =A0 =A0{ >> Kevin> + =A0 =A0 =A0bpstat bs; >> Kevin> + >> Kevin> + =A0 =A0 =A0BPPY_REQUIRE_VALID (&self_finishbp->py_bp); >> Kevin> + >> Kevin> + =A0 =A0 =A0for (bs =3D inferior_thread ()->control.stop_bpstat; >> Kevin> + =A0 =A0 =A0 =A0 =A0bs; bs =3D bs->next) >> Kevin> + =A0 =A0 =A0 =A0{ >> Kevin> + =A0 =A0 =A0 =A0 =A0struct breakpoint *bp =3D bs->breakpoint_at; >> Kevin> + >> Kevin> + =A0 =A0 =A0 =A0 =A0if (bp !=3D NULL && (PyObject *) bp->py_bp_o= bject =3D=3D self) >> Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0bpfinish_stopped_at_finish_bp (self_= finishbp); >> Kevin> + =A0 =A0 =A0 =A0} >> >> It seems like it should be an error to try to compute the return value >> when not stopped at this breakpoint. > > I'm not totally convinced ... > what would you think about throwing an AttributeError("return_value > not available yet") when accessing the attribute before the breakpoint > is hit, but keep the cached value afterwards? > > >> Kevin> +struct breakpoint * >> Kevin> +gdbpy_is_stopped_at_finish_bp (bpstat stop_bpstat) >> Kevin> +{ >> >> Since the name implies that this is a predicate and since the result is >> only ever used as a boolean, I think this should return int. > > changed > >> Kevin> + =A0bpstat bs; >> Kevin> + >> Kevin> + =A0for (bs =3D stop_bpstat; bs; bs =3D bs->next) >> Kevin> + =A0 =A0{ >> Kevin> + =A0 =A0 =A0if (bs->breakpoint_at >> Kevin> + =A0 =A0 =A0 =A0 =A0&& bpfinishpy_bp_is_finish_bp ((breakpoint_o= bject *) >> Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 bs->breakpoint_at->py_bp_object)) >> >> I am not really sure about this. =A0It seems like it may be pedantically >> incorrect, though it is hard to see when it could possibly fail. =A0That >> is, is the GIL required or not? =A0It doesn't call a function and the >> breakpoint owns a ref to the breakpoint object, so it seems like it >> could not be deleted out from under us. >> >> I'm inclined to say it is ok. > > no, the GIL is not required. > This function is triggered from infrun.c:normal_stop, to determine if > we want to save > the stop_registers, like it's done for `finish' > >> Kevin> + =A0breakpoint_object *self_bp =3D (breakpoint_object *) self; >> Kevin> + =A0struct finish_breakpoint_object *self_bpfinish =3D >> Kevin> + =A0 =A0 =A0(struct finish_breakpoint_object *) self; >> >> I think this is the only use of self in this function. >> Just drop it and cast directly to the most specific subclass. > > I'm not sure what you meant, *self_bp* was redundant so I removed it > >> Kevin> + =A0prev_frame =3D get_prev_frame (frame); >> Kevin> + =A0if (prev_frame =3D=3D 0) >> Kevin> + =A0 =A0{ >> Kevin> + =A0 =A0 =A0PyErr_SetString (PyExc_ValueError, >> Kevin> + =A0 =A0 =A0 =A0 =A0 _("\"FinishBreakpoint\" not meaningful in t= he outermost frame.")); >> Kevin> + =A0 =A0 =A0return -1; >> Kevin> + =A0 =A0} >> Kevin> + =A0else if (get_frame_type (prev_frame) =3D=3D DUMMY_FRAME) >> Kevin> + =A0 =A0 =A0{ >> Kevin> + =A0 =A0 =A0 =A0PyErr_SetString (PyExc_ValueError, >> Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_("\"FinishBreakpoint\" cann= ot be set on a dummy frame.")); >> Kevin> + =A0 =A0 =A0 =A0return -1; >> Kevin> + =A0 =A0 =A0} >> >> I think the calls to get_prev_frame and get_frame_type need to be >> wrapped in a TRY_CATCH. >> >> Kevin> + =A0frame_id =3D get_frame_id (prev_frame); >> Kevin> + =A0if (frame_id_eq (frame_id, null_frame_id)) >> >> Likewise. >> I'd try to put all the gdb-facing logic into a single big TRY_CATCH. > > I wrapped them all and propagate the error with gdbpy_convert_exception > >> Kevin> + =A0if (internal) >> Kevin> + =A0 =A0{ >> Kevin> + =A0 =A0 =A0internal_bp =3D PyObject_IsTrue (internal); >> Kevin> + =A0 =A0 =A0if (internal_bp =3D=3D -1) >> Kevin> + =A0 =A0 =A0 =A0{ >> Kevin> + =A0 =A0 =A0 =A0 =A0PyErr_SetString (PyExc_ValueError, >> Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 _("The valu= e of `internal' must be a boolean.")); >> Kevin> + =A0 =A0 =A0 =A0 =A0return -1; >> >> Do you need to decref 'frame_obj' here? =A0I suspect so. >> There are other early returns that probably need this. >> A typical solution is a label where all the locals are xdecref'd then >> return -1. > >> PyArg_ParseTupleAndKeywords (args, kwargs, "O|O", keywords, &frame_obj, = &internal) > > No, according to the documentation, >> Note that any Python object references which are provided to the caller = are borrowed references; do not decrement their reference count! > > >> Kevin> + =A0/* Find the function we will return from. =A0*/ >> Kevin> + =A0self_bpfinish->return_type =3D NULL; >> Kevin> + =A0self_bpfinish->function_type =3D NULL; >> >> These can be left NULL in the object. =A0What happens if you try to fetch >> the return value in that case? > > I've updated the comments to make it clearer: > > =A0/* gdb.Type object of the value return by the breakpointed function. > =A0 =A0 May be NULL if no debug information was available or return type > =A0 =A0 was VOID. =A0*/ > =A0PyObject *return_type; > =A0/* gdb.Type object of the function finished by this breakpoint. =A0Wil= l be > =A0 =A0 NULL if return_type is NULL. =A0*/ > =A0PyObject *function_type; > > if return_type is NULL, "return_value" attribute will be None (the > return value is not computed/computable) > > I've updated the doc as well: >> The value will be @code{None} if the function return type is @code{VOID}= or if the return value was not computable. > >> Kevin> + =A0if (get_frame_pc_if_available (frame, &pc)) >> Kevin> + =A0 =A0{ >> Kevin> + =A0 =A0 =A0function =3D find_pc_function (pc); >> Kevin> + =A0 =A0 =A0if (function !=3D NULL) >> Kevin> + =A0 =A0 =A0 =A0{ >> Kevin> + =A0 =A0 =A0 =A0 =A0struct type *ret_type =3D TYPE_TARGET_TYPE (= SYMBOL_TYPE (function)); >> Kevin> + >> >> More TRY_CATCH. >> >> Kevin> + =A0 =A0 =A0 =A0 =A0/* Remember only non-VOID return types. =A0*/ >> Kevin> + =A0 =A0 =A0 =A0 =A0if (TYPE_CODE (ret_type) !=3D TYPE_CODE_VOID) >> Kevin> + =A0 =A0 =A0 =A0 =A0 =A0{ >> Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0self_bpfinish->return_type =3D type_= to_type_object (ret_type); >> >> Error check. >> >> Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0self_bpfinish->function_type =3D >> Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0type_to_type_object (SYMBOL_= TYPE (function)); >> >> Likewise. > > I'm not sure about the best way to handle these exceptions, so for all > the error thrown when trying to compute the return_type/function_type, > I just silently swallow it, and set the return_type to None. > > Propagating the exception is not suitable, because I don't want not to > prevent the F_BP creation just because of the return value; > and I don't want to write a warning within Python code ... > > >> Kevin> + =A0if (except.reason < 0) >> Kevin> + =A0 =A0{ >> Kevin> + =A0 =A0 =A0PyErr_Format (except.reason =3D=3D RETURN_QUIT >> Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0? PyExc_KeyboardInterrup= t : PyExc_RuntimeError, >> Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"%s", except.message); >> Kevin> + =A0 =A0 =A0return -1; >> >> Just use GDB_PY_SET_HANDLE_EXCEPTION. > > right, fixed > (the same should apply to gdb.Breakpoint creation, I copied the code from= there) > >> Kevin> +int >> Kevin> +bpfinishpy_is_finish_bp (PyObject *obj) >> Kevin> +{ >> Kevin> + =A0return obj !=3D NULL >> Kevin> + =A0 =A0 =A0 =A0 && PyObject_TypeCheck (obj, &finish_breakpoint_= object_type); >> Kevin> +} >> >> Kevin> +int >> Kevin> +bpfinishpy_bp_is_finish_bp (breakpoint_object *bp_obj) >> Kevin> +{ >> Kevin> + =A0return bp_obj !=3D NULL >> Kevin> + =A0 =A0 =A0 =A0 && bp_obj->is_finish_bp; >> Kevin> +} >> >> Are both of these needed? > > no, not anymore, > I even removed both of them, > >> newbp->is_finish_bp =3D bpfinishpy_is_finish_bp ((PyObject *) newbp); >> I think this flag could be set more cleanly in bpfinishpy_init. > > but I've rewritten this bit > >> Kevin> +static void >> Kevin> +bpfinishpy_handle_stop (struct bpstats *bs, int print_frame) >> Kevin> +{ >> Kevin> + =A0iterate_over_breakpoints (bpfinishpy_detect_out_scope_cb, >> Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0bs =3D= =3D NULL ? NULL : bs->breakpoint_at); >> Kevin> +} >> >> The way this is written, it will acquire and release the GIL for each >> breakpoint. >> >> I think it would be better to acquire + release just once. >> >> Kevin> +static void >> Kevin> +bpfinishpy_handle_exit (struct inferior *inf) >> Kevin> +{ >> Kevin> + =A0iterate_over_breakpoints (bpfinishpy_detect_out_scope_cb, NU= LL); >> Kevin> +} >> >> Likewise. > > fixed > > I'm not 100% confident with this "ensure_python_env" and the value of > the "arch" parameter; > I based my code on how py-inferior does, so: > > observer "normal stop" --> get_current_arch () > observer "exit" --> target_gdbarch > > and I kept >> garch =3D b->gdbarch ? b->gdbarch : get_current_arch (); > in the callback, to ensure that the arch is actually the one from the BP,= if any > > > let me know if this is not the right way to do > >> Kevin> +struct breakpoint *gdbpy_is_stopped_at_finish_bp (bpstat stop_bp= stat); >> Kevin> =A0#endif /* GDB_PYTHON_H */ >> >> Newline between these two lines. > > fixed > > and finally, from the previous mail > >> You could subclass breakpoint and add a new field there. =A0This would >> segregate the changes in the python subdirectory. =A0This may be best. > >> Alternatively you could make a bp_finish breakpoint. =A0I'm not sure >> whether this is sufficient or whether you would also need an additional >> flag. =A0If the latter you could make a bp_finish_python or something li= ke >> that -- I said earlier that this was probably invasive, but grepping for >> bp_finish makes me think it wouldn't be too bad. > > > I'm not sure about what you mean exactly, seems like half of it was > already done ... anyway, I think that the original problem is almost > gone: > > - FinishBreakpoint inherits from Breakpoint > - there is a field "is_finish_bp" in gdb.Breakpoint C structure, > - infrun.c can know without the GIL if a breakpoint object is a > FinishBreakpoint using "gdbpy_is_stopped_at_finish_bp" > > > Thanks for this thorough review, > > Kevin Hello, there was a little confusion in the previous patch, ensure_python_env/cleanup commented out, here is a cleaner version. Thanks, Kevin 2011-11-04 Kevin Pouget Introduce gdb.FinishBreakpoints in Python * Makefile.in (SUBDIR_PYTHON_OBS): Add py-finishbreakpoint.o. (SUBDIR_PYTHON_SRCS): Add python/py-finishbreakpoint.c. Add build rule for this file. * infcmd.c (get_return_value): New function. (print_return_value): Split to create get_return_value. * inferior.h (get_return_value): New prototype. * infrun.c: Include python/python.h. (stop_registers): Mention FinishBreakpoint in description. (normal_stop): Set stop_registers if stopped at FinishBreakpoint. * python/py-breakpoint.c (bppy_pending_object): Make non-static. (gdbpy_should_stop): Disable temporary breakpoints. (gdbpy_breakpoint_created): Set is_py_finish_bp is necessary. (struct breakpoint_object): Move to python-internal.h (BPPY_REQUIRE_VALID): Likewise. (BPPY_SET_REQUIRE_VALID): Likewise. (gdbpy_breakpoint_created): Initialize is_finish_bp. * python/python-internal.h (breakpoint_object_type): Add as extern. (bppy_pending_object): Likewise. (typedef struct breakpoint_object) Removed. (struct breakpoint_object): Moved from py-breakpoint.c. Add field is_finish_bp. (BPPY_REQUIRE_VALID): Likewise. (BPPY_SET_REQUIRE_VALID): Likewise. (frame_object_to_frame_info): New prototype. (gdbpy_initialize_finishbreakpoints): New prototype. (bpfinishpy_is_finish_bp): Likewise. * python/py-finishbreakpoint.c: New file. * python/py-frame.c(frame_object_to_frame_info): Make non-static and accept PyObject instead of frame_object. (frapy_is_valid): Don't cast to frame_object. (frapy_name): Likewise. (frapy_type): Likewise. (frapy_unwind_stop_reason): Likewise. (frapy_pc): Likewise. (frapy_block): Likewise. (frapy_function): Likewise. (frapy_older): Likewise. (frapy_newer): Likewise. (frapy_find_sal): Likewise. (frapy_read_var): Likewise. (frapy_select): Likewise. * python/python.c (gdbpy_is_stopped_at_finish_bp): New noop function. (_initialize_python): Add gdbpy_initialize_finishbreakpoints. * python/python.h: Include breakpoint.h (gdbpy_is_stopped_at_finish_bp): New prototype. doc/ * gdb.texinfo (Breakpoints In Python): New subsection: Finish Breakpoints. (Python API): Add menu entry for Finish Breakpoints testsuite/ * gdb.python/py-breakpoint.exp (mult_line): Define and use variable instead of line number. * gdb.python/py-finish-breakpoint.c: New file. * gdb.python/py-finish-breakpoint.exp: New file. * gdb.python/py-finish-breakpoint.py: New file. * gdb.python/py-finish-breakpoint2.cc: New file. * gdb.python/py-finish-breakpoint2.exp: New file. * gdb.python/py-finish-breakpoint2.py: New file. --20cf3079c0b4a7301c04b0e97786 Content-Type: text/x-patch; charset=US-ASCII; name="0001-Introduce-gdb.FinishBreakpoints.patch" Content-Disposition: attachment; filename="0001-Introduce-gdb.FinishBreakpoints.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gul9ywbv1 Content-length: 75083 RnJvbSBhZDg3MzQwZTllYWE1MmIxYjcyYzdhYjc4MzdmZTAyYWMyNDNlM2Jh IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLZXZpbiBQb3VnZXQg PGtldmluLnBvdWdldEBzdC5jb20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMTEg MTM6NTk6MjMgKzAyMDAKU3ViamVjdDogW1BBVENIXSBJbnRyb2R1Y2UgZ2Ri LkZpbmlzaEJyZWFrcG9pbnQKCi0tLQogZ2RiL01ha2VmaWxlLmluICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICsKIGdkYi9O RVdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgNCArCiBnZGIvZG9jL2dkYi50ZXhpbmZvICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgNTAgKysrCiBnZGIvaW5mY21kLmMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjEgKy0K IGdkYi9pbmZlcmlvci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgMyArCiBnZGIvaW5mcnVuLmMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKy0KIGdkYi9weXRob24v cHktYnJlYWtwb2ludC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1 MCArLS0KIGdkYi9weXRob24vcHktZmluaXNoYnJlYWtwb2ludC5jICAgICAg ICAgICAgICAgICAgIHwgIDQ0MyArKysrKysrKysrKysrKysrKysrKwogZ2Ri L3B5dGhvbi9weS1mcmFtZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDMyICstCiBnZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oICAg ICAgICAgICAgICAgICAgICAgICB8ICAgNDcgKystCiBnZGIvcHl0aG9uL3B5 dGhvbi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYg KwogZ2RiL3B5dGhvbi9weXRob24uaCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICAzICsKIGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1icmVha3BvaW50LmV4cCAgICAgICAgIHwgICAgNyArLQogZ2RiL3Rlc3Rz dWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LmMgICAgfCAg IDk3ICsrKysrCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNo LWJyZWFrcG9pbnQuZXhwICB8ICAyMzAgKysrKysrKysrKwogZ2RiL3Rlc3Rz dWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LnB5ICAgfCAg IDg4ICsrKysKIGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gt YnJlYWtwb2ludDIuY2MgIHwgICA1OSArKysKIGdkYi90ZXN0c3VpdGUvZ2Ri LnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIuZXhwIHwgICA2NSArKysK IGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2lu dDIucHkgIHwgICAzNCArKwogMTkgZmlsZXMgY2hhbmdlZCwgMTE4OCBpbnNl cnRpb25zKCspLCA2NiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnZGIvcHl0aG9uL3B5LWZpbmlzaGJyZWFrcG9pbnQuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gt YnJlYWtwb2ludC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LmV4cAogY3JlYXRl IG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5p c2gtYnJlYWtwb2ludC5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi90ZXN0 c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIuY2MKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHkt ZmluaXNoLWJyZWFrcG9pbnQyLmV4cAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIu cHkKCmRpZmYgLS1naXQgYS9nZGIvTWFrZWZpbGUuaW4gYi9nZGIvTWFrZWZp bGUuaW4KaW5kZXggN2E3ZmY5Zi4uMzFjZGExYiAxMDA2NDQKLS0tIGEvZ2Ri L01ha2VmaWxlLmluCisrKyBiL2dkYi9NYWtlZmlsZS5pbgpAQCAtMjg3LDYg KzI4Nyw3IEBAIFNVQkRJUl9QWVRIT05fT0JTID0gXAogCXB5LWV2dHJlZ2lz dHJ5Lm8gXAogCXB5LWV2dHMubyBcCiAJcHktZXhpdGVkZXZlbnQubyBcCisJ cHktZmluaXNoYnJlYWtwb2ludC5vIFwKIAlweS1mcmFtZS5vIFwKIAlweS1m dW5jdGlvbi5vIFwKIAlweS1pbmZlcmlvci5vIFwKQEAgLTMxOCw2ICszMTks NyBAQCBTVUJESVJfUFlUSE9OX1NSQ1MgPSBcCiAJcHl0aG9uL3B5LWV2dHJl Z2lzdHJ5LmMgXAogCXB5dGhvbi9weS1ldnRzLmMgXAogCXB5dGhvbi9weS1l eGl0ZWRldmVudC5jIFwKKwlweXRob24vcHktZmluaXNoYnJlYWtwb2ludC5j IFwKIAlweXRob24vcHktZnJhbWUuYyBcCiAJcHl0aG9uL3B5LWZ1bmN0aW9u LmMgXAogCXB5dGhvbi9weS1pbmZlcmlvci5jIFwKQEAgLTIxMDMsNiArMjEw NSwxMCBAQCBweS1leGl0ZWRldmVudC5vOiAkKHNyY2RpcikvcHl0aG9uL3B5 LWV4aXRlZGV2ZW50LmMKIAkkKENPTVBJTEUpICQoUFlUSE9OX0NGTEFHUykg JChzcmNkaXIpL3B5dGhvbi9weS1leGl0ZWRldmVudC5jCiAJJChQT1NUQ09N UElMRSkKIAorcHktZmluaXNoYnJlYWtwb2ludC5vOiAkKHNyY2RpcikvcHl0 aG9uL3B5LWZpbmlzaGJyZWFrcG9pbnQuYworCSQoQ09NUElMRSkgJChQWVRI T05fQ0ZMQUdTKSAkKHNyY2RpcikvcHl0aG9uL3B5LWZpbmlzaGJyZWFrcG9p bnQuYworCSQoUE9TVENPTVBJTEUpCisKIHB5LWZyYW1lLm86ICQoc3JjZGly KS9weXRob24vcHktZnJhbWUuYwogCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZM QUdTKSAkKHNyY2RpcikvcHl0aG9uL3B5LWZyYW1lLmMKIAkkKFBPU1RDT01Q SUxFKQpkaWZmIC0tZ2l0IGEvZ2RiL05FV1MgYi9nZGIvTkVXUwppbmRleCAx NzEzMDQ5Li5iMTcwYjBhIDEwMDY0NAotLS0gYS9nZGIvTkVXUworKysgYi9n ZGIvTkVXUwpAQCAtNTEsNiArNTEsMTAgQEAKICAgKiogVGhlICJnZGIuYnJl YWtwb2ludCIgZnVuY3Rpb24gaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZv ciBvZgogICAgICAiZ2RiLmJyZWFrcG9pbnRzIi4KIAorICAqKiBBIG5ldyBj bGFzcyAiZ2RiLkZpbmlzaEJyZWFrcG9pbnQiIGlzIHByb3ZpZGVkIHRvIGNh dGNoIHRoZSByZXR1cm4KKyAgICAgb2YgYSBmdW5jdGlvbi4gIFRoaXMgY2xh c3MgaXMgYmFzZWQgb24gdGhlICJmaW5pc2giIGNvbW1hbmQKKyAgICAgYXZh aWxhYmxlIGluIHRoZSBDTEkuIAorCiAgICoqIFR5cGUgb2JqZWN0cyBmb3Ig c3RydWN0IGFuZCB1bmlvbiB0eXBlcyBub3cgYWxsb3cgYWNjZXNzIHRvCiAg ICAgIHRoZSBmaWVsZHMgdXNpbmcgc3RhbmRhcmQgUHl0aG9uIGRpY3Rpb25h cnkgKG1hcHBpbmcpIG1ldGhvZHMuCiAgICAgIEZvciBleGFtcGxlLCAic29t ZV90eXBlWydteWZpZWxkJ10iIG5vdyB3b3JrcywgYXMgZG9lcwpkaWZmIC0t Z2l0IGEvZ2RiL2RvYy9nZGIudGV4aW5mbyBiL2dkYi9kb2MvZ2RiLnRleGlu Zm8KaW5kZXggOTM0NTBjNi4uM2RlMTFmYyAxMDA2NDQKLS0tIGEvZ2RiL2Rv Yy9nZGIudGV4aW5mbworKysgYi9nZGIvZG9jL2dkYi50ZXhpbmZvCkBAIC0y MTQwNSw2ICsyMTQwNSw4IEBAIHNpdHVhdGlvbiwgYSBQeXRob24gQGNvZGV7 S2V5Ym9hcmRJbnRlcnJ1cHR9IGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAqIFN5 bWJvbCBUYWJsZXMgSW4gUHl0aG9uOjogICAgIFB5dGhvbiByZXByZXNlbnRh dGlvbiBvZiBzeW1ib2wgdGFibGVzLgogKiBMYXp5IFN0cmluZ3MgSW4gUHl0 aG9uOjogICAgICBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgbGF6eSBzdHJp bmdzLgogKiBCcmVha3BvaW50cyBJbiBQeXRob246OiAgICAgICBNYW5pcHVs YXRpbmcgYnJlYWtwb2ludHMgdXNpbmcgUHl0aG9uLgorKiBGaW5pc2ggQnJl YWtwb2ludHMgaW4gUHl0aG9uOjogU2V0dGluZyBCcmVha3BvaW50cyBvbiBm dW5jdGlvbiByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdXNpbmcgUHl0aG9uLgogQGVuZCBtZW51CiAKIEBub2RlIEJhc2ljIFB5 dGhvbgpAQCAtMjQyMzksNiArMjQyNDEsNTQgQEAgY29tbWFuZHMsIHNlcGFy YXRlZCBieSBuZXdsaW5lcy4gIElmIHRoZXJlIGFyZSBubyBjb21tYW5kcywg dGhpcwogYXR0cmlidXRlIGlzIEBjb2Rle05vbmV9LiAgVGhpcyBhdHRyaWJ1 dGUgaXMgbm90IHdyaXRhYmxlLgogQGVuZCBkZWZ2YXIKIAorQG5vZGUgRmlu aXNoIEJyZWFrcG9pbnRzIGluIFB5dGhvbgorQHN1YnN1YnNlY3Rpb24gRmlu aXNoIEJyZWFrcG9pbnRzCisKK0BjaW5kZXggcHl0aG9uIGZpbmlzaCBicmVh a3BvaW50cworQHRpbmRleCBnZGIuRmluaXNoQnJlYWtwb2ludAorCitBIGZp bmlzaCBicmVha3BvaW50IGlzIGEgdGVtcG9yYXJ5IGJyZWFrcG9pbnQgc2V0 IGF0IHRoZSByZXR1cm4gYWRkcmVzcyBvZgorYSBmcmFtZSwgYmFzZWQgb24g dGhlIEBjb2Rle2ZpbmlzaH0gY29tbWFuZC4gIEBjb2Rle2dkYi5GaW5pc2hC cmVha3BvaW50fQorZXh0ZW5kcyBAY29kZXtnZGIuQnJlYWtwb2ludH0uICBU aGUgdW5kZXJseWluZyBicmVha3BvaW50IHdpbGwgYmUgZGlzYWJsZWQgCith bmQgZGVsZXRlZCB3aGVuIHRoZSBleGVjdXRpb24gd2lsbCBydW4gb3V0IG9m IHRoZSBicmVha3BvaW50IHNjb3BlIChpLmUuQDogCitAY29kZXtCcmVha3Bv aW50LnN0b3B9IG9yIEBjb2Rle0ZpbmlzaEJyZWFrcG9pbnQub3V0X29mX3Nj b3BlfSB0cmlnZ2VyZWQpLgorCitAZGVmdW4gRmluaXNoQnJlYWtwb2ludC5f X2luaXRfXyAoQHZhcntmcmFtZX0sIEBye1t9QHZhcntpbnRlcm5hbH1Acntd fSkKK0NyZWF0ZSBhIGZpbmlzaCBicmVha3BvaW50IGF0IHRoZSByZXR1cm4g YWRkcmVzcyBvZiB0aGUgQGNvZGV7Z2RiLkZyYW1lfQorb2JqZWN0IEB2YXJ7 ZnJhbWV9LiAgVGhlIG9wdGlvbmFsIEB2YXJ7aW50ZXJuYWx9IGFyZ3VtZW50 IGFsbG93cyB0aGUKK2JyZWFrcG9pbnQgdG8gYmVjb21lIGludmlzaWJsZSB0 byB0aGUgdXNlci4gIEB4cmVme0JyZWFrcG9pbnRzIEluIFB5dGhvbn0sCitm b3IgZnVydGhlciBkZXRhaWxzIGFib3V0IHRoaXMgYXJndW1lbnQuCitAZW5k IGRlZnVuCisKK0BkZWZ1biBGaW5pc2hCcmVha3BvaW50Lm91dF9vZl9zY29w ZSAoc2VsZikKK0luIHNvbWUgY2lyY3Vtc3RhbmNlcyAoZS5nLkA6IEBjb2Rl e2xvbmdqbXB9LCBDQHR7Kyt9IGV4Y2VwdGlvbnMsIEB2YWx1ZXtHREJOfSAK K0Bjb2Rle3JldHVybn0gY29tbWFuZCwgQGRvdHN7fSksIGEgZnVuY3Rpb24g bWF5IG5vdCBwcm9wZXJseSB0ZXJtaW5hdGUsIGFuZAordGh1cyBuZXZlciBo aXQgdGhlIGZpbmlzaCBicmVha3BvaW50LiAgV2hlbiBAdmFsdWV7R0RCTn0g bm90aWNlcyBzdWNoIGEKK3NpdHVhdGlvbiwgdGhlIEBjb2Rle291dF9vZl9z Y29wZX0gY2FsbGJhY2sgd2lsbCBiZSB0cmlnZ2VyZWQuCisKK1lvdSBtYXkg d2FudCB0byBzdWItY2xhc3MgQGNvZGV7Z2RiLkZpbmlzaEJyZWFrcG9pbnR9 IGFuZCBvdmVycmlkZSB0aGlzCittZXRob2Q6CisKK0BzbWFsbGV4YW1wbGUK K2NsYXNzIE15RmluaXNoQnJlYWtwb2ludCAoZ2RiLkZpbmlzaEJyZWFrcG9p bnQpCisgICAgZGVmIHN0b3AgKHNlbGYpOgorICAgICAgICBwcmludCAibm9y bWFsIGZpbmlzaCIKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICAKKyAgICBk ZWYgb3V0X29mX3Njb3BlICgpOgorICAgICAgICBwcmludCAiYWJub3JtYWwg ZmluaXNoIgorQGVuZCBzbWFsbGV4YW1wbGUgCitAZW5kIGRlZnVuCisKK0Bk ZWZ2YXIgRmluaXNoQnJlYWtwb2ludC5yZXR1cm5fdmFsdWUKK1doZW4gQHZh bHVle0dEQk59IGlzIHN0b3BwZWQgYXQgYSBmaW5pc2ggYnJlYWtwb2ludCBh bmQgdGhlIGZyYW1lIAordXNlZCB0byBidWlsZCB0aGUgQGNvZGV7Z2RiLkZp bmlzaEJyZWFrcG9pbnR9IG9iamVjdCBoYWQgZGVidWcgc3ltYm9scywgdGhp cworYXR0cmlidXRlIHdpbGwgY29udGFpbiBhIEBjb2Rle2dkYi5WYWx1ZX0g b2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJldHVybgordmFsdWUgb2Yg dGhlIGZ1bmN0aW9uLiAgVGhlIHZhbHVlIHdpbGwgYmUgQGNvZGV7Tm9uZX0g aWYgdGhlIGZ1bmN0aW9uIHJldHVybiAKK3R5cGUgaXMgQGNvZGV7Vk9JRH0g b3IgaWYgdGhlIHJldHVybiB2YWx1ZSB3YXMgbm90IGNvbXB1dGFibGUuICBU aGlzIGF0dHJpYnV0ZQoraXMgbm90IHdyaXRhYmxlLgorQGVuZCBkZWZ2YXIK KwogQG5vZGUgTGF6eSBTdHJpbmdzIEluIFB5dGhvbgogQHN1YnN1YnNlY3Rp b24gUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIGxhenkgc3RyaW5ncy4KIApk aWZmIC0tZ2l0IGEvZ2RiL2luZmNtZC5jIGIvZ2RiL2luZmNtZC5jCmluZGV4 IDdiOTM1ZmUuLmNlMjE4NTEgMTAwNjQ0Ci0tLSBhL2dkYi9pbmZjbWQuYwor KysgYi9nZGIvaW5mY21kLmMKQEAgLTE0MTMsMTQgKzE0MTMsMTIgQEAgYWR2 YW5jZV9jb21tYW5kIChjaGFyICphcmcsIGludCBmcm9tX3R0eSkKICAgdW50 aWxfYnJlYWtfY29tbWFuZCAoYXJnLCBmcm9tX3R0eSwgMSk7CiB9CiAMCi0v KiBQcmludCB0aGUgcmVzdWx0IG9mIGEgZnVuY3Rpb24gYXQgdGhlIGVuZCBv ZiBhICdmaW5pc2gnIGNvbW1hbmQuICAqLworLyogUmV0dXJuIHRoZSB2YWx1 ZSBvZiB0aGUgcmVzdWx0IGF0IHRoZSBlbmQgb2YgYSAnZmluaXNoJyBjb21t YW5kL0JQLiAgKi8KIAotc3RhdGljIHZvaWQKLXByaW50X3JldHVybl92YWx1 ZSAoc3RydWN0IHR5cGUgKmZ1bmNfdHlwZSwgc3RydWN0IHR5cGUgKnZhbHVl X3R5cGUpCitzdHJ1Y3QgdmFsdWUgKgorZ2V0X3JldHVybl92YWx1ZSAoc3Ry dWN0IHR5cGUgKmZ1bmNfdHlwZSwgc3RydWN0IHR5cGUgKnZhbHVlX3R5cGUp CiB7CiAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X3JlZ2NhY2hl X2FyY2ggKHN0b3BfcmVnaXN0ZXJzKTsKLSAgc3RydWN0IGNsZWFudXAgKm9s ZF9jaGFpbjsKLSAgc3RydWN0IHVpX3N0cmVhbSAqc3RiOwogICBzdHJ1Y3Qg dmFsdWUgKnZhbHVlOwogICBzdHJ1Y3QgdWlfb3V0ICp1aW91dCA9IGN1cnJl bnRfdWlvdXQ7CiAKQEAgLTE0NTEsNiArMTQ0OSwxOSBAQCBwcmludF9yZXR1 cm5fdmFsdWUgKHN0cnVjdCB0eXBlICpmdW5jX3R5cGUsIHN0cnVjdCB0eXBl ICp2YWx1ZV90eXBlKQogICAgICAgaW50ZXJuYWxfZXJyb3IgKF9fRklMRV9f LCBfX0xJTkVfXywgXygiYmFkIHN3aXRjaCIpKTsKICAgICB9CiAKKyAgcmV0 dXJuIHZhbHVlOworfQorCisvKiBQcmludCB0aGUgcmVzdWx0IG9mIGEgZnVu Y3Rpb24gYXQgdGhlIGVuZCBvZiBhICdmaW5pc2gnIGNvbW1hbmQuICAqLwor CitzdGF0aWMgdm9pZAorcHJpbnRfcmV0dXJuX3ZhbHVlIChzdHJ1Y3QgdHlw ZSAqZnVuY190eXBlLCBzdHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSkKK3sKKyAg c3RydWN0IHZhbHVlICp2YWx1ZSA9IGdldF9yZXR1cm5fdmFsdWUgKGZ1bmNf dHlwZSwgdmFsdWVfdHlwZSk7CisgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2hh aW47CisgIHN0cnVjdCB1aV9zdHJlYW0gKnN0YjsKKyAgc3RydWN0IHVpX291 dCAqdWlvdXQgPSBjdXJyZW50X3Vpb3V0OworCiAgIGlmICh2YWx1ZSkKICAg ICB7CiAgICAgICBzdHJ1Y3QgdmFsdWVfcHJpbnRfb3B0aW9ucyBvcHRzOwpk aWZmIC0tZ2l0IGEvZ2RiL2luZmVyaW9yLmggYi9nZGIvaW5mZXJpb3IuaApp bmRleCBjZmFlYTdmLi5mMTk4Njk2IDEwMDY0NAotLS0gYS9nZGIvaW5mZXJp b3IuaAorKysgYi9nZGIvaW5mZXJpb3IuaApAQCAtMjY5LDYgKzI2OSw5IEBA IGV4dGVybiB2b2lkIGRldGFjaF9jb21tYW5kIChjaGFyICosIGludCk7CiAK IGV4dGVybiB2b2lkIG5vdGljZV9uZXdfaW5mZXJpb3IgKHB0aWRfdCwgaW50 LCBpbnQpOwogCitleHRlcm4gc3RydWN0IHZhbHVlICpnZXRfcmV0dXJuX3Zh bHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHR5cGUgKnZhbHVlX3R5 cGUpOworCiAvKiBBZGRyZXNzIGF0IHdoaWNoIGluZmVyaW9yIHN0b3BwZWQu ICAqLwogCiBleHRlcm4gQ09SRV9BRERSIHN0b3BfcGM7CmRpZmYgLS1naXQg YS9nZGIvaW5mcnVuLmMgYi9nZGIvaW5mcnVuLmMKaW5kZXggN2VjMDc4OC4u NGQ2ZGIzMCAxMDA2NDQKLS0tIGEvZ2RiL2luZnJ1bi5jCisrKyBiL2dkYi9p bmZydW4uYwpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgImNvbnRpbnVh dGlvbnMuaCIKICNpbmNsdWRlICJpbnRlcnBzLmgiCiAjaW5jbHVkZSAic2tp cC5oIgorI2luY2x1ZGUgInB5dGhvbi9weXRob24uaCIKIAogLyogUHJvdG90 eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zICovCiAKQEAgLTM2Niw3ICszNjcs OCBAQCBzaG93X3N0b3Bfb25fc29saWJfZXZlbnRzIChzdHJ1Y3QgdWlfZmls ZSAqZmlsZSwgaW50IGZyb21fdHR5LAogaW50IHN0b3BfYWZ0ZXJfdHJhcDsK IAogLyogU2F2ZSByZWdpc3RlciBjb250ZW50cyBoZXJlIHdoZW4gZXhlY3V0 aW5nIGEgImZpbmlzaCIgY29tbWFuZCBvciBhcmUKLSAgIGFib3V0IHRvIHBv cCBhIHN0YWNrIGR1bW15IGZyYW1lLCBpZi1hbmQtb25seS1pZiBwcm9jZWVk X3RvX2ZpbmlzaCBpcyBzZXQuCisgICBhYm91dCB0byBwb3AgYSBzdGFjayBk dW1teSBmcmFtZSwgaWYtYW5kLW9ubHktaWYgcHJvY2VlZF90b19maW5pc2gg aXMgc2V0CisgICBvciBhIFB5dGhvbiBGaW5pc2hCcmVha3BvaW50IGhhcyBi ZWVuIGhpdC4KICAgIFRodXMgdGhpcyBjb250YWlucyB0aGUgcmV0dXJuIHZh bHVlIGZyb20gdGhlIGNhbGxlZCBmdW5jdGlvbiAoYXNzdW1pbmcKICAgIHZh bHVlcyBhcmUgcmV0dXJuZWQgaW4gYSByZWdpc3RlcikuICAqLwogCkBAIC02 MDMwLDggKzYwMzIsOSBAQCBub3JtYWxfc3RvcCAodm9pZCkKIAogICAvKiBT YXZlIHRoZSBmdW5jdGlvbiB2YWx1ZSByZXR1cm4gcmVnaXN0ZXJzLCBpZiB3 ZSBjYXJlLgogICAgICBXZSBtaWdodCBiZSBhYm91dCB0byByZXN0b3JlIHRo ZWlyIHByZXZpb3VzIGNvbnRlbnRzLiAgKi8KLSAgaWYgKGluZmVyaW9yX3Ro cmVhZCAoKS0+Y29udHJvbC5wcm9jZWVkX3RvX2ZpbmlzaAotICAgICAgJiYg ZXhlY3V0aW9uX2RpcmVjdGlvbiAhPSBFWEVDX1JFVkVSU0UpCisgIGlmIChn ZGJweV9pc19zdG9wcGVkX2F0X2ZpbmlzaF9icCAoaW5mZXJpb3JfdGhyZWFk ICgpLT5jb250cm9sLnN0b3BfYnBzdGF0KQorICAgICAgfHwgKGluZmVyaW9y X3RocmVhZCAoKS0+Y29udHJvbC5wcm9jZWVkX3RvX2ZpbmlzaAorICAgICAg ICAgICYmIGV4ZWN1dGlvbl9kaXJlY3Rpb24gIT0gRVhFQ19SRVZFUlNFKSkK ICAgICB7CiAgICAgICAvKiBUaGlzIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5 LiAgKi8KICAgICAgIGlmIChzdG9wX3JlZ2lzdGVycykKZGlmZiAtLWdpdCBh L2dkYi9weXRob24vcHktYnJlYWtwb2ludC5jIGIvZ2RiL3B5dGhvbi9weS1i cmVha3BvaW50LmMKaW5kZXggZjIzNWJiYy4uNjdkZThkZSAxMDA2NDQKLS0t IGEvZ2RiL3B5dGhvbi9weS1icmVha3BvaW50LmMKKysrIGIvZ2RiL3B5dGhv bi9weS1icmVha3BvaW50LmMKQEAgLTMxLDUyICszMSwxNiBAQAogI2luY2x1 ZGUgImFyY2gtdXRpbHMuaCIKICNpbmNsdWRlICJsYW5ndWFnZS5oIgogCi1z dGF0aWMgUHlUeXBlT2JqZWN0IGJyZWFrcG9pbnRfb2JqZWN0X3R5cGU7Ci0K IC8qIE51bWJlciBvZiBsaXZlIGJyZWFrcG9pbnRzLiAgKi8KIHN0YXRpYyBp bnQgYnBweV9saXZlOwogCiAvKiBWYXJpYWJsZXMgdXNlZCB0byBwYXNzIGlu Zm9ybWF0aW9uIGJldHdlZW4gdGhlIEJyZWFrcG9pbnQKICAgIGNvbnN0cnVj dG9yIGFuZCB0aGUgYnJlYWtwb2ludC1jcmVhdGVkIGhvb2sgZnVuY3Rpb24u ICAqLwotc3RhdGljIGJyZWFrcG9pbnRfb2JqZWN0ICpicHB5X3BlbmRpbmdf b2JqZWN0OworYnJlYWtwb2ludF9vYmplY3QgKmJwcHlfcGVuZGluZ19vYmpl Y3Q7CiAKIC8qIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSBQeXRo b24gY29uZGl0aW9uIGlzIGV2YWx1YXRlZC4gICovCiBzdGF0aWMgY2hhciAq IGNvbnN0IHN0b3BfZnVuYyA9ICJzdG9wIjsKIAotc3RydWN0IGJyZWFrcG9p bnRfb2JqZWN0Ci17Ci0gIFB5T2JqZWN0X0hFQUQKLQotICAvKiBUaGUgYnJl YWtwb2ludCBudW1iZXIgYWNjb3JkaW5nIHRvIGdkYi4gICovCi0gIGludCBu dW1iZXI7Ci0KLSAgLyogVGhlIGdkYiBicmVha3BvaW50IG9iamVjdCwgb3Ig TlVMTCBpZiB0aGUgYnJlYWtwb2ludCBoYXMgYmVlbgotICAgICBkZWxldGVk LiAgKi8KLSAgc3RydWN0IGJyZWFrcG9pbnQgKmJwOwotfTsKLQotLyogUmVx dWlyZSB0aGF0IEJSRUFLUE9JTlQgYmUgYSB2YWxpZCBicmVha3BvaW50IElE OyB0aHJvdyBhIFB5dGhvbgotICAgZXhjZXB0aW9uIGlmIGl0IGlzIGludmFs aWQuICAqLwotI2RlZmluZSBCUFBZX1JFUVVJUkVfVkFMSUQoQnJlYWtwb2lu dCkJCQkJCVwKLSAgICBkbyB7CQkJCQkJCQlcCi0gICAgICBpZiAoKEJyZWFr cG9pbnQpLT5icCA9PSBOVUxMKQkJCQkJXAotCXJldHVybiBQeUVycl9Gb3Jt YXQgKFB5RXhjX1J1bnRpbWVFcnJvciwgICAgICAgICAgICAgICAgICAgICAg ICBcCi0JCQkgICAgIF8oIkJyZWFrcG9pbnQgJWQgaXMgaW52YWxpZC4iKSwJ CVwKLQkJCSAgICAgKEJyZWFrcG9pbnQpLT5udW1iZXIpOwkJCVwKLSAgICB9 IHdoaWxlICgwKQotCi0vKiBSZXF1aXJlIHRoYXQgQlJFQUtQT0lOVCBiZSBh IHZhbGlkIGJyZWFrcG9pbnQgSUQ7IHRocm93IGEgUHl0aG9uCi0gICBleGNl cHRpb24gaWYgaXQgaXMgaW52YWxpZC4gIFRoaXMgbWFjcm8gaXMgZm9yIHVz ZSBpbiBzZXR0ZXIgZnVuY3Rpb25zLiAgKi8KLSNkZWZpbmUgQlBQWV9TRVRf UkVRVUlSRV9WQUxJRChCcmVha3BvaW50KQkJCQlcCi0gICAgZG8gewkJCQkJ CQkJXAotICAgICAgaWYgKChCcmVha3BvaW50KS0+YnAgPT0gTlVMTCkJCQkJ CVwKLSAgICAgICAgewkJCQkJCQkJXAotCSAgUHlFcnJfRm9ybWF0IChQeUV4 Y19SdW50aW1lRXJyb3IsIF8oIkJyZWFrcG9pbnQgJWQgaXMgaW52YWxpZC4i KSwgXAotCQkJKEJyZWFrcG9pbnQpLT5udW1iZXIpOwkJCQlcCi0JICByZXR1 cm4gLTE7CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi0gICAgfSB3aGlsZSAoMCkK LQogLyogVGhpcyBpcyB1c2VkIHRvIGluaXRpYWxpemUgdmFyaW91cyBnZGIu YnBfKiBjb25zdGFudHMuICAqLwogc3RydWN0IHB5YnBfY29kZQogewpAQCAt Nzc3LDYgKzc0MSwxNSBAQCBnZGJweV9zaG91bGRfc3RvcCAoc3RydWN0IGJy ZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopCiAgICAgICBlbHNlCiAJZ2RicHlf cHJpbnRfc3RhY2sgKCk7CiAgICAgfQorCisgIC8qIElmIGl0J3MgYSB0ZW1w b3JhcnkgYnJlYWtwb2ludC4gICovCisgIGlmIChicF9vYmotPmlzX2Zpbmlz aF9icCkKKyAgICB7CisgICAgICAvKiBDYW4ndCBkZWxldGUgaXQgaGVyZS4g ICovCisgICAgICBnZGJfYXNzZXJ0IChiLT5kaXNwb3NpdGlvbiA9PSBkaXNw X2RlbCk7CisgICAgICBkaXNhYmxlX2JyZWFrcG9pbnQgKGIpOworICAgIH0K KwogICBkb19jbGVhbnVwcyAoY2xlYW51cCk7CiAKICAgcmV0dXJuIHN0b3A7 CkBAIC04MzksNiArODEyLDcgQEAgZ2RicHlfYnJlYWtwb2ludF9jcmVhdGVk IChzdHJ1Y3QgYnJlYWtwb2ludCAqYnApCiAgICAgICBuZXdicC0+bnVtYmVy ID0gYnAtPm51bWJlcjsKICAgICAgIG5ld2JwLT5icCA9IGJwOwogICAgICAg bmV3YnAtPmJwLT5weV9icF9vYmplY3QgPSBuZXdicDsKKyAgICAgIG5ld2Jw LT5pc19maW5pc2hfYnAgPSAwOwogICAgICAgUHlfSU5DUkVGIChuZXdicCk7 CiAgICAgICArK2JwcHlfbGl2ZTsKICAgICB9CkBAIC0xMDAwLDcgKzk3NCw3 IEBAIHN0YXRpYyBQeU1ldGhvZERlZiBicmVha3BvaW50X29iamVjdF9tZXRo b2RzW10gPQogICB7IE5VTEwgfSAvKiBTZW50aW5lbC4gICovCiB9OwogCi1z dGF0aWMgUHlUeXBlT2JqZWN0IGJyZWFrcG9pbnRfb2JqZWN0X3R5cGUgPQor UHlUeXBlT2JqZWN0IGJyZWFrcG9pbnRfb2JqZWN0X3R5cGUgPQogewogICBQ eU9iamVjdF9IRUFEX0lOSVQgKE5VTEwpCiAgIDAsCQkJCSAgLypvYl9zaXpl Ki8KZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHktZmluaXNoYnJlYWtwb2lu dC5jIGIvZ2RiL3B5dGhvbi9weS1maW5pc2hicmVha3BvaW50LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZkYzdlZgotLS0gL2Rl di9udWxsCisrKyBiL2dkYi9weXRob24vcHktZmluaXNoYnJlYWtwb2ludC5j CkBAIC0wLDAgKzEsNDQzIEBACisvKiBQeXRob24gaW50ZXJmYWNlIHRvIGZp bmlzaCBicmVha3BvaW50cworCisgICBDb3B5cmlnaHQgKEMpIDIwMTEgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl bnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8K KworCisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAiZXhjZXB0aW9u cy5oIgorI2luY2x1ZGUgInB5dGhvbi1pbnRlcm5hbC5oIgorI2luY2x1ZGUg ImJyZWFrcG9pbnQuaCIKKyNpbmNsdWRlICJmcmFtZS5oIgorI2luY2x1ZGUg ImdkYnRocmVhZC5oIgorI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKyNpbmNs dWRlICJsYW5ndWFnZS5oIgorI2luY2x1ZGUgIm9ic2VydmVyLmgiCisjaW5j bHVkZSAiaW5mZXJpb3IuaCIKKworc3RhdGljIFB5VHlwZU9iamVjdCBmaW5p c2hfYnJlYWtwb2ludF9vYmplY3RfdHlwZTsKKworLyogRnVuY3Rpb24gdGhh dCBpcyBjYWxsZWQgd2hlbiBhIFB5dGhvbiBmaW5pc2ggYnAgaXMgZm91bmQg b3V0IG9mIHNjb3BlLiAgKi8KK3N0YXRpYyBjaGFyICogY29uc3Qgb3V0b2Zz Y29wZV9mdW5jID0gIm91dF9vZl9zY29wZSI7CisKKy8qIHN0cnVjdCBpbXBs ZW1lbnRpbmcgdGhlIGdkYi5GaW5pc2hCcmVha3BvaW50IG9iamVjdCBieSBl eHRlbmRpbmcKKyAgIHRoZSBnZGIuQnJlYWtwb2ludCBjbGFzcy4gICovCitz dHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0Cit7CisgIC8qIGdkYi5C cmVha3BvaW50IGJhc2UgY2xhc3MuICAqLworICBicmVha3BvaW50X29iamVj dCBweV9icDsKKyAgLyogZ2RiLlR5cGUgb2JqZWN0IG9mIHRoZSB2YWx1ZSBy ZXR1cm4gYnkgdGhlIGJyZWFrcG9pbnRlZCBmdW5jdGlvbi4KKyAgICAgTWF5 IGJlIE5VTEwgaWYgbm8gZGVidWcgaW5mb3JtYXRpb24gd2FzIGF2YWlsYWJs ZSBvciByZXR1cm4gdHlwZQorICAgICB3YXMgVk9JRC4gICovCisgIFB5T2Jq ZWN0ICpyZXR1cm5fdHlwZTsKKyAgLyogZ2RiLlR5cGUgb2JqZWN0IG9mIHRo ZSBmdW5jdGlvbiBmaW5pc2hlZCBieSB0aGlzIGJyZWFrcG9pbnQuICBXaWxs IGJlCisgICAgIE5VTEwgaWYgcmV0dXJuX3R5cGUgaXMgTlVMTC4gICovCisg IFB5T2JqZWN0ICpmdW5jdGlvbl90eXBlOworICAvKiBXaGVuIHN0b3BwZWQg YXQgdGhpcyBGaW5pc2hCcmVha3BvaW50LCBnZGIuVmFsdWUgb2JqZWN0IHJl dHVybmVkIGJ5CisgICAgIHRoZSBmdW5jdGlvbjsgUHlfTm9uZSBpZiB0aGUg dmFsdWUgaXMgbm90IGNvbXB1dGFibGU7IE5VTEwgaWYgR0RCIGlzCisgICAg IG5vdCBzdG9wcGVkIGF0IGEgRmluaXNoQnJlYWtwb2ludC4gICovCisgIFB5 T2JqZWN0ICpyZXR1cm5fdmFsdWU7Cit9OworCisvKiBUcmlnZ2VyZWQgd2hl biBHREIgc3RvcHMgYXQgUFlfQlAuICBDb21wdXRlcyBhbmQgY2FjaGVzIHRo ZSBgcmV0dXJuX3ZhbHVlJywKKyAgIGlmIGF2YWlsYWJsZS4gIE1heSBzZXQg UHl0aG9uIGV4Y2VwdGlvbiBmbGFnIGlmIHRoZSByZXR1cm4gdmFsdWUgY291 bGRuJ3QKKyAgIGJlIGNvbXB1dGVkLiAgKi8KKworc3RhdGljIHZvaWQKK2Jw ZmluaXNoX3N0b3BwZWRfYXRfZmluaXNoX2JwIChzdHJ1Y3QgZmluaXNoX2Jy ZWFrcG9pbnRfb2JqZWN0ICpweV9icCkKK3sKKyAgdm9sYXRpbGUgc3RydWN0 IGdkYl9leGNlcHRpb24gZXhjZXB0OworCisgIGlmICghcHlfYnAtPnJldHVy bl90eXBlKQorICAgIHJldHVybjsKKworICBUUllfQ0FUQ0ggKGV4Y2VwdCwg UkVUVVJOX01BU0tfQUxMKQorICAgIHsKKyAgICAgIHN0cnVjdCB2YWx1ZSAq cmV0ID0KKyAgICAgICAgICBnZXRfcmV0dXJuX3ZhbHVlICh0eXBlX29iamVj dF90b190eXBlIChweV9icC0+ZnVuY3Rpb25fdHlwZSksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdHlwZV9vYmplY3RfdG9fdHlwZSAocHlfYnAt PnJldHVybl90eXBlKSk7CisKKyAgICAgIGlmIChyZXQpCisgICAgICAgIHB5 X2JwLT5yZXR1cm5fdmFsdWUgPSB2YWx1ZV90b192YWx1ZV9vYmplY3QgKHJl dCk7CisgICAgICBlbHNlCisgICAgICAgIHB5X2JwLT5yZXR1cm5fdmFsdWUg PSBQeV9Ob25lOworICAgIH0KKyAgaWYgKGV4Y2VwdC5yZWFzb24gPCAwKQor ICAgIGdkYnB5X2NvbnZlcnRfZXhjZXB0aW9uKGV4Y2VwdCk7Cit9CisKKy8q IFB5dGhvbiBmdW5jdGlvbiB0byBnZXQgdGhlICdyZXR1cm5fdmFsdWUnIGF0 dHJpYnV0ZSBvZgorICAgRmluaXNoQnJlYWtwb2ludC4gICovCisKK3N0YXRp YyBQeU9iamVjdCAqCiticGZpbmlzaHB5X2dldF9yZXR1cm52YWx1ZSAoUHlP YmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCit7CisgIHN0cnVjdCBmaW5p c2hfYnJlYWtwb2ludF9vYmplY3QgKnNlbGZfZmluaXNoYnAgPQorICAgICAg KHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKKwor ICBpZiAoc2VsZl9maW5pc2hicC0+cmV0dXJuX3R5cGUgPT0gTlVMTCkKKyAg ICBQeV9SRVRVUk5fTk9ORTsKKworICAvKiBDaGVjayBpZiB3ZSBoYXZlIGEg Y2FjaGVkIHZhbHVlLiAgKi8KKyAgaWYgKCFzZWxmX2ZpbmlzaGJwLT5yZXR1 cm5fdmFsdWUpCisgICAgeworICAgICAgYnBzdGF0IGJzOworCisgICAgICBC UFBZX1JFUVVJUkVfVkFMSUQgKCZzZWxmX2ZpbmlzaGJwLT5weV9icCk7CisK KyAgICAgIGZvciAoYnMgPSBpbmZlcmlvcl90aHJlYWQgKCktPmNvbnRyb2wu c3RvcF9icHN0YXQ7CisgICAgICAgICAgYnM7IGJzID0gYnMtPm5leHQpCisg ICAgICAgIHsKKyAgICAgICAgICBzdHJ1Y3QgYnJlYWtwb2ludCAqYnAgPSBi cy0+YnJlYWtwb2ludF9hdDsKKworICAgICAgICAgIGlmIChicCAhPSBOVUxM ICYmIChQeU9iamVjdCAqKSBicC0+cHlfYnBfb2JqZWN0ID09IHNlbGYpCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJwZmluaXNoX3N0b3BwZWRf YXRfZmluaXNoX2JwIChzZWxmX2ZpbmlzaGJwKTsKKyAgICAgICAgICAgICAg aWYgKFB5RXJyX09jY3VycmVkICgpKQorICAgICAgICAgICAgICAgIHJldHVy biBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg IGlmICghc2VsZl9maW5pc2hicC0+cmV0dXJuX3ZhbHVlKQorICAgIFB5X1JF VFVSTl9OT05FOworCisgIFB5X0lOQ1JFRiAoc2VsZl9maW5pc2hicC0+cmV0 dXJuX3ZhbHVlKTsKKyAgcmV0dXJuIHNlbGZfZmluaXNoYnAtPnJldHVybl92 YWx1ZTsKK30KKworLyogRGVhbGxvY2F0ZSBGaW5pc2hCcmVha3BvaW50IG9i amVjdC4gICovCisKK3N0YXRpYyB2b2lkCiticGZpbmlzaHB5X2RlYWxsb2Mg KFB5T2JqZWN0ICpzZWxmKQoreworICBzdHJ1Y3QgZmluaXNoX2JyZWFrcG9p bnRfb2JqZWN0ICpzZWxmX2JwZmluaXNoID0KKyAgICAgICAgKHN0cnVjdCBm aW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKKworICBQeV9YREVD UkVGIChzZWxmX2JwZmluaXNoLT5mdW5jdGlvbl90eXBlKTsKKyAgUHlfWERF Q1JFRiAoc2VsZl9icGZpbmlzaC0+cmV0dXJuX3R5cGUpOworICBQeV9YREVD UkVGIChzZWxmX2JwZmluaXNoLT5yZXR1cm5fdmFsdWUpOworfQorCisvKiBJ ZiBTVE9QX0JQU1RBVCBjb250YWlucyBhIFB5dGhvbiBicmVha3BvaW50IHdo b3NlIHR5cGUgaXMgVFlQRSwgcmV0dXJucworICAgdGhpcyBicmVha3BvaW50 LiBSZXR1cm5zIE5VTEwgb3RoZXJ3aXNlLiAgKi8KKworaW50CitnZGJweV9p c19zdG9wcGVkX2F0X2ZpbmlzaF9icCAoYnBzdGF0IHN0b3BfYnBzdGF0KQor eworICBicHN0YXQgYnM7CisKKyAgZm9yIChicyA9IHN0b3BfYnBzdGF0OyBi czsgYnMgPSBicy0+bmV4dCkKKyAgICB7CisgICAgICBpZiAoYnMtPmJyZWFr cG9pbnRfYXQKKyAgICAgICAgICAmJiBicy0+YnJlYWtwb2ludF9hdC0+cHlf YnBfb2JqZWN0CisgICAgICAgICAgJiYgKChicmVha3BvaW50X29iamVjdCAq KQorICAgICAgICAgICAgICBicy0+YnJlYWtwb2ludF9hdC0+cHlfYnBfb2Jq ZWN0KS0+aXNfZmluaXNoX2JwKQorICAgICAgICByZXR1cm4gMTsKKyAgICB9 CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFB5dGhvbiBmdW5jdGlvbiB0byBj cmVhdGUgYSBuZXcgYnJlYWtwb2ludC4gICovCisKK3N0YXRpYyBpbnQKK2Jw ZmluaXNocHlfaW5pdCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdz LCBQeU9iamVjdCAqa3dhcmdzKQoreworICBzdGF0aWMgY2hhciAqa2V5d29y ZHNbXSA9IHsgImZyYW1lIiwgImludGVybmFsIiwgTlVMTCB9OworICBzdHJ1 Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICpzZWxmX2JwZmluaXNoID0K KyAgICAgIChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICopIHNl bGY7CisgIGludCB0eXBlID0gYnBfYnJlYWtwb2ludDsKKyAgUHlPYmplY3Qg KmZyYW1lX29iaiA9IE5VTEw7CisgIHN0cnVjdCBmcmFtZV9pbmZvICpmcmFt ZSwgKnByZXZfZnJhbWUgPSBOVUxMOworICBzdHJ1Y3QgZnJhbWVfaWQgZnJh bWVfaWQ7CisgIFB5T2JqZWN0ICppbnRlcm5hbCA9IE5VTEw7CisgIGludCBp bnRlcm5hbF9icCA9IDA7CisgIENPUkVfQUREUiBmaW5pc2hfcGMsIHBjOwor ICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisgIGNo YXIgKmFkZHJfc3RyLCBzbWFsbF9idWZbMTAwXTsKKyAgc3RydWN0IHN5bWJv bCAqZnVuY3Rpb247CisKKyAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5 d29yZHMgKGFyZ3MsIGt3YXJncywgIk98TyIsIGtleXdvcmRzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZyYW1lX29iaiwgJmlu dGVybmFsKSkKKyAgICByZXR1cm4gLTE7CisKKyAgaWYgKCFmcmFtZV9vYmop CisgICAgZ290byBpbnZhbGlkX2ZyYW1lOworICAKKyAgZnJhbWUgPSBmcmFt ZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAoZnJhbWVfb2JqKTsKKyAgaWYgKGZy YW1lID09IE5VTEwpCisgICAgZ290byBpbnZhbGlkX2ZyYW1lOworICAKKyAg VFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAgICB7Cisg ICAgICBwcmV2X2ZyYW1lID0gZ2V0X3ByZXZfZnJhbWUgKGZyYW1lKTsKKyAg ICAgIGlmIChwcmV2X2ZyYW1lID09IDApCisgICAgICAgIHsKKyAgICAgICAg ICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAg ICAgICBfKCJcIkZpbmlzaEJyZWFrcG9pbnRcIiBub3QgbWVhbmluZ2Z1bCBp biB0aGUgb3V0ZXJtb3N0IGZyYW1lLiIpKTsKKyAgICAgICAgfQorICAgICAg ZWxzZSBpZiAoZ2V0X2ZyYW1lX3R5cGUgKHByZXZfZnJhbWUpID09IERVTU1Z X0ZSQU1FKQorICAgICAgICB7CisgICAgICAgICAgUHlFcnJfU2V0U3RyaW5n IChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgIF8oIlwi RmluaXNoQnJlYWtwb2ludFwiIGNhbm5vdCBiZSBzZXQgb24gYSBkdW1teSBm cmFtZS4iKSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgewor ICAgICAgICAgIGZyYW1lX2lkID0gZ2V0X2ZyYW1lX2lkIChwcmV2X2ZyYW1l KTsKKyAgICAgICAgICBpZiAoZnJhbWVfaWRfZXEgKGZyYW1lX2lkLCBudWxs X2ZyYW1lX2lkKSkKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlF eGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfKCJJbnZhbGlkIElEIGZvciB0aGUgYGZyYW1lJyBvYmplY3Qu IikpOworICAgICAgICB9CisgICAgfQorICBpZiAoZXhjZXB0LnJlYXNvbiA8 IDApCisgICAgeworICAgICAgZ2RicHlfY29udmVydF9leGNlcHRpb24oZXhj ZXB0KTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIGVsc2UgaWYgKFB5 RXJyX09jY3VycmVkICgpKQorICAgIHJldHVybiAtMTsKKworICBpZiAoaW50 ZXJuYWwpCisgICAgeworICAgICAgaW50ZXJuYWxfYnAgPSBQeU9iamVjdF9J c1RydWUgKGludGVybmFsKTsKKyAgICAgIGlmIChpbnRlcm5hbF9icCA9PSAt MSkgCisgICAgICAgIHsKKyAgICAgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5 RXhjX1ZhbHVlRXJyb3IsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfKCJUaGUgdmFsdWUgb2YgYGludGVybmFsJyBtdXN0IGJlIGEgYm9vbGVh bi4iKSk7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAg fQorCisgIC8qIEZpbmQgdGhlIGZ1bmN0aW9uIHdlIHdpbGwgcmV0dXJuIGZy b20uICAqLworICBzZWxmX2JwZmluaXNoLT5yZXR1cm5fdHlwZSA9IE5VTEw7 CisgIHNlbGZfYnBmaW5pc2gtPmZ1bmN0aW9uX3R5cGUgPSBOVUxMOworCisg IFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisgICAgewor ICAgICAgaWYgKGdldF9mcmFtZV9wY19pZl9hdmFpbGFibGUgKGZyYW1lLCAm cGMpKQorICAgICAgICB7CisgICAgICAgICAgZnVuY3Rpb24gPSBmaW5kX3Bj X2Z1bmN0aW9uIChwYyk7CisgICAgICAgICAgaWYgKGZ1bmN0aW9uICE9IE5V TEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0cnVjdCB0eXBl ICpyZXRfdHlwZSA9CisgICAgICAgICAgICAgICAgICBUWVBFX1RBUkdFVF9U WVBFIChTWU1CT0xfVFlQRSAoZnVuY3Rpb24pKTsKKworICAgICAgICAgICAg ICAvKiBSZW1lbWJlciBvbmx5IG5vbi1WT0lEIHJldHVybiB0eXBlcy4gICov CisgICAgICAgICAgICAgIGlmIChUWVBFX0NPREUgKHJldF90eXBlKSAhPSBU WVBFX0NPREVfVk9JRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICBzZWxmX2JwZmluaXNoLT5yZXR1cm5fdHlwZSA9IHR5cGVfdG9f dHlwZV9vYmplY3QgKHJldF90eXBlKTsKKyAgICAgICAgICAgICAgICAgIHNl bGZfYnBmaW5pc2gtPmZ1bmN0aW9uX3R5cGUgPQorICAgICAgICAgICAgICAg ICAgICAgIHR5cGVfdG9fdHlwZV9vYmplY3QgKFNZTUJPTF9UWVBFIChmdW5j dGlvbikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgIH0KKyAgaWYgKGV4Y2VwdC5yZWFzb24gPCAwCisgICAg ICB8fCAhc2VsZl9icGZpbmlzaC0+cmV0dXJuX3R5cGUgfHwgIXNlbGZfYnBm aW5pc2gtPmZ1bmN0aW9uX3R5cGUpCisgICAgeworICAgICAgLyogV29uJ3Qg YmUgYWJsZSB0byBjb21wdXRlIHJldHVybiB2YWx1ZS4gICovCisgICAgICBz ZWxmX2JwZmluaXNoLT5yZXR1cm5fdHlwZSA9IE5VTEw7CisgICAgICBzZWxm X2JwZmluaXNoLT5mdW5jdGlvbl90eXBlID0gTlVMTDsKKyAgICB9CisKKyAg YnBweV9wZW5kaW5nX29iamVjdCA9ICZzZWxmX2JwZmluaXNoLT5weV9icDsK KyAgYnBweV9wZW5kaW5nX29iamVjdC0+bnVtYmVyID0gLTE7CisgIGJwcHlf cGVuZGluZ19vYmplY3QtPmJwID0gTlVMTDsKKworICBUUllfQ0FUQ0ggKGV4 Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorICAgIHsKKyAgICAgIC8qIFNldCBh IGJyZWFrcG9pbnQgb24gdGhlIHJldHVybiBhZGRyZXNzLiAgKi8KKyAgICAg IGZpbmlzaF9wYyA9IGdldF9mcmFtZV9wYyAocHJldl9mcmFtZSk7CisgICAg ICBzcHJpbnRmIChzbWFsbF9idWYsICIqJXMiLCBoZXhfc3RyaW5nIChmaW5p c2hfcGMpKTsKKyAgICAgIGFkZHJfc3RyID0gc21hbGxfYnVmOworCisgICAg ICBjcmVhdGVfYnJlYWtwb2ludCAocHl0aG9uX2dkYmFyY2gsCisgICAgICAg ICAgICAgICAgICAgICAgICAgYWRkcl9zdHIsIE5VTEwsIC0xLAorICAgICAg ICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgMSAvKnRlbXBfZmxhZyovLAorICAgICAgICAgICAgICAgICAgICAgICAg IGJwX2JyZWFrcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwK KyAgICAgICAgICAgICAgICAgICAgICAgICBBVVRPX0JPT0xFQU5fVFJVRSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAmYmtwdF9icmVha3BvaW50X29w cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCBpbnRlcm5hbF9i cCk7CisgICAgfQorICBHREJfUFlfU0VUX0hBTkRMRV9FWENFUFRJT04gKGV4 Y2VwdCk7CisKKyAgQlBQWV9TRVRfUkVRVUlSRV9WQUxJRCAoJnNlbGZfYnBm aW5pc2gtPnB5X2JwKTsKKyAgCisgIHNlbGZfYnBmaW5pc2gtPnB5X2JwLmJw LT5mcmFtZV9pZCA9IGZyYW1lX2lkOworICBzZWxmX2JwZmluaXNoLT5weV9i cC5pc19maW5pc2hfYnAgPSAxOworICAKKyAgcmV0dXJuIDA7CisgIAorIGlu dmFsaWRfZnJhbWU6CisgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVmFsdWVF cnJvciwgCisgICAgICAgICAgICAgICAgICAgXygiSW52YWxpZCBJRCBmb3Ig dGhlIGBmcmFtZScgb2JqZWN0LiIpKTsKKyAgcmV0dXJuIC0xOworfQorCisv KiBDYWxsZWQgd2hlbiBHREIgbm90aWNlcyB0aGF0IHRoZSBmaW5pc2ggYnJl YWtwb2ludCBCUF9PQkogaXMgb3V0IG9mCisgICB0aGUgY3VycmVudCBjYWxs c3RhY2suICBUcmlnZ2VycyB0aGUgbWV0aG9kIE9VVF9PRl9TQ09QRSBpZiBp bXBsZW1lbnRlZCwKKyAgIHRoZW4gZGVsZXRlIHRoZSBicmVha3BvaW50LiAg Ki8KKworc3RhdGljIHZvaWQKK2JwZmluaXNocHlfb3V0X29mX3Njb3BlIChz dHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICpicGZpbmlzaF9vYmop Cit7CisgIGJyZWFrcG9pbnRfb2JqZWN0ICpicF9vYmogPSAoYnJlYWtwb2lu dF9vYmplY3QgKikgYnBmaW5pc2hfb2JqOworICBQeU9iamVjdCAqcHlfb2Jq ID0gKFB5T2JqZWN0ICopIGJwX29iajsKKworICBpZiAoUHlPYmplY3RfSGFz QXR0clN0cmluZyAocHlfb2JqLCBvdXRvZnNjb3BlX2Z1bmMpKQorICAgIHsK KyAgICAgIGlmICghUHlPYmplY3RfQ2FsbE1ldGhvZCAocHlfb2JqLCBvdXRv ZnNjb3BlX2Z1bmMsIE5VTEwpKQorICAgICAgICAgIGdkYnB5X3ByaW50X3N0 YWNrICgpOworICAgIH0KKworICBkZWxldGVfYnJlYWtwb2ludCAoYnBmaW5p c2hfb2JqLT5weV9icC5icCk7Cit9CisKKy8qIENhbGxiYWNrIGZvciBgYnBm aW5pc2hweV9kZXRlY3Rfb3V0X3Njb3BlJy4gIFRyaWdnZXJzIFB5dGhvbidz CisgICBgQi0+b3V0X29mX3Njb3BlJyBmdW5jdGlvbiBpZiBCIGlzIGEgRmlu aXNoQnJlYWtwb2ludCBvdXQgb2YgaXRzCisgICBzY29wZSBvciB0dXJuIG9m IG91dF9vZl9zY29wZSBub3RpZmljYXRpb24gaWYgQiBoYXMgYmVlbiBoaXQu ICAqLworCitzdGF0aWMgaW50CiticGZpbmlzaHB5X2RldGVjdF9vdXRfc2Nv cGVfY2IgKHN0cnVjdCBicmVha3BvaW50ICpiLCB2b2lkICphcmdzKQorewor ICBzdHJ1Y3QgYnJlYWtwb2ludCAqYnBfc3RvcHBlZCA9IChzdHJ1Y3QgYnJl YWtwb2ludCAqKSBhcmdzOworICBQeU9iamVjdCAqcHlfYnAgPSAoUHlPYmpl Y3QgKikgYi0+cHlfYnBfb2JqZWN0OworICBzdHJ1Y3QgZ2RiYXJjaCAqZ2Fy Y2ggPSBiLT5nZGJhcmNoID8gYi0+Z2RiYXJjaCA6IGdldF9jdXJyZW50X2Fy Y2ggKCk7CisgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwID0gZW5zdXJlX3B5 dGhvbl9lbnYgKGdhcmNoLCBjdXJyZW50X2xhbmd1YWdlKTsKKyAgCisgIC8q IFRyaWdnZXIgb3V0X29mX3Njb3BlIGlmIHRoaXMgaXMgYSBGaW5pc2hCcmVh a3BvaW50IGFuZCBpdHMgZnJhbWUgaXMKKyAgICAgbm90IGFueW1vcmUgaW4g dGhlIGN1cnJlbnQgY2FsbHN0YWNrLiAgKi8KKyAgaWYgKHB5X2JwICE9IE5V TEwgJiYgYi0+cHlfYnBfb2JqZWN0LT5pc19maW5pc2hfYnApCisgICAgewor ICAgICAgc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdCAqZmluaXNo X2JwID0KKyAgICAgICAgICAoc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29i amVjdCAqKSBweV9icDsKKworICAgICAgaWYgKGIgPT0gYnBfc3RvcHBlZCkK KyAgICAgICAgeworICAgICAgICAgIGJwZmluaXNoX3N0b3BwZWRfYXRfZmlu aXNoX2JwIChmaW5pc2hfYnApOworICAgICAgICAgIGlmIChQeUVycl9PY2N1 cnJlZCAoKSkKKyAgICAgICAgICAgIGdkYnB5X3ByaW50X3N0YWNrICgpOwor ICAgICAgICB9CisgICAgICBlbHNlIGlmIChiLT5wc3BhY2UgPT0gY3VycmVu dF9pbmZlcmlvciAoKS0+cHNwYWNlCisgICAgICAgICAgICYmICghdGFyZ2V0 X2hhc19yZWdpc3RlcnMKKyAgICAgICAgICAgICAgIHx8IGZyYW1lX2ZpbmRf YnlfaWQgKGItPmZyYW1lX2lkKSA9PSBOVUxMKSkKKyAgICAgICAgeworICAg ICAgICAgIGJwZmluaXNocHlfb3V0X29mX3Njb3BlIChmaW5pc2hfYnApOwor ICAgICAgICB9CisgICAgfQorICBkb19jbGVhbnVwcyAoY2xlYW51cCk7Cisg IHJldHVybiAwOworfQorCisvKiBBdHRhY2hlZCB0byBgc3RvcCcgbm90aWZp Y2F0aW9ucywgY2hlY2sgaWYgdGhlIGV4ZWN1dGlvbiBoYXMgcnVuCisgICBv dXQgb2YgdGhlIHNjb3BlIG9mIGFueSBGaW5pc2hCcmVha3BvaW50IGJlZm9y ZSBpdCBoYXMgYmVlbiBoaXQuICAqLworCitzdGF0aWMgdm9pZAorYnBmaW5p c2hweV9oYW5kbGVfc3RvcCAoc3RydWN0IGJwc3RhdHMgKmJzLCBpbnQgcHJp bnRfZnJhbWUpCit7CisgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwID0gZW5z dXJlX3B5dGhvbl9lbnYgKGdldF9jdXJyZW50X2FyY2ggKCksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJl bnRfbGFuZ3VhZ2UpOworCisgIGl0ZXJhdGVfb3Zlcl9icmVha3BvaW50cyAo YnBmaW5pc2hweV9kZXRlY3Rfb3V0X3Njb3BlX2NiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJzID09IE5VTEwgPyBOVUxMIDogYnMtPmJyZWFr cG9pbnRfYXQpOworCisgIGRvX2NsZWFudXBzIChjbGVhbnVwKTsKK30KKwor LyogQXR0YWNoZWQgdG8gYGV4aXQnIG5vdGlmaWNhdGlvbnMsIHRyaWdnZXJz IGFsbCB0aGUgbmVjZXNzYXJ5IG91dCBvZgorICAgc2NvcGUgbm90aWZpY2F0 aW9ucy4gICovCisKK3N0YXRpYyB2b2lkCiticGZpbmlzaHB5X2hhbmRsZV9l eGl0IChzdHJ1Y3QgaW5mZXJpb3IgKmluZikKK3sKKyAgc3RydWN0IGNsZWFu dXAgKmNsZWFudXAgPSBlbnN1cmVfcHl0aG9uX2VudiAodGFyZ2V0X2dkYmFy Y2gsCisgICAgICBjdXJyZW50X2xhbmd1YWdlKTsKKworICBpdGVyYXRlX292 ZXJfYnJlYWtwb2ludHMgKGJwZmluaXNocHlfZGV0ZWN0X291dF9zY29wZV9j YiwgTlVMTCk7CisKKyAgZG9fY2xlYW51cHMgKGNsZWFudXApOworfQorCisv KiBJbml0aWFsaXplIHRoZSBQeXRob24gZmluaXNoIGJyZWFrcG9pbnQgY29k ZS4gICovCisKK3ZvaWQKK2dkYnB5X2luaXRpYWxpemVfZmluaXNoYnJlYWtw b2ludHMgKHZvaWQpCit7CisgIGlmIChQeVR5cGVfUmVhZHkgKCZmaW5pc2hf YnJlYWtwb2ludF9vYmplY3RfdHlwZSkgPCAwKQorICAgICAgcmV0dXJuOwor ICAKKyAgUHlfSU5DUkVGICgmZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X3R5 cGUpOworICBQeU1vZHVsZV9BZGRPYmplY3QgKGdkYl9tb2R1bGUsICJGaW5p c2hCcmVha3BvaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAoUHlPYmpl Y3QgKikgJmZpbmlzaF9icmVha3BvaW50X29iamVjdF90eXBlKTsKKyAgICAK KyAgb2JzZXJ2ZXJfYXR0YWNoX25vcm1hbF9zdG9wIChicGZpbmlzaHB5X2hh bmRsZV9zdG9wKTsKKyAgb2JzZXJ2ZXJfYXR0YWNoX2luZmVyaW9yX2V4aXQg KGJwZmluaXNocHlfaGFuZGxlX2V4aXQpOworfQorCitzdGF0aWMgUHlHZXRT ZXREZWYgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X2dldHNldFtdID0gewor ICB7ICJyZXR1cm5fdmFsdWUiLCBicGZpbmlzaHB5X2dldF9yZXR1cm52YWx1 ZSwgTlVMTCwKKyAgImdkYi5WYWx1ZSBvYmplY3QgcmVwcmVzZW50aW5nIHRo ZSByZXR1cm4gdmFsdWUsIGlmIGFueS4gXAorTm9uZSBvdGhlcndpc2UuIiwg TlVMTCB9LAorICAgIHsgTlVMTCB9ICAvKiBTZW50aW5lbC4gICovCit9Owor CitzdGF0aWMgUHlUeXBlT2JqZWN0IGZpbmlzaF9icmVha3BvaW50X29iamVj dF90eXBlID0KK3sKKyAgUHlPYmplY3RfSEVBRF9JTklUIChOVUxMKQorICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qb2Jfc2l6ZSovCisg ICJnZGIuRmluaXNoQnJlYWtwb2ludCIsICAgICAgICAgLyp0cF9uYW1lKi8K KyAgc2l6ZW9mIChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0KSwg IC8qdHBfYmFzaWNzaXplKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKnRwX2l0ZW1zaXplKi8KKyAgYnBmaW5pc2hweV9kZWFsbG9j LCAgICAgICAgICAgICAvKnRwX2RlYWxsb2MqLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NvbXBhcmUq LworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVw ciovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9h c19udW1iZXIqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qdHBfYXNfc2VxdWVuY2UqLworICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCisgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyAq LworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNf YnVmZmVyKi8KKyAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19C QVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAiR0RCIGZpbmlzaCBicmVha3Bv aW50IG9iamVjdCIsIC8qIHRwX2RvYyAqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFy ZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRw X3dlYWtsaXN0b2Zmc2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdHBfaXRlciAqLworICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8K KyAgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X2dldHNldCwvKiB0cF9nZXRz ZXQgKi8KKyAgJmJyZWFrcG9pbnRfb2JqZWN0X3R5cGUsICAgICAgICAvKiB0 cF9iYXNlICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogdHBfZGljdCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAg YnBmaW5pc2hweV9pbml0LCAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxs b2MgKi8KKyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0 cF9uZXcgKi8KK307CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LWZyYW1l LmMgYi9nZGIvcHl0aG9uL3B5LWZyYW1lLmMKaW5kZXggMjAwNjRjYS4uYzMz NGY2MyAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weS1mcmFtZS5jCisrKyBi L2dkYi9weXRob24vcHktZnJhbWUuYwpAQCAtNjAsOSArNjAsMTAgQEAgc3Rh dGljIFB5VHlwZU9iamVjdCBmcmFtZV9vYmplY3RfdHlwZTsKICAgIG9iamVj dC4gIElmIHRoZSBmcmFtZSBkb2Vzbid0IGV4aXN0IGFueW1vcmUgKHRoZSBm cmFtZSBpZCBkb2Vzbid0CiAgICBjb3JyZXNwb25kIHRvIGFueSBmcmFtZSBp biB0aGUgaW5mZXJpb3IpLCByZXR1cm5zIE5VTEwuICAqLwogCi1zdGF0aWMg c3RydWN0IGZyYW1lX2luZm8gKgotZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2lu Zm8gKGZyYW1lX29iamVjdCAqZnJhbWVfb2JqKQorc3RydWN0IGZyYW1lX2lu Zm8gKgorZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKFB5T2JqZWN0ICpv YmopCiB7CisgIGZyYW1lX29iamVjdCAqZnJhbWVfb2JqID0gKGZyYW1lX29i amVjdCAqKSBvYmo7ICAKICAgc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lOwog CiAgIGZyYW1lID0gZnJhbWVfZmluZF9ieV9pZCAoZnJhbWVfb2JqLT5mcmFt ZV9pZCk7CkBAIC0xMDYsNyArMTA3LDcgQEAgZnJhcHlfaXNfdmFsaWQgKFB5 T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FUQ0gg KGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIGZyYW1l ID0gZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKChmcmFtZV9vYmplY3Qg Kikgc2VsZik7CisgICAgICBmcmFtZSA9IGZyYW1lX29iamVjdF90b19mcmFt ZV9pbmZvIChzZWxmKTsKICAgICB9CiAgIEdEQl9QWV9IQU5ETEVfRVhDRVBU SU9OIChleGNlcHQpOwogCkBAIC0xMzAsNyArMTMxLDcgQEAgZnJhcHlfbmFt ZSAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9D QVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAg RlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBm cmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFt ZSk7CiAKICAgICAgIGZpbmRfZnJhbWVfZnVubmFtZSAoZnJhbWUsICZuYW1l LCAmbGFuZywgTlVMTCk7CiAgICAgfQpAQCAtMTU5LDcgKzE2MCw3IEBAIGZy YXB5X3R5cGUgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAog ICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsK LSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikg c2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2Vs ZiwgZnJhbWUpOwogCiAgICAgICB0eXBlID0gZ2V0X2ZyYW1lX3R5cGUgKGZy YW1lKTsKICAgICB9CkBAIC0xODAsNyArMTgxLDcgQEAgZnJhcHlfdW53aW5k X3N0b3BfcmVhc29uIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3Mp CiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAg ICB7Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0 ICopIHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQg KHNlbGYsIGZyYW1lKTsKICAgICB9CiAgIEdEQl9QWV9IQU5ETEVfRVhDRVBU SU9OIChleGNlcHQpOwogCkBAIC0yMDEsNyArMjAyLDcgQEAgZnJhcHlfcGMg KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FU Q0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZS QVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJh bWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUp OwogCiAgICAgICBwYyA9IGdldF9mcmFtZV9wYyAoZnJhbWUpOwogICAgIH0K QEAgLTIyMiw3ICsyMjMsNyBAQCBmcmFweV9ibG9jayAoUHlPYmplY3QgKnNl bGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBS RVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9W QUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBG UkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAgICAgICBibG9j ayA9IGdldF9mcmFtZV9ibG9jayAoZnJhbWUsIE5VTEwpOwogICAgIH0KICAg R0RCX1BZX0hBTkRMRV9FWENFUFRJT04gKGV4Y2VwdCk7CkBAIC0yNjMsNyAr MjY0LDcgQEAgZnJhcHlfZnVuY3Rpb24gKFB5T2JqZWN0ICpzZWxmLCBQeU9i amVjdCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01B U0tfQUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChm cmFtZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVR VUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAgICAgICBzeW0gPSBmaW5k X3BjX2Z1bmN0aW9uIChnZXRfZnJhbWVfYWRkcmVzc19pbl9ibG9jayAoZnJh bWUpKTsKICAgICB9CkBAIC0zMzAsNyArMzMxLDcgQEAgZnJhcHlfb2xkZXIg KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FU Q0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZS QVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJh bWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUp OwogCiAgICAgICBwcmV2ID0gZ2V0X3ByZXZfZnJhbWUgKGZyYW1lKTsKICAg ICAgIGlmIChwcmV2KQpAQCAtMzU5LDcgKzM2MCw3IEBAIGZyYXB5X25ld2Vy IChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NB VENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBG UkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZy YW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1l KTsKIAogICAgICAgbmV4dCA9IGdldF9uZXh0X2ZyYW1lIChmcmFtZSk7CiAg ICAgICBpZiAobmV4dCkKQEAgLTM4OCw3ICszODksNyBAQCBmcmFweV9maW5k X3NhbCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRS WV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAg ICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxm LCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBm cmFtZSk7CiAKICAgICAgIGZpbmRfZnJhbWVfc2FsIChmcmFtZSwgJnNhbCk7 CiAgICAgICBzYWxfb2JqID0gc3ltdGFiX2FuZF9saW5lX3RvX3NhbF9vYmpl Y3QgKHNhbCk7CkBAIC00NDQsNyArNDQ1LDcgQEAgZnJhcHlfcmVhZF92YXIg KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICAgICAgVFJZ X0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKIAl7Ci0JICBGUkFQ WV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1l KTsKKwkgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAog CSAgaWYgKCFibG9jaykKIAkgICAgYmxvY2sgPSBnZXRfZnJhbWVfYmxvY2sg KGZyYW1lLCBOVUxMKTsKQEAgLTQ3Miw3ICs0NzMsNyBAQCBmcmFweV9yZWFk X3ZhciAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRS WV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAg ICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxm LCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBm cmFtZSk7CiAKICAgICAgIHZhbCA9IHJlYWRfdmFyX3ZhbHVlICh2YXIsIGZy YW1lKTsKICAgICB9CkBAIC00ODcsMTIgKzQ4OCwxMSBAQCBzdGF0aWMgUHlP YmplY3QgKgogZnJhcHlfc2VsZWN0IChQeU9iamVjdCAqc2VsZiwgUHlPYmpl Y3QgKmFyZ3MpCiB7CiAgIHN0cnVjdCBmcmFtZV9pbmZvICpmaTsKLSAgZnJh bWVfb2JqZWN0ICpmcmFtZSA9IChmcmFtZV9vYmplY3QgKikgc2VsZjsKICAg dm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OwogCiAgIFRS WV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAg ICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoZnJhbWUsIGZpKTsKKyAgICAgIEZS QVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZpKTsKIAogICAgICAgc2VsZWN0 X2ZyYW1lIChmaSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9w eXRob24taW50ZXJuYWwuaCBiL2dkYi9weXRob24vcHl0aG9uLWludGVybmFs LmgKaW5kZXggZWYzOWQ1ZC4uNGQ0NjQ2NiAxMDA2NDQKLS0tIGEvZ2RiL3B5 dGhvbi9weXRob24taW50ZXJuYWwuaAorKysgYi9nZGIvcHl0aG9uL3B5dGhv bi1pbnRlcm5hbC5oCkBAIC0xMjAsOSArMTIwLDUwIEBAIGV4dGVybiBQeVR5 cGVPYmplY3Qgc3ltYm9sX29iamVjdF90eXBlOwogZXh0ZXJuIFB5VHlwZU9i amVjdCBldmVudF9vYmplY3RfdHlwZTsKIGV4dGVybiBQeVR5cGVPYmplY3Qg ZXZlbnRzX29iamVjdF90eXBlOwogZXh0ZXJuIFB5VHlwZU9iamVjdCBzdG9w X2V2ZW50X29iamVjdF90eXBlOworZXh0ZXJuIFB5VHlwZU9iamVjdCBicmVh a3BvaW50X29iamVjdF90eXBlOworCit0eXBlZGVmIHN0cnVjdCBicmVha3Bv aW50X29iamVjdAoreworICBQeU9iamVjdF9IRUFECisKKyAgLyogVGhlIGJy ZWFrcG9pbnQgbnVtYmVyIGFjY29yZGluZyB0byBnZGIuICAqLworICBpbnQg bnVtYmVyOworCisgIC8qIFRoZSBnZGIgYnJlYWtwb2ludCBvYmplY3QsIG9y IE5VTEwgaWYgdGhlIGJyZWFrcG9pbnQgaGFzIGJlZW4KKyAgICAgZGVsZXRl ZC4gICovCisgIHN0cnVjdCBicmVha3BvaW50ICpicDsKKworICAvKiAxIGlz IHRoaXMgaXMgYSBGaW5pc2hCcmVha3BvaW50IG9iamVjdCwgMCBvdGhlcndp c2UuICAqLworICBpbnQgaXNfZmluaXNoX2JwOworfSBicmVha3BvaW50X29i amVjdDsKKworLyogUmVxdWlyZSB0aGF0IEJSRUFLUE9JTlQgYmUgYSB2YWxp ZCBicmVha3BvaW50IElEOyB0aHJvdyBhIFB5dGhvbgorICAgZXhjZXB0aW9u IGlmIGl0IGlzIGludmFsaWQuICAqLworI2RlZmluZSBCUFBZX1JFUVVJUkVf VkFMSUQoQnJlYWtwb2ludCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg aWYgKChCcmVha3BvaW50KS0+YnAgPT0gTlVMTCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gUHlFcnJf Rm9ybWF0IChQeUV4Y19SdW50aW1lRXJyb3IsICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJCcmVh a3BvaW50ICVkIGlzIGludmFsaWQuIiksICAgICAgICAgICAgXAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoQnJlYWtwb2ludCktPm51bWJlcik7 ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKy8q IFJlcXVpcmUgdGhhdCBCUkVBS1BPSU5UIGJlIGEgdmFsaWQgYnJlYWtwb2lu dCBJRDsgdGhyb3cgYSBQeXRob24KKyAgIGV4Y2VwdGlvbiBpZiBpdCBpcyBp bnZhbGlkLiAgVGhpcyBtYWNybyBpcyBmb3IgdXNlIGluIHNldHRlciBmdW5j dGlvbnMuICAqLworI2RlZmluZSBCUFBZX1NFVF9SRVFVSVJFX1ZBTElEKEJy ZWFrcG9pbnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYgKChCcmVha3Bv aW50KS0+YnAgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg ICAgICAgIFB5RXJyX0Zvcm1hdCAoUHlFeGNfUnVudGltZUVycm9yLCBfKCJC cmVha3BvaW50ICVkIGlzIGludmFsaWQuIiksIFwKKyAgICAgICAgICAgICAg ICAgICAgICAgIChCcmVha3BvaW50KS0+bnVtYmVyKTsgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgICByZXR1cm4gLTE7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgw KQorCisKKy8qIFZhcmlhYmxlcyB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24g YmV0d2VlbiB0aGUgQnJlYWtwb2ludAorICAgY29uc3RydWN0b3IgYW5kIHRo ZSBicmVha3BvaW50LWNyZWF0ZWQgaG9vayBmdW5jdGlvbi4gICovCitleHRl cm4gYnJlYWtwb2ludF9vYmplY3QgKmJwcHlfcGVuZGluZ19vYmplY3Q7CiAK LS8qIERlZmluZWQgaW4gcHktYnJlYWtwb2ludC5jICovCi10eXBlZGVmIHN0 cnVjdCBicmVha3BvaW50X29iamVjdCBicmVha3BvaW50X29iamVjdDsKIAog dHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTE4OCw2ICsyMjksNyBAQCBzdHJ1Y3Qg dmFsdWUgKmNvbnZlcnRfdmFsdWVfZnJvbV9weXRob24gKFB5T2JqZWN0ICpv YmopOwogc3RydWN0IHR5cGUgKnR5cGVfb2JqZWN0X3RvX3R5cGUgKFB5T2Jq ZWN0ICpvYmopOwogc3RydWN0IHN5bXRhYiAqc3ltdGFiX29iamVjdF90b19z eW10YWIgKFB5T2JqZWN0ICpvYmopOwogc3RydWN0IHN5bXRhYl9hbmRfbGlu ZSAqc2FsX29iamVjdF90b19zeW10YWJfYW5kX2xpbmUgKFB5T2JqZWN0ICpv YmopOworc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lX29iamVjdF90b19mcmFt ZV9pbmZvIChQeU9iamVjdCAqZnJhbWVfb2JqKTsKIAogdm9pZCBnZGJweV9p bml0aWFsaXplX2F1dG9fbG9hZCAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRp YWxpemVfdmFsdWVzICh2b2lkKTsKQEAgLTIwMiw2ICsyNDQsNyBAQCB2b2lk IGdkYnB5X2luaXRpYWxpemVfZnVuY3Rpb25zICh2b2lkKTsKIHZvaWQgZ2Ri cHlfaW5pdGlhbGl6ZV9wc3BhY2UgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0 aWFsaXplX29iamZpbGUgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXpl X2JyZWFrcG9pbnRzICh2b2lkKTsKK3ZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9m aW5pc2hicmVha3BvaW50cyAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxp emVfbGF6eV9zdHJpbmcgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXpl X3BhcmFtZXRlcnMgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXplX3Ro cmVhZCAodm9pZCk7CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5dGhvbi5j IGIvZ2RiL3B5dGhvbi9weXRob24uYwppbmRleCAzYTVhNmI1Li41NWMwYzFl IDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5dGhvbi5jCisrKyBiL2dkYi9w eXRob24vcHl0aG9uLmMKQEAgLTEwNDgsNiArMTA0OCwxMSBAQCBnZGJweV9i cmVha3BvaW50X2hhc19weV9jb25kIChzdHJ1Y3QgYnJlYWtwb2ludF9vYmpl Y3QgKmJwX29iaikKIAkJICAgICJzY3JpcHRpbmcgaXMgbm90IHN1cHBvcnRl ZC4iKSk7CiB9CiAKK2ludAorZ2RicHlfaXNfc3RvcHBlZF9hdF9maW5pc2hf YnAgKGJwc3RhdCBzdG9wX2Jwc3RhdCkKK3sKKyAgcmV0dXJuIDA7Cit9CiAj ZW5kaWYgLyogSEFWRV9QWVRIT04gKi8KIAogDApAQCAtMTIzNyw2ICsxMjQy LDcgQEAgRW5hYmxlcyBvciBkaXNhYmxlcyBwcmludGluZyBvZiBQeXRob24g c3RhY2sgdHJhY2VzLiIpLAogICBnZGJweV9pbml0aWFsaXplX3BzcGFjZSAo KTsKICAgZ2RicHlfaW5pdGlhbGl6ZV9vYmpmaWxlICgpOwogICBnZGJweV9p bml0aWFsaXplX2JyZWFrcG9pbnRzICgpOworICBnZGJweV9pbml0aWFsaXpl X2ZpbmlzaGJyZWFrcG9pbnRzICgpOwogICBnZGJweV9pbml0aWFsaXplX2xh enlfc3RyaW5nICgpOwogICBnZGJweV9pbml0aWFsaXplX3RocmVhZCAoKTsK ICAgZ2RicHlfaW5pdGlhbGl6ZV9pbmZlcmlvciAoKTsKZGlmZiAtLWdpdCBh L2dkYi9weXRob24vcHl0aG9uLmggYi9nZGIvcHl0aG9uL3B5dGhvbi5oCmlu ZGV4IGFlNTVjYzIuLmNkZjAyNjMgMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24v cHl0aG9uLmgKKysrIGIvZ2RiL3B5dGhvbi9weXRob24uaApAQCAtMjEsNiAr MjEsNyBAQAogI2RlZmluZSBHREJfUFlUSE9OX0gKIAogI2luY2x1ZGUgInZh bHVlLmgiCisjaW5jbHVkZSAiYnJlYWtwb2ludC5oIgogCiBzdHJ1Y3QgYnJl YWtwb2ludF9vYmplY3Q7CiAKQEAgLTQ3LDQgKzQ4LDYgQEAgaW50IGdkYnB5 X3Nob3VsZF9zdG9wIChzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJwX29i aik7CiAKIGludCBnZGJweV9icmVha3BvaW50X2hhc19weV9jb25kIChzdHJ1 Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJwX29iaik7CiAKK2ludCBnZGJweV9p c19zdG9wcGVkX2F0X2ZpbmlzaF9icCAoYnBzdGF0IHN0b3BfYnBzdGF0KTsK KwogI2VuZGlmIC8qIEdEQl9QWVRIT05fSCAqLwpkaWZmIC0tZ2l0IGEvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWJyZWFrcG9pbnQuZXhwIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWJyZWFrcG9pbnQuZXhwCmluZGV4 IGUwZGQwODcuLjBlM2FkYmQgMTAwNjQ0Ci0tLSBhL2dkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9weS1icmVha3BvaW50LmV4cAorKysgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktYnJlYWtwb2ludC5leHAKQEAgLTQ0LDcgKzQ0 LDggQEAgZ2RiX3B5X3Rlc3Rfc2lsZW50X2NtZCAicHl0aG9uIGJsaXN0ID0g Z2RiLmJyZWFrcG9pbnRzKCkiICJHZXQgQnJlYWtwb2ludCBMaXN0IgogZ2Ri X3Rlc3QgInB5dGhvbiBwcmludCBibGlzdFxbMFxdIiAiPGdkYi5CcmVha3Bv aW50IG9iamVjdCBhdCAkaGV4PiIgIkNoZWNrIG9iaiBleGlzdHMiCiBnZGJf dGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFswXF0ubG9jYXRpb24iICJtYWlu LiIgIkNoZWNrIGJyZWFrcG9pbnQgbG9jYXRpb24iCiAKLWdkYl9icmVha3Bv aW50IFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJCcmVhayBhdCBtdWx0aXBseS4i XQorc2V0IG11bHRfbGluZSBbZ2RiX2dldF9saW5lX251bWJlciAiQnJlYWsg YXQgbXVsdGlwbHkuIl0KK2dkYl9icmVha3BvaW50ICR7bXVsdF9saW5lfQog Z2RiX2NvbnRpbnVlX3RvX2JyZWFrcG9pbnQgIkJyZWFrIGF0IG11bHRpcGx5 LiIKIAogIyBDaGVjayB0aGF0IHRoZSBQeXRob24gYnJlYWtwb2ludCBjb2Rl IG5vdGVkIHRoZSBhZGRpdGlvbiBvZiBhCkBAIC01NCw3ICs1NSw5IEBAIGdk Yl90ZXN0ICJweXRob24gcHJpbnQgbGVuKGJsaXN0KSIgIjIiICJDaGVjayBm b3IgdHdvIGJyZWFrcG9pbnRzIgogZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBi bGlzdFxbMFxdIiAiPGdkYi5CcmVha3BvaW50IG9iamVjdCBhdCAkaGV4PiIg IkNoZWNrIG9iaiBleGlzdHMiCiBnZGJfdGVzdCAicHl0aG9uIHByaW50IGJs aXN0XFswXF0ubG9jYXRpb24iICJtYWluLiIgIkNoZWNrIGJyZWFrcG9pbnQg bG9jYXRpb24iCiBnZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFsxXF0i ICI8Z2RiLkJyZWFrcG9pbnQgb2JqZWN0IGF0ICRoZXg+IiAiQ2hlY2sgb2Jq IGV4aXN0cyIKLWdkYl90ZXN0ICJweXRob24gcHJpbnQgYmxpc3RcWzFcXS5s b2NhdGlvbiIgInB5LWJyZWFrcG9pbnRcLmM6NDEqIiAiQ2hlY2sgYnJlYWtw b2ludCBsb2NhdGlvbiIKKworZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBibGlz dFxbMVxdLmxvY2F0aW9uIiAicHktYnJlYWtwb2ludFwuYzoke211bHRfbGlu ZX0qIiBcCisgICAgICAgICAiQ2hlY2sgYnJlYWtwb2ludCBsb2NhdGlvbiIK IAogIyBDaGVjayBoaXQgYW5kIGlnbm9yZSBjb3VudHMuIAogZ2RiX3Rlc3Qg InB5dGhvbiBwcmludCBibGlzdFxbMVxdLmhpdF9jb3VudCIgIjEiICJDaGVj ayBicmVha3BvaW50IGhpdCBjb3VudCIKZGlmZiAtLWdpdCBhL2dkYi90ZXN0 c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5jIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI3MDhlMwot LS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1maW5pc2gtYnJlYWtwb2ludC5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qIFRo aXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIu CisKKyAgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg ICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNl ZSAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2lu Y2x1ZGUgPHNldGptcC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1 ZGUgPHVuaXN0ZC5oPgorCitpbnQgaW5jcmVhc2VfMSAoaW50ICphKQorewor ICAqYSArPSAxOworICByZXR1cm4gLTU7Cit9CisKK3ZvaWQgaW5jcmVhc2Ug KGludCAqYSkKK3sKKyAgaW5jcmVhc2VfMSAoYSk7Cit9CisKK2ludAordGVz dF8xIChpbnQgaSwgaW50IGopCit7CisgIHJldHVybiBpID09IGo7Cit9CisK K2ludAordGVzdChpbnQgaSwgaW50IGopCit7CisgIHJldHVybiB0ZXN0XzEg KGksIGopOworfQorCitpbnQKK2NhbGxfbG9uZ2ptcF8xIChqbXBfYnVmICpi dWYpCit7CisgIGxvbmdqbXAgKCpidWYsIDEpOworfQorCitpbnQKK2NhbGxf bG9uZ2ptcCAoam1wX2J1ZiAqYnVmKQoreworICBjYWxsX2xvbmdqbXBfMSAo YnVmKTsKK30KKwordm9pZAordGVzdF9leGVjX2V4aXQoaW50IGRvX2V4aXQp Cit7CisgIGlmIChkb19leGl0KQorICAgIGV4aXQoMCk7CisgIGVsc2UKKyAg ICBleGVjbCAoIi9iaW4vZWNobyIsICJlY2hvIiwgIi0xIiwgKGNoYXIgKikw KTsKK30KKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7 CisgIGptcF9idWYgZW52OworICBpbnQgZm9vID0gNTsKKyAgaW50IGJhciA9 IDQyOworICBpbnQgaSwgajsKKworICBnZXRwaWQoKTsKKworICBpID0gMDsK KyAgLyogQnJlYWsgYXQgaW5jcmVhc2UuICovCisgIGluY3JlYXNlICgmaSk7 CisgIGluY3JlYXNlICgmaSk7CisgIGluY3JlYXNlICgmaSk7CisKKyAgZm9y IChpID0gMDsgaSA8IDEwOyBpKyspCisgICAgeworICAgICAgaiArPSAxOyAv KiBDb25kaXRpb24gQnJlYWsuICovCisgICAgfQorCisgIGlmIChzZXRqbXAg KGVudikgPT0gMCkgLyogbG9uZ2ptcCBjYXVnaHQgKi8KKyAgICB7CisgICAg ICBjYWxsX2xvbmdqbXAgKCZlbnYpOworICAgIH0KKyAgZWxzZQorICAgIGog Kz0gMTsgLyogYWZ0ZXIgbG9uZ2ptcC4gKi8KKworICB0ZXN0X2V4ZWNfZXhp dCgxKTsKKworICByZXR1cm4gajsgLyogQnJlYWsgYXQgZW5kLiAqLworfQpk aWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlz aC1icmVha3BvaW50LmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1maW5pc2gtYnJlYWtwb2ludC5leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYzRkM2JlZgotLS0gL2Rldi9udWxsCisrKyBiL2dk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5l eHAKQEAgLTAsMCArMSwyMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAz IG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0RCIHRlc3RzdWl0 ZS4gIEl0IHRlc3RzIHRoZSBtZWNoYW5pc20KKyMgZXhwb3NpbmcgdmFsdWVz IHRvIFB5dGhvbi4KKworaWYgJHRyYWNlbGV2ZWwgdGhlbiB7CisgICAgc3Ry YWNlICR0cmFjZWxldmVsCit9CisKK2xvYWRfbGliIGdkYi1weXRob24uZXhw CisKK3NldCB0ZXN0ZmlsZSAicHktZmluaXNoLWJyZWFrcG9pbnQiCitzZXQg c3JjZmlsZSAke3Rlc3RmaWxlfS5jCisKK2lmIHsgW3ByZXBhcmVfZm9yX3Rl c3RpbmcgJHt0ZXN0ZmlsZX0uZXhwICR7dGVzdGZpbGV9ICR7c3JjZmlsZX1d IH0geworICAgIHJldHVybiAtMQorfQorCitzZXQgcmVtb3RlX3B5dGhvbl9m aWxlIFtyZW1vdGVfZG93bmxvYWQgaG9zdCAke3NyY2Rpcn0vJHtzdWJkaXJ9 LyR7dGVzdGZpbGV9LnB5XQorCisKKyMgU2tpcCBhbGwgdGVzdHMgaWYgUHl0 aG9uIHNjcmlwdGluZyBpcyBub3QgZW5hYmxlZC4KK2lmIHsgW3NraXBfcHl0 aG9uX3Rlc3RzXSB9IHsgY29udGludWUgfQorCisjCisjIFRlc3QgRmluaXNo QnJlYWtwb2ludCBpbiBub3JtYWwgY29uZGl0aW9ucworIworCitjbGVhbl9y ZXN0YXJ0ICR7dGVzdGZpbGV9CisKK2lmICFbcnVudG9fbWFpbl0gdGhlbiB7 CisgICAgZmFpbCAiQ2Fubm90IHJ1biB0byBtYWluLiIKKyAgICByZXR1cm4g MAorfQorZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQgY29uZmlybSBvZmYiICJk aXNhYmxlIGNvbmZpcm1hdGlvbiIKK2dkYl90ZXN0ICJzb3VyY2UgJHJlbW90 ZV9weXRob25fZmlsZSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIgXAor ICAgICAgICAgImltcG9ydCBweXRob24gc2NyaXB0cyIKK2dkYl9icmVha3Bv aW50ICJpbmNyZWFzZV8xIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiQnJlYWtw b2ludCAuKmF0LioiICJjb250aW51ZSB0byB0aGUgZnVuY3Rpb24gdG8gZmlu aXNoIgorCisjIHNldCBGaW5pc2hCcmVha3BvaW50CisKK2dkYl90ZXN0ICJw eXRob24gZmluaXNoYnAgPSBNeUZpbmlzaEJyZWFrcG9pbnQgKGdkYi5wYXJz ZV9hbmRfZXZhbCAoJ2EnKSwgZ2RiLnNlbGVjdGVkX2ZyYW1lICgpKSIgXAor ICAgICAgICAgIlRlbXBvcmFyeSBicmVha3BvaW50LioiICJzZXQgRmluaXNo QnJlYWtwb2ludCIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZmluaXNoYnAu cmV0dXJuX3ZhbHVlIiAiTm9uZS4qIiBcCisgICAgICAgICAiY2hlY2sgcmV0 dXJuX3ZhbHVlIGF0IGluaXQiCisKKyMgY2hlY2sgbm9ybWFsIGJwIGhpdAor CitnZGJfdGVzdCAiY29udGludWUiICJNeUZpbmlzaEJyZWFrcG9pbnQgc3Rv cCB3aXRoLiojMC4qaW5jcmVhc2UuKiIgXAorICAgICAgICAgImNoZWNrIE15 RmluaXNoQnJlYWtwb2ludCBoaXQiCitnZGJfdGVzdCAicHl0aG9uIHByaW50 IGZpbmlzaGJwLnJldHVybl92YWx1ZSIgIi01LioiICJjaGVjayByZXR1cm5f dmFsdWUiCisKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZmluaXNoYnAuaXNf dmFsaWQoKSIgIkZhbHNlLioiXAorICAgICAgICAgImVuc3VyZSB0aGF0IGZp bmlzaCBicCBpcyBpbnZhbGlkIGFmZXIgbm9ybWFsIGhpdCIKKworIyBjaGVj ayBGaW5pc2hCcmVha3BvaW50IGluIG1haW4gbm8gYWxsb3dlZAorCitnZGJf dGVzdCAiZmluaXNoIiAibWFpbi4qIiAicmV0dXJuIHRvIG1haW4oKSIKK2dk Yl90ZXN0ICJweXRob24gTXlGaW5pc2hCcmVha3BvaW50IChOb25lLCBnZGIu c2VsZWN0ZWRfZnJhbWUgKCkpIiBcCisgICAgICAgICAiVmFsdWVFcnJvcjog XCJGaW5pc2hCcmVha3BvaW50XCIgbm90IG1lYW5pbmdmdWwgaW4gdGhlIG91 dGVybW9zdCBmcmFtZS4uKiIgXAorICAgICAgICAgImNoZWNrIEZpbmlzaEJQ IG5vdCBhbGxvd2VkIGluIG1haW4iCisKKyMKKyMgVGVzdCBGaW5pc2hCcmVh a3BvaW50IHdpdGggbm8gZGVidWcgc3ltYm9sIAorIworCitjbGVhbl9yZXN0 YXJ0ICR7dGVzdGZpbGV9CisKK2dkYl90ZXN0ICJzb3VyY2UgJHJlbW90ZV9w eXRob25fZmlsZSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIgXAorICAg ICAgICAgImltcG9ydCBweXRob24gc2NyaXB0cyIKK3NldCBjb25kX2xpbmUg W2dkYl9nZXRfbGluZV9udW1iZXIgIkNvbmRpdGlvbiBCcmVhay4iXQorCitp ZiAhW3J1bnRvICJnZXRwaWQiXSB0aGVuIHsKKyAgICBmYWlsICJDYW5ub3Qg cnVuIHRvIGdldHBpZC4iCisgICAgcmV0dXJuIDAKK30KKworZ2RiX3Rlc3Qg InB5dGhvbiBmaW5pc2hCUCA9IFNpbXBsZUZpbmlzaEJyZWFrcG9pbnQoZ2Ri Lm5ld2VzdF9mcmFtZSgpKSIgXAorICAgICAgICAgIlNpbXBsZUZpbmlzaEJy ZWFrcG9pbnQgaW5pdCIgXAorICAgICAgICAgInNldCBmaW5pc2ggYnJlYWtw b2ludCIKK2dkYl90ZXN0ICJjb250aW51ZSIgIlNpbXBsZUZpbmlzaEJyZWFr cG9pbnQgc3RvcC4qIiAiY2hlY2sgRmluaXNoQnJlYWtwb2ludCBoaXQiCitn ZGJfdGVzdCAicHl0aG9uIHByaW50IGZpbmlzaEJQLnJldHVybl92YWx1ZSIg Ik5vbmUiICJjaGVjayByZXR1cm4gdmFsdWUgd2l0aG91dCBkZWJ1ZyBzeW1i b2wiCisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IGluIGZ1bmN0aW9u IHJldHVybmVkIGJ5IGxvbmdqbXAgCisjCisKK2NsZWFuX3Jlc3RhcnQgJHt0 ZXN0ZmlsZX0KKworZ2RiX3Rlc3QgInNvdXJjZSAkcmVtb3RlX3B5dGhvbl9m aWxlIiAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZC4qIiBcCisgICAgICAgICAi aW1wb3J0IHB5dGhvbiBzY3JpcHRzIgorCitpZiAhW3J1bnRvIGNhbGxfbG9u Z2ptcF8xXSB0aGVuIHsKKyAgICBwZXJyb3IgImNvdWxkbid0IHJ1biB0byBi cmVha3BvaW50IGNhbGxfbG9uZ2ptcCIKKyAgICBjb250aW51ZQorfQorCitn ZGJfdGVzdCAicHl0aG9uIGZpbmlzaGJwID0gU2ltcGxlRmluaXNoQnJlYWtw b2ludChnZGIubmV3ZXN0X2ZyYW1lKCkpIiBcCisgICAgICAgICAiU2ltcGxl RmluaXNoQnJlYWtwb2ludCBpbml0IiBcCisgICAgICAgICAic2V0IGZpbmlz aCBicmVha3BvaW50IiAKK2dkYl90ZXN0ICJicmVhayBbZ2RiX2dldF9saW5l X251bWJlciAiYWZ0ZXIgbG9uZ2ptcC4iXSIgIkJyZWFrcG9pbnQuKiBhdCAu KiIgXAorICAgICAgICAgInNldCBCUCBhZnRlciB0aGUganVtcCIKK2dkYl90 ZXN0ICJjb250aW51ZSIgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgb3V0IG9m IHNjb3BlLioiIFwKKyAgICAgICAgICJjaGVjayBGaW5pc2hCUCBvdXQgb2Yg c2NvcGUgbm90aWZpY2F0aW9uIgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBm aW5pc2hicC5pc192YWxpZCgpIiAiRmFsc2UuKiJcCisgICAgICAgICAiZW5z dXJlIHRoYXQgZmluaXNoIGJwIGlzIGludmFsaWQgYWZlciBvdXQgb2Ygc2Nv cGUgbm90aWZpY2F0aW9uIgorCisjCisjIFRlc3QgRmluaXNoQnJlYWtwb2lu dCBpbiBCUCBjb25kaXRpb24gZXZhbHVhdGlvbiAKKyMgKGZpbmlzaCBpbiBk dW1teSBmcmFtZSkKKyMKKworY2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQor CitnZGJfdGVzdCAic291cmNlICRyZW1vdGVfcHl0aG9uX2ZpbGUiICJQeXRo b24gc2NyaXB0IGltcG9ydGVkLioiIFwKKyAgICAgICAgICJpbXBvcnQgcHl0 aG9uIHNjcmlwdHMiCisKKworaWYgIVtydW50b19tYWluXSB0aGVuIHsKKyAg ICBmYWlsICJDYW5ub3QgcnVuIHRvIG1haW4uIgorICAgIHJldHVybiAwCit9 CisgICAgICAgICAKK2dkYl90ZXN0ICJicmVhayAke2NvbmRfbGluZX0gaWYg dGVzdF8xKGksOCkiICJCcmVha3BvaW50IC4qIGF0IC4qIiBcCisgICAgICAg ICAic2V0IGEgY29uZGl0aW9uYWwgQlAiCitnZGJfdGVzdCAicHl0aG9uIFRl c3RCcmVha3BvaW50KCkiICJUZXN0QnJlYWtwb2ludCBpbml0IiBcCisgICAg ICAgICAic2V0IEZpbmlzaEJQIGluIGEgYnJlYWtwb2ludCBjb25kaXRpb24i CitnZGJfdGVzdCAiY29udGludWUiIFwKKyAgICAgICAgICJcIkZpbmlzaEJy ZWFrcG9pbnRcIiBjYW5ub3QgYmUgc2V0IG9uIGEgZHVtbXkgZnJhbWUuKiIg XAorICAgICAgICAgImRvbid0IGFsbG93IEZpbmlzaEJyZWFrcG9pbnQgb24g ZHVtbXkgZnJhbWVzIgorZ2RiX3Rlc3QgInByaW50IGkiICI4IiAiY2hlY2sg c3RvcHBlZCBsb2NhdGlvbiIKKworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9p bnQgaW4gQlAgY29uZGl0aW9uIGV2YWx1YXRpb24gCisjIChmaW5pc2ggaW4g bm9ybWFsIGZyYW1lKQorIworCitjbGVhbl9yZXN0YXJ0ICR7dGVzdGZpbGV9 CisKK2dkYl90ZXN0ICJzb3VyY2UgJHJlbW90ZV9weXRob25fZmlsZSIgIlB5 dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIgXAorICAgICAgICAgImltcG9ydCBw eXRob24gc2NyaXB0cyIKKworaWYgIVtydW50b19tYWluXSB0aGVuIHsKKyAg ICBmYWlsICJDYW5ub3QgcnVuIHRvIG1haW4uIgorICAgIHJldHVybiAwCit9 CisKK2dkYl90ZXN0ICJicmVhayAke2NvbmRfbGluZX0gaWYgdGVzdChpLDgp IiBcCisgICAgICAgICAiQnJlYWtwb2ludCAuKiBhdCAuKiIgInNldCBjb25k aXRpb25hbCBCUCIKK2dkYl90ZXN0ICJweXRob24gVGVzdEJyZWFrcG9pbnQo KSIgIlRlc3RCcmVha3BvaW50IGluaXQiICJzZXQgQlAgaW4gY29uZGl0aW9u IgorCitnZGJfdGVzdCAiY29udGludWUiIFwKKyAgICAgICAgICJ0ZXN0IGRv bid0IHN0b3AgMS4qdGVzdCBkb24ndCBzdG9wIDIuKnRlc3Qgc3RvcC4qRXJy b3IgaW4gdGVzdGluZyBicmVha3BvaW50IGNvbmRpdGlvbi4qVGhlIHByb2dy YW0gYmVpbmcgZGVidWdnZWQgc3RvcHBlZCB3aGlsZSBpbiBhIGZ1bmN0aW9u IGNhbGxlZCBmcm9tIEdEQi4qIiBcCisgICAgICAgICAic3RvcCBpbiBjb25k aXRpb24gZnVuY3Rpb24iCisKK2dkYl90ZXN0ICJjb250aW51ZSIgIkNvbnRp bnVpbmcuKiIgImZpbmlzaCBjb25kaXRpb24gZXZhbHVhdGlvbiIKK2dkYl90 ZXN0ICJjb250aW51ZSIgIkJyZWFrcG9pbnQuKiIgInN0b3AgYXQgY29uZGl0 aW9uYWwgYnJlYWtwb2ludCIKK2dkYl90ZXN0ICJwcmludCBpIiAiOCIgImNo ZWNrIHN0b3BwZWQgbG9jYXRpb24iCisKKyMKKyMgVGVzdCBGaW5pc2hCcmVh a3BvaW50IGluIGV4cGxpY2l0IGluZmVyaW9yIGZ1bmN0aW9uIGNhbGwKKyMK KworY2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQorCitnZGJfdGVzdCAic291 cmNlICRyZW1vdGVfcHl0aG9uX2ZpbGUiICJQeXRob24gc2NyaXB0IGltcG9y dGVkLioiIFwKKyAgICAgICAgICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMiCisK K2lmICFbcnVudG9fbWFpbl0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90IHJ1 biB0byBtYWluLiIKKyAgICByZXR1cm4gMAorfQorCisjIHJldHVybiBhZGRy ZXNzIGluIGR1bW15IGZyYW1lCisKK2dkYl90ZXN0ICJweXRob24gVGVzdEV4 cGxpY2l0QnJlYWtwb2ludCgnaW5jcmVhc2VfMScpIiAiQnJlYWtwb2ludC4q YXQuKiIgXAorICAgICAgICAgInByZXBhcmUgVGVzdEV4cGxpY2l0QnJlYWtw b2ludCIKK2dkYl90ZXN0ICJwcmludCBpbmNyZWFzZV8xKCZpKSIgXAorICAg ICAgICAgIlwiRmluaXNoQnJlYWtwb2ludFwiIGNhbm5vdCBiZSBzZXQgb24g YSBkdW1teSBmcmFtZS4qIiBcCisgICAgICAgICAiZG9uJ3QgYWxsb3cgRmlu aXNoQnJlYWtwb2ludCBvbiBkdW1teSBmcmFtZXMiCisKKyMgcmV0dXJuIGFk ZHJlc3MgaW4gbm9ybWFsIGZyYW1lCisKK2RlbGV0ZV9icmVha3BvaW50cwor Z2RiX3Rlc3QgInB5dGhvbiBUZXN0RXhwbGljaXRCcmVha3BvaW50KFwiaW5j cmVhc2VfMVwiKSIgIkJyZWFrcG9pbnQuKmF0LioiIFwKKyAgICAgICAgICJw cmVwYXJlIFRlc3RFeHBsaWNpdEJyZWFrcG9pbnQiCitnZGJfdGVzdCAicHJp bnQgaW5jcmVhc2UoJmkpIiBcCisgICAgICAgICAiU2ltcGxlRmluaXNoQnJl YWtwb2ludCBpbml0LipTaW1wbGVGaW5pc2hCcmVha3BvaW50IHN0b3AuKlRo ZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIHN0b3BwZWQgd2hpbGUgaW4gYSBm dW5jdGlvbiBjYWxsZWQgZnJvbSBHREIuKiIgXAorICAgICAgICAgIkZpbmlz aEJQIHN0b3AgYXQgZHVyaW5nIGV4cGxpY2l0IGZ1bmN0aW9uIGNhbGwiCisK KworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgd2hlbiBpbmZlcmlvciBl eGl0cworIworCitpZiAhW3J1bnRvICJ0ZXN0X2V4ZWNfZXhpdCJdIHRoZW4g eworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8gdGVzdF9leGVjX2V4aXQuIgor ICAgIHJldHVybiAwCit9CisKK2dkYl90ZXN0ICJweXRob24gU2ltcGxlRmlu aXNoQnJlYWtwb2ludChnZGIubmV3ZXN0X2ZyYW1lKCkpIiAiU2ltcGxlRmlu aXNoQnJlYWtwb2ludCBpbml0IiAic2V0IEZpbmlzaEJQIGFmdGVyIHRoZSBl eGl0KCkiCitnZGJfdGVzdCAiY29udGludWUiICJTaW1wbGVGaW5pc2hCcmVh a3BvaW50IG91dCBvZiBzY29wZS4qIiAiY2F0Y2ggb3V0IG9mIHNjb3BlIGFm dGVyIGV4aXQiCisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IHdoZW4g aW5mZXJpb3IgZXhlY3MKKyMKKworaWYgIVtydW50byAidGVzdF9leGVjX2V4 aXQiXSB0aGVuIHsKKyAgICBmYWlsICJDYW5ub3QgcnVuIHRvIHRlc3RfZXhl Y19leGl0LiIKKyAgICByZXR1cm4gMAorfSAgICAgCisKK2dkYl90ZXN0X25v X291dHB1dCAic2V0IHZhciBkb19leGl0ID0gMCIgInN3aXRjaCB0byBleGVj dmUoKSB0ZXN0IgorZ2RiX3Rlc3QgInB5dGhvbiBTaW1wbGVGaW5pc2hCcmVh a3BvaW50KGdkYi5uZXdlc3RfZnJhbWUoKSkiICJTaW1wbGVGaW5pc2hCcmVh a3BvaW50IGluaXQiICJzZXQgRmluaXNoQlAgYWZ0ZXIgdGhlIGV4ZWMiCitn ZGJfdGVzdCAiY2F0Y2ggZXhlYyIgIkNhdGNocG9pbnQuKlwoZXhlY1wpLioi ICJjYXRjaCBleGVjIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiU2ltcGxlRmlu aXNoQnJlYWtwb2ludCBvdXQgb2Ygc2NvcGUuKiIgImNhdGNoIG91dCBvZiBz Y29wZSBhZnRlciBleGVjIgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK ZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5p c2gtYnJlYWtwb2ludC5weSBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1maW5pc2gtYnJlYWtwb2ludC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5hZGYxMGIwCi0tLSAvZGV2L251bGwKKysrIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LnB5 CkBAIC0wLDAgKzEsODggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2Yg dGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgor CisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAg SXQgdGVzdHMgcHl0aG9uIEZpbmlzaAorIyBCcmVha3BvaW50cy4KKwkJCitj bGFzcyBNeUZpbmlzaEJyZWFrcG9pbnQoZ2RiLkZpbmlzaEJyZWFrcG9pbnQp OgorCWRlZiBfX2luaXRfXyhzZWxmLCB2YWwsIGZyYW1lKToKKwkJZ2RiLkZp bmlzaEJyZWFrcG9pbnQuX19pbml0X18gKHNlbGYsIGZyYW1lKQorCQlwcmlu dCAiTXlGaW5pc2hCcmVha3BvaW50IGluaXQiCisJCXNlbGYudmFsID0gdmFs CisJCQorCWRlZiBzdG9wKHNlbGYpOgorCQlwcmludCAiTXlGaW5pc2hCcmVh a3BvaW50IHN0b3Agd2l0aCAlZCIgJSBpbnQoc2VsZi52YWwuZGVyZWZlcmVu Y2UoKSkKKwkJZ2RiLmV4ZWN1dGUoIndoZXJlIDEiKQorCQlyZXR1cm4gVHJ1 ZQorCQorCWRlZiBvdXRfb2Zfc2NvcGUoc2VsZik6CisJCXByaW50ICJNeUZp bmlzaEJyZWFrcG9pbnQgb3V0IG9mIHNjb3BlLi4uIgorCitjbGFzcyBUZXN0 QnJlYWtwb2ludChnZGIuQnJlYWtwb2ludCk6CisgICAgZGVmIF9faW5pdF9f KHNlbGYpOgorICAgICAgICBnZGIuQnJlYWtwb2ludC5fX2luaXRfXyhzZWxm LCBzcGVjPSJ0ZXN0XzEiLCBpbnRlcm5hbD0xKQorICAgICAgICBzZWxmLnNp bGVudCA9IFRydWUKKyAgICAgICAgc2VsZi5jb3VudCA9IDAKKyAgICAgICAg cHJpbnQgIlRlc3RCcmVha3BvaW50IGluaXQiCisgICAgICAgIAorICAgIGRl ZiBzdG9wKHNlbGYpOgorICAgIAlzZWxmLmNvdW50ICs9IDEKKyAgICAJdHJ5 OgorICAgICAgICAJVGVzdEZpbmlzaEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9m cmFtZSgpLCBzZWxmLmNvdW50KQorICAgICAgICBleGNlcHQgVmFsdWVFcnJv ciBhcyBlOgorICAgICAgICAJcHJpbnQgZQorICAgICAgICByZXR1cm4gRmFs c2UKKworY2xhc3MgVGVzdEZpbmlzaEJyZWFrcG9pbnQoZ2RiLkZpbmlzaEJy ZWFrcG9pbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcmFtZSwgY291 bnQpOgorICAgIAlzZWxmLmNvdW50ID0gY291bnQKKyAgICAgICAgZ2RiLkZp bmlzaEJyZWFrcG9pbnQuX19pbml0X18oc2VsZiwgZnJhbWUsIGludGVybmFs PTEpCisgICAgICAgIAorICAgICAgICAKKyAgICBkZWYgc3RvcChzZWxmKToK KyAgICAgICAgcHJpbnQgIi0tPiIsIHNlbGYubnVtYmVyCisgICAgICAgIGlm IChzZWxmLmNvdW50ID09IDMpOgorICAgICAgICAgICAgcHJpbnQgInRlc3Qg c3RvcCAuLi4gJWQiICUgc2VsZi5jb3VudAorICAgICAgICAgICAgcmV0dXJu IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICJ0ZXN0 IGRvbid0IHN0b3AgJWQiICUgc2VsZi5jb3VudAorICAgICAgICAgICAgcmV0 dXJuIEZhbHNlIAorICAgICAgICAKKyAgICAKKyAgICBkZWYgb3V0X29mX3Nj b3BlKHNlbGYpOgorICAgICAgICBwcmludCAidGVzdCBkaWRuJ3QgZmluaXNo IC4uLiAlZCIgJSBzZWxmLmNvdW50CisKK2NsYXNzIFRlc3RFeHBsaWNpdEJy ZWFrcG9pbnQoZ2RiLkJyZWFrcG9pbnQpOgorCWRlZiBzdG9wKHNlbGYpOgor CQl0cnk6CisJCQlTaW1wbGVGaW5pc2hCcmVha3BvaW50KGdkYi5uZXdlc3Rf ZnJhbWUoKSkKKwkJZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKwkJCXByaW50 IGUKKwkJcmV0dXJuIEZhbHNlCisKK2NsYXNzIFNpbXBsZUZpbmlzaEJyZWFr cG9pbnQoZ2RiLkZpbmlzaEJyZWFrcG9pbnQpOgorCWRlZiBfX2luaXRfXyhz ZWxmLCBmcmFtZSk6CisJCWdkYi5GaW5pc2hCcmVha3BvaW50Ll9faW5pdF9f IChzZWxmLCBmcmFtZSkKKwkJCisJCXByaW50ICJTaW1wbGVGaW5pc2hCcmVh a3BvaW50IGluaXQiCisJCQorCWRlZiBzdG9wKHNlbGYpOgorCQlwcmludCAi U2ltcGxlRmluaXNoQnJlYWtwb2ludCBzdG9wIiAKKwkJcmV0dXJuIFRydWUK KwkKKwlkZWYgb3V0X29mX3Njb3BlKHNlbGYpOgorCQlwcmludCAiU2ltcGxl RmluaXNoQnJlYWtwb2ludCBvdXQgb2Ygc2NvcGUuLi4iCisKK3ByaW50ICJQ eXRob24gc2NyaXB0IGltcG9ydGVkZCIKZGlmZiAtLWdpdCBhL2dkYi90ZXN0 c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIuY2MgYi9n ZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQy LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZWVh MDYKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktZmluaXNoLWJyZWFrcG9pbnQyLmNjCkBAIC0wLDAgKzEsNTkgQEAK Ky8qIFRoaXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVi dWdnZXIuCisKKyAgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBu b3QsIHNlZSAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8K KworCisjaW5jbHVkZSA8aW9zdHJlYW0+CisKK3ZvaWQKK3Rocm93X2V4Y2Vw dGlvbl8xIChpbnQgZSkKK3sKKyAgdGhyb3cgbmV3IGludCAoZSk7Cit9CisK K3ZvaWQKK3Rocm93X2V4Y2VwdGlvbiAoaW50IGUpCit7CisgIHRocm93X2V4 Y2VwdGlvbl8xIChlKTsKK30KKworaW50CittYWluICh2b2lkKQoreworICBp bnQgaTsKKyAgdHJ5CisgICAgeworICAgICAgdGhyb3dfZXhjZXB0aW9uXzEg KDEwKTsKKyAgICB9CisgIGNhdGNoIChjb25zdCBpbnQgKmUpCisgICAgewor ICAgICAgICBzdGQ6OmNlcnIgPDwgIkV4Y2VwdGlvbiAjIiA8PCAqZSA8PCBz dGQ6OmVuZGw7CisgICAgfQorICBpICs9IDE7IC8qIEJyZWFrIGFmdGVyIGV4 Y2VwdGlvbiAxLiAgKi8KKworICB0cnkKKyAgICB7CisgICAgICB0aHJvd19l eGNlcHRpb24gKDEwKTsKKyAgICB9CisgIGNhdGNoIChjb25zdCBpbnQgKmUp CisgICAgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIkV4Y2VwdGlvbiAjIiA8 PCAqZSA8PCBzdGQ6OmVuZGw7CisgICAgfQorICBpICs9IDE7IC8qIEJyZWFr IGFmdGVyIGV4Y2VwdGlvbiAyLiAgKi8KKworICByZXR1cm4gaTsKK30KZGlm ZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gt YnJlYWtwb2ludDIuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LWZpbmlzaC1icmVha3BvaW50Mi5leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uZmFlNzk4YwotLS0gL2Rldi9udWxsCisrKyBiL2dk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIu ZXhwCkBAIC0wLDAgKzEsNjUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAz IG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0RCIHRlc3RzdWl0 ZS4gIEl0IHRlc3RzIHRoZSBtZWNoYW5pc20KKyMgZXhwb3NpbmcgdmFsdWVz IHRvIFB5dGhvbi4KKworaWYgJHRyYWNlbGV2ZWwgdGhlbiB7CisgICAgc3Ry YWNlICR0cmFjZWxldmVsCit9CisKK2xvYWRfbGliIGdkYi1weXRob24uZXhw CisKK3NldCB0ZXN0ZmlsZSAicHktZmluaXNoLWJyZWFrcG9pbnQyIgorc2V0 IHNyY2ZpbGUgJHt0ZXN0ZmlsZX0uY2MKK3NldCBiaW5maWxlICR7b2JqZGly fS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0KK3NldCBweWZpbGUgICR7c3JjZGly fS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0ucHkKKworIyBTdGFydCB3aXRoIGEg ZnJlc2ggZ2RiLgorZ2RiX2V4aXQKK2dkYl9zdGFydAorZ2RiX3JlaW5pdGlh bGl6ZV9kaXIgJHNyY2Rpci8kc3ViZGlyCitnZGJfbG9hZCAke2JpbmZpbGV9 CisKK2lmIHsgW2dkYl9jb21waWxlICIke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7 c3JjZmlsZX0iICIke2JpbmZpbGV9IiBleGVjdXRhYmxlIHtkZWJ1ZyBjKyt9 XSAhPSAiIiB9IHsKKyAgICB1bnRlc3RlZCAiQ291bGRuJ3QgY29tcGlsZSAk e3NyY2ZpbGV9IgorICAgIHJldHVybiAtMQorfQorCitpZiAhW3J1bnRvX21h aW5dIHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8gbWFpbi4iCisg ICAgcmV0dXJuIDAKK30KKworIworIyBDaGVjayBGaW5pc2hCcmVha3BvaW50 cyBhZ2FpbnN0IEMrKyBleGNlcHRpb25zCisjCisKK2dkYl9icmVha3BvaW50 IFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJCcmVhayBhZnRlciBleGNlcHRpb24g MiJdCisKK2dkYl90ZXN0ICJzb3VyY2UgJHB5ZmlsZSIgIi4qUHl0aG9uIHNj cmlwdCBpbXBvcnRlZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhvbiBz Y3JpcHRzIgorICAgICAgICAgCitnZGJfYnJlYWtwb2ludCAidGhyb3dfZXhj ZXB0aW9uXzEiCitnZGJfdGVzdCAiY29udGludWUiICJCcmVha3BvaW50IC4q dGhyb3dfZXhjZXB0aW9uXzEuKiIgInJ1biB0byBleGNlcHRpb24gMSIKKwor Z2RiX3Rlc3QgInB5dGhvbiBwcmludCBsZW4oZ2RiLmJyZWFrcG9pbnRzKCkp IiAiMyIgImNoZWNrIEJQIGNvdW50IgorZ2RiX3Rlc3QgInB5dGhvbiBFeGNl cHRpb25GaW5pc2hCcmVha3BvaW50KGdkYi5uZXdlc3RfZnJhbWUoKSkiICJp bml0IEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9pbnQiICJzZXQgRmluaXNoQlAg YWZ0ZXIgdGhlIGV4Y2VwdGlvbiIKK2dkYl90ZXN0ICJjb250aW51ZSIgIi4q c3RvcHBlZCBhdCBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50LioiICJjaGVj ayBGaW5pc2hCcmVha3BvaW50IGluIGNhdGNoKCkiCitnZGJfdGVzdCAicHl0 aG9uIHByaW50IGxlbihnZGIuYnJlYWtwb2ludHMoKSkiICIzIiAiY2hlY2sg ZmluaXNoIEJQIHJlbW92YWwiCisKK2dkYl90ZXN0ICJjb250aW51ZSIgIi4q QnJlYWtwb2ludC4qIHRocm93X2V4Y2VwdGlvbl8xLioiICJjb250aW51ZSB0 byBzZWNvbmQgZXhjZXB0aW9uIgorZ2RiX3Rlc3QgInB5dGhvbiBFeGNlcHRp b25GaW5pc2hCcmVha3BvaW50KGdkYi5uZXdlc3RfZnJhbWUoKSkiICJpbml0 IEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9pbnQiICJzZXQgRmluaXNoQlAgYWZ0 ZXIgdGhlIGV4Y2VwdGlvbiIKK2dkYl90ZXN0ICJjb250aW51ZSIgIi4qZXhj ZXB0aW9uIGRpZCBub3QgZmluaXNoLioiICJGaW5pc2hCcmVha3BvaW50IHdp dGggZXhjZXB0aW9uIHRocm93biBub3QgY2F1Z2h0IgpkaWZmIC0tZ2l0IGEv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50 Mi5weSBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJl YWtwb2ludDIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uOWVhNGNmMQotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIucHkKQEAgLTAsMCAr MSwzNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5z ZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNl ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBm aWxlIGlzIHBhcnQgb2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyBw eXRob24gRmluaXNoCisjIEJyZWFrcG9pbnRzLgorCitjbGFzcyBFeGNlcHRp b25GaW5pc2hCcmVha3BvaW50KGdkYi5GaW5pc2hCcmVha3BvaW50KToKKyAg ICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWUpOgorICAgICAgICBnZGIuRmlu aXNoQnJlYWtwb2ludC5fX2luaXRfXyhzZWxmLCBmcmFtZSwgaW50ZXJuYWw9 MSkKKyAgICAgICAgc2VsZi5zaWxlbnQgPSBUcnVlOworICAgICAgICBwcmlu dCAiaW5pdCBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50IgorICAgICAgICAK KyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgcHJpbnQgInN0b3BwZWQg YXQgRXhjZXB0aW9uRmluaXNoQnJlYWtwb2ludCIKKyAgICAgICAgZ2RiLnBv c3RfZXZlbnQoc2VsZi5kZWxldGUpCisgICAgICAgIHJldHVybiBUcnVlIAor ICAgIAorICAgIGRlZiBvdXRfb2Zfc2NvcGUoc2VsZik6CisgICAgICAgIHBy aW50ICJleGNlcHRpb24gZGlkIG5vdCBmaW5pc2ggLi4uIgorCisKK3ByaW50 ICJQeXRob24gc2NyaXB0IGltcG9ydGVkIgotLSAKMS43LjYuNAoK --20cf3079c0b4a7301c04b0e97786--