From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id 4C22B3858D39 for ; Wed, 31 Aug 2022 10:56:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4C22B3858D39 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.93,277,1654588800"; d="diff'?scan'208";a="82312448" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa2.mentor.iphmx.com with ESMTP; 31 Aug 2022 02:56:32 -0800 IronPort-SDR: H5w7IY6mJ0QaiL/rcdLfq0KO5kI3xASfIIg6x99k18/CPWkka7TIqOKC3WZuc5p85A/SUvM9+h ha098a943r9D4Mh05Dz1MJt0OWEPsK/0aIDCku/hkfuaOBScJUI0TPmhfZr03DbGQjDmRLSSEG UKK1pzM0BokGFScdApjY2dKWrhOUqJuSTr8JMeIGVFVU2hBncw2VJwBnHUnHnrDrqq8eraCTcc oXF0Zmk6NwrYy1DofhqXLBQdj//ejIxRuN7hV0HtPJG3vaBpIspO0oAn9vu038ueaKapU76BTk Q4Y= Content-Type: multipart/mixed; boundary="------------HL00mJwprdTH1ECkUD0nBNmI" Message-ID: <7dc0eaf0-a3ed-8145-c43a-e9bb063f6acd@codesourcery.com> Date: Wed, 31 Aug 2022 12:56:25 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.12.0 Subject: Re: [PATCH] OpenMP, libgomp: Environment variable syntax extension. References: <392c847d-e798-2be3-a808-6888de6c90cd@codesourcery.com> <73621930-22ce-c3f1-61e0-f15683f8b281@codesourcery.com> <055f7cfb-2849-ba5a-a161-13333e19e538@codesourcery.com> From: Marcel Vollweiler To: Jakub Jelinek CC: In-Reply-To: X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-14.mgc.mentorg.com (139.181.222.14) To svr-ies-mbx-10.mgc.mentorg.com (139.181.222.10) X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,NICE_REPLY_A,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --------------HL00mJwprdTH1ECkUD0nBNmI Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable Hi Jakub, Am 22.08.2022 um 17:35 schrieb Jakub Jelinek: >> +/* Default values of ICVs according to the OpenMP standard. */ >> +struct gomp_default_icv_t gomp_default_icv_values =3D { >> + .run_sched_var =3D GFS_DYNAMIC, >> + .run_sched_chunk_size =3D 1, >> + .max_active_levels_var =3D 1, >> + .bind_var =3D omp_proc_bind_false, >> + .nteams_var =3D 0, >> + .teams_thread_limit_var =3D 0, >> + .default_device_var =3D 0 >> +}; > > Why this var (and if it is really needed, why it isn't const)? > You seem to be using only 2 fields from it: > libgomp/libgomp.h:extern struct gomp_default_icv_t gomp_default_icv_value= s; > libgomp/env.c:struct gomp_default_icv_t gomp_default_icv_values =3D { > libgomp/target.c: new->icvs.nteams =3D gomp_default_icv_values.nteams_= var; > libgomp/target.c: new->icvs.default_device =3D gomp_default_icv_values= .default_device_var; gomp_default_icv_values is used to store the default values of the ICVs as defined in the OpenMP standard. Previously this was not necessary since the= re were only host-related ICVs being initialized with the corresponding defaul= t values in gomp_global_icv. gomp_global_icv cannot be used to get the default values in general as they= are overwritten as soon as we parse an environment variable for a host-related = ICV. In contrast we need the default values not only at the very beginning when = we parse the environment variables, but also when we create device-specific IC= V structs. The point in time when a device-specific ICV struct is created can= be when a particular device is used first (as we don't know the device numbers during parsing the environment variables). I introduced gomp_default_icv_values in order to have the default ICV value= s centralized (like in gomp_global_icv before) for a better readability and maintanance. As you stated correctly below, there were still multiple places using the defaults directly. I modified that. > >> + >> bool gomp_cancel_var =3D false; >> enum gomp_target_offload_t gomp_target_offload_var >> =3D GOMP_TARGET_OFFLOAD_DEFAULT; >> @@ -104,86 +123,94 @@ int goacc_default_dims[GOMP_DIM_MAX]; >> static int wait_policy; >> static unsigned long stacksize =3D GOMP_DEFAULT_STACKSIZE; >> >> -/* Parse the OMP_SCHEDULE environment variable. */ >> - >> static void >> -parse_schedule (void) >> +print_env_var_error (const char *env, const char *val) >> { >> - char *env, *end; >> + char name[val - env]; >> + memcpy (name, env, val - env - 1); >> + name[val - env - 1] =3D '\0'; >> + gomp_error ("Invalid value for environment variable %s: %s", name, va= l); > > Why the temporary buffer (especially VLA)? > Just > gomp_error ("Invalid value for environment variable %.*s: %s", > (int) (val - env - 1), env, val); > should do the job. Good hint, thanks! (changed) > >> +/* Parse the OMP_SCHEDULE environment variable. */ >> +static bool >> +parse_schedule (const char *env, const char *val, void * const params[]= ) > > No space after * Changed. > >> +#define ENTRY(NAME) NAME, sizeof (NAME) - 1 >> +static const struct envvar >> +{ >> + const char *name; >> + int name_len; >> + uint8_t flag_vars[3]; >> + uint8_t flag; >> + bool (*parse_func) (const char *, const char *, void * const[]); >> +} envvars[] =3D { >> + { ENTRY ("OMP_SCHEDULE"), >> + { GOMP_ICV_SCHEDULE, GOMP_ICV_SCHEDULE_CHUNK_SIZE }, >> + GOMP_ENV_SUFFIX_DEV | GOMP_ENV_SUFFIX_ALL | GOMP_ENV_SUFFIX_DEV_X, >> + &parse_schedule }, >> + { ENTRY ("OMP_NUM_TEAMS"), >> + { GOMP_ICV_NTEAMS }, >> + GOMP_ENV_SUFFIX_DEV | GOMP_ENV_SUFFIX_ALL | GOMP_ENV_SUFFIX_DEV_X, >> + &parse_int }, >> + { ENTRY ("OMP_DYNAMIC"), >> + { GOMP_ICV_DYNAMIC }, >> + GOMP_ENV_SUFFIX_DEV | GOMP_ENV_SUFFIX_ALL | GOMP_ENV_SUFFIX_DEV_X, >> + &parse_boolean }, >> + { ENTRY ("OMP_TEAMS_THREAD_LIMIT"), >> + { GOMP_ICV_TEAMS_THREAD_LIMIT }, >> + GOMP_ENV_SUFFIX_DEV | GOMP_ENV_SUFFIX_ALL | GOMP_ENV_SUFFIX_DEV_X, >> + &parse_int }, >> + { ENTRY ("OMP_THREAD_LIMIT"), >> + { GOMP_ICV_THREAD_LIMIT }, >> + GOMP_ENV_SUFFIX_DEV | GOMP_ENV_SUFFIX_ALL | GOMP_ENV_SUFFIX_DEV_X, >> + &parse_unsigned_long }, >> + { ENTRY ("OMP_NUM_THREADS"), >> + { GOMP_ICV_NTHREADS, GOMP_ICV_NTHREADS_LIST, GOMP_ICV_NTHREADS_LIST= _LEN }, >> + GOMP_ENV_SUFFIX_DEV | GOMP_ENV_SUFFIX_ALL | GOMP_ENV_SUFFIX_DEV_X, >> + &parse_unsigned_long_list }, >> + { ENTRY ("OMP_PROC_BIND"), >> + { GOMP_ICV_BIND, GOMP_ICV_BIND_LIST, GOMP_ICV_BIND_LIST_LEN }, >> + GOMP_ENV_SUFFIX_DEV | GOMP_ENV_SUFFIX_ALL | GOMP_ENV_SUFFIX_DEV_X, >> + &parse_bind_var }, >> + { ENTRY ("OMP_MAX_ACTIVE_LEVELS"), >> + { GOMP_ICV_MAX_ACTIVE_LEVELS }, >> + GOMP_ENV_SUFFIX_DEV | GOMP_ENV_SUFFIX_ALL | GOMP_ENV_SUFFIX_DEV_X, >> + &parse_unsigned_long }, >> + { ENTRY ("OMP_WAIT_POLICY"), >> + { GOMP_ICV_WAIT_POLICY }, >> + GOMP_ENV_SUFFIX_DEV | GOMP_ENV_SUFFIX_ALL | GOMP_ENV_SUFFIX_DEV_X, >> + &parse_wait_policy }, >> + { ENTRY ("OMP_STACKSIZE"), >> + { GOMP_ICV_STACKSIZE }, >> + GOMP_ENV_SUFFIX_DEV | GOMP_ENV_SUFFIX_ALL | GOMP_ENV_SUFFIX_DEV_X, >> + &parse_stacksize }, >> + { ENTRY ("OMP_CANCELLATION"), { GOMP_ICV_CANCELLATION }, 0, &parse_bo= olean }, >> + { ENTRY ("OMP_DISPLAY_AFFINITY"), { GOMP_ICV_DISPLAY_AFFINITY }, 0, >> + &parse_boolean }, >> + { ENTRY ("OMP_TARGET_OFFLOAD"), { GOMP_ICV_TARGET_OFFLOAD }, 0, >> + &parse_target_offload }, >> + { ENTRY ("OMP_MAX_TASK_PRIORITY"), { GOMP_ICV_MAX_TASK_PRIORITY }, 0, >> + &parse_int }, >> + { ENTRY ("OMP_ALLOCATOR"), { GOMP_ICV_ALLOCATOR }, 0, &parse_allocato= r }, >> + { ENTRY ("OMP_DEFAULT_DEVICE"), { GOMP_ICV_DEFAULT_DEVICE }, 0, &pars= e_int } > > All the entries in the table start with "OMP_" prefix, isn't it wasteful > to include that prefix in name field and name_len? > I mean, places that use the name to print it can just use OMP_%s and the > matching doesn't need to compare it again. Cutting the environment variable names in pieces worsens perhaps the readab= ility but as we have many "OMP_"s that we can reduce, I agree with you (changed). > >> +static bool >> +get_device_num (char *env, char *dev_num_ptr, int *dev_num, int *dev_nu= m_len) >> +{ >> + char *end; >> + int pos =3D 0; >> + >> + if (dev_num_ptr[0] =3D=3D '-') >> + { >> + gomp_error ("Non-negative device number expected in %s", env); >> + return false; >> + } >> + >> + while (pos <=3D INT_MAX_STR_LEN) >> + { >> + if (dev_num_ptr[pos] =3D=3D '\0' || dev_num_ptr[pos] =3D=3D '=3D'= ) >> + break; >> + pos++; >> + } >> + if (pos > INT_MAX_STR_LEN) >> + { >> + gomp_error ("Invalid device number in %s (too long)", env); >> + return false; >> + } > > I don't understand the purpose of the above loop and if. The purpose of the loop is to limit the number of digits that are parsed fo= r the device number. Theoretically an environment variable name can be very large= and we don't know what a user specifies. Moreover, it's used to recognize that = the device number is not just invalid but that it is too long. Assuming that strtoul does only parse a reasonable number of digits even if= the device number is larger than ULONG_MAX and if we don't want to distinguish different invalid cases for the error output, I agree to use strtoul only. > >> + >> + *dev_num =3D (int) strtoul (dev_num_ptr, &end, 10); > > Just call strtoul and verify afterwards using end you get, no need to wal= k > it separately. > I wouldn't cast to int before verification that it fits though. > So perhaps > char *end; > unsigned long val =3D strtoul (dev_num_ptr, &end, 10); > > if (val > INT_MAX > || *end !=3D '=3D' > || (dev_num_ptr[0] =3D=3D '0' && val !=3D 0) > || (dev_num_ptr[0] < '0' || dev_num_ptr[0] > '9')) > { > gomp_error ("Invalid device number in %s", env); > return false; > } > *dev_num =3D val; > *dev_num_len =3D end - dev_num_ptr; > return true; > or so? No need to differentiate different cases, and you want to > rule out "OMP_SCHEDULE_DEV_ \t+3=3Ddynamic,3" too. > Changed and also added a test case for leading whitespaces in icv-8.c. >> + if (dev_num_ptr[0] =3D=3D '0' && *dev_num !=3D 0) >> + { >> + gomp_error ("Invalid device number in %s (leading zero)", env); >> + return false; >> + } >> + if (dev_num_ptr =3D=3D end || *end !=3D '=3D') >> + { >> + gomp_error ("Invalid device number in %s", env); >> + return false; >> + } >> + >> + *dev_num_len =3D pos; >> + return true; >> +} >> + > >> +static uint32_t * >> +add_initial_icv_to_list (int dev_num, int icv_code, void *icv_addr[3]) >> +{ >> + struct gomp_icv_list *last =3D NULL, *l =3D gomp_initial_icv_list; >> + while (l !=3D NULL && l->device_num !=3D dev_num) >> + { >> + last =3D l; >> + l =3D l->next; >> + } >> + >> + if (l =3D=3D NULL) >> + { >> + l >> + =3D (struct gomp_icv_list *) gomp_malloc (sizeof (struct gomp_icv_l= ist)); > > What is the advantage of adding there a newline after the var name? > The =3D is indented 2 columns to the right from var name, so having it on= one > line has the same length. I guess that is just left over after a variable renaming from a longer name= to "l" which previously exceeded the line lenght limitation. Corrected. > >> + l->device_num =3D dev_num; >> + memset (&(l->icvs), 0, sizeof (struct gomp_initial_icvs)); > > You could use gomp_malloc_cleared (then format it as > l =3D ((struct gomp_icv_list *) > gomp_malloc_cleared (sizeof (struct gomp_icv_list))); Thanks for the hint. Changed. > >> + l->flags =3D 0; >> + if (dev_num < 0) >> + { >> + l->next =3D gomp_initial_icv_list; >> + gomp_initial_icv_list =3D l; >> + } >> + else >> + { >> + l->next =3D NULL; >> + if (last =3D=3D NULL) >> + gomp_initial_icv_list =3D l; >> + else >> + last->next =3D l; >> + } >> + } >> + >> + get_icv_member_addr (&(l->icvs), icv_code, icv_addr); > > No need for the ()s around l->icvs, &l->icvs will do (multiple places, > for other fields and other pointers too). Corrected at several places. >> + >> + return &(l->flags); > > Similarly. Corrected. >> + >> + /* Initial values for host environment variables should always exist = even if >> + there is no explicitly set host environment variable. Moreover, t= hey are >> + set to the initial global values. */ >> + add_initial_icv_to_list (-3, 0, NULL); >> + none =3D gomp_get_initial_icv_item (-3); > > Can you please add an enum for these -3/-2/-1 values and use it? Enum added and -3/-2/-1 replaced accordingly. > >> + none->icvs.nthreads_var =3D 1; >> + none->icvs.thread_limit_var =3D UINT_MAX; >> + none->icvs.run_sched_var =3D GFS_DYNAMIC; >> + none->icvs.run_sched_chunk_size =3D 1; >> + none->icvs.default_device_var =3D 0; >> + none->icvs.dyn_var =3D false; >> + none->icvs.max_active_levels_var =3D 1; >> + none->icvs.bind_var =3D omp_proc_bind_false; > > So, is this essentially a 3rd copy of the defaults? > gomp_global_icv has it, gomp_default_icv_values (partially) and > this spot too. Don't we want to have it initialized once and copy over? This concerns two aspects: (a) Having two structs for the host-related ICV values, one for holding the initial values for omp_display_env and another one for the changeable value= s. Both need to be initialized. (b) Using the concrete default values at multiple locations. This is change= d now (as explained above), such that we now have only one place for the definiti= on of ICV defaults. >> + >> + for (env =3D environ; *env !=3D 0; env++) >> + { >> + if (!startswith (*env, "OMP_")) >> + continue; >> + >> + for (omp_var =3D 0; omp_var < OMP_VAR_CNT; omp_var++) >> + { >> + if (startswith (*env, envvars[omp_var].name)) > > As I said elsewhere, > if (startswith (*env + sizeof ("OMP_") - 1, envvars[omp_var].name)) > instead? > Or have a temporary var set to *env + sizeof ("OMP_") - 1; and use > it instead of *env. > The amount of &(*env)[ etc. spots that could be just &name[ is big. The suggested variable is introduced now. > >> + { >> + pos =3D envvars[omp_var].name_len; >> + if ((*env)[pos] =3D=3D '=3D') >> + { >> + pos++; >> + flag_var_addr >> + =3D add_initial_icv_to_list (-3, >> + envvars[omp_var].flag_vars[0= ], >> + params); >> + } >> + else if (startswith (&(*env)[pos], "_DEV=3D") >> + && envvars[omp_var].flag & GOMP_ENV_SUFFIX_DEV) >> + { >> + pos +=3D 5; >> + flag_var_addr >> + =3D add_initial_icv_to_list (-1, >> + envvars[omp_var].flag_vars[0= ], >> + params); >> + } >> + else if (startswith (&(*env)[pos], "_ALL=3D") >> + && envvars[omp_var].flag & GOMP_ENV_SUFFIX_ALL) >> + { >> + pos +=3D 5; >> + flag_var_addr >> + =3D add_initial_icv_to_list (-2, >> + envvars[omp_var].flag_vars[0= ], >> + params); >> + } >> + else if (startswith (&(*env)[pos], "_DEV_") >> + && envvars[omp_var].flag & GOMP_ENV_SUFFIX_DEV_X) >> + { >> + pos +=3D 5; >> + if (!get_device_num (*env, &(*env)[pos], &dev_num, >> + &dev_num_len)) >> + goto next_var; > > Isn't goto next_var; equivalent to just break; ? Yes, changed. > >> + >> + pos +=3D dev_num_len + 1; >> + flag_var_addr >> + =3D add_initial_icv_to_list (dev_num, >> + envvars[omp_var].flag_vars[0= ], >> + params); >> + } >> + else >> + { >> + gomp_error ("Invalid device number in %s", *env); >> + break; >> + } >> + env_val =3D &(*env)[pos]; >> + >> + if (envvars[omp_var].parse_func (*env, env_val, params)) >> + { >> + for (i =3D 0; i < 3; ++i) >> + if (envvars[omp_var].flag_vars[i]) >> + gomp_set_icv_flag (flag_var_addr, >> + envvars[omp_var].flag_vars[i]); >> + else >> + break; >> + } >> + >> + break; >> + } >> + } >> + >> + next_var: > > So by using break; above we could drop this. Removed. > >> +struct gomp_default_icv_t >> +{ >> + enum gomp_schedule_type run_sched_var; >> + int run_sched_chunk_size; >> + unsigned char max_active_levels_var; >> + char bind_var; >> + int nteams_var; >> + int teams_thread_limit_var; >> + int default_device_var; >> +}; >> +extern struct gomp_default_icv_t gomp_default_icv_values; > > Please don't mix the type definitions with extern declarations and > with function prototypes. > Function prototypes should go to the section of libgomp.h that starts > with /* Function prototypes. */ comment and should go under section > corresponding to the filename that provides the definition. > For externs, there is a large block of extern declarations. Thanks for the hint. I have re-sorted the according parts and hope that it'= s ok now. > >> + struct gomp_icv_list >> + { >> + int device_num; >> + struct gomp_initial_icvs icvs; >> + uint32_t flags; > > Put flags after device_num to avoid some useless padding? Good spot. Changed. > >> + struct gomp_icv_list *next; >> + }; > >> +extern struct gomp_icv_list* gomp_add_device_specific_icv > > * should go after space, not before. Corrected. > >> +int >> +main (int argc, char *const *argv) > > No need for "int argc, char *const *argv" when you aren't using them, > just > int > main () This is just left over from the execv approach that I removed. Corrected. The patch was tested on x86_64-linux with nvptx and amdgcn offloading witho= ut regressions. Marcel ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------HL00mJwprdTH1ECkUD0nBNmI Content-Type: text/plain; charset="UTF-8"; name="extend-env-variables-syntax.diff" Content-Disposition: attachment; filename="extend-env-variables-syntax.diff" Content-Transfer-Encoding: base64 T3Blbk1QLCBsaWJnb21wOiBFbnZpcm9ubWVudCB2YXJpYWJsZSBzeW50YXggZXh0ZW5zaW9u LgoKVGhpcyBwYXRjaCBjb25zaWRlcnMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHN5bnRh eCBleHRlbnNpb24gZm9yCmRldmljZS1zcGVjaWZpYyB2YXJpYW50cyBvZiBlbnZpcm9ubWVu dCB2YXJpYWJsZXMgZnJvbSBPcGVuTVAgNS4xIChzZWUKT3Blbk1QIDUuMSBzcGVjaWZpY2F0 aW9uLCBwLiA3NSBhbmQgcC4gNjM5KS4gIEFuIGVudmlyb25tZW50IHZhcmlhYmxlIChlLmcu Ck9NUF9OVU1fVEVBTVMpIGNhbiBoYXZlIGRpZmZlcmVudCBzdWZmaXhlczoKCl9ERVYgKGUu Zy4gT01QX05VTV9URUFNU19ERVYpOiBhZmZlY3RzIGFsbCBkZXZpY2VzIGJ1dCBub3QgdGhl IGhvc3QuCl9ERVZfPGRldmljZT4gKGUuZy4gT01QX05VTV9URUFNU19ERVZfNDIpOiBhZmZl Y3RzIG9ubHkgZGV2aWNlIHdpdGgKbnVtYmVyIDxkZXZpY2U+LgpubyBzdWZmaXggKGUuZy4g T01QX05VTV9URUFNUyk6IGFmZmVjdHMgb25seSB0aGUgaG9zdC4KCkluIGZ1dHVyZSBPcGVu TVAgdmVyc2lvbnMgYWxzbyBzdWZmaXggX0FMTCB3aWxsIGJlIGludHJvZHVjZWQgKHNlZSBk aXNjdXNzaW9uCmh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuTVAvc3BlYy9pc3N1ZXMvMzE3OSku IFRoaXMgaXMgYWxzbyBjb25zaWRlcmVkIGluIHRoaXMKcGF0Y2g6CgpfQUxMIChlLmcuIE9N UF9OVU1fVEVBTVNfQUxMKTogYWZmZWN0cyBhbGwgZGV2aWNlcyBhbmQgdGhlIGhvc3QuCgpU aGUgcHJlY2VkZW5jZSBpcyBhcyBmb2xsb3dzIChkZXNjZW5kaW5nKS4gRm9yIHRoZSBob3N0 OgoKCTEuIG5vIHN1ZmZpeAoJMi4gX0FMTAoKRm9yIGRldmljZXM6CgoJMS4gX0RFVl88ZGV2 aWNlPgoJMi4gX0RFVgoJMy4gX0FMTAoKVGhhdCBtZWFucywgX0RFVl88ZGV2aWNlPiBpcyB1 c2VkIHdoZW5ldmVyIGF2YWlsYWJsZS4gT3RoZXJ3aXNlIF9ERVYgaXMgdXNlZCBpZgphdmFp bGFibGUsIGFuZCBhdCBsYXN0IF9BTEwuICBJZiB0aGVyZSBpcyBubyB2YWx1ZSBmb3IgYW55 IG9mIHRoZSB2YXJpYWJsZQp2YXJpYW50cywgZGVmYXVsdCB2YWx1ZXMgYXJlIHVzZWQgYXMg YWxyZWFkeSBpbXBsZW1lbnRlZCBiZWZvcmUuCgpUaGlzIHBhdGNoIGNvbmNlcm5zIHBhcnNp bmcgKGEpLCBzdG9yaW5nIChiKSwgb3V0cHV0IChjKSBhbmQgdHJhbnNtaXNzaW9uIHRvIHRo ZQpkZXZpY2UgKGQpOgoKKGEpIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGRldmljZXMgYW5kIHRo ZSBudW1iZXJpbmcgYXJlIG5vdCBrbm93biB3aGVuIHBhcnNpbmcKdGhlIGVudmlyb25tZW50 IHZhcmlhYmxlcy4gIFRodXMgYWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgaXRlcmF0 ZWQgYW5kCnNlYXJjaGVkIGZvciBkZXZpY2Utc3BlY2lmaWMgb25lcy4KKGIpIE9ubHkgY29u ZmlndXJlZCBkZXZpY2Utc3BlY2lmaWMgdmFyaWFibGVzIGFyZSBzdG9yZWQuICBUaHVzLCBh IGxpbmtlZCBsaXN0CmlzIHVzZWQuCihjKSBUaGUgb3V0cHV0IGlzIGRvbmUgaW4gb21wX2Rp c3BsYXlfZW52IChzZWUgc3BlY2lmaWNhdGlvbiBwLiA0NjhmKS4gIEdsb2JhbApJQ1ZzIGFy ZSB0YWdnZWQgd2l0aCBbYWxsXSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuTVAvc3Bl Yy9pc3N1ZXMvMzE3OS4KSUNWcyB3aGljaCBhcmUgbm90IGdsb2JhbCBidXQgYXJlbid0IGhh bmRsZWQgZGV2aWNlLXNwZWNpZmljIHlldCBhcmUgdGFnZ2VkCndpdGggW2hvc3RdLiAgb21w X2Rpc3BsYXlfZW52IG91dHB1dHMgdGhlIGluaXRpYWwgdmFsdWVzIG9mIHRoZSBJQ1ZzLiAg VGhhdCBpcwp3aHkgYSBkZWRpY2F0ZWQgZGF0YSBzdHJ1Y3R1cmUgaXMgaW50cm9kdWNlZCBm b3IgdGhlIGluaXRhbCB2YWx1ZXMgb25seQooZ29tcF9pbml0aWFsX2ljdl9saXN0KS4KKGQp IERldmljZS1zcGVjaWZpYyBJQ1ZzIGFyZSB0cmFuc21pdHRlZCB0byB0aGUgZGV2aWNlIHZp YSBHT01QX0FERElUSU9OQUxfSUNWUy4KCmxpYmdvbXAvQ2hhbmdlTG9nOgoKCSogY29uZmln L2djbi9pY3YtZGV2aWNlLmMgKG9tcF9nZXRfZGVmYXVsdF9kZXZpY2UpOiBSZXR1cm4gZGV2 aWNlLQoJc3BlY2lmaWMgSUNWLgoJKG9tcF9nZXRfbWF4X3RlYW1zKTogQWRkZWQgZm9yIEdD TiBkZXZpY2VzLgoJKG9tcF9zZXRfbnVtX3RlYW1zKTogTGlrZXdpc2UuCgkoaWFsaWFzKTog TGlrZXdpc2UuCgkqIGNvbmZpZy9udnB0eC9pY3YtZGV2aWNlLmMgKG9tcF9nZXRfZGVmYXVs dF9kZXZpY2UpOiBSZXR1cm4gZGV2aWNlLQoJc3BlY2lmaWMgSUNWLgoJKG9tcF9nZXRfbWF4 X3RlYW1zKTogQWRkZWQgZm9yIE5WUFRYIGRldmljZXMuCgkob21wX3NldF9udW1fdGVhbXMp OiBMaWtld2lzZS4KCShpYWxpYXMpOiBMaWtld2lzZS4KCSogZW52LmMgKHN0cnVjdCBnb21w X2ljdl9saXN0KTogTmV3IHN0cnVjdCB0byBzdG9yZSBlbnRyaWVzIG9mIGluaXRpYWwKCUlD ViB2YWx1ZXMuCgkoc3RydWN0IGdvbXBfb2ZmbG9hZF9pY3ZfbGlzdCk6IE5ldyBzdHJ1Y3Qg dG8gc3RvcmUgZW50cmllcyBvZiBkZXZpY2UtCglzcGVjaWZpYyBJQ1YgdmFsdWVzIHRoYXQg YXJlIGNvcGllZCB0byB0aGUgZGV2aWNlIGFuZCBiYWNrLgoJKHN0cnVjdCBnb21wX2RlZmF1 bHRfaWN2X3ZhbHVlcyk6IE5ldyBzdHJ1Y3QgdG8gc3RvcmUgZGVmYXVsdCB2YWx1ZXMgb2YK CUlDVnMgYWNjb3JkaW5nIHRvIHRoZSBPcGVuTVAgc3RhbmRhcmQuCgkocGFyc2Vfc2NoZWR1 bGUpOiBHZW5lcmFsaXplZCBmb3IgZGlmZmVyZW50IHZhcmlhbnRzIG9mIE9NUF9TQ0hFRFVM RS4KCShwcmludF9lbnZfdmFyX2Vycm9yKTogRnVuY3Rpb24gdGhhdCBwcmludHMgYW4gZXJy b3IgZm9yIGludmFsaWQgdmFsdWVzCglmb3IgSUNWcy4KCShwYXJzZV91bnNpZ25lZF9sb25n XzEpOiBSZW1vdmVkIGdldGVudi4gR2VuZXJhbGl6ZWQuCgkocGFyc2VfdW5zaWduZWRfbG9u Zyk6IExpa2V3aXNlLgoJKHBhcnNlX2ludF8xKTogTGlrZXdpc2UuCgkocGFyc2VfaW50KTog TGlrZXdpc2UuCgkocGFyc2VfaW50X3NlY3VyZSk6IExpa2V3aXNlLgoJKHBhcnNlX3Vuc2ln bmVkX2xvbmdfbGlzdCk6IExpa2V3aXNlLgoJKHBhcnNlX3RhcmdldF9vZmZsb2FkKTogTGlr ZXdpc2UuCgkocGFyc2VfYmluZF92YXIpOiBMaWtld2lzZS4KCShwYXJzZV9zdGFja3NpemUp OiBMaWtld2lzZS4KCShwYXJzZV9ib29sZWFuKTogTGlrZXdpc2UuCgkocGFyc2Vfd2FpdF9w b2xpY3kpOiBMaWtld2lzZS4KCShwYXJzZV9hbGxvY2F0b3IpOiBMaWtld2lzZS4KCShvbXBf ZGlzcGxheV9lbnYpOiBFeHRlbmRlZCB0byBvdXRwdXQgZGlmZmVyZW50IHZhcmlhbnRzIG9m IGVudmlyb25tZW50Cgl2YXJpYWJsZXMuCgkocHJpbnRfc2NoZWR1bGUpOiBOZXcgaGVscGVy IGZ1bmN0aW9uIGZvciBvbXBfZGlzcGxheV9lbnYgd2hpY2ggcHJpbnRzCgl0aGUgdmFsdWVz IG9mIHJ1bl9zY2hlZF92YXIuCgkocHJpbnRfcHJvY19iaW5kKTogTmV3IGhlbHBlciBmdW5j dGlvbiBmb3Igb21wX2Rpc3BsYXlfZW52IHdoaWNoIHByaW50cwoJdGhlIHZhbHVlcyBvZiBw cm9jX2JpbmRfdmFyLgoJKGVudW0gZ29tcF9wYXJzZV90eXBlKTogQ29sbGVjdGlvbiBvZiB0 eXBlcyB1c2VkIGZvciBwYXJzaW5nIGVudmlyb25tZW50Cgl2YXJpYWJsZXMuCgkoRU5UUlkp OiBQcmVwcm9jZXNzIHN0cmluZyBsZW5ndGhzIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcy4K CShPTVBfVkFSX0NOVCk6IFByZXByb2Nlc3MgdGFibGUgc2l6ZS4KCShPTVBfSE9TVF9WQVJf Q05UKTogTGlrZXdpc2UuCgkoSU5UX01BWF9TVFJfTEVOKTogQ29uc3RhbnQgZm9yIHRoZSBt YXhpbWFsIG51bWJlciBvZiBkaWdpdHMgb2YgYSBkZXZpY2UKCW51bWJlci4KCShnb21wX2dl dF9pY3ZfZmxhZyk6IFJldHVybnMgaWYgYSBmbGFnIGZvciBhIHBhcnRpY3VsYXIgSUNWIGlz IHNldC4KCShnb21wX3NldF9pY3ZfZmxhZyk6IFNldHMgYSBmbGFnIGZvciBhIHBhcnRpY3Vs YXIgSUNWLgoJKHByaW50X2RldmljZV9zcGVjaWZpY19pY3ZzKTogTmV3IGhlbHBlciBmdW5j dGlvbiBmb3Igb21wX2Rpc3BsYXlfZW52IHRvCglwcmludCBkZXZpY2Ugc3BlY2lmaWMgSUNW IHZhbHVlcy4KCShnZXRfZGV2aWNlX251bSk6IE5ldyBoZWxwZXIgZnVuY3Rpb24gZm9yIHBh cnNlX2RldmljZV9zcGVjaWZpYy4KCUV4dHJhY3RzIHRoZSBkZXZpY2UgbnVtYmVyIGZyb20g YW4gZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZS4KCShnZXRfaWN2X21lbWJlcl9hZGRyKTog R2V0cyB0aGUgbWVtb3J5IGFkZHJlc3MgZm9yIGEgcGFydGljdWxhciBtZW1iZXIKCW9mIGFu IElDViBzdHJ1Y3QuCgkoZ29tcF9nZXRfaW5pdGlhbF9pY3ZfaXRlbSk6IEdldCBhIGxpc3Qg aXRlbSBvZiBnb21wX2luaXRpYWxfaWN2X2xpc3QuCgkoaW5pdGlhbGl6ZV9pY3ZzKTogTmV3 IGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgYSBnb21wX2luaXRpYWxfaWN2cwoJc3RydWN0LgoJ KGFkZF9pbml0aWFsX2ljdl90b19saXN0KTogQWRkcyBhbiBJQ1Ygc3RydWN0IHRvIGdvbXBf aW5pdGlhbF9pY3ZfbGlzdC4KCShzdGFydHN3aXRoKTogQ2hlY2tzIGlmIGEgc3RyaW5nIHN0 YXJ0cyB3aXRoIGEgZ2l2ZW4gcHJlZml4LgoJKGluaXRpYWxpemVfZW52KTogRXh0ZW5kZWQg dG8gcGFyc2UgdGhlIG5ldyBzeW50YXggb2YgZW52aXJvbm1lbnQKCXZhcmlhYmxlcy4KCSog aWN2LWRldmljZS5jIChvbXBfZ2V0X21heF90ZWFtcyk6IEFkZGVkLgoJKGlhbGlhcyk6IExp a2V3aXNlLgoJKG9tcF9zZXRfbnVtX3RlYW1zKTogTGlrZXdpc2UuCgkqIGljdi5jIChvbXBf c2V0X251bV90ZWFtcyk6IE1vdmVkIHRvIGljdi1kZXZpY2UuYy4KCShvbXBfZ2V0X21heF90 ZWFtcyk6IExpa2V3aXNlLgoJKGlhbGlhcyk6IExpa2V3aXNlLgoJKiBsaWJnb21wLXBsdWdp bi5oIChHT01QX0RFVklDRV9OVU1fVkFSKTogUmVtb3ZlZC4KCShHT01QX0FERElUSU9OQUxf SUNWUyk6IE5ldyB0YXJnZXQtc2lkZSBzdHJ1Y3QgdGhhdAoJaG9sZHMgdGhlIGRlc2lnbmF0 ZWQgSUNWcyBvZiB0aGUgdGFyZ2V0IGRldmljZS4KCSogbGliZ29tcC5oIChlbnVtIGdvbXBf aWN2cyk6IENvbGxlY3Rpb24gb2YgSUNWcy4KCShlbnVtIGdvbXBfZGV2aWNlX251bSk6IERl ZmluaXRpb24gb2YgZGV2aWNlIG51bWJlcnMgZm9yIF9BTEwsIF9ERVYsIGFuZAoJbm8gc3Vm Zml4LgoJKGVudW0gZ29tcF9lbnZfc3VmZml4KTogQ29sbGVjdGlvbiBvZiBwb3NzaWJsZSBz dWZmaXhlcyBvZiBlbnZpcm9ubWVudAoJdmFyaWFibGVzLgoJKHN0cnVjdCBnb21wX2luaXRp YWxfaWN2cyk6IENvbnRhaW5zIGFsbCBJQ1ZzIGZvciB3aGljaCB3ZSBuZWVkIHRvIHN0b3Jl Cglpbml0aWFsIHZhbHVlcy4KCShzdHJ1Y3QgZ29tcF9kZWZhdWx0X2ljdik6TmV3IHN0cnVj dCB0byBob2xkIElDVnMgZm9yIHdoaWNoIHdlIG5lZWQKCXRvIHN0b3JlIGluaXRpYWwgdmFs dWVzLgoJKHN0cnVjdCBnb21wX2ljdl9saXN0KTogRGVmaW5pdGlvbiBvZiBhIGxpbmtlZCBs aXN0IHRoYXQgaXMgdXNlZCBmb3IKCXN0b3JpbmcgSUNWcyBmb3IgdGhlIGRldmljZXMgYW5k IGFsc28gZm9yIF9ERVYsIF9BTEwsIGFuZCB3aXRob3V0CglzdWZmaXguCgkoc3RydWN0IGdv bXBfb2ZmbG9hZF9pY3ZzKTogTmV3IHN0cnVjdCB0byBob2xkIElDVnMgdGhhdCBhcmUgY29w aWVkIHRvCglhIGRldmljZS4KCShzdHJ1Y3QgZ29tcF9vZmZsb2FkX2ljdl9saXN0KTogRGVm aW5pdGlvbiBvZiBhIGxpbmtlZCBsaXN0IHRoYXQgaG9sZHMKCWRldmljZS1zcGVjaWZpYyBJ Q1ZzIHRoYXQgYXJlIGNvcGllZCB0byBkZXZpY2VzLgoJKGdvbXBfZ2V0X2luaXRpYWxfaWN2 X2l0ZW0pOiBHZXQgYSBsaXN0IGl0ZW0gb2YgZ29tcF9pbml0aWFsX2ljdl9saXN0LgoJKGdv bXBfZ2V0X2ljdl9mbGFnKTogUmV0dXJucyBpZiBhIGZsYWcgZm9yIGEgcGFydGljdWxhciBJ Q1YgaXMgc2V0LgoJKiBwbHVnaW4vcGx1Z2luLWdjbi5jIChHT01QX09GRkxPQURfbG9hZF9p bWFnZSk6IEV4dGVuZGVkIHRvIHJlYWQKCWZ1cnRoZXIgSUNWcyBmcm9tIHRoZSBvZmZsb2Fk IGltYWdlLgoJKiBwbHVnaW4vcGx1Z2luLW52cHR4LmMgKEdPTVBfT0ZGTE9BRF9sb2FkX2lt YWdlKTogTGlrZXdpc2UuCgkqIHRhcmdldC5jIChnb21wX2dldF9vZmZsb2FkX2ljdl9pdGVt KTogR2V0IGEgbGlzdCBpdGVtIG9mCglnb21wX29mZmxvYWRfaWN2X2xpc3QuCgkoZ2V0X2dv bXBfb2ZmbG9hZF9pY3ZzKTogTmV3LiBSZXR1cm5zIHRoZSBJQ1YgdmFsdWVzCglkZXBlbmRp bmcgb24gdGhlIGRldmljZSBudW0gYW5kIHRoZSB2YXJpYWJsZSBoaWVyYXJjaHkuCgkoZ29t cF9sb2FkX2ltYWdlX3RvX2RldmljZSk6IEV4dGVuZGVkIHRvIGNvcHkgZnVydGhlciBJQ1Zz IHRvIGEgZGV2aWNlLgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vaWN2LTUu YzogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi9pY3YtNi5j OiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL2ljdi03LmM6 IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vaWN2LTguYzog TmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi9vbXAtZGlzcGxh eS1lbnYtMS5jOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9u L29tcC1kaXNwbGF5LWVudi0yLmM6IE5ldyB0ZXN0LgoKZGlmZiAtLWdpdCBhL2xpYmdvbXAv Y29uZmlnL2djbi9pY3YtZGV2aWNlLmMgYi9saWJnb21wL2NvbmZpZy9nY24vaWN2LWRldmlj ZS5jCmluZGV4IGY3MGI3ZTYuLmJmNzU3YmEgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvY29uZmln L2djbi9pY3YtZGV2aWNlLmMKKysrIGIvbGliZ29tcC9jb25maWcvZ2NuL2ljdi1kZXZpY2Uu YwpAQCAtMjgsNiArMjgsMTAgQEAKIAogI2luY2x1ZGUgImxpYmdvbXAuaCIKIAorLyogVGhp cyBpcyBzZXQgdG8gdGhlIElDViB2YWx1ZXMgb2YgY3VycmVudCBHUFUgZHVyaW5nIGRldmlj ZSBpbml0aWFsaXphdGlvbiwKKyAgIHdoZW4gdGhlIG9mZmxvYWQgaW1hZ2UgY29udGFpbmlu ZyB0aGlzIGxpYmdvbXAgcG9ydGlvbiBpcyBsb2FkZWQuICAqLwordm9sYXRpbGUgc3RydWN0 IGdvbXBfb2ZmbG9hZF9pY3ZzIEdPTVBfQURESVRJT05BTF9JQ1ZTOworCiB2b2lkCiBvbXBf c2V0X2RlZmF1bHRfZGV2aWNlIChpbnQgZGV2aWNlX251bSBfX2F0dHJpYnV0ZV9fKCh1bnVz ZWQpKSkKIHsKQEAgLTM2LDcgKzQwLDcgQEAgb21wX3NldF9kZWZhdWx0X2RldmljZSAoaW50 IGRldmljZV9udW0gX19hdHRyaWJ1dGVfXygodW51c2VkKSkpCiBpbnQKIG9tcF9nZXRfZGVm YXVsdF9kZXZpY2UgKHZvaWQpCiB7Ci0gIHJldHVybiAwOworICByZXR1cm4gR09NUF9BRERJ VElPTkFMX0lDVlMuZGVmYXVsdF9kZXZpY2U7CiB9CiAKIGludApAQCAtNTgsMTQgKzYyLDIz IEBAIG9tcF9pc19pbml0aWFsX2RldmljZSAodm9pZCkKICAgcmV0dXJuIDA7CiB9CiAKLS8q IFRoaXMgaXMgc2V0IHRvIHRoZSBkZXZpY2UgbnVtYmVyIG9mIGN1cnJlbnQgR1BVIGR1cmlu ZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24sCi0gICB3aGVuIHRoZSBvZmZsb2FkIGltYWdlIGNv bnRhaW5pbmcgdGhpcyBsaWJnb21wIHBvcnRpb24gaXMgbG9hZGVkLiAgKi8KLXZvbGF0aWxl IGludCBHT01QX0RFVklDRV9OVU1fVkFSOwotCiBpbnQKIG9tcF9nZXRfZGV2aWNlX251bSAo dm9pZCkKIHsKLSAgcmV0dXJuIEdPTVBfREVWSUNFX05VTV9WQVI7CisgIHJldHVybiBHT01Q X0FERElUSU9OQUxfSUNWUy5kZXZpY2VfbnVtOworfQorCitpbnQKK29tcF9nZXRfbWF4X3Rl YW1zICh2b2lkKQoreworICByZXR1cm4gR09NUF9BRERJVElPTkFMX0lDVlMubnRlYW1zOwor fQorCit2b2lkCitvbXBfc2V0X251bV90ZWFtcyAoaW50IG51bV90ZWFtcykKK3sKKyAgaWYg KG51bV90ZWFtcyA+PSAwKQorICAgIEdPTVBfQURESVRJT05BTF9JQ1ZTLm50ZWFtcyA9IG51 bV90ZWFtczsKIH0KIAogaWFsaWFzIChvbXBfc2V0X2RlZmF1bHRfZGV2aWNlKQpAQCAtNzQs MyArODcsNSBAQCBpYWxpYXMgKG9tcF9nZXRfaW5pdGlhbF9kZXZpY2UpCiBpYWxpYXMgKG9t cF9nZXRfbnVtX2RldmljZXMpCiBpYWxpYXMgKG9tcF9pc19pbml0aWFsX2RldmljZSkKIGlh bGlhcyAob21wX2dldF9kZXZpY2VfbnVtKQoraWFsaWFzIChvbXBfZ2V0X21heF90ZWFtcykK K2lhbGlhcyAob21wX3NldF9udW1fdGVhbXMpCmRpZmYgLS1naXQgYS9saWJnb21wL2NvbmZp Zy9udnB0eC9pY3YtZGV2aWNlLmMgYi9saWJnb21wL2NvbmZpZy9udnB0eC9pY3YtZGV2aWNl LmMKaW5kZXggZmFmOTBmOS4uNmY4NjliZSAxMDA2NDQKLS0tIGEvbGliZ29tcC9jb25maWcv bnZwdHgvaWN2LWRldmljZS5jCisrKyBiL2xpYmdvbXAvY29uZmlnL252cHR4L2ljdi1kZXZp Y2UuYwpAQCAtMjgsNiArMjgsMTAgQEAKIAogI2luY2x1ZGUgImxpYmdvbXAuaCIKIAorLyog VGhpcyBpcyBzZXQgdG8gdGhlIElDViB2YWx1ZXMgb2YgY3VycmVudCBHUFUgZHVyaW5nIGRl dmljZSBpbml0aWFsaXphdGlvbiwKKyAgIHdoZW4gdGhlIG9mZmxvYWQgaW1hZ2UgY29udGFp bmluZyB0aGlzIGxpYmdvbXAgcG9ydGlvbiBpcyBsb2FkZWQuICAqLworc3RhdGljIHZvbGF0 aWxlIHN0cnVjdCBnb21wX29mZmxvYWRfaWN2cyBHT01QX0FERElUSU9OQUxfSUNWUzsKKwog dm9pZAogb21wX3NldF9kZWZhdWx0X2RldmljZSAoaW50IGRldmljZV9udW0gX19hdHRyaWJ1 dGVfXygodW51c2VkKSkpCiB7CkBAIC0zNiw3ICs0MCw3IEBAIG9tcF9zZXRfZGVmYXVsdF9k ZXZpY2UgKGludCBkZXZpY2VfbnVtIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQogaW50CiBv bXBfZ2V0X2RlZmF1bHRfZGV2aWNlICh2b2lkKQogewotICByZXR1cm4gMDsKKyAgcmV0dXJu IEdPTVBfQURESVRJT05BTF9JQ1ZTLmRlZmF1bHRfZGV2aWNlOwogfQogCiBpbnQKQEAgLTU4 LDE0ICs2MiwyMyBAQCBvbXBfaXNfaW5pdGlhbF9kZXZpY2UgKHZvaWQpCiAgIHJldHVybiAw OwogfQogCi0vKiBUaGlzIGlzIHNldCB0byB0aGUgZGV2aWNlIG51bWJlciBvZiBjdXJyZW50 IEdQVSBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLAotICAgd2hlbiB0aGUgb2ZmbG9h ZCBpbWFnZSBjb250YWluaW5nIHRoaXMgbGliZ29tcCBwb3J0aW9uIGlzIGxvYWRlZC4gICov Ci1zdGF0aWMgdm9sYXRpbGUgaW50IEdPTVBfREVWSUNFX05VTV9WQVI7Ci0KIGludAogb21w X2dldF9kZXZpY2VfbnVtICh2b2lkKQogewotICByZXR1cm4gR09NUF9ERVZJQ0VfTlVNX1ZB UjsKKyAgcmV0dXJuIEdPTVBfQURESVRJT05BTF9JQ1ZTLmRldmljZV9udW07Cit9CisKK2lu dAorb21wX2dldF9tYXhfdGVhbXMgKHZvaWQpCit7CisgIHJldHVybiBHT01QX0FERElUSU9O QUxfSUNWUy5udGVhbXM7Cit9CisKK3ZvaWQKK29tcF9zZXRfbnVtX3RlYW1zIChpbnQgbnVt X3RlYW1zKQoreworICBpZiAobnVtX3RlYW1zID49IDApCisgICAgR09NUF9BRERJVElPTkFM X0lDVlMubnRlYW1zID0gbnVtX3RlYW1zOwogfQogCiBpYWxpYXMgKG9tcF9zZXRfZGVmYXVs dF9kZXZpY2UpCkBAIC03NCwzICs4Nyw1IEBAIGlhbGlhcyAob21wX2dldF9pbml0aWFsX2Rl dmljZSkKIGlhbGlhcyAob21wX2dldF9udW1fZGV2aWNlcykKIGlhbGlhcyAob21wX2lzX2lu aXRpYWxfZGV2aWNlKQogaWFsaWFzIChvbXBfZ2V0X2RldmljZV9udW0pCitpYWxpYXMgKG9t cF9nZXRfbWF4X3RlYW1zKQoraWFsaWFzIChvbXBfc2V0X251bV90ZWFtcykKZGlmZiAtLWdp dCBhL2xpYmdvbXAvZW52LmMgYi9saWJnb21wL2Vudi5jCmluZGV4IDFjNGVlODkuLmFhYWQ5 OTMgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvZW52LmMKKysrIGIvbGliZ29tcC9lbnYuYwpAQCAt NjEsMTggKzYxLDQwIEBACiAKICNpbmNsdWRlICJzZWN1cmVfZ2V0ZW52LmgiCiAKLXN0cnVj dCBnb21wX3Rhc2tfaWN2IGdvbXBfZ2xvYmFsX2ljdiA9IHsKKy8qIERlZmF1bHQgdmFsdWVz IG9mIElDVnMgYWNjb3JkaW5nIHRvIHRoZSBPcGVuTVAgc3RhbmRhcmQuICAqLworY29uc3Qg c3RydWN0IGdvbXBfZGVmYXVsdF9pY3YgZ29tcF9kZWZhdWx0X2ljdl92YWx1ZXMgPSB7CiAg IC5udGhyZWFkc192YXIgPSAxLAogICAudGhyZWFkX2xpbWl0X3ZhciA9IFVJTlRfTUFYLAog ICAucnVuX3NjaGVkX3ZhciA9IEdGU19EWU5BTUlDLAogICAucnVuX3NjaGVkX2NodW5rX3Np emUgPSAxLAogICAuZGVmYXVsdF9kZXZpY2VfdmFyID0gMCwKLSAgLmR5bl92YXIgPSBmYWxz ZSwKICAgLm1heF9hY3RpdmVfbGV2ZWxzX3ZhciA9IDEsCiAgIC5iaW5kX3ZhciA9IG9tcF9w cm9jX2JpbmRfZmFsc2UsCisgIC5udGVhbXNfdmFyID0gMCwKKyAgLnRlYW1zX3RocmVhZF9s aW1pdF92YXIgPSAwLAorICAuZHluX3ZhciA9IGZhbHNlCit9OworCitzdHJ1Y3QgZ29tcF90 YXNrX2ljdiBnb21wX2dsb2JhbF9pY3YgPSB7CisgIC5udGhyZWFkc192YXIgPSBnb21wX2Rl ZmF1bHRfaWN2X3ZhbHVlcy5udGhyZWFkc192YXIsCisgIC50aHJlYWRfbGltaXRfdmFyID0g Z29tcF9kZWZhdWx0X2ljdl92YWx1ZXMudGhyZWFkX2xpbWl0X3ZhciwKKyAgLnJ1bl9zY2hl ZF92YXIgPSBnb21wX2RlZmF1bHRfaWN2X3ZhbHVlcy5ydW5fc2NoZWRfdmFyLAorICAucnVu X3NjaGVkX2NodW5rX3NpemUgPSBnb21wX2RlZmF1bHRfaWN2X3ZhbHVlcy5ydW5fc2NoZWRf Y2h1bmtfc2l6ZSwKKyAgLmRlZmF1bHRfZGV2aWNlX3ZhciA9IGdvbXBfZGVmYXVsdF9pY3Zf dmFsdWVzLmRlZmF1bHRfZGV2aWNlX3ZhciwKKyAgLmR5bl92YXIgPSBnb21wX2RlZmF1bHRf aWN2X3ZhbHVlcy5keW5fdmFyLAorICAubWF4X2FjdGl2ZV9sZXZlbHNfdmFyID0gZ29tcF9k ZWZhdWx0X2ljdl92YWx1ZXMubWF4X2FjdGl2ZV9sZXZlbHNfdmFyLAorICAuYmluZF92YXIg PSBnb21wX2RlZmF1bHRfaWN2X3ZhbHVlcy5iaW5kX3ZhciwKICAgLnRhcmdldF9kYXRhID0g TlVMTAogfTsKIAorLyogTGlzdCBmb3IgaW5pdGlhbCAiX0RFViIsICJfQUxMIiwgYW5kICJf REVWX1giIElDVnMgbGlrZSBPTVBfTlVNX1RFQU1TX0RFViwKKyAgIE9NUF9OVU1fVEVBTVNf QUxMLCBvciBPTVBfTlVNX1RFQU1TX0RFVl80Mi4gICovCitzdHJ1Y3QgZ29tcF9pY3ZfbGlz dCAqZ29tcF9pbml0aWFsX2ljdl9saXN0ID0gTlVMTDsKKworLyogTGlzdCBmb3IgIl9ERVZf WCIgSUNWcyBsaWtlIE9NUF9OVU1fVEVBTVNfREVWXzQyLiAgVGhpcyBsaXN0IGNvbnRhaW5z IGFsbAorICAgZGV2aWNlLXNwZWNpZmljIElDVnMgdGhhdCBhcmUgY29waWVkIGZyb20gaG9z dCB0byBkZXZpY2UgYW5kIGJhY2suICAqLworc3RydWN0IGdvbXBfb2ZmbG9hZF9pY3ZfbGlz dCAqZ29tcF9vZmZsb2FkX2ljdl9saXN0ID0gTlVMTDsKKwogYm9vbCBnb21wX2NhbmNlbF92 YXIgPSBmYWxzZTsKIGVudW0gZ29tcF90YXJnZXRfb2ZmbG9hZF90IGdvbXBfdGFyZ2V0X29m ZmxvYWRfdmFyCiAgID0gR09NUF9UQVJHRVRfT0ZGTE9BRF9ERUZBVUxUOwpAQCAtMTA0LDg2 ICsxMjYsOTIgQEAgaW50IGdvYWNjX2RlZmF1bHRfZGltc1tHT01QX0RJTV9NQVhdOwogc3Rh dGljIGludCB3YWl0X3BvbGljeTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN0YWNrc2l6ZSA9 IEdPTVBfREVGQVVMVF9TVEFDS1NJWkU7CiAKLS8qIFBhcnNlIHRoZSBPTVBfU0NIRURVTEUg ZW52aXJvbm1lbnQgdmFyaWFibGUuICAqLwotCiBzdGF0aWMgdm9pZAotcGFyc2Vfc2NoZWR1 bGUgKHZvaWQpCitwcmludF9lbnZfdmFyX2Vycm9yIChjb25zdCBjaGFyICplbnYsIGNvbnN0 IGNoYXIgKnZhbCkKIHsKLSAgY2hhciAqZW52LCAqZW5kOworICBnb21wX2Vycm9yICgiSW52 YWxpZCB2YWx1ZSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgJS4qczogJXMiLAorCSAgICAg IChpbnQpICh2YWwgLSBlbnYgLSAxKSwgZW52LCB2YWwpOworfQorCisvKiBQYXJzZSB0aGUg T01QX1NDSEVEVUxFIGVudmlyb25tZW50IHZhcmlhYmxlLiAgKi8KK3N0YXRpYyBib29sCitw YXJzZV9zY2hlZHVsZSAoY29uc3QgY2hhciAqZW52LCBjb25zdCBjaGFyICp2YWwsIHZvaWQg KiBjb25zdCBwYXJhbXNbXSkKK3sKKyAgZW51bSBnb21wX3NjaGVkdWxlX3R5cGUgKnNjaGVk dWxlID0gKGVudW0gZ29tcF9zY2hlZHVsZV90eXBlICopIHBhcmFtc1swXTsKKyAgaW50ICpj aHVua19zaXplID0gKGludCAqKSBwYXJhbXNbMV07CisgIGNoYXIgKmVuZDsKICAgdW5zaWdu ZWQgbG9uZyB2YWx1ZTsKICAgaW50IG1vbm90b25pYyA9IDA7CiAKLSAgZW52ID0gZ2V0ZW52 ICgiT01QX1NDSEVEVUxFIik7Ci0gIGlmIChlbnYgPT0gTlVMTCkKLSAgICByZXR1cm47Cisg IGlmICh2YWwgPT0gTlVMTCkKKyAgICByZXR1cm4gZmFsc2U7CiAKLSAgd2hpbGUgKGlzc3Bh Y2UgKCh1bnNpZ25lZCBjaGFyKSAqZW52KSkKLSAgICArK2VudjsKLSAgaWYgKHN0cm5jYXNl Y21wIChlbnYsICJtb25vdG9uaWMiLCA5KSA9PSAwKQorICB3aGlsZSAoaXNzcGFjZSAoKHVu c2lnbmVkIGNoYXIpICp2YWwpKQorICAgICsrdmFsOworICBpZiAoc3RybmNhc2VjbXAgKHZh bCwgIm1vbm90b25pYyIsIDkpID09IDApCiAgICAgewogICAgICAgbW9ub3RvbmljID0gMTsK LSAgICAgIGVudiArPSA5OworICAgICAgdmFsICs9IDk7CiAgICAgfQotICBlbHNlIGlmIChz dHJuY2FzZWNtcCAoZW52LCAibm9ubW9ub3RvbmljIiwgMTIpID09IDApCisgIGVsc2UgaWYg KHN0cm5jYXNlY21wICh2YWwsICJub25tb25vdG9uaWMiLCAxMikgPT0gMCkKICAgICB7CiAg ICAgICBtb25vdG9uaWMgPSAtMTsKLSAgICAgIGVudiArPSAxMjsKKyAgICAgIHZhbCArPSAx MjsKICAgICB9CiAgIGlmIChtb25vdG9uaWMpCiAgICAgewotICAgICAgd2hpbGUgKGlzc3Bh Y2UgKCh1bnNpZ25lZCBjaGFyKSAqZW52KSkKLQkrK2VudjsKLSAgICAgIGlmICgqZW52ICE9 ICc6JykKKyAgICAgIHdoaWxlIChpc3NwYWNlICgodW5zaWduZWQgY2hhcikgKnZhbCkpCisJ Kyt2YWw7CisgICAgICBpZiAoKnZhbCAhPSAnOicpCiAJZ290byB1bmtub3duOwotICAgICAg KytlbnY7Ci0gICAgICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpICplbnYpKQot CSsrZW52OworICAgICAgKyt2YWw7CisgICAgICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVk IGNoYXIpICp2YWwpKQorCSsrdmFsOwogICAgIH0KLSAgaWYgKHN0cm5jYXNlY21wIChlbnYs ICJzdGF0aWMiLCA2KSA9PSAwKQorICBpZiAoc3RybmNhc2VjbXAgKHZhbCwgInN0YXRpYyIs IDYpID09IDApCiAgICAgewotICAgICAgZ29tcF9nbG9iYWxfaWN2LnJ1bl9zY2hlZF92YXIg PSBHRlNfU1RBVElDOwotICAgICAgZW52ICs9IDY7CisgICAgICAqc2NoZWR1bGUgPSBHRlNf U1RBVElDOworICAgICAgdmFsICs9IDY7CiAgICAgfQotICBlbHNlIGlmIChzdHJuY2FzZWNt cCAoZW52LCAiZHluYW1pYyIsIDcpID09IDApCisgIGVsc2UgaWYgKHN0cm5jYXNlY21wICh2 YWwsICJkeW5hbWljIiwgNykgPT0gMCkKICAgICB7Ci0gICAgICBnb21wX2dsb2JhbF9pY3Yu cnVuX3NjaGVkX3ZhciA9IEdGU19EWU5BTUlDOwotICAgICAgZW52ICs9IDc7CisgICAgICAq c2NoZWR1bGUgPSBHRlNfRFlOQU1JQzsKKyAgICAgIHZhbCArPSA3OwogICAgIH0KLSAgZWxz ZSBpZiAoc3RybmNhc2VjbXAgKGVudiwgImd1aWRlZCIsIDYpID09IDApCisgIGVsc2UgaWYg KHN0cm5jYXNlY21wICh2YWwsICJndWlkZWQiLCA2KSA9PSAwKQogICAgIHsKLSAgICAgIGdv bXBfZ2xvYmFsX2ljdi5ydW5fc2NoZWRfdmFyID0gR0ZTX0dVSURFRDsKLSAgICAgIGVudiAr PSA2OworICAgICAgKnNjaGVkdWxlID0gR0ZTX0dVSURFRDsKKyAgICAgIHZhbCArPSA2Owog ICAgIH0KLSAgZWxzZSBpZiAoc3RybmNhc2VjbXAgKGVudiwgImF1dG8iLCA0KSA9PSAwKQor ICBlbHNlIGlmIChzdHJuY2FzZWNtcCAodmFsLCAiYXV0byIsIDQpID09IDApCiAgICAgewot ICAgICAgZ29tcF9nbG9iYWxfaWN2LnJ1bl9zY2hlZF92YXIgPSBHRlNfQVVUTzsKLSAgICAg IGVudiArPSA0OworICAgICAgKnNjaGVkdWxlID0gR0ZTX0FVVE87CisgICAgICB2YWwgKz0g NDsKICAgICB9CiAgIGVsc2UKICAgICBnb3RvIHVua25vd247CiAKICAgaWYgKG1vbm90b25p YyA9PSAxCi0gICAgICB8fCAobW9ub3RvbmljID09IDAgJiYgZ29tcF9nbG9iYWxfaWN2LnJ1 bl9zY2hlZF92YXIgPT0gR0ZTX1NUQVRJQykpCi0gICAgZ29tcF9nbG9iYWxfaWN2LnJ1bl9z Y2hlZF92YXIgfD0gR0ZTX01PTk9UT05JQzsKKyAgICAgIHx8IChtb25vdG9uaWMgPT0gMCAm JiAqc2NoZWR1bGUgPT0gR0ZTX1NUQVRJQykpCisgICAgKnNjaGVkdWxlIHw9IEdGU19NT05P VE9OSUM7CiAKLSAgd2hpbGUgKGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSAqZW52KSkKLSAg ICArK2VudjsKLSAgaWYgKCplbnYgPT0gJ1wwJykKKyAgd2hpbGUgKGlzc3BhY2UgKCh1bnNp Z25lZCBjaGFyKSAqdmFsKSkKKyAgICArK3ZhbDsKKyAgaWYgKCp2YWwgPT0gJ1wwJykKICAg ICB7Ci0gICAgICBnb21wX2dsb2JhbF9pY3YucnVuX3NjaGVkX2NodW5rX3NpemUKLQk9IChn b21wX2dsb2JhbF9pY3YucnVuX3NjaGVkX3ZhciAmIH5HRlNfTU9OT1RPTklDKSAhPSBHRlNf U1RBVElDOwotICAgICAgcmV0dXJuOworICAgICAgKmNodW5rX3NpemUgPSAoKnNjaGVkdWxl ICYgfkdGU19NT05PVE9OSUMpICE9IEdGU19TVEFUSUM7CisgICAgICByZXR1cm4gdHJ1ZTsK ICAgICB9Ci0gIGlmICgqZW52KysgIT0gJywnKQorICBpZiAoKnZhbCsrICE9ICcsJykKICAg ICBnb3RvIHVua25vd247Ci0gIHdoaWxlIChpc3NwYWNlICgodW5zaWduZWQgY2hhcikgKmVu dikpCi0gICAgKytlbnY7Ci0gIGlmICgqZW52ID09ICdcMCcpCisgIHdoaWxlIChpc3NwYWNl ICgodW5zaWduZWQgY2hhcikgKnZhbCkpCisgICAgKyt2YWw7CisgIGlmICgqdmFsID09ICdc MCcpCiAgICAgZ290byBpbnZhbGlkOwogCiAgIGVycm5vID0gMDsKLSAgdmFsdWUgPSBzdHJ0 b3VsIChlbnYsICZlbmQsIDEwKTsKLSAgaWYgKGVycm5vIHx8IGVuZCA9PSBlbnYpCisgIHZh bHVlID0gc3RydG91bCAodmFsLCAmZW5kLCAxMCk7CisgIGlmIChlcnJubyB8fCBlbmQgPT0g dmFsKQogICAgIGdvdG8gaW52YWxpZDsKIAogICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVk IGNoYXIpICplbmQpKQpAQCAtMTk0LDIwICsyMjIsMjIgQEAgcGFyc2Vfc2NoZWR1bGUgKHZv aWQpCiAgIGlmICgoaW50KXZhbHVlICE9IHZhbHVlKQogICAgIGdvdG8gaW52YWxpZDsKIAot ICBpZiAodmFsdWUgPT0gMAotICAgICAgJiYgKGdvbXBfZ2xvYmFsX2ljdi5ydW5fc2NoZWRf dmFyICYgfkdGU19NT05PVE9OSUMpICE9IEdGU19TVEFUSUMpCisgIGlmICh2YWx1ZSA9PSAw ICYmICgqc2NoZWR1bGUgJiB+R0ZTX01PTk9UT05JQykgIT0gR0ZTX1NUQVRJQykKICAgICB2 YWx1ZSA9IDE7Ci0gIGdvbXBfZ2xvYmFsX2ljdi5ydW5fc2NoZWRfY2h1bmtfc2l6ZSA9IHZh bHVlOwotICByZXR1cm47CisgICpjaHVua19zaXplID0gdmFsdWU7CisgIHJldHVybiB0cnVl OwogCiAgdW5rbm93bjoKLSAgZ29tcF9lcnJvciAoIlVua25vd24gdmFsdWUgZm9yIGVudmly b25tZW50IHZhcmlhYmxlIE9NUF9TQ0hFRFVMRSIpOwotICByZXR1cm47CisgIHByaW50X2Vu dl92YXJfZXJyb3IgKGVudiwgdmFsKTsKKyAgcmV0dXJuIGZhbHNlOwogCiAgaW52YWxpZDoK KyAgY2hhciBuYW1lW3ZhbCAtIGVudl07CisgIG1lbWNweSAobmFtZSwgZW52LCB2YWwgLSBl bnYgLSAxKTsKKyAgbmFtZVt2YWwgLSBlbnYgLSAxXSA9ICdcMCc7CiAgIGdvbXBfZXJyb3Ig KCJJbnZhbGlkIHZhbHVlIGZvciBjaHVuayBzaXplIGluICIKLQkgICAgICAiZW52aXJvbm1l bnQgdmFyaWFibGUgT01QX1NDSEVEVUxFIik7Ci0gIHJldHVybjsKKwkgICAgICAiZW52aXJv bm1lbnQgdmFyaWFibGUgJXM6ICVzIiwgbmFtZSwgdmFsKTsKKyAgcmV0dXJuIGZhbHNlOwog fQogCiAvKiBQYXJzZSBhbiB1bnNpZ25lZCBsb25nIGVudmlyb25tZW50IHZhcmlhYmxlLiAg UmV0dXJuIHRydWUgaWYgb25lIHdhcwpAQCAtMjE1LDI0ICsyNDUsMjMgQEAgcGFyc2Vfc2No ZWR1bGUgKHZvaWQpCiAgICBlbnZpcm9ubWVudCB2YXJpYWJsZS4gICovCiAKIHN0YXRpYyBi b29sCi1wYXJzZV91bnNpZ25lZF9sb25nXzEgKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVk IGxvbmcgKnB2YWx1ZSwgYm9vbCBhbGxvd196ZXJvLAotCQkgICAgICAgYm9vbCBzZWN1cmUp CitwYXJzZV91bnNpZ25lZF9sb25nXzEgKGNvbnN0IGNoYXIgKmVudiwgY29uc3QgY2hhciAq dmFsLCB1bnNpZ25lZCBsb25nICpwdmFsdWUsCisJCSAgICAgICBib29sIGFsbG93X3plcm8p CiB7Ci0gIGNoYXIgKmVudiwgKmVuZDsKKyAgY2hhciAqZW5kOwogICB1bnNpZ25lZCBsb25n IHZhbHVlOwogCi0gIGVudiA9IChzZWN1cmUgPyBzZWN1cmVfZ2V0ZW52IChuYW1lKSA6IGdl dGVudiAobmFtZSkpOwotICBpZiAoZW52ID09IE5VTEwpCisgIGlmICh2YWwgPT0gTlVMTCkK ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgd2hpbGUgKGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFy KSAqZW52KSkKLSAgICArK2VudjsKLSAgaWYgKCplbnYgPT0gJ1wwJykKKyAgd2hpbGUgKGlz c3BhY2UgKCh1bnNpZ25lZCBjaGFyKSAqdmFsKSkKKyAgICArK3ZhbDsKKyAgaWYgKCp2YWwg PT0gJ1wwJykKICAgICBnb3RvIGludmFsaWQ7CiAKICAgZXJybm8gPSAwOwotICB2YWx1ZSA9 IHN0cnRvdWwgKGVudiwgJmVuZCwgMTApOwotICBpZiAoZXJybm8gfHwgZW5kID09IGVudiB8 fCAobG9uZykgdmFsdWUgPD0gMCAtIGFsbG93X3plcm8pCisgIHZhbHVlID0gc3RydG91bCAo dmFsLCAmZW5kLCAxMCk7CisgIGlmIChlcnJubyB8fCBlbmQgPT0gdmFsIHx8IChsb25nKSB2 YWx1ZSA8PSAwIC0gYWxsb3dfemVybykKICAgICBnb3RvIGludmFsaWQ7CiAKICAgd2hpbGUg KGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSAqZW5kKSkKQEAgLTI0NCwxNiArMjczLDM2IEBA IHBhcnNlX3Vuc2lnbmVkX2xvbmdfMSAoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9u ZyAqcHZhbHVlLCBib29sIGFsbG93X3plcm8sCiAgIHJldHVybiB0cnVlOwogCiAgaW52YWxp ZDoKLSAgZ29tcF9lcnJvciAoIkludmFsaWQgdmFsdWUgZm9yIGVudmlyb25tZW50IHZhcmlh YmxlICVzIiwgbmFtZSk7CisgIHByaW50X2Vudl92YXJfZXJyb3IgKGVudiwgdmFsKTsKICAg cmV0dXJuIGZhbHNlOwogfQogCiAvKiBBcyBwYXJzZV91bnNpZ25lZF9sb25nXzEsIGJ1dCBh bHdheXMgdXNlIGdldGVudi4gICovCiAKIHN0YXRpYyBib29sCi1wYXJzZV91bnNpZ25lZF9s b25nIChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nICpwdmFsdWUsIGJvb2wgYWxs b3dfemVybykKK3BhcnNlX3Vuc2lnbmVkX2xvbmcgKGNvbnN0IGNoYXIgKmVudiwgY29uc3Qg Y2hhciAqdmFsLCB2b2lkICogY29uc3QgcGFyYW1zW10pCiB7Ci0gIHJldHVybiBwYXJzZV91 bnNpZ25lZF9sb25nXzEgKG5hbWUsIHB2YWx1ZSwgYWxsb3dfemVybywgZmFsc2UpOworICB1 bnNpZ25lZCB1cHBlciA9ICh1bnNpZ25lZCBsb25nKSBwYXJhbXNbMl07CisgIHVuc2lnbmVk IGxvbmcgcHZhbHVlID0gMDsKKyAgYm9vbCByZXQgPSBwYXJzZV91bnNpZ25lZF9sb25nXzEg KGVudiwgdmFsLCAmcHZhbHVlLCAoYm9vbCkgcGFyYW1zWzFdKTsKKyAgaWYgKCFyZXQpCisg ICAgcmV0dXJuIGZhbHNlOworCisgIGlmICh1cHBlciA9PSAwKQorICAgICoodW5zaWduZWQg bG9uZyAqKSBwYXJhbXNbMF0gPSBwdmFsdWU7CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAo cHZhbHVlID4gdXBwZXIpCisJcHZhbHVlID0gdXBwZXI7CisgICAgICBpZiAodXBwZXIgPD0g VUNIQVJfTUFYKQorCSoodW5zaWduZWQgY2hhciAqKSBwYXJhbXNbMF0gPSBwdmFsdWU7Cisg ICAgICBlbHNlIGlmICh1cHBlciA8PSBVSU5UX01BWCkKKwkqKHVuc2lnbmVkIGludCAqKSBw YXJhbXNbMF0gPSBwdmFsdWU7CisgICAgICBlbHNlCisJKih1bnNpZ25lZCBsb25nICopIHBh cmFtc1swXSA9IHB2YWx1ZTsKKyAgICB9CisKKyAgcmV0dXJuIHJldDsKIH0KIAogLyogUGFy c2UgYSBwb3NpdGl2ZSBpbnQgZW52aXJvbm1lbnQgdmFyaWFibGUuICBSZXR1cm4gdHJ1ZSBp ZiBvbmUgd2FzCkBAIC0yNjEsNTggKzMxMCw1NyBAQCBwYXJzZV91bnNpZ25lZF9sb25nIChj b25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nICpwdmFsdWUsIGJvb2wgYWxsb3dfemVy bykKICAgIGVudmlyb25tZW50IHZhcmlhYmxlLiAgKi8KIAogc3RhdGljIGJvb2wKLXBhcnNl X2ludF8xIChjb25zdCBjaGFyICpuYW1lLCBpbnQgKnB2YWx1ZSwgYm9vbCBhbGxvd196ZXJv LCBib29sIHNlY3VyZSkKK3BhcnNlX2ludF8xIChjb25zdCBjaGFyICplbnYsIGNvbnN0IGNo YXIgKnZhbCwgaW50ICpwdmFsdWUsIGJvb2wgYWxsb3dfemVybykKIHsKICAgdW5zaWduZWQg bG9uZyB2YWx1ZTsKLSAgaWYgKCFwYXJzZV91bnNpZ25lZF9sb25nXzEgKG5hbWUsICZ2YWx1 ZSwgYWxsb3dfemVybywgc2VjdXJlKSkKKyAgaWYgKCFwYXJzZV91bnNpZ25lZF9sb25nXzEg KGVudiwgdmFsLCAmdmFsdWUsIGFsbG93X3plcm8pKQogICAgIHJldHVybiBmYWxzZTsKICAg aWYgKHZhbHVlID4gSU5UX01BWCkKICAgICB7Ci0gICAgICBnb21wX2Vycm9yICgiSW52YWxp ZCB2YWx1ZSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgJXMiLCBuYW1lKTsKKyAgICAgIHBy aW50X2Vudl92YXJfZXJyb3IgKGVudiwgdmFsKTsKICAgICAgIHJldHVybiBmYWxzZTsKICAg ICB9CiAgICpwdmFsdWUgPSAoaW50KSB2YWx1ZTsKICAgcmV0dXJuIHRydWU7CiB9CiAKLS8q IEFzIHBhcnNlX2ludF8xLCBidXQgdXNlIGdldGVudi4gICovCi0KIHN0YXRpYyBib29sCi1w YXJzZV9pbnQgKGNvbnN0IGNoYXIgKm5hbWUsIGludCAqcHZhbHVlLCBib29sIGFsbG93X3pl cm8pCitwYXJzZV9pbnQgKGNvbnN0IGNoYXIgKmVudiwgY29uc3QgY2hhciAqdmFsLCB2b2lk ICogY29uc3QgcGFyYW1zW10pCiB7Ci0gIHJldHVybiBwYXJzZV9pbnRfMSAobmFtZSwgcHZh bHVlLCBhbGxvd196ZXJvLCBmYWxzZSk7CisgIHJldHVybiBwYXJzZV9pbnRfMSAoZW52LCB2 YWwsIChpbnQgKikgcGFyYW1zWzBdLCAoYm9vbCkgcGFyYW1zWzFdKTsKIH0KIAogLyogQXMg cGFyc2VfaW50XzEsIGJ1dCB1c2UgZ2V0ZW52X3NlY3VyZS4gICovCiAKIHN0YXRpYyBib29s Ci1wYXJzZV9pbnRfc2VjdXJlIChjb25zdCBjaGFyICpuYW1lLCBpbnQgKnB2YWx1ZSwgYm9v bCBhbGxvd196ZXJvKQorcGFyc2VfaW50X3NlY3VyZSAoY29uc3QgY2hhciAqZW52LCBpbnQg KnB2YWx1ZSwgYm9vbCBhbGxvd196ZXJvKQogewotICByZXR1cm4gcGFyc2VfaW50XzEgKG5h bWUsIHB2YWx1ZSwgYWxsb3dfemVybywgdHJ1ZSk7CisgIHJldHVybiBwYXJzZV9pbnRfMSAo ZW52LCBzZWN1cmVfZ2V0ZW52IChlbnYpLCBwdmFsdWUsIGFsbG93X3plcm8pOwogfQogCiAv KiBQYXJzZSBhbiB1bnNpZ25lZCBsb25nIGxpc3QgZW52aXJvbm1lbnQgdmFyaWFibGUuICBS ZXR1cm4gdHJ1ZSBpZiBvbmUgd2FzCiAgICBwcmVzZW50IGFuZCBpdCB3YXMgc3VjY2Vzc2Z1 bGx5IHBhcnNlZC4gICovCiAKIHN0YXRpYyBib29sCi1wYXJzZV91bnNpZ25lZF9sb25nX2xp c3QgKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgKnAxc3R2YWx1ZSwKLQkJCSAg dW5zaWduZWQgbG9uZyAqKnB2YWx1ZXMsCi0JCQkgIHVuc2lnbmVkIGxvbmcgKnBudmFsdWVz KQorcGFyc2VfdW5zaWduZWRfbG9uZ19saXN0IChjb25zdCBjaGFyICplbnYsIGNvbnN0IGNo YXIgKnZhbCwKKwkJCSAgdm9pZCAqIGNvbnN0IHBhcmFtc1tdKQogewotICBjaGFyICplbnYs ICplbmQ7CisgIHVuc2lnbmVkIGxvbmcgKnAxc3R2YWx1ZSA9ICh1bnNpZ25lZCBsb25nICop IHBhcmFtc1swXTsKKyAgdW5zaWduZWQgbG9uZyAqKnB2YWx1ZXMgPSAodW5zaWduZWQgbG9u ZyAqKikgcGFyYW1zWzFdOworICB1bnNpZ25lZCBsb25nICpwbnZhbHVlcyA9ICh1bnNpZ25l ZCBsb25nKikgcGFyYW1zWzJdOworICBjaGFyICplbmQ7CiAgIHVuc2lnbmVkIGxvbmcgdmFs dWUsICp2YWx1ZXMgPSBOVUxMOwogCi0gIGVudiA9IGdldGVudiAobmFtZSk7Ci0gIGlmIChl bnYgPT0gTlVMTCkKKyAgaWYgKHZhbCA9PSBOVUxMKQogICAgIHJldHVybiBmYWxzZTsKIAot ICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpICplbnYpKQotICAgICsrZW52Owot ICBpZiAoKmVudiA9PSAnXDAnKQorICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIp ICp2YWwpKQorICAgICsrdmFsOworICBpZiAoKnZhbCA9PSAnXDAnKQogICAgIGdvdG8gaW52 YWxpZDsKIAogICBlcnJubyA9IDA7Ci0gIHZhbHVlID0gc3RydG91bCAoZW52LCAmZW5kLCAx MCk7CisgIHZhbHVlID0gc3RydG91bCAodmFsLCAmZW5kLCAxMCk7CiAgIGlmIChlcnJubyB8 fCAobG9uZykgdmFsdWUgPD0gMCkKICAgICBnb3RvIGludmFsaWQ7CiAKQEAgLTMyNiw3ICsz NzQsNyBAQCBwYXJzZV91bnNpZ25lZF9sb25nX2xpc3QgKGNvbnN0IGNoYXIgKm5hbWUsIHVu c2lnbmVkIGxvbmcgKnAxc3R2YWx1ZSwKIAogCSAgZG8KIAkgICAgewotCSAgICAgIGVudiA9 IGVuZCArIDE7CisJICAgICAgdmFsID0gZW5kICsgMTsKIAkgICAgICBpZiAobnZhbHVlcyA9 PSBuYWxsb2NlZCkKIAkJewogCQkgIHVuc2lnbmVkIGxvbmcgKm47CkBAIC0zMzUsNiArMzgz LDkgQEAgcGFyc2VfdW5zaWduZWRfbG9uZ19saXN0IChjb25zdCBjaGFyICpuYW1lLCB1bnNp Z25lZCBsb25nICpwMXN0dmFsdWUsCiAJCSAgaWYgKG4gPT0gTlVMTCkKIAkJICAgIHsKIAkJ ICAgICAgZnJlZSAodmFsdWVzKTsKKwkJICAgICAgY2hhciBuYW1lW3ZhbCAtIGVudl07CisJ CSAgICAgIG1lbWNweSAobmFtZSwgZW52LCB2YWwgLSBlbnYgLSAxKTsKKwkJICAgICAgbmFt ZVt2YWwgLSBlbnYgLSAxXSA9ICdcMCc7CiAJCSAgICAgIGdvbXBfZXJyb3IgKCJPdXQgb2Yg bWVtb3J5IHdoaWxlIHRyeWluZyB0byBwYXJzZSIKIAkJCQkgICIgZW52aXJvbm1lbnQgdmFy aWFibGUgJXMiLCBuYW1lKTsKIAkJICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzQ0LDEzICsz OTUsMTMgQEAgcGFyc2VfdW5zaWduZWRfbG9uZ19saXN0IChjb25zdCBjaGFyICpuYW1lLCB1 bnNpZ25lZCBsb25nICpwMXN0dmFsdWUsCiAJCSAgICB2YWx1ZXNbbnZhbHVlcysrXSA9IHZh bHVlOwogCQl9CiAKLQkgICAgICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpICpl bnYpKQotCQkrK2VudjsKLQkgICAgICBpZiAoKmVudiA9PSAnXDAnKQorCSAgICAgIHdoaWxl IChpc3NwYWNlICgodW5zaWduZWQgY2hhcikgKnZhbCkpCisJCSsrdmFsOworCSAgICAgIGlm ICgqdmFsID09ICdcMCcpCiAJCWdvdG8gaW52YWxpZDsKIAogCSAgICAgIGVycm5vID0gMDsK LQkgICAgICB2YWx1ZSA9IHN0cnRvdWwgKGVudiwgJmVuZCwgMTApOworCSAgICAgIHZhbHVl ID0gc3RydG91bCAodmFsLCAmZW5kLCAxMCk7CiAJICAgICAgaWYgKGVycm5vIHx8IChsb25n KSB2YWx1ZSA8PSAwKQogCQlnb3RvIGludmFsaWQ7CiAKQEAgLTM3MCw1MiArNDIxLDU2IEBA IHBhcnNlX3Vuc2lnbmVkX2xvbmdfbGlzdCAoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQg bG9uZyAqcDFzdHZhbHVlLAogCX0KICAgICAgIGdvdG8gaW52YWxpZDsKICAgICB9CisgIGVs c2UKKyAgICB7CisgICAgICAqcG52YWx1ZXMgPSAwOworICAgICAgKnB2YWx1ZXMgPSBOVUxM OworICAgIH0KIAogICAqcDFzdHZhbHVlID0gdmFsdWU7CiAgIHJldHVybiB0cnVlOwogCiAg aW52YWxpZDoKICAgZnJlZSAodmFsdWVzKTsKLSAgZ29tcF9lcnJvciAoIkludmFsaWQgdmFs dWUgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlICVzIiwgbmFtZSk7CisgIHByaW50X2Vudl92 YXJfZXJyb3IgKGVudiwgdmFsKTsKICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9p ZAotcGFyc2VfdGFyZ2V0X29mZmxvYWQgKGNvbnN0IGNoYXIgKm5hbWUsIGVudW0gZ29tcF90 YXJnZXRfb2ZmbG9hZF90ICpvZmZsb2FkKQorc3RhdGljIGJvb2wKK3BhcnNlX3RhcmdldF9v ZmZsb2FkIChjb25zdCBjaGFyICplbnYsIGNvbnN0IGNoYXIgKnZhbCwgdm9pZCAqIGNvbnN0 IHBhcmFtc1tdKQogewotICBjb25zdCBjaGFyICplbnY7CiAgIGludCBuZXdfb2ZmbG9hZCA9 IC0xOwogCi0gIGVudiA9IGdldGVudiAobmFtZSk7Ci0gIGlmIChlbnYgPT0gTlVMTCkKLSAg ICByZXR1cm47CisgIGlmICh2YWwgPT0gTlVMTCkKKyAgICByZXR1cm4gZmFsc2U7CiAKLSAg d2hpbGUgKGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSAqZW52KSkKLSAgICArK2VudjsKLSAg aWYgKHN0cm5jYXNlY21wIChlbnYsICJkZWZhdWx0IiwgNykgPT0gMCkKKyAgd2hpbGUgKGlz c3BhY2UgKCh1bnNpZ25lZCBjaGFyKSAqdmFsKSkKKyAgICArK3ZhbDsKKyAgaWYgKHN0cm5j YXNlY21wICh2YWwsICJkZWZhdWx0IiwgNykgPT0gMCkKICAgICB7Ci0gICAgICBlbnYgKz0g NzsKKyAgICAgIHZhbCArPSA3OwogICAgICAgbmV3X29mZmxvYWQgPSBHT01QX1RBUkdFVF9P RkZMT0FEX0RFRkFVTFQ7CiAgICAgfQotICBlbHNlIGlmIChzdHJuY2FzZWNtcCAoZW52LCAi bWFuZGF0b3J5IiwgOSkgPT0gMCkKKyAgZWxzZSBpZiAoc3RybmNhc2VjbXAgKHZhbCwgIm1h bmRhdG9yeSIsIDkpID09IDApCiAgICAgewotICAgICAgZW52ICs9IDk7CisgICAgICB2YWwg Kz0gOTsKICAgICAgIG5ld19vZmZsb2FkID0gR09NUF9UQVJHRVRfT0ZGTE9BRF9NQU5EQVRP Ulk7CiAgICAgfQotICBlbHNlIGlmIChzdHJuY2FzZWNtcCAoZW52LCAiZGlzYWJsZWQiLCA4 KSA9PSAwKQorICBlbHNlIGlmIChzdHJuY2FzZWNtcCAodmFsLCAiZGlzYWJsZWQiLCA4KSA9 PSAwKQogICAgIHsKLSAgICAgIGVudiArPSA4OworICAgICAgdmFsICs9IDg7CiAgICAgICBu ZXdfb2ZmbG9hZCA9IEdPTVBfVEFSR0VUX09GRkxPQURfRElTQUJMRUQ7CiAgICAgfQotICB3 aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpICplbnYpKQotICAgICsrZW52OwotICBp ZiAobmV3X29mZmxvYWQgIT0gLTEgJiYgKmVudiA9PSAnXDAnKQorICB3aGlsZSAoaXNzcGFj ZSAoKHVuc2lnbmVkIGNoYXIpICp2YWwpKQorICAgICsrdmFsOworICBpZiAobmV3X29mZmxv YWQgIT0gLTEgJiYgKnZhbCA9PSAnXDAnKQogICAgIHsKLSAgICAgICpvZmZsb2FkID0gbmV3 X29mZmxvYWQ7Ci0gICAgICByZXR1cm47CisgICAgICAqKGVudW0gZ29tcF90YXJnZXRfb2Zm bG9hZF90ICopIHBhcmFtc1swXSA9IG5ld19vZmZsb2FkOworICAgICAgcmV0dXJuIHRydWU7 CiAgICAgfQogCi0gIGdvbXBfZXJyb3IgKCJJbnZhbGlkIHZhbHVlIGZvciBlbnZpcm9ubWVu dCB2YXJpYWJsZSBPTVBfVEFSR0VUX09GRkxPQUQiKTsKKyAgcHJpbnRfZW52X3Zhcl9lcnJv ciAoZW52LCB2YWwpOworICByZXR1cm4gZmFsc2U7CiB9CiAKIC8qIFBhcnNlIGVudmlyb25t ZW50IHZhcmlhYmxlIHNldCB0byBhIGJvb2xlYW4gb3IgbGlzdCBvZiBvbXBfcHJvY19iaW5k X3QKQEAgLTQyMywxMCArNDc4LDExIEBAIHBhcnNlX3RhcmdldF9vZmZsb2FkIChjb25zdCBj aGFyICpuYW1lLCBlbnVtIGdvbXBfdGFyZ2V0X29mZmxvYWRfdCAqb2ZmbG9hZCkKICAgIHBh cnNlZC4gICovCiAKIHN0YXRpYyBib29sCi1wYXJzZV9iaW5kX3ZhciAoY29uc3QgY2hhciAq bmFtZSwgY2hhciAqcDFzdHZhbHVlLAotCQljaGFyICoqcHZhbHVlcywgdW5zaWduZWQgbG9u ZyAqcG52YWx1ZXMpCitwYXJzZV9iaW5kX3ZhciAoY29uc3QgY2hhciAqZW52LCBjb25zdCBj aGFyICp2YWwsIHZvaWQgKiBjb25zdCBwYXJhbXNbXSkKIHsKLSAgY2hhciAqZW52OworICBj aGFyICpwMXN0dmFsdWUgPSAoY2hhciAqKSBwYXJhbXNbMF07CisgIGNoYXIgKipwdmFsdWVz ID0gKGNoYXIgKiopIHBhcmFtc1sxXTsKKyAgdW5zaWduZWQgbG9uZyAqcG52YWx1ZXMgPSAo dW5zaWduZWQgbG9uZyAqKSBwYXJhbXNbMl07CiAgIGNoYXIgdmFsdWUgPSBvbXBfcHJvY19i aW5kX2ZhbHNlLCAqdmFsdWVzID0gTlVMTDsKICAgaW50IGk7CiAgIHN0YXRpYyBzdHJ1Y3Qg cHJvY19iaW5kX2tpbmRzCkBAIC00NDQsMzAgKzUwMCwyOSBAQCBwYXJzZV9iaW5kX3ZhciAo Y29uc3QgY2hhciAqbmFtZSwgY2hhciAqcDFzdHZhbHVlLAogICAgIHsgInNwcmVhZCIsIDYs IG9tcF9wcm9jX2JpbmRfc3ByZWFkIH0KICAgfTsKIAotICBlbnYgPSBnZXRlbnYgKG5hbWUp OwotICBpZiAoZW52ID09IE5VTEwpCisgIGlmICh2YWwgPT0gTlVMTCkKICAgICByZXR1cm4g ZmFsc2U7CiAKLSAgd2hpbGUgKGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSAqZW52KSkKLSAg ICArK2VudjsKLSAgaWYgKCplbnYgPT0gJ1wwJykKKyAgd2hpbGUgKGlzc3BhY2UgKCh1bnNp Z25lZCBjaGFyKSAqdmFsKSkKKyAgICArK3ZhbDsKKyAgaWYgKCp2YWwgPT0gJ1wwJykKICAg ICBnb3RvIGludmFsaWQ7CiAKICAgZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLSAgICBpZiAo c3RybmNhc2VjbXAgKGVudiwga2luZHNbaV0ubmFtZSwga2luZHNbaV0ubGVuKSA9PSAwKQor ICAgIGlmIChzdHJuY2FzZWNtcCAodmFsLCBraW5kc1tpXS5uYW1lLCBraW5kc1tpXS5sZW4p ID09IDApCiAgICAgICB7CiAJdmFsdWUgPSBraW5kc1tpXS5raW5kOwotCWVudiArPSBraW5k c1tpXS5sZW47CisJdmFsICs9IGtpbmRzW2ldLmxlbjsKIAlicmVhazsKICAgICAgIH0KICAg aWYgKGkgPT0gNikKICAgICBnb3RvIGludmFsaWQ7CiAKLSAgd2hpbGUgKGlzc3BhY2UgKCh1 bnNpZ25lZCBjaGFyKSAqZW52KSkKLSAgICArK2VudjsKLSAgaWYgKCplbnYgIT0gJ1wwJykK KyAgd2hpbGUgKGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSAqdmFsKSkKKyAgICArK3ZhbDsK KyAgaWYgKCp2YWwgIT0gJ1wwJykKICAgICB7Ci0gICAgICBpZiAoKmVudiA9PSAnLCcpCisg ICAgICBpZiAoKnZhbCA9PSAnLCcpCiAJewogCSAgdW5zaWduZWQgbG9uZyBudmFsdWVzID0g MCwgbmFsbG9jZWQgPSAwOwogCkBAIC00NzcsNyArNTMyLDcgQEAgcGFyc2VfYmluZF92YXIg KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnAxc3R2YWx1ZSwKIAogCSAgZG8KIAkgICAgewot CSAgICAgIGVudisrOworCSAgICAgIHZhbCsrOwogCSAgICAgIGlmIChudmFsdWVzID09IG5h bGxvY2VkKQogCQl7CiAJCSAgY2hhciAqbjsKQEAgLTQ4Niw2ICs1NDEsOSBAQCBwYXJzZV9i aW5kX3ZhciAoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqcDFzdHZhbHVlLAogCQkgIGlmIChu ID09IE5VTEwpCiAJCSAgICB7CiAJCSAgICAgIGZyZWUgKHZhbHVlcyk7CisJCSAgICAgIGNo YXIgbmFtZVt2YWwgLSBlbnZdOworCQkgICAgICBtZW1jcHkgKG5hbWUsIGVudiwgdmFsIC0g ZW52IC0gMSk7CisJCSAgICAgIG5hbWVbdmFsIC0gZW52IC0gMV0gPSAnXDAnOwogCQkgICAg ICBnb21wX2Vycm9yICgiT3V0IG9mIG1lbW9yeSB3aGlsZSB0cnlpbmcgdG8gcGFyc2UiCiAJ CQkJICAiIGVudmlyb25tZW50IHZhcmlhYmxlICVzIiwgbmFtZSk7CiAJCSAgICAgIHJldHVy biBmYWxzZTsKQEAgLTQ5NSwyNyArNTUzLDI3IEBAIHBhcnNlX2JpbmRfdmFyIChjb25zdCBj aGFyICpuYW1lLCBjaGFyICpwMXN0dmFsdWUsCiAJCSAgICB2YWx1ZXNbbnZhbHVlcysrXSA9 IHZhbHVlOwogCQl9CiAKLQkgICAgICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIp ICplbnYpKQotCQkrK2VudjsKLQkgICAgICBpZiAoKmVudiA9PSAnXDAnKQorCSAgICAgIHdo aWxlIChpc3NwYWNlICgodW5zaWduZWQgY2hhcikgKnZhbCkpCisJCSsrdmFsOworCSAgICAg IGlmICgqdmFsID09ICdcMCcpCiAJCWdvdG8gaW52YWxpZDsKIAogCSAgICAgIGZvciAoaSA9 IDI7IGkgPCA2OyBpKyspCi0JCWlmIChzdHJuY2FzZWNtcCAoZW52LCBraW5kc1tpXS5uYW1l LCBraW5kc1tpXS5sZW4pID09IDApCisJCWlmIChzdHJuY2FzZWNtcCAodmFsLCBraW5kc1tp XS5uYW1lLCBraW5kc1tpXS5sZW4pID09IDApCiAJCSAgewogCQkgICAgdmFsdWUgPSBraW5k c1tpXS5raW5kOwotCQkgICAgZW52ICs9IGtpbmRzW2ldLmxlbjsKKwkJICAgIHZhbCArPSBr aW5kc1tpXS5sZW47CiAJCSAgICBicmVhazsKIAkJICB9CiAJICAgICAgaWYgKGkgPT0gNikK IAkJZ290byBpbnZhbGlkOwogCiAJICAgICAgdmFsdWVzW252YWx1ZXMrK10gPSB2YWx1ZTsK LQkgICAgICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpICplbnYpKQotCQkrK2Vu djsKLQkgICAgICBpZiAoKmVudiA9PSAnXDAnKQorCSAgICAgIHdoaWxlIChpc3NwYWNlICgo dW5zaWduZWQgY2hhcikgKnZhbCkpCisJCSsrdmFsOworCSAgICAgIGlmICgqdmFsID09ICdc MCcpCiAJCWJyZWFrOwotCSAgICAgIGlmICgqZW52ICE9ICcsJykKKwkgICAgICBpZiAoKnZh bCAhPSAnLCcpCiAJCWdvdG8gaW52YWxpZDsKIAkgICAgfQogCSAgd2hpbGUgKDEpOwpAQCAt NTMyLDcgKzU5MCw3IEBAIHBhcnNlX2JpbmRfdmFyIChjb25zdCBjaGFyICpuYW1lLCBjaGFy ICpwMXN0dmFsdWUsCiAKICBpbnZhbGlkOgogICBmcmVlICh2YWx1ZXMpOwotICBnb21wX2Vy cm9yICgiSW52YWxpZCB2YWx1ZSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgJXMiLCBuYW1l KTsKKyAgcHJpbnRfZW52X3Zhcl9lcnJvciAoZW52LCB2YWwpOwogICByZXR1cm4gZmFsc2U7 CiB9CiAKQEAgLTg2NSwyMyArOTIzLDIyIEBAIHBhcnNlX3BsYWNlc192YXIgKGNvbnN0IGNo YXIgKm5hbWUsIGJvb2wgaWdub3JlKQogICAgcHJlc2VudCBhbmQgaXQgd2FzIHN1Y2Nlc3Nm dWxseSBwYXJzZWQuICAqLwogCiBzdGF0aWMgYm9vbAotcGFyc2Vfc3RhY2tzaXplIChjb25z dCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nICpwdmFsdWUpCitwYXJzZV9zdGFja3NpemUg KGNvbnN0IGNoYXIgKmVudiwgY29uc3QgY2hhciAqdmFsLCB2b2lkICogY29uc3QgcGFyYW1z W10pCiB7Ci0gIGNoYXIgKmVudiwgKmVuZDsKKyAgY2hhciAqZW5kOwogICB1bnNpZ25lZCBs b25nIHZhbHVlLCBzaGlmdCA9IDEwOwogCi0gIGVudiA9IGdldGVudiAobmFtZSk7Ci0gIGlm IChlbnYgPT0gTlVMTCkKKyAgaWYgKHZhbCA9PSBOVUxMKQogICAgIHJldHVybiBmYWxzZTsK IAotICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpICplbnYpKQotICAgICsrZW52 OwotICBpZiAoKmVudiA9PSAnXDAnKQorICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNo YXIpICp2YWwpKQorICAgICsrdmFsOworICBpZiAoKnZhbCA9PSAnXDAnKQogICAgIGdvdG8g aW52YWxpZDsKIAogICBlcnJubyA9IDA7Ci0gIHZhbHVlID0gc3RydG91bCAoZW52LCAmZW5k LCAxMCk7Ci0gIGlmIChlcnJubyB8fCBlbmQgPT0gZW52KQorICB2YWx1ZSA9IHN0cnRvdWwg KHZhbCwgJmVuZCwgMTApOworICBpZiAoZXJybm8gfHwgZW5kID09IHZhbCkKICAgICBnb3Rv IGludmFsaWQ7CiAKICAgd2hpbGUgKGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSAqZW5kKSkK QEAgLTkxNCwxMSArOTcxLDExIEBAIHBhcnNlX3N0YWNrc2l6ZSAoY29uc3QgY2hhciAqbmFt ZSwgdW5zaWduZWQgbG9uZyAqcHZhbHVlKQogICBpZiAoKCh2YWx1ZSA8PCBzaGlmdCkgPj4g c2hpZnQpICE9IHZhbHVlKQogICAgIGdvdG8gaW52YWxpZDsKIAotICAqcHZhbHVlID0gdmFs dWUgPDwgc2hpZnQ7CisgICoodW5zaWduZWQgbG9uZyAqKSBwYXJhbXNbMF0gPSB2YWx1ZSA8 PCBzaGlmdDsKICAgcmV0dXJuIHRydWU7CiAKICBpbnZhbGlkOgotICBnb21wX2Vycm9yICgi SW52YWxpZCB2YWx1ZSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgJXMiLCBuYW1lKTsKKyAg cHJpbnRfZW52X3Zhcl9lcnJvciAoZW52LCB2YWwpOwogICByZXR1cm4gZmFsc2U7CiB9CiAK QEAgLTk5OCwzNSArMTA1NSwzMyBAQCBwYXJzZV9zcGluY291bnQgKGNvbnN0IGNoYXIgKm5h bWUsIHVuc2lnbmVkIGxvbmcgbG9uZyAqcHZhbHVlKQogLyogUGFyc2UgYSBib29sZWFuIHZh bHVlIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZSBOQU1FIGFuZCBzdG9yZSB0aGUKICAgIHJl c3VsdCBpbiBWQUxVRS4gIFJldHVybiB0cnVlIGlmIG9uZSB3YXMgcHJlc2VudCBhbmQgaXQg d2FzCiAgICBzdWNjZXNzZnVsbHkgcGFyc2VkLiAgKi8KLQogc3RhdGljIGJvb2wKLXBhcnNl X2Jvb2xlYW4gKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgKnZhbHVlKQorcGFyc2VfYm9vbGVh biAoY29uc3QgY2hhciAqZW52LCBjb25zdCBjaGFyICp2YWwsIHZvaWQgKiBjb25zdCBwYXJh bXNbXSkKIHsKLSAgY29uc3QgY2hhciAqZW52OworICBib29sICp2YWx1ZSA9IChib29sICop IHBhcmFtc1swXTsKIAotICBlbnYgPSBnZXRlbnYgKG5hbWUpOwotICBpZiAoZW52ID09IE5V TEwpCisgIGlmICh2YWwgPT0gTlVMTCkKICAgICByZXR1cm4gZmFsc2U7CiAKLSAgd2hpbGUg KGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSAqZW52KSkKLSAgICArK2VudjsKLSAgaWYgKHN0 cm5jYXNlY21wIChlbnYsICJ0cnVlIiwgNCkgPT0gMCkKKyAgd2hpbGUgKGlzc3BhY2UgKCh1 bnNpZ25lZCBjaGFyKSAqdmFsKSkKKyAgICArK3ZhbDsKKyAgaWYgKHN0cm5jYXNlY21wICh2 YWwsICJ0cnVlIiwgNCkgPT0gMCkKICAgICB7CiAgICAgICAqdmFsdWUgPSB0cnVlOwotICAg ICAgZW52ICs9IDQ7CisgICAgICB2YWwgKz0gNDsKICAgICB9Ci0gIGVsc2UgaWYgKHN0cm5j YXNlY21wIChlbnYsICJmYWxzZSIsIDUpID09IDApCisgIGVsc2UgaWYgKHN0cm5jYXNlY21w ICh2YWwsICJmYWxzZSIsIDUpID09IDApCiAgICAgewogICAgICAgKnZhbHVlID0gZmFsc2U7 Ci0gICAgICBlbnYgKz0gNTsKKyAgICAgIHZhbCArPSA1OwogICAgIH0KICAgZWxzZQotICAg IGVudiA9ICJYIjsKLSAgd2hpbGUgKGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSAqZW52KSkK LSAgICArK2VudjsKLSAgaWYgKCplbnYgIT0gJ1wwJykKKyAgICB2YWwgPSAiWCI7CisgIHdo aWxlIChpc3NwYWNlICgodW5zaWduZWQgY2hhcikgKnZhbCkpCisgICAgKyt2YWw7CisgIGlm ICgqdmFsICE9ICdcMCcpCiAgICAgewotICAgICAgZ29tcF9lcnJvciAoIkludmFsaWQgdmFs dWUgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlICVzIiwgbmFtZSk7CisgICAgICBwcmludF9l bnZfdmFyX2Vycm9yIChlbnYsIHZhbCk7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog ICByZXR1cm4gdHJ1ZTsKQEAgLTEwMzQsMzYgKzEwODksNDIgQEAgcGFyc2VfYm9vbGVhbiAo Y29uc3QgY2hhciAqbmFtZSwgYm9vbCAqdmFsdWUpCiAKIC8qIFBhcnNlIHRoZSBPTVBfV0FJ VF9QT0xJQ1kgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJldHVybiB0aGUgdmFsdWUuICAq LwogCi1zdGF0aWMgaW50Ci1wYXJzZV93YWl0X3BvbGljeSAodm9pZCkKK3N0YXRpYyBib29s CitwYXJzZV93YWl0X3BvbGljeSAoY29uc3QgY2hhciAqZW52LCBjb25zdCBjaGFyICp2YWws IHZvaWQgKiBjb25zdCBwYXJhbXNbXSkKIHsKLSAgY29uc3QgY2hhciAqZW52OworICBpbnQg KnB2YWx1ZSA9IChpbnQgKikgcGFyYW1zWzBdOwogICBpbnQgcmV0ID0gLTE7CiAKLSAgZW52 ID0gZ2V0ZW52ICgiT01QX1dBSVRfUE9MSUNZIik7Ci0gIGlmIChlbnYgPT0gTlVMTCkKLSAg ICByZXR1cm4gLTE7CisgIGlmICh2YWwgPT0gTlVMTCkKKyAgeworICAgICpwdmFsdWUgPSAt MTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KIAotICB3aGlsZSAoaXNzcGFjZSAoKHVuc2ln bmVkIGNoYXIpICplbnYpKQotICAgICsrZW52OwotICBpZiAoc3RybmNhc2VjbXAgKGVudiwg ImFjdGl2ZSIsIDYpID09IDApCisgIHdoaWxlIChpc3NwYWNlICgodW5zaWduZWQgY2hhcikg KnZhbCkpCisgICAgKyt2YWw7CisgIGlmIChzdHJuY2FzZWNtcCAodmFsLCAiYWN0aXZlIiwg NikgPT0gMCkKICAgICB7CiAgICAgICByZXQgPSAxOwotICAgICAgZW52ICs9IDY7CisgICAg ICB2YWwgKz0gNjsKICAgICB9Ci0gIGVsc2UgaWYgKHN0cm5jYXNlY21wIChlbnYsICJwYXNz aXZlIiwgNykgPT0gMCkKKyAgZWxzZSBpZiAoc3RybmNhc2VjbXAgKHZhbCwgInBhc3NpdmUi LCA3KSA9PSAwKQogICAgIHsKICAgICAgIHJldCA9IDA7Ci0gICAgICBlbnYgKz0gNzsKKyAg ICAgIHZhbCArPSA3OwogICAgIH0KICAgZWxzZQotICAgIGVudiA9ICJYIjsKLSAgd2hpbGUg KGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSAqZW52KSkKLSAgICArK2VudjsKLSAgaWYgKCpl bnYgPT0gJ1wwJykKLSAgICByZXR1cm4gcmV0OwotICBnb21wX2Vycm9yICgiSW52YWxpZCB2 YWx1ZSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgT01QX1dBSVRfUE9MSUNZIik7Ci0gIHJl dHVybiAtMTsKKyAgICB2YWwgPSAiWCI7CisgIHdoaWxlIChpc3NwYWNlICgodW5zaWduZWQg Y2hhcikgKnZhbCkpCisgICAgKyt2YWw7CisgIGlmICgqdmFsID09ICdcMCcpCisgICAgewor ICAgICAgKnB2YWx1ZSA9IHJldDsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgcHJp bnRfZW52X3Zhcl9lcnJvciAoZW52LCB2YWwpOworICAqcHZhbHVlID0gLTE7CisgIHJldHVy biBmYWxzZTsKIH0KIAogLyogUGFyc2UgdGhlIEdPTVBfQ1BVX0FGRklOSVRZIGVudmlyb25t ZW50IHZhcmlibGUuICBSZXR1cm4gdHJ1ZSBpZiBvbmUgd2FzCkBAIC0xMTY3LDI2ICsxMjI4 LDI0IEBAIHBhcnNlX2FmZmluaXR5IChib29sIGlnbm9yZSkKIH0KIAogLyogUGFyc2UgdGhl IE9NUF9BTExPQ0FUT1IgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHJldHVybiB0aGUgdmFs dWUuICAqLwotCi1zdGF0aWMgdWludHB0cl90Ci1wYXJzZV9hbGxvY2F0b3IgKHZvaWQpCitz dGF0aWMgYm9vbAorcGFyc2VfYWxsb2NhdG9yIChjb25zdCBjaGFyICplbnYsIGNvbnN0IGNo YXIgKnZhbCwgdm9pZCAqIGNvbnN0IHBhcmFtc1tdKQogewotICBjb25zdCBjaGFyICplbnY7 Ci0gIHVpbnRwdHJfdCByZXQgPSBvbXBfZGVmYXVsdF9tZW1fYWxsb2M7CisgIHVpbnRwdHJf dCAqcmV0ID0gKHVpbnRwdHJfdCAqKSBwYXJhbXNbMF07CisgICpyZXQgPSBvbXBfZGVmYXVs dF9tZW1fYWxsb2M7CiAKLSAgZW52ID0gZ2V0ZW52ICgiT01QX0FMTE9DQVRPUiIpOwotICBp ZiAoZW52ID09IE5VTEwpCi0gICAgcmV0dXJuIHJldDsKKyAgaWYgKHZhbCA9PSBOVUxMKQor ICAgIHJldHVybiBmYWxzZTsKIAotICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIp ICplbnYpKQotICAgICsrZW52OworICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIp ICp2YWwpKQorICAgICsrdmFsOwogICBpZiAoMCkKICAgICA7CiAjZGVmaW5lIEModikgXAot ICBlbHNlIGlmIChzdHJuY2FzZWNtcCAoZW52LCAjdiwgc2l6ZW9mICgjdikgLSAxKSA9PSAw KQlcCisgIGVsc2UgaWYgKHN0cm5jYXNlY21wICh2YWwsICN2LCBzaXplb2YgKCN2KSAtIDEp ID09IDApCVwKICAgICB7CQkJCQkJCVwKLSAgICAgIHJldCA9IHY7CQkJCQkJXAotICAgICAg ZW52ICs9IHNpemVvZiAoI3YpIC0gMTsJCQkJXAorICAgICAgKnJldCA9IHY7CQkJCQkJXAor ICAgICAgdmFsICs9IHNpemVvZiAoI3YpIC0gMTsJCQkJXAogICAgIH0KICAgQyAob21wX2Rl ZmF1bHRfbWVtX2FsbG9jKQogICBDIChvbXBfbGFyZ2VfY2FwX21lbV9hbGxvYykKQEAgLTEx OTgsMTMgKzEyNTcsMTQgQEAgcGFyc2VfYWxsb2NhdG9yICh2b2lkKQogICBDIChvbXBfdGhy ZWFkX21lbV9hbGxvYykKICN1bmRlZiBDCiAgIGVsc2UKLSAgICBlbnYgPSAiWCI7Ci0gIHdo aWxlIChpc3NwYWNlICgodW5zaWduZWQgY2hhcikgKmVudikpCi0gICAgKytlbnY7Ci0gIGlm ICgqZW52ID09ICdcMCcpCi0gICAgcmV0dXJuIHJldDsKLSAgZ29tcF9lcnJvciAoIkludmFs aWQgdmFsdWUgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlIE9NUF9BTExPQ0FUT1IiKTsKLSAg cmV0dXJuIG9tcF9kZWZhdWx0X21lbV9hbGxvYzsKKyAgICB2YWwgPSAiWCI7CisgIHdoaWxl IChpc3NwYWNlICgodW5zaWduZWQgY2hhcikgKnZhbCkpCisgICAgKyt2YWw7CisgIGlmICgq dmFsID09ICdcMCcpCisgICAgcmV0dXJuIHRydWU7CisgIHByaW50X2Vudl92YXJfZXJyb3Ig KGVudiwgdmFsKTsKKyAgKnJldCA9IG9tcF9kZWZhdWx0X21lbV9hbGxvYzsKKyAgcmV0dXJu IGZhbHNlOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTI1MSw2MiArMTMxMSw1OSBAQCBwYXJz ZV9nb21wX29wZW5hY2NfZGltICh2b2lkKQogICAgIH0KIH0KIAotdm9pZAotb21wX2Rpc3Bs YXlfZW52IChpbnQgdmVyYm9zZSkKLXsKLSAgaW50IGk7Ci0KLSAgZnB1dHMgKCJcbk9QRU5N UCBESVNQTEFZIEVOVklST05NRU5UIEJFR0lOXG4iLCBzdGRlcnIpOworLyogSGVscGVyIGZ1 bmN0aW9uIGZvciBvbXBfZGlzcGxheV9lbnYgd2hpY2ggcHJpbnRzIHRoZSB2YWx1ZXMgb2Yg cnVuX3NjaGVkX3Zhci4KKyAgICdkZXZpY2UnIGNhbiBiZSAnaG9zdCcsICdkZXYnLCAnYWxs JyBvciBhIHBhcnRpY3VsYXIgZGV2aWNlIG51bWJlci4gICovCiAKLSAgZnB1dHMgKCIgIF9P UEVOTVAgPSAnMjAxNTExJ1xuIiwgc3RkZXJyKTsKLSAgZnByaW50ZiAoc3RkZXJyLCAiICBP TVBfRFlOQU1JQyA9ICclcydcbiIsCi0JICAgZ29tcF9nbG9iYWxfaWN2LmR5bl92YXIgPyAi VFJVRSIgOiAiRkFMU0UiKTsKLSAgZnByaW50ZiAoc3RkZXJyLCAiICBPTVBfTkVTVEVEID0g JyVzJ1xuIiwKLQkgICBnb21wX2dsb2JhbF9pY3YubWF4X2FjdGl2ZV9sZXZlbHNfdmFyID4g MSA/ICJUUlVFIiA6ICJGQUxTRSIpOwotCi0gIGZwcmludGYgKHN0ZGVyciwgIiAgT01QX05V TV9USFJFQURTID0gJyVsdSIsIGdvbXBfZ2xvYmFsX2ljdi5udGhyZWFkc192YXIpOwotICBm b3IgKGkgPSAxOyBpIDwgZ29tcF9udGhyZWFkc192YXJfbGlzdF9sZW47IGkrKykKLSAgICBm cHJpbnRmIChzdGRlcnIsICIsJWx1IiwgZ29tcF9udGhyZWFkc192YXJfbGlzdFtpXSk7Ci0g IGZwdXRzICgiJ1xuIiwgc3RkZXJyKTsKLQotICBmcHJpbnRmIChzdGRlcnIsICIgIE9NUF9T Q0hFRFVMRSA9ICciKTsKLSAgaWYgKChnb21wX2dsb2JhbF9pY3YucnVuX3NjaGVkX3ZhciAm IEdGU19NT05PVE9OSUMpKQorc3RhdGljIHZvaWQKK3ByaW50X3NjaGVkdWxlIChlbnVtIGdv bXBfc2NoZWR1bGVfdHlwZSBydW5fc2NoZWRfdmFyLCBpbnQgcnVuX3NjaGVkX2NodW5rX3Np emUsCisJCWNvbnN0IGNoYXIgKmRldmljZSkKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiICBb JXNdIE9NUF9TQ0hFRFVMRSA9ICciLCBkZXZpY2UpOworICBpZiAoKHJ1bl9zY2hlZF92YXIg JiBHRlNfTU9OT1RPTklDKSkKICAgICB7Ci0gICAgICBpZiAoZ29tcF9nbG9iYWxfaWN2LnJ1 bl9zY2hlZF92YXIgIT0gKEdGU19NT05PVE9OSUMgfCBHRlNfU1RBVElDKSkKKyAgICAgIGlm IChydW5fc2NoZWRfdmFyICE9IChHRlNfTU9OT1RPTklDIHwgR0ZTX1NUQVRJQykpCiAJZnB1 dHMgKCJNT05PVE9OSUM6Iiwgc3RkZXJyKTsKICAgICB9Ci0gIGVsc2UgaWYgKGdvbXBfZ2xv YmFsX2ljdi5ydW5fc2NoZWRfdmFyID09IEdGU19TVEFUSUMpCisgIGVsc2UgaWYgKHJ1bl9z Y2hlZF92YXIgPT0gR0ZTX1NUQVRJQykKICAgICBmcHV0cyAoIk5PTk1PTk9UT05JQzoiLCBz dGRlcnIpOwotICBzd2l0Y2ggKGdvbXBfZ2xvYmFsX2ljdi5ydW5fc2NoZWRfdmFyICYgfkdG U19NT05PVE9OSUMpCisgIHN3aXRjaCAocnVuX3NjaGVkX3ZhciAmIH5HRlNfTU9OT1RPTklD KQogICAgIHsKICAgICBjYXNlIEdGU19SVU5USU1FOgogICAgICAgZnB1dHMgKCJSVU5USU1F Iiwgc3RkZXJyKTsKLSAgICAgIGlmIChnb21wX2dsb2JhbF9pY3YucnVuX3NjaGVkX2NodW5r X3NpemUgIT0gMSkKLQlmcHJpbnRmIChzdGRlcnIsICIsJWQiLCBnb21wX2dsb2JhbF9pY3Yu cnVuX3NjaGVkX2NodW5rX3NpemUpOworICAgICAgaWYgKHJ1bl9zY2hlZF9jaHVua19zaXpl ICE9IDEpCisJZnByaW50ZiAoc3RkZXJyLCAiLCVkIiwgcnVuX3NjaGVkX2NodW5rX3NpemUp OwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBHRlNfU1RBVElDOgogICAgICAgZnB1dHMgKCJT VEFUSUMiLCBzdGRlcnIpOwotICAgICAgaWYgKGdvbXBfZ2xvYmFsX2ljdi5ydW5fc2NoZWRf Y2h1bmtfc2l6ZSAhPSAwKQotCWZwcmludGYgKHN0ZGVyciwgIiwlZCIsIGdvbXBfZ2xvYmFs X2ljdi5ydW5fc2NoZWRfY2h1bmtfc2l6ZSk7CisgICAgICBpZiAocnVuX3NjaGVkX2NodW5r X3NpemUgIT0gMCkKKwlmcHJpbnRmIChzdGRlcnIsICIsJWQiLCBydW5fc2NoZWRfY2h1bmtf c2l6ZSk7CiAgICAgICBicmVhazsKICAgICBjYXNlIEdGU19EWU5BTUlDOgogICAgICAgZnB1 dHMgKCJEWU5BTUlDIiwgc3RkZXJyKTsKLSAgICAgIGlmIChnb21wX2dsb2JhbF9pY3YucnVu X3NjaGVkX2NodW5rX3NpemUgIT0gMSkKLQlmcHJpbnRmIChzdGRlcnIsICIsJWQiLCBnb21w X2dsb2JhbF9pY3YucnVuX3NjaGVkX2NodW5rX3NpemUpOworICAgICAgaWYgKHJ1bl9zY2hl ZF9jaHVua19zaXplICE9IDEpCisJZnByaW50ZiAoc3RkZXJyLCAiLCVkIiwgcnVuX3NjaGVk X2NodW5rX3NpemUpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBHRlNfR1VJREVEOgogICAg ICAgZnB1dHMgKCJHVUlERUQiLCBzdGRlcnIpOwotICAgICAgaWYgKGdvbXBfZ2xvYmFsX2lj di5ydW5fc2NoZWRfY2h1bmtfc2l6ZSAhPSAxKQotCWZwcmludGYgKHN0ZGVyciwgIiwlZCIs IGdvbXBfZ2xvYmFsX2ljdi5ydW5fc2NoZWRfY2h1bmtfc2l6ZSk7CisgICAgICBpZiAocnVu X3NjaGVkX2NodW5rX3NpemUgIT0gMSkKKwlmcHJpbnRmIChzdGRlcnIsICIsJWQiLCBydW5f c2NoZWRfY2h1bmtfc2l6ZSk7CiAgICAgICBicmVhazsKICAgICBjYXNlIEdGU19BVVRPOgog ICAgICAgZnB1dHMgKCJBVVRPIiwgc3RkZXJyKTsKICAgICAgIGJyZWFrOwogICAgIH0KICAg ZnB1dHMgKCInXG4iLCBzdGRlcnIpOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIG9t cF9kaXNwbGF5X2VudiB3aGljaCBwcmludHMgdGhlIHZhbHVlcyBvZiBwcm9jX2JpbmRfdmFy LgorICAgJ2RldmljZScgY2FuIGJlICdob3N0JywgJ2RldicsICdhbGwnLCBvciBhIHBhcnRp Y3VsYXIgZGV2aWNlIG51bWJlci4gICovCiAKLSAgZnB1dHMgKCIgIE9NUF9QUk9DX0JJTkQg PSAnIiwgc3RkZXJyKTsKLSAgc3dpdGNoIChnb21wX2dsb2JhbF9pY3YuYmluZF92YXIpCitz dGF0aWMgdm9pZAorcHJpbnRfcHJvY19iaW5kIChjaGFyIHByb2NfYmluZF92YXIsIHVuc2ln bmVkIGxvbmcgbGVuLCBjaGFyICoqbGlzdCwKKwkJIGNvbnN0IGNoYXIgKmRldmljZSkKK3sK KyAgZnByaW50ZiAoc3RkZXJyLCAiICBbJXNdIE9NUF9QUk9DX0JJTkQgPSAnIiwgZGV2aWNl KTsKKyAgc3dpdGNoIChwcm9jX2JpbmRfdmFyKQogICAgIHsKICAgICBjYXNlIG9tcF9wcm9j X2JpbmRfZmFsc2U6CiAgICAgICBmcHV0cyAoIkZBTFNFIiwgc3RkZXJyKTsKQEAgLTEzMjQs OCArMTM4MSw4IEBAIG9tcF9kaXNwbGF5X2VudiAoaW50IHZlcmJvc2UpCiAgICAgICBmcHV0 cyAoIlNQUkVBRCIsIHN0ZGVycik7CiAgICAgICBicmVhazsKICAgICB9Ci0gIGZvciAoaSA9 IDE7IGkgPCBnb21wX2JpbmRfdmFyX2xpc3RfbGVuOyBpKyspCi0gICAgc3dpdGNoIChnb21w X2JpbmRfdmFyX2xpc3RbaV0pCisgIGZvciAoaW50IGkgPSAxOyBpIDwgbGVuOyBpKyspCisg ICAgc3dpdGNoICgoKmxpc3QpW2ldKQogICAgICAgewogICAgICAgY2FzZSBvbXBfcHJvY19i aW5kX21hc3RlcjoKIAlmcHV0cyAoIixNQVNURVIiLCBzdGRlcnIpOyAvKiBUT0RPOiBDaGFu Z2UgdG8gUFJJTUFSWSBmb3IgT3Blbk1QIDUuMS4gKi8KQEAgLTEzMzgsNyArMTM5NSwyOTAg QEAgb21wX2Rpc3BsYXlfZW52IChpbnQgdmVyYm9zZSkKIAlicmVhazsKICAgICAgIH0KICAg ZnB1dHMgKCInXG4iLCBzdGRlcnIpOwotICBmcHV0cyAoIiAgT01QX1BMQUNFUyA9ICciLCBz dGRlcnIpOworfQorCitlbnVtIGdvbXBfcGFyc2VfdHlwZQoreworICBQQVJTRV9JTlQgPSAx LAorICBQQVJTRV9CT09MID0gMiwKKyAgUEFSU0VfVUlOVCA9IDMsCisgIFBBUlNFX1VMT05H ID0gNCwKKyAgUEFSU0VfVUNIQVIgPSA1LAorICBQQVJTRV9TQ0hFRFVMRSA9NiwKKyAgUEFS U0VfQklORCA9IDcKK307CisKKy8qIFRoZSBmb2xsb3dpbmcgdGFibGUgY29udGFpbnMgaXRl bXMgdGhhdCBoZWxwIHBhcnNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICBhbmQgZmls bCBjb3JyZXNwb25kaW5nIElDVnMgd2l0aCB2YWx1ZXMuICBGTEFHX1ZBUlMgY29udGFpbiBh bGwgSUNWUyB3aGljaAorICAgYXJlIGFmZmVjdGVkIGJ5IHRoZSBlbnZpcm9ubWVudCB2YXJp YWJsZS4gIEZMQUdTIGRldGVybWluZSB3aGF0IHZhcmlhbnQgb2YKKyAgIGVudmlyb25tZW50 IHZhcmlhYmxlIGlzIGFsbG93ZWQuICAqLworCisjZGVmaW5lIEVOVFJZKE5BTUUpIE5BTUUs IHNpemVvZiAoTkFNRSkgLSAxCitzdGF0aWMgY29uc3Qgc3RydWN0IGVudnZhcgoreworICBj b25zdCBjaGFyICpuYW1lOworICBpbnQgbmFtZV9sZW47CisgIHVpbnQ4X3QgZmxhZ192YXJz WzNdOworICB1aW50OF90IGZsYWc7CisgIGJvb2wgKCpwYXJzZV9mdW5jKSAoY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICosIHZvaWQgKiBjb25zdFtdKTsKK30gZW52dmFyc1tdID0gewor ICB7IEVOVFJZICgiU0NIRURVTEUiKSwKKyAgICB7IEdPTVBfSUNWX1NDSEVEVUxFLCBHT01Q X0lDVl9TQ0hFRFVMRV9DSFVOS19TSVpFIH0sCisgICAgR09NUF9FTlZfU1VGRklYX0RFViB8 IEdPTVBfRU5WX1NVRkZJWF9BTEwgfCBHT01QX0VOVl9TVUZGSVhfREVWX1gsCisgICAgJnBh cnNlX3NjaGVkdWxlIH0sCisgIHsgRU5UUlkgKCJOVU1fVEVBTVMiKSwKKyAgICB7IEdPTVBf SUNWX05URUFNUyB9LAorICAgIEdPTVBfRU5WX1NVRkZJWF9ERVYgfCBHT01QX0VOVl9TVUZG SVhfQUxMIHwgR09NUF9FTlZfU1VGRklYX0RFVl9YLAorICAgICZwYXJzZV9pbnQgfSwKKyAg eyBFTlRSWSAoIkRZTkFNSUMiKSwKKyAgICB7IEdPTVBfSUNWX0RZTkFNSUMgfSwKKyAgICBH T01QX0VOVl9TVUZGSVhfREVWIHwgR09NUF9FTlZfU1VGRklYX0FMTCB8IEdPTVBfRU5WX1NV RkZJWF9ERVZfWCwKKyAgICAmcGFyc2VfYm9vbGVhbiB9LAorICB7IEVOVFJZICgiVEVBTVNf VEhSRUFEX0xJTUlUIiksCisgICAgeyBHT01QX0lDVl9URUFNU19USFJFQURfTElNSVQgfSwK KyAgICBHT01QX0VOVl9TVUZGSVhfREVWIHwgR09NUF9FTlZfU1VGRklYX0FMTCB8IEdPTVBf RU5WX1NVRkZJWF9ERVZfWCwKKyAgICAmcGFyc2VfaW50IH0sCisgIHsgRU5UUlkgKCJUSFJF QURfTElNSVQiKSwKKyAgICB7IEdPTVBfSUNWX1RIUkVBRF9MSU1JVCB9LAorICAgIEdPTVBf RU5WX1NVRkZJWF9ERVYgfCBHT01QX0VOVl9TVUZGSVhfQUxMIHwgR09NUF9FTlZfU1VGRklY X0RFVl9YLAorICAgICZwYXJzZV91bnNpZ25lZF9sb25nIH0sCisgIHsgRU5UUlkgKCJOVU1f VEhSRUFEUyIpLAorICAgIHsgR09NUF9JQ1ZfTlRIUkVBRFMsIEdPTVBfSUNWX05USFJFQURT X0xJU1QsIEdPTVBfSUNWX05USFJFQURTX0xJU1RfTEVOIH0sCisgICAgR09NUF9FTlZfU1VG RklYX0RFViB8IEdPTVBfRU5WX1NVRkZJWF9BTEwgfCBHT01QX0VOVl9TVUZGSVhfREVWX1gs CisgICAgJnBhcnNlX3Vuc2lnbmVkX2xvbmdfbGlzdCB9LAorICB7IEVOVFJZICgiUFJPQ19C SU5EIiksCisgICAgeyBHT01QX0lDVl9CSU5ELCBHT01QX0lDVl9CSU5EX0xJU1QsIEdPTVBf SUNWX0JJTkRfTElTVF9MRU4gfSwKKyAgICBHT01QX0VOVl9TVUZGSVhfREVWIHwgR09NUF9F TlZfU1VGRklYX0FMTCB8IEdPTVBfRU5WX1NVRkZJWF9ERVZfWCwKKyAgICAmcGFyc2VfYmlu ZF92YXIgfSwKKyAgeyBFTlRSWSAoIk1BWF9BQ1RJVkVfTEVWRUxTIiksCisgICAgeyBHT01Q X0lDVl9NQVhfQUNUSVZFX0xFVkVMUyB9LAorICAgIEdPTVBfRU5WX1NVRkZJWF9ERVYgfCBH T01QX0VOVl9TVUZGSVhfQUxMIHwgR09NUF9FTlZfU1VGRklYX0RFVl9YLAorICAgICZwYXJz ZV91bnNpZ25lZF9sb25nIH0sCisgIHsgRU5UUlkgKCJXQUlUX1BPTElDWSIpLAorICAgIHsg R09NUF9JQ1ZfV0FJVF9QT0xJQ1kgfSwKKyAgICBHT01QX0VOVl9TVUZGSVhfREVWIHwgR09N UF9FTlZfU1VGRklYX0FMTCB8IEdPTVBfRU5WX1NVRkZJWF9ERVZfWCwKKyAgICAmcGFyc2Vf d2FpdF9wb2xpY3kgfSwKKyAgeyBFTlRSWSAoIlNUQUNLU0laRSIpLAorICAgIHsgR09NUF9J Q1ZfU1RBQ0tTSVpFIH0sCisgICAgR09NUF9FTlZfU1VGRklYX0RFViB8IEdPTVBfRU5WX1NV RkZJWF9BTEwgfCBHT01QX0VOVl9TVUZGSVhfREVWX1gsCisgICAgJnBhcnNlX3N0YWNrc2l6 ZSB9LAorICB7IEVOVFJZICgiQ0FOQ0VMTEFUSU9OIiksIHsgR09NUF9JQ1ZfQ0FOQ0VMTEFU SU9OIH0sIDAsICZwYXJzZV9ib29sZWFuIH0sCisgIHsgRU5UUlkgKCJESVNQTEFZX0FGRklO SVRZIiksIHsgR09NUF9JQ1ZfRElTUExBWV9BRkZJTklUWSB9LCAwLAorICAgICZwYXJzZV9i b29sZWFuIH0sCisgIHsgRU5UUlkgKCJUQVJHRVRfT0ZGTE9BRCIpLCB7IEdPTVBfSUNWX1RB UkdFVF9PRkZMT0FEIH0sIDAsCisgICAgJnBhcnNlX3RhcmdldF9vZmZsb2FkIH0sCisgIHsg RU5UUlkgKCJNQVhfVEFTS19QUklPUklUWSIpLCB7IEdPTVBfSUNWX01BWF9UQVNLX1BSSU9S SVRZIH0sIDAsCisgICAgJnBhcnNlX2ludCB9LAorICB7IEVOVFJZICgiQUxMT0NBVE9SIiks IHsgR09NUF9JQ1ZfQUxMT0NBVE9SIH0sIDAsICZwYXJzZV9hbGxvY2F0b3IgfSwKKyAgeyBF TlRSWSAoIkRFRkFVTFRfREVWSUNFIiksIHsgR09NUF9JQ1ZfREVGQVVMVF9ERVZJQ0UgfSwK KyAgICBHT01QX0VOVl9TVUZGSVhfREVWIHwgR09NUF9FTlZfU1VGRklYX0FMTCB8IEdPTVBf RU5WX1NVRkZJWF9ERVZfWCwKKyAgICAmcGFyc2VfaW50IH0KK307CisjdW5kZWYgRU5UUlkK KyNkZWZpbmUgT01QX1ZBUl9DTlQgKHNpemVvZiAoZW52dmFycykgLyBzaXplb2YgKGVudnZh cnNbMF0pKQorCisvKiBUaGUgZm9sbG93aW5nIHRhYmxlIGlzIHVzZWQgdG8gYXBwbHkgdGhl IGhpZXJhcmNoeSBvZiBJQ1YgdmFyaWFudHMgZm9yIGhvc3QKKyAgIHZhcmlhYmxlcywgZS5n LiBudGVhbXNfdmFyIGlzIHNldCB0byBPTVBfTlVNX1RFQU1TX0FMTCBpZiBPTVBfTlVNX1RF QU1TIGlzCisgICB1bmRlZmluZWQuICAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhvc3Rf ZW52dmFyCit7CisgIHVuc2lnbmVkIGNoYXIgZmxhZ192YXI7CisgIHZvaWQgKmRlc3RbM107 CisgIGludCB0eXBlX2NvZGU7Cit9IGhvc3RfZW52dmFyc1tdID0geworICB7IEdPTVBfSUNW X05URUFNUywgeyAmZ29tcF9udGVhbXNfdmFyIH0sIFBBUlNFX0lOVCB9LAorICB7IEdPTVBf SUNWX0RZTkFNSUMsIHsgJmdvbXBfZ2xvYmFsX2ljdi5keW5fdmFyIH0sIFBBUlNFX0JPT0wg fSwKKyAgeyBHT01QX0lDVl9ERUZBVUxUX0RFVklDRSwgeyAmZ29tcF9nbG9iYWxfaWN2LmRl ZmF1bHRfZGV2aWNlX3ZhciB9LAorICAgIFBBUlNFX0lOVCB9LAorICB7IEdPTVBfSUNWX1RF QU1TX1RIUkVBRF9MSU1JVCwgeyAmZ29tcF90ZWFtc190aHJlYWRfbGltaXRfdmFyIH0sIFBB UlNFX0lOVCB9LAorICB7IEdPTVBfSUNWX1NDSEVEVUxFLAorICAgIHsgJmdvbXBfZ2xvYmFs X2ljdi5ydW5fc2NoZWRfdmFyLCAmZ29tcF9nbG9iYWxfaWN2LnJ1bl9zY2hlZF9jaHVua19z aXplIH0sCisgICAgUEFSU0VfU0NIRURVTEUgfSwKKyAgeyBHT01QX0lDVl9USFJFQURfTElN SVQsIHsgJmdvbXBfZ2xvYmFsX2ljdi50aHJlYWRfbGltaXRfdmFyIH0sIFBBUlNFX1VJTlQg fSwKKyAgeyBHT01QX0lDVl9OVEhSRUFEUywKKyAgICB7ICZnb21wX2dsb2JhbF9pY3YubnRo cmVhZHNfdmFyLCAmZ29tcF9udGhyZWFkc192YXJfbGlzdCwKKyAgICAgICZnb21wX250aHJl YWRzX3Zhcl9saXN0X2xlbiB9LCBQQVJTRV9VTE9ORyB9LAorICB7IEdPTVBfSUNWX0JJTkQs CisgICAgeyAmZ29tcF9nbG9iYWxfaWN2LmJpbmRfdmFyLCAmZ29tcF9iaW5kX3Zhcl9saXN0 LCAmZ29tcF9iaW5kX3Zhcl9saXN0X2xlbiB9LAorICAgIFBBUlNFX0JJTkQgfSwKKyAgeyBH T01QX0lDVl9NQVhfQUNUSVZFX0xFVkVMUywgeyAmZ29tcF9nbG9iYWxfaWN2Lm1heF9hY3Rp dmVfbGV2ZWxzX3ZhciB9LAorICAgIFBBUlNFX1VDSEFSIH0sCit9OworI2RlZmluZSBPTVBf SE9TVF9WQVJfQ05UIChzaXplb2YgKGhvc3RfZW52dmFycykgLyBzaXplb2YgKGhvc3RfZW52 dmFyc1swXSkpCisKKyNkZWZpbmUgSU5UX01BWF9TVFJfTEVOIDEwCisKK2Jvb2wKK2dvbXBf Z2V0X2ljdl9mbGFnICh1aW50MzJfdCB2YWx1ZSwgZW51bSBnb21wX2ljdnMgaWN2KQorewor ICByZXR1cm4gdmFsdWUgJiAoMSA8PCAoaWN2IC0gMSkpOworfQorCitzdGF0aWMgdm9pZAor Z29tcF9zZXRfaWN2X2ZsYWcgKHVpbnQzMl90ICp2YWx1ZSwgZW51bSBnb21wX2ljdnMgaWN2 KQoreworICAqdmFsdWUgfD0gMSA8PCAoaWN2IC0gMSk7Cit9CisKK3N0YXRpYyB2b2lkCitw cmludF9kZXZpY2Vfc3BlY2lmaWNfaWN2cyAoaW50IGljdl9jb2RlKQoreworICBzdHJ1Y3Qg Z29tcF9pY3ZfbGlzdCAqbGlzdCA9IGdvbXBfaW5pdGlhbF9pY3ZfbGlzdDsKKyAgaW50IGk7 CisgIGNoYXIgZGV2X251bVtJTlRfTUFYX1NUUl9MRU4gKyAxXTsKKworICB3aGlsZSAobGlz dCAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChsaXN0LT5kZXZpY2VfbnVtIDwgMCkKKwl7 CisJICBsaXN0ID0gbGlzdC0+bmV4dDsKKwkgIGNvbnRpbnVlOworCX0KKworICAgICAgc3dp dGNoIChpY3ZfY29kZSkKKwl7CisJY2FzZSBHT01QX0lDVl9OVEVBTVM6CisJICBpZiAoZ29t cF9nZXRfaWN2X2ZsYWcgKGxpc3QtPmZsYWdzLCBHT01QX0lDVl9OVEVBTVMpKQorCSAgICBm cHJpbnRmIChzdGRlcnIsICIgIFslZF0gT01QX05VTV9URUFNUyA9ICclZCdcbiIsCisJCSAg ICAgbGlzdC0+ZGV2aWNlX251bSwgbGlzdC0+aWN2cy5udGVhbXNfdmFyKTsKKwkgIGJyZWFr OworCWNhc2UgR09NUF9JQ1ZfRFlOQU1JQzoKKwkgIGlmIChnb21wX2dldF9pY3ZfZmxhZyAo bGlzdC0+ZmxhZ3MsIEdPTVBfSUNWX0RZTkFNSUMpKQorCSAgICBmcHJpbnRmIChzdGRlcnIs ICIgIFslZF0gT01QX0RZTkFNSUMgPSAnJXMnXG4iLAorCQkgICAgIGxpc3QtPmRldmljZV9u dW0sIGxpc3QtPmljdnMuZHluX3ZhciA/ICJUUlVFIiA6ICJGQUxTRSIpOworCSAgYnJlYWs7 CisJY2FzZSBHT01QX0lDVl9URUFNU19USFJFQURfTElNSVQ6CisJICBpZiAoZ29tcF9nZXRf aWN2X2ZsYWcgKGxpc3QtPmZsYWdzLCBHT01QX0lDVl9URUFNU19USFJFQURfTElNSVQpKQor CSAgICBmcHJpbnRmIChzdGRlcnIsICIgIFslZF0gT01QX1RFQU1TX1RIUkVBRF9MSU1JVCA9 ICcldSdcbiIsCisJCSAgICAgbGlzdC0+ZGV2aWNlX251bSwgbGlzdC0+aWN2cy50ZWFtc190 aHJlYWRfbGltaXRfdmFyKTsKKwkgIGJyZWFrOworCWNhc2UgR09NUF9JQ1ZfU0NIRURVTEU6 CisJICBpZiAoIShnb21wX2dldF9pY3ZfZmxhZyAobGlzdC0+ZmxhZ3MsIEdPTVBfSUNWX1ND SEVEVUxFKSkpCisJICAgIGJyZWFrOworCSAgc3ByaW50ZiAoZGV2X251bSwgIiVkIiwgbGlz dC0+ZGV2aWNlX251bSk7CisJICBwcmludF9zY2hlZHVsZSAobGlzdC0+aWN2cy5ydW5fc2No ZWRfdmFyLAorCQkJICBsaXN0LT5pY3ZzLnJ1bl9zY2hlZF9jaHVua19zaXplLAorCQkJICBk ZXZfbnVtKTsKKwkgIGJyZWFrOworCWNhc2UgR09NUF9JQ1ZfVEhSRUFEX0xJTUlUOgorCSAg aWYgKGdvbXBfZ2V0X2ljdl9mbGFnIChsaXN0LT5mbGFncywgR09NUF9JQ1ZfVEhSRUFEX0xJ TUlUKSkKKwkgICAgZnByaW50ZiAoc3RkZXJyLCAiICBbJWRdIE9NUF9USFJFQURfTElNSVQg PSAnJWQnXG4iLAorCQkgICAgIGxpc3QtPmRldmljZV9udW0sIGxpc3QtPmljdnMudGhyZWFk X2xpbWl0X3Zhcik7CisJICBicmVhazsKKwljYXNlIEdPTVBfSUNWX05USFJFQURTOgorCSAg aWYgKCEoZ29tcF9nZXRfaWN2X2ZsYWcgKGxpc3QtPmZsYWdzLCBHT01QX0lDVl9OVEhSRUFE UykpKQorCSAgICBicmVhazsKKwkgIGZwcmludGYgKHN0ZGVyciwgIiAgWyVkXSBPTVBfTlVN X1RIUkVBRFMgPSAnJWx1IiwgbGlzdC0+ZGV2aWNlX251bSwKKwkJICAgbGlzdC0+aWN2cy5u dGhyZWFkc192YXIpOworCSAgZm9yIChpID0gMTsgaSA8IGxpc3QtPmljdnMubnRocmVhZHNf dmFyX2xpc3RfbGVuOyBpKyspCisJICAgIGZwcmludGYgKHN0ZGVyciwgIiwlbHUiLCBsaXN0 LT5pY3ZzLm50aHJlYWRzX3Zhcl9saXN0W2ldKTsKKwkgIGZwdXRzICgiJ1xuIiwgc3RkZXJy KTsKKwkgIGJyZWFrOworCWNhc2UgR09NUF9JQ1ZfTUFYX0FDVElWRV9MRVZFTFM6CisJICBm cHJpbnRmIChzdGRlcnIsICIgIFslZF0gT01QX01BWF9BQ1RJVkVfTEVWRUxTID0gJyV1J1xu IiwKKwkJICAgbGlzdC0+ZGV2aWNlX251bSwgbGlzdC0+aWN2cy5tYXhfYWN0aXZlX2xldmVs c192YXIpOworCSAgYnJlYWs7CisJY2FzZSBHT01QX0lDVl9CSU5EOgorCSAgaWYgKCEoZ29t cF9nZXRfaWN2X2ZsYWcgKGxpc3QtPmZsYWdzLCBHT01QX0lDVl9CSU5EKSkpCisJICAgIGJy ZWFrOworCSAgc3ByaW50ZiAoZGV2X251bSwgIiVkIiwgbGlzdC0+ZGV2aWNlX251bSk7CisJ ICBwcmludF9wcm9jX2JpbmQgKGxpc3QtPmljdnMuYmluZF92YXIsIGxpc3QtPmljdnMuYmlu ZF92YXJfbGlzdF9sZW4sCisJCQkgICAmbGlzdC0+aWN2cy5iaW5kX3Zhcl9saXN0LCBkZXZf bnVtKTsKKwkgIGJyZWFrOworCWNhc2UgR09NUF9JQ1ZfV0FJVF9QT0xJQ1k6CisJICBpZiAo Z29tcF9nZXRfaWN2X2ZsYWcgKGxpc3QtPmZsYWdzLCBHT01QX0lDVl9XQUlUX1BPTElDWSkp CisJICAgIGZwcmludGYgKHN0ZGVyciwgIiAgWyVkXSBPTVBfV0FJVF9QT0xJQ1kgPSAnJXMn XG4iLAorCQkgICAgIGxpc3QtPmRldmljZV9udW0sCisJCSAgICAgbGlzdC0+aWN2cy53YWl0 X3BvbGljeSA+IDAgPyAiQUNUSVZFIiA6ICJQQVNTSVZFIik7CisJICBicmVhazsKKwljYXNl IEdPTVBfSUNWX1NUQUNLU0laRToKKwkgIGlmIChnb21wX2dldF9pY3ZfZmxhZyAobGlzdC0+ ZmxhZ3MsIEdPTVBfSUNWX1NUQUNLU0laRSkpCisJICAgIGZwcmludGYgKHN0ZGVyciwgIiAg WyVkXSBPTVBfU1RBQ0tTSVpFID0gJyVsdSdcbiIsCisJCSAgICAgbGlzdC0+ZGV2aWNlX251 bSwgbGlzdC0+aWN2cy5zdGFja3NpemUpOworCSAgYnJlYWs7CisJfQorICAgICAgbGlzdCA9 IGxpc3QtPm5leHQ7CisgICAgfQorfQorCit2b2lkCitvbXBfZGlzcGxheV9lbnYgKGludCB2 ZXJib3NlKQoreworICBpbnQgaTsKKyAgc3RydWN0IGdvbXBfaWN2X2xpc3QgKmRldgorICAg ID0gZ29tcF9nZXRfaW5pdGlhbF9pY3ZfaXRlbSAoR09NUF9ERVZJQ0VfTlVNX0ZPUl9ERVYp OworICBzdHJ1Y3QgZ29tcF9pY3ZfbGlzdCAqYWxsCisgICAgPSBnb21wX2dldF9pbml0aWFs X2ljdl9pdGVtIChHT01QX0RFVklDRV9OVU1fRk9SX0FMTCk7CisgIHN0cnVjdCBnb21wX2lj dl9saXN0ICpub25lCisgICAgPSBnb21wX2dldF9pbml0aWFsX2ljdl9pdGVtIChHT01QX0RF VklDRV9OVU1fRk9SX05PX1NVRkZJWCk7CisKKyAgZnB1dHMgKCJcbk9QRU5NUCBESVNQTEFZ IEVOVklST05NRU5UIEJFR0lOXG4iLCBzdGRlcnIpOworCisgIGZwdXRzICgiICBfT1BFTk1Q ID0gJzIwMTUxMSdcbiIsIHN0ZGVycik7CisKKyAgZnByaW50ZiAoc3RkZXJyLCAiICBbaG9z dF0gT01QX0RZTkFNSUMgPSAnJXMnXG4iLAorCSAgIG5vbmUtPmljdnMuZHluX3ZhciA/ICJU UlVFIiA6ICJGQUxTRSIpOworICBpZiAoYWxsICE9IE5VTEwgJiYgZ29tcF9nZXRfaWN2X2Zs YWcgKGFsbC0+ZmxhZ3MsIEdPTVBfSUNWX0RZTkFNSUMpKQorICAgIGZwcmludGYgKHN0ZGVy ciwgIiAgW2FsbF0gT01QX0RZTkFNSUMgPSAnJXMnXG4iLAorCSAgICAgYWxsLT5pY3ZzLmR5 bl92YXIgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKyAgaWYgKGRldiAhPSBOVUxMICYmIGdvbXBf Z2V0X2ljdl9mbGFnIChkZXYtPmZsYWdzLCBHT01QX0lDVl9EWU5BTUlDKSkKKyAgICBmcHJp bnRmIChzdGRlcnIsICIgIFtkZXZpY2VdIE9NUF9EWU5BTUlDID0gJyVzJ1xuIiwKKwkgICAg IGRldi0+aWN2cy5keW5fdmFyID8gIlRSVUUiIDogIkZBTFNFIik7CisgIHByaW50X2Rldmlj ZV9zcGVjaWZpY19pY3ZzIChHT01QX0lDVl9EWU5BTUlDKTsKKworICAvKiBUaGUgT01QX05F U1RFRCBlbnZpcm9ubWVudCB2YXJpYWJsZSBoYXMgYmVlbiBkZXByZWNhdGVkLiAgKi8KKyAg ZnByaW50ZiAoc3RkZXJyLCAiICBbaG9zdF0gT01QX05FU1RFRCA9ICclcydcbiIsCisJICAg bm9uZS0+aWN2cy5tYXhfYWN0aXZlX2xldmVsc192YXIgPiAxID8gIlRSVUUiIDogIkZBTFNF Iik7CisKKyAgZnByaW50ZiAoc3RkZXJyLCAiICBbaG9zdF0gT01QX05VTV9USFJFQURTID0g JyVsdSIsCisJICAgbm9uZS0+aWN2cy5udGhyZWFkc192YXIpOworICBmb3IgKGkgPSAxOyBp IDwgbm9uZS0+aWN2cy5udGhyZWFkc192YXJfbGlzdF9sZW47IGkrKykKKyAgICBmcHJpbnRm IChzdGRlcnIsICIsJWx1Iiwgbm9uZS0+aWN2cy5udGhyZWFkc192YXJfbGlzdFtpXSk7Cisg IGZwdXRzICgiJ1xuIiwgc3RkZXJyKTsKKyAgaWYgKGFsbCAhPSBOVUxMICYmIGdvbXBfZ2V0 X2ljdl9mbGFnIChhbGwtPmZsYWdzLCBHT01QX0lDVl9OVEhSRUFEUykpCisgICAgeworICAg ICAgZnByaW50ZiAoc3RkZXJyLCAiICBbYWxsXSBPTVBfTlVNX1RIUkVBRFMgPSAnJWx1IiwK KwkgICAgICAgYWxsLT5pY3ZzLm50aHJlYWRzX3Zhcik7CisgICAgICBmb3IgKGkgPSAxOyBp IDwgYWxsLT5pY3ZzLm50aHJlYWRzX3Zhcl9saXN0X2xlbjsgaSsrKQorCWZwcmludGYgKHN0 ZGVyciwgIiwlbHUiLCBhbGwtPmljdnMubnRocmVhZHNfdmFyX2xpc3RbaV0pOworICAgICAg ZnB1dHMgKCInXG4iLCBzdGRlcnIpOworICAgIH0KKyAgaWYgKGRldiAhPSBOVUxMICYmIGdv bXBfZ2V0X2ljdl9mbGFnIChkZXYtPmZsYWdzLCBHT01QX0lDVl9OVEhSRUFEUykpCisgICAg eworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICBbZGV2aWNlXSBPTVBfTlVNX1RIUkVBRFMg PSAnJWx1IiwKKwkgICAgICAgZGV2LT5pY3ZzLm50aHJlYWRzX3Zhcik7CisgICAgICBmb3Ig KGkgPSAxOyBpIDwgZGV2LT5pY3ZzLm50aHJlYWRzX3Zhcl9saXN0X2xlbjsgaSsrKQorCWZw cmludGYgKHN0ZGVyciwgIiwlbHUiLCBkZXYtPmljdnMubnRocmVhZHNfdmFyX2xpc3RbaV0p OworICAgICAgZnB1dHMgKCInXG4iLCBzdGRlcnIpOworICAgIH0KKyAgcHJpbnRfZGV2aWNl X3NwZWNpZmljX2ljdnMgKEdPTVBfSUNWX05USFJFQURTKTsKKworCisgIHByaW50X3NjaGVk dWxlIChub25lLT5pY3ZzLnJ1bl9zY2hlZF92YXIsCisJCSAgbm9uZS0+aWN2cy5ydW5fc2No ZWRfY2h1bmtfc2l6ZSwgImhvc3QiKTsKKyAgaWYgKGFsbCAhPSBOVUxMICYmIGdvbXBfZ2V0 X2ljdl9mbGFnIChhbGwtPmZsYWdzLCBHT01QX0lDVl9TQ0hFRFVMRSkpCisgICAgcHJpbnRf c2NoZWR1bGUgKGFsbC0+aWN2cy5ydW5fc2NoZWRfdmFyLAorCQkgICAgYWxsLT5pY3ZzLnJ1 bl9zY2hlZF9jaHVua19zaXplLCAiYWxsIik7CisgIGlmIChkZXYgIT0gTlVMTCAmJiBnb21w X2dldF9pY3ZfZmxhZyAoZGV2LT5mbGFncywgR09NUF9JQ1ZfU0NIRURVTEUpKQorICAgIHBy aW50X3NjaGVkdWxlIChkZXYtPmljdnMucnVuX3NjaGVkX3ZhciwKKwkJICAgIGRldi0+aWN2 cy5ydW5fc2NoZWRfY2h1bmtfc2l6ZSwgImRldmljZSIpOworICBwcmludF9kZXZpY2Vfc3Bl Y2lmaWNfaWN2cyAoR09NUF9JQ1ZfU0NIRURVTEUpOworCisgIHByaW50X3Byb2NfYmluZCAo bm9uZS0+aWN2cy5iaW5kX3ZhciwKKwkJICAgbm9uZS0+aWN2cy5iaW5kX3Zhcl9saXN0X2xl biwKKwkJICAgJm5vbmUtPmljdnMuYmluZF92YXJfbGlzdCwgImhvc3QiKTsKKyAgaWYgKGFs bCAhPSBOVUxMICYmIGdvbXBfZ2V0X2ljdl9mbGFnIChhbGwtPmZsYWdzLCBHT01QX0lDVl9C SU5EKSkKKyAgICBwcmludF9wcm9jX2JpbmQgKGFsbC0+aWN2cy5iaW5kX3ZhciwKKwkJICAg ICBhbGwtPmljdnMuYmluZF92YXJfbGlzdF9sZW4sCisJCSAgICAgJmFsbC0+aWN2cy5iaW5k X3Zhcl9saXN0LCAiYWxsIik7CisgIGlmIChkZXYgIT0gTlVMTCAmJiBnb21wX2dldF9pY3Zf ZmxhZyAoZGV2LT5mbGFncywgR09NUF9JQ1ZfQklORCkpCisgICAgcHJpbnRfcHJvY19iaW5k IChkZXYtPmljdnMuYmluZF92YXIsCisJCSAgICAgZGV2LT5pY3ZzLmJpbmRfdmFyX2xpc3Rf bGVuLAorCQkgICAgICZkZXYtPmljdnMuYmluZF92YXJfbGlzdCwgImRldmljZSIpOworICBw cmludF9kZXZpY2Vfc3BlY2lmaWNfaWN2cyAoR09NUF9JQ1ZfQklORCk7CisKKyAgZnB1dHMg KCIgIFtob3N0XSBPTVBfUExBQ0VTID0gJyIsIHN0ZGVycik7CiAgIGZvciAoaSA9IDA7IGkg PCBnb21wX3BsYWNlc19saXN0X2xlbjsgaSsrKQogICAgIHsKICAgICAgIGZwdXRzICgieyIs IHN0ZGVycik7CkBAIC0xMzQ3LDMwICsxNjg3LDg1IEBAIG9tcF9kaXNwbGF5X2VudiAoaW50 IHZlcmJvc2UpCiAgICAgfQogICBmcHV0cyAoIidcbiIsIHN0ZGVycik7CiAKLSAgZnByaW50 ZiAoc3RkZXJyLCAiICBPTVBfU1RBQ0tTSVpFID0gJyVsdSdcbiIsIHN0YWNrc2l6ZSk7Cisg IGZwcmludGYgKHN0ZGVyciwgIiAgW2hvc3RdIE9NUF9TVEFDS1NJWkUgPSAnJWx1J1xuIiwK KwkgICBub25lLT5pY3ZzLnN0YWNrc2l6ZSk7CisgIGlmIChhbGwgIT0gTlVMTCAmJiBnb21w X2dldF9pY3ZfZmxhZyAoYWxsLT5mbGFncywgR09NUF9JQ1ZfU1RBQ0tTSVpFKSkKKyAgICBm cHJpbnRmIChzdGRlcnIsICIgIFthbGxdIE9NUF9TVEFDS1NJWkUgPSAnJWx1J1xuIiwKKwkg ICAgIGFsbC0+aWN2cy5zdGFja3NpemUpOworICBpZiAoZGV2ICE9IE5VTEwgJiYgZ29tcF9n ZXRfaWN2X2ZsYWcgKGRldi0+ZmxhZ3MsIEdPTVBfSUNWX1NUQUNLU0laRSkpCisgICAgZnBy aW50ZiAoc3RkZXJyLCAiICBbZGV2aWNlXSBPTVBfU1RBQ0tTSVpFID0gJyVsdSdcbiIsCisJ ICAgICBkZXYtPmljdnMuc3RhY2tzaXplKTsKKyAgcHJpbnRfZGV2aWNlX3NwZWNpZmljX2lj dnMgKEdPTVBfSUNWX1NUQUNLU0laRSk7CiAKICAgLyogR09NUCdzIGRlZmF1bHQgdmFsdWUg aXMgYWN0dWFsbHkgbmVpdGhlciBhY3RpdmUgbm9yIHBhc3NpdmUuICAqLwotICBmcHJpbnRm IChzdGRlcnIsICIgIE9NUF9XQUlUX1BPTElDWSA9ICclcydcbiIsCi0JICAgd2FpdF9wb2xp Y3kgPiAwID8gIkFDVElWRSIgOiAiUEFTU0lWRSIpOwotICBmcHJpbnRmIChzdGRlcnIsICIg IE9NUF9USFJFQURfTElNSVQgPSAnJXUnXG4iLAotCSAgIGdvbXBfZ2xvYmFsX2ljdi50aHJl YWRfbGltaXRfdmFyKTsKLSAgZnByaW50ZiAoc3RkZXJyLCAiICBPTVBfTUFYX0FDVElWRV9M RVZFTFMgPSAnJXUnXG4iLAotCSAgIGdvbXBfZ2xvYmFsX2ljdi5tYXhfYWN0aXZlX2xldmVs c192YXIpOwotICBmcHJpbnRmIChzdGRlcnIsICIgIE9NUF9OVU1fVEVBTVMgPSAnJXUnXG4i LCBnb21wX250ZWFtc192YXIpOwotICBmcHJpbnRmIChzdGRlcnIsICIgIE9NUF9URUFNU19U SFJFQURfTElNSVQgPSAnJXUnXG4iLAotCSAgIGdvbXBfdGVhbXNfdGhyZWFkX2xpbWl0X3Zh cik7Ci0KLSAgZnByaW50ZiAoc3RkZXJyLCAiICBPTVBfQ0FOQ0VMTEFUSU9OID0gJyVzJ1xu IiwKKyAgZnByaW50ZiAoc3RkZXJyLCAiICBbaG9zdF0gT01QX1dBSVRfUE9MSUNZID0gJyVz J1xuIiwKKwkgICBub25lLT5pY3ZzLndhaXRfcG9saWN5ID4gMCA/ICJBQ1RJVkUiIDogIlBB U1NJVkUiKTsKKyAgaWYgKGFsbCAhPSBOVUxMICYmIGdvbXBfZ2V0X2ljdl9mbGFnIChhbGwt PmZsYWdzLCBHT01QX0lDVl9XQUlUX1BPTElDWSkpCisgICAgZnByaW50ZiAoc3RkZXJyLCAi ICBbYWxsXSBPTVBfV0FJVF9QT0xJQ1kgPSAnJXMnXG4iLAorCSAgICAgYWxsLT5pY3ZzLndh aXRfcG9saWN5ID4gMCA/ICJBQ1RJVkUiIDogIlBBU1NJVkUiKTsKKyAgaWYgKGRldiAhPSBO VUxMICYmIGdvbXBfZ2V0X2ljdl9mbGFnIChkZXYtPmZsYWdzLCBHT01QX0lDVl9XQUlUX1BP TElDWSkpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiICBbZGV2aWNlXSBPTVBfV0FJVF9QT0xJ Q1kgPSAnJXMnXG4iLAorCSAgICAgZGV2LT5pY3ZzLndhaXRfcG9saWN5ID4gMCA/ICJBQ1RJ VkUiIDogIlBBU1NJVkUiKTsKKyAgcHJpbnRfZGV2aWNlX3NwZWNpZmljX2ljdnMgKEdPTVBf SUNWX1dBSVRfUE9MSUNZKTsKKworICBmcHJpbnRmIChzdGRlcnIsICIgIFtob3N0XSBPTVBf VEhSRUFEX0xJTUlUID0gJyV1J1xuIiwKKwkgICBub25lLT5pY3ZzLnRocmVhZF9saW1pdF92 YXIpOworICBpZiAoYWxsICE9IE5VTEwgJiYgZ29tcF9nZXRfaWN2X2ZsYWcgKGFsbC0+Zmxh Z3MsIEdPTVBfSUNWX1RIUkVBRF9MSU1JVCkpCisgICAgZnByaW50ZiAoc3RkZXJyLCAiICBb YWxsXSBPTVBfVEhSRUFEX0xJTUlUID0gJyVkJ1xuIiwKKwkgICAgIGFsbC0+aWN2cy50aHJl YWRfbGltaXRfdmFyKTsKKyAgaWYgKGRldiAhPSBOVUxMICYmIGdvbXBfZ2V0X2ljdl9mbGFn IChkZXYtPmZsYWdzLCBHT01QX0lDVl9USFJFQURfTElNSVQpKQorICAgIGZwcmludGYgKHN0 ZGVyciwgIiAgW2RldmljZV0gT01QX1RIUkVBRF9MSU1JVCA9ICclZCdcbiIsCisJICAgICBk ZXYtPmljdnMudGhyZWFkX2xpbWl0X3Zhcik7CisgIHByaW50X2RldmljZV9zcGVjaWZpY19p Y3ZzIChHT01QX0lDVl9USFJFQURfTElNSVQpOworCisgIGZwcmludGYgKHN0ZGVyciwgIiAg W2hvc3RdIE9NUF9NQVhfQUNUSVZFX0xFVkVMUyA9ICcldSdcbiIsCisJICAgbm9uZS0+aWN2 cy5tYXhfYWN0aXZlX2xldmVsc192YXIpOworICBpZiAoYWxsICE9IE5VTEwgJiYgZ29tcF9n ZXRfaWN2X2ZsYWcgKGFsbC0+ZmxhZ3MsCisJCQkgR09NUF9JQ1ZfTUFYX0FDVElWRV9MRVZF TFMpKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiAgW2FsbF0gT01QX01BWF9BQ1RJVkVfTEVW RUxTID0gJyV1J1xuIiwKKwkgICAgIGFsbC0+aWN2cy5tYXhfYWN0aXZlX2xldmVsc192YXIp OworICBpZiAoZGV2ICE9IE5VTEwgJiYgZ29tcF9nZXRfaWN2X2ZsYWcgKGRldi0+ZmxhZ3Ms CisJCQkgR09NUF9JQ1ZfTUFYX0FDVElWRV9MRVZFTFMpKQorICAgIGZwcmludGYgKHN0ZGVy ciwgIiAgW2RldmljZV0gT01QX01BWF9BQ1RJVkVfTEVWRUxTID0gJyV1J1xuIiwKKwkgICAg IGRldi0+aWN2cy5tYXhfYWN0aXZlX2xldmVsc192YXIpOworICBwcmludF9kZXZpY2Vfc3Bl Y2lmaWNfaWN2cyAoR09NUF9JQ1ZfTUFYX0FDVElWRV9MRVZFTFMpOworCisKKyAgZnByaW50 ZiAoc3RkZXJyLCAiICBbaG9zdF0gT01QX05VTV9URUFNUyA9ICclZCdcbiIsCisJICAgbm9u ZS0+aWN2cy5udGVhbXNfdmFyKTsKKyAgaWYgKGFsbCAhPSBOVUxMICYmIGdvbXBfZ2V0X2lj dl9mbGFnIChhbGwtPmZsYWdzLCBHT01QX0lDVl9OVEVBTVMpKQorICAgIGZwcmludGYgKHN0 ZGVyciwgIiAgW2FsbF0gT01QX05VTV9URUFNUyA9ICclZCdcbiIsCisJICAgICBhbGwtPmlj dnMubnRlYW1zX3Zhcik7CisgIGlmIChkZXYgIT0gTlVMTCAmJiBnb21wX2dldF9pY3ZfZmxh ZyAoZGV2LT5mbGFncywgR09NUF9JQ1ZfTlRFQU1TKSkKKyAgICBmcHJpbnRmIChzdGRlcnIs ICIgIFtkZXZpY2VdIE9NUF9OVU1fVEVBTVMgPSAnJWQnXG4iLAorCSAgICAgZGV2LT5pY3Zz Lm50ZWFtc192YXIpOworICBwcmludF9kZXZpY2Vfc3BlY2lmaWNfaWN2cyAoR09NUF9JQ1Zf TlRFQU1TKTsKKworICBmcHJpbnRmIChzdGRlcnIsICIgIFtob3N0XSBPTVBfVEVBTVNfVEhS RUFEX0xJTUlUID0gJyV1J1xuIiwKKwkgICBub25lLT5pY3ZzLnRlYW1zX3RocmVhZF9saW1p dF92YXIpOworICBpZiAoYWxsICE9IE5VTEwgJiYgZ29tcF9nZXRfaWN2X2ZsYWcgKGFsbC0+ ZmxhZ3MsCisJCQkgR09NUF9JQ1ZfVEVBTVNfVEhSRUFEX0xJTUlUKSkKKyAgICBmcHJpbnRm IChzdGRlcnIsICIgIFthbGxdIE9NUF9URUFNU19USFJFQURfTElNSVQgPSAnJXUnXG4iLAor CSAgICAgYWxsLT5pY3ZzLnRlYW1zX3RocmVhZF9saW1pdF92YXIpOworICBpZiAoZGV2ICE9 IE5VTEwgJiYgZ29tcF9nZXRfaWN2X2ZsYWcgKGRldi0+ZmxhZ3MsCisJCQkgR09NUF9JQ1Zf VEVBTVNfVEhSRUFEX0xJTUlUKSkKKyAgICBmcHJpbnRmIChzdGRlcnIsICIgIFtkZXZpY2Vd IE9NUF9URUFNU19USFJFQURfTElNSVQgPSAnJXUnXG4iLAorCSAgICAgZGV2LT5pY3ZzLnRl YW1zX3RocmVhZF9saW1pdF92YXIpOworICBwcmludF9kZXZpY2Vfc3BlY2lmaWNfaWN2cyAo R09NUF9JQ1ZfVEVBTVNfVEhSRUFEX0xJTUlUKTsKKworICBmcHJpbnRmIChzdGRlcnIsICIg IFthbGxdIE9NUF9DQU5DRUxMQVRJT04gPSAnJXMnXG4iLAogCSAgIGdvbXBfY2FuY2VsX3Zh ciA/ICJUUlVFIiA6ICJGQUxTRSIpOwotICBmcHJpbnRmIChzdGRlcnIsICIgIE9NUF9ERUZB VUxUX0RFVklDRSA9ICclZCdcbiIsCi0JICAgZ29tcF9nbG9iYWxfaWN2LmRlZmF1bHRfZGV2 aWNlX3Zhcik7Ci0gIGZwcmludGYgKHN0ZGVyciwgIiAgT01QX01BWF9UQVNLX1BSSU9SSVRZ ID0gJyVkJ1xuIiwKKworICBmcHJpbnRmIChzdGRlcnIsICIgIFthbGxdIE9NUF9ERUZBVUxU X0RFVklDRSA9ICclZCdcbiIsCisJICAgbm9uZS0+aWN2cy5kZWZhdWx0X2RldmljZV92YXIp OworCisgIGZwcmludGYgKHN0ZGVyciwgIiAgW2FsbF0gT01QX01BWF9UQVNLX1BSSU9SSVRZ ID0gJyVkJ1xuIiwKIAkgICBnb21wX21heF90YXNrX3ByaW9yaXR5X3Zhcik7Ci0gIGZwcmlu dGYgKHN0ZGVyciwgIiAgT01QX0RJU1BMQVlfQUZGSU5JVFkgPSAnJXMnXG4iLAorICBmcHJp bnRmIChzdGRlcnIsICIgIFthbGxdIE9NUF9ESVNQTEFZX0FGRklOSVRZID0gJyVzJ1xuIiwK IAkgICBnb21wX2Rpc3BsYXlfYWZmaW5pdHlfdmFyID8gIlRSVUUiIDogIkZBTFNFIik7Ci0g IGZwcmludGYgKHN0ZGVyciwgIiAgT01QX0FGRklOSVRZX0ZPUk1BVCA9ICclcydcbiIsCisg IGZwcmludGYgKHN0ZGVyciwgIiAgW2hvc3RdIE9NUF9BRkZJTklUWV9GT1JNQVQgPSAnJXMn XG4iLAogCSAgIGdvbXBfYWZmaW5pdHlfZm9ybWF0X3Zhcik7Ci0gIGZwcmludGYgKHN0ZGVy ciwgIiAgT01QX0FMTE9DQVRPUiA9ICciKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiICBbaG9z dF0gT01QX0FMTE9DQVRPUiA9ICciKTsKICAgc3dpdGNoIChnb21wX2RlZl9hbGxvY2F0b3Ip CiAgICAgewogI2RlZmluZSBDKHYpIGNhc2UgdjogZnB1dHMgKCN2LCBzdGRlcnIpOyBicmVh azsKQEAgLTEzODcsNyArMTc4Miw3IEBAIG9tcF9kaXNwbGF5X2VudiAoaW50IHZlcmJvc2Up CiAgICAgfQogICBmcHV0cyAoIidcbiIsIHN0ZGVycik7CiAKLSAgZnB1dHMgKCIgIE9NUF9U QVJHRVRfT0ZGTE9BRCA9ICciLCBzdGRlcnIpOworICBmcHV0cyAoIiAgW2FsbF0gT01QX1RB UkdFVF9PRkZMT0FEID0gJyIsIHN0ZGVycik7CiAgIHN3aXRjaCAoZ29tcF90YXJnZXRfb2Zm bG9hZF92YXIpCiAgICAgewogICAgIGNhc2UgR09NUF9UQVJHRVRfT0ZGTE9BRF9ERUZBVUxU OgpAQCAtMTQwNCwxMyArMTc5OSwxMyBAQCBvbXBfZGlzcGxheV9lbnYgKGludCB2ZXJib3Nl KQogCiAgIGlmICh2ZXJib3NlKQogICAgIHsKLSAgICAgIGZwdXRzICgiICBHT01QX0NQVV9B RkZJTklUWSA9ICcnXG4iLCBzdGRlcnIpOwotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICBH T01QX1NUQUNLU0laRSA9ICclbHUnXG4iLCBzdGFja3NpemUpOworICAgICAgZnB1dHMgKCIg IFtob3N0XSBHT01QX0NQVV9BRkZJTklUWSA9ICcnXG4iLCBzdGRlcnIpOworICAgICAgZnBy aW50ZiAoc3RkZXJyLCAiICBbaG9zdF0gR09NUF9TVEFDS1NJWkUgPSAnJWx1J1xuIiwgc3Rh Y2tzaXplKTsKICNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKLSAgICAgIGZwcmludGYgKHN0ZGVy ciwgIiAgR09NUF9TUElOQ09VTlQgPSAnJSJQUkl1NjQiJ1xuIiwKKyAgICAgIGZwcmludGYg KHN0ZGVyciwgIiAgW2hvc3RdIEdPTVBfU1BJTkNPVU5UID0gJyUiUFJJdTY0IidcbiIsCiAJ ICAgICAgICh1aW50NjRfdCkgZ29tcF9zcGluX2NvdW50X3Zhcik7CiAjZWxzZQotICAgICAg ZnByaW50ZiAoc3RkZXJyLCAiICBHT01QX1NQSU5DT1VOVCA9ICclbHUnXG4iLAorICAgICAg ZnByaW50ZiAoc3RkZXJyLCAiICBbaG9zdF0gR09NUF9TUElOQ09VTlQgPSAnJWx1J1xuIiwK IAkgICAgICAgKHVuc2lnbmVkIGxvbmcpIGdvbXBfc3Bpbl9jb3VudF92YXIpOwogI2VuZGlm CiAgICAgfQpAQCAtMTQ1OSw2NSArMTg1NCwzNzAgQEAgaGFuZGxlX29tcF9kaXNwbGF5X2Vu diAodm9pZCkKICAgICBpYWxpYXNfY2FsbCAob21wX2Rpc3BsYXlfZW52KSAodmVyYm9zZSk7 CiB9CiAKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgaW5pdGlhbGl6ZV9lbnYuICBFeHRyYWN0 cyB0aGUgZGV2aWNlIG51bWJlciBmcm9tCisgICBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBu YW1lLiAgRU5WIGlzIHRoZSBjb21wbGV0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgIERF Vl9OVU1fUFRSIHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIGRldmljZSBudW1iZXIgaW4g dGhlIGVudmlyb25tZW50CisgICB2YXJpYWJsZSBzdHJpbmcuICBERVZfTlVNX0xFTiBpcyB0 aGUgcmV0dXJuZWQgbGVuZ3RoIG9mIHRoZSBkZXZpY2UgbnVtCisgICBzdHJpbmcuICAqLwor CitzdGF0aWMgYm9vbAorZ2V0X2RldmljZV9udW0gKGNoYXIgKmVudiwgY2hhciAqZGV2X251 bV9wdHIsIGludCAqZGV2X251bSwgaW50ICpkZXZfbnVtX2xlbikKK3sKKyAgY2hhciAqZW5k OworICB1bnNpZ25lZCBsb25nIHZhbCA9IHN0cnRvdWwgKGRldl9udW1fcHRyLCAmZW5kLCAx MCk7CisgIGlmICh2YWwgPiBJTlRfTUFYCisgICAgICB8fCAqZW5kICE9ICc9JworICAgICAg fHwgKGRldl9udW1fcHRyWzBdID09ICcwJyAmJiB2YWwgIT0gMCkKKyAgICAgIHx8IChkZXZf bnVtX3B0clswXSA8ICcwJyB8fCBkZXZfbnVtX3B0clswXSA+ICc5JykpCisgICAgeworICAg ICAgZ29tcF9lcnJvciAoIkludmFsaWQgZGV2aWNlIG51bWJlciBpbiAlcyIsIGVudik7Cisg ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAqZGV2X251bSA9IHZhbDsKKyAgKmRldl9u dW1fbGVuID0gZW5kIC0gZGV2X251bV9wdHI7CisgIHJldHVybiB0cnVlOworfQorCitzdGF0 aWMgdm9pZAorZ2V0X2ljdl9tZW1iZXJfYWRkciAoc3RydWN0IGdvbXBfaW5pdGlhbF9pY3Zz ICppY3ZzLCBpbnQgaWN2X2NvZGUsCisJCSAgICAgdm9pZCAqaWN2X2FkZHJbM10pCit7Cisg IGlmIChpY3ZfY29kZSA9PSAwIHx8IGljdl9hZGRyID09IE5VTEwpCisgICAgcmV0dXJuOwor CisgIGljdl9hZGRyWzBdID0gaWN2X2FkZHJbMV0gPSBpY3ZfYWRkclsyXSA9IE5VTEw7CisK KyAgc3dpdGNoIChpY3ZfY29kZSkKKyAgICB7CisgICAgY2FzZSBHT01QX0lDVl9OVEVBTVM6 CisgICAgICBpY3ZfYWRkclswXSA9ICZpY3ZzLT5udGVhbXNfdmFyOworICAgICAgaWN2X2Fk ZHJbMV0gPSBmYWxzZTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR09NUF9JQ1ZfRFlOQU1J QzoKKyAgICAgIGljdl9hZGRyWzBdID0gJigqaWN2cykuZHluX3ZhcjsKKyAgICAgIGJyZWFr OworICAgIGNhc2UgR09NUF9JQ1ZfVEVBTVNfVEhSRUFEX0xJTUlUOgorICAgICAgaWN2X2Fk ZHJbMF0gPSAmaWN2cy0+dGVhbXNfdGhyZWFkX2xpbWl0X3ZhcjsKKyAgICAgIGljdl9hZGRy WzFdID0gZmFsc2U7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdPTVBfSUNWX1NDSEVEVUxF OgorICAgICAgaWN2X2FkZHJbMF0gPSAmaWN2cy0+cnVuX3NjaGVkX3ZhcjsKKyAgICAgIGlj dl9hZGRyWzFdID0gJmljdnMtPnJ1bl9zY2hlZF9jaHVua19zaXplOworICAgICAgYnJlYWs7 CisgICAgY2FzZSBHT01QX0lDVl9USFJFQURfTElNSVQ6CisgICAgICBpY3ZfYWRkclswXSA9 ICZpY3ZzLT50aHJlYWRfbGltaXRfdmFyOworICAgICAgaWN2X2FkZHJbMV0gPSBmYWxzZTsK KyAgICAgIGljdl9hZGRyWzJdID0gKHZvaWQgKikgVUlOVF9NQVg7CisgICAgICBicmVhazsK KyAgICBjYXNlIEdPTVBfSUNWX05USFJFQURTOgorICAgICAgaWN2X2FkZHJbMF0gPSAmaWN2 cy0+bnRocmVhZHNfdmFyOworICAgICAgaWN2X2FkZHJbMV0gPSAmaWN2cy0+bnRocmVhZHNf dmFyX2xpc3Q7CisgICAgICBpY3ZfYWRkclsyXSA9ICZpY3ZzLT5udGhyZWFkc192YXJfbGlz dF9sZW47CisgICAgICBicmVhazsKKyAgICBjYXNlIEdPTVBfSUNWX01BWF9BQ1RJVkVfTEVW RUxTOgorICAgICAgaWN2X2FkZHJbMF0gPSAmaWN2cy0+bWF4X2FjdGl2ZV9sZXZlbHNfdmFy OworICAgICAgaWN2X2FkZHJbMV0gPSAodm9pZCAqKSB0cnVlOworICAgICAgaWN2X2FkZHJb Ml0gPSAodm9pZCAqKSBnb21wX3N1cHBvcnRlZF9hY3RpdmVfbGV2ZWxzOworICAgICAgYnJl YWs7CisgICAgY2FzZSBHT01QX0lDVl9CSU5EOgorICAgICAgaWN2X2FkZHJbMF0gPSAmaWN2 cy0+YmluZF92YXI7CisgICAgICBpY3ZfYWRkclsxXSA9ICZpY3ZzLT5iaW5kX3Zhcl9saXN0 OworICAgICAgaWN2X2FkZHJbMl0gPSAmaWN2cy0+YmluZF92YXJfbGlzdF9sZW47CisgICAg ICBicmVhazsKKyAgICBjYXNlIEdPTVBfSUNWX1dBSVRfUE9MSUNZOgorICAgICAgaWN2X2Fk ZHJbMF0gPSAmaWN2cy0+d2FpdF9wb2xpY3k7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdP TVBfSUNWX1NUQUNLU0laRToKKyAgICAgIGljdl9hZGRyWzBdID0gJmljdnMtPnN0YWNrc2l6 ZTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR09NUF9JQ1ZfQ0FOQ0VMTEFUSU9OOgorICAg ICAgaWN2X2FkZHJbMF0gPSAmZ29tcF9jYW5jZWxfdmFyOworICAgICAgYnJlYWs7CisgICAg Y2FzZSBHT01QX0lDVl9ESVNQTEFZX0FGRklOSVRZOgorICAgICAgaWN2X2FkZHJbMF0gPSAm Z29tcF9kaXNwbGF5X2FmZmluaXR5X3ZhcjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR09N UF9JQ1ZfVEFSR0VUX09GRkxPQUQ6CisgICAgICBpY3ZfYWRkclswXSA9ICZnb21wX3Rhcmdl dF9vZmZsb2FkX3ZhcjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR09NUF9JQ1ZfTUFYX1RB U0tfUFJJT1JJVFk6CisgICAgICBpY3ZfYWRkclswXSA9ICZnb21wX21heF90YXNrX3ByaW9y aXR5X3ZhcjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR09NUF9JQ1ZfQUxMT0NBVE9SOgor ICAgICAgaWN2X2FkZHJbMF0gPSAmZ29tcF9kZWZfYWxsb2NhdG9yOworICAgICAgYnJlYWs7 CisgICAgY2FzZSBHT01QX0lDVl9ERUZBVUxUX0RFVklDRToKKyAgICAgIGljdl9hZGRyWzBd ID0gJmljdnMtPmRlZmF1bHRfZGV2aWNlX3ZhcjsKKyAgICAgIGljdl9hZGRyWzFdID0gKHZv aWQgKikgdHJ1ZTsKKyAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RydWN0IGdvbXBfaWN2 X2xpc3QgKgorZ29tcF9nZXRfaW5pdGlhbF9pY3ZfaXRlbSAoaW50IGRldl9udW0pCit7Cisg IHN0cnVjdCBnb21wX2ljdl9saXN0ICpsID0gZ29tcF9pbml0aWFsX2ljdl9saXN0OworICB3 aGlsZSAobCAhPSBOVUxMICYmIGwtPmRldmljZV9udW0gIT0gZGV2X251bSkKKyAgICBsID0g bC0+bmV4dDsKKworICByZXR1cm4gbDsKK30KKworc3RhdGljIHZvaWQKK2luaXRpYWxpemVf aWN2cyAoc3RydWN0IGdvbXBfaW5pdGlhbF9pY3ZzICppY3ZzKQoreworICBpY3ZzLT5udGhy ZWFkc192YXJfbGlzdCA9IE5VTEw7CisgIGljdnMtPmJpbmRfdmFyX2xpc3QgPSBOVUxMOwor ICBpY3ZzLT5udGhyZWFkc192YXIgPSBnb21wX2RlZmF1bHRfaWN2X3ZhbHVlcy5udGhyZWFk c192YXI7CisgIGljdnMtPm50aHJlYWRzX3Zhcl9saXN0X2xlbiA9IDA7CisgIGljdnMtPmJp bmRfdmFyX2xpc3RfbGVuID0gMDsKKyAgaWN2cy0+c3RhY2tzaXplID0gMDsKKyAgaWN2cy0+ dGhyZWFkX2xpbWl0X3ZhciA9IGdvbXBfZGVmYXVsdF9pY3ZfdmFsdWVzLnRocmVhZF9saW1p dF92YXI7CisgIGljdnMtPnJ1bl9zY2hlZF92YXIgPSBnb21wX2RlZmF1bHRfaWN2X3ZhbHVl cy5ydW5fc2NoZWRfdmFyOworICBpY3ZzLT5ydW5fc2NoZWRfY2h1bmtfc2l6ZSA9IGdvbXBf ZGVmYXVsdF9pY3ZfdmFsdWVzLnJ1bl9zY2hlZF9jaHVua19zaXplOworICBpY3ZzLT5kZWZh dWx0X2RldmljZV92YXIgPSBnb21wX2RlZmF1bHRfaWN2X3ZhbHVlcy5kZWZhdWx0X2Rldmlj ZV92YXI7CisgIGljdnMtPmR5bl92YXIgPSBnb21wX2RlZmF1bHRfaWN2X3ZhbHVlcy5keW5f dmFyOworICBpY3ZzLT5tYXhfYWN0aXZlX2xldmVsc192YXIgPSBnb21wX2RlZmF1bHRfaWN2 X3ZhbHVlcy5tYXhfYWN0aXZlX2xldmVsc192YXI7CisgIGljdnMtPmJpbmRfdmFyID0gZ29t cF9kZWZhdWx0X2ljdl92YWx1ZXMuYmluZF92YXI7CisgIGljdnMtPm50ZWFtc192YXIgPSBn b21wX2RlZmF1bHRfaWN2X3ZhbHVlcy5udGVhbXNfdmFyOworICBpY3ZzLT50ZWFtc190aHJl YWRfbGltaXRfdmFyID0gZ29tcF9kZWZhdWx0X2ljdl92YWx1ZXMudGVhbXNfdGhyZWFkX2xp bWl0X3ZhcjsKKyAgaWN2cy0+d2FpdF9wb2xpY3kgPSAwOworfQorCisvKiBIZWxwZXIgZnVu Y3Rpb24gZm9yIGluaXRpYWxpemVfZW52IHRvIGFkZCBhIGRldmljZSBzcGVjaWZpYyBJQ1Yg dmFsdWUKKyAgIHRvIGdvbXBfaW5pdGlhbF9pY3ZfbGlzdC4gICovCisKK3N0YXRpYyB1aW50 MzJfdCAqCithZGRfaW5pdGlhbF9pY3ZfdG9fbGlzdCAoaW50IGRldl9udW0sIGludCBpY3Zf Y29kZSwgdm9pZCAqaWN2X2FkZHJbM10pCit7CisgIHN0cnVjdCBnb21wX2ljdl9saXN0ICps YXN0ID0gTlVMTCwgKmwgPSBnb21wX2luaXRpYWxfaWN2X2xpc3Q7CisgIHdoaWxlIChsICE9 IE5VTEwgJiYgbC0+ZGV2aWNlX251bSAhPSBkZXZfbnVtKQorICAgIHsKKyAgICAgIGxhc3Qg PSBsOworICAgICAgbCA9IGwtPm5leHQ7CisgICAgfQorCisgIGlmIChsID09IE5VTEwpCisg ICAgeworICAgICAgbCA9ICgoc3RydWN0IGdvbXBfaWN2X2xpc3QgKikKKwkgICBnb21wX21h bGxvY19jbGVhcmVkIChzaXplb2YgKHN0cnVjdCBnb21wX2ljdl9saXN0KSkpOworICAgICAg bC0+ZGV2aWNlX251bSA9IGRldl9udW07CisgICAgICBpbml0aWFsaXplX2ljdnMgKCZsLT5p Y3ZzKTsKKyAgICAgIGlmIChkZXZfbnVtIDwgMCkKKwl7CisJICBsLT5uZXh0ID0gZ29tcF9p bml0aWFsX2ljdl9saXN0OworCSAgZ29tcF9pbml0aWFsX2ljdl9saXN0ID0gbDsKKwl9Cisg ICAgICBlbHNlCisJeworCSAgbC0+bmV4dCA9IE5VTEw7CisJICBpZiAobGFzdCA9PSBOVUxM KQorCSAgICBnb21wX2luaXRpYWxfaWN2X2xpc3QgPSBsOworCSAgZWxzZQorCSAgICBsYXN0 LT5uZXh0ID0gbDsKKwl9CisgICAgfQorCisgIGdldF9pY3ZfbWVtYmVyX2FkZHIgKCZsLT5p Y3ZzLCBpY3ZfY29kZSwgaWN2X2FkZHIpOworCisgIHJldHVybiAmbC0+ZmxhZ3M7Cit9CisK Ky8qIFJldHVybiB0cnVlIGlmIFNUUiBzdHJpbmcgc3RhcnRzIHdpdGggUFJFRklYLiAgKi8K Kworc3RhdGljIGlubGluZSBib29sCitzdGFydHN3aXRoIChjb25zdCBjaGFyICpzdHIsIGNv bnN0IGNoYXIgKnByZWZpeCkKK3sKKyAgcmV0dXJuIHN0cm5jbXAgKHN0ciwgcHJlZml4LCBz dHJsZW4gKHByZWZpeCkpID09IDA7Cit9CiAKIHN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18o KGNvbnN0cnVjdG9yKSkKIGluaXRpYWxpemVfZW52ICh2b2lkKQogewotICB1bnNpZ25lZCBs b25nIHRocmVhZF9saW1pdF92YXI7Ci0gIHVuc2lnbmVkIGxvbmcgbWF4X2FjdGl2ZV9sZXZl bHNfdmFyOworICBleHRlcm4gY2hhciAqKmVudmlyb247CisgIGNoYXIgKiplbnY7CisgIGlu dCBvbXBfdmFyLCBkZXZfbnVtID0gMCwgZGV2X251bV9sZW4gPSAwLCBpOworICBib29sIGln bm9yZSA9IGZhbHNlOworICBjaGFyICplbnZfdmFsOworICB2b2lkICpwYXJhbXNbM107Cisg IHVpbnQzMl90ICpmbGFnX3Zhcl9hZGRyID0gTlVMTDsKKyAgdW5zaWduZWQgcG9zOworICBz dHJ1Y3QgZ29tcF9pY3ZfbGlzdCAqYWxsLCAqbm9uZTsKIAogICAvKiBEbyBhIGNvbXBpbGUg dGltZSBjaGVjayB0aGF0IG1rb21wX2gucGwgZGlkIGdvb2Qgam9iLiAgKi8KICAgb21wX2No ZWNrX2RlZmluZXMgKCk7CiAKLSAgcGFyc2Vfc2NoZWR1bGUgKCk7Ci0gIHBhcnNlX2Jvb2xl YW4gKCJPTVBfRFlOQU1JQyIsICZnb21wX2dsb2JhbF9pY3YuZHluX3Zhcik7Ci0gIHBhcnNl X2Jvb2xlYW4gKCJPTVBfQ0FOQ0VMTEFUSU9OIiwgJmdvbXBfY2FuY2VsX3Zhcik7Ci0gIHBh cnNlX2Jvb2xlYW4gKCJPTVBfRElTUExBWV9BRkZJTklUWSIsICZnb21wX2Rpc3BsYXlfYWZm aW5pdHlfdmFyKTsKLSAgcGFyc2VfaW50ICgiT01QX0RFRkFVTFRfREVWSUNFIiwgJmdvbXBf Z2xvYmFsX2ljdi5kZWZhdWx0X2RldmljZV92YXIsIHRydWUpOwotICBwYXJzZV90YXJnZXRf b2ZmbG9hZCAoIk9NUF9UQVJHRVRfT0ZGTE9BRCIsICZnb21wX3RhcmdldF9vZmZsb2FkX3Zh cik7Ci0gIHBhcnNlX2ludCAoIk9NUF9NQVhfVEFTS19QUklPUklUWSIsICZnb21wX21heF90 YXNrX3ByaW9yaXR5X3ZhciwgdHJ1ZSk7Ci0gIGdvbXBfZGVmX2FsbG9jYXRvciA9IHBhcnNl X2FsbG9jYXRvciAoKTsKLSAgaWYgKHBhcnNlX3Vuc2lnbmVkX2xvbmcgKCJPTVBfVEhSRUFE X0xJTUlUIiwgJnRocmVhZF9saW1pdF92YXIsIGZhbHNlKSkKLSAgICB7Ci0gICAgICBnb21w X2dsb2JhbF9pY3YudGhyZWFkX2xpbWl0X3ZhcgotCT0gdGhyZWFkX2xpbWl0X3ZhciA+IElO VF9NQVggPyBVSU5UX01BWCA6IHRocmVhZF9saW1pdF92YXI7Ci0gICAgfQotICBwYXJzZV9p bnRfc2VjdXJlICgiR09NUF9ERUJVRyIsICZnb21wX2RlYnVnX3ZhciwgdHJ1ZSk7CiAjaWZu ZGVmIEhBVkVfU1lOQ19CVUlMVElOUwogICBnb21wX211dGV4X2luaXQgKCZnb21wX21hbmFn ZWRfdGhyZWFkc19sb2NrKTsKICNlbmRpZgogICBnb21wX2luaXRfbnVtX3RocmVhZHMgKCk7 CiAgIGdvbXBfYXZhaWxhYmxlX2NwdXMgPSBnb21wX2dsb2JhbF9pY3YubnRocmVhZHNfdmFy OwotICBpZiAoIXBhcnNlX3Vuc2lnbmVkX2xvbmdfbGlzdCAoIk9NUF9OVU1fVEhSRUFEUyIs Ci0JCQkJICZnb21wX2dsb2JhbF9pY3YubnRocmVhZHNfdmFyLAotCQkJCSAmZ29tcF9udGhy ZWFkc192YXJfbGlzdCwKLQkJCQkgJmdvbXBfbnRocmVhZHNfdmFyX2xpc3RfbGVuKSkKLSAg ICBnb21wX2dsb2JhbF9pY3YubnRocmVhZHNfdmFyID0gZ29tcF9hdmFpbGFibGVfY3B1czsK LSAgcGFyc2VfaW50ICgiT01QX05VTV9URUFNUyIsICZnb21wX250ZWFtc192YXIsIGZhbHNl KTsKLSAgcGFyc2VfaW50ICgiT01QX1RFQU1TX1RIUkVBRF9MSU1JVCIsICZnb21wX3RlYW1z X3RocmVhZF9saW1pdF92YXIsIGZhbHNlKTsKLSAgYm9vbCBpZ25vcmUgPSBmYWxzZTsKLSAg aWYgKHBhcnNlX2JpbmRfdmFyICgiT01QX1BST0NfQklORCIsCi0JCSAgICAgICZnb21wX2ds b2JhbF9pY3YuYmluZF92YXIsCi0JCSAgICAgICZnb21wX2JpbmRfdmFyX2xpc3QsCi0JCSAg ICAgICZnb21wX2JpbmRfdmFyX2xpc3RfbGVuKQorCisgIC8qIEluaXRpYWwgdmFsdWVzIGZv ciBob3N0IGVudmlyb25tZW50IHZhcmlhYmxlcyBzaG91bGQgYWx3YXlzIGV4aXN0IGV2ZW4g aWYKKyAgICAgdGhlcmUgaXMgbm8gZXhwbGljaXRseSBzZXQgaG9zdCBlbnZpcm9ubWVudCB2 YXJpYWJsZS4gIE1vcmVvdmVyLCB0aGV5IGFyZQorICAgICBzZXQgdG8gdGhlIGluaXRpYWwg Z2xvYmFsIHZhbHVlcy4gICovCisgIGFkZF9pbml0aWFsX2ljdl90b19saXN0IChHT01QX0RF VklDRV9OVU1fRk9SX05PX1NVRkZJWCwgMCwgTlVMTCk7CisgIG5vbmUgPSBnb21wX2dldF9p bml0aWFsX2ljdl9pdGVtIChHT01QX0RFVklDRV9OVU1fRk9SX05PX1NVRkZJWCk7CisgIGlu aXRpYWxpemVfaWN2cyAoJm5vbmUtPmljdnMpOworCisgIGZvciAoZW52ID0gZW52aXJvbjsg KmVudiAhPSAwOyBlbnYrKykKKyAgICB7CisgICAgICBpZiAoIXN0YXJ0c3dpdGggKCplbnYs ICJPTVBfIikpCisJY29udGludWU7CisKKyAgICAgLyogTmFtZSBvZiB0aGUgZW52aXJvbm1l bnQgdmFyaWFibGUgd2l0aG91dCBzdWZmaXggIk9NUF8iLiAgKi8KKyAgICAgY2hhciAqbmFt ZSA9ICplbnYgKyBzaXplb2YgKCJPTVBfIikgLSAxOworICAgICBmb3IgKG9tcF92YXIgPSAw OyBvbXBfdmFyIDwgT01QX1ZBUl9DTlQ7IG9tcF92YXIrKykKKwl7CisJICBpZiAoc3RhcnRz d2l0aCAobmFtZSwgZW52dmFyc1tvbXBfdmFyXS5uYW1lKSkKKwkgICAgeworCSAgICAgIHBv cyA9IGVudnZhcnNbb21wX3Zhcl0ubmFtZV9sZW47CisJICAgICAgaWYgKG5hbWVbcG9zXSA9 PSAnPScpCisJCXsKKwkJICBwb3MrKzsKKwkJICBmbGFnX3Zhcl9hZGRyCisJCSAgICA9IGFk ZF9pbml0aWFsX2ljdl90b19saXN0IChHT01QX0RFVklDRV9OVU1fRk9SX05PX1NVRkZJWCwK KwkJCQkJICAgICAgIGVudnZhcnNbb21wX3Zhcl0uZmxhZ192YXJzWzBdLAorCQkJCQkgICAg ICAgcGFyYW1zKTsKKwkJfQorCSAgICAgIGVsc2UgaWYgKHN0YXJ0c3dpdGggKCZuYW1lW3Bv c10sICJfREVWPSIpCisJCSAgICAgICAmJiBlbnZ2YXJzW29tcF92YXJdLmZsYWcgJiBHT01Q X0VOVl9TVUZGSVhfREVWKQorCQl7CisJCSAgcG9zICs9IDU7CisJCSAgZmxhZ192YXJfYWRk cgorCQkgICAgPSBhZGRfaW5pdGlhbF9pY3ZfdG9fbGlzdCAoR09NUF9ERVZJQ0VfTlVNX0ZP Ul9ERVYsCisJCQkJCSAgICAgICBlbnZ2YXJzW29tcF92YXJdLmZsYWdfdmFyc1swXSwKKwkJ CQkJICAgICAgIHBhcmFtcyk7CisJCX0KKwkgICAgICBlbHNlIGlmIChzdGFydHN3aXRoICgm bmFtZVtwb3NdLCAiX0FMTD0iKQorCQkgICAgICAgJiYgZW52dmFyc1tvbXBfdmFyXS5mbGFn ICYgR09NUF9FTlZfU1VGRklYX0FMTCkKKwkJeworCQkgIHBvcyArPSA1OworCQkgIGZsYWdf dmFyX2FkZHIKKwkJICAgID0gYWRkX2luaXRpYWxfaWN2X3RvX2xpc3QgKEdPTVBfREVWSUNF X05VTV9GT1JfQUxMLAorCQkJCQkgICAgICAgZW52dmFyc1tvbXBfdmFyXS5mbGFnX3ZhcnNb MF0sCisJCQkJCSAgICAgICBwYXJhbXMpOworCQl9CisJICAgICAgZWxzZSBpZiAoc3RhcnRz d2l0aCAoJm5hbWVbcG9zXSwgIl9ERVZfIikKKwkJICAgICAgICYmIGVudnZhcnNbb21wX3Zh cl0uZmxhZyAmIEdPTVBfRU5WX1NVRkZJWF9ERVZfWCkKKwkJeworCQkgIHBvcyArPSA1Owor CQkgIGlmICghZ2V0X2RldmljZV9udW0gKCplbnYsICZuYW1lW3Bvc10sICZkZXZfbnVtLAor CQkJCSAgICAgICAmZGV2X251bV9sZW4pKQorCQkgICAgYnJlYWs7CisKKwkJICBwb3MgKz0g ZGV2X251bV9sZW4gKyAxOworCQkgIGZsYWdfdmFyX2FkZHIKKwkJICAgID0gYWRkX2luaXRp YWxfaWN2X3RvX2xpc3QgKGRldl9udW0sCisJCQkJCSAgICAgICBlbnZ2YXJzW29tcF92YXJd LmZsYWdfdmFyc1swXSwKKwkJCQkJICAgICAgIHBhcmFtcyk7CisJCX0KKwkgICAgICBlbHNl CisJCXsKKwkJICBnb21wX2Vycm9yICgiSW52YWxpZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBp biAlcyIsICplbnYpOworCQkgIGJyZWFrOworCQl9CisJICAgICAgZW52X3ZhbCA9ICZuYW1l W3Bvc107CisKKwkgICAgICBpZiAoZW52dmFyc1tvbXBfdmFyXS5wYXJzZV9mdW5jICgqZW52 LCBlbnZfdmFsLCBwYXJhbXMpKQorCQl7CisJCSAgZm9yIChpID0gMDsgaSA8IDM7ICsraSkK KwkJICAgIGlmIChlbnZ2YXJzW29tcF92YXJdLmZsYWdfdmFyc1tpXSkKKwkJICAgICAgZ29t cF9zZXRfaWN2X2ZsYWcgKGZsYWdfdmFyX2FkZHIsCisJCQkJCSBlbnZ2YXJzW29tcF92YXJd LmZsYWdfdmFyc1tpXSk7CisJCSAgICBlbHNlCisJCSAgICAgIGJyZWFrOworCQl9CisKKwkg ICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICBhbGwgPSBnb21wX2dldF9p bml0aWFsX2ljdl9pdGVtIChHT01QX0RFVklDRV9OVU1fRk9SX0FMTCk7CisgICAgZm9yIChv bXBfdmFyID0gMDsgb21wX3ZhciA8IE9NUF9IT1NUX1ZBUl9DTlQ7IG9tcF92YXIrKykKKyAg ICAgIHsKKwlpZiAobm9uZSAhPSBOVUxMCisJICAgICYmIGdvbXBfZ2V0X2ljdl9mbGFnIChu b25lLT5mbGFncywgaG9zdF9lbnZ2YXJzW29tcF92YXJdLmZsYWdfdmFyKSkKKwkgIGdldF9p Y3ZfbWVtYmVyX2FkZHIgKCZub25lLT5pY3ZzLAorCQkJICAgICAgIGhvc3RfZW52dmFyc1tv bXBfdmFyXS5mbGFnX3ZhciwgcGFyYW1zKTsKKwllbHNlIGlmIChhbGwgIT0gTlVMTAorCQkg JiYgZ29tcF9nZXRfaWN2X2ZsYWcgKGFsbC0+ZmxhZ3MsCisJCQkJICAgICAgIGhvc3RfZW52 dmFyc1tvbXBfdmFyXS5mbGFnX3ZhcikpCisJICBnZXRfaWN2X21lbWJlcl9hZGRyICgmYWxs LT5pY3ZzLCBob3N0X2VudnZhcnNbb21wX3Zhcl0uZmxhZ192YXIsCisJCQkgICAgICAgcGFy YW1zKTsKKwllbHNlCisJICBjb250aW51ZTsKKworCXN3aXRjaCAoaG9zdF9lbnZ2YXJzW29t cF92YXJdLnR5cGVfY29kZSkKKwkgIHsKKwkgIGNhc2UgUEFSU0VfSU5UOgorCSAgICBmb3Ig KGkgPSAwOyBpIDwgMzsgKytpKQorCSAgICAgIGlmIChob3N0X2VudnZhcnNbb21wX3Zhcl0u ZGVzdFtpXSAhPSBOVUxMICYmIHBhcmFtc1tpXSAhPSBOVUxMKQorCQkqKGludCAqKSAoaG9z dF9lbnZ2YXJzW29tcF92YXJdLmRlc3RbaV0pID0gKihpbnQgKikgcGFyYW1zW2ldOworCSAg ICBicmVhazsKKwkgIGNhc2UgUEFSU0VfQk9PTDoKKwkgICAgZm9yIChpID0gMDsgaSA8IDM7 ICsraSkKKwkgICAgICBpZiAoaG9zdF9lbnZ2YXJzW29tcF92YXJdLmRlc3RbaV0gIT0gTlVM TCAmJiBwYXJhbXNbaV0gIT0gTlVMTCkKKwkJKihib29sICopIChob3N0X2VudnZhcnNbb21w X3Zhcl0uZGVzdFtpXSkgPSAqKGJvb2wgKikgcGFyYW1zW2ldOworCSAgICBicmVhazsKKwkg IGNhc2UgUEFSU0VfVUlOVDoKKwkgICAgZm9yIChpID0gMDsgaSA8IDM7ICsraSkKKwkgICAg ICBpZiAoaG9zdF9lbnZ2YXJzW29tcF92YXJdLmRlc3RbaV0gIT0gTlVMTCAmJiBwYXJhbXNb aV0gIT0gTlVMTCkKKwkJKih1bnNpZ25lZCBpbnQgKikgKGhvc3RfZW52dmFyc1tvbXBfdmFy XS5kZXN0W2ldKQorCQkgID0gKih1bnNpZ25lZCBpbnQgKikgcGFyYW1zW2ldOworCSAgICBi cmVhazsKKwkgIGNhc2UgUEFSU0VfVUxPTkc6CisJICAgIGZvciAoaSA9IDA7IGkgPCAzOyAr K2kpCisJICAgICAgaWYgKGhvc3RfZW52dmFyc1tvbXBfdmFyXS5kZXN0W2ldICE9IE5VTEwg JiYgcGFyYW1zW2ldICE9IE5VTEwpCisJCSoodW5zaWduZWQgbG9uZyAqKSAoaG9zdF9lbnZ2 YXJzW29tcF92YXJdLmRlc3RbaV0pCisJCSAgPSAqKHVuc2lnbmVkIGxvbmcgKikgcGFyYW1z W2ldOworCSAgICBicmVhazsKKwkgIGNhc2UgUEFSU0VfVUNIQVI6CisJICAgIGZvciAoaSA9 IDA7IGkgPCAzOyArK2kpCisJICAgICAgaWYgKGhvc3RfZW52dmFyc1tvbXBfdmFyXS5kZXN0 W2ldICE9IE5VTEwgJiYgcGFyYW1zW2ldICE9IE5VTEwpCisJCSoodW5zaWduZWQgY2hhciAq KSAoaG9zdF9lbnZ2YXJzW29tcF92YXJdLmRlc3RbaV0pCisJCSAgPSAqKHVuc2lnbmVkIGNo YXIgKikgcGFyYW1zW2ldOworCSAgICBicmVhazsKKwkgIGNhc2UgUEFSU0VfU0NIRURVTEU6 CisJICAgICooZW51bSBnb21wX3NjaGVkdWxlX3R5cGUgKikgKGhvc3RfZW52dmFyc1tvbXBf dmFyXS5kZXN0WzBdKQorCSAgICAgID0gKihlbnVtIGdvbXBfc2NoZWR1bGVfdHlwZSAqKSBw YXJhbXNbMF07CisJICAgICooaW50ICopIChob3N0X2VudnZhcnNbb21wX3Zhcl0uZGVzdFsx XSkgPSAqKGludCAqKSBwYXJhbXNbMV07CisJICAgIGJyZWFrOworCSAgY2FzZSBQQVJTRV9C SU5EOgorCSAgICAqKGNoYXIgKikgKGhvc3RfZW52dmFyc1tvbXBfdmFyXS5kZXN0WzBdKQor CQkgID0gKihjaGFyICopIHBhcmFtc1swXTsKKwkgICAgKihjaGFyICopIChob3N0X2VudnZh cnNbb21wX3Zhcl0uZGVzdFsxXSkKKwkJICA9ICooY2hhciAqKSBwYXJhbXNbMV07CisJICAg ICoodW5zaWduZWQgbG9uZyAqKSAoaG9zdF9lbnZ2YXJzW29tcF92YXJdLmRlc3RbMl0pCisJ CSAgPSAqKHVuc2lnbmVkIGxvbmcgKikgcGFyYW1zWzJdOworCSAgICBicmVhazsKKwkgIH0K KyAgICAgIH0KKworICBpZiAoKChub25lICE9IE5VTEwgJiYgZ29tcF9nZXRfaWN2X2ZsYWcg KG5vbmUtPmZsYWdzLCBHT01QX0lDVl9CSU5EKSkKKyAgICAgICB8fCAoYWxsICE9IE5VTEwg JiYgZ29tcF9nZXRfaWN2X2ZsYWcgKGFsbC0+ZmxhZ3MsIEdPTVBfSUNWX0JJTkQpKSkKICAg ICAgICYmIGdvbXBfZ2xvYmFsX2ljdi5iaW5kX3ZhciA9PSBvbXBfcHJvY19iaW5kX2ZhbHNl KQogICAgIGlnbm9yZSA9IHRydWU7Ci0gIGlmIChwYXJzZV91bnNpZ25lZF9sb25nICgiT01Q X01BWF9BQ1RJVkVfTEVWRUxTIiwKLQkJCSAgICZtYXhfYWN0aXZlX2xldmVsc192YXIsIHRy dWUpKQotICAgIGdvbXBfZ2xvYmFsX2ljdi5tYXhfYWN0aXZlX2xldmVsc192YXIKLSAgICAg ID0gKG1heF9hY3RpdmVfbGV2ZWxzX3ZhciA+IGdvbXBfc3VwcG9ydGVkX2FjdGl2ZV9sZXZl bHMpCi0JPyBnb21wX3N1cHBvcnRlZF9hY3RpdmVfbGV2ZWxzIDogbWF4X2FjdGl2ZV9sZXZl bHNfdmFyOwotICBlbHNlCisKKyAgaWYgKCEoKG5vbmUgIT0gTlVMTAorCSAmJiBnb21wX2dl dF9pY3ZfZmxhZyAobm9uZS0+ZmxhZ3MsIEdPTVBfSUNWX01BWF9BQ1RJVkVfTEVWRUxTKSkK KyAgICAgICB8fCAoYWxsICE9IE5VTEwKKwkgICAmJiBnb21wX2dldF9pY3ZfZmxhZyAoYWxs LT5mbGFncywgR09NUF9JQ1ZfTUFYX0FDVElWRV9MRVZFTFMpKSkpCiAgICAgewogICAgICAg Ym9vbCBuZXN0ZWQgPSB0cnVlOworICAgICAgY29uc3QgY2hhciAqZW52ID0gZ2V0ZW52ICgi T01QX05FU1RFRCIpOwogCiAgICAgICAvKiBPTVBfTkVTVEVEIGlzIGRlcHJlY2F0ZWQgaW4g T3Blbk1QIDUuMC4gICovCi0gICAgICBpZiAocGFyc2VfYm9vbGVhbiAoIk9NUF9ORVNURUQi LCAmbmVzdGVkKSkKKyAgICAgIGlmIChwYXJzZV9ib29sZWFuICgiT01QX05FU1RFRCIsIGVu diwgKHZvaWQgKltdKSB7Jm5lc3RlZH0pKQogCWdvbXBfZ2xvYmFsX2ljdi5tYXhfYWN0aXZl X2xldmVsc192YXIKIAkgID0gbmVzdGVkID8gZ29tcF9zdXBwb3J0ZWRfYWN0aXZlX2xldmVs cyA6IDE7CiAgICAgICBlbHNlIGlmIChnb21wX250aHJlYWRzX3Zhcl9saXN0X2xlbiA+IDEg fHwgZ29tcF9iaW5kX3Zhcl9saXN0X2xlbiA+IDEpCiAJZ29tcF9nbG9iYWxfaWN2Lm1heF9h Y3RpdmVfbGV2ZWxzX3ZhciA9IGdvbXBfc3VwcG9ydGVkX2FjdGl2ZV9sZXZlbHM7CiAgICAg fQorCisgIC8qIFByb2Nlc3MgR09NUF8qIHZhcmlhYmxlcyBhbmQgZGVwZW5kZW5jaWVzIGJl dHdlZW4gcGFyc2VkIElDVnMuICAqLworICBwYXJzZV9pbnRfc2VjdXJlICgiR09NUF9ERUJV RyIsICZnb21wX2RlYnVnX3ZhciwgdHJ1ZSk7CisKICAgLyogTWFrZSBzdXJlIE9NUF9QTEFD RVMgYW5kIEdPTVBfQ1BVX0FGRklOSVRZIGVudiB2YXJzIGFyZSBhbHdheXMKICAgICAgcGFy c2VkIGlmIHByZXNlbnQgaW4gdGhlIGVudmlyb25tZW50LiAgSWYgT01QX1BST0NfQklORCB3 YXMgc2V0CiAgICAgIGV4cGxpY2l0bHkgdG8gZmFsc2UsIGRvbid0IHBvcHVsYXRlIHBsYWNl cyBsaXN0IHRob3VnaC4gIElmIHBsYWNlcwpAQCAtMTU0Nyw3ICsyMjQ3LDExIEBAIGluaXRp YWxpemVfZW52ICh2b2lkKQogICAgICAgZ29tcF9zZXRfYWZmaW5pdHlfZm9ybWF0IChlbnYs IHN0cmxlbiAoZW52KSk7CiAgIH0KIAotICB3YWl0X3BvbGljeSA9IHBhcnNlX3dhaXRfcG9s aWN5ICgpOworICBpZiAobm9uZSAhPSBOVUxMICYmIGdvbXBfZ2V0X2ljdl9mbGFnIChub25l LT5mbGFncywgR09NUF9JQ1ZfV0FJVF9QT0xJQ1kpKQorICAgIHdhaXRfcG9saWN5ID0gbm9u ZS0+aWN2cy53YWl0X3BvbGljeTsKKyAgZWxzZSBpZiAoYWxsICE9IE5VTEwgJiYgZ29tcF9n ZXRfaWN2X2ZsYWcgKGFsbC0+ZmxhZ3MsIEdPTVBfSUNWX1dBSVRfUE9MSUNZKSkKKyAgICB3 YWl0X3BvbGljeSA9IGFsbC0+aWN2cy53YWl0X3BvbGljeTsKKwogICBpZiAoIXBhcnNlX3Nw aW5jb3VudCAoIkdPTVBfU1BJTkNPVU5UIiwgJmdvbXBfc3Bpbl9jb3VudF92YXIpKQogICAg IHsKICAgICAgIC8qIFVzaW5nIGEgcm91Z2ggZXN0aW1hdGlvbiBvZiAxMDAwMDAgc3BpbnMg cGVyIG1zZWMsCkBAIC0xNTczLDggKzIyNzcsMjEgQEAgaW5pdGlhbGl6ZV9lbnYgKHZvaWQp CiAgIC8qIE5vdCBzdHJpY3RseSBlbnZpcm9ubWVudCByZWxhdGVkLCBidXQgb3JkZXJpbmcg Y29uc3RydWN0b3JzIGlzIHRyaWNreS4gICovCiAgIHB0aHJlYWRfYXR0cl9pbml0ICgmZ29t cF90aHJlYWRfYXR0cik7CiAKLSAgaWYgKHBhcnNlX3N0YWNrc2l6ZSAoIk9NUF9TVEFDS1NJ WkUiLCAmc3RhY2tzaXplKQotICAgICAgfHwgcGFyc2Vfc3RhY2tzaXplICgiR09NUF9TVEFD S1NJWkUiLCAmc3RhY2tzaXplKQorICBpZiAoIShub25lICE9IE5VTEwgJiYgZ29tcF9nZXRf aWN2X2ZsYWcgKG5vbmUtPmZsYWdzLCBHT01QX0lDVl9TVEFDS1NJWkUpKSkKKyAgICB7Cisg ICAgICBjb25zdCBjaGFyICplbnYgPSBnZXRlbnYgKCJHT01QX1NUQUNLU0laRSIpOworICAg ICAgaWYgKGVudiAhPSBOVUxMCisJICAmJiBwYXJzZV9zdGFja3NpemUgKCJHT01QX1NUQUNL U0laRSIsIGVudiwKKwkJCSAgICAgICh2b2lkICpbM10pIHsmbm9uZS0+aWN2cy5zdGFja3Np emV9KSkKKwlnb21wX3NldF9pY3ZfZmxhZyAoJm5vbmUtPmZsYWdzLCBHT01QX0lDVl9TVEFD S1NJWkUpOworICAgIH0KKyAgaWYgKG5vbmUgIT0gTlVMTCAmJiBnb21wX2dldF9pY3ZfZmxh ZyAobm9uZS0+ZmxhZ3MsIEdPTVBfSUNWX1NUQUNLU0laRSkpCisgICAgc3RhY2tzaXplID0g bm9uZS0+aWN2cy5zdGFja3NpemU7CisgIGVsc2UgaWYgKGFsbCAhPSBOVUxMICYmIGdvbXBf Z2V0X2ljdl9mbGFnIChhbGwtPmZsYWdzLCBHT01QX0lDVl9TVEFDS1NJWkUpKQorICAgIHN0 YWNrc2l6ZSA9IGFsbC0+aWN2cy5zdGFja3NpemU7CisKKyAgaWYgKChub25lICE9IE5VTEwg JiYgZ29tcF9nZXRfaWN2X2ZsYWcgKG5vbmUtPmZsYWdzLCBHT01QX0lDVl9TVEFDS1NJWkUp KQorICAgICAgfHwgKGFsbCAhPSBOVUxMICYmIGdvbXBfZ2V0X2ljdl9mbGFnIChhbGwtPmZs YWdzLCBHT01QX0lDVl9TVEFDS1NJWkUpKQogICAgICAgfHwgR09NUF9ERUZBVUxUX1NUQUNL U0laRSkKICAgICB7CiAgICAgICBpbnQgZXJyOwpAQCAtMTYwMSw3ICsyMzE4LDggQEAgaW5p dGlhbGl6ZV9lbnYgKHZvaWQpCiAKICAgLyogT3BlbkFDQy4gICovCiAKLSAgaWYgKCFwYXJz ZV9pbnQgKCJBQ0NfREVWSUNFX05VTSIsICZnb2FjY19kZXZpY2VfbnVtLCB0cnVlKSkKKyAg aWYgKCFwYXJzZV9pbnQgKCJBQ0NfREVWSUNFX05VTSIsIGdldGVudiAoIkFDQ19ERVZJQ0Vf TlVNIiksCisJCSAgKHZvaWQgKltdKSB7JmdvYWNjX2RldmljZV9udW0sICh2b2lkICopIHRy dWV9KSkKICAgICBnb2FjY19kZXZpY2VfbnVtID0gMDsKIAogICBwYXJzZV9hY2NfZGV2aWNl X3R5cGUgKCk7CmRpZmYgLS1naXQgYS9saWJnb21wL2ljdi1kZXZpY2UuYyBiL2xpYmdvbXAv aWN2LWRldmljZS5jCmluZGV4IDExY2ViMzAuLmQ4YWNmMGUgMTAwNjQ0Ci0tLSBhL2xpYmdv bXAvaWN2LWRldmljZS5jCisrKyBiL2xpYmdvbXAvaWN2LWRldmljZS5jCkBAIC04MCwzICs4 MCwyMCBAQCBvbXBfZ2V0X2RldmljZV9udW0gKHZvaWQpCiB9CiAKIGlhbGlhcyAob21wX2dl dF9kZXZpY2VfbnVtKQorCitpbnQKK29tcF9nZXRfbWF4X3RlYW1zICh2b2lkKQoreworICBy ZXR1cm4gZ29tcF9udGVhbXNfdmFyOworfQorCitpYWxpYXMgKG9tcF9nZXRfbWF4X3RlYW1z KQorCit2b2lkCitvbXBfc2V0X251bV90ZWFtcyAoaW50IG51bV90ZWFtcykKK3sKKyAgaWYg KG51bV90ZWFtcyA+PSAwKQorICAgIGdvbXBfbnRlYW1zX3ZhciA9IG51bV90ZWFtczsKK30K KworaWFsaWFzIChvbXBfc2V0X251bV90ZWFtcykKZGlmZiAtLWdpdCBhL2xpYmdvbXAvaWN2 LmMgYi9saWJnb21wL2ljdi5jCmluZGV4IGRlMTVjYzguLmRmNDIzYzAgMTAwNjQ0Ci0tLSBh L2xpYmdvbXAvaWN2LmMKKysrIGIvbGliZ29tcC9pY3YuYwpAQCAtMTQ5LDE5ICsxNDksNiBA QCBvbXBfZ2V0X3N1cHBvcnRlZF9hY3RpdmVfbGV2ZWxzICh2b2lkKQogfQogCiB2b2lkCi1v bXBfc2V0X251bV90ZWFtcyAoaW50IG51bV90ZWFtcykKLXsKLSAgaWYgKG51bV90ZWFtcyA+ PSAwKQotICAgIGdvbXBfbnRlYW1zX3ZhciA9IG51bV90ZWFtczsKLX0KLQotaW50Ci1vbXBf Z2V0X21heF90ZWFtcyAodm9pZCkKLXsKLSAgcmV0dXJuIGdvbXBfbnRlYW1zX3ZhcjsKLX0K LQotdm9pZAogb21wX3NldF90ZWFtc190aHJlYWRfbGltaXQgKGludCB0aHJlYWRfbGltaXQp CiB7CiAgIGlmICh0aHJlYWRfbGltaXQgPj0gMCkKQEAgLTI3NCw4ICsyNjEsNiBAQCBpYWxp YXMgKG9tcF9nZXRfdGhyZWFkX2xpbWl0KQogaWFsaWFzIChvbXBfc2V0X21heF9hY3RpdmVf bGV2ZWxzKQogaWFsaWFzIChvbXBfZ2V0X21heF9hY3RpdmVfbGV2ZWxzKQogaWFsaWFzIChv bXBfZ2V0X3N1cHBvcnRlZF9hY3RpdmVfbGV2ZWxzKQotaWFsaWFzIChvbXBfc2V0X251bV90 ZWFtcykKLWlhbGlhcyAob21wX2dldF9tYXhfdGVhbXMpCiBpYWxpYXMgKG9tcF9zZXRfdGVh bXNfdGhyZWFkX2xpbWl0KQogaWFsaWFzIChvbXBfZ2V0X3RlYW1zX3RocmVhZF9saW1pdCkK IGlhbGlhcyAob21wX2dldF9jYW5jZWxsYXRpb24pCmRpZmYgLS1naXQgYS9saWJnb21wL2xp YmdvbXAtcGx1Z2luLmggYi9saWJnb21wL2xpYmdvbXAtcGx1Z2luLmgKaW5kZXggYWIzZWQ2 My4uNzFhMzA3ZiAxMDA2NDQKLS0tIGEvbGliZ29tcC9saWJnb21wLXBsdWdpbi5oCisrKyBi L2xpYmdvbXAvbGliZ29tcC1wbHVnaW4uaApAQCAtMTAyLDExICsxMDIsMTEgQEAgc3RydWN0 IGFkZHJfcGFpcgogICB1aW50cHRyX3QgZW5kOwogfTsKIAotLyogVGhpcyBzeW1ib2wgaXMg dG8gbmFtZSBhIHRhcmdldCBzaWRlIHZhcmlhYmxlIHRoYXQgaG9sZHMgdGhlIGRlc2lnbmF0 ZWQKLSAgICdkZXZpY2UgbnVtYmVyJyBvZiB0aGUgdGFyZ2V0IGRldmljZS4gVGhlIHN5bWJv bCBuZWVkcyB0byBiZSBhdmFpbGFibGUgdG8KLSAgIGxpYmdvbXAgY29kZSBhbmQgdGhlIG9m ZmxvYWQgcGx1Z2luICh3aGljaCBpbiB0aGUgbGF0dGVyIGNhc2UgbXVzdCBiZQotICAgc3Ry aW5naWZpZWQpLiAgKi8KLSNkZWZpbmUgR09NUF9ERVZJQ0VfTlVNX1ZBUiBfX2dvbXBfZGV2 aWNlX251bQorLyogVGhpcyBmb2xsb3dpbmcgc3ltYm9sIGlzIHVzZWQgdG8gbmFtZSB0aGUg dGFyZ2V0IHNpZGUgdmFyaWFibGUgc3RydWN0IHRoYXQKKyAgIGhvbGRzIHRoZSBkZXNpZ25h dGVkIElDVnMgb2YgdGhlIHRhcmdldCBkZXZpY2UuIFRoZSBzeW1ib2wgbmVlZHMgdG8gYmUK KyAgIGF2YWlsYWJsZSB0byBsaWJnb21wIGNvZGUgYW5kIHRoZSBvZmZsb2FkIHBsdWdpbiAo d2hpY2ggaW4gdGhlIGxhdHRlciBjYXNlCisgICBtdXN0IGJlIHN0cmluZ2lmaWVkKS4gICov CisjZGVmaW5lIEdPTVBfQURESVRJT05BTF9JQ1ZTIF9fZ29tcF9hZGRpdGlvbmFsX2ljdnMK IAogLyogTWlzY2VsbGFuZW91cyBmdW5jdGlvbnMuICAqLwogZXh0ZXJuIHZvaWQgKkdPTVBf UExVR0lOX21hbGxvYyAoc2l6ZV90KSBfX2F0dHJpYnV0ZV9fICgobWFsbG9jKSk7CmRpZmYg LS1naXQgYS9saWJnb21wL2xpYmdvbXAuaCBiL2xpYmdvbXAvbGliZ29tcC5oCmluZGV4IGMy NDNjNGQuLjc1MTkyNzQgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvbGliZ29tcC5oCisrKyBiL2xp YmdvbXAvbGliZ29tcC5oCkBAIC00NTMsNiArNDUzLDM4IEBAIHN0cnVjdCBnb21wX3RlYW1f c3RhdGUKIAogc3RydWN0IHRhcmdldF9tZW1fZGVzYzsKIAorZW51bSBnb21wX2ljdnMKK3sK KyAgIEdPTVBfSUNWX05URUFNUyA9IDEsCisgICBHT01QX0lDVl9TQ0hFRFVMRSA9IDIsCisg ICBHT01QX0lDVl9TQ0hFRFVMRV9DSFVOS19TSVpFID0gMywKKyAgIEdPTVBfSUNWX0RZTkFN SUMgPSA0LAorICAgR09NUF9JQ1ZfVEVBTVNfVEhSRUFEX0xJTUlUID0gNSwKKyAgIEdPTVBf SUNWX1RIUkVBRF9MSU1JVCA9IDYsCisgICBHT01QX0lDVl9OVEhSRUFEUyA9IDcsCisgICBH T01QX0lDVl9OVEhSRUFEU19MSVNUID0gOCwKKyAgIEdPTVBfSUNWX05USFJFQURTX0xJU1Rf TEVOID0gOSwKKyAgIEdPTVBfSUNWX0JJTkQgPSAxMCwKKyAgIEdPTVBfSUNWX0JJTkRfTElT VCA9IDExLAorICAgR09NUF9JQ1ZfQklORF9MSVNUX0xFTiA9IDEyLAorICAgR09NUF9JQ1Zf TUFYX0FDVElWRV9MRVZFTFMgPSAxMywKKyAgIEdPTVBfSUNWX1dBSVRfUE9MSUNZID0gMTQs CisgICBHT01QX0lDVl9TVEFDS1NJWkUgPSAxNSwKKyAgIEdPTVBfSUNWX0RFRkFVTFRfREVW SUNFID0gMTYsCisgICBHT01QX0lDVl9DQU5DRUxMQVRJT04gPSAxNywKKyAgIEdPTVBfSUNW X0RJU1BMQVlfQUZGSU5JVFkgPSAxOCwKKyAgIEdPTVBfSUNWX1RBUkdFVF9PRkZMT0FEID0g MTksCisgICBHT01QX0lDVl9NQVhfVEFTS19QUklPUklUWSA9IDIwLAorICAgR09NUF9JQ1Zf QUxMT0NBVE9SID0gMjEKK307CisKK2VudW0gZ29tcF9kZXZpY2VfbnVtCit7CisgIEdPTVBf REVWSUNFX05VTV9GT1JfREVWID0gLTEsCisgIEdPTVBfREVWSUNFX05VTV9GT1JfQUxMID0g LTIsCisgIEdPTVBfREVWSUNFX05VTV9GT1JfTk9fU1VGRklYID0gLTMKK307CisKIC8qIFRo ZXNlIGFyZSB0aGUgT3Blbk1QIDQuMCBJbnRlcm5hbCBDb250cm9sIFZhcmlhYmxlcyBkZXNj cmliZWQgaW4KICAgIHNlY3Rpb24gMi4zLjEuICBUaG9zZSBkZXNjcmliZWQgYXMgaGF2aW5n IG9uZSBjb3B5IHBlciB0YXNrIGFyZQogICAgc3RvcmVkIHdpdGhpbiB0aGUgc3RydWN0dXJl OyB0aG9zZSBkZXNjcmliZWQgYXMgaGF2aW5nIG9uZSBjb3B5CkBAIC00NzIsNiArNTA0LDgw IEBAIHN0cnVjdCBnb21wX3Rhc2tfaWN2CiAgIHN0cnVjdCB0YXJnZXRfbWVtX2Rlc2MgKnRh cmdldF9kYXRhOwogfTsKIAorZW51bSBnb21wX2Vudl9zdWZmaXgKK3sKKyAgR09NUF9FTlZf U1VGRklYX1VOS05PV04gPSAwLAorICBHT01QX0VOVl9TVUZGSVhfTk9ORSA9IDEsCisgIEdP TVBfRU5WX1NVRkZJWF9ERVYgPSAyLAorICBHT01QX0VOVl9TVUZGSVhfQUxMID0gNCwKKyAg R09NUF9FTlZfU1VGRklYX0RFVl9YID0gOAorfTsKKworLyogU3RydWN0IHRoYXQgY29udGFp bnMgYWxsIElDVnMgZm9yIHdoaWNoIHdlIG5lZWQgdG8gc3RvcmUgaW5pdGlhbCB2YWx1ZXMu CisgICBLZWVwaW5nIHRoZSBpbml0aWFsIHZhbHVlcyBpcyBuZWVkZWQgZm9yIG9tcF9kaXNw bGF5X2Vudi4gIE1vcmVvdmVyIGluaXRpYWwKKyAgIF9ERVYgYW5kIF9BTEwgdmFyaWFudHMg b2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBhbHNvIHVzZWQgdG8gZGV0ZXJtaW5lCisg ICBhY3R1YWxseSB1c2VkIHZhbHVlcyBmb3IgZGV2aWNlcyBhbmQgZm9yIHRoZSBob3N0LiAg Ki8KK3N0cnVjdCBnb21wX2luaXRpYWxfaWN2cworeworICB1bnNpZ25lZCBsb25nICpudGhy ZWFkc192YXJfbGlzdDsKKyAgY2hhciAqYmluZF92YXJfbGlzdDsKKyAgdW5zaWduZWQgbG9u ZyBudGhyZWFkc192YXI7CisgIHVuc2lnbmVkIGxvbmcgbnRocmVhZHNfdmFyX2xpc3RfbGVu OworICB1bnNpZ25lZCBsb25nIGJpbmRfdmFyX2xpc3RfbGVuOworICB1bnNpZ25lZCBsb25n IHN0YWNrc2l6ZTsKKyAgaW50IHJ1bl9zY2hlZF9jaHVua19zaXplOworICBpbnQgZGVmYXVs dF9kZXZpY2VfdmFyOworICBpbnQgbnRlYW1zX3ZhcjsKKyAgaW50IHRlYW1zX3RocmVhZF9s aW1pdF92YXI7CisgIGludCB3YWl0X3BvbGljeTsKKyAgdW5zaWduZWQgaW50IHRocmVhZF9s aW1pdF92YXI7CisgIGVudW0gZ29tcF9zY2hlZHVsZV90eXBlIHJ1bl9zY2hlZF92YXI7Cisg IGJvb2wgZHluX3ZhcjsKKyAgdW5zaWduZWQgY2hhciBtYXhfYWN0aXZlX2xldmVsc192YXI7 CisgIGNoYXIgYmluZF92YXI7Cit9OworCitzdHJ1Y3QgZ29tcF9kZWZhdWx0X2ljdgorewor ICB1bnNpZ25lZCBsb25nIG50aHJlYWRzX3ZhcjsKKyAgZW51bSBnb21wX3NjaGVkdWxlX3R5 cGUgcnVuX3NjaGVkX3ZhcjsKKyAgaW50IHJ1bl9zY2hlZF9jaHVua19zaXplOworICBpbnQg ZGVmYXVsdF9kZXZpY2VfdmFyOworICB1bnNpZ25lZCBpbnQgdGhyZWFkX2xpbWl0X3ZhcjsK KyAgaW50IG50ZWFtc192YXI7CisgIGludCB0ZWFtc190aHJlYWRfbGltaXRfdmFyOworICBi b29sIGR5bl92YXI7CisgIHVuc2lnbmVkIGNoYXIgbWF4X2FjdGl2ZV9sZXZlbHNfdmFyOwor ICBjaGFyIGJpbmRfdmFyOworfTsKKworLyogIERFVklDRV9OVU0gIi0xIiBpcyByZXNlcnZl ZCBmb3IgIl9ERVYiIGljdnMuCisgICAgREVWSUNFX05VTSAiLTIiIGlzIHJlc2VydmVkIGZv ciAiX0FMTCIgaWN2cy4KKyAgICBERVZJQ0VfTlVNICItMyIgaXMgcmVzZXJ2ZWQgZm9yIElD VnMgd2l0aG91dCBzdWZmaXguCisgICAgTm9uLW5lZ2F0aXZlIERFVklDRV9OVU0gaXMgZm9y ICJfREVWX1giIGljdnMuICAqLworc3RydWN0IGdvbXBfaWN2X2xpc3QKK3sKKyAgaW50IGRl dmljZV9udW07CisgIHVpbnQzMl90IGZsYWdzOworICBzdHJ1Y3QgZ29tcF9pbml0aWFsX2lj dnMgaWN2czsKKyAgc3RydWN0IGdvbXBfaWN2X2xpc3QgKm5leHQ7Cit9OworCitzdHJ1Y3Qg Z29tcF9vZmZsb2FkX2ljdnMKK3sKKyAgaW50IGRldmljZV9udW07CisgIGludCBkZWZhdWx0 X2RldmljZTsKKyAgaW50IG50ZWFtczsKKyAgaW50IHRlYW1zX3RocmVhZF9saW1pdDsKK307 CisKK3N0cnVjdCBnb21wX29mZmxvYWRfaWN2X2xpc3QKK3sKKyAgaW50IGRldmljZV9udW07 CisgIHN0cnVjdCBnb21wX29mZmxvYWRfaWN2cyBpY3ZzOworICBzdHJ1Y3QgZ29tcF9vZmZs b2FkX2ljdl9saXN0ICpuZXh0OworfTsKKwogZW51bSBnb21wX3RhcmdldF9vZmZsb2FkX3QK IHsKICAgR09NUF9UQVJHRVRfT0ZGTE9BRF9ERUZBVUxULApAQCAtNTAzLDYgKzYwOSw5IEBA IGV4dGVybiBib29sIGdvbXBfZGlzcGxheV9hZmZpbml0eV92YXI7CiBleHRlcm4gY2hhciAq Z29tcF9hZmZpbml0eV9mb3JtYXRfdmFyOwogZXh0ZXJuIHNpemVfdCBnb21wX2FmZmluaXR5 X2Zvcm1hdF9sZW47CiBleHRlcm4gdWludHB0cl90IGdvbXBfZGVmX2FsbG9jYXRvcjsKK2V4 dGVybiBjb25zdCBzdHJ1Y3QgZ29tcF9kZWZhdWx0X2ljdiBnb21wX2RlZmF1bHRfaWN2X3Zh bHVlczsKK2V4dGVybiBzdHJ1Y3QgZ29tcF9pY3ZfbGlzdCAqZ29tcF9pbml0aWFsX2ljdl9s aXN0OworZXh0ZXJuIHN0cnVjdCBnb21wX29mZmxvYWRfaWN2X2xpc3QgKmdvbXBfb2ZmbG9h ZF9pY3ZfbGlzdDsKIGV4dGVybiBpbnQgZ29hY2NfZGV2aWNlX251bTsKIGV4dGVybiBjaGFy ICpnb2FjY19kZXZpY2VfdHlwZTsKIGV4dGVybiBpbnQgZ29hY2NfZGVmYXVsdF9kaW1zW0dP TVBfRElNX01BWF07CkBAIC05MjcsNiArMTAzNiwxMSBAQCBleHRlcm4gdm9pZCBnb21wX2Rp c3BsYXlfYWZmaW5pdHlfdGhyZWFkIChnb21wX3RocmVhZF9oYW5kbGUsCiAJCQkJCSAgc3Ry dWN0IGdvbXBfdGVhbV9zdGF0ZSAqLAogCQkJCQkgIHVuc2lnbmVkIGludCkgX19hdHRyaWJ1 dGVfXygoY29sZCkpOwogCisvKiBlbnYuYyAqLworCitleHRlcm4gc3RydWN0IGdvbXBfaWN2 X2xpc3QgKmdvbXBfZ2V0X2luaXRpYWxfaWN2X2l0ZW0gKGludCBkZXZfbnVtKTsKK2V4dGVy biBib29sIGdvbXBfZ2V0X2ljdl9mbGFnICh1aW50MzJfdCB2YWx1ZSwgZW51bSBnb21wX2lj dnMgaWN2KTsKKwogLyogaXRlci5jICovCiAKIGV4dGVybiBpbnQgZ29tcF9pdGVyX3N0YXRp Y19uZXh0IChsb25nICosIGxvbmcgKik7CmRpZmYgLS1naXQgYS9saWJnb21wL3BsdWdpbi9w bHVnaW4tZ2NuLmMgYi9saWJnb21wL3BsdWdpbi9wbHVnaW4tZ2NuLmMKaW5kZXggZWEzMjdi Zi4uOTU3NDU1YSAxMDA2NDQKLS0tIGEvbGliZ29tcC9wbHVnaW4vcGx1Z2luLWdjbi5jCisr KyBiL2xpYmdvbXAvcGx1Z2luL3BsdWdpbi1nY24uYwpAQCAtMzM2Nyw2ICszMzY3LDcgQEAg R09NUF9PRkZMT0FEX2xvYWRfaW1hZ2UgKGludCBvcmQsIHVuc2lnbmVkIHZlcnNpb24sIGNv bnN0IHZvaWQgKnRhcmdldF9kYXRhLAogICBzdHJ1Y3Qga2VybmVsX2luZm8gKmtlcm5lbDsK ICAgaW50IGtlcm5lbF9jb3VudCA9IGltYWdlX2Rlc2MtPmtlcm5lbF9jb3VudDsKICAgdW5z aWduZWQgdmFyX2NvdW50ID0gaW1hZ2VfZGVzYy0+Z2xvYmFsX3ZhcmlhYmxlX2NvdW50Owor ICAvKiBDdXJyZW50bHksICJvdGhlcnMiIGlzIGEgc3RydWN0IG9mIElDVlMuICAqLwogICBp bnQgb3RoZXJfY291bnQgPSAxOwogCiAgIGFnZW50ID0gZ2V0X2FnZW50X2luZm8gKG9yZCk7 CkBAIC0zNDY0LDM2ICszNDY1LDQwIEBAIEdPTVBfT0ZGTE9BRF9sb2FkX2ltYWdlIChpbnQg b3JkLCB1bnNpZ25lZCB2ZXJzaW9uLCBjb25zdCB2b2lkICp0YXJnZXRfZGF0YSwKIAl9CiAg ICAgfQogCi0gIEdDTl9ERUJVRyAoIkxvb2tpbmcgZm9yIHZhcmlhYmxlICVzXG4iLCBYU1RS SU5HIChHT01QX0RFVklDRV9OVU1fVkFSKSk7CisgIEdDTl9ERUJVRyAoIkxvb2tpbmcgZm9y IHZhcmlhYmxlICVzXG4iLCBYU1RSSU5HIChHT01QX0FERElUSU9OQUxfSUNWUykpOwogCiAg IGhzYV9zdGF0dXNfdCBzdGF0dXM7CiAgIGhzYV9leGVjdXRhYmxlX3N5bWJvbF90IHZhcl9z eW1ib2w7CiAgIHN0YXR1cyA9IGhzYV9mbnMuaHNhX2V4ZWN1dGFibGVfZ2V0X3N5bWJvbF9m biAoYWdlbnQtPmV4ZWN1dGFibGUsIE5VTEwsCi0JCQkJCQkgWFNUUklORyAoR09NUF9ERVZJ Q0VfTlVNX1ZBUiksCisJCQkJCQkgWFNUUklORyAoR09NUF9BRERJVElPTkFMX0lDVlMpLAog CQkJCQkJIGFnZW50LT5pZCwgMCwgJnZhcl9zeW1ib2wpOwogICBpZiAoc3RhdHVzID09IEhT QV9TVEFUVVNfU1VDQ0VTUykKICAgICB7Ci0gICAgICB1aW50NjRfdCBkZXZpY2VfbnVtX3Zh cnB0cjsKLSAgICAgIHVpbnQzMl90IGRldmljZV9udW1fdmFyc2l6ZTsKKyAgICAgIHVpbnQ2 NF90IHZhcnB0cjsKKyAgICAgIHVpbnQzMl90IHZhcnNpemU7CiAKICAgICAgIHN0YXR1cyA9 IGhzYV9mbnMuaHNhX2V4ZWN1dGFibGVfc3ltYm9sX2dldF9pbmZvX2ZuCiAJKHZhcl9zeW1i b2wsIEhTQV9FWEVDVVRBQkxFX1NZTUJPTF9JTkZPX1ZBUklBQkxFX0FERFJFU1MsCi0JICZk ZXZpY2VfbnVtX3ZhcnB0cik7CisJICZ2YXJwdHIpOwogICAgICAgaWYgKHN0YXR1cyAhPSBI U0FfU1RBVFVTX1NVQ0NFU1MpCiAJaHNhX2ZhdGFsICgiQ291bGQgbm90IGV4dHJhY3QgYSB2 YXJpYWJsZSBmcm9tIGl0cyBzeW1ib2wiLCBzdGF0dXMpOwogICAgICAgc3RhdHVzID0gaHNh X2Zucy5oc2FfZXhlY3V0YWJsZV9zeW1ib2xfZ2V0X2luZm9fZm4KIAkodmFyX3N5bWJvbCwg SFNBX0VYRUNVVEFCTEVfU1lNQk9MX0lORk9fVkFSSUFCTEVfU0laRSwKLQkgJmRldmljZV9u dW1fdmFyc2l6ZSk7CisJICZ2YXJzaXplKTsKICAgICAgIGlmIChzdGF0dXMgIT0gSFNBX1NU QVRVU19TVUNDRVNTKQotCWhzYV9mYXRhbCAoIkNvdWxkIG5vdCBleHRyYWN0IGEgdmFyaWFi bGUgc2l6ZSBmcm9tIGl0cyBzeW1ib2wiLCBzdGF0dXMpOworCWhzYV9mYXRhbCAoIkNvdWxk IG5vdCBleHRyYWN0IGEgdmFyaWFibGUgc2l6ZSBmcm9tIGl0cyBzeW1ib2wiLAorCQkgICBz dGF0dXMpOwogCi0gICAgICBwYWlyLT5zdGFydCA9IGRldmljZV9udW1fdmFycHRyOwotICAg ICAgcGFpci0+ZW5kID0gZGV2aWNlX251bV92YXJwdHIgKyBkZXZpY2VfbnVtX3ZhcnNpemU7 CisgICAgICBwYWlyLT5zdGFydCA9IHZhcnB0cjsKKyAgICAgIHBhaXItPmVuZCA9IHZhcnB0 ciArIHZhcnNpemU7CiAgICAgfQogICBlbHNlCi0gICAgLyogVGhlICdHT01QX0RFVklDRV9O VU1fVkFSJyB2YXJpYWJsZSB3YXMgbm90IGluIHRoaXMgaW1hZ2UuICAqLwotICAgIHBhaXIt PnN0YXJ0ID0gcGFpci0+ZW5kID0gMDsKLSAgcGFpcisrOworICAgIHsKKyAgICAgIC8qIFRo ZSB2YXJpYWJsZSB3YXMgbm90IGluIHRoaXMgaW1hZ2UuICAqLworICAgICAgR0NOX0RFQlVH ICgiVmFyaWFibGUgbm90IGZvdW5kIGluIGltYWdlOiAlc1xuIiwKKwkJIFhTVFJJTkcgKEdP TVBfQURESVRJT05BTF9JQ1ZTKSk7CisgICAgICBwYWlyLT5zdGFydCA9IHBhaXItPmVuZCA9 IDA7CisgICAgfQogCiAgIC8qIEVuc3VyZSB0aGF0IGNvbnN0cnVjdG9ycyBhcmUgcnVuIGZp cnN0LiAgKi8KICAgc3RydWN0IEdPTVBfa2VybmVsX2xhdW5jaF9hdHRyaWJ1dGVzIGtsYSA9 CmRpZmYgLS1naXQgYS9saWJnb21wL3BsdWdpbi9wbHVnaW4tbnZwdHguYyBiL2xpYmdvbXAv cGx1Z2luL3BsdWdpbi1udnB0eC5jCmluZGV4IGJjNjNlMjc0Li5hMTJmMWFjIDEwMDY0NAot LS0gYS9saWJnb21wL3BsdWdpbi9wbHVnaW4tbnZwdHguYworKysgYi9saWJnb21wL3BsdWdp bi9wbHVnaW4tbnZwdHguYwpAQCAtMTMwNSw3ICsxMzA1LDcgQEAgR09NUF9PRkZMT0FEX2xv YWRfaW1hZ2UgKGludCBvcmQsIHVuc2lnbmVkIHZlcnNpb24sIGNvbnN0IHZvaWQgKnRhcmdl dF9kYXRhLAogICBmbl9lbnRyaWVzID0gaW1nX2hlYWRlci0+Zm5fbnVtOwogICBmbl9kZXNj cyA9IGltZ19oZWFkZXItPmZuX2Rlc2NzOwogCi0gIC8qIEN1cnJlbnRseSwgdGhlIG9ubHkg b3RoZXIgZW50cnkga2luZCBpcyAnZGV2aWNlIG51bWJlcicuICAqLworICAvKiBDdXJyZW50 bHksIG90aGVyX2VudHJpZXMgY29udGFpbnMgb25seSB0aGUgc3RydWN0IG9mIElDVnMuICAq LwogICBvdGhlcl9lbnRyaWVzID0gMTsKIAogICB0YXJnX3RibCA9IEdPTVBfUExVR0lOX21h bGxvYyAoc2l6ZW9mIChzdHJ1Y3QgYWRkcl9wYWlyKQpAQCAtMTM1OCwyMCArMTM1OCwxOSBA QCBHT01QX09GRkxPQURfbG9hZF9pbWFnZSAoaW50IG9yZCwgdW5zaWduZWQgdmVyc2lvbiwg Y29uc3Qgdm9pZCAqdGFyZ2V0X2RhdGEsCiAgICAgICB0YXJnX3RibC0+ZW5kID0gdGFyZ190 YmwtPnN0YXJ0ICsgYnl0ZXM7CiAgICAgfQogCi0gIENVZGV2aWNlcHRyIGRldmljZV9udW1f dmFycHRyOwotICBzaXplX3QgZGV2aWNlX251bV92YXJzaXplOwotICBDVXJlc3VsdCByID0g Q1VEQV9DQUxMX05PQ0hFQ0sgKGN1TW9kdWxlR2V0R2xvYmFsLCAmZGV2aWNlX251bV92YXJw dHIsCi0JCQkJICAmZGV2aWNlX251bV92YXJzaXplLCBtb2R1bGUsCi0JCQkJICBYU1RSSU5H IChHT01QX0RFVklDRV9OVU1fVkFSKSk7CisgIENVZGV2aWNlcHRyIHZhcnB0cjsKKyAgc2l6 ZV90IHZhcnNpemU7CisgIENVcmVzdWx0IHIgPSBDVURBX0NBTExfTk9DSEVDSyAoY3VNb2R1 bGVHZXRHbG9iYWwsICZ2YXJwdHIsICZ2YXJzaXplLAorCQkJCSAgbW9kdWxlLCBYU1RSSU5H IChHT01QX0FERElUSU9OQUxfSUNWUykpOworCiAgIGlmIChyID09IENVREFfU1VDQ0VTUykK ICAgICB7Ci0gICAgICB0YXJnX3RibC0+c3RhcnQgPSAodWludHB0cl90KSBkZXZpY2VfbnVt X3ZhcnB0cjsKLSAgICAgIHRhcmdfdGJsLT5lbmQgPSAodWludHB0cl90KSAoZGV2aWNlX251 bV92YXJwdHIgKyBkZXZpY2VfbnVtX3ZhcnNpemUpOworICAgICAgdGFyZ190YmwtPnN0YXJ0 ID0gKHVpbnRwdHJfdCkgdmFycHRyOworICAgICAgdGFyZ190YmwtPmVuZCA9ICh1aW50cHRy X3QpICh2YXJwdHIgKyB2YXJzaXplKTsKICAgICB9CiAgIGVsc2UKLSAgICAvKiBUaGUgJ0dP TVBfREVWSUNFX05VTV9WQVInIHZhcmlhYmxlIHdhcyBub3QgaW4gdGhpcyBpbWFnZS4gICov CisgICAgLyogVGhlIHZhcmlhYmxlIHdhcyBub3QgaW4gdGhpcyBpbWFnZS4gICovCiAgICAg dGFyZ190YmwtPnN0YXJ0ID0gdGFyZ190YmwtPmVuZCA9IDA7Ci0gIHRhcmdfdGJsKys7CiAK ICAgbnZwdHhfc2V0X2Nsb2NrdGljayAobW9kdWxlLCBkZXYpOwogCmRpZmYgLS1naXQgYS9s aWJnb21wL3RhcmdldC5jIGIvbGliZ29tcC90YXJnZXQuYwppbmRleCAxMzVkYjFkLi5mYmMy ODI3IDEwMDY0NAotLS0gYS9saWJnb21wL3RhcmdldC5jCisrKyBiL2xpYmdvbXAvdGFyZ2V0 LmMKQEAgLTIxMDgsNiArMjEwOCw2OCBAQCBnb21wX3VwZGF0ZSAoc3RydWN0IGdvbXBfZGV2 aWNlX2Rlc2NyICpkZXZpY2VwLCBzaXplX3QgbWFwbnVtLCB2b2lkICoqaG9zdGFkZHJzLAog ICBnb21wX211dGV4X3VubG9jayAoJmRldmljZXAtPmxvY2spOwogfQogCitzdGF0aWMgc3Ry dWN0IGdvbXBfb2ZmbG9hZF9pY3ZfbGlzdCAqCitnb21wX2dldF9vZmZsb2FkX2ljdl9pdGVt IChpbnQgZGV2X251bSkKK3sKKyAgc3RydWN0IGdvbXBfb2ZmbG9hZF9pY3ZfbGlzdCAqbCA9 IGdvbXBfb2ZmbG9hZF9pY3ZfbGlzdDsKKyAgd2hpbGUgKGwgIT0gTlVMTCAmJiBsLT5kZXZp Y2VfbnVtICE9IGRldl9udW0pCisgICAgbCA9IGwtPm5leHQ7CisKKyAgcmV0dXJuIGw7Cit9 CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgJ2dvbXBfbG9hZF9pbWFnZV90b19kZXZpY2Un LiAgUmV0dXJucyB0aGUgSUNWIHZhbHVlcworICAgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2Ug bnVtIGFuZCB0aGUgdmFyaWFibGUgaGllcmFyY2h5CisgICAoX0RFVl80MiwgX0RFViwgX0FM TCkuICBJZiBubyBJQ1Ygd2FzIGluaXRpYWxseSBjb25maWd1cmVkIGZvciB0aGUgZ2l2ZW4K KyAgIGRldmljZSBhbmQgdGh1cyBubyBpdGVtIHdpdGggdGhhdCBkZXZpY2UgbnVtYmVyIGlz IGNvbnRhaW5lZCBpbgorICAgZ29tcF9vZmZsb2FkX2ljdl9saXN0LCB0aGVuIGEgbmV3IGl0 ZW0gaXMgY3JlYXRlZCBhbmQgYWRkZWQgdG8gdGhlIGxpc3QuICAqLworCitzdGF0aWMgc3Ry dWN0IGdvbXBfb2ZmbG9hZF9pY3ZzICoKK2dldF9nb21wX29mZmxvYWRfaWN2cyAoaW50IGRl dl9udW0pCit7CisgIHN0cnVjdCBnb21wX2ljdl9saXN0ICpkZXYKKyAgICA9IGdvbXBfZ2V0 X2luaXRpYWxfaWN2X2l0ZW0gKEdPTVBfREVWSUNFX05VTV9GT1JfREVWKTsKKyAgc3RydWN0 IGdvbXBfaWN2X2xpc3QgKmFsbAorICAgID0gZ29tcF9nZXRfaW5pdGlhbF9pY3ZfaXRlbSAo R09NUF9ERVZJQ0VfTlVNX0ZPUl9BTEwpOworICBzdHJ1Y3QgZ29tcF9pY3ZfbGlzdCAqZGV2 X3ggPSBnb21wX2dldF9pbml0aWFsX2ljdl9pdGVtIChkZXZfbnVtKTsKKyAgc3RydWN0IGdv bXBfb2ZmbG9hZF9pY3ZfbGlzdCAqb2ZmbG9hZF9pY3ZzCisgICAgPSBnb21wX2dldF9vZmZs b2FkX2ljdl9pdGVtIChkZXZfbnVtKTsKKworICBpZiAob2ZmbG9hZF9pY3ZzICE9IE5VTEwp CisgICAgcmV0dXJuICZvZmZsb2FkX2ljdnMtPmljdnM7CisKKyAgc3RydWN0IGdvbXBfb2Zm bG9hZF9pY3ZfbGlzdCAqbmV3CisgICAgPSAoc3RydWN0IGdvbXBfb2ZmbG9hZF9pY3ZfbGlz dCAqKSBnb21wX21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgZ29tcF9vZmZsb2FkX2ljdl9saXN0 KSk7CisKKyAgbmV3LT5kZXZpY2VfbnVtID0gZGV2X251bTsKKyAgbmV3LT5pY3ZzLmRldmlj ZV9udW0gPSBkZXZfbnVtOworICBuZXctPm5leHQgPSBnb21wX29mZmxvYWRfaWN2X2xpc3Q7 CisKKyAgaWYgKGRldl94ICE9IE5VTEwgJiYgZ29tcF9nZXRfaWN2X2ZsYWcgKGRldl94LT5m bGFncywgR09NUF9JQ1ZfTlRFQU1TKSkKKyAgICBuZXctPmljdnMubnRlYW1zID0gZGV2X3gt PmljdnMubnRlYW1zX3ZhcjsKKyAgZWxzZSBpZiAoZGV2ICE9IE5VTEwgJiYgZ29tcF9nZXRf aWN2X2ZsYWcgKGRldi0+ZmxhZ3MsIEdPTVBfSUNWX05URUFNUykpCisgICAgbmV3LT5pY3Zz Lm50ZWFtcyA9IGRldi0+aWN2cy5udGVhbXNfdmFyOworICBlbHNlIGlmIChhbGwgIT0gTlVM TCAmJiBnb21wX2dldF9pY3ZfZmxhZyAoYWxsLT5mbGFncywgR09NUF9JQ1ZfTlRFQU1TKSkK KyAgICBuZXctPmljdnMubnRlYW1zID0gYWxsLT5pY3ZzLm50ZWFtc192YXI7CisgIGVsc2UK KyAgICBuZXctPmljdnMubnRlYW1zID0gZ29tcF9kZWZhdWx0X2ljdl92YWx1ZXMubnRlYW1z X3ZhcjsKKworICBpZiAoZGV2X3ggIT0gTlVMTAorICAgICAgJiYgZ29tcF9nZXRfaWN2X2Zs YWcgKGRldl94LT5mbGFncywgR09NUF9JQ1ZfREVGQVVMVF9ERVZJQ0UpKQorICAgIG5ldy0+ aWN2cy5kZWZhdWx0X2RldmljZSA9IGRldl94LT5pY3ZzLmRlZmF1bHRfZGV2aWNlX3ZhcjsK KyAgZWxzZSBpZiAoZGV2ICE9IE5VTEwKKwkgICAmJiBnb21wX2dldF9pY3ZfZmxhZyAoZGV2 LT5mbGFncywgR09NUF9JQ1ZfREVGQVVMVF9ERVZJQ0UpKQorICAgIG5ldy0+aWN2cy5kZWZh dWx0X2RldmljZSA9IGRldi0+aWN2cy5kZWZhdWx0X2RldmljZV92YXI7CisgIGVsc2UgaWYg KGFsbCAhPSBOVUxMCisJICAgJiYgZ29tcF9nZXRfaWN2X2ZsYWcgKGFsbC0+ZmxhZ3MsIEdP TVBfSUNWX0RFRkFVTFRfREVWSUNFKSkKKyAgICBuZXctPmljdnMuZGVmYXVsdF9kZXZpY2Ug PSBhbGwtPmljdnMuZGVmYXVsdF9kZXZpY2VfdmFyOworICBlbHNlCisgICAgbmV3LT5pY3Zz LmRlZmF1bHRfZGV2aWNlID0gZ29tcF9kZWZhdWx0X2ljdl92YWx1ZXMuZGVmYXVsdF9kZXZp Y2VfdmFyOworCisgIGdvbXBfb2ZmbG9hZF9pY3ZfbGlzdCA9IG5ldzsKKyAgcmV0dXJuICZu ZXctPmljdnM7Cit9CisKIC8qIExvYWQgaW1hZ2UgcG9pbnRlZCBieSBUQVJHRVRfREFUQSB0 byB0aGUgZGV2aWNlLCBzcGVjaWZpZWQgYnkgREVWSUNFUC4KICAgIEFuZCBpbnNlcnQgdG8g c3BsYXkgdHJlZSB0aGUgbWFwcGluZyBiZXR3ZWVuIGFkZHJlc3NlcyBmcm9tIEhPU1RfVEFC TEUgYW5kCiAgICBmcm9tIGxvYWRlZCB0YXJnZXQgaW1hZ2UuICBXZSByZWx5IGluIHRoZSBo b3N0IGFuZCBkZXZpY2UgY29tcGlsZXIKQEAgLTIxMjgsOSArMjE5MCw2IEBAIGdvbXBfbG9h ZF9pbWFnZV90b19kZXZpY2UgKHN0cnVjdCBnb21wX2RldmljZV9kZXNjciAqZGV2aWNlcCwg dW5zaWduZWQgdmVyc2lvbiwKICAgaW50IG51bV9mdW5jcyA9IGhvc3RfZnVuY3NfZW5kIC0g aG9zdF9mdW5jX3RhYmxlOwogICBpbnQgbnVtX3ZhcnMgID0gKGhvc3RfdmFyc19lbmQgLSBo b3N0X3Zhcl90YWJsZSkgLyAyOwogCi0gIC8qIE90aGVycyBjdXJyZW50bHkgaXMgb25seSAn ZGV2aWNlX251bScgKi8KLSAgaW50IG51bV9vdGhlcnMgPSAxOwotCiAgIC8qIExvYWQgaW1h Z2UgdG8gZGV2aWNlIGFuZCBnZXQgdGFyZ2V0IGFkZHJlc3NlcyBmb3IgdGhlIGltYWdlLiAg Ki8KICAgc3RydWN0IGFkZHJfcGFpciAqdGFyZ2V0X3RhYmxlID0gTlVMTDsKICAgaW50IGks IG51bV90YXJnZXRfZW50cmllczsKQEAgLTIxNDAsOCArMjE5OSw4IEBAIGdvbXBfbG9hZF9p bWFnZV90b19kZXZpY2UgKHN0cnVjdCBnb21wX2RldmljZV9kZXNjciAqZGV2aWNlcCwgdW5z aWduZWQgdmVyc2lvbiwKIAkJCQl0YXJnZXRfZGF0YSwgJnRhcmdldF90YWJsZSk7CiAKICAg aWYgKG51bV90YXJnZXRfZW50cmllcyAhPSBudW1fZnVuY3MgKyBudW1fdmFycwotICAgICAg LyogT3RoZXJzIChkZXZpY2VfbnVtKSBhcmUgaW5jbHVkZWQgYXMgdHJhaWxpbmcgZW50cmll cyBpbiBwYWlyIGxpc3QuICAqLwotICAgICAgJiYgbnVtX3RhcmdldF9lbnRyaWVzICE9IG51 bV9mdW5jcyArIG51bV92YXJzICsgbnVtX290aGVycykKKyAgICAgIC8qICIrMSIgZHVlIHRv IHRoZSBhZGRpdGlvbmFsIElDViBzdHJ1Y3QuICAqLworICAgICAgJiYgbnVtX3RhcmdldF9l bnRyaWVzICE9IG51bV9mdW5jcyArIG51bV92YXJzICsgMSkKICAgICB7CiAgICAgICBnb21w X211dGV4X3VubG9jayAoJmRldmljZXAtPmxvY2spOwogICAgICAgaWYgKGlzX3JlZ2lzdGVy X2xvY2spCkBAIC0yMTUzLDcgKzIyMTIsOSBAQCBnb21wX2xvYWRfaW1hZ2VfdG9fZGV2aWNl IChzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3IgKmRldmljZXAsIHVuc2lnbmVkIHZlcnNpb24s CiAKICAgLyogSW5zZXJ0IGhvc3QtdGFyZ2V0IGFkZHJlc3MgbWFwcGluZyBpbnRvIHNwbGF5 IHRyZWUuICAqLwogICBzdHJ1Y3QgdGFyZ2V0X21lbV9kZXNjICp0Z3QgPSBnb21wX21hbGxv YyAoc2l6ZW9mICgqdGd0KSk7Ci0gIHRndC0+YXJyYXkgPSBnb21wX21hbGxvYyAoKG51bV9m dW5jcyArIG51bV92YXJzKSAqIHNpemVvZiAoKnRndC0+YXJyYXkpKTsKKyAgLyogIisxIiBk dWUgdG8gdGhlIGFkZGl0aW9uYWwgSUNWIHN0cnVjdC4gICovCisgIHRndC0+YXJyYXkgPSBn b21wX21hbGxvYyAoKG51bV9mdW5jcyArIG51bV92YXJzICsgMSkKKwkJCSAgICAqIHNpemVv ZiAoKnRndC0+YXJyYXkpKTsKICAgdGd0LT5yZWZjb3VudCA9IFJFRkNPVU5UX0lORklOSVRZ OwogICB0Z3QtPnRndF9zdGFydCA9IDA7CiAgIHRndC0+dGd0X2VuZCA9IDA7CkBAIC0yMjEz LDMyICsyMjc0LDQwIEBAIGdvbXBfbG9hZF9pbWFnZV90b19kZXZpY2UgKHN0cnVjdCBnb21w X2RldmljZV9kZXNjciAqZGV2aWNlcCwgdW5zaWduZWQgdmVyc2lvbiwKICAgICAgIGFycmF5 Kys7CiAgICAgfQogCi0gIC8qIExhc3QgZW50cnkgaXMgZm9yIHRoZSBvbi1kZXZpY2UgJ2Rl dmljZV9udW0nIHZhcmlhYmxlLiBUb2xlcmF0ZSBjYXNlCi0gICAgIHdoZXJlIHBsdWdpbiBk b2VzIG5vdCByZXR1cm4gdGhpcyBlbnRyeS4gICovCisgIC8qIExhc3QgZW50cnkgaXMgZm9y IGEgSUNWcyB2YXJpYWJsZS4KKyAgICAgVG9sZXJhdGUgY2FzZSB3aGVyZSBwbHVnaW4gZG9l cyBub3QgcmV0dXJuIHRob3NlIGVudHJpZXMuICAqLwogICBpZiAobnVtX2Z1bmNzICsgbnVt X3ZhcnMgPCBudW1fdGFyZ2V0X2VudHJpZXMpCiAgICAgewotICAgICAgc3RydWN0IGFkZHJf cGFpciAqZGV2aWNlX251bV92YXIgPSAmdGFyZ2V0X3RhYmxlW251bV9mdW5jcyArIG51bV92 YXJzXTsKLSAgICAgIC8qIFN0YXJ0IGFkZHJlc3Mgd2lsbCBiZSBub24temVybyBmb3IgbGFz dCBlbnRyeSBpZiBHT01QX0RFVklDRV9OVU1fVkFSCi0JIHdhcyBmb3VuZCBpbiB0aGlzIGlt YWdlLiAgKi8KLSAgICAgIGlmIChkZXZpY2VfbnVtX3Zhci0+c3RhcnQgIT0gMCkKKyAgICAg IHN0cnVjdCBhZGRyX3BhaXIgKnZhciA9ICZ0YXJnZXRfdGFibGVbbnVtX2Z1bmNzICsgbnVt X3ZhcnNdOworCisgICAgICAvKiBTdGFydCBhZGRyZXNzIHdpbGwgYmUgbm9uLXplcm8gZm9y IHRoZSBJQ1ZzIHZhcmlhYmxlIGlmCisJIHRoZSB2YXJpYWJsZSB3YXMgZm91bmQgaW4gdGhp cyBpbWFnZS4gICovCisgICAgICBpZiAodmFyLT5zdGFydCAhPSAwKQogCXsKIAkgIC8qIFRo ZSBpbmRleCBvZiB0aGUgZGV2aWNlcCB3aXRoaW4gZGV2aWNlc1tdIGlzIHJlZ2FyZGVkIGFz IGl0cwogCSAgICAgJ2RldmljZSBudW1iZXInLCB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSB0 aGUgcGVyLWRldmljZSB0eXBlCiAJICAgICBkZXZpY2VwLT50YXJnZXRfaWQuICAqLwotCSAg aW50IGRldmljZV9udW1fdmFsID0gKGludCkgKGRldmljZXAgLSAmZGV2aWNlc1swXSk7Ci0J ICBpZiAoZGV2aWNlX251bV92YXItPmVuZCAtIGRldmljZV9udW1fdmFyLT5zdGFydCAhPSBz aXplb2YgKGludCkpCi0JICAgIHsKLQkgICAgICBnb21wX211dGV4X3VubG9jayAoJmRldmlj ZXAtPmxvY2spOwotCSAgICAgIGlmIChpc19yZWdpc3Rlcl9sb2NrKQotCQlnb21wX211dGV4 X3VubG9jayAoJnJlZ2lzdGVyX2xvY2spOwotCSAgICAgIGdvbXBfZmF0YWwgKCJvZmZsb2Fk IHBsdWdpbiBtYW5hZ2VkICdkZXZpY2VfbnVtJyBub3Qgb2YgZXhwZWN0ZWQgIgotCQkJICAi Zm9ybWF0Iik7Ci0JICAgIH0KLQotCSAgLyogQ29weSBkZXZpY2VfbnVtIHZhbHVlIHRvIHBs YWNlIG9uIGRldmljZSBtZW1vcnksIGhlcmVieSBhY3R1YWxseQotCSAgICAgZGVzaWduYXRp bmcgaXRzIGRldmljZSBudW1iZXIgaW50byBlZmZlY3QuICAqLwotCSAgZ29tcF9jb3B5X2hv c3QyZGV2IChkZXZpY2VwLCBOVUxMLCAodm9pZCAqKSBkZXZpY2VfbnVtX3Zhci0+c3RhcnQs Ci0JCQkgICAgICAmZGV2aWNlX251bV92YWwsIHNpemVvZiAoaW50KSwgZmFsc2UsIE5VTEwp OworCSAgaW50IGRldl9udW0gPSAoaW50KSAoZGV2aWNlcCAtICZkZXZpY2VzWzBdKTsKKwkg IHN0cnVjdCBnb21wX29mZmxvYWRfaWN2cyAqaWN2cyA9IGdldF9nb21wX29mZmxvYWRfaWN2 cyAoZGV2X251bSk7CisJICBzaXplX3QgdmFyX3NpemUgPSB2YXItPmVuZCAtIHZhci0+c3Rh cnQ7CisKKwkgIC8qIENvcHkgdGhlIElDVnMgdmFyaWFibGUgdG8gcGxhY2Ugb24gZGV2aWNl IG1lbW9yeSwgaGVyZWJ5CisJICAgICBhY3R1YWxseSBkZXNpZ25hdGluZyBpdHMgZGV2aWNl IG51bWJlciBpbnRvIGVmZmVjdC4gICovCisJICBnb21wX2NvcHlfaG9zdDJkZXYgKGRldmlj ZXAsIE5VTEwsICh2b2lkICopIHZhci0+c3RhcnQsIGljdnMsCisJCQkgICAgICB2YXJfc2l6 ZSwgZmFsc2UsIE5VTEwpOworCSAgc3BsYXlfdHJlZV9rZXkgayA9ICZhcnJheS0+a2V5Owor CSAgay0+aG9zdF9zdGFydCA9ICh1aW50cHRyX3QpIGljdnM7CisJICBrLT5ob3N0X2VuZCA9 CisJICAgIGstPmhvc3Rfc3RhcnQgKyAoc2l6ZV9tYXNrICYgc2l6ZW9mIChzdHJ1Y3QgZ29t cF9vZmZsb2FkX2ljdnMpKTsKKwkgIGstPnRndCA9IHRndDsKKwkgIGstPnRndF9vZmZzZXQg PSB2YXItPnN0YXJ0OworCSAgay0+cmVmY291bnQgPSBSRUZDT1VOVF9JTkZJTklUWTsKKwkg IGstPmR5bmFtaWNfcmVmY291bnQgPSAwOworCSAgay0+YXV4ID0gTlVMTDsKKwkgIGFycmF5 LT5sZWZ0ID0gTlVMTDsKKwkgIGFycmF5LT5yaWdodCA9IE5VTEw7CisJICBzcGxheV90cmVl X2luc2VydCAoJmRldmljZXAtPm1lbV9tYXAsIGFycmF5KTsKKwkgIGFycmF5Kys7CiAJfQog ICAgIH0KIApkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1j b21tb24vaWN2LTUuYyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9u L2ljdi01LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMxY2ZjNwot LS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29t bW9uL2ljdi01LmMKQEAgLTAsMCArMSwyNSBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyog eyBkZy1zZXQtdGFyZ2V0LWVudi12YXIgT01QX05VTV9URUFNU19ERVZfMCAiNDIiIH0gKi8K Ky8qIHsgZGctc2V0LXRhcmdldC1lbnYtdmFyIE9NUF9OVU1fVEVBTVNfREVWXzEgIjQzIiB9 ICovCisvKiB7IGRnLXNldC10YXJnZXQtZW52LXZhciBPTVBfTlVNX1RFQU1TX0RFVl8yICI0 NCIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0LWVudi12YXIgT01QX05VTV9URUFNU19BTEwg IjQ1IiB9ICovCisvKiB7IGRnLXNldC10YXJnZXQtZW52LXZhciBPTVBfTlVNX1RFQU1TX0RF ViAiNDYiIH0gKi8KKy8qIHsgZGctc2V0LXRhcmdldC1lbnYtdmFyIE9NUF9OVU1fVEVBTVMg IjQ3IiB9ICovCisKKyNpbmNsdWRlIDxvbXAuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwor aW50CittYWluICgpCit7CisgIGlmIChvbXBfZ2V0X21heF90ZWFtcyAoKSAhPSA0NykKKyAg ICBhYm9ydCAoKTsKKworICBpbnQgbnVtX2RldmljZXMgPSBvbXBfZ2V0X251bV9kZXZpY2Vz ICgpID4gMyA/IDMgOiBvbXBfZ2V0X251bV9kZXZpY2VzICgpOworICBmb3IgKGludCBpPTA7 IGkgPCBudW1fZGV2aWNlczsgaSsrKQorICAgICNwcmFnbWEgb21wIHRhcmdldCBkZXZpY2Ug KGkpCisgICAgICBpZiAob21wX2dldF9tYXhfdGVhbXMgKCkgIT0gNDIgKyBpKQorCWFib3J0 ICgpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUv bGliZ29tcC5jLWMrKy1jb21tb24vaWN2LTYuYyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdv bXAuYy1jKystY29tbW9uL2ljdi02LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNzE1MWJkMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xp YmdvbXAuYy1jKystY29tbW9uL2ljdi02LmMKQEAgLTAsMCArMSw0NSBAQAorLyogeyBkZy1k byBydW4gfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0LWVudi12YXIgT01QX05VTV9URUFNU19B TEwgIjQyIiB9ICovCisvKiB7IGRnLXNldC10YXJnZXQtZW52LXZhciBPTVBfTlVNX1RFQU1T X0RFViAiNDMiIH0gKi8KKy8qIHsgZGctc2V0LXRhcmdldC1lbnYtdmFyIE9NUF9TQ0hFRFVM RV9BTEwgImd1aWRlZCw0IiB9ICovCisvKiB7IGRnLXNldC10YXJnZXQtZW52LXZhciBPTVBf RFlOQU1JQ19BTEwgInRydWUiIH0gKi8KKy8qIHsgZGctc2V0LXRhcmdldC1lbnYtdmFyIE9N UF9URUFNU19USFJFQURfTElNSVRfQUxMICI0NCIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0 LWVudi12YXIgT01QX1RIUkVBRF9MSU1JVF9BTEwgIjQ1IiB9ICovCisvKiB7IGRnLXNldC10 YXJnZXQtZW52LXZhciBPTVBfTlVNX1RIUkVBRFNfQUxMICI0NiwzLDIiIH0gKi8KKy8qIHsg ZGctc2V0LXRhcmdldC1lbnYtdmFyIE9NUF9NQVhfQUNUSVZFX0xFVkVMU19BTEwgIjQ3IiB9 ICovCisvKiB7IGRnLXNldC10YXJnZXQtZW52LXZhciBPTVBfUFJPQ19CSU5EX0FMTCAic3By ZWFkIiB9ICovCisvKiB7IGRnLXNldC10YXJnZXQtZW52LXZhciBPTVBfV0FJVF9QT0xJQ1lf QUxMICJhY3RpdmUiIH0gKi8KKworLyogVGhpcyB0ZXN0cyB0aGUgaGllcmFyY2hpY2FsIHVz YWdlIG9mIElDVnMgb24gdGhlIGRldmljZSwgaS5lLiBpZgorICAgT01QX05VTV9URUFNU19E RVZfPGRldmljZV9udW0+IGlzIG5vdCBjb25maWd1cmVkLCB0aGVuIHRoZSB2YWx1ZSBvZgor ICAgT01QX05VTV9URUFNU19ERVYgc2hvdWxkIGJlIHVzZWQuICBBbmQgaWYgdGhlcmUgaXMg bm8gZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIHdpdGhvdXQgc3VmZml4LCB0aGVuIHRoZSBj b3JyZXNwb25kaW5nIF9BTEwgdmFyaWFudCBzaG91bGQgYmUgdXNlZC4gICovCisKKyNpbmNs dWRlIDxvbXAuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworaW50CittYWluICgpCit7Cisg IGVudW0gb21wX3NjaGVkX3Qga2luZDsKKyAgaW50IGNodW5rX3NpemU7CisgIG9tcF9nZXRf c2NoZWR1bGUoJmtpbmQsICZjaHVua19zaXplKTsKKworICBpZiAob21wX2dldF9tYXhfdGVh bXMgKCkgIT0gNDIKKyAgICAgIHx8ICFvbXBfZ2V0X2R5bmFtaWMgKCkKKyAgICAgIHx8IGtp bmQgIT0gMyB8fCBjaHVua19zaXplICE9IDQKKyAgICAgIHx8IG9tcF9nZXRfdGVhbXNfdGhy ZWFkX2xpbWl0ICgpICE9IDQ0CisgICAgICB8fCBvbXBfZ2V0X3RocmVhZF9saW1pdCAoKSAh PSA0NQorICAgICAgfHwgb21wX2dldF9tYXhfdGhyZWFkcyAoKSAhPSA0NgorICAgICAgfHwg b21wX2dldF9wcm9jX2JpbmQgKCkgIT0gb21wX3Byb2NfYmluZF9zcHJlYWQKKyAgICAgIHx8 IG9tcF9nZXRfbWF4X2FjdGl2ZV9sZXZlbHMgKCkgIT0gNDcpCisgICAgYWJvcnQgKCk7CisK KyAgaW50IG51bV9kZXZpY2VzID0gb21wX2dldF9udW1fZGV2aWNlcyAoKSA+IDMgPyAzIDog b21wX2dldF9udW1fZGV2aWNlcyAoKTsKKyAgZm9yIChpbnQgaT0wOyBpIDwgbnVtX2Rldmlj ZXM7IGkrKykKKyAgICAjcHJhZ21hIG9tcCB0YXJnZXQgZGV2aWNlIChpKQorICAgICAgaWYg KG9tcF9nZXRfbWF4X3RlYW1zICgpICE9IDQzKQorCWFib3J0ICgpOworCisgIHJldHVybiAw OworfQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21t b24vaWN2LTcuYyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL2lj di03LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhNzE2ZAotLS0g L2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9u L2ljdi03LmMKQEAgLTAsMCArMSwyNiBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBk Zy1zZXQtdGFyZ2V0LWVudi12YXIgT01QX05VTV9URUFNU19BTEwgIjQyIiB9ICovCisKKy8q IFRoaXMgdGVzdHMgdGhlIGhpZXJhcmNoaWNhbCB1c2FnZSBvZiBJQ1ZzIG9uIHRoZSBob3N0 IGFuZCBvbiBkZXZpY2VzLCBpLmUuIGlmCisgICBPTVBfTlVNX1RFQU1TX0RFVl88ZGV2aWNl X251bT4sIE9NUF9OVU1fVEVBTVNfREVWLCBhbmQKKyAgIE9NUF9OVU1fVEVBTVMgYXJlIG5v dCBjb25maWd1cmVkLCB0aGVuIHRoZSB2YWx1ZSBvZgorICAgT01QX05VTV9URUFNU19BTEwg c2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBob3N0IGFzIHdlbGwgYXMgZm9yIHRoZQorICAgZGV2 aWNlcy4gICovCisKKyNpbmNsdWRlIDxvbXAuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwor aW50CittYWluICgpCit7CisgIGlmIChvbXBfZ2V0X21heF90ZWFtcyAoKSAhPSA0MikKKyAg ICBhYm9ydCAoKTsKKworICBpbnQgbnVtX2RldmljZXMgPSBvbXBfZ2V0X251bV9kZXZpY2Vz ICgpID4gMyA/IDMgOiBvbXBfZ2V0X251bV9kZXZpY2VzICgpOworICBmb3IgKGludCBpPTA7 IGkgPCBudW1fZGV2aWNlczsgaSsrKQorICAgICNwcmFnbWEgb21wIHRhcmdldCBkZXZpY2Ug KGkpCisgICAgICBpZiAob21wX2dldF9tYXhfdGVhbXMgKCkgIT0gNDIpCisJYWJvcnQgKCk7 CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJn b21wLmMtYysrLWNvbW1vbi9pY3YtOC5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5j LWMrKy1jb21tb24vaWN2LTguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5jOWZjZDcyCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29t cC5jLWMrKy1jb21tb24vaWN2LTguYwpAQCAtMCwwICsxLDI0IEBACisvKiB7IGRnLWRvIHJ1 biB9ICovCisvKiB7IGRnLXNldC10YXJnZXQtZW52LXZhciBPTVBfTlVNX1RFQU1TX0RFVl8x MjM0NTY3ODkwICI0MiIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0LWVudi12YXIgT01QX05V TV9URUFNU19ERVZfICI0MyIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0LWVudi12YXIgT01Q X05VTV9URUFNU19ERVZfMDEgIjQ0IiB9ICovCisvKiB7IGRnLXNldC10YXJnZXQtZW52LXZh ciBPTVBfTlVNX1RFQU1TX0RFVl9hICI0NSIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0LWVu di12YXIgT01QX05VTV9URUFNU19ERVZfMTIzNDU2Nzg5MDEgIjQ2IiB9ICovCisvKiB7IGRn LXNldC10YXJnZXQtZW52LXZhciBPTVBfTlVNX1RFQU1TX0RFVl8tMSAiNDciIH0gKi8KKy8q IHsgZGctc2V0LXRhcmdldC1lbnYtdmFyICJPTVBfTlVNX1RFQU1TX0RFVl8gMSIgIjQ4IiB9 ICovCisKKyNpbmNsdWRlIDxvbXAuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworaW50Citt YWluICgpCit7CisgIHJldHVybiAwOworfQorCisvKiB7IGRnLW91dHB1dCAiLipJbnZhbGlk IGRldmljZSBudW1iZXIgaW4gT01QX05VTV9URUFNU19ERVZfPTQzLioiIH0gKi8KKy8qIHsg ZGctb3V0cHV0ICIuKkludmFsaWQgZGV2aWNlIG51bWJlciBpbiBPTVBfTlVNX1RFQU1TX0RF Vl8wMT00NC4qIiB9ICovCisvKiB7IGRnLW91dHB1dCAiLipJbnZhbGlkIGRldmljZSBudW1i ZXIgaW4gT01QX05VTV9URUFNU19ERVZfYT00NS4qIiB9ICovCisvKiB7IGRnLW91dHB1dCAi LipJbnZhbGlkIGRldmljZSBudW1iZXIgaW4gT01QX05VTV9URUFNU19ERVZfMTIzNDU2Nzg5 MDE9NDYuKiIgfSAqLworLyogeyBkZy1vdXRwdXQgIi4qSW52YWxpZCBkZXZpY2UgbnVtYmVy IGluIE9NUF9OVU1fVEVBTVNfREVWXy0xPTQ3LioiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIu KkludmFsaWQgZGV2aWNlIG51bWJlciBpbiBPTVBfTlVNX1RFQU1TX0RFVl8gMT00OC4qIiB9 ICovCmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1v bi9vbXAtZGlzcGxheS1lbnYtMS5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMr Ky1jb21tb24vb21wLWRpc3BsYXktZW52LTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5lYjRlNmJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3Vp dGUvbGliZ29tcC5jLWMrKy1jb21tb24vb21wLWRpc3BsYXktZW52LTEuYwpAQCAtMCwwICsx LDExOSBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0LWVudi12 YXIgT01QX1RIUkVBRF9MSU1JVF9ERVZfMjQgIjQyIiB9ICovCisvKiB7IGRnLXNldC10YXJn ZXQtZW52LXZhciBPTVBfVEhSRUFEX0xJTUlUX0FMTCAiNDMiIH0gKi8KKy8qIHsgZGctc2V0 LXRhcmdldC1lbnYtdmFyIE9NUF9USFJFQURfTElNSVRfREVWICI0NCIgfSAqLworLyogeyBk Zy1zZXQtdGFyZ2V0LWVudi12YXIgT01QX1RIUkVBRF9MSU1JVCAiNDUiIH0gKi8KKy8qIHsg ZGctc2V0LXRhcmdldC1lbnYtdmFyIE9NUF9ERUZBVUxUX0RFVklDRSAiNDIiIH0gKi8KKy8q IHsgZGctc2V0LXRhcmdldC1lbnYtdmFyIE9NUF9TQ0hFRFVMRV9ERVZfMjQgImd1aWRlZCw0 IiB9ICovCisvKiB7IGRnLXNldC10YXJnZXQtZW52LXZhciBPTVBfU0NIRURVTEVfQUxMICJk eW5hbWljIiB9ICovCisvKiB7IGRnLXNldC10YXJnZXQtZW52LXZhciBPTVBfU0NIRURVTEVf REVWICJndWlkZWQsMSIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0LWVudi12YXIgT01QX1ND SEVEVUxFICJndWlkZWQsMiIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0LWVudi12YXIgT01Q X0RZTkFNSUNfREVWXzI0ICJ0cnVlIiB9ICovCisKKy8qIHsgZGctc2V0LXRhcmdldC1lbnYt dmFyIE9NUF9EWU5BTUlDX0FMTCAidHJ1ZSIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0LWVu di12YXIgT01QX0RZTkFNSUNfREVWICJ0cnVlIiB9ICovCisvKiB7IGRnLXNldC10YXJnZXQt ZW52LXZhciBPTVBfRFlOQU1JQyAidHJ1ZSIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0LWVu di12YXIgT01QX05VTV9USFJFQURTICI0LDMsMiIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0 LWVudi12YXIgT01QX05VTV9USFJFQURTX0FMTCAiNDUsNDYsNDciIH0gKi8KKy8qIHsgZGct c2V0LXRhcmdldC1lbnYtdmFyIE9NUF9OVU1fVEhSRUFEU19ERVYgIjQyLDQzLDQ0IiB9ICov CisvKiB7IGRnLXNldC10YXJnZXQtZW52LXZhciBPTVBfTlVNX1RIUkVBRFNfREVWXzI0ICIx NCwxMywxMiIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0LWVudi12YXIgT01QX01BWF9BQ1RJ VkVfTEVWRUxTICI0MiIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0LWVudi12YXIgT01QX01B WF9BQ1RJVkVfTEVWRUxTX0FMTCAiNDMiIH0gKi8KKy8qIHsgZGctc2V0LXRhcmdldC1lbnYt dmFyIE9NUF9NQVhfQUNUSVZFX0xFVkVMU19ERVYgIjQ0IiB9ICovCisKKy8qIHsgZGctc2V0 LXRhcmdldC1lbnYtdmFyIE9NUF9NQVhfQUNUSVZFX0xFVkVMU19ERVZfMjQgIjQ1IiB9ICov CisvKiB7IGRnLXNldC10YXJnZXQtZW52LXZhciBPTVBfTlVNX1RFQU1TICI0MiIgfSAqLwor LyogeyBkZy1zZXQtdGFyZ2V0LWVudi12YXIgT01QX05VTV9URUFNU19BTEwgIjQzIiB9ICov CisvKiB7IGRnLXNldC10YXJnZXQtZW52LXZhciBPTVBfTlVNX1RFQU1TX0RFViAiNDQiIH0g Ki8KKy8qIHsgZGctc2V0LXRhcmdldC1lbnYtdmFyIE9NUF9OVU1fVEVBTVNfREVWXzI0ICI0 NSIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0LWVudi12YXIgT01QX1BST0NfQklORCAic3By ZWFkIiB9ICovCisvKiB7IGRnLXNldC10YXJnZXQtZW52LXZhciBPTVBfUFJPQ19CSU5EX0FM TCAiY2xvc2UiIH0gKi8KKy8qIHsgZGctc2V0LXRhcmdldC1lbnYtdmFyIE9NUF9QUk9DX0JJ TkRfREVWICJzcHJlYWQsc3ByZWFkIiB9ICovCisvKiB7IGRnLXNldC10YXJnZXQtZW52LXZh ciBPTVBfUFJPQ19CSU5EX0RFVl8yNCAic3ByZWFkLGNsb3NlIiB9ICovCisvKiB7IGRnLXNl dC10YXJnZXQtZW52LXZhciBPTVBfU1RBQ0tTSVpFICI0MiIgfSAqLworCisvKiB7IGRnLXNl dC10YXJnZXQtZW52LXZhciBPTVBfU1RBQ0tTSVpFX0FMTCAiNDIgTSIgfSAqLworLyogeyBk Zy1zZXQtdGFyZ2V0LWVudi12YXIgT01QX1NUQUNLU0laRV9ERVYgIjQzIGsiIH0gKi8KKy8q IHsgZGctc2V0LXRhcmdldC1lbnYtdmFyIE9NUF9TVEFDS1NJWkVfREVWXzI0ICI0NCIgfSAq LworLyogeyBkZy1zZXQtdGFyZ2V0LWVudi12YXIgT01QX1dBSVRfUE9MSUNZICJhY3RpdmUi IH0gKi8KKy8qIHsgZGctc2V0LXRhcmdldC1lbnYtdmFyIE9NUF9XQUlUX1BPTElDWV9BTEwg IkFDVElWRSIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0LWVudi12YXIgT01QX1dBSVRfUE9M SUNZX0RFViAicGFzc2l2ZSIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0LWVudi12YXIgT01Q X1dBSVRfUE9MSUNZX0RFVl8yNCAiUEFTU0lWRSIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0 LWVudi12YXIgT01QX1RFQU1TX1RIUkVBRF9MSU1JVCAiNDIiIH0gKi8KKy8qIHsgZGctc2V0 LXRhcmdldC1lbnYtdmFyIE9NUF9URUFNU19USFJFQURfTElNSVRfQUxMICI0MyIgfSAqLwor LyogeyBkZy1zZXQtdGFyZ2V0LWVudi12YXIgT01QX1RFQU1TX1RIUkVBRF9MSU1JVF9ERVYg IjQ0IiB9ICovCisKKy8qIHsgZGctc2V0LXRhcmdldC1lbnYtdmFyIE9NUF9URUFNU19USFJF QURfTElNSVRfREVWXzI0ICI0NSIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0LWVudi12YXIg T01QX0NBTkNFTExBVElPTiAidHJ1ZSIgfSAqLworLyogeyBkZy1zZXQtdGFyZ2V0LWVudi12 YXIgT01QX0RJU1BMQVlfQUZGSU5JVFkgInRydWUiIH0gKi8KKy8qIHsgZGctc2V0LXRhcmdl dC1lbnYtdmFyIE9NUF9UQVJHRVRfT0ZGTE9BRCAibWFuZGF0b3J5IiB9ICovCisvKiB7IGRn LXNldC10YXJnZXQtZW52LXZhciBPTVBfTUFYX1RBU0tfUFJJT1JJVFkgIjIwIiB9ICovCisv KiB7IGRnLXNldC10YXJnZXQtZW52LXZhciBPTVBfQUxMT0NBVE9SICJvbXBfY29uc3RfbWVt X2FsbG9jIiB9ICovCisvKiB7IGRnLXNldC10YXJnZXQtZW52LXZhciBPTVBfTkVTVEVEICJm YWxzZSIgfSAqLworCisjaW5jbHVkZSA8b21wLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisK K2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2KQoreworICBvbXBfZGlz cGxheV9lbnYgKDEpOworICByZXR1cm4gMDsKK30KKworLyogeyBkZy1vdXRwdXQgIi4qXFxc W2hvc3RdIE9NUF9EWU5BTUlDID0gJ1RSVUUnLioiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIu KlxcXFthbGxdIE9NUF9EWU5BTUlDID0gJ1RSVUUnLioiIH0gKi8KKy8qIHsgZGctb3V0cHV0 ICIuKlxcXFtkZXZpY2VdIE9NUF9EWU5BTUlDID0gJ1RSVUUnLioiIH0gKi8KKy8qIHsgZGct b3V0cHV0ICIuKlxcXFsyNFxdIE9NUF9EWU5BTUlDID0gJ1RSVUUnLioiIH0gKi8KKworLyog eyBkZy1vdXRwdXQgIi4qXFxcW2hvc3RdIE9NUF9OVU1fVEhSRUFEUyA9ICc0LDMsMicuKiIg fSAqLworLyogeyBkZy1vdXRwdXQgIi4qXFxcW2FsbFxdIE9NUF9OVU1fVEhSRUFEUyA9ICc0 NSw0Niw0NycuKiIgfSAqLworLyogeyBkZy1vdXRwdXQgIi4qXFxcW2RldmljZVxdIE9NUF9O VU1fVEhSRUFEUyA9ICc0Miw0Myw0NCcuKiIgfSAqLworLyogeyBkZy1vdXRwdXQgIi4qXFxc WzI0XF0gT01QX05VTV9USFJFQURTID0gJzE0LDEzLDEyJy4qIiB9ICovCisKKy8qIHsgZGct b3V0cHV0ICIuKlxcXFtob3N0XSBPTVBfU0NIRURVTEUgPSAnR1VJREVELDInLioiIH0gKi8K Ky8qIHsgZGctb3V0cHV0ICIuKlxcXFthbGxcXSBPTVBfU0NIRURVTEUgPSAnRFlOQU1JQycu KiIgfSAqLworLyogeyBkZy1vdXRwdXQgIi4qXFxcW2RldmljZVxdIE9NUF9TQ0hFRFVMRSA9 ICdHVUlERUQnLioiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIuKlxcXFsyNFxdIE9NUF9TQ0hF RFVMRSA9ICdHVUlERUQsNCcuKiIgfSAqLworCisvKiB7IGRnLW91dHB1dCAiLipcXFxbaG9z dF0gT01QX1BST0NfQklORCA9ICdTUFJFQUQnLioiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIu KlxcXFthbGxcXSBPTVBfUFJPQ19CSU5EID0gJ0NMT1NFJy4qIiB9ICovCisvKiB7IGRnLW91 dHB1dCAiLipcXFxbZGV2aWNlXF0gT01QX1BST0NfQklORCA9ICdTUFJFQUQsU1BSRUFEJy4q IiB9ICovCisvKiB7IGRnLW91dHB1dCAiLipcXFxbMjRcXSBPTVBfUFJPQ19CSU5EID0gJ1NQ UkVBRCxDTE9TRScuKiIgfSAqLworCisvKiB7IGRnLW91dHB1dCAiLipcXFxbaG9zdF0gT01Q X1NUQUNLU0laRSA9ICc0MzAwOCcuKiIgfSAqLworLyogeyBkZy1vdXRwdXQgIi4qXFxcW2Fs bFxdIE9NUF9TVEFDS1NJWkUgPSAnNDQwNDAxOTInLioiIH0gKi8KKy8qIHsgZGctb3V0cHV0 ICIuKlxcXFtkZXZpY2VcXSBPTVBfU1RBQ0tTSVpFID0gJzQ0MDMyJy4qIiB9ICovCisvKiB7 IGRnLW91dHB1dCAiLipcXFxbMjRcXSBPTVBfU1RBQ0tTSVpFID0gJzQ1MDU2Jy4qIiB9ICov CisKKy8qIHsgZGctb3V0cHV0ICIuKlxcXFtob3N0XSBPTVBfV0FJVF9QT0xJQ1kgPSAnQUNU SVZFJy4qIiB9ICovCisvKiB7IGRnLW91dHB1dCAiLipcXFxbYWxsXF0gT01QX1dBSVRfUE9M SUNZID0gJ0FDVElWRScuKiIgfSAqLworLyogeyBkZy1vdXRwdXQgIi4qXFxcW2RldmljZVxd IE9NUF9XQUlUX1BPTElDWSA9ICdQQVNTSVZFJy4qIiB9ICovCisvKiB7IGRnLW91dHB1dCAi LipcXFxbMjRcXSBPTVBfV0FJVF9QT0xJQ1kgPSAnUEFTU0lWRScuKiIgfSAqLworCisvKiB7 IGRnLW91dHB1dCAiLipcXFxbaG9zdF0gT01QX1RIUkVBRF9MSU1JVCA9ICc0NScuKiIgfSAq LworLyogeyBkZy1vdXRwdXQgIi4qXFxcW2FsbFxdIE9NUF9USFJFQURfTElNSVQgPSAnNDMn LioiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIuKlxcXFtkZXZpY2VcXSBPTVBfVEhSRUFEX0xJ TUlUID0gJzQ0Jy4qIiB9ICovCisvKiB7IGRnLW91dHB1dCAiLipcXFxbMjRcXSBPTVBfVEhS RUFEX0xJTUlUID0gJzQyJy4qIiB9ICovCisKKy8qIHsgZGctb3V0cHV0ICIuKlxcXFtob3N0 XSBPTVBfTUFYX0FDVElWRV9MRVZFTFMgPSAnNDInLioiIH0gKi8KKy8qIHsgZGctb3V0cHV0 ICIuKlxcXFthbGxcXSBPTVBfTUFYX0FDVElWRV9MRVZFTFMgPSAnNDMnLioiIH0gKi8KKy8q IHsgZGctb3V0cHV0ICIuKlxcXFtkZXZpY2VcXSBPTVBfTUFYX0FDVElWRV9MRVZFTFMgPSAn NDQnLioiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIuKlxcXFsyNFxdIE9NUF9NQVhfQUNUSVZF X0xFVkVMUyA9ICc0NScuKiIgfSAqLworCisvKiB7IGRnLW91dHB1dCAiLipcXFxbaG9zdF0g T01QX05VTV9URUFNUyA9ICc0MicuKiIgfSAqLworLyogeyBkZy1vdXRwdXQgIi4qXFxcW2Fs bFxdIE9NUF9OVU1fVEVBTVMgPSAnNDMnLioiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIuKlxc XFtkZXZpY2VcXSBPTVBfTlVNX1RFQU1TID0gJzQ0Jy4qIiB9ICovCisvKiB7IGRnLW91dHB1 dCAiLipcXFxbMjRcXSBPTVBfTlVNX1RFQU1TID0gJzQ1Jy4qIiB9ICovCisKKy8qIHsgZGct b3V0cHV0ICIuKlxcXFtob3N0XSBPTVBfVEVBTVNfVEhSRUFEX0xJTUlUID0gJzQyJy4qIiB9 ICovCisvKiB7IGRnLW91dHB1dCAiLipcXFxbYWxsXF0gT01QX1RFQU1TX1RIUkVBRF9MSU1J VCA9ICc0MycuKiIgfSAqLworLyogeyBkZy1vdXRwdXQgIi4qXFxcW2RldmljZVxdIE9NUF9U RUFNU19USFJFQURfTElNSVQgPSAnNDQnLioiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIuKlxc XFsyNFxdIE9NUF9URUFNU19USFJFQURfTElNSVQgPSAnNDUnLioiIH0gKi8KKworLyogeyBk Zy1vdXRwdXQgIi4qXFxcW2FsbF0gT01QX0NBTkNFTExBVElPTiA9ICdUUlVFJy4qIiB9ICov CisvKiB7IGRnLW91dHB1dCAiLipcXFxbYWxsXSBPTVBfREVGQVVMVF9ERVZJQ0UgPSAnNDIn LioiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIuKlxcXFthbGxdIE9NUF9NQVhfVEFTS19QUklP UklUWSA9ICcyMCcuKiIgfSAqLworLyogeyBkZy1vdXRwdXQgIi4qXFxcW2FsbF0gT01QX0RJ U1BMQVlfQUZGSU5JVFkgPSAnVFJVRScuKiIgfSAqLworLyogeyBkZy1vdXRwdXQgIi4qXFxc W2hvc3RdIE9NUF9BTExPQ0FUT1IgPSAnb21wX2NvbnN0X21lbV9hbGxvYycuKiIgfSAqLwor LyogeyBkZy1vdXRwdXQgIi4qXFxcW2FsbF0gT01QX1RBUkdFVF9PRkZMT0FEID0gJ01BTkRB VE9SWScuKiIgfSAqLwpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5j LWMrKy1jb21tb24vb21wLWRpc3BsYXktZW52LTIuYyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xp YmdvbXAuYy1jKystY29tbW9uL29tcC1kaXNwbGF5LWVudi0yLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uNjYwZGE0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL29tcC1kaXNwbGF5LWVudi0yLmMK QEAgLTAsMCArMSwyMiBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1zZXQtdGFy Z2V0LWVudi12YXIgT01QX05VTV9URUFNUyAiNDIiIH0gKi8KKworLyogVGhpcyB0ZXN0IGNo ZWNrcyBpZiBvbXBfZGlzcGxheV9lbnYgb3V0cHV0cyB0aGUgaW5pdGlhbCBJQ1YgdmFsdWVz IGFsdGhvdWdoCisgICB0aGUgdmFsdWUgd2FzIHVwZGF0ZWQuICAqLworCisjaW5jbHVkZSA8 b21wLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNo YXIgKmNvbnN0ICphcmd2KQoreworICBvbXBfZGlzcGxheV9lbnYgKDEpOworICBvbXBfc2V0 X251bV90ZWFtcyAoMjQpOworICBpZiAob21wX2dldF9tYXhfdGVhbXMgKCkgIT0gMjQpCisg ICAgYWJvcnQgKCk7CisgIG9tcF9kaXNwbGF5X2VudiAoMSk7CisKKyAgcmV0dXJuIDA7Cit9 CisKKy8qIHsgZGctb3V0cHV0ICIuKlxcXFtob3N0XSBPTVBfTlVNX1RFQU1TID0gJzQyJy4q XFxcW2hvc3RdIE9NUF9OVU1fVEVBTVMgPSAnNDInIiB9ICovCg== --------------HL00mJwprdTH1ECkUD0nBNmI--