From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7088 invoked by alias); 2 Nov 2011 14:44:11 -0000 Received: (qmail 7065 invoked by uid 22791); 2 Nov 2011 14:44:03 -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-vx0-f169.google.com (HELO mail-vx0-f169.google.com) (209.85.220.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 02 Nov 2011 14:43:41 +0000 Received: by vcbfl17 with SMTP id fl17so257284vcb.0 for ; Wed, 02 Nov 2011 07:43:40 -0700 (PDT) Received: by 10.220.142.8 with SMTP id o8mr360577vcu.38.1320245020140; Wed, 02 Nov 2011 07:43:40 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.180.75 with HTTP; Wed, 2 Nov 2011 07:43:19 -0700 (PDT) In-Reply-To: References: From: Kevin Pouget Date: Wed, 02 Nov 2011 14:44: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=f46d043890b971258f04b0c17fac 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/msg00039.txt.bz2 --f46d043890b971258f04b0c17fac Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 15367 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 ((PyO= bject *) 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 breakpoin= t. =A0*/ > Kevin> + =A0PyObject *function_type; > Kevin> + =A0/* gdb.Type object of the value return by the breakpointed fu= nction. =A0*/ > Kevin> + =A0PyObject *return_type; > Kevin> + =A0/* When stopped at this FinishBreakpoint, value returned by t= he function; > Kevin> + =A0 =A0 Py_None if the value is not computable; NULL if GDB is n= ot 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 *p= y_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_obje= ct_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 propagate. 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_ob= ject =3D=3D self) > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0bpfinish_stopped_at_finish_bp (self_f= inishbp); > 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_ob= ject *) > 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 th= e 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\" canno= t 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 value= 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 a= re 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: /* gdb.Type object of the value return by the breakpointed function. May be NULL if no debug information was available or return type was VOID. */ PyObject *return_type; /* gdb.Type object of the function finished by this breakpoint. Will be NULL if return_type is NULL. */ PyObject *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 (S= YMBOL_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_t= o_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_T= YPE (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_KeyboardInterrupt= : 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 t= here) > 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_o= bject_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, NUL= L); > 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, i= f any let me know if this is not the right way to do > Kevin> +struct breakpoint *gdbpy_is_stopped_at_finish_bp (bpstat stop_bps= tat); > 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. This would > segregate the changes in the python subdirectory. This may be best. > Alternatively you could make a bp_finish breakpoint. I'm not sure > whether this is sufficient or whether you would also need an additional > flag. If the latter you could make a bp_finish_python or something like > 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 (tested with no regression against 7.3.50.20111028-cvs, Fedora-15 X86_64) 2011-11-02 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. --f46d043890b971258f04b0c17fac 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_guifh3s20 Content-length: 75083 RnJvbSAzZjI2YmFhNmU5NjlmYmRiODc3OGZmODdhZjcwMWU0Zjg3NzZiMTU5 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLZXZpbiBQb3VnZXQg PGtldmluLnBvdWdldEBzdC5jb20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMTEg MTM6NTk6MjMgKzAyMDAKU3ViamVjdDogW1BBVENIXSBJbnRyb2R1Y2UgZ2Ri LkZpbmlzaEJyZWFrcG9pbnRzCgotLS0KIGdkYi9NYWtlZmlsZS5pbiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBnZGIv TkVXUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDQgKwogZ2RiL2RvYy9nZGIudGV4aW5mbyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDUwICsrKwogZ2RiL2luZmNtZC5jICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIxICst CiBnZGIvaW5mZXJpb3IuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgIDMgKwogZ2RiL2luZnJ1bi5jICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICstCiBnZGIvcHl0aG9u L3B5LWJyZWFrcG9pbnQuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg NTAgKy0tCiBnZGIvcHl0aG9uL3B5LWZpbmlzaGJyZWFrcG9pbnQuYyAgICAg ICAgICAgICAgICAgICB8ICA0NDIgKysrKysrKysrKysrKysrKysrKysKIGdk Yi9weXRob24vcHktZnJhbWUuYyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAzMiArLQogZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaCAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDQ3ICsrLQogZ2RiL3B5dGhvbi9w eXRob24uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2 ICsKIGdkYi9weXRob24vcHl0aG9uLmggICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAgMyArCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24v cHktYnJlYWtwb2ludC5leHAgICAgICAgICB8ICAgIDcgKy0KIGdkYi90ZXN0 c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5jICAgIHwg ICA5NyArKysrKwogZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlz aC1icmVha3BvaW50LmV4cCAgfCAgMjMwICsrKysrKysrKysKIGdkYi90ZXN0 c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5weSAgIHwg ICA4OCArKysrCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNo LWJyZWFrcG9pbnQyLmNjICB8ICAgNTkgKysrCiBnZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLmV4cCB8ICAgNjUgKysr CiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9p bnQyLnB5ICB8ICAgMzQgKysKIDE5IGZpbGVzIGNoYW5nZWQsIDExODcgaW5z ZXJ0aW9ucygrKSwgNjYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2RiL3B5dGhvbi9weS1maW5pc2hicmVha3BvaW50LmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNo LWJyZWFrcG9pbnQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3Vp dGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5leHAKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmlu aXNoLWJyZWFrcG9pbnQucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLmNjCiBj cmVhdGUgbW9kZSAxMDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LWZpbmlzaC1icmVha3BvaW50Mi5leHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBn ZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQy LnB5CgpkaWZmIC0tZ2l0IGEvZ2RiL01ha2VmaWxlLmluIGIvZ2RiL01ha2Vm aWxlLmluCmluZGV4IDMyZDhlZjMuLjZjZWRmMTIgMTAwNjQ0Ci0tLSBhL2dk Yi9NYWtlZmlsZS5pbgorKysgYi9nZGIvTWFrZWZpbGUuaW4KQEAgLTI4Nyw2 ICsyODcsNyBAQCBTVUJESVJfUFlUSE9OX09CUyA9IFwKIAlweS1ldnRyZWdp c3RyeS5vIFwKIAlweS1ldnRzLm8gXAogCXB5LWV4aXRlZGV2ZW50Lm8gXAor CXB5LWZpbmlzaGJyZWFrcG9pbnQubyBcCiAJcHktZnJhbWUubyBcCiAJcHkt ZnVuY3Rpb24ubyBcCiAJcHktaW5mZXJpb3IubyBcCkBAIC0zMTgsNiArMzE5 LDcgQEAgU1VCRElSX1BZVEhPTl9TUkNTID0gXAogCXB5dGhvbi9weS1ldnRy ZWdpc3RyeS5jIFwKIAlweXRob24vcHktZXZ0cy5jIFwKIAlweXRob24vcHkt ZXhpdGVkZXZlbnQuYyBcCisJcHl0aG9uL3B5LWZpbmlzaGJyZWFrcG9pbnQu YyBcCiAJcHl0aG9uL3B5LWZyYW1lLmMgXAogCXB5dGhvbi9weS1mdW5jdGlv bi5jIFwKIAlweXRob24vcHktaW5mZXJpb3IuYyBcCkBAIC0yMTAzLDYgKzIx MDUsMTAgQEAgcHktZXhpdGVkZXZlbnQubzogJChzcmNkaXIpL3B5dGhvbi9w eS1leGl0ZWRldmVudC5jCiAJJChDT01QSUxFKSAkKFBZVEhPTl9DRkxBR1Mp ICQoc3JjZGlyKS9weXRob24vcHktZXhpdGVkZXZlbnQuYwogCSQoUE9TVENP TVBJTEUpCiAKK3B5LWZpbmlzaGJyZWFrcG9pbnQubzogJChzcmNkaXIpL3B5 dGhvbi9weS1maW5pc2hicmVha3BvaW50LmMKKwkkKENPTVBJTEUpICQoUFlU SE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS1maW5pc2hicmVha3Bv aW50LmMKKwkkKFBPU1RDT01QSUxFKQorCiBweS1mcmFtZS5vOiAkKHNyY2Rp cikvcHl0aG9uL3B5LWZyYW1lLmMKIAkkKENPTVBJTEUpICQoUFlUSE9OX0NG TEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS1mcmFtZS5jCiAJJChQT1NUQ09N UElMRSkKZGlmZiAtLWdpdCBhL2dkYi9ORVdTIGIvZ2RiL05FV1MKaW5kZXgg NWNkYjYzZS4uOTJjZTQ5MCAxMDA2NDQKLS0tIGEvZ2RiL05FV1MKKysrIGIv Z2RiL05FV1MKQEAgLTQ4LDYgKzQ4LDEwIEBACiAgICoqIFRoZSAiZ2RiLmJy ZWFrcG9pbnQiIGZ1bmN0aW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2 b3Igb2YKICAgICAgImdkYi5icmVha3BvaW50cyIuCiAKKyAgKiogQSBuZXcg Y2xhc3MgImdkYi5GaW5pc2hCcmVha3BvaW50IiBpcyBwcm92aWRlZCB0byBj YXRjaCB0aGUgcmV0dXJuCisgICAgIG9mIGEgZnVuY3Rpb24uICBUaGlzIGNs YXNzIGlzIGJhc2VkIG9uIHRoZSAiZmluaXNoIiBjb21tYW5kCisgICAgIGF2 YWlsYWJsZSBpbiB0aGUgQ0xJLiAKKwogICAqKiBUeXBlIG9iamVjdHMgZm9y IHN0cnVjdCBhbmQgdW5pb24gdHlwZXMgbm93IGFsbG93IGFjY2VzcyB0bwog ICAgICB0aGUgZmllbGRzIHVzaW5nIHN0YW5kYXJkIFB5dGhvbiBkaWN0aW9u YXJ5IChtYXBwaW5nKSBtZXRob2RzLgogICAgICBGb3IgZXhhbXBsZSwgInNv bWVfdHlwZVsnbXlmaWVsZCddIiBub3cgd29ya3MsIGFzIGRvZXMKZGlmZiAt LWdpdCBhL2dkYi9kb2MvZ2RiLnRleGluZm8gYi9nZGIvZG9jL2dkYi50ZXhp bmZvCmluZGV4IDNlNzg4MzIuLjg5ZjhiYWYgMTAwNjQ0Ci0tLSBhL2dkYi9k b2MvZ2RiLnRleGluZm8KKysrIGIvZ2RiL2RvYy9nZGIudGV4aW5mbwpAQCAt MjEyODksNiArMjEyODksOCBAQCBzaXR1YXRpb24sIGEgUHl0aG9uIEBjb2Rl e0tleWJvYXJkSW50ZXJydXB0fSBleGNlcHRpb24gaXMgdGhyb3duLgogKiBT eW1ib2wgVGFibGVzIEluIFB5dGhvbjo6ICAgICBQeXRob24gcmVwcmVzZW50 YXRpb24gb2Ygc3ltYm9sIHRhYmxlcy4KICogTGF6eSBTdHJpbmdzIEluIFB5 dGhvbjo6ICAgICAgUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIGxhenkgc3Ry aW5ncy4KICogQnJlYWtwb2ludHMgSW4gUHl0aG9uOjogICAgICAgTWFuaXB1 bGF0aW5nIGJyZWFrcG9pbnRzIHVzaW5nIFB5dGhvbi4KKyogRmluaXNoIEJy ZWFrcG9pbnRzIGluIFB5dGhvbjo6IFNldHRpbmcgQnJlYWtwb2ludHMgb24g ZnVuY3Rpb24gcmV0dXJuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVzaW5nIFB5dGhvbi4KIEBlbmQgbWVudQogCiBAbm9kZSBCYXNpYyBQ eXRob24KQEAgLTI0MTIzLDYgKzI0MTI1LDU0IEBAIGNvbW1hbmRzLCBzZXBh cmF0ZWQgYnkgbmV3bGluZXMuICBJZiB0aGVyZSBhcmUgbm8gY29tbWFuZHMs IHRoaXMKIGF0dHJpYnV0ZSBpcyBAY29kZXtOb25lfS4gIFRoaXMgYXR0cmli dXRlIGlzIG5vdCB3cml0YWJsZS4KIEBlbmQgZGVmdmFyCiAKK0Bub2RlIEZp bmlzaCBCcmVha3BvaW50cyBpbiBQeXRob24KK0BzdWJzdWJzZWN0aW9uIEZp bmlzaCBCcmVha3BvaW50cworCitAY2luZGV4IHB5dGhvbiBmaW5pc2ggYnJl YWtwb2ludHMKK0B0aW5kZXggZ2RiLkZpbmlzaEJyZWFrcG9pbnQKKworQSBm aW5pc2ggYnJlYWtwb2ludCBpcyBhIHRlbXBvcmFyeSBicmVha3BvaW50IHNl dCBhdCB0aGUgcmV0dXJuIGFkZHJlc3Mgb2YKK2EgZnJhbWUsIGJhc2VkIG9u IHRoZSBAY29kZXtmaW5pc2h9IGNvbW1hbmQuICBAY29kZXtnZGIuRmluaXNo QnJlYWtwb2ludH0KK2V4dGVuZHMgQGNvZGV7Z2RiLkJyZWFrcG9pbnR9LiAg VGhlIHVuZGVybHlpbmcgYnJlYWtwb2ludCB3aWxsIGJlIGRpc2FibGVkIAor YW5kIGRlbGV0ZWQgd2hlbiB0aGUgZXhlY3V0aW9uIHdpbGwgcnVuIG91dCBv ZiB0aGUgYnJlYWtwb2ludCBzY29wZSAoaS5lLkA6IAorQGNvZGV7QnJlYWtw b2ludC5zdG9wfSBvciBAY29kZXtGaW5pc2hCcmVha3BvaW50Lm91dF9vZl9z Y29wZX0gdHJpZ2dlcmVkKS4KKworQGRlZnVuIEZpbmlzaEJyZWFrcG9pbnQu X19pbml0X18gKEB2YXJ7ZnJhbWV9LCBAcntbfUB2YXJ7aW50ZXJuYWx9QHJ7 XX0pCitDcmVhdGUgYSBmaW5pc2ggYnJlYWtwb2ludCBhdCB0aGUgcmV0dXJu IGFkZHJlc3Mgb2YgdGhlIEBjb2Rle2dkYi5GcmFtZX0KK29iamVjdCBAdmFy e2ZyYW1lfS4gIFRoZSBvcHRpb25hbCBAdmFye2ludGVybmFsfSBhcmd1bWVu dCBhbGxvd3MgdGhlCiticmVha3BvaW50IHRvIGJlY29tZSBpbnZpc2libGUg dG8gdGhlIHVzZXIuICBAeHJlZntCcmVha3BvaW50cyBJbiBQeXRob259LAor Zm9yIGZ1cnRoZXIgZGV0YWlscyBhYm91dCB0aGlzIGFyZ3VtZW50LgorQGVu ZCBkZWZ1bgorCitAZGVmdW4gRmluaXNoQnJlYWtwb2ludC5vdXRfb2Zfc2Nv cGUgKHNlbGYpCitJbiBzb21lIGNpcmN1bXN0YW5jZXMgKGUuZy5AOiBAY29k ZXtsb25nam1wfSwgQ0B0eysrfSBleGNlcHRpb25zLCBAdmFsdWV7R0RCTn0g CitAY29kZXtyZXR1cm59IGNvbW1hbmQsIEBkb3Rze30pLCBhIGZ1bmN0aW9u IG1heSBub3QgcHJvcGVybHkgdGVybWluYXRlLCBhbmQKK3RodXMgbmV2ZXIg aGl0IHRoZSBmaW5pc2ggYnJlYWtwb2ludC4gIFdoZW4gQHZhbHVle0dEQk59 IG5vdGljZXMgc3VjaCBhCitzaXR1YXRpb24sIHRoZSBAY29kZXtvdXRfb2Zf c2NvcGV9IGNhbGxiYWNrIHdpbGwgYmUgdHJpZ2dlcmVkLgorCitZb3UgbWF5 IHdhbnQgdG8gc3ViLWNsYXNzIEBjb2Rle2dkYi5GaW5pc2hCcmVha3BvaW50 fSBhbmQgb3ZlcnJpZGUgdGhpcworbWV0aG9kOgorCitAc21hbGxleGFtcGxl CitjbGFzcyBNeUZpbmlzaEJyZWFrcG9pbnQgKGdkYi5GaW5pc2hCcmVha3Bv aW50KQorICAgIGRlZiBzdG9wIChzZWxmKToKKyAgICAgICAgcHJpbnQgIm5v cm1hbCBmaW5pc2giCisgICAgICAgIHJldHVybiBUcnVlCisgICAgCisgICAg ZGVmIG91dF9vZl9zY29wZSAoKToKKyAgICAgICAgcHJpbnQgImFibm9ybWFs IGZpbmlzaCIKK0BlbmQgc21hbGxleGFtcGxlIAorQGVuZCBkZWZ1bgorCitA ZGVmdmFyIEZpbmlzaEJyZWFrcG9pbnQucmV0dXJuX3ZhbHVlCitXaGVuIEB2 YWx1ZXtHREJOfSBpcyBzdG9wcGVkIGF0IGEgZmluaXNoIGJyZWFrcG9pbnQg YW5kIHRoZSBmcmFtZSAKK3VzZWQgdG8gYnVpbGQgdGhlIEBjb2Rle2dkYi5G aW5pc2hCcmVha3BvaW50fSBvYmplY3QgaGFkIGRlYnVnIHN5bWJvbHMsIHRo aXMKK2F0dHJpYnV0ZSB3aWxsIGNvbnRhaW4gYSBAY29kZXtnZGIuVmFsdWV9 IG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXR1cm4KK3ZhbHVlIG9m IHRoZSBmdW5jdGlvbi4gIFRoZSB2YWx1ZSB3aWxsIGJlIEBjb2Rle05vbmV9 IGlmIHRoZSBmdW5jdGlvbiByZXR1cm4gCit0eXBlIGlzIEBjb2Rle1ZPSUR9 IG9yIGlmIHRoZSByZXR1cm4gdmFsdWUgd2FzIG5vdCBjb21wdXRhYmxlLiAg VGhpcyBhdHRyaWJ1dGUKK2lzIG5vdCB3cml0YWJsZS4KK0BlbmQgZGVmdmFy CisKIEBub2RlIExhenkgU3RyaW5ncyBJbiBQeXRob24KIEBzdWJzdWJzZWN0 aW9uIFB5dGhvbiByZXByZXNlbnRhdGlvbiBvZiBsYXp5IHN0cmluZ3MuCiAK ZGlmZiAtLWdpdCBhL2dkYi9pbmZjbWQuYyBiL2dkYi9pbmZjbWQuYwppbmRl eCAzZThiZjVkLi4zM2NlMWZjIDEwMDY0NAotLS0gYS9nZGIvaW5mY21kLmMK KysrIGIvZ2RiL2luZmNtZC5jCkBAIC0xNDEzLDE0ICsxNDEzLDEyIEBAIGFk dmFuY2VfY29tbWFuZCAoY2hhciAqYXJnLCBpbnQgZnJvbV90dHkpCiAgIHVu dGlsX2JyZWFrX2NvbW1hbmQgKGFyZywgZnJvbV90dHksIDEpOwogfQogDAot LyogUHJpbnQgdGhlIHJlc3VsdCBvZiBhIGZ1bmN0aW9uIGF0IHRoZSBlbmQg b2YgYSAnZmluaXNoJyBjb21tYW5kLiAgKi8KKy8qIFJldHVybiB0aGUgdmFs dWUgb2YgdGhlIHJlc3VsdCBhdCB0aGUgZW5kIG9mIGEgJ2ZpbmlzaCcgY29t bWFuZC9CUC4gICovCiAKLXN0YXRpYyB2b2lkCi1wcmludF9yZXR1cm5fdmFs dWUgKHN0cnVjdCB0eXBlICpmdW5jX3R5cGUsIHN0cnVjdCB0eXBlICp2YWx1 ZV90eXBlKQorc3RydWN0IHZhbHVlICoKK2dldF9yZXR1cm5fdmFsdWUgKHN0 cnVjdCB0eXBlICpmdW5jX3R5cGUsIHN0cnVjdCB0eXBlICp2YWx1ZV90eXBl KQogewogICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF9yZWdjYWNo ZV9hcmNoIChzdG9wX3JlZ2lzdGVycyk7Ci0gIHN0cnVjdCBjbGVhbnVwICpv bGRfY2hhaW47Ci0gIHN0cnVjdCB1aV9zdHJlYW0gKnN0YjsKICAgc3RydWN0 IHZhbHVlICp2YWx1ZTsKICAgc3RydWN0IHVpX291dCAqdWlvdXQgPSBjdXJy ZW50X3Vpb3V0OwogCkBAIC0xNDUxLDYgKzE0NDksMTkgQEAgcHJpbnRfcmV0 dXJuX3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLCBzdHJ1Y3QgdHlw ZSAqdmFsdWVfdHlwZSkKICAgICAgIGludGVybmFsX2Vycm9yIChfX0ZJTEVf XywgX19MSU5FX18sIF8oImJhZCBzd2l0Y2giKSk7CiAgICAgfQogCisgIHJl dHVybiB2YWx1ZTsKK30KKworLyogUHJpbnQgdGhlIHJlc3VsdCBvZiBhIGZ1 bmN0aW9uIGF0IHRoZSBlbmQgb2YgYSAnZmluaXNoJyBjb21tYW5kLiAgKi8K Kworc3RhdGljIHZvaWQKK3ByaW50X3JldHVybl92YWx1ZSAoc3RydWN0IHR5 cGUgKmZ1bmNfdHlwZSwgc3RydWN0IHR5cGUgKnZhbHVlX3R5cGUpCit7Cisg IHN0cnVjdCB2YWx1ZSAqdmFsdWUgPSBnZXRfcmV0dXJuX3ZhbHVlIChmdW5j X3R5cGUsIHZhbHVlX3R5cGUpOworICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2No YWluOworICBzdHJ1Y3QgdWlfc3RyZWFtICpzdGI7CisgIHN0cnVjdCB1aV9v dXQgKnVpb3V0ID0gY3VycmVudF91aW91dDsKKwogICBpZiAodmFsdWUpCiAg ICAgewogICAgICAgc3RydWN0IHZhbHVlX3ByaW50X29wdGlvbnMgb3B0czsK ZGlmZiAtLWdpdCBhL2dkYi9pbmZlcmlvci5oIGIvZ2RiL2luZmVyaW9yLmgK aW5kZXggY2ZhZWE3Zi4uZjE5ODY5NiAxMDA2NDQKLS0tIGEvZ2RiL2luZmVy aW9yLmgKKysrIGIvZ2RiL2luZmVyaW9yLmgKQEAgLTI2OSw2ICsyNjksOSBA QCBleHRlcm4gdm9pZCBkZXRhY2hfY29tbWFuZCAoY2hhciAqLCBpbnQpOwog CiBleHRlcm4gdm9pZCBub3RpY2VfbmV3X2luZmVyaW9yIChwdGlkX3QsIGlu dCwgaW50KTsKIAorZXh0ZXJuIHN0cnVjdCB2YWx1ZSAqZ2V0X3JldHVybl92 YWx1ZSAoc3RydWN0IHR5cGUgKmZ1bmNfdHlwZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0eXBlICp2YWx1ZV90 eXBlKTsKKwogLyogQWRkcmVzcyBhdCB3aGljaCBpbmZlcmlvciBzdG9wcGVk LiAgKi8KIAogZXh0ZXJuIENPUkVfQUREUiBzdG9wX3BjOwpkaWZmIC0tZ2l0 IGEvZ2RiL2luZnJ1bi5jIGIvZ2RiL2luZnJ1bi5jCmluZGV4IGFjMmI1YWUu LmI5ODlhZDggMTAwNjQ0Ci0tLSBhL2dkYi9pbmZydW4uYworKysgYi9nZGIv aW5mcnVuLmMKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNsdWRlICJ0cmFjZXBv aW50LmgiCiAjaW5jbHVkZSAiY29udGludWF0aW9ucy5oIgogI2luY2x1ZGUg ImludGVycHMuaCIKKyNpbmNsdWRlICJweXRob24vcHl0aG9uLmgiCiAKIC8q IFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucyAqLwogCkBAIC0zNjUs NyArMzY2LDggQEAgc2hvd19zdG9wX29uX3NvbGliX2V2ZW50cyAoc3RydWN0 IHVpX2ZpbGUgKmZpbGUsIGludCBmcm9tX3R0eSwKIGludCBzdG9wX2FmdGVy X3RyYXA7CiAKIC8qIFNhdmUgcmVnaXN0ZXIgY29udGVudHMgaGVyZSB3aGVu IGV4ZWN1dGluZyBhICJmaW5pc2giIGNvbW1hbmQgb3IgYXJlCi0gICBhYm91 dCB0byBwb3AgYSBzdGFjayBkdW1teSBmcmFtZSwgaWYtYW5kLW9ubHktaWYg cHJvY2VlZF90b19maW5pc2ggaXMgc2V0LgorICAgYWJvdXQgdG8gcG9wIGEg c3RhY2sgZHVtbXkgZnJhbWUsIGlmLWFuZC1vbmx5LWlmIHByb2NlZWRfdG9f ZmluaXNoIGlzIHNldAorICAgb3IgYSBQeXRob24gRmluaXNoQnJlYWtwb2lu dCBoYXMgYmVlbiBoaXQuCiAgICBUaHVzIHRoaXMgY29udGFpbnMgdGhlIHJl dHVybiB2YWx1ZSBmcm9tIHRoZSBjYWxsZWQgZnVuY3Rpb24gKGFzc3VtaW5n CiAgICB2YWx1ZXMgYXJlIHJldHVybmVkIGluIGEgcmVnaXN0ZXIpLiAgKi8K IApAQCAtNTk4Nyw4ICs1OTg5LDkgQEAgbm9ybWFsX3N0b3AgKHZvaWQpCiAK ICAgLyogU2F2ZSB0aGUgZnVuY3Rpb24gdmFsdWUgcmV0dXJuIHJlZ2lzdGVy cywgaWYgd2UgY2FyZS4KICAgICAgV2UgbWlnaHQgYmUgYWJvdXQgdG8gcmVz dG9yZSB0aGVpciBwcmV2aW91cyBjb250ZW50cy4gICovCi0gIGlmIChpbmZl cmlvcl90aHJlYWQgKCktPmNvbnRyb2wucHJvY2VlZF90b19maW5pc2gKLSAg ICAgICYmIGV4ZWN1dGlvbl9kaXJlY3Rpb24gIT0gRVhFQ19SRVZFUlNFKQor ICBpZiAoZ2RicHlfaXNfc3RvcHBlZF9hdF9maW5pc2hfYnAgKGluZmVyaW9y X3RocmVhZCAoKS0+Y29udHJvbC5zdG9wX2Jwc3RhdCkKKyAgICAgIHx8IChp bmZlcmlvcl90aHJlYWQgKCktPmNvbnRyb2wucHJvY2VlZF90b19maW5pc2gK KyAgICAgICAgICAmJiBleGVjdXRpb25fZGlyZWN0aW9uICE9IEVYRUNfUkVW RVJTRSkpCiAgICAgewogICAgICAgLyogVGhpcyBzaG91bGQgbm90IGJlIG5l Y2Vzc2FyeS4gICovCiAgICAgICBpZiAoc3RvcF9yZWdpc3RlcnMpCmRpZmYg LS1naXQgYS9nZGIvcHl0aG9uL3B5LWJyZWFrcG9pbnQuYyBiL2dkYi9weXRo b24vcHktYnJlYWtwb2ludC5jCmluZGV4IGYyMzViYmMuLjY3ZGU4ZGUgMTAw NjQ0Ci0tLSBhL2dkYi9weXRob24vcHktYnJlYWtwb2ludC5jCisrKyBiL2dk Yi9weXRob24vcHktYnJlYWtwb2ludC5jCkBAIC0zMSw1MiArMzEsMTYgQEAK ICNpbmNsdWRlICJhcmNoLXV0aWxzLmgiCiAjaW5jbHVkZSAibGFuZ3VhZ2Uu aCIKIAotc3RhdGljIFB5VHlwZU9iamVjdCBicmVha3BvaW50X29iamVjdF90 eXBlOwotCiAvKiBOdW1iZXIgb2YgbGl2ZSBicmVha3BvaW50cy4gICovCiBz dGF0aWMgaW50IGJwcHlfbGl2ZTsKIAogLyogVmFyaWFibGVzIHVzZWQgdG8g cGFzcyBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSBCcmVha3BvaW50CiAgICBj b25zdHJ1Y3RvciBhbmQgdGhlIGJyZWFrcG9pbnQtY3JlYXRlZCBob29rIGZ1 bmN0aW9uLiAgKi8KLXN0YXRpYyBicmVha3BvaW50X29iamVjdCAqYnBweV9w ZW5kaW5nX29iamVjdDsKK2JyZWFrcG9pbnRfb2JqZWN0ICpicHB5X3BlbmRp bmdfb2JqZWN0OwogCiAvKiBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVu IGEgUHl0aG9uIGNvbmRpdGlvbiBpcyBldmFsdWF0ZWQuICAqLwogc3RhdGlj IGNoYXIgKiBjb25zdCBzdG9wX2Z1bmMgPSAic3RvcCI7CiAKLXN0cnVjdCBi cmVha3BvaW50X29iamVjdAotewotICBQeU9iamVjdF9IRUFECi0KLSAgLyog VGhlIGJyZWFrcG9pbnQgbnVtYmVyIGFjY29yZGluZyB0byBnZGIuICAqLwot ICBpbnQgbnVtYmVyOwotCi0gIC8qIFRoZSBnZGIgYnJlYWtwb2ludCBvYmpl Y3QsIG9yIE5VTEwgaWYgdGhlIGJyZWFrcG9pbnQgaGFzIGJlZW4KLSAgICAg ZGVsZXRlZC4gICovCi0gIHN0cnVjdCBicmVha3BvaW50ICpicDsKLX07Ci0K LS8qIFJlcXVpcmUgdGhhdCBCUkVBS1BPSU5UIGJlIGEgdmFsaWQgYnJlYWtw b2ludCBJRDsgdGhyb3cgYSBQeXRob24KLSAgIGV4Y2VwdGlvbiBpZiBpdCBp cyBpbnZhbGlkLiAgKi8KLSNkZWZpbmUgQlBQWV9SRVFVSVJFX1ZBTElEKEJy ZWFrcG9pbnQpCQkJCQlcCi0gICAgZG8gewkJCQkJCQkJXAotICAgICAgaWYg KChCcmVha3BvaW50KS0+YnAgPT0gTlVMTCkJCQkJCVwKLQlyZXR1cm4gUHlF cnJfRm9ybWF0IChQeUV4Y19SdW50aW1lRXJyb3IsICAgICAgICAgICAgICAg ICAgICAgICAgXAotCQkJICAgICBfKCJCcmVha3BvaW50ICVkIGlzIGludmFs aWQuIiksCQlcCi0JCQkgICAgIChCcmVha3BvaW50KS0+bnVtYmVyKTsJCQlc Ci0gICAgfSB3aGlsZSAoMCkKLQotLyogUmVxdWlyZSB0aGF0IEJSRUFLUE9J TlQgYmUgYSB2YWxpZCBicmVha3BvaW50IElEOyB0aHJvdyBhIFB5dGhvbgot ICAgZXhjZXB0aW9uIGlmIGl0IGlzIGludmFsaWQuICBUaGlzIG1hY3JvIGlz IGZvciB1c2UgaW4gc2V0dGVyIGZ1bmN0aW9ucy4gICovCi0jZGVmaW5lIEJQ UFlfU0VUX1JFUVVJUkVfVkFMSUQoQnJlYWtwb2ludCkJCQkJXAotICAgIGRv IHsJCQkJCQkJCVwKLSAgICAgIGlmICgoQnJlYWtwb2ludCktPmJwID09IE5V TEwpCQkJCQlcCi0gICAgICAgIHsJCQkJCQkJCVwKLQkgIFB5RXJyX0Zvcm1h dCAoUHlFeGNfUnVudGltZUVycm9yLCBfKCJCcmVha3BvaW50ICVkIGlzIGlu dmFsaWQuIiksIFwKLQkJCShCcmVha3BvaW50KS0+bnVtYmVyKTsJCQkJXAot CSAgcmV0dXJuIC0xOwkJCQkJCQlcCi0JfQkJCQkJCQkJXAotICAgIH0gd2hp bGUgKDApCi0KIC8qIFRoaXMgaXMgdXNlZCB0byBpbml0aWFsaXplIHZhcmlv dXMgZ2RiLmJwXyogY29uc3RhbnRzLiAgKi8KIHN0cnVjdCBweWJwX2NvZGUK IHsKQEAgLTc3Nyw2ICs3NDEsMTUgQEAgZ2RicHlfc2hvdWxkX3N0b3AgKHN0 cnVjdCBicmVha3BvaW50X29iamVjdCAqYnBfb2JqKQogICAgICAgZWxzZQog CWdkYnB5X3ByaW50X3N0YWNrICgpOwogICAgIH0KKworICAvKiBJZiBpdCdz IGEgdGVtcG9yYXJ5IGJyZWFrcG9pbnQuICAqLworICBpZiAoYnBfb2JqLT5p c19maW5pc2hfYnApCisgICAgeworICAgICAgLyogQ2FuJ3QgZGVsZXRlIGl0 IGhlcmUuICAqLworICAgICAgZ2RiX2Fzc2VydCAoYi0+ZGlzcG9zaXRpb24g PT0gZGlzcF9kZWwpOworICAgICAgZGlzYWJsZV9icmVha3BvaW50IChiKTsK KyAgICB9CisKICAgZG9fY2xlYW51cHMgKGNsZWFudXApOwogCiAgIHJldHVy biBzdG9wOwpAQCAtODM5LDYgKzgxMiw3IEBAIGdkYnB5X2JyZWFrcG9pbnRf Y3JlYXRlZCAoc3RydWN0IGJyZWFrcG9pbnQgKmJwKQogICAgICAgbmV3YnAt Pm51bWJlciA9IGJwLT5udW1iZXI7CiAgICAgICBuZXdicC0+YnAgPSBicDsK ICAgICAgIG5ld2JwLT5icC0+cHlfYnBfb2JqZWN0ID0gbmV3YnA7CisgICAg ICBuZXdicC0+aXNfZmluaXNoX2JwID0gMDsKICAgICAgIFB5X0lOQ1JFRiAo bmV3YnApOwogICAgICAgKyticHB5X2xpdmU7CiAgICAgfQpAQCAtMTAwMCw3 ICs5NzQsNyBAQCBzdGF0aWMgUHlNZXRob2REZWYgYnJlYWtwb2ludF9vYmpl Y3RfbWV0aG9kc1tdID0KICAgeyBOVUxMIH0gLyogU2VudGluZWwuICAqLwog fTsKIAotc3RhdGljIFB5VHlwZU9iamVjdCBicmVha3BvaW50X29iamVjdF90 eXBlID0KK1B5VHlwZU9iamVjdCBicmVha3BvaW50X29iamVjdF90eXBlID0K IHsKICAgUHlPYmplY3RfSEVBRF9JTklUIChOVUxMKQogICAwLAkJCQkgIC8q b2Jfc2l6ZSovCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LWZpbmlzaGJy ZWFrcG9pbnQuYyBiL2dkYi9weXRob24vcHktZmluaXNoYnJlYWtwb2ludC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OTk3OGEK LS0tIC9kZXYvbnVsbAorKysgYi9nZGIvcHl0aG9uL3B5LWZpbmlzaGJyZWFr cG9pbnQuYwpAQCAtMCwwICsxLDQ0MiBAQAorLyogUHl0aG9uIGludGVyZmFj ZSB0byBmaW5pc2ggYnJlYWtwb2ludHMKKworICAgQ29weXJpZ2h0IChDKSAy MDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlz IGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4gICovCisKKworCisjaW5jbHVkZSAiZGVmcy5oIgorI2luY2x1ZGUgImV4 Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJweXRob24taW50ZXJuYWwuaCIKKyNp bmNsdWRlICJicmVha3BvaW50LmgiCisjaW5jbHVkZSAiZnJhbWUuaCIKKyNp bmNsdWRlICJnZGJ0aHJlYWQuaCIKKyNpbmNsdWRlICJhcmNoLXV0aWxzLmgi CisjaW5jbHVkZSAibGFuZ3VhZ2UuaCIKKyNpbmNsdWRlICJvYnNlcnZlci5o IgorI2luY2x1ZGUgImluZmVyaW9yLmgiCisKK3N0YXRpYyBQeVR5cGVPYmpl Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X3R5cGU7CisKKy8qIEZ1bmN0 aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSBQeXRob24gZmluaXNoIGJwIGlz IGZvdW5kIG91dCBvZiBzY29wZS4gICovCitzdGF0aWMgY2hhciAqIGNvbnN0 IG91dG9mc2NvcGVfZnVuYyA9ICJvdXRfb2Zfc2NvcGUiOworCisvKiBzdHJ1 Y3QgaW1wbGVtZW50aW5nIHRoZSBnZGIuRmluaXNoQnJlYWtwb2ludCBvYmpl Y3QgYnkgZXh0ZW5kaW5nCisgICB0aGUgZ2RiLkJyZWFrcG9pbnQgY2xhc3Mu ICAqLworc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdAoreworICAv KiBnZGIuQnJlYWtwb2ludCBiYXNlIGNsYXNzLiAgKi8KKyAgYnJlYWtwb2lu dF9vYmplY3QgcHlfYnA7CisgIC8qIGdkYi5UeXBlIG9iamVjdCBvZiB0aGUg dmFsdWUgcmV0dXJuIGJ5IHRoZSBicmVha3BvaW50ZWQgZnVuY3Rpb24uCisg ICAgIE1heSBiZSBOVUxMIGlmIG5vIGRlYnVnIGluZm9ybWF0aW9uIHdhcyBh dmFpbGFibGUgb3IgcmV0dXJuIHR5cGUKKyAgICAgd2FzIFZPSUQuICAqLwor ICBQeU9iamVjdCAqcmV0dXJuX3R5cGU7CisgIC8qIGdkYi5UeXBlIG9iamVj dCBvZiB0aGUgZnVuY3Rpb24gZmluaXNoZWQgYnkgdGhpcyBicmVha3BvaW50 LiAgV2lsbCBiZQorICAgICBOVUxMIGlmIHJldHVybl90eXBlIGlzIE5VTEwu ICAqLworICBQeU9iamVjdCAqZnVuY3Rpb25fdHlwZTsKKyAgLyogV2hlbiBz dG9wcGVkIGF0IHRoaXMgRmluaXNoQnJlYWtwb2ludCwgZ2RiLlZhbHVlIG9i amVjdCByZXR1cm5lZCBieQorICAgICB0aGUgZnVuY3Rpb247IFB5X05vbmUg aWYgdGhlIHZhbHVlIGlzIG5vdCBjb21wdXRhYmxlOyBOVUxMIGlmIEdEQiBp cworICAgICBub3Qgc3RvcHBlZCBhdCBhIEZpbmlzaEJyZWFrcG9pbnQuICAq LworICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlOworfTsKKworLyogVHJpZ2dl cmVkIHdoZW4gR0RCIHN0b3BzIGF0IFBZX0JQLiAgQ29tcHV0ZXMgYW5kIGNh Y2hlcyB0aGUgYHJldHVybl92YWx1ZScsCisgICBpZiBhdmFpbGFibGUuICBN YXkgc2V0IFB5dGhvbiBleGNlcHRpb24gZmxhZyBpZiB0aGUgcmV0dXJuIHZh bHVlIGNvdWxkbid0CisgICBiZSBjb21wdXRlZC4gICovCisKK3N0YXRpYyB2 b2lkCiticGZpbmlzaF9zdG9wcGVkX2F0X2ZpbmlzaF9icCAoc3RydWN0IGZp bmlzaF9icmVha3BvaW50X29iamVjdCAqcHlfYnApCit7CisgIHZvbGF0aWxl IHN0cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsKKworICBpZiAoIXB5X2Jw LT5yZXR1cm5fdHlwZSkKKyAgICByZXR1cm47CisKKyAgVFJZX0NBVENIIChl eGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAgICB7CisgICAgICBzdHJ1Y3Qg dmFsdWUgKnJldCA9CisgICAgICAgICAgZ2V0X3JldHVybl92YWx1ZSAodHlw ZV9vYmplY3RfdG9fdHlwZSAocHlfYnAtPmZ1bmN0aW9uX3R5cGUpLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfb2JqZWN0X3RvX3R5cGUg KHB5X2JwLT5yZXR1cm5fdHlwZSkpOworCisgICAgICBpZiAocmV0KQorICAg ICAgICBweV9icC0+cmV0dXJuX3ZhbHVlID0gdmFsdWVfdG9fdmFsdWVfb2Jq ZWN0IChyZXQpOworICAgICAgZWxzZQorICAgICAgICBweV9icC0+cmV0dXJu X3ZhbHVlID0gUHlfTm9uZTsKKyAgICB9CisgIGlmIChleGNlcHQucmVhc29u IDwgMCkKKyAgICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbihleGNlcHQpOwor fQorCisvKiBQeXRob24gZnVuY3Rpb24gdG8gZ2V0IHRoZSAncmV0dXJuX3Zh bHVlJyBhdHRyaWJ1dGUgb2YKKyAgIEZpbmlzaEJyZWFrcG9pbnQuICAqLwor CitzdGF0aWMgUHlPYmplY3QgKgorYnBmaW5pc2hweV9nZXRfcmV0dXJudmFs dWUgKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQoreworICBzdHJ1 Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICpzZWxmX2ZpbmlzaGJwID0K KyAgICAgIChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICopIHNl bGY7CisKKyAgaWYgKHNlbGZfZmluaXNoYnAtPnJldHVybl90eXBlID09IE5V TEwpCisgICAgUHlfUkVUVVJOX05PTkU7CisKKyAgLyogQ2hlY2sgaWYgd2Ug aGF2ZSBhIGNhY2hlZCB2YWx1ZS4gICovCisgIGlmICghc2VsZl9maW5pc2hi cC0+cmV0dXJuX3ZhbHVlKQorICAgIHsKKyAgICAgIGJwc3RhdCBiczsKKwor ICAgICAgQlBQWV9SRVFVSVJFX1ZBTElEICgmc2VsZl9maW5pc2hicC0+cHlf YnApOworCisgICAgICBmb3IgKGJzID0gaW5mZXJpb3JfdGhyZWFkICgpLT5j b250cm9sLnN0b3BfYnBzdGF0OworICAgICAgICAgIGJzOyBicyA9IGJzLT5u ZXh0KQorICAgICAgICB7CisgICAgICAgICAgc3RydWN0IGJyZWFrcG9pbnQg KmJwID0gYnMtPmJyZWFrcG9pbnRfYXQ7CisKKyAgICAgICAgICBpZiAoYnAg IT0gTlVMTCAmJiAoUHlPYmplY3QgKikgYnAtPnB5X2JwX29iamVjdCA9PSBz ZWxmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBicGZpbmlzaF9z dG9wcGVkX2F0X2ZpbmlzaF9icCAoc2VsZl9maW5pc2hicCk7CisgICAgICAg ICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCAoKSkKKyAgICAgICAgICAgICAg ICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg IH0KKworICBpZiAoIXNlbGZfZmluaXNoYnAtPnJldHVybl92YWx1ZSkKKyAg ICBQeV9SRVRVUk5fTk9ORTsKKworICBQeV9JTkNSRUYgKHNlbGZfZmluaXNo YnAtPnJldHVybl92YWx1ZSk7CisgIHJldHVybiBzZWxmX2ZpbmlzaGJwLT5y ZXR1cm5fdmFsdWU7Cit9CisKKy8qIERlYWxsb2NhdGUgRmluaXNoQnJlYWtw b2ludCBvYmplY3QuICAqLworCitzdGF0aWMgdm9pZAorYnBmaW5pc2hweV9k ZWFsbG9jIChQeU9iamVjdCAqc2VsZikKK3sKKyAgc3RydWN0IGZpbmlzaF9i cmVha3BvaW50X29iamVjdCAqc2VsZl9icGZpbmlzaCA9CisgICAgICAgIChz dHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICopIHNlbGY7CisKKyAg UHlfWERFQ1JFRiAoc2VsZl9icGZpbmlzaC0+ZnVuY3Rpb25fdHlwZSk7Cisg IFB5X1hERUNSRUYgKHNlbGZfYnBmaW5pc2gtPnJldHVybl90eXBlKTsKKyAg UHlfWERFQ1JFRiAoc2VsZl9icGZpbmlzaC0+cmV0dXJuX3ZhbHVlKTsKK30K KworLyogSWYgU1RPUF9CUFNUQVQgY29udGFpbnMgYSBQeXRob24gYnJlYWtw b2ludCB3aG9zZSB0eXBlIGlzIFRZUEUsIHJldHVybnMKKyAgIHRoaXMgYnJl YWtwb2ludC4gUmV0dXJucyBOVUxMIG90aGVyd2lzZS4gICovCisKK2ludAor Z2RicHlfaXNfc3RvcHBlZF9hdF9maW5pc2hfYnAgKGJwc3RhdCBzdG9wX2Jw c3RhdCkKK3sKKyAgYnBzdGF0IGJzOworCisgIGZvciAoYnMgPSBzdG9wX2Jw c3RhdDsgYnM7IGJzID0gYnMtPm5leHQpCisgICAgeworICAgICAgaWYgKGJz LT5icmVha3BvaW50X2F0CisgICAgICAgICAgJiYgYnMtPmJyZWFrcG9pbnRf YXQtPnB5X2JwX29iamVjdAorICAgICAgICAgICYmICgoYnJlYWtwb2ludF9v YmplY3QgKikKKyAgICAgICAgICAgICAgYnMtPmJyZWFrcG9pbnRfYXQtPnB5 X2JwX29iamVjdCktPmlzX2ZpbmlzaF9icCkKKyAgICAgICAgcmV0dXJuIDE7 CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBQeXRob24gZnVuY3Rp b24gdG8gY3JlYXRlIGEgbmV3IGJyZWFrcG9pbnQuICAqLworCitzdGF0aWMg aW50CiticGZpbmlzaHB5X2luaXQgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVj dCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgc3RhdGljIGNoYXIg KmtleXdvcmRzW10gPSB7ICJmcmFtZSIsICJpbnRlcm5hbCIsIE5VTEwgfTsK KyAgc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdCAqc2VsZl9icGZp bmlzaCA9CisgICAgICAoc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVj dCAqKSBzZWxmOworICBpbnQgdHlwZSA9IGJwX2JyZWFrcG9pbnQ7CisgIFB5 T2JqZWN0ICpmcmFtZV9vYmogPSBOVUxMOworICBzdHJ1Y3QgZnJhbWVfaW5m byAqZnJhbWUsICpwcmV2X2ZyYW1lID0gTlVMTDsKKyAgc3RydWN0IGZyYW1l X2lkIGZyYW1lX2lkOworICBQeU9iamVjdCAqaW50ZXJuYWwgPSBOVUxMOwor ICBpbnQgaW50ZXJuYWxfYnAgPSAwOworICBDT1JFX0FERFIgZmluaXNoX3Bj LCBwYzsKKyAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0 OworICBjaGFyICphZGRyX3N0ciwgc21hbGxfYnVmWzEwMF07CisgIHN0cnVj dCBzeW1ib2wgKmZ1bmN0aW9uOworCisgIGlmICghUHlBcmdfUGFyc2VUdXBs ZUFuZEtleXdvcmRzIChhcmdzLCBrd2FyZ3MsICJPfE8iLCBrZXl3b3JkcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmcmFtZV9v YmosICZpbnRlcm5hbCkpCisgICAgcmV0dXJuIC0xOworCisgIGlmICghZnJh bWVfb2JqKQorICAgIGdvdG8gaW52YWxpZF9mcmFtZTsKKyAgCisgIGZyYW1l ID0gZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKGZyYW1lX29iaik7Cisg IGlmIChmcmFtZSA9PSBOVUxMKQorICAgIGdvdG8gaW52YWxpZF9mcmFtZTsK KyAgCisgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisg ICAgeworICAgICAgcHJldl9mcmFtZSA9IGdldF9wcmV2X2ZyYW1lIChmcmFt ZSk7CisgICAgICBpZiAocHJldl9mcmFtZSA9PSAwKQorICAgICAgICB7Cisg ICAgICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9yLAor ICAgICAgICAgICAgXygiXCJGaW5pc2hCcmVha3BvaW50XCIgbm90IG1lYW5p bmdmdWwgaW4gdGhlIG91dGVybW9zdCBmcmFtZS4iKSk7CisgICAgICAgIH0K KyAgICAgIGVsc2UgaWYgKGdldF9mcmFtZV90eXBlIChwcmV2X2ZyYW1lKSA9 PSBEVU1NWV9GUkFNRSkKKyAgICAgICAgeworICAgICAgICAgIFB5RXJyX1Nl dFN0cmluZyAoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAg ICBfKCJcIkZpbmlzaEJyZWFrcG9pbnRcIiBjYW5ub3QgYmUgc2V0IG9uIGEg ZHVtbXkgZnJhbWUuIikpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAg ICAgIHsKKyAgICAgICAgICBmcmFtZV9pZCA9IGdldF9mcmFtZV9pZCAocHJl dl9mcmFtZSk7CisgICAgICAgICAgaWYgKGZyYW1lX2lkX2VxIChmcmFtZV9p ZCwgbnVsbF9mcmFtZV9pZCkpCisgICAgICAgICAgICBQeUVycl9TZXRTdHJp bmcgKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXygiSW52YWxpZCBJRCBmb3IgdGhlIGBmcmFtZScg b2JqZWN0LiIpKTsKKyAgICAgICAgfQorICAgIH0KKyAgaWYgKGV4Y2VwdC5y ZWFzb24gPCAwKQorICAgIHsKKyAgICAgIGdkYnB5X2NvbnZlcnRfZXhjZXB0 aW9uKGV4Y2VwdCk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICBlbHNl IGlmIChQeUVycl9PY2N1cnJlZCAoKSkKKyAgICByZXR1cm4gLTE7CisKKyAg aWYgKGludGVybmFsKQorICAgIHsKKyAgICAgIGludGVybmFsX2JwID0gUHlP YmplY3RfSXNUcnVlIChpbnRlcm5hbCk7CisgICAgICBpZiAoaW50ZXJuYWxf YnAgPT0gLTEpIAorICAgICAgICB7CisgICAgICAgICAgUHlFcnJfU2V0U3Ry aW5nIChQeUV4Y19WYWx1ZUVycm9yLCAKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXygiVGhlIHZhbHVlIG9mIGBpbnRlcm5hbCcgbXVzdCBiZSBh IGJvb2xlYW4uIikpOworICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg fQorICAgIH0KKworICAvKiBGaW5kIHRoZSBmdW5jdGlvbiB3ZSB3aWxsIHJl dHVybiBmcm9tLiAgKi8KKyAgc2VsZl9icGZpbmlzaC0+cmV0dXJuX3R5cGUg PSBOVUxMOworICBzZWxmX2JwZmluaXNoLT5mdW5jdGlvbl90eXBlID0gTlVM TDsKKworICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQor ICAgIHsKKyAgICAgIGlmIChnZXRfZnJhbWVfcGNfaWZfYXZhaWxhYmxlIChm cmFtZSwgJnBjKSkKKyAgICAgICAgeworICAgICAgICAgIGZ1bmN0aW9uID0g ZmluZF9wY19mdW5jdGlvbiAocGMpOworICAgICAgICAgIGlmIChmdW5jdGlv biAhPSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdHJ1 Y3QgdHlwZSAqcmV0X3R5cGUgPSBUWVBFX1RBUkdFVF9UWVBFIChTWU1CT0xf VFlQRSAoZnVuY3Rpb24pKTsKKworICAgICAgICAgICAgICAvKiBSZW1lbWJl ciBvbmx5IG5vbi1WT0lEIHJldHVybiB0eXBlcy4gICovCisgICAgICAgICAg ICAgIGlmIChUWVBFX0NPREUgKHJldF90eXBlKSAhPSBUWVBFX0NPREVfVk9J RCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBzZWxm X2JwZmluaXNoLT5yZXR1cm5fdHlwZSA9IHR5cGVfdG9fdHlwZV9vYmplY3Qg KHJldF90eXBlKTsKKyAgICAgICAgICAgICAgICAgIHNlbGZfYnBmaW5pc2gt PmZ1bmN0aW9uX3R5cGUgPQorICAgICAgICAgICAgICAgICAgICAgIHR5cGVf dG9fdHlwZV9vYmplY3QgKFNZTUJPTF9UWVBFIChmdW5jdGlvbikpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg IH0KKyAgaWYgKGV4Y2VwdC5yZWFzb24gPCAwCisgICAgICB8fCAhc2VsZl9i cGZpbmlzaC0+cmV0dXJuX3R5cGUgfHwgIXNlbGZfYnBmaW5pc2gtPmZ1bmN0 aW9uX3R5cGUpCisgICAgeworICAgICAgLyogV29uJ3QgYmUgYWJsZSB0byBj b21wdXRlIHJldHVybiB2YWx1ZS4gICovCisgICAgICBzZWxmX2JwZmluaXNo LT5yZXR1cm5fdHlwZSA9IE5VTEw7CisgICAgICBzZWxmX2JwZmluaXNoLT5m dW5jdGlvbl90eXBlID0gTlVMTDsKKyAgICB9CisKKyAgYnBweV9wZW5kaW5n X29iamVjdCA9ICZzZWxmX2JwZmluaXNoLT5weV9icDsKKyAgYnBweV9wZW5k aW5nX29iamVjdC0+bnVtYmVyID0gLTE7CisgIGJwcHlfcGVuZGluZ19vYmpl Y3QtPmJwID0gTlVMTDsKKworICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJO X01BU0tfQUxMKQorICAgIHsKKyAgICAgIC8qIFNldCBhIGJyZWFrcG9pbnQg b24gdGhlIHJldHVybiBhZGRyZXNzLiAgKi8KKyAgICAgIGZpbmlzaF9wYyA9 IGdldF9mcmFtZV9wYyAocHJldl9mcmFtZSk7CisgICAgICBzcHJpbnRmIChz bWFsbF9idWYsICIqJXMiLCBoZXhfc3RyaW5nIChmaW5pc2hfcGMpKTsKKyAg ICAgIGFkZHJfc3RyID0gc21hbGxfYnVmOworCisgICAgICBjcmVhdGVfYnJl YWtwb2ludCAocHl0aG9uX2dkYmFyY2gsCisgICAgICAgICAgICAgICAgICAg ICAgICAgYWRkcl9zdHIsIE5VTEwsIC0xLAorICAgICAgICAgICAgICAgICAg ICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgMSAvKnRlbXBf ZmxhZyovLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJwX2JyZWFrcG9p bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICBBVVRPX0JPT0xFQU5fVFJVRSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAmYmtwdF9icmVha3BvaW50X29wcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAwLCAxLCBpbnRlcm5hbF9icCk7CisgICAgfQor ICBHREJfUFlfU0VUX0hBTkRMRV9FWENFUFRJT04gKGV4Y2VwdCk7CisKKyAg QlBQWV9TRVRfUkVRVUlSRV9WQUxJRCAoJnNlbGZfYnBmaW5pc2gtPnB5X2Jw KTsKKyAgCisgIHNlbGZfYnBmaW5pc2gtPnB5X2JwLmJwLT5mcmFtZV9pZCA9 IGZyYW1lX2lkOworICBzZWxmX2JwZmluaXNoLT5weV9icC5pc19maW5pc2hf YnAgPSAxOworICAKKyAgcmV0dXJuIDA7CisgIAorIGludmFsaWRfZnJhbWU6 CisgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVmFsdWVFcnJvciwgCisgICAg ICAgICAgICAgICAgICAgXygiSW52YWxpZCBJRCBmb3IgdGhlIGBmcmFtZScg b2JqZWN0LiIpKTsKKyAgcmV0dXJuIC0xOworfQorCisvKiBDYWxsZWQgd2hl biBHREIgbm90aWNlcyB0aGF0IHRoZSBmaW5pc2ggYnJlYWtwb2ludCBCUF9P QkogaXMgb3V0IG9mCisgICB0aGUgY3VycmVudCBjYWxsc3RhY2suICBUcmln Z2VycyB0aGUgbWV0aG9kIE9VVF9PRl9TQ09QRSBpZiBpbXBsZW1lbnRlZCwK KyAgIHRoZW4gZGVsZXRlIHRoZSBicmVha3BvaW50LiAgKi8KKworc3RhdGlj IHZvaWQKK2JwZmluaXNocHlfb3V0X29mX3Njb3BlIChzdHJ1Y3QgZmluaXNo X2JyZWFrcG9pbnRfb2JqZWN0ICpicGZpbmlzaF9vYmopCit7CisgIGJyZWFr cG9pbnRfb2JqZWN0ICpicF9vYmogPSAoYnJlYWtwb2ludF9vYmplY3QgKikg YnBmaW5pc2hfb2JqOworICBQeU9iamVjdCAqcHlfb2JqID0gKFB5T2JqZWN0 ICopIGJwX29iajsKKworICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyAo cHlfb2JqLCBvdXRvZnNjb3BlX2Z1bmMpKQorICAgIHsKKyAgICAgIGlmICgh UHlPYmplY3RfQ2FsbE1ldGhvZCAocHlfb2JqLCBvdXRvZnNjb3BlX2Z1bmMs IE5VTEwpKQorICAgICAgICAgIGdkYnB5X3ByaW50X3N0YWNrICgpOworICAg IH0KKworICBkZWxldGVfYnJlYWtwb2ludCAoYnBmaW5pc2hfb2JqLT5weV9i cC5icCk7Cit9CisKKy8qIENhbGxiYWNrIGZvciBgYnBmaW5pc2hweV9kZXRl Y3Rfb3V0X3Njb3BlJy4gIFRyaWdnZXJzIFB5dGhvbidzCisgICBgQi0+b3V0 X29mX3Njb3BlJyBmdW5jdGlvbiBpZiBCIGlzIGEgRmluaXNoQnJlYWtwb2lu dCBvdXQgb2YgaXRzCisgICBzY29wZSBvciB0dXJuIG9mIG91dF9vZl9zY29w ZSBub3RpZmljYXRpb24gaWYgQiBoYXMgYmVlbiBoaXQuICAqLworCitzdGF0 aWMgaW50CiticGZpbmlzaHB5X2RldGVjdF9vdXRfc2NvcGVfY2IgKHN0cnVj dCBicmVha3BvaW50ICpiLCB2b2lkICphcmdzKQoreworICBzdHJ1Y3QgYnJl YWtwb2ludCAqYnBfc3RvcHBlZCA9IChzdHJ1Y3QgYnJlYWtwb2ludCAqKSBh cmdzOworICBQeU9iamVjdCAqcHlfYnAgPSAoUHlPYmplY3QgKikgYi0+cHlf YnBfb2JqZWN0OworICBzdHJ1Y3QgZ2RiYXJjaCAqZ2FyY2ggPSBiLT5nZGJh cmNoID8gYi0+Z2RiYXJjaCA6IGdldF9jdXJyZW50X2FyY2ggKCk7CisgIHN0 cnVjdCBjbGVhbnVwICpjbGVhbnVwID0gZW5zdXJlX3B5dGhvbl9lbnYgKGdh cmNoLCBjdXJyZW50X2xhbmd1YWdlKTsKKyAgCisgIC8qIFRyaWdnZXIgb3V0 X29mX3Njb3BlIGlmIHRoaXMgaXMgYSBGaW5pc2hCcmVha3BvaW50IGFuZCBp dHMgZnJhbWUgaXMKKyAgICAgbm90IGFueW1vcmUgaW4gdGhlIGN1cnJlbnQg Y2FsbHN0YWNrLiAgKi8KKyAgaWYgKHB5X2JwICE9IE5VTEwgJiYgYi0+cHlf YnBfb2JqZWN0LT5pc19maW5pc2hfYnApCisgICAgeworICAgICAgc3RydWN0 IGZpbmlzaF9icmVha3BvaW50X29iamVjdCAqZmluaXNoX2JwID0KKyAgICAg ICAgICAoc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdCAqKSBweV9i cDsKKworICAgICAgaWYgKGIgPT0gYnBfc3RvcHBlZCkKKyAgICAgICAgewor ICAgICAgICAgIGJwZmluaXNoX3N0b3BwZWRfYXRfZmluaXNoX2JwIChmaW5p c2hfYnApOworICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCAoKSkKKyAg ICAgICAgICAgIGdkYnB5X3ByaW50X3N0YWNrICgpOworICAgICAgICB9Cisg ICAgICBlbHNlIGlmIChiLT5wc3BhY2UgPT0gY3VycmVudF9pbmZlcmlvciAo KS0+cHNwYWNlCisgICAgICAgICAgICYmICghdGFyZ2V0X2hhc19yZWdpc3Rl cnMKKyAgICAgICAgICAgICAgIHx8IGZyYW1lX2ZpbmRfYnlfaWQgKGItPmZy YW1lX2lkKSA9PSBOVUxMKSkKKyAgICAgICAgeworICAgICAgICAgIGJwZmlu aXNocHlfb3V0X29mX3Njb3BlIChmaW5pc2hfYnApOworICAgICAgICB9Cisg ICAgfQorICBkb19jbGVhbnVwcyAoY2xlYW51cCk7CisgIHJldHVybiAwOwor fQorCisvKiBBdHRhY2hlZCB0byBgc3RvcCcgbm90aWZpY2F0aW9ucywgY2hl Y2sgaWYgdGhlIGV4ZWN1dGlvbiBoYXMgcnVuCisgICBvdXQgb2YgdGhlIHNj b3BlIG9mIGFueSBGaW5pc2hCcmVha3BvaW50IGJlZm9yZSBpdCBoYXMgYmVl biBoaXQuICAqLworCitzdGF0aWMgdm9pZAorYnBmaW5pc2hweV9oYW5kbGVf c3RvcCAoc3RydWN0IGJwc3RhdHMgKmJzLCBpbnQgcHJpbnRfZnJhbWUpCit7 CisgIC8vc3RydWN0IGNsZWFudXAgKmNsZWFudXAgPSBlbnN1cmVfcHl0aG9u X2VudiAoZ2V0X2N1cnJlbnRfYXJjaCAoKSwKKyAgLy8gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2xhbmd1 YWdlKTsKKworICBpdGVyYXRlX292ZXJfYnJlYWtwb2ludHMgKGJwZmluaXNo cHlfZGV0ZWN0X291dF9zY29wZV9jYiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicyA9PSBOVUxMID8gTlVMTCA6IGJzLT5icmVha3BvaW50X2F0 KTsKKworICAvL2RvX2NsZWFudXBzIChjbGVhbnVwKTsKK30KKworLyogQXR0 YWNoZWQgdG8gYGV4aXQnIG5vdGlmaWNhdGlvbnMsIHRyaWdnZXJzIGFsbCB0 aGUgbmVjZXNzYXJ5IG91dCBvZgorICAgc2NvcGUgbm90aWZpY2F0aW9ucy4g ICovCisKK3N0YXRpYyB2b2lkCiticGZpbmlzaHB5X2hhbmRsZV9leGl0IChz dHJ1Y3QgaW5mZXJpb3IgKmluZikKK3sKKyAgLy9zdHJ1Y3QgY2xlYW51cCAq Y2xlYW51cCA9IGVuc3VyZV9weXRob25fZW52ICh0YXJnZXRfZ2RiYXJjaCwK KyAgLy8gICAgY3VycmVudF9sYW5ndWFnZSk7CisKKyAgaXRlcmF0ZV9vdmVy X2JyZWFrcG9pbnRzIChicGZpbmlzaHB5X2RldGVjdF9vdXRfc2NvcGVfY2Is IE5VTEwpOworCisgIC8vZG9fY2xlYW51cHMgKGNsZWFudXApOworfQorCisv 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 --f46d043890b971258f04b0c17fac--