From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20224 invoked by alias); 9 Nov 2011 14:10:34 -0000 Received: (qmail 20194 invoked by uid 22791); 9 Nov 2011 14:10:26 -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; Wed, 09 Nov 2011 14:09:54 +0000 Received: by vws16 with SMTP id 16so1707977vws.0 for ; Wed, 09 Nov 2011 06:09:53 -0800 (PST) Received: by 10.52.93.101 with SMTP id ct5mr4705972vdb.97.1320847793194; Wed, 09 Nov 2011 06:09:53 -0800 (PST) MIME-Version: 1.0 Received: by 10.220.187.140 with HTTP; Wed, 9 Nov 2011 06:09:32 -0800 (PST) In-Reply-To: References: From: Kevin Pouget Date: Wed, 09 Nov 2011 14:10: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=bcaec50163cf8407e004b14dd7a6 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/msg00224.txt.bz2 --bcaec50163cf8407e004b14dd7a6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 9725 On Fri, Nov 4, 2011 at 10:03 PM, Tom Tromey wrote: > > >>>>> "Kevin" =3D=3D Kevin Pouget writes: > > Tom> It seems like it should be an error to try to compute the return val= ue > Tom> when not stopped at this breakpoint. > > Kevin> I'm not totally convinced ... > Kevin> what would you think about throwing an AttributeError("return_value > Kevin> not available yet") when accessing the attribute before the breakp= oint > Kevin> is hit, but keep the cached value afterwards? > > What I meant was that accessing the cached value any time is fine -- > just that attempting to compute the value for the first time at any > point other than the breakpoint location was wrong, just because > whatever we compute then will be unrelated to what the user might want. > > It is hard to be sure that the current code handles this properly. > See below. ... > Kevin> +static PyObject * > Kevin> +bpfinishpy_get_returnvalue (PyObject *self, void *closure) > Kevin> +{ > [...] > Kevin> + for (bs =3D inferior_thread ()->control.stop_bpstat; > Kevin> + bs; bs =3D bs->next) > Kevin> + { > Kevin> + struct breakpoint *bp =3D bs->breakpoint_at; > Kevin> + > Kevin> + if (bp !=3D NULL && (PyObject *) bp->py_bp_object =3D= =3D self) > Kevin> + { > Kevin> + bpfinish_stopped_at_finish_bp (self_finishbp); > Kevin> + if (PyErr_Occurred ()) > Kevin> + return NULL; > > This seems to try to do the right thing -- but is > inferior_thread()->control even valid at all points that can reach this? > > What about just computing the value before calling the 'stop' method? > As long as it computes a lazy value this won't be very expensive. This part is a bit tricky, and your suggestion has highlighted a problem I didn't consider/test: py-breakpoint.c::gdbpy_should_stop is executed _before_ we have the chance to save the stop_registers, used to compute the return value (in infrun.c::normal_stop). (the problem existed since the beginning, but I never faced it before) I've updated the function infcmd.c::get_return_value to take this situation into account, using the current registers if the 'stop_registers' are not set, based on what is done in infrun.c::normal_stop: > struct value * > get_return_value (struct type *func_type, struct type *value_type) > ... > /* If stop_registers where not saved, use the current registers. */ > if (!stop_regs) > { > stop_regs =3D regcache_dup (get_current_regcache ()); > cleanup =3D make_cleanup_regcache_xfree (stop_regs); > } but I can't say that I'm confident with regcache handling, and I don't know if these lines would have unexpected side effects ... The patch enclosed passes the testsuite with no regression on x86_64/fedora= 15 > Kevin> + =A0TRY_CATCH (except, RETURN_MASK_ALL) > 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)); > Kevin> + > Kevin> + =A0 =A0 =A0if (ret) > Kevin> + =A0 =A0 =A0 =A0py_bp->return_value =3D value_to_value_object (re= t); > Kevin> + =A0 =A0 =A0else > Kevin> + =A0 =A0 =A0 =A0py_bp->return_value =3D Py_None; > Kevin> + =A0 =A0} > Kevin> + =A0if (except.reason < 0) > Kevin> + =A0 =A0gdbpy_convert_exception(except); > > Missing a space. > > I think you need to Py_INCREF Py_None here. > > > Kevin> + =A0if (except.reason < 0) > Kevin> + =A0 =A0{ > Kevin> + =A0 =A0 =A0gdbpy_convert_exception(except); > > Missing space. > > Kevin> + =A0if (except.reason < 0 > Kevin> + =A0 =A0 =A0|| !self_bpfinish->return_type || !self_bpfinish->fun= ction_type) > Kevin> + =A0 =A0{ > Kevin> + =A0 =A0 =A0/* Won't be able to compute return value. =A0*/ > Kevin> + =A0 =A0 =A0self_bpfinish->return_type =3D NULL; > Kevin> + =A0 =A0 =A0self_bpfinish->function_type =3D NULL; > > Need decrefs here. all fixed, thanks > Kevin> + self_bpfinish->return_type =3D type_to_type_obj= ect (ret_type); > Kevin> + self_bpfinish->function_type =3D > Kevin> + type_to_type_object (SYMBOL_TYPE (function)= ); > > These can fail with NULL and must be handled, probably by returning. > But you can't return out of a TRY_CATCH. I think that I handle that in the following lines: > Kevin> + if (except.reason < 0 > Kevin> + || !self_bpfinish->return_type || !self_bpfinish->function_= type) I think I wrote a word about that in the previous mail, anyway, my feeling was that I don't want to abort the FinishBreakpoint creation just because of a return value not computable, so I currently nullify these fields and silently disable return value computation. I can't see any straightforward way to notify Python about that, warning/exceptions won't suite ... otherwise, I could expose the return_type to the Python interface, this way, one could check that it's not None and now if GDB will/might be able to compute the return value when the FinishBP is hit > Kevin> + =A0BPPY_SET_REQUIRE_VALID (&self_bpfinish->py_bp); > > Hm, why is this here? no reason apparently, the try/catch above shall ensure that the BP is valid > Kevin> +static void > Kevin> +bpfinishpy_out_of_scope (struct finish_breakpoint_object *bpfinis= h_obj) > Kevin> +{ > [...] > Kevin> + =A0delete_breakpoint (bpfinish_obj->py_bp.bp); > > I think it needs a TRY_CATCH. > > Kevin> + =A0 =A0 =A0else if (b->pspace =3D=3D current_inferior ()->pspace > Kevin> + =A0 =A0 =A0 =A0 =A0 && (!target_has_registers > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 || frame_find_by_id (b->frame_id) = =3D=3D NULL)) > Kevin> + =A0 =A0 =A0 =A0{ > Kevin> + =A0 =A0 =A0 =A0 =A0bpfinishpy_out_of_scope (finish_bp); > Kevin> + =A0 =A0 =A0 =A0} > Kevin> + =A0 =A0} > > This too, I think. right, done > Kevin> +static void > Kevin> +bpfinishpy_handle_stop (struct bpstats *bs, int print_frame) > Kevin> +{ > Kevin> + =A0struct cleanup *cleanup =3D ensure_python_env (get_current_ar= ch (), > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 current_language); > 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); > > bpfinishpy_detect_out_scope_cb still acquires the GIL (via ensure_python_= env), > but should not. I'm not exactly sure what was you concern here, as far as I understand, the GIL was acquired in bpfinishpy_handle_stop, so it should have no effect in detect_out_scope_cb. So I've removed it from detect_out_scope_cb as it was useless. I've also made a litlle modification in the FinishBreakpoint __init__, which now default it's frame argument to gdb.current_frame(), instead of making it mandatory. I've updated the documentation and testsuite accordingly. Thanks for the time you spend reviewing my patches, Kevin -- 2011-11-09 Kevin Pouget Introduce gdb.FinishBreakpoint 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 (print_return_value): Split to create get_return_value. (get_return_value): New function based on print_return_value. Handle case where stop_registers are not set. * inferior.h (get_return_value): New prototype. * python/py-breakpoint.c (bppy_pending_object): Make non-static. (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. (gdbpy_should_stop): Add pre/post hooks before/after calling stop method. * 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): Moved from py-breakpoint.c. (BPPY_SET_REQUIRE_VALID): Likewise. (frame_object_to_frame_info): New prototype. (gdbpy_initialize_finishbreakpoints): New prototype. (bpfinishpy_is_finish_bp): Likewise. (bpfinishpy_pre_stop_hook): Likewise. (bpfinishpy_post_stop_hook): 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. --bcaec50163cf8407e004b14dd7a6 Content-Type: text/x-patch; charset=US-ASCII; name="0001-Introduce-gdb.FinishBreakpoint.patch" Content-Disposition: attachment; filename="0001-Introduce-gdb.FinishBreakpoint.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gusel61y0 Content-length: 75356 RnJvbSA4MmFhZGVlNDUwNTA2OWYyODExN2I5MWU2MTcwMDQ1Y2VmOGNjY2M2 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLZXZpbiBQb3VnZXQg PGtldmluLnBvdWdldEBzdC5jb20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMTEg MTM6NTk6MjMgKzAyMDAKU3ViamVjdDogW1BBVENIXSAgSW50cm9kdWNlIGdk Yi5GaW5pc2hCcmVha3BvaW50CgotLS0KIGdkYi9NYWtlZmlsZS5pbiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBnZGIv TkVXUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDQgKwogZ2RiL2RvYy9nZGIudGV4aW5mbyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDUxICsrKwogZ2RiL2luZmNtZC5jICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQwICsr LQogZ2RiL2luZmVyaW9yLmggICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICAzICsKIGdkYi9weXRob24vcHktYnJlYWtwb2ludC5j ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0OCArLS0KIGdkYi9weXRo b24vcHktZmluaXNoYnJlYWtwb2ludC5jICAgICAgICAgICAgICAgICAgIHwg IDQ0NyArKysrKysrKysrKysrKysrKysrKwogZ2RiL3B5dGhvbi9weS1mcmFt ZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMyICstCiBn ZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oICAgICAgICAgICAgICAgICAg ICAgICB8ICAgNTAgKysrLQogZ2RiL3B5dGhvbi9weXRob24uYyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIGdkYi90ZXN0c3Vp dGUvZ2RiLnB5dGhvbi9weS1icmVha3BvaW50LmV4cCAgICAgICAgIHwgICAg NyArLQogZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVh a3BvaW50LmMgICAgfCAgIDk3ICsrKysrCiBnZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuZXhwICB8ICAyMzMgKysrKysr KysrKwogZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVh a3BvaW50LnB5ICAgfCAgIDg5ICsrKysKIGdkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIuY2MgIHwgICA1OSArKysKIGdk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIu ZXhwIHwgICA2NSArKysKIGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1m aW5pc2gtYnJlYWtwb2ludDIucHkgIHwgICAzMyArKwogMTcgZmlsZXMgY2hh bmdlZCwgMTIwMCBpbnNlcnRpb25zKCspLCA2NSBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBnZGIvcHl0aG9uL3B5LWZpbmlzaGJyZWFrcG9p bnQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3Bv aW50LmV4cAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUvZ2Ri LnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5weQogY3JlYXRlIG1vZGUg MTAwNjQ0IGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJl YWtwb2ludDIuY2MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvdGVzdHN1aXRl L2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLmV4cAogY3JlYXRl IG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5p c2gtYnJlYWtwb2ludDIucHkKCmRpZmYgLS1naXQgYS9nZGIvTWFrZWZpbGUu aW4gYi9nZGIvTWFrZWZpbGUuaW4KaW5kZXggN2E3ZmY5Zi4uMzFjZGExYiAx MDA2NDQKLS0tIGEvZ2RiL01ha2VmaWxlLmluCisrKyBiL2dkYi9NYWtlZmls ZS5pbgpAQCAtMjg3LDYgKzI4Nyw3IEBAIFNVQkRJUl9QWVRIT05fT0JTID0g XAogCXB5LWV2dHJlZ2lzdHJ5Lm8gXAogCXB5LWV2dHMubyBcCiAJcHktZXhp dGVkZXZlbnQubyBcCisJcHktZmluaXNoYnJlYWtwb2ludC5vIFwKIAlweS1m cmFtZS5vIFwKIAlweS1mdW5jdGlvbi5vIFwKIAlweS1pbmZlcmlvci5vIFwK QEAgLTMxOCw2ICszMTksNyBAQCBTVUJESVJfUFlUSE9OX1NSQ1MgPSBcCiAJ cHl0aG9uL3B5LWV2dHJlZ2lzdHJ5LmMgXAogCXB5dGhvbi9weS1ldnRzLmMg XAogCXB5dGhvbi9weS1leGl0ZWRldmVudC5jIFwKKwlweXRob24vcHktZmlu aXNoYnJlYWtwb2ludC5jIFwKIAlweXRob24vcHktZnJhbWUuYyBcCiAJcHl0 aG9uL3B5LWZ1bmN0aW9uLmMgXAogCXB5dGhvbi9weS1pbmZlcmlvci5jIFwK QEAgLTIxMDMsNiArMjEwNSwxMCBAQCBweS1leGl0ZWRldmVudC5vOiAkKHNy Y2RpcikvcHl0aG9uL3B5LWV4aXRlZGV2ZW50LmMKIAkkKENPTVBJTEUpICQo UFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS1leGl0ZWRldmVu dC5jCiAJJChQT1NUQ09NUElMRSkKIAorcHktZmluaXNoYnJlYWtwb2ludC5v OiAkKHNyY2RpcikvcHl0aG9uL3B5LWZpbmlzaGJyZWFrcG9pbnQuYworCSQo Q09NUElMRSkgJChQWVRIT05fQ0ZMQUdTKSAkKHNyY2RpcikvcHl0aG9uL3B5 LWZpbmlzaGJyZWFrcG9pbnQuYworCSQoUE9TVENPTVBJTEUpCisKIHB5LWZy YW1lLm86ICQoc3JjZGlyKS9weXRob24vcHktZnJhbWUuYwogCSQoQ09NUElM RSkgJChQWVRIT05fQ0ZMQUdTKSAkKHNyY2RpcikvcHl0aG9uL3B5LWZyYW1l LmMKIAkkKFBPU1RDT01QSUxFKQpkaWZmIC0tZ2l0IGEvZ2RiL05FV1MgYi9n ZGIvTkVXUwppbmRleCAxNzEzMDQ5Li5iMTcwYjBhIDEwMDY0NAotLS0gYS9n ZGIvTkVXUworKysgYi9nZGIvTkVXUwpAQCAtNTEsNiArNTEsMTAgQEAKICAg KiogVGhlICJnZGIuYnJlYWtwb2ludCIgZnVuY3Rpb24gaGFzIGJlZW4gZGVw cmVjYXRlZCBpbiBmYXZvciBvZgogICAgICAiZ2RiLmJyZWFrcG9pbnRzIi4K IAorICAqKiBBIG5ldyBjbGFzcyAiZ2RiLkZpbmlzaEJyZWFrcG9pbnQiIGlz IHByb3ZpZGVkIHRvIGNhdGNoIHRoZSByZXR1cm4KKyAgICAgb2YgYSBmdW5j dGlvbi4gIFRoaXMgY2xhc3MgaXMgYmFzZWQgb24gdGhlICJmaW5pc2giIGNv bW1hbmQKKyAgICAgYXZhaWxhYmxlIGluIHRoZSBDTEkuIAorCiAgICoqIFR5 cGUgb2JqZWN0cyBmb3Igc3RydWN0IGFuZCB1bmlvbiB0eXBlcyBub3cgYWxs b3cgYWNjZXNzIHRvCiAgICAgIHRoZSBmaWVsZHMgdXNpbmcgc3RhbmRhcmQg UHl0aG9uIGRpY3Rpb25hcnkgKG1hcHBpbmcpIG1ldGhvZHMuCiAgICAgIEZv ciBleGFtcGxlLCAic29tZV90eXBlWydteWZpZWxkJ10iIG5vdyB3b3Jrcywg YXMgZG9lcwpkaWZmIC0tZ2l0IGEvZ2RiL2RvYy9nZGIudGV4aW5mbyBiL2dk Yi9kb2MvZ2RiLnRleGluZm8KaW5kZXggZDJiZGVmYS4uMTBlYTc2MCAxMDA2 NDQKLS0tIGEvZ2RiL2RvYy9nZGIudGV4aW5mbworKysgYi9nZGIvZG9jL2dk Yi50ZXhpbmZvCkBAIC0yMTQwNCw2ICsyMTQwNCw4IEBAIHNpdHVhdGlvbiwg YSBQeXRob24gQGNvZGV7S2V5Ym9hcmRJbnRlcnJ1cHR9IGV4Y2VwdGlvbiBp cyB0aHJvd24uCiAqIFN5bWJvbCBUYWJsZXMgSW4gUHl0aG9uOjogICAgIFB5 dGhvbiByZXByZXNlbnRhdGlvbiBvZiBzeW1ib2wgdGFibGVzLgogKiBMYXp5 IFN0cmluZ3MgSW4gUHl0aG9uOjogICAgICBQeXRob24gcmVwcmVzZW50YXRp b24gb2YgbGF6eSBzdHJpbmdzLgogKiBCcmVha3BvaW50cyBJbiBQeXRob246 OiAgICAgICBNYW5pcHVsYXRpbmcgYnJlYWtwb2ludHMgdXNpbmcgUHl0aG9u LgorKiBGaW5pc2ggQnJlYWtwb2ludHMgaW4gUHl0aG9uOjogU2V0dGluZyBC cmVha3BvaW50cyBvbiBmdW5jdGlvbiByZXR1cm4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdXNpbmcgUHl0aG9uLgogQGVuZCBtZW51CiAK IEBub2RlIEJhc2ljIFB5dGhvbgpAQCAtMjQyMzgsNiArMjQyNDAsNTUgQEAg Y29tbWFuZHMsIHNlcGFyYXRlZCBieSBuZXdsaW5lcy4gIElmIHRoZXJlIGFy ZSBubyBjb21tYW5kcywgdGhpcwogYXR0cmlidXRlIGlzIEBjb2Rle05vbmV9 LiAgVGhpcyBhdHRyaWJ1dGUgaXMgbm90IHdyaXRhYmxlLgogQGVuZCBkZWZ2 YXIKIAorQG5vZGUgRmluaXNoIEJyZWFrcG9pbnRzIGluIFB5dGhvbgorQHN1 YnN1YnNlY3Rpb24gRmluaXNoIEJyZWFrcG9pbnRzCisKK0BjaW5kZXggcHl0 aG9uIGZpbmlzaCBicmVha3BvaW50cworQHRpbmRleCBnZGIuRmluaXNoQnJl YWtwb2ludAorCitBIGZpbmlzaCBicmVha3BvaW50IGlzIGEgdGVtcG9yYXJ5 IGJyZWFrcG9pbnQgc2V0IGF0IHRoZSByZXR1cm4gYWRkcmVzcyBvZgorYSBm cmFtZSwgYmFzZWQgb24gdGhlIEBjb2Rle2ZpbmlzaH0gY29tbWFuZC4gIEBj b2Rle2dkYi5GaW5pc2hCcmVha3BvaW50fQorZXh0ZW5kcyBAY29kZXtnZGIu QnJlYWtwb2ludH0uICBUaGUgdW5kZXJseWluZyBicmVha3BvaW50IHdpbGwg YmUgZGlzYWJsZWQgCithbmQgZGVsZXRlZCB3aGVuIHRoZSBleGVjdXRpb24g d2lsbCBydW4gb3V0IG9mIHRoZSBicmVha3BvaW50IHNjb3BlIChpLmUuQDog CitAY29kZXtCcmVha3BvaW50LnN0b3B9IG9yIEBjb2Rle0ZpbmlzaEJyZWFr cG9pbnQub3V0X29mX3Njb3BlfSB0cmlnZ2VyZWQpLgorCitAZGVmdW4gRmlu aXNoQnJlYWtwb2ludC5fX2luaXRfXyAoQHJ7W31mcmFtZUBye119IEBye1t9 LCBpbnRlcm5hbEBye119KQorQ3JlYXRlIGEgZmluaXNoIGJyZWFrcG9pbnQg YXQgdGhlIHJldHVybiBhZGRyZXNzIG9mIHRoZSBAY29kZXtnZGIuRnJhbWV9 CitvYmplY3QgQHZhcntmcmFtZX0gKG9yIEBjb2Rle2dkYi5zZWxlY3RlZF9m cmFtZSgpfSBpcyBub3QgcHJvdmlkZWQpLiAgVGhlIAorb3B0aW9uYWwgQHZh cntpbnRlcm5hbH0gYXJndW1lbnQgYWxsb3dzIHRoZSBicmVha3BvaW50IHRv IGJlY29tZSBpbnZpc2libGUgdG8KK3RoZSB1c2VyLiAgQHhyZWZ7QnJlYWtw b2ludHMgSW4gUHl0aG9ufSwgZm9yIGZ1cnRoZXIgZGV0YWlscyBhYm91dCAK K3RoaXMgYXJndW1lbnQuCitAZW5kIGRlZnVuCisKK0BkZWZ1biBGaW5pc2hC cmVha3BvaW50Lm91dF9vZl9zY29wZSAoc2VsZikKK0luIHNvbWUgY2lyY3Vt c3RhbmNlcyAoZS5nLkA6IEBjb2Rle2xvbmdqbXB9LCBDQHR7Kyt9IGV4Y2Vw dGlvbnMsIEB2YWx1ZXtHREJOfSAKK0Bjb2Rle3JldHVybn0gY29tbWFuZCwg QGRvdHN7fSksIGEgZnVuY3Rpb24gbWF5IG5vdCBwcm9wZXJseSB0ZXJtaW5h dGUsIGFuZAordGh1cyBuZXZlciBoaXQgdGhlIGZpbmlzaCBicmVha3BvaW50 LiAgV2hlbiBAdmFsdWV7R0RCTn0gbm90aWNlcyBzdWNoIGEKK3NpdHVhdGlv biwgdGhlIEBjb2Rle291dF9vZl9zY29wZX0gY2FsbGJhY2sgd2lsbCBiZSB0 cmlnZ2VyZWQuCisKK1lvdSBtYXkgd2FudCB0byBzdWItY2xhc3MgQGNvZGV7 Z2RiLkZpbmlzaEJyZWFrcG9pbnR9IGFuZCBvdmVycmlkZSB0aGlzCittZXRo b2Q6CisKK0BzbWFsbGV4YW1wbGUKK2NsYXNzIE15RmluaXNoQnJlYWtwb2lu dCAoZ2RiLkZpbmlzaEJyZWFrcG9pbnQpCisgICAgZGVmIHN0b3AgKHNlbGYp OgorICAgICAgICBwcmludCAibm9ybWFsIGZpbmlzaCIKKyAgICAgICAgcmV0 dXJuIFRydWUKKyAgICAKKyAgICBkZWYgb3V0X29mX3Njb3BlICgpOgorICAg ICAgICBwcmludCAiYWJub3JtYWwgZmluaXNoIgorQGVuZCBzbWFsbGV4YW1w bGUgCitAZW5kIGRlZnVuCisKK0BkZWZ2YXIgRmluaXNoQnJlYWtwb2ludC5y ZXR1cm5fdmFsdWUKK1doZW4gQHZhbHVle0dEQk59IGlzIHN0b3BwZWQgYXQg YSBmaW5pc2ggYnJlYWtwb2ludCBhbmQgdGhlIGZyYW1lIAordXNlZCB0byBi dWlsZCB0aGUgQGNvZGV7Z2RiLkZpbmlzaEJyZWFrcG9pbnR9IG9iamVjdCBo YWQgZGVidWcgc3ltYm9scywgdGhpcworYXR0cmlidXRlIHdpbGwgY29udGFp biBhIEBjb2Rle2dkYi5WYWx1ZX0gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8g dGhlIHJldHVybgordmFsdWUgb2YgdGhlIGZ1bmN0aW9uLiAgVGhlIHZhbHVl IHdpbGwgYmUgQGNvZGV7Tm9uZX0gaWYgdGhlIGZ1bmN0aW9uIHJldHVybiAK K3R5cGUgaXMgQGNvZGV7Vk9JRH0gb3IgaWYgdGhlIHJldHVybiB2YWx1ZSB3 YXMgbm90IGNvbXB1dGFibGUuICBUaGlzIGF0dHJpYnV0ZQoraXMgbm90IHdy aXRhYmxlLgorQGVuZCBkZWZ2YXIKKwogQG5vZGUgTGF6eSBTdHJpbmdzIElu IFB5dGhvbgogQHN1YnN1YnNlY3Rpb24gUHl0aG9uIHJlcHJlc2VudGF0aW9u IG9mIGxhenkgc3RyaW5ncy4KIApkaWZmIC0tZ2l0IGEvZ2RiL2luZmNtZC5j IGIvZ2RiL2luZmNtZC5jCmluZGV4IDdiOTM1ZmUuLjg5ZDFiMWQgMTAwNjQ0 Ci0tLSBhL2dkYi9pbmZjbWQuYworKysgYi9nZGIvaW5mY21kLmMKQEAgLTE0 MTMsMTYgKzE0MTMsMjYgQEAgYWR2YW5jZV9jb21tYW5kIChjaGFyICphcmcs IGludCBmcm9tX3R0eSkKICAgdW50aWxfYnJlYWtfY29tbWFuZCAoYXJnLCBm cm9tX3R0eSwgMSk7CiB9CiAMCi0vKiBQcmludCB0aGUgcmVzdWx0IG9mIGEg ZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiBhICdmaW5pc2gnIGNvbW1hbmQuICAq LworLyogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgcmVzdWx0IG9mIGEgZnVu Y3Rpb24gYXQgdGhlIGVuZCBvZiBhICdmaW5pc2gnCisgICBjb21tYW5kL0JQ LiAgKi8KIAotc3RhdGljIHZvaWQKLXByaW50X3JldHVybl92YWx1ZSAoc3Ry dWN0IHR5cGUgKmZ1bmNfdHlwZSwgc3RydWN0IHR5cGUgKnZhbHVlX3R5cGUp CitzdHJ1Y3QgdmFsdWUgKgorZ2V0X3JldHVybl92YWx1ZSAoc3RydWN0IHR5 cGUgKmZ1bmNfdHlwZSwgc3RydWN0IHR5cGUgKnZhbHVlX3R5cGUpCiB7Ci0g IHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X3JlZ2NhY2hlX2FyY2gg KHN0b3BfcmVnaXN0ZXJzKTsKLSAgc3RydWN0IGNsZWFudXAgKm9sZF9jaGFp bjsKLSAgc3RydWN0IHVpX3N0cmVhbSAqc3RiOworICBzdHJ1Y3QgcmVnY2Fj aGUgKnN0b3BfcmVncyA9IHN0b3BfcmVnaXN0ZXJzOworICBzdHJ1Y3QgZ2Ri YXJjaCAqZ2RiYXJjaDsKICAgc3RydWN0IHZhbHVlICp2YWx1ZTsKICAgc3Ry dWN0IHVpX291dCAqdWlvdXQgPSBjdXJyZW50X3Vpb3V0OworICBzdHJ1Y3Qg Y2xlYW51cCAqY2xlYW51cCA9IE5VTEw7CisKKyAgLyogSWYgc3RvcF9yZWdp c3RlcnMgd2hlcmUgbm90IHNhdmVkLCB1c2UgdGhlIGN1cnJlbnQgcmVnaXN0 ZXJzLiAgKi8KKyAgaWYgKCFzdG9wX3JlZ3MpCisgICAgeworICAgICAgc3Rv cF9yZWdzID0gcmVnY2FjaGVfZHVwIChnZXRfY3VycmVudF9yZWdjYWNoZSAo KSk7CisgICAgICBjbGVhbnVwID0gbWFrZV9jbGVhbnVwX3JlZ2NhY2hlX3hm cmVlIChzdG9wX3JlZ3MpOworICAgIH0KKworICBnZGJhcmNoID0gZ2V0X3Jl Z2NhY2hlX2FyY2ggKHN0b3BfcmVncyk7CiAKICAgQ0hFQ0tfVFlQRURFRiAo dmFsdWVfdHlwZSk7CiAgIGdkYl9hc3NlcnQgKFRZUEVfQ09ERSAodmFsdWVf dHlwZSkgIT0gVFlQRV9DT0RFX1ZPSUQpOwpAQCAtMTQ0MSw3ICsxNDUxLDcg QEAgcHJpbnRfcmV0dXJuX3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBl LCBzdHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSkKICAgICBjYXNlIFJFVFVSTl9W QUxVRV9BQklfUkVUVVJOU19BRERSRVNTOgogICAgIGNhc2UgUkVUVVJOX1ZB TFVFX0FCSV9QUkVTRVJWRVNfQUREUkVTUzoKICAgICAgIHZhbHVlID0gYWxs b2NhdGVfdmFsdWUgKHZhbHVlX3R5cGUpOwotICAgICAgZ2RiYXJjaF9yZXR1 cm5fdmFsdWUgKGdkYmFyY2gsIGZ1bmNfdHlwZSwgdmFsdWVfdHlwZSwgc3Rv cF9yZWdpc3RlcnMsCisgICAgICBnZGJhcmNoX3JldHVybl92YWx1ZSAoZ2Ri YXJjaCwgZnVuY190eXBlLCB2YWx1ZV90eXBlLCBzdG9wX3JlZ3MsCiAJCQkg ICAgdmFsdWVfY29udGVudHNfcmF3ICh2YWx1ZSksIE5VTEwpOwogICAgICAg YnJlYWs7CiAgICAgY2FzZSBSRVRVUk5fVkFMVUVfU1RSVUNUX0NPTlZFTlRJ T046CkBAIC0xNDUxLDYgKzE0NjEsMjIgQEAgcHJpbnRfcmV0dXJuX3ZhbHVl IChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLCBzdHJ1Y3QgdHlwZSAqdmFsdWVf dHlwZSkKICAgICAgIGludGVybmFsX2Vycm9yIChfX0ZJTEVfXywgX19MSU5F X18sIF8oImJhZCBzd2l0Y2giKSk7CiAgICAgfQogCisgIGlmIChjbGVhbnVw KQorICAgIGRvX2NsZWFudXBzIChjbGVhbnVwKTsKKworICByZXR1cm4gdmFs dWU7Cit9CisKKy8qIFByaW50IHRoZSByZXN1bHQgb2YgYSBmdW5jdGlvbiBh dCB0aGUgZW5kIG9mIGEgJ2ZpbmlzaCcgY29tbWFuZC4gICovCisKK3N0YXRp YyB2b2lkCitwcmludF9yZXR1cm5fdmFsdWUgKHN0cnVjdCB0eXBlICpmdW5j X3R5cGUsIHN0cnVjdCB0eXBlICp2YWx1ZV90eXBlKQoreworICBzdHJ1Y3Qg dmFsdWUgKnZhbHVlID0gZ2V0X3JldHVybl92YWx1ZSAoZnVuY190eXBlLCB2 YWx1ZV90eXBlKTsKKyAgc3RydWN0IGNsZWFudXAgKm9sZF9jaGFpbjsKKyAg c3RydWN0IHVpX3N0cmVhbSAqc3RiOworICBzdHJ1Y3QgdWlfb3V0ICp1aW91 dCA9IGN1cnJlbnRfdWlvdXQ7CisKICAgaWYgKHZhbHVlKQogICAgIHsKICAg ICAgIHN0cnVjdCB2YWx1ZV9wcmludF9vcHRpb25zIG9wdHM7CmRpZmYgLS1n aXQgYS9nZGIvaW5mZXJpb3IuaCBiL2dkYi9pbmZlcmlvci5oCmluZGV4IGNm YWVhN2YuLmYxOTg2OTYgMTAwNjQ0Ci0tLSBhL2dkYi9pbmZlcmlvci5oCisr KyBiL2dkYi9pbmZlcmlvci5oCkBAIC0yNjksNiArMjY5LDkgQEAgZXh0ZXJu IHZvaWQgZGV0YWNoX2NvbW1hbmQgKGNoYXIgKiwgaW50KTsKIAogZXh0ZXJu IHZvaWQgbm90aWNlX25ld19pbmZlcmlvciAocHRpZF90LCBpbnQsIGludCk7 CiAKK2V4dGVybiBzdHJ1Y3QgdmFsdWUgKmdldF9yZXR1cm5fdmFsdWUgKHN0 cnVjdCB0eXBlICpmdW5jX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSk7CisK IC8qIEFkZHJlc3MgYXQgd2hpY2ggaW5mZXJpb3Igc3RvcHBlZC4gICovCiAK IGV4dGVybiBDT1JFX0FERFIgc3RvcF9wYzsKZGlmZiAtLWdpdCBhL2dkYi9w eXRob24vcHktYnJlYWtwb2ludC5jIGIvZ2RiL3B5dGhvbi9weS1icmVha3Bv aW50LmMKaW5kZXggZjIzNWJiYy4uOTRmOWNiMSAxMDA2NDQKLS0tIGEvZ2Ri L3B5dGhvbi9weS1icmVha3BvaW50LmMKKysrIGIvZ2RiL3B5dGhvbi9weS1i cmVha3BvaW50LmMKQEAgLTMxLDUyICszMSwxNiBAQAogI2luY2x1ZGUgImFy Y2gtdXRpbHMuaCIKICNpbmNsdWRlICJsYW5ndWFnZS5oIgogCi1zdGF0aWMg UHlUeXBlT2JqZWN0IGJyZWFrcG9pbnRfb2JqZWN0X3R5cGU7Ci0KIC8qIE51 bWJlciBvZiBsaXZlIGJyZWFrcG9pbnRzLiAgKi8KIHN0YXRpYyBpbnQgYnBw eV9saXZlOwogCiAvKiBWYXJpYWJsZXMgdXNlZCB0byBwYXNzIGluZm9ybWF0 aW9uIGJldHdlZW4gdGhlIEJyZWFrcG9pbnQKICAgIGNvbnN0cnVjdG9yIGFu ZCB0aGUgYnJlYWtwb2ludC1jcmVhdGVkIGhvb2sgZnVuY3Rpb24uICAqLwot c3RhdGljIGJyZWFrcG9pbnRfb2JqZWN0ICpicHB5X3BlbmRpbmdfb2JqZWN0 OworYnJlYWtwb2ludF9vYmplY3QgKmJwcHlfcGVuZGluZ19vYmplY3Q7CiAK IC8qIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSBQeXRob24gY29u ZGl0aW9uIGlzIGV2YWx1YXRlZC4gICovCiBzdGF0aWMgY2hhciAqIGNvbnN0 IHN0b3BfZnVuYyA9ICJzdG9wIjsKIAotc3RydWN0IGJyZWFrcG9pbnRfb2Jq ZWN0Ci17Ci0gIFB5T2JqZWN0X0hFQUQKLQotICAvKiBUaGUgYnJlYWtwb2lu dCBudW1iZXIgYWNjb3JkaW5nIHRvIGdkYi4gICovCi0gIGludCBudW1iZXI7 Ci0KLSAgLyogVGhlIGdkYiBicmVha3BvaW50IG9iamVjdCwgb3IgTlVMTCBp ZiB0aGUgYnJlYWtwb2ludCBoYXMgYmVlbgotICAgICBkZWxldGVkLiAgKi8K LSAgc3RydWN0IGJyZWFrcG9pbnQgKmJwOwotfTsKLQotLyogUmVxdWlyZSB0 aGF0IEJSRUFLUE9JTlQgYmUgYSB2YWxpZCBicmVha3BvaW50IElEOyB0aHJv dyBhIFB5dGhvbgotICAgZXhjZXB0aW9uIGlmIGl0IGlzIGludmFsaWQuICAq LwotI2RlZmluZSBCUFBZX1JFUVVJUkVfVkFMSUQoQnJlYWtwb2ludCkJCQkJ CVwKLSAgICBkbyB7CQkJCQkJCQlcCi0gICAgICBpZiAoKEJyZWFrcG9pbnQp LT5icCA9PSBOVUxMKQkJCQkJXAotCXJldHVybiBQeUVycl9Gb3JtYXQgKFB5 RXhjX1J1bnRpbWVFcnJvciwgICAgICAgICAgICAgICAgICAgICAgICBcCi0J CQkgICAgIF8oIkJyZWFrcG9pbnQgJWQgaXMgaW52YWxpZC4iKSwJCVwKLQkJ CSAgICAgKEJyZWFrcG9pbnQpLT5udW1iZXIpOwkJCVwKLSAgICB9IHdoaWxl ICgwKQotCi0vKiBSZXF1aXJlIHRoYXQgQlJFQUtQT0lOVCBiZSBhIHZhbGlk IGJyZWFrcG9pbnQgSUQ7IHRocm93IGEgUHl0aG9uCi0gICBleGNlcHRpb24g aWYgaXQgaXMgaW52YWxpZC4gIFRoaXMgbWFjcm8gaXMgZm9yIHVzZSBpbiBz ZXR0ZXIgZnVuY3Rpb25zLiAgKi8KLSNkZWZpbmUgQlBQWV9TRVRfUkVRVUlS RV9WQUxJRChCcmVha3BvaW50KQkJCQlcCi0gICAgZG8gewkJCQkJCQkJXAot ICAgICAgaWYgKChCcmVha3BvaW50KS0+YnAgPT0gTlVMTCkJCQkJCVwKLSAg ICAgICAgewkJCQkJCQkJXAotCSAgUHlFcnJfRm9ybWF0IChQeUV4Y19SdW50 aW1lRXJyb3IsIF8oIkJyZWFrcG9pbnQgJWQgaXMgaW52YWxpZC4iKSwgXAot CQkJKEJyZWFrcG9pbnQpLT5udW1iZXIpOwkJCQlcCi0JICByZXR1cm4gLTE7 CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi0gICAgfSB3aGlsZSAoMCkKLQogLyog VGhpcyBpcyB1c2VkIHRvIGluaXRpYWxpemUgdmFyaW91cyBnZGIuYnBfKiBj b25zdGFudHMuICAqLwogc3RydWN0IHB5YnBfY29kZQogewpAQCAtNzU2LDYg KzcyMCw5IEBAIGdkYnB5X3Nob3VsZF9zdG9wIChzdHJ1Y3QgYnJlYWtwb2lu dF9vYmplY3QgKmJwX29iaikKICAgc3RydWN0IGdkYmFyY2ggKmdhcmNoID0g Yi0+Z2RiYXJjaCA/IGItPmdkYmFyY2ggOiBnZXRfY3VycmVudF9hcmNoICgp OwogICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cCA9IGVuc3VyZV9weXRob25f ZW52IChnYXJjaCwgY3VycmVudF9sYW5ndWFnZSk7CiAKKyAgaWYgKGJwX29i ai0+aXNfZmluaXNoX2JwKQorICAgIGJwZmluaXNocHlfcHJlX3N0b3BfaG9v ayAoYnBfb2JqKTsKKwogICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyAo cHlfYnAsIHN0b3BfZnVuYykpCiAgICAgewogICAgICAgUHlPYmplY3QgKnJl c3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QgKHB5X2JwLCBzdG9wX2Z1bmMs IE5VTEwpOwpAQCAtNzc3LDYgKzc0NCwxMCBAQCBnZGJweV9zaG91bGRfc3Rv cCAoc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopCiAgICAgICBl bHNlCiAJZ2RicHlfcHJpbnRfc3RhY2sgKCk7CiAgICAgfQorCisgIGlmIChi cF9vYmotPmlzX2ZpbmlzaF9icCkKKyAgICBicGZpbmlzaHB5X3Bvc3Rfc3Rv cF9ob29rIChicF9vYmopOworCiAgIGRvX2NsZWFudXBzIChjbGVhbnVwKTsK IAogICByZXR1cm4gc3RvcDsKQEAgLTgzOSw2ICs4MTAsNyBAQCBnZGJweV9i cmVha3BvaW50X2NyZWF0ZWQgKHN0cnVjdCBicmVha3BvaW50ICpicCkKICAg ICAgIG5ld2JwLT5udW1iZXIgPSBicC0+bnVtYmVyOwogICAgICAgbmV3YnAt PmJwID0gYnA7CiAgICAgICBuZXdicC0+YnAtPnB5X2JwX29iamVjdCA9IG5l d2JwOworICAgICAgbmV3YnAtPmlzX2ZpbmlzaF9icCA9IDA7CiAgICAgICBQ eV9JTkNSRUYgKG5ld2JwKTsKICAgICAgICsrYnBweV9saXZlOwogICAgIH0K QEAgLTEwMDAsNyArOTcyLDcgQEAgc3RhdGljIFB5TWV0aG9kRGVmIGJyZWFr cG9pbnRfb2JqZWN0X21ldGhvZHNbXSA9CiAgIHsgTlVMTCB9IC8qIFNlbnRp bmVsLiAgKi8KIH07CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgYnJlYWtwb2lu dF9vYmplY3RfdHlwZSA9CitQeVR5cGVPYmplY3QgYnJlYWtwb2ludF9vYmpl Y3RfdHlwZSA9CiB7CiAgIFB5T2JqZWN0X0hFQURfSU5JVCAoTlVMTCkKICAg MCwJCQkJICAvKm9iX3NpemUqLwpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9w eS1maW5pc2hicmVha3BvaW50LmMgYi9nZGIvcHl0aG9uL3B5LWZpbmlzaGJy ZWFrcG9pbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4xYzNiNjI3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3B5dGhvbi9weS1m aW5pc2hicmVha3BvaW50LmMKQEAgLTAsMCArMSw0NDcgQEAKKy8qIFB5dGhv biBpbnRlcmZhY2UgdG8gZmluaXNoIGJyZWFrcG9pbnRzCisKKyAgIENvcHly aWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uICAqLworCisKKworI2luY2x1ZGUgImRlZnMuaCIKKyNp bmNsdWRlICJleGNlcHRpb25zLmgiCisjaW5jbHVkZSAicHl0aG9uLWludGVy bmFsLmgiCisjaW5jbHVkZSAiYnJlYWtwb2ludC5oIgorI2luY2x1ZGUgImZy YW1lLmgiCisjaW5jbHVkZSAiZ2RidGhyZWFkLmgiCisjaW5jbHVkZSAiYXJj aC11dGlscy5oIgorI2luY2x1ZGUgImxhbmd1YWdlLmgiCisjaW5jbHVkZSAi b2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJpbmZlcmlvci5oIgorCitzdGF0aWMg UHlUeXBlT2JqZWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdF90eXBlOwor CisvKiBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgUHl0aG9uIGZp bmlzaCBicCBpcyBmb3VuZCBvdXQgb2Ygc2NvcGUuICAqLworc3RhdGljIGNo YXIgKiBjb25zdCBvdXRvZnNjb3BlX2Z1bmMgPSAib3V0X29mX3Njb3BlIjsK KworLyogc3RydWN0IGltcGxlbWVudGluZyB0aGUgZ2RiLkZpbmlzaEJyZWFr cG9pbnQgb2JqZWN0IGJ5IGV4dGVuZGluZworICAgdGhlIGdkYi5CcmVha3Bv aW50IGNsYXNzLiAgKi8KK3N0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmpl Y3QKK3sKKyAgLyogZ2RiLkJyZWFrcG9pbnQgYmFzZSBjbGFzcy4gICovCisg IGJyZWFrcG9pbnRfb2JqZWN0IHB5X2JwOworICAvKiBnZGIuVHlwZSBvYmpl Y3Qgb2YgdGhlIHZhbHVlIHJldHVybiBieSB0aGUgYnJlYWtwb2ludGVkIGZ1 bmN0aW9uLgorICAgICBNYXkgYmUgTlVMTCBpZiBubyBkZWJ1ZyBpbmZvcm1h dGlvbiB3YXMgYXZhaWxhYmxlIG9yIHJldHVybiB0eXBlCisgICAgIHdhcyBW T0lELiAgKi8KKyAgUHlPYmplY3QgKnJldHVybl90eXBlOworICAvKiBnZGIu VHlwZSBvYmplY3Qgb2YgdGhlIGZ1bmN0aW9uIGZpbmlzaGVkIGJ5IHRoaXMg YnJlYWtwb2ludC4gIFdpbGwgYmUKKyAgICAgTlVMTCBpZiByZXR1cm5fdHlw ZSBpcyBOVUxMLiAgKi8KKyAgUHlPYmplY3QgKmZ1bmN0aW9uX3R5cGU7Cisg IC8qIFdoZW4gc3RvcHBlZCBhdCB0aGlzIEZpbmlzaEJyZWFrcG9pbnQsIGdk Yi5WYWx1ZSBvYmplY3QgcmV0dXJuZWQgYnkKKyAgICAgdGhlIGZ1bmN0aW9u OyBQeV9Ob25lIGlmIHRoZSB2YWx1ZSBpcyBub3QgY29tcHV0YWJsZTsgTlVM TCBpZiBHREIgaXMKKyAgICAgbm90IHN0b3BwZWQgYXQgYSBGaW5pc2hCcmVh a3BvaW50LiAgKi8KKyAgUHlPYmplY3QgKnJldHVybl92YWx1ZTsKK307CisK Ky8qIFB5dGhvbiBmdW5jdGlvbiB0byBnZXQgdGhlICdyZXR1cm5fdmFsdWUn IGF0dHJpYnV0ZSBvZgorICAgRmluaXNoQnJlYWtwb2ludC4gICovCisKK3N0 YXRpYyBQeU9iamVjdCAqCiticGZpbmlzaHB5X2dldF9yZXR1cm52YWx1ZSAo UHlPYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCit7CisgIHN0cnVjdCBm aW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKnNlbGZfZmluaXNoYnAgPQorICAg ICAgKHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsK KworICBpZiAoIXNlbGZfZmluaXNoYnAtPnJldHVybl92YWx1ZSkKKyAgICBQ eV9SRVRVUk5fTk9ORTsKKworICBQeV9JTkNSRUYgKHNlbGZfZmluaXNoYnAt PnJldHVybl92YWx1ZSk7CisgIHJldHVybiBzZWxmX2ZpbmlzaGJwLT5yZXR1 cm5fdmFsdWU7Cit9CisKKy8qIERlYWxsb2NhdGUgRmluaXNoQnJlYWtwb2lu dCBvYmplY3QuICAqLworCitzdGF0aWMgdm9pZAorYnBmaW5pc2hweV9kZWFs bG9jIChQeU9iamVjdCAqc2VsZikKK3sKKyAgc3RydWN0IGZpbmlzaF9icmVh a3BvaW50X29iamVjdCAqc2VsZl9icGZpbmlzaCA9CisgICAgICAgIChzdHJ1 Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICopIHNlbGY7CisKKyAgUHlf WERFQ1JFRiAoc2VsZl9icGZpbmlzaC0+ZnVuY3Rpb25fdHlwZSk7CisgIFB5 X1hERUNSRUYgKHNlbGZfYnBmaW5pc2gtPnJldHVybl90eXBlKTsKKyAgUHlf WERFQ1JFRiAoc2VsZl9icGZpbmlzaC0+cmV0dXJuX3ZhbHVlKTsKK30KKwor LyogVHJpZ2dlcmVkIHdoZW4gZ2RicHlfc2hvdWxkX3N0b3AgaXMgYWJvdXQg dG8gZXhlY3V0ZSB0aGUgYHN0b3AnIGNhbGxiYWNrCisgICBvZiB0aGUgZ2Ri LkZpbmlzaEJyZWFrcG9pbnQgb2JqZWN0IEJQX09CSi4gIFdpbGwgY29tcHV0 ZSBhbmQgY2FjaGUgdGhlCisgICBgcmV0dXJuX3ZhbHVlJywgaWYgcG9zc2li bGUuICAqLworCit2b2lkCiticGZpbmlzaHB5X3ByZV9zdG9wX2hvb2sgKHN0 cnVjdCBicmVha3BvaW50X29iamVjdCAqYnBfb2JqKQoreworICBzdHJ1Y3Qg ZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICpzZWxmX2ZpbmlzaGJwID0KKyAg ICAgICAgKHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKikgYnBf b2JqOworICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7 CisKKyAgLyogQ2FuIGNvbXB1dGUgcmV0dXJuX3ZhbHVlIG9ubHkgb25jZS4g ICovCisgIGdkYl9hc3NlcnQgKCFzZWxmX2ZpbmlzaGJwLT5yZXR1cm5fdmFs dWUpOworCisgIGlmICghc2VsZl9maW5pc2hicC0+cmV0dXJuX3R5cGUpCisg ICAgcmV0dXJuOworCisgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFT S19BTEwpCisgICAgeworICAgICAgc3RydWN0IHZhbHVlICpyZXQgPQorICAg ICAgICAgIGdldF9yZXR1cm5fdmFsdWUgKHR5cGVfb2JqZWN0X3RvX3R5cGUg KHNlbGZfZmluaXNoYnAtPmZ1bmN0aW9uX3R5cGUpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHR5cGVfb2JqZWN0X3RvX3R5cGUgKHNlbGZfZmlu aXNoYnAtPnJldHVybl90eXBlKSk7CisKKyAgICAgIGlmIChyZXQpCisgICAg ICAgIHNlbGZfZmluaXNoYnAtPnJldHVybl92YWx1ZSA9IHZhbHVlX3RvX3Zh bHVlX29iamVjdCAocmV0KTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAg ICAgICAgIFB5X0lOQ1JFRiAoUHlfTm9uZSk7CisgICAgICAgICAgc2VsZl9m aW5pc2hicC0+cmV0dXJuX3ZhbHVlID0gUHlfTm9uZTsKKyAgICAgICAgfQor ICAgIH0KKyAgaWYgKGV4Y2VwdC5yZWFzb24gPCAwKQorICAgIHsKKyAgICAg IGdkYnB5X2NvbnZlcnRfZXhjZXB0aW9uIChleGNlcHQpOworICAgICAgZ2Ri cHlfcHJpbnRfc3RhY2sgKCk7CisgICAgfQorfQorCisvKiBUcmlnZ2VyZWQg d2hlbiBnZGJweV9zaG91bGRfc3RvcCBoYXMgdHJpZ2dlcmVkIHRoZSBgc3Rv cCcgY2FsbGJhY2sKKyAgIG9mIHRoZSBnZGIuRmluaXNoQnJlYWtwb2ludCBv YmplY3QgQlBfT0JKLiAgKi8KKwordm9pZAorYnBmaW5pc2hweV9wb3N0X3N0 b3BfaG9vayAoc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopCit7 CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsKKwor ICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorICAgIHsK KyAgICAgIC8qIENhbid0IGRlbGV0ZSBpdCBoZXJlLCBidXQgaXQgd2lsbCBi ZSByZW1vdmVkIGF0IHRoZSBuZXh0IHN0b3AuICAqLworICAgICAgZGlzYWJs ZV9icmVha3BvaW50IChicF9vYmotPmJwKTsKKyAgICAgIGdkYl9hc3NlcnQg KGJwX29iai0+YnAtPmRpc3Bvc2l0aW9uID09IGRpc3BfZGVsKTsKKyAgICB9 CisgIGlmIChleGNlcHQucmVhc29uIDwgMCkKKyAgICB7CisgICAgICBnZGJw eV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKyAgICAgIGdkYnB5X3By aW50X3N0YWNrICgpOworICAgIH0KK30KKworLyogUHl0aG9uIGZ1bmN0aW9u IHRvIGNyZWF0ZSBhIG5ldyBicmVha3BvaW50LiAgKi8KKworc3RhdGljIGlu dAorYnBmaW5pc2hweV9pbml0IChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3Qg KmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgIHN0YXRpYyBjaGFyICpr ZXl3b3Jkc1tdID0geyAiZnJhbWUiLCAiaW50ZXJuYWwiLCBOVUxMIH07Cisg IHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKnNlbGZfYnBmaW5p c2ggPQorICAgICAgKHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3Qg Kikgc2VsZjsKKyAgaW50IHR5cGUgPSBicF9icmVha3BvaW50OworICBQeU9i amVjdCAqZnJhbWVfb2JqID0gTlVMTDsKKyAgc3RydWN0IGZyYW1lX2luZm8g KmZyYW1lLCAqcHJldl9mcmFtZSA9IE5VTEw7CisgIHN0cnVjdCBmcmFtZV9p ZCBmcmFtZV9pZDsKKyAgUHlPYmplY3QgKmludGVybmFsID0gTlVMTDsKKyAg aW50IGludGVybmFsX2JwID0gMDsKKyAgQ09SRV9BRERSIGZpbmlzaF9wYywg cGM7CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsK KyAgY2hhciAqYWRkcl9zdHIsIHNtYWxsX2J1ZlsxMDBdOworICBzdHJ1Y3Qg c3ltYm9sICpmdW5jdGlvbjsKKworICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVB bmRLZXl3b3JkcyAoYXJncywga3dhcmdzLCAifE9PIiwga2V5d29yZHMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnJhbWVfb2Jq LCAmaW50ZXJuYWwpKQorICAgIHJldHVybiAtMTsKKworICAvKiBEZWZhdWx0 IHRvIGdkYi5zZWxlY3RlZF9mcmFtZSBpZiBuZWNlc3NhcnkuICAqLworICBp ZiAoIWZyYW1lX29iaikKKyAgICBmcmFtZV9vYmogPSBnZGJweV9zZWxlY3Rl ZF9mcmFtZSAoTlVMTCwgTlVMTCk7CisgIAorICBmcmFtZSA9IGZyYW1lX29i amVjdF90b19mcmFtZV9pbmZvIChmcmFtZV9vYmopOworICBpZiAoZnJhbWUg PT0gTlVMTCkKKyAgICBnb3RvIGludmFsaWRfZnJhbWU7CisgIAorICBUUllf Q0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorICAgIHsKKyAgICAg IHByZXZfZnJhbWUgPSBnZXRfcHJldl9mcmFtZSAoZnJhbWUpOworICAgICAg aWYgKHByZXZfZnJhbWUgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIFB5 RXJyX1NldFN0cmluZyAoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAg IF8oIlwiRmluaXNoQnJlYWtwb2ludFwiIG5vdCBtZWFuaW5nZnVsIGluIHRo ZSBvdXRlcm1vc3QgZnJhbWUuIikpOworICAgICAgICB9CisgICAgICBlbHNl IGlmIChnZXRfZnJhbWVfdHlwZSAocHJldl9mcmFtZSkgPT0gRFVNTVlfRlJB TUUpCisgICAgICAgIHsKKyAgICAgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5 RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgXygiXCJGaW5p c2hCcmVha3BvaW50XCIgY2Fubm90IGJlIHNldCBvbiBhIGR1bW15IGZyYW1l LiIpKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAg ICAgICAgZnJhbWVfaWQgPSBnZXRfZnJhbWVfaWQgKHByZXZfZnJhbWUpOwor ICAgICAgICAgIGlmIChmcmFtZV9pZF9lcSAoZnJhbWVfaWQsIG51bGxfZnJh bWVfaWQpKQorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19W YWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF8oIkludmFsaWQgSUQgZm9yIHRoZSBgZnJhbWUnIG9iamVjdC4iKSk7 CisgICAgICAgIH0KKyAgICB9CisgIGlmIChleGNlcHQucmVhc29uIDwgMCkK KyAgICB7CisgICAgICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0 KTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIGVsc2UgaWYgKFB5RXJy X09jY3VycmVkICgpKQorICAgIHJldHVybiAtMTsKKworICBpZiAoaW50ZXJu YWwpCisgICAgeworICAgICAgaW50ZXJuYWxfYnAgPSBQeU9iamVjdF9Jc1Ry dWUgKGludGVybmFsKTsKKyAgICAgIGlmIChpbnRlcm5hbF9icCA9PSAtMSkg CisgICAgICAgIHsKKyAgICAgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhj X1ZhbHVlRXJyb3IsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf KCJUaGUgdmFsdWUgb2YgYGludGVybmFsJyBtdXN0IGJlIGEgYm9vbGVhbi4i KSk7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQor CisgIC8qIEZpbmQgdGhlIGZ1bmN0aW9uIHdlIHdpbGwgcmV0dXJuIGZyb20u ICAqLworICBzZWxmX2JwZmluaXNoLT5yZXR1cm5fdHlwZSA9IE5VTEw7Cisg IHNlbGZfYnBmaW5pc2gtPmZ1bmN0aW9uX3R5cGUgPSBOVUxMOworCisgIFRS WV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisgICAgeworICAg ICAgaWYgKGdldF9mcmFtZV9wY19pZl9hdmFpbGFibGUgKGZyYW1lLCAmcGMp KQorICAgICAgICB7CisgICAgICAgICAgZnVuY3Rpb24gPSBmaW5kX3BjX2Z1 bmN0aW9uIChwYyk7CisgICAgICAgICAgaWYgKGZ1bmN0aW9uICE9IE5VTEwp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0cnVjdCB0eXBlICpy ZXRfdHlwZSA9CisgICAgICAgICAgICAgICAgICBUWVBFX1RBUkdFVF9UWVBF IChTWU1CT0xfVFlQRSAoZnVuY3Rpb24pKTsKKworICAgICAgICAgICAgICAv KiBSZW1lbWJlciBvbmx5IG5vbi1WT0lEIHJldHVybiB0eXBlcy4gICovCisg ICAgICAgICAgICAgIGlmIChUWVBFX0NPREUgKHJldF90eXBlKSAhPSBUWVBF X0NPREVfVk9JRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICBzZWxmX2JwZmluaXNoLT5yZXR1cm5fdHlwZSA9IHR5cGVfdG9fdHlw ZV9vYmplY3QgKHJldF90eXBlKTsKKyAgICAgICAgICAgICAgICAgIHNlbGZf YnBmaW5pc2gtPmZ1bmN0aW9uX3R5cGUgPQorICAgICAgICAgICAgICAgICAg ICAgIHR5cGVfdG9fdHlwZV9vYmplY3QgKFNZTUJPTF9UWVBFIChmdW5jdGlv bikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgIH0KKyAgaWYgKGV4Y2VwdC5yZWFzb24gPCAwCisgICAgICB8 fCAhc2VsZl9icGZpbmlzaC0+cmV0dXJuX3R5cGUgfHwgIXNlbGZfYnBmaW5p c2gtPmZ1bmN0aW9uX3R5cGUpCisgICAgeworICAgICAgLyogV29uJ3QgYmUg YWJsZSB0byBjb21wdXRlIHJldHVybiB2YWx1ZS4gICovCisgICAgICBQeV9Y REVDUkVGIChzZWxmX2JwZmluaXNoLT5yZXR1cm5fdHlwZSk7CisgICAgICBQ eV9YREVDUkVGIChzZWxmX2JwZmluaXNoLT5mdW5jdGlvbl90eXBlKTsKKwor ICAgICAgc2VsZl9icGZpbmlzaC0+cmV0dXJuX3R5cGUgPSBOVUxMOworICAg ICAgc2VsZl9icGZpbmlzaC0+ZnVuY3Rpb25fdHlwZSA9IE5VTEw7CisgICAg fQorCisgIGJwcHlfcGVuZGluZ19vYmplY3QgPSAmc2VsZl9icGZpbmlzaC0+ cHlfYnA7CisgIGJwcHlfcGVuZGluZ19vYmplY3QtPm51bWJlciA9IC0xOwor ICBicHB5X3BlbmRpbmdfb2JqZWN0LT5icCA9IE5VTEw7CisKKyAgVFJZX0NB VENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAgICB7CisgICAgICAv KiBTZXQgYSBicmVha3BvaW50IG9uIHRoZSByZXR1cm4gYWRkcmVzcy4gICov CisgICAgICBmaW5pc2hfcGMgPSBnZXRfZnJhbWVfcGMgKHByZXZfZnJhbWUp OworICAgICAgc3ByaW50ZiAoc21hbGxfYnVmLCAiKiVzIiwgaGV4X3N0cmlu ZyAoZmluaXNoX3BjKSk7CisgICAgICBhZGRyX3N0ciA9IHNtYWxsX2J1ZjsK KworICAgICAgY3JlYXRlX2JyZWFrcG9pbnQgKHB5dGhvbl9nZGJhcmNoLAor ICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfc3RyLCBOVUxMLCAtMSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAg ICAgICAgICAgIDEgLyp0ZW1wX2ZsYWcqLywKKyAgICAgICAgICAgICAgICAg ICAgICAgICBicF9icmVha3BvaW50LAorICAgICAgICAgICAgICAgICAgICAg ICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgQVVUT19CT09MRUFO X1RSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJmJrcHRfYnJlYWtw b2ludF9vcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgaW50 ZXJuYWxfYnApOworICAgIH0KKyAgR0RCX1BZX1NFVF9IQU5ETEVfRVhDRVBU SU9OIChleGNlcHQpOworICAKKyAgc2VsZl9icGZpbmlzaC0+cHlfYnAuYnAt PmZyYW1lX2lkID0gZnJhbWVfaWQ7CisgIHNlbGZfYnBmaW5pc2gtPnB5X2Jw LmlzX2ZpbmlzaF9icCA9IDE7CisgIAorICByZXR1cm4gMDsKKyAgCisgaW52 YWxpZF9mcmFtZToKKyAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVy cm9yLCAKKyAgICAgICAgICAgICAgICAgICBfKCJJbnZhbGlkIElEIGZvciB0 aGUgYGZyYW1lJyBvYmplY3QuIikpOworICByZXR1cm4gLTE7Cit9CisKKy8q IENhbGxlZCB3aGVuIEdEQiBub3RpY2VzIHRoYXQgdGhlIGZpbmlzaCBicmVh a3BvaW50IEJQX09CSiBpcyBvdXQgb2YKKyAgIHRoZSBjdXJyZW50IGNhbGxz dGFjay4gIFRyaWdnZXJzIHRoZSBtZXRob2QgT1VUX09GX1NDT1BFIGlmIGlt cGxlbWVudGVkLAorICAgdGhlbiBkZWxldGUgdGhlIGJyZWFrcG9pbnQuICAq LworCitzdGF0aWMgdm9pZAorYnBmaW5pc2hweV9vdXRfb2Zfc2NvcGUgKHN0 cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKmJwZmluaXNoX29iaikK K3sKKyAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0Owor ICBicmVha3BvaW50X29iamVjdCAqYnBfb2JqID0gKGJyZWFrcG9pbnRfb2Jq ZWN0ICopIGJwZmluaXNoX29iajsKKyAgUHlPYmplY3QgKnB5X29iaiA9IChQ eU9iamVjdCAqKSBicF9vYmo7CisKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJT dHJpbmcgKHB5X29iaiwgb3V0b2ZzY29wZV9mdW5jKSkKKyAgICB7CisgICAg ICBpZiAoIVB5T2JqZWN0X0NhbGxNZXRob2QgKHB5X29iaiwgb3V0b2ZzY29w ZV9mdW5jLCBOVUxMKSkKKyAgICAgICAgICBnZGJweV9wcmludF9zdGFjayAo KTsKKyAgICB9CisKKyAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNL X0FMTCkKKyAgICB7CisgICAgICBkZWxldGVfYnJlYWtwb2ludCAoYnBmaW5p c2hfb2JqLT5weV9icC5icCk7CisgICAgfQorICBpZiAoZXhjZXB0LnJlYXNv biA8IDApCisgICAgeworICAgICAgZ2RicHlfY29udmVydF9leGNlcHRpb24g KGV4Y2VwdCk7CisgICAgICBnZGJweV9wcmludF9zdGFjayAoKTsKKyAgICB9 Cit9CisKKy8qIENhbGxiYWNrIGZvciBgYnBmaW5pc2hweV9kZXRlY3Rfb3V0 X3Njb3BlJy4gIFRyaWdnZXJzIFB5dGhvbidzCisgICBgQi0+b3V0X29mX3Nj b3BlJyBmdW5jdGlvbiBpZiBCIGlzIGEgRmluaXNoQnJlYWtwb2ludCBvdXQg b2YgaXRzIHNjb3BlLiAgKi8KKworc3RhdGljIGludAorYnBmaW5pc2hweV9k ZXRlY3Rfb3V0X3Njb3BlX2NiIChzdHJ1Y3QgYnJlYWtwb2ludCAqYiwgdm9p ZCAqYXJncykKK3sKKyAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24g ZXhjZXB0OworICBzdHJ1Y3QgYnJlYWtwb2ludCAqYnBfc3RvcHBlZCA9IChz dHJ1Y3QgYnJlYWtwb2ludCAqKSBhcmdzOworICBQeU9iamVjdCAqcHlfYnAg PSAoUHlPYmplY3QgKikgYi0+cHlfYnBfb2JqZWN0OworICBzdHJ1Y3QgZ2Ri YXJjaCAqZ2FyY2ggPSBiLT5nZGJhcmNoID8gYi0+Z2RiYXJjaCA6IGdldF9j dXJyZW50X2FyY2ggKCk7CisgIAorICAvKiBUcmlnZ2VyIG91dF9vZl9zY29w ZSBpZiB0aGlzIGlzIGEgRmluaXNoQnJlYWtwb2ludCBhbmQgaXRzIGZyYW1l IGlzCisgICAgIG5vdCBhbnltb3JlIGluIHRoZSBjdXJyZW50IGNhbGxzdGFj ay4gICovCisgIGlmIChweV9icCAhPSBOVUxMICYmIGItPnB5X2JwX29iamVj dC0+aXNfZmluaXNoX2JwKQorICAgIHsKKyAgICAgIHN0cnVjdCBmaW5pc2hf YnJlYWtwb2ludF9vYmplY3QgKmZpbmlzaF9icCA9CisgICAgICAgICAgKHN0 cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKikgcHlfYnA7CisKKyAg ICAgIC8qIENoZWNrIHNjb3BlIGlmIG5vdCBjdXJyZW50bHkgc3RvcHBlZCBh dCB0aGUgRmluaXNoQnJlYWtwb2ludC4gICovCisgICAgICBpZiAoYiAhPSBi cF9zdG9wcGVkKQorICAgICAgICB7CisgICAgICAgICAgVFJZX0NBVENIIChl eGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgaWYgKGItPnBzcGFjZSA9PSBjdXJyZW50X2luZmVyaW9yICgp LT5wc3BhY2UKKyAgICAgICAgICAgICAgICAgJiYgKCF0YXJnZXRfaGFzX3Jl Z2lzdGVycworICAgICAgICAgICAgICAgICAgICAgfHwgZnJhbWVfZmluZF9i eV9pZCAoYi0+ZnJhbWVfaWQpID09IE5VTEwpKQorICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgYnBmaW5pc2hweV9vdXRfb2Zfc2NvcGUgKGZp bmlzaF9icCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgIGdkYnB5X2NvbnZlcnRfZXhjZXB0aW9uIChleGNl cHQpOworICAgICAgICAgICAgICBnZGJweV9wcmludF9zdGFjayAoKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICByZXR1cm4gMDsK K30KKworLyogQXR0YWNoZWQgdG8gYHN0b3AnIG5vdGlmaWNhdGlvbnMsIGNo ZWNrIGlmIHRoZSBleGVjdXRpb24gaGFzIHJ1bgorICAgb3V0IG9mIHRoZSBz Y29wZSBvZiBhbnkgRmluaXNoQnJlYWtwb2ludCBiZWZvcmUgaXQgaGFzIGJl ZW4gaGl0LiAgKi8KKworc3RhdGljIHZvaWQKK2JwZmluaXNocHlfaGFuZGxl X3N0b3AgKHN0cnVjdCBicHN0YXRzICpicywgaW50IHByaW50X2ZyYW1lKQor eworICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cCA9IGVuc3VyZV9weXRob25f ZW52IChnZXRfY3VycmVudF9hcmNoICgpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2xhbmd1YWdl KTsKKworICBpdGVyYXRlX292ZXJfYnJlYWtwb2ludHMgKGJwZmluaXNocHlf ZGV0ZWN0X291dF9zY29wZV9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicyA9PSBOVUxMID8gTlVMTCA6IGJzLT5icmVha3BvaW50X2F0KTsK KworICBkb19jbGVhbnVwcyAoY2xlYW51cCk7Cit9CisKKy8qIEF0dGFjaGVk IHRvIGBleGl0JyBub3RpZmljYXRpb25zLCB0cmlnZ2VycyBhbGwgdGhlIG5l Y2Vzc2FyeSBvdXQgb2YKKyAgIHNjb3BlIG5vdGlmaWNhdGlvbnMuICAqLwor CitzdGF0aWMgdm9pZAorYnBmaW5pc2hweV9oYW5kbGVfZXhpdCAoc3RydWN0 IGluZmVyaW9yICppbmYpCit7CisgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVw ID0gZW5zdXJlX3B5dGhvbl9lbnYgKHRhcmdldF9nZGJhcmNoLAorICAgICAg Y3VycmVudF9sYW5ndWFnZSk7CisKKyAgaXRlcmF0ZV9vdmVyX2JyZWFrcG9p bnRzIChicGZpbmlzaHB5X2RldGVjdF9vdXRfc2NvcGVfY2IsIE5VTEwpOwor CisgIGRvX2NsZWFudXBzIChjbGVhbnVwKTsKK30KKworLyogSW5pdGlhbGl6 ZSB0aGUgUHl0aG9uIGZpbmlzaCBicmVha3BvaW50IGNvZGUuICAqLworCit2 b2lkCitnZGJweV9pbml0aWFsaXplX2ZpbmlzaGJyZWFrcG9pbnRzICh2b2lk KQoreworICBpZiAoUHlUeXBlX1JlYWR5ICgmZmluaXNoX2JyZWFrcG9pbnRf b2JqZWN0X3R5cGUpIDwgMCkKKyAgICAgIHJldHVybjsKKyAgCisgIFB5X0lO Q1JFRiAoJmZpbmlzaF9icmVha3BvaW50X29iamVjdF90eXBlKTsKKyAgUHlN b2R1bGVfQWRkT2JqZWN0IChnZGJfbW9kdWxlLCAiRmluaXNoQnJlYWtwb2lu dCIsCisgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopICZmaW5p c2hfYnJlYWtwb2ludF9vYmplY3RfdHlwZSk7CisgICAgCisgIG9ic2VydmVy X2F0dGFjaF9ub3JtYWxfc3RvcCAoYnBmaW5pc2hweV9oYW5kbGVfc3RvcCk7 CisgIG9ic2VydmVyX2F0dGFjaF9pbmZlcmlvcl9leGl0IChicGZpbmlzaHB5 X2hhbmRsZV9leGl0KTsKK30KKworc3RhdGljIFB5R2V0U2V0RGVmIGZpbmlz aF9icmVha3BvaW50X29iamVjdF9nZXRzZXRbXSA9IHsKKyAgeyAicmV0dXJu X3ZhbHVlIiwgYnBmaW5pc2hweV9nZXRfcmV0dXJudmFsdWUsIE5VTEwsCisg ICJnZGIuVmFsdWUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmV0dXJuIHZh bHVlLCBpZiBhbnkuIFwKK05vbmUgb3RoZXJ3aXNlLiIsIE5VTEwgfSwKKyAg ICB7IE5VTEwgfSAgLyogU2VudGluZWwuICAqLworfTsKKworc3RhdGljIFB5 VHlwZU9iamVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3RfdHlwZSA9Cit7 CisgIFB5T2JqZWN0X0hFQURfSU5JVCAoTlVMTCkKKyAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKm9iX3NpemUqLworICAiZ2RiLkZpbmlz aEJyZWFrcG9pbnQiLCAgICAgICAgIC8qdHBfbmFtZSovCisgIHNpemVvZiAo c3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdCksICAvKnRwX2Jhc2lj c2l6ZSovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0 cF9pdGVtc2l6ZSovCisgIGJwZmluaXNocHlfZGVhbGxvYywgICAgICAgICAg ICAgLyp0cF9kZWFsbG9jKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKnRwX3ByaW50Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKnRwX2dldGF0dHIqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyp0cF9jb21wYXJlKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3Nl cXVlbmNlKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KnRwX2FzX21hcHBpbmcqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qdHBfaGFzaCAqLworICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qdHBfY2FsbCovCisgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyp0cF9zdHIqLworICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8gKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCisg IFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAv KnRwX2ZsYWdzKi8KKyAgIkdEQiBmaW5pc2ggYnJlYWtwb2ludCBvYmplY3Qi LCAvKiB0cF9kb2MgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9m ZnNldCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHRwX2l0ZXIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0cF9pdGVybmV4dCAqLworICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgIGZpbmlzaF9i cmVha3BvaW50X29iamVjdF9nZXRzZXQsLyogdHBfZ2V0c2V0ICovCisgICZi cmVha3BvaW50X29iamVjdF90eXBlLCAgICAgICAgLyogdHBfYmFzZSAqLwor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3Qg Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9k ZXNjcl9nZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgIGJwZmluaXNocHlf aW5pdCwgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLworICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCisgIDAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCit9 OwpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9weS1mcmFtZS5jIGIvZ2RiL3B5 dGhvbi9weS1mcmFtZS5jCmluZGV4IDIwMDY0Y2EuLmMzMzRmNjMgMTAwNjQ0 Ci0tLSBhL2dkYi9weXRob24vcHktZnJhbWUuYworKysgYi9nZGIvcHl0aG9u L3B5LWZyYW1lLmMKQEAgLTYwLDkgKzYwLDEwIEBAIHN0YXRpYyBQeVR5cGVP YmplY3QgZnJhbWVfb2JqZWN0X3R5cGU7CiAgICBvYmplY3QuICBJZiB0aGUg ZnJhbWUgZG9lc24ndCBleGlzdCBhbnltb3JlICh0aGUgZnJhbWUgaWQgZG9l c24ndAogICAgY29ycmVzcG9uZCB0byBhbnkgZnJhbWUgaW4gdGhlIGluZmVy aW9yKSwgcmV0dXJucyBOVUxMLiAgKi8KIAotc3RhdGljIHN0cnVjdCBmcmFt ZV9pbmZvICoKLWZyYW1lX29iamVjdF90b19mcmFtZV9pbmZvIChmcmFtZV9v YmplY3QgKmZyYW1lX29iaikKK3N0cnVjdCBmcmFtZV9pbmZvICoKK2ZyYW1l X29iamVjdF90b19mcmFtZV9pbmZvIChQeU9iamVjdCAqb2JqKQogeworICBm cmFtZV9vYmplY3QgKmZyYW1lX29iaiA9IChmcmFtZV9vYmplY3QgKikgb2Jq OyAgCiAgIHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZTsKIAogICBmcmFtZSA9 IGZyYW1lX2ZpbmRfYnlfaWQgKGZyYW1lX29iai0+ZnJhbWVfaWQpOwpAQCAt MTA2LDcgKzEwNyw3IEBAIGZyYXB5X2lzX3ZhbGlkIChQeU9iamVjdCAqc2Vs ZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJF VFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBmcmFtZSA9IGZyYW1lX29i amVjdF90b19mcmFtZV9pbmZvICgoZnJhbWVfb2JqZWN0ICopIHNlbGYpOwor ICAgICAgZnJhbWUgPSBmcmFtZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAoc2Vs Zik7CiAgICAgfQogICBHREJfUFlfSEFORExFX0VYQ0VQVElPTiAoZXhjZXB0 KTsKIApAQCAtMTMwLDcgKzEzMSw3IEBAIGZyYXB5X25hbWUgKFB5T2JqZWN0 ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2Vw dCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJ UkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworICAg ICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAgICAg ICBmaW5kX2ZyYW1lX2Z1bm5hbWUgKGZyYW1lLCAmbmFtZSwgJmxhbmcsIE5V TEwpOwogICAgIH0KQEAgLTE1OSw3ICsxNjAsNyBAQCBmcmFweV90eXBlIChQ eU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENI IChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQ WV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1l KTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsK IAogICAgICAgdHlwZSA9IGdldF9mcmFtZV90eXBlIChmcmFtZSk7CiAgICAg fQpAQCAtMTgwLDcgKzE4MSw3IEBAIGZyYXB5X3Vud2luZF9zdG9wX3JlYXNv biAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9D QVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAg RlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBm cmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFt ZSk7CiAgICAgfQogICBHREJfUFlfSEFORExFX0VYQ0VQVElPTiAoZXhjZXB0 KTsKIApAQCAtMjAxLDcgKzIwMiw3IEBAIGZyYXB5X3BjIChQeU9iamVjdCAq c2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQs IFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJF X1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAg IEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogICAgICAg cGMgPSBnZXRfZnJhbWVfcGMgKGZyYW1lKTsKICAgICB9CkBAIC0yMjIsNyAr MjIzLDcgQEAgZnJhcHlfYmxvY2sgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVj dCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tf QUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFt ZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlS RV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogICAgICAgYmxvY2sgPSBnZXRfZnJh bWVfYmxvY2sgKGZyYW1lLCBOVUxMKTsKICAgICB9CiAgIEdEQl9QWV9IQU5E TEVfRVhDRVBUSU9OIChleGNlcHQpOwpAQCAtMjYzLDcgKzI2NCw3IEBAIGZy YXB5X2Z1bmN0aW9uIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3Mp CiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAg ICB7Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0 ICopIHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQg KHNlbGYsIGZyYW1lKTsKIAogICAgICAgc3ltID0gZmluZF9wY19mdW5jdGlv biAoZ2V0X2ZyYW1lX2FkZHJlc3NfaW5fYmxvY2sgKGZyYW1lKSk7CiAgICAg fQpAQCAtMzMwLDcgKzMzMSw3IEBAIGZyYXB5X29sZGVyIChQeU9iamVjdCAq c2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQs IFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJF X1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAg IEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogICAgICAg cHJldiA9IGdldF9wcmV2X2ZyYW1lIChmcmFtZSk7CiAgICAgICBpZiAocHJl dikKQEAgLTM1OSw3ICszNjAsNyBAQCBmcmFweV9uZXdlciAoUHlPYmplY3Qg KnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0 LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlS RV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAg ICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAKICAgICAg IG5leHQgPSBnZXRfbmV4dF9mcmFtZSAoZnJhbWUpOwogICAgICAgaWYgKG5l eHQpCkBAIC0zODgsNyArMzg5LDcgQEAgZnJhcHlfZmluZF9zYWwgKFB5T2Jq ZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4 Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JF UVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOwor ICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAg ICAgICBmaW5kX2ZyYW1lX3NhbCAoZnJhbWUsICZzYWwpOwogICAgICAgc2Fs X29iaiA9IHN5bXRhYl9hbmRfbGluZV90b19zYWxfb2JqZWN0IChzYWwpOwpA QCAtNDQ0LDcgKzQ0NSw3IEBAIGZyYXB5X3JlYWRfdmFyIChQeU9iamVjdCAq c2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgICAgIFRSWV9DQVRDSCAoZXhj ZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAJewotCSAgRlJBUFlfUkVRVUlSRV9W QUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisJICBGUkFQ WV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAKIAkgIGlmICghYmxv Y2spCiAJICAgIGJsb2NrID0gZ2V0X2ZyYW1lX2Jsb2NrIChmcmFtZSwgTlVM TCk7CkBAIC00NzIsNyArNDczLDcgQEAgZnJhcHlfcmVhZF92YXIgKFB5T2Jq ZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4 Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JF UVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOwor ICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAg ICAgICB2YWwgPSByZWFkX3Zhcl92YWx1ZSAodmFyLCBmcmFtZSk7CiAgICAg fQpAQCAtNDg3LDEyICs0ODgsMTEgQEAgc3RhdGljIFB5T2JqZWN0ICoKIGZy YXB5X3NlbGVjdCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQog ewogICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZmk7Ci0gIGZyYW1lX29iamVjdCAq ZnJhbWUgPSAoZnJhbWVfb2JqZWN0ICopIHNlbGY7CiAgIHZvbGF0aWxlIHN0 cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsKIAogICBUUllfQ0FUQ0ggKGV4 Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JF UVVJUkVfVkFMSUQgKGZyYW1lLCBmaSk7CisgICAgICBGUkFQWV9SRVFVSVJF X1ZBTElEIChzZWxmLCBmaSk7CiAKICAgICAgIHNlbGVjdF9mcmFtZSAoZmkp OwogICAgIH0KZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHl0aG9uLWludGVy bmFsLmggYi9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oCmluZGV4IGVm MzlkNWQuLjFiYTcxMzMgMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHl0aG9u LWludGVybmFsLmgKKysrIGIvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwu aApAQCAtMTIwLDkgKzEyMCw1MCBAQCBleHRlcm4gUHlUeXBlT2JqZWN0IHN5 bWJvbF9vYmplY3RfdHlwZTsKIGV4dGVybiBQeVR5cGVPYmplY3QgZXZlbnRf b2JqZWN0X3R5cGU7CiBleHRlcm4gUHlUeXBlT2JqZWN0IGV2ZW50c19vYmpl Y3RfdHlwZTsKIGV4dGVybiBQeVR5cGVPYmplY3Qgc3RvcF9ldmVudF9vYmpl Y3RfdHlwZTsKK2V4dGVybiBQeVR5cGVPYmplY3QgYnJlYWtwb2ludF9vYmpl Y3RfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QK K3sKKyAgUHlPYmplY3RfSEVBRAorCisgIC8qIFRoZSBicmVha3BvaW50IG51 bWJlciBhY2NvcmRpbmcgdG8gZ2RiLiAgKi8KKyAgaW50IG51bWJlcjsKKwor ICAvKiBUaGUgZ2RiIGJyZWFrcG9pbnQgb2JqZWN0LCBvciBOVUxMIGlmIHRo ZSBicmVha3BvaW50IGhhcyBiZWVuCisgICAgIGRlbGV0ZWQuICAqLworICBz dHJ1Y3QgYnJlYWtwb2ludCAqYnA7CisKKyAgLyogMSBpcyB0aGlzIGlzIGEg RmluaXNoQnJlYWtwb2ludCBvYmplY3QsIDAgb3RoZXJ3aXNlLiAgKi8KKyAg aW50IGlzX2ZpbmlzaF9icDsKK30gYnJlYWtwb2ludF9vYmplY3Q7CisKKy8q IFJlcXVpcmUgdGhhdCBCUkVBS1BPSU5UIGJlIGEgdmFsaWQgYnJlYWtwb2lu dCBJRDsgdGhyb3cgYSBQeXRob24KKyAgIGV4Y2VwdGlvbiBpZiBpdCBpcyBp bnZhbGlkLiAgKi8KKyNkZWZpbmUgQlBQWV9SRVFVSVJFX1ZBTElEKEJyZWFr cG9pbnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmICgoQnJlYWtw b2ludCktPmJwID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIFB5RXJyX0Zvcm1hdCAoUHlF eGNfUnVudGltZUVycm9yLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiQnJlYWtwb2ludCAlZCBp cyBpbnZhbGlkLiIpLCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKEJyZWFrcG9pbnQpLT5udW1iZXIpOyAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisvKiBSZXF1aXJlIHRo YXQgQlJFQUtQT0lOVCBiZSBhIHZhbGlkIGJyZWFrcG9pbnQgSUQ7IHRocm93 IGEgUHl0aG9uCisgICBleGNlcHRpb24gaWYgaXQgaXMgaW52YWxpZC4gIFRo aXMgbWFjcm8gaXMgZm9yIHVzZSBpbiBzZXR0ZXIgZnVuY3Rpb25zLiAgKi8K KyNkZWZpbmUgQlBQWV9TRVRfUkVRVUlSRV9WQUxJRChCcmVha3BvaW50KSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgIGlmICgoQnJlYWtwb2ludCktPmJwID09 IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBQeUVy cl9Gb3JtYXQgKFB5RXhjX1J1bnRpbWVFcnJvciwgXygiQnJlYWtwb2ludCAl ZCBpcyBpbnZhbGlkLiIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAo QnJlYWtwb2ludCktPm51bWJlcik7ICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworCisvKiBW YXJpYWJsZXMgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGJldHdlZW4gdGhl IEJyZWFrcG9pbnQKKyAgIGNvbnN0cnVjdG9yIGFuZCB0aGUgYnJlYWtwb2lu dC1jcmVhdGVkIGhvb2sgZnVuY3Rpb24uICAqLworZXh0ZXJuIGJyZWFrcG9p bnRfb2JqZWN0ICpicHB5X3BlbmRpbmdfb2JqZWN0OwogCi0vKiBEZWZpbmVk IGluIHB5LWJyZWFrcG9pbnQuYyAqLwotdHlwZWRlZiBzdHJ1Y3QgYnJlYWtw b2ludF9vYmplY3QgYnJlYWtwb2ludF9vYmplY3Q7CiAKIHR5cGVkZWYgc3Ry dWN0CiB7CkBAIC0xODgsNiArMjI5LDcgQEAgc3RydWN0IHZhbHVlICpjb252 ZXJ0X3ZhbHVlX2Zyb21fcHl0aG9uIChQeU9iamVjdCAqb2JqKTsKIHN0cnVj dCB0eXBlICp0eXBlX29iamVjdF90b190eXBlIChQeU9iamVjdCAqb2JqKTsK IHN0cnVjdCBzeW10YWIgKnN5bXRhYl9vYmplY3RfdG9fc3ltdGFiIChQeU9i amVjdCAqb2JqKTsKIHN0cnVjdCBzeW10YWJfYW5kX2xpbmUgKnNhbF9vYmpl Y3RfdG9fc3ltdGFiX2FuZF9saW5lIChQeU9iamVjdCAqb2JqKTsKK3N0cnVj dCBmcmFtZV9pbmZvICpmcmFtZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAoUHlP YmplY3QgKmZyYW1lX29iaik7CiAKIHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9h dXRvX2xvYWQgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXplX3ZhbHVl cyAodm9pZCk7CkBAIC0yMDIsNiArMjQ0LDcgQEAgdm9pZCBnZGJweV9pbml0 aWFsaXplX2Z1bmN0aW9ucyAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxp emVfcHNwYWNlICh2b2lkKTsKIHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9vYmpm aWxlICh2b2lkKTsKIHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9icmVha3BvaW50 cyAodm9pZCk7Cit2b2lkIGdkYnB5X2luaXRpYWxpemVfZmluaXNoYnJlYWtw b2ludHMgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXplX2xhenlfc3Ry aW5nICh2b2lkKTsKIHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9wYXJhbWV0ZXJz ICh2b2lkKTsKIHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV90aHJlYWQgKHZvaWQp OwpAQCAtMjc1LDYgKzMxOCw5IEBAIFB5T2JqZWN0ICpnZGJweV9nZXRfdmFy b2JqX3ByZXR0eV9wcmludGVyIChzdHJ1Y3QgdmFsdWUgKnZhbHVlKTsKIGNo YXIgKmdkYnB5X2dldF9kaXNwbGF5X2hpbnQgKFB5T2JqZWN0ICpwcmludGVy KTsKIFB5T2JqZWN0ICpnZGJweV9kZWZhdWx0X3Zpc3VhbGl6ZXIgKFB5T2Jq ZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncyk7CiAKK3ZvaWQgYnBmaW5pc2hw eV9wcmVfc3RvcF9ob29rIChzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJw X29iaik7Cit2b2lkIGJwZmluaXNocHlfcG9zdF9zdG9wX2hvb2sgKHN0cnVj dCBicmVha3BvaW50X29iamVjdCAqYnBfb2JqKTsKKwogZXh0ZXJuIFB5T2Jq ZWN0ICpnZGJweV9kb2NfY3N0OwogZXh0ZXJuIFB5T2JqZWN0ICpnZGJweV9j aGlsZHJlbl9jc3Q7CiBleHRlcm4gUHlPYmplY3QgKmdkYnB5X3RvX3N0cmlu Z19jc3Q7CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5dGhvbi5jIGIvZ2Ri L3B5dGhvbi9weXRob24uYwppbmRleCAxMDhlNTQyLi4xNTVmOGRhIDEwMDY0 NAotLS0gYS9nZGIvcHl0aG9uL3B5dGhvbi5jCisrKyBiL2dkYi9weXRob24v cHl0aG9uLmMKQEAgLTEyNDcsNiArMTI0Nyw3IEBAIEVuYWJsZXMgb3IgZGlz YWJsZXMgcHJpbnRpbmcgb2YgUHl0aG9uIHN0YWNrIHRyYWNlcy4iKSwKICAg Z2RicHlfaW5pdGlhbGl6ZV9wc3BhY2UgKCk7CiAgIGdkYnB5X2luaXRpYWxp emVfb2JqZmlsZSAoKTsKICAgZ2RicHlfaW5pdGlhbGl6ZV9icmVha3BvaW50 cyAoKTsKKyAgZ2RicHlfaW5pdGlhbGl6ZV9maW5pc2hicmVha3BvaW50cyAo KTsKICAgZ2RicHlfaW5pdGlhbGl6ZV9sYXp5X3N0cmluZyAoKTsKICAgZ2Ri cHlfaW5pdGlhbGl6ZV90aHJlYWQgKCk7CiAgIGdkYnB5X2luaXRpYWxpemVf aW5mZXJpb3IgKCk7CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktYnJlYWtwb2ludC5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktYnJlYWtwb2ludC5leHAKaW5kZXggZTBkZDA4Ny4uMGUzYWRi ZCAxMDA2NDQKLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWJy ZWFrcG9pbnQuZXhwCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1icmVha3BvaW50LmV4cApAQCAtNDQsNyArNDQsOCBAQCBnZGJfcHlfdGVz dF9zaWxlbnRfY21kICJweXRob24gYmxpc3QgPSBnZGIuYnJlYWtwb2ludHMo KSIgIkdldCBCcmVha3BvaW50IExpc3QiCiBnZGJfdGVzdCAicHl0aG9uIHBy aW50IGJsaXN0XFswXF0iICI8Z2RiLkJyZWFrcG9pbnQgb2JqZWN0IGF0ICRo ZXg+IiAiQ2hlY2sgb2JqIGV4aXN0cyIKIGdkYl90ZXN0ICJweXRob24gcHJp bnQgYmxpc3RcWzBcXS5sb2NhdGlvbiIgIm1haW4uIiAiQ2hlY2sgYnJlYWtw b2ludCBsb2NhdGlvbiIKIAotZ2RiX2JyZWFrcG9pbnQgW2dkYl9nZXRfbGlu ZV9udW1iZXIgIkJyZWFrIGF0IG11bHRpcGx5LiJdCitzZXQgbXVsdF9saW5l IFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJCcmVhayBhdCBtdWx0aXBseS4iXQor Z2RiX2JyZWFrcG9pbnQgJHttdWx0X2xpbmV9CiBnZGJfY29udGludWVfdG9f YnJlYWtwb2ludCAiQnJlYWsgYXQgbXVsdGlwbHkuIgogCiAjIENoZWNrIHRo YXQgdGhlIFB5dGhvbiBicmVha3BvaW50IGNvZGUgbm90ZWQgdGhlIGFkZGl0 aW9uIG9mIGEKQEAgLTU0LDcgKzU1LDkgQEAgZ2RiX3Rlc3QgInB5dGhvbiBw cmludCBsZW4oYmxpc3QpIiAiMiIgIkNoZWNrIGZvciB0d28gYnJlYWtwb2lu dHMiCiBnZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFswXF0iICI8Z2Ri LkJyZWFrcG9pbnQgb2JqZWN0IGF0ICRoZXg+IiAiQ2hlY2sgb2JqIGV4aXN0 cyIKIGdkYl90ZXN0ICJweXRob24gcHJpbnQgYmxpc3RcWzBcXS5sb2NhdGlv biIgIm1haW4uIiAiQ2hlY2sgYnJlYWtwb2ludCBsb2NhdGlvbiIKIGdkYl90 ZXN0ICJweXRob24gcHJpbnQgYmxpc3RcWzFcXSIgIjxnZGIuQnJlYWtwb2lu dCBvYmplY3QgYXQgJGhleD4iICJDaGVjayBvYmogZXhpc3RzIgotZ2RiX3Rl c3QgInB5dGhvbiBwcmludCBibGlzdFxbMVxdLmxvY2F0aW9uIiAicHktYnJl YWtwb2ludFwuYzo0MSoiICJDaGVjayBicmVha3BvaW50IGxvY2F0aW9uIgor CitnZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFsxXF0ubG9jYXRpb24i ICJweS1icmVha3BvaW50XC5jOiR7bXVsdF9saW5lfSoiIFwKKyAgICAgICAg ICJDaGVjayBicmVha3BvaW50IGxvY2F0aW9uIgogCiAjIENoZWNrIGhpdCBh bmQgaWdub3JlIGNvdW50cy4gCiBnZGJfdGVzdCAicHl0aG9uIHByaW50IGJs aXN0XFsxXF0uaGl0X2NvdW50IiAiMSIgIkNoZWNrIGJyZWFrcG9pbnQgaGl0 IGNvdW50IgpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9u L3B5LWZpbmlzaC1icmVha3BvaW50LmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi43Y2RiZWFkCi0tLSAvZGV2L251bGwKKysr IGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3Bv aW50LmMKQEAgLTAsMCArMSw5NyBAQAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBw YXJ0IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0 IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlICA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSA8c2V0am1wLmg+ CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisK K2ludCBpbmNyZWFzZV8xIChpbnQgKmEpCit7CisgICphICs9IDE7CisgIHJl dHVybiAtNTsKK30KKwordm9pZCBpbmNyZWFzZSAoaW50ICphKQoreworICBp bmNyZWFzZV8xIChhKTsKK30KKworaW50Cit0ZXN0XzEgKGludCBpLCBpbnQg aikKK3sKKyAgcmV0dXJuIGkgPT0gajsKK30KKworaW50Cit0ZXN0IChpbnQg aSwgaW50IGopCit7CisgIHJldHVybiB0ZXN0XzEgKGksIGopOworfQorCitp bnQKK2NhbGxfbG9uZ2ptcF8xIChqbXBfYnVmICpidWYpCit7CisgIGxvbmdq bXAgKCpidWYsIDEpOworfQorCitpbnQKK2NhbGxfbG9uZ2ptcCAoam1wX2J1 ZiAqYnVmKQoreworICBjYWxsX2xvbmdqbXBfMSAoYnVmKTsKK30KKwordm9p ZAordGVzdF9leGVjX2V4aXQgKGludCBkb19leGl0KQoreworICBpZiAoZG9f ZXhpdCkKKyAgICBleGl0ICgwKTsKKyAgZWxzZQorICAgIGV4ZWNsICgiL2Jp bi9lY2hvIiwgImVjaG8iLCAiLTEiLCAoY2hhciAqKTApOworfQorCitpbnQg bWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgam1wX2J1ZiBl bnY7CisgIGludCBmb28gPSA1OworICBpbnQgYmFyID0gNDI7CisgIGludCBp LCBqOworCisgIGdldHBpZCAoKTsKKworICBpID0gMDsKKyAgLyogQnJlYWsg YXQgaW5jcmVhc2UuICAqLworICBpbmNyZWFzZSAoJmkpOworICBpbmNyZWFz ZSAoJmkpOworICBpbmNyZWFzZSAoJmkpOworCisgIGZvciAoaSA9IDA7IGkg PCAxMDsgaSsrKQorICAgIHsKKyAgICAgIGogKz0gMTsgLyogQ29uZGl0aW9u IEJyZWFrLiAgKi8KKyAgICB9CisKKyAgaWYgKHNldGptcCAoZW52KSA9PSAw KSAvKiBsb25nam1wIGNhdWdodCAqLworICAgIHsKKyAgICAgIGNhbGxfbG9u Z2ptcCAoJmVudik7CisgICAgfQorICBlbHNlCisgICAgaiArPSAxOyAvKiBh ZnRlciBsb25nam1wLiAgKi8KKworICB0ZXN0X2V4ZWNfZXhpdCAoMSk7CisK KyAgcmV0dXJuIGo7IC8qIEJyZWFrIGF0IGVuZC4gICovCit9CmRpZmYgLS1n aXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFr cG9pbnQuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlz aC1icmVha3BvaW50LmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi40NDQwMTljCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3Rz dWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LmV4cApAQCAt MCwwICsxLDIzMyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisj IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQg dGVzdHMgdGhlIG1lY2hhbmlzbQorIyBleHBvc2luZyB2YWx1ZXMgdG8gUHl0 aG9uLgorCitpZiAkdHJhY2VsZXZlbCB0aGVuIHsKKyAgICBzdHJhY2UgJHRy YWNlbGV2ZWwKK30KKworbG9hZF9saWIgZ2RiLXB5dGhvbi5leHAKKworc2V0 IHRlc3RmaWxlICJweS1maW5pc2gtYnJlYWtwb2ludCIKK3NldCBzcmNmaWxl ICR7dGVzdGZpbGV9LmMKKworaWYgeyBbcHJlcGFyZV9mb3JfdGVzdGluZyAk e3Rlc3RmaWxlfS5leHAgJHt0ZXN0ZmlsZX0gJHtzcmNmaWxlfV0gfSB7Cisg ICAgcmV0dXJuIC0xCit9CisKK3NldCByZW1vdGVfcHl0aG9uX2ZpbGUgW3Jl bW90ZV9kb3dubG9hZCBob3N0ICR7c3JjZGlyfS8ke3N1YmRpcn0vJHt0ZXN0 ZmlsZX0ucHldCisKKworIyBTa2lwIGFsbCB0ZXN0cyBpZiBQeXRob24gc2Ny aXB0aW5nIGlzIG5vdCBlbmFibGVkLgoraWYgeyBbc2tpcF9weXRob25fdGVz dHNdIH0geyBjb250aW51ZSB9CisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3Bv aW50IGluIG5vcm1hbCBjb25kaXRpb25zCisjCisKK2NsZWFuX3Jlc3RhcnQg JHt0ZXN0ZmlsZX0KKworaWYgIVtydW50b19tYWluXSB0aGVuIHsKKyAgICBm YWlsICJDYW5ub3QgcnVuIHRvIG1haW4uIgorICAgIHJldHVybiAwCit9Citn ZGJfdGVzdF9ub19vdXRwdXQgInNldCBjb25maXJtIG9mZiIgImRpc2FibGUg Y29uZmlybWF0aW9uIgorZ2RiX3Rlc3QgInNvdXJjZSAkcmVtb3RlX3B5dGhv bl9maWxlIiAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZC4qIiBcCisgICAgICAg ICAiaW1wb3J0IHB5dGhvbiBzY3JpcHRzIgorZ2RiX2JyZWFrcG9pbnQgImlu Y3JlYXNlXzEiCitnZGJfdGVzdCAiY29udGludWUiICJCcmVha3BvaW50IC4q YXQuKiIgImNvbnRpbnVlIHRvIHRoZSBmdW5jdGlvbiB0byBmaW5pc2giCisK KyMgc2V0IEZpbmlzaEJyZWFrcG9pbnQKKworZ2RiX3Rlc3QgInB5dGhvbiBm aW5pc2hicF9kZWZhdWx0ID0gZ2RiLkZpbmlzaEJyZWFrcG9pbnQgKCkiIFwK KyAgICAgICAgICJUZW1wb3JhcnkgYnJlYWtwb2ludC4qIiAic2V0IEZpbmlz aEJyZWFrcG9pbnQgd2l0aCBkZWZhdWx0IGZyYW1lIHZhbHVlIgorZ2RiX3Rl c3QgInB5dGhvbiBmaW5pc2hicCA9IE15RmluaXNoQnJlYWtwb2ludCAoZ2Ri LnBhcnNlX2FuZF9ldmFsICgnYScpLCBnZGIuc2VsZWN0ZWRfZnJhbWUgKCkp IiBcCisgICAgICAgICAiVGVtcG9yYXJ5IGJyZWFrcG9pbnQuKiIgInNldCBG aW5pc2hCcmVha3BvaW50IgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBmaW5p c2hicC5yZXR1cm5fdmFsdWUiICJOb25lLioiIFwKKyAgICAgICAgICJjaGVj ayByZXR1cm5fdmFsdWUgYXQgaW5pdCIKKworIyBjaGVjayBub3JtYWwgYnAg aGl0CisKK2dkYl90ZXN0ICJjb250aW51ZSIgIk15RmluaXNoQnJlYWtwb2lu dCBzdG9wIHdpdGguKnJldHVybl92YWx1ZSBpczogLTUuKiMwLippbmNyZWFz ZS4qIiBcCisgICAgICAgICAiY2hlY2sgTXlGaW5pc2hCcmVha3BvaW50IGhp dCIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZmluaXNoYnAucmV0dXJuX3Zh bHVlIiAiLTUuKiIgImNoZWNrIHJldHVybl92YWx1ZSIKKworZ2RiX3Rlc3Qg InB5dGhvbiBwcmludCBmaW5pc2hicF9kZWZhdWx0LmhpdF9jb3VudCIgIjEu KiIgImNoZWNrIGZpbmlzaEJQIG9uIGRlZmF1bHQgZnJhbWUgaGFzIGJlZW4g aGl0IgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBmaW5pc2hicC5pc192YWxp ZCgpIiAiRmFsc2UuKiJcCisgICAgICAgICAiZW5zdXJlIHRoYXQgZmluaXNo IGJwIGlzIGludmFsaWQgYWZlciBub3JtYWwgaGl0IgorCisjIGNoZWNrIEZp bmlzaEJyZWFrcG9pbnQgaW4gbWFpbiBubyBhbGxvd2VkCisKK2dkYl90ZXN0 ICJmaW5pc2giICJtYWluLioiICJyZXR1cm4gdG8gbWFpbigpIgorZ2RiX3Rl c3QgInB5dGhvbiBNeUZpbmlzaEJyZWFrcG9pbnQgKE5vbmUsIGdkYi5zZWxl Y3RlZF9mcmFtZSAoKSkiIFwKKyAgICAgICAgICJWYWx1ZUVycm9yOiBcIkZp bmlzaEJyZWFrcG9pbnRcIiBub3QgbWVhbmluZ2Z1bCBpbiB0aGUgb3V0ZXJt b3N0IGZyYW1lLi4qIiBcCisgICAgICAgICAiY2hlY2sgRmluaXNoQlAgbm90 IGFsbG93ZWQgaW4gbWFpbiIKKworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9p bnQgd2l0aCBubyBkZWJ1ZyBzeW1ib2wgCisjCisKK2NsZWFuX3Jlc3RhcnQg JHt0ZXN0ZmlsZX0KKworZ2RiX3Rlc3QgInNvdXJjZSAkcmVtb3RlX3B5dGhv bl9maWxlIiAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZC4qIiBcCisgICAgICAg ICAiaW1wb3J0IHB5dGhvbiBzY3JpcHRzIgorc2V0IGNvbmRfbGluZSBbZ2Ri X2dldF9saW5lX251bWJlciAiQ29uZGl0aW9uIEJyZWFrLiJdCisKK2lmICFb cnVudG8gImdldHBpZCJdIHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4g dG8gZ2V0cGlkLiIKKyAgICByZXR1cm4gMAorfQorCitnZGJfdGVzdCAicHl0 aG9uIGZpbmlzaEJQID0gU2ltcGxlRmluaXNoQnJlYWtwb2ludChnZGIubmV3 ZXN0X2ZyYW1lKCkpIiBcCisgICAgICAgICAiU2ltcGxlRmluaXNoQnJlYWtw b2ludCBpbml0IiBcCisgICAgICAgICAic2V0IGZpbmlzaCBicmVha3BvaW50 IgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiU2ltcGxlRmluaXNoQnJlYWtwb2lu dCBzdG9wLioiICJjaGVjayBGaW5pc2hCcmVha3BvaW50IGhpdCIKK2dkYl90 ZXN0ICJweXRob24gcHJpbnQgZmluaXNoQlAucmV0dXJuX3ZhbHVlIiAiTm9u ZSIgImNoZWNrIHJldHVybiB2YWx1ZSB3aXRob3V0IGRlYnVnIHN5bWJvbCIK KworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgaW4gZnVuY3Rpb24gcmV0 dXJuZWQgYnkgbG9uZ2ptcCAKKyMKKworY2xlYW5fcmVzdGFydCAke3Rlc3Rm aWxlfQorCitnZGJfdGVzdCAic291cmNlICRyZW1vdGVfcHl0aG9uX2ZpbGUi ICJQeXRob24gc2NyaXB0IGltcG9ydGVkLioiIFwKKyAgICAgICAgICJpbXBv cnQgcHl0aG9uIHNjcmlwdHMiCisKK2lmICFbcnVudG8gY2FsbF9sb25nam1w XzFdIHRoZW4geworICAgIHBlcnJvciAiY291bGRuJ3QgcnVuIHRvIGJyZWFr cG9pbnQgY2FsbF9sb25nam1wIgorICAgIGNvbnRpbnVlCit9CisKK2dkYl90 ZXN0ICJweXRob24gZmluaXNoYnAgPSBTaW1wbGVGaW5pc2hCcmVha3BvaW50 KGdkYi5uZXdlc3RfZnJhbWUoKSkiIFwKKyAgICAgICAgICJTaW1wbGVGaW5p c2hCcmVha3BvaW50IGluaXQiIFwKKyAgICAgICAgICJzZXQgZmluaXNoIGJy ZWFrcG9pbnQiIAorZ2RiX3Rlc3QgImJyZWFrIFtnZGJfZ2V0X2xpbmVfbnVt YmVyICJhZnRlciBsb25nam1wLiJdIiAiQnJlYWtwb2ludC4qIGF0IC4qIiBc CisgICAgICAgICAic2V0IEJQIGFmdGVyIHRoZSBqdW1wIgorZ2RiX3Rlc3Qg ImNvbnRpbnVlIiAiU2ltcGxlRmluaXNoQnJlYWtwb2ludCBvdXQgb2Ygc2Nv cGUuKiIgXAorICAgICAgICAgImNoZWNrIEZpbmlzaEJQIG91dCBvZiBzY29w ZSBub3RpZmljYXRpb24iCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGZpbmlz aGJwLmlzX3ZhbGlkKCkiICJGYWxzZS4qIlwKKyAgICAgICAgICJlbnN1cmUg dGhhdCBmaW5pc2ggYnAgaXMgaW52YWxpZCBhZmVyIG91dCBvZiBzY29wZSBu b3RpZmljYXRpb24iCisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IGlu IEJQIGNvbmRpdGlvbiBldmFsdWF0aW9uIAorIyAoZmluaXNoIGluIGR1bW15 IGZyYW1lKQorIworCitjbGVhbl9yZXN0YXJ0ICR7dGVzdGZpbGV9CisKK2dk Yl90ZXN0ICJzb3VyY2UgJHJlbW90ZV9weXRob25fZmlsZSIgIlB5dGhvbiBz Y3JpcHQgaW1wb3J0ZWQuKiIgXAorICAgICAgICAgImltcG9ydCBweXRob24g c2NyaXB0cyIKKworCitpZiAhW3J1bnRvX21haW5dIHRoZW4geworICAgIGZh aWwgIkNhbm5vdCBydW4gdG8gbWFpbi4iCisgICAgcmV0dXJuIDAKK30KKyAg ICAgICAgIAorZ2RiX3Rlc3QgImJyZWFrICR7Y29uZF9saW5lfSBpZiB0ZXN0 XzEoaSw4KSIgIkJyZWFrcG9pbnQgLiogYXQgLioiIFwKKyAgICAgICAgICJz ZXQgYSBjb25kaXRpb25hbCBCUCIKK2dkYl90ZXN0ICJweXRob24gVGVzdEJy ZWFrcG9pbnQoKSIgIlRlc3RCcmVha3BvaW50IGluaXQiIFwKKyAgICAgICAg ICJzZXQgRmluaXNoQlAgaW4gYSBicmVha3BvaW50IGNvbmRpdGlvbiIKK2dk Yl90ZXN0ICJjb250aW51ZSIgXAorICAgICAgICAgIlwiRmluaXNoQnJlYWtw b2ludFwiIGNhbm5vdCBiZSBzZXQgb24gYSBkdW1teSBmcmFtZS4qIiBcCisg ICAgICAgICAiZG9uJ3QgYWxsb3cgRmluaXNoQnJlYWtwb2ludCBvbiBkdW1t eSBmcmFtZXMiCitnZGJfdGVzdCAicHJpbnQgaSIgIjgiICJjaGVjayBzdG9w cGVkIGxvY2F0aW9uIgorCisjCisjIFRlc3QgRmluaXNoQnJlYWtwb2ludCBp biBCUCBjb25kaXRpb24gZXZhbHVhdGlvbiAKKyMgKGZpbmlzaCBpbiBub3Jt YWwgZnJhbWUpCisjCisKK2NsZWFuX3Jlc3RhcnQgJHt0ZXN0ZmlsZX0KKwor Z2RiX3Rlc3QgInNvdXJjZSAkcmVtb3RlX3B5dGhvbl9maWxlIiAiUHl0aG9u IHNjcmlwdCBpbXBvcnRlZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhv biBzY3JpcHRzIgorCitpZiAhW3J1bnRvX21haW5dIHRoZW4geworICAgIGZh aWwgIkNhbm5vdCBydW4gdG8gbWFpbi4iCisgICAgcmV0dXJuIDAKK30KKwor Z2RiX3Rlc3QgImJyZWFrICR7Y29uZF9saW5lfSBpZiB0ZXN0KGksOCkiIFwK KyAgICAgICAgICJCcmVha3BvaW50IC4qIGF0IC4qIiAic2V0IGNvbmRpdGlv bmFsIEJQIgorZ2RiX3Rlc3QgInB5dGhvbiBUZXN0QnJlYWtwb2ludCgpIiAi VGVzdEJyZWFrcG9pbnQgaW5pdCIgInNldCBCUCBpbiBjb25kaXRpb24iCisK K2dkYl90ZXN0ICJjb250aW51ZSIgXAorICAgICAgICAgInRlc3QgZG9uJ3Qg c3RvcDogMS4qdGVzdCBkb24ndCBzdG9wOiAyLip0ZXN0IHN0b3AuKkVycm9y IGluIHRlc3RpbmcgYnJlYWtwb2ludCBjb25kaXRpb24uKlRoZSBwcm9ncmFt IGJlaW5nIGRlYnVnZ2VkIHN0b3BwZWQgd2hpbGUgaW4gYSBmdW5jdGlvbiBj YWxsZWQgZnJvbSBHREIuKiIgXAorICAgICAgICAgInN0b3AgaW4gY29uZGl0 aW9uIGZ1bmN0aW9uIgorCitnZGJfdGVzdCAiY29udGludWUiICJDb250aW51 aW5nLioiICJmaW5pc2ggY29uZGl0aW9uIGV2YWx1YXRpb24iCitnZGJfdGVz dCAiY29udGludWUiICJCcmVha3BvaW50LioiICJzdG9wIGF0IGNvbmRpdGlv bmFsIGJyZWFrcG9pbnQiCitnZGJfdGVzdCAicHJpbnQgaSIgIjgiICJjaGVj ayBzdG9wcGVkIGxvY2F0aW9uIgorCisjCisjIFRlc3QgRmluaXNoQnJlYWtw b2ludCBpbiBleHBsaWNpdCBpbmZlcmlvciBmdW5jdGlvbiBjYWxsCisjCisK K2NsZWFuX3Jlc3RhcnQgJHt0ZXN0ZmlsZX0KKworZ2RiX3Rlc3QgInNvdXJj ZSAkcmVtb3RlX3B5dGhvbl9maWxlIiAiUHl0aG9uIHNjcmlwdCBpbXBvcnRl ZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhvbiBzY3JpcHRzIgorCitp ZiAhW3J1bnRvX21haW5dIHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4g dG8gbWFpbi4iCisgICAgcmV0dXJuIDAKK30KKworIyByZXR1cm4gYWRkcmVz cyBpbiBkdW1teSBmcmFtZQorCitnZGJfdGVzdCAicHl0aG9uIFRlc3RFeHBs aWNpdEJyZWFrcG9pbnQoJ2luY3JlYXNlXzEnKSIgIkJyZWFrcG9pbnQuKmF0 LioiIFwKKyAgICAgICAgICJwcmVwYXJlIFRlc3RFeHBsaWNpdEJyZWFrcG9p bnQiCitnZGJfdGVzdCAicHJpbnQgaW5jcmVhc2VfMSgmaSkiIFwKKyAgICAg ICAgICJcIkZpbmlzaEJyZWFrcG9pbnRcIiBjYW5ub3QgYmUgc2V0IG9uIGEg ZHVtbXkgZnJhbWUuKiIgXAorICAgICAgICAgImRvbid0IGFsbG93IEZpbmlz aEJyZWFrcG9pbnQgb24gZHVtbXkgZnJhbWVzIgorCisjIHJldHVybiBhZGRy ZXNzIGluIG5vcm1hbCBmcmFtZQorCitkZWxldGVfYnJlYWtwb2ludHMKK2dk Yl90ZXN0ICJweXRob24gVGVzdEV4cGxpY2l0QnJlYWtwb2ludChcImluY3Jl YXNlXzFcIikiICJCcmVha3BvaW50LiphdC4qIiBcCisgICAgICAgICAicHJl cGFyZSBUZXN0RXhwbGljaXRCcmVha3BvaW50IgorZ2RiX3Rlc3QgInByaW50 IGluY3JlYXNlKCZpKSIgXAorICAgICAgICAgIlNpbXBsZUZpbmlzaEJyZWFr cG9pbnQgaW5pdC4qU2ltcGxlRmluaXNoQnJlYWtwb2ludCBzdG9wLipUaGUg cHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCBzdG9wcGVkIHdoaWxlIGluIGEgZnVu Y3Rpb24gY2FsbGVkIGZyb20gR0RCLioiIFwKKyAgICAgICAgICJGaW5pc2hC UCBzdG9wIGF0IGR1cmluZyBleHBsaWNpdCBmdW5jdGlvbiBjYWxsIgorCisK KyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IHdoZW4gaW5mZXJpb3IgZXhp dHMKKyMKKworaWYgIVtydW50byAidGVzdF9leGVjX2V4aXQiXSB0aGVuIHsK KyAgICBmYWlsICJDYW5ub3QgcnVuIHRvIHRlc3RfZXhlY19leGl0LiIKKyAg ICByZXR1cm4gMAorfQorCitnZGJfdGVzdCAicHl0aG9uIFNpbXBsZUZpbmlz aEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9mcmFtZSgpKSIgIlNpbXBsZUZpbmlz aEJyZWFrcG9pbnQgaW5pdCIgInNldCBGaW5pc2hCUCBhZnRlciB0aGUgZXhp dCgpIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiU2ltcGxlRmluaXNoQnJlYWtw b2ludCBvdXQgb2Ygc2NvcGUuKiIgImNhdGNoIG91dCBvZiBzY29wZSBhZnRl ciBleGl0IgorCisjCisjIFRlc3QgRmluaXNoQnJlYWtwb2ludCB3aGVuIGlu ZmVyaW9yIGV4ZWNzCisjCisKK2lmICFbcnVudG8gInRlc3RfZXhlY19leGl0 Il0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90IHJ1biB0byB0ZXN0X2V4ZWNf ZXhpdC4iCisgICAgcmV0dXJuIDAKK30gICAgIAorCitnZGJfdGVzdF9ub19v dXRwdXQgInNldCB2YXIgZG9fZXhpdCA9IDAiICJzd2l0Y2ggdG8gZXhlY3Zl KCkgdGVzdCIKK2dkYl90ZXN0ICJweXRob24gU2ltcGxlRmluaXNoQnJlYWtw b2ludChnZGIubmV3ZXN0X2ZyYW1lKCkpIiAiU2ltcGxlRmluaXNoQnJlYWtw b2ludCBpbml0IiAic2V0IEZpbmlzaEJQIGFmdGVyIHRoZSBleGVjIgorZ2Ri X3Rlc3QgImNhdGNoIGV4ZWMiICJDYXRjaHBvaW50LipcKGV4ZWNcKS4qIiAi Y2F0Y2ggZXhlYyIKK2dkYl90ZXN0ICJjb250aW51ZSIgIlNpbXBsZUZpbmlz aEJyZWFrcG9pbnQgb3V0IG9mIHNjb3BlLioiICJjYXRjaCBvdXQgb2Ygc2Nv cGUgYWZ0ZXIgZXhlYyIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp ZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNo LWJyZWFrcG9pbnQucHkgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHkt ZmluaXNoLWJyZWFrcG9pbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uZGVhMmE3MwotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90 ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5weQpA QCAtMCwwICsxLDg5IEBACisjIENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKwor IyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0RCIHRlc3RzdWl0ZS4gIEl0 IHRlc3RzIHB5dGhvbiBGaW5pc2gKKyMgQnJlYWtwb2ludHMuCisJCQorY2xh c3MgTXlGaW5pc2hCcmVha3BvaW50IChnZGIuRmluaXNoQnJlYWtwb2ludCk6 CisJZGVmIF9faW5pdF9fKHNlbGYsIHZhbCwgZnJhbWUpOgorCQlnZGIuRmlu aXNoQnJlYWtwb2ludC5fX2luaXRfXyAoc2VsZiwgZnJhbWUpCisJCXByaW50 ICJNeUZpbmlzaEJyZWFrcG9pbnQgaW5pdCIKKwkJc2VsZi52YWwgPSB2YWwK KwkJCisJZGVmIHN0b3Aoc2VsZik6CisJCXByaW50ICJNeUZpbmlzaEJyZWFr cG9pbnQgc3RvcCB3aXRoICVkIiAlIGludCAoc2VsZi52YWwuZGVyZWZlcmVu Y2UgKCkpCisJCXByaW50ICJyZXR1cm5fdmFsdWUgaXM6ICVkIiAlIGludCAo c2VsZi5yZXR1cm5fdmFsdWUpCisJCWdkYi5leGVjdXRlICgid2hlcmUgMSIp CisJCXJldHVybiBUcnVlCisJCisJZGVmIG91dF9vZl9zY29wZShzZWxmKToK KwkJcHJpbnQgIk15RmluaXNoQnJlYWtwb2ludCBvdXQgb2Ygc2NvcGUiCisK K2NsYXNzIFRlc3RCcmVha3BvaW50KGdkYi5CcmVha3BvaW50KToKKyAgICBk ZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGdkYi5CcmVha3BvaW50Ll9f aW5pdF9fIChzZWxmLCBzcGVjPSJ0ZXN0XzEiLCBpbnRlcm5hbD0xKQorICAg ICAgICBzZWxmLnNpbGVudCA9IFRydWUKKyAgICAgICAgc2VsZi5jb3VudCA9 IDAKKyAgICAgICAgcHJpbnQgIlRlc3RCcmVha3BvaW50IGluaXQiCisgICAg ICAgIAorICAgIGRlZiBzdG9wKHNlbGYpOgorICAgIAlzZWxmLmNvdW50ICs9 IDEKKyAgICAJdHJ5OgorICAgICAgICAJVGVzdEZpbmlzaEJyZWFrcG9pbnQg KGdkYi5uZXdlc3RfZnJhbWUgKCksIHNlbGYuY291bnQpCisgICAgICAgIGV4 Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgIAlwcmludCBlCisgICAg ICAgIHJldHVybiBGYWxzZQorCitjbGFzcyBUZXN0RmluaXNoQnJlYWtwb2lu dCAoZ2RiLkZpbmlzaEJyZWFrcG9pbnQpOgorICAgIGRlZiBfX2luaXRfXyAo c2VsZiwgZnJhbWUsIGNvdW50KToKKyAgICAJc2VsZi5jb3VudCA9IGNvdW50 CisgICAgICAgIGdkYi5GaW5pc2hCcmVha3BvaW50Ll9faW5pdF9fIChzZWxm LCBmcmFtZSwgaW50ZXJuYWw9MSkKKyAgICAgICAgCisgICAgICAgIAorICAg IGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBwcmludCAiLS0+Iiwgc2VsZi5u dW1iZXIKKyAgICAgICAgaWYgKHNlbGYuY291bnQgPT0gMyk6CisgICAgICAg ICAgICBwcmludCAidGVzdCBzdG9wOiAlZCIgJSBzZWxmLmNvdW50CisgICAg ICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAg ICAgcHJpbnQgInRlc3QgZG9uJ3Qgc3RvcDogJWQiICUgc2VsZi5jb3VudAor ICAgICAgICAgICAgcmV0dXJuIEZhbHNlIAorICAgICAgICAKKyAgICAKKyAg ICBkZWYgb3V0X29mX3Njb3BlKHNlbGYpOgorICAgICAgICBwcmludCAidGVz dCBkaWRuJ3QgZmluaXNoOiAlZCIgJSBzZWxmLmNvdW50CisKK2NsYXNzIFRl c3RFeHBsaWNpdEJyZWFrcG9pbnQoZ2RiLkJyZWFrcG9pbnQpOgorCWRlZiBz dG9wKHNlbGYpOgorCQl0cnk6CisJCQlTaW1wbGVGaW5pc2hCcmVha3BvaW50 IChnZGIubmV3ZXN0X2ZyYW1lICgpKQorCQlleGNlcHQgVmFsdWVFcnJvciBh cyBlOgorCQkJcHJpbnQgZQorCQlyZXR1cm4gRmFsc2UKKworY2xhc3MgU2lt cGxlRmluaXNoQnJlYWtwb2ludChnZGIuRmluaXNoQnJlYWtwb2ludCk6CisJ ZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lKToKKwkJZ2RiLkZpbmlzaEJyZWFr cG9pbnQuX19pbml0X18gKHNlbGYsIGZyYW1lKQorCQkKKwkJcHJpbnQgIlNp bXBsZUZpbmlzaEJyZWFrcG9pbnQgaW5pdCIKKwkJCisJZGVmIHN0b3Aoc2Vs Zik6CisJCXByaW50ICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IHN0b3AiIAor CQlyZXR1cm4gVHJ1ZQorCQorCWRlZiBvdXRfb2Zfc2NvcGUoc2VsZik6CisJ CXByaW50ICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IG91dCBvZiBzY29wZSIK KworcHJpbnQgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWRkIgpkaWZmIC0tZ2l0 IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3Bv aW50Mi5jYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gt YnJlYWtwb2ludDIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uYTBlZWEwNgotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3Vp dGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIuY2MKQEAgLTAs MCArMSw1OSBAQAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9mIEdEQiwg dGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMTEgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBv ZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisqLworCisKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKwordm9pZAor dGhyb3dfZXhjZXB0aW9uXzEgKGludCBlKQoreworICB0aHJvdyBuZXcgaW50 IChlKTsKK30KKwordm9pZAordGhyb3dfZXhjZXB0aW9uIChpbnQgZSkKK3sK KyAgdGhyb3dfZXhjZXB0aW9uXzEgKGUpOworfQorCitpbnQKK21haW4gKHZv aWQpCit7CisgIGludCBpOworICB0cnkKKyAgICB7CisgICAgICB0aHJvd19l eGNlcHRpb25fMSAoMTApOworICAgIH0KKyAgY2F0Y2ggKGNvbnN0IGludCAq ZSkKKyAgICB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiRXhjZXB0aW9uICMi IDw8ICplIDw8IHN0ZDo6ZW5kbDsKKyAgICB9CisgIGkgKz0gMTsgLyogQnJl YWsgYWZ0ZXIgZXhjZXB0aW9uIDEuICAqLworCisgIHRyeQorICAgIHsKKyAg ICAgIHRocm93X2V4Y2VwdGlvbiAoMTApOworICAgIH0KKyAgY2F0Y2ggKGNv bnN0IGludCAqZSkKKyAgICB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiRXhj ZXB0aW9uICMiIDw8ICplIDw8IHN0ZDo6ZW5kbDsKKyAgICB9CisgIGkgKz0g MTsgLyogQnJlYWsgYWZ0ZXIgZXhjZXB0aW9uIDIuICAqLworCisgIHJldHVy biBpOworfQpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9u L3B5LWZpbmlzaC1icmVha3BvaW50Mi5leHAgYi9nZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLmV4cApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWU3OThjCi0tLSAvZGV2L251 bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1i cmVha3BvaW50Mi5leHAKQEAgLTAsMCArMSw2NSBAQAorIyBDb3B5cmlnaHQg KEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisj IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBH REIgdGVzdHN1aXRlLiAgSXQgdGVzdHMgdGhlIG1lY2hhbmlzbQorIyBleHBv c2luZyB2YWx1ZXMgdG8gUHl0aG9uLgorCitpZiAkdHJhY2VsZXZlbCB0aGVu IHsKKyAgICBzdHJhY2UgJHRyYWNlbGV2ZWwKK30KKworbG9hZF9saWIgZ2Ri LXB5dGhvbi5leHAKKworc2V0IHRlc3RmaWxlICJweS1maW5pc2gtYnJlYWtw b2ludDIiCitzZXQgc3JjZmlsZSAke3Rlc3RmaWxlfS5jYworc2V0IGJpbmZp bGUgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxlfQorc2V0IHB5Zmls ZSAgJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxlfS5weQorCisjIFN0 YXJ0IHdpdGggYSBmcmVzaCBnZGIuCitnZGJfZXhpdAorZ2RiX3N0YXJ0Citn ZGJfcmVpbml0aWFsaXplX2RpciAkc3JjZGlyLyRzdWJkaXIKK2dkYl9sb2Fk ICR7YmluZmlsZX0KKworaWYgeyBbZ2RiX2NvbXBpbGUgIiR7c3JjZGlyfS8k e3N1YmRpcn0vJHtzcmNmaWxlfSIgIiR7YmluZmlsZX0iIGV4ZWN1dGFibGUg e2RlYnVnIGMrK31dICE9ICIiIH0geworICAgIHVudGVzdGVkICJDb3VsZG4n dCBjb21waWxlICR7c3JjZmlsZX0iCisgICAgcmV0dXJuIC0xCit9CisKK2lm ICFbcnVudG9fbWFpbl0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90IHJ1biB0 byBtYWluLiIKKyAgICByZXR1cm4gMAorfQorCisjCisjIENoZWNrIEZpbmlz aEJyZWFrcG9pbnRzIGFnYWluc3QgQysrIGV4Y2VwdGlvbnMKKyMKKworZ2Ri X2JyZWFrcG9pbnQgW2dkYl9nZXRfbGluZV9udW1iZXIgIkJyZWFrIGFmdGVy IGV4Y2VwdGlvbiAyIl0KKworZ2RiX3Rlc3QgInNvdXJjZSAkcHlmaWxlIiAi LipQeXRob24gc2NyaXB0IGltcG9ydGVkLioiIFwKKyAgICAgICAgICJpbXBv cnQgcHl0aG9uIHNjcmlwdHMiCisgICAgICAgICAKK2dkYl9icmVha3BvaW50 ICJ0aHJvd19leGNlcHRpb25fMSIKK2dkYl90ZXN0ICJjb250aW51ZSIgIkJy ZWFrcG9pbnQgLip0aHJvd19leGNlcHRpb25fMS4qIiAicnVuIHRvIGV4Y2Vw dGlvbiAxIgorCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGxlbihnZGIuYnJl YWtwb2ludHMoKSkiICIzIiAiY2hlY2sgQlAgY291bnQiCitnZGJfdGVzdCAi cHl0aG9uIEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9m cmFtZSgpKSIgImluaXQgRXhjZXB0aW9uRmluaXNoQnJlYWtwb2ludCIgInNl dCBGaW5pc2hCUCBhZnRlciB0aGUgZXhjZXB0aW9uIgorZ2RiX3Rlc3QgImNv bnRpbnVlIiAiLipzdG9wcGVkIGF0IEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9p bnQuKiIgImNoZWNrIEZpbmlzaEJyZWFrcG9pbnQgaW4gY2F0Y2goKSIKK2dk Yl90ZXN0ICJweXRob24gcHJpbnQgbGVuKGdkYi5icmVha3BvaW50cygpKSIg IjMiICJjaGVjayBmaW5pc2ggQlAgcmVtb3ZhbCIKKworZ2RiX3Rlc3QgImNv bnRpbnVlIiAiLipCcmVha3BvaW50LiogdGhyb3dfZXhjZXB0aW9uXzEuKiIg ImNvbnRpbnVlIHRvIHNlY29uZCBleGNlcHRpb24iCitnZGJfdGVzdCAicHl0 aG9uIEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9mcmFt ZSgpKSIgImluaXQgRXhjZXB0aW9uRmluaXNoQnJlYWtwb2ludCIgInNldCBG aW5pc2hCUCBhZnRlciB0aGUgZXhjZXB0aW9uIgorZ2RiX3Rlc3QgImNvbnRp bnVlIiAiLipleGNlcHRpb24gZGlkIG5vdCBmaW5pc2guKiIgIkZpbmlzaEJy ZWFrcG9pbnQgd2l0aCBleGNlcHRpb24gdGhyb3duIG5vdCBjYXVnaHQiCmRp ZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNo LWJyZWFrcG9pbnQyLnB5IGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LWZpbmlzaC1icmVha3BvaW50Mi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi4wZmI2OTU1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5w eQpAQCAtMCwwICsxLDMzIEBACisjIENvcHlyaWdodCAoQykgMjAxMSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0RCIHRlc3RzdWl0ZS4g IEl0IHRlc3RzIHB5dGhvbiBGaW5pc2gKKyMgQnJlYWtwb2ludHMuCisKK2Ns YXNzIEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9pbnQoZ2RiLkZpbmlzaEJyZWFr cG9pbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcmFtZSk6CisgICAg ICAgIGdkYi5GaW5pc2hCcmVha3BvaW50Ll9faW5pdF9fIChzZWxmLCBmcmFt ZSwgaW50ZXJuYWw9MSkKKyAgICAgICAgc2VsZi5zaWxlbnQgPSBUcnVlOwor ICAgICAgICBwcmludCAiaW5pdCBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50 IgorICAgICAgICAKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgcHJp bnQgInN0b3BwZWQgYXQgRXhjZXB0aW9uRmluaXNoQnJlYWtwb2ludCIKKyAg ICAgICAgcmV0dXJuIFRydWUgCisgICAgCisgICAgZGVmIG91dF9vZl9zY29w ZShzZWxmKToKKyAgICAgICAgcHJpbnQgImV4Y2VwdGlvbiBkaWQgbm90IGZp bmlzaCAuLi4iCisKKworcHJpbnQgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQi Ci0tIAoxLjcuNi40Cgo= --bcaec50163cf8407e004b14dd7a6--