From debbugs-submit-bounces@debbugs.gnu.org Mon Jul 07 21:46:58 2025 Received: (at submit) by debbugs.gnu.org; 8 Jul 2025 01:46:58 +0000 Received: from localhost ([127.0.0.1]:39376 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uYxQA-0006zg-Al for submit@debbugs.gnu.org; Mon, 07 Jul 2025 21:46:58 -0400 Received: from lists.gnu.org ([2001:470:142::17]:37262) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uYxQ8-0006z5-85 for submit@debbugs.gnu.org; Mon, 07 Jul 2025 21:46:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uYxQ0-0000Sc-C5 for bug-gnu-emacs@gnu.org; Mon, 07 Jul 2025 21:46:48 -0400 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uYxPl-0003By-VF for bug-gnu-emacs@gnu.org; Mon, 07 Jul 2025 21:46:47 -0400 Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-3a52878d37aso492007f8f.2 for ; Mon, 07 Jul 2025 18:46:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751939191; x=1752543991; darn=gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=EOdYlxIbNaEqNa9mUkEDTOAADxUZVUkHm2B63G5BaX8=; b=F+IHoUodzNbMi0ljNzIZ25MGiKvEjtrlawk2S0hXhT0YQ0vMC9AGU242MK1mkjSyrP oKVbRszblgO0PMNbMxhECp4KUWFJYAde9PUVTLAf/pXQb1uEQMpnmfZDkUZE+eS+2OSb n1fh48Z+ycLaokMma9JIRQ9DAXKChK0QpA2lOQY9GXljGkno0Xx6rviGmWbq5Y2ZXfYk JB83Up5NY9pRqEcXD5jTpDfeUkdL8nlxR/1btfk/OMI4j+B6P2+g4k/IVJfCXND6VQjT fbvWGK48ySWyMyc68JqvcTteX16oWVXJDxvA5hLJbc8xqNj0X1Zh23TSbLyNjsJxO6Y7 8F4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751939191; x=1752543991; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=EOdYlxIbNaEqNa9mUkEDTOAADxUZVUkHm2B63G5BaX8=; b=QOlneNUKsgyHY1AIYBh/MstvZVr3uYbD6HWxTWm14q9NX1NeUG6aga83cnZxpdzRKA Sd3Ed6cr1vA27PRr/siyOcLHwiKKp4qpd/GsmayUtDv/6TPODG7htVRjBVOgXac9ZQ1f Uojz0vGKsl1ZjM7TRMyewFaF44y+vHQgXNDA6oPgksKd6KdQN3UUf3HIVRzn/OxEMRNc bVSIO7ev2afjljnAK+rMrZ21t8p8LpYRkhkquETf1NCzoBWoUKZoZqBUyuwdlfVtM6yX geOppYjBVyHYEO9AiS2P7ek8hWNnLM0E6INdyfR90iDxZGLhSektblDX3MQqSOFhYt1E UZNQ== X-Gm-Message-State: AOJu0YxYdbuyRedTYVzi/P62aeQfWZTgvHlPEByUxjprHJwlztViW6Yt pKeeyJdDQ/oaB/NSvYenRMQQkdcuwohd01+4ilh68ULWV1+eafkQl0OD0H+TE2fTPm2PnNzvlKa PHrzqJunwDWm1THH8IIkU26enmvVyOLZstQ== X-Gm-Gg: ASbGncszJ8a23pqwl4J0dgJax/1zJSVpTXstEdpD48tUPxhOhlZmTeVYe3JCkKqV4DP amvkgjjF8R22+w0M0s0BPxdWxKALNbv2qP+QAFMtXgoBdJVwaTQMg/6sxl1C7OWXsGJoBh1GXUL o3gWdBNgjUj4ktoT5E04xvUrDck+jR+FZNA1ON8StJyjv4Ky7umNBMU8xZ X-Google-Smtp-Source: AGHT+IHS9Gyh+SFwf3Kqs9NPm4zQzvC0yf7lzzziNKAzdinwWPZSJU0o+tvyjSw84/uR/A2sFWAlQelinPyrZXyElik= X-Received: by 2002:a05:6000:1786:b0:3a3:61ab:86c2 with SMTP id ffacd0b85a97d-3b4964fdc73mr4146659f8f.7.1751939190908; Mon, 07 Jul 2025 18:46:30 -0700 (PDT) MIME-Version: 1.0 From: Lynn Winebarger Date: Mon, 7 Jul 2025 21:46:15 -0400 X-Gm-Features: Ac12FXyQuz59CN6sjX-3uSuYrEJtNVyOg-czXoWhmdhvhYluva4_HO4wvZvi12U Message-ID: Subject: Experimental features for running lisp without requiring loadup.el To: bug-gnu-emacs@gnu.org Content-Type: multipart/mixed; boundary="0000000000002492990639612157" Received-SPF: pass client-ip=2a00:1450:4864:20::433; envelope-from=owinebar@gmail.com; helo=mail-wr1-x433.google.com X-Spam_score_int: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, MIME_BOUND_DIGITS_15=0.1, PDS_OTHER_BAD_TLD=1.999, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" --0000000000002492990639612157 Content-Type: text/plain; charset="UTF-8" I added some option values for --temacs to facilitate interrogating a bootstrap build of emacs before dumping, e.g. for convenient use in a Makefile. Then I started wondering what would happen if I called dump-emacs-portable from that state, say, for creating a minimal stand-alone (byte and/or native) compiler dump and executable. To further facilitate such stand-alone programs (e.g. an elisp lsp-server), I hacked the "fingerprint" feature to create a fixed area for writing hard-coded configuration options into the (or a copy of the) executable file, such as a default basename for the dump file or a "shim" lisp program that will be run before the startup procedure from the dump file. The new options for temacs are * --temacs=eval-args - evaluates all remaining command line arguments as programs (like load or eval-buffer). * --temacs=eval-stdin - evaluates the stdin stream as a program. * --temacs=eval - first eval-args, then eval-stdin These modes put emacs in "noneditor mode" (really noninteractive) which sets up a simple catchall handler and runs the program(s) from the specified sources. All other options are ignored. When eval-args or eval is specified, the lisp program will not have access to the command line arguments. If eval-stdin is specified, the usual lisp variable for command-line arguments holds a list of all arguments. If a dump file is created from one of these modes, a post-load hook is added to ensure that emacs is in noneditor mode. If "noneditor" is defined in the dumpfile, that will be called as the "main" program to execute, and emacs will exit when it returns. If noneditor is not defined, then emacs behaves as if "eval-stdin" was specified. In either case, the command-line arguments are stored as a list for use of the program. Since the emacs executable in noneditor mode ignores all command-line options, I've added a field of flags that can be configured by make-fingerprint or from lisp functions for creating a "customized emacs executable". Currently the flags only specify whether the executable is to start in noneditor mode, and if so, what sources of commands it should us (args, stdin, both or neither), whether to run a shim lisp program, and to run "bare" (i.e. no dump file or loadup). This feature is mostly to make up for the usual option processing being suppressed, so it would make sense to add support for other useful options that are handled in C code. I believe that would only be the two "daemon" mode options. noneditor mode is for creating dedicated emacs-lisp programs, so site-lisp directories are not configured, and user/site init files are ignored. The following new lisp functions are defined: * (get-emacs-executable-custom-settings) * (get-emacs-executable-fingerprint-data EMACS_EXE_FILENAME &optional MAX_SHIM_SIZE) * (make-custom-emacs-exectuable OUTFILE &optional FLAG_LIST BASENAME SHIM HASH EMACS_EXE_FILENAME) The flag bits are reported and set using symbolic representations and their complements: * 'noneditor / 'editor * 'stdin / 'nostdin * 'args or 'command-line-args / 'noargs * 'bare / 'not-bare * 'shim / 'noshim When setting the options, the options will be processed sequentially starting with the existing flags in the specified executable. The symbol 'clear turns all flags at whatever point in the sequence it is processed. The "HASH" argument may be * nil or 'original - leave fingerprint as is * 'reset or 'pristine - set the fingerprint to the default from libgnu * 'custom - set the fingerprint to its pristine value, then set the specified options, then calculate the fingerprint to write in the executable. * 'standard - set the fingerprint to its pristine value and zero the storage area, calculate the fingerprint from that state before setting the configuration data. SHIM is either * 'original - keep existing shim string * 'reset or 'clear - zero the shim string * An s-expression that is converted to a string via prin1-to-string make-fingerprint has been augmented with options for displaying and setting the storage area associated with the fingerprint. I implemented yet-another-string-literal syntax for specifying binary values is a shell/Makefile friendly format. The library code for parsing that format can be tested with the program parse-string-literal in lib/test. I still haven't actually *dumped* a program in noneditor mode, or determined what the shortest build of a standalone compiler for use in the build process (or for async compiling) is. It does not break any existing tests (that weren't expected) - which considering it is mostly orthogonal to existing code, it really shouldn't. Note I have applied my patch for a reentrant reader, but it probably isn't completely necessary. This is nominally my original impetus for that chunk of work. I'm curious if anyone else is interested in these features. I'd like to be able to at least load files encoded in emacs-internal (or compatible) into a buffer without loading all of mule/international support for a shorter bootstrap compiler build, depending on how much of a dent in dump-file size/build time it would make. I'm sure loading all 125-150 files from loadup is not really necessary just to be able read lisp files and produce compiled files. Lynn --0000000000002492990639612157 Content-Type: text/x-patch; charset="US-ASCII"; name="0002-Add-support-for-hard-coded-executable-options.patch" Content-Disposition: attachment; filename="0002-Add-support-for-hard-coded-executable-options.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mctst9bu1 RnJvbSA3NDFlYmYwZTQzZTFlMGE4OGVjZjA5OTc2ZjI4NTlkM2Y4Njg3YWE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBPbm5pZSBMeW5uIFdpbmViYXJnZXIgPG93aW5lYmFyQGdtYWls LmNvbT4KRGF0ZTogU3VuLCA2IEp1bCAyMDI1IDE2OjMwOjQzIC0wNDAwClN1YmplY3Q6IFtQQVRD SCAwMi8xMl0gQWRkIHN1cHBvcnQgZm9yIGhhcmQtY29kZWQgZXhlY3V0YWJsZSBvcHRpb25zLgoK LS0tCiBzcmMvbGlzcC5oIHwgODQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgODMgaW5zZXJ0aW9ucygrKSwgMSBk ZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9saXNwLmggYi9zcmMvbGlzcC5oCmluZGV4IDYw NTI1NWRmYWFhLi5mMWIxOGMwYmU2MSAxMDA2NDQKLS0tIGEvc3JjL2xpc3AuaAorKysgYi9zcmMv bGlzcC5oCkBAIC00MSw2ICs0MSw4IEBAICNkZWZpbmUgRU1BQ1NfTElTUF9ICiAjaW5jbHVkZSA8 aW50cHJvcHMuaD4KICNpbmNsdWRlIDx2ZXJpZnkuaD4KIAorI2luY2x1ZGUgPGZpbmdlcnByaW50 Lmg+CisKIElOTElORV9IRUFERVJfQkVHSU4KIAogLyogRGVmaW5lIGEgVFlQRSBjb25zdGFudCBJ RCBhcyBhbiBleHRlcm5hbGx5IHZpc2libGUgbmFtZS4gIFVzZSBsaWtlIHRoaXM6CkBAIC02NTcs NiArNjU5LDcyIEBAICNkZWZpbmUgRU5VTV9CRihUWVBFKSBlbnVtIFRZUEUKICNlbmRpZgogfSBn ZmxhZ3M7CiAKK2VudW0geworICBFQ0ZHX0FSR1YwX0JBU0VfU0laRSA9IDMyCit9OwordHlwZWRl ZiBzdHJ1Y3QgCit7CisgIHVpbnQ2NF90IGZsYWdzOworICBjaGFyIGFyZ3YwX2Jhc2VbRUNGR19B UkdWMF9CQVNFX1NJWkVdOworICBjaGFyIHNoaW1bXTsKK30gZXhlX2NvbmZpZ19oZWFkZXI7CisK K2VudW0geworICBFQ0ZHX1NISU1fU0laRSA9IChGSU5HRVJQUklOVF9EQVRBX1NJWkUgLSBvZmZz ZXRvZihleGVfY29uZmlnX2hlYWRlcixzaGltKSkKK307CisKK3R5cGVkZWYgc3RydWN0IAorewor ICB1aW50NjRfdCBmbGFnczsKKyAgY2hhciBhcmd2MF9iYXNlW0VDRkdfQVJHVjBfQkFTRV9TSVpF XTsKKyAgLyogQWxsb3cgZm9yIGEgaGFyZC1jb2RlZCBwcm9ncmFtIHRvIGJlIGVtYmVkZGVkIGlu IHJlbWFpbmluZyBzcGFjZSAqLworICBjaGFyIHNoaW1bRUNGR19TSElNX1NJWkVdOworfSBleGVf Y29uZmlnX2RhdGE7CisKKworZXh0ZXJuIHVuaW9uIGV4ZV9jb25maWdfc3RvcmUKK3sKKyAgZXhl X2NvbmZpZ19kYXRhIHM7CisgIHVuc2lnbmVkIGNoYXIgZGF0YVtGSU5HRVJQUklOVF9EQVRBX1NJ WkVdOworfSAqZXhlX2NvbmZpZzsKKworZW51bSBFQ0ZHX0ZMQUcKK3sKKyAgRUNGR19OT05FID0g MCwKKyAgRUNGR19DT05GSUdVUkVEID0gMSwKKyAgRUNGR19OT05FRElUT1IgPSAyLCAvKiBVbmNv bmRpdGlvbmFsbHkgZW50ZXIgbm9uZWRpdG9yIG1vZGUgKi8KKyAgRUNGR19CQVJFID0gNCwgIC8q IERvIG5vdCBsb2FkIGEgZHVtcCBmaWxlICovCisgIEVDRkdfRVZBTF9BUkdTID0gOCwgIC8qIEV2 YWwgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAqLworICBFQ0ZHX0VWQUxfU1RESU4gPSAxNiwgLyog RXZhbCBleHByZXNzaW9uIGZyb20gc3RkaW4gKi8KKyAgRUNGR19FVkFMX1NISU0gPSAzMiAvKiBl dmFsIHNoaW0gcHJvZ3JhbSBmaXJzdCAqLworfTsKKworI2RlZmluZSBFWEVfQ09ORklHVVJFRCh2 KSBcCisgICggKHYgIT0gTlVMTCkgJiYgKCgoKnYpLnMuZmxhZ3MgJiBFQ0ZHX0NPTkZJR1VSRUQp CVwKKwkJICAgID09IEVDRkdfQ09ORklHVVJFRCApICkKKworI2RlZmluZSBFWEVfQ09ORklHVVJF RF9PUFQodiwgZmxhZykgXAorICAoICh2ICE9IE5VTEwpICYmICgoKCp2KS5zLmZsYWdzICYgKEVD RkdfQ09ORklHVVJFRCB8IChmbGFnKSkpCVwKKwkJICAgID09IChFQ0ZHX0NPTkZJR1VSRUQgfCAo ZmxhZykgKSApICkKKworI2RlZmluZSBFWEVfQ09ORklHVVJFRF9OT05FRElUT1IodikgRVhFX0NP TkZJR1VSRURfT1BUKHYsRUNGR19OT05FRElUT1IpCisjZGVmaW5lIEVYRV9DT05GSUdVUkVEX0JB UkUodikgRVhFX0NPTkZJR1VSRURfT1BUKHYsRUNGR19CQVJFKQorI2RlZmluZSBFWEVfQ09ORklH VVJFRF9FVkFMX0FSR1ModikgRVhFX0NPTkZJR1VSRURfT1BUKHYsRUNGR19FVkFMX0FSR1MpCisj ZGVmaW5lIEVYRV9DT05GSUdVUkVEX0VWQUxfU1RESU4odikgRVhFX0NPTkZJR1VSRURfT1BUKHYs RUNGR19FVkFMX1NURElOKQorI2RlZmluZSBFWEVfQ09ORklHVVJFRF9FVkFMX0lOUFVUUyh2KSBc CisgIEVYRV9DT05GSUdVUkVEX09QVCh2LCBFQ0ZHX0VWQUxfQVJHUyB8IEVDRkdfRVZBTF9TVERJ TikKKyNkZWZpbmUgRVhFX0NPTkZJR1VSRURfRVZBTF9TSElNKHYpIEVYRV9DT05GSUdVUkVEX09Q VCh2LEVDRkdfRVZBTF9TSElNKQorCisvKiBPcHRpb25zIGZvciBzb3VyY2Ugb2YgZXhwcmVzc2lv bnMgdG8gZXZhbHVhdGUgaW4gbm9uZWRpdG9yCisgICBlbnZpcm9ubWVudC4gICovCitleHRlcm4g ZW51bSBub25lZGl0b3JfZXZhbF9zb3VyY2UgeworICBOT05FRElUT1JfRVZBTF9OT05FID0gMCwK KyAgTk9ORURJVE9SX0VWQUxfQVJHUyA9IEVDRkdfRVZBTF9BUkdTLAorICBOT05FRElUT1JfRVZB TF9TVERJTiA9IEVDRkdfRVZBTF9TVERJTiwKKyAgTk9ORURJVE9SX0VWQUxfQk9USCAgPSBOT05F RElUT1JfRVZBTF9BUkdTIHwgTk9ORURJVE9SX0VWQUxfU1RESU4sCisgIE5PTkVESVRPUl9FVkFM X01BU0sgPSBOT05FRElUT1JfRVZBTF9CT1RIICAvKiBmb3IgdXNlIHdpdGggZXhlX2NvbmZpZy5z LmZsYWdzICovCit9IG5vbmVkaXRvcl9ldmFsX3NvdXJjZTsKKwogSU5MSU5FIGJvb2wKIHdpbGxf ZHVtcF9wICh2b2lkKQogewpAQCAtMzg0Nyw3ICszOTE1LDkgQEAgcmVjb3JkX2luX2JhY2t0cmFj ZSAoTGlzcF9PYmplY3QgZnVuY3Rpb24sIExpc3BfT2JqZWN0ICphcmdzLCBwdHJkaWZmX3QgbmFy Z3MpCiAKIGVudW0gbm9ubG9jYWxfZXhpdAogewotICBOT05MT0NBTF9FWElUX1NJR05BTCwKKyAg LyogRW5zdXJlIG5laXRoZXIgb2YgdGhlc2UgY2FuIGJlIG1pc3Rha2VuIGZvcgorICAgICBhIHpl cm8taW5pdGlhbGl6ZWQgdmFyaWFibGUgb3Igc3RydWN0dXJlIGZpZWxkICovCisgIE5PTkxPQ0FM X0VYSVRfU0lHTkFMID0gMSwKICAgTk9OTE9DQUxfRVhJVF9USFJPVywKIH07CiAKQEAgLTQ4ODIs NiArNDk1MiwxOCBAQCBDSEVDS19LRVlXT1JEX0FSR1MgKHB0cmRpZmZfdCBuYXJncykKIExpc3Bf T2JqZWN0IGZ1bmNhbGxfZ2VuZXJhbCAoTGlzcF9PYmplY3QgZnVuLAogCQkJICAgICBwdHJkaWZm X3QgbnVtYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpOwogCitleHRlcm4gdm9pZCBub25lZGl0b3Jf bWFpbiAoaW50IG5hcmdzLCBjaGFyICoqYXJncyk7CitleHRlcm4gTGlzcF9PYmplY3Qgbm9uZWRp dG9yX2NhdGNoYWxsIChlbnVtIG5vbmxvY2FsX2V4aXQsTGlzcF9PYmplY3QpOworZXh0ZXJuIHN0 cnVjdAoreworICBpbnQgbmFyZ3M7CisgIGNoYXIgKiphcmdzOworICBpbnQgbmV4cHJzOworICBp bnQgYXJnX2k7CisgIExpc3BfT2JqZWN0ICBhcmc7CisgIExpc3BfT2JqZWN0IGVycjsKK30gbm9u ZWRpdG9yOworCiAvKiBUaGUgZGVmaW5pdGlvbiBvZiBMaXNwX01vZHVsZV9GdW5jdGlvbiBkZXBl bmRzIG9uIGVtYWNzLW1vZHVsZS5oLAogICAgc28gd2UgZG9uJ3QgZGVmaW5lIGl0IGhlcmUuICBJ dCdzIGRlZmluZWQgaW4gZW1hY3MtbW9kdWxlLmMuICAqLwogCi0tIAoyLjQ5LjAKCg== --0000000000002492990639612157 Content-Type: text/x-patch; charset="US-ASCII"; name="0003-Add-streams-for-use-in-noneditor-mode.patch" Content-Disposition: attachment; filename="0003-Add-streams-for-use-in-noneditor-mode.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mctst9bz2 RnJvbSA5NWIxZThiYjcxZTE5OGY1ZTkwZTBhMjIzN2VkMWQ3ODcyNzY0ZGUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBPbm5pZSBMeW5uIFdpbmViYXJnZXIgPG93aW5lYmFyQGdtYWls LmNvbT4KRGF0ZTogU3VuLCA2IEp1bCAyMDI1IDE2OjU1OjA2IC0wNDAwClN1YmplY3Q6IFtQQVRD SCAwMy8xMl0gQWRkIHN0cmVhbXMgZm9yIHVzZSBpbiBub25lZGl0b3IgbW9kZS4KCi0tLQogc3Jj L3ByaW50LmMgfCAyMyArKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3hkaXNwLmMgfCAgMiAr KwogMiBmaWxlcyBjaGFuZ2VkLCAyNSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL3By aW50LmMgYi9zcmMvcHJpbnQuYwppbmRleCBiNmVlODk0NzhjNy4uYzZhNDQwY2ZjNmIgMTAwNjQ0 Ci0tLSBhL3NyYy9wcmludC5jCisrKyBiL3NyYy9wcmludC5jCkBAIC05MzIsNiArOTMyLDE3IEBA IERFRlVOICgiZXh0ZXJuYWwtZGVidWdnaW5nLW91dHB1dCIsIEZleHRlcm5hbF9kZWJ1Z2dpbmdf b3V0cHV0LCBTZXh0ZXJuYWxfZGVidWdnCiAgIHJldHVybiBjaGFyYWN0ZXI7CiB9CiAKK0RFRlVO ICgiZXh0ZXJuYWwtc3RhbmRhcmQtb3V0cHV0IiwgRmV4dGVybmFsX3N0YW5kYXJkX291dHB1dCwg U2V4dGVybmFsX3N0YW5kYXJkX291dHB1dCwgMSwgMSwgMCwKKyAgICAgICBkb2M6IC8qIFdyaXRl IENIQVJBQ1RFUiB0byBzdGRvdXQuCitZb3UgY2FuIGNhbGwgYHByaW50JyB3aGlsZSBpbiBiYXJl IGV2YWx1YXRpb24gbW9kZSwgYW5kIHBhc3MgaXQgdGhpcyBmdW5jdGlvbgordG8gbWFrZSBpdCB3 cml0ZSB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgKi8pCisgIChMaXNwX09iamVjdCBjaGFyYWN0 ZXIpCit7CisgIENIRUNLX0ZJWE5VTSAoY2hhcmFjdGVyKTsKKyAgcHJpbnRjaGFyX3RvX3N0cmVh bSAoWEZJWE5VTSAoY2hhcmFjdGVyKSwgc3Rkb3V0KTsKKyAgcmV0dXJuIGNoYXJhY3RlcjsKK30K KwogLyogVGhpcyBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQuICBJdHMgcHVycG9zZSBpcyB0byBw cmV2ZW50CiAgICBwcmludF9vdXRwdXRfZGVidWdfZmxhZyBmcm9tIGJlaW5nIG9wdGltaXplZCBh d2F5LiAgKi8KIApAQCAtMjgzNiw4ICsyODQ3LDE0IEBAIGluaXRfcHJpbnRfb25jZSAodm9pZCkK ICAgLyogVGhlIHN1YnJvdXRpbmUgb2JqZWN0IGZvciBleHRlcm5hbC1kZWJ1Z2dpbmctb3V0cHV0 IGlzIGtlcHQgaGVyZQogICAgICBmb3IgdGhlIGNvbnZlbmllbmNlIG9mIHRoZSBkZWJ1Z2dlci4g ICovCiAgIERFRlNZTSAoUWV4dGVybmFsX2RlYnVnZ2luZ19vdXRwdXQsICJleHRlcm5hbC1kZWJ1 Z2dpbmctb3V0cHV0Iik7CisgIERFRlNZTSAoUXN0YW5kYXJkX2Vycm9yLCAic3RhbmRhcmQtZXJy b3IiKTsKKwogCiAgIGRlZnN1YnIgKCZTZXh0ZXJuYWxfZGVidWdnaW5nX291dHB1dCk7CisgIEZz ZXQgKFFzdGFuZGFyZF9lcnJvciwgRnN5bWJvbF9mdW5jdGlvbiAoUWV4dGVybmFsX2RlYnVnZ2lu Z19vdXRwdXQpKTsKKyAgLyogVGhpcyBpcyBmb3Igb3V0cHV0IGluIG5vbmVkaXRvciBtb2RlICov CisgIERFRlNZTSAoUWV4dGVybmFsX3N0YW5kYXJkX291dHB1dCwgImV4dGVybmFsLXN0YW5kYXJk LW91dHB1dCIpOworICBkZWZzdWJyICgmU2V4dGVybmFsX3N0YW5kYXJkX291dHB1dCk7CiB9CiAK IHZvaWQKQEAgLTMwMDEsNiArMzAxOCwxMiBAQCBzeW1zX29mX3ByaW50ICh2b2lkKQogICBERUZT WU0gKFFwcmludF9lc2NhcGVfbXVsdGlieXRlLCAicHJpbnQtZXNjYXBlLW11bHRpYnl0ZSIpOwog ICBERUZTWU0gKFFwcmludF9lc2NhcGVfbm9uYXNjaWksICJwcmludC1lc2NhcGUtbm9uYXNjaWki KTsKIAorICAvKiB0aGVzZSBhcmUgZm9yIHVzZSB3aXRoIEZwcmluMV90b19zdHJpbmcgKi8KKyAg REVGU1lNIChRbGVuZ3RoLCAibGVuZ3RoIik7CisgIERFRlNZTSAoUWxldmVsLCAibGV2ZWwiKTsK KyAgREVGU1lNIChRY2lyY2xlLCAiY2lyY2xlIik7CisgIERFRlNZTSAoUWNoYXJzZXRfdGV4dF9w cm9wZXJ0eSwgImNoYXJzZXQtdGV4dC1wcm9wZXJ0eSIpOworCiAgIHByaW50X3BydW5lX2NoYXJz ZXRfcGxpc3QgPSBRbmlsOwogICBzdGF0aWNwcm8gKCZwcmludF9wcnVuZV9jaGFyc2V0X3BsaXN0 KTsKIApkaWZmIC0tZ2l0IGEvc3JjL3hkaXNwLmMgYi9zcmMveGRpc3AuYwppbmRleCAxNWE4OGYw ODY4YS4uMzgwZDRkNmZhMTIgMTAwNjQ0Ci0tLSBhL3NyYy94ZGlzcC5jCisrKyBiL3NyYy94ZGlz cC5jCkBAIC0zNzgwNCw3ICszNzgwNCw5IEBAIHN5bXNfb2ZfeGRpc3AgKHZvaWQpCiAgIERFRlNZ TSAoUUNtYXAsICI6bWFwIik7CiAgIERFRlNZTSAoUUNwb2ludGVyLCAiOnBvaW50ZXIiKTsKICAg REVGU1lNIChRcmVjdCwgInJlY3QiKTsKKyAgLyogbW92ZSB0byBwcmludC5jIHRvIGVuc3VyZSBh bHdheXMgZGVmaW5lZC4KICAgREVGU1lNIChRY2lyY2xlLCAiY2lyY2xlIik7CisgICovCiAgIERF RlNZTSAoUXBvbHksICJwb2x5Iik7CiAKICAgREVGU1lNIChRaW5oaWJpdF9tZW51YmFyX3VwZGF0 ZSwgImluaGliaXQtbWVudWJhci11cGRhdGUiKTsKLS0gCjIuNDkuMAoK --0000000000002492990639612157 Content-Type: text/x-patch; charset="US-ASCII"; name="0004-Initial-support-for-noneditor-mode-trampoline.patch" Content-Disposition: attachment; filename="0004-Initial-support-for-noneditor-mode-trampoline.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mctst9c13 RnJvbSA4YWU4MWVjNGFkMWNmMTIxNmYyYzU4YzEyMjA5YWI1YTM4YTExMTI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBPbm5pZSBMeW5uIFdpbmViYXJnZXIgPG93aW5lYmFyQGdtYWls LmNvbT4KRGF0ZTogU3VuLCA2IEp1bCAyMDI1IDE2OjU4OjU1IC0wNDAwClN1YmplY3Q6IFtQQVRD SCAwNC8xMl0gSW5pdGlhbCBzdXBwb3J0IGZvciBub25lZGl0b3IgbW9kZSB0cmFtcG9saW5lLgoK LS0tCiBzcmMvZXZhbC5jIHwgMTg0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTg0IGluc2VydGlvbnMoKykKCmRp ZmYgLS1naXQgYS9zcmMvZXZhbC5jIGIvc3JjL2V2YWwuYwppbmRleCA0YzUxNDAwMWQ5ZC4uMTA0 OTUzZTg0ODIgMTAwNjQ0Ci0tLSBhL3NyYy9ldmFsLmMKKysrIGIvc3JjL2V2YWwuYwpAQCAtMzM2 LDYgKzMzNiwxODggQEAgZG9fZGVidWdfb25fY2FsbCAoTGlzcF9PYmplY3QgY29kZSwgc3BlY3Bk bF9yZWYgY291bnQpCiB9CiAMCiAKKy8qIE1pbmltYWwgaW5mcmFzdHJ1Y3R1cmUgZm9yIGEgcmVh ZC1ldmFsIGxvb3Agb3Igc3RhbmQtYWxvbmUgbGlzcCBwcm9ncmFtLgorICAgUHJvdmlkZXMgdGhl IGJhc2ljIHRyYW1wb2xpbmVzIHJlcXVpcmVkIGZvciB0aGUgc2lnbmFsIGFuZCB0aHJvdworICAg b3BlcmF0b3JzIHRvIG5vdCBwYW5pYyBvbiBhbiBvdGhlcndpc2UgdW5oYW5kbGVkIG5vbi1sb2Nh bCBleGl0LgorICAgIm5vbmVkaXRvciIgYmVjYXVzZSAibm9uaW50ZXJhY3RpdmUiIGlzIGFscmVh ZHkgaW4gdXNlLiAgQWx0aG91Z2gKKyAgIHRoaXMgZmVhdHVyZSBjb3VsZCBiZSB1c2VkIHRvIGlt cGxlbWVudCBhIHNoZWxsLgorICAgVGhpcyB0cmFtcG9saW5lIGlzIGFsc28gZm9yIHVzZSBpbiBh IGJhcmUsIHB1cmUgZW1hY3Mgd2hpY2gKKyAgIG1heSBvciBtYXkgbm90IGR1bXAgaW4gc29tZSBu b24tc3RhbmRhcmQgd2F5ICh0byBnZXQgYSBzdGFuZGFsb25lCisgICBsaXNwIHByb2dyYW0gZHVt cCkuICBJdCBjYW4gYmUgdXNlZCB0byBpbnRlcnJvZ2F0ZSBhIGZyZXNobHkgYnVpbHQKKyAgIHRl bWFjcyBleGVjdXRhYmxlIHdpdGhvdXQgZXhlY3V0aW5nICJsb2FkdXAiIGFuZCBleGl0IG5vcm1h bGx5LgorKi8KKworc3RydWN0Cit7CisgIGludCBuYXJnczsKKyAgY2hhciAqKmFyZ3M7CisgIGlu dCBuZXhwcnM7CisgIGludCBhcmdfaTsKKyAgTGlzcF9PYmplY3QgYXJnOworICBpbnQgZXJyX2tp bmQ7CisgIExpc3BfT2JqZWN0IGVycjsKK30gbm9uZWRpdG9yOworCit0eXBlZGVmIExpc3BfT2Jq ZWN0ICgqbm9uZWRpdG9yX3Byb2MpKHZvaWQpOworc3RhdGljIExpc3BfT2JqZWN0IG5vbmVkaXRv cl9ldmFsX3NoaW0gKHZvaWQpOworc3RhdGljIExpc3BfT2JqZWN0IG5vbmVkaXRvcl9ldmFsX2Fy Z3MgKHZvaWQpOworc3RhdGljIExpc3BfT2JqZWN0IG5vbmVkaXRvcl9ldmFsX3N0ZGluX3RodW5r ICh2b2lkKTsKK3N0YXRpYyBMaXNwX09iamVjdCBub25lZGl0b3JfZGlzcGF0Y2ggKHZvaWQpOwor CisKK0xpc3BfT2JqZWN0Citub25lZGl0b3JfZXZhbF9zaGltICh2b2lkKQoreworICBMaXNwX09i amVjdCBzaGltID0gYnVpbGRfc3RyaW5nIChleGVfY29uZmlnLT5zLnNoaW0pOworICByZXR1cm4g bm9uZWRpdG9yX2V2YWxfc3RyZWFtIChzaGltLCAmKG5vbmVkaXRvci5uZXhwcnMpLCAmKG5vbmVk aXRvci5lcnIpKTsKK30KKworTGlzcF9PYmplY3QKK25vbmVkaXRvcl9ldmFsX2FyZ3MgKHZvaWQp Cit7CisgIExpc3BfT2JqZWN0IHZhbCA9IFFuaWw7CisgIGZvciAoIG5vbmVkaXRvci5hcmdfaSA9 IDA7CisJbm9uZWRpdG9yLmFyZ19pIDwgbm9uZWRpdG9yLm5hcmdzOworCW5vbmVkaXRvci5hcmdf aSsrKQorICAgIHsKKyAgICAgIG5vbmVkaXRvci5hcmcgPSBidWlsZF9zdHJpbmcgKG5vbmVkaXRv ci5hcmdzW25vbmVkaXRvci5hcmdfaV0pOworICAgICAgdmFsID0gbm9uZWRpdG9yX2V2YWxfc3Ry ZWFtIChub25lZGl0b3IuYXJnLCAmKG5vbmVkaXRvci5uZXhwcnMpLAorCQkJCSAgICYobm9uZWRp dG9yLmVycikpOworICAgIH0KKyAgcmV0dXJuIHZhbDsKK30KKworTGlzcF9PYmplY3QKK25vbmVk aXRvcl9ldmFsX3N0ZGluX3RodW5rICh2b2lkKQoreworICByZXR1cm4gbm9uZWRpdG9yX2V2YWxf c3RyZWFtIChRc3RkaW4sICYobm9uZWRpdG9yLm5leHBycyksICYobm9uZWRpdG9yLmVycikpOwor fQorCitMaXNwX09iamVjdAorbm9uZWRpdG9yX2Rpc3BhdGNoICh2b2lkKQoreworICBpZiAoRVhF X0NPTkZJR1VSRURfRVZBTF9TSElNKGV4ZV9jb25maWcpKQorICAgIG5vbmVkaXRvcl9ldmFsX3No aW0oKTsKKyAgZWxzZSBpZiAoTklMUCAoVm5vbmVkaXRvcikpCisgICAgZmF0YWwgKCJub25lZGl0 b3IgbXVzdCBiZSBub24tbmlsIHdoZW4gdXNlZCBhcyBtYWluIHByb2Nlc3MgIgorCSAgICJ3aXRo b3V0IGEgaGFyZC1jb2RlZCBsaXNwIHByb2dyYW0uIik7CisKKyAgaWYgKEVRIChWbm9uZWRpdG9y LFF0KSkKKyAgICB7CisgICAgICBWY29tbWFuZF9saW5lX2FyZ3MgPSBRbmlsOworICAgICAgTGlz cF9PYmplY3QgdmFsID0gbm9uZWRpdG9yX2V2YWxfYXJncygpOworICAgICAgaWYgKG5vbmVkaXRv ci5uZXhwcnMgPT0gMCkKKwl2YWwgPSBub25lZGl0b3JfZXZhbF9zdGRpbl90aHVuaygpOworICAg ICAgcmV0dXJuIHZhbDsKKyAgICB9CisKKyAgaWYgKEVRIChWbm9uZWRpdG9yLFFjb21tYW5kX2xp bmVfYXJncykpCisgICAgeworICAgICAgVmNvbW1hbmRfbGluZV9hcmdzID0gUW5pbDsKKyAgICAg IHJldHVybiBub25lZGl0b3JfZXZhbF9hcmdzKCk7CisgICAgfQorCisKKyAgaWYgKEVRIChWbm9u ZWRpdG9yLFFzdGRpbikpCisgICAgICByZXR1cm4gbm9uZWRpdG9yX2V2YWxfc3RkaW5fdGh1bmso KTsKKworICBub25lZGl0b3IubmV4cHJzID0gMTsKKyAgaWYgKEZVTkNUSU9OUCAoVm5vbmVkaXRv cikpCisgICAgICByZXR1cm4gZnVuY2FsbF9nZW5lcmFsIChWbm9uZWRpdG9yLCAwLCBOVUxMKTsK KworICAvKiBlbHNlIFZub25lZGl0b3IgaG9sZHMgYW4gZXhwcmVzc2lvbiB0byBldmFsdWF0ZSov CisgIHJldHVybiBGZXZhbCAoVm5vbmVkaXRvcixRdCk7Cit9CisKK0xpc3BfT2JqZWN0Citub25l ZGl0b3JfY2F0Y2hhbGwgKGVudW0gbm9ubG9jYWxfZXhpdCBleGl0X2tpbmQsIExpc3BfT2JqZWN0 IGRhdGEpCit7CisgIG5vbmVkaXRvci5lcnJfa2luZCA9IGV4aXRfa2luZDsKKyAgbm9uZWRpdG9y LmVyciA9IGRhdGE7CisgIHN3aXRjaCAoZXhpdF9raW5kKQorICAgIHsKKyAgICBjYXNlIE5PTkxP Q0FMX0VYSVRfU0lHTkFMOgorICAgICAgeworCS8qIEN1dCBkb3duIHZlcnNpb24gb2YgY21kX2Vy cm9yICovCisJTGlzcF9PYmplY3Qgb2xkX2xldmVsLCBvbGRfbGVuZ3RoOworCWZwcmludGYoc3Rk ZXJyLCJVbmhhbmRsZWQgZXJyb3IgZW5jb3VudGVyZWQgaW4gbm9uZWRpdG9yIG1vZGUuXG4iKTsK KwkvKiBBdm9pZCB1bnF1aXR0YWJsZSBsb29wIGlmIGRhdGEgY29udGFpbnMgYSBjaXJjdWxhciBs aXN0LiAgKi8KKwlvbGRfbGV2ZWwgPSBWcHJpbnRfbGV2ZWw7CisJb2xkX2xlbmd0aCA9IFZwcmlu dF9sZW5ndGg7CisJWFNFVEZBU1RJTlQgKFZwcmludF9sZXZlbCwgMTApOworCVhTRVRGQVNUSU5U IChWcHJpbnRfbGVuZ3RoLCAxMCk7CisJcHJpbnRfZXJyb3JfbWVzc2FnZSAoZGF0YSwgUWV4dGVy bmFsX2RlYnVnZ2luZ19vdXRwdXQsIiIsCisJCQkgICAgIFZzaWduYWxpbmdfZnVuY3Rpb24pOwor CUZ0ZXJwcmkgKFFleHRlcm5hbF9kZWJ1Z2dpbmdfb3V0cHV0LCBRbmlsKTsKKwlWcHJpbnRfbGV2 ZWwgPSBvbGRfbGV2ZWw7CisJVnByaW50X2xlbmd0aCA9IG9sZF9sZW5ndGg7CisJcmV0dXJuIFFu aWw7CisgICAgICB9CisgICAgY2FzZSBOT05MT0NBTF9FWElUX1RIUk9XOgorICAgIH0KK30KKwor LyogQ3V0IGRvd24gdmVyc2lvbiBvZiBjbWRfZXJyb3IgKi8KK3N0YXRpYyBMaXNwX09iamVjdAor bm9uZWRpdG9yX2Jhc2VfY29uZGl0aW9uX2hhbmRsZXIgKExpc3BfT2JqZWN0IGRhdGEpCit7Cisg IExpc3BfT2JqZWN0IG9sZF9sZXZlbCwgb2xkX2xlbmd0aDsKKyAgZnByaW50ZihzdGRlcnIsIkVy cm9yIGVuY291bnRlcmVkIGluIGJhcmUgZXZhbC5cbiIpOworICAvKiBBdm9pZCB1bnF1aXR0YWJs ZSBsb29wIGlmIGRhdGEgY29udGFpbnMgYSBjaXJjdWxhciBsaXN0LiAgKi8KKyAgb2xkX2xldmVs ID0gVnByaW50X2xldmVsOworICBvbGRfbGVuZ3RoID0gVnByaW50X2xlbmd0aDsKKyAgWFNFVEZB U1RJTlQgKFZwcmludF9sZXZlbCwgMTApOworICBYU0VURkFTVElOVCAoVnByaW50X2xlbmd0aCwg MTApOworICBwcmludF9lcnJvcl9tZXNzYWdlIChkYXRhLCBRZXh0ZXJuYWxfZGVidWdnaW5nX291 dHB1dCwiIiwgVnNpZ25hbGluZ19mdW5jdGlvbik7CisgIEZ0ZXJwcmkgKFFleHRlcm5hbF9kZWJ1 Z2dpbmdfb3V0cHV0LCBRbmlsKTsKKyAgVnByaW50X2xldmVsID0gb2xkX2xldmVsOworICBWcHJp bnRfbGVuZ3RoID0gb2xkX2xlbmd0aDsKKyAgbm9uZWRpdG9yX2V2YWxfZXJyID0gUXQ7CisKKyAg cmV0dXJuIFF0OworfQorCitzdGF0aWMgTGlzcF9PYmplY3QKK25vbmVkaXRvcl9jb25kaXRpb25f dHJhbXBvbGluZSAoTGlzcF9PYmplY3QgaWdub3JlZCkKK3sKKyAgcmV0dXJuIGludGVybmFsX2Nv bmRpdGlvbl9jYXNlIChub25lZGl0b3JfZGlzcGF0Y2gsIFFlcnJvciwKKwkJCQkgIG5vbmVkaXRv cl9iYXNlX2NvbmRpdGlvbl9oYW5kbGVyKTsKK30KKworLyogRXZhbHVhdGUgZXhwcmVzc2lvbnMg aW4gZWl0aGVyIGEgYmFyZSBvciBub24tc3RhbmRhcmQKKyAgIGR1bXAgaW1wbGVtZW50aW5nIGEg c3RhbmQtYWxvbmUgbm9uZWRpdG9yIHByb2dyYW0uCisgICBUaGUgc291cmNlIG9mIGV4cHJlc3Np b25zIGlzIGRldGVybWluZWQgYnkgdGhlIHZhbHVlCisgICBvZiBWbm9uZWRpdG9yIChzZWUgbm9u ZWRpdG9yX2Rpc3BhdGNoKS4KKyAgIFNpZ25hbCBhbiBlcnJvciBpZiBubyBleHByZXNzaW9ucyBh cmUgZXZhbHVhdGVkLgorICAgRXhpdCBhZnRlciBhbGwgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRl ZC4gICovCitBVk9JRAorbm9uZWRpdG9yX21haW4gKGludCBuYXJncywgY2hhciAqKmFyZ3MpCit7 CisgIG5vbmVkaXRvci5uYXJncyA9IG5hcmdzOworICBub25lZGl0b3IuYXJncyA9IGFyZ3M7Cisg IG5vbmVkaXRvci5uZXhwcnMgPSAwOworICBub25lZGl0b3IuYXJnX2kgPSAwOworICBub25lZGl0 b3IuYXJnID0gUW5pbDsKKworICBGc2V0IChRbGV4aWNhbF9iaW5kaW5nLCBRdCk7CisgIEZzZXQg KFFzdGFuZGFyZF9lcnJvciwgUWV4dGVybmFsX2RlYnVnZ2luZ19vdXRwdXQpOworICBGc2V0IChR c3RhbmRhcmRfb3V0cHV0LCBRZXh0ZXJuYWxfc3RhbmRhcmRfb3V0cHV0KTsKKyAgRnNldCAoUXN0 YW5kYXJkX2lucHV0LCBRZXh0ZXJuYWxfc3RhbmRhcmRfaW5wdXQpOworICAvKiBGc2V0IChRc3Rh bmRhcmRfaW5wdXQsUWdldF9maWxlX2NoYXIpOyAqLworICBMaXNwX09iamVjdCB2YWwgPSBpbnRl cm5hbF9jYXRjaCAoUXRvcF9sZXZlbCwKKwkJCQkgICAgbm9uZWRpdG9yX2NvbmRpdGlvbl90cmFt cG9saW5lLAorCQkJCSAgICBRbmlsKTsKKyAgLyogaWYgKG5vbmVkaXRvci5uZXhwcnMgPT0gMCkg Ki8KKyAgLyogICBmYXRhbCAoIkJhcmUgZXZhbHVhdGlvbiBtb2RlIGZvdW5kIG5vIGV4cHJlc3Np b25zIHRvIGV2YWx1YXRlIik7ICovCisKKyAgc2h1dF9kb3duX2VtYWNzICgwLFFuaWwpOworICBp bnQgZXhpdF9jb2RlID0gRVEgKG5vbmVkaXRvcl9ldmFsX2VyciwgUW5pbCkgPyAwIDogMTsKKyAg ZXhpdChleGl0X2NvZGUpOworfQorCisKKwwKKwogREVGVU4gKCJvciIsIEZvciwgU29yLCAwLCBV TkVWQUxMRUQsIDAsCiAgICAgICAgZG9jOiAvKiBFdmFsIGFyZ3MgdW50aWwgb25lIG9mIHRoZW0g eWllbGRzIG5vbi1uaWwsIHRoZW4gcmV0dXJuIHRoYXQgdmFsdWUuCiBUaGUgcmVtYWluaW5nIGFy Z3MgYXJlIG5vdCBldmFsbGVkIGF0IGFsbC4KQEAgLTQ1NTQsNiArNDczNiw4IEBAIHN5bXNfb2Zf ZXZhbCAodm9pZCkKICAgc3RhdGljcHJvICgmbGlzdF9vZl90KTsKICAgbGlzdF9vZl90ID0gbGlz dDEgKFF0KTsKIAorICBzdGF0aWNwcm8gKCYobm9uZWRpdG9yLmFyZykpOworCiAgIGRlZnN1YnIg KCZTb3IpOwogICBkZWZzdWJyICgmU2FuZCk7CiAgIGRlZnN1YnIgKCZTaWYpOwotLSAKMi40OS4w Cgo= --0000000000002492990639612157 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Enhance-fingerprint-storage-with-writeable-storage.patch" Content-Disposition: attachment; filename="0001-Enhance-fingerprint-storage-with-writeable-storage.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mctst9bn0 RnJvbSAxMTMwZThlNWUyNjI2YTgwNjJmYTdmMDQ0ZmY2MzdjNTAyZWU3YjY3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBPbm5pZSBMeW5uIFdpbmViYXJnZXIgPG93aW5lYmFyQGdtYWls LmNvbT4KRGF0ZTogRnJpLCA0IEp1bCAyMDI1IDIwOjQ0OjU0IC0wNDAwClN1YmplY3Q6IFtQQVRD SCAwMS8xMl0gRW5oYW5jZSBmaW5nZXJwcmludCBzdG9yYWdlIHdpdGggd3JpdGVhYmxlIHN0b3Jh Z2UKCiogU3VwcG9ydCBiYWNraW5nIG91dCBmaW5nZXJwcmludCB0byB1bm1vZGlmaWVkIHN0YXRl CiogUHJvdmlkZSB1c2VyLXdyaXRlYWJsZSBkYXRhIHN0b3JhZ2UgYXJlYSBpbiB0aGUgZW1hY3MK ICBleGVjdXRhYmxlIHRvIHN0b3JlIGNvbmZpZ3VyYXRpb24gZGF0YS4KKiBFbmhhbmNlIG1ha2Ut ZmluZ2VycHJpbnQgdG9vbCB3aXRoIG9wdGlvbnMgdG8gdmlldwogIG9yIG1vZGlmeSB0aGUgY29u ZmlndXJhdGlvbiBkYXRhIHVzaW5nIGEgc2hlbGwtZnJpZW5kbHkKICBzdGluZyBsaXRlcmFsIHN5 bnRheC4KKiBwYXJzZS1zdHJpbmctbGl0ZXJhbCBwcm9ncmFtIHRvIHRlc3QgY29ycmVjdG5lc3Mg b2YKICBzdHJpbmcgbGl0ZXJhbCBzeW50YXggcGFyc2luZyBpbiBsaWIvdGVzdC4KKiBNb2RpZnkg Y29uZmlndXJlLmFjIGFuZCBNYWtlZmlsZXMgdG8gYnVpbGQgbGliL3Rlc3QKKiBBZGQgbGliLXNy Yy9tZDVoYXNoIHV0aWxpdHkKLS0tCiBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgIHwg ICA3ICsKIGxpYi1zcmMvbWFrZS1maW5nZXJwcmludC5jICAgICAgfCAzODkgKysrKysrKysrKysr KystLS0KIGxpYi9maW5nZXJwcmludC5jICAgICAgICAgICAgICAgfCA3NTEgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0KIGxpYi9maW5nZXJwcmludC5oICAgICAgICAgICAgICAgfCAx NTcgKysrKysrLQogbGliL3Rlc3QvTWFrZWZpbGUuaW4gICAgICAgICAgICB8IDE5NCArKysrKysr KysKIGxpYi90ZXN0L2luaXQuc2ggICAgICAgICAgICAgICAgfCA3NDYgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogbGliL3Rlc3QvcGFyc2Utc3RyaW5nLWxpdGVyYWwuYyB8IDExNCAr KysrKwogNyBmaWxlcyBjaGFuZ2VkLCAyMjU4IGluc2VydGlvbnMoKyksIDEwMCBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdGVzdC9NYWtlZmlsZS5pbgogY3JlYXRlIG1vZGUg MTAwNjQ0IGxpYi90ZXN0L2luaXQuc2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdGVzdC9wYXJz ZS1zdHJpbmctbGl0ZXJhbC5jCgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJl LmFjCmluZGV4IDA4MzcwOGI3NzU2Li41MGU3MmJmODgxMSAxMDA2NDQKLS0tIGEvY29uZmlndXJl LmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtNzc0Nyw2ICs3NzQ3LDEzIEBAIEFDX0RFRlVOCiAg IGRubCAiLCBbXSwgW29wdF9tYWtlZmlsZT0nJG9wdF9tYWtlZmlsZSddIiBhbmQgaXQgc2hvdWxk IHdvcmsuCiAgIEFSQ0hfSU5ERVBFTkRFTlRfQ09ORklHX0ZJTEVTKFt0ZXN0L2luZnJhL01ha2Vm aWxlXSkKIGZpCitvcHRfbWFrZWZpbGU9bGliL3Rlc3QvTWFrZWZpbGUKK2lmIHRlc3QgLWYgIiRz cmNkaXIvJG9wdF9tYWtlZmlsZS5pbiI7IHRoZW4KKyAgU1VCRElSX01BS0VGSUxFUz0iJFNVQkRJ Ul9NQUtFRklMRVMgJG9wdF9tYWtlZmlsZSIKKyAgZG5sIEFnYWluLCBpdCdzIGJlc3Qgbm90IHRv IHVzZSBhIHZhcmlhYmxlLiAgVGhvdWdoIHlvdSBjYW4gYWRkCisgIGRubCAiLCBbXSwgW29wdF9t YWtlZmlsZT0nJG9wdF9tYWtlZmlsZSddIiBhbmQgaXQgc2hvdWxkIHdvcmsuCisgIEFSQ0hfSU5E RVBFTkRFTlRfQ09ORklHX0ZJTEVTKFtsaWIvdGVzdC9NYWtlZmlsZV0pCitmaQogCiBpZiB0ZXN0 ICIkQU5EUk9JRCIgPSAieWVzIjsgdGhlbgogICBTVUJESVJfTUFLRUZJTEVTPSIkU1VCRElSX01B S0VGSUxFUyBqYXZhL01ha2VmaWxlIGNyb3NzL01ha2VmaWxlIgpkaWZmIC0tZ2l0IGEvbGliLXNy Yy9tYWtlLWZpbmdlcnByaW50LmMgYi9saWItc3JjL21ha2UtZmluZ2VycHJpbnQuYwppbmRleCBj M2U0YzFkYWM2MS4uNzYyNGZhNmExNDMgMTAwNjQ0Ci0tLSBhL2xpYi1zcmMvbWFrZS1maW5nZXJw cmludC5jCisrKyBiL2xpYi1zcmMvbWFrZS1maW5nZXJwcmludC5jCkBAIC0yOSw2ICsyOSw3IEBA IENvcHlyaWdodCAoQykgMjAxOC0yMDI1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgog CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8Y3R5 cGUuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUg PHN0ZGxpYi5oPgpAQCAtNTksMTIwICs2MCwzNzggQEAgQ29weXJpZ2h0IChDKSAyMDE4LTIwMjUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjZW5kaWYKICNlbmRpZiAvKiBXSU5ET1dT TlQgKi8KIAotLyogU3RhdGljIChpbnN0ZWFkIG9mIGJlaW5nIGxvY2FsIHRvICdtYWluJykgdG8g cGFjaWZ5IExlYWtTYW5pdGl6ZXIuICAqLwotc3RhdGljIGNoYXIgKmJ1ZjsKKworc3RhdGljIHVu c2lnbmVkIGNoYXIgZnBfZGF0YVtGSU5HRVJQUklOVF9EQVRBX1NJWkVdOworc3RhdGljIGNoYXIg KnByb2c7CitzdGF0aWMgY2hhciAqZmlsZTsKK3N0YXRpYyBjaGFyICpvdXRmaWxlOworZW51bQor eworICBlcnJidWZfc3ogPSAyNTYKK307CitzdGF0aWMgaW50CityZXBvcnRfZXJyb3JzKEZJTkdF UlBSSU5UX0VSUk9SIHIsIGludCBlcnJub3NbM10pCit7CisgIGNoYXIgZXJyYnVmW2VycmJ1Zl9z el0gPSB7IDAgfTsKKyAgaW50IGVycl9jbnQgPSAwOworICBjaGFyICplcnJtc2cgPSBOVUxMOwor ICBzd2l0Y2ggKHIgJiBGSU5HRVJQUklOVF9FUlJPUl9VTklRVUVfTUFTSykKKyAgICB7CisgICAg Y2FzZSBGSU5HRVJQUklOVF9FUlJPUl9OT05FOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBGSU5H RVJQUklOVF9FUlJPUl9OT19JTkZJTEU6CisgICAgICBmcHJpbnRmKHN0ZGVyciwiJXM6IG1pc3Np bmcgb3IgZXh0cmEgZmlsZSBvcGVyYW5kXG4iLCBwcm9nKTsKKyAgICAgIGVycl9jbnQrKzsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgRklOR0VSUFJJTlRfRVJST1JfSU5GSUxFX05PVF9PUEVORUQ6 CisgICAgICBlcnJtc2cgPSBzdHJlcnJvcl9yIChlcnJub3NbMF0sIGVycmJ1ZiwgZXJyYnVmX3N6 KTsKKyAgICAgIGZwcmludGYoc3RkZXJyLCJFcnJvciBvcGVuaW5nICVzOiAlc1xuIiwgZmlsZSxl cnJtc2cpOworICAgICAgZXJyX2NudCsrOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGSU5HRVJQ UklOVF9FUlJPUl9JTkZJTEVfTk9UX1JFR1VMQVI6CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIl czogRXJyb3I6ICVzIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZVxuIiwKKwkgICAgICAgcHJvZywgZmls ZSk7CisgICAgICBlcnJfY250Kys7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZJTkdFUlBSSU5U X0VSUk9SX0JVRkZFUl9TSVpFOgorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICVzOiBmaWxl IHRvbyBiaWdcbiIsIHByb2csIGZpbGUpOworICAgICAgZXJyX2NudCsrOworICAgICAgYnJlYWs7 CisgICAgY2FzZSBGSU5HRVJQUklOVF9FUlJPUl9CVUZGRVJfQUxMT0NBVElPTjoKKyAgICAgIGVy cm1zZyA9IHN0cmVycm9yX3IgKGVycm5vc1swXSwgZXJyYnVmLCBlcnJidWZfc3opOworICAgICAg ZnByaW50ZihzdGRlcnIsIm1hbGxvYzogJXNcbiIsIGVycm1zZyk7CisgICAgICBlcnJfY250Kys7 CisgICAgICBicmVhazsKKyAgICBjYXNlIEZJTkdFUlBSSU5UX0VSUk9SX0ZQU1RPUkVfQUxMT0NB VElPTjoKKyAgICAgIGVycm1zZyA9IHN0cmVycm9yX3IgKGVycm5vc1swXSwgZXJyYnVmLCBlcnJi dWZfc3opOworICAgICAgZnByaW50ZihzdGRlcnIsIm1hbGxvYzogJXNcbiIsIGVycm1zZyk7Cisg ICAgICBlcnJfY250Kys7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZJTkdFUlBSSU5UX0VSUk9S X0lORklMRV9SRUFEOgorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IEVycm9yOiBjb3VsZCBu b3QgcmVhZCAlc1xuIiwgcHJvZywgZmlsZSk7CisgICAgICBlcnJfY250Kys7CisgICAgICBicmVh azsKKyAgICBjYXNlIEZJTkdFUlBSSU5UX0VSUk9SX0hBU0hfTk9UX0ZPVU5EOgorICAgICAgZnBy aW50ZiAoc3RkZXJyLCAiJXM6ICVzOiBtaXNzaW5nIGZpbmdlcnByaW50XG4iLCBwcm9nLCBmaWxl KTsKKyAgICAgIGVycl9jbnQrKzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRklOR0VSUFJJTlRf RVJST1JfSEFTSF9UT09fTUFOWToKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkZpbmdlcnByaW50 IGlzIG5vdCB1bmlxdWUgaW4gZmlsZS5cbiIpOworICAgICAgZXJyX2NudCsrOworICAgICAgYnJl YWs7CisgICAgY2FzZSBGSU5HRVJQUklOVF9FUlJPUl9PVVRGSUxFX0NSRUFUSU9OOgorICAgICAg ZXJybXNnID0gc3RyZXJyb3JfciAoZXJybm9zWzBdLCBlcnJidWYsIGVycmJ1Zl9zeik7CisgICAg ICBmcHJpbnRmKHN0ZGVyciwiRXJyb3IgY3JlYXRpbmcgJXM6ICVzXG4iLCBvdXRmaWxlLGVycm1z Zyk7CisgICAgICBlcnJfY250Kys7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZJTkdFUlBSSU5U X0VSUk9SX09VVEZJTEVfV1JJVEU6CisgICAgICBlcnJtc2cgPSBzdHJlcnJvcl9yIChlcnJub3Nb MF0sIGVycmJ1ZiwgZXJyYnVmX3N6KTsKKyAgICAgIGZwcmludGYoc3RkZXJyLCJFcnJvciB3cml0 aW5nICVzOiAlc1xuIiwgb3V0ZmlsZSxlcnJtc2cpOworICAgICAgZXJyX2NudCsrOworICAgICAg YnJlYWs7CisgICAgY2FzZSBGSU5HRVJQUklOVF9FUlJPUl9OT19JTlBMQUNFOgorICAgICAgZnBy aW50ZiAoc3RkZXJyLCAiSW5wbGFjZSBtb2RpZmljYXRpb24gZGlzYWxsb3dlZC5cbiIpOworICAg ICAgZXJyX2NudCsrOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGSU5HRVJQUklOVF9FUlJPUl9S QVdfTk9fRElHRVNUOgorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiSW50ZXJuYWwgZXJyb3IuXG4i KTsKKyAgICAgIGVycl9jbnQrKzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRklOR0VSUFJJTlRf RVJST1JfREFUQV9PVkVSRkxPVzoKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkRhdGEgZXhjZWVk cyBhdmFpbGFibGUgc3BhY2UuXG4iKTsKKyAgICAgIGVycl9jbnQrKzsKKyAgICAgIGJyZWFrOwor ICAgIGRlZmF1bHQ6CisgICAgICBmcHJpbnRmKHN0ZGVyciwiVW5yZWNvZ25pemVkIGZpbmdlcnBy aW50IGVycm9yLlxuIik7CisgICAgICBlcnJfY250Kys7CisgICAgfQorICBpZiAociAmIEZJTkdF UlBSSU5UX0VSUk9SX09VVEZJTEVfQ0xPU0UpCisgICAgeworICAgICAgZXJybXNnID0gc3RyZXJy b3JfciAoZXJybm9zWzFdLCBlcnJidWYsIGVycmJ1Zl9zeik7CisgICAgICBmcHJpbnRmKHN0ZGVy ciwiRXJyb3IgY2xvc2luZyAlczogJXNcbiIsIG91dGZpbGUsZXJybXNnKTsKKyAgICAgIGVycl9j bnQrKzsKKyAgICB9CisgIGlmIChyICYgRklOR0VSUFJJTlRfRVJST1JfSU5GSUxFX0NMT1NFKQor ICAgIHsKKyAgICAgIGVycm1zZyA9IHN0cmVycm9yX3IgKGVycm5vc1syXSwgZXJyYnVmLCBlcnJi dWZfc3opOworICAgICAgZnByaW50ZihzdGRlcnIsIkVycm9yIGNsb3NpbmcgJXM6ICVzXG4iLCBm aWxlLGVycm1zZyk7CisgICAgICBlcnJfY250Kys7CisgICAgfQorICByZXR1cm4gZXJyX2NudDsK K30KKworLyogcHJpbnQgZXJyb3JzIGZyb20gYSBmaW5nZXJwcmludF9idWZmZXIsIGNsZWFycyB0 aGUgZXJyb3IgZGF0YSBpbgorICAgdGhlIGJ1ZmZlciwgYW5kIHJldHVybnMgdGhlIG51bWJlciBv ZiBlcnJvcnMgZm91bmQuICovCitzdGF0aWMgaW50CityZXBvcnRfYnVmZmVyX2Vycm9ycyhzdHJ1 Y3QgZmluZ2VycHJpbnRfYnVmZmVyICpmYikKK3sKKyAgZmlsZSA9IGZiLT5maWxlOworICBvdXRm aWxlID0gZmItPm91dGZpbGU7CisgIGludCBlcnJfY250ID0gcmVwb3J0X2Vycm9ycyAoZmItPmNv ZGUsIGZiLT5lcnJub3MpOworICBmYi0+Y29kZSA9IEZJTkdFUlBSSU5UX0VSUk9SX05PTkU7Cisg IGZiLT5lcnJub3NbMF0gPSAwOworICBmYi0+ZXJybm9zWzFdID0gMDsKKyAgZmItPmVycm5vc1sy XSA9IDA7CisgIHJldHVybiBlcnJfY250OworfQorCitzdGF0aWMgdm9pZAorcHJpbnRfZmluZ2Vy cHJpbnRfc3RvcmFnZShzdHJ1Y3QgZmluZ2VycHJpbnRfc3RvcmFnZV9oZWFkZXIgKmZwaCwKKwkJ CSAgdWludDY0X3Qgb2Zmc2V0LAorCQkJICB1aW50NjRfdCBtYXhfZGF0YV9zaXplKQoreworICBj b25zdCBpbnQgbGluZV9ieXRlcyA9IDIwOworICBwcmludGYgKCJPZmZzZXQ6ICVsdSAoJTBseClc biIsb2Zmc2V0LG9mZnNldCk7CisgIHByaW50ZiAoIlByaXN0aW5lIGhhc2ggY29tcGxlbWVudDpc biIpOworICBmb3IgKGludCBpID0gMDsgaSA8IEZJTkdFUlBSSU5UX0hBU0hfU0laRSAtIDE7IGkr KykKKyAgICBwcmludGYoIiUwMlggIiwgZnBoLT5wcmlzdGluZV9oYXNoX2NbaV0pOworICBwcmlu dGYoIiUwMlhcbiIsIGZwaC0+cHJpc3RpbmVfaGFzaF9jW0ZJTkdFUlBSSU5UX0hBU0hfU0laRSAt IDFdKTsKKyAgcHJpbnRmICgiQ3VycmVudCBoYXNoOlxuIik7CisgIGZvciAoaW50IGkgPSAwOyBp IDwgRklOR0VSUFJJTlRfSEFTSF9TSVpFIC0gMTsgaSsrKQorICAgIHByaW50ZigiJTAyWCAiLCBm cGgtPmhhc2hbaV0pOworICBwcmludGYoIiUwMlhcbiIsIGZwaC0+aGFzaFtGSU5HRVJQUklOVF9I QVNIX1NJWkUgLSAxXSk7CisgIHByaW50ZigiRGF0YSBzaXplOiAlbHVcbiIsZnBoLT5zaXplKTsK KyAgdWludDY0X3Qgc3ogPSBtaW4obWF4X2RhdGFfc2l6ZSxmcGgtPnNpemUpOworICBwcmludGYg KCJEYXRhIChmaXJzdCAlbHUgYnl0ZXMpOlxuIixzeik7CisgIHVpbnQ2NF90IGxpbmVzID0gc3ov bGluZV9ieXRlczsKKyAgY29uc3QgaW50IGJsb2NrcyA9IGxpbmVfYnl0ZXMvNDsKKyAgdWludDY0 X3QgaiA9IDAsIGsgPSAwOworICBmb3IgKHVpbnQ2NF90IGwgPSAwOyBsIDwgbGluZXM7IGwrKykK KyAgICB7CisgICAgICBmb3IgKGludCBiID0gMDsgYiA8IGJsb2NrczsgYisrKQorCXsKKwkgIGZv ciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQorCSAgICBwcmludGYoIiUwMlggIiwgZnBoLT5kYXRh W2orK10pOworCSAgcHJpbnRmKCIgIik7CisJfQorICAgICAgZm9yIChpbnQgYiA9IDA7IGIgPCBs aW5lX2J5dGVzOyBiKyspCisJeworCSAgdW5zaWduZWQgY2hhciBjID0gZnBoLT5kYXRhW2srK107 CisJICBwcmludGYoIiVjIixpc3ByaW50KGMpID8gYyA6ICcuJyk7CisJfQorICAgICAgcHJpbnRm KCJcbiIpOworICAgIH0KKyAgaW50IGowID0gajsKKyAgaW50IHIgPSBzeiAlIGxpbmVfYnl0ZXM7 CisgIGlmIChyID4gMCkKKyAgICB7CisgICAgICBmb3IgKGludCBiID0gMDsgYiA8IGJsb2Nrczsg YisrKQorCXsKKwkgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQorCSAgICB7CisJICAgICAg aWYgKGogLSBqMCA8IHIpCisJCXByaW50ZigiJTAyWCAiLCBmcGgtPmRhdGFbaisrXSk7CisJICAg ICAgZWxzZQorCQlqKysscHJpbnRmKCIgICAiKTsKKwkgICAgfQorCSAgcHJpbnRmKCIgIik7CisJ fQorICAgICAgZm9yIChpbnQgYiA9IDA7IGIgPCByOyBiKyspCisJeworCSAgdW5zaWduZWQgY2hh ciBjID0gZnBoLT5kYXRhW2srK107CisJICBwcmludGYoIiVjIixpc3ByaW50KGMpID8gYyA6ICcu Jyk7CisJfQorICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0KKworfQorCitzdGF0aWMgdm9pZAor dXNhZ2Uodm9pZCkKK3sKKyAgICAgICAgICBwcmludGYgKCJtYWtlLWZpbmdlcnByaW50IFtvcHRp b24gLi4uXSAgRklMRVxuIik7CisJICBwcmludGYgKCJlbWJlZCBkYXRhIGFuZC9vciBzZXQgdGhl IGZpbmdlcnByaW50IGluIEZJTEVcbiIpOworCSAgcHJpbnRmICgiIC1iIG1vZGlmeSBkYXRhIHN0 b3JlIGJlZm9yZSBjYWxjdWxhdGluZyBoYXNoXG4iKTsKKwkgIHByaW50ZiAoIiAtciByZXBvcnQg aGFzaFxuIik7CisJICBwcmludGYgKCIgLW4gQWRkIG51bGwgdGVybWluYXRvciBhdCBlbmQgb2Yg c3BlY2lmaWVkIGRhdGFcbiIpOworCSAgcHJpbnRmICgiIC1nIHByaW50IGZpbmdlcnByaW50IHN0 b3JhZ2UgYXJlYVxuIik7CisJICBwcmludGYgKCIgLXcgZm9yY2Ugd3JpdGUgb3V0cHV0IHdoZW4g LXIgb3IgLWcgYXJlIGdpdmVuXG4iKTsKKwkgIHByaW50ZiAoIiAtbCBtYXhpbXVtIHNpemUgb2Yg ZGF0YSBhcmVhIHRvIGRpc3BsYXkgd2l0aCAtZywgIgorCQkgICJvciB0byB3cml0ZSBvdGhlcndp c2VcbiIpOworCSAgcHJpbnRmICgiIC1vIHRoZSBmaWxlIHRvIHdyaXRlIG91dHB1dCB0b1xuIgor CQkgICIgICAgYW5kIGhhcyB0aGUgZWZmZWN0IG9mIC13XG4iKTsKKwkgIHByaW50ZiAoIiAtZCBv dmVyd3JpdGUgdGhlIGRhdGEgYXJlYSB3aXRoIHRoZSAiCisJCSAgImRhdGEgc3VwcGxpZWRcbiIp OworCSAgcHJpbnRmICgiICAgW2RhdGFdIGlzIGluIGEgZm9ybWF0IHNpbWlsYXIgdG8gIgorCQkg ICJzdHJpbmcgbGl0ZXJhbHMgaW4gQyBvciBlY2hvOlxuIik7CisJICBwcmludGYgKCIgICBcXHtm LG4scix0LHYsXFwsJyxcIiw/fSAtIEFOU0kgQ1xuIik7CisJICBwcmludGYgKCIgICBcXHtvLG9v LG9vb30gLSBvY3RhbCB2YWx1ZSAwIC0gMjU1XG4iKTsKKwkgIHByaW50ZiAoIiAgIFxceGhoIC0g aGV4YWRlY2ltYWwgYnl0ZVxuIik7CisJICBwcmludGYgKCIgICBcXCNEeGguLi5oIC0gMl5EIGhl eGFkZWNpbWFsIGRpZ2l0cyB0byBiZSAiCisJCSAgInN0b3JlZCBhcyBhIDJeKEQtMSkgYnl0ZSB2 YWx1ZSBcbiIKKwkJICAiICAgYWNjb3JkaW5nIHRvIHRoZSBlbmRpYW4tbmVzcyBvZiB0aGUgaG9z dCwgIgorCQkgICJEID0gMSwyLDMsNFxuIik7CisJICBwcmludGYgKCIgICBcXEMgLSBvdGhlciB0 aGFuIGFib3ZlLCB0aGUgY2hhcmFjdGVyIENcbiIKKwkJICAiICAgICAgICB0byBhbGxvdyB3cml0 aW5nICdcXCM0eDFcXCAnIGZvciBhIDY0LWJpdCB2YWx1ZSBvZiAxXG4iCisJCSAgIiAgICAgICAg Zm9sbG93ZWQgYnkgYSBzcGFjZSBjaGFyYWN0ZXJcbiIpOworCSAgcHJpbnRmICgiICAtZCBoYXMg dGhlIGVmZmVjdCBvZiAtd1xuIik7Cit9CiAKIGludAogbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogewogICBpbnQgYzsKICAgYm9vbCByYXcgPSBmYWxzZTsKLSAgd2hpbGUgKDAgPD0gKGMg PSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJyaCIpKSkKKyAgYm9vbCBiZWZvcmUgPSBmYWxzZTsKKyAg Ym9vbCBnZXRfZGF0YSA9IGZhbHNlOworICBib29sIGV4cGxpY2l0X3dyaXRlID0gZmFsc2U7Cisg IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBOVUxMOworICBib29sIG51bGx0ZXJtID0gZmFsc2U7Cisg IC8qIGZvciBwcmludGluZyBkYXRhICovCisgIHVpbnQ2NF90IG1heF9kYXRhX3Nob3cgPSA0MDsK KyAgLyogZm9yIHJldHJpZXZpbmcvc2V0dGluZyAqLworICBwdHJkaWZmX3QgbWF4X2RhdGFfc2l6 ZSAgPSAtMTsKKyAgdW5zaWduZWQgY2hhciBkaWdlc3RbRklOR0VSUFJJTlRfSEFTSF9TSVpFXTsK KyAgZmlsZSA9IE5VTEw7CisgIG91dGZpbGUgPSBOVUxMOworICBwcm9nID0gYXJndlswXTsKKwor ICB3aGlsZSAoMCA8PSAoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgInVibnJoZ2Q6bzpsOiIpKSkK ICAgICB7CiAgICAgICBzd2l0Y2ggKGMpCiAgICAgICAgIHsKKyAgICAgICAgY2FzZSAnYic6Cisg ICAgICAgICAgYmVmb3JlID0gdHJ1ZTsKKyAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAn cic6CiAgICAgICAgICAgcmF3ID0gdHJ1ZTsKICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz ZSAnbic6CisgICAgICAgICAgbnVsbHRlcm0gPSB0cnVlOworICAgICAgICAgIGJyZWFrOworICAg ICAgICBjYXNlICdnJzoKKyAgICAgICAgICBnZXRfZGF0YSA9IHRydWU7CisgICAgICAgICAgYnJl YWs7CisgICAgICAgIGNhc2UgJ3cnOgorICAgICAgICAgIGV4cGxpY2l0X3dyaXRlID0gdHJ1ZTsK KyAgICAgICAgICBicmVhazsKKwljYXNlICdsJzoKKwkgIGNoYXIgKmVuZDsKKwkgIG1heF9kYXRh X3Nob3cgPSBzdHJ0b2wgKG9wdGFyZywgJmVuZCwxMCk7CisJICBtYXhfZGF0YV9zaXplID0gKHNp Z25lZCBpbnQpIG1heF9kYXRhX3Nob3c7CisgICAgICAgICAgaWYgKCBlbmQgPT0gb3B0YXJnIHx8 ICplbmQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsCisg ICAgICAgICAgICAgICAgICAgICAgICJzaXplIGFyZ3VtZW50IG11c3QgYmUgYW4gIgorICAgICAg ICAgICAgICAgICAgICAgICAidW5zaWduZWQgaW50ZWdlcixnaXZlbiAnJXMnXG4iLAorICAgICAg ICAgICAgICAgICAgICAgICBvcHRhcmcpOworICAgICAgICAgICAgICByZXR1cm4gRVhJVF9GQUlM VVJFOworICAgICAgICAgICAgfQorCSAgYnJlYWs7CisJY2FzZSAnZCc6CisJICBkYXRhID0gKHVu c2lnbmVkIGNoYXIgKikgb3B0YXJnOworCSAgZXhwbGljaXRfd3JpdGUgPSB0cnVlOworCSAgYnJl YWs7CisJY2FzZSAnbyc6CisJICBvdXRmaWxlID0gIG9wdGFyZzsKKwkgIGV4cGxpY2l0X3dyaXRl ID0gdHJ1ZTsKKwkgIGJyZWFrOwogICAgICAgICBjYXNlICdoJzoKLSAgICAgICAgICBwcmludGYg KCJtYWtlLWZpbmdlcnByaW50IFstcl0gRklMRTogcmVwbGFjZSBvciBjb21wdXRlIGEgaGFzaFxu Iik7CisJICB1c2FnZSgpOwogICAgICAgICAgIHJldHVybiBFWElUX1NVQ0NFU1M7CiAgICAgICAg IGRlZmF1bHQ6CiAgICAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKICAgICAgICAgfQogICAg IH0KLQotICBzdHJ1Y3Qgc2hhMjU2X2N0eCBjdHg7Ci0gIHNoYTI1Nl9pbml0X2N0eCAoJmN0eCk7 Ci0KLSAgY2hhciAqcHJvZyA9IGFyZ3ZbMF07Ci0gIGNoYXIgKmZpbGUgPSBhcmd2W29wdGluZF07 CisgIGZpbGUgPSBhcmd2W29wdGluZF07CiAgIGlmIChhcmdjIC0gb3B0aW5kICE9IDEpCiAgICAg ewogICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IG1pc3Npbmcgb3IgZXh0cmEgZmlsZSBvcGVy YW5kXG4iLCBwcm9nKTsKKyAgICAgIHVzYWdlKCk7CiAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJF OwogICAgIH0KLQotICBGSUxFICpmID0gZm9wZW4gKGZpbGUsIHJhdyA/ICJyIiBGT1BFTl9CSU5B UlkgOiAicisiIEZPUEVOX0JJTkFSWSk7Ci0gIHN0cnVjdCBzdGF0IHN0OwotICBpZiAoIWYgfHwg ZnN0YXQgKGZpbGVubyAoZiksICZzdCkgIT0gMCkKKyAgcHRyZGlmZl90IHBvcyA9IDA7CisgIGlm IChkYXRhICE9IE5VTEwpCiAgICAgewotICAgICAgcGVycm9yIChmaWxlKTsKLSAgICAgIHJldHVy biBFWElUX0ZBSUxVUkU7CisgICAgICBQU0xFUlIgY29kZSA9IHBhcnNlX3N0cmluZ19saXRlcmFs IChkYXRhLCBmcF9kYXRhLCBzaXplb2YgZnBfZGF0YSwKKwkJCQkJICBudWxsdGVybSwgJnBvcyk7 CisgICAgICBpZiAoY29kZSAhPSBQU0xFUlJfTk9ORSkKKwl7CisJICByZXBvcnRfUFNMRVJSIChz dGRlcnIsIGRhdGEsIGNvZGUsIHNpemVvZiBmcF9kYXRhLCBwb3MpOworCSAgZXhpdCAoRVhJVF9G QUlMVVJFKTsKKwl9CiAgICAgfQotCi0gIGlmICghU19JU1JFRyAoc3Quc3RfbW9kZSkpCisgIHN0 cnVjdCBmaW5nZXJwcmludF9yZXBsYWNlbWVudF9vcHRpb25zIG9wdHMgPQogICAgIHsKLSAgICAg IGZwcmludGYgKHN0ZGVyciwgIiVzOiBFcnJvcjogJXMgaXMgbm90IGEgcmVndWxhciBmaWxlXG4i LAotCSAgICAgICBwcm9nLCBmaWxlKTsKLSAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAg fQotCi0gIHB0cmRpZmZfdCBtYXhsZW4gPSBtaW4gKG1pbiAoVFlQRV9NQVhJTVVNIChvZmZfdCks IFBUUkRJRkZfTUFYKSwKLQkJCSAgbWluIChTSVpFX01BWCwgU1NJWkVfTUFYKSk7Ci0gIGlmICht YXhsZW4gPD0gc3Quc3Rfc2l6ZSkKKyAgICAgIC5rZWVwX2hhc2ggPSByYXcsCisgICAgICAuaW5w bGFjZSA9IHRydWUsCisgICAgICAubWF4X2RhdGFfc2l6ZSA9IG1heF9kYXRhX3NpemUKKyAgICB9 OworICBpbnQgZXJybm9zWzNdID0geyAwIH07CisgIHN0cnVjdCBmaW5nZXJwcmludF9idWZmZXIg KmZiOworICBGSU5HRVJQUklOVF9FUlJPUiByID0KKyAgICBmaW5nZXJwcmludF9nZXRfYnVmZmVy KGZpbGUsIG91dGZpbGUsICZvcHRzLCAmZmIsIGVycm5vcyk7CisgIGlmIChyICE9IEZJTkdFUlBS SU5UX0VSUk9SX05PTkUpCiAgICAgewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICVzOiBm aWxlIHRvbyBiaWdcbiIsIHByb2csIGZpbGUpOworICAgICAgcmVwb3J0X2Vycm9ycyhyLCBlcnJu b3MpOwogICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKICAgICB9CiAKLSAgYnVmID0gbWFsbG9j IChzdC5zdF9zaXplICsgMSk7Ci0gIGlmICghYnVmKQorICBpZiAoZ2V0X2RhdGEpCiAgICAgewot ICAgICAgcGVycm9yICgibWFsbG9jIik7Ci0gICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAg ICAgcHJpbnRfZmluZ2VycHJpbnRfc3RvcmFnZSAoZmItPmhkciwKKwkJCQkgKHVpbnQ2NF90KSBm Yi0+b2Zmc2V0LAorCQkJCSBtYXhfZGF0YV9zaG93KTsKKyAgICAgIGlmICghZXhwbGljaXRfd3Jp dGUpCisJZ290byBkb25lOwogICAgIH0KIAotICBzaXplX3QgY2h1bmtzeiA9IGZyZWFkIChidWYs IDEsIHN0LnN0X3NpemUgKyAxLCBmKTsKLSAgaWYgKGZlcnJvciAoZikgfHwgY2h1bmtzeiAhPSBz dC5zdF9zaXplKQorICBpZiAoIGZiLT5vdXRmaWxlID09IE5VTEwgKQorICAgIGdvdG8gZG9uZTsK KworICBpZiAoYmVmb3JlICYmIGRhdGEgIT0gTlVMTCkKICAgICB7Ci0gICAgICBmcHJpbnRmIChz dGRlcnIsICIlczogRXJyb3I6IGNvdWxkIG5vdCByZWFkICVzXG4iLCBwcm9nLCBmaWxlKTsKLSAg ICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgICBmaW5nZXJwcmludF9zZXRfZGF0YSAoZmIs IHBvcywgZnBfZGF0YSk7CisgICAgICBpZiAoZmItPmNvZGUgIT0gRklOR0VSUFJJTlRfRVJST1Jf Tk9ORSkKKwlnb3RvIGRvbmU7CiAgICAgfQogCi0gIHNoYTI1Nl9wcm9jZXNzX2J5dGVzIChidWYs IGNodW5rc3osICZjdHgpOwotCi0gIHVuc2lnbmVkIGNoYXIgZGlnZXN0WzMyXTsKLSAgc2hhMjU2 X2ZpbmlzaF9jdHggKCZjdHgsIGRpZ2VzdCk7Ci0KICAgaWYgKHJhdykKICAgICB7Ci0gICAgICBm b3IgKGludCBpID0gMDsgaSA8IDMyOyArK2kpCi0gICAgICAgIHByaW50ZiAoIiUwMlgiLCBkaWdl c3RbaV0pOworICAgICAgaWYgKCFnZXRfZGF0YSkKKwl7CisJICBmb3IgKGludCBpID0gMDsgaSA8 IDMyOyArK2kpCisJICAgIHByaW50ZiAoIiUwMlgiLCBkaWdlc3RbaV0pOworCX0KKyAgICAgIGlm ICghZXhwbGljaXRfd3JpdGUpCisJZ290byBkb25lOwogICAgIH0KICAgZWxzZQogICAgIHsKLSAg ICAgIGJvb2wgZmluZ2VyZWQgPSBmYWxzZTsKKyAgICAgIGZpbmdlcnByaW50X3NldF9oYXNoKGZi KTsKKyAgICAgIGlmIChmYi0+Y29kZSAhPSBGSU5HRVJQUklOVF9FUlJPUl9OT05FKQorCWdvdG8g ZG9uZTsKKyAgICB9CiAKLSAgICAgIGZvciAoY2hhciAqZmluZ2VyID0gYnVmOwotCSAgIChmaW5n ZXIgPSBtZW1tZW0gKGZpbmdlciwgYnVmICsgY2h1bmtzeiAtIGZpbmdlciwKLQkJCSAgICAgKHVu c2lnbmVkIGNoYXIgKikgZmluZ2VycHJpbnQsCi0JCQkgICAgIHNpemVvZiBmaW5nZXJwcmludCkp OwotCSAgIGZpbmdlcisrKQotCXsKLQkgIGlmICghIChmc2Vla28gKGYsIGZpbmdlciAtIGJ1Ziwg U0VFS19TRVQpID09IDAKLQkJICYmIGZ3cml0ZSAoZGlnZXN0LCAxLCBzaXplb2YgZGlnZXN0LCBm KSA9PSBzaXplb2YgZGlnZXN0KSkKLQkgICAgewotCSAgICAgIHBlcnJvciAoZmlsZSk7Ci0JICAg ICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLQkgICAgfQotCSAgZmluZ2VyZWQgPSB0cnVlOwotCX0K KyAgaWYgKCFiZWZvcmUgJiYgZGF0YSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGZpbmdlcnByaW50 X3NldF9kYXRhIChmYiwgcG9zLCBmcF9kYXRhKTsKKyAgICAgIGlmIChmYi0+Y29kZSAhPSBGSU5H RVJQUklOVF9FUlJPUl9OT05FKQorCWdvdG8gZG9uZTsKKyAgICB9CiAKLSAgICAgIGlmICghZmlu Z2VyZWQpCi0JewotCSAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICVzOiBtaXNzaW5nIGZpbmdlcnBy aW50XG4iLCBwcm9nLCBmaWxlKTsKLQkgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0JfQorICBpZiAo ZmItPm91dGZpbGUgIT0gTlVMTCkKKyAgICB7CisgICAgICBmaW5nZXJwcmludF93cml0ZV9vdXRm aWxlIChmYik7CisgICAgICBpZiAoZmItPmNvZGUgIT0gRklOR0VSUFJJTlRfRVJST1JfTk9ORSkK Kwlnb3RvIGRvbmU7CiAgICAgfQogCi0gIGlmIChmY2xvc2UgKGYpICE9IDApCisgZG9uZToKKyAg aW50IGVycl9jbnQgPSAwOworICBpZiAoZmIgIT0gTlVMTCkKICAgICB7Ci0gICAgICBwZXJyb3Ig KGZpbGUpOwotICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICAgIGVycl9jbnQgPSByZXBv cnRfYnVmZmVyX2Vycm9ycyAoZmIpOworICAgICAgciA9IGZpbmdlcnByaW50X3JlbGVhc2VfYnVm ZmVyKGZiLGVycm5vcyk7CisgICAgICBmYiA9IE5VTEw7CiAgICAgfQorICBlcnJfY250ICs9IHJl cG9ydF9lcnJvcnMociwgZXJybm9zKTsKKyAgaWYgKGVycl9jbnQgPiAwKQorICAgIHJldHVybiBF WElUX0ZBSUxVUkU7CiAKICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKIH0KIAorCisKIC8qIG1ha2Ut ZmluZ2VycHJpbnQuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2xpYi9maW5nZXJwcmludC5j IGIvbGliL2ZpbmdlcnByaW50LmMKaW5kZXggYTg4NzQ2YzliNDYuLjMyNzExZDM2M2Q3IDEwMDY0 NAotLS0gYS9saWIvZmluZ2VycHJpbnQuYworKysgYi9saWIvZmluZ2VycHJpbnQuYwpAQCAtMTgs OSArMTgsNDIgQEAKIGFsb25nIHdpdGggR05VIEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpbmNsdWRlIDxjb25maWcuaD4KLQorI2lu Y2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgImZpbmdlcnByaW50LmgiCiAKKyNpbmNsdWRlIDxs aW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNs dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgor I2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgPHN5 c3N0ZGlvLmg+CisKKyNpbmNsdWRlIDxmaW5nZXJwcmludC5oPgorI2luY2x1ZGUgPGdldG9wdC5o PgorI2luY2x1ZGUgPGludHByb3BzLmg+CisjaW5jbHVkZSA8bWluLW1heC5oPgorI2luY2x1ZGUg PHNoYTI1Ni5oPgorCisjaWZuZGVmIFNTSVpFX01BWAorIyBkZWZpbmUgU1NJWkVfTUFYIFRZUEVf TUFYSU1VTSAoc3NpemVfdCkKKyNlbmRpZgorCisjaWZkZWYgV0lORE9XU05UCisvKiBEZWZpbmVk IHRvIGJlIHN5c19mb3BlbiBpbiBtcy13MzIuaCwgYnV0IG9ubHkgI2lmZGVmIGVtYWNzLCBzbyB0 aGlzCisgICBpcyByZWFsbHkganVzdCBpbnN1cmFuY2UuICAqLworI3VuZGVmIGZvcGVuCisjaW5j bHVkZSA8ZGlyZWN0Lmg+CisKKyNpZm5kZWYgTUlOR1dfVzY0CisjIHVuZGVmIGZzZWVrbworIyBk ZWZpbmUgZnNlZWtvIGZzZWVrbzY0CisjZW5kaWYKKyNlbmRpZiAvKiBXSU5ET1dTTlQgKi8KKwog LyogVGhpcyByYW5kb20gZmluZ2VycHJpbnQgd2FzIGdlbmVyYXRlZCBieSB0aGUgc2hlbGwgY29t bWFuZDoKIAogICAgc2h1ZiAtaSAwLTI1NSAtbiAzMiAtciB8IGF3ayAne3ByaW50ZiAiICAgMHgl LjAyWCxcbiIsICQwfScKQEAgLTI5LDM4ICs2Miw2ODggQEAKICAgIGJ5IGEgZmluZ2VycHJpbnQg b2YgdGhlIHRlbXBvcmFyeSBFbWFjcyBleGVjdXRhYmxlIHRoYXQgd2FzIGJ1aWx0CiAgICBhbG9u ZyB0aGUgd2F5LiAgKi8KIAotdm9sYXRpbGUgdW5zaWduZWQgY2hhciBmaW5nZXJwcmludFtdID0K Ky8qIFRoZSBjb21wbGVtZW50IG9mIHRoZSBwcmlzdGluZSAocmVmZXJlbmNlKSBmaW5nZXJwcmlu dCBzbworICAgdGhlIG9yaWdpbmFsIGV4ZWN1dGFibGUgY2FuIGJlIHJlY292ZXJlZCBhZnRlcgor ICAgc2V0dGluZyB0aGUgZmluZ2VycHJpbnQuCisgKi8KKyNkZWZpbmUgY2hhcmNvbXAoeCkgKCh1 bnNpZ25lZCBjaGFyKSB+KHgpKQorCisKK3ZvbGF0aWxlIHN0cnVjdCBmaW5nZXJwcmludF9zdG9y YWdlIGZpbmdlcnByaW50X3N0b3JhZ2UgPQogICB7Ci0gICAweERFLAotICAgMHg4NiwKLSAgIDB4 QkIsCi0gICAweDk5LAotICAgMHhGRiwKLSAgIDB4RjUsCi0gICAweDQ2LAotICAgMHg5QSwKLSAg IDB4OUUsCi0gICAweDNGLAotICAgMHg5RiwKLSAgIDB4NUQsCi0gICAweDlBLAotICAgMHhERiwK LSAgIDB4RjAsCi0gICAweDkxLAotICAgMHhCRCwKLSAgIDB4Q0QsCi0gICAweEMxLAotICAgMHhF OCwKLSAgIDB4MEMsCi0gICAweDE2LAotICAgMHgxRSwKLSAgIDB4QUYsCi0gICAweEI4LAotICAg MHg2QywKLSAgIDB4RTIsCi0gICAweDJCLAotICAgMHhCMSwKLSAgIDB4MjQsCi0gICAweENFLAot ICAgMHhCMCwKKyAgICB7CisgICAgICBjaGFyY29tcCgweERFKSwKKyAgICAgIGNoYXJjb21wKDB4 ODYpLAorICAgICAgY2hhcmNvbXAoMHhCQiksCisgICAgICBjaGFyY29tcCgweDk5KSwKKyAgICAg IGNoYXJjb21wKDB4RkYpLAorICAgICAgY2hhcmNvbXAoMHhGNSksCisgICAgICBjaGFyY29tcCgw eDQ2KSwKKyAgICAgIGNoYXJjb21wKDB4OUEpLAorICAgICAgY2hhcmNvbXAoMHg5RSksCisgICAg ICBjaGFyY29tcCgweDNGKSwKKyAgICAgIGNoYXJjb21wKDB4OUYpLAorICAgICAgY2hhcmNvbXAo MHg1RCksCisgICAgICBjaGFyY29tcCgweDlBKSwKKyAgICAgIGNoYXJjb21wKDB4REYpLAorICAg ICAgY2hhcmNvbXAoMHhGMCksCisgICAgICBjaGFyY29tcCgweDkxKSwKKyAgICAgIGNoYXJjb21w KDB4QkQpLAorICAgICAgY2hhcmNvbXAoMHhDRCksCisgICAgICBjaGFyY29tcCgweEMxKSwKKyAg ICAgIGNoYXJjb21wKDB4RTgpLAorICAgICAgY2hhcmNvbXAoMHgwQyksCisgICAgICBjaGFyY29t cCgweDE2KSwKKyAgICAgIGNoYXJjb21wKDB4MUUpLAorICAgICAgY2hhcmNvbXAoMHhBRiksCisg ICAgICBjaGFyY29tcCgweEI4KSwKKyAgICAgIGNoYXJjb21wKDB4NkMpLAorICAgICAgY2hhcmNv bXAoMHhFMiksCisgICAgICBjaGFyY29tcCgweDJCKSwKKyAgICAgIGNoYXJjb21wKDB4QjEpLAor ICAgICAgY2hhcmNvbXAoMHgyNCksCisgICAgICBjaGFyY29tcCgweENFKSwKKyAgICAgIGNoYXJj b21wKDB4QjApCisgICAgfSwKKyAgICB7CisgICAgICAweERFLAorICAgICAgMHg4NiwKKyAgICAg IDB4QkIsCisgICAgICAweDk5LAorICAgICAgMHhGRiwKKyAgICAgIDB4RjUsCisgICAgICAweDQ2 LAorICAgICAgMHg5QSwKKyAgICAgIDB4OUUsCisgICAgICAweDNGLAorICAgICAgMHg5RiwKKyAg ICAgIDB4NUQsCisgICAgICAweDlBLAorICAgICAgMHhERiwKKyAgICAgIDB4RjAsCisgICAgICAw eDkxLAorICAgICAgMHhCRCwKKyAgICAgIDB4Q0QsCisgICAgICAweEMxLAorICAgICAgMHhFOCwK KyAgICAgIDB4MEMsCisgICAgICAweDE2LAorICAgICAgMHgxRSwKKyAgICAgIDB4QUYsCisgICAg ICAweEI4LAorICAgICAgMHg2QywKKyAgICAgIDB4RTIsCisgICAgICAweDJCLAorICAgICAgMHhC MSwKKyAgICAgIDB4MjQsCisgICAgICAweENFLAorICAgICAgMHhCMAorICAgIH0sCisgICAgRklO R0VSUFJJTlRfREFUQV9MQVlPVVRfVkVSU0lPTiwKKyAgICBGSU5HRVJQUklOVF9EQVRBX1NJWkUs CisgICAgezB9CisgIH07CisjdW5kZWYgY2hhcmNvbXAKKworc3RhdGljIHVuc2lnbmVkIGNoYXIg aGV4X3ZhbHVlWzI1Nl0gPQorICB7IDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYs MHhGRiwKKyAgICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisgICAg MHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorICAgIDB4RkYsMHhGRiww eEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwvKiAzMiAqLworICAgIDB4RkYsMHhGRiwweEZG LDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKyAgICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYs MHhGRiwweEZGLDB4RkYsCisgICAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiww eEZGLAorICAgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwvKiA2NCAq LworICAgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKyAgICAweEZG LDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisgICAgMHhGRiwweEZGLDB4RkYs MHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorICAgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiww eEZGLDB4RkYsMHhGRiwvKiA5NiAqLworICAgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZG LDB4RkYsMHhGRiwKKyAgICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYs CisgICAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorICAgIDB4RkYs MHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwvKiAxMjggKi8KKyAgICAweEZGLDB4 RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisgICAgMHhGRiwweEZGLDB4RkYsMHhG RiwweEZGLDB4RkYsMHhGRiwweEZGLAorICAgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZG LDB4RkYsMHhGRiwKKyAgICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYs LyogMTYwICovCisgICAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAor ICAgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKyAgICAweEZGLDB4 RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisgICAgMHhGRiwweEZGLDB4RkYsMHhG RiwweEZGLDB4RkYsMHhGRiwweEZGLC8qIDE5MiAqLworICAgIDB4RkYsMHhGRiwweEZGLDB4RkYs MHhGRiwweEZGLDB4RkYsMHhGRiwKKyAgICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiww eEZGLDB4RkYsCisgICAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAor ICAgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwvKiAyMjQgKi8KKyAg ICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisgICAgMHhGRiwweEZG LDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorICAgIDB4RkYsMHhGRiwweEZGLDB4RkYs MHhGRiwweEZGLDB4RkYsMHhGRiwKKyAgICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiww eEZGLDB4RkYsLyogMjU2ICovCisgICAgWycwJ10gPSAwLCBbJzEnXSA9IDEsIFsnMiddID0gMiwg WyczJ10gPSAzLAorICAgIFsnNCddID0gNCwgWyc1J10gPSA1LCBbJzYnXSA9IDYsIFsnNyddID0g NywKKyAgICBbJzgnXSA9IDgsIFsnOSddID0gOSwgWydhJ10gPSAxMCwgWydiJ10gPSAxMSwKKyAg ICBbJ2MnXSA9IDEyLCBbJ2QnXSA9IDEzLCBbJ2UnXSA9IDE0LCBbJ2YnXSA9IDE1LAorICAgIFsn QSddID0gMTAsIFsnQiddID0gMTEsWydDJ10gPSAxMiwgWydEJ10gPSAxMywKKyAgICBbJ0UnXSA9 IDE0LCBbJ0YnXSA9IDE1CiAgIH07CisKKworLyogUGFyc2UgYSBtb2RpZmllZCBzdWJzZXQgb2Yg Qzk5IHN0cmluZyBsaXRlcmFscyAqLworLyogTm8gdW5pY29kZSAqLworLyogRXhwbGljaXQgaGV4 YWRlY2ltYWwgZXNjYXBlcyBvbmx5IGFsbG93ZWQgdG8gZW5jb2RlIGEgYnl0ZSAqLworLyogQWRk aXRpb25hbCBlc2NhcGUgZm9ybSB0byBhbGxvdyBleHBsaWNpdCBzcGVjaWZpY2F0aW9uIG9mCisg ICB0aGUgZW5jb2RlZCBpbnRlZ2VyOgorICAgXCMoMnw0fDgpeCAtIHJlY29yZHMgdGhlIHRyYW5z bGF0aW9uIGludG8gMiw0LCBvciA4IGJ5dGVzCisgICAgICAgICAgICAgICAgICAgaW4gdGhlIG5h dGl2ZSBlbmRpYW5uZXNzLgorKi8KKy8qIFRoZSBlcnJvciByZXBvcnRpbmcgcHJvdG9jb2woPykg aXMgdGVycmlibGUsCisgICBPbmx5IGRlY291cGxlZCBmcm9tIHRoZSBtYWtlLWZpbmdlcnByaW50 IGRyaXZlciB0bworICAgYWxsb3cgZm9yIHRlc3Rpbmcgb2YgdGhlIHJvdXRpbmUuCisgKi8KK1BT TEVSUgorcGFyc2Vfc3RyaW5nX2xpdGVyYWwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2ln bmVkIGNoYXIgKm91dCwKKwkJICAgICAgaW50IHN6LCBib29sIG51bGx0ZXJtLCBwdHJkaWZmX3Qg Km4pCit7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBpbiA9IGluOworICB1bnNpZ25lZCBjaGFy ICpwb3V0ID0gb3V0OworICB1aW50OF90IHZhbF9zaXplID0gMTsKKyAgdW5zaWduZWQgY2hhciBj OworICBjb25zdCB1bnNpZ25lZCBjaGFyICpvLCAqbzA7CisKKyAgd2hpbGUgKCpwaW4gJiYgKHBv dXQgLSBvdXQpIDwgc3opCisgICAgeworICAgICAgaWYgKCpwaW4gIT0gJ1xcJykKKwl7CisJICAq KHBvdXQrKykgPSAqKHBpbisrKTsKKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIG8gPSBwaW4rKzsK KyAgICAgIGlmICghKnBpbikKKwl7CisJICAqKHBvdXQrKykgPSAnXFwnOworCSAgY29udGludWU7 CisJfQorICAgICAgc3dpdGNoICgqcGluKQorCXsKKwljYXNlICdhJzoKKwkgICoocG91dCsrKSA9 ICdcYSc7CisJICBjb250aW51ZTsKKwljYXNlICdiJzoKKwkgICoocG91dCsrKSA9ICdcYic7CisJ ICBjb250aW51ZTsKKwljYXNlICdmJzoKKwkgICoocG91dCsrKSA9ICdcZic7CisJICBjb250aW51 ZTsKKwljYXNlICduJzoKKwkgICoocG91dCsrKSA9ICdcbic7CisJICBjb250aW51ZTsKKwljYXNl ICdyJzoKKwkgICoocG91dCsrKSA9ICdccic7CisJICBjb250aW51ZTsKKwljYXNlICd0JzoKKwkg ICoocG91dCsrKSA9ICdcdCc7CisJICBjb250aW51ZTsKKwljYXNlICd2JzoKKwkgICoocG91dCsr KSA9ICdcdic7CisJICBjb250aW51ZTsKKwljYXNlICdcJyc6CisJICAqKHBvdXQrKykgPSAnXCcn OworCSAgY29udGludWU7CisJY2FzZSAnIic6CisJICAqKHBvdXQrKykgPSAnIic7CisJICBjb250 aW51ZTsKKwljYXNlICc/JzoKKwkgICoocG91dCsrKSA9ICc/JzsKKwkgIGNvbnRpbnVlOworCWNh c2UgJ1xcJzoKKwkgICoocG91dCsrKSA9ICdcXCc7CisJICBjb250aW51ZTsKKwljYXNlICcwJzog Y2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOgorCWNhc2Ug JzYnOiBjYXNlICc3JzoKKwkgIGdvdG8gcGFyc2Vfb2N0YWw7CisJY2FzZSAnIyc6CisJICBvMCA9 IG87CisJICBvID0gcGluOworCSAgaWYgKCAoYyA9ICooKytwaW4pKSApCisJICAgIHsKKwkgICAg ICBzd2l0Y2ggKGMpCisJCXsKKwkJY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAn NCc6CisJCSAgdmFsX3NpemUgPSAxIDw8IChjIC0gJzEnKTsKKwkJICBjID0gKisrcGluOworCQkg IHBpbisrOworCQkgIGlmICggYyAhPSAneCcgJiYgYyAhPSAnWCcpCisJCSAgICB7CisJCSAgICAg IHBpbiA9IG87CisJCSAgICAgIGdvdG8gYmFkX2VzY2FwZTsKKwkJICAgIH0KKwkJICBpZiAocG91 dCArIHZhbF9zaXplIC0xIC0gb3V0IDwgc3opCisJCSAgICBnb3RvIHBhcnNlX2hleDsKKwkJICBw aW4gPSBvOworCQkgIGdvdG8gaW5wdXRfdG9vX2xhcmdlOworCQlkZWZhdWx0OgorCQkgIHBpbiA9 IG87CisJCSAgZ290byBiYWRfZXNjYXBlOworCQl9CisJICAgIH0KKwkgIHBpbiA9IG87CisJICBn b3RvIGJhZF9lc2NhcGU7CisJY2FzZSAnWCc6IGNhc2UgJ3gnOgorCSAgdmFsX3NpemUgPSAxOwor CSAgbzAgPSBvOworCSAgbyA9IHBpbjsKKwkgIGlmICgqKytwaW4pCisJICAgIGdvdG8gcGFyc2Vf aGV4OworCSAgcGluLS07CisJICAgX19hdHRyaWJ1dGVfXyAoKGZhbGx0aHJvdWdoKSk7CisJZGVm YXVsdDoKKwkgIGMgPSAqcGluOworCSAgaWYgKGlzcHJpbnQoYykpCisJICAgIHsKKwkgICAgICAq KHBvdXQrKykgPSBjOworCSAgICAgIHBpbisrOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJ ICAvKiBlbHNlICovCisJYmFkX2VzY2FwZToKKwkgIGlmIChuICE9IE5VTEwpICpuID0gbzAgLSBp bjsKKwkgIHJldHVybiBQU0xFUlJfQkFEX0VTQ0FQRTsKKwl9CisgICAgcGFyc2Vfb2N0YWw6Cisg ICAgICB7CisJbyA9IHBpbjsKKwl1bnNpZ25lZCBpbnQgYWNjID0gKCoocGluKyspIC0gJzAnKTsK KwljaGFyIHRtcDsKKwlpZiAoISgqcGluKSB8fCAhKCAodG1wID0gKnBpbiAtICcwJyksIHRtcCA+ PSAwICYmIHRtcCA8IDgpKQorCSAgeworCSAgICAqKHBvdXQrKykgPSAodW5zaWduZWQgY2hhcikg YWNjOworCSAgICBjb250aW51ZTsKKwkgIH0KKwlhY2MgPDw9IDM7CisJYWNjICs9IHRtcDsKKwlw aW4rKzsKKwlpZiAoISgqcGluKSB8fCAhKCAodG1wID0gKnBpbiAtICcwJyksIHRtcCA+PSAwICYm IHRtcCA8IDgpKQorCSAgeworCSAgICAqKHBvdXQrKykgPSAodW5zaWduZWQgY2hhcikgYWNjOwor CSAgICBjb250aW51ZTsKKwkgIH0KKwlhY2MgPDw9IDM7CisJYWNjICs9IHRtcDsKKwlpZiAoYWNj ID4gMjU1KQorCSAgeworCSAgICBpZiAobiAhPSBOVUxMKSAqbiA9IG8wIC0gaW47CisJICAgIHJl dHVybiBQU0xFUlJfQkFEX09DVEFMOworCSAgfQorCSoocG91dCsrKSA9ICh1bnNpZ25lZCBjaGFy KSBhY2M7CisJY29udGludWU7CisgICAgICB9CisgICAgcGFyc2VfaGV4OgorICAgICAgbzAgPSBv OworICAgICAgbyA9IHBpbjsKKyAgICAgIHVpbnQ2NF90IGFjYzsKKyAgICAgIC8qIG1heGltdW0g bnVtYmVyIG9mIGRpZ2l0cyB0byByZWFkICovCisgICAgICB1bnNpZ25lZCBjaGFyIGxpbSA9IDIq dmFsX3NpemU7CisgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBoZXhfdmFsdWVbKihwaW4rKyldOwor ICAgICAgaWYgKGMgPT0gMHhGRikKKwl7CisJICBpZiAobiAhPSBOVUxMKSAqbiA9IG8wIC0gaW47 CisJICByZXR1cm4gUFNMRVJSX0JBRF9IRVg7CisJfQorICAgICAgYWNjID0gYzsKKyAgICAgIHdo aWxlICggcGluIC0gbyA8IGxpbSAmJiAoKGMgPSBoZXhfdmFsdWVbKnBpbl0pICE9IDB4RkYpICYm IHBpbisrKQorCXsKKwkgIGFjYyA8PD0gNDsKKwkgIGFjYyArPSBjOworCX0KKyAgICAgIHN3aXRj aCAodmFsX3NpemUpCisJeworCWNhc2UgMToKKwkgICooKHVpbnQ4X3QgKikgcG91dCkgPSAodWlu dDhfdCkgYWNjOworCSAgYnJlYWs7CisJY2FzZSAyOgorCSAgKigodWludDE2X3QgKikgcG91dCkg PSAodWludDE2X3QpIGFjYzsKKwkgIGJyZWFrOworCWNhc2UgNDoKKwkgICooKHVpbnQzMl90ICop IHBvdXQpID0gKHVpbnQzMl90KSBhY2M7CisJICBicmVhazsKKwljYXNlIDg6CisJICAqKCh1aW50 NjRfdCAqKSBwb3V0KSA9IGFjYzsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBpZiAobiAhPSBO VUxMKSAqbiA9IG8wIC0gaW47CisJICByZXR1cm4gUFNMRVJSX0JBRF9IRVg7CisJfQorICAgICAg cG91dCArPSB2YWxfc2l6ZTsKKyAgICB9CisKKyAgaWYgKG51bGx0ZXJtICYmIHBvdXQgLSBvdXQg PCBzeiAtIDEpCisgICAgeworICAgICAgKihwb3V0KyspID0gMDsKKyAgICB9CisgIGVsc2UgaWYg KG51bGx0ZXJtKQorICAgIHsKKyAgICAgIGlmIChuICE9IE5VTEwpICpuID0gcGluIC0gaW47Cisg ICAgICByZXR1cm4gUFNMRVJSX09WRVJGTE9XOworICAgIH0KKworICBpZiAoKnBpbikKKyAgICB7 CisgICAgaW5wdXRfdG9vX2xhcmdlOgorICAgICAgaWYgKG4gIT0gTlVMTCkgKm4gPSBwaW4gLSBp bjsKKyAgICAgIHJldHVybiBQU0xFUlJfT1ZFUkZMT1c7CisgICAgfQorCisgIGlmIChuICE9IE5V TEwpICpuID0gcG91dCAtIG91dDsKKyAgcmV0dXJuICAgUFNMRVJSX05PTkU7Cit9CisKK3ZvaWQg cmVwb3J0X1BTTEVSUiAoRklMRSAqc3RyZWFtLAorCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAq aW4sCisJCSAgICBQU0xFUlIgY29kZSwKKwkJICAgIGludCBzeiwKKwkJICAgIHB0cmRpZmZfdCBw b3NpdGlvbikKK3sKKyAgc3dpdGNoIChjb2RlKQorICAgIHsKKyAgICBjYXNlIFBTTEVSUl9PVkVS RkxPVzoKKyAgICAgIGZwcmludGYgKHN0cmVhbSwgIkVycm9yOiBwYXJzZWQgaW5wdXQgc3RyaW5n IGV4Y2VlZGVkIGFsbG9jYXRlZCAiCisJICAgICAgICJzcGFjZSAoJWQgYnl0ZXMpIGF0IGNoYXJh Y3RlciAlbGQuXG4iLCBzeiwgcG9zaXRpb24pOworICAgICAgZnByaW50ZiAoc3RyZWFtLCAiSW5w dXQ6ICclcydcbiIsaW4pOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQU0xFUlJfQkFEX09DVEFM OgorICAgICAgZnByaW50ZiAoc3RyZWFtLCAiRXJyb3I6IGNvdWxkIG5vdCBwYXJzZSBvY3RhbCBl c2NhcGUgIgorCSAgICAgICAic2VxdWVuY2UgYXQgY2hhcmFjdGVyICVsZCBpbiAnJXMnXG4iLAor CSAgICAgICBwb3NpdGlvbiwgaW4pOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQU0xFUlJfQkFE X0hFWDoKKyAgICAgIGZwcmludGYgKHN0cmVhbSwgIkVycm9yOiBjb3VsZCBub3QgcGFyc2UgaGV4 IGVzY2FwZSAiCisJICAgICAgICJzZXF1ZW5jZSBhdCBjaGFyYWN0ZXIgJWxkIGluICclcydcbiIs CisJICAgICAgIHBvc2l0aW9uLCBpbik7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBTTEVSUl9C QURfRVNDQVBFOgorICAgICAgZnByaW50ZiAoc3RyZWFtLCAiRXJyb3I6IFVucmVjb2duaXplZCBl c2NhcGUgIgorCSAgICAgICAic2VxdWVuY2UgYXQgY2hhcmFjdGVyICVsZCBpbiAnJXMnXG4iLAor CSAgICAgICBwb3NpdGlvbiwgaW4pOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQU0xFUlJfTk9O RToKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJF cnJvciBjb2RlIG5vdCByZWNvZ25pemVkLlxuIik7CisgICAgICBleGl0IChFWElUX0ZBSUxVUkUp OworICAgIH0KK30KKworCisKKworCisKKy8qIGluaXRpYWxpemUgYSBmaW5nZXJwcmludCBvcGVy YXRpb24gKi8KK2V4dGVybiBGSU5HRVJQUklOVF9FUlJPUgorZmluZ2VycHJpbnRfZ2V0X2J1ZmZl cihjaGFyICpmaWxlLAorCQkgICAgICAgY2hhciAqb3V0ZmlsZSwKKwkJICAgICAgIHN0cnVjdCBm aW5nZXJwcmludF9yZXBsYWNlbWVudF9vcHRpb25zICpvcHRzLAorCQkgICAgICAgc3RydWN0IGZp bmdlcnByaW50X2J1ZmZlciAqKmZicCwKKwkJICAgICAgIGludCBlcnJub3NbM10pCit7CisgIEZJ TkdFUlBSSU5UX0VSUk9SIHJlc3VsdCA9IEZJTkdFUlBSSU5UX0VSUk9SX05PTkU7CisgIHN0cnVj dCBmaW5nZXJwcmludF9idWZmZXIgKmZiID0KKyAgICBjYWxsb2MoMSxzaXplb2Yoc3RydWN0IGZp bmdlcnByaW50X2J1ZmZlcikpOworICBpZiAoZmIgPT0gTlVMTCkKKyAgICByZXR1cm4gRklOR0VS UFJJTlRfRVJST1JfQlVGRkVSX0FMTE9DQVRJT047CisgIG1lbWNweSgmKGZiLT5vcHRzKSxvcHRz LHNpemVvZihzdHJ1Y3QgIGZpbmdlcnByaW50X3JlcGxhY2VtZW50X29wdGlvbnMpKTsKKyAgZmIt PmNvZGUgPSBGSU5HRVJQUklOVF9FUlJPUl9OT05FOworICBib29sIHJhdyA9IG9wdHMgPyBvcHRz LT5rZWVwX2hhc2ggOiBmYWxzZTsKKyAgYm9vbCBpbnBsYWNlID0gb3B0cyA/IG9wdHMtPmlucGxh Y2UgOiBmYWxzZTsKKyAgaW50IG5vZmZzZXRzID0gMDsKKyAgaWYgKGZpbGUgPT0gTlVMTCB8fCAh KCpmaWxlKSkKKyAgICB7CisgICAgICByZXN1bHQgfD0gRklOR0VSUFJJTlRfRVJST1JfTk9fSU5G SUxFOworICAgICAgZ290byBkb25lOworICAgIH0KKyAgcHRyZGlmZl90IGZpbGVfbmFtZV9zeiA9 IHN0cmxlbihmaWxlKSsxOworICBmYi0+ZmlsZSA9IChjaGFyICopIG1hbGxvYyhmaWxlX25hbWVf c3opOworICBpZiAoZmItPmZpbGUgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnJub3NbMF0gPSBl cnJubzsKKyAgICAgIHJlc3VsdCA9IEZJTkdFUlBSSU5UX0VSUk9SX0JVRkZFUl9BTExPQ0FUSU9O OworICAgICAgZ290byBkb25lOworICAgIH0KKyAgbWVtY3B5IChmYi0+ZmlsZSxmaWxlLGZpbGVf bmFtZV9zeik7CisgIGlmICghaW5wbGFjZSAmJiAoIW91dGZpbGUgfHwgISgqb3V0ZmlsZSkpKQor ICAgIHsKKyAgICAgIHJlc3VsdCB8PSBGSU5HRVJQUklOVF9FUlJPUl9OT19JTlBMQUNFOworICAg ICAgZ290byBkb25lOworICAgIH0KKyAgaWYgKG91dGZpbGUgIT0gTlVMTCkKKyAgICB7CisgICAg ICBjaGFyIGZpbGVwYXRoW1BBVEhfTUFYXSxvdXRmaWxlcGF0aFtQQVRIX01BWF07CisgICAgICBp ZiAoIShyZWFscGF0aChmaWxlLGZpbGVwYXRoKSkpCisJeworCSAgcmVzdWx0IHw9IEZJTkdFUlBS SU5UX0VSUk9SX05PX0lORklMRTsKKwkgIGdvdG8gZG9uZTsKKwl9CisgICAgICBpZiAocmVhbHBh dGgob3V0ZmlsZSwgb3V0ZmlsZXBhdGgpCisJICAmJiAhc3RyY21wKGZpbGVwYXRoLG91dGZpbGVw YXRoKSkKKwl7CisJICBpZiAoIWlucGxhY2UpCisJICAgIHsKKwkgICAgICByZXN1bHQgfD0gRklO R0VSUFJJTlRfRVJST1JfTk9fSU5QTEFDRTsKKwkgICAgICBnb3RvIGRvbmU7CisJICAgIH0KKwkg IGVsc2UKKwkgICAgeworCSAgICAgIGZiLT5vdXRmaWxlID0gcmF3ID8gTlVMTCA6IGZiLT5maWxl OworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIHB0cmRpZmZfdCBvdXRmaWxlX25hbWVf c3ogPSBzdHJsZW4ob3V0ZmlsZSkrMTsKKwkgIGZiLT5vdXRmaWxlID0gKGNoYXIgKikgbWFsbG9j KG91dGZpbGVfbmFtZV9zeik7CisJICBpZiAoZmItPm91dGZpbGUgPT0gTlVMTCkKKwkgICAgewor CSAgICAgIGVycm5vc1swXSA9IGVycm5vOworCSAgICAgIHJlc3VsdCA9IEZJTkdFUlBSSU5UX0VS Uk9SX0JVRkZFUl9BTExPQ0FUSU9OOworCSAgICAgIGdvdG8gZG9uZTsKKwkgICAgfQorCSAgbWVt Y3B5IChmYi0+b3V0ZmlsZSxvdXRmaWxlLG91dGZpbGVfbmFtZV9zeik7CisJfQorICAgIH0KKyAg ZWxzZQorICAgIHsKKyAgICAgIGZiLT5vdXRmaWxlID0gZmItPmZpbGU7CisgICAgfQorICBpZiAo ZmItPm91dGZpbGUgIT0gIGZiLT5maWxlKQorICAgIGZiLT5pbiA9IGZvcGVuIChmaWxlLCAiciIg Rk9QRU5fQklOQVJZKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGZiLT5pbiA9IGZvcGVuIChmaWxl LCJyKyIgRk9QRU5fQklOQVJZKTsKKyAgICAgIGZiLT5vdXQgPSBmYi0+aW47CisgICAgfQorCisg IHN0cnVjdCBzdGF0IHN0OworICBpZiAoIWZiLT5pbiB8fCBmc3RhdCAoZmlsZW5vIChmYi0+aW4p LCAmc3QpICE9IDApCisgICAgeworICAgICAgcmVzdWx0IHw9IEZJTkdFUlBSSU5UX0VSUk9SX0lO RklMRV9OT1RfT1BFTkVEOworICAgICAgZXJybm9zWzBdID0gZXJybm87CisgICAgICBnb3RvIGRv bmU7CisgICAgfQorCisgIGlmICghU19JU1JFRyAoc3Quc3RfbW9kZSkpCisgICAgeworICAgICAg cmVzdWx0IHw9IEZJTkdFUlBSSU5UX0VSUk9SX0lORklMRV9OT1RfUkVHVUxBUjsKKyAgICAgIGdv dG8gZG9uZTsKKyAgICB9CisKKyAgcHRyZGlmZl90IG1heGxlbiA9IG1pbiAobWluIChUWVBFX01B WElNVU0gKG9mZl90KSwgUFRSRElGRl9NQVgpLAorCQkJICBtaW4gKFNJWkVfTUFYLCBTU0laRV9N QVgpKTsKKyAgaWYgKG1heGxlbiA8PSBzdC5zdF9zaXplKQorICAgIHsKKyAgICAgIHJlc3VsdCB8 PSBGSU5HRVJQUklOVF9FUlJPUl9CVUZGRVJfU0laRTsKKyAgICAgIGdvdG8gZG9uZTsKKyAgICB9 CisKKyAgeworICAgIHB0cmRpZmZfdCBidWZmZXJfc2l6ZSA9IHN0LnN0X3NpemU7CisgICAgdW5z aWduZWQgY2hhciAqYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikgbWFsbG9jIChidWZmZXJfc2l6 ZSArIDEpOworICAgIGlmICghYnVmZmVyKQorICAgICAgeworCXJlc3VsdCB8PSBGSU5HRVJQUklO VF9FUlJPUl9CVUZGRVJfQUxMT0NBVElPTjsKKwllcnJub3NbMF0gPSBlcnJubzsKKwlnb3RvIGRv bmU7CisgICAgICB9CisgICAgZmItPmJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICBmYi0+YnVmZmVyX3Np emUgPSBidWZmZXJfc2l6ZSArIDE7CisgIH0KKyAgc2l6ZV90IGNodW5rc3ogPSBmcmVhZCAoZmIt PmJ1ZmZlciwgMSwgZmItPmJ1ZmZlcl9zaXplLCBmYi0+aW4pOworICBpZiAoZmVycm9yIChmYi0+ aW4pIHx8IGNodW5rc3ogIT0gc3Quc3Rfc2l6ZSkKKyAgICB7CisgICAgICBmYi0+ZXJybm9zWzBd ID0gZXJybm87CisgICAgICByZXN1bHQgfD0gRklOR0VSUFJJTlRfRVJST1JfSU5GSUxFX1JFQUQ7 CisgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgIGZvciAodW5zaWduZWQgY2hhciAqZmluZ2Vy ID0gZmItPmJ1ZmZlcjsKKyAgICAgICAoZmluZ2VyID0gbWVtbWVtIChmaW5nZXIsIGZiLT5idWZm ZXIgKyBjaHVua3N6IC0gZmluZ2VyLAorCQkJICh1bnNpZ25lZCBjaGFyICopIGZpbmdlcnByaW50 X3N0b3JhZ2UucHJpc3RpbmVfaGFzaF9jLAorCQkJIHNpemVvZiBmaW5nZXJwcmludF9zdG9yYWdl LnByaXN0aW5lX2hhc2hfYykpOworICAgICAgIGZpbmdlcisrKQorICAgIHsKKyAgICAgIG5vZmZz ZXRzKys7CisgICAgICBpZiAobm9mZnNldHMgPiAxKQorCXsKKwkgIHJlc3VsdCB8PSBGSU5HRVJQ UklOVF9FUlJPUl9IQVNIX1RPT19NQU5ZOworCSAgZ290byBkb25lOworCX0KKyAgICAgIGZiLT5v ZmZzZXQgPSBmaW5nZXIgLSBmYi0+YnVmZmVyOworICAgIH0KKyAgaWYgKG5vZmZzZXRzID09IDAp CisgICAgeworICAgICAgcmVzdWx0IHw9IEZJTkdFUlBSSU5UX0VSUk9SX0hBU0hfTk9UX0ZPVU5E OworICAgICAgZ290byBkb25lOworICAgIH0KKyAgc3RydWN0IGZpbmdlcnByaW50X3N0b3JhZ2Vf aGVhZGVyICpoZHIgPQorICAgIChzdHJ1Y3QgZmluZ2VycHJpbnRfc3RvcmFnZV9oZWFkZXIgKikg KGZiLT5idWZmZXIgKyBmYi0+b2Zmc2V0KTsKKyAgcHRyZGlmZl90IHN0b3JlX3N6ID0gc2l6ZW9m KHN0cnVjdCBmaW5nZXJwcmludF9zdG9yYWdlX2hlYWRlcikgKyBoZHItPnNpemU7CisgIHVuc2ln bmVkIGNoYXIgKnRtcCA9ICh1bnNpZ25lZCBjaGFyICopIGNhbGxvYyhzdG9yZV9zeiwxKTsKKyAg aWYgKHRtcCA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVycm5vc1swXSA9IGVycm5vOworICAgICAg cmVzdWx0ID0gRklOR0VSUFJJTlRfRVJST1JfQlVGRkVSX0FMTE9DQVRJT047CisgICAgICBnb3Rv IGRvbmU7CisgICAgfQorICAvKiBtYWtlIHN1cmUgdGhlcmUgaXMgYSBwcmlzdGluZSBjb3B5IG9m IHRoZSBleGlzdGluZyBkYXRhICovCisgIG1lbWNweSAodG1wLCBmYi0+YnVmZmVyICsgZmItPm9m ZnNldCwgc3RvcmVfc3opOworICBmYi0+aGRyID0gKHN0cnVjdCBmaW5nZXJwcmludF9zdG9yYWdl X2hlYWRlciAqKSB0bXA7CisKKyBkb25lOgorICBpZiAocmVzdWx0ICE9IEZJTkdFUlBSSU5UX0VS Uk9SX05PTkUpCisgICAgcmVzdWx0IHw9IGZpbmdlcnByaW50X3JlbGVhc2VfYnVmZmVyIChmYixl cnJub3MpOworICBlbHNlCisgICAgKmZicCA9IGZiOworICByZXR1cm4gcmVzdWx0OworfQorCitG SU5HRVJQUklOVF9FUlJPUgorZmluZ2VycHJpbnRfcmVsZWFzZV9idWZmZXIgKHN0cnVjdCBmaW5n ZXJwcmludF9idWZmZXIgKmZiLCBpbnQgZXJybm9zWzNdKQoreworICBpZiAoZmIgPT0gTlVMTCkK KyAgICByZXR1cm4gRklOR0VSUFJJTlRfRVJST1JfTk9ORTsKKyAgRklOR0VSUFJJTlRfRVJST1Ig cmVzdWx0ID0gZmItPmNvZGU7CisgIGlmICghZXJybm9zWzBdKQorICAgIHsKKyAgICAgIGVycm5v c1swXSA9IGZiLT5lcnJub3NbMF07CisgICAgfQorICBpZiAoZmItPm91dCAmJiBmYi0+b3V0ICE9 IGZiLT5pbiAmJiAoZmNsb3NlIChmYi0+b3V0KSAhPSAwKSkKKyAgICB7CisgICAgICByZXN1bHQg fD0gRklOR0VSUFJJTlRfRVJST1JfT1VURklMRV9DTE9TRTsKKyAgICAgIGVycm5vc1sxXSA9IGVy cm5vOworICAgIH0KKyAgZmItPm91dCA9IE5VTEw7CisgIGlmIChmYi0+aW4gJiYgZmNsb3NlIChm Yi0+aW4pICE9IDApCisgICAgeworICAgICAgcmVzdWx0IHw9IEZJTkdFUlBSSU5UX0VSUk9SX0lO RklMRV9DTE9TRTsKKyAgICAgIGVycm5vc1syXSA9IGVycm5vOworICAgIH0KKyAgZmItPmluID0g TlVMTDsKKyAgaWYgKGZiLT5vdXRmaWxlICYmIGZiLT5vdXRmaWxlICE9IGZiLT5maWxlKQorICAg IGZyZWUoZmItPm91dGZpbGUpOworICBpZiAoZmItPmZpbGUpCisgICAgZnJlZShmYi0+ZmlsZSk7 CisgIGlmIChmYi0+YnVmZmVyKQorICAgIGZyZWUoZmItPmJ1ZmZlcik7CisgIGlmIChmYi0+aGRy ICE9IE5VTEwpCisgICAgZnJlZShmYi0+aGRyKTsKKyAgZnJlZSAoZmIpOworICByZXR1cm4gcmVz dWx0OworfQorCisvKiBjbGVhcnMgZXhpc3RpbmcgZGF0YSBhbmQgY29waWVzIHRoZSBwcm92aWRl ZCBkYXRhCisgICBpbiAqLwordm9pZAorZmluZ2VycHJpbnRfc2V0X2RhdGEoc3RydWN0IGZpbmdl cnByaW50X2J1ZmZlciAqZmIsCisJCSAgICAgcHRyZGlmZl90IGRhdGFfc2l6ZSwKKwkJICAgICB1 bnNpZ25lZCBjaGFyICpkYXRhKQoreworICBwdHJkaWZmX3Qgc3ogPSBmYi0+aGRyLT5zaXplOwor ICBpZiAoZGF0YV9zaXplID4gc3opCisgICAgeworICAgICAgZmItPmNvZGUgfD0gRklOR0VSUFJJ TlRfRVJST1JfREFUQV9PVkVSRkxPVzsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgc3RydWN0 IGZpbmdlcnByaW50X3N0b3JhZ2VfaGVhZGVyICpmcGg7CisgIGZwaCA9IChzdHJ1Y3QgZmluZ2Vy cHJpbnRfc3RvcmFnZV9oZWFkZXIgKikgKGZiLT5idWZmZXIgKyBmYi0+b2Zmc2V0KTsKKyAgbWVt Y3B5IChmcGgtPmRhdGEsIGRhdGEsIGRhdGFfc2l6ZSk7CisgIGlmIChkYXRhX3NpemUgPCBzeikK KyAgICB7CisgICAgICBtZW1zZXQgKGZwaC0+ZGF0YSArIGRhdGFfc2l6ZSwKKwkgICAgICAwLAor CSAgICAgIChzeiAtIGRhdGFfc2l6ZSkpOworICAgIH0KK30KKworLyogY2FsY3VsYXRlcyBoYXNo IGFmdGVyIHJlc2V0dGluZyB0aGUgaGFzaCB2YWx1ZSB0byBpdHMKKyAgIHByaXN0aW5lIHN0YXRl LCBidXQgbGVhdmluZyBhbnkgb3RoZXIgc3RvcmVkIGRhdGEKKyAgIGFzIGlzICovCit2b2lkCitm aW5nZXJwcmludF9zZXRfaGFzaChzdHJ1Y3QgZmluZ2VycHJpbnRfYnVmZmVyICpmYikKK3sKKyAg ZmluZ2VycHJpbnRfcmVzZXRfaGFzaCAoZmIpOworICBzdHJ1Y3Qgc2hhMjU2X2N0eCBjdHg7Cisg IHNoYTI1Nl9pbml0X2N0eCAoJmN0eCk7CisgIHN0cnVjdCBmaW5nZXJwcmludF9zdG9yYWdlX2hl YWRlciAqZnBoOworICBmcGggPSAoc3RydWN0IGZpbmdlcnByaW50X3N0b3JhZ2VfaGVhZGVyICop IChmYi0+YnVmZmVyICsgZmItPm9mZnNldCk7CisgIHNoYTI1Nl9wcm9jZXNzX2J5dGVzIChmYi0+ YnVmZmVyLCBmYi0+YnVmZmVyX3NpemUgLSAxLCAmY3R4KTsKKyAgLyogb3ZlcndyaXRlIHRoZSBo YXNoIGluIHRoZSBpbi1tZW1vcnkgY29weSBvZiB0aGUgZmlsZSAqLworICBzaGEyNTZfZmluaXNo X2N0eCAoJmN0eCwgZnBoLT5oYXNoKTsKKyAgZmluZ2VycHJpbnRfZ2V0X2hhc2ggKGZiKTsKK30K KworLyogcmVzZXQgaGFzaCBpbiBpbi1tZW1vcnkgY29weSBvZiBmaWxlICovCit2b2lkCitmaW5n ZXJwcmludF9yZXNldF9oYXNoKHN0cnVjdCBmaW5nZXJwcmludF9idWZmZXIgKmZiKQoreworICB1 bnNpZ25lZCBjaGFyIHByaXN0aW5lX2RpZ2VzdFtGSU5HRVJQUklOVF9IQVNIX1NJWkVdOworICBm b3IgKGludCBpID0gMDsgaSA8IEZJTkdFUlBSSU5UX0hBU0hfU0laRTsgaSsrKQorICAgIHByaXN0 aW5lX2RpZ2VzdFtpXSA9IH5maW5nZXJwcmludF9zdG9yYWdlLnByaXN0aW5lX2hhc2hfY1tpXTsK KyAgc3RydWN0IGZpbmdlcnByaW50X3N0b3JhZ2VfaGVhZGVyICpmcGg7CisgIGZwaCA9IChzdHJ1 Y3QgZmluZ2VycHJpbnRfc3RvcmFnZV9oZWFkZXIgKikgKGZiLT5idWZmZXIgKyBmYi0+b2Zmc2V0 KTsKKyAgbWVtY3B5IChmcGgtPmhhc2gscHJpc3RpbmVfZGlnZXN0LEZJTkdFUlBSSU5UX0hBU0hf U0laRSk7Cit9CisKK3ZvaWQKK2ZpbmdlcnByaW50X2dldF9oYXNoKHN0cnVjdCBmaW5nZXJwcmlu dF9idWZmZXIgKmZiKQoreworICBzdHJ1Y3QgZmluZ2VycHJpbnRfc3RvcmFnZV9oZWFkZXIgKmZw aDsKKyAgZnBoID0gKHN0cnVjdCBmaW5nZXJwcmludF9zdG9yYWdlX2hlYWRlciAqKSAoZmItPmJ1 ZmZlciArIGZiLT5vZmZzZXQpOworICBtZW1jcHkgKGZiLT5kaWdlc3QsIGZwaC0+aGFzaCxGSU5H RVJQUklOVF9IQVNIX1NJWkUpOworfQorCit2b2lkCitmaW5nZXJwcmludF93cml0ZV9vdXRmaWxl KHN0cnVjdCBmaW5nZXJwcmludF9idWZmZXIgKmZiKQoreworICBzdHJ1Y3QgZmluZ2VycHJpbnRf c3RvcmFnZV9oZWFkZXIgKmZwaCA9IE5VTEw7CisgIHVuc2lnbmVkIGNoYXIgKnN0b3JlID0gKGZi LT5idWZmZXIgKyBmYi0+b2Zmc2V0KTsKKyAgZnBoID0gKHN0cnVjdCBmaW5nZXJwcmludF9zdG9y YWdlX2hlYWRlciAqKSBzdG9yZTsKKyAgcHRyZGlmZl90IGRhdGFfc2l6ZSA9IGZwaC0+c2l6ZTsK KyAgcHRyZGlmZl90IHN0b3JlX3NpemUgPSBzaXplb2Yoc3RydWN0IGZpbmdlcnByaW50X3N0b3Jh Z2VfaGVhZGVyKQorICAgICsgZGF0YV9zaXplOworICBwdHJkaWZmX3QgbiA9IDA7CisgIHB0cmRp ZmZfdCBjaHVua3N6OworICBpZiAoZmItPm91dCA9PSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChm Yi0+b3V0ZmlsZSA9PSBOVUxMKQorCWdvdG8gZG9uZTsKKyAgICAgIGlmICghKGZiLT5vdXQgPSBm b3BlbiAoZmItPm91dGZpbGUsICJ3IiBGT1BFTl9CSU5BUlkpKSkKKwl7CisJICBmYi0+Y29kZSB8 PSBGSU5HRVJQUklOVF9FUlJPUl9PVVRGSUxFX0NSRUFUSU9OOworCSAgZmItPmVycm5vc1swXSA9 IGVycm5vOworCSAgcmV0dXJuOworCX0KKyAgICAgIHdoaWxlICgoY2h1bmtzeiA9IGZ3cml0ZSAo ZmItPmJ1ZmZlciArIG4sIDEsIGZiLT5idWZmZXJfc2l6ZS0xLW4sZmItPm91dCkpKQorCW4gKz0g Y2h1bmtzejsKKyAgICAgIGlmIChuIDwgZmItPmJ1ZmZlcl9zaXplIC0gMSkKKwl7CisJICBmYi0+ Y29kZSB8PSBGSU5HRVJQUklOVF9FUlJPUl9PVVRGSUxFX1dSSVRFOworCSAgZmItPmVycm5vc1sw XSA9IGVycm5vOworCX0KKyAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgIC8qIG90aGVyd2lzZSBv bmx5IHdyaXRlIG91dCB0aGUgc3RvcmFnZSBhcmVhICovCisgIGlmICghIChmc2Vla28gKGZiLT5v dXQsIGZiLT5vZmZzZXQsIFNFRUtfU0VUKSA9PSAwKSkKKyAgICB7CisgICAgICBmYi0+Y29kZSB8 PSBGSU5HRVJQUklOVF9FUlJPUl9PVVRGSUxFX1dSSVRFOworICAgICAgZmItPmVycm5vc1swXSA9 IGVycm5vOworICAgICAgZ290byBkb25lOworICAgIH0KKyAgd2hpbGUgKChjaHVua3N6ID0gZndy aXRlIChzdG9yZSArIG4sIDEsIHN0b3JlX3NpemUgLSBuLCBmYi0+b3V0KSkpCisgICAgbiArPSBj aHVua3N6OworICBpZiAobiA8IHN0b3JlX3NpemUpCisgICAgeworICAgICAgZmItPmNvZGUgfD0g RklOR0VSUFJJTlRfRVJST1JfT1VURklMRV9XUklURTsKKyAgICAgIGZiLT5lcnJub3NbMF0gPSBl cnJubzsKKyAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKKyBkb25lOgorfQpkaWZmIC0tZ2l0IGEv bGliL2ZpbmdlcnByaW50LmggYi9saWIvZmluZ2VycHJpbnQuaAppbmRleCAyZGQ0MzY3YjE1ZC4u ZTlhY2I1NDc4ZjMgMTAwNjQ0Ci0tLSBhL2xpYi9maW5nZXJwcmludC5oCisrKyBiL2xpYi9maW5n ZXJwcmludC5oCkBAIC0yMCw5ICsyMCwxNjQgQEAgQ29weXJpZ2h0IChDKSAyMDE2LCAyMDE4LTIw MjUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjaWZuZGVmIEVNQUNTX0ZJTkdFUlBS SU5UX0gKICNkZWZpbmUgRU1BQ1NfRklOR0VSUFJJTlRfSAogCisjaW5jbHVkZSAiY29uZmlnLmgi CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJu by5oPgorCisvKiBkZWZhdWx0IHRvIDE2SyAqLworI2lmbmRlZiBDT05GSUdfRklOR0VSUFJJTlRf REFUQV9TSVpFCisjZGVmaW5lIENPTkZJR19GSU5HRVJQUklOVF9EQVRBX1NJWkUgMSA8PCAxNAor I2VuZGlmCisKKyNpZm5kZWYgRklOR0VSUFJJTlRfREFUQV9MQVlPVVRfVkVSU0lPTgorI2RlZmlu ZSBGSU5HRVJQUklOVF9EQVRBX0xBWU9VVF9WRVJTSU9OIDAKKyNlbmRpZgorCitlbnVtIHsKKyAg RklOR0VSUFJJTlRfSEFTSF9TSVpFICA9IDMyLAorICBGSU5HRVJQUklOVF9EQVRBX1NJWkUgPSBD T05GSUdfRklOR0VSUFJJTlRfREFUQV9TSVpFCit9OworCiAvKiBXZSBnZW5lcmF0ZSBmaW5nZXJw cmludC5jIGFuZCBmaW5nZXJwcmludC5vIGZyb20gYWxsIHRoZSBzb3VyY2VzIGluCiAgICBFbWFj cy4gIFRoaXMgd2F5LCB3ZSBoYXZlIGEgdW5pcXVlIHZhbHVlIHRoYXQgd2UgY2FuIHVzZSB0byBw YWlyCiAgICBkYXRhIGZpbGVzIChsaWtlIGEgZHVtcCBmaWxlKSB3aXRoIGEgc3BlY2lmaWMgYnVp bGQgb2YgRW1hY3MuICAqLwotZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZmluZ2VycHJp bnRbMzJdOworCisvKiBFbnN1cmUgemVyb2VkIGRhdGEgYXJlYSBmb2xsb3dzIGZpbmdlcnByaW50 IGRhdGEgc28gZXh0ZXJuYWwgdG9vbHMgY2FuCisgICBlbWJlZCBjb25zdGFudHMgZm9yIHByb2dy YW0gdXNlIGFmdGVyIGNvbXBpbGluZyBidXQgYmVmb3JlIGZpbmdlcnByaW50aW5nLgorICAgRW1i ZWRkZWQgc2l6ZSBpcyBmb3IgYmVuZWZpdCBvZiBleHRlcm5hbCB0b29saW5nLgorKi8KKworc3Ry dWN0IGZpbmdlcnByaW50X3N0b3JhZ2VfaGVhZGVyCit7CisgIHVuc2lnbmVkIGNoYXIgcHJpc3Rp bmVfaGFzaF9jW0ZJTkdFUlBSSU5UX0hBU0hfU0laRV07CisgIHVuc2lnbmVkIGNoYXIgaGFzaFtG SU5HRVJQUklOVF9IQVNIX1NJWkVdOworICB1aW50NjRfdCB2ZXJzaW9uOyAvKiBJRCBmb3IgdGhl IGxheW91dCBvZiB0aGUgZGF0YSAqLworICB1aW50NjRfdCBzaXplOworICB1bnNpZ25lZCBjaGFy IGRhdGFbXTsKK307CisKK3N0cnVjdCBmaW5nZXJwcmludF9zdG9yYWdlCit7CisgIHVuc2lnbmVk IGNoYXIgcHJpc3RpbmVfaGFzaF9jW0ZJTkdFUlBSSU5UX0hBU0hfU0laRV07CisgIHVuc2lnbmVk IGNoYXIgaGFzaFtGSU5HRVJQUklOVF9IQVNIX1NJWkVdOworICB1aW50NjRfdCB2ZXJzaW9uOyAv KiBJRCBmb3IgdGhlIGxheW91dCBvZiB0aGUgZGF0YSAqLworICB1aW50NjRfdCBzaXplOworICB1 bnNpZ25lZCBjaGFyIGRhdGFbRklOR0VSUFJJTlRfREFUQV9TSVpFXTsKK307CisKK2V4dGVybiB2 b2xhdGlsZSBzdHJ1Y3QgZmluZ2VycHJpbnRfc3RvcmFnZSBmaW5nZXJwcmludF9zdG9yYWdlOwor CitzdHJ1Y3QgZmluZ2VycHJpbnRfcmVwbGFjZW1lbnRfb3B0aW9ucworeworICBib29sIGtlZXBf aGFzaDsgLyogdGhpcyB1c2VkIHRvIGJlIHRoZSAicmF3IiBvcHRpb24gKi8KKyAgYm9vbCBpbnBs YWNlOyAgLyogbW9kaWZ5IGZpbGUgaW4gcGxhY2UgKi8KKyAgcHRyZGlmZl90IG1heF9kYXRhX3Np emU7Cit9OworCisvKiBFbmFibGUgZXJyb3IgcmVwb3J0aW5nIGluIG1ha2VfZmluZ2VycHJpbnQg YXMgaWYKKyAgIHRoZSBtb2RpZmljYXRpb24gZnVuY3Rpb24gd2FzIHN0aWxsIHRoZXJlLiAqLwor dHlwZWRlZiBlbnVtIEZJTkdFUlBSSU5UX0VSUk9SCit7CisgIEZJTkdFUlBSSU5UX0VSUk9SX05P TkUgPSAwLAorICBGSU5HRVJQUklOVF9FUlJPUl9OT19JTkZJTEUgPSAxLAorICBGSU5HRVJQUklO VF9FUlJPUl9JTkZJTEVfTk9UX09QRU5FRCA9IDEgPDwgMSwKKyAgRklOR0VSUFJJTlRfRVJST1Jf SU5GSUxFX05PVF9SRUdVTEFSID0gMSA8PCAyLAorICBGSU5HRVJQUklOVF9FUlJPUl9CVUZGRVJf U0laRSA9IDEgPDwgMywKKyAgRklOR0VSUFJJTlRfRVJST1JfQlVGRkVSX0FMTE9DQVRJT04gPSAx IDw8IDQsCisgIEZJTkdFUlBSSU5UX0VSUk9SX0ZQU1RPUkVfQUxMT0NBVElPTiA9IDEgPDwgNSwK KyAgRklOR0VSUFJJTlRfRVJST1JfSU5GSUxFX1JFQUQgPSAxIDw8IDYsCisgIEZJTkdFUlBSSU5U X0VSUk9SX0hBU0hfTk9UX0ZPVU5EID0gMSA8PCA3LAorICBGSU5HRVJQUklOVF9FUlJPUl9IQVNI X1RPT19NQU5ZID0gMSA8PCA4LAorICBGSU5HRVJQUklOVF9FUlJPUl9PVVRGSUxFX0NSRUFUSU9O ID0gMSA8PCA5LAorICBGSU5HRVJQUklOVF9FUlJPUl9PVVRGSUxFX1dSSVRFID0gMSA8PCAxMCwK KyAgRklOR0VSUFJJTlRfRVJST1JfTk9fSU5QTEFDRSA9IDEgPDwgMTEsCisgIEZJTkdFUlBSSU5U X0VSUk9SX1JBV19OT19ESUdFU1QgPSAxIDw8IDEyLAorICBGSU5HRVJQUklOVF9FUlJPUl9EQVRB X09WRVJGTE9XID0gMSA8PCAxMywKKyAgRklOR0VSUFJJTlRfRVJST1JfT1VURklMRV9DTE9TRSA9 IDEgPDwgMTQsCisgIEZJTkdFUlBSSU5UX0VSUk9SX0lORklMRV9DTE9TRSA9IDEgPDwgMTUsCisg IEZJTkdFUlBSSU5UX0VSUk9SX0ZJTEVfQ0xPU0UgPSAoIEZJTkdFUlBSSU5UX0VSUk9SX09VVEZJ TEVfQ0xPU0UKKwkJCQkgICB8IEZJTkdFUlBSSU5UX0VSUk9SX0lORklMRV9DTE9TRSksCisgIEZJ TkdFUlBSSU5UX0VSUk9SX1VOSVFVRV9NQVNLID0gMHgxRkZGCit9IEZJTkdFUlBSSU5UX0VSUk9S OworCisvKiB0aGUgZGF0YSBuZWNlc3NhcnkgdG8gY3JlYXRlIGEKKyAgIGNvbnRpbnVhdGlvbiBm cm9tIHRoZSBtaWRkbGUgb2YKKyAgIGZpbmdlcnByaW50X21vZGlmeV9maWxlLgorICAgU29tZSBv ZiB0aGUgcG9pbnRlcnMgYXJlIGZyb20gdGhlIGZ1bmN0aW9uCisgICBjYWxsaW5nIGZpbmdlcnBy aW50X21vZGlmeV9maWxlLCBzbyB0aGVpcgorICAgbGlmZXRpbWUgbWF5IG5vdCBzdXJ2aXZlIHRo YXQgZnVuY3Rpb24ncworICAgYWN0aXZhdGlvbi4KKyovCitzdHJ1Y3QgZmluZ2VycHJpbnRfYnVm ZmVyCit7CisgIGNoYXIgKmZpbGU7CisgIGNoYXIgKm91dGZpbGU7CisgIEZJTEUgKmluOworICBG SUxFICpvdXQ7CisgIHN0cnVjdCBmaW5nZXJwcmludF9yZXBsYWNlbWVudF9vcHRpb25zIG9wdHM7 CisgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W0ZJTkdFUlBSSU5UX0hBU0hfU0laRV07CisgIHB0cmRp ZmZfdCBidWZmZXJfc2l6ZTsKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyOworICBwdHJkaWZmX3Qg b2Zmc2V0OworICAvKiBjb3B5IG9mIHRoZSBvcmlnaW5hbCBmaW5nZXJwcmludCBzdG9yYWdlIGlu IHRoZSBmaWxlICovCisgIHN0cnVjdCBmaW5nZXJwcmludF9zdG9yYWdlX2hlYWRlciAqaGRyOwor ICBGSU5HRVJQUklOVF9FUlJPUiBjb2RlOworICBpbnQgZXJybm9zWzNdOworfTsKKworCisvKiBp bml0aWFsaXplIGEgZmluZ2VycHJpbnQgb3BlcmF0aW9uICovCitleHRlcm4gRklOR0VSUFJJTlRf RVJST1IKK2ZpbmdlcnByaW50X2dldF9idWZmZXIoY2hhciAqZmlsZSwKKwkJICAgICAgIGNoYXIg Km91dGZpbGUsCisJCSAgICAgICBzdHJ1Y3QgZmluZ2VycHJpbnRfcmVwbGFjZW1lbnRfb3B0aW9u cyAqb3B0cywKKwkJICAgICAgIHN0cnVjdCBmaW5nZXJwcmludF9idWZmZXIgKipmYnAsCisJCSAg ICAgICBpbnQgZXJybm9zWzNdKTsKKworCitleHRlcm4gRklOR0VSUFJJTlRfRVJST1IKK2Zpbmdl cnByaW50X3JlbGVhc2VfYnVmZmVyKHN0cnVjdCBmaW5nZXJwcmludF9idWZmZXIgKmZiLCBpbnQg ZXJybm9zWzNdKTsKKworZXh0ZXJuIHZvaWQKK2ZpbmdlcnByaW50X3NldF9oYXNoKHN0cnVjdCBm aW5nZXJwcmludF9idWZmZXIgKmZiKTsKK2V4dGVybiB2b2lkCitmaW5nZXJwcmludF9yZXNldF9o YXNoKHN0cnVjdCBmaW5nZXJwcmludF9idWZmZXIgKmZiKTsKKy8qIHNldCAqLworZXh0ZXJuIHZv aWQKK2ZpbmdlcnByaW50X2dldF9oYXNoKHN0cnVjdCBmaW5nZXJwcmludF9idWZmZXIgKmZiKTsK KworZXh0ZXJuIHZvaWQKK2ZpbmdlcnByaW50X3NldF9kYXRhKHN0cnVjdCBmaW5nZXJwcmludF9i dWZmZXIgKmZiLAorCQkgICAgIHB0cmRpZmZfdCBkYXRhX3NpemUsCisJCSAgICAgdW5zaWduZWQg Y2hhciAqZGF0YSk7CisKK2V4dGVybiB2b2lkCitmaW5nZXJwcmludF93cml0ZV9vdXRmaWxlKHN0 cnVjdCBmaW5nZXJwcmludF9idWZmZXIgKmZiKTsKKworCisKKworCit0eXBlZGVmIGVudW0gUFNM RVJSCit7CisgIFBTTEVSUl9OT05FLAorICBQU0xFUlJfT1ZFUkZMT1csCisgIFBTTEVSUl9CQURf T0NUQUwsCisgIFBTTEVSUl9CQURfSEVYLAorICBQU0xFUlJfQkFEX0VTQ0FQRQorfSBQU0xFUlI7 CisKK2V4dGVybiBQU0xFUlIKK3BhcnNlX3N0cmluZ19saXRlcmFsIChjb25zdCB1bnNpZ25lZCBj aGFyICppbiwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqb3V0LAorCQkgICAgICBpbnQgc3osCisJ CSAgICAgIGJvb2wgbnVsbHRlcm0sCisJCSAgICAgIHB0cmRpZmZfdCAqbik7CitleHRlcm4gdm9p ZCByZXBvcnRfUFNMRVJSIChGSUxFICpzdHJlYW0sCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFy ICppbiwKKwkJCSAgIFBTTEVSUiBjb2RlLAorCQkJICAgaW50IHN6LAorCQkJICAgcHRyZGlmZl90 IHBvc2l0aW9uKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvdGVzdC9NYWtlZmlsZS5pbiBi L2xpYi90ZXN0L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi5lNzBmZGZiNjAzOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi90ZXN0L01ha2VmaWxlLmlu CkBAIC0wLDAgKzEsMTk0IEBACisjIyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQg MjAxNy0yMDI1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEdOVSBFbWFjcy4KKworIyBHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTogeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIEdOVSBFbWFj cyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgRW1hY3MuICBJZiBub3QsIHNlZSA8 aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitTSEVMTCA9IEBTSEVMTEAKKworIyBQ cmV2ZW50IGFueSBzZXR0aW5ncyBpbiB0aGUgdXNlciBlbnZpcm9ubWVudCBjYXVzaW5nIHByb2Js ZW1zLgordW5leHBvcnQgRU1BQ1NEQVRBIEVNQUNTRE9DIEVNQUNTTE9BRFBBVEggRU1BQ1NQQVRI CisKKyMgRm9sbG93aW5nIC4uL2xpc3AvTWFrZWZpbGUuaW4uCitFTUFDUyA9IC4uL3NyYy9lbWFj cyR7RVhFRVhUfQorRU1BQ1NPUFQgPSAtYmF0Y2ggLS1uby1zaXRlLWZpbGUgLS1uby1zaXRlLWxp c3AKKworIyA9PT09PT09PT09PT09PT09PT09PSBUaGluZ3MgJ2NvbmZpZ3VyZScgd2lsbCBlZGl0 ID09PT09PT09PT09PT09PT09PT09CisKK0NDPUBDQ0AKK0NYWD1AQ1hYQAorQ0ZMQUdTPUBDRkxB R1NACitDWFhGTEFHUz1AQ1hYRkxBR1NACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0xERkxBR1Mg PSBATERGTEFHU0AKKwordmVyc2lvbj1AdmVyc2lvbkAKKyMjIFVzZWQgaW4gJGFyY2hsaWJkaXIu Citjb25maWd1cmF0aW9uPUBjb25maWd1cmF0aW9uQAorRVhFRVhUPUBFWEVFWFRACitDX1NXSVRD SF9TWVNURU09QENfU1dJVENIX1NZU1RFTUAKK0NfU1dJVENIX01BQ0hJTkU9QENfU1dJVENIX01B Q0hJTkVACitQUk9GSUxJTkdfQ0ZMQUdTID0gQFBST0ZJTElOR19DRkxBR1NACitXQVJOX0NGTEFH UyA9IEBXQVJOX0NGTEFHU0AKK1dFUlJPUl9DRkxBR1MgPSBAV0VSUk9SX0NGTEFHU0AKKworIyBQ cm9ncmFtIG5hbWUgdHJhbnNmb3JtYXRpb24uCitUUkFOU0ZPUk0gPSBAcHJvZ3JhbV90cmFuc2Zv cm1fbmFtZUAKKworc3JjZGlyID0gQHNyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKKworIyBDcm9z cy1jb21waWxhdGlvbiBzZXR1cAorCitYQ09ORklHVVJFPUBYQ09ORklHVVJFQAorCitpZm5lcSAo JChYQ09ORklHVVJFKSwpCit2cGF0aCAkKHNyY2RpcikKK2VuZGlmCisKKyMgVGhlIHRvcC1sZXZl bCBzb3VyY2UgZGlyZWN0b3J5LCBhbHNvIHNldCBieSBjb25maWd1cmUuCit0b3Bfc3JjZGlyPUB0 b3Bfc3JjZGlyQAorIyBNaW5HVyBDUFBGTEFHUyBtYXkgdXNlIHRoaXMuCithYnNfdG9wX3NyY2Rp cj1AYWJzX3RvcF9zcmNkaXJACisKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACisKKyMg PT09PT09PT09PT09PT09PT09PT09PT09PT0gTGlzdHMgb2YgRmlsZXMgPT09PT09PT09PT09PT09 PT09PT09PT09PT09CisKKyMjIEhhaWt1IGJ1aWxkLXRpbWUgc3VwcG9ydAorSEFWRV9CRV9BUFA9 QEhBVkVfQkVfQVBQQAorSEFJS1VfTElCUz1ASEFJS1VfTElCU0AKK0hBSUtVX0NGTEFHUz1ASEFJ S1VfQ0ZMQUdTQAorCisjIyBBbmRyb2lkIGJ1aWxkLXRpbWUgc3VwcG9ydAorQU5EUk9JRD1AQU5E Uk9JREAKKworCisjIyAtbGtyYiBvciAtbGtyYjQgaWYgbmVlZGVkCitLUkI0TElCPUBLUkI0TElC QAorIyMgLWxkZXMgb3IgLWxkZXM0MjUgaWYgbmVlZGVkCitERVNMSUI9QERFU0xJQkAKKyMjIC1s a3JiNSBpZiBuZWVkZWQKK0tSQjVMSUI9QEtSQjVMSUJACisjIyAtbGs1Y3J5cHRvIG9yIC1sY3J5 cHRvIGlmIG5lZWRlZAorQ1JZUFRPTElCPUBDUllQVE9MSUJACisjIyAtbGNvbV9lcnIgaWYgbmVl ZGVkCitDT01fRVJSTElCPUBDT01fRVJSTElCQAorIyMgLWxoZXNpb2QgaWYgbmVlZGVkCitMSUJI RVNJT0Q9QExJQkhFU0lPREAKKyMjIC1scmVzb2x2IGlmIEhBVkVfTElCUkVTT0xWCitMSUJSRVNP TFY9QExJQlJFU09MVkAKKyMjIC1sbG9ja2ZpbGUgaWYgSEFWRV9MSUJMT0NLRklMRSBvciAtbG1h aWwgaWYgSEFWRV9MSUJNQUlMCitMSUJTX01BSUw9QExJQlNfTUFJTEAKKyMjIGVtcHR5IG9yIC1s cnQgb3IgLWxwb3NpeDQgaWYgSEFWRV9DTE9DS19HRVRUSU1FCitDTE9DS19USU1FX0xJQiA9IEBD TE9DS19USU1FX0xJQkAKKyMjIGVtcHR5IG9yIC1sYmNyeXB0IG9yIC1sYWR2YXBpMzIKK0dFVFJB TkRPTV9MSUIgPSBAR0VUUkFORE9NX0xJQkAKKyMjIFdoYXRldmVyIGxpYnJhcmllcyBhcmUgbmVl ZGVkIGZvciBldWlkYWNjZXNzCitFVUlEQUNDRVNTX0xJQkdFTj1ARVVJREFDQ0VTU19MSUJHRU5A CisjIyBMaWJyYXJpZXMgbmVlZGVkIGZvciBmaWxlX2hhc19hY2wKK0ZJTEVfSEFTX0FDTF9MSUI9 QEZJTEVfSEFTX0FDTF9MSUJACisjIyBlbXB0eSBvciAtbHdzb2NrMiBmb3IgTWluR1cKK0xJQl9X U09DSzMyPUBMSUJfV1NPQ0szMkAKKworIyMgRXh0cmEgbGlicmFyaWVzIGZvciBldGFncworTElC U19FVEFHUyA9ICQoQ0xPQ0tfVElNRV9MSUIpICQoR0VUUkFORE9NX0xJQikKKworSEFWRV9TRUND T01QPUBIQVZFX1NFQ0NPTVBACitIQVZFX0xJQlNFQ0NPTVA9QEhBVkVfTElCU0VDQ09NUEAKK0xJ QlNFQ0NPTVBfTElCUz1ATElCU0VDQ09NUF9MSUJTQAorTElCU0VDQ09NUF9DRkxBR1M9QExJQlNF Q0NPTVBfQ0ZMQUdTQAorU0laRU9GX0xPTkc9QFNJWkVPRl9MT05HQAorCisjIyBFeHRyYSBvYmpl Y3QgZmlsZXMgZm9yIGxpbmtpbmcgZm9yIE1pbkdXCitOVExJQiA9IEBOVExJQkAKK0NMSUVOVFJF UyA9IEBDTElFTlRSRVNACitXSU5EUkVTID0gQFdJTkRSRVNACisKKyMjIFNvbWUgc3lzdGVtcyBk ZWZpbmUgdGhpcyB0byByZXF1ZXN0IHNwZWNpYWwgbGlicmFyaWVzLgorTElCU19TWVNURU0gPSBA TElCU19TWVNURU1ACisKKyMgRmxhZ3MgdGhhdCBjb3VsZCBiZSBpbiBXQVJOX0NGTEFHUywgYnV0 IGFyZSBpbnZhbGlkIGZvciBDKysuCitOT05fQ1hYX0NGTEFHUyA9IC1XbWlzc2luZy1wcm90b3R5 cGVzIC1XbmVzdGVkLWV4dGVybnMgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbiBcCisgIC1Xc3RyaWN0 LXByb3RvdHlwZXMgLVduby1vdmVycmlkZS1pbml0CisKK0JBU0VfQ0ZMQUdTID0gJChDX1NXSVRD SF9TWVNURU0pICQoQ19TV0lUQ0hfTUFDSElORSkgXAorCSAgICAgICQoV0FSTl9DRkxBR1MpICQo V0VSUk9SX0NGTEFHUykgXAorCSAgICAgIC1JLiAtSS4uLy4uL3NyYyAtSS4uLy4uL2xpYiBcCisJ ICAgICAgLUkke3NyY2Rpcn0gLUkke3NyY2Rpcn0vLi4vLi4vc3JjIFwKKyAgICAgICAgICAgICAg LUkke3NyY2Rpcn0vLi4vLi4vbGliCisKK0FMTF9DRkxBR1MgPSAke0JBU0VfQ0ZMQUdTfSAke1BS T0ZJTElOR19DRkxBR1N9ICR7TERGTEFHU30gJHtDUFBGTEFHU30gJHtDRkxBR1N9CitDUFBfQ0ZM QUdTID0gJHtCQVNFX0NGTEFHU30gJHtQUk9GSUxJTkdfQ0ZMQUdTfSAke0NQUEZMQUdTfSAke0NG TEFHU30KKworQUxMX0NYWEZMQUdTID0gJChmaWx0ZXItb3V0ICR7Tk9OX0NYWF9DRkxBR1N9LCR7 QkFTRV9DRkxBR1N9KSBcCisgICR7UFJPRklMSU5HX0NGTEFHU30gJHtMREZMQUdTfSAke0NQUEZM QUdTfSAke0NGTEFHU30gJHtDWFhGTEFHU30gJHtIQUlLVV9DRkxBR1N9CisKKyMgQ29uZmlndXJh dGlvbiBmaWxlcyBmb3IgLm8gZmlsZXMgdG8gZGVwZW5kIG9uLgorY29uZmlnX2ggPSAuLi8uLi9z cmMvY29uZmlnLmggJChzcmNkaXIpLy4uLy4uL3NyYy9jb25mX3Bvc3QuaAorCitEUklWRVJTID0g cGFyc2Utc3RyaW5nLWxpdGVyYWwuYworCitFWEVfRklMRVMgPSAke0RSSVZFUlM6LmM9JHtFWEVF WFR9fQorCithbGw6ICQoRVhFX0ZJTEVTKQorLlBIT05ZOiBhbGwKKworTE9BRExJQkVTID0gLi4v bGliZ251LmEgJChMSUJTX1NZU1RFTSkKKyQoRVhFX0ZJTEVTKTogLi4vbGliZ251LmEKKworLi4v bGliL2xpYmdudS5hOiAkKGNvbmZpZ19oKQorCSQoTUFLRSkgLUMgLi4gYWxsCisKKy1pbmNsdWRl ICR7dG9wX2J1aWxkZGlyfS9zcmMvdmVyYm9zZS5taworCisKKy5QSE9OWTogaW5zdGFsbCB1bmlu c3RhbGwgbW9zdGx5Y2xlYW4gY2xlYW4gZGlzdGNsZWFuIG1haW50YWluZXItY2xlYW4KKy5QSE9O WTogYm9vdHN0cmFwLWNsZWFuIGNoZWNrIHRhZ3MKKworaW5zdGFsbDogCisJJChpbmZvIE5vdGhp bmcgdG8gaW5zdGFsbCBmb3IgbGliL3Rlc3QpCisKK3VuaW5zdGFsbDoKKwkkKGluZm8gTm90aGlu ZyB0byB1bmluc3RhbGwgZm9yIGxpYi90ZXN0KQorCittb3N0bHljbGVhbjoKKwlybSAtZiBjb3Jl IC4vKi5vIC4vKi5yZXMKKworY2xlYW46IG1vc3RseWNsZWFuCisJcm0gLWYgJHtFWEVfRklMRVN9 CisKK2Rpc3RjbGVhbjogY2xlYW4KKwlybSAtZiBUQUdTIE1ha2VmaWxlIAorCitib290c3RyYXAt Y2xlYW4gbWFpbnRhaW5lci1jbGVhbjogZGlzdGNsZWFuCisKKworIyMgVGVzdCB0aGUgY29udGVu dHMgb2YgdGhlIGRpcmVjdG9yeS4KK2NoZWNrOiAke0VYRV9GSUxFU30KKwkkKGluZm8gbm90aGlu ZyBoZXJlIHlldCkKKwordGFnc2ZpbGVzID0gJCh3aWxkY2FyZCAke3NyY2Rpcn0vKi5bY2hdKQor CisuUEhPTlk6IHRhZ3MKK3RhZ3M6IFRBR1MKK1RBR1M6IGV0YWdzJHtFWEVFWFR9ICR7dGFnc2Zp bGVzfQorCS4vZXRhZ3MgJHt0YWdzZmlsZXN9CisKK3BhcnNlLXN0cmluZy1saXRlcmFsJHtFWEVF WFR9OiAke3NyY2Rpcn0vcGFyc2Utc3RyaW5nLWxpdGVyYWwuYyBcCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJChOVExJQikgJChjb25maWdfaCkKKwkkKEFNX1ZfQ0NMRCkkKENDKSAk e0FMTF9DRkxBR1N9ICQ8ICQoTlRMSUIpICQoTE9BRExJQkVTKSAtbyAkQAorCmRpZmYgLS1naXQg YS9saWIvdGVzdC9pbml0LnNoIGIvbGliL3Rlc3QvaW5pdC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMWU2YTM5OWUyMDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIv dGVzdC9pbml0LnNoCkBAIC0wLDAgKzEsNzQ2IEBACisjIHNvdXJjZSB0aGlzIGZpbGU7IHNldCB1 cCBmb3IgdGVzdHMKKworIyBDb3B5cmlnaHQgKEMpIDIwMDktMjAyNSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBv cgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNl ZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFVzaW5nIHRoaXMgZmlsZSBp biBhIHRlc3QKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBUaGUgdHlwaWNhbCBz a2VsZXRvbiBvZiBhIHRlc3QgbG9va3MgbGlrZSB0aGlzOgorIworIyAgICMhL2Jpbi9zaAorIyAg IC4gIiR7c3JjZGlyPS59L2luaXQuc2giOyBwYXRoX3ByZXBlbmRfIC4KKyMgICBFeGVjdXRlIHNv bWUgY29tbWFuZHMuCisjICAgTm90ZSB0aGF0IHRoZXNlIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBp biBhIHN1YmRpcmVjdG9yeSwgdGhlcmVmb3JlIHlvdQorIyAgIG5lZWQgdG8gcHJlcGVuZCAiLi4v IiB0byByZWxhdGl2ZSBmaWxlbmFtZXMgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyMgICBOb3Rl IHRoYXQgdGhlICJwYXRoX3ByZXBlbmRfIC4iIGlzIHVzZWZ1bCBvbmx5IGlmIHRoZSBib2R5IG9m IHlvdXIKKyMgICB0ZXN0IGludm9rZXMgcHJvZ3JhbXMgcmVzaWRpbmcgaW4gdGhlIGluaXRpYWwg ZGlyZWN0b3J5LgorIyAgIEZvciBleGFtcGxlLCBpZiB0aGUgcHJvZ3JhbXMgeW91IHdhbnQgdG8g dGVzdCBhcmUgaW4gc3JjLywgYW5kIHRoaXMgdGVzdAorIyAgIHNjcmlwdCBpcyBuYW1lZCB0ZXN0 cy90ZXN0LTEsIHRoZW4geW91IHdvdWxkIHVzZSAicGF0aF9wcmVwZW5kXyAuLi9zcmMiLAorIyAg IG9yIHBlcmhhcHMgZXhwb3J0IFBBVEg9JyQoYWJzX3RvcF9idWlsZGRpcikvc3JjJChQQVRIX1NF UEFSQVRPUiknIiQkUEFUSCIKKyMgICB0byBhbGwgdGVzdHMgdmlhIGF1dG9tYWtlJ3MgVEVTVFNf RU5WSVJPTk1FTlQuCisjICAgU2V0IHRoZSBleGl0IGNvZGUgMCBmb3Igc3VjY2VzcywgNzcgZm9y IHNraXBwZWQsIG9yIDEgb3Igb3RoZXIgZm9yIGZhaWx1cmUuCisjICAgVXNlIHRoZSBza2lwXyBh bmQgZmFpbF8gZnVuY3Rpb25zIHRvIHByaW50IGEgZGlhZ25vc3RpYyBhbmQgdGhlbiBleGl0Cisj ICAgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBleGl0IGNvZGUuCisjICAgRXhpdCAkPworCisjIEV4 ZWN1dGluZyBhIHRlc3QgdGhhdCB1c2VzIHRoaXMgZmlsZQorIyA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKyMKKyMgUnVubmluZyBhIHNpbmdsZSB0ZXN0OgorIyAgICQgbWFr ZSBjaGVjayBURVNUUz10ZXN0LWZvby5zaAorIworIyBSdW5uaW5nIGEgc2luZ2xlIHRlc3QsIHdp dGggdmVyYm9zZSBvdXRwdXQ6CisjICAgJCBtYWtlIGNoZWNrIFRFU1RTPXRlc3QtZm9vLnNoIFZF UkJPU0U9eWVzCisjCisjIFJ1bm5pbmcgYSBzaW5nbGUgdGVzdCwga2VlcGluZyB0aGUgdGVtcG9y YXJ5IGRpcmVjdG9yeToKKyMgICAkIG1ha2UgY2hlY2sgVEVTVFM9dGVzdC1mb28uc2ggS0VFUD15 ZXMKKyMKKyMgUnVubmluZyBhIHNpbmdsZSB0ZXN0LCB3aXRoIHNpbmdsZS1zdGVwcGluZzoKKyMg ICAxLiBHbyBpbnRvIGEgc3ViLXNoZWxsOgorIyAgICQgYmFzaAorIyAgIDIuIFNldCByZWxldmFu dCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBURVNUU19FTlZJUk9OTUVOVCBpbiB0aGUKKyMg ICAgICBNYWtlZmlsZToKKyMgICAkIGV4cG9ydCBzcmNkaXI9Li4vLi4vdGVzdHMgIyB0aGlzIGlz IGFuIGV4YW1wbGUKKyMgICAzLiBFeGVjdXRlIHRoZSBjb21tYW5kcyBmcm9tIHRoZSB0ZXN0LCBj b3B5JnBhc3RpbmcgdGhlbSBvbmUgYnkgb25lOgorIyAgICQgLiAiJHNyY2Rpci9pbml0LnNoIjsg cGF0aF9wcmVwZW5kXyAuCisjICAgLi4uCisjICAgNC4gRmluYWxseQorIyAgICQgZXhpdAorCisj ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisjIEVsZW1lbnRhcnkgZGlhZ25vc3RpY3MKKworTUVfPWBl eHByICIuLyQwIiA6ICcuKi9cKC4qXCkkJ2AKKworIyBQcmVwYXJlIFBBVEhfU0VQQVJBVE9SLgor IyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCitpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3Nl dH0iICE9IHNldDsgdGhlbgorICAjIERldGVybWluZSBQQVRIX1NFUEFSQVRPUiBieSB0cnlpbmcg dG8gZmluZCAvYmluL3NoIGluIGEgUEFUSCB3aGljaAorICAjIGNvbnRhaW5zIG9ubHkgL2Jpbi4g Tm90ZSB0aGF0IGtzaCBsb29rcyBhbHNvIGF0IHRoZSBGUEFUSCB2YXJpYWJsZSwKKyAgIyBzbyB3 ZSBoYXZlIHRvIHNldCB0aGF0IGFzIHdlbGwgZm9yIHRoZSB0ZXN0LgorICBQQVRIX1NFUEFSQVRP Uj06CisgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVs bCAyPiYxIFwKKyAgICAmJiB7IChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMg OikgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICAgICAgICAgfHwgUEFUSF9TRVBBUkFUT1I9JzsnCisg ICAgICAgfQorZmkKKworIyBXZSB1c2UgYSB0cmFwIGJlbG93IGZvciBjbGVhbnVwLiAgVGhpcyBy ZXF1aXJlcyB1cyB0byBnbyB0aHJvdWdoCisjIGhvb3BzIHRvIGdldCB0aGUgcmlnaHQgZXhpdCBz dGF0dXMgdHJhbnNwb3J0ZWQgdGhyb3VnaCB0aGUgaGFuZGxlci4KKyMgU28gdXNlICdFeGl0IFNU QVRVUycgaW5zdGVhZCBvZiAnZXhpdCBTVEFUVVMnIGluc2lkZSBvZiB0aGUgdGVzdHMuCisjIFR1 cm4gb2ZmIGVycmV4aXQgaGVyZSBzbyB0aGF0IHdlIGRvbid0IHRyaXAgdGhlIGJ1ZyB3aXRoIE9T RjEvVHJ1NjQKKyMgc2ggaW5zaWRlIHRoaXMgZnVuY3Rpb24uCitFeGl0ICgpIHsgc2V0ICtlOyAo ZXhpdCAkMSk7IGV4aXQgJDE7IH0KKworIyBQcmludCB3YXJuaW5ncyAoZS5nLiwgYWJvdXQgc2tp cHBlZCBhbmQgZmFpbGVkIHRlc3RzKSB0byB0aGlzIGZpbGUgbnVtYmVyLgorIyBPdmVycmlkZSBi eSBkZWZpbmluZyB0byBzYXksIDksIGluIGluaXQuY2ZnLCBhbmQgcHV0dGluZyBzYXksCisjICAg ZXhwb3J0IC4uLkVOVlZBUl9TRVRUSU5HUy4uLjsgJChTSEVMTCkgOT4mMgorIyBpbiB0aGUgZGVm aW5pdGlvbiBvZiBURVNUU19FTlZJUk9OTUVOVCBpbiB5b3VyIHRlc3RzL01ha2VmaWxlLmFtIGZp bGUuCisjIFRoaXMgaXMgdXNlZnVsIHdoZW4gdXNpbmcgYXV0b21ha2UncyBwYXJhbGxlbCB0ZXN0 cyBtb2RlLCB0byBwcmludAorIyB0aGUgcmVhc29uIGZvciBza2lwL2ZhaWx1cmUgdG8gY29uc29s ZSwgcmF0aGVyIHRoYW4gdG8gdGhlIC5sb2cgZmlsZXMuCis6ICR7c3RkZXJyX2ZpbGVub189Mn0K KworIyBOb3RlIHRoYXQgY29ycmVjdCBleHBhbnNpb24gb2YgIiQqIiBkZXBlbmRzIG9uIElGUyBz dGFydGluZyB3aXRoICcgJy4KKyMgQWx3YXlzIHdyaXRlIHRoZSBmdWxsIGRpYWdub3N0aWMgdG8g c3RkZXJyLgorIyBXaGVuIHN0ZGVycl9maWxlbm9fIGlzIG5vdCAyLCBhbHNvIGVtaXQgdGhlIGZp cnN0IGxpbmUgb2YgdGhlCisjIGRpYWdub3N0aWMgdG8gdGhhdCBmaWxlIGRlc2NyaXB0b3IuCit3 YXJuXyAoKQoreworICAjIElmIElGUyBkb2VzIG5vdCBzdGFydCB3aXRoICcgJywgc2V0IGl0IGFu ZCBlbWl0IHRoZSB3YXJuaW5nIGluIGEgc3Vic2hlbGwuCisgIGNhc2UgJElGUyBpbgorICAgICcg JyopIHByaW50ZiAnJXNcbicgIiQqIiA+JjIKKyAgICAgICAgICB0ZXN0ICRzdGRlcnJfZmlsZW5v XyA9IDIgXAorICAgICAgICAgICAgfHwgeyBwcmludGYgJyVzXG4nICIkKiIgfCBzZWQgMXEgPiYk c3RkZXJyX2ZpbGVub18gOyB9IDs7CisgICAgKikgKElGUz0nICc7IHdhcm5fICIkQCIpOzsKKyAg ZXNhYworfQorZmFpbF8gKCkgeyB3YXJuXyAiJE1FXzogZmFpbGVkIHRlc3Q6ICRAIjsgRXhpdCAx OyB9Citza2lwXyAoKSB7IHdhcm5fICIkTUVfOiBza2lwcGVkIHRlc3Q6ICRAIjsgRXhpdCA3Nzsg fQorZmF0YWxfICgpIHsgd2Fybl8gIiRNRV86IGhhcmQgZXJyb3I6ICRAIjsgRXhpdCA5OTsgfQor ZnJhbWV3b3JrX2ZhaWx1cmVfICgpIHsgd2Fybl8gIiRNRV86IHNldC11cCBmYWlsdXJlOiAkQCI7 IEV4aXQgOTk7IH0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBFbnN1cmUgdGhlIHNoZWxs IHN1cHBvcnRzIG1vZGVybiBzeW50YXguCisKKyMgU2FuaXRpemUgdGhpcyBzaGVsbCB0byBQT1NJ WCBtb2RlLCBpZiBwb3NzaWJsZS4KK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRQoraWYgdGVz dCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYx OyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgIGFsaWFzIC1nICckezErIiRAIn0n PSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAy Pi9kZXYvbnVsbGAgaW4KKyAgICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKKyAgZXNhYworZmkK KworIyBXZSByZXF1aXJlICQoLi4uKSBzdXBwb3J0IHVuY29uZGl0aW9uYWxseS4KKyMgV2UgcmVx dWlyZSB0aGF0IHRoZSBwcmludGYgYnVpbHQtaW4gd29yayBjb3JyZWN0bHkgcmVnYXJkaW5nIG9j dGFsIGVzY2FwZXM7CisjIHRoaXMgZWxpbWluYXRlcyAvYmluL3NoIG9uIEFJWCA3LjIuCisjIFdl IHJlcXVpcmUgbm9uLXN1cnByaXNpbmcgImxvY2FsIiBzZW1hbnRpY3MgKHRoaXMgZWxpbWluYXRl cyBkYXNoKS4KKyMgVGhpcyB0YWtlcyB0aGUgYWRtaXR0ZWRseSBkcmFjb25pYW4gc3RlcCBvZiBl bGltaW5hdGluZyBkYXNoLCBiZWNhdXNlIHRoZQorIyBhc3NpZ25tZW50IHRhYj0kKHByaW50ZiAn XHQnKSB3b3JrcyBmaW5lLCB5ZXQgcHJlY2VkaW5nIGl0IHdpdGggImxvY2FsICIKKyMgdHJhbnNm b3JtcyBpdCBpbnRvIGFuIGFzc2lnbm1lbnQgdGhhdCBzZXRzIHRoZSB2YXJpYWJsZSB0byB0aGUg ZW1wdHkgc3RyaW5nLgorIyBUaGF0IGlzIHRvbyBjb3VudGVyLWludHVpdGl2ZSwgYW5kIGNhbiBs ZWFkIHRvIHN1YnRsZSBydW4tdGltZSBtYWxmdW5jdGlvbi4KKyMgVGhlIGV4YW1wbGUgYmVsb3cg aXMgbGVzcyBzdWJ0bGUgaW4gdGhhdCB3aXRoIGRhc2gsIGl0IGV2b2tlcyB0aGUgcnVuLXRpbWUK KyMgZXhjZXB0aW9uICJkYXNoOiAxOiBsb2NhbDogMTogYmFkIHZhcmlhYmxlIG5hbWUiLgorIyBX ZSByZXF1aXJlIGEgZmV3IGFkZGl0aW9uYWwgc2hlbGwgZmVhdHVyZXMgb25seSB3aGVuICRFWEVF WFQgaXMgbm9uZW1wdHksCisjIGluIG9yZGVyIHRvIHN1cHBvcnQgYXV0b21hdGljICRFWEVFWFQg ZW11bGF0aW9uOgorIyAtIGh5cGhlbi1jb250YWluaW5nIGFsaWFzIG5hbWVzCisjIC0gd2UgcHJl ZmVyIHRvIHVzZSAke3ZhciMuLi59IHN1YnN0aXR1dGlvbiwgcmF0aGVyIHRoYW4gaGF2aW5nCisj ICAgdG8gd29yayBhcm91bmQgbGFjayBvZiBzdXBwb3J0IGZvciB0aGF0IGZlYXR1cmUuCisjIFRo ZSBmb2xsb3dpbmcgY29kZSBhdHRlbXB0cyB0byBmaW5kIGEgc2hlbGwgd2l0aCBzdXBwb3J0IGZv ciB0aGVzZSBmZWF0dXJlcy4KKyMgSWYgdGhlIGN1cnJlbnQgc2hlbGwgcGFzc2VzIHRoZSB0ZXN0 LCB3ZSdyZSBkb25lLiAgT3RoZXJ3aXNlLCB0ZXN0IG90aGVyCisjIHNoZWxscyB1bnRpbCB3ZSBm aW5kIG9uZSB0aGF0IHBhc3Nlcy4gIElmIG9uZSBpcyBmb3VuZCwgcmUtZXhlYyBpdC4KKyMgSWYg bm8gYWNjZXB0YWJsZSBzaGVsbCBpcyBmb3VuZCwgc2tpcCB0aGUgY3VycmVudCB0ZXN0LgorIwor IyBUaGUgIi4uLnNldCAteDsgUD0xIHRydWUgMj5lcnIuLi4iIHRlc3QgaXMgdG8gZGlzcXVhbGlm eSBhbnkgc2hlbGwgdGhhdAorIyBlbWl0cyAiUD0xIiBpbnRvIGVyciwgYXMgL2Jpbi9zaCBmcm9t IFN1bk9TIDUuMTEgYW5kIE9wZW5CU0QgNC43IGRvLgorIworIyBVc2UgIjkiIHRvIGluZGljYXRl IHN1Y2Nlc3MgKHJhdGhlciB0aGFuIDApLCBpbiBjYXNlIHNvbWUgc2hlbGwgYWN0cworIyBsaWtl IFNvbGFyaXMgMTAncyAvYmluL3NoIGJ1dCBleGl0cyBzdWNjZXNzZnVsbHkgaW5zdGVhZCBvZiB3 aXRoIHN0YXR1cyAyLgorCisjIEV2YWwgdGhpcyBjb2RlIGluIGEgc3Vic2hlbGwgdG8gZGV0ZXJt aW5lIGEgc2hlbGwncyBzdWl0YWJpbGl0eS4KKyMgMTAgLSBwYXNzZXMgYWxsIHRlc3RzOyBvayB0 byB1c2UKKyMgIDkgLSBvaywgYnV0IGVuYWJsaW5nICJzZXQgLXgiIGNvcnJ1cHRzIGFwcCBzdGRl cnI7IHByZWZlciBoaWdoZXIgc2NvcmUKKyMgID8gLSBub3Qgb2sKK2dsX3NoZWxsX3Rlc3Rfc2Ny aXB0Xz0nCit0ZXN0ICQoZWNobyB5KSA9IHkgfHwgZXhpdCAxCitMQ19BTEw9ZW5fVVMuVVRGLTgg cHJpbnRmICJcXDM1MSIgMj4vZGV2L251bGwgXAorICB8IExDX0FMTD1DIHRyICJcXDM1MSIgeCB8 IExDX0FMTD1DIGdyZXAgIl54JCIgPiAvZGV2L251bGwgXAorICB8fCBleGl0IDEKK3ByaW50ZiAi XFwzNTEiIDI+L2Rldi9udWxsIFwKKyAgfCBMQ19BTEw9QyB0ciAiXFwzNTEiIHggfCBMQ19BTEw9 QyBncmVwICJeeCQiID4gL2Rldi9udWxsIFwKKyAgfHwgZXhpdCAxCitmX2xvY2FsXygpIHsgbG9j YWwgdj0xOyB9OyBmX2xvY2FsXyB8fCBleGl0IDEKK2ZfZGFzaF9sb2NhbF9mYWlsXygpIHsgbG9j YWwgdD0kKHByaW50ZiAiIDEiKTsgfTsgZl9kYXNoX2xvY2FsX2ZhaWxfCitzY29yZV89MTAKK2lm IHRlc3QgIiRWRVJCT1NFIiA9IHllczsgdGhlbgorICB0ZXN0IC1uICIkKCAoZXhlYyAzPiYxOyBz ZXQgLXg7IFA9MSB0cnVlIDI+JjMpIDI+IC9kZXYvbnVsbCkiICYmIHNjb3JlXz05CitmaQordGVz dCAteiAiJEVYRUVYVCIgJiYgZXhpdCAkc2NvcmVfCitzaG9wdCAtcyBleHBhbmRfYWxpYXNlcwor YWxpYXMgYS1iPSJlY2hvIHpvbyIKK3Y9YWJ4CisgICAgIHRlc3QgJHt2JXh9ID0gYWIgXAorICAm JiB0ZXN0ICR7diNhfSA9IGJ4IFwKKyAgJiYgdGVzdCAkKGEtYikgPSB6b28gXAorICAmJiBleGl0 ICRzY29yZV8KKycKKworaWYgdGVzdCAieCQxIiA9ICJ4LS1uby1yZWV4ZWMiOyB0aGVuCisgIHNo aWZ0CitlbHNlCisgICMgQXNzdW1lIGEgd29ya2luZyBzaGVsbC4gIEV4cG9ydCB0byBzdWJzaGVs bHMgKHNldHVwXyBuZWVkcyB0aGlzKS4KKyAgZ2xfc2V0X3hfY29ycnVwdHNfc3RkZXJyXz1mYWxz ZQorICBleHBvcnQgZ2xfc2V0X3hfY29ycnVwdHNfc3RkZXJyXworCisgICMgUmVjb3JkIHRoZSBm aXJzdCBtYXJnaW5hbGx5IGFjY2VwdGFibGUgc2hlbGwuCisgIG1hcmdpbmFsXz0KKworICAjIFNl YXJjaCBmb3IgYSBzaGVsbCB0aGF0IG1lZXRzIG91ciByZXF1aXJlbWVudHMuCisgIGZvciByZV9z aGVsbF8gaW4gX19jdXJyZW50X18gIiR7Q09ORklHX1NIRUxMOi1ub19zaGVsbH0iIFwKKyAgICAg IC9iaW4vc2ggYmFzaCBkYXNoIHpzaCBwZGtzaCBmYWlsCisgIGRvCisgICAgdGVzdCAiJHJlX3No ZWxsXyIgPSBub19zaGVsbCAmJiBjb250aW51ZQorCisgICAgIyBJZiB3ZSd2ZSBtYWRlIGl0IGFs bCB0aGUgd2F5IHRvIHRoZSBzZW50aW5lbCwgImZhaWwiIHdpdGhvdXQKKyAgICAjIGZpbmRpbmcg ZXZlbiBhIG1hcmdpbmFsIHNoZWxsLCBza2lwIHRoaXMgdGVzdC4KKyAgICBpZiB0ZXN0ICIkcmVf c2hlbGxfIiA9IGZhaWw7IHRoZW4KKyAgICAgIHRlc3QgLXogIiRtYXJnaW5hbF8iICYmIHNraXBf IGZhaWxlZCB0byBmaW5kIGFuIGFkZXF1YXRlIHNoZWxsCisgICAgICByZV9zaGVsbF89JG1hcmdp bmFsXworICAgICAgYnJlYWsKKyAgICBmaQorCisgICAgIyBXaGVuIHRlc3RpbmcgdGhlIGN1cnJl bnQgc2hlbGwsIHNpbXBseSAiZXZhbCIgdGhlIHRlc3QgY29kZS4KKyAgICAjIE90aGVyd2lzZSwg cnVuIGl0IHZpYSAkcmVfc2hlbGxfIC1jIC4uLgorICAgIGlmIHRlc3QgIiRyZV9zaGVsbF8iID0g X19jdXJyZW50X187IHRoZW4KKyAgICAgICMgJ2V2YWwnaW5nIHRoaXMgY29kZSBtYWtlcyBTb2xh cmlzIDEwJ3MgL2Jpbi9zaCBleGl0IHdpdGgKKyAgICAgICMgJD8gc2V0IHRvIDIuICBJdCBkb2Vz IG5vdCBldmFsdWF0ZSBhbnkgb2YgdGhlIGNvZGUgYWZ0ZXIgdGhlCisgICAgICAjICJ1bmV4cGVj dGVkIiBmaXJzdCAnKCcuICBUaHVzLCB3ZSBtdXN0IHJ1biBpdCBpbiBhIHN1YnNoZWxsLgorICAg ICAgKCBldmFsICIkZ2xfc2hlbGxfdGVzdF9zY3JpcHRfIiApID4gL2Rldi9udWxsIDI+JjEKKyAg ICBlbHNlCisgICAgICAiJHJlX3NoZWxsXyIgLWMgIiRnbF9zaGVsbF90ZXN0X3NjcmlwdF8iIDI+ L2Rldi9udWxsCisgICAgZmkKKworICAgIHN0Xz0kPworCisgICAgIyAkcmVfc2hlbGxfIHdvcmtz IGp1c3QgZmluZS4gIFVzZSBpdC4KKyAgICBpZiB0ZXN0ICRzdF8gPSAxMDsgdGhlbgorICAgICAg Z2xfc2V0X3hfY29ycnVwdHNfc3RkZXJyXz1mYWxzZQorICAgICAgYnJlYWsKKyAgICBmaQorCisg ICAgIyBJZiB0aGlzIGlzIG91ciBmaXJzdCBtYXJnaW5hbGx5IGFjY2VwdGFibGUgc2hlbGwsIHJl bWVtYmVyIGl0LgorICAgIGlmIHRlc3QgIiRzdF86JG1hcmdpbmFsXyIgPSA5OiA7IHRoZW4KKyAg ICAgIG1hcmdpbmFsXz0iJHJlX3NoZWxsXyIKKyAgICAgIGdsX3NldF94X2NvcnJ1cHRzX3N0ZGVy cl89dHJ1ZQorICAgIGZpCisgIGRvbmUKKworICBpZiB0ZXN0ICIkcmVfc2hlbGxfIiAhPSBfX2N1 cnJlbnRfXzsgdGhlbgorICAgICMgRm91bmQgYSB1c2FibGUgc2hlbGwuICBQcmVzZXJ2ZSAtdiBh bmQgLXguCisgICAgY2FzZSAkLSBpbgorICAgICAgKnYqeCogfCAqeCp2Kikgb3B0c189LXZ4IDs7 CisgICAgICAqdiopIG9wdHNfPS12IDs7CisgICAgICAqeCopIG9wdHNfPS14IDs7CisgICAgICAq KSBvcHRzXz0gOzsKKyAgICBlc2FjCisgICAgcmVfc2hlbGw9JHJlX3NoZWxsXworICAgIGV4cG9y dCByZV9zaGVsbAorICAgIGV4ZWMgIiRyZV9zaGVsbF8iICRvcHRzXyAiJDAiIC0tbm8tcmVleGVj ICIkQCIKKyAgICBlY2hvICIkTUVfOiBleGVjIGZhaWxlZCIgMT4mMgorICAgIGV4aXQgMTI3Cisg IGZpCitmaQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIEVuc3VyZSB0aGUgc2hlbGwgYmVo YXZlcyByZWFzb25hYmx5LgorCisjIElmIHRoaXMgaXMgYmFzaCwgdHVybiBvZmYgYWxsIGFsaWFz ZXMuCit0ZXN0IC1uICIkQkFTSF9WRVJTSU9OIiAmJiB1bmFsaWFzIC1hCisKKyMgTm90ZSB0aGF0 IHdoZW4gc3VwcG9ydGluZyAkRVhFRVhUICh0cmFuc3BhcmVudGx5IG1hcHBpbmcgZnJvbSBQUk9H X05BTUUgdG8KKyMgUFJPR19OQU1FLmV4ZSksIHdlIHdhbnQgdG8gc3VwcG9ydCBoeXBoZW4tY29u dGFpbmluZyBuYW1lcyBsaWtlIHRlc3QtYWNvcy4KKyMgVGhhdCBpcyBwYXJ0IG9mIHRoZSBzaGVs bC1zZWxlY3Rpb24gdGVzdCBhYm92ZS4gIFdoeSB1c2UgYWxpYXNlcyByYXRoZXIKKyMgdGhhbiBm dW5jdGlvbnM/ICBCZWNhdXNlIHN1cHBvcnQgZm9yIGh5cGhlbi1jb250YWluaW5nIGFsaWFzZXMg aXMgbW9yZQorIyB3aWRlc3ByZWFkIHRoYW4gdGhhdCBmb3IgaHlwaGVuLWNvbnRhaW5pbmcgZnVu Y3Rpb24gbmFtZXMuCit0ZXN0IC1uICIkRVhFRVhUIiAmJiB0ZXN0IC1uICIkQkFTSF9WRVJTSU9O IiAmJiBzaG9wdCAtcyBleHBhbmRfYWxpYXNlcworCisjID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisj IENyZWF0aW5nIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSAobmVlZGVkIGJ5IHRoZSBjb3JlIHRlc3Qg ZnJhbWV3b3JrKQorCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnksIG11Y2ggbGlrZSBt a3RlbXAgLWQgZG9lcy4KKyMgV3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcuCisjCisjIFVzYWdlOiBt a3RlbXBkXyAvdG1wIHBob2V5LlhYWFhYWFhYWFgKKyMKKyMgRmlyc3QsIHRyeSB0byB1c2UgdGhl IG1rdGVtcCBwcm9ncmFtLgorIyBGYWlsaW5nIHRoYXQsIHdlJ2xsIHJvbGwgb3VyIG93biBta3Rl bXAtbGlrZSBmdW5jdGlvbjoKKyMgIC0gdHJ5IHRvIGdldCByYW5kb20gYnl0ZXMgZnJvbSAvZGV2 L3VyYW5kb20sIG1hcHBpbmcgdGhlbSB0byBmaWxlLW5hbWUgYnl0ZXMKKyMgIC0gZmFpbGluZyB0 aGF0LCBnZW5lcmF0ZSBvdXRwdXQgZnJvbSBhIGNvbWJpbmF0aW9uIG9mIHF1aWNrbHktdmFyeWlu ZworIyAgICAgIHNvdXJjZXMgYW5kIGF3ay4KKyMgIC0gdHJ5IHRvIGNyZWF0ZSB0aGUgZGVzaXJl ZCBkaXJlY3RvcnkuCisjICAtIG1ha2Ugb25seSAkTUFYX1RSSUVTXyBhdHRlbXB0cworCisjIG1r ZGlyIG9uIG1zeXMyIGRvZXMgbm90IHN1cHBvcnQgdGhlICctbScgb3B0aW9uLgorY2FzZSBgKHVu YW1lIC1vKSAyPi9kZXYvbnVsbGAgaW4KKyAgTXN5cykKKyAgICBta2RpciAoKQorICAgIHsKKyAg ICAgIGlmIHRlc3QgIiAkMSIgPSAiIC1tIjsgdGhlbgorICAgICAgICBzaGlmdDsgc2hpZnQKKyAg ICAgIGZpCisgICAgICAvYmluL21rZGlyICIkQCIKKyAgICB9CisgICAgOzsKK2VzYWMKKworIyBI ZWxwZXIgZnVuY3Rpb24uICBQcmludCAkTiBwc2V1ZG8tcmFuZG9tIGJ5dGVzIGZyb20gYS16QS1a MC05LgorcmFuZF9ieXRlc18gKCkKK3sKKyAgbl89JDEKKworICAjIE1heWJlIHRyeSBvcGVuc3Ns IHJhbmQgLWJhc2U2NCAkbl9wcmltZV98dHIgJysvPVwwMTInIGFiY2QgZmlyc3Q/CisgICMgQnV0 IGlmIHRoZXkgaGF2ZSBvcGVuc3NsLCB0aGV5IHByb2JhYmx5IGhhdmUgbWt0ZW1wLCB0b28uCisK KyAgY2hhcnNfPWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RV VldYWVowMTIzNDU2Nzg5CisgIGRldl9yYW5kXz0vZGV2L3VyYW5kb20KKyAgaWYgdGVzdCAtciAi JGRldl9yYW5kXyI7IHRoZW4KKyAgICAjIE5vdGU6IDI1Ni1sZW5ndGgoJGNoYXJzXykgPT0gMTk0 OyAzIGNvcGllcyBvZiAkY2hhcnNfIGlzIDE4NiArIDggPSAxOTQuCisgICAgZGQgaWJzPSRuXyBj b3VudD0xIGlmPSRkZXZfcmFuZF8gMj4vZGV2L251bGwgXAorICAgICAgfCBMQ19BTEw9QyB0ciAt YyAkY2hhcnNfIDAxMjM0NTY3JGNoYXJzXyRjaGFyc18kY2hhcnNfCisgICAgcmV0dXJuCisgIGZp CisKKyAgIyBGYWxsIGJhY2sgb24gcXVpY2tseS12YXJ5aW5nIHNvdXJjZXMgKyBhd2suCisgICMg TGltaXQgYXdrIHByb2dyYW0gdG8gN3RoIEVkaXRpb24gVW5peCBzbyB0aGF0IGl0IHdvcmtzIGV2 ZW4gb24gU29sYXJpcyAxMC4KKworICAoZGF0ZTsgZGF0ZSArJU47IGZyZWU7IHdobyAtYTsgdzsg cHMgYXV4d3c7IHBzIC1lZikgMj4mMSB8IGF3ayAnCisgICAgIEJFR0lOIHsKKyAgICAgICBuID0g JyIkbl8iJworICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICAgICAgIG9yZGlu YWxbc3ByaW50ZiAoIiVjIiwgaSldID0gaQorICAgICB9CisgICAgIHsKKyAgICAgICBmb3IgKGkg PSAxOyBpIDw9IGxlbmd0aDsgaSsrKQorICAgICAgICAgYVthaSsrICUgbl0gKz0gb3JkaW5hbFtz dWJzdHIgKCQwLCBpLCAxKV0KKyAgICAgfQorICAgICBFTkQgeworICAgICAgIGNoYXJzID0gIici JGNoYXJzXyInIgorICAgICAgIGNoYXJzbGVuID0gbGVuZ3RoIChjaGFycykKKyAgICAgICBmb3Ig KGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgcHJpbnRmICIlcyIsIHN1YnN0ciAoY2hhcnMs IGFbaV0gJSBjaGFyc2xlbiArIDEsIDEpCisgICAgICAgcHJpbnRmICJcbiIKKyAgICAgfQorICAn Cit9CisKK21rdGVtcGRfICgpCit7CisgIGNhc2UgJCMgaW4KKyAgMik7OworICAqKSBmYWlsXyAi VXNhZ2U6IG1rdGVtcGRfIERJUiBURU1QTEFURSI7OworICBlc2FjCisKKyAgZGVzdGRpcl89JDEK KyAgdGVtcGxhdGVfPSQyCisKKyAgTUFYX1RSSUVTXz00CisKKyAgIyBEaXNhbGxvdyBhbnkgdHJh aWxpbmcgc2xhc2ggb24gc3BlY2lmaWVkIGRlc3RkaXI6CisgICMgaXQgd291bGQgc3VidmVydCB0 aGUgcG9zdC1ta3RlbXAgImNhc2UiLWJhc2VkIGRlc3RkaXIgdGVzdC4KKyAgY2FzZSAkZGVzdGRp cl8gaW4KKyAgLyB8IC8vKSBkZXN0ZGlyX3NsYXNoXz0kZGVzdGRpcjs7CisgICovKSBmYWlsXyAi aW52YWxpZCBkZXN0aW5hdGlvbiBkaXI6IHJlbW92ZSB0cmFpbGluZyBzbGFzaChlcykiOzsKKyAg KikgZGVzdGRpcl9zbGFzaF89JGRlc3RkaXJfLzs7CisgIGVzYWMKKworICBjYXNlICR0ZW1wbGF0 ZV8gaW4KKyAgLSopIGZhaWxfIFwKKyAgICAgICAiaW52YWxpZCB0ZW1wbGF0ZTogJHRlbXBsYXRl XyAobXVzdCBub3QgYmVnaW4gd2l0aCAnLScpIjs7CisgICpYWFhYKSA7OworICAqKSBmYWlsXyBc CisgICAgICAgImludmFsaWQgdGVtcGxhdGU6ICR0ZW1wbGF0ZV8gKG11c3QgaGF2ZSBhIHN1ZmZp eCBvZiBhdCBsZWFzdCA0IFgncykiOzsKKyAgZXNhYworCisgICMgRmlyc3QsIHRyeSBHTlUgbWt0 ZW1wLCB3aGVyZSAtdCBoYXMgbm8gb3B0aW9uLWFyZ3VtZW50LgorICAjIFB1dCAtdCBsYXN0LCBh cyBHTlUgbWt0ZW1wIGFsbG93cywgc28gdGhhdCB0aGUgaW5jb21wYXRpYmxlIE5ldEJTRCBta3Rl bXAKKyAgIyAod2hlcmUgLXQgaGFzIGFuIG9wdGlvbi1hcmd1bWVudCkgZmFpbHMgaW5zdGVhZCBv ZiBjcmVhdGluZyBhIGp1bmsgZGlyLgorICBkPWB1bnNldCBUTVBESVI7IHsgbWt0ZW1wIC1kIC1w ICIkZGVzdGRpcl8iICIkdGVtcGxhdGVfIiAtdDsgfSAyPi9kZXYvbnVsbGAgJiYKKworICAjIFRo ZSByZXN1bHRpbmcgbmFtZSBtdXN0IGJlIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5LgorICBj YXNlICRkIGluICIkZGVzdGRpcl9zbGFzaF8iKikgOjs7ICopIGZhbHNlOzsgZXNhYyAmJgorCisg ICMgSXQgbXVzdCBoYXZlIGNyZWF0ZWQgdGhlIGRpcmVjdG9yeS4KKyAgdGVzdCAtZCAiJGQiICYm CisKKyAgIyBJdCBtdXN0IGhhdmUgMDcwMCBwZXJtaXNzaW9ucy4gIEhhbmRsZSBzdGlja3kgIlMi IGJpdHMuCisgIHBlcm1zPWBscyAtZGdvICIkZCIgMj4vZGV2L251bGxgICYmCisgIGNhc2UgJHBl cm1zIGluIGRyd3gtLVstU10tLS0qKSA6OzsgKikgZmFsc2U7OyBlc2FjICYmIHsKKyAgICBlY2hv ICIkZCIKKyAgICByZXR1cm4KKyAgfQorCisgICMgSWYgd2UgcmVhY2ggdGhpcyBwb2ludCwgd2Un bGwgaGF2ZSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgbWFudWFsbHkuCisKKyAgIyBHZXQgYSBjb3B5 IG9mIHRoZSB0ZW1wbGF0ZSB3aXRob3V0IGl0cyBzdWZmaXggb2YgWCdzLgorICBiYXNlX3RlbXBs YXRlXz1gZWNobyAiJHRlbXBsYXRlXyJ8c2VkICdzL1hYKiQvLydgCisKKyAgIyBDYWxjdWxhdGUg aG93IG1hbnkgWCdzIHdlJ3ZlIGp1c3QgcmVtb3ZlZC4KKyAgdGVtcGxhdGVfbGVuZ3RoXz1gZWNo byAiJHRlbXBsYXRlXyIgfCB3YyAtY2AKKyAgbnhfPWBlY2hvICIkYmFzZV90ZW1wbGF0ZV8iIHwg d2MgLWNgCisgIG54Xz1gZXhwciAkdGVtcGxhdGVfbGVuZ3RoXyAtICRueF9gCisKKyAgZXJyXz0K KyAgaV89MQorICB3aGlsZSA6OyBkbworICAgIFhfPWByYW5kX2J5dGVzXyAkbnhfYAorICAgIGNh bmRpZGF0ZV9kaXJfPSIkZGVzdGRpcl9zbGFzaF8kYmFzZV90ZW1wbGF0ZV8kWF8iCisgICAgZXJy Xz1gbWtkaXIgLW0gMDcwMCAiJGNhbmRpZGF0ZV9kaXJfIiAyPiYxYCBcCisgICAgICAmJiB7IGVj aG8gIiRjYW5kaWRhdGVfZGlyXyI7IHJldHVybjsgfQorICAgIHRlc3QgJE1BWF9UUklFU18gLWxl ICRpXyAmJiBicmVhazsKKyAgICBpXz1gZXhwciAkaV8gKyAxYAorICBkb25lCisgIGZhaWxfICIk ZXJyXyIKK30KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBDb3JlIHRlc3QgZnJhbWV3b3Jr CisKKyMgQW4gYXJiaXRyYXJ5IHByZWZpeCB0byBoZWxwIGRpc3Rpbmd1aXNoIHRlc3QgZGlyZWN0 b3JpZXMuCit0ZXN0ZGlyX3ByZWZpeF8gKCkgeyBwcmludGYgZ3Q7IH0KKworIyBTZXQgdXAgdGhl IGVudmlyb25tZW50IGZvciB0aGUgdGVzdCB0byBydW4gaW4uCitzZXR1cF8gKCkKK3sKKyAgaWYg dGVzdCAiJFZFUkJPU0UiID0geWVzOyB0aGVuCisgICAgIyBUZXN0IHdoZXRoZXIgc2V0IC14IG1h eSBjYXVzZSB0aGUgc2VsZWN0ZWQgc2hlbGwgdG8gY29ycnVwdCBhbgorICAgICMgYXBwbGljYXRp b24ncyBzdGRlcnIuICBNYW55IGRvLCBpbmNsdWRpbmcgenNoLTQuMy4xMCBhbmQgdGhlIC9iaW4v c2gKKyAgICAjIGZyb20gU3VuT1MgNS4xMSwgT3BlbkJTRCA0LjcgYW5kIElyaXggNi41LgorICAg ICMgSWYgZW5hYmxpbmcgdmVyYm9zZSBvdXRwdXQgdGhpcyB3YXkgd291bGQgY2F1c2UgdHJvdWJs ZSwgc2ltcGx5CisgICAgIyBpc3N1ZSBhIHdhcm5pbmcgYW5kIHJlZnJhaW4uCisgICAgaWYgJGds X3NldF94X2NvcnJ1cHRzX3N0ZGVycl87IHRoZW4KKyAgICAgIHdhcm5fICJ1c2luZyBTSEVMTD0k U0hFTEwgd2l0aCAnc2V0IC14JyBjb3JydXB0cyBzdGRlcnIiCisgICAgZWxzZQorICAgICAgc2V0 IC14CisgICAgZmkKKyAgZmkKKworICBpbml0aWFsX2N3ZF89JFBXRAorCisgICMgQ3JlYXRlIGFu ZCBlbnRlciB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KKyAgcGZ4Xz1gdGVzdGRpcl9wcmVmaXhf YAorICB0ZXN0X2Rpcl89YG1rdGVtcGRfICIkaW5pdGlhbF9jd2RfIiAiJHBmeF8tJE1FXy5YWFhY ImAgXAorICAgIHx8IGZhaWxfICJmYWlsZWQgdG8gY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3Rvcnkg aW4gJGluaXRpYWxfY3dkXyIKKyAgY2QgIiR0ZXN0X2Rpcl8iIHx8IGZhaWxfICJmYWlsZWQgdG8g Y2QgdG8gdGVtcG9yYXJ5IGRpcmVjdG9yeSIKKyAgIyBTZXQgdmFyaWFibGVzIHNyY2RpciwgYnVp bGRkaXIsIGZvciB0aGUgY29udmVuaWVuY2Ugb2YgdGhlIHRlc3QuCisgIGNhc2UgJHNyY2RpciBp bgorICAgIC8qIHwgPzoqKSA7OworICAgICopIHNyY2Rpcj0iLi4vJHNyY2RpciIgOzsKKyAgZXNh YworICBidWlsZGRpcj0iLi4iCisgIGV4cG9ydCBzcmNkaXIgYnVpbGRkaXIKKworICAjIEFzIGF1 dG9jb25mLWdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0cyBkbywgZW5zdXJlIHRoYXQgSUZTCisg ICMgaXMgZGVmaW5lZCBpbml0aWFsbHksIHNvIHRoYXQgc2F2aW5nIGFuZCByZXN0b3JpbmcgJElG UyB3b3Jrcy4KKyAgZ2xfaW5pdF9zaF9ubF89JworJworICBJRlM9IiAiIgkkZ2xfaW5pdF9zaF9u bF8iCisKKyAgIyBUaGlzIHRyYXAgc3RhdGVtZW50LCBhbG9uZyB3aXRoIGEgdHJhcCBvbiAwIGJl bG93LCBlbnN1cmUgdGhhdCB0aGUKKyAgIyB0ZW1wb3JhcnkgZGlyZWN0b3J5LCAkdGVzdF9kaXJf LCBpcyByZW1vdmVkIHVwb24gZXhpdCBhcyB3ZWxsIGFzCisgICMgdXBvbiByZWNlaXB0IG9mIGFu eSBvZiB0aGUgbGlzdGVkIHNpZ25hbHMuCisgIGZvciBzaWdfIGluIDEgMiAzIDEzIDE1OyBkbwor ICAgIGV2YWwgInRyYXAgJ0V4aXQgJChleHByICRzaWdfICsgMTI4KScgJHNpZ18iCisgIGRvbmUK KworICAjIFJlbW92ZSByZWxhdGl2ZSBhbmQgbm9uLWFjY2Vzc2libGUgZGlyZWN0b3JpZXMgZnJv bSBQQVRILCBpbmNsdWRpbmcgJy4nCisgICMgYW5kIFplcm8tbGVuZ3RoIGVudHJpZXMuCisgIHNh dmVkX0lGUz0iJElGUyI7IElGUz0iJFBBVEhfU0VQQVJBVE9SIgorICBuZXdfUEFUSD0KKyAgZm9y IGRpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9IiRzYXZlZF9JRlMiCisgICAgY2FzZSAiJGRpciIg aW4KKyAgICAgIFtcXC9dKiB8ID86W1xcL10qKQorICAgICAgICB0ZXN0IC1kICIkZGlyLy4iIHx8 IGNvbnRpbnVlCisgICAgICAgIG5ld19QQVRIPSIke25ld19QQVRIfSR7bmV3X1BBVEg6KyRQQVRI X1NFUEFSQVRPUn0ke2Rpcn0iCisgICAgICAgIDs7CisgICAgZXNhYworICBkb25lCisgIElGUz0i JHNhdmVkX0lGUyIKKyAgUEFUSD0iJG5ld19QQVRIIgorICBleHBvcnQgUEFUSAorfQorCisjIFRo aXMgaXMgYSBzdHViIGZ1bmN0aW9uIHRoYXQgaXMgcnVuIHVwb24gdHJhcCAodXBvbiByZWd1bGFy IGV4aXQgYW5kCisjIGludGVycnVwdCkuICBPdmVycmlkZSBpdCB3aXRoIGEgcGVyLXRlc3QgZnVu Y3Rpb24sIGUuZy4sIHRvIHVubW91bnQKKyMgYSBwYXJ0aXRpb24sIG9yIHRvIHVuZG8gYW55IG90 aGVyIGdsb2JhbCBzdGF0ZSBjaGFuZ2VzLgorY2xlYW51cF8gKCkgeyA6OyB9CisKKyMgUnVuIHRo ZSB1c2VyLW92ZXJyaWRhYmxlIGNsZWFudXBfIGZ1bmN0aW9uLCByZW1vdmUgdGhlIHRlbXBvcmFy eQorIyBkaXJlY3RvcnkgYW5kIGV4aXQgd2l0aCB0aGUgaW5jb21pbmcgdmFsdWUgb2YgJD8uCity ZW1vdmVfdG1wXyAoKQoreworICBfX3N0PSQ/CisgIGNsZWFudXBfCisgIGlmIHRlc3QgIiRLRUVQ IiA9IHllczsgdGhlbgorICAgIGVjaG8gIk5vdCByZW1vdmluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5 ICR0ZXN0X2Rpcl8iCisgIGVsc2UKKyAgICAjIGNkIG91dCBvZiB0aGUgZGlyZWN0b3J5IHdlJ3Jl IGFib3V0IHRvIHJlbW92ZQorICAgIGNkICIkaW5pdGlhbF9jd2RfIiB8fCBjZCAvIHx8IGNkIC90 bXAKKyAgICBjaG1vZCAtUiB1K3J3eCAiJHRlc3RfZGlyXyIKKyAgICAjIElmIHJlbW92YWwgZmFp bHMgYW5kIGV4aXQgc3RhdHVzIHdhcyB0byBiZSAwLCB0aGVuIGNoYW5nZSBpdCB0byAxLgorICAg IHJtIC1yZiAiJHRlc3RfZGlyXyIgfHwgeyB0ZXN0ICRfX3N0ID0gMCAmJiBfX3N0PTE7IH0KKyAg ZmkKKyAgZXhpdCAkX19zdAorfQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFByZXBlbmRp bmcgZGlyZWN0b3JpZXMgdG8gUEFUSAorCisjIEdpdmVuIGEgZGlyZWN0b3J5IG5hbWUsIERJUiwg aWYgZXZlcnkgZW50cnkgaW4gaXQgdGhhdCBtYXRjaGVzICouZXhlCisjIGNvbnRhaW5zIG9ubHkg dGhlIHNwZWNpZmllZCBieXRlcyAoc2VlIHRoZSBjYXNlIHN0bXQgYmVsb3cpLCB0aGVuIHByaW50 CisjIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdGhvc2UgbmFtZXMgYW5kIHJldHVybiAwLiAg T3RoZXJ3aXNlLCBkb24ndAorIyBwcmludCBhbnl0aGluZyBhbmQgcmV0dXJuIDEuICBOYW1pbmcg Y29uc3RyYWludHMgYXBwbHkgYWxzbyB0byBESVIuCitmaW5kX2V4ZV9iYXNlbmFtZXNfICgpCit7 CisgIGZlYl9kaXJfPSQxCisgIGZlYl9mYWlsXz0wCisgIGZlYl9yZXN1bHRfPQorICBmZWJfc3Bf PQorICBmb3IgZmViX2ZpbGVfIGluICRmZWJfZGlyXy8qLmV4ZTsgZG8KKyAgICAjIElmIHRoZXJl IHdhcyBubyAqLmV4ZSBmaWxlLCBvciB0aGVyZSBleGlzdGVkIGEgZmlsZSBuYW1lZCAiKi5leGUi IHRoYXQKKyAgICAjIHdhcyBkZWxldGVkIGJldHdlZW4gdGhlIGFib3ZlIGdsb2IgZXhwYW5zaW9u IGFuZCB0aGUgZXhpc3RlbmNlIHRlc3QKKyAgICAjIGJlbG93LCBqdXN0IHNraXAgaXQuCisgICAg dGVzdCAieCRmZWJfZmlsZV8iID0gIngkZmViX2Rpcl8vKi5leGUiICYmIHRlc3QgISAtZiAiJGZl Yl9maWxlXyIgXAorICAgICAgJiYgY29udGludWUKKyAgICAjIEV4ZW1wdCBbLmV4ZSwgc2luY2Ug d2UgY2FuJ3QgY3JlYXRlIGEgZnVuY3Rpb24gYnkgdGhhdCBuYW1lLCB5ZXQKKyAgICAjIHdlIGNh bid0IGludm9rZSBbIGJ5IFBBVEggc2VhcmNoIGFueXdheXMgZHVlIHRvIHNoZWxsIGJ1aWx0aW5z LgorICAgIHRlc3QgIngkZmViX2ZpbGVfIiA9ICJ4JGZlYl9kaXJfL1suZXhlIiAmJiBjb250aW51 ZQorICAgIGNhc2UgJGZlYl9maWxlXyBpbgorICAgICAgKlshLWEtekEtWi8wLTlfLitdKikgZmVi X2ZhaWxfPTE7IGJyZWFrOzsKKyAgICAgICopICMgUmVtb3ZlIGxlYWRpbmcgZmlsZSBuYW1lIGNv bXBvbmVudHMgYXMgd2VsbCBhcyB0aGUgLmV4ZSBzdWZmaXguCisgICAgICAgICBmZWJfZmlsZV89 JHtmZWJfZmlsZV8jIyovfQorICAgICAgICAgZmViX2ZpbGVfPSR7ZmViX2ZpbGVfJS5leGV9Cisg ICAgICAgICBmZWJfcmVzdWx0Xz0iJGZlYl9yZXN1bHRfJGZlYl9zcF8kZmViX2ZpbGVfIjs7Cisg ICAgZXNhYworICAgIGZlYl9zcF89JyAnCisgIGRvbmUKKyAgdGVzdCAkZmViX2ZhaWxfID0gMCAm JiBwcmludGYgJXMgIiRmZWJfcmVzdWx0XyIKKyAgcmV0dXJuICRmZWJfZmFpbF8KK30KKworIyBD b25zaWRlciB0aGUgZmlsZXMgaW4gZGlyZWN0b3J5LCAkMS4KKyMgRm9yIGVhY2ggZmlsZSBuYW1l IG9mIHRoZSBmb3JtIFBST0cuZXhlLCBjcmVhdGUgYW4gYWxpYXMgbmFtZWQKKyMgUFJPRyB0aGF0 IHNpbXBseSBpbnZva2VzIFBST0cuZXhlLCB0aGVuIHJldHVybiAwLiAgSWYgYW55IHNlbGVjdGVk CisjIGZpbGUgbmFtZSBvciB0aGUgZGlyZWN0b3J5IG5hbWUsICQxLCBjb250YWlucyBhbiB1bmV4 cGVjdGVkIGNoYXJhY3RlciwKKyMgZGVmaW5lIG5vIGFsaWFzIGFuZCByZXR1cm4gMS4KK2NyZWF0 ZV9leGVfc2hpbXNfICgpCit7CisgIGNhc2UgJEVYRUVYVCBpbgorICAgICcnKSByZXR1cm4gMCA7 OworICAgIC5leGUpIDs7CisgICAgKikgZWNobyAiJDA6IHVuZXhwZWN0ZWQgXCRFWEVFWFQgdmFs dWU6ICRFWEVFWFQiIDE+JjI7IHJldHVybiAxIDs7CisgIGVzYWMKKworICBiYXNlX25hbWVzXz1g ZmluZF9leGVfYmFzZW5hbWVzXyAkMWAgXAorICAgIHx8IHsgZWNobyAiJDAgKGV4ZV9zaGltKTog c2tpcHBpbmcgZGlyZWN0b3J5OiAkMSIgMT4mMjsgcmV0dXJuIDA7IH0KKworICBpZiB0ZXN0IC1u ICIkYmFzZV9uYW1lc18iOyB0aGVuCisgICAgZm9yIGJhc2VfIGluICRiYXNlX25hbWVzXzsgZG8K KyAgICAgIGFsaWFzICIkYmFzZV8iPSIkYmFzZV8kRVhFRVhUIgorICAgIGRvbmUKKyAgZmkKKwor ICByZXR1cm4gMAorfQorCisjIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHByZXBlbmQgdG8gUEFUSCBh biBhYnNvbHV0ZSBuYW1lIGZvciBlYWNoCisjIHNwZWNpZmllZCwgcG9zc2libHktJGluaXRpYWxf Y3dkXy1yZWxhdGl2ZSwgZGlyZWN0b3J5LgorcGF0aF9wcmVwZW5kXyAoKQoreworICB3aGlsZSB0 ZXN0ICQjICE9IDA7IGRvCisgICAgcGF0aF9kaXJfPSQxCisgICAgY2FzZSAkcGF0aF9kaXJfIGlu CisgICAgICAnJykgZmFpbF8gImludmFsaWQgcGF0aCBkaXI6ICckMSciOzsKKyAgICAgIC8qIHwg PzoqKSBhYnNfcGF0aF9kaXJfPSRwYXRoX2Rpcl87OworICAgICAgKikgYWJzX3BhdGhfZGlyXz0k aW5pdGlhbF9jd2RfLyRwYXRoX2Rpcl87OworICAgIGVzYWMKKyAgICBjYXNlICRhYnNfcGF0aF9k aXJfIGluCisgICAgICAqJFBBVEhfU0VQQVJBVE9SKikgZmFpbF8gImludmFsaWQgcGF0aCBkaXI6 ICckYWJzX3BhdGhfZGlyXyciOzsKKyAgICBlc2FjCisgICAgUEFUSD0iJGFic19wYXRoX2Rpcl8k UEFUSF9TRVBBUkFUT1IkUEFUSCIKKworICAgICMgQ3JlYXRlIGFuIGFsaWFzLCBGT08sIGZvciBl YWNoIEZPTy5leGUgaW4gdGhpcyBkaXJlY3RvcnkuCisgICAgY3JlYXRlX2V4ZV9zaGltc18gIiRh YnNfcGF0aF9kaXJfIiBcCisgICAgICB8fCBmYWlsXyAic29tZXRoaW5nIGZhaWxlZCAoYWJvdmUp OiAkYWJzX3BhdGhfZGlyXyIKKyAgICBzaGlmdAorICBkb25lCisgIGV4cG9ydCBQQVRICit9CisK KyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKyMgQ29udmVuaWVuY2UgZW52aXJvbm1lbnQgdmFyaWFi bGVzIGZvciB0aGUgdGVzdHMKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIEVuYWJsZSBn bGliYydzIG1hbGxvYy1wZXJ0dXJiaW5nIG9wdGlvbi4KKyMgVGhpcyBpcyB1c2VmdWwgZm9yIGV4 cG9zaW5nIGNvZGUgdGhhdCBkZXBlbmRzIG9uIHRoZSBmYWN0IHRoYXQKKyMgbWFsbG9jLXJlbGF0 ZWQgZnVuY3Rpb25zIG9mdGVuIHJldHVybiBtZW1vcnkgdGhhdCBpcyBtb3N0bHkgemVyb2VkLgor IyBJZiB5b3UgaGF2ZSB0aGUgdGltZSBhbmQgY3ljbGVzLCB1c2UgdmFsZ3JpbmQgdG8gZG8gYW4g ZXZlbiBiZXR0ZXIgam9iLgorOiAke01BTExPQ19QRVJUVVJCXz04N30KK2V4cG9ydCBNQUxMT0Nf UEVSVFVSQl8KKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoZSBpbnRlcnByZXRlciBm b3IgQm91cm5lLXNoZWxsIHNjcmlwdHMuCisjIE5vIHNwZWNpYWwgc3RhbmRhcmRzIGNvbXBhdGli aWxpdHkgcmVxdWlyZW1lbnRzLgorIyBTb21lIGVudmlyb25tZW50cywgc3VjaCBhcyBBbmRyb2lk LCBkb24ndCBoYXZlIC9iaW4vc2guCitpZiB0ZXN0IC1mIC9iaW4vc2gkRVhFRVhUOyB0aGVuCisg IEJPVVJORV9TSEVMTD0vYmluL3NoCitlbHNlCisgIEJPVVJORV9TSEVMTD1zaAorZmkKKworIyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorIyBDb252ZW5pZW5jZSBmdW5jdGlvbnMgZm9yIHRoZSB0ZXN0 cworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybiB2YWx1ZSBjaGVja2luZworCisj IFRoaXMgaXMgdXNlZCB0byBzaW1wbGlmeSBjaGVja2luZyBvZiB0aGUgcmV0dXJuIHZhbHVlCisj IHdoaWNoIGlzIHVzZWZ1bCB3aGVuIGVuc3VyaW5nIGEgY29tbWFuZCBmYWlscyBhcyBkZXNpcmVk LgorIyBJLmUuLCBqdXN0IGRvaW5nIGBjb21tYW5kIC4uLiAmJmZhaWw9MWAgd2lsbCBub3QgY2F0 Y2gKKyMgYSBzZWdmYXVsdCBpbiBjb21tYW5kIGZvciBleGFtcGxlLiAgV2l0aCB0aGlzIGhlbHBl ciB5b3UKKyMgaW5zdGVhZCBjaGVjayBhbiBleHBsaWNpdCBleGl0IGNvZGUgbGlrZQorIyAgIHJl dHVybnNfIDEgY29tbWFuZCAuLi4gfHwgZmFpbD0xCityZXR1cm5zXyAoKSB7CisgICMgRGlzYWJs ZSB0cmFjaW5nIHNvIGl0IGRvZXNuJ3QgaW50ZXJmZXJlIHdpdGggc3RkZXJyIG9mIHRoZSB3cmFw cGVkIGNvbW1hbmQKKyAgeyBsb2NhbCBpc190cmFjaW5nPWB7IDo7IH0gMj4mMWA7IH0gMj4vZGV2 L251bGwKKyAgeyBzZXQgK3g7IH0gMj4vZGV2L251bGwKKworICBsb2NhbCBleHBfZXhpdD0iJDEi CisgIHNoaWZ0CisgICIkQCIKKyAgdGVzdCAkPyAtZXEgJGV4cF9leGl0ICYmIHJldF89MCB8fCBy ZXRfPTEKKworICAjIFJlc3RvcmUgdHJhY2luZyBpZiBpdCB3YXMgZW5hYmxlZC4KKyAgaWYgdGVz dCAtbiAiJGlzX3RyYWNpbmciOyB0aGVuCisgICAgc2V0IC14CisgIGZpCisgIHsgcmV0dXJuICRy ZXRfOyB9IDI+L2Rldi9udWxsCit9CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGV4dCBm aWxlIGNvbXBhcmlzb24KKworIyBFbWl0IGEgaGVhZGVyIHNpbWlsYXIgdG8gdGhhdCBmcm9tIGRp ZmYgLXU7ICBQcmludCB0aGUgc2ltdWxhdGVkICJkaWZmIgorIyBjb21tYW5kIHNvIHRoYXQgdGhl IG9yZGVyIG9mIGFyZ3VtZW50cyBpcyBjbGVhci4gIERvbid0IGJvdGhlciB3aXRoIEBAIGxpbmVz LgorZW1pdF9kaWZmX3VfaGVhZGVyXyAoKQoreworICBwcmludGYgJyVzXG4nICJkaWZmIC11ICQq IiBcCisgICAgIi0tLSAkMQkxOTcwLTAxLTAxIiBcCisgICAgIisrKyAkMgkxOTcwLTAxLTAxIgor fQorCisjIEFycmFuZ2Ugbm90IHRvIGxldCBkaWZmIG9yIGNtcCBvcGVyYXRlIG9uIC9kZXYvbnVs bCwKKyMgc2luY2Ugb24gc29tZSBzeXN0ZW1zIChhdCBsZWFzdCBPU0YvMSA1LjEpLCB0aGF0IGRv ZXNuJ3Qgd29yay4KKyMgV2hlbiB0aGVyZSBhcmUgbm90IHR3byBhcmd1bWVudHMsIG9yIG5vIGFy Z3VtZW50IGlzIC9kZXYvbnVsbCwgcmV0dXJuIDIuCisjIFdoZW4gb25lIGFyZ3VtZW50IGlzIC9k ZXYvbnVsbCBhbmQgdGhlIG90aGVyIGlzIG5vdCBlbXB0eSwKKyMgY2F0IHRoZSBub25lbXB0eSBm aWxlIHRvIHN0ZGVyciBhbmQgcmV0dXJuIDEuCisjIE90aGVyd2lzZSwgcmV0dXJuIDAuCitjb21w YXJlX2Rldl9udWxsXyAoKQoreworICB0ZXN0ICQjID0gMiB8fCByZXR1cm4gMgorCisgIGlmIHRl c3QgIngkMSIgPSB4L2Rldi9udWxsOyB0aGVuCisgICAgdGVzdCAtcyAiJDIiIHx8IHJldHVybiAw CisgICAgZW1pdF9kaWZmX3VfaGVhZGVyXyAiJEAiOyBzZWQgJ3MvXi8rLycgIiQyIgorICAgIHJl dHVybiAxCisgIGZpCisKKyAgaWYgdGVzdCAieCQyIiA9IHgvZGV2L251bGw7IHRoZW4KKyAgICB0 ZXN0IC1zICIkMSIgfHwgcmV0dXJuIDAKKyAgICBlbWl0X2RpZmZfdV9oZWFkZXJfICIkQCI7IHNl ZCAncy9eLy0vJyAiJDEiCisgICAgcmV0dXJuIDEKKyAgZmkKKworICByZXR1cm4gMgorfQorCitm b3IgZGlmZl9vcHRfIGluIC11IC1VMyAtYyAnJyBubzsgZG8KKyAgdGVzdCAiJGRpZmZfb3B0XyIg IT0gbm8gJiYKKyAgICBkaWZmX291dF89YGV4ZWMgMj4vZGV2L251bGwKKyAgICAgIExDX0FMTD1D IGRpZmYgJGRpZmZfb3B0XyAiJDAiICIkMCIgPCAvZGV2L251bGxgICYmCisgICAgYnJlYWsKK2Rv bmUKK2lmIHRlc3QgIiRkaWZmX29wdF8iICE9IG5vOyB0aGVuCisgIGlmIHRlc3QgLXogIiRkaWZm X291dF8iOyB0aGVuCisgICAgIyBkaWZmIG9uIG1zeXMyIGRvZXMgbm90IHN1cHBvcnQgdGhlICct JyBhcmd1bWVudCBmb3IgZGVub3Rpbmcgc3RkaW4uCisgICAgY2FzZSBgKHVuYW1lIC1vKSAyPi9k ZXYvbnVsbGAgaW4KKyAgICAgIE1zeXMpCisgICAgICAgIGNvbXBhcmVfICgpCisgICAgICAgIHsK KyAgICAgICAgICBpZiB0ZXN0ICIgJDEiID0gIiAtIjsgdGhlbgorICAgICAgICAgICAgY2F0ID4g JyhzdGRpbiknCisgICAgICAgICAgICBMQ19BTEw9QyBkaWZmICRkaWZmX29wdF8gJyhzdGRpbikn ICIkMiIKKyAgICAgICAgICBlbGlmIHRlc3QgIiAkMiIgPSAiIC0iOyB0aGVuCisgICAgICAgICAg ICBjYXQgPiAnKHN0ZGluKScKKyAgICAgICAgICAgIExDX0FMTD1DIGRpZmYgJGRpZmZfb3B0XyAi JDEiICcoc3RkaW4pJworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIExDX0FMTD1DIGRpZmYg JGRpZmZfb3B0XyAiJEAiCisgICAgICAgICAgZmkKKyAgICAgICAgfQorICAgICAgICA7OworICAg ICAgKikKKyAgICAgICAgY29tcGFyZV8gKCkKKyAgICAgICAgeworICAgICAgICAgIExDX0FMTD1D IGRpZmYgJGRpZmZfb3B0XyAiJEAiCisgICAgICAgIH0KKyAgICBlc2FjCisgIGVsc2UKKyAgICBj b21wYXJlXyAoKQorICAgIHsKKyAgICAgICMgSWYgbm8gZGlmZmVyZW5jZXMgd2VyZSBmb3VuZCwg QUlYIGFuZCBIUC1VWCAnZGlmZicgcHJvZHVjZSBvdXRwdXQKKyAgICAgICMgbGlrZSAiTm8gZGlm ZmVyZW5jZXMgZW5jb3VudGVyZWQiLiAgSGlkZSB0aGlzIG91dHB1dC4KKyAgICAgIExDX0FMTD1D IGRpZmYgJGRpZmZfb3B0XyAiJEAiID4gZGlmZi5vdXQKKyAgICAgIGRpZmZfc3RhdHVzXz0kPwor ICAgICAgdGVzdCAkZGlmZl9zdGF0dXNfIC1lcSAwIHx8IGNhdCBkaWZmLm91dCB8fCBkaWZmX3N0 YXR1c189MgorICAgICAgcm0gLWYgZGlmZi5vdXQgfHwgZGlmZl9zdGF0dXNfPTIKKyAgICAgIHJl dHVybiAkZGlmZl9zdGF0dXNfCisgICAgfQorICBmaQorZWxpZiBjbXAgLXMgL2Rldi9udWxsIC9k ZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorICBjb21wYXJlXyAoKSB7IGNtcCAtcyAiJEAiOyB9 CitlbHNlCisgIGNvbXBhcmVfICgpIHsgY21wICIkQCI7IH0KK2ZpCisKKyMgVXNhZ2U6IGNvbXBh cmUgRVhQRUNURUQgQUNUVUFMCisjCisjIEdpdmVuIGNvbXBhcmVfZGV2X251bGxfJ3MgcHJlcHJv Y2Vzc2luZywgZGVmZXIgdG8gY29tcGFyZV8gaWYgMiBvciBtb3JlLgorIyBPdGhlcndpc2UsIHBy b3BhZ2F0ZSAkPyB0byBjYWxsZXI6IGFueSBkaWZmcyBoYXZlIGFscmVhZHkgYmVlbiBwcmludGVk LgorY29tcGFyZSAoKQoreworICAjIFRoaXMgbG9va3MgbGlrZSBpdCBjYW4gYmUgZmFjdG9yZWQg dG8gdXNlIGEgc2ltcGxlICJjYXNlICQ/IgorICAjIGFmdGVyIHVuY2hlY2tlZCBjb21wYXJlX2Rl dl9udWxsXyBpbnZvY2F0aW9uLCBidXQgdGhhdCB3b3VsZAorICAjIGZhaWwgaW4gYSAic2V0IC1l IiBlbnZpcm9ubWVudC4KKyAgaWYgY29tcGFyZV9kZXZfbnVsbF8gIiRAIjsgdGhlbgorICAgIHJl dHVybiAwCisgIGVsc2UKKyAgICBjYXNlICQ/IGluCisgICAgICAxKSByZXR1cm4gMTs7CisgICAg ICAqKSBjb21wYXJlXyAiJEAiOzsKKyAgICBlc2FjCisgIGZpCit9CisKKyMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKworIyBJZiB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgdGVzdGRpcl9wcmVmaXhf IGZ1bmN0aW9uLAorIyBvciB0byBhZGQgbW9yZSB1dGlsaXR5IGZ1bmN0aW9ucywgdXNlIHRoaXMg ZmlsZS4KK3Rlc3QgLWYgIiRzcmNkaXIvaW5pdC5jZmciIFwKKyAgJiYgLiAiJHNyY2Rpci9pbml0 LmNmZyIKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBTZXQgdXAgdGhlIGVudmlyb25tZW50 IGZvciB0aGUgdGVzdCB0byBydW4gaW4uCisKK3NldHVwXyAiJEAiCisjIFRoaXMgdHJhcCBpcyBo ZXJlLCByYXRoZXIgdGhhbiBpbiB0aGUgc2V0dXBfIGZ1bmN0aW9uLCBiZWNhdXNlIHNvbWUKKyMg c2hlbGxzIHJ1biB0aGUgZXhpdCB0cmFwIGF0IHNoZWxsIGZ1bmN0aW9uIGV4aXQsIHJhdGhlciB0 aGFuIHNjcmlwdCBleGl0LgordHJhcCByZW1vdmVfdG1wXyBFWElUCmRpZmYgLS1naXQgYS9saWIv dGVzdC9wYXJzZS1zdHJpbmctbGl0ZXJhbC5jIGIvbGliL3Rlc3QvcGFyc2Utc3RyaW5nLWxpdGVy YWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDYwNGEyOGRmMWUK LS0tIC9kZXYvbnVsbAorKysgYi9saWIvdGVzdC9wYXJzZS1zdHJpbmctbGl0ZXJhbC5jCkBAIC0w LDAgKzEsMTE0IEBACisvKiBUZXN0IGRyaXZlciBmb3IgbGlicmFyeSBmdW5jdGlvbiBwYXJzZV9z dHJpbmdfbGl0ZXJhbAorCitDb3B5cmlnaHQgKEMpIDIwMTgtMjAyNSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEVtYWNzLgorCitHTlUg RW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAoreW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorCitHTlUgRW1hY3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHTlUgRW1hY3MuICBJZiBu b3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisvKiBUaGUg YXJndW1lbnQgZ2l2ZW4gdG8gdGhpcyBwcm9ncmFtIGlzIHRoZSBpbml0aWFsIHZlcnNpb24gb2Yg dGhlCisgdGVtYWNzIGV4ZWN1dGFibGUgZmlsZSB1c2VkIHdoZW4gYnVpbGRpbmcgR05VIEVtYWNz LiAgVGhpcyBwcm9ncmFtIGNvbXB1dGVzCisgYSBkaWdlc3QgZmluZ2VycHJpbnQgZm9yIHRoZSBl eGVjdXRhYmxlLCBhbmQgbW9kaWZpZXMgdGhlIGJpbmFyeSBpbgorIHBsYWNlLCByZXBsYWNpbmcg YWxsIGluc3RhbmNlcyBvZiB0aGUgZXhpc3RpbmcgZmluZ2VycHJpbnQgKG5vcm1hbGx5CisgdGhl IGRlZmF1bHQgZmluZ2VycHJpbnQgZnJvbSBsaWJnbnUncyBsaWIvZmluZ2VycHJpbnQuYykgd2l0 aCB0aGUKKyBuZXcgdmFsdWUuICBXaXRoIG9wdGlvbiAtciwgaXQganVzdCBwcmludHMgdGhlIGRp Z2VzdC4gICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxsaW1pdHMuaD4K KyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRp by5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVk ZSA8c3lzc3RkaW8uaD4KKworI2luY2x1ZGUgPGZpbmdlcnByaW50Lmg+CisjaW5jbHVkZSA8Z2V0 b3B0Lmg+CisKK2VudW0geworICBtYXhfc2l6ZSA9IDY0LAorICBidWZmZXJfc2l6ZSA9IG1heF9z aXplICsgMTYKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBidWZmZXJbYnVmZmVyX3NpemVdID0g eyAwIH07CisKKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGNoYXIg YzsKKyAgYm9vbCB6ZXJvZWQgPSB0cnVlOworICBib29sIHNlbnRpbmVsID0gZmFsc2U7CisgIGJv b2wgbnVsbHRlcm0gPSBmYWxzZTsKKyAgdW5zaWduZWQgaW50IHN6ID0gKHVuc2lnbmVkIGludCkg bWF4X3NpemU7CisgIHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBOVUxMOworICBjaGFyICplbmQ7Cisg IAorICB3aGlsZSAoMCA8PSAoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIm5iZ3M6IikpKQorICAg IHsKKyAgICAgIHN3aXRjaCAoYykKKyAgICAgICAgeworCWNhc2UgJ2InOiAgLyogYmVlZiAqLwor CSAgemVyb2VkID0gZmFsc2U7CisJICBicmVhazsKKwljYXNlICdnJzogIC8qIGd1YXJkICovCisJ ICBzZW50aW5lbCA9IHRydWU7CisJICBicmVhazsKKwljYXNlICduJzogIC8qIG51bGwgdGVybWlu YXRlICovCisJICBudWxsdGVybSA9IHRydWU7CisJICBicmVhazsKKyAgICAgICAgY2FzZSAncyc6 ICAvKiBzaXplICovCisJICBzeiA9IHN0cnRvdWwgKG9wdGFyZywgJmVuZCwgMTApOworCSAgaWYg KCBlbmQgPT0gb3B0YXJnIHx8ICplbmQgKQorCSAgICB7CisJICAgICAgZnByaW50ZiAoc3RkZXJy LAorCQkgICAgICAgInNpemUgYXJndW1lbnQgbXVzdCBiZSBhbiAiCisJCSAgICAgICAidW5zaWdu ZWQgaW50ZWdlcixnaXZlbiAnJXMnXG4iLAorCQkgICAgICAgb3B0YXJnKTsKKwkgICAgICByZXR1 cm4gRVhJVF9GQUlMVVJFOworCSAgICB9CisJICBpZiAoIHN6ID4gbWF4X3NpemUgKQorCSAgICB7 CisJICAgICAgZnByaW50ZiAoc3RkZXJyLCAic2l6ZSBhcmd1bWVudCBtdXN0IGxlc3MgdGhhbiAl ZCwgZ2l2ZW4gJXVcbiIsCisJCSAgICAgICBtYXhfc2l6ZSxzeik7CisJICAgICAgcmV0dXJuIEVY SVRfRkFJTFVSRTsKKwkgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor ICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICB9CisgIGlmIChv cHRpbmQgPj0gYXJnYykKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJObyBzdHJpbmcg bGl0ZXJhbCBzcGVjaWZpZWQhXG4iKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICAg fQorICBkYXRhID0gKHVuc2lnbmVkIGNoYXIgKikgYXJndltvcHRpbmRdOworCisgIGlmICghemVy b2VkIHx8IHNlbnRpbmVsKQorICAgIHsKKyAgICAgIC8qIEZpbGwgdGhlIGJ1ZmZlciB3aXRoIGEg ZGlzdGluY3RpdmUgcGF0dGVybiAqLworICAgICAgdWludDMyX3QgKnRtcCA9ICh1aW50MzJfdCAq KSBidWZmZXI7CisgICAgICB1aW50NjRfdCBOID0gYnVmZmVyX3NpemUgLyA0OworICAgICAgZm9y IChpbnQgaSA9IHNlbnRpbmVsID8gKHN6IC8gNCkgOiAwOyBpIDwgTjsgaSsrKQorCXRtcFtpXSA9 IDB4ZGVhZGJlZWY7CisgICAgfQorICBwdHJkaWZmX3QgcG9zID0gMDsKKyAgUFNMRVJSIGNvZGUg PSBwYXJzZV9zdHJpbmdfbGl0ZXJhbCAoZGF0YSwgYnVmZmVyLCAoaW50KSBzeiwgbnVsbHRlcm0s ICZwb3MpOworICBmd3JpdGUgKGJ1ZmZlciwgMSwgc3osIHN0ZG91dCk7CisgIGZ3cml0ZSAoYnVm ZmVyLCAxLCBidWZmZXJfc2l6ZSwgc3RkZXJyKTsgIAorICBleGl0IChjb2RlKTsKK30KLS0gCjIu NDkuMAoK --0000000000002492990639612157 Content-Type: text/x-patch; charset="US-ASCII"; name="0007-Add-support-for-stdin-stream-noneditor-mode.patch" Content-Disposition: attachment; filename="0007-Add-support-for-stdin-stream-noneditor-mode.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mctst9cb6 RnJvbSAxOTE0MDNhNjI3NTkwY2Y0YjllZjRlZTI0MWIyYTNhOTE3MTVmNGZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBPbm5pZSBMeW5uIFdpbmViYXJnZXIgPG93aW5lYmFyQGdtYWls LmNvbT4KRGF0ZTogTW9uLCA3IEp1bCAyMDI1IDA2OjUzOjA0IC0wNDAwClN1YmplY3Q6IFtQQVRD SCAwNy8xMl0gQWRkIHN1cHBvcnQgZm9yIHN0ZGluIHN0cmVhbSAobm9uZWRpdG9yIG1vZGUpCgot LS0KIHNyYy9scmVhZC5jIHwgNzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKystLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA1OSBpbnNlcnRpb25zKCspLCAxMiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvbHJlYWQuYyBiL3NyYy9scmVhZC5jCmluZGV4 IDRhNGI4MmYwZjQxLi41NDUzMjc5YTRhZiAxMDA2NDQKLS0tIGEvc3JjL2xyZWFkLmMKKysrIGIv c3JjL2xyZWFkLmMKQEAgLTM3MCw2ICszNzAsOCBAQCAjZGVmaW5lIElOSVRfUkVBRF9TVEFDSyB7 TlVMTCwgMCwgMH0KICAgYm9vbCByZWFkX2VvZjsKICAgYm9vbCBtdWx0aWJ5dGU7CiAgIExpc3Bf T2JqZWN0IGNvZGluZzsKKyAgTGlzcF9PYmplY3QgZnVsbF9uYW1lOworICBMaXNwX09iamVjdCBu YW1lOwogfSBzdGRpbl9pbmZpbGU7CiAKIApAQCAtMTQ4NCw2ICsxNDg2LDM5IEBAIERFRlVOICgi cmVhZGVyLWlucHV0LXN0cmVhbSIsCiAgIHJldHVybiAobWFrZV9maXhudW0gKGMpKTsKIH0KIAor REVGVU4gKCJleHRlcm5hbC1zdGFuZGFyZC1pbnB1dCIsCisgICAgICAgRmV4dGVybmFsX3N0YW5k YXJkX2lucHV0LCBTZXh0ZXJuYWxfc3RhbmRhcmRfaW5wdXQsIDAsIDEsIDAsCisgICAgICAgZG9j OiAvKiBSZWFkIENIQVJBQ1RFUiBmcm9tIHN0ZGluLgorRm9yIHVzZSB3aXRoIGByZWFkJyBpbiBu b25lZGl0b3IgbW9kZSAqLykKKyAgKExpc3BfT2JqZWN0IGNoYXJhY3RlcikKK3sKKyAgaW50IGM7 CisgIGlmIChOSUxQIChjaGFyYWN0ZXIpKQorICAgIGMgPSAtMTsKKyAgZWxzZSBpZiAoQ0hBUkFD VEVSUCAoY2hhcmFjdGVyKSkKKyAgICBjID0gWEZJWE5VTSAoY2hhcmFjdGVyKTsKKyAgZWxzZQor ICAgIHhzaWduYWwxIChRZXJyb3IsCisJICAgICAgQ0FMTE4gKEZmb3JtYXQsCisJCSAgICAgYnVp bGRfc3RyaW5nICgiZXh0ZXJuYWwtc3RhbmRhcmQtaW5wdXQ6ICIKKwkJCQkgICAiYXJndW1lbnQg bm90IGEgY2hhcmFjdGVyOiAnJXMnIiksCisJCSAgICAgY2hhcmFjdGVyKSk7CisKKyAgc3BlY3Bk bF9yZWYgY291bnQgPSBTUEVDUERMX0lOREVYICgpOworICBscmVhZF9mcmFtZSB0aGlzX2ZyYW1l ID0gSU5JVF9MUkVBRF9GUkFNRSAoKTsKKyAgdGhpc19mcmFtZS5sb29wX2R5bmFtaWNfZnJhbWUg PSBTUEVDUERMX0lOREVYICgpOworICBpbml0X2xyZWFkX2lucHV0X2Zyb21fc3RyZWFtICgmdGhp c19mcmFtZSwKKwkJCQlRc3RkaW4sIFFuaWwsIFFuaWwsCisJCQkJZmFsc2UsIGZhbHNlLCBOVUxM LCBRbmlsKTsKKyAgYWN0aXZhdGVfbHJlYWRfZnJhbWUgKCZ0aGlzX2ZyYW1lLCBMUkVBRF9GUkFN RV9TSU5HTEUpOworICBscmVhZF9pbml0X2R5bmFtaWNfZnJhbWUgKCZ0aGlzX2ZyYW1lKTsKKyAg aWYgKGMgPj0gMCkKKyAgICBVTlJFQUQgKCZ0aGlzX2ZyYW1lLCBjKTsKKyAgZWxzZQorICAgIGMg PSByZWFkYnl0ZV9mcm9tX2ZpbGUgKCZ0aGlzX2ZyYW1lKTsKKyAgcmV0dXJuIHVuYmluZF90byAo Y291bnQsIG1ha2VfZml4bnVtIChjKSk7Cit9CisKIHN0YXRpYyB2b2lkCiBza2lwX2R5bl9ieXRl cyAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBwdHJkaWZmX3QgbikKIHsKQEAgLTQxOTEs MTcgKzQyMjYsNiBAQCBpbml0X2xyZWFkX2lucHV0X2Zyb21fc3RyZWFtIChscmVhZF9mcmFtZSAq ZnJhbWUsCiAgIGZyYW1lLT5sb2NhdGVfc3ltcyA9IGxvY2F0ZV9zeW1zOwogICBpZiAoQlVGRkVS UCAoc3RyZWFtKSkKICAgICB7Ci0jaWYgMAotICAgICAgaWYgKGN1cnJlbnRfZnJhbWUpCi0Jewot CSAgbHJlYWRfZnJhbWUgKnNvdXJjZSA9IGN1cnJlbnRfZnJhbWU7Ci0JICBpZiAoc291cmNlLT5p bnR5cGUgPT0gTFJFQURfSU5QVVRfSU5ESVJFQ1QpCi0JICAgIHNvdXJjZSA9IHNvdXJjZS0+aW5w dXQuZnJhbWUuc291cmNlOwotCSAgaWYgKHNvdXJjZS0+aW50eXBlID09IExSRUFEX0lOUFVUX0JV RkZFUgotCSAgICAgICYmIEVRIChzb3VyY2UtPmlucHV0LmIuYnVmZmVyLCBzdHJlYW0pKQotCSAg ICBnb3RvIGluZGlyZWN0X2ZyYW1lOwotCX0KLSNlbmRpZgogICAgICAgZnJhbWUtPmludHlwZSA9 IExSRUFEX0lOUFVUX0JVRkZFUjsKICAgICAgIGluaXRfaW5idWZmZXIgKGZyYW1lLHN0cmVhbSk7 CiAgICAgfQpAQCAtNDIyNyw5ICs0MjUxLDIzIEBAIGluaXRfbHJlYWRfaW5wdXRfZnJvbV9zdHJl YW0gKGxyZWFkX2ZyYW1lICpmcmFtZSwKIAkgIGZyYW1lLT5tdWx0aWJ5dGUgPSBMUkVBRF9NVUxU SUJZVEVfVFJVRTsKIAl9CiAgICAgfQorICBlbHNlIGlmIChFUSAoc3RyZWFtLCBRZXh0ZXJuYWxf c3RhbmRhcmRfaW5wdXQpIHx8IEVRIChzdHJlYW0sIFFzdGRpbikpCisgICAgeworICAgICAgZnJh bWUtPmludHlwZSA9IExSRUFEX0lOUFVUX0ZJTEU7CisgICAgICBpbml0X2luZmlsZSAoZnJhbWUs IHN0ZGluX2luZmlsZS5zLnN0cmVhbSwKKwkJICAgc3RkaW5faW5maWxlLnMuc2Vla2FibGUsIHN0 ZGluX2luZmlsZS5zLm11bGUsCisJCSAgIHN0ZGluX2luZmlsZS5zLmNvZGluZyk7CisgICAgICBm cmFtZS0+Y2hhcl9vZmZzZXQgPSBzdGRpbl9pbmZpbGUuY2hhcl9vZmZzZXQ7CisgICAgICBmcmFt ZS0+Ynl0ZV9vZmZzZXQgPSBzdGRpbl9pbmZpbGUuYnl0ZV9vZmZzZXQ7CisgICAgICBmcmFtZS0+ dW5yZWFkX2NoYXIgPSBzdGRpbl9pbmZpbGUudW5yZWFkX2NoYXI7CisgICAgICBmcmFtZS0+dW5y ZWFkX2J5dGVzID0gc3RkaW5faW5maWxlLnVucmVhZF9ieXRlczsKKyAgICAgIGZyYW1lLT5yZWFk X2VvZiA9IHN0ZGluX2luZmlsZS5yZWFkX2VvZjsKKyAgICAgIGZyYW1lLT5tdWx0aWJ5dGUgPSBz dGRpbl9pbmZpbGUubXVsdGlieXRlOworICAgICAgZnJhbWUtPmZ1bGxfbmFtZSA9IHN0ZGluX2lu ZmlsZS5mdWxsX25hbWU7CisgICAgICBmcmFtZS0+bmFtZSA9IHN0ZGluX2luZmlsZS5uYW1lOwor ICAgIH0KICAgZWxzZSBpZiAoRVEgKHN0cmVhbSwgUXJlYWRlcl9pbnB1dF9zdHJlYW0pKQogICAg IHsKLSAgICBpbmRpcmVjdF9mcmFtZToKICAgICAgIGZyYW1lLT5pbnR5cGUgPSBMUkVBRF9JTlBV VF9JTkRJUkVDVDsKICAgICAgIGxyZWFkX2ZyYW1lICpzb3VyY2UgPSBjdXJyZW50X2ZyYW1lOwog ICAgICAgd2hpbGUgKHNvdXJjZSAmJiBzb3VyY2UtPmludHlwZSA9PSBMUkVBRF9JTlBVVF9JTkRJ UkVDVCkKQEAgLTcyOTEsNiArNzMyOSw5IEBAIGluaXRfbHJlYWQgKHZvaWQpCiAgIHN0ZGluX2lu ZmlsZS51bnJlYWRfY2hhciA9IC0xOwogICBzdGRpbl9pbmZpbGUudW5yZWFkX2J5dGVzID0gMDsK ICAgc3RkaW5faW5maWxlLnJlYWRfZW9mID0gZmFsc2U7CisgIHN0ZGluX2luZmlsZS5uYW1lID0g RnN5bWJvbF9uYW1lIChRc3RkaW4pOworICBzdGRpbl9pbmZpbGUuZnVsbF9uYW1lID0gc3RkaW5f aW5maWxlLm5hbWU7CisKIH0KIAogLyogUHJpbnQgYSB3YXJuaW5nIHRoYXQgZGlyZWN0b3J5IGlu dGVuZGVkIGZvciB1c2UgVVNFIGFuZCB3aXRoIG5hbWUKQEAgLTc4MTgsNiArNzg1OSwxMiBAQCBz eW1zX29mX2xyZWFkICh2b2lkKQogICBERUZTWU0gKFFnZXRfZmlsZV9jaGFyLCAiZ2V0LWZpbGUt Y2hhciIpOwogICBERUZTWU0gKFFyZWFkZXJfaW5wdXRfc3RyZWFtLCAicmVhZGVyLWlucHV0LXN0 cmVhbSIpOwogICBkZWZzdWJyICgmU3JlYWRlcl9pbnB1dF9zdHJlYW0pOworICBERUZTWU0gKFFz dGRpbiwgInN0ZGluIik7CisgIERFRlNZTSAoUWV4dGVybmFsX3N0YW5kYXJkX2lucHV0LCAiZXh0 ZXJuYWwtc3RhbmRhcmQtaW5wdXQiKTsKKyAgZGVmc3ViciAoJlNleHRlcm5hbF9zdGFuZGFyZF9p bnB1dCk7CisgIHN0YXRpY3BybyAoJnN0ZGluX2luZmlsZS5jb2RpbmcpOworICBzdGF0aWNwcm8g KCZzdGRpbl9pbmZpbGUubmFtZSk7CisgIHN0YXRpY3BybyAoJnN0ZGluX2luZmlsZS5mdWxsX25h bWUpOwogICAvKiBVc2VkIGluc3RlYWQgb2YgUWdldF9maWxlX2NoYXIgd2hpbGUgbG9hZGluZyAq LmVsYyBmaWxlcyBjb21waWxlZAogICAgICBieSBFbWFjcyAyMSBvciBvbGRlci4gICovCiAgIERF RlNZTSAoUWdldF9lbWFjc19tdWxlX2ZpbGVfY2hhciwgImdldC1lbWFjcy1tdWxlLWZpbGUtY2hh ciIpOwotLSAKMi40OS4wCgo= --0000000000002492990639612157 Content-Type: text/x-patch; charset="US-ASCII"; name="0005-Support-for-noneditor-mode-and-hard-coded-executable.patch" Content-Disposition: attachment; filename="0005-Support-for-noneditor-mode-and-hard-coded-executable.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mctst9c44 RnJvbSBlMTQ0MmIwN2Q5OTk3MTkyM2FmZDE3NmJkZTdkYWQzZTlkYjFmMDc4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBPbm5pZSBMeW5uIFdpbmViYXJnZXIgPG93aW5lYmFyQGdtYWls LmNvbT4KRGF0ZTogU3VuLCA2IEp1bCAyMDI1IDE2OjU5OjMzIC0wNDAwClN1YmplY3Q6IFtQQVRD SCAwNS8xMl0gU3VwcG9ydCBmb3Igbm9uZWRpdG9yIG1vZGUgYW5kIGhhcmQtY29kZWQgZXhlY3V0 YWJsZQogb3B0aW9ucy4KCi0tLQogc3JjL2VtYWNzLmMgfCAxMTIzICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDEwNzYg aW5zZXJ0aW9ucygrKSwgNDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2VtYWNzLmMg Yi9zcmMvZW1hY3MuYwppbmRleCBjZjhmNGJkNjNmNy4uN2MzOGVjMGJiYzUgMTAwNjQ0Ci0tLSBh L3NyYy9lbWFjcy5jCisrKyBiL3NyYy9lbWFjcy5jCkBAIC0xNjAsNiArMTYwLDE1IEBAICNkZWZp bmUgTUFJTl9QUk9HUkFNCiBzdGF0aWMgY29uc3QgY2hhciBlbWFjc19jb3B5cmlnaHRbXSA9IENP UFlSSUdIVDsKIHN0YXRpYyBjb25zdCBjaGFyIGVtYWNzX2J1Z3JlcG9ydFtdID0gUEFDS0FHRV9C VUdSRVBPUlQ7CiAKKy8qIHRoZXNlIGNhbiBiZSBhc3NpZ25lZCB0byB0ZW1hY3MgKi8KK3N0YXRp YyBzdHJ1Y3QgdGVtYWNzX2V2YWxfb3B0cworeworICBjaGFyIG5vbmVbMTZdOworICBjaGFyIGFy Z3NbMTZdOworICBjaGFyIHN0ZGluWzE2XTsKKyAgY2hhciBib3RoWzE2XTsKK30gdGVtYWNzX2V2 YWxfb3B0cyA9IHsgImV2YWwtbm9uZSIsICJldmFsLWFyZ3MiLCAiZXZhbC1zdGRpbiIsICJldmFs IiB9OworCiAvKiBQdXQgdmVyc2lvbiBpbmZvIGludG8gdGhlIGV4ZWN1dGFibGUgaW4gdGhlIGZv cm0gdGhhdCAnaWRlbnQnIHVzZXMuICAqLwogZXh0ZXJuIGNoYXIgY29uc3QgUkNTX0lkW107CiBj aGFyIGNvbnN0IEVYVEVSTkFMTFlfVklTSUJMRSBSQ1NfSWRbXQpAQCAtMTgxLDYgKzE5MCwxMiBA QCAjZGVmaW5lIE1BSU5fUFJPR1JBTQogc3RydWN0IGdmbGFncyBnZmxhZ3M7CiBib29sIGluaXRp YWxpemVkOwogCitlbnVtIG5vbmVkaXRvcl9ldmFsX3NvdXJjZSBub25lZGl0b3JfZXZhbF9zb3Vy Y2U7CisKKwordW5pb24gZXhlX2NvbmZpZ19zdG9yZSAqZXhlX2NvbmZpZyA9CisgICh1bmlvbiBl eGVfY29uZmlnX3N0b3JlICopIGZpbmdlcnByaW50X3N0b3JhZ2UuZGF0YTsKKwogLyogSWYgdHJ1 ZSwgRW1hY3Mgc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBhIHdpbmRvdy1zcGVjaWZpYyBjb2Rl LAogICAgYnV0IGluc3RlYWQgc2hvdWxkIHVzZSB0aGUgdmlydHVhbCB0ZXJtaW5hbCB1bmRlciB3 aGljaCBpdCB3YXMgc3RhcnRlZC4gICovCiBib29sIGluaGliaXRfd2luZG93X3N5c3RlbTsKQEAg LTIyMCw5ICsyMzUsMTYgQEAgI2RlZmluZSBNQUlOX1BST0dSQU0KIC8qIFRydWUgbWVhbnMgcmVt b3ZlIHNpdGUtbGlzcCBkaXJlY3RvcmllcyBmcm9tIGxvYWQtcGF0aC4gICovCiBib29sIG5vX3Np dGVfbGlzcDsKIAorLyogVHJ1ZSBtZWFucyBkbyBub3QgbG9hZCAibG9hZHVwLmVsIiAqLworc3Rh dGljIGJvb2wgbm9fbG9hZHVwOworCiAvKiBUcnVlIG1lYW5zIHB1dCBkZXRhaWxzIGxpa2UgdGlt ZSBzdGFtcHMgaW50byBidWlsZHMuICAqLwogYm9vbCBidWlsZF9kZXRhaWxzOwogCisjaWZkZWYg SEFWRV9QRFVNUEVSCitzdGF0aWMgYm9vbCBhdHRlbXB0X2xvYWRfcGR1bXA7CisjZW5kaWYKKwog LyogTmFtZSBmb3IgdGhlIHNlcnZlciBzdGFydGVkIGJ5IHRoZSBkYWVtb24uKi8KIHN0YXRpYyBj aGFyICpkYWVtb25fbmFtZTsKIApAQCAtMjY1LDcgKzI4Nyw5IEBAICNkZWZpbmUgTUFJTl9QUk9H UkFNCiBzdGF0aWMgdm9pZCBjb3B5X2FyZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndik7CiAjZW5k aWYKIHN0YXRpYyB2b2lkIHNvcnRfYXJncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3N0YXRp YyB2b2lkIG1ha2Vfbm9uZWRpdG9yX2FyZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndixpbnQgKm5h cmdzKTsKIHN0YXRpYyB2b2lkIHN5bXNfb2ZfZW1hY3MgKHZvaWQpOworc3RhdGljIHZvaWQgaW5p dF9ub25lZGl0b3JfZXZhbF9mb3JfcGR1bXBlciAodm9pZCk7CiAKIC8qIEM5OSBuZWVkcyBlYWNo IHN0cmluZyB0byBiZSBhdCBtb3N0IDQwOTUgY2hhcmFjdGVycywgYW5kIHRoZSB1c2FnZQogICAg c3RyaW5ncyBiZWxvdyBhcmUgc3BsaXQgdG8gbm90IG92ZXJmbG93IHRoaXMgbGltaXQuICAqLwpA QCAtODgxLDE0ICs5MDUsMTcgQEAgbG9hZF9wZHVtcCAoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBj aGFyICpkdW1wX2ZpbGUpCiAjaWYgZGVmaW5lZCBIQVZFX0FORFJPSUQgJiYgIWRlZmluZWQgQU5E Uk9JRF9TVFVCSUZZCiAgIGludCBza2lwX2FyZ3MgPSAwLCByZXN1bHQ7CiAKLSAgd2hpbGUgKHNr aXBfYXJncyA8IGFyZ2MgLSAxKQorICBpZiAoIU5JTFAoVm5vbmVkaXRvcikpCiAgICAgewotICAg ICAgaWYgKGFyZ21hdGNoIChhcmd2LCBhcmdjLCAiLWR1bXAtZmlsZSIsICItLWR1bXAtZmlsZSIs Ci0JCSAgICA2LCAmZHVtcF9maWxlLCAmc2tpcF9hcmdzKQotCSAgfHwgYXJnbWF0Y2ggKGFyZ3Ys IGFyZ2MsICItLSIsIE5VTEwsIDIsIE5VTEwsCi0JCSAgICAgICAmc2tpcF9hcmdzKSkKLQlicmVh azsKLSAgICAgIHNraXBfYXJncysrOworICAgICAgd2hpbGUgKHNraXBfYXJncyA8IGFyZ2MgLSAx KQorCXsKKwkgIGlmIChhcmdtYXRjaCAoYXJndiwgYXJnYywgIi1kdW1wLWZpbGUiLCAiLS1kdW1w LWZpbGUiLAorCQkJNiwgJmR1bXBfZmlsZSwgJnNraXBfYXJncykKKwkgICAgICB8fCBhcmdtYXRj aCAoYXJndiwgYXJnYywgIi0tIiwgTlVMTCwgMiwgTlVMTCwKKwkJCSAgICZza2lwX2FyZ3MpKQor CSAgICBicmVhazsKKwkgIHNraXBfYXJncysrOworCX0KICAgICB9CiAKICAgaWYgKCFkdW1wX2Zp bGUpCkBAIC05MTksNiArOTQ2LDggQEAgbG9hZF9wZHVtcCAoaW50IGFyZ2MsIGNoYXIgKiphcmd2 LCBjaGFyICpkdW1wX2ZpbGUpCiAjZW5kaWYKICAgICA7CiAgIGNvbnN0IGNoYXIgKmFyZ3YwX2Jh c2UgPQorICAgIChleGVfY29uZmlnICE9IE5VTEwgJiYgKihleGVfY29uZmlnLT5zLmFyZ3YwX2Jh c2UpKSA/CisgICAgZXhlX2NvbmZpZy0+cy5hcmd2MF9iYXNlIDoKICNpZmRlZiBOU19TRUxGX0NP TlRBSU5FRAogICAgICJFbWFjcyIKICNlbHNlCkBAIC05MzAsMTUgKzk1OSwxNyBAQCBsb2FkX3Bk dW1wIChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKmR1bXBfZmlsZSkKICAgY29uc3QgY2hh ciAqcGF0aF9leGVjID0gUEFUSF9FWEVDOwogICBkdW1wX2ZpbGUgPSBOVUxMOwogICBpbnQgc2tp cF9hcmdzID0gMDsKLSAgd2hpbGUgKHNraXBfYXJncyA8IGFyZ2MgLSAxKQorICBpZiAoTklMUChW bm9uZWRpdG9yKSkKICAgICB7Ci0gICAgICBpZiAoYXJnbWF0Y2ggKGFyZ3YsIGFyZ2MsICItZHVt cC1maWxlIiwgIi0tZHVtcC1maWxlIiwgNiwKLQkJICAgICZkdW1wX2ZpbGUsICZza2lwX2FyZ3Mp Ci0JICB8fCBhcmdtYXRjaCAoYXJndiwgYXJnYywgIi0tIiwgTlVMTCwgMiwgTlVMTCwgJnNraXBf YXJncykpCi0JYnJlYWs7Ci0gICAgICBza2lwX2FyZ3MrKzsKKyAgICAgIHdoaWxlIChza2lwX2Fy Z3MgPCBhcmdjIC0gMSkKKwl7CisJICBpZiAoYXJnbWF0Y2ggKGFyZ3YsIGFyZ2MsICItZHVtcC1m aWxlIiwgIi0tZHVtcC1maWxlIiwgNiwKKwkJCSZkdW1wX2ZpbGUsICZza2lwX2FyZ3MpCisJICAg ICAgfHwgYXJnbWF0Y2ggKGFyZ3YsIGFyZ2MsICItLSIsIE5VTEwsIDIsIE5VTEwsICZza2lwX2Fy Z3MpKQorCSAgICBicmVhazsKKwkgIHNraXBfYXJncysrOworCX0KICAgICB9Ci0KICAgLyogV2hl cmUncyBvdXIgZXhlY3V0YWJsZT8gICovCiAgIHB0cmRpZmZfdCBleGVjX2J1ZnNpemUsIGJ1ZnNp emUsIG5lZWRlZDsKICAgZW1hY3NfZXhlY3V0YWJsZSA9IGZpbmRfZW1hY3NfZXhlY3V0YWJsZSAo YXJndlswXSwgJmV4ZWNfYnVmc2l6ZSk7CkBAIC0xMDAzLDkgKzEwMzQsMTIgQEAgbG9hZF9wZHVt cCAoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICpkdW1wX2ZpbGUpCiAgIC8qIExvb2sgZm9y ICJlbWFjcy1GSU5HRVJQUklOVC5wZG1wIiBpbiBQQVRIX0VYRUMuICBXZSBoYXJkY29kZQogICAg ICAiZW1hY3MiIGluICJlbWFjcy1GSU5HRVJQUklOVC5wZG1wIiBzbyB0aGF0IHRoZSBFbWFjcyBi aW5hcnkKICAgICAgc3RpbGwgd29ya3MgaWYgdGhlIHVzZXIgY29waWVzIGFuZCByZW5hbWVzIGl0 LiAgKi8KLSAgaGV4YnVmX3NpemUgPSAyICogc2l6ZW9mIGZpbmdlcnByaW50OworICAvKiAiZW1h Y3MiIG1heSBiZSBvdmVycmlkZGVuIGJ5IHdyaXRpbmcgYW4gYWx0ZXJuYXRlIGJhc2UgbmFtZQor ICAgICBpbnRvIHRoZSBleGVfY29uZmlnIHdoZW4gc2V0dGluZyB0aGUgZmluZ2VycHJpbnQuICAq LworICBoZXhidWZfc2l6ZSA9IDIgKiBzaXplb2YgZmluZ2VycHJpbnRfc3RvcmFnZS5oYXNoOwog ICBoZXhidWYgPSB4bWFsbG9jIChoZXhidWZfc2l6ZSArIDEpOwotICBoZXhidWZfZGlnZXN0ICho ZXhidWYsIChjaGFyICopIGZpbmdlcnByaW50LCBzaXplb2YgZmluZ2VycHJpbnQpOworICBoZXhi dWZfZGlnZXN0IChoZXhidWYsIChjaGFyICopIGZpbmdlcnByaW50X3N0b3JhZ2UuaGFzaCwKKwkJ IHNpemVvZiBmaW5nZXJwcmludF9zdG9yYWdlLmhhc2gpOwogICBoZXhidWZbaGV4YnVmX3NpemVd ID0gJ1wwJzsKICAgbmVlZGVkID0gKHN0cmxlbiAocGF0aF9leGVjKQogCSAgICArIDEKQEAgLTEy NjgsNiArMTMwMiw3IEBAIG1heWJlX2xvYWRfc2VjY29tcCAoaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogfQogCiAjZW5kaWYgIC8qIFNFQ0NPTVBfVVNBQkxFICovCitzdGF0aWMgY2hhciAqdGVtYWNz ID0gTlVMTDsKIAogI2lmICFkZWZpbmVkIEhBVkVfQU5EUk9JRCB8fCBkZWZpbmVkIEFORFJPSURf U1RVQklGWQogaW50CkBAIC0xMjk1LDcgKzEzMzAsNiBAQCBhbmRyb2lkX2VtYWNzX2luaXQgKGlu dCBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqZHVtcF9maWxlKQogICBtYXliZV9sb2FkX3NlY2Nv bXAgKGFyZ2MsIGFyZ3YpOwogI2VuZGlmCiAKLSAgYm9vbCBub19sb2FkdXAgPSBmYWxzZTsKICAg Y2hhciAqanVuayA9IDA7CiAgIGNoYXIgKmRuYW1lX2FyZyA9IDA7CiAjaWZkZWYgREFFTU9OX01V U1RfRVhFQwpAQCAtMTMwOSwyMyArMTM0MywzOSBAQCBhbmRyb2lkX2VtYWNzX2luaXQgKGludCBh cmdjLCBjaGFyICoqYXJndiwgY2hhciAqZHVtcF9maWxlKQogICAvKiBSZWNvcmQgKGFwcHJveGlt YXRlbHkpIHdoZXJlIHRoZSBzdGFjayBiZWdpbnMuICAqLwogICBzdGFja19ib3R0b20gPSAoY2hh ciAqKSAmc3RhY2tfYm90dG9tX3ZhcmlhYmxlOwogCisgIC8qIEluaXRpYWxpemUgbm9uZWRpdG9y IHZlcnkgZWFybHkgKi8KKyAgVm5vbmVkaXRvciA9IFFuaWw7CisKICAgY29uc3QgY2hhciAqZHVt cF9tb2RlID0gTlVMTDsKICAgaW50IHNraXBfYXJncyA9IDA7Ci0gIGNoYXIgKnRlbWFjcyA9IE5V TEw7Ci0gIHdoaWxlIChza2lwX2FyZ3MgPCBhcmdjIC0gMSkKKworICAvKiBIYXJkIGNvZGVkIG5v bmVkaXRvciBtZWFucyBubyBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisgICAgIGFyZSBwcm9jZXNz ZWQgYXMgb3B0aW9ucyAqLworICBpZiAoRVhFX0NPTkZJR1VSRURfTk9ORURJVE9SKGV4ZV9jb25m aWcpKQogICAgIHsKLSAgICAgIGlmIChhcmdtYXRjaCAoYXJndiwgYXJnYywgIi10ZW1hY3MiLCAi LS10ZW1hY3MiLCA4LCAmdGVtYWNzLCAmc2tpcF9hcmdzKQotCSAgfHwgYXJnbWF0Y2ggKGFyZ3Ys IGFyZ2MsICItLSIsIE5VTEwsIDIsIE5VTEwsICZza2lwX2FyZ3MpKQotCWJyZWFrOwotICAgICAg c2tpcF9hcmdzKys7Ci0gICAgfQogI2lmZGVmIEhBVkVfUERVTVBFUgotICBib29sIGF0dGVtcHRf bG9hZF9wZHVtcCA9IGZhbHNlOworICAgICAgcGR1bXBlcl9kb19ub3dfYW5kX2FmdGVyX2xvYWQg KGluaXRfbm9uZWRpdG9yX2V2YWxfZm9yX3BkdW1wZXIpOworI2Vsc2UKKyAgICAgIGluaXRfbm9u ZWRpdG9yX2V2YWxfZm9yX3BkdW1wZXIoKTsKICNlbmRpZgorICAgIH0KKworICAvKiBIYXJkLWNv ZGVkICJiYXJlIiBhbmQgIW5vbmVkaXRvciBtZWFucyBjaGVja2luZyBmb3IgIC0tdGVtYWNzIG9w dGlvbiAqLworICBpZiAoTklMUCAoVm5vbmVkaXRvcikpCisgICAgeworICAgICAgd2hpbGUgKHNr aXBfYXJncyA8IGFyZ2MgLSAxKQorCXsKKwkgIGlmIChhcmdtYXRjaCAoYXJndiwgYXJnYywgIi10 ZW1hY3MiLCAiLS10ZW1hY3MiLCA4LAorCQkJJnRlbWFjcywgJnNraXBfYXJncykKKwkgICAgICB8 fCBhcmdtYXRjaCAoYXJndiwgYXJnYywgIi0tIiwgTlVMTCwgMiwgTlVMTCwgJnNraXBfYXJncykp CisJICAgIGJyZWFrOworCSAgc2tpcF9hcmdzKys7CisJfQorICAgIH0KIAogICAvKiBMb29rIGZv ciB0aGlzIGFyZ3VtZW50IGZpcnN0LCBiZWZvcmUgYW55IGhlYXAgYWxsb2NhdGlvbiwgc28gd2UK ICAgICAgY2FuIHNldCBoZWFwIGZsYWdzIHByb3Blcmx5IGlmIHdlJ3JlIGdvaW5nIHRvIGR1bXAu ICAqLwotICBpZiAoIWluaXRpYWxpemVkICYmIHRlbWFjcykKKyAgaWYgKCFpbml0aWFsaXplZCAm JiB0ZW1hY3MgJiYgTklMUCAoVm5vbmVkaXRvcikpCiAgICAgewogI2lmZGVmIEhBVkVfUERVTVBF UgogICAgICAgaWYgKCFzdHJjbXAgKHRlbWFjcywgInBkdW1wIikgfHwgIXN0cmNtcCAodGVtYWNz LCAicGJvb3RzdHJhcCIpKQpAQCAtMTMzNiwxMCArMTM4NiwyOCBAQCBhbmRyb2lkX2VtYWNzX2lu aXQgKGludCBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqZHVtcF9maWxlKQogICAgICAgaWYgKHdp bGxfZHVtcF9wICgpKQogICAgICAgICBkdW1wX21vZGUgPSB0ZW1hY3M7CiAjZW5kaWYKLSAgICAg IGlmICghZHVtcF9tb2RlKQorICAgICAgLyogVGhpcyBvcHRpb24gaXMgZm9yIGV2YWx1YXRpbmcg ZXhycGVzc2lvbnMgaW4gYSBiYXJlIGVudmlyb25tZW50LAorCSBwb3NzaWJseSB0byBkdW1wIGEg bm9uZWRpdG9yIGVudmlyb25tZW50ICovCisgICAgICBpZiAoIXN0cm5jbXAgKHRlbWFjcywgImV2 YWwiLDQpKQorCXsKKwkgIC8qIGV2YWwgb3B0aW9ucyBkaXNhYmxlIHJlY29nbml0aW9uIG9mIGFu eSBvdGhlciBjb21tYW5kIGxpbmUgb3B0aW9ucyAqLworCSAgLyogV2UgcmVxdWlyZSBpdCB0byBi ZSB0aGUgZmlyc3QgY29tbWFuZCBsaW5lIGFyZ3VtZW50IGFuZCBvbmx5IG9wdGlvbiAqLworCSAg aW50IHRlbWFjc19za2lwID0gMDsKKwkgIGNoYXIgKnRlbWFjc192YWx1ZSA9IE5VTEw7CisJICBp ZiAoIWFyZ21hdGNoIChhcmd2LCBhcmdjLCAiLXRlbWFjcyIsICItLXRlbWFjcyIsIDgsICZ0ZW1h Y3NfdmFsdWUsICZ0ZW1hY3Nfc2tpcCkpCisJICAgIGZhdGFsICgidGVtYWNzIGV2YWwgb3B0aW9u IGlzIG5vdCB0aGUgZmlyc3QgY29tbWFuZCBsaW5lIGFyZ3VtZW50Iik7CisJICBpZiAoc3RyY21w ICh0ZW1hY3NfdmFsdWUsIHRlbWFjcykpCisJICAgIGZhdGFsICgiTXVsdGlwbGUgdGVtYWNzIG9w dGlvbnMgc3BlY2lmaWVkLiIpOworI2lmZGVmIEhBVkVfUERVTVBFUgorCSAgcGR1bXBlcl9kb19u b3dfYW5kX2FmdGVyX2xvYWQgKGluaXRfbm9uZWRpdG9yX2V2YWxfZm9yX3BkdW1wZXIpOworI2Vs c2UKKwkgIGluaXRfbm9uZWRpdG9yX2V2YWxfZm9yX3BkdW1wZXIoKTsKKyNlbmRpZgorCX0KKyAg ICAgIGVsc2UgaWYgKCFkdW1wX21vZGUpCiAgICAgICAgIGZhdGFsICgiSW52YWxpZCB0ZW1hY3Mg bW9kZSAnJXMnIiwgdGVtYWNzKTsKICAgICB9Ci0gIGVsc2UKKyAgZWxzZSBpZiAoTklMUChWbm9u ZWRpdG9yKSkKICAgICB7CiAgICAgICBlYXNzZXJ0ICghdGVtYWNzKTsKICAgICAgIGVhc3NlcnQg KCFpbml0aWFsaXplZCk7CkBAIC0xMzgzLDYgKzE0NTEsNyBAQCBhbmRyb2lkX2VtYWNzX2luaXQg KGludCBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqZHVtcF9maWxlKQogICBuc19pbml0X3Bvb2wg KCk7CiAjZW5kaWYKIAorICBwdHJkaWZmX3QgYnVmc2l6ZTsKICNpZmRlZiBIQVZFX1BEVU1QRVIK ICAgaWYgKGF0dGVtcHRfbG9hZF9wZHVtcCkKICAgICB7CkBAIC0xMzk3LDEwICsxNDY2LDkgQEAg YW5kcm9pZF9lbWFjc19pbml0IChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKmR1bXBfZmls ZSkKIAl3MzJfaW5pdF9maWxlX25hbWVfY29kZXBhZ2UgKCk7CiAjZW5kaWYKICAgICB9Ci0jZWxz ZQotICBwdHJkaWZmX3QgYnVmc2l6ZTsKLSAgaW5pdGlhbF9lbWFjc19leGVjdXRhYmxlID0gZmlu ZF9lbWFjc19leGVjdXRhYmxlIChhcmd2WzBdLCAmYnVmc2l6ZSk7CisgIGVsc2UgIC8qIHN0aWxs IHdhbnQgdG8ga25vdyB0aGUgZXhlY3V0YWJsZSAqLwogI2VuZGlmCisgICAgaW5pdGlhbF9lbWFj c19leGVjdXRhYmxlID0gZmluZF9lbWFjc19leGVjdXRhYmxlIChhcmd2WzBdLCAmYnVmc2l6ZSk7 CiAKICAgYXJnYyA9IG1heWJlX2Rpc2FibGVfYWRkcmVzc19yYW5kb21pemF0aW9uIChhcmdjLCBh cmd2KTsKIApAQCAtMTQ1MSw2ICsxNTE5LDE4IEBAIGFuZHJvaWRfZW1hY3NfaW5pdCAoaW50IGFy Z2MsIGNoYXIgKiphcmd2LCBjaGFyICpkdW1wX2ZpbGUpCiAgICAgIHNob3VsZCBiZSBleHBsaWNp dGx5IHJlY29nbml6ZWQsIGlnbm9yZWQsIGFuZCByZW1vdmVkIGZyb20KICAgICAgJ2NvbW1hbmQt bGluZS1hcmdzLWxlZnQnIGluICdjb21tYW5kLWxpbmUtMScuICAqLwogCisgIGVtYWNzX3dkID0g ZW1hY3NfZ2V0X2N1cnJlbnRfZGlyX25hbWUgKCk7CisjaWZkZWYgV0lORE9XU05UCisgIGluaXRp YWxfd2QgPSBlbWFjc193ZDsKKyNlbmRpZiAvKiBXSU5ET1dTTlQgKi8KKyNpZmRlZiBIQVZFX1BE VU1QRVIKKyAgaWYgKGR1bXBlZF93aXRoX3BkdW1wZXJfcCAoKSkKKyAgICBwZHVtcGVyX3JlY29y ZF93ZCAoZW1hY3Nfd2QpOworI2VuZGlmCisgIGlmICghTklMUChWbm9uZWRpdG9yKSkKKyAgICAv KiBObyBjb21tYW5kIGFyZ3VtZW50cyBhcmUgYWxsb3dlZCB0byBiZSBwcm9jZXNzZWQgKi8KKyAg ICBnb3RvIGFmdGVyX2luaXRpYWxfYXJnX3Byb2Nlc3Npbmc7CisKICAgYm9vbCBvbmx5X3ZlcnNp b24gPSBmYWxzZTsKICAgc29ydF9hcmdzIChhcmdjLCBhcmd2KTsKICAgb2xkX2FyZ2MgPSBhcmdj LCBhcmdjID0gMDsKQEAgLTE0NjksNyArMTU0OSw3IEBAIGFuZHJvaWRfZW1hY3NfaW5pdCAoaW50 IGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICpkdW1wX2ZpbGUpCiAgICAgICBpZiAoaW5pdGlhbGl6 ZWQpCiAgICAgICAgIHsKICAgICAgICAgICBkdW1wX2ZpbmdlcnByaW50IChzdGRvdXQsICIiLAot CQkJICAgICh1bnNpZ25lZCBjaGFyICopIGZpbmdlcnByaW50KTsKKwkJCSAgICAodW5zaWduZWQg Y2hhciAqKSBmaW5nZXJwcmludF9zdG9yYWdlLmhhc2gpOwogICAgICAgICAgIGV4aXQgKDApOwog ICAgICAgICB9CiAgICAgICBlbHNlCkBAIC0xNDc5LDE0ICsxNTU5LDYgQEAgYW5kcm9pZF9lbWFj c19pbml0IChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKmR1bXBfZmlsZSkKICAgICAgICAg fQogICAgIH0KICNlbmRpZgotICBlbWFjc193ZCA9IGVtYWNzX2dldF9jdXJyZW50X2Rpcl9uYW1l ICgpOwotI2lmZGVmIFdJTkRPV1NOVAotICBpbml0aWFsX3dkID0gZW1hY3Nfd2Q7Ci0jZW5kaWYg LyogV0lORE9XU05UICovCi0jaWZkZWYgSEFWRV9QRFVNUEVSCi0gIGlmIChkdW1wZWRfd2l0aF9w ZHVtcGVyX3AgKCkpCi0gICAgcGR1bXBlcl9yZWNvcmRfd2QgKGVtYWNzX3dkKTsKLSNlbmRpZgog CiAgIGlmIChhcmdtYXRjaCAoYXJndiwgYXJnYywgIi1jaGRpciIsICItLWNoZGlyIiwgNCwgJmNo X3RvX2RpciwgJnNraXBfYXJncykKICAgICAgICYmICFvbmx5X3ZlcnNpb24pCkBAIC0xNTEzLDYg KzE1ODUsNyBAQCBhbmRyb2lkX2VtYWNzX2luaXQgKGludCBhcmdjLCBjaGFyICoqYXJndiwgY2hh ciAqZHVtcF9maWxlKQogICAgICAgZW1hY3Nfd2QgPSBlbWFjc19nZXRfY3VycmVudF9kaXJfbmFt ZSAoKTsKICAgICB9CiAKKyBhZnRlcl9pbml0aWFsX2FyZ19wcm9jZXNzaW5nOgogI2lmIGRlZmlu ZWQgKEhBVkVfU0VUUkxJTUlUKSAmJiBkZWZpbmVkIChSTElNSVRfU1RBQ0spICYmICFkZWZpbmVk IChDWUdXSU4pCiAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgc3BhY2UgYXZhaWxhYmxlLiAgRG9uJ3Qg ZG8gdGhhdCBpZiBkdW1waW5nLAogICAgICBzaW5jZSBzb21lIHN5c3RlbXMgKGUuZy4gREpHUFAp IG1pZ2h0IGRlZmluZSBhIHNtYWxsZXIgc3RhY2sKQEAgLTE2MTIsNiArMTY4NSwxMCBAQCBhbmRy b2lkX2VtYWNzX2luaXQgKGludCBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqZHVtcF9maWxlKQog CiAgIC8qIEhhbmRsZSB0aGUgLXQgc3dpdGNoLCB3aGljaCBzcGVjaWZpZXMgZmlsZW5hbWUgdG8g dXNlIGFzIHRlcm1pbmFsLiAgKi8KICAgZGV2X3R0eSA9IHhzdHJkdXAgKERFVl9UVFkpOwkvKiB0 aGUgZGVmYXVsdCB0ZXJtaW5hbCAqLworCisgIGlmICghTklMUCAoVm5vbmVkaXRvcikpCisgICAg Z290byBhZnRlcl90ZXJtX29wdF9wcm9jZXNzaW5nOworCiAgIHdoaWxlICghb25seV92ZXJzaW9u KQogICAgIHsKICAgICAgIGNoYXIgKnRlcm07CkBAIC0xNjcxLDcgKzE3NDgsNyBAQCBhbmRyb2lk X2VtYWNzX2luaXQgKGludCBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqZHVtcF9maWxlKQogCiAg IC8qIEhhbmRsZSB0aGUgLS1oZWxwIG9wdGlvbiwgd2hpY2ggZ2l2ZXMgYSB1c2FnZSBtZXNzYWdl LiAgKi8KICAgaWYgKGFyZ21hdGNoIChhcmd2LCBhcmdjLCAiLWhlbHAiLCAiLS1oZWxwIiwgMywg TlVMTCwgJnNraXBfYXJncykKLSAgICAgICYmICFvbmx5X3ZlcnNpb24pCisgICAgICAmJiAhb25s eV92ZXJzaW9uICYmICFub25lZGl0b3JfZXZhbF9zb3VyY2UpCiAgICAgewogICAgICAgaW50IGk7 CiAgICAgICBwcmludGYgKCJVc2FnZTogJXMgW09QVElPTi1PUi1GSUxFTkFNRV0uLi5cbiIsIGFy Z3ZbMF0pOwpAQCAtMTg5Miw2ICsxOTY5LDggQEAgYW5kcm9pZF9lbWFjc19pbml0IChpbnQgYXJn YywgY2hhciAqKmFyZ3YsIGNoYXIgKmR1bXBfZmlsZSkKIAlkYWVtb25fbmFtZSA9IHhzdHJkdXAg KGRuYW1lX2FyZyk7CiAgICAgfQogCisgYWZ0ZXJfdGVybV9vcHRfcHJvY2Vzc2luZzoKKwogI2lm IGRlZmluZWQgSEFWRV9QVEhSRUFEICYmICFkZWZpbmVkIFNZU1RFTV9NQUxMT0MgXAogICAmJiAh ZGVmaW5lZCBET1VHX0xFQV9NQUxMT0MKICAgLyogRG8gbm90IG1ha2UgZ21hbGxvYyB0aHJlYWQt c2FmZSB3aGVuIGNyZWF0aW5nIGJvb3RzdHJhcC1lbWFjcywgYXMKQEAgLTE5ODEsNiArMjA2MCw4 IEBAIGFuZHJvaWRfZW1hY3NfaW5pdCAoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICpkdW1w X2ZpbGUpCiAgICAgIGFueXdheSkuICAqLwogICBWZ2NfY29uc19wZXJjZW50YWdlID0gbWFrZV9m bG9hdCAobm9uaW50ZXJhY3RpdmUgJiYgaW5pdGlhbGl6ZWQgPyAxLjAgOiAwLjEpOwogCisgIGlm ICghTklMUCAoVm5vbmVkaXRvcikpCisgICAgZ290byBhZnRlcl9zdGFydHVwX29wdF9wcm9jZXNz aW5nOwogICBub19sb2FkdXAKICAgICA9IGFyZ21hdGNoIChhcmd2LCBhcmdjLCAiLW5sIiwgIi0t bm8tbG9hZHVwIiwgNiwgTlVMTCwgJnNraXBfYXJncyk7CiAKQEAgLTIwNDMsNyArMjEyNCw3IEBA IGFuZHJvaWRfZW1hY3NfaW5pdCAoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICpkdW1wX2Zp bGUpCiAgICAgY2hhciAqZGlzcGxheW5hbWUgPSAwOwogCiAgICAgLyogU2tpcCBhbnkgbnVtYmVy IG9mIC1kIG9wdGlvbnMsIGJ1dCBvbmx5IHVzZSB0aGUgbGFzdCBvbmUuICAqLwotICAgIHdoaWxl ICghb25seV92ZXJzaW9uKQorICAgIHdoaWxlICghb25seV92ZXJzaW9uICYmICFub25lZGl0b3Jf ZXZhbF9zb3VyY2UpCiAgICAgICB7CiAJaW50IGNvdW50X2JlZm9yZV90aGlzID0gc2tpcF9hcmdz OwogCkBAIC0yMDgyLDExICsyMTYzLDEyIEBAIGFuZHJvaWRfZW1hY3NfaW5pdCAoaW50IGFyZ2Ms IGNoYXIgKiphcmd2LCBjaGFyICpkdW1wX2ZpbGUpCiAKICAgICAgIH0KIAotICAgIGlmIChhcmdt YXRjaCAoYXJndiwgYXJnYywgIi14IiwgMCwgMSwgJmp1bmssICZza2lwX2FyZ3MpKQorICAgIGlm IChhcmdtYXRjaCAoYXJndiwgYXJnYywgIi14IiwgMCwgMSwgJmp1bmssICZza2lwX2FyZ3MpICYm ICFub25lZGl0b3JfZXZhbF9zb3VyY2UpCiAgICAgICB7CiAJbm9uaW50ZXJhY3RpdmUgPSAxOwog CW5vX3NpdGVfbGlzcCA9IDE7CiAJLyogVGhpcyBpcyBwaWNrZWQgdXAgaW4gc3RhcnR1cC5lbC4g ICovCisJLyogYnV0IHdpbGwgY2F1c2UgaXNzdWVzIGZvciAtdGVtYWNzPWV2YWwgKi8KIAlhcmd2 W3NraXBfYXJncyAtIDFdID0gKGNoYXIgKikgIi1zY3JpcHRldmFsIjsKIAlza2lwX2FyZ3MgLT0g MTsKIAlzb3J0X2FyZ3MgKGFyZ2MsIGFyZ3YpOwpAQCAtMjEwMCw2ICsyMTgyLDggQEAgYW5kcm9p ZF9lbWFjc19pbml0IChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKmR1bXBfZmlsZSkKICAg ICAgZXhjZXB0IHdoZW4gYnVpbGRpbmcgdGVtYWNzCiAgICAgIGJlY2F1c2UgdGhlIC1kIGFyZ3Vt ZW50IGhhcyBub3QgYmVlbiBza2lwcGVkIGluIHNraXBfYXJncy4gICovCiAKKyBhZnRlcl9zdGFy dHVwX29wdF9wcm9jZXNzaW5nOgorCiAjaWZkZWYgTVNET1MKICAgLyogQ2FsbCBlYXJseSAnY2F1 c2UgaW5pdF9lbnZpcm9ubWVudCBuZWVkcyBpdC4gICovCiAgIGluaXRfZG9zZm5zICgpOwpAQCAt MjUxMyw3ICsyNTk3LDcgQEAgYW5kcm9pZF9lbWFjc19pbml0IChpbnQgYXJnYywgY2hhciAqKmFy Z3YsIGNoYXIgKmR1bXBfZmlsZSkKICAgaW5pdF9zZm50Zm9udF9hbmRyb2lkICgpOwogI2VuZGlm CiAKLSAgaWYgKCFpbml0aWFsaXplZCkKKyAgaWYgKCFpbml0aWFsaXplZCAmJiAhTklMUCAoVm5v bmVkaXRvcikpCiAgICAgewogICAgICAgY2hhciAqZmlsZTsKICAgICAgIC8qIEhhbmRsZSAtbCBs b2FkdXAsIGFyZ3MgcGFzc2VkIGJ5IE1ha2VmaWxlLiAgKi8KQEAgLTI1MjgsMTAgKzI2MTIsMTQg QEAgYW5kcm9pZF9lbWFjc19pbml0IChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKmR1bXBf ZmlsZSkKIAkgIFZ0b3BfbGV2ZWwgPSBsaXN0MiAoUWxvYWQsIGJ1aWxkX3VuaWJ5dGVfc3RyaW5n IChmaWxlKSk7CiAJfQogICAgICAgLyogVW5sZXNzIG5leHQgc3dpdGNoIGlzIC1ubCwgbG9hZCAi bG9hZHVwLmVsIiBmaXJzdCB0aGluZy4gICovCi0gICAgICBpZiAoISBub19sb2FkdXApCisgICAg ICBpZiAoIW5vX2xvYWR1cCkKIAlWdG9wX2xldmVsID0gbGlzdDIgKFFsb2FkLCBidWlsZF9zdHJp bmcgKCJsb2FkdXAuZWwiKSk7CisgICAgfQorCiAKICNpZmRlZiBIQVZFX05BVElWRV9DT01QCisg IGlmICghaW5pdGlhbGl6ZWQpCisgICAgewogICAgICAgLyogSWYgd2UgYXJlIGdvaW5nIHRvIGxv YWQgc3R1ZmYgaW4gYSBub24taW5pdGlhbGl6ZWQgRW1hY3MsCiAJIHVwZGF0ZSB0aGUgdmFsdWUg b2YgbmF0aXZlLWNvbXAtZWxuLWxvYWQtcGF0aCwgc28gdGhhdCB0aGUKIAkgKi5lbG4gZmlsZXMg d2lsbCBiZSBmb3VuZCBpZiB0aGV5IGFyZSB0aGVyZS4gICovCkBAIC0yNTQwLDggKzI2MjgsOCBA QCBhbmRyb2lkX2VtYWNzX2luaXQgKGludCBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqZHVtcF9m aWxlKQogCSAgRmNvbnMgKEZleHBhbmRfZmlsZV9uYW1lIChYQ0FSIChWbmF0aXZlX2NvbXBfZWxu X2xvYWRfcGF0aCksCiAJCQkJICAgIFZpbnZvY2F0aW9uX2RpcmVjdG9yeSksCiAJCSBRbmlsKTsK LSNlbmRpZgogICAgIH0KKyNlbmRpZgogCiAgIC8qIFNldCB1cCBmb3IgcHJvZmlsaW5nLiAgVGhp cyBpcyBrbm93biB0byB3b3JrIG9uIEZyZWVCU0QsCiAgICAgIEdOVS9MaW51eCBhbmQgTWluR1cu ICBJdCBtaWdodCB3b3JrIG9uIHNvbWUgb3RoZXIgc3lzdGVtcyB0b28uCkBAIC0yNTY3LDYgKzI2 NTUsMTcgQEAgYW5kcm9pZF9lbWFjc19pbml0IChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIg KmR1bXBfZmlsZSkKICAgc2FmZV9ydW5faG9va3MgKFFhZnRlcl9wZHVtcF9sb2FkX2hvb2spOwog I2VuZGlmCiAKKyAgaWYgKCFOSUxQIChWbm9uZWRpdG9yKSB8fCBub25lZGl0b3JfZXZhbF9zb3Vy Y2UpCisgICAgeworICAgICAgaW50IG5vbmVkaXRvcl9uYXJnczsKKyAgICAgIG1ha2Vfbm9uZWRp dG9yX2FyZ3MgKGFyZ2MsIGFyZ3YsICZub25lZGl0b3JfbmFyZ3MpOworICAgICAgbm9uZWRpdG9y X21haW4gKG5vbmVkaXRvcl9uYXJncy0xLGFyZ3YgKyAxKTsKKworICAgICAgLyogbm9uZWRpdG9y IGV2YWwgc2hvdWxkIG5ldmVyIHJldHVybiBoZXJlIC0KKwkgQXZvaWRpbmcgcmVjdXJzaXZlIGVk aXQgKG5vcm1hbCBzdGFydHVwKSBpcyB0aGUgcG9pbnQuICovCisgICAgICBmYXRhbCAoIm5vbmVk aXRvciBldmFsIG11c3QgZXhpdCB3aXRob3V0IHJldHVybmluZy4iKTsKKyAgICB9CisKICNpZiBk ZWZpbmVkIEhBVkVfQU5EUk9JRCAmJiAhZGVmaW5lZCBBTkRST0lEX1NUVUJJRlkgJiYgMAogICAv KiBUaGlzIGNvbWVzIHZlcnkgbGF0ZSBpbiB0aGUgc3RhcnR1cCBwcm9jZXNzIGJlY2F1c2UgaXQg cmVxdWlyZXMKICAgICAgbW9zdCBvZiBsaXNwL2ludGVybmF0aW9uYWwgdG8gYmUgbG9hZGVkLiAg VGhpcyBhcHByb2FjaCBkb2Vzbid0CkBAIC0yNTc3LDYgKzI2NzYsMjUgQEAgYW5kcm9pZF9lbWFj c19pbml0IChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKmR1bXBfZmlsZSkKIAkJICAgICAg bGlzdDEgKFFhbmRyb2lkX2VudW1lcmF0ZV9mb250cykpOwogI2VuZGlmCiAKKyAgaWYgKEVYRV9D T05GSUdVUkVEX0VWQUxfU0hJTSAoZXhlX2NvbmZpZykKKyAgICAgICYmICooZXhlX2NvbmZpZy0+ cy5zaGltKSkKKyAgICB7CisgICAgICBMaXNwX09iamVjdCB4ID0gQ0FMTE4gKEZjb25jYXQsCisJ CQkgICAgIGJ1aWxkX3N0cmluZyAoIihwcm9nbiAiKSwKKwkJCSAgICAgYnVpbGRfc3RyaW5nIChl eGVfY29uZmlnLT5zLnNoaW0pLAorCQkJICAgICBidWlsZF9zdHJpbmcgKCIgKSIpKTsKKyAgICAg IHggPSBsaXN0MiAoUWV2YWwsIGxpc3QyIChRcmVhZCwgeCkpOworCisgICAgICAvKiBldmFsdWF0 ZSB0aGUgc2hpbSBwcm9ncmFtIHRoZW4gdXN1YWwgdG9wLWxldmVsCisJIGVuc3VyZSB0b3AtbGV2 ZWwgaXMgc2V0IGJhY2sgdG8gdGhlIHVzdWFsIHZhbHVlCisJIHNvIHRoZSBzaGltIGlzIG9ubHkg ZXZhbHVhdGVkIG9uY2UgKGJ5IHRoaXMgbWVjaGFuaXNtLCBhdCBsZWFzdCkKKwkgYnV0IGdpdmUg dGhlIHNoaW0gYSBjaGFuY2UgdG8gbW9kaWZ5IGl0ICovCisgICAgICBWdG9wX2xldmVsID0gbGlz dDQgKFFwcm9nbiwKKwkJCSAgbGlzdDMgKFFzZXRxLCBRdG9wX2xldmVsLCBWdG9wX2xldmVsKSwK KwkJCSAgeCwKKwkJCSAgbGlzdDIgKFFldmFsLCBWdG9wX2xldmVsKSk7CisgICAgfQorCiAgIC8q IEVudGVyIGVkaXRvciBjb21tYW5kIGxvb3AuICBUaGlzIG5ldmVyIHJldHVybnMuICAqLwogICBz ZXRfaW5pdGlhbF9taW5pYnVmZmVyX21vZGUgKCk7CiAgIEZyZWN1cnNpdmVfZWRpdCAoKTsKQEAg LTI4OTYsNiArMzAxNCw3MSBAQCBzb3J0X2FyZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKICAg eGZyZWUgKG5ldyk7CiAgIHhmcmVlIChwcmlvcml0eSk7CiB9CisKKy8qIGFyZ3VtZW50IHByb2Nl c3NpbmcgZm9yIG5vbmVkaXRvciBtb2RlIGlzIG1pbmltYWwuCisgICAtLWR1bXAgYW5kIC0tdGVt YWNzIG9wdGlvbnMgY2Fubm90IGJlIGlnbm9yZWQsIGJ1dCB3ZSBkaXNjYXJkIHRoZW0gaGVyZS4K KyovCisKK3ZvaWQKK21ha2Vfbm9uZWRpdG9yX2FyZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndiwg aW50ICpuYXJncykKK3sKKyAgYm9vbCB0b19kaXNjYXJkW2FyZ2NdOworICBpbnQgZGlzY2FyZGVk ID0gMDsKKyAgaW50IHNraXA7CisgIGNoYXIgKnZhbHVlICA9IE5VTEw7CisgICpuYXJncyA9IGFy Z2M7CisKKyAgZm9yIChpbnQgaiA9IDA7IGogPCAoYXJnYyAtIDEpOyBqKyspCisgICAgeworICAg ICAgc2tpcCA9IGo7CisgICAgICBpZiAoYXJnbWF0Y2ggKGFyZ3YsIGFyZ2MsICItZHVtcC1maWxl IiwgIi0tZHVtcC1maWxlIiwgNiwgJnZhbHVlLAorCQkgICAgJnNraXApCisJICB8fCBhcmdtYXRj aCAoYXJndiwgYXJnYywgIi10ZW1hY3MiLCAiLS10ZW1hY3MiLCA4LCAmdmFsdWUsICZza2lwKSkK Kwl7CisJICBkaXNjYXJkZWQgKz0gKHNraXAgLSBqKTsKKwkgIGZvciAoOyBqIDwgc2tpcDsgaisr KQorCSAgICB7CisJICAgICAgdG9fZGlzY2FyZFtqKzFdID0gdHJ1ZTsKKwkgICAgfQorCSAgY29u dGludWU7CisJfQorICAgICAgaWYgKGFyZ21hdGNoIChhcmd2LCBhcmdjLCAiLS0iLCBOVUxMLCAy LCBOVUxMLCAmc2tpcCkpCisJeworCSAgZm9yICg7IGogPCAoYXJnYy0xKTsgaisrKQorCSAgICB0 b19kaXNjYXJkW2orMV0gPSBmYWxzZTsKKwkgIGJyZWFrOworCX0KKwl0b19kaXNjYXJkW2orMV0g PSBmYWxzZTsKKyAgICB9CisgICpuYXJncyA9IGFyZ2MgLSBkaXNjYXJkZWQ7CisgIGlmIChkaXNj YXJkZWQgPiAwKQorICAgIHsKKyAgICAgIGludCBqLGs7CisgICAgICAvKiBUaGVyZSBpcyBubyBy ZW9yZGVyaW5nLCB3ZSBqdXN0IG1vdmUgbm9uZGlzY2FyZGVkIGFyZ3VtZW50cyBmb3J3YXJkLiov CisgICAgICBmb3IgKGogPSAxOyBqIDwgYXJnYyAmJiAhdG9fZGlzY2FyZFtqXTsgaisrKTsKKyAg ICAgIGZvciAoayA9IGo7ICBrIDwgKm5hcmdzICYmIGogPCBhcmdjOyBqKyspCisJeworCSAgaWYg KCF0b19kaXNjYXJkW2pdKQorCSAgICBhcmd2W2srK10gPSBhcmd2W2pdOworCX0KKyAgICAgIGZv ciAoaj0qbmFyZ3M7IGogPCBhcmdjOyBqKyspCisJeworCSAgYXJndltqXSA9IE5VTEw7CisJfQor ICAgIH0KKworICAvKiBQcmVzZXJ2ZSB0aGUgcHJpc3RpbmUgYXJndW1lbnRzIHJlY29yZGVkIGJ5 IGluaXRfY21kYXJncy4gKi8KKyAgVm9yaWdpbmFsX2NvbW1hbmRfbGluZV9hcmdzID0gVmNvbW1h bmRfbGluZV9hcmdzOworICBWY29tbWFuZF9saW5lX2FyZ3MgPSBRbmlsOworCisgIGZvciAoaW50 IGkgPSAqbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKyAgICB7CisgICAgICBWY29tbWFuZF9saW5l X2FyZ3MKKwk9IEZjb25zIChidWlsZF91bmlieXRlX3N0cmluZyAoYXJndltpXSksIFZjb21tYW5k X2xpbmVfYXJncyk7CisgICAgfQorCit9CisKIAwKIERFRlVOICgia2lsbC1lbWFjcyIsIEZraWxs X2VtYWNzLCBTa2lsbF9lbWFjcywgMCwgMiwgIlAiLAogICAgICAgIGRvYzogLyogRXhpdCB0aGUg RW1hY3Mgam9iIGFuZCBraWxsIGl0LgpAQCAtMzEzMSw2ICszMzE0LDc2IEBAIHNodXRfZG93bl9l bWFjcyAoaW50IHNpZywgTGlzcF9PYmplY3Qgc3R1ZmYpCiAjZW5kaWYKIH0KIAorDAorCisKKy8q IEVuc3VyZSB0aGVzZSBzZXR0aW5ncyBzdXJ2aXZlIGEgZHVtcAorICogZm9yIGNyZWF0aW5nIGRl ZGljYXRlZCBub25lZGl0b3IgbW9kZSB0b29scy4KKyAqLwordm9pZCBpbml0X25vbmVkaXRvcl9l dmFsX2Zvcl9wZHVtcGVyICh2b2lkKQoreworICBib29sIGJhcmUgPSBFWEVfQ09ORklHVVJFRF9C QVJFKGV4ZV9jb25maWcpIHx8ICh0ZW1hY3MgIT0gTlVMTCk7CisgIG5vX2xvYWR1cCA9IHRydWU7 CisgIGluaGliaXRfd2luZG93X3N5c3RlbSA9IDE7CisgIG5vbmludGVyYWN0aXZlID0gMTsKKyAg VnVuZG9fb3V0ZXJfbGltaXQgPSBRbmlsOworICBub19zaXRlX2xpc3AgPSB0cnVlOworI2lmZGVm IEhBVkVfUERVTVBFUgorICBhdHRlbXB0X2xvYWRfcGR1bXAgPSAhYmFyZTsKKyNlbmRpZgorCisg IG5vbmVkaXRvcl9ldmFsX3NvdXJjZSA9IE5PTkVESVRPUl9FVkFMX05PTkU7CisgIGlmIChFWEVf Q09ORklHVVJFRF9OT05FRElUT1IgKGV4ZV9jb25maWcpKQorICAgIHsKKyAgICAgIG5vbmVkaXRv cl9ldmFsX3NvdXJjZSA9IGV4ZV9jb25maWctPnMuZmxhZ3MgJiBOT05FRElUT1JfRVZBTF9NQVNL OworICAgIH0KKyAgZWxzZSBpZiAoYmFyZSkgLyogLS10ZW1hY3Mgb3B0aW9uIG9uIHRoZSBjb21t YW5kIGxpbmUgKi8KKyAgICB7CisgICAgICBpZiAoIXN0cmNtcCAodGVtYWNzLCJldmFsIikpCisJ bm9uZWRpdG9yX2V2YWxfc291cmNlID0gTk9ORURJVE9SX0VWQUxfQk9USDsKKyAgICAgIGVsc2Ug aWYgKCFzdHJjbXAgKHRlbWFjcywiZXZhbC1hcmdzIikpCisJbm9uZWRpdG9yX2V2YWxfc291cmNl ID0gTk9ORURJVE9SX0VWQUxfQVJHUzsKKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKHRlbWFjcywi ZXZhbC1zdGRpbiIpKQorCW5vbmVkaXRvcl9ldmFsX3NvdXJjZSA9IE5PTkVESVRPUl9FVkFMX1NU RElOOworICAgICAgZWxzZSBpZiAoIXN0cmNtcCAodGVtYWNzLCJldmFsLW5vbmUiKSkKKwlub25l ZGl0b3JfZXZhbF9zb3VyY2UgPSBOT05FRElUT1JfRVZBTF9OT05FOworICAgICAgZWxzZQorCWZh dGFsICgiVW5yZWNvZ25pemVkIHRlbWFjcyBldmFsdWF0aW9uIG9wdGlvbiAnJXMnIix0ZW1hY3Mp OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIE11c3QgYmUgbG9hZGVkIGZyb20gYSBk dW1wLCBpZiBWbm9uZWRpdG9yIHdhc24ndCBzZXQgZGVmYXVsdCB0byBzdGRpbi4qLworICAgICAg aWYgKE5JTFAoVm5vbmVkaXRvcikpCisJbm9uZWRpdG9yX2V2YWxfc291cmNlID0gTk9ORURJVE9S X0VWQUxfU1RESU47CisgICAgfQorICBpZiAoTklMUChWbm9uZWRpdG9yKSkKKyAgICB7CisgICAg ICBzd2l0Y2ggKG5vbmVkaXRvcl9ldmFsX3NvdXJjZSkKKwl7CisJY2FzZSBOT05FRElUT1JfRVZB TF9OT05FOgorCSAgaWYgKGJhcmUgJiYgIXRlbWFjcykgdGVtYWNzID0gdGVtYWNzX2V2YWxfb3B0 cy5ub25lOworCSAgLyogSnVzdCByZXR1cm4gMCBleGl0IGNvZGUgKi8KKwkgIFZub25lZGl0b3Ig PSBtYWtlX2ZpeG51bSgwKTsKKwkgIGJyZWFrOworCWNhc2UgTk9ORURJVE9SX0VWQUxfQVJHUzoK KwkgIGlmIChiYXJlICYmICF0ZW1hY3MpIHRlbWFjcyA9IHRlbWFjc19ldmFsX29wdHMuYXJnczsK KwkgIFZub25lZGl0b3IgPSBRY29tbWFuZF9saW5lX2FyZ3M7CisJICBicmVhazsKKwljYXNlIE5P TkVESVRPUl9FVkFMX1NURElOOgorCSAgaWYgKGJhcmUgJiYgIXRlbWFjcykgdGVtYWNzID0gdGVt YWNzX2V2YWxfb3B0cy5zdGRpbjsKKwkgIFZub25lZGl0b3IgPSBRc3RkaW47CisJICBicmVhazsK KwljYXNlIE5PTkVESVRPUl9FVkFMX0JPVEg6CisJICBpZiAoYmFyZSAmJiAhdGVtYWNzKSB0ZW1h Y3MgPSB0ZW1hY3NfZXZhbF9vcHRzLmJvdGg7CisJICBWbm9uZWRpdG9yID0gUXQ7CisJICBicmVh azsKKwlkZWZhdWx0OgorCSAgZmF0YWwgKCJJbXBvc3NpYmxlIik7CisJfQorICAgIH0KKworfQor CiAKIAwKIC8qIFJlY292ZXIgZnJvbSBzZXRsb2NhbGUgKExDX0FMTCwgIiIpLiAgKi8KQEAgLTM0 MTgsNiArMzY3MSw3MDQgQEAgREVGVU4gKCJkYWVtb24taW5pdGlhbGl6ZWQiLCBGZGFlbW9uX2lu aXRpYWxpemVkLCBTZGFlbW9uX2luaXRpYWxpemVkLCAwLCAwLCAwLAogICByZXR1cm4gUXQ7CiB9 CiAKK3N0YXRpYyBMaXNwX09iamVjdCBwcm9jZXNzX2ZpbmdlcnByaW50X2Vycm9ycyhGSU5HRVJQ UklOVF9FUlJPUiBmciwKKwkJCQkJICAgICAgaW50IGVycm5vc1szXSwKKwkJCQkJICAgICAgY2hh ciAqZmlsZSwKKwkJCQkJICAgICAgY2hhciAqb3V0ZmlsZXMpOworCitzdGF0aWMgdm9pZAorcmVs ZWFzZV9maW5nZXJwcmludF9idWZmZXIgKHZvaWQgKnApCit7CisgIGlmIChwID09IE5VTEwpIHJl dHVybjsKKyAgc3RydWN0IGZpbmdlcnByaW50X2J1ZmZlciAqZmIgPSAoc3RydWN0IGZpbmdlcnBy aW50X2J1ZmZlciAqKSBwOworICBpbnQgZXJybm9zWzNdOworICBwdHJkaWZmX3QgZmlsZW5hbWVf c3ogPSBzdHJsZW4oZmItPmZpbGUpKzE7CisgIGNoYXIgKmZpbGUgPSBhbGxvY2EoZmlsZW5hbWVf c3opOworICBpZiAoZmlsZSA9PSBOVUxMKQorICAgIHsKKyAgICAgIHhzaWduYWwxIChRZXJyb3Is CisJCUNBTExOIChGZm9ybWF0LAorCQkgICAgICAgYnVpbGRfc3RyaW5nICgiYWxsb2NhIGZhaWxl ZDogY291bGQgbm90IGNvcHkgJyVzJyIpLAorCQkgICAgICAgYnVpbGRfc3RyaW5nIChmYi0+Zmls ZSkpKTsKKyAgICB9CisgIG1lbWNweSAoZmlsZSwgZmItPmZpbGUsIGZpbGVuYW1lX3N6KTsKKyAg cHRyZGlmZl90IG91dGZpbGVuYW1lX3N6ID0gMDsKKyAgY2hhciAqb3V0ZmlsZSA9IE5VTEw7Cisg IGlmIChmYi0+b3V0ZmlsZSA9PSBmYi0+ZmlsZSkKKyAgICB7CisgICAgICBvdXRmaWxlID0gZmls ZTsKKyAgICAgIG91dGZpbGVuYW1lX3N6ID0gZmlsZW5hbWVfc3o7CisgICAgfQorICBlbHNlIGlm IChmYi0+b3V0ZmlsZSAhPSBOVUxMKQorICAgIHsKKyAgICAgIG91dGZpbGVuYW1lX3N6ID0gc3Ry bGVuKGZiLT5maWxlKSsxOworICAgICAgb3V0ZmlsZSA9IGFsbG9jYShvdXRmaWxlbmFtZV9zeik7 CisgICAgICBpZiAob3V0ZmlsZSA9PSBOVUxMKQorCXsKKwkgIHhzaWduYWwxIChRZXJyb3IsCisJ CSAgICBDQUxMTiAoRmZvcm1hdCwKKwkJCSAgIGJ1aWxkX3N0cmluZyAoImFsbG9jYSBmYWlsZWQ6 IGNvdWxkIG5vdCBjb3B5ICclcyciKSwKKwkJCSAgIGJ1aWxkX3N0cmluZyAob3V0ZmlsZSkpKTsK Kwl9CisgICAgICBtZW1jcHkgKG91dGZpbGUsIGZiLT5vdXRmaWxlLCBvdXRmaWxlbmFtZV9zeik7 CisgICAgfQorICBGSU5HRVJQUklOVF9FUlJPUiByID0gZmluZ2VycHJpbnRfcmVsZWFzZV9idWZm ZXIgKGZiLCBlcnJub3MpOworICBMaXNwX09iamVjdCBlcnJzID0gIHByb2Nlc3NfZmluZ2VycHJp bnRfZXJyb3JzIChyLCBlcnJub3MsIGZpbGUsIG91dGZpbGUpOworICBpZiAoIU5JTFAoZXJycykp CisgICAgeworICAgICAgeHNpZ25hbCAoUWN1c3RvbV9leGVjdXRhYmxlX2Vycm9yLCBlcnJzKTsK KyAgICB9CisKK30KKworTGlzcF9PYmplY3QKK3Byb2Nlc3NfZmluZ2VycHJpbnRfZXJyb3JzKEZJ TkdFUlBSSU5UX0VSUk9SIGZyLGludCBlcnJub3NbM10sCisJCQkgICBjaGFyICpmaWxlLCBjaGFy ICpvdXRmaWxlKQoreworICBMaXNwX09iamVjdCBlcnJzID0gUW5pbDsKKyAgY29uc3QgaW50IGVy cmJ1Zl9zeiA9IDI1NjsKKyAgY2hhciBlcnJidWZbZXJyYnVmX3N6XTsKKyAgY2hhciAqZXJybXNn OworICBpZiAob3V0ZmlsZSA9PSBOVUxMKQorICAgIG91dGZpbGUgPSBmaWxlOworICBpZiAoZnIg JiBGSU5HRVJQUklOVF9FUlJPUl9JTkZJTEVfQ0xPU0UpCisgICAgeworICAgICAgZXJybXNnID0g c3RyZXJyb3JfciAoZXJybm9zWzJdLCBlcnJidWYsIGVycmJ1Zl9zeik7CisgICAgICBlcnJzID0g RmNvbnMgKENBTExOIChGZm9ybWF0LAorCQkJICAgYnVpbGRfc3RyaW5nICgiRXJyb3IgY2xvc2lu ZyAlczogJXMiKSwKKwkJCSAgIGJ1aWxkX3N0cmluZyAoZmlsZSksCisJCQkgICBidWlsZF9zdHJp bmcoZXJybXNnKSksCisJCSAgICBlcnJzKTsKKyAgICB9CisgIGlmIChmciAmIEZJTkdFUlBSSU5U X0VSUk9SX09VVEZJTEVfQ0xPU0UpCisgICAgeworICAgICAgZXJybXNnID0gc3RyZXJyb3JfciAo ZXJybm9zWzFdLCBlcnJidWYsIGVycmJ1Zl9zeik7CisgICAgICBlcnJzID0gRmNvbnMgKENBTExO IChGZm9ybWF0LAorCQkJICAgYnVpbGRfc3RyaW5nICgiRXJyb3IgY2xvc2luZyAlczogJXMiKSwK KwkJCSAgIGJ1aWxkX3N0cmluZyAob3V0ZmlsZSksCisJCQkgICBidWlsZF9zdHJpbmcoZXJybXNn KSksCisJCSAgICBlcnJzKTsKKyAgICB9CisgIHN3aXRjaCAoZnIgJiBGSU5HRVJQUklOVF9FUlJP Ul9VTklRVUVfTUFTSykKKyAgICB7CisgICAgY2FzZSBGSU5HRVJQUklOVF9FUlJPUl9OT05FOgor ICAgICAgYnJlYWs7CisgICAgY2FzZSBGSU5HRVJQUklOVF9FUlJPUl9OT19JTkZJTEU6CisgICAg ICBlcnJzID0gRmNvbnMgKENBTExOIChGZm9ybWF0LAorCQkJICAgYnVpbGRfc3RyaW5nICgiSW50 ZXJuYWwgZXJyb3I6IG1pc3Npbmcgb3IgZXh0cmEgIgorCQkJCQkgImZpbGUgb3BlcmFuZCwgYWx0 aG91Z2ggJyVzJyAiCisJCQkJCSAic3BlY2lmaWVkIiksCisJCQkgICBidWlsZF9zdHJpbmcgKGZp bGUpKSwKKwkJICAgIGVycnMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGSU5HRVJQUklOVF9F UlJPUl9JTkZJTEVfTk9UX09QRU5FRDoKKyAgICAgIGVycm1zZyA9IHN0cmVycm9yX3IgKGVycm5v c1swXSwgZXJyYnVmLCBlcnJidWZfc3opOworICAgICAgZXJycyA9IEZjb25zIChDQUxMTiAoRmZv cm1hdCwKKwkJCSAgIGJ1aWxkX3N0cmluZyAoIkNvdWxkIG5vdCBvcGVuICVzOiAlc1xuIiksCisJ CQkgICBidWlsZF9zdHJpbmcgKGZpbGUpLAorCQkJICAgYnVpbGRfc3RyaW5nIChlcnJtc2cpKSwK KwkJICAgIGVycnMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGSU5HRVJQUklOVF9FUlJPUl9J TkZJTEVfTk9UX1JFR1VMQVI6CisgICAgICBlcnJzID0gRmNvbnMgKENBTExOIChGZm9ybWF0LAor CQkJICAgYnVpbGRfc3RyaW5nICgiJXMgaXMgbm90IGEgcmVndWxhciBmaWxlIiksCisJCQkgICBi dWlsZF9zdHJpbmcgKGZpbGUpKSwKKwkJICAgIGVycnMpOworICAgICAgYnJlYWs7CisgICAgY2Fz ZSBGSU5HRVJQUklOVF9FUlJPUl9CVUZGRVJfU0laRToKKyAgICAgIGVycnMgPSBGY29ucyAoQ0FM TE4gKEZmb3JtYXQsCisJCQkgICBidWlsZF9zdHJpbmcgKCIlczogZmlsZSB0b28gYmlnIiksCisJ CQkgICBidWlsZF9zdHJpbmcgKGZpbGUpKSwKKwkJICAgIGVycnMpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSBGSU5HRVJQUklOVF9FUlJPUl9CVUZGRVJfQUxMT0NBVElPTjoKKyAgICBjYXNlIEZJ TkdFUlBSSU5UX0VSUk9SX0ZQU1RPUkVfQUxMT0NBVElPTjoKKyAgICAgIGVycm1zZyA9IHN0cmVy cm9yX3IgKGVycm5vc1swXSwgZXJyYnVmLCBlcnJidWZfc3opOworICAgICAgZXJycyA9IEZjb25z IChDQUxMTiAoRmZvcm1hdCwKKwkJCSAgIGJ1aWxkX3N0cmluZyAoIm1hbGxvYzogJXNcbiIpLAor CQkJICAgYnVpbGRfc3RyaW5nKGVycm1zZykpLAorCQkgICAgZXJycyk7CisgICAgICBicmVhazsK KyAgICBjYXNlIEZJTkdFUlBSSU5UX0VSUk9SX0lORklMRV9SRUFEOgorICAgICAgZXJycyA9IEZj b25zIChDQUxMTiAoRmZvcm1hdCwKKwkJCSAgIGJ1aWxkX3N0cmluZyAoIkNvdWxkIG5vdCByZWFk ICVzIiksCisJCQkgICBidWlsZF9zdHJpbmcgKGZpbGUpKSwKKwkJICAgIGVycnMpOworICAgICAg YnJlYWs7CisgICAgY2FzZSBGSU5HRVJQUklOVF9FUlJPUl9IQVNIX05PVF9GT1VORDoKKyAgICAg IGVycnMgPSBGY29ucyAoQ0FMTE4gKEZmb3JtYXQsCisJCQkgICBidWlsZF9zdHJpbmcgKCIlczog bWlzc2luZyBmaW5nZXJwcmludCIpLAorCQkJICAgYnVpbGRfc3RyaW5nIChmaWxlKSksCisJCSAg ICBlcnJzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRklOR0VSUFJJTlRfRVJST1JfSEFTSF9U T09fTUFOWToKKyAgICAgIGVycnMgPSBGY29ucyAoQ0FMTE4gKEZmb3JtYXQsCisJCQkgICBidWls ZF9zdHJpbmcgKCJGaW5nZXJwcmludCBpcyBub3QgdW5pcXVlIGluIGZpbGUgJXMiKSwKKwkJCSAg IGJ1aWxkX3N0cmluZyAoZmlsZSkpLAorCQkgICAgZXJycyk7CisgICAgICBicmVhazsKKyAgICBj YXNlIEZJTkdFUlBSSU5UX0VSUk9SX09VVEZJTEVfQ1JFQVRJT046CisgICAgICBlcnJtc2cgPSBz dHJlcnJvcl9yIChlcnJub3NbMF0sIGVycmJ1ZiwgZXJyYnVmX3N6KTsKKyAgICAgIGVycnMgPSBG Y29ucyAoQ0FMTE4gKEZmb3JtYXQsCisJCQkgICBidWlsZF9zdHJpbmcgKCJFcnJvciBjcmVhdGlu ZyAlczogJXNcbiIpLAorCQkJICAgYnVpbGRfc3RyaW5nIChvdXRmaWxlKSwKKwkJCSAgIGJ1aWxk X3N0cmluZyAoZXJybXNnKSksCisJCSAgICBlcnJzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug RklOR0VSUFJJTlRfRVJST1JfT1VURklMRV9XUklURToKKyAgICAgIGVycm1zZyA9IHN0cmVycm9y X3IgKGVycm5vc1swXSwgZXJyYnVmLCBlcnJidWZfc3opOworICAgICAgZXJycyA9IEZjb25zIChD QUxMTiAoRmZvcm1hdCwgYnVpbGRfc3RyaW5nICgiRXJyb3Igd3JpdGluZyAlczogJXNcbiIpLAor CQkJICAgYnVpbGRfc3RyaW5nIChvdXRmaWxlKSwKKwkJCSAgIGJ1aWxkX3N0cmluZyAoZXJybXNn KSksCisJCSAgICBlcnJzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRklOR0VSUFJJTlRfRVJS T1JfTk9fSU5QTEFDRToKKyAgICAgIGVycnMgPSBGY29ucyAoYnVpbGRfc3RyaW5nICgiSW5wbGFj ZSBtb2RpZmljYXRpb24gZGlzYWxsb3dlZCIpLAorCQkgICAgZXJycyk7CisgICAgICBicmVhazsK KyAgICBjYXNlIEZJTkdFUlBSSU5UX0VSUk9SX1JBV19OT19ESUdFU1Q6CisgICAgICBlcnJzID0g RmNvbnMgKGJ1aWxkX3N0cmluZyAoIkludGVybmFsIGVycm9yIiksCisJCSAgICBlcnJzKTsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgRklOR0VSUFJJTlRfRVJST1JfREFUQV9PVkVSRkxPVzoKKyAg ICAgIGVycnMgPSBGY29ucyAoYnVpbGRfc3RyaW5nICgiRGF0YSBleGNlZWRzIGF2YWlsYWJsZSBz cGFjZSIpLAorCQkgICAgZXJycyk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg ZXJycyA9IEZjb25zIChidWlsZF9zdHJpbmcgKCJVbnJlY29nbml6ZWQgZmluZ2VycHJpbnQgZXJy b3IiKSwKKwkJICAgIGVycnMpOworICAgIH0KKyAgcmV0dXJuIGVycnM7Cit9CisKK3N0YXRpYyBM aXNwX09iamVjdAorbWFrZV9mbGFnX2xpc3QoZW51bSBFQ0ZHX0ZMQUcgZmxhZ3MpCit7CisgIExp c3BfT2JqZWN0IHIgPSBRbmlsOworICBpZiAoZmxhZ3MgJiBFQ0ZHX0VWQUxfU0hJTSkKKyAgICBy ID0gRmNvbnMgKFFzaGltLCByKTsKKyAgaWYgKGZsYWdzICYgRUNGR19FVkFMX1NURElOKQorICAg IHIgPSBGY29ucyAoUXN0ZGluLCByKTsKKyAgaWYgKGZsYWdzICYgRUNGR19FVkFMX0FSR1MpCisg ICAgciA9IEZjb25zIChRYXJncywgcik7CisgIGlmIChmbGFncyAmIEVDRkdfQkFSRSkKKyAgICBy ID0gRmNvbnMgKFFiYXJlLCByKTsKKyAgaWYgKGZsYWdzICYgRUNGR19OT05FRElUT1IpCisgICAg ciA9IEZjb25zIChRbm9uZWRpdG9yLCByKTsKKyAgaWYgKGZsYWdzICYgRUNGR19DT05GSUdVUkVE KQorICAgIHIgPSBGY29ucyAoUWNvbmZpZ3VyZWQsIHIpOworICByZXR1cm4gcjsKK30KKworc3Rh dGljIExpc3BfT2JqZWN0CittYWtlX2V4ZWN1dGFibGVfY3VzdG9tX3NldHRpbmdzIChleGVfY29u ZmlnX2hlYWRlciAqY2ZnLCBwdHJkaWZmX3Qgc2hpbV9zaXplKQoreworICBpZiAoY2ZnID09IE5V TEwpCisgICAgcmV0dXJuIFFuaWw7CisgIExpc3BfT2JqZWN0IHIgPSBRbmlsOworICByID0gRmNv bnMgKCBsaXN0MiAoUXNoaW0sIG1ha2Vfc3RyaW5nIChjZmctPnNoaW0sCisJCQkJCSBzdHJubGVu KGNmZy0+c2hpbSwKKwkJCQkJCSBzaGltX3NpemUpKSksCisJICAgICAgcik7CisgIHIgPSBGY29u cyAoIGxpc3QyIChRZHVtcF9maWxlX2Jhc2UsCisJCSAgICAgbWFrZV9zdHJpbmcgKGNmZy0+YXJn djBfYmFzZSwKKwkJCQkgIHN0cm5sZW4oY2ZnLT5hcmd2MF9iYXNlLAorCQkJCQkgIEVDRkdfQVJH VjBfQkFTRV9TSVpFKSkpLAorCSAgICAgIHIpOworICByID0gRmNvbnMgKCBsaXN0MiAoUWZsYWdz LAorCQkgICAgIG1ha2VfZmxhZ19saXN0KGNmZy0+ZmxhZ3MpKSwKKwkgICAgICByKTsKKyAgcmV0 dXJuIHI7Cit9CisKK3N0YXRpYyBMaXNwX09iamVjdAorbWFrZV9leGVjdXRhYmxlX2ZpbmdlcnBy aW50X2RhdGEgKHN0cnVjdCBmaW5nZXJwcmludF9zdG9yYWdlX2hlYWRlciAqc3RvcmUsCisJCQkJ ICBwdHJkaWZmX3QgbWF4X3NoaW1fc2l6ZSkKK3sKKyAgTGlzcF9PYmplY3QgcmVzdWx0ID0KKyAg ICBtYWtlX2V4ZWN1dGFibGVfY3VzdG9tX3NldHRpbmdzICgoZXhlX2NvbmZpZ19oZWFkZXIgKikg c3RvcmUtPmRhdGEsCisJCQkJICAgICBtYXhfc2hpbV9zaXplKTsKKyAgY29uc3QgdWludDY0X3Qg aW50bWFzayA9IH4oKH4wTExVKSA8PCBGSVhOVU1fQklUUyk7CisgIC8qIElmIHRoaXMgZXZlciBv dmVyZmxvd3MsIHNvbWV0aGluZyB3b3VsZCBoYXZlIHRvIGJlIGNvcnJ1cHRlZAorICAgICB3ZSBh cmUgbm90IGxvb2tpbmcgYXQgYSByZWFsIGZpbmdlcnByaW50X3N0b3JhZ2VfaGVhZGVyICovCisg IExpc3BfT2JqZWN0IHN0b3JlX3NpemUgPSBtYWtlX2ZpeG51bSAoaW50bWFzayAmIHN0b3JlLT5z aXplKTsKKyAgTGlzcF9PYmplY3QgZnBfdmVjID0gbWFrZV92ZWN0b3IgKEZJTkdFUlBSSU5UX0hB U0hfU0laRSwgUW5pbCk7CisgIExpc3BfT2JqZWN0IHBjX2ZwX3ZlYyA9IG1ha2VfdmVjdG9yIChG SU5HRVJQUklOVF9IQVNIX1NJWkUsIFFuaWwpOworICBmb3IgKHB0cmRpZmZfdCBpID0gMDsgaSA8 IEZJTkdFUlBSSU5UX0hBU0hfU0laRTsgaSsrKQorICAgIHsKKyAgICAgIEFTRVQgKGZwX3ZlYywg aSwgbWFrZV9maXhudW0oc3RvcmUtPmhhc2hbaV0pKTsKKyAgICAgIEFTRVQgKHBjX2ZwX3ZlYywg aSwgbWFrZV9maXhudW0oc3RvcmUtPnByaXN0aW5lX2hhc2hfY1tpXSkpOworICAgIH0KKworICBy ZXN1bHQgPSBsaXN0NCAobGlzdDIgKFFwcmlzdGluZV9maW5nZXJwcmludF9jb21wbGVtZW50LCBw Y19mcF92ZWMpLAorCQkgIGxpc3QyIChRZmluZ2VycHJpbnQsIGZwX3ZlYyksCisJCSAgbGlzdDIg KFFzaXplLCBzdG9yZV9zaXplKSwKKwkJICByZXN1bHQpOworICByZXR1cm4gcmVzdWx0OworfQor CitERUZVTiAoImdldC1lbWFjcy1leGVjdXRhYmxlLWN1c3RvbS1zZXR0aW5ncyIsCisgICAgICAg RmdldF9lbWFjc19leGVjdXRhYmxlX2N1c3RvbV9zZXR0aW5ncywKKyAgICAgICBTZ2V0X2VtYWNz X2V4ZWN1dGFibGVfY3VzdG9tX3NldHRpbmdzLAorICAgICAgIDAsIDAsIDAsCisgICAgICAgZG9j OiAvKiBHZXQgaGFyZC1jb2RlZCBvcHRpb25zIGVtYmVkZGVkIGluIGN1cnJlbnQgZW1hY3MgZXhl Y3V0YWJsZS4KK1JldHVybnMgYSBsaXN0IG9mCitleGVjdXRhYmxlIGNvbmZpZ3VyYXRpb24gZmxh Z3MKK2xhc3QtcmVzb3J0IGJhc2VuYW1lIGZvciBkdW1wIGZpbGUKK3N0cmluZyBvZiB0aGUgc2hp bSBwcm9ncmFtLCBpZiBhbnkuKi8pCisgICh2b2lkKQoreworICByZXR1cm4gbWFrZV9leGVjdXRh YmxlX2N1c3RvbV9zZXR0aW5ncyAoKGV4ZV9jb25maWdfaGVhZGVyICopIGV4ZV9jb25maWcsIEVD RkdfU0hJTV9TSVpFKTsKK30KKworCitERUZVTiAoImdldC1lbWFjcy1leGVjdXRhYmxlLWZpbmdl cnByaW50LWRhdGEiLAorICAgICAgIEZnZXRfZW1hY3NfZXhlY3V0YWJsZV9maW5nZXJwcmludF9k YXRhLAorICAgICAgIFNnZXRfZW1hY3NfZXhlY3V0YWJsZV9maW5nZXJwcmludF9kYXRhLAorICAg ICAgIDEsIDIsIDAsCisgICAgICAgZG9jOiAvKiBHZXQgZGF0YSBpbiBmaW5nZXJwcmludCBzdG9y YWdlIGZyb20gc3BlY2lmaWVkIGVtYWNzIGV4ZWN1dGFibGUuCitSZXR1cm5zIGEgbGlzdCBvZgor b25lcy1jb21wbGVtZW50IG9mIHRoZSBwcmlzdGluZSBmaW5nZXJwcmludCBoYXNoCit2YWx1ZSBv ZiB0aGUgZmluZ2VycHJpbnQgaGFzaCBhcyBzZWVuIGJ5IHRoZSBlbWFjcyBydW50aW1lCitzaXpl IG9mIHRoZSBkYXRhIHNlZ21lbnQgZm9sbG93aW5nIHRoZSBmaW5nZXJwcmludAordGhlIGVtYWNz IGV4ZWN1dGFibGUgY3VzdG9tIHNldHRpbmdzCisoc2VlIGdldC1lbWFjcy1leGVjdXRhYmxlLWN1 c3RvbS1zZXR0aW5ncykuCitUaGUgc2l6ZSBvZiB0aGUgc2hpbSBwcm9ncmFtIHJldHVybmVkIHdp bGwgYmUgdHJ1bmNhdGVkIHRvIHRoZSBzcGVjaWZpZWQgbWF4aW11bQorc2hpbSBzaXplLCBvciB0 aGUgbWF4aW11bSBzaXplIGFsbG93ZWQgZm9yIHRoZSBzaGltIG9mIHRoZSBjdXJyZW50CitlbWFj cyBleGVjdXRhYmxlIG90aGVyd2lzZS4KKwkgICAgKi8pCisgIChMaXNwX09iamVjdCBlbWFjc19l eGUsIExpc3BfT2JqZWN0IG1heF9zaGltX3NpemUpCit7CisgIGNvbnN0IHB0cmRpZmZfdCBoZHJf c3ogPSBvZmZzZXRvZiAoc3RydWN0IGZpbmdlcnByaW50X3N0b3JhZ2VfaGVhZGVyLGRhdGEpOwor ICBjb25zdCBwdHJkaWZmX3QgZXhlY2ZnX2hkcl9zeiA9IG9mZnNldG9mIChleGVfY29uZmlnX2hl YWRlciwgc2hpbSk7CisKKyAgY2hhciAqZmlsZW5hbWU7CisgIHB0cmRpZmZfdCBmaWxlbmFtZV9z aXplID0gMDsKKyAgaWYgKE5JTFAgKGVtYWNzX2V4ZSkpCisgICAgZW1hY3NfZXhlID0gYnVpbGRf c3RyaW5nIChpbml0aWFsX2VtYWNzX2V4ZWN1dGFibGUpOworICBpZiAoIVNUUklOR1AoZW1hY3Nf ZXhlKSkKKyAgICB7CisgICAgICB4c2lnbmFsMSAoUWludmFsaWRfZXhlY3V0YWJsZV9wYXRoLAor CQlDQUxMTiAoRmZvcm1hdCwKKwkJICAgICAgIGJ1aWxkX3N0cmluZyAoIkludmFsaWQgZW1hY3Mg ZXhlY3V0YWJsZSBhcmd1bWVudDogJVMiKSwKKwkJICAgICAgIGVtYWNzX2V4ZSkpOworICAgIH0K KyAgZmlsZW5hbWVfc2l6ZSA9IFNUUklOR19CWVRFUyhYU1RSSU5HIChlbWFjc19leGUpKSArIDE7 CisgIGZpbGVuYW1lID0gYWxsb2NhKGZpbGVuYW1lX3NpemUrMSk7CisgIGlmIChmaWxlbmFtZSA9 PSBOVUxMKQorICAgIHsKKyAgICAgIHhzaWduYWwxIChRZXJyb3IsCisJCUNBTExOIChGZm9ybWF0 LAorCQkgICAgICAgYnVpbGRfc3RyaW5nICgiYWxsb2NhIGZhaWxlZDogQ291bGQgbm90IGNvcHkg c3RyaW5nICclcyciKSwKKwkJICAgICAgIGVtYWNzX2V4ZSkpOworICAgIH0KKyAgaWYgKGZpbGVu YW1lX3NpemUgPD0gMSkKKyAgICB7CisgICAgICB4c2lnbmFsMSAoUWludmFsaWRfZXhlY3V0YWJs ZV9wYXRoLGJ1aWxkX3N0cmluZyAoIkVtcHR5IGV4ZWN1dGFibGUgcGF0aCIpKTsKKyAgICB9Cisg IG1lbWNweSAoZmlsZW5hbWUsIFNTREFUQSAoZW1hY3NfZXhlKSwgZmlsZW5hbWVfc2l6ZS0xKTsK KyAgZmlsZW5hbWVbZmlsZW5hbWVfc2l6ZV0gPSAwOworCisKKyAgc3RydWN0IGZpbmdlcnByaW50 X3JlcGxhY2VtZW50X29wdGlvbnMgb3B0cyA9CisgIHsKKyAgICB0cnVlLAorICAgIGZhbHNlLCAg LyogYWxsb3cgbW9kaWZ5aW5nIHRoZSBleGVjdXRhYmxlIGluLXBsYWNlICovCisgICAgLTEKKyAg fTsKKyAgaW50IGVycm5vc1szXSA9IHsgMCB9OworICBzdHJ1Y3QgZmluZ2VycHJpbnRfYnVmZmVy ICpmYjsKKyAgc3BlY3BkbF9yZWYgY291bnQgPSBTUEVDUERMX0lOREVYICgpOworICBGSU5HRVJQ UklOVF9FUlJPUiByID0KKyAgICBmaW5nZXJwcmludF9nZXRfYnVmZmVyKGZpbGVuYW1lLCBOVUxM LCAmb3B0cywgJmZiLCBlcnJub3MpOworICBpZiAociAhPSBGSU5HRVJQUklOVF9FUlJPUl9OT05F KQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IGVycnMgPSAgcHJvY2Vzc19maW5nZXJwcmludF9l cnJvcnMgKHIsIGVycm5vcywgZmlsZW5hbWUsIE5VTEwpOworICAgICAgaWYgKCFOSUxQKGVycnMp KQorCXsKKwkgIHhzaWduYWwgKFFjdXN0b21fZXhlY3V0YWJsZV9lcnJvciwgZXJycyk7CisJfQor ICAgIH0KKyAgaWYgKGZiID09IE5VTEwpCisgICAgeworICAgICAgeHNpZ25hbDEgKFFjdXN0b21f ZXhlY3V0YWJsZV9lcnJvciwgYnVpbGRfc3RyaW5nICgiVW5rb3duIGZpbmdlcnByaW50IGVycm9y IikpOworICAgIH0KKyAgcmVjb3JkX3Vud2luZF9wcm90ZWN0X3B0cihyZWxlYXNlX2ZpbmdlcnBy aW50X2J1ZmZlciwgKHZvaWQgKikgZmIpOworICB1aW50NjRfdCBlY19zaXplID0gZmItPmhkci0+ c2l6ZTsKKyAgZXhlX2NvbmZpZ19oZWFkZXIgKmVjaCA9IChleGVfY29uZmlnX2hlYWRlciAqKSBm Yi0+aGRyLT5kYXRhOworICB1aW50NjRfdCBmbGFnczAgPSBlY2gtPmZsYWdzOworICBjaGFyICph cmd2MF9iYXNlMCA9IGVjaC0+YXJndjBfYmFzZTsKKyAgdWludDY0X3QgZWNfc2hpbV9zeiA9IGVj X3NpemUgLSBvZmZzZXRvZiAoZXhlX2NvbmZpZ19oZWFkZXIsIHNoaW0pOworICBjaGFyICpzaGlt MCA9IGVjaC0+c2hpbTsKKworICBpZiAoTklMUCAobWF4X3NoaW1fc2l6ZSkpCisgICAgbWF4X3No aW1fc2l6ZSA9IG1ha2VfZml4bnVtIChlY19zaGltX3N6LTEpOworICBpZiAoIUZJWE5VTVAobWF4 X3NoaW1fc2l6ZSkpCisgICAgeHNpZ25hbDEoUWVycm9yLAorCSAgICAgQ0FMTE4oRmZvcm1hdCwK KwkJICAgYnVpbGRfc3RyaW5nICgiSW52YWxpZCBtYXhpbXVtIHNoaW0gc2l6ZSBhcmd1bWVudDog JXMiKSwKKwkJICAgbWF4X3NoaW1fc2l6ZSkpOworICBwdHJkaWZmX3QgbWF4X3N6ID0gWExJICht YXhfc2hpbV9zaXplKTsKKyAgaWYgKG1heF9zeiA8IDApCisJeHNpZ25hbDEoUWVycm9yLAorCQkg Q0FMTE4oRmZvcm1hdCwKKwkJICAgICAgIGJ1aWxkX3N0cmluZyAoIkludmFsaWQgbWF4aW11bSBz aXplIGFyZ3VtZW50OiAlcyIpLAorCQkgICAgICAgbWF4X3NoaW1fc2l6ZSkpOworCisgIHB0cmRp ZmZfdCBsaW0gPSBoZHJfc3ogKyBleGVjZmdfaGRyX3N6ICsgbWF4X3N6ICsgMTsKKyAgdW5zaWdu ZWQgY2hhciAqc3RvcmUgPSB4bWFsbG9jIChsaW0pOworICBpZiAoc3RvcmUgPT0gTlVMTCkKKyAg ICB7CisgICAgICB4c2lnbmFsKFFlcnJvciwKKwkgICAgICBidWlsZF9zdHJpbmcgKCJDb3VsZCBu b3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiCisJCQkgICAgImZpbmdlcnByaW50IHN0b3JhZ2UgZGF0 YSIpKTsKKyAgICB9CisgIHJlY29yZF91bndpbmRfcHJvdGVjdF9wdHIoeGZyZWUsKHZvaWQgKikg c3RvcmUpOworICBtZW1jcHkgKHN0b3JlLCAodW5zaWduZWQgY2hhciAqKSBmYi0+aGRyLCBsaW0t MSk7CisgIHN0b3JlW2xpbS0xXSA9IDA7CisKKyAgc3RydWN0IGZpbmdlcnByaW50X3N0b3JhZ2Vf aGVhZGVyICpoZHIgPQorICAgIChzdHJ1Y3QgZmluZ2VycHJpbnRfc3RvcmFnZV9oZWFkZXIgKikg c3RvcmU7CisKKyAgcmV0dXJuIHVuYmluZF90byAoY291bnQsIG1ha2VfZXhlY3V0YWJsZV9maW5n ZXJwcmludF9kYXRhIChoZHIsIG1heF9zeikpOworCit9CisKK3N0YXRpYyB1aW50NjRfdAorcHJv Y2VzczFfY3VzdG9tX2V4ZWN1dGFibGVfZmxhZyAodWludDY0X3QgZmxhZ3MsIExpc3BfT2JqZWN0 IGRlbHRhX2ZsYWcsIGludCBwb3MpCit7CisgIGlmIChFUSAoZGVsdGFfZmxhZyxRb3JpZ2luYWwp KQorICAgIHsKKyAgICAgIGlmIChwb3MgPiAwKQorCXsKKwkgIHhzaWduYWwxIChRaW52YWxpZF9l eGVjdXRhYmxlX2ZsYWcsCisJCSAgICBDQUxMTiAoRmZvcm1hdCwKKwkJCSAgIGJ1aWxkX3N0cmlu ZyAoIiVzIGZsYWcgb25seSBhbGxvd2VkIGluIGlzb2xhdGlvbiAiCisJCQkJCSAib3IgYXQgYmVn aW5uaW5nIG9mIGZsYWcgbGlzdCIpLAorCQkJICAgZGVsdGFfZmxhZykpOworCX0KKyAgICB9Cisg IGVsc2UgaWYgKEVRIChkZWx0YV9mbGFnLCBRY2xlYXIpKQorICAgIHsKKyAgICAgIGZsYWdzID0g RUNGR19OT05FOworICAgIH0KKyAgZWxzZSBpZiAoRVEgKGRlbHRhX2ZsYWcsIFFub25lZGl0b3Ip KQorICAgIGZsYWdzIHw9IEVDRkdfTk9ORURJVE9SOworICBlbHNlIGlmIChFUSAoZGVsdGFfZmxh ZywgUXN0ZGluKSkKKyAgICBmbGFncyB8PSBFQ0ZHX0VWQUxfU1RESU47CisgIGVsc2UgaWYgKEVR IChkZWx0YV9mbGFnLCBRY29tbWFuZF9saW5lX2FyZ3MpIHx8IEVRIChkZWx0YV9mbGFnLCBRYXJn cykpCisgICAgZmxhZ3MgfD0gRUNGR19FVkFMX0FSR1M7CisgIGVsc2UgaWYgKEVRIChkZWx0YV9m bGFnLCBRYmFyZSkpCisgICAgZmxhZ3MgfD0gRUNGR19CQVJFOworICBlbHNlIGlmIChFUSAoZGVs dGFfZmxhZywgUXNoaW0pKQorICAgIGZsYWdzIHw9IEVDRkdfRVZBTF9TSElNOworICBlbHNlIGlm IChFUSAoZGVsdGFfZmxhZywgUW5vc2hpbSkpCisgICAgZmxhZ3MgJj0gKHVpbnQ2NF90KSB+KCh1 aW50NjRfdCkgRUNGR19FVkFMX1NISU0pOworICBlbHNlIGlmIChFUSAoZGVsdGFfZmxhZywgUW5v c3RkaW4pKQorICAgIGZsYWdzICY9ICh1aW50NjRfdCkgfigodWludDY0X3QpIEVDRkdfRVZBTF9T VERJTik7CisgIGVsc2UgaWYgKEVRIChkZWx0YV9mbGFnLCBRbm9hcmdzKSkKKyAgICBmbGFncyAm PSAodWludDY0X3QpIH4oKHVpbnQ2NF90KSBFQ0ZHX0VWQUxfQVJHUyk7CisgIGVsc2UgaWYgKEVR IChkZWx0YV9mbGFnLCBRbm90X2JhcmUpKQorICAgIGZsYWdzICY9ICh1aW50NjRfdCkgfigodWlu dDY0X3QpIEVDRkdfQkFSRSk7CisgIGVsc2UgaWYgKEVRIChkZWx0YV9mbGFnLCBRZWRpdG9yKSkK KyAgICBmbGFncyAmPSAodWludDY0X3QpIH4oKHVpbnQ2NF90KSBFQ0ZHX05PTkVESVRPUik7Cisg IGVsc2UgaWYgKEVRIChkZWx0YV9mbGFnLCBRY29uZmlndXJlZCkpCisgICAgZmxhZ3MgfD0gRUNG R19DT05GSUdVUkVEOworICBlbHNlIGlmIChFUSAoZGVsdGFfZmxhZywgUXVuY29uZmlndXJlZCkp CisgICAgZmxhZ3MgJj0gKHVpbnQ2NF90KSB+KCh1aW50NjRfdCkgRUNGR19DT05GSUdVUkVEKTsK KyAgZWxzZQorICAgIHsKKyAgICAgIHhzaWduYWwxIChRaW52YWxpZF9leGVjdXRhYmxlX2ZsYWcs IGRlbHRhX2ZsYWcpOworICAgIH0KKyAgcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgdWludDY0 X3QKK3Byb2Nlc3NfY3VzdG9tX2V4ZWN1dGFibGVfZmxhZ3MgKHVpbnQ2NF90IGZsYWdzMCwgTGlz cF9PYmplY3QgZGVsdGFfZmxhZ3MpCit7CisgIHVpbnQ2NF90IGZsYWdzID0gRUNGR19OT05FOwor CisgIGlmIChOSUxQKGRlbHRhX2ZsYWdzKSkKKyAgICB7CisgICAgICAvKiBubyBmbGFncyAqLwor ICAgICAgZmxhZ3MgPSBFQ0ZHX05PTkU7CisgICAgfQorICBlbHNlIGlmIChDT05TUCAoZGVsdGFf ZmxhZ3MpKQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IHRhaWwgPSBkZWx0YV9mbGFnczsKKyAg ICAgIGludCBwb3MgPSAwOworICAgICAgRk9SX0VBQ0hfVEFJTCAodGFpbCkKKwl7CisJICBmbGFn cyA9IHByb2Nlc3MxX2N1c3RvbV9leGVjdXRhYmxlX2ZsYWcgKGZsYWdzLAorCQkJCQkJICAgWENB UiAodGFpbCksCisJCQkJCQkgICBwb3MpOworCSAgcG9zKys7CisJfQorICAgIH0KKyAgZWxzZQor ICAgIHsKKyAgICAgIGZsYWdzID0gcHJvY2VzczFfY3VzdG9tX2V4ZWN1dGFibGVfZmxhZyAoZmxh Z3MsZGVsdGFfZmxhZ3MsLTEpOworICAgIH0KKyAgLyogc2V0IHRoZSBjb25maWd1cmVkIGZsYWcg aWYgYW55IG9wdGlvbiBpcyBzZXQgKi8KKyAgaWYgKGZsYWdzICYgKHVpbnQ2NF90KSB+KCh1aW50 NjRfdCkgRUNGR19DT05GSUdVUkVEKSkKKyAgICAgIGZsYWdzIHw9IEVDRkdfQ09ORklHVVJFRDsK KworICByZXR1cm4gZmxhZ3M7Cit9CisKK0RFRlVOICgibWFrZS1jdXN0b20tZW1hY3MtZXhlY3V0 YWJsZSIsCisgICAgICAgRm1ha2VfY3VzdG9tX2VtYWNzX2V4ZWN1dGFibGUsIFNtYWtlX2N1c3Rv bV9lbWFjc19leGVjdXRhYmxlLCAxLCA2LCAwLAorICAgICAgIGRvYzogLyogTWFrZSBhIGN1c3Rv bWl6ZWQgY29weSBvZiBhbiBlbWFjcyBleGVjdXRhYmxlLgorVXNlciBzcGVjaWZpZXMgb3B0aW9u cyB0byBiZSBzdG9yZWQgaW50byBleGVjdXRhYmxlICovKQorICAoTGlzcF9PYmplY3Qgb3V0Zmls ZSwgTGlzcF9PYmplY3QgZmxhZ19scywgTGlzcF9PYmplY3QgYmFzZW5hbWUsCisgICBMaXNwX09i amVjdCBzaGltLCBMaXNwX09iamVjdCBoYXNoLCBMaXNwX09iamVjdCBlbWFjc19leGUpCit7Cisg IC8qIHB0cmRpZmZfdCBtYXhfc2hpbV9zaXplID0gKGNoYXIgKikgKGV4ZV9jb25maWcgKyBzaXpl b2YgKmV4ZV9jb25maWcpICovCisgIC8qICAgLSAoY2hhciAqKSBleGVfY29uZmlnLT5zLnNoaW07 ICovCisKKyAgYm9vbCByZXNldF9oYXNoID0gKEVRIChoYXNoLCBRcmVzZXQpCisJCSAgICAgfHwg RVEgKGhhc2gsIFFwcmlzdGluZSkpOworICBib29sIGtlZXBfaGFzaCA9IEVRIChoYXNoLCBRb3Jp Z2luYWwpIHx8IEVRIChoYXNoLCBRbmlsKTsKKyAgYm9vbCBtb2RpZnlfYmVmb3JlID0gRVEgKGhh c2gsUWN1c3RvbSk7IC8vIHVwZGF0ZSBiZWZvcmUgaGFzaGluZworICBib29sIG1vZGlmeV9hZnRl ciA9IEVRIChoYXNoLFFzdGFuZGFyZCk7IC8vIHVwZGF0ZSBhZnRlciBoYXNoaW5nCisgIGlmICgh bW9kaWZ5X2JlZm9yZSAmJiAhbW9kaWZ5X2FmdGVyICYmICFyZXNldF9oYXNoKQorICAgIHsKKyAg ICAgIHhzaWduYWwxIChRY3VzdG9tX2V4ZWN1dGFibGVfZXJyb3IsCisJCUNBTExOIChGZm9ybWF0 LAorCQkgICAgICAgYnVpbGRfc3RyaW5nICgiSW52YWxpZCBoYXNoIG9wdGlvbjogJVMiKSwKKwkJ ICAgICAgIGhhc2gpKTsKKyAgICB9CisgIGJvb2wga2VlcF9iYXNlbmFtZSA9IEVRIChiYXNlbmFt ZSwgUW9yaWdpbmFsKSB8fCBFUSAoYmFzZW5hbWUsIFFuaWwpOworICBib29sIGNsZWFyX2Jhc2Vu YW1lID0gKEVRIChiYXNlbmFtZSwgUXJlc2V0KSB8fCBFUSAoYmFzZW5hbWUsIFFjbGVhcikpOwor ICBib29sIGtlZXBfc2hpbSA9IEVRIChzaGltLCBRb3JpZ2luYWwpOworICBib29sIGNsZWFyX3No aW0gPSAoRVEgKHNoaW0sIFFyZXNldCkgfHwgRVEgKHNoaW0sIFFjbGVhcikpOworICBjaGFyICpm aWxlbmFtZTsKKyAgcHRyZGlmZl90IGZpbGVuYW1lX3NpemUgPSAwOworICBpZiAoTklMUCAoZW1h Y3NfZXhlKSkKKyAgICBlbWFjc19leGUgPSBidWlsZF9zdHJpbmcgKGluaXRpYWxfZW1hY3NfZXhl Y3V0YWJsZSk7CisgIGlmICghU1RSSU5HUChlbWFjc19leGUpKQorICAgIHsKKyAgICAgIHhzaWdu YWwxIChRaW52YWxpZF9leGVjdXRhYmxlX3BhdGgsCisJCUNBTExOIChGZm9ybWF0LAorCQkgICAg ICAgYnVpbGRfc3RyaW5nICgiSW52YWxpZCBlbWFjcyBleGVjdXRhYmxlIGFyZ3VtZW50OiAlUyIp LAorCQkgICAgICAgZW1hY3NfZXhlKSk7CisgICAgfQorICBmaWxlbmFtZV9zaXplID0gU1RSSU5H X0JZVEVTKFhTVFJJTkcgKGVtYWNzX2V4ZSkpICsgMTsKKyAgZmlsZW5hbWUgPSBhbGxvY2EoZmls ZW5hbWVfc2l6ZSsxKTsKKyAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgeworICAgICAgeHNp Z25hbDEgKFFlcnJvciwKKwkJQ0FMTE4gKEZmb3JtYXQsCisJCSAgICAgICBidWlsZF9zdHJpbmcg KCJhbGxvY2EgZmFpbGVkOiBDb3VsZCBub3QgY29weSBzdHJpbmcgJyVzJyIpLAorCQkgICAgICAg ZW1hY3NfZXhlKSk7CisgICAgfQorICBpZiAoZmlsZW5hbWVfc2l6ZSA8PSAxKQorICAgIHsKKyAg ICAgIHhzaWduYWwxIChRaW52YWxpZF9leGVjdXRhYmxlX3BhdGgsYnVpbGRfc3RyaW5nICgiRW1w dHkgZXhlY3V0YWJsZSBwYXRoIikpOworICAgIH0KKyAgbWVtY3B5IChmaWxlbmFtZSwgU1NEQVRB IChlbWFjc19leGUpLCBmaWxlbmFtZV9zaXplLTEpOworICBmaWxlbmFtZVtmaWxlbmFtZV9zaXpl XSA9IDA7CisKKyAgY2hhciAqb3V0ZmlsZW5hbWU7CisgIHB0cmRpZmZfdCBvdXRmaWxlbmFtZV9z aXplID0gMDsKKyAgaWYgKCFTVFJJTkdQKG91dGZpbGUpKQorICAgICAgeHNpZ25hbDIgKFFpbnZh bGlkX2V4ZWN1dGFibGVfcGF0aCwgb3V0ZmlsZSwgYnVpbGRfc3RyaW5nICgiTm90IGEgc3RyaW5n IikpOworICBvdXRmaWxlbmFtZV9zaXplID0gU1RSSU5HX0JZVEVTKFhTVFJJTkcgKG91dGZpbGUp KSArIDE7CisgIG91dGZpbGVuYW1lID0gKGNoYXIgKikgYWxsb2NhKG91dGZpbGVuYW1lX3NpemUr MSk7CisgIGlmIChvdXRmaWxlbmFtZSA9PSBOVUxMKQorICAgIHsKKyAgICAgIHhzaWduYWwxIChR ZXJyb3IsCisJCUNBTExOIChGZm9ybWF0LAorCQkgICAgICAgYnVpbGRfc3RyaW5nICgiYWxsb2Nh IGZhaWxlZDogQ291bGQgbm90IGNvcHkgc3RyaW5nICclcyciKSwKKwkJICAgICAgIG91dGZpbGUp KTsKKyAgICB9CisgIGlmIChvdXRmaWxlbmFtZV9zaXplIDw9IDEpCisgICAgICB4c2lnbmFsMSAo UWludmFsaWRfZXhlY3V0YWJsZV9wYXRoLGJ1aWxkX3N0cmluZyAoIkVtcHR5IGV4ZWN1dGFibGUg cGF0aCIpKTsKKyAgbWVtY3B5IChvdXRmaWxlbmFtZSwgU1NEQVRBIChvdXRmaWxlKSwgb3V0Zmls ZW5hbWVfc2l6ZS0xKTsKKyAgb3V0ZmlsZW5hbWVbb3V0ZmlsZW5hbWVfc2l6ZV0gPSAwOworCisK KyAgLyogTm93IGhhdmUgYWxsIHJlcXVpcmVkIGluZm9ybWF0aW9uICovCisgIHN0cnVjdCBmaW5n ZXJwcmludF9yZXBsYWNlbWVudF9vcHRpb25zIG9wdHMgPQorICB7CisgICAgZmFsc2UsCisgICAg dHJ1ZSwgIC8qIGFsbG93IG1vZGlmeWluZyB0aGUgZXhlY3V0YWJsZSBpbi1wbGFjZSAqLworICAg IC0xCisgIH07CisKKyAgaW50IGVycm5vc1szXSA9IHsgMCB9OworICBzdHJ1Y3QgZmluZ2VycHJp bnRfYnVmZmVyICpmYjsKKyAgc3BlY3BkbF9yZWYgY291bnQgPSBTUEVDUERMX0lOREVYICgpOwor ICBGSU5HRVJQUklOVF9FUlJPUiByID0KKyAgICBmaW5nZXJwcmludF9nZXRfYnVmZmVyKGZpbGVu YW1lLCBvdXRmaWxlbmFtZSwgJm9wdHMsICZmYiwgZXJybm9zKTsKKyAgaWYgKHIgIT0gRklOR0VS UFJJTlRfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICBMaXNwX09iamVjdCBlcnJzID0gIHByb2Nl c3NfZmluZ2VycHJpbnRfZXJyb3JzIChyLCBlcnJub3MsIGZpbGVuYW1lLCBvdXRmaWxlbmFtZSk7 CisgICAgICBpZiAoIU5JTFAoZXJycykpCisJeworCSAgeHNpZ25hbCAoUWN1c3RvbV9leGVjdXRh YmxlX2Vycm9yLCBlcnJzKTsKKwl9CisgICAgfQorICBpZiAoZmIgPT0gTlVMTCkKKyAgICB7Cisg ICAgICB4c2lnbmFsMSAoUWN1c3RvbV9leGVjdXRhYmxlX2Vycm9yLCBidWlsZF9zdHJpbmcgKCJV bmtvd24gZmluZ2VycHJpbnQgZXJyb3IiKSk7CisgICAgfQorICByZWNvcmRfdW53aW5kX3Byb3Rl Y3RfcHRyKHJlbGVhc2VfZmluZ2VycHJpbnRfYnVmZmVyLCAodm9pZCAqKSBmYik7CisgIHVpbnQ2 NF90IGVjX3NpemUgPSBmYi0+aGRyLT5zaXplOworICBleGVfY29uZmlnX2hlYWRlciAqZWNoID0g KGV4ZV9jb25maWdfaGVhZGVyICopIGZiLT5oZHItPmRhdGE7CisgIHVpbnQ2NF90IGZsYWdzMCA9 IGVjaC0+ZmxhZ3M7CisgIGNoYXIgKmFyZ3YwX2Jhc2UwID0gZWNoLT5hcmd2MF9iYXNlOworICB1 aW50NjRfdCBlY19zaGltX3N6ID0gZWNfc2l6ZSAtIG9mZnNldG9mIChleGVfY29uZmlnX2hlYWRl ciwgc2hpbSk7CisgIGNoYXIgKnNoaW0wID0gZWNoLT5zaGltOworCisgIHVpbnQ2NF90IGZsYWdz ID0gcHJvY2Vzc19jdXN0b21fZXhlY3V0YWJsZV9mbGFncyAoZmxhZ3MwLCBmbGFnX2xzKTsKKwor ICBjaGFyICpiYXNlbmFtZV9ieXRlcyA9IE5VTEw7CisgIHB0cmRpZmZfdCBiYXNlbmFtZV9zaXpl ID0gMDsKKyAgaWYgKE5JTFAgKGJhc2VuYW1lKSkKKyAgICB7CisgICAgICBrZWVwX2Jhc2VuYW1l ID0gdHJ1ZTsKKyAgICAgIGJhc2VuYW1lX2J5dGVzID0gYXJndjBfYmFzZTA7CisgICAgICBiYXNl bmFtZV9zaXplID0gRUNGR19BUkdWMF9CQVNFX1NJWkU7CisgICAgfQorICBlbHNlIGlmIChTVFJJ TkdQIChiYXNlbmFtZSkgfHwgU1lNQk9MUCAoYmFzZW5hbWUpKQorICAgIHsKKyAgICAgIGlmIChT WU1CT0xQIChiYXNlbmFtZSkpCisJYmFzZW5hbWUgPSBYU1lNQk9MIChiYXNlbmFtZSktPnUucy5u YW1lOworICAgICAgYmFzZW5hbWVfc2l6ZSA9IFNUUklOR19CWVRFUyAoWFNUUklORyAoYmFzZW5h bWUpKSArIDE7CisgICAgICBpZiAoYmFzZW5hbWVfc2l6ZSA+IEVDRkdfQVJHVjBfQkFTRV9TSVpF KQorCXsKKwkgIHhzaWduYWwxIChRaW52YWxpZF9kdW1wZmlsZV9iYXNlbmFtZSwKKwkJICAgIENB TExOIChGZm9ybWF0LAorCQkJICAgYnVpbGRfc3RyaW5nICgiTmFtZSAnJXMnIGlzIHRvbyBsb25n IC0gIgorCQkJCQkgImxpbWl0IGlzICVzIGJ5dGVzIiksCisJCQkgICBiYXNlbmFtZSwKKwkJCSAg IG1ha2VfZml4bnVtIChFQ0ZHX0FSR1YwX0JBU0VfU0laRSkpKTsKKwl9CisgICAgICBiYXNlbmFt ZV9ieXRlcyA9IGFsbG9jYSAoYmFzZW5hbWVfc2l6ZSk7CisgICAgICBpZiAoYmFzZW5hbWVfYnl0 ZXMgPT0gTlVMTCkKKwl7CisJICB4c2lnbmFsMSAoUWVycm9yLAorCQkgICAgQ0FMTE4gKEZmb3Jt YXQsCisJCQkgICBidWlsZF9zdHJpbmcgKCJhbGxvY2EgZmFpbGVkOiBjb3VsZCBub3QgY29weSAn JXMnIiksCisJCQkgICBiYXNlbmFtZSkpOworCX0KKyAgICAgIG1lbWNweSAoYmFzZW5hbWVfYnl0 ZXMsIFNTREFUQSAoYmFzZW5hbWUpLCBiYXNlbmFtZV9zaXplKTsKKyAgICB9CisgIGVsc2UKKyAg ICB7CisgICAgICB4c2lnbmFsMSAoUWludmFsaWRfZHVtcGZpbGVfYmFzZW5hbWUsCisJCUNBTExO IChGZm9ybWF0LAorCQkgICAgICAgYnVpbGRfc3RyaW5nICgiVmFsdWUgbXVzdCBiZSBhIHN0cmlu ZyAiCisJCQkJICAgICAib3Igc3ltYm9sLCBnaXZlbiAlUyIpLAorCQkgICAgICAgYmFzZW5hbWUp KTsKKyAgICB9CisKKyAgTGlzcF9PYmplY3Qgc2hpbV9zdHIgPSBRbmlsOworICBpZiAoTklMUChz aGltKSkKKyAgICB7CisgICAgICBpZiAoZmxhZ3MgJiBFQ0ZHX0VWQUxfU0hJTSkKKwkgIHNoaW1f c3RyID0gYnVpbGRfc3RyaW5nIChlY2gtPnNoaW0pOworICAgICAgZWxzZQorCXNoaW1fc3RyID0g YnVpbGRfc3RyaW5nICgiIik7CisgICAgfQorICBlbHNlIGlmIChrZWVwX3NoaW0pCisgICAgc2hp bV9zdHIgPSBidWlsZF9zdHJpbmcgKGVjaC0+c2hpbSk7CisgIGVsc2UgaWYgKGNsZWFyX3NoaW0p CisJc2hpbV9zdHIgPSBidWlsZF9zdHJpbmcgKCIiKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIC8q IHNoaW0gaXMgYW4gcy1leHByZXNzaW9uCisJIHByaW50IHRvIGEgc3RyaW5nIHRoYXQgY2FuIGJl IGV2YWx1YXRlZCAqLworICAgICAgc2hpbV9zdHIgPQorCUZwcmluMV90b19zdHJpbmcgKHNoaW0s IFFuaWwsCisJCQkgIGxpc3QoIEZjb25zIChRbGVuZ3RoLCBRbmlsKSwKKwkJCQlGY29ucyAoUWxl dmVsLCBRbmlsKSwKKwkJCQlGY29ucyAoUWNpcmNsZSwgUXQpLAorCQkJCUZjb25zIChRY2hhcnNl dF90ZXh0X3Byb3BlcnR5LCBRbmlsKSkpOworICAgICAgLyogY291bGQgdGVzdCB0aGF0IHRoZSBz dHJpbmcgcmVhZHMgYmFjayB3aXRob3V0IGVycm9yICovCisgICAgfQorICBwdHJkaWZmX3Qgc2hp bV9zdHJfc3ogPSBTVFJJTkdfQllURVMgKFhTVFJJTkcgKHNoaW1fc3RyKSkrMTsKKyAgaWYgKHNo aW1fc3RyX3N6ID49IGVjX3NoaW1fc3opCisgICAgeworICAgICAgeHNpZ25hbDIgKFFjdXN0b21f ZXhlY3V0YWJsZV9lcnJvciwKKwkJYnVpbGRfc3RyaW5nICgiU2hpbSBwcm9ncmFtIHRvbyBsYXJn ZSIpLAorCQlzaGltX3N0cik7CisgICAgfQorCisgIC8qIGRvIG5vdCBtb2RpZnkgdGhlIHByaXZh dGUgY29weSBvZiB0aGUgb3JpZ2luYWwgaGVhZGVyIGluCisgICAgIHRoZSBmaW5nZXJwcmludF9i dWZmZXIgKi8KKyAgLyogQWltIGZvciBjb3JyZWN0bmVzcywgb3B0aW1pemUgbGF0ZXIgaWYgaXQg aXMgYW4gaXNzdWUuICovCisgIHVpbnQ2NF90IGhkcl9zaXplID0KKyAgICBzaXplb2YgKHN0cnVj dCBmaW5nZXJwcmludF9zdG9yYWdlX2hlYWRlcikgKyBmYi0+aGRyLT5zaXplOworICBzdHJ1Y3Qg ZmluZ2VycHJpbnRfc3RvcmFnZV9oZWFkZXIgKmhkcgorICAgID0gKHN0cnVjdCBmaW5nZXJwcmlu dF9zdG9yYWdlX2hlYWRlciAqKSB4bWFsbG9jIChoZHJfc2l6ZSk7CisgIC8qIG1ha2Ugc3VyZSB0 aGlzIGlzIGZyZWVkICovCisgIHJlY29yZF91bndpbmRfcHJvdGVjdF9wdHIgKHhmcmVlLCBoZHIp OworICBtZW1jcHkgKCh1bnNpZ25lZCBjaGFyICopIGhkciwgKHVuc2lnbmVkIGNoYXIgKikgZmIt PmhkciwgaGRyX3NpemUpOworCisgIGV4ZV9jb25maWdfaGVhZGVyICplY19oZHIgPSAoZXhlX2Nv bmZpZ19oZWFkZXIgKikgaGRyLT5kYXRhOworICBlY19oZHItPmZsYWdzID0gZmxhZ3M7CisgIG1l bWNweSAoZWNfaGRyLT5hcmd2MF9iYXNlLCBiYXNlbmFtZV9ieXRlcyxiYXNlbmFtZV9zaXplKTsK KyAgaWYgKGJhc2VuYW1lX3NpemUgPCBFQ0ZHX0FSR1YwX0JBU0VfU0laRSkKKyAgICBtZW1zZXQg KGVjX2hkci0+YXJndjBfYmFzZSArIGJhc2VuYW1lX3NpemUsCisJICAgIDAsCisJICAgIChFQ0ZH X0FSR1YwX0JBU0VfU0laRSAtIGJhc2VuYW1lX3NpemUpKTsKKyAgbWVtc2V0IChlY19oZHItPnNo aW0sIDAsIGVjX3NoaW1fc3opOworICBtZW1jcHkgKGVjX2hkci0+c2hpbSwgU1NEQVRBIChzaGlt X3N0ciksIHNoaW1fc3RyX3N6KTsKKworICAvKiBpZiBhbGwgdGhlIGRhdGEgaXMgY2xlYXJlZCwg ZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIGZsYWcgaXMgYXMgd2VsbCAqLworICBpZiAoZWNfaGRy LT5zaGltWzBdID09IDAgJiYgZWNfaGRyLT5hcmd2MF9iYXNlWzBdID09IDAKKyAgICAgICYmICgo ZWNfaGRyLT5mbGFncyAmICh1aW50NjRfdCkgfigodWludDY0X3QpIEVDRkdfQ09ORklHVVJFRCkp ID09IDApKQorICAgIHsKKyAgICAgIGVjX2hkci0+ZmxhZ3MgPSBFQ0ZHX05PTkU7CisgICAgfQor CisgIGlmIChtb2RpZnlfYmVmb3JlKQorICAgIHsKKyAgICAgIGZpbmdlcnByaW50X3NldF9kYXRh IChmYiwgaGRyLT5zaXplLCAodW5zaWduZWQgY2hhciAqKSBlY19oZHIpOworICAgICAgaWYgKGZi LT5jb2RlICE9IEZJTkdFUlBSSU5UX0VSUk9SX05PTkUpCisJZ290byBkb25lOworICAgIH0KKwor ICBpZiAocmVzZXRfaGFzaCkKKyAgICB7CisgICAgICBmaW5nZXJwcmludF9yZXNldF9oYXNoKGZi KTsKKyAgICAgIGlmIChmYi0+Y29kZSAhPSBGSU5HRVJQUklOVF9FUlJPUl9OT05FKQorCWdvdG8g ZG9uZTsKKyAgICB9CisgIGVsc2UgaWYgKCFrZWVwX2hhc2gpCisgICAgeworICAgICAgaWYgKCFt b2RpZnlfYmVmb3JlKQorCXsKKwkgIHVuc2lnbmVkIGNoYXIgemRhdGFbMV0gPSB7IDAgfTsKKwkg IC8qIHRoaXMgd2lsbCBjYXVzZSB0aGUgZGF0YSB0byBiZSB6ZXJvZWQgKi8KKwkgIC8qIGJlZm9y ZSBjYWxjdWxhdGluZyB0aGUgZmluZ2VycHJpbnQgKi8KKwkgIGZpbmdlcnByaW50X3NldF9kYXRh IChmYiwgMSwgemRhdGEpOworCSAgaWYgKGZiLT5jb2RlICE9IEZJTkdFUlBSSU5UX0VSUk9SX05P TkUpCisJICAgIGdvdG8gZG9uZTsKKwl9CisgICAgICBmaW5nZXJwcmludF9zZXRfaGFzaCAoZmIp OworICAgICAgaWYgKGZiLT5jb2RlICE9IEZJTkdFUlBSSU5UX0VSUk9SX05PTkUpCisJZ290byBk b25lOworICAgIH0KKyAgLyogZWxzZSBsZWF2ZSBoYXNoIGFzIGl0IGlzICovCisKKyAgaWYgKG1v ZGlmeV9hZnRlcikKKyAgICB7CisgICAgICBmaW5nZXJwcmludF9zZXRfZGF0YSAoZmIsIGhkci0+ c2l6ZSwgKHVuc2lnbmVkIGNoYXIgKikgZWNfaGRyKTsKKyAgICAgIGlmIChmYi0+Y29kZSAhPSBG SU5HRVJQUklOVF9FUlJPUl9OT05FKQorCWdvdG8gZG9uZTsKKyAgICB9CisgIGZpbmdlcnByaW50 X3dyaXRlX291dGZpbGUgKGZiKTsKKyAgaWYgKGZiLT5jb2RlICE9IEZJTkdFUlBSSU5UX0VSUk9S X05PTkUpCisgICAgZ290byBkb25lOworCisgZG9uZToKKyAgcmV0dXJuCisgICAgdW5iaW5kX3Rv IChjb3VudCxtYWtlX2V4ZWN1dGFibGVfY3VzdG9tX3NldHRpbmdzIChlY19oZHIsIGVjX3NoaW1f c3opKTsKK30KKwogdm9pZAogc3ltc19vZl9lbWFjcyAodm9pZCkKIHsKQEAgLTM0MzcsMTEgKzQz ODgsNzMgQEAgc3ltc19vZl9lbWFjcyAodm9pZCkKICAgZGVmc3ViciAoJlNpbnZvY2F0aW9uX2Rp cmVjdG9yeSk7CiAgIGRlZnN1YnIgKCZTZGFlbW9ucCk7CiAgIGRlZnN1YnIgKCZTZGFlbW9uX2lu aXRpYWxpemVkKTsKKyAgZGVmc3ViciAoJlNtYWtlX2N1c3RvbV9lbWFjc19leGVjdXRhYmxlKTsK KyAgZGVmc3ViciAoJlNnZXRfZW1hY3NfZXhlY3V0YWJsZV9jdXN0b21fc2V0dGluZ3MpOworICBk ZWZzdWJyICgmU2dldF9lbWFjc19leGVjdXRhYmxlX2ZpbmdlcnByaW50X2RhdGEpOworCiAKICAg REVGVkFSX0xJU1AgKCJjb21tYW5kLWxpbmUtYXJncyIsIFZjb21tYW5kX2xpbmVfYXJncywKIAkg ICAgICAgZG9jOiAvKiBBcmdzIHBhc3NlZCBieSBzaGVsbCB0byBFbWFjcywgYXMgYSBsaXN0IG9m IHN0cmluZ3MuCiBNYW55IGFyZ3VtZW50cyBhcmUgZGVsZXRlZCBmcm9tIHRoZSBsaXN0IGFzIHRo ZXkgYXJlIHByb2Nlc3NlZC4gICovKTsKIAorICAvKiBhbHNvIG5lZWQgY29tbWFuZC1saW5lLWFy Z3MgYXMgYW4gZXhwbGljaXQgc3ltYm9sIGZvciBub25lZGl0b3IgKi8KKyAgREVGU1lNIChRY29t bWFuZF9saW5lX2FyZ3MsImNvbW1hbmQtbGluZS1hcmdzIik7CisgIERFRlNZTSAoUWFyZ3MsImFy Z3MiKTsKKyAgREVGU1lNIChRY29uZmlndXJlZCwgImNvbmZpZ3VyZWQiKTsKKyAgREVGU1lNIChR dW5jb25maWd1cmVkLCAidW5jb25maWd1cmVkIik7CisgIERFRlNZTSAoUW5vbmVkaXRvciwgIm5v bmVkaXRvciIpOworICBERUZTWU0gKFFlZGl0b3IsICJlZGl0b3IiKTsKKyAgREVGU1lNIChRYmFy ZSwgImJhcmUiKTsKKyAgREVGU1lNIChRbm90X2JhcmUsICJub3QtYmFyZSIpOworICBERUZTWU0g KFFzaGltLCAic2hpbSIpOworICBERUZTWU0gKFFub3NoaW0sICJub3NoaW0iKTsKKyAgREVGU1lN IChRbm9zdGRpbiwgIm5vc3RkaW4iKTsKKyAgREVGU1lNIChRbm9hcmdzLCAibm9hcmdzIik7Cisg IERFRlNZTSAoUW9yaWdpbmFsLCAib3JpZ2luYWwiKTsKKyAgREVGU1lNIChRY2xlYXIsICJjbGVh ciIpOworICBERUZTWU0gKFFmbGFncywgImZsYWdzIik7CisgIERFRlNZTSAoUXNpemUsICJzaXpl Iik7CisgIERFRlNZTSAoUWR1bXBfZmlsZV9iYXNlLCAiZHVtcC1maWxlLWJhc2UiKTsKKyAgREVG U1lNIChRY3VzdG9tLCAiY3VzdG9tIik7CisgIC8qIE1vdmVkIGZyb20gdzMyZm9udCBzbyBkZWZp bml0aW9uIGlzIG5vdCBiZSBwbGF0Zm9ybS1kZXBlbmRlbnQgKi8KKyAgREVGU1lNIChRc3RhbmRh cmQsICJzdGFuZGFyZCIpOworICBERUZTWU0gKFFwcmlzdGluZSwgInByaXN0aW5lIik7CisgIERF RlNZTSAoUWZpbmdlcnByaW50LCAiZmluZ2VycHJpbnQiKTsKKyAgREVGU1lNIChRdmVyc2lvbiwg InZlcnNpb24iKTsKKyAgREVGU1lNIChRcHJpc3RpbmVfZmluZ2VycHJpbnRfY29tcGxlbWVudCwg InByaXN0aW5lLWZpbmdlcnByaW50LWNvbXBsZW1lbnQiKTsKKyAgREVGU1lNIChRY3VzdG9tX2V4 ZWN1dGFibGVfZXJyb3IsImN1c3RvbS1leGVjdXRhYmxlLWVycm9yIik7CisgIERFRlNZTSAoUWlu dmFsaWRfZXhlY3V0YWJsZV9mbGFnLCJpbnZhbGlkLWV4ZWN1dGFibGUtZmxhZyIpOworICBERUZT WU0gKFFpbmNvbXBhdGlibGVfZXhlY3V0YWJsZV9mbGFncywiaW5jb21wYXRpYmxlLWV4ZWN1dGFi bGUtZmxhZ3MiKTsKKyAgREVGU1lNIChRaW52YWxpZF9leGVjdXRhYmxlX3BhdGgsImludmFsaWQt ZXhlY3V0YWJsZS1wYXRoIik7CisgIERFRlNZTSAoUWludmFsaWRfZHVtcGZpbGVfYmFzZW5hbWUs ImludmFsaWQtZHVtcGZpbGUtYmFzZW5hbWUiKTsKKworICBGcHV0IChRY3VzdG9tX2V4ZWN1dGFi bGVfZXJyb3IsIFFlcnJvcl9jb25kaXRpb25zLAorCWxpc3QxIChRZXJyb3IpKTsKKyAgRnB1dCAo UWN1c3RvbV9leGVjdXRhYmxlX2Vycm9yLCBRZXJyb3JfbWVzc2FnZSwKKwlidWlsZF9zdHJpbmcg KCJFcnJvciBpbiBtYWtlLWN1c3RvbS1lbWFjcy1leGVjdXRhYmxlIikpOworICBGcHV0IChRaW52 YWxpZF9leGVjdXRhYmxlX2ZsYWcsIFFlcnJvcl9jb25kaXRpb25zLAorCWxpc3QyIChRY3VzdG9t X2V4ZWN1dGFibGVfZXJyb3IsIFFlcnJvcikpOworICBGcHV0IChRaW52YWxpZF9leGVjdXRhYmxl X2ZsYWcsIFFlcnJvcl9tZXNzYWdlLAorCWJ1aWxkX3N0cmluZyAoIkludmFsaWQgZmxhZyBmb3Ig Y3VzdG9tIGVtYWNzIGV4ZWN1dGFibGUiKSk7CisgIEZwdXQgKFFpbmNvbXBhdGlibGVfZXhlY3V0 YWJsZV9mbGFncywgUWVycm9yX2NvbmRpdGlvbnMsCisJbGlzdDIgKFFjdXN0b21fZXhlY3V0YWJs ZV9lcnJvciwgUWVycm9yKSk7CisgIEZwdXQgKFFpbmNvbXBhdGlibGVfZXhlY3V0YWJsZV9mbGFn cywgUWVycm9yX21lc3NhZ2UsCisJYnVpbGRfc3RyaW5nICgiSW5jb21wYXRpYmxlIGZsYWdzIGZv ciBjdXN0b20gZW1hY3MgZXhlY3V0YWJsZSIpKTsKKyAgRnB1dCAoUWludmFsaWRfZXhlY3V0YWJs ZV9wYXRoLCBRZXJyb3JfY29uZGl0aW9ucywKKwlsaXN0MiAoUWN1c3RvbV9leGVjdXRhYmxlX2Vy cm9yLCBRZXJyb3IpKTsKKyAgRnB1dCAoUWludmFsaWRfZXhlY3V0YWJsZV9wYXRoLCBRZXJyb3Jf bWVzc2FnZSwKKwlidWlsZF9zdHJpbmcgKCJJbnZhbGlkIG91dHB1dCBwYXRoIHNwZWNpZmllZCBm b3IgY3VzdG9tIGVtYWNzIGV4ZWN1dGFibGUiKSk7CisgIEZwdXQgKFFpbnZhbGlkX2R1bXBmaWxl X2Jhc2VuYW1lLCBRZXJyb3JfY29uZGl0aW9ucywKKwlsaXN0MiAoUWN1c3RvbV9leGVjdXRhYmxl X2Vycm9yLCBRZXJyb3IpKTsKKyAgRnB1dCAoUWludmFsaWRfZHVtcGZpbGVfYmFzZW5hbWUsIFFl cnJvcl9tZXNzYWdlLAorCWJ1aWxkX3N0cmluZyAoIkludmFsaWQgYmFzZW5hbWUgZm9yIGR1bXAg ZmlsZSIpKTsKKworCisgIERFRlZBUl9MSVNQICgib3JpZ2luYWwtY29tbWFuZC1saW5lLWFyZ3Mi LCBWb3JpZ2luYWxfY29tbWFuZF9saW5lX2FyZ3MsCisJICAgICAgIGRvYzogLyogQXJncyBwYXNz ZWQgYnkgc2hlbGwgdG8gRW1hY3MsIGFzIGEgbGlzdCBvZiBzdHJpbmdzLgorSW4gbm9uZWRpdG9y IG1vZGUsIHRoaXMgd2lsbCBjb250YWluIHRoZSBjb21tYW5kIGxpbmUgd2l0aAorLS1kdW1wLWZp bGUgYW5kIC0tdGVtYWNzIG9wdGlvbnMgaW50YWN0LiAqLyk7CisKICAgREVGVkFSX0xJU1AgKCJz eXN0ZW0tdHlwZSIsIFZzeXN0ZW1fdHlwZSwKIAkgICAgICAgZG9jOiAvKiBUaGUgdmFsdWUgaXMg YSBzeW1ib2wgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiBvcGVyYXRpbmcgc3lzdGVtIHlvdSBhcmUg dXNpbmcuCiBTcGVjaWFsIHZhbHVlczoKQEAgLTM0NzksNiArNDQ5MiwyMSBAQCBzeW1zX29mX2Vt YWNzICh2b2lkKQogICBERUZWQVJfQk9PTCAoIm5vbmludGVyYWN0aXZlIiwgbm9uaW50ZXJhY3Rp dmUxLAogICAgICAgICAgICAgICAgZG9jOiAvKiBOb24tbmlsIG1lYW5zIEVtYWNzIGlzIHJ1bm5p bmcgd2l0aG91dCBpbnRlcmFjdGl2ZSB0ZXJtaW5hbC4gICovKTsKIAorICBERUZWQVJfTElTUCAo Im5vbmVkaXRvciIsIFZub25lZGl0b3IsCisgICAgICAgICAgICAgICBkb2M6IC8qIE5vbi1uaWwg bWVhbnMgcnVubmluZyBhcyBhIG5vbmludGVyYWN0aXZlIGNvbW1hbmQtbGluZSB0b29sLgorSWYg dCwgdGhlbiBleHByZXNzaW9ucyB3aWxsIGJlIHJlYWQgYW5kIGV2YWx1YXRlZCBmcm9tIHRoZSBj b21tYW5kIGxpbmUgb3Igc3RkaW4uCitJZiAnY29tbWFuZC1saW5lLWFyZ3MsIHRoZW4gb25seSBl eHByZXNzaW9ucyBpbiB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cword2lsbCBiZSByZWFkIGFu ZCBldmFsdWF0ZWQuIFRoZSB2YXJpYWJsZSBjb21tYW5kLWxpbmUtYXJncyB3aWxsIGJlIHNldCB0 byBuaWwuCitJZiAnc3RkaW4sIHRoZW4gb25seSBleHByZXNzaW9ucyBmcm9tIHN0ZGluIHdpbGwg YmUgcmVhZCBhbmQgZXZhbHVhdGVkLgorQW55IG90aGVyIG5vbi1uaWwgdmFsdWUgaW5kaWNhdGVz IGl0IHdhcyBzZXQgYmVmb3JlIGR1bXBpbmcgYW5kIHdpbGwgYmUKK3VzZWQgYXMgdGhlICJtYWlu IiBwcm9ncmFtIGFmdGVyIHNldHRpbmcgdXAgbWluaW1hbCBpbmZyYXN0cnVjdHVyZQorZm9yIG5v bi1sb2NhbCBleGl0cyBieSBzaWduYWwgYW5kIHRocm93LCBpbiBwbGFjZSBvZiB0aGUgc2ltcGxl CityZWFkLWV2YWwgbG9vcCB1c2VkIGZvciBRdC4KK0lmIHNldCB0byBhIGZ1bmN0aW9uLCB0aGF0 IGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCB3aXRoIG5vIGFyZ3VtZW50cy4KK0FueSBvdGhlciB2 YWx1ZSB3aWxsIGJlIHRha2VuIHRvIGJlIGFuZCB0aGUgIm1haW4iIHByb2dyYW0gd2lsbCBiZQor KGV2YWwgbm9uZWRpdG9yKS4gKi8pOworCisKICAgREVGVkFSX0xJU1AgKCJraWxsLWVtYWNzLWhv b2siLCBWa2lsbF9lbWFjc19ob29rLAogCSAgICAgICBkb2M6IC8qIEhvb2sgcnVuIHdoZW4gYGtp bGwtZW1hY3MnIGlzIGNhbGxlZC4KIFNpbmNlIGBraWxsLWVtYWNzJyBtYXkgYmUgaW52b2tlZCB3 aGVuIHRoZSB0ZXJtaW5hbCBpcyBkaXNjb25uZWN0ZWQgKG9yCkBAIC0zNTEzLDggKzQ1NDEsOSBA QCBzeW1zX29mX2VtYWNzICh2b2lkKQogd2l0aGluIHRoZSB2YXJpYWJsZSBgaW52b2NhdGlvbi1k aXJlY3RvcnknIG9yIGl0cyBwYXJlbnQuICBGb3IgZXhhbXBsZSwKIHRoaXMgaXMgdGhlIGNhc2Ug d2hlbiBydW5uaW5nIGFuIHVuaW5zdGFsbGVkIEVtYWNzIGV4ZWN1dGFibGUgZnJvbSBpdHMKIGJ1 aWxkIGRpcmVjdG9yeS4gICovKTsKKyAgLyogIFRoaXMgaXMgaW5pdGlhbGl6ZWQgaW4gaW5pdF9j bWRhcmdzCiAgIFZpbnN0YWxsYXRpb25fZGlyZWN0b3J5ID0gUW5pbDsKLQorICAqLwogICBERUZW QVJfTElTUCAoInN5c3RlbS1tZXNzYWdlcy1sb2NhbGUiLCBWc3lzdGVtX21lc3NhZ2VzX2xvY2Fs ZSwKIAkgICAgICAgZG9jOiAvKiBTeXN0ZW0gbG9jYWxlIGZvciBtZXNzYWdlcy4gICovKTsKICAg VnN5c3RlbV9tZXNzYWdlc19sb2NhbGUgPSBRbmlsOwotLSAKMi40OS4wCgo= --0000000000002492990639612157 Content-Type: text/x-patch; charset="US-ASCII"; name="0009-Updated-pdumper-for-changes-in-fingerprint.patch" Content-Disposition: attachment; filename="0009-Updated-pdumper-for-changes-in-fingerprint.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mctst9cg8 RnJvbSBjZDQ1MmI3MzNmMzAzZDQ2ODhlYTM2ZTg5NzBlNjgxNWI2MmY0ZDYxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBPbm5pZSBMeW5uIFdpbmViYXJnZXIgPG93aW5lYmFyQGdtYWls LmNvbT4KRGF0ZTogTW9uLCA3IEp1bCAyMDI1IDA3OjE1OjI3IC0wNDAwClN1YmplY3Q6IFtQQVRD SCAwOS8xMl0gVXBkYXRlZCBwZHVtcGVyIGZvciBjaGFuZ2VzIGluIGZpbmdlcnByaW50CgotLS0K IHNyYy9wZHVtcGVyLmMgfCAzNiArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0K IHNyYy9wZHVtcGVyLmggfCAgMiArLQogMiBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCsp LCAxNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvcGR1bXBlci5jIGIvc3JjL3BkdW1w ZXIuYwppbmRleCBiM2RlOTBiZmEwMy4uMDc0N2ZkMjY1ZTEgMTAwNjQ0Ci0tLSBhL3NyYy9wZHVt cGVyLmMKKysrIGIvc3JjL3BkdW1wZXIuYwpAQCAtMzE3LDExICszMTcsMTEgQEAgZHVtcF9yZWxv Y19zZXRfb2Zmc2V0IChzdHJ1Y3QgZHVtcF9yZWxvYyAqcmVsb2MsIGR1bXBfb2ZmIG9mZnNldCkK IAogdm9pZAogZHVtcF9maW5nZXJwcmludCAoRklMRSAqb3V0cHV0LCBjaGFyIGNvbnN0ICpsYWJl bCwKLQkJICB1bnNpZ25lZCBjaGFyIGNvbnN0IHhmaW5nZXJwcmludFtzaXplb2YgZmluZ2VycHJp bnRdKQorCQkgIHVuc2lnbmVkIGNoYXIgY29uc3QgeGZpbmdlcnByaW50W3NpemVvZiBmaW5nZXJw cmludF9zdG9yYWdlLmhhc2hdKQogewotICBlbnVtIHsgaGV4YnVmX3NpemUgPSAyICogc2l6ZW9m IGZpbmdlcnByaW50IH07CisgIGVudW0geyBoZXhidWZfc2l6ZSA9IDIgKiBzaXplb2YgZmluZ2Vy cHJpbnRfc3RvcmFnZS5oYXNoIH07CiAgIGNoYXIgaGV4YnVmW2hleGJ1Zl9zaXplXTsKLSAgaGV4 YnVmX2RpZ2VzdCAoaGV4YnVmLCB4ZmluZ2VycHJpbnQsIHNpemVvZiBmaW5nZXJwcmludCk7Cisg IGhleGJ1Zl9kaWdlc3QgKGhleGJ1ZiwgeGZpbmdlcnByaW50LCBzaXplb2YgZmluZ2VycHJpbnRf c3RvcmFnZS5oYXNoKTsKICAgZnByaW50ZiAob3V0cHV0LCAiJXMlcyUuKnNcbiIsIGxhYmVsLCAq bGFiZWwgPyAiOiAiIDogIiIsCiAJICAgaGV4YnVmX3NpemUsIGhleGJ1Zik7CiB9CkBAIC0zNjMs NyArMzYzLDcgQEAgZHVtcF9maW5nZXJwcmludCAoRklMRSAqb3V0cHV0LCBjaGFyIGNvbnN0ICps YWJlbCwKICAgY2hhciBtYWdpY1tzaXplb2YgKGR1bXBfbWFnaWMpXTsKIAogICAvKiBBc3NvY2lh dGVkIEVtYWNzIGJpbmFyeS4gICovCi0gIHVuc2lnbmVkIGNoYXIgZmluZ2VycHJpbnRbc2l6ZW9m IGZpbmdlcnByaW50XTsKKyAgdW5zaWduZWQgY2hhciBmaW5nZXJwcmludFtzaXplb2YgZmluZ2Vy cHJpbnRfc3RvcmFnZS5oYXNoXTsKIAogICAvKiBSZWxvY2F0aW9uIHRhYmxlIGZvciB0aGUgZHVt cCBmaWxlOyBlYWNoIGVudHJ5IGlzIGEKICAgICAgc3RydWN0IGR1bXBfcmVsb2MuICAqLwpAQCAt MjgwNyw3ICsyODA3LDcgQEAgZHVtcF9vYmFycmF5IChzdHJ1Y3QgZHVtcF9jb250ZXh0ICpjdHgs IExpc3BfT2JqZWN0IG9iamVjdCkKIHN0YXRpYyBkdW1wX29mZgogZHVtcF9idWZmZXIgKHN0cnVj dCBkdW1wX2NvbnRleHQgKmN0eCwgY29uc3Qgc3RydWN0IGJ1ZmZlciAqaW5fYnVmZmVyKQogewot I2lmIENIRUNLX1NUUlVDVFMgJiYgIWRlZmluZWQgSEFTSF9idWZmZXJfMjNFQjk4NDg4NworI2lm IENIRUNLX1NUUlVDVFMgJiYgIWRlZmluZWQgSEFTSF9idWZmZXJfQjAyRjY0OEI4MgogIyBlcnJv ciAiYnVmZmVyIGNoYW5nZWQuIFNlZSBDSEVDS19TVFJVQ1RTIGNvbW1lbnQgaW4gY29uZmlnLmgu IgogI2VuZGlmCiAgIHN0cnVjdCBidWZmZXIgbXVuZ2VkX2J1ZmZlciA9ICppbl9idWZmZXI7CkBA IC00MTc2LDYgKzQxNzYsMTAgQEAgREVGVU4gKCJkdW1wLWVtYWNzLXBvcnRhYmxlIiwKICAgTGlz cF9PYmplY3Qgc3ltYm9sID0gUWNvbW1hbmRfbGluZV9wcm9jZXNzZWQ7CiAgIHNwZWNiaW5kIChz eW1ib2wsIFFuaWwpOwogCisgIC8qIEVuc3VyZSBub25lZGl0b3IgaXMgY29uc2lzdGVudCB3aXRo IG5vbmVkaXRvcl9ldmFsX3NvdXJjZSBpZiBhcHBsaWNhYmxlICovCisgIGlmIChOSUxQKFZub25l ZGl0b3IpICYmIG5vbmVkaXRvcl9ldmFsX3NvdXJjZSkKKyAgICBzcGVjYmluZCAoVm5vbmVkaXRv ciwgUXN0ZGluKTsKKwogICBDSEVDS19TVFJJTkcgKGZpbGVuYW1lKTsKICAgZmlsZW5hbWUgPSBG ZXhwYW5kX2ZpbGVfbmFtZSAoZmlsZW5hbWUsIFFuaWwpOwogICBmaWxlbmFtZSA9IEVOQ09ERV9G SUxFIChmaWxlbmFtZSk7CkBAIC00MjY3LDkgKzQyNzEsOSBAQCBERUZVTiAoImR1bXAtZW1hY3Mt cG9ydGFibGUiLAogICBtZW1jcHkgKCZjdHgtPmhlYWRlci5tYWdpYywgZHVtcF9tYWdpYywgc2l6 ZW9mIChkdW1wX21hZ2ljKSk7CiAgIGN0eC0+aGVhZGVyLm1hZ2ljWzBdID0gJyEnOyAvKiBOb3Rl IHRoYXQgZHVtcCBpcyBpbmNvbXBsZXRlLiAgKi8KIAotICBzdGF0aWNfYXNzZXJ0IChzaXplb2Yg KGZpbmdlcnByaW50KSA9PSBzaXplb2YgKGN0eC0+aGVhZGVyLmZpbmdlcnByaW50KSk7Ci0gIGZv ciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mIGZpbmdlcnByaW50OyBpKyspCi0gICAgY3R4LT5oZWFk ZXIuZmluZ2VycHJpbnRbaV0gPSBmaW5nZXJwcmludFtpXTsKKyAgc3RhdGljX2Fzc2VydCAoc2l6 ZW9mIChmaW5nZXJwcmludF9zdG9yYWdlLmhhc2gpID09IHNpemVvZiAoY3R4LT5oZWFkZXIuZmlu Z2VycHJpbnQpKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2YgZmluZ2VycHJpbnRfc3Rv cmFnZS5oYXNoOyBpKyspCisgICAgY3R4LT5oZWFkZXIuZmluZ2VycHJpbnRbaV0gPSBmaW5nZXJw cmludF9zdG9yYWdlLmhhc2hbaV07CiAKICAgY29uc3QgZHVtcF9vZmYgaGVhZGVyX3N0YXJ0ID0g Y3R4LT5vZmZzZXQ7CiAgIGR1bXBfZmluZ2VycHJpbnQgKHN0ZGVyciwgIkR1bXBpbmcgZmluZ2Vy cHJpbnQiLCBjdHgtPmhlYWRlci5maW5nZXJwcmludCk7CkBAIC01NzQxLDEwICs1NzQ1LDEwIEBA IHBkdW1wZXJfbG9hZCAoY29uc3QgY2hhciAqZHVtcF9maWxlbmFtZSwgY2hhciAqYXJndjApCiAg ICAgfQogCiAgIGVyciA9IFBEVU1QRVJfTE9BRF9WRVJTSU9OX01JU01BVENIOwotICBzdGF0aWNf YXNzZXJ0IChzaXplb2YgKGhlYWRlci0+ZmluZ2VycHJpbnQpID09IHNpemVvZiAoZmluZ2VycHJp bnQpKTsKLSAgdW5zaWduZWQgY2hhciBkZXNpcmVkW3NpemVvZiBmaW5nZXJwcmludF07Ci0gIGZv ciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mIGZpbmdlcnByaW50OyBpKyspCi0gICAgZGVzaXJlZFtp XSA9IGZpbmdlcnByaW50W2ldOworICBzdGF0aWNfYXNzZXJ0IChzaXplb2YgKGhlYWRlci0+Zmlu Z2VycHJpbnQpID09IHNpemVvZiAoZmluZ2VycHJpbnRfc3RvcmFnZS5oYXNoKSk7CisgIHVuc2ln bmVkIGNoYXIgZGVzaXJlZFtzaXplb2YgZmluZ2VycHJpbnRfc3RvcmFnZS5oYXNoXTsKKyAgZm9y IChpbnQgaSA9IDA7IGkgPCBzaXplb2YgZmluZ2VycHJpbnRfc3RvcmFnZS5oYXNoOyBpKyspCisg ICAgZGVzaXJlZFtpXSA9IGZpbmdlcnByaW50X3N0b3JhZ2UuaGFzaFtpXTsKICAgaWYgKG1lbWNt cCAoaGVhZGVyLT5maW5nZXJwcmludCwgZGVzaXJlZCwgc2l6ZW9mIGRlc2lyZWQpICE9IDApCiAg ICAgewogICAgICAgZHVtcF9maW5nZXJwcmludCAoc3RkZXJyLCAiZGVzaXJlZCBmaW5nZXJwcmlu dCIsIGRlc2lyZWQpOwpAQCAtNTk0NCw5ICs1OTQ4LDkgQEAgaW5pdF9wZHVtcGVyX29uY2UgKHZv aWQpCiBzeW1zX29mX3BkdW1wZXIgKHZvaWQpCiB7CiAjaWZkZWYgSEFWRV9QRFVNUEVSCi0gIHVu c2lnbmVkIGNoYXIgZGVzaXJlZFtzaXplb2YgZmluZ2VycHJpbnRdOworICB1bnNpZ25lZCBjaGFy IGRlc2lyZWRbc2l6ZW9mIGZpbmdlcnByaW50X3N0b3JhZ2UuaGFzaF07CiAgIGludCBpOwotICBj aGFyIGhleGJ1ZlsyICogc2l6ZW9mIGZpbmdlcnByaW50XTsKKyAgY2hhciBoZXhidWZbMiAqIHNp emVvZiBmaW5nZXJwcmludF9zdG9yYWdlLmhhc2hdOwogCiAgIGRlZnN1YnIgKCZTZHVtcF9lbWFj c19wb3J0YWJsZSk7CiAgIGRlZnN1YnIgKCZTZHVtcF9lbWFjc19wb3J0YWJsZV9fc29ydF9wcmVk aWNhdGUpOwpAQCAtNTk2MSw4ICs1OTY1LDggQEAgc3ltc19vZl9wZHVtcGVyICh2b2lkKQogICBE RUZTWU0gKFFhZnRlcl9wZHVtcF9sb2FkX2hvb2ssICJhZnRlci1wZHVtcC1sb2FkLWhvb2siKTsK ICAgZGVmc3ViciAoJlNwZHVtcGVyX3N0YXRzKTsKIAotICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9m IGZpbmdlcnByaW50OyBpKyspCi0gICAgZGVzaXJlZFtpXSA9IGZpbmdlcnByaW50W2ldOworICBm b3IgKGkgPSAwOyBpIDwgc2l6ZW9mIGZpbmdlcnByaW50X3N0b3JhZ2UuaGFzaDsgaSsrKQorICAg IGRlc2lyZWRbaV0gPSBmaW5nZXJwcmludF9zdG9yYWdlLmhhc2hbaV07CiAKICAgaGV4YnVmX2Rp Z2VzdCAoaGV4YnVmLCBkZXNpcmVkLCBzaXplb2YgZGVzaXJlZCk7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9wZHVtcGVyLmggYi9zcmMvcGR1bXBlci5oCmluZGV4IGZhNDAyOTQyZTk4Li43MGQ5Yjk5Zjg0 NiAxMDA2NDQKLS0tIGEvc3JjL3BkdW1wZXIuaAorKysgYi9zcmMvcGR1bXBlci5oCkBAIC01Myw3 ICs1Myw3IEBAICNkZWZpbmUgUERVTVBFUl9SRU1FTUJFUl9TQ0FMQVIodGhpbmcpICAgICAgICAg ICAgICAgICAgXAogICBwZHVtcGVyX3JlbWVtYmVyX3NjYWxhciAoJih0aGluZyksIHNpemVvZiAo dGhpbmcpKQogCiBleHRlcm4gdm9pZCBkdW1wX2ZpbmdlcnByaW50IChGSUxFICpvdXRwdXQsIGNv bnN0IGNoYXIgKmxhYmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg Y2hhciBjb25zdCBmaW5nZXJwW3NpemVvZiBmaW5nZXJwcmludF0pOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjb25zdCBmaW5nZXJwW3NpemVvZiBmaW5nZXJw cmludF9zdG9yYWdlLmhhc2hdKTsKIAogZXh0ZXJuIHZvaWQgcGR1bXBlcl9yZW1lbWJlcl9zY2Fs YXJfaW1wbCAodm9pZCAqZGF0YSwgcHRyZGlmZl90IG5ieXRlcyk7CiAKLS0gCjIuNDkuMAoK --0000000000002492990639612157 Content-Type: text/x-patch; charset="US-ASCII"; name="0008-Add-eval_stream-to-lisp.h-for-global-use.patch" Content-Disposition: attachment; filename="0008-Add-eval_stream-to-lisp.h-for-global-use.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mctst9ce7 RnJvbSBmOGYxMWI1NTJhNmM1ZDY4ZmE4YWEzZjlkODJiYTVmMmMzNjZlY2E4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBPbm5pZSBMeW5uIFdpbmViYXJnZXIgPG93aW5lYmFyQGdtYWls LmNvbT4KRGF0ZTogTW9uLCA3IEp1bCAyMDI1IDA3OjEzOjE0IC0wNDAwClN1YmplY3Q6IFtQQVRD SCAwOC8xMl0gQWRkIGV2YWxfc3RyZWFtIHRvIGxpc3AuaCBmb3IgZ2xvYmFsIHVzZQoKLS0tCiBz cmMvbGlzcC5oICB8ICAxICsKIHNyYy9scmVhZC5jIHwgMTggKysrKysrKysrKysrKysrLS0tCiAy IGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2xpc3AuaCBiL3NyYy9saXNwLmgKaW5kZXggZjFiMThjMGJlNjEuLjdmYjc3MDVk YmY0IDEwMDY0NAotLS0gYS9zcmMvbGlzcC5oCisrKyBiL3NyYy9saXNwLmgKQEAgLTQ4MzcsNiAr NDgzNyw3IEBAIExPQURISVNUX0FUVEFDSCAoTGlzcF9PYmplY3QgeCkKIGV4dGVybiB2b2lkIGlu aXRfbHJlYWQgKHZvaWQpOwogZXh0ZXJuIHZvaWQgc3ltc19vZl9scmVhZCAodm9pZCk7CiBleHRl cm4gdm9pZCBtYXJrX2xyZWFkICh2b2lkKTsKK2V4dGVybiBMaXNwX09iamVjdCBldmFsX3N0cmVh bShMaXNwX09iamVjdCBzdHJlYW0sIGludCAqbmV4cHJzKTsKIAogSU5MSU5FIExpc3BfT2JqZWN0 CiBpbnRlcm4gKGNvbnN0IGNoYXIgKnN0cikKZGlmZiAtLWdpdCBhL3NyYy9scmVhZC5jIGIvc3Jj L2xyZWFkLmMKaW5kZXggNTQ1MzI3OWE0YWYuLjI0ZDc0ZTE2ZWU1IDEwMDY0NAotLS0gYS9zcmMv bHJlYWQuYworKysgYi9zcmMvbHJlYWQuYwpAQCAtMzkwMyw5ICszOTAzLDE4IEBAIHJlYWRldmFs bG9vcCAoTGlzcF9PYmplY3QgZnJhbWVwdHIpCiAgIHJldHVybiBmcmFtZS0+dmFsdWU7CiB9CiAK K3N0YXRpYyB2b2lkCitzYXZlX2ZyYW1lX25leHBycyAodm9pZCAqcCkKK3sKKyAgaWYgKGN1cnJl bnRfZnJhbWUgJiYgcCkKKyAgICB7CisgICAgICBpbnQgKm5leHBycyA9IHA7CisgICAgICAqbmV4 cHJzID0gY3VycmVudF9mcmFtZS0+bmV4cHJzOworICAgIH0KK30KIAotc3RhdGljIExpc3BfT2Jq ZWN0Ci1lbnRlcl9zdHJlYW1fcmVhZGV2YWxsb29wIChMaXNwX09iamVjdCBzdHJlYW0pCitMaXNw X09iamVjdAorZXZhbF9zdHJlYW0gKExpc3BfT2JqZWN0IHN0cmVhbSwgaW50ICpuZXhwcnMpCiB7 CiAgIExpc3BfT2JqZWN0IHZhbCA9IFFuaWw7CiAgIGxyZWFkX2ZyYW1lIHRoaXNfZnJhbWUgPSBJ TklUX0xSRUFEX0ZSQU1FKCk7CkBAIC0zOTE4LDEwICszOTI3LDEzIEBAIGVudGVyX3N0cmVhbV9y ZWFkZXZhbGxvb3AgKExpc3BfT2JqZWN0IHN0cmVhbSkKICAgaW5pdF9scmVhZF9ldmFsX3BhcmFt cygmdGhpc19mcmFtZSwgUW5pbCwgUW5pbCwKIAkJCSBRbmlsLCBmYWxzZSk7CiAgIGFjdGl2YXRl X2xyZWFkX2ZyYW1lICgmdGhpc19mcmFtZSwgTFJFQURfRlJBTUVfSU5URUdSQUwpOworICBpZiAo bmV4cHJzKQorICAgIHJlY29yZF91bndpbmRfcHJvdGVjdF9wdHIgKHNhdmVfZnJhbWVfbmV4cHJz LCBuZXhwcnMpOwogICB2YWwgPSByZWFkZXZhbGxvb3BfZW9mX3RyYW1wb2xpbmUgKG1ha2VfbWlu dF9wdHIgKCZ0aGlzX2ZyYW1lKSk7CiAgIHJldHVybiB1bmJpbmRfdG8gKHRoaXNfZnJhbWUubG9v cF9keW5hbWljX2ZyYW1lLCB2YWwpOwogfQogCisKIHN0YXRpYyBMaXNwX09iamVjdAogZW50ZXJf YnVmZmVyX3JlYWRldmFsbG9vcCAoTGlzcF9PYmplY3QgYnVmZmVyLAogCQkJICAgTGlzcF9PYmpl Y3QgcHJpbnRmbGFnLApAQCAtMzk5NCw3ICs0MDA2LDcgQEAgREVGVU4gKCJldmFsLXN0cmVhbSIs IEZldmFsX3N0cmVhbSwgU2V2YWxfc3RyZWFtLCAxLCAxLCAiIiwKIGZvciBhbnkgaW5wdXQgc3Ry ZWFtIGFyZ3VtZW50LiAgKi8pCiAgIChMaXNwX09iamVjdCBzdHJlYW0pCiB7Ci0gIHJldHVybiBl bnRlcl9zdHJlYW1fcmVhZGV2YWxsb29wIChzdHJlYW0pOworICByZXR1cm4gZXZhbF9zdHJlYW0g KHN0cmVhbSwgTlVMTCk7CiB9CiAKIC8qIE5COiB0aGUgdW5pYnl0ZSBhcmd1bWVudCB0byBldmFs LWJ1ZmZlciB1c2VkIHRvIHNldCB0aGUgbG9hZF9jb252ZXJ0X3RvX3VuaWJ5dGUsCi0tIAoyLjQ5 LjAKCg== --0000000000002492990639612157 Content-Type: text/x-patch; charset="US-ASCII"; name="0006-Apply-reentrant-reader-patch-for-Feval_stream.patch" Content-Disposition: attachment; filename="0006-Apply-reentrant-reader-patch-for-Feval_stream.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mctst9c85 RnJvbSBmNTVmOGIyMjllYTlmYmUzM2M5MjQyZTlkM2E1ZDZhNWViMjhmMTM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBPbm5pZSBMeW5uIFdpbmViYXJnZXIgPG93aW5lYmFyQGdtYWls LmNvbT4KRGF0ZTogTW9uLCA3IEp1bCAyMDI1IDA2OjExOjU5IC0wNDAwClN1YmplY3Q6IFtQQVRD SCAwNi8xMl0gQXBwbHkgcmVlbnRyYW50IHJlYWRlciBwYXRjaCBmb3IgRmV2YWxfc3RyZWFtCgot LS0KIHNyYy9scmVhZC5jIHwgMzkyNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyODAwIGluc2VydGlvbnMoKyksIDEx MjYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2xyZWFkLmMgYi9zcmMvbHJlYWQuYwpp bmRleCA0MGViNmFkNzg3NS4uNGE0YjgyZjBmNDEgMTAwNjQ0Ci0tLSBhL3NyYy9scmVhZC5jCisr KyBiL3NyYy9scmVhZC5jCkBAIC00Niw2ICs0Niw3IEBAICNkZWZpbmUgREVGSU5FX1NZTUJPTFMK ICNpbmNsdWRlICJwZHVtcGVyLmgiCiAjaW5jbHVkZSA8Yy1jdHlwZS5oPgogI2luY2x1ZGUgPHZs YS5oPgorI2luY2x1ZGUgInN5c3R0eS5oIgogCiAjaWZkZWYgTVNET1MKICNpbmNsdWRlICJtc2Rv cy5oIgpAQCAtMTY4LDYgKzE2OSwyNTIgQEAgI2RlZmluZSBVU0VfQU5EUk9JRF9BU1NFVFMKICMg ZW5kaWYKICNlbmRpZgogCisKK2VudW0geworICBJTkZJTEVfQlVGRkVSX1NJWkUgPSBNQVhfTVVM VElCWVRFX0xFTkdUSCAtIDEKK307CisvKiBGaWxlIGFuZCBsb29rYWhlYWQgZm9yIGdldC1maWxl LWNoYXIgYW5kIGdldC1lbWFjcy1tdWxlLWZpbGUtY2hhcgorICAgdG8gcmVhZCBmcm9tLiAgVXNl ZCBieSBGbG9hZC4gICovCitzdHJ1Y3QgaW5maWxlCit7CisgIC8qIFRoZSBpbnB1dCBzdHJlYW0u ICAqLworICBmaWxlX3N0cmVhbSBzdHJlYW07CisKKyAgLyogTG9va2FoZWFkIGJ5dGUgY291bnQu ICAqLworICBzaWduZWQgY2hhciBsb29rYWhlYWQ7CisKKyAgLyogTG9va2FoZWFkIGJ5dGVzLCBp biByZXZlcnNlIG9yZGVyLiAgS2VlcCB0aGVzZSBoZXJlIGJlY2F1c2UgaXQgaXMKKyAgICAgbm90 IHBvcnRhYmxlIHRvIHVuZ2V0YyBtb3JlIHRoYW4gb25lIGJ5dGUgYXQgYSB0aW1lLiAgKi8KKyAg dW5zaWduZWQgY2hhciBidWZbSU5GSUxFX0JVRkZFUl9TSVpFXTsKKyAgLyogaXMgdGhpcyBzZWVr YWJsZT8gKi8KKyAgYm9vbCBzZWVrYWJsZTsKKyAgYm9vbCBtdWxlOworICBMaXNwX09iamVjdCBj b2Rpbmc7Cit9OworCitzdHJ1Y3QgaW5zdHJpbmcKK3sKKyAgTGlzcF9PYmplY3Qgc3RyaW5nOwor ICBwdHJkaWZmX3Qgc3RhcnQ7CisgIHB0cmRpZmZfdCBsaW1pdDsKK307CisKKworc3RydWN0IGlu YnVmZmVyCit7CisgIExpc3BfT2JqZWN0IGJ1ZmZlcjsKK307CisKK3N0cnVjdCBpbm1hcmtlcgor eworICBzdHJ1Y3QgaW5idWZmZXIgYjsKKyAgTGlzcF9PYmplY3QgbWFya2VyOworfTsKKworc3Ry dWN0IGlucHJvYworeworICBMaXNwX09iamVjdCBwcm9jOworfTsKK3N0cnVjdCBpbmluZGlyZWN0 Cit7CisgIHN0cnVjdCBscmVhZF9mcmFtZSAqc291cmNlOworfTsKKwordHlwZWRlZiBlbnVtIGxy ZWFkX2lucHV0X3R5cGUKK3sKKyAgTFJFQURfSU5QVVRfVU5JTklULAorICBMUkVBRF9JTlBVVF9G SUxFLAorICBMUkVBRF9JTlBVVF9GSUxFX01VTEUsCisgIExSRUFEX0lOUFVUX1NUUklORywKKyAg TFJFQURfSU5QVVRfQlVGRkVSLAorICBMUkVBRF9JTlBVVF9NQVJLRVIsCisgIExSRUFEX0lOUFVU X1BST0NFRFVSRSwKKyAgTFJFQURfSU5QVVRfQklOQVJZLAorICBMUkVBRF9JTlBVVF9JTkRJUkVD VCwKKyAgTFJFQURfSU5QVVRfTlVMTAorfSBscmVhZF9pbnB1dF90eXBlOworCisjZGVmaW5lIFZB TElEX0lOUFVUX1RZUEUoaW4pICggKChpbikgPj0gTFJFQURfSU5QVVRfVU5JTklUKSAmJiAoKGlu KSA8PSBMUkVBRF9JTlBVVF9OVUxMKSApCisKKyNkZWZpbmUgRlJPTV9GSUxFX1AoYXJnKQkJCVwK KyAgKChhcmcpID09IExSRUFEX0lOUFVUX0ZJTEUgfHwgKGFyZykgPT0gTFJFQURfSU5QVVRfRklM RV9NVUxFKQorI2RlZmluZSBGUk9NX0JVRkZFUl9QKGFyZykgKChhcmcpID09IExSRUFEX0lOUFVU X0JVRkZFUikKKyNkZWZpbmUgRlJPTV9NQVJLRVJfUChhcmcpICgoYXJnKSA9PSBMUkVBRF9JTlBV VF9NQVJLRVIpCisjZGVmaW5lIEhBU19CVUZGRVJfUChhcmcpICgoRlJPTV9CVUZGRVJfUCAoYXJn KSkgfHwgKEZST01fTUFSS0VSX1AgKGFyZykpKQorCitzdHJ1Y3QgaW5udWxsCit7Cit9OworCitl bnVtIHsKKyAgTFJFQURfSU5QVVRfU0laRSA9IE1BWCAoTUFYIChzaXplb2YgKHN0cnVjdCBpbmZp bGUpLAorCQkJICAgICAgIHNpemVvZiAoc3RydWN0IGlubWFya2VyKSksCisJCQkgIHNpemVvZiAo c3RydWN0IGluc3RyaW5nKSkKK307Cit0eXBlZGVmIHVuaW9uIGxyZWFkX2lucHV0Cit7CisgIHVu c2lnbmVkIGNoYXIgdW5pbml0W0xSRUFEX0lOUFVUX1NJWkVdOworICBzdHJ1Y3QgaW5maWxlIGY7 CisgIHN0cnVjdCBpbnN0cmluZyBzOworICBzdHJ1Y3QgaW5idWZmZXIgYjsKKyAgc3RydWN0IGlu bWFya2VyIG07CisgIHN0cnVjdCBpbnByb2MgcDsKKyAgc3RydWN0IGluaW5kaXJlY3QgZnJhbWU7 CisgIHN0cnVjdCBpbm51bGwgbjsKK30gbHJlYWRfaW5wdXQ7CisKKyNkZWZpbmUgSU5JVF9MUkVB RF9JTlBVVCAobHJlYWRfaW5wdXQpIHsgLnVuaW5pdCAgPSAgeyAwIH0gfQorCisKK3N0cnVjdCBz YXZlZF9zdHJpbmcgeworICBjaGFyICpzdHJpbmc7CQkJLyogc3RyaW5nIGluIGFsbG9jYXRlZCBi dWZmZXIgKi8KKyAgcHRyZGlmZl90IHNpemU7CQkvKiBhbGxvY2F0ZWQgc2l6ZSBvZiBidWZmZXIg Ki8KKyAgcHRyZGlmZl90IGxlbmd0aDsJCS8qIGxlbmd0aCBvZiBzdHJpbmcgaW4gYnVmZmVyICov CisgIGZpbGVfb2Zmc2V0IHBvc2l0aW9uOwkJLyogcG9zaXRpb24gaW4gZmlsZSB0aGUgc3RyaW5n IGNhbWUgZnJvbSAqLworfTsKKyNkZWZpbmUgSU5JVF9TQVZFRF9TVFJJTkcgKChzdHJ1Y3Qgc2F2 ZWRfc3RyaW5nKSB7IE5VTEwsIDAsIDAsIDAgfSkKKworCit0eXBlZGVmIGVudW0gbHJlYWRfbXVs dGlieXRlCit7CisgIExSRUFEX01VTFRJQllURV9JTkRFVEVSTUlOQVRFID0gLTEsIC8qIEZvciBy ZXNldHRpbmcJKi8KKyAgTFJFQURfTVVMVElCWVRFX0ZBTFNFCSA9IDAsCisgIExSRUFEX01VTFRJ QllURV9UUlVFCT0gMQorfSBscmVhZF9tdWx0aWJ5dGU7CisKKworI2RlZmluZSBWQUxJRF9NVUxU SUJZVEVfTUFTSyAoKGxyZWFkX211bHRpYnl0ZSkgfigxTCkpCisjZGVmaW5lIFZBTElEX01VTFRJ QllURShtKSAoICggKFZBTElEX01VTFRJQllURV9NQVNLKSAmICggKGxyZWFkX211bHRpYnl0ZSkg bSApICkgPT0gKChscmVhZF9tdWx0aWJ5dGUpIDApICkKKy8qIFRoZSByZWZlcmVuY2Ugb2JhcnJh eSBmb3IgaW50ZXJuaW5nIHN5bWJvbHMgZXN0YWJsaXNoZWQgYXQgaW5pdGlhbGl6YXRpb24KKyAg IG9ubHkgd3JpdHRlbiB0byBvbmNlLiAgKi8KK3N0YXRpYyBMaXNwX09iamVjdCBpbml0aWFsX29i YXJyYXk7CisKK3N0YXRpYyBMaXNwX09iamVjdCBtYWtlX29iYXJyYXkgKHVuc2lnbmVkIGJpdHMp OworCisvKiBXaGVuIGFuIG9iamVjdCBpcyByZWFkLCB0aGUgdHlwZSBvZiB0aGUgdG9wIHJlYWQg c3RhY2sgZW50cnkgaW5kaWNhdGVzCisgICB0aGUgc3ludGFjdGljIGNvbnRleHQuICAqLworZW51 bSByZWFkX2VudHJ5X3R5cGUKK3sKKwkJCQkvKiBwcmVjZWRpbmcgc3ludGFjdGljIGNvbnRleHQg Ki8KKyAgUkVfbGlzdF9zdGFydCwJCS8qICIoIiAqLworCisgIFJFX2xpc3QsCQkJLyogIigiICgr IE9CSkVDVCkgKi8KKyAgUkVfbGlzdF9kb3QsCQkJLyogIigiICgrIE9CSkVDVCkgIi4iICovCisK KyAgUkVfdmVjdG9yLAkJCS8qICJbIiAoKiBPQkpFQ1QpICovCisgIFJFX3JlY29yZCwJCQkvKiAi I3MoIiAoKiBPQkpFQ1QpICovCisgIFJFX2NoYXJfdGFibGUsCQkvKiAiI15bIiAoKiBPQkpFQ1Qp ICovCisgIFJFX3N1Yl9jaGFyX3RhYmxlLAkJLyogIiNeXlsiICgqIE9CSkVDVCkgKi8KKyAgUkVf Ynl0ZV9jb2RlLAkJCS8qICIjWyIgKCogT0JKRUNUKSAqLworICBSRV9zdHJpbmdfcHJvcHMsCQkv KiAiIygiICgqIE9CSkVDVCkgKi8KKworICBSRV9zcGVjaWFsLAkJCS8qICInIiB8ICIjJyIgfCAi YCIgfCAiLCIgfCAiLEAiICovCisKKyAgUkVfbnVtYmVyZWQsCQkJLyogIiMiICgrIERJR0lUKSAi PSIgKi8KK307CisKK3N0cnVjdCByZWFkX3N0YWNrX2VudHJ5Cit7CisgIGVudW0gcmVhZF9lbnRy eV90eXBlIHR5cGU7CisgIHVuaW9uIHsKKyAgICAvKiBSRV9saXN0LCBSRV9saXN0X2RvdCAqLwor ICAgIHN0cnVjdCB7CisgICAgICBMaXNwX09iamVjdCBoZWFkOwkJLyogZmlyc3QgY29ucyBvZiBs aXN0ICovCisgICAgICBMaXNwX09iamVjdCB0YWlsOwkJLyogbGFzdCBjb25zIG9mIGxpc3QgKi8K KyAgICB9IGxpc3Q7CisKKyAgICAvKiBSRV92ZWN0b3IsIFJFX3JlY29yZCwgUkVfY2hhcl90YWJs ZSwgUkVfc3ViX2NoYXJfdGFibGUsCisgICAgICAgUkVfYnl0ZV9jb2RlLCBSRV9zdHJpbmdfcHJv cHMgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgTGlzcF9PYmplY3QgZWxlbXM7CS8qIGxpc3Qgb2Yg ZWxlbWVudHMgaW4gcmV2ZXJzZSBvcmRlciAqLworICAgICAgYm9vbCBvbGRfbG9jYXRlX3N5bXM7 CS8qIG9sZCB2YWx1ZSBvZiBsb2NhdGVfc3ltcyAqLworICAgIH0gdmVjdG9yOworCisgICAgLyog UkVfc3BlY2lhbCAqLworICAgIHN0cnVjdCB7CisgICAgICBMaXNwX09iamVjdCBzeW1ib2w7CS8q IHN5bWJvbCBmcm9tIHNwZWNpYWwgc3ludGF4ICovCisgICAgfSBzcGVjaWFsOworCisgICAgLyog UkVfbnVtYmVyZWQgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgTGlzcF9PYmplY3QgbnVtYmVyOwkv KiBudW1iZXIgYXMgYSBmaXhudW0gKi8KKyAgICAgIExpc3BfT2JqZWN0IHBsYWNlaG9sZGVyOwkv KiBwbGFjZWhvbGRlciBvYmplY3QgKi8KKyAgICB9IG51bWJlcmVkOworICB9IHU7Cit9OworCitz dHJ1Y3QgcmVhZF9zdGFjaworeworICBzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSAqc3RhY2s7ICAv KiBiYXNlIG9mIHN0YWNrICovCisgIHB0cmRpZmZfdCBzaXplOwkJICAgLyogYWxsb2NhdGVkIHNp emUgaW4gZW50cmllcyAqLworICBwdHJkaWZmX3Qgc3A7CQkJICAgLyogY3VycmVudCBudW1iZXIg b2YgZW50cmllcyAqLworfTsKKworI2RlZmluZSBJTklUX1JFQURfU1RBQ0sge05VTEwsIDAsIDB9 CisKKy8qIHN0ZGluIGlzIHRoZSBvbmx5IGZpbGUgZGVzY3JpcHRvciBmb3Igd2hpY2ggbmVzdGVk IHJlYWRzIGFyZQorICAgZXhwZWN0ZWQgdG8gY29uc3VtZSBjaGFyYWN0ZXJzIGluIGEgbm9uLXJl ZW50cmFudCB3YXkKKyAgIFRoYXQgaXMsIGEgdXNlciBwcm92aWRpbmcgaW5wdXQgdG8gYSBsaXNw IHByb2dyYW0gYmVpbmcgImxvYWRlZCIKKyAgIGZyb20gc3RkaW4gc2hvdWxkIG5vdCBleHBlY3Qg dGhhdCBpbnB1dCB0byBiZSByZWFkIGFnYWluIGFzIHBhcnQKKyAgIG9mIHRoYXQgbGlzcCBwcm9n cmFtLgorICAgQ2xvc2luZyBhbmQgcmVvcGVuaW5nIHN0ZGluIG11c3QgcmVpbml0aWFsaXplIHRo aXMgZGF0YSBmb3IgdGhpcworICAgdG8gd29yay4KKyovCitzdGF0aWMgc3RydWN0IGxyZWFkX3N0 ZGlvX2RhdGEKK3sKKyAgc3RydWN0IGluZmlsZSBzOworICBwdHJkaWZmX3QgY2hhcl9vZmZzZXQ7 CisgIHB0cmRpZmZfdCBieXRlX29mZnNldDsKKyAgaW50IHVucmVhZF9jaGFyOworICBpbnQgdW5y ZWFkX2J5dGVzOworICBib29sIHJlYWRfZW9mOworICBib29sIG11bHRpYnl0ZTsKKyAgTGlzcF9P YmplY3QgY29kaW5nOworfSBzdGRpbl9pbmZpbGU7CisKKworLyogU2F2ZSBhbGwgc3RhdGUgdG8g cmVzdG9yZSBmb3IgcmVhZCAqLworLyogaS5lLiAgYWxsIHN0YXRpYyBDIHZhcmlhYmxlcyBGcmVh ZCByZWZlcmVuY2VzCSAqLworLyogU2hvdWxkIHRoaXMgaW5jbHVkZSBpbml0aWFsX29iYXJyYXkg YW5kIG9ibG9va3VwX2xhc3RfYnVja2V0X251bWJlcj8gKi8KK3R5cGVkZWYgZW51bSBscmVhZF9m cmFtZV90eXBlCit7CisgIExSRUFEX0ZSQU1FX1VOSU5JVCwKKyAgLyogc29tZSBmb3JtIG9mICJy ZWFkIiBjYWxsKi8KKyAgTFJFQURfRlJBTUVfU0lOR0xFLAorICAvKiByZWFkZXZhbGxvb3AgdGhh dCBkb2VzIG5vdCBoaWRlIGNoYW5nZXMgdG8gbGlzcCBzdGF0ZSAqLworICBMUkVBRF9GUkFNRV9J TlRFR1JBTCwKKyAgLyogcmVhZGV2YWxsb29wIHRoYXQgaGlkZXMgY2hhbmdlcyB0byBsaXNwIHN0 YXRlICovCisgIExSRUFEX0ZSQU1FX0RZTkFNSUNfV0lORAorfSBscmVhZF9mcmFtZV90eXBlOwor Cit0eXBlZGVmIHN0cnVjdCBscmVhZF9mcmFtZSBscmVhZF9mcmFtZTsKK3R5cGVkZWYgaW50ICgq cmVhZG9uZWNoYXJfZnVuYykocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKik7CitzdHJ1Y3QgbHJlYWRf ZnJhbWUKK3sKKyAgbHJlYWRfZnJhbWVfdHlwZSB0eXBlOworICBscmVhZF9mcmFtZSAqcHJldjsK KyAgbHJlYWRfaW5wdXRfdHlwZSBpbnR5cGU7CisgIGxyZWFkX2lucHV0IGlucHV0OworICByZWFk b25lY2hhcl9mdW5jIHJlYWRvbmVjaGFyOworICAvKiBmcmFtZSBtYXkgcmVxdWlyZSB1bndpbmRp bmcgYXJvdW5kIGludGVycnVwdCBwcm9jZXNzaW5nL2V2YWwgKi8KKyAgc3BlY3BkbF9yZWYgZHlu YW1pY19mcmFtZTsKKyAgc3BlY3BkbF9yZWYgcmVzdG9yZV9mcmFtZV9pZHg7CisgIC8qIFdoZW4g UkVBRENIQVJGVU4gaXMgUWdldF9maWxlX2NoYXIgb3IgUWdldF9lbWFjc19tdWxlX2ZpbGVfY2hh ciwKKyAgICAgd2UgdXNlIHRoaXMgdG8ga2VlcCBhbiB1bnJlYWQgY2hhcmFjdGVyIGJlY2F1c2UK KyAgICAgYSBmaWxlIHN0cmVhbSBjYW4ndCBoYW5kbGUgbXVsdGlieXRlLWNoYXIgdW5yZWFkaW5n LiAgVGhlIHZhbHVlIC0xCisgICAgIG1lYW5zIHRoYXQgdGhlcmUncyBubyB1bnJlYWQgY2hhcmFj dGVyLiAgKi8KKyAgaW50IHVucmVhZF9jaGFyOworICAvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJl cXVpcmVkIHRvIGVuY29kZSB1bnJlYWRfY2hhciovCisgIGludCB1bnJlYWRfYnl0ZXM7CisgIGJv b2wgcmVhZF9lb2Y7CisgIHB0cmRpZmZfdCBjaGFyX29mZnNldDsKKyAgcHRyZGlmZl90IGJ5dGVf b2Zmc2V0OworICBzdHJ1Y3Qgc2F2ZWRfc3RyaW5nIHNhdmVkX3N0cmluZ3NbMl07CisgIHN0cnVj dCByZWFkX3N0YWNrIHJkc3RhY2s7CisgIHB0cmRpZmZfdCBiYXNlX3NwOworICAvKiBBIGxpc3Qg b2YgZmlsZSBuYW1lcyBmb3IgZmlsZXMgYmVpbmcgbG9hZGVkIGluIEZsb2FkLgorICAgICBVc2Vk IHRvIGNoZWNrIGZvciByZWN1cnNpdmUgbG9hZHMgKi8KKyAgTGlzcF9PYmplY3QgbG9hZHNfaW5f cHJvZ3Jlc3M7CiAvKiBUaGUgb2JqZWN0cyBvciBwbGFjZWhvbGRlcnMgcmVhZCB3aXRoIHRoZSAj bj1vYmplY3QgZm9ybS4KIAogICAgQSBoYXNoIHRhYmxlIG1hcHMgYSBudW1iZXIgdG8gZWl0aGVy IGEgcGxhY2Vob2xkZXIgKHdoaWxlIHRoZQpAQCAtMTgwLDcgKzQyNyw3IEBAICNkZWZpbmUgVVNF X0FORFJPSURfQVNTRVRTCiAgICB0b3AtbGV2ZWwgY2FsbHMgdG8gcmVhZDAuICBJbiBiZXR3ZWVu IGNhbGxzLCBpdCBtYXkgYmUgYW4gZW1wdHkKICAgIGhhc2ggdGFibGUgbGVmdCB1bnVzZWQgZnJv bSB0aGUgcHJldmlvdXMgY2FsbCAodG8gcmVkdWNlCiAgICBhbGxvY2F0aW9ucyksIG9yIG5pbC4g ICovCi1zdGF0aWMgTGlzcF9PYmplY3QgcmVhZF9vYmplY3RzX21hcDsKKyAgTGlzcF9PYmplY3Qg b2JqZWN0c19tYXA7CiAKIC8qIFRoZSByZWN1cnNpdmUgb2JqZWN0cyByZWFkIHdpdGggdGhlICNu PW9iamVjdCBmb3JtLgogCkBAIC0xOTcsNTkgKzQ0NCw1MjYgQEAgI2RlZmluZSBVU0VfQU5EUk9J RF9BU1NFVFMKICAgIGhhc2ggdGFibGUgYmVmb3JlIGFsbCB0b3AtbGV2ZWwgY2FsbHMgdG8gcmVh ZDAuICBJbiBiZXR3ZWVuIGNhbGxzLAogICAgaXQgbWF5IGJlIGFuIGVtcHR5IGhhc2ggdGFibGUg bGVmdCB1bnVzZWQgZnJvbSB0aGUgcHJldmlvdXMgY2FsbAogICAgKHRvIHJlZHVjZSBhbGxvY2F0 aW9ucyksIG9yIG5pbC4gICovCi1zdGF0aWMgTGlzcF9PYmplY3QgcmVhZF9vYmplY3RzX2NvbXBs ZXRlZDsKKyAgTGlzcF9PYmplY3Qgb2JqZWN0c19jb21wbGV0ZWQ7CisgIGxyZWFkX211bHRpYnl0 ZSBtdWx0aWJ5dGU7CisgIGJvb2wgbG9jYXRlX3N5bXM7CisgIExpc3BfT2JqZWN0IHN0YXJ0Owor ICBMaXNwX09iamVjdCBlbmQ7CisgIGJvb2wgaW50ZXJydXB0ZWQ7CisgIC8qIG9ubHkgc2V0IGZv ciBlbWFjcy1tdWxlIGVuY29kZWQgZmlsZSwgZm9yIGxhc3QgcmVhZCBjaGFyYWN0ZXIgKi8KKyAg c3RydWN0IGNoYXJzZXQgKm11bGVfY2hhcnNldDsKKyAgLyogVGhlc2UgYXJlIG9ubHkgdXNlZCBp biBNVUxUSVBMRSB0eXBlIGZyYW1lcyovCisgIGludCBuZXhwcnM7CisgIHNwZWNwZGxfcmVmIGxv b3BfZHluYW1pY19mcmFtZTsKKyAgYm9vbCB3aG9sZV9idWZmZXI7CisgIExpc3BfT2JqZWN0IGZ1 bGxfbmFtZTsKKyAgTGlzcF9PYmplY3QgbmFtZTsKKyAgTGlzcF9PYmplY3Qgc291cmNlbmFtZTsK KyAgTGlzcF9PYmplY3QgcmVhZGZ1bjsKKyAgYm9vbCBwcmludGZsYWc7CisgIExpc3BfT2JqZWN0 IHZhbHVlOworICBMaXNwX09iamVjdCBlcnJvcjsKKyAgYm9vbCByZWFkX2V4cHI7Cit9OwogCi0v KiBGaWxlIGFuZCBsb29rYWhlYWQgZm9yIGdldC1maWxlLWNoYXIgYW5kIGdldC1lbWFjcy1tdWxl LWZpbGUtY2hhcgotICAgdG8gcmVhZCBmcm9tLiAgVXNlZCBieSBGbG9hZC4gICovCi1zdGF0aWMg c3RydWN0IGluZmlsZQorI2lmZGVmIFdSQVBfU1BFQ1BETF9SRUYKKyNkZWZpbmUgU1BFQ1BETF9S RUZfVU5JTklUIChzcGVjcGRsX3JlZikgeyAtMSB9CisjZGVmaW5lIFVOSU5JVF9TUEVDUERMX1JF RihyKSAoKHIpLmJ5dGVzID09IC0xKQorI2Vsc2UKKyNkZWZpbmVTUEVDUERMX1JFRl9VTklOSVQg LTEKKyNkZWZpbmUgVU5JTklUX1NQRUNQRExfUkVGKHIpICgocikgPT0gLTEpCisjZW5kaWYKKwor I2RlZmluZSBJTklUX0xSRUFEX0ZSQU1FKCkJKGxyZWFkX2ZyYW1lKQkJCQlcCisgIHsJCQkJCQkJ CQlcCisgICAgLnR5cGUgPSBMUkVBRF9GUkFNRV9VTklOSVQsCQkJCQkJXAorICAgICAgLmludHlw ZSA9IExSRUFEX0lOUFVUX1VOSU5JVCwJCQkJCVwKKyAgICAgIC5pbnB1dCA9IElOSVRfTFJFQURf SU5QVVQsCQkJCQlcCisgICAgICAuZHluYW1pY19mcmFtZSA9IFNQRUNQRExfUkVGX1VOSU5JVCwJ CQkJXAorICAgICAgLnJlc3RvcmVfZnJhbWVfaWR4ID0gU1BFQ1BETF9SRUZfVU5JTklULAkJCQlc CisgICAgICAudW5yZWFkX2NoYXIgPSAtMSwJCQkJCQlcCisgICAgICAudW5yZWFkX2J5dGVzID0g MCwJCQkJCQlcCisgICAgICAucmVhZF9lb2YgPSBmYWxzZSwJCQkJCQlcCisgICAgICAuY2hhcl9v ZmZzZXQgPSAwLAkJCQkJCQlcCisgICAgICAuYnl0ZV9vZmZzZXQgPSAwLAkJCQkJCQlcCisgICAg ICAuc2F2ZWRfc3RyaW5ncyA9IHsgSU5JVF9TQVZFRF9TVFJJTkcsIElOSVRfU0FWRURfU1RSSU5H IH0sCVwKKyAgICAgIC5yZHN0YWNrID0gSU5JVF9SRUFEX1NUQUNLLAkJCQkJXAorICAgICAgLmJh c2Vfc3AgPSAwLAkJCQkJCQlcCisgICAgICAubG9hZHNfaW5fcHJvZ3Jlc3MgPSBRbmlsLAkJCQkJ XAorICAgICAgLm9iamVjdHNfbWFwID0gUW5pbCwJCQkJCQlcCisgICAgICAub2JqZWN0c19jb21w bGV0ZWQgPSBRbmlsLAkJCQkJXAorICAgICAgLm11bHRpYnl0ZSA9IExSRUFEX01VTFRJQllURV9J TkRFVEVSTUlOQVRFLAkJCVwKKyAgICAgIC5sb2NhdGVfc3ltcyA9IGZhbHNlLAkJCQkJCVwKKyAg ICAgIC5zdGFydCA9IFFuaWwsCQkJCQkJCVwKKyAgICAgIC5lbmQgPSBRbmlsLAkJCQkJCQlcCisg ICAgICAuZnVsbF9uYW1lID0gUW5pbCwJCQkJCQlcCisgICAgICAubmFtZSA9IFFuaWwsCQkJCQkJ CVwKKyAgICAgIC5zb3VyY2VuYW1lID0gUW5pbCwJCQkJCQlcCisgICAgICAucmVhZGZ1biA9IFFu aWwsCQkJCQkJCVwKKyAgICAgIC5wcmludGZsYWcgPSBmYWxzZSwJCQkJCQlcCisgICAgICAubmV4 cHJzID0gMCwJCQkJCQkJXAorICAgICAgLmxvb3BfZHluYW1pY19mcmFtZSA9IFNQRUNQRExfUkVG X1VOSU5JVCwJCQkJXAorICAgICAgLndob2xlX2J1ZmZlciA9IGZhbHNlLAkJCQkJCVwKKyAgICAg IC52YWx1ZSA9IFFuaWwsCQkJCQkJCVwKKyAgICAgIC5lcnJvciA9IFFuaWwsCQkJCQkJCVwKKyAg ICAgIC5pbnRlcnJ1cHRlZCA9IGZhbHNlLAkJCQkJCVwKKyAgICAgIC5wcmV2ID0gTlVMTCwJCQkJ CQkJXAorICAgICAgLnJlYWRfZXhwciA9IGZhbHNlLAkJCQkJCVwKKyAgICAgIC5tdWxlX2NoYXJz ZXQgPSBOVUxMCQkJCQkJXAorICAgIH0KKworLyogVGhpcyBzaG91bGQgYmUgdGhyZWFkLWxvY2Fs ICovCitzdGF0aWMgbHJlYWRfZnJhbWUgKmN1cnJlbnRfZnJhbWUgPSBOVUxMOworc3RhdGljIHZv aWQgaW5pdF9scmVhZF9pbnB1dF9mcm9tX3N0cmVhbSAobHJlYWRfZnJhbWUgKmZyYW1lLAorCQkJ CQkgIExpc3BfT2JqZWN0IHN0cmVhbSwKKwkJCQkJICBMaXNwX09iamVjdCBzdGFydCwKKwkJCQkJ ICBMaXNwX09iamVjdCBlbmQsCisJCQkJCSAgYm9vbCBsb2NhdGVfc3ltcywKKwkJCQkJICBib29s IHNlZWthYmxlLAorCQkJCQkgIEZJTEUgKnN0cmVhbV9maWxlLAorCQkJCQkgIExpc3BfT2JqZWN0 IGNvZGluZyk7CisKK3N0YXRpYyB2b2lkIGluaXRfbHJlYWRfZXZhbF9wYXJhbXMgKGxyZWFkX2Zy YW1lICpmcmFtZSwKKwkJCQkgICAgTGlzcF9PYmplY3QgZnVsbF9uYW1lLAorCQkJCSAgICBMaXNw X09iamVjdCBuYW1lLAorCQkJCSAgICBMaXNwX09iamVjdCByZWFkZnVuLAorCQkJCSAgICBib29s IHdob2xlX2J1ZmZlcik7CisKK3N0YXRpYyB2b2lkIGFjdGl2YXRlX2xyZWFkX2ZyYW1lIChscmVh ZF9mcmFtZSAqbmV3X2ZyYW1lLCBscmVhZF9mcmFtZV90eXBlIG5ld190eXBlKTsKK3N0YXRpYyB2 b2lkIHJlc3RvcmVfbHJlYWRfZnJhbWUgKHZvaWQgKnApOworCisKK3ZvaWQgdW5yZWFkY2hhciAo cmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBpbnQgYyk7CitzdGF0aWMgQVZPSUQgaW52YWxp ZF9zeW50YXhfbGlzcCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBMaXNwX09iamVjdCBz KTsKK3N0YXRpYyBBVk9JRCBpbnZhbGlkX3N5bnRheCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZy YW1lLCBjb25zdCBjaGFyICpzKTsKKworLyogS2VlcCB0cmFjayBvZiB3aGljaCBmdW5jdGlvbnMg cmVxdWlyZSBhIGZyYW1lIHBhcmFtZXRlcgorICAgYnkgZGVjbGFyaW5nIHRoZW0gaGVyZSwgd2hl dGhlciBpdCdzIG5lZWRlZCBvciBub3QgKi8KK3N0YXRpYyBpbnQgY2hhcmFjdGVyX25hbWVfdG9f Y29kZSAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLAorCQkJCSAgIGNoYXIgY29uc3QgKm5h bWUsIHB0cmRpZmZfdCBuYW1lX2xlbik7CitzdGF0aWMgaW50IHJlYWRfY2hhcl9lc2NhcGUgKHJl Z2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwgaW50IG5leHRfY2hhcik7CitzdGF0aWMgdm9pZCBp bnZhbGlkX3JhZGl4X2ludGVnZXIgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwKKwkJCQkg ICBFTUFDU19JTlQgcmFkaXgpOworc3RhdGljIExpc3BfT2JqZWN0IHJlYWRfaW50ZWdlciAocmVn aXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBpbnQgcmFkaXgpOworc3RhdGljIExpc3BfT2JqZWN0 IHJlYWRfY2hhcl9saXRlcmFsIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUpOworc3RhdGlj IExpc3BfT2JqZWN0IHJlYWRfc3RyaW5nX2xpdGVyYWwgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpm cmFtZSk7CitzdGF0aWMgTGlzcF9PYmplY3QgZ2V0X2xhenlfc3RyaW5nIChyZWdpc3RlciBscmVh ZF9mcmFtZSAqZnJhbWUsCisJCQkJICAgIExpc3BfT2JqZWN0IHZhbCk7CitzdGF0aWMgYm9vbCBz a2lwX2xhenlfc3RyaW5nIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUpOworc3RhdGljIExp c3BfT2JqZWN0IGJ5dGVjb2RlX2Zyb21fcmV2X2xpc3QgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpm cmFtZSwKKwkJCQkJICAgTGlzcF9PYmplY3QgZWxlbXMpOworCitzdGF0aWMgTGlzcF9PYmplY3Qg Y2hhcl90YWJsZV9mcm9tX3Jldl9saXN0IChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsCisJ CQkJCSAgICAgTGlzcF9PYmplY3QgZWxlbXMpOworc3RhdGljIExpc3BfT2JqZWN0IHN1Yl9jaGFy X3RhYmxlX2Zyb21fcmV2X2xpc3QgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwKKwkJCQkJ CSBMaXNwX09iamVjdCBlbGVtcyk7CitzdGF0aWMgTGlzcF9PYmplY3Qgc3RyaW5nX3Byb3BzX2Zy b21fcmV2X2xpc3QgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwKKwkJCQkJICAgICAgIExp c3BfT2JqZWN0IGVsZW1zKTsKK3N0YXRpYyBMaXNwX09iamVjdCByZWFkX2Jvb2xfdmVjdG9yIChy ZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUpOworc3RhdGljIHZvaWQgc2tpcF9zcGFjZV9hbmRf Y29tbWVudHMgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSk7CitzdGF0aWMgTGlzcF9PYmpl Y3QgcmVhZDAgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSk7CisKK3N0YXRpYyBib29sIGhh bmRsZV9yZWFkX3N0cmVhbV9kZWZhdWx0cyAoTGlzcF9PYmplY3QgKnN0cmVhbSk7CitzdGF0aWMg c3RydWN0IGJ1ZmZlciAqbHJlYWRfZ2V0X2J1ZmZlciAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZy YW1lKTsKK3N0YXRpYyBMaXNwX09iamVjdCBscmVhZF9nZXRfYnVmZmVyX29iaiAocmVnaXN0ZXIg bHJlYWRfZnJhbWUgKmZyYW1lKTsKKworCitzdGF0aWMgTGlzcF9PYmplY3QgcmVhZGV2YWxsb29w IChMaXNwX09iamVjdCBmcmFtZXB0cik7CitzdGF0aWMgTGlzcF9PYmplY3QgcmVhZGV2YWxsb29w X2VvZl9oYW5kbGVyIChMaXNwX09iamVjdCBpZ25vcmVkKTsKK3N0YXRpYyBMaXNwX09iamVjdCBs cmVhZF9zZXRfcmVhZF9lb2YgKExpc3BfT2JqZWN0IGRhdGEpOworc3RhdGljIGJvb2wgc2V0dXBf YnVmZmVyX2Zvcl9yZWFkZXZhbGxvb3AgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwKKwkJ CQkJICAgTGlzcF9PYmplY3Qgc3RhcnQsIExpc3BfT2JqZWN0IGVuZCk7CitzdGF0aWMgdm9pZCBw cmVwYXJlX2J1ZmZlcl9mb3JfaW50ZXJydXB0aWJsZV9yZWFkIChyZWdpc3RlciBscmVhZF9mcmFt ZSAqZnJhbWUsCisJCQkJCQkgICBzdHJ1Y3QgYnVmZmVyICpidWYpOworc3RhdGljIExpc3BfT2Jq ZWN0IHJlYWRldmFsbG9vcF9lb2ZfdHJhbXBvbGluZSAoTGlzcF9PYmplY3QgZnJhbWVwdHIpOwor CitzdGF0aWMgdm9pZCBidWlsZF9sb2FkX2hpc3RvcnkgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpm cmFtZSwgTGlzcF9PYmplY3QsIGJvb2wpOworCitzdGF0aWMgcHRyZGlmZl90IG9iYXJyYXlfaW5k ZXggKHN0cnVjdCBMaXNwX09iYXJyYXkgKm9hLCBjb25zdCBjaGFyICpzdHIsCisJCQkJcHRyZGlm Zl90IHNpemVfYnl0ZSk7CitzdGF0aWMgTGlzcF9PYmplY3Qgb2Jsb29rdXBfY29uc2lkZXJpbmdf c2hvcnRoYW5kIChMaXNwX09iamVjdCwgY29uc3QgY2hhciAqLAorCQkJCQkJICAgcHRyZGlmZl90 LCBwdHJkaWZmX3QsCisJCQkJCQkgICBjaGFyICoqLCBwdHJkaWZmX3QgKiwKKwkJCQkJCSAgIHB0 cmRpZmZfdCAqKTsKKworLyogR3JvdyBhIHJlYWQgYnVmZmVyIEJVRiB0aGF0IGNvbnRhaW5zIE9G RlNFVCB1c2VmdWwgYnl0ZXMgb2YgZGF0YSwKKyAgIGJ5IGF0IGxlYXN0IE1BWF9NVUxUSUJZVEVf TEVOR1RIIGJ5dGVzLiAgVXBkYXRlICpCVUZfQUREUiBhbmQKKyAgICpCVUZfU0laRSBhY2NvcmRp bmdseTsgMCA8PSBPRkZTRVQgPD0gKkJVRl9TSVpFLiAgSWYgKkJVRl9BRERSIGlzCisgICBpbml0 aWFsbHkgbnVsbCwgQlVGIGlzIG9uIHRoZSBzdGFjazogY29weSBpdHMgZGF0YSB0byB0aGUgbmV3 IGhlYXAKKyAgIGJ1ZmZlci4gIE90aGVyd2lzZSwgQlVGIG11c3QgZXF1YWwgKkJVRl9BRERSIGFu ZCBjYW4gc2ltcGx5IGJlCisgICByZWFsbG9jYXRlZC4gIEVpdGhlciB3YXksIHJlbWVtYmVyIHRo ZSBoZWFwIGFsbG9jYXRpb24gKHdoaWNoIGlzIGF0CisgICBwZGwgc2xvdCBDT1VOVCkgc28gdGhh dCBpdCBjYW4gYmUgZnJlZWQgd2hlbiB1bndpbmRpbmcgdGhlIHN0YWNrLiovCisKK3N0YXRpYyBj aGFyICoKK2dyb3dfcmVhZF9idWZmZXIgKGNoYXIgKmJ1ZiwgcHRyZGlmZl90IG9mZnNldCwKKwkJ ICBjaGFyICoqYnVmX2FkZHIsIHB0cmRpZmZfdCAqYnVmX3NpemUsIHNwZWNwZGxfcmVmIGNvdW50 KQogewotICAvKiBUaGUgaW5wdXQgc3RyZWFtLiAgKi8KLSAgZmlsZV9zdHJlYW0gc3RyZWFtOwor ICBjaGFyICpwID0geHBhbGxvYyAoKmJ1Zl9hZGRyLCBidWZfc2l6ZSwgTUFYX01VTFRJQllURV9M RU5HVEgsIC0xLCAxKTsKKyAgaWYgKCEqYnVmX2FkZHIpCisgICAgeworICAgICAgbWVtY3B5IChw LCBidWYsIG9mZnNldCk7CisgICAgICByZWNvcmRfdW53aW5kX3Byb3RlY3RfcHRyICh4ZnJlZSwg cCk7CisgICAgfQorICBlbHNlCisgICAgc2V0X3Vud2luZF9wcm90ZWN0X3B0ciAoY291bnQsIHhm cmVlLCBwKTsKKyAgKmJ1Zl9hZGRyID0gcDsKKyAgcmV0dXJuIHA7Cit9CiAKLSAgLyogTG9va2Fo ZWFkIGJ5dGUgY291bnQuICAqLwotICBzaWduZWQgY2hhciBsb29rYWhlYWQ7CisvKiBncm93X3Jl YWRfYnVmZmVyLCBidXQgZm9yIGludHMgKGVtYWNzIGNoYXJhY3RlciB2YWx1ZXMpICovCitzdGF0 aWMgaW50ICoKK2dyb3dfaW50X2J1ZmZlciAoaW50ICpidWYsIHB0cmRpZmZfdCBvZmZzZXQsCisJ CSBpbnQgKipidWZfYWRkciwgcHRyZGlmZl90ICpidWZfc2l6ZSwgc3BlY3BkbF9yZWYgY291bnQp Cit7CisgIGludCAqcCA9IHhwYWxsb2MgKCpidWZfYWRkciwgYnVmX3NpemUsIDEsIC0xLCBzaXpl b2YgKGludCkpOworICBpZiAoISpidWZfYWRkcikKKyAgICB7CisgICAgICBtZW1jcHkgKHAsIGJ1 Ziwgb2Zmc2V0ICogc2l6ZW9mIChpbnQpKTsKKyAgICAgIHJlY29yZF91bndpbmRfcHJvdGVjdF9w dHIgKHhmcmVlLCBwKTsKKyAgICB9CisgIGVsc2UKKyAgICBzZXRfdW53aW5kX3Byb3RlY3RfcHRy IChjb3VudCwgeGZyZWUsIHApOworICAqYnVmX2FkZHIgPSBwOworICByZXR1cm4gcDsKK30KIAot ICAvKiBMb29rYWhlYWQgYnl0ZXMsIGluIHJldmVyc2Ugb3JkZXIuICBLZWVwIHRoZXNlIGhlcmUg YmVjYXVzZSBpdCBpcwotICAgICBub3QgcG9ydGFibGUgdG8gdW5nZXRjIG1vcmUgdGhhbiBvbmUg Ynl0ZSBhdCBhIHRpbWUuICAqLwotICB1bnNpZ25lZCBjaGFyIGJ1ZltNQVhfTVVMVElCWVRFX0xF TkdUSCAtIDFdOwotfSAqaW5maWxlOworSU5MSU5FIHZvaWQKK2xyZWFkX3Vud2luZF9mb3JfZXZh bCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQoreworICBlYXNzZXJ0ICghVU5JTklUX1NQ RUNQRExfUkVGKGZyYW1lLT5keW5hbWljX2ZyYW1lKSk7CisgIHVuYmluZF90byAoZnJhbWUtPmR5 bmFtaWNfZnJhbWUsIFFuaWwpOworfQogCi0vKiBGb3IgdXNlIHdpdGhpbiByZWFkLWZyb20tc3Ry aW5nICh0aGlzIHJlYWRlciBpcyBub24tcmVlbnRyYW50ISEpICAqLwotc3RhdGljIHB0cmRpZmZf dCByZWFkX2Zyb21fc3RyaW5nX2luZGV4Owotc3RhdGljIHB0cmRpZmZfdCByZWFkX2Zyb21fc3Ry aW5nX2luZGV4X2J5dGU7Ci1zdGF0aWMgcHRyZGlmZl90IHJlYWRfZnJvbV9zdHJpbmdfbGltaXQ7 CitJTkxJTkUgdm9pZAorbHJlYWRfaW5pdF9keW5hbWljX2ZyYW1lIChyZWdpc3RlciBscmVhZF9m cmFtZSAqZnJhbWUpCit7CisgIGVhc3NlcnQgKFVOSU5JVF9TUEVDUERMX1JFRihmcmFtZS0+ZHlu YW1pY19mcmFtZSkpOworICBmcmFtZS0+ZHluYW1pY19mcmFtZSA9IFNQRUNQRExfSU5ERVggKCk7 Cit9CiAKLS8qIFBvc2l0aW9uIGluIG9iamVjdCBmcm9tIHdoaWNoIGNoYXJhY3RlcnMgYXJlIGJl aW5nIHJlYWQgYnkgYHJlYWRjaGFyJy4gICovCi1zdGF0aWMgRU1BQ1NfSU5UIHJlYWRjaGFyX29m ZnNldDsKIAotc3RydWN0IHNhdmVkX3N0cmluZyB7Ci0gIGNoYXIgKnN0cmluZzsJCSAgICAgICAg Lyogc3RyaW5nIGluIGFsbG9jYXRlZCBidWZmZXIgKi8KLSAgcHRyZGlmZl90IHNpemU7CQkvKiBh bGxvY2F0ZWQgc2l6ZSBvZiBidWZmZXIgKi8KLSAgcHRyZGlmZl90IGxlbmd0aDsJCS8qIGxlbmd0 aCBvZiBzdHJpbmcgaW4gYnVmZmVyICovCi0gIGZpbGVfb2Zmc2V0IHBvc2l0aW9uOwkJLyogcG9z aXRpb24gaW4gZmlsZSB0aGUgc3RyaW5nIGNhbWUgZnJvbSAqLwotfTsKK0xpc3BfT2JqZWN0Cits cmVhZF9zZXRfcmVhZF9lb2YgKExpc3BfT2JqZWN0IGRhdGEpCit7CisgIGN1cnJlbnRfZnJhbWUt PnJlYWRfZW9mID0gdHJ1ZTsKKyAgcmV0dXJuIFFuaWw7Cit9CisKK0xpc3BfT2JqZWN0CityZWFk ZXZhbGxvb3BfZW9mX2hhbmRsZXIgKExpc3BfT2JqZWN0IGlnbm9yZWQpCit7CisgIHJlZ2lzdGVy IGxyZWFkX2ZyYW1lICpmcmFtZSA9IGN1cnJlbnRfZnJhbWU7CisgIGZyYW1lLT5yZWFkX2VvZiA9 IHRydWU7CisgIHJldHVybiBmcmFtZS0+dmFsdWU7Cit9CisKKworI2RlZmluZSBVTlJFQ09HTkla RURfTFJFQURfSU5QVVRfQ0FTRVMoc3JjKQlcCisgICAgY2FzZSBMUkVBRF9JTlBVVF9VTklOSVQ6 XAorICAgICAgeHNpZ25hbDEgKFFlcnJvcixcCisJCUNBTExOIChGZm9ybWF0LFwKKwkJICAgICAg IGJ1aWxkX3N0cmluZyAoIkludGVybmFsIGVycm9yOiAiIHNyYyBcCisJCQkJICAgICAiOiB0eXBl IG9mIGlucHV0IHRvICIJICAgIFwKKwkJCQkgICAgICJyZWFkKC0qKSB1bmluaXRpYWxpemVkOiAl cyIpLCBcCisJCSAgICAgICBtYWtlX2ZpeG51bSgoRU1BQ1NfSU5UKSBmcmFtZS0+aW50eXBlKSkp OyAgIFwKKyAgICAgIGJyZWFrO1wKKyAgICBkZWZhdWx0OlwKKyAgICAgIHhzaWduYWwxIChRZXJy b3IsXAorCQlDQUxMTiAoRmZvcm1hdCxcCisJCSAgICAgICBidWlsZF9zdHJpbmcgKCJJbnRlcm5h bCBlcnJvcjo6ICIgc3JjIFwKKwkJCQkgICAgICI6IHR5cGUgb2YgaW5wdXQgdG8gIgkJXAorCQkJ CSAgICAgInJlYWQoLSopIHVucmVjb2duaXplZDogJXMiKSwJXAorCQkgICAgICAgbWFrZV9maXhu dW0oKEVNQUNTX0lOVCkgZnJhbWUtPmludHlwZSkpKTsKKworCitzdGF0aWMgYm9vbAorbHJlYWRf ZnJhbWVfcmVxdWlyZXNfcmV3aW5kX2J1ZmZlciAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1l KQoreworICBzd2l0Y2ggKGZyYW1lLT5pbnR5cGUpCisgICAgeworICAgIGNhc2UgTFJFQURfSU5Q VVRfRklMRToKKyAgICBjYXNlIExSRUFEX0lOUFVUX0ZJTEVfTVVMRToKKyAgICAgIHJldHVybiAh KGZyYW1lLT5pbnB1dC5mLnNlZWthYmxlKTsKKyAgICBjYXNlIExSRUFEX0lOUFVUX1BST0NFRFVS RToKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgTFJFQURfSU5QVVRfSU5ESVJFQ1Q6Cisg ICAgICByZXR1cm4gbHJlYWRfZnJhbWVfcmVxdWlyZXNfcmV3aW5kX2J1ZmZlciAoZnJhbWUtPmlu cHV0LmZyYW1lLnNvdXJjZSk7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9CVUZGRVI6CisgICAgY2Fz ZSBMUkVBRF9JTlBVVF9NQVJLRVI6CisgICAgY2FzZSBMUkVBRF9JTlBVVF9TVFJJTkc6CisgICAg Y2FzZSBMUkVBRF9JTlBVVF9CSU5BUlk6CisgICAgY2FzZSBMUkVBRF9JTlBVVF9OVUxMOgorICAg ICAgcmV0dXJuIGZhbHNlOworICAgICAgVU5SRUNPR05JWkVEX0xSRUFEX0lOUFVUX0NBU0VTICgi cmVxdWlyZXNfcmV3aW5kX2J1ZmZlciIpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2xyZWFk X3Jld2luZF9pbnB1dCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBpbnQgbG9va2FoZWFk LCBpbnQgKmJ1ZikKK3sKKyAgc3dpdGNoIChmcmFtZS0+aW50eXBlKQorICAgIHsKKyAgICBjYXNl IExSRUFEX0lOUFVUX0ZJTEU6CisgICAgY2FzZSBMUkVBRF9JTlBVVF9GSUxFX01VTEU6CisgICAg ICB7CisJaWYgKGZyYW1lLT5pbnB1dC5mLnNlZWthYmxlKQorCSAgeworCSAgICByZXdpbmQgKGZy YW1lLT5pbnB1dC5mLnN0cmVhbSk7CisJICB9CisJZWxzZSBpZiAoYnVmKQorCSAgeworCSAgICAv KiBBdCBsZWFzdCB0cnkgdW5nZXRjICovCisJICAgIHVuc2lnbmVkIGNoYXIgY2hhcmJ1ZltNQVhf TVVMVElCWVRFX0xFTkdUSF0gPSB7MH07CisJICAgIGludCBsZW4gPSAwOworCSAgICBpZiAoZnJh bWUtPm11bHRpYnl0ZSkKKwkgICAgICB7CisJCWZvciAoaW50IGkgPSBsb29rYWhlYWQgLTE7IGkg Pj0gMDsgaS0tKQorCQkgIHsKKwkJICAgIGxlbiA9IENIQVJfU1RSSU5HIChidWZbaV0sIGNoYXJi dWYpOworCQkgICAgZm9yIChpbnQgaiA9IGxlbiAtIDE7IGogPj0gMDsgai0tKQorCQkgICAgICB7 CisJCQl1bmdldGMgKGNoYXJidWZbal0sIGZyYW1lLT5pbnB1dC5mLnN0cmVhbSk7CisJCSAgICAg IH0KKwkJICB9CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworCQlmb3IgKGludCBpID0g bG9va2FoZWFkIC0xOyBpID49IDA7IGktLSkKKwkJICB7CisJCSAgICB1bmdldGMgKCh1bnNpZ25l ZCBjaGFyKSBDSEFSX1RPX0JZVEU4KGJ1ZltpXSksIGZyYW1lLT5pbnB1dC5mLnN0cmVhbSk7CisJ CSAgfQorCSAgICAgIH0KKwkgIH0KKwllbHNlCisJICB7CisJICAgIHhzaWduYWwxIChRZXJyb3Is CisJCSAgICAgIGJ1aWxkX3N0cmluZyAoIkludGVybmFsIGVycm9yOiBjYW5ub3QgcmV3aW5kICIK KwkJCSJub24tc2Vla2FibGUgc3RyZWFtIGluIHJlYWQoLSopLiIpKTsKKwkgIH0KKyAgICAgIH0K KyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfU1RSSU5HOgorICAgICAgeworCWZy YW1lLT5jaGFyX29mZnNldCA9IGZyYW1lLT5pbnB1dC5zLnN0YXJ0OworCWZyYW1lLT5ieXRlX29m ZnNldAorCSAgPSBzdHJpbmdfY2hhcl90b19ieXRlIChmcmFtZS0+aW5wdXQucy5zdHJpbmcsCisJ CQkJIGZyYW1lLT5pbnB1dC5zLnN0YXJ0KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNh c2UgTFJFQURfSU5QVVRfUFJPQ0VEVVJFOgorICAgICAgeworCWlmIChidWYpCisJICB7CisJICAg IGZvciAoaW50IGkgPSBsb29rYWhlYWQgLTE7IGkgPj0gMDsgaS0tKQorCSAgICAgIHsKKwkJY2Fs bG4gKGZyYW1lLT5pbnB1dC5wLnByb2MsIG1ha2VfZml4bnVtIChidWZbaV0pKTsKKwkgICAgICB9 CisJICB9CisJZWxzZQorCSAgeworCSAgICB4c2lnbmFsMSAoUWVycm9yLAorCQkgICAgICBidWls ZF9zdHJpbmcgKCJJbnRlcm5hbCBlcnJvcjogY2Fubm90IHJld2luZCAiCisJCQkJICAgICJyZWFk KC0qKSBzdHJlYW0gc3BlY2lmaWVkIGFzICIKKwkJCQkgICAgImJ5IGEgZnVuY3Rpb24uIikpOwor CSAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9CVUZGRVI6 CisgICAgY2FzZSBMUkVBRF9JTlBVVF9NQVJLRVI6CisgICAgICB7CisJQlVGX1RFTVBfU0VUX1BU IChYQlVGRkVSIChmcmFtZS0+aW5wdXQuYi5idWZmZXIpLAorCQkJIEJVRl9CRUdWIChYQlVGRkVS IChmcmFtZS0+aW5wdXQuYi5idWZmZXIpKSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBj YXNlIExSRUFEX0lOUFVUX0lORElSRUNUOgorICAgICAgeworCWxyZWFkX2ZyYW1lICpzb3VyY2Ug PSBmcmFtZS0+aW5wdXQuZnJhbWUuc291cmNlOworCWxyZWFkX3Jld2luZF9pbnB1dCAoc291cmNl LCBsb29rYWhlYWQsIGJ1Zik7CisJZnJhbWUtPmNoYXJfb2Zmc2V0ID0gc291cmNlLT5jaGFyX29m ZnNldDsKKwlmcmFtZS0+Ynl0ZV9vZmZzZXQgPSBzb3VyY2UtPmJ5dGVfb2Zmc2V0OworCWZyYW1l LT51bnJlYWRfY2hhciA9IHNvdXJjZS0+dW5yZWFkX2NoYXI7CisJZnJhbWUtPnVucmVhZF9ieXRl cyA9IHNvdXJjZS0+dW5yZWFkX2J5dGVzOworCWZyYW1lLT5tdWxlX2NoYXJzZXQgPSBzb3VyY2Ut Pm11bGVfY2hhcnNldDsKKwlyZXR1cm47CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNl IExSRUFEX0lOUFVUX0JJTkFSWToKKyAgICBjYXNlIExSRUFEX0lOUFVUX05VTEw6CisgICAgICB7 CisJLyogTm90aGluZyB0byBkbyovCisgICAgICB9CisgICAgICBicmVhazsKKyAgICAgIFVOUkVD T0dOSVpFRF9MUkVBRF9JTlBVVF9DQVNFUyAoInJld2luZF9pbnB1dCIpOworICAgIH0KKyAgZnJh bWUtPmNoYXJfb2Zmc2V0ID0gMDsKKyAgZnJhbWUtPmJ5dGVfb2Zmc2V0ID0gMDsKK30KIAotLyog VGhlIGxhc3QgdHdvIHN0cmluZ3Mgc2tpcHBlZCB3aXRoICNAIChtb3N0IHJlY2VudCBmaXJzdCku ICAqLwotc3RhdGljIHN0cnVjdCBzYXZlZF9zdHJpbmcgc2F2ZWRfc3RyaW5nc1syXTsKK3N0YXRp YyB2b2lkCitpbml0X2luZmlsZSAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLAorCSAgICAg ZmlsZV9zdHJlYW0gc3RyZWFtLCBib29sIHNlZWthYmxlLCBib29sIG11bGUsCisJICAgICBMaXNw X09iamVjdCBjb2RpbmcpCit7CisgIGZyYW1lLT5pbnB1dC5mID0gKHN0cnVjdCBpbmZpbGUpIHsg LnN0cmVhbSA9IDAsCisJCQkJICAgICAubG9va2FoZWFkID0gMCwKKwkJCQkgICAgIC5idWYgPSAg eyAwIH0sCisJCQkJICAgICAuc2Vla2FibGUgPSBmYWxzZSwKKwkJCQkgICAgIC5tdWxlID0gZmFs c2UgfTsKKyAgZnJhbWUtPmlucHV0LmYuc3RyZWFtID0gc3RyZWFtOworICBmcmFtZS0+aW5wdXQu Zi5zZWVrYWJsZSA9IHNlZWthYmxlOworICBmcmFtZS0+aW5wdXQuZi5tdWxlID0gbXVsZTsKKyAg aWYgKGZyYW1lLT5pbnB1dC5mLnNlZWthYmxlICYmCisgICAgICAoZnRlbGxvIChmcmFtZS0+aW5w dXQuZi5zdHJlYW0pICE9IDApKQorICAgIHsKKyAgICAgIGZzZWVrbyAoZnJhbWUtPmlucHV0LmYu c3RyZWFtLCAwLCBTRUVLX1NFVCk7CisgICAgfQorICBpZiAoTklMUCAoY29kaW5nKSkKKyAgICBj b2RpbmcgPSBRbm9fY29udmVyc2lvbjsKKyAgZnJhbWUtPmlucHV0LmYuY29kaW5nID0gY29kaW5n OworICBpZiAoIVZBTElEX01VTFRJQllURSAoZnJhbWUtPm11bHRpYnl0ZSkpCisgICAgeworICAg ICAgQ0hFQ0tfQ09ESU5HX1NZU1RFTSAoZnJhbWUtPmlucHV0LmYuY29kaW5nKTsKKyAgICAgIHB0 cmRpZmZfdCBpZCA9IENPRElOR19TWVNURU1fSUQgKGZyYW1lLT5pbnB1dC5mLmNvZGluZyk7Cisg ICAgICBmcmFtZS0+bXVsdGlieXRlID0gTklMUCAoQ09ESU5HX0FUVFJfRk9SX1VOSUJZVEUgKENP RElOR19JRF9BVFRSUyAoaWQpKSkgPworCUxSRUFEX01VTFRJQllURV9UUlVFIDogTFJFQURfTVVM VElCWVRFX0ZBTFNFOworICAgIH0KK30KIAotLyogQSBsaXN0IG9mIGZpbGUgbmFtZXMgZm9yIGZp bGVzIGJlaW5nIGxvYWRlZCBpbiBGbG9hZC4gIFVzZWQgdG8KLSAgIGNoZWNrIGZvciByZWN1cnNp dmUgbG9hZHMuICAqLworc3RhdGljIHZvaWQKK2luaXRfaW5zdHJpbmcgKHJlZ2lzdGVyIGxyZWFk X2ZyYW1lICpmcmFtZSwKKwkgICAgICAgTGlzcF9PYmplY3Qgc3RyaW5nKQoreworICBwdHJkaWZm X3Qgc3RhcnR2YWwsIGVuZHZhbDsKKyAgZnJhbWUtPmlucHV0LnMKKyAgICA9IChzdHJ1Y3QgaW5z dHJpbmcpIHsgLnN0cmluZyA9IFFuaWwsIC5zdGFydCA9IDAsIC5saW1pdCA9IDAgfTsKKworICBp ZiAoTklMUCAoZnJhbWUtPnN0YXJ0KSkKKyAgICBmcmFtZS0+c3RhcnQgID0gbWFrZV9maXhudW0o MCk7CisgIGlmIChOSUxQIChmcmFtZS0+ZW5kKSkKKyAgICBmcmFtZS0+ZW5kID0gbWFrZV9maXhu dW0gKFNDSEFSUyAoc3RyaW5nKSk7CisKKyAgQ0hFQ0tfRklYTlVNIChmcmFtZS0+c3RhcnQpOwor ICBDSEVDS19GSVhOVU0gKGZyYW1lLT5lbmQpOworICBmcmFtZS0+aW5wdXQucy5zdHJpbmcgPSBz dHJpbmc7CisKKyAgdmFsaWRhdGVfc3ViYXJyYXkgKHN0cmluZywgZnJhbWUtPnN0YXJ0LCBmcmFt ZS0+ZW5kLCBTQ0hBUlMgKHN0cmluZyksCisJCSAgICAgJnN0YXJ0dmFsLCAmZW5kdmFsKTsKKyAg ZnJhbWUtPmlucHV0LnMuc3RhcnQgPSBzdGFydHZhbDsKKyAgZnJhbWUtPmlucHV0LnMubGltaXQg PSBlbmR2YWw7CisgIGZyYW1lLT5jaGFyX29mZnNldCA9IGZyYW1lLT5pbnB1dC5zLnN0YXJ0Owor ICBmcmFtZS0+Ynl0ZV9vZmZzZXQKKyAgICA9IHN0cmluZ19jaGFyX3RvX2J5dGUgKGZyYW1lLT5p bnB1dC5zLnN0cmluZywKKwkJCSAgIGZyYW1lLT5pbnB1dC5zLnN0YXJ0KTsKKyAgaWYgKCFWQUxJ RF9NVUxUSUJZVEUgKGZyYW1lLT5tdWx0aWJ5dGUpKQorICAgIGZyYW1lLT5tdWx0aWJ5dGUgPSBT VFJJTkdfTVVMVElCWVRFIChmcmFtZS0+aW5wdXQucy5zdHJpbmcpOworfQogCi1zdGF0aWMgTGlz cF9PYmplY3QgVmxvYWRzX2luX3Byb2dyZXNzOworc3RhdGljIHZvaWQKK2luaXRfaW5idWZmZXIg KHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwKKwkgICAgICAgTGlzcF9PYmplY3QgYnVmZmVy KQoreworICBzdHJ1Y3QgYnVmZmVyICpidWYgPSBYQlVGRkVSIChidWZmZXIpOworICBmcmFtZS0+ aW5wdXQuYiA9IChzdHJ1Y3QgaW5idWZmZXIpIHsgLmJ1ZmZlciA9IFFuaWwgfTsKIAotc3RhdGlj IGludCByZWFkX2VtYWNzX211bGVfY2hhciAoaW50LCBpbnQgKCopIChpbnQsIExpc3BfT2JqZWN0 KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0KTsKKyAgaWYg KE5JTFAgKGZyYW1lLT5mdWxsX25hbWUpKQorICAgIHsKKyAgICAgIGZyYW1lLT5mdWxsX25hbWUg PSAgQlZBUiAoYnVmLCBmaWxlbmFtZSk7CisgICAgfQorICBpZiAoIU5JTFAgKGZyYW1lLT5uYW1l KSAmJiBOSUxQIChmcmFtZS0+ZnVsbF9uYW1lKSkKKyAgICB7CisgICAgICBpZiAoTklMUCAoRmZp bGVfbmFtZV9hYnNvbHV0ZV9wIChmcmFtZS0+bmFtZSkpKQorCWZyYW1lLT5mdWxsX25hbWUgPSBG ZXhwYW5kX2ZpbGVfbmFtZSAoZnJhbWUtPm5hbWUsIEJWQVIgKGJ1ZiwgZGlyZWN0b3J5KSk7Cisg ICAgICBlbHNlCisJZnJhbWUtPmZ1bGxfbmFtZSA9IGZyYW1lLT5uYW1lOworICAgIH0KKyAgaWYg KE5JTFAgKGZyYW1lLT5uYW1lKSAmJiAhTklMUCAoZnJhbWUtPmZ1bGxfbmFtZSkpCisgICAgewor ICAgICAgZnJhbWUtPm5hbWUgPSBGZmlsZV9uYW1lX25vbmRpcmVjdG9yeSAoZnJhbWUtPmZ1bGxf bmFtZSk7CisgICAgfQorICBmcmFtZS0+aW5wdXQuYi5idWZmZXIgPSBidWZmZXI7CisgIGZyYW1l LT5jaGFyX29mZnNldCA9IEJVRl9QVCAoYnVmKTsKKyAgZnJhbWUtPmJ5dGVfb2Zmc2V0ID0gQlVG X1BUX0JZVEUgKGJ1Zik7CisgIGlmICghVkFMSURfTVVMVElCWVRFIChmcmFtZS0+bXVsdGlieXRl KSkKKyAgICBmcmFtZS0+bXVsdGlieXRlID0gISBOSUxQIChCVkFSIChidWYsIGVuYWJsZV9tdWx0 aWJ5dGVfY2hhcmFjdGVycykpOworfQogCi1zdGF0aWMgdm9pZCByZWFkZXZhbGxvb3AgKExpc3Bf T2JqZWN0LCBzdHJ1Y3QgaW5maWxlICosIExpc3BfT2JqZWN0LCBib29sLAotICAgICAgICAgICAg ICAgICAgICAgICAgICBMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCk7CitzdGF0aWMgdm9pZAoraW5pdF9p bm1hcmtlciAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLAorCSAgICAgICBMaXNwX09iamVj dCBtYXJrZXIpCit7CisgIGluaXRfaW5idWZmZXIgKGZyYW1lLCBGbWFya2VyX2J1ZmZlcihtYXJr ZXIpKTsKKyAgZnJhbWUtPmlucHV0Lm0ubWFya2VyID0gbWFya2VyOworICBpZiAoTklMUCAoZnJh bWUtPnN0YXJ0KSkKKyAgICBmcmFtZS0+c3RhcnQgPSBtYXJrZXI7Cit9CiAKLXN0YXRpYyB2b2lk IGJ1aWxkX2xvYWRfaGlzdG9yeSAoTGlzcF9PYmplY3QsIGJvb2wpOworLyogRGV0ZXJtaW5lIG11 bHRpYnl0ZSAqLworSU5MSU5FIHZvaWQKK3JlcG9ydF9scmVhZF9tdWx0aWJ5dGUgKHJlZ2lzdGVy IGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgLyogRXhwZWN0IGFueSBpbnRlcnJ1cHRpb24gb2Yg cmVhZCB0aGF0IG1pZ2h0IGNhdXNlCisgICAgIGEgY2hhbmdlIGluIHRoZSBjb2RpbmcgdG8gc2V0 IHRoZSBpbnRlcnJ1cHRlZCBmcmFtZSdzCisgICAgIG11bHRpYnl0ZSBzdGF0dXMgdG8gaW5kZXRl cm1pbmF0ZS4gIE90aGVyd2lzZSwKKyAgICAgdGhlIGNvZGluZyBvZiBhbiBpbnB1dCBpcyByZXF1 aXJlZCB0byByZW1haW4gY29uc3RhbnQKKyAgICAgZm9yIHRoZSBkdXJhdGlvbiBvZiBhIHNpbmds ZSBjYWxsIHRvIHJlYWQgKi8KKyAgaWYgKGZyYW1lLT5tdWx0aWJ5dGUgIT0gTFJFQURfTVVMVElC WVRFX0lOREVURVJNSU5BVEUpCisgICAgcmV0dXJuOworICBzd2l0Y2ggKGZyYW1lLT5pbnR5cGUp CisgICAgeworICAgIGNhc2UgTFJFQURfSU5QVVRfRklMRToKKyAgICAgIHsKKwlmcmFtZS0+bXVs dGlieXRlID0gTFJFQURfTVVMVElCWVRFX1RSVUU7CisgICAgICB9CisgICAgICBicmVhazsKKyAg ICBjYXNlIExSRUFEX0lOUFVUX0ZJTEVfTVVMRToKKyAgICAgIGZyYW1lLT5tdWx0aWJ5dGUgPSBM UkVBRF9NVUxUSUJZVEVfVFJVRTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRf U1RSSU5HOgorICAgICAgeworCWZyYW1lLT5tdWx0aWJ5dGUKKwkgID0gKFNUUklOR19NVUxUSUJZ VEUgKGZyYW1lLT5pbnB1dC5zLnN0cmluZykpCisJICA/IExSRUFEX01VTFRJQllURV9UUlVFCisJ ICA6IExSRUFEX01VTFRJQllURV9GQUxTRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNh c2UgTFJFQURfSU5QVVRfUFJPQ0VEVVJFOgorICAgICAgZnJhbWUtPm11bHRpYnl0ZSA9IExSRUFE X01VTFRJQllURV9UUlVFOworICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9CVUZG RVI6CisgICAgICB7CisJc3RydWN0IGJ1ZmZlciAqaW5idWZmZXIgPSBYQlVGRkVSIChmcmFtZS0+ aW5wdXQuYi5idWZmZXIpOworCWZyYW1lLT5tdWx0aWJ5dGUKKwkgID0gKCEgTklMUCAoQlZBUiAo aW5idWZmZXIsIGVuYWJsZV9tdWx0aWJ5dGVfY2hhcmFjdGVycykpKQorCSAgPyBMUkVBRF9NVUxU SUJZVEVfVFJVRQorCSAgOiBMUkVBRF9NVUxUSUJZVEVfRkFMU0U7CisgICAgICB9CisgICAgICBi cmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX01BUktFUjoKKyAgICAgIHsKKwlzdHJ1Y3QgYnVm ZmVyICppbmJ1ZmZlciA9IFhCVUZGRVIgKGZyYW1lLT5pbnB1dC5tLmIuYnVmZmVyKTsKKwlmcmFt ZS0+bXVsdGlieXRlCisJICA9ICghIE5JTFAgKEJWQVIgKGluYnVmZmVyLCBlbmFibGVfbXVsdGli eXRlX2NoYXJhY3RlcnMpKSkKKwkgID8gTFJFQURfTVVMVElCWVRFX1RSVUUKKwkgIDogTFJFQURf TVVMVElCWVRFX0ZBTFNFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9J TlBVVF9JTkRJUkVDVDoKKyAgICAgIHJlcG9ydF9scmVhZF9tdWx0aWJ5dGUgKGZyYW1lLT5pbnB1 dC5mcmFtZS5zb3VyY2UpOworICAgICAgZnJhbWUtPm11bHRpYnl0ZSA9IGZyYW1lLT5pbnB1dC5m cmFtZS5zb3VyY2UtPm11bHRpYnl0ZTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5Q VVRfQklOQVJZOgorCWZyYW1lLT5tdWx0aWJ5dGUgPSBMUkVBRF9NVUxUSUJZVEVfRkFMU0U7CisJ YnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9OVUxMOgorICAgICAgeworCS8qIENvbXBsZXRl bHkgbWVhbmluZ2xlc3MgKi8KKwlmcmFtZS0+bXVsdGlieXRlID0gTFJFQURfTVVMVElCWVRFX1RS VUU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICAgIFVOUkVDT0dOSVpFRF9MUkVBRF9JTlBV VF9DQVNFUygicmVwb3J0X211bHRpYnl0ZSIpOworICAgIH0KIAotc3RhdGljIExpc3BfT2JqZWN0 IG9ibG9va3VwX2NvbnNpZGVyaW5nX3Nob3J0aGFuZCAoTGlzcF9PYmplY3QsIGNvbnN0IGNoYXIg KiwKLQkJCQkJCSAgIHB0cmRpZmZfdCwgcHRyZGlmZl90LAotCQkJCQkJICAgY2hhciAqKiwgcHRy ZGlmZl90ICosCi0JCQkJCQkgICBwdHJkaWZmX3QgKik7Cit9CiAKIAwKIC8qIEZ1bmN0aW9uIHRo YXQgcmVhZHMgb25lIGJ5dGUgZnJvbSB0aGUgY3VycmVudCBzb3VyY2UgUkVBRENIQVJGVU4KQEAg LTI1OCw3ICs5NzIsODAgQEAgI2RlZmluZSBVU0VfQU5EUk9JRF9BU1NFVFMKICAgIGlzIDAgb3Ig cG9zaXRpdmUsIGl0IHVucmVhZHMgQywgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgbm90CiAgICBp bnRlcmVzdGluZy4gICovCiAKLXN0YXRpYyBpbnQgcmVhZGJ5dGVfZnJvbV9maWxlIChpbnQsIExp c3BfT2JqZWN0KTsKKworc3RhdGljIGludCByZWFkYnl0ZV9mcm9tX2ZpbGUgKHJlZ2lzdGVyIGxy ZWFkX2ZyYW1lICpmcmFtZSk7CisKKworc3RhdGljIGludAorcmVhZGJ5dGVfZnJvbV9zdGRpbyAo cmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQoreworICBpZiAoZnJhbWUtPmlucHV0LmYubG9v a2FoZWFkKQorICAgIHsKKyAgICAgIHJldHVybiAoZnJhbWUtPmlucHV0LmYuYnVmWy0tKGZyYW1l LT5pbnB1dC5mLmxvb2thaGVhZCldKTsKKyAgICB9CisKKyAgaW50IGM7CisKKyAgYmxvY2tfaW5w dXQgKCk7CisKKyNpZiAhZGVmaW5lZCBVU0VfQU5EUk9JRF9BU1NFVFMKKworICAvKiBJbnRlcnJ1 cHRlZCByZWFkcyBoYXZlIGJlZW4gb2JzZXJ2ZWQgd2hpbGUgcmVhZGluZyBvdmVyIHRoZSBuZXR3 b3JrLiAgKi8KKyAgd2hpbGUgKChjID0gZ2V0YyAoZnJhbWUtPmlucHV0LmYuc3RyZWFtKSkgPT0g RU9GICYmIGVycm5vID09IEVJTlRSCisJICYmIGZlcnJvciAoZnJhbWUtPmlucHV0LmYuc3RyZWFt KSkKKyAgICB7CisgICAgICB1bmJsb2NrX2lucHV0ICgpOworICAgICAgbWF5YmVfcXVpdCAoKTsK KyAgICAgIGJsb2NrX2lucHV0ICgpOworICAgICAgY2xlYXJlcnIgKGZyYW1lLT5pbnB1dC5mLnN0 cmVhbSk7CisgICAgfQorCisjZWxzZQorCisgIHsKKyAgICBjaGFyIGJ5dGU7CisgICAgc3NpemVf dCByYzsKKworICByZXRyeToKKyAgICByYyA9IGFuZHJvaWRfYXNzZXRfcmVhZCAoZnJhbWUtPmlu cHV0LmYuc3RyZWFtLCAmYnl0ZSwgMSk7CisKKyAgICBpZiAocmMgPT0gMCkKKyAgICAgIGMgPSBF T0Y7CisgICAgZWxzZSBpZiAocmMgPT0gLTEpCisgICAgICB7CisJaWYgKGVycm5vID09IEVJTlRS KQorCSAgeworCSAgICB1bmJsb2NrX2lucHV0ICgpOworCSAgICBtYXliZV9xdWl0ICgpOworCSAg ICBibG9ja19pbnB1dCAoKTsKKwkgICAgZ290byByZXRyeTsKKwkgIH0KKwllbHNlCisJICBjID0g RU9GOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIGMgPSAodW5zaWduZWQgY2hhcikgYnl0ZTsK KyAgfQorCisjZW5kaWYKKworICB1bmJsb2NrX2lucHV0ICgpOworICBpZiAoYyA9PSBFT0YpCisg ICAgeworICAgICAgZnJhbWUtPnJlYWRfZW9mID0gdHJ1ZTsKKyAgICAgIGMgPSAtMTsKKyAgICB9 CisgIHJldHVybiBjOworfQorCitzdGF0aWMgaW50CityZWFkYnl0ZV9mcm9tX2ZpbGUgKHJlZ2lz dGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgZWFzc2VydCAoRlJPTV9GSUxFX1AgKGZyYW1l LT5pbnR5cGUpICYmIChmcmFtZS0+aW5wdXQuZi5zdHJlYW0pKTsKKworICByZXR1cm4gcmVhZGJ5 dGVfZnJvbV9zdGRpbyAoZnJhbWUpOworfQorCiAKIC8qIEhhbmRsZSB1bnJlYWRpbmcgYW5kIHJl cmVhZGluZyBvZiBjaGFyYWN0ZXJzLgogICAgV3JpdGUgUkVBRENIQVIgdG8gcmVhZCBhIGNoYXJh Y3RlciwKQEAgLTI2NiwxODcgKzEwNTMsNDQ4IEBAICNkZWZpbmUgVVNFX0FORFJPSURfQVNTRVRT CiAKICAgIFRoZXNlIG1hY3JvcyBjb3JyZWN0bHkgcmVhZC91bnJlYWQgbXVsdGlieXRlIGNoYXJh Y3RlcnMuICAqLwogCi0jZGVmaW5lIFJFQURDSEFSIHJlYWRjaGFyIChyZWFkY2hhcmZ1biwgTlVM TCkKLSNkZWZpbmUgVU5SRUFEKGMpIHVucmVhZGNoYXIgKHJlYWRjaGFyZnVuLCBjKQorI2RlZmlu ZSBSRUFEQ0hBUihmcmFtZSkgKGZyYW1lLT5yZWFkb25lY2hhcihmcmFtZSkpCisjZGVmaW5lIFVO UkVBRChmcmFtZSxjKSB1bnJlYWRjaGFyIChmcmFtZSwgYykKKworCitJTkxJTkUgaW50CitnZXRf ZW1hY3NfbXVsZV9jaGFyX2xlbmd0aCAoc3RydWN0IGNoYXJzZXQgKmNzLCBpbnQgYykKK3sKKyAg aW50IGRpbWVuc2lvbiA9IENIQVJTRVRfRElNRU5TSU9OIChjcyk7CisgIHVuc2lnbmVkIGNvZGUg PSBFTkNPREVfQ0hBUiAoY3MsIGMpOworICBpbnQgc3o7CisgIGZvciAoc3ogPSAwOyBkaW1lbnNp b24gPiAwICYmIChjb2RlICYgMHhGRik7IGRpbWVuc2lvbi0tKQorICAgIHsKKyAgICAgIHN6Kys7 CisgICAgICBjb2RlID4+PSA4OworICAgIH0KKyAgcmV0dXJuIHN6OworfQorCisKKy8qIGludGVy bmFsIGZvcm0gb2YgL2Rldi9udWxsICovCitzdGF0aWMgaW50CityZWFkY2hhcl9mcm9tX251bGwg KHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgZnJhbWUtPnJlYWRfZW9mID0gdHJ1 ZTsKKyAgcmV0dXJuIC0xOworfQorCitJTkxJTkUgaW50CitoYW5kbGVfYnVmZmVyZWRfdW5yZWFk X2NoYXJhY3RlciAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQoreworICBpbnQgYyA9IGZy YW1lLT51bnJlYWRfY2hhcjsKKyAgZnJhbWUtPnVucmVhZF9jaGFyID0gLTE7CisgIGZyYW1lLT5j aGFyX29mZnNldCsrOworICBmcmFtZS0+Ynl0ZV9vZmZzZXQgKz0gZnJhbWUtPnVucmVhZF9ieXRl czsKKyAgZnJhbWUtPnVucmVhZF9ieXRlcyA9IDA7CisgIHJldHVybiBjOworfQorCitJTkxJTkUg aW50CitoYW5kbGVfcmVhZGNoYXJfZW9mIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUpCit7 CisgIGZyYW1lLT5yZWFkX2VvZiA9IHRydWU7CisgIHJldHVybiAtMTsKK30KKworSU5MSU5FIGlu dAoraGFuZGxlX3JlYWRjaGFyX3VuaWJ5dGUgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwg aW50IGMpCit7CisgIGZyYW1lLT5jaGFyX29mZnNldCsrOworICBmcmFtZS0+Ynl0ZV9vZmZzZXQr KzsKKyAgcmV0dXJuIGM7Cit9CisKKy8qIEhhbmRsZSBlbWFjcy1pbnRlcm5hbCBjb2RpbmcgKi8K K3N0YXRpYyBpbnQKK3JlYWRjaGFyX2Zyb21fbXVsdGlieXRlX2ZpbGUgKHJlZ2lzdGVyIGxyZWFk X2ZyYW1lICpmcmFtZSkKK3sKKyAgaWYgKGZyYW1lLT51bnJlYWRfY2hhciA+PSAwKQorICAgIHJl dHVybiBoYW5kbGVfYnVmZmVyZWRfdW5yZWFkX2NoYXJhY3RlciAoZnJhbWUpOworICBpbnQgYyA9 IHJlYWRieXRlX2Zyb21fZmlsZSAoZnJhbWUpOworICBpZiAoYyA8IDApCisgICAgcmV0dXJuIGhh bmRsZV9yZWFkY2hhcl9lb2YgKGZyYW1lKTsKKyAgaWYgKEFTQ0lJX0NIQVJfUCAoYykpCisgICAg cmV0dXJuIGhhbmRsZV9yZWFkY2hhcl91bmlieXRlIChmcmFtZSwgYyk7CisgIGludCBpID0gMDsK KyAgdW5zaWduZWQgY2hhciBidWZbTUFYX01VTFRJQllURV9MRU5HVEhdID0geyAwIH07CisgIGJ1 ZltpKytdID0gYzsKKyAgaW50IGxlbiA9IEJZVEVTX0JZX0NIQVJfSEVBRCAoYyk7CisgIHdoaWxl IChpIDwgbGVuKQorICAgIHsKKyAgICAgIGJ1ZltpKytdID0gYyA9IHJlYWRieXRlX2Zyb21fZmls ZSAoZnJhbWUpOworICAgICAgaWYgKGMgPCAwIHx8ICEgVFJBSUxJTkdfQ09ERV9QIChjKSkKKwl7 CisJICBmb3IgKGkgLT0gYyA8IDA7IDAgPCAtLWk7ICkKKwkgICAgZnJhbWUtPmlucHV0LmYuYnVm W2ZyYW1lLT5pbnB1dC5mLmxvb2thaGVhZCsrXSA9IGJ1ZltpXTsKKwkgIHJldHVybiBCWVRFOF9U T19DSEFSIChidWZbMF0pOworCX0KKyAgICB9CisgIGZyYW1lLT5jaGFyX29mZnNldCsrOworICBj ID0gU1RSSU5HX0NIQVIgKGJ1Zik7CisgIGZyYW1lLT5ieXRlX29mZnNldCArPSBDSEFSX0JZVEVT KGMpOworICByZXR1cm4gYzsKK30KKworc3RhdGljIGludAorcmVhZGNoYXJfZnJvbV91bmlieXRl X2ZpbGUgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgaWYgKGZyYW1lLT51bnJl YWRfY2hhciA+PSAwKQorICAgIHJldHVybiBoYW5kbGVfYnVmZmVyZWRfdW5yZWFkX2NoYXJhY3Rl ciAoZnJhbWUpOworICBpbnQgYyA9IHJlYWRieXRlX2Zyb21fZmlsZSAoZnJhbWUpOworICBpZiAo YyA8IDApCisgICAgcmV0dXJuIGhhbmRsZV9yZWFkY2hhcl9lb2YgKGZyYW1lKTsKKyAgcmV0dXJu IGhhbmRsZV9yZWFkY2hhcl91bmlieXRlIChmcmFtZSwgYyk7Cit9CisKKy8qIFJlYWQgb25lIG5v bi1BU0NJSSBjaGFyYWN0ZXIgZnJvbSBJTkZJTEUuICBUaGUgY2hhcmFjdGVyIGlzCisgICBlbmNv ZGVkIGluIGBlbWFjcy1tdWxlJyBhbmQgdGhlIGZpcnN0IGJ5dGUgaXMgYWxyZWFkeSByZWFkIGlu CisgICBDLiAgKi8KKworc3RhdGljIGludAorcmVhZGNoYXJfZnJvbV9tdWxlX2ZpbGUgKHJlZ2lz dGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgaWYgKGZyYW1lLT51bnJlYWRfY2hhciA+PSAw KQorICAgIHJldHVybiBoYW5kbGVfYnVmZmVyZWRfdW5yZWFkX2NoYXJhY3RlciAoZnJhbWUpOwor ICBpbnQgYyA9IHJlYWRieXRlX2Zyb21fZmlsZSAoZnJhbWUpOworICBpZiAoYyA8IDApCisgICAg cmV0dXJuIGhhbmRsZV9yZWFkY2hhcl9lb2YgKGZyYW1lKTsKKyAgaWYgKEFTQ0lJX0NIQVJfUCAo YykpCisgICAgcmV0dXJuIGhhbmRsZV9yZWFkY2hhcl91bmlieXRlIChmcmFtZSwgYyk7CisgIC8q IEVtYWNzLW11bGUgY29kaW5nIHVzZXMgYXQgbW9zdCA0LWJ5dGUgZm9yIG9uZSBjaGFyYWN0ZXIu ICAqLworICBpbnQgbGVuID0gZW1hY3NfbXVsZV9ieXRlc1tjXTsKKyAgc3RydWN0IGNoYXJzZXQg KmNoYXJzZXQ7CisgIHVuc2lnbmVkIGNvZGU7CisKKyAgaWYgKGxlbiA9PSAxKQorICAgIC8qIEMg aXMgbm90IGEgdmFsaWQgbGVhZGluZy1jb2RlIG9mIGBlbWFjcy1tdWxlJy4gICovCisgICAgcmV0 dXJuIEJZVEU4X1RPX0NIQVIgKGMpOworCisgIGludCBpID0gMDsKKyAgdW5zaWduZWQgY2hhciBi dWZbNF0gPSB7IDAgfTsKKyAgYnVmW2krK10gPSBjOworICB3aGlsZSAoaSA8IGxlbikKKyAgICB7 CisgICAgICBidWZbaSsrXSA9IGMgPSByZWFkYnl0ZV9mcm9tX2ZpbGUgKGZyYW1lKTsKKyAgICAg IGlmIChjIDwgMHhBMCkKKwl7CisJICBmb3IgKGkgLT0gYyA8IDA7IDAgPCAtLWk7ICkKKwkgICAg ZnJhbWUtPmlucHV0LmYuYnVmW2ZyYW1lLT5pbnB1dC5mLmxvb2thaGVhZCsrXSA9IGJ1ZltpXTsK KwkgIHJldHVybiBCWVRFOF9UT19DSEFSIChidWZbMF0pOworCX0KKyAgICB9CisKKyAgaWYgKGxl biA9PSAyKQorICAgIHsKKyAgICAgIGNoYXJzZXQgPSBDSEFSU0VUX0ZST01fSUQgKGVtYWNzX211 bGVfY2hhcnNldFtidWZbMF1dKTsKKyAgICAgIGNvZGUgPSBidWZbMV0gJiAweDdGOworICAgIH0K KyAgZWxzZSBpZiAobGVuID09IDMpCisgICAgeworICAgICAgaWYgKGJ1ZlswXSA9PSBFTUFDU19N VUxFX0xFQURJTkdfQ09ERV9QUklWQVRFXzExCisJICB8fCBidWZbMF0gPT0gRU1BQ1NfTVVMRV9M RUFESU5HX0NPREVfUFJJVkFURV8xMikKKwl7CisJICBjaGFyc2V0ID0gQ0hBUlNFVF9GUk9NX0lE IChlbWFjc19tdWxlX2NoYXJzZXRbYnVmWzFdXSk7CisJICBjb2RlID0gYnVmWzJdICYgMHg3RjsK Kwl9CisgICAgICBlbHNlCisJeworCSAgY2hhcnNldCA9IENIQVJTRVRfRlJPTV9JRCAoZW1hY3Nf bXVsZV9jaGFyc2V0W2J1ZlswXV0pOworCSAgY29kZSA9ICgoYnVmWzFdIDw8IDgpIHwgYnVmWzJd KSAmIDB4N0Y3RjsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgY2hhcnNldCA9IENI QVJTRVRfRlJPTV9JRCAoZW1hY3NfbXVsZV9jaGFyc2V0W2J1ZlsxXV0pOworICAgICAgY29kZSA9 ICgoYnVmWzJdIDw8IDgpIHwgYnVmWzNdKSAmIDB4N0Y3RjsKKyAgICB9CisgIGZyYW1lLT5tdWxl X2NoYXJzZXQgPSBjaGFyc2V0OworICBjID0gREVDT0RFX0NIQVIgKGNoYXJzZXQsIGNvZGUpOwor ICBpZiAoYyA8IDApCisgICAgaW52YWxpZF9zeW50YXggKGZyYW1lLCAiaW52YWxpZCBtdWx0aWJ5 dGUgZm9ybSIpOworICByZXR1cm4gYzsKK30KKworc3RhdGljIGludAorcmVhZGNoYXJfZnJvbV9t dWx0aWJ5dGVfc3RyaW5nIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUpCit7CisgIGlmIChm cmFtZS0+Y2hhcl9vZmZzZXQgPj0gZnJhbWUtPmlucHV0LnMubGltaXQpCisgICAgcmV0dXJuIGhh bmRsZV9yZWFkY2hhcl9lb2YgKGZyYW1lKTsKKyAgaW50IGMgPSBmZXRjaF9zdHJpbmdfY2hhcl9h ZHZhbmNlX25vX2NoZWNrIChmcmFtZS0+aW5wdXQucy5zdHJpbmcsCisJCQkJCSAgICAgICYoZnJh bWUtPmNoYXJfb2Zmc2V0KSwKKwkJCQkJICAgICAgJihmcmFtZS0+Ynl0ZV9vZmZzZXQpKTsKKyAg cmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRjaGFyX2Zyb21fdW5pYnl0ZV9zdHJpbmcg KHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgaWYgKGZyYW1lLT5jaGFyX29mZnNl dCA+PSBmcmFtZS0+aW5wdXQucy5saW1pdCkKKyAgICByZXR1cm4gaGFuZGxlX3JlYWRjaGFyX2Vv ZiAoZnJhbWUpOworICBpbnQgYyA9IFNSRUYgKGZyYW1lLT5pbnB1dC5zLnN0cmluZywgZnJhbWUt PmJ5dGVfb2Zmc2V0KTsKKyAgcmV0dXJuIGhhbmRsZV9yZWFkY2hhcl91bmlieXRlIChmcmFtZSwg Yyk7Cit9CisKKworSU5MSU5FIHN0cnVjdCBidWZmZXIgKgorcmVhZGNoYXJfZnJvbV9idWZmZXJf c3RhcnQgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgc3RydWN0IGJ1ZmZlciAq aW5idWZmZXIgPSBYQlVGRkVSIChmcmFtZS0+aW5wdXQuYi5idWZmZXIpOworICBpZiAoISBCVUZG RVJfTElWRV9QIChpbmJ1ZmZlcikpCisgICAgcmV0dXJuIE5VTEw7CisgIGZyYW1lLT5ieXRlX29m ZnNldCA9IEJVRl9QVF9CWVRFIChpbmJ1ZmZlcik7CisgIGlmIChmcmFtZS0+Ynl0ZV9vZmZzZXQg Pj0gQlVGX1pWX0JZVEUgKGluYnVmZmVyKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIGlu YnVmZmVyOworfQorCitJTkxJTkUgaW50CityZWFkY2hhcl9idWZmZXJfZmV0Y2hfbXVsdGlieXRl IChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsCisJCQkJIHN0cnVjdCBidWZmZXIgKmluYnVm ZmVyKQoreworICAvKiBGZXRjaCB0aGUgY2hhcmFjdGVyIGNvZGUgZnJvbSB0aGUgYnVmZmVyLiAg Ki8KKyAgdW5zaWduZWQgY2hhciAqcCA9IEJVRl9CWVRFX0FERFJFU1MgKGluYnVmZmVyLCBmcmFt ZS0+Ynl0ZV9vZmZzZXQpOworICBpbnQgY2xlbjsKKyAgaW50IGMgPSBzdHJpbmdfY2hhcl9hbmRf bGVuZ3RoIChwLCAmY2xlbik7CisgIGZyYW1lLT5ieXRlX29mZnNldCArPSBjbGVuOworICByZXR1 cm4gYzsKK30KKworSU5MSU5FIGludAorcmVhZGNoYXJfYnVmZmVyX2ZldGNoX3VuaWJ5dGUgKHJl Z2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwKKwkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyICppbmJ1 ZmZlcikKK3sKKyAgaW50IGMgPSBCVUZfRkVUQ0hfQllURSAoaW5idWZmZXIsIGZyYW1lLT5ieXRl X29mZnNldCk7CisgIGMgPSBVTklCWVRFX1RPX0NIQVIgKGMpOworICBmcmFtZS0+Ynl0ZV9vZmZz ZXQrKzsKKyAgcmV0dXJuIGM7Cit9CiAKLS8qIFNhbWUgYXMgUkVBRENIQVIgYnV0IHNldCAqTVVM VElCWVRFIHRvIHRoZSBtdWx0aWJ5dGVuZXNzIG9mIHRoZSBzb3VyY2UuICAqLwotI2RlZmluZSBS RUFEQ0hBUl9SRVBPUlRfTVVMVElCWVRFKG11bHRpYnl0ZSkgcmVhZGNoYXIgKHJlYWRjaGFyZnVu LCBtdWx0aWJ5dGUpCitJTkxJTkUgdm9pZAorcmVhZGNoYXJfYnVmZmVyX2VuZCAocmVnaXN0ZXIg bHJlYWRfZnJhbWUgKmZyYW1lLCBzdHJ1Y3QgYnVmZmVyICppbmJ1ZmZlcikKK3sKKyAgZnJhbWUt PmNoYXJfb2Zmc2V0ID0gQlVGX1BUIChpbmJ1ZmZlcikgKyAxOworICBTRVRfQlVGX1BUX0JPVEgg KGluYnVmZmVyLCBmcmFtZS0+Y2hhcl9vZmZzZXQsIGZyYW1lLT5ieXRlX29mZnNldCk7Cit9CiAK LS8qIFdoZW4gUkVBRENIQVJGVU4gaXMgUWdldF9maWxlX2NoYXIgb3IgUWdldF9lbWFjc19tdWxl X2ZpbGVfY2hhciwKLSAgIHdlIHVzZSB0aGlzIHRvIGtlZXAgYW4gdW5yZWFkIGNoYXJhY3RlciBi ZWNhdXNlCi0gICBhIGZpbGUgc3RyZWFtIGNhbid0IGhhbmRsZSBtdWx0aWJ5dGUtY2hhciB1bnJl YWRpbmcuICBUaGUgdmFsdWUgLTEKLSAgIG1lYW5zIHRoYXQgdGhlcmUncyBubyB1bnJlYWQgY2hh cmFjdGVyLiAgKi8KLXN0YXRpYyBpbnQgdW5yZWFkX2NoYXIgPSAtMTsKK3N0YXRpYyBpbnQKK3Jl YWRjaGFyX2Zyb21fbXVsdGlieXRlX2J1ZmZlciAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1l KQoreworICBzdHJ1Y3QgYnVmZmVyICppbmJ1ZmZlciA9IHJlYWRjaGFyX2Zyb21fYnVmZmVyX3N0 YXJ0IChmcmFtZSk7CisgIGlmIChpbmJ1ZmZlciA9PSBOVUxMKQorICAgIHJldHVybiBoYW5kbGVf cmVhZGNoYXJfZW9mIChmcmFtZSk7CisgIGludCBjID0gcmVhZGNoYXJfYnVmZmVyX2ZldGNoX211 bHRpYnl0ZSAoZnJhbWUsIGluYnVmZmVyKTsKKyAgcmVhZGNoYXJfYnVmZmVyX2VuZCAoZnJhbWUs IGluYnVmZmVyKTsKKyAgcmV0dXJuIGM7Cit9CiAKIHN0YXRpYyBpbnQKLXJlYWRjaGFyIChMaXNw X09iamVjdCByZWFkY2hhcmZ1biwgYm9vbCAqbXVsdGlieXRlKQorcmVhZGNoYXJfZnJvbV91bmli eXRlX2J1ZmZlciAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQogewotICBMaXNwX09iamVj dCB0ZW07Ci0gIHJlZ2lzdGVyIGludCBjOwotICBpbnQgKCpyZWFkYnl0ZSkgKGludCwgTGlzcF9P YmplY3QpOwotICB1bnNpZ25lZCBjaGFyIGJ1ZltNQVhfTVVMVElCWVRFX0xFTkdUSF07Ci0gIGlu dCBpLCBsZW47Ci0gIGJvb2wgZW1hY3NfbXVsZV9lbmNvZGluZyA9IDA7CisgIHN0cnVjdCBidWZm ZXIgKmluYnVmZmVyID0gcmVhZGNoYXJfZnJvbV9idWZmZXJfc3RhcnQgKGZyYW1lKTsKKyAgaWYg KGluYnVmZmVyID09IE5VTEwpCisgICAgcmV0dXJuIGhhbmRsZV9yZWFkY2hhcl9lb2YgKGZyYW1l KTsKKyAgaW50IGMgPSByZWFkY2hhcl9idWZmZXJfZmV0Y2hfdW5pYnl0ZSAoZnJhbWUsIGluYnVm ZmVyKTsKKyAgcmVhZGNoYXJfYnVmZmVyX2VuZCAoZnJhbWUsIGluYnVmZmVyKTsKKyAgcmV0dXJu IGM7Cit9CiAKLSAgaWYgKG11bHRpYnl0ZSkKLSAgICAqbXVsdGlieXRlID0gMDsKK0lOTElORSBz dHJ1Y3QgYnVmZmVyICoKK3JlYWRjaGFyX2Zyb21fbWFya2VyX3N0YXJ0IChyZWdpc3RlciBscmVh ZF9mcmFtZSAqZnJhbWUpCit7CisgIHN0cnVjdCBidWZmZXIgKmluYnVmZmVyID0gWEJVRkZFUiAo IChmcmFtZS0+aW5wdXQubS5iLmJ1ZmZlcikgKTsKKyAgaWYgKCEgQlVGRkVSX0xJVkVfUCAoaW5i dWZmZXIpKQorICAgIHJldHVybiBOVUxMOworICBmcmFtZS0+Ynl0ZV9vZmZzZXQgPSBtYXJrZXJf Ynl0ZV9wb3NpdGlvbiAoZnJhbWUtPmlucHV0Lm0ubWFya2VyKTsKKyAgaWYgKGZyYW1lLT5ieXRl X29mZnNldCA+PSBCVUZfWlZfQllURSAoaW5idWZmZXIpKQorICAgIHJldHVybiBOVUxMOworICBy ZXR1cm4gaW5idWZmZXI7Cit9CiAKLSAgcmVhZGNoYXJfb2Zmc2V0Kys7CiAKLSAgaWYgKEJVRkZF UlAgKHJlYWRjaGFyZnVuKSkKLSAgICB7Ci0gICAgICByZWdpc3RlciBzdHJ1Y3QgYnVmZmVyICpp bmJ1ZmZlciA9IFhCVUZGRVIgKHJlYWRjaGFyZnVuKTsKK0lOTElORSB2b2lkCityZWFkY2hhcl9t YXJrZXJfZW5kIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUpCit7CisgIFhNQVJLRVIgKGZy YW1lLT5pbnB1dC5tLm1hcmtlciktPmJ5dGVwb3MgPSBmcmFtZS0+Ynl0ZV9vZmZzZXQ7CisgIFhN QVJLRVIgKGZyYW1lLT5pbnB1dC5tLm1hcmtlciktPmNoYXJwb3MgPSArKyhmcmFtZS0+Y2hhcl9v ZmZzZXQpOworfQogCi0gICAgICBwdHJkaWZmX3QgcHRfYnl0ZSA9IEJVRl9QVF9CWVRFIChpbmJ1 ZmZlcik7CiAKLSAgICAgIGlmICghIEJVRkZFUl9MSVZFX1AgKGluYnVmZmVyKSkKLQlyZXR1cm4g LTE7CitzdGF0aWMgaW50CityZWFkY2hhcl9mcm9tX211bHRpYnl0ZV9tYXJrZXIgKHJlZ2lzdGVy IGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgc3RydWN0IGJ1ZmZlciAqaW5idWZmZXIgPSByZWFk Y2hhcl9mcm9tX21hcmtlcl9zdGFydCAoZnJhbWUpOworICBpZiAoaW5idWZmZXIgPT0gTlVMTCkK KyAgICByZXR1cm4gaGFuZGxlX3JlYWRjaGFyX2VvZiAoZnJhbWUpOworICBpbnQgYyA9IHJlYWRj aGFyX2J1ZmZlcl9mZXRjaF9tdWx0aWJ5dGUgKGZyYW1lLCBpbmJ1ZmZlcik7CisgIHJlYWRjaGFy X21hcmtlcl9lbmQgKGZyYW1lKTsKKyAgcmV0dXJuIGM7Cit9CiAKLSAgICAgIGlmIChwdF9ieXRl ID49IEJVRl9aVl9CWVRFIChpbmJ1ZmZlcikpCi0JcmV0dXJuIC0xOworc3RhdGljIGludAorcmVh ZGNoYXJfZnJvbV91bmlieXRlX21hcmtlciAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQor eworICBzdHJ1Y3QgYnVmZmVyICppbmJ1ZmZlciA9IHJlYWRjaGFyX2Zyb21fbWFya2VyX3N0YXJ0 IChmcmFtZSk7CisgIGlmIChpbmJ1ZmZlciA9PSBOVUxMKQorICAgIHJldHVybiBoYW5kbGVfcmVh ZGNoYXJfZW9mIChmcmFtZSk7CisgIGludCBjID0gcmVhZGNoYXJfYnVmZmVyX2ZldGNoX3VuaWJ5 dGUgKGZyYW1lLCBpbmJ1ZmZlcik7CisgIHJlYWRjaGFyX21hcmtlcl9lbmQgKGZyYW1lKTsKKyAg cmV0dXJuIGM7Cit9CiAKLSAgICAgIGlmICghIE5JTFAgKEJWQVIgKGluYnVmZmVyLCBlbmFibGVf bXVsdGlieXRlX2NoYXJhY3RlcnMpKSkKLQl7Ci0JICAvKiBGZXRjaCB0aGUgY2hhcmFjdGVyIGNv ZGUgZnJvbSB0aGUgYnVmZmVyLiAgKi8KLQkgIHVuc2lnbmVkIGNoYXIgKnAgPSBCVUZfQllURV9B RERSRVNTIChpbmJ1ZmZlciwgcHRfYnl0ZSk7Ci0JICBpbnQgY2xlbjsKLQkgIGMgPSBzdHJpbmdf Y2hhcl9hbmRfbGVuZ3RoIChwLCAmY2xlbik7Ci0JICBwdF9ieXRlICs9IGNsZW47Ci0JICBpZiAo bXVsdGlieXRlKQotCSAgICAqbXVsdGlieXRlID0gMTsKLQl9Ci0gICAgICBlbHNlCi0JewotCSAg YyA9IEJVRl9GRVRDSF9CWVRFIChpbmJ1ZmZlciwgcHRfYnl0ZSk7Ci0JICBpZiAoISBBU0NJSV9D SEFSX1AgKGMpKQotCSAgICBjID0gQllURThfVE9fQ0hBUiAoYyk7Ci0JICBwdF9ieXRlKys7Ci0J fQotICAgICAgU0VUX0JVRl9QVF9CT1RIIChpbmJ1ZmZlciwgQlVGX1BUIChpbmJ1ZmZlcikgKyAx LCBwdF9ieXRlKTsKK3N0YXRpYyBpbnQKK3JlYWRjaGFyX2Zyb21fbXVsdGlieXRlX3Byb2NlZHVy ZSAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQoreworICBpZiAoZnJhbWUtPnVucmVhZF9j aGFyID49IDApCisgICAgcmV0dXJuIGhhbmRsZV9idWZmZXJlZF91bnJlYWRfY2hhcmFjdGVyIChm cmFtZSk7CisgIExpc3BfT2JqZWN0IHRlbSA9IGNhbGwwIChmcmFtZS0+aW5wdXQucC5wcm9jKTsK KyAgaW50IGMgPSAoIUZJWE5VTVAgKHRlbSkpID8gLTEgOiBYRklYTlVNKHRlbSk7CisgIGlmIChj ID09IC0xKQorICAgIHJldHVybiBoYW5kbGVfcmVhZGNoYXJfZW9mIChmcmFtZSk7CisgIGZyYW1l LT5jaGFyX29mZnNldCsrOworICAvKiBKdXN0IGFwcHJveGltYXRlIGJ5dGUgY291bnQgYXMgaWYg aXQgd2VyZSBjb2RlZCBpbiBlbWFjcy1pbnRlcm5hbCAqLworICBmcmFtZS0+Ynl0ZV9vZmZzZXQg Kz0gQ0hBUl9CWVRFUyhjKTsKKyAgcmV0dXJuIGM7Cit9CiAKLSAgICAgIHJldHVybiBjOwotICAg IH0KLSAgaWYgKE1BUktFUlAgKHJlYWRjaGFyZnVuKSkKLSAgICB7Ci0gICAgICByZWdpc3RlciBz dHJ1Y3QgYnVmZmVyICppbmJ1ZmZlciA9IFhNQVJLRVIgKHJlYWRjaGFyZnVuKS0+YnVmZmVyOwor c3RhdGljIGludAorcmVhZGNoYXJfZnJvbV9pbmRpcmVjdCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUg KmZyYW1lKQoreworICBscmVhZF9mcmFtZSAqc291cmNlID0gZnJhbWUtPmlucHV0LmZyYW1lLnNv dXJjZTsKKyAgaW50IGM7CisgIGMgPSBSRUFEQ0hBUiAoc291cmNlKTsKKyAgZnJhbWUtPmNoYXJf b2Zmc2V0ID0gc291cmNlLT5jaGFyX29mZnNldDsKKyAgZnJhbWUtPmJ5dGVfb2Zmc2V0ID0gc291 cmNlLT5ieXRlX29mZnNldDsKKyAgZnJhbWUtPm11bGVfY2hhcnNldCA9IHNvdXJjZS0+bXVsZV9j aGFyc2V0OworICBmcmFtZS0+dW5yZWFkX2NoYXIgPSBzb3VyY2UtPnVucmVhZF9jaGFyOworICBm cmFtZS0+dW5yZWFkX2J5dGVzID0gc291cmNlLT51bnJlYWRfYnl0ZXM7CisgIGZyYW1lLT5yZWFk X2VvZiA9IHNvdXJjZS0+cmVhZF9lb2Y7CisgIHJldHVybiBjOworfQogCi0gICAgICBwdHJkaWZm X3QgYnl0ZXBvcyA9IG1hcmtlcl9ieXRlX3Bvc2l0aW9uIChyZWFkY2hhcmZ1bik7CisvKiBkZWZp bmUgc29tZSB1c2VmdWwgY2FzZSBjb25zdGFudHMgKi8KK2VudW0geworICBVTklCWVRFX0ZJTEUg PSBMUkVBRF9JTlBVVF9GSUxFIDw8IDEgfCBMUkVBRF9NVUxUSUJZVEVfRkFMU0UsCisgIE1VTFRJ QllURV9GSUxFID0gTFJFQURfSU5QVVRfRklMRSA8PCAxIHwgTFJFQURfTVVMVElCWVRFX1RSVUUs CisgIFVOSUJZVEVfRklMRV9NVUxFID0gTFJFQURfSU5QVVRfRklMRV9NVUxFIDw8IDEgfCBMUkVB RF9NVUxUSUJZVEVfRkFMU0UsCisgIE1VTFRJQllURV9GSUxFX01VTEUgPSBMUkVBRF9JTlBVVF9G SUxFX01VTEUgPDwgMSB8IExSRUFEX01VTFRJQllURV9UUlVFLAorICBVTklCWVRFX1NUUklORyA9 IExSRUFEX0lOUFVUX1NUUklORyA8PCAxIHwgTFJFQURfTVVMVElCWVRFX0ZBTFNFLAorICBNVUxU SUJZVEVfU1RSSU5HID0gTFJFQURfSU5QVVRfU1RSSU5HIDw8IDEgfCBMUkVBRF9NVUxUSUJZVEVf VFJVRSwKKyAgVU5JQllURV9CVUZGRVIgPSBMUkVBRF9JTlBVVF9CVUZGRVIgPDwgMSB8IExSRUFE X01VTFRJQllURV9GQUxTRSwKKyAgTVVMVElCWVRFX0JVRkZFUiA9IExSRUFEX0lOUFVUX0JVRkZF UiA8PCAxIHwgTFJFQURfTVVMVElCWVRFX1RSVUUsCisgIFVOSUJZVEVfTUFSS0VSID0gTFJFQURf SU5QVVRfTUFSS0VSIDw8IDEgfCBMUkVBRF9NVUxUSUJZVEVfRkFMU0UsCisgIE1VTFRJQllURV9N QVJLRVIgPSBMUkVBRF9JTlBVVF9NQVJLRVIgPDwgMSB8IExSRUFEX01VTFRJQllURV9UUlVFLAor ICBVTklCWVRFX1BST0NFRFVSRSA9IExSRUFEX0lOUFVUX1BST0NFRFVSRSA8PCAxIHwgTFJFQURf TVVMVElCWVRFX0ZBTFNFLAorICBNVUxUSUJZVEVfUFJPQ0VEVVJFID0gTFJFQURfSU5QVVRfUFJP Q0VEVVJFIDw8IDEgfCBMUkVBRF9NVUxUSUJZVEVfVFJVRSwKKyAgVU5JQllURV9CSU5BUlkgPSBM UkVBRF9JTlBVVF9CSU5BUlkgPDwgMSB8IExSRUFEX01VTFRJQllURV9GQUxTRSwKKyAgTVVMVElC WVRFX0JJTkFSWSA9IExSRUFEX0lOUFVUX0JJTkFSWSA8PCAxIHwgTFJFQURfTVVMVElCWVRFX1RS VUUsCisgIFVOSUJZVEVfSU5ESVJFQ1QgPSBMUkVBRF9JTlBVVF9JTkRJUkVDVCA8PCAxIHwgTFJF QURfTVVMVElCWVRFX0ZBTFNFLAorICBNVUxUSUJZVEVfSU5ESVJFQ1QgPSBMUkVBRF9JTlBVVF9J TkRJUkVDVCA8PCAxIHwgTFJFQURfTVVMVElCWVRFX1RSVUUsCisgIFVOSUJZVEVfTlVMTCA9IExS RUFEX0lOUFVUX05VTEwgPDwgMSB8IExSRUFEX01VTFRJQllURV9GQUxTRSwKKyAgTVVMVElCWVRF X05VTEwgPSBMUkVBRF9JTlBVVF9OVUxMIDw8IDEgfCBMUkVBRF9NVUxUSUJZVEVfVFJVRQorfTsK IAotICAgICAgaWYgKGJ5dGVwb3MgPj0gQlVGX1pWX0JZVEUgKGluYnVmZmVyKSkKLQlyZXR1cm4g LTE7CitzdGF0aWMgcmVhZG9uZWNoYXJfZnVuYyByZWFkb25lY2hhcl90YmxbTVVMVElCWVRFX05V TEwgKyAxXSA9CisgIHsKKyAgICBOVUxMLAorICAgIFtVTklCWVRFX0ZJTEVdID0gcmVhZGNoYXJf ZnJvbV91bmlieXRlX2ZpbGUsCisgICAgW01VTFRJQllURV9GSUxFXSA9IHJlYWRjaGFyX2Zyb21f bXVsdGlieXRlX2ZpbGUsCisgICAgW1VOSUJZVEVfRklMRV9NVUxFXSA9IE5VTEwsCisgICAgW01V TFRJQllURV9GSUxFX01VTEVdID0gcmVhZGNoYXJfZnJvbV9tdWxlX2ZpbGUsCisgICAgW1VOSUJZ VEVfU1RSSU5HXSA9IHJlYWRjaGFyX2Zyb21fdW5pYnl0ZV9zdHJpbmcsCisgICAgW01VTFRJQllU RV9TVFJJTkddID0gcmVhZGNoYXJfZnJvbV9tdWx0aWJ5dGVfc3RyaW5nLAorICAgIFtVTklCWVRF X0JVRkZFUl0gPSByZWFkY2hhcl9mcm9tX3VuaWJ5dGVfYnVmZmVyLAorICAgIFtNVUxUSUJZVEVf QlVGRkVSXSA9IHJlYWRjaGFyX2Zyb21fbXVsdGlieXRlX2J1ZmZlciwKKyAgICBbVU5JQllURV9N QVJLRVJdID0gcmVhZGNoYXJfZnJvbV91bmlieXRlX21hcmtlciwKKyAgICBbTVVMVElCWVRFX01B UktFUl0gPSByZWFkY2hhcl9mcm9tX211bHRpYnl0ZV9tYXJrZXIsCisgICAgW1VOSUJZVEVfUFJP Q0VEVVJFXSA9IE5VTEwsCisgICAgW01VTFRJQllURV9QUk9DRURVUkVdID0gcmVhZGNoYXJfZnJv bV9tdWx0aWJ5dGVfcHJvY2VkdXJlLAorICAgIFtVTklCWVRFX0lORElSRUNUXSA9IHJlYWRjaGFy X2Zyb21faW5kaXJlY3QsCisgICAgW01VTFRJQllURV9JTkRJUkVDVF0gPSByZWFkY2hhcl9mcm9t X2luZGlyZWN0LAorICAgIFtVTklCWVRFX05VTExdID0gcmVhZGNoYXJfZnJvbV9udWxsLAorICAg IFtNVUxUSUJZVEVfTlVMTF0gPSByZWFkY2hhcl9mcm9tX251bGwKKyAgfTsKIAotICAgICAgaWYg KCEgTklMUCAoQlZBUiAoaW5idWZmZXIsIGVuYWJsZV9tdWx0aWJ5dGVfY2hhcmFjdGVycykpKQot CXsKLQkgIC8qIEZldGNoIHRoZSBjaGFyYWN0ZXIgY29kZSBmcm9tIHRoZSBidWZmZXIuICAqLwot CSAgdW5zaWduZWQgY2hhciAqcCA9IEJVRl9CWVRFX0FERFJFU1MgKGluYnVmZmVyLCBieXRlcG9z KTsKLQkgIGludCBjbGVuOwotCSAgYyA9IHN0cmluZ19jaGFyX2FuZF9sZW5ndGggKHAsICZjbGVu KTsKLQkgIGJ5dGVwb3MgKz0gY2xlbjsKLQkgIGlmIChtdWx0aWJ5dGUpCi0JICAgICptdWx0aWJ5 dGUgPSAxOwotCX0KK3N0YXRpYyB2b2lkCitpbml0aWFsaXplX3JlYWRvbmVjaGFyIChyZWdpc3Rl ciBscmVhZF9mcmFtZSAqZnJhbWUpCit7CisgcmV0cnk6CisgIGlmIChWQUxJRF9NVUxUSUJZVEUg KGZyYW1lLT5tdWx0aWJ5dGUpKQorICAgIHsKKyAgICAgIGlmIChWQUxJRF9JTlBVVF9UWVBFIChm cmFtZS0+aW50eXBlKSkKKwlmcmFtZS0+cmVhZG9uZWNoYXIgPSByZWFkb25lY2hhcl90YmxbKGZy YW1lLT5pbnR5cGUgPDwgMSkgfCBmcmFtZS0+bXVsdGlieXRlXTsKICAgICAgIGVsc2UKLQl7Ci0J ICBjID0gQlVGX0ZFVENIX0JZVEUgKGluYnVmZmVyLCBieXRlcG9zKTsKLQkgIGlmICghIEFTQ0lJ X0NIQVJfUCAoYykpCi0JICAgIGMgPSBCWVRFOF9UT19DSEFSIChjKTsKLQkgIGJ5dGVwb3MrKzsK LQl9Ci0KLSAgICAgIFhNQVJLRVIgKHJlYWRjaGFyZnVuKS0+Ynl0ZXBvcyA9IGJ5dGVwb3M7Ci0g ICAgICBYTUFSS0VSIChyZWFkY2hhcmZ1biktPmNoYXJwb3MrKzsKLQotICAgICAgcmV0dXJuIGM7 CisJeHNpZ25hbDEgKFFlcnJvciwKKwkJICBDQUxMTiAoRmZvcm1hdCwKKwkJCSBidWlsZF9zdHJp bmcgKCJJbnZhbGlkIGlucHV0IHR5cGUgZm9yIHJlYWQoLSopOiAlUyIpLAorCQkJIG1ha2VfZml4 bnVtKGZyYW1lLT5pbnR5cGUpKSk7CiAgICAgfQotCi0gIGlmIChFUSAocmVhZGNoYXJmdW4sIFFn ZXRfZmlsZV9jaGFyKSkKKyAgZWxzZQogICAgIHsKLSAgICAgIGVhc3NlcnQgKGluZmlsZSk7Ci0g ICAgICByZWFkYnl0ZSA9IHJlYWRieXRlX2Zyb21fZmlsZTsKLSAgICAgIGdvdG8gcmVhZF9tdWx0 aWJ5dGU7CisgICAgICByZXBvcnRfbHJlYWRfbXVsdGlieXRlKGZyYW1lKTsKKyAgICAgIGlmIChW QUxJRF9NVUxUSUJZVEUgKGZyYW1lLT5tdWx0aWJ5dGUpKQorCWdvdG8gcmV0cnk7CisgICAgICB4 c2lnbmFsMSAoUWVycm9yLAorCQlidWlsZF9zdHJpbmcgKCJJbnRlcm5hbCBlcnJvcjogbXVsdGli eXRlLW5lc3Mgb2YgIgorCQkJICAgICAgImlucHV0IHRvIHJlYWQoLSopIGNvdWxkIG5vdCBiZSAi CisJCQkgICAgICAiZGV0ZXJtaW5lZCIpKTsKICAgICB9CisgIGlmICghZnJhbWUtPnJlYWRvbmVj aGFyKQorICAgIHhzaWduYWwxIChRZXJyb3IsCisJICAgICAgQ0FMTE4gKEZmb3JtYXQsCisJCSAg ICAgYnVpbGRfc3RyaW5nICgiSW52YWxpZCByZWFkb25lY2hhciBmdW5jdGlvbiAiCisJCQkJICAg ImZvciByZWFkKC0qKTogaW5wdXQgdHlwZSAlUywgIgorCQkJCSAgICJtdWx0aWJ5dGUgJVMiKSwK KwkJICAgICBtYWtlX2ZpeG51bShmcmFtZS0+aW50eXBlKSwgbWFrZV9maXhudW0oZnJhbWUtPm11 bHRpYnl0ZSkpKTsKK30KIAotICBpZiAoU1RSSU5HUCAocmVhZGNoYXJmdW4pKQorREVGVU4gKCJy ZWFkZXItaW5wdXQtc3RyZWFtIiwKKyAgICAgICBGcmVhZGVyX2lucHV0X3N0cmVhbSwgU3JlYWRl cl9pbnB1dF9zdHJlYW0sIDAsIDEsIDAsCisgICAgICAgZG9jOiAvKiBSZWFkIENIQVJBQ1RFUiBm cm9tIGN1cnJlbnQgcmVhZGVyIHN0cmVhbS4KK09ubHkgZm9yIGludGVybmFsIHVzZS4qLykKKyAg KExpc3BfT2JqZWN0IGNoYXJhY3RlcikKK3sKKyAgcmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1l ID0gY3VycmVudF9mcmFtZTsKKyAgaW50IGM7CisgIGlmIChOSUxQIChjaGFyYWN0ZXIpKQorICAg IGMgPSAtMTsKKyAgZWxzZSBpZiAoQ0hBUkFDVEVSUCAoY2hhcmFjdGVyKSkKKyAgICBjID0gWEZJ WE5VTSAoY2hhcmFjdGVyKTsKKyAgZWxzZQorICAgIHhzaWduYWwxIChRZXJyb3IsCisJICAgICAg Q0FMTE4gKEZmb3JtYXQsCisJCSAgICAgYnVpbGRfc3RyaW5nICgicmVhZGVyLWlucHV0LXN0cmVh bTogIgorCQkJCSAgICJhcmd1bWVudCBub3QgYSBjaGFyYWN0ZXI6ICclcyciKSwKKwkJICAgICBj aGFyYWN0ZXIpKTsKKyAgaWYgKGZyYW1lICYmIGZyYW1lLT5yZWFkb25lY2hhcikKICAgICB7Ci0g ICAgICBpZiAocmVhZF9mcm9tX3N0cmluZ19pbmRleCA+PSByZWFkX2Zyb21fc3RyaW5nX2xpbWl0 KQotCWMgPSAtMTsKLSAgICAgIGVsc2UgaWYgKFNUUklOR19NVUxUSUJZVEUgKHJlYWRjaGFyZnVu KSkKKyAgICAgIGlmIChjID49IDApCiAJewotCSAgaWYgKG11bHRpYnl0ZSkKLQkgICAgKm11bHRp Ynl0ZSA9IDE7Ci0JICBjID0gKGZldGNoX3N0cmluZ19jaGFyX2FkdmFuY2Vfbm9fY2hlY2sKLQkg ICAgICAgKHJlYWRjaGFyZnVuLAotCQkmcmVhZF9mcm9tX3N0cmluZ19pbmRleCwKLQkJJnJlYWRf ZnJvbV9zdHJpbmdfaW5kZXhfYnl0ZSkpOworCSAgVU5SRUFEIChmcmFtZSwgYyk7CiAJfQogICAg ICAgZWxzZQotCXsKLQkgIGMgPSBTUkVGIChyZWFkY2hhcmZ1biwgcmVhZF9mcm9tX3N0cmluZ19p bmRleF9ieXRlKTsKLQkgIHJlYWRfZnJvbV9zdHJpbmdfaW5kZXgrKzsKLQkgIHJlYWRfZnJvbV9z dHJpbmdfaW5kZXhfYnl0ZSsrOwotCX0KLSAgICAgIHJldHVybiBjOworCWMgPSBSRUFEQ0hBUiAo ZnJhbWUpOwogICAgIH0KLQotICBpZiAoRVEgKHJlYWRjaGFyZnVuLCBRZ2V0X2VtYWNzX211bGVf ZmlsZV9jaGFyKSkKLSAgICB7Ci0gICAgICByZWFkYnl0ZSA9IHJlYWRieXRlX2Zyb21fZmlsZTsK LSAgICAgIGVhc3NlcnQgKGluZmlsZSk7Ci0gICAgICBlbWFjc19tdWxlX2VuY29kaW5nID0gMTsK LSAgICAgIGdvdG8gcmVhZF9tdWx0aWJ5dGU7Ci0gICAgfQotCi0gIHRlbSA9IGNhbGwwIChyZWFk Y2hhcmZ1bik7Ci0KLSAgaWYgKCFGSVhOVU1QICh0ZW0pKQotICAgIHJldHVybiAtMTsKLSAgcmV0 dXJuIFhGSVhOVU0gKHRlbSk7Ci0KLSByZWFkX211bHRpYnl0ZToKLSAgaWYgKHVucmVhZF9jaGFy ID49IDApCi0gICAgewotICAgICAgYyA9IHVucmVhZF9jaGFyOwotICAgICAgdW5yZWFkX2NoYXIg PSAtMTsKLSAgICAgIHJldHVybiBjOwotICAgIH0KLSAgYyA9ICgqcmVhZGJ5dGUpICgtMSwgcmVh ZGNoYXJmdW4pOwotICBpZiAoYyA8IDApCi0gICAgcmV0dXJuIGM7Ci0gIGlmIChtdWx0aWJ5dGUp Ci0gICAgKm11bHRpYnl0ZSA9IDE7Ci0gIGlmIChBU0NJSV9DSEFSX1AgKGMpKQotICAgIHJldHVy biBjOwotICBpZiAoZW1hY3NfbXVsZV9lbmNvZGluZykKLSAgICByZXR1cm4gcmVhZF9lbWFjc19t dWxlX2NoYXIgKGMsIHJlYWRieXRlLCByZWFkY2hhcmZ1bik7Ci0gIGkgPSAwOwotICBidWZbaSsr XSA9IGM7Ci0gIGxlbiA9IEJZVEVTX0JZX0NIQVJfSEVBRCAoYyk7Ci0gIHdoaWxlIChpIDwgbGVu KQorICBlbHNlCiAgICAgewotICAgICAgYnVmW2krK10gPSBjID0gKCpyZWFkYnl0ZSkgKC0xLCBy ZWFkY2hhcmZ1bik7Ci0gICAgICBpZiAoYyA8IDAgfHwgISBUUkFJTElOR19DT0RFX1AgKGMpKQot CXsKLQkgIGZvciAoaSAtPSBjIDwgMDsgMCA8IC0taTsgKQotCSAgICAoKnJlYWRieXRlKSAoYnVm W2ldLCByZWFkY2hhcmZ1bik7Ci0JICByZXR1cm4gQllURThfVE9fQ0hBUiAoYnVmWzBdKTsKLQl9 CisgICAgICB4c2lnbmFsMSAoUWVycm9yLAorCQlidWlsZF9zdHJpbmcgKCJyZWFkZXItaW5wdXQt c3RyZWFtOiByZWFkZXIgbm90IGFjdGl2ZSIpKTsKICAgICB9Ci0gIHJldHVybiBTVFJJTkdfQ0hB UiAoYnVmKTsKKyAgcmV0dXJuIChtYWtlX2ZpeG51bSAoYykpOwogfQogCi0jZGVmaW5lIEZST01f RklMRV9QKHJlYWRjaGFyZnVuKQkJCVwKLSAgKEVRIChyZWFkY2hhcmZ1biwgUWdldF9maWxlX2No YXIpCQkJXAotICAgfHwgRVEgKHJlYWRjaGFyZnVuLCBRZ2V0X2VtYWNzX211bGVfZmlsZV9jaGFy KSkKLQogc3RhdGljIHZvaWQKLXNraXBfZHluX2J5dGVzIChMaXNwX09iamVjdCByZWFkY2hhcmZ1 biwgcHRyZGlmZl90IG4pCitza2lwX2R5bl9ieXRlcyAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZy YW1lLCBwdHJkaWZmX3QgbikKIHsKLSAgaWYgKEZST01fRklMRV9QIChyZWFkY2hhcmZ1bikpCisg IGlmIChGUk9NX0ZJTEVfUCAoZnJhbWUtPmludHlwZSkgJiYgIWZyYW1lLT5tdWx0aWJ5dGUpCiAg ICAgewogICAgICAgYmxvY2tfaW5wdXQgKCk7CQkvKiBGSVhNRTogTm90IHN1cmUgaWYgaXQncyBu ZWVkZWQuICAqLwotICAgICAgZmlsZV9zZWVrIChpbmZpbGUtPnN0cmVhbSwgbiAtIGluZmlsZS0+ bG9va2FoZWFkLCBTRUVLX0NVUik7CisgICAgICBmaWxlX3NlZWsgKGZyYW1lLT5pbnB1dC5mLnN0 cmVhbSwgbiAtIGZyYW1lLT5pbnB1dC5mLmxvb2thaGVhZCwgU0VFS19DVVIpOworICAgICAgZnJh bWUtPmNoYXJfb2Zmc2V0ICs9IG47CisgICAgICBmcmFtZS0+Ynl0ZV9vZmZzZXQgKz0gbjsKICAg ICAgIHVuYmxvY2tfaW5wdXQgKCk7Ci0gICAgICBpbmZpbGUtPmxvb2thaGVhZCA9IDA7CisgICAg ICBmcmFtZS0+aW5wdXQuZi5sb29rYWhlYWQgPSAwOwogICAgIH0KICAgZWxzZQogICAgIHsgLyog V2UncmUgbm90IHJlYWRpbmcgZGlyZWN0bHkgZnJvbSBhIGZpbGUuICBJbiB0aGF0IGNhc2UsIGl0 J3MgZGlmZmljdWx0CkBAIC00NTcsMTUzICsxNTA1LDIwNCBAQCBza2lwX2R5bl9ieXRlcyAoTGlz cF9PYmplY3QgcmVhZGNoYXJmdW4sIHB0cmRpZmZfdCBuKQogCSB0aGF0IFwwMzcgaXMgdGhlIGZp bmFsIGNoYXIuICAqLwogICAgICAgaW50IGM7CiAgICAgICBkbyB7Ci0JYyA9IFJFQURDSEFSOwor CWMgPSBSRUFEQ0hBUiAoZnJhbWUpOwogICAgICAgfSB3aGlsZSAoYyA+PSAwICYmIGMgIT0gJ1ww MzcnKTsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkCi1za2lwX2R5bl9lb2YgKExpc3BfT2JqZWN0 IHJlYWRjaGFyZnVuKQorc2tpcF9keW5fZW9mIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUp CiB7Ci0gIGlmIChGUk9NX0ZJTEVfUCAocmVhZGNoYXJmdW4pKQorICBpZiAoRlJPTV9GSUxFX1Ag KGZyYW1lLT5pbnR5cGUpICYmICFmcmFtZS0+bXVsdGlieXRlKQogICAgIHsKICAgICAgIGJsb2Nr X2lucHV0ICgpOwkJLyogRklYTUU6IE5vdCBzdXJlIGlmIGl0J3MgbmVlZGVkLiAgKi8KLSAgICAg IGZpbGVfc2VlayAoaW5maWxlLT5zdHJlYW0sIDAsIFNFRUtfRU5EKTsKKyAgICAgIHB0cmRpZmZf dCBuID0gZmlsZV90ZWxsIChmcmFtZS0+aW5wdXQuZi5zdHJlYW0pOworICAgICAgZmlsZV9zZWVr IChmcmFtZS0+aW5wdXQuZi5zdHJlYW0sIDAsIFNFRUtfRU5EKTsKKyAgICAgIG4gPSBmaWxlX3Rl bGwgKGZyYW1lLT5pbnB1dC5mLnN0cmVhbSkgLSBuOworICAgICAgZnJhbWUtPmNoYXJfb2Zmc2V0 ICs9IG47CisgICAgICBmcmFtZS0+Ynl0ZV9vZmZzZXQgKz0gbjsKICAgICAgIHVuYmxvY2tfaW5w dXQgKCk7Ci0gICAgICBpbmZpbGUtPmxvb2thaGVhZCA9IDA7CisgICAgICBmcmFtZS0+aW5wdXQu Zi5sb29rYWhlYWQgPSAwOworICAgICAgZnJhbWUtPnJlYWRfZW9mID0gdHJ1ZTsKICAgICB9CiAg IGVsc2UKLSAgICB3aGlsZSAoUkVBRENIQVIgPj0gMCk7CisgICAgd2hpbGUgKFJFQURDSEFSIChm cmFtZSkgPj0gMCk7CiB9CiAKLS8qIFVucmVhZCB0aGUgY2hhcmFjdGVyIEMgaW4gdGhlIHdheSBh cHByb3ByaWF0ZSBmb3IgdGhlIHN0cmVhbSBSRUFEQ0hBUkZVTi4KLSAgIElmIHRoZSBzdHJlYW0g aXMgYSB1c2VyIGZ1bmN0aW9uLCBjYWxsIGl0IHdpdGggdGhlIGNoYXIgYXMgYXJndW1lbnQuICAq LwotCi1zdGF0aWMgdm9pZAotdW5yZWFkY2hhciAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGlu dCBjKQordm9pZAordW5yZWFkY2hhciAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLGludCBj KQogewotICByZWFkY2hhcl9vZmZzZXQtLTsKLSAgaWYgKGMgPT0gLTEpCi0gICAgLyogRG9uJ3Qg YmFjayB1cCB0aGUgcG9pbnRlciBpZiB3ZSdyZSB1bnJlYWRpbmcgdGhlIGVuZC1vZi1pbnB1dCBt YXJrLAotICAgICAgIHNpbmNlIHJlYWRjaGFyIGRpZG4ndCBhZHZhbmNlIGl0IHdoZW4gd2UgcmVh ZCBpdC4gICovCi0gICAgOwotICBlbHNlIGlmIChCVUZGRVJQIChyZWFkY2hhcmZ1bikpCi0gICAg ewotICAgICAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKHJlYWRjaGFyZnVuKTsKLSAgICAg IHB0cmRpZmZfdCBjaGFycG9zID0gQlVGX1BUIChiKTsKLSAgICAgIHB0cmRpZmZfdCBieXRlcG9z ID0gQlVGX1BUX0JZVEUgKGIpOwotCi0gICAgICBpZiAoISBOSUxQIChCVkFSIChiLCBlbmFibGVf bXVsdGlieXRlX2NoYXJhY3RlcnMpKSkKLQlieXRlcG9zIC09IGJ1Zl9wcmV2X2NoYXJfbGVuIChi LCBieXRlcG9zKTsKLSAgICAgIGVsc2UKLQlieXRlcG9zLS07Ci0KLSAgICAgIFNFVF9CVUZfUFRf Qk9USCAoYiwgY2hhcnBvcyAtIDEsIGJ5dGVwb3MpOwotICAgIH0KLSAgZWxzZSBpZiAoTUFSS0VS UCAocmVhZGNoYXJmdW4pKQotICAgIHsKLSAgICAgIHN0cnVjdCBidWZmZXIgKmIgPSBYTUFSS0VS IChyZWFkY2hhcmZ1biktPmJ1ZmZlcjsKLSAgICAgIHB0cmRpZmZfdCBieXRlcG9zID0gWE1BUktF UiAocmVhZGNoYXJmdW4pLT5ieXRlcG9zOwotCi0gICAgICBYTUFSS0VSIChyZWFkY2hhcmZ1bikt PmNoYXJwb3MtLTsKLSAgICAgIGlmICghIE5JTFAgKEJWQVIgKGIsIGVuYWJsZV9tdWx0aWJ5dGVf Y2hhcmFjdGVycykpKQotCWJ5dGVwb3MgLT0gYnVmX3ByZXZfY2hhcl9sZW4gKGIsIGJ5dGVwb3Mp OwotICAgICAgZWxzZQotCWJ5dGVwb3MtLTsKLQotICAgICAgWE1BUktFUiAocmVhZGNoYXJmdW4p LT5ieXRlcG9zID0gYnl0ZXBvczsKLSAgICB9Ci0gIGVsc2UgaWYgKFNUUklOR1AgKHJlYWRjaGFy ZnVuKSkKLSAgICB7Ci0gICAgICByZWFkX2Zyb21fc3RyaW5nX2luZGV4LS07Ci0gICAgICByZWFk X2Zyb21fc3RyaW5nX2luZGV4X2J5dGUKLQk9IHN0cmluZ19jaGFyX3RvX2J5dGUgKHJlYWRjaGFy ZnVuLCByZWFkX2Zyb21fc3RyaW5nX2luZGV4KTsKLSAgICB9Ci0gIGVsc2UgaWYgKEZST01fRklM RV9QIChyZWFkY2hhcmZ1bikpCisgIGlmIChjIDwgMCkKKyAgICByZXR1cm47CisgIHN3aXRjaCAo ZnJhbWUtPmludHlwZSkKICAgICB7Ci0gICAgICB1bnJlYWRfY2hhciA9IGM7CisgICAgY2FzZSBM UkVBRF9JTlBVVF9GSUxFOgorICAgICAgeworCWZyYW1lLT51bnJlYWRfY2hhciA9IGM7CisJZnJh bWUtPmNoYXJfb2Zmc2V0LS07CisJaWYgKGZyYW1lLT5tdWx0aWJ5dGUpCisJICB7CisJICAgIGZy YW1lLT51bnJlYWRfYnl0ZXMgPSBDSEFSX0JZVEVTKGMpOworCSAgICBmcmFtZS0+Ynl0ZV9vZmZz ZXQgLT0gZnJhbWUtPnVucmVhZF9ieXRlczsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGZyYW1l LT51bnJlYWRfYnl0ZXMgPSAxOworCSAgICBmcmFtZS0+Ynl0ZV9vZmZzZXQtLTsKKwkgIH0KKyAg ICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfRklMRV9NVUxFOgorICAg ICAgeworCWZyYW1lLT51bnJlYWRfY2hhciA9IGM7CisJZnJhbWUtPmNoYXJfb2Zmc2V0LS07CisJ ZnJhbWUtPnVucmVhZF9ieXRlcworCSAgPSBnZXRfZW1hY3NfbXVsZV9jaGFyX2xlbmd0aCAoZnJh bWUtPm11bGVfY2hhcnNldCwgYyk7CisJZnJhbWUtPmJ5dGVfb2Zmc2V0IC09IGZyYW1lLT51bnJl YWRfYnl0ZXM7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX1NU UklORzoKKyAgICAgIHsKKwlmcmFtZS0+Y2hhcl9vZmZzZXQtLTsKKwlmcmFtZS0+Ynl0ZV9vZmZz ZXQgLT0gZnJhbWUtPm11bHRpYnl0ZSA/IENIQVJfQllURVMgKGMpIDogMTsKKyAgICAgIH0KKyAg ICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfUFJPQ0VEVVJFOgorICAgICAgeworCWNh bGxuIChmcmFtZS0+aW5wdXQucC5wcm9jLCBtYWtlX2ZpeG51bSAoYykpOworCWZyYW1lLT5jaGFy X29mZnNldC0tOworCWZyYW1lLT5ieXRlX29mZnNldCAtPSBDSEFSX0JZVEVTKGMpOworICAgICAg fQorICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9CVUZGRVI6CisgICAgICB7CisJ c3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKGZyYW1lLT5pbnB1dC5iLmJ1ZmZlcik7CisJZnJh bWUtPmNoYXJfb2Zmc2V0ID0gQlVGX1BUIChiKTsKKwlmcmFtZS0+Ynl0ZV9vZmZzZXQgPSBCVUZf UFRfQllURSAoYik7CisJaWYgKGZyYW1lLT5tdWx0aWJ5dGUpCisJICBmcmFtZS0+Ynl0ZV9vZmZz ZXQgLT0gYnVmX3ByZXZfY2hhcl9sZW4gKGIsIGZyYW1lLT5ieXRlX29mZnNldCk7CisJZWxzZQor CSAgZnJhbWUtPmJ5dGVfb2Zmc2V0LS07CisJZnJhbWUtPmNoYXJfb2Zmc2V0LS07CisJU0VUX0JV Rl9QVF9CT1RIIChiLCBmcmFtZS0+Y2hhcl9vZmZzZXQsIGZyYW1lLT5ieXRlX29mZnNldCk7Cisg ICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX01BUktFUjoKKyAgICAg IHsKKwlzdHJ1Y3QgYnVmZmVyICpiID0gWE1BUktFUiAoZnJhbWUtPmlucHV0Lm0ubWFya2VyKS0+ YnVmZmVyOworCWZyYW1lLT5ieXRlX29mZnNldCA9IFhNQVJLRVIgKGZyYW1lLT5pbnB1dC5tLm1h cmtlciktPmJ5dGVwb3M7CisJZnJhbWUtPmNoYXJfb2Zmc2V0ID0gLS0oWE1BUktFUiAoZnJhbWUt PmlucHV0Lm0ubWFya2VyKS0+Y2hhcnBvcyk7CisJaWYgKGZyYW1lLT5tdWx0aWJ5dGUpCisJICBm cmFtZS0+Ynl0ZV9vZmZzZXQgLT0gYnVmX3ByZXZfY2hhcl9sZW4gKGIsIGZyYW1lLT5ieXRlX29m ZnNldCk7CisJZWxzZQorCSAgZnJhbWUtPmJ5dGVfb2Zmc2V0LS07CisJWE1BUktFUiAoZnJhbWUt PmlucHV0Lm0ubWFya2VyKS0+Ynl0ZXBvcyA9IGZyYW1lLT5ieXRlX29mZnNldDsKKyAgICAgIH0K KyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfQklOQVJZOgorICAgIGNhc2UgTFJF QURfSU5QVVRfTlVMTDoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfSU5ESVJF Q1Q6CisgICAgICB1bnJlYWRjaGFyIChmcmFtZS0+aW5wdXQuZnJhbWUuc291cmNlLCBjKTsKKyAg ICAgIGJyZWFrOworICAgICAgVU5SRUNPR05JWkVEX0xSRUFEX0lOUFVUX0NBU0VTKCJ1bnJlYWRj aGFyIikKICAgICB9Ci0gIGVsc2UKLSAgICBjYWxsbiAocmVhZGNoYXJmdW4sIG1ha2VfZml4bnVt IChjKSk7CiB9CiAKLXN0YXRpYyBpbnQKLXJlYWRieXRlX2Zyb21fc3RkaW8gKHZvaWQpCi17Ci0g IGlmIChpbmZpbGUtPmxvb2thaGVhZCkKLSAgICByZXR1cm4gaW5maWxlLT5idWZbLS1pbmZpbGUt Pmxvb2thaGVhZF07Ci0KLSAgaW50IGM7Ci0gIGZpbGVfc3RyZWFtIGluc3RyZWFtID0gaW5maWxl LT5zdHJlYW07Ci0KLSAgYmxvY2tfaW5wdXQgKCk7Ci0KLSNpZiAhZGVmaW5lZCBVU0VfQU5EUk9J RF9BU1NFVFMKKy8qIE1ha2Ugc3VyZSB0aGUgZmlsZSBzdHJlYW0gZWF0cyB0aGUgZmluYWwgdW5y ZWFkY2hhcgorICAgYWZ0ZXIgYSByZWFkIG9wZXJhdGlvbiB0aGF0IHdvbid0IGJlIGNvbnRpbnVl ZCwKKyAgIGkuZS4gIGluIGEgc2luZ2xlIG9wZXJhdGlvbiAqLwogCi0gIC8qIEludGVycnVwdGVk IHJlYWRzIGhhdmUgYmVlbiBvYnNlcnZlZCB3aGlsZSByZWFkaW5nIG92ZXIgdGhlIG5ldHdvcmsu ICAqLwotICB3aGlsZSAoKGMgPSBnZXRjIChpbnN0cmVhbSkpID09IEVPRiAmJiBlcnJubyA9PSBF SU5UUiAmJiBmZXJyb3IgKGluc3RyZWFtKSkKK3N0YXRpYyB2b2lkCitjbG9zaW5nX3VucmVhZGNo YXIgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgc3dpdGNoIChmcmFtZS0+aW50 eXBlKQogICAgIHsKLSAgICAgIHVuYmxvY2tfaW5wdXQgKCk7Ci0gICAgICBtYXliZV9xdWl0ICgp OwotICAgICAgYmxvY2tfaW5wdXQgKCk7Ci0gICAgICBjbGVhcmVyciAoaW5zdHJlYW0pOwotICAg IH0KLQotI2Vsc2UKLQotICB7Ci0gICAgY2hhciBieXRlOwotICAgIHNzaXplX3QgcmM7Ci0KLSAg cmV0cnk6Ci0gICAgcmMgPSBhbmRyb2lkX2Fzc2V0X3JlYWQgKGluc3RyZWFtLCAmYnl0ZSwgMSk7 Ci0KLSAgICBpZiAocmMgPT0gMCkKLSAgICAgIGMgPSBFT0Y7Ci0gICAgZWxzZSBpZiAocmMgPT0g LTEpCisgICAgY2FzZSBMUkVBRF9JTlBVVF9QUk9DRURVUkU6CisgICAgY2FzZSBMUkVBRF9JTlBV VF9CVUZGRVI6CisgICAgY2FzZSBMUkVBRF9JTlBVVF9NQVJLRVI6CisgICAgY2FzZSBMUkVBRF9J TlBVVF9TVFJJTkc6CisgICAgY2FzZSBMUkVBRF9JTlBVVF9CSU5BUlk6CisgICAgY2FzZSBMUkVB RF9JTlBVVF9OVUxMOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9GSUxFOgor ICAgIGNhc2UgTFJFQURfSU5QVVRfRklMRV9NVUxFOgogICAgICAgewotCWlmIChlcnJubyA9PSBF SU5UUikKKwkvKiBhbHdheXMgcHV0IGJhY2sgYW55IGxvb3NlIGJ5dGVzIHRoYXQgaGF2ZSBiZWVu IHBlZWtlZAorCSAgIGJ1dCBub3QgcGFydCBvZiBhIGNoYXJhY3RlciBjb25zdW1lZCBieSByZWFk MCAqLworCWZvciAoaW50IGkgPSBmcmFtZS0+aW5wdXQuZi5sb29rYWhlYWQtMTsgaSA+PSAwOyBp LS0pCiAJICB7Ci0JICAgIHVuYmxvY2tfaW5wdXQgKCk7Ci0JICAgIG1heWJlX3F1aXQgKCk7Ci0J ICAgIGJsb2NrX2lucHV0ICgpOwotCSAgICBnb3RvIHJldHJ5OworCSAgICB1bmdldGMgKGZyYW1l LT5pbnB1dC5mLmJ1ZltpXSwgZnJhbWUtPmlucHV0LmYuc3RyZWFtKTsKKwkgIH0KKwlmcmFtZS0+ aW5wdXQuZi5sb29rYWhlYWQgPSAwOworCS8qIFRoZW4gYW55IGNoYXJhY3RlciB0aGF0IGhhcyBi ZWVuIHVucmVhZAorCSAgIGhhcyB0byBiZSB0dXJuZWQgaW50byBhIGJ5dGUKKwkgICBlbmNvZGlu ZyBhbmQgcmV0dXJuZWQgKi8KKwlpZiAoZnJhbWUtPnVucmVhZF9jaGFyID49IDApCisJICB7CisJ ICAgIGludCBjID0gZnJhbWUtPnVucmVhZF9jaGFyOworCSAgICBpbnQgZGltID0gZnJhbWUtPnVu cmVhZF9ieXRlczsKKwkgICAgdW5zaWduZWQgY2hhciBidWZbTUFYX01VTFRJQllURV9MRU5HVEhd OworCSAgICBmcmFtZS0+dW5yZWFkX2NoYXIgPSAtMTsKKwkgICAgZnJhbWUtPnVucmVhZF9ieXRl cyA9IDA7CisJICAgIGlmIChmcmFtZS0+bXVsdGlieXRlICYmICFmcmFtZS0+aW5wdXQuZi5tdWxl KQorCSAgICAgIHsKKwkJLyogb25seSBlbWFjcy1pbnRlcm5hbCBjb2RpbmcgYWxsb3dlZAorCQkg ICBmb3IgYWN0dWFsIG11bHRpYnl0ZSBmaWxlIHN0cmVhbXMKKwkJICAgT25seSBjYXNlIGlzIHJl YWRpbmcgZnJvbSBzdGFuZGFyZAorCQkgICBpbnB1dCBpbiBub24tZWRpdG9yIG1vZGUuCisJCSov CisJCWludCBsZW4gPSBDSEFSX1NUUklORyAoYywgYnVmKTsKKwkJZWFzc3VtZSAobGVuID09IGRp bSk7CisJCWZvciAoaW50IGkgPSAobGVuIC0gMSk7IGkgPj0gMDsgaS0tKQorCQkgIHVuZ2V0YyAo YnVmW2ldLCBmcmFtZS0+aW5wdXQuZi5zdHJlYW0pOworCSAgICAgIH0KKwkgICAgZWxzZSBpZiAo IWZyYW1lLT5tdWx0aWJ5dGUpCisJICAgICAgeworCQkvKiB1bmlieXRlICovCisJICAgICAgfQor CSAgICBlbHNlCisJICAgICAgeworCQkvKiBlbWFjcy1tdWxlIGVuY29kaW5nCisJCSAgIExlYXN0 IGxpa2VseSBjYXNlIGxhc3QgKi8KKwkJaW50IHN6ID0gQ0hBUlNFVF9ESU1FTlNJT04gKGZyYW1l LT5tdWxlX2NoYXJzZXQpOworCQl1bnNpZ25lZCBjb2RlID0gRU5DT0RFX0NIQVIgKGZyYW1lLT5t dWxlX2NoYXJzZXQsIGMpOworCQlpbnQgbGVuOworCQlmb3IgKGxlbiA9IDA7IHN6ID4gMCAmJiAo Y29kZSAmIDB4RkYpOyBzei0tKQorCQkgIHsKKwkJICAgIGJ1ZltsZW4rK10gPSAodW5zaWduZWQg Y2hhcikgKGNvZGUgJiAweEZGKTsKKwkJICAgIGNvZGUgPj49IDg7CisJCSAgfQorCQllYXNzdW1l IChsZW4gPT0gZGltKTsKKwkJZm9yIChpbnQgaSA9IChsZW4gLSAxKTsgaSA+PSAwOyBpLS0pCisJ CSAgdW5nZXRjIChidWZbaV0sIGZyYW1lLT5pbnB1dC5mLnN0cmVhbSk7CisJICAgICAgfQogCSAg fQotCWVsc2UKLQkgIGMgPSBFT0Y7CiAgICAgICB9Ci0gICAgZWxzZQotICAgICAgYyA9ICh1bnNp Z25lZCBjaGFyKSBieXRlOwotICB9Ci0KLSNlbmRpZgotCi0gIHVuYmxvY2tfaW5wdXQgKCk7Ci0K LSAgcmV0dXJuIChjID09IEVPRiA/IC0xIDogYyk7Ci19CisgICAgICBicmVhazsKKyAgICBjYXNl IExSRUFEX0lOUFVUX0lORElSRUNUOgorICAgICAgeworCWxyZWFkX2ZyYW1lICpzb3VyY2UgPSBm cmFtZS0+aW5wdXQuZnJhbWUuc291cmNlOworCWNsb3NpbmdfdW5yZWFkY2hhciAoc291cmNlKTsK KwlmcmFtZS0+Y2hhcl9vZmZzZXQgPSBzb3VyY2UtPmNoYXJfb2Zmc2V0OworCWZyYW1lLT5ieXRl X29mZnNldCA9IHNvdXJjZS0+Ynl0ZV9vZmZzZXQ7CisJZnJhbWUtPnVucmVhZF9jaGFyID0gc291 cmNlLT51bnJlYWRfY2hhcjsKKwlmcmFtZS0+dW5yZWFkX2J5dGVzID0gc291cmNlLT51bnJlYWRf Ynl0ZXM7CisJZnJhbWUtPm11bGVfY2hhcnNldCA9IHNvdXJjZS0+bXVsZV9jaGFyc2V0OworICAg ICAgfQorICAgICAgYnJlYWs7CiAKLXN0YXRpYyBpbnQKLXJlYWRieXRlX2Zyb21fZmlsZSAoaW50 IGMsIExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQotewotICBlYXNzZXJ0IChpbmZpbGUpOwotICBp ZiAoYyA+PSAwKQotICAgIHsKLSAgICAgIGVhc3NlcnQgKGluZmlsZS0+bG9va2FoZWFkIDwgc2l6 ZW9mIGluZmlsZS0+YnVmKTsKLSAgICAgIGluZmlsZS0+YnVmW2luZmlsZS0+bG9va2FoZWFkKytd ID0gYzsKLSAgICAgIHJldHVybiAwOworICAgICAgVU5SRUNPR05JWkVEX0xSRUFEX0lOUFVUX0NB U0VTKCJjbG9zaW5nX3VucmVhZGNoYXIiKTsKICAgICB9Ci0KLSAgcmV0dXJuIHJlYWRieXRlX2Zy b21fc3RkaW8gKCk7CiB9Ci0KIC8qIFNpZ25hbCBRaW52YWxpZF9yZWFkX3N5bnRheCBlcnJvci4K ICAgIFMgaXMgZXJyb3Igc3RyaW5nIG9mIGxlbmd0aCBOIChpZiA+IDApICAqLwogCi1zdGF0aWMg QVZPSUQKLWludmFsaWRfc3ludGF4X2xpc3AgKExpc3BfT2JqZWN0IHMsIExpc3BfT2JqZWN0IHJl YWRjaGFyZnVuKQorQVZPSUQKK2ludmFsaWRfc3ludGF4X2xpc3AgKHJlZ2lzdGVyIGxyZWFkX2Zy YW1lICpmcmFtZSwgTGlzcF9PYmplY3QgcykKIHsKLSAgaWYgKEJVRkZFUlAgKHJlYWRjaGFyZnVu KSkKKyByZXRyeToKKyAgaWYgKEhBU19CVUZGRVJfUCAoZnJhbWUtPmludHlwZSkpCiAgICAgewog ICAgICAgcHRyZGlmZl90IGxpbmUsIGNvbHVtbjsKIApAQCAtNjEyLDcgKzE3MTEsNyBAQCBpbnZh bGlkX3N5bnRheF9saXNwIChMaXNwX09iamVjdCBzLCBMaXNwX09iamVjdCByZWFkY2hhcmZ1bikK IAlzcGVjcGRsX3JlZiBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CiAKIAlyZWNvcmRfdW53aW5k X3Byb3RlY3RfZXhjdXJzaW9uICgpOwotCXNldF9idWZmZXJfaW50ZXJuYWwgKFhCVUZGRVIgKHJl YWRjaGFyZnVuKSk7CisJc2V0X2J1ZmZlcl9pbnRlcm5hbCAobHJlYWRfZ2V0X2J1ZmZlcihmcmFt ZSkpOwogCWxpbmUgPSBjb3VudF9saW5lcyAoQkVHVl9CWVRFLCBQVF9CWVRFKSArIDE7CiAJY29s dW1uID0gY3VycmVudF9jb2x1bW4gKCk7CiAJdW5iaW5kX3RvIChjb3VudCwgUW5pbCk7CkBAIC02 MjEsNzkgKzE3MjAsMjYgQEAgaW52YWxpZF9zeW50YXhfbGlzcCAoTGlzcF9PYmplY3QgcywgTGlz cF9PYmplY3QgcmVhZGNoYXJmdW4pCiAgICAgICB4c2lnbmFsIChRaW52YWxpZF9yZWFkX3N5bnRh eCwKIAkgICAgICAgbGlzdDMgKHMsIG1ha2VfZml4bnVtIChsaW5lKSwgbWFrZV9maXhudW0gKGNv bHVtbikpKTsKICAgICB9Ci0gIGVsc2UKLSAgICB4c2lnbmFsMSAoUWludmFsaWRfcmVhZF9zeW50 YXgsIHMpOwotfQotCi1zdGF0aWMgQVZPSUQKLWludmFsaWRfc3ludGF4IChjb25zdCBjaGFyICpz LCBMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKLXsKLSAgaW52YWxpZF9zeW50YXhfbGlzcCAoYnVp bGRfc3RyaW5nIChzKSwgcmVhZGNoYXJmdW4pOwotfQotCi0KLS8qIFJlYWQgb25lIG5vbi1BU0NJ SSBjaGFyYWN0ZXIgZnJvbSBJTkZJTEUuICBUaGUgY2hhcmFjdGVyIGlzCi0gICBlbmNvZGVkIGlu IGBlbWFjcy1tdWxlJyBhbmQgdGhlIGZpcnN0IGJ5dGUgaXMgYWxyZWFkeSByZWFkIGluCi0gICBD LiAgKi8KLQotc3RhdGljIGludAotcmVhZF9lbWFjc19tdWxlX2NoYXIgKGludCBjLCBpbnQgKCpy ZWFkYnl0ZSkgKGludCwgTGlzcF9PYmplY3QpLCBMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKLXsK LSAgLyogRW1hY3MtbXVsZSBjb2RpbmcgdXNlcyBhdCBtb3N0IDQtYnl0ZSBmb3Igb25lIGNoYXJh Y3Rlci4gICovCi0gIHVuc2lnbmVkIGNoYXIgYnVmWzRdOwotICBpbnQgbGVuID0gZW1hY3NfbXVs ZV9ieXRlc1tjXTsKLSAgc3RydWN0IGNoYXJzZXQgKmNoYXJzZXQ7Ci0gIGludCBpOwotICB1bnNp Z25lZCBjb2RlOwotCi0gIGlmIChsZW4gPT0gMSkKLSAgICAvKiBDIGlzIG5vdCBhIHZhbGlkIGxl YWRpbmctY29kZSBvZiBgZW1hY3MtbXVsZScuICAqLwotICAgIHJldHVybiBCWVRFOF9UT19DSEFS IChjKTsKLQotICBpID0gMDsKLSAgYnVmW2krK10gPSBjOwotICB3aGlsZSAoaSA8IGxlbikKLSAg ICB7Ci0gICAgICBidWZbaSsrXSA9IGMgPSAoKnJlYWRieXRlKSAoLTEsIHJlYWRjaGFyZnVuKTsK LSAgICAgIGlmIChjIDwgMHhBMCkKLQl7Ci0JICBmb3IgKGkgLT0gYyA8IDA7IDAgPCAtLWk7ICkK LQkgICAgKCpyZWFkYnl0ZSkgKGJ1ZltpXSwgcmVhZGNoYXJmdW4pOwotCSAgcmV0dXJuIEJZVEU4 X1RPX0NIQVIgKGJ1ZlswXSk7Ci0JfQotICAgIH0KLQotICBpZiAobGVuID09IDIpCi0gICAgewot ICAgICAgY2hhcnNldCA9IENIQVJTRVRfRlJPTV9JRCAoZW1hY3NfbXVsZV9jaGFyc2V0W2J1Zlsw XV0pOwotICAgICAgY29kZSA9IGJ1ZlsxXSAmIDB4N0Y7Ci0gICAgfQotICBlbHNlIGlmIChsZW4g PT0gMykKLSAgICB7Ci0gICAgICBpZiAoYnVmWzBdID09IEVNQUNTX01VTEVfTEVBRElOR19DT0RF X1BSSVZBVEVfMTEKLQkgIHx8IGJ1ZlswXSA9PSBFTUFDU19NVUxFX0xFQURJTkdfQ09ERV9QUklW QVRFXzEyKQotCXsKLQkgIGNoYXJzZXQgPSBDSEFSU0VUX0ZST01fSUQgKGVtYWNzX211bGVfY2hh cnNldFtidWZbMV1dKTsKLQkgIGNvZGUgPSBidWZbMl0gJiAweDdGOwotCX0KLSAgICAgIGVsc2UK LQl7Ci0JICBjaGFyc2V0ID0gQ0hBUlNFVF9GUk9NX0lEIChlbWFjc19tdWxlX2NoYXJzZXRbYnVm WzBdXSk7Ci0JICBjb2RlID0gKChidWZbMV0gPDwgOCkgfCBidWZbMl0pICYgMHg3RjdGOwotCX0K LSAgICB9Ci0gIGVsc2UKKyAgZWxzZSBpZiAoZnJhbWUtPmludHlwZSA9PSBMUkVBRF9JTlBVVF9J TkRJUkVDVAorICAgICAgJiYgZnJhbWUtPmlucHV0LmZyYW1lLnNvdXJjZSAmJiBmcmFtZSAhPSBm cmFtZS0+aW5wdXQuZnJhbWUuc291cmNlKQogICAgIHsKLSAgICAgIGNoYXJzZXQgPSBDSEFSU0VU X0ZST01fSUQgKGVtYWNzX211bGVfY2hhcnNldFtidWZbMV1dKTsKLSAgICAgIGNvZGUgPSAoKGJ1 ZlsyXSA8PCA4KSB8IGJ1ZlszXSkgJiAweDdGN0Y7CisgICAgICAvKiBTaHV0IHVwIGluZmluaXRl IHJlY3Vyc2lvbiB3YXJuaW5nICovCisgICAgICBmcmFtZSA9IGZyYW1lLT5pbnB1dC5mcmFtZS5z b3VyY2U7CisgICAgICBnb3RvIHJldHJ5OwogICAgIH0KLSAgYyA9IERFQ09ERV9DSEFSIChjaGFy c2V0LCBjb2RlKTsKLSAgaWYgKGMgPCAwKQotICAgIGludmFsaWRfc3ludGF4ICgiaW52YWxpZCBt dWx0aWJ5dGUgZm9ybSIsIHJlYWRjaGFyZnVuKTsKLSAgcmV0dXJuIGM7CisgIGVsc2UKKyAgICB4 c2lnbmFsMSAoUWludmFsaWRfcmVhZF9zeW50YXgsIHMpOworfQorCitBVk9JRAoraW52YWxpZF9z eW50YXggKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwgY29uc3QgY2hhciAqcykKK3sKKyAg aW52YWxpZF9zeW50YXhfbGlzcCAoZnJhbWUsIGJ1aWxkX3N0cmluZyAocykpOwogfQogCiAKKwor CiAvKiBBbiBpbi1wcm9ncmVzcyBzdWJzdGl0dXRpb24gb2YgT0JKRUNUIGZvciBQTEFDRUhPTERF Ui4gICovCiBzdHJ1Y3Qgc3Vic3QKIHsKQEAgLTcwOCwxMyArMTc1NCwxMCBAQCByZWFkX2VtYWNz X211bGVfY2hhciAoaW50IGMsIGludCAoKnJlYWRieXRlKSAoaW50LCBMaXNwX09iamVjdCksIExp c3BfT2JqZWN0IHJlYQogICBMaXNwX09iamVjdCBzZWVuOwogfTsKIAotc3RhdGljIExpc3BfT2Jq ZWN0IHJlYWRfaW50ZXJuYWxfc3RhcnQgKExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXNwX09iamVjdCwgYm9vbCk7Ci1z dGF0aWMgTGlzcF9PYmplY3QgcmVhZDAgKExpc3BfT2JqZWN0LCBib29sKTsKLQogc3RhdGljIExp c3BfT2JqZWN0IHN1YnN0aXR1dGVfb2JqZWN0X3JlY3Vyc2UgKHN0cnVjdCBzdWJzdCAqLCBMaXNw X09iamVjdCk7CiBzdGF0aWMgdm9pZCBzdWJzdGl0dXRlX2luX2ludGVydmFsIChJTlRFUlZBTCwg dm9pZCAqKTsKIAorCiAMCiAvKiBHZXQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgdHR5LiAgKi8KIApA QCAtOTg4LDQyICsyMDMxLDYzIEBAIERFRlVOICgicmVhZC1jaGFyLWV4Y2x1c2l2ZSIsIEZyZWFk X2NoYXJfZXhjbHVzaXZlLCBTcmVhZF9jaGFyX2V4Y2x1c2l2ZSwgMCwgMywKICAgQ29va2llX0xl eAkJCS8qIGV4cGxpY2l0IGxleGljYWwgYmluZGluZyAqLwogfSBsZXhpY2FsX2Nvb2tpZV90Owog Ci0vKiBEZXRlcm1pbmUgaWYgdGhlIGxpc3AgY29kZSByZWFkIHVzaW5nIFJFQURDSEFSRlVOIGRl ZmluZXMgYQotICAgYGxleGljYWwtYmluZGluZycgZmlsZSB2YXJpYWJsZSByZXR1cm4gaXRzIHZh bHVlLgotICAgQWZ0ZXIgcmV0dXJuaW5nLCB0aGUgc3RyZWFtIGlzIHBvc2l0aW9uZWQgZm9sbG93 aW5nIHRoZSBmaXJzdCBsaW5lLAotICAgaWYgaXQgaXMgYSBjb21tZW50IG9yICMhIGxpbmUsIG90 aGVyd2lzZSBub3RoaW5nIGlzIHJlYWQuICAqLworLyogRGV0ZXJtaW5lIGlmIHRoZSBsaXNwIGNv ZGUgcmVhZCBmcm9tIHRoZSBpbnB1dCBvZiBGUkFNRSBkZWZpbmVzIGEKKyAgIGBsZXhpY2FsLWJp bmRpbmcnIGZpbGUgdmFyaWFibGUgcmV0dXJuIGl0cyB2YWx1ZS4gICovCiAKIHN0YXRpYyBsZXhp Y2FsX2Nvb2tpZV90Ci1saXNwX2ZpbGVfbGV4aWNhbF9jb29raWUgKExpc3BfT2JqZWN0IHJlYWRj aGFyZnVuKQorbGlzcF9maWxlX2xleGljYWxfY29va2llIChyZWdpc3RlciBscmVhZF9mcmFtZSAq ZnJhbWUpCiB7Ci0gIGludCBjaCA9IFJFQURDSEFSOwotCisgIHNwZWNwZGxfcmVmIGNvdW50ID0g U1BFQ1BETF9JTkRFWCAoKTsKKyAgLyogaG9sZCBhbiA4MC1jb2x1bW4gbGluZXMgYmVjYXVzZSBv ZiBhdXRvbWF0aWMgYWRkaW5nIG9mIGNvb2tpZQorICAgICBhdCBlbmQgb2YgZmlyc3QgbGluZSwg d2hpY2ggbWF5IGFscmVhZHkgYmUgODAgY2hhcmFjdGVycyBvciBtb3JlICovCisgIGludCBzdGFj a19idWZmZXJbODBdID0geyAwIH07CisgIGludCAqaGVhcGJ1ZiA9IE5VTEw7CisgIGJvb2wgbmVl ZHNfYnVmZmVyID0gbHJlYWRfZnJhbWVfcmVxdWlyZXNfcmV3aW5kX2J1ZmZlciAoZnJhbWUpOwor ICBpbnQgKmJ1ZiA9IG5lZWRzX2J1ZmZlciA/IHN0YWNrX2J1ZmZlciA6IE5VTEw7CisgIHB0cmRp ZmZfdCBidWZfc3ogPSBuZWVkc19idWZmZXIgPyBzaXplb2Ygc3RhY2tfYnVmZmVyIDogMDsKKyAg aW50IGxvb2thaGVhZCA9IDA7CisgIGludCAqcCA9IGJ1ZjsKKyAgaW50ICplbmQgPSBidWYgKyBi dWZfc3o7CisgIC8qIEFsbG93IHRoZSBjb29raWUgYW55d2hlcmUgaW4gYSBsZWFkaW5nIGNvbW1l bnQgYmxvY2ssCisgICAgIG5vdCBqdXN0IHRoZSBmaXJzdCBsaW5lLiAgKi8KKyAgbGV4aWNhbF9j b29raWVfdCBydiA9IENvb2tpZV9Ob25lOworICBpbnQgY2ggPSAtMTsKKyNkZWZpbmUgQ09PS0lF X1JFQURfQU5EX0JVRkZFUihjKQkJCQkJXAorICBjID0gUkVBRENIQVIgKGZyYW1lKTsJCQkJCQkJ XAorICBpZiAoYyA8IDApCQkJCQkJCQlcCisgICAgZ290byBub3RfZm91bmQ7CQkJCQkJCVwKKyAg aWYgKG5lZWRzX2J1ZmZlcikJCQkJCQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICAqcCsrID0g YzsJCQkJCQkJCVwKKyAgICAgIGlmIChlbmQgLSBwIDwgMikJCQkJCQkJXAorCXsJCQkJCQkJCVwK KwkgIGxvb2thaGVhZCA9IHAgLSBidWY7CQkJCQkJXAorCSAgYnVmID0gZ3Jvd19pbnRfYnVmZmVy IChidWYsIGxvb2thaGVhZCwJCQlcCisJCQkJICZoZWFwYnVmLCAmYnVmX3N6LAkJCVwKKwkJCQkg Y291bnQpOwkJCQlcCisJICBwID0gYnVmICsgbG9va2FoZWFkOwkJCQkJCVwKKwkgIGVuZCA9IGJ1 ZiArIGJ1Zl9zejsJCQkJCQlcCisJfQkJCQkJCQkJXAorICAgIH0KKyAgQ09PS0lFX1JFQURfQU5E X0JVRkZFUiAoY2gpOwogICBpZiAoY2ggPT0gJyMnKQogICAgIHsKLSAgICAgIGNoID0gUkVBRENI QVI7CisgICAgICBDT09LSUVfUkVBRF9BTkRfQlVGRkVSIChjaCk7CiAgICAgICBpZiAoY2ggIT0g JyEnKQotICAgICAgICB7Ci0gICAgICAgICAgVU5SRUFEIChjaCk7Ci0gICAgICAgICAgVU5SRUFE ICgnIycpOwotICAgICAgICAgIHJldHVybiBDb29raWVfTm9uZTsKLSAgICAgICAgfQorCWdvdG8g bm90X2ZvdW5kOwogICAgICAgd2hpbGUgKGNoICE9ICdcbicgJiYgY2ggIT0gRU9GKQotICAgICAg ICBjaCA9IFJFQURDSEFSOwotICAgICAgaWYgKGNoID09ICdcbicpIGNoID0gUkVBRENIQVI7CisJ eworCSAgQ09PS0lFX1JFQURfQU5EX0JVRkZFUiAoY2gpOworCX0KKyAgICAgIGlmIChjaCA9PSAn XG4nKQorCWdvdG8gbm90X2ZvdW5kOwogICAgICAgLyogSXQgaXMgT0sgdG8gbGVhdmUgdGhlIHBv c2l0aW9uIGFmdGVyIGEgIyEgbGluZSwgc2luY2UKIAkgdGhhdCBpcyB3aGF0IHJlYWQwIGRvZXMu ICAqLwogICAgIH0KIAotICBpZiAoY2ggIT0gJzsnKQotICAgIC8qIFRoZSBmaXJzdCBsaW5lIGlz bid0IGEgY29tbWVudCwganVzdCBnaXZlIHVwLiAgKi8KLSAgICB7Ci0gICAgICBVTlJFQUQgKGNo KTsKLSAgICAgIHJldHVybiBDb29raWVfTm9uZTsKLSAgICB9Ci0gIGVsc2UKKyAgaWYgKGNoID09 ICc7JykKICAgICAvKiBMb29rIGZvciBhbiBhcHByb3ByaWF0ZSBmaWxlLXZhcmlhYmxlIGluIHRo ZSBmaXJzdCBsaW5lLiAgKi8KICAgICB7Ci0gICAgICBsZXhpY2FsX2Nvb2tpZV90IHJ2ID0gQ29v a2llX05vbmU7CiAgICAgICBlbnVtIHsKIAlOT01JTkFMLCBBRlRFUl9GSVJTVF9EQVNILCBBRlRF Ul9BU1RFUklYCiAgICAgICB9IGJlZ19lbmRfc3RhdGUgPSBOT01JTkFMOwpAQCAtMTA0NCw3ICsy MTA4LDcgQEAgI2RlZmluZSBVUERBVEVfQkVHX0VORF9TVEFURShjaCkJCQkJXAogICAgICAgLyog U2tpcCB1bnRpbCB3ZSBnZXQgdG8gdGhlIGZpbGUgdmFycywgaWYgYW55LiAgKi8KICAgICAgIGRv CiAJewotCSAgY2ggPSBSRUFEQ0hBUjsKKwkgIENPT0tJRV9SRUFEX0FORF9CVUZGRVIgKGNoKTsK IAkgIFVQREFURV9CRUdfRU5EX1NUQVRFIChjaCk7CiAJfQogICAgICAgd2hpbGUgKCFpbl9maWxl X3ZhcnMgJiYgY2ggIT0gJ1xuJyAmJiBjaCAhPSBFT0YpOwpAQCAtMTA1NCwxMSArMjExOCwxMyBA QCAjZGVmaW5lIFVQREFURV9CRUdfRU5EX1NUQVRFKGNoKQkJCQlcCiAJICBjaGFyIHZhclsxMDBd LCB2YWxbMTAwXTsKIAkgIHVuc2lnbmVkIGk7CiAKLQkgIGNoID0gUkVBRENIQVI7CisJICBDT09L SUVfUkVBRF9BTkRfQlVGRkVSIChjaCk7CiAKIAkgIC8qIFJlYWQgYSB2YXJpYWJsZSBuYW1lLiAg Ki8KIAkgIHdoaWxlIChjaCA9PSAnICcgfHwgY2ggPT0gJ1x0JykKLQkgICAgY2ggPSBSRUFEQ0hB UjsKKwkgICAgeworCSAgICAgIENPT0tJRV9SRUFEX0FORF9CVUZGRVIgKGNoKTsKKwkgICAgfQog CiAJICBpID0gMDsKIAkgIGJlZ19lbmRfc3RhdGUgPSBOT01JTkFMOwpAQCAtMTA2NywxMiArMjEz MywxMiBAQCAjZGVmaW5lIFVQREFURV9CRUdfRU5EX1NUQVRFKGNoKQkJCQlcCiAJICAgICAgaWYg KGkgPCBzaXplb2YgdmFyIC0gMSkKIAkJdmFyW2krK10gPSBjaDsKIAkgICAgICBVUERBVEVfQkVH X0VORF9TVEFURSAoY2gpOwotCSAgICAgIGNoID0gUkVBRENIQVI7CisJICAgICAgQ09PS0lFX1JF QURfQU5EX0JVRkZFUiAoY2gpOwogCSAgICB9CiAKLQkgIC8qIFN0b3Agc2Nhbm5pbmcgaWYgbm8g Y29sb24gd2FzIGZvdW5kIGJlZm9yZSBlbmQgbWFya2VyLiAgKi8KKwkgIC8qIENoZWNrIG5leHQg bGluZSBpZiBubyBjb2xvbiB3YXMgZm91bmQgYmVmb3JlIGVuZCBtYXJrZXIuICAqLwogCSAgaWYg KCFpbl9maWxlX3ZhcnMgfHwgY2ggPT0gJ1xuJyB8fCBjaCA9PSBFT0YpCi0JICAgIGJyZWFrOwor CSAgICBnb3RvIGZpbmlzaF9saW5lOwogCiAJICB3aGlsZSAoaSA+IDAgJiYgKHZhcltpIC0gMV0g PT0gJyAnIHx8IHZhcltpIC0gMV0gPT0gJ1x0JykpCiAJICAgIGktLTsKQEAgLTEwODEsMTAgKzIx NDcsMTIgQEAgI2RlZmluZSBVUERBVEVfQkVHX0VORF9TVEFURShjaCkJCQkJXAogCSAgaWYgKGNo ID09ICc6JykKIAkgICAgewogCSAgICAgIC8qIFJlYWQgYSB2YXJpYWJsZSB2YWx1ZS4gICovCi0J ICAgICAgY2ggPSBSRUFEQ0hBUjsKKwkgICAgICBDT09LSUVfUkVBRF9BTkRfQlVGRkVSIChjaCk7 CiAKIAkgICAgICB3aGlsZSAoY2ggPT0gJyAnIHx8IGNoID09ICdcdCcpCi0JCWNoID0gUkVBRENI QVI7CisJCXsKKwkJICBDT09LSUVfUkVBRF9BTkRfQlVGRkVSIChjaCk7CisJCX0KIAogCSAgICAg IGkgPSAwOwogCSAgICAgIGJlZ19lbmRfc3RhdGUgPSBOT01JTkFMOwpAQCAtMTA5Myw3ICsyMTYx LDcgQEAgI2RlZmluZSBVUERBVEVfQkVHX0VORF9TVEFURShjaCkJCQkJXAogCQkgIGlmIChpIDwg c2l6ZW9mIHZhbCAtIDEpCiAJCSAgICB2YWxbaSsrXSA9IGNoOwogCQkgIFVQREFURV9CRUdfRU5E X1NUQVRFIChjaCk7Ci0JCSAgY2ggPSBSRUFEQ0hBUjsKKwkJICBDT09LSUVfUkVBRF9BTkRfQlVG RkVSIChjaCk7CiAJCX0KIAkgICAgICBpZiAoISBpbl9maWxlX3ZhcnMpCiAJCS8qIFRoZSB2YWx1 ZSB3YXMgdGVybWluYXRlZCBieSBhbiBlbmQtbWFya2VyLCB3aGljaCByZW1vdmUuICAqLwpAQCAt MTEwNiwxNiArMjE3NCwyNSBAQCAjZGVmaW5lIFVQREFURV9CRUdfRU5EX1NUQVRFKGNoKQkJCQlc CiAJCS8qIFRoaXMgaXMgaXQuLi4gICovCiAJCXsKIAkJICBydiA9IHN0cmNtcCAodmFsLCAibmls IikgIT0gMCA/IENvb2tpZV9MZXggOiBDb29raWVfRHluOwotCQkgIGJyZWFrOworCQkgIGdvdG8g ZmluaXNoX2xpbmU7CiAJCX0KIAkgICAgfQogCX0KLQorICAgIGZpbmlzaF9saW5lOgogICAgICAg d2hpbGUgKGNoICE9ICdcbicgJiYgY2ggIT0gRU9GKQotCWNoID0gUkVBRENIQVI7Ci0KLSAgICAg IHJldHVybiBydjsKKwl7CisJICBDT09LSUVfUkVBRF9BTkRfQlVGRkVSIChjaCk7CisJfQorICAg ICAgaWYgKHJ2ICE9IENvb2tpZV9Ob25lKQorCWdvdG8gZG9uZTsKKyAgICAgIENPT0tJRV9SRUFE X0FORF9CVUZGRVIgKGNoKTsKICAgICB9Cisgbm90X2ZvdW5kOgorICBscmVhZF9yZXdpbmRfaW5w dXQoZnJhbWUsIGxvb2thaGVhZCwgYnVmKTsKKyBkb25lOgorICB1bmJpbmRfdG8gKGNvdW50LCBR bmlsKTsKKyAgcmV0dXJuIHJ2OworCiB9CiAMCiAvKiBWYWx1ZSBpcyBhIHZlcnNpb24gbnVtYmVy IG9mIGJ5dGUgY29tcGlsZWQgY29kZSBpZiB0aGUgZmlsZQpAQCAtMTE2NSw3ICsyMjQyLDcgQEAg c2FmZV90b19sb2FkX3ZlcnNpb24gKExpc3BfT2JqZWN0IGZpbGUsIGxyZWFkX2ZkIGZkKQogc3Rh dGljIHZvaWQKIHJlY29yZF9sb2FkX3Vud2luZCAoTGlzcF9PYmplY3Qgb2xkKQogewotICBWbG9h ZHNfaW5fcHJvZ3Jlc3MgPSBvbGQ7CisgIGN1cnJlbnRfZnJhbWUtPmxvYWRzX2luX3Byb2dyZXNz ID0gb2xkOwogfQogCiAvKiBUaGlzIGhhbmRsZXIgZnVuY3Rpb24gaXMgdXNlZCB2aWEgaW50ZXJu YWxfY29uZGl0aW9uX2Nhc2VfMS4gICovCkBAIC0xMjA1LDIxICsyMjgyLDcgQEAgREVGVU4gKCJn ZXQtbG9hZC1zdWZmaXhlcyIsIEZnZXRfbG9hZF9zdWZmaXhlcywgU2dldF9sb2FkX3N1ZmZpeGVz LCAwLCAwLCAwLAogICAgICAgTGlzcF9PYmplY3QgZXh0cyA9IFZsb2FkX2ZpbGVfcmVwX3N1ZmZp eGVzOwogICAgICAgTGlzcF9PYmplY3Qgc3VmZml4ID0gWENBUiAoc3VmZml4ZXMpOwogICAgICAg Rk9SX0VBQ0hfVEFJTCAoZXh0cykKLQl7Ci0JICBMaXNwX09iamVjdCBleHQgPSBYQ0FSIChleHRz KTsKLSNpZmRlZiBIQVZFX01PRFVMRVMKLQkgIGlmIChTQ0hBUlMgKGV4dCkgPiAwCi0JICAgICAg JiYgKHN1ZmZpeF9wIChzdWZmaXgsIE1PRFVMRVNfU1VGRklYKQotIyBpZmRlZiBNT0RVTEVTX1NF Q09OREFSWV9TVUZGSVgKLQkJICB8fCBzdWZmaXhfcCAoc3VmZml4LCBNT0RVTEVTX1NFQ09OREFS WV9TVUZGSVgpCi0jIGVuZGlmCi0JCSApCi0JICAgICAgJiYgIU5JTFAgKEZtZW1iZXIgKGV4dCwg RnN5bWJvbF92YWx1ZSAoCi0JCQkJCVFqa2FfY29tcHJfbG9hZF9zdWZmaXhlcykpKSkKLQkgICAg Y29udGludWU7Ci0jZW5kaWYKLQkgIGxzdCA9IEZjb25zIChjb25jYXQyIChzdWZmaXgsIGV4dCks IGxzdCk7Ci0JfQorCWxzdCA9IEZjb25zIChjb25jYXQyIChzdWZmaXgsIFhDQVIgKGV4dHMpKSwg bHN0KTsKICAgICB9CiAgIHJldHVybiBGbnJldmVyc2UgKGxzdCk7CiB9CkBAIC0xMjM4LDEwICsy MzAxLDkgQEAgc3VmZml4X3AgKExpc3BfT2JqZWN0IHN0cmluZywgY29uc3QgY2hhciAqc3VmZml4 KQogc3RhdGljIHZvaWQKIGNsb3NlX2luZmlsZV91bndpbmQgKHZvaWQgKmFyZykKIHsKLSAgc3Ry dWN0IGluZmlsZSAqcHJldl9pbmZpbGUgPSBhcmc7Ci0gIGVhc3NlcnQgKGluZmlsZSAmJiBpbmZp bGUgIT0gcHJldl9pbmZpbGUpOwotICBmaWxlX3N0cmVhbV9jbG9zZSAoaW5maWxlLT5zdHJlYW0p OwotICBpbmZpbGUgPSBwcmV2X2luZmlsZTsKKyAgbHJlYWRfZnJhbWUgKmZyYW1lID0gKGxyZWFk X2ZyYW1lICopIGFyZzsKKyAgZWFzc2VydCAoRlJPTV9GSUxFX1AoZnJhbWUtPmludHlwZSkgJiYg ZnJhbWUtPmlucHV0LmYuc3RyZWFtKTsKKyAgZmlsZV9zdHJlYW1fY2xvc2UgKGZyYW1lLT5pbnB1 dC5mLnN0cmVhbSk7CiB9CiAKIC8qIENvbXB1dGUgdGhlIGZpbGVuYW1lIHdlIHdhbnQgaW4gYGxv YWQtaGlzdG9yeScgYW5kIGBsb2FkLWZpbGUtbmFtZScuICAqLwpAQCAtMTI4Niw5ICsyMzQ4LDkg QEAgY2xvc2VfZmlsZV91bndpbmRfYW5kcm9pZF9mZCAodm9pZCAqcHRyKQogI2VuZGlmCiAKIHN0 YXRpYyBMaXNwX09iamVjdAotZ2V0X2xleGljYWxfYmluZGluZyAoTGlzcF9PYmplY3Qgc3RyZWFt LCBMaXNwX09iamVjdCBmcm9tKQorZ2V0X2xleGljYWxfYmluZGluZyAocmVnaXN0ZXIgbHJlYWRf ZnJhbWUgKmZyYW1lLCBMaXNwX09iamVjdCBmcm9tKQogewotICBsZXhpY2FsX2Nvb2tpZV90IGxl eGMgPSBsaXNwX2ZpbGVfbGV4aWNhbF9jb29raWUgKHN0cmVhbSk7CisgIGxleGljYWxfY29va2ll X3QgbGV4YyA9IGxpc3BfZmlsZV9sZXhpY2FsX2Nvb2tpZSAoZnJhbWUpOwogICByZXR1cm4gKChs ZXhjID09IENvb2tpZV9MZXgKIAkgICA/IFF0CiAJICAgOiAobGV4YyA9PSBDb29raWVfRHluCkBA IC0xMzAwLDYgKzIzNjIsNyBAQCBnZXRfbGV4aWNhbF9iaW5kaW5nIChMaXNwX09iamVjdCBzdHJl YW0sIExpc3BfT2JqZWN0IGZyb20pCiAJCQkgIGZyb20pKSkpKTsKIH0KIAorCiBERUZVTiAoImxv YWQiLCBGbG9hZCwgU2xvYWQsIDEsIDUsIDAsCiAgICAgICAgZG9jOiAvKiBFeGVjdXRlIGEgZmls ZSBvZiBMaXNwIGNvZGUgbmFtZWQgRklMRS4KIEZpcnN0IHRyeSBGSUxFIHdpdGggYC5lbGMnIGFw cGVuZGVkLCB0aGVuIHRyeSB3aXRoIGAuZWwnLCB0aGVuIHRyeQpAQCAtMTQ2OCw3ICsyNTMxLDcg QEAgREVGVU4gKCJsb2FkIiwgRmxvYWQsIFNsb2FkLCAxLCA1LCAwLAogICBpZiAoRVEgKFF0LCBW dXNlcl9pbml0X2ZpbGUpKQogICAgIFZ1c2VyX2luaXRfZmlsZSA9IGZvdW5kOwogCi0gIC8qIElm IEZEIGlzIC0yLCB0aGF0IG1lYW5zIG9wZW5wIGZvdW5kIGEgbWFnaWMgZmlsZS4gICovCisgIC8q IElmIEZEIGlzIC0yLCB0aGF0IG1lYW5zIG9wZW5wIGZvdW5kIGEgbWFnaWMgZmlsZS4gKi8KICAg aWYgKGxyZWFkX2ZkX2NtcCAoLTIpKQogICAgIHsKICAgICAgIGlmIChOSUxQIChGZXF1YWwgKGZv dW5kLCBmaWxlKSkpCkBAIC0xNDk3LDYgKzI1NjAsMTcgQEAgREVGVU4gKCJsb2FkIiwgRmxvYWQs IFNsb2FkLCAxLCA1LCAwLAogCWZkID0gLTI7CiAjZW5kaWYKICAgICB9CisgIC8qIFRoaXMgZHVt bXkgZnJhbWUgbmVlZHMgdG8gYmUgYWN0aXZhdGVkIGJlZm9yZSBhbnkgcmVmZXJlbmNlCisgICAg IHRvIGEgbnVsbCBjdXJyZW50X2ZyYW1lIG1heSBvY2N1ciwgYW5kIGJlZm9yZSBhbnkKKyAgICAg bmV3IGVudHJpZXMgYXJlIHB1c2hlZCBvbiB0aGUgU1BFQ1BETCwgYnV0IGFmdGVyCisgICAgIHdl IGtub3cgdGhlIGZpbGUgZXhpc3RzIGFuZCB0aGF0IHdlIGFyZSBoYW5kbGluZyBpdCAqLworICBs cmVhZF9mcmFtZSBsb2FkX2ZyYW1lID0gSU5JVF9MUkVBRF9GUkFNRSAoKTsKKyAgbG9hZF9mcmFt ZS5sb29wX2R5bmFtaWNfZnJhbWUgPSBTUEVDUERMX0lOREVYICgpOworICBpbml0X2xyZWFkX2lu cHV0X2Zyb21fc3RyZWFtICgmbG9hZF9mcmFtZSwKKwkJCQlRbmlsLCBRbmlsLCBRbmlsLAorCQkJ CWZhbHNlLCBmYWxzZSwgTlVMTCwgUW5pbCk7CisgIGFjdGl2YXRlX2xyZWFkX2ZyYW1lICgmbG9h ZF9mcmFtZSwgTFJFQURfRlJBTUVfSU5URUdSQUwpOworICBscmVhZF9pbml0X2R5bmFtaWNfZnJh bWUgKCZsb2FkX2ZyYW1lKTsKIAogI2lmICFkZWZpbmVkIFVTRV9BTkRST0lEX0FTU0VUUwogICBp ZiAoMCA8PSBmZCkKQEAgLTE1NDEsMTQgKzI2MTUsMTkgQEAgREVGVU4gKCJsb2FkIiwgRmxvYWQs IFNsb2FkLCAxLCA1LCAwLAogCiAgICAgIEFsc28sIGp1c3QgbG9hZGluZyBhIGZpbGUgcmVjdXJz aXZlbHkgaXMgbm90IGFsd2F5cyBhbiBlcnJvciBpbgogICAgICB0aGUgZ2VuZXJhbCBjYXNlOyB0 aGUgc2Vjb25kIGxvYWQgbWF5IGRvIHNvbWV0aGluZyBkaWZmZXJlbnQuICAqLworICAvKiBkdW1t eSBmcmFtZSB0aGF0IHJlYWQgZnJvbSAvZGV2L251bGwgKi8KKyAgZWFzc3VtZSAoY3VycmVudF9m cmFtZSAhPSBOVUxMKTsKICAgewogICAgIGludCBsb2FkX2NvdW50ID0gMDsKLSAgICBMaXNwX09i amVjdCB0ZW0gPSBWbG9hZHNfaW5fcHJvZ3Jlc3M7CisgICAgTGlzcF9PYmplY3QgdGVtID0gY3Vy cmVudF9mcmFtZS0+bG9hZHNfaW5fcHJvZ3Jlc3M7CiAgICAgRk9SX0VBQ0hfVEFJTF9TQUZFICh0 ZW0pCiAgICAgICBpZiAoIU5JTFAgKEZlcXVhbCAoZm91bmQsIFhDQVIgKHRlbSkpKSAmJiAoKyts b2FkX2NvdW50ID4gMykpCi0Jc2lnbmFsX2Vycm9yICgiUmVjdXJzaXZlIGxvYWQiLCBGY29ucyAo Zm91bmQsIFZsb2Fkc19pbl9wcm9ncmVzcykpOwotICAgIHJlY29yZF91bndpbmRfcHJvdGVjdCAo cmVjb3JkX2xvYWRfdW53aW5kLCBWbG9hZHNfaW5fcHJvZ3Jlc3MpOwotICAgIFZsb2Fkc19pbl9w cm9ncmVzcyA9IEZjb25zIChmb3VuZCwgVmxvYWRzX2luX3Byb2dyZXNzKTsKKwlzaWduYWxfZXJy b3IgKCJSZWN1cnNpdmUgbG9hZCIsCisJCSAgICAgIEZjb25zIChmb3VuZCwgY3VycmVudF9mcmFt ZS0+bG9hZHNfaW5fcHJvZ3Jlc3MpKTsKKyAgICByZWNvcmRfdW53aW5kX3Byb3RlY3QgKHJlY29y ZF9sb2FkX3Vud2luZCwKKwkJCSAgIGN1cnJlbnRfZnJhbWUtPmxvYWRzX2luX3Byb2dyZXNzKTsK KyAgICBjdXJyZW50X2ZyYW1lLT5sb2Fkc19pbl9wcm9ncmVzcworICAgICAgPSBGY29ucyAoZm91 bmQsIGN1cnJlbnRfZnJhbWUtPmxvYWRzX2luX3Byb2dyZXNzKTsKICAgfQogCiAgIC8qIEFsbCBs b2FkcyBhcmUgYnkgZGVmYXVsdCBkeW5hbWljLCB1bmxlc3MgdGhlIGZpbGUgaXRzZWxmIHNwZWNp ZmllcwpAQCAtMTYzOCw2ICsyNzE3LDcgQEAgREVGVU4gKCJsb2FkIiwgRmxvYWQsIFNsb2FkLCAx LCA1LCAwLAogICAgICAgLyogV2UgYXJlIGxvYWRpbmcgYSBzb3VyY2UgZmlsZSAoKi5lbCkuICAq LwogICAgICAgaWYgKCFOSUxQIChWbG9hZF9zb3VyY2VfZmlsZV9mdW5jdGlvbikpCiAJeworCSAg LyogbXVsZS5lbCBoYXMgYmVlbiBsb2FkZWQgYW5kIGxvYWQtd2l0aC1jb2RlLWNvbnZlcnNpb24g aXMgYXZhaWxhYmxlICovCiAJICBMaXNwX09iamVjdCB2YWw7CiAKIAkgIGlmIChscmVhZF9mZF9w KQpAQCAtMTY0OCwxMCArMjcyOCwxMSBAQCBERUZVTiAoImxvYWQiLCBGbG9hZCwgU2xvYWQsIDEs IDUsIDAsCiAJICB2YWwgPSBjYWxsbiAoVmxvYWRfc291cmNlX2ZpbGVfZnVuY3Rpb24sIGZvdW5k LCBoaXN0X2ZpbGVfbmFtZSwKIAkJICAgICAgIE5JTFAgKG5vZXJyb3IpID8gUW5pbCA6IFF0LAog CQkgICAgICAgKE5JTFAgKG5vbWVzc2FnZSkgfHwgZm9yY2VfbG9hZF9tZXNzYWdlcykgPyBRbmls IDogUXQpOwotCSAgcmV0dXJuIHVuYmluZF90byAoY291bnQsIHZhbCk7CisJICByZXR1cm4gdW5i aW5kX3RvIChsb2FkX2ZyYW1lLmxvb3BfZHluYW1pY19mcmFtZSwgdmFsKTsKIAl9CiAgICAgfQog CisgIGJvb2wgc2Vla2FibGUgPSB0cnVlOwogICBpZiAoIWxyZWFkX2ZkX3ApCiAgICAgewogICAg ICAgLyogV2Ugc29tZWhvdyBnb3QgaGVyZSB3aXRoIGZkID09IC0yLCBtZWFuaW5nIHRoZSBmaWxl IGlzIGRlZW1lZApAQCAtMTY2OCw2ICsyNzQ5LDEyIEBAIERFRlVOICgibG9hZCIsIEZsb2FkLCBT bG9hZCwgMSwgNSwgMCwKICAgICAgIGVmb3VuZCA9IEVOQ09ERV9GSUxFIChmb3VuZCk7CiAgICAg ICBzdHJlYW0gPSBlbWFjc19mb3BlbiAoU1NEQVRBIChlZm91bmQpLCBmbW9kZSk7CiAjZWxzZQor ICAgICAgc3RydWN0IHN0YXQgc3Q7CisgICAgICBpZiAobHJlYWRfZnN0YXQgKGZkLCAmc3QpICE9 IDApCisJcmVwb3J0X2ZpbGVfZXJyb3IgKCJMb2FkIGZpbGUgc3RhdHVzIGZhaWx1cmUiLCBmaWxl KTsKKyAgICAgIC8qIEF0IGxlYXN0IGZvciByZWd1bGFyIGZpbGVzLCBlbnN1cmUgcmVzdW1pbmcg YSByZWFkCisJIG9wZXJhdGlvbiB3aWxsIHN0YXJ0IHdoZXJlIGl0IGxlZnQgb2ZmLiAgKi8KKyAg ICAgIHNlZWthYmxlID0gU19JU1JFRyAoc3Quc3RfbW9kZSk7CiAjaWYgIWRlZmluZWQgVVNFX0FO RFJPSURfQVNTRVRTCiAgICAgICBzdHJlYW0gPSBlbWFjc19mZG9wZW4gKGZkLCBmbW9kZSk7CiAj ZWxzZQpAQCAtMTY4MCw5ICsyNzY3LDExIEBAIERFRlVOICgibG9hZCIsIEZsb2FkLCBTbG9hZCwg MSwgNSwgMCwKICNlbmRpZgogICAgIH0KIAotICAvKiBEZWNsYXJlIGhlcmUgcmF0aGVyIHRoYW4g aW5zaWRlIHRoZSBlbHNlLXBhcnQgYmVjYXVzZSB0aGUgc3RvcmFnZQotICAgICBtaWdodCBiZSBh Y2Nlc3NlZCBieSB0aGUgdW5iaW5kX3RvIGNhbGwgYmVsb3cuICAqLwotICBzdHJ1Y3QgaW5maWxl IGlucHV0OworICAvKiBJbml0aWFsIGF0dGVtcHRzIHRvIHJldXNlICJsb2FkX2ZyYW1lIiBmYWls ZWQsIHNvCisgICAgIGFsbG9jYXRlIGFuZCBhY3RpdmF0ZSBhbm90aGVyIHJlYWQtZXZhbCogZnJh bWUgaGVyZSovCisgIGxyZWFkX2ZyYW1lIHRoaXNfZnJhbWUgPSBJTklUX0xSRUFEX0ZSQU1FICgp OworICBMaXNwX09iamVjdCBjb2RpbmcgPSBRbmlsOworICB0aGlzX2ZyYW1lLmxvb3BfZHluYW1p Y19mcmFtZSA9IFNQRUNQRExfSU5ERVgoKTsKIAogICBpZiAoaXNfbW9kdWxlIHx8IGlzX25hdGl2 ZV9lbGlzcCkKICAgICB7CkBAIC0xNjkzLDE3ICsyNzgyLDI3IEBAIERFRlVOICgibG9hZCIsIEZs b2FkLCBTbG9hZCwgMSwgNSwgMCwKICAgICAgICAgICBscmVhZF9jbG9zZSAoZmQpOwogICAgICAg ICAgIGNsZWFyX3Vud2luZF9wcm90ZWN0IChmZF9pbmRleCk7CiAgICAgICAgIH0KKyAgICAgIHRo aXNfZnJhbWUuaW50eXBlID0gTFJFQURfSU5QVVRfQklOQVJZOwogICAgIH0KICAgZWxzZQogICAg IHsKICAgICAgIGlmICghZmlsZV9zdHJlYW1fdmFsaWRfcCAoc3RyZWFtKSkKICAgICAgICAgcmVw b3J0X2ZpbGVfZXJyb3IgKCJPcGVuaW5nIHN0ZGlvIHN0cmVhbSIsIGZpbGUpOwotICAgICAgc2V0 X3Vud2luZF9wcm90ZWN0X3B0ciAoZmRfaW5kZXgsIGNsb3NlX2luZmlsZV91bndpbmQsIGluZmls ZSk7Ci0gICAgICBpbnB1dC5zdHJlYW0gPSBzdHJlYW07Ci0gICAgICBpbnB1dC5sb29rYWhlYWQg PSAwOwotICAgICAgaW5maWxlID0gJmlucHV0OwotICAgICAgdW5yZWFkX2NoYXIgPSAtMTsKKwor ICAgICAgQVVUT19MSVNUMyAoc3RyZWFtX2FyZywgUWdldF9maWxlX2NoYXIsIGZpbGUsIGhpc3Rf ZmlsZV9uYW1lKTsKKyAgICAgIGlmICh2ZXJzaW9uICYmIHZlcnNpb24gPCAyMikKKwl7CisJICBY U0VUQ0FSIChzdHJlYW1fYXJnLCBRZ2V0X2VtYWNzX211bGVfZmlsZV9jaGFyKTsKKwkgIGNvZGlu ZyA9IFFlbWFjc19tdWxlOworCSAgc3BlY2JpbmQgKFFsb2FkX2ZvcmNlX2RvY19zdHJpbmdzLCBR dCk7CisJfQorCisgICAgICBpbml0X2xyZWFkX2lucHV0X2Zyb21fc3RyZWFtICgmdGhpc19mcmFt ZSwgc3RyZWFtX2FyZywKKwkJCQkgICAgUW5pbCwgUW5pbCwKKwkJCQkgICAgZmFsc2UsIHNlZWth YmxlLAorCQkJCSAgICBzdHJlYW0sIGNvZGluZyk7CiAgICAgfQorICBpbml0X2xyZWFkX2V2YWxf cGFyYW1zKCZ0aGlzX2ZyYW1lLCBmb3VuZCwgaGlzdF9maWxlX25hbWUsIFFuaWwsIGZhbHNlKTsK IAogICBpZiAoISBOSUxQIChWcHVyaWZ5X2ZsYWcpKQogICAgIFZwcmVsb2FkZWRfZmlsZV9saXN0 ID0gRmNvbnMgKGZpbGUsIFZwcmVsb2FkZWRfZmlsZV9saXN0KTsKQEAgLTE3MzEsOSArMjgzMCwx MCBAQCBERUZVTiAoImxvYWQiLCBGbG9hZCwgU2xvYWQsIDEsIDUsIDAsCiAgIGlmIChpc19tb2R1 bGUpCiAgICAgewogI2lmZGVmIEhBVkVfTU9EVUxFUworICAgICAgYWN0aXZhdGVfbHJlYWRfZnJh bWUgKCZ0aGlzX2ZyYW1lLCBMUkVBRF9GUkFNRV9JTlRFR1JBTCk7CiAgICAgICBsb2FkaGlzdF9p bml0aWFsaXplIChmb3VuZCk7CiAgICAgICBGbW9kdWxlX2xvYWQgKGZvdW5kKTsKLSAgICAgIGJ1 aWxkX2xvYWRfaGlzdG9yeSAoZm91bmQsIHRydWUpOworICAgICAgYnVpbGRfbG9hZF9oaXN0b3J5 ICgmdGhpc19mcmFtZSxmb3VuZCwgdHJ1ZSk7CiAjZWxzZQogICAgICAgLyogVGhpcyBjYW5ub3Qg aGFwcGVuLiAgKi8KICAgICAgIGVtYWNzX2Fib3J0ICgpOwpAQCAtMTc0Miw5ICsyODQyLDEwIEBA IERFRlVOICgibG9hZCIsIEZsb2FkLCBTbG9hZCwgMSwgNSwgMCwKICAgZWxzZSBpZiAoaXNfbmF0 aXZlX2VsaXNwKQogICAgIHsKICNpZmRlZiBIQVZFX05BVElWRV9DT01QCisgICAgICBhY3RpdmF0 ZV9scmVhZF9mcmFtZSAoJnRoaXNfZnJhbWUsIExSRUFEX0ZSQU1FX0lOVEVHUkFMKTsKICAgICAg IGxvYWRoaXN0X2luaXRpYWxpemUgKGhpc3RfZmlsZV9uYW1lKTsKICAgICAgIEZuYXRpdmVfZWxp c3BfbG9hZCAoZm91bmQsIFFuaWwpOwotICAgICAgYnVpbGRfbG9hZF9oaXN0b3J5IChoaXN0X2Zp bGVfbmFtZSwgdHJ1ZSk7CisgICAgICBidWlsZF9sb2FkX2hpc3RvcnkgKCZ0aGlzX2ZyYW1lLGhp c3RfZmlsZV9uYW1lLCB0cnVlKTsKICNlbHNlCiAgICAgICAvKiBUaGlzIGNhbm5vdCBoYXBwZW4u ICAqLwogICAgICAgZW1hY3NfYWJvcnQgKCk7CkBAIC0xNzUzLDIwICsyODU0LDEyIEBAIERFRlVO ICgibG9hZCIsIEZsb2FkLCBTbG9hZCwgMSwgNSwgMCwKICAgICB9CiAgIGVsc2UKICAgICB7Cisg ICAgICBhY3RpdmF0ZV9scmVhZF9mcmFtZSAoJnRoaXNfZnJhbWUsIExSRUFEX0ZSQU1FX0lOVEVH UkFMKTsKKyAgICAgIHNldF91bndpbmRfcHJvdGVjdF9wdHIgKGZkX2luZGV4LCBjbG9zZV9pbmZp bGVfdW53aW5kLCAmdGhpc19mcmFtZSk7CiAgICAgICBGc2V0IChRbGV4aWNhbF9iaW5kaW5nLAot CSAgICBnZXRfbGV4aWNhbF9iaW5kaW5nIChRZ2V0X2ZpbGVfY2hhciwgY29tcGlsZWQgPyBRbmls IDogZmlsZSkpOworCSAgICBnZXRfbGV4aWNhbF9iaW5kaW5nKCZ0aGlzX2ZyYW1lLCBjb21waWxl ZCA/IFFuaWwgOiBmaWxlKSk7CiAKLSAgICAgIGlmICghIHZlcnNpb24gfHwgdmVyc2lvbiA+PSAy MikKLSAgICAgICAgcmVhZGV2YWxsb29wIChRZ2V0X2ZpbGVfY2hhciwgJmlucHV0LCBoaXN0X2Zp bGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAwLCBRbmlsLCBRbmlsLCBRbmlsLCBRbmls KTsKLSAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8qIFdlIGNhbid0IGhhbmRsZSBh IGZpbGUgd2hpY2ggd2FzIGNvbXBpbGVkIHdpdGgKLSAgICAgICAgICAgICBieXRlLWNvbXBpbGUt ZHluYW1pYyBieSBvbGRlciB2ZXJzaW9uIG9mIEVtYWNzLiAgKi8KLSAgICAgICAgICBzcGVjYmlu ZCAoUWxvYWRfZm9yY2VfZG9jX3N0cmluZ3MsIFF0KTsKLSAgICAgICAgICByZWFkZXZhbGxvb3Ag KFFnZXRfZW1hY3NfbXVsZV9maWxlX2NoYXIsICZpbnB1dCwgaGlzdF9maWxlX25hbWUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAwLCBRbmlsLCBRbmlsLCBRbmlsLCBRbmlsKTsKLSAgICAgICAg fQorICAgICAgcmVhZGV2YWxsb29wX2VvZl90cmFtcG9saW5lIChtYWtlX21pbnRfcHRyKCZ0aGlz X2ZyYW1lKSk7CiAgICAgfQogICB1bmJpbmRfdG8gKGNvdW50LCBRbmlsKTsKIApAQCAtMTc3NCwx MSArMjg2NywxMSBAQCBERUZVTiAoImxvYWQiLCBGbG9hZCwgU2xvYWQsIDEsIDUsIDAsCiAgIGlm ICghTklMUCAoRmZib3VuZHAgKFFkb19hZnRlcl9sb2FkX2V2YWx1YXRpb24pKSkKICAgICBjYWxs biAoUWRvX2FmdGVyX2xvYWRfZXZhbHVhdGlvbiwgaGlzdF9maWxlX25hbWUpOwogCi0gIGZvciAo aW50IGkgPSAwOyBpIDwgQVJSQVlFTFRTIChzYXZlZF9zdHJpbmdzKTsgaSsrKQorICBmb3IgKGlu dCBpID0gMDsgaSA8IEFSUkFZRUxUUyAodGhpc19mcmFtZS5zYXZlZF9zdHJpbmdzKTsgaSsrKQog ICAgIHsKLSAgICAgIHhmcmVlIChzYXZlZF9zdHJpbmdzW2ldLnN0cmluZyk7Ci0gICAgICBzYXZl ZF9zdHJpbmdzW2ldLnN0cmluZyA9IE5VTEw7Ci0gICAgICBzYXZlZF9zdHJpbmdzW2ldLnNpemUg PSAwOworICAgICAgeGZyZWUgKHRoaXNfZnJhbWUuc2F2ZWRfc3RyaW5nc1tpXS5zdHJpbmcpOwor ICAgICAgdGhpc19mcmFtZS5zYXZlZF9zdHJpbmdzW2ldLnN0cmluZyA9IE5VTEw7CisgICAgICB0 aGlzX2ZyYW1lLnNhdmVkX3N0cmluZ3NbaV0uc2l6ZSA9IDA7CiAgICAgfQogCiAgIC8qIFRoZSAi Li4uZG9uZSIgbWVzc2FnZXMgYXJlIHNob3duIG9ubHkgaW4gaW50ZXJhY3RpdmUgbW9kZSwgYmVj YXVzZQpAQCAtMjI4OCw3ICszMzgxLDcgQEAgb3BlbnAgKExpc3BfT2JqZWN0IHBhdGgsIExpc3Bf T2JqZWN0IHN0ciwgTGlzcF9PYmplY3Qgc3VmZml4ZXMsCiAgICBwYXJ0IG9mIGl0LiAgKi8KIAog c3RhdGljIHZvaWQKLWJ1aWxkX2xvYWRfaGlzdG9yeSAoTGlzcF9PYmplY3QgZmlsZW5hbWUsIGJv b2wgZW50aXJlKQorYnVpbGRfbG9hZF9oaXN0b3J5IChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJh bWUsIExpc3BfT2JqZWN0IGZpbGVuYW1lLCBib29sIGVudGlyZSkKIHsKICAgTGlzcF9PYmplY3Qg dGFpbCwgcHJldiwgbmV3ZWx0OwogICBMaXNwX09iamVjdCB0ZW0sIHRlbTI7CkBAIC0yMzI2LDcg KzM0MTksNyBAQCBidWlsZF9sb2FkX2hpc3RvcnkgKExpc3BfT2JqZWN0IGZpbGVuYW1lLCBib29s IGVudGlyZSkKIAogCQkgIGlmIChOSUxQIChGbWVtYmVyIChuZXdlbHQsIHRlbSkpKQogCQkgICAg RnNldGNhciAodGFpbCwgRmNvbnMgKFhDQVIgKHRlbSksCi0JCSAgICAgCQkJICBGY29ucyAobmV3 ZWx0LCBYQ0RSICh0ZW0pKSkpOworCQkJCQkgIEZjb25zIChuZXdlbHQsIFhDRFIgKHRlbSkpKSk7 CiAJCSAgbWF5YmVfcXVpdCAoKTsKIAkJfQogCSAgICB9CkBAIC0yMzQ5LDE5ICszNDQyLDI4IEBA IGJ1aWxkX2xvYWRfaGlzdG9yeSAoTGlzcF9PYmplY3QgZmlsZW5hbWUsIGJvb2wgZW50aXJlKQog ICAgICAgVmN1cnJlbnRfbG9hZF9saXN0ID0gUXQ7CiAgICAgfQogfQotCi1zdGF0aWMgdm9pZAot cmVhZGV2YWxsb29wXzEgKGludCBvbGQpCitMaXNwX09iamVjdAorcmVhZGV2YWxsb29wX2VvZl90 cmFtcG9saW5lIChMaXNwX09iamVjdCBmcmFtZXB0cikKIHsKLSAgbG9hZF9jb252ZXJ0X3RvX3Vu aWJ5dGUgPSBvbGQ7CisgIGxyZWFkX2ZyYW1lICpmcmFtZSA9IHhtaW50X3BvaW50ZXIgKGZyYW1l cHRyKTsKKyAgZWFzc2VydCAoIVVOSU5JVF9TUEVDUERMX1JFRihmcmFtZS0+bG9vcF9keW5hbWlj X2ZyYW1lKSk7CisgIExpc3BfT2JqZWN0IHZhbCA9CisgICAgaW50ZXJuYWxfY29uZGl0aW9uX2Nh c2VfMSAocmVhZGV2YWxsb29wLAorCQkJICAgICAgIGZyYW1lcHRyLAorCQkJICAgICAgIGxpc3Qx IChRZW5kX29mX2ZpbGUpLAorCQkJICAgICAgIHJlYWRldmFsbG9vcF9lb2ZfaGFuZGxlcik7Cisg IGJ1aWxkX2xvYWRfaGlzdG9yeSAoZnJhbWUsIGZyYW1lLT5zb3VyY2VuYW1lLAorCQkgICAgICBG Uk9NX0ZJTEVfUCAoZnJhbWUtPmludHlwZSkgfHwgZnJhbWUtPndob2xlX2J1ZmZlcik7CisgIHJl dHVybiB1bmJpbmRfdG8gKGZyYW1lLT5sb29wX2R5bmFtaWNfZnJhbWUsIHZhbCk7CiB9CiAKIC8q IFNpZ25hbCBhbiBgZW5kLW9mLWZpbGUnIGVycm9yLCBpZiBwb3NzaWJsZSB3aXRoIGZpbGUgbmFt ZQogICAgaW5mb3JtYXRpb24uICAqLwogCiBzdGF0aWMgQVZPSUQKLWVuZF9vZl9maWxlX2Vycm9y ICh2b2lkKQorZW5kX29mX2ZpbGVfZXJyb3IgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkK IHsKKyAgZnJhbWUtPnJlYWRfZW9mID0gdHJ1ZTsKICAgaWYgKFNUUklOR1AgKFZsb2FkX3RydWVf ZmlsZV9uYW1lKSkKICAgICB4c2lnbmFsMSAoUWVuZF9vZl9maWxlLCBWbG9hZF90cnVlX2ZpbGVf bmFtZSk7CiAKQEAgLTIzODksNjMgKzM0OTEsMjc4IEBAIHJlYWRldmFsbG9vcF9lYWdlcl9leHBh bmRfZXZhbCAoTGlzcF9PYmplY3QgdmFsLCBMaXNwX09iamVjdCBtYWNyb2V4cGFuZCkKICAgcmV0 dXJuIHZhbDsKIH0KIAotLyogVU5JQllURSBzcGVjaWZpZXMgaG93IHRvIHNldCBsb2FkX2NvbnZl cnRfdG9fdW5pYnl0ZQotICAgZm9yIHRoaXMgaW52b2NhdGlvbi4KLSAgIFJFQURGVU4sIGlmIG5v bi1uaWwsIGlzIHVzZWQgaW5zdGVhZCBvZiBgcmVhZCcuCitMaXNwX09iamVjdAorbHJlYWRfZ2V0 X2J1ZmZlcl9vYmogKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgc3dpdGNoIChm cmFtZS0+aW50eXBlKQorICAgIHsKKyAgICBjYXNlIExSRUFEX0lOUFVUX0JVRkZFUjoKKyAgICAg IHJldHVybiBmcmFtZS0+aW5wdXQuYi5idWZmZXI7CisgICAgICBicmVhazsKKyAgICBjYXNlIExS RUFEX0lOUFVUX01BUktFUjoKKyAgICAgIHJldHVybiBmcmFtZS0+aW5wdXQubS5iLmJ1ZmZlcjsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfSU5ESVJFQ1Q6CisgICAgICByZXR1 cm4gbHJlYWRfZ2V0X2J1ZmZlcl9vYmogKGZyYW1lLT5pbnB1dC5mcmFtZS5zb3VyY2UpOworICAg ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAvKiBza2lwICovCisgICAgfQorICByZXR1cm4g UW5pbDsKK30KKworc3RydWN0IGJ1ZmZlciAqCitscmVhZF9nZXRfYnVmZmVyIChyZWdpc3RlciBs cmVhZF9mcmFtZSAqZnJhbWUpCit7CisgIHN3aXRjaCAoZnJhbWUtPmludHlwZSkKKyAgICB7Cisg ICAgY2FzZSBMUkVBRF9JTlBVVF9CVUZGRVI6CisgICAgICByZXR1cm4gWEJVRkZFUihmcmFtZS0+ aW5wdXQuYi5idWZmZXIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9NQVJL RVI6CisgICAgICByZXR1cm4gWEJVRkZFUiAoZnJhbWUtPmlucHV0Lm0uYi5idWZmZXIpOworICAg ICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9JTkRJUkVDVDoKKyAgICAgIHJldHVybiBs cmVhZF9nZXRfYnVmZmVyIChmcmFtZS0+aW5wdXQuZnJhbWUuc291cmNlKTsKKyAgICAgIGJyZWFr OworICAgIGRlZmF1bHQ6CisgICAgLyogc2tpcCAqLworICAgIH0KKyAgcmV0dXJuIE5VTEw7Cit9 CisKK3N0YXRpYyBMaXNwX09iamVjdAorYnVmZmVyX3BvaW50X21hcmtlciAoTGlzcF9PYmplY3Qg YnVmZmVyKQoreworICBzdHJ1Y3QgYnVmZmVyICpidWYgPSBYQlVGRkVSIChidWZmZXIpOworICBp ZiAoYnVmID09IGN1cnJlbnRfYnVmZmVyKQorICAgIHJldHVybiBGcG9pbnRfbWFya2VyKCk7Cisg IGlmIChOSUxQIChCVkFSIChidWYsIHB0X21hcmtlcikpKQorICAgIHJldHVybiBidWlsZF9tYXJr ZXIgKGJ1ZiwgQlVGX1BUIChidWYpLCBCVUZfUFRfQllURSAoYnVmKSk7CisgIC8qIGVsc2UgKi8K KyAgcmV0dXJuIEZjb3B5X21hcmtlciAoQlZBUiAoYnVmLCBwdF9tYXJrZXIpLCBRbmlsKTsKK30K KworLyogRG9uJ3QgYWx0ZXIgdGhlIGJ1ZmZlciwganVzdCBjb25zdHJ1Y3QgbWFya2VycyBmb3IK KyAgIGZyYW1lLT5zdGFydCBhbmQgZnJhbWUtPmVuZCBkaXJlY3RseSAqLworYm9vbAorc2V0dXBf YnVmZmVyX2Zvcl9yZWFkZXZhbGxvb3AgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwKKwkJ CSAgICAgICBMaXNwX09iamVjdCBzdGFydCwgTGlzcF9PYmplY3QgZW5kKQoreworICBzcGVjcGRs X3JlZiBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CisgIExpc3BfT2JqZWN0IGJ1ZmZlciA9IGxy ZWFkX2dldF9idWZmZXJfb2JqIChmcmFtZSk7CisgIHN0cnVjdCBidWZmZXIgKmJ1ZiA9IE5JTFAg KGJ1ZmZlcikgPyBOVUxMIDogWEJVRkZFUiAoYnVmZmVyKTsKKyAgaWYgKE5JTFAgKHN0YXJ0KSkK KyAgICB7CisgICAgICBmcmFtZS0+c3RhcnQgPSBidWZmZXJfcG9pbnRfbWFya2VyIChidWZmZXIp OworICAgIH0KKyAgZWxzZSBpZiAoRklYTlVNUCAoc3RhcnQpKQorICAgIHsKKyAgICAgIExpc3Bf T2JqZWN0IHRtcCA9IEZtYWtlX21hcmtlcigpOworICAgICAgZnJhbWUtPnN0YXJ0ID0gRnNldF9t YXJrZXIgKHRtcCwgc3RhcnQsIGJ1ZmZlcik7CisgICAgfQorICBlbHNlIGlmICghTUFSS0VSUCAo c3RhcnQpKQorICAgIHhzaWduYWwxIChRZXJyb3IsIENBTExOIChGZm9ybWF0LAorCQkJICAgICBi dWlsZF9zdHJpbmcgKCJyZWFkOiBzdGFydCBhcmd1bWVudCBtdXN0IGJlIG5pbCwgIgorCQkJICAg ICAgICJudW1iZXIsIG9yIG1hcmtlcjogJVMiKSwKKwkJCSAgICAgc3RhcnQpKTsKKyAgZWxzZQor ICAgIHsKKyAgICAgIC8qIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGUgbWFya2VyIGlzIGZyb20g dGhlIGJ1ZmZlciAqLworICAgICAgaWYgKFhNQVJLRVIgKHN0YXJ0KS0+YnVmZmVyID09IGJ1ZikK KwlmcmFtZS0+c3RhcnQgPSBzdGFydDsKKyAgICAgIGVsc2UKKwl7CisJICBMaXNwX09iamVjdCB0 bXAgPSBGbWFrZV9tYXJrZXIgKCk7CisJICBmcmFtZS0+c3RhcnQKKwkgICAgPSBGc2V0X21hcmtl ciAodG1wLAorCQkJICAgbWFrZV9maXhudW0gKFhNQVJLRVIoc3RhcnQpLT5jaGFycG9zKSwKKwkJ CSAgIGJ1ZmZlcik7CisJfQorICAgIH0KKyAgaWYgKE5JTFAgKGVuZCkpCisgICAgeworICAgICAg TGlzcF9PYmplY3QgdG1wID0gRm1ha2VfbWFya2VyKCk7CisgICAgICBmcmFtZS0+ZW5kID0gRnNl dF9tYXJrZXIgKHRtcCwgbWFrZV9maXhudW0gKEJVRl9aIChidWYpKSxidWZmZXIpOworICAgIH0K KyAgZWxzZSBpZiAoRklYTlVNUCAoZW5kKSkKKyAgICB7CisgICAgICBMaXNwX09iamVjdCB0bXAg PSBGbWFrZV9tYXJrZXIoKTsKKyAgICAgIGZyYW1lLT5lbmQgPSBGc2V0X21hcmtlciAodG1wLCBl bmQsYnVmZmVyKTsKKyAgICB9CisgIGVsc2UgaWYgKCFNQVJLRVJQIChlbmQpKQorICAgIHhzaWdu YWwxIChRZXJyb3IsIENBTExOIChGZm9ybWF0LAorCQkJICAgICBidWlsZF9zdHJpbmcgKCJyZWFk OiBlbmQgYXJndW1lbnQgbXVzdCBiZSBuaWwsICIKKwkJCSAgICAgICAibnVtYmVyLCBvciBtYXJr ZXI6ICVTIiksCisJCQkgICAgIGVuZCkpOworICBlbHNlCisgICAgeworICAgICAgaWYgKFhNQVJL RVIgKGVuZCktPmJ1ZmZlciA9PSBidWYpCisJZnJhbWUtPmVuZCA9IGVuZDsKKyAgICAgIGVsc2UK Kwl7CisJICBMaXNwX09iamVjdCB0bXAgPSBGbWFrZV9tYXJrZXIgKCk7CisJICBmcmFtZS0+ZW5k ID0gRnNldF9tYXJrZXIgKHRtcCwKKwkJCQkgICAgbWFrZV9maXhudW0gKFhNQVJLRVIoZW5kKS0+ Y2hhcnBvcyksCisJCQkJICAgIGJ1ZmZlcik7CisJfQorICAgIH0KKyAgLyogaXMgcmVzdHJpY3Rp b24gdGhlIHdob2xlIGJ1ZmZlcj8gKi8KKyAgYm9vbCBydiA9ICgoWE1BUktFUiAoZnJhbWUtPnN0 YXJ0KS0+Y2hhcnBvcyA9PSBCVUZfQkVHIChidWYpKQorCSAgICAgJiYgKFhNQVJLRVIgKGZyYW1l LT5lbmQpLT5jaGFycG9zID09IEJVRl9aIChidWYpKSk7CisgIHVuYmluZF90byAoY291bnQsUW5p bCk7CisgIHJldHVybiBydjsKK30KKworSU5MSU5FIHZvaWQKK2NoZWNrX2xpdmVfaW5wdXQgKHJl Z2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwgc3RydWN0IGJ1ZmZlciAqYnVmKQoreworICAvKiBU aGUgb25seSBpbnB1dCB0eXBlIHRoYXQgZXZhbCBtaWdodCBraWxsIGlzIGEgYnVmZmVyICovCisg IGlmIChidWYgIT0gMCAmJiAhQlVGRkVSX0xJVkVfUCAoYnVmKSkKKyAgICBlcnJvciAoIlJlYWRp bmcgZnJvbSBraWxsZWQgYnVmZmVyIik7CisKK30KKworLyogRHVyaW5nICJldmFsLXJlZ2lvbiIs IHJlYWRldmFsbG9vcCBwZXJmb3JtcyBldmFsdWF0aW9ucyBpbiAyIGNvbnRleHRzCisgICB3aXRo IHJlc3BlY3QgdG8gImN1cnJlbnQtYnVmZmVyIiBhbmQgcmVzdHJpY3Rpb25zIG9uIGl0IHRoYXQg bWlnaHQgZWl0aGVyCisgICBhZmZlY3Qgb3IgYmUgYWZmZWN0ZWQgYnkgdGhlIG9wZXJhdGlvbiBv ZiByZWFkaW5nIHRoZSBidWZmZXIuCisKKyAgIFRoZSBmaXJzdCBpcyB0aGUgZXZhbHVhdGlvbiBj b250ZXh0IGluIHdoaWNoIHRoZSAiZXZhbC1yZWdpb24iIGlzIGNhbGxlZCwKKyAgICAgICBhbmQg YWxzbyBpbiB3aGljaCB0aGUgZm9ybXMgYmVpbmcgcmVhZCBhcmUgY2FsbGVkLgorICAgVGhlIHNl Y29uZCBpcyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUgc3RyZWFtIGlzIHJlYWQuCisKKyAgIHJl YWRldmFsbG9vcCB0cmVhdHMgdGhlIHR3byBjb250ZXh0cyBhcyBpZiBhIHNvcnQgb2YgZHluYW1p Yy13aW5kIHN1cnJvdW5kcworICAgZWFjaDoKKyAgIChkeW5hbWljLXdpbmQgd2luZC11cC1ldmFs IGV2YWwtY29udGV4dCB1bndpbmQtZXZhbCkKKyAgIChkeW5hbWljLXdpbmQgd2luZC11cC1yZWFk IHJlYWQtY29udGV4dCB1bndpbmQtcmVhZCkKKworICAgVGhpcyBwcm9jZWR1cmUgaXMgYSBjb21i aW5hdGlvbiBvZiAidW53aW5kLWV2YWwiIGFuZCAid2luZC11cC1yZWFkIiwKKyAgIGJ1dCB0aGUg InVud2luZC1ldmFsIiBoYXMgdGhlIGZvcm0gInVud2luZC1wcm90ZWN0IHdpbmQtdXAtZXZhbCIK KyAqLwordm9pZAorcHJlcGFyZV9idWZmZXJfZm9yX2ludGVycnVwdGlibGVfcmVhZCAocmVnaXN0 ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLAorCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyICpidWYpCit7 CisgIC8qIHN0cnVjdCBidWZmZXIgKmJ1ZiA9IGxyZWFkX2dldF9idWZmZXIoZnJhbWUpOyAqLwor ICAvKiBTd2l0Y2ggdG8gdGhlIGJ1ZmZlciB3ZSBhcmUgcmVhZGluZyBmcm9tLiAgKi8KKyAgcmVj b3JkX3Vud2luZF9wcm90ZWN0X2V4Y3Vyc2lvbiAoKTsKKyAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAo YnVmKTsKKworICAvKiBTYXZlIHBvaW50IGluIGl0LiAgKi8KKyAgcmVjb3JkX3Vud2luZF9wcm90 ZWN0X2V4Y3Vyc2lvbiAoKTsKKyAgLyogU2F2ZSBaViBpbiBpdC4gICovCisgIHJlY29yZF91bndp bmRfcHJvdGVjdCAoc2F2ZV9yZXN0cmljdGlvbl9yZXN0b3JlLCBzYXZlX3Jlc3RyaWN0aW9uX3Nh dmUgKCkpOworICBsYWJlbGVkX3Jlc3RyaWN0aW9uc19yZW1vdmVfaW5fY3VycmVudF9idWZmZXIg KCk7CisgIC8qIFRob3NlIGdldCB1bmJvdW5kIGFmdGVyIHdlIHJlYWQgb25lIGV4cHJlc3Npb24u ICAqLworCisgIC8qIFNldCBwb2ludCBhbmQgWlYgYXJvdW5kIHN0dWZmIHRvIGJlIHJlYWQuICAq LworICBGZ290b19jaGFyIChmcmFtZS0+c3RhcnQpOworICBGbmFycm93X3RvX3JlZ2lvbiAobWFr ZV9maXhudW0gKEJFR1YpLCBmcmFtZS0+ZW5kKTsKK30KKworLyogUkVBREZVTiwgaWYgbm9uLW5p bCwgaXMgdXNlZCBpbnN0ZWFkIG9mIGByZWFkJy4KIAogICAgU1RBUlQsIEVORCBzcGVjaWZ5IHJl Z2lvbiB0byByZWFkIGluIGN1cnJlbnQgYnVmZmVyIChmcm9tIGV2YWwtcmVnaW9uKS4KICAgIElm IHRoZSBpbnB1dCBpcyBub3QgZnJvbSBhIGJ1ZmZlciwgdGhleSBtdXN0IGJlIG5pbC4gICovCiAK LXN0YXRpYyB2b2lkCi1yZWFkZXZhbGxvb3AgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLAotCSAg ICAgIHN0cnVjdCBpbmZpbGUgKmluZmlsZTAsCi0JICAgICAgTGlzcF9PYmplY3Qgc291cmNlbmFt ZSwKLQkgICAgICBib29sIHByaW50ZmxhZywKLQkgICAgICBMaXNwX09iamVjdCB1bmlieXRlLCBM aXNwX09iamVjdCByZWFkZnVuLAotCSAgICAgIExpc3BfT2JqZWN0IHN0YXJ0LCBMaXNwX09iamVj dCBlbmQpCitzdGF0aWMgTGlzcF9PYmplY3QKK25vbnN0YW5kYXJkX3JlYWQgKExpc3BfT2JqZWN0 IGZyYW1lcHRyKQoreworICByZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUgPSB4bWludF9wb2lu dGVyIChmcmFtZXB0cik7CisgIExpc3BfT2JqZWN0IHZhbDsKKyAgTGlzcF9PYmplY3Qgc3RyZWFt OworICBpZiAoRlJPTV9CVUZGRVJfUCAoZnJhbWUtPmludHlwZSkpCisgICAgc3RyZWFtID0gbHJl YWRfZ2V0X2J1ZmZlcl9vYmogKGZyYW1lKTsKKyAgZWxzZQorICAgIHN0cmVhbSA9IFFyZWFkZXJf aW5wdXRfc3RyZWFtOworICBpZiAoIU5JTFAgKGZyYW1lLT5yZWFkZnVuKSkKKyAgICB7CisgICAg ICB2YWwgPSBjYWxsbiAoZnJhbWUtPnJlYWRmdW4sIHN0cmVhbSk7CisKKyAgICAgIC8qIElmIFJF QURDSEFSRlVOIGhhcyBzZXQgcG9pbnQgdG8gWlYsIHdlIHNob3VsZAorCSBzdG9wIHJlYWRpbmcs IGV2ZW4gaWYgdGhlIGZvcm0gcmVhZCBzZXRzIHBvaW50CisJIHRvIGEgZGlmZmVyZW50IHZhbHVl IHdoZW4gZXZhbHVhdGVkLiAgKi8KKyAgICAgIGlmIChGUk9NX0JVRkZFUl9QIChmcmFtZS0+aW50 eXBlKSkKKwl7CisJICBzdHJ1Y3QgYnVmZmVyICpidWYgPSBscmVhZF9nZXRfYnVmZmVyIChmcmFt ZSk7CisJICBpZiAoQlVGX1BUIChidWYpID09IEJVRl9aViAoYnVmKSkKKwkgICAgZnJhbWUtPnJl YWRfZW9mID0gdHJ1ZTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogISBOSUxQ IChWbG9hZF9yZWFkX2Z1bmN0aW9uKSAqLworICAgICAgdmFsID0gY2FsbG4gKFZsb2FkX3JlYWRf ZnVuY3Rpb24sIHN0cmVhbSk7CisgICAgfQorICBmcmFtZS0+cmVhZF9leHByID0gdHJ1ZTsKKyAg cmV0dXJuIHZhbDsKK30KKworSU5MSU5FIHZvaWQKK2xyZWFkX3NraXBfaW5zaWduaWZpY2FudCAo cmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQogewogICBpbnQgYzsKKyAgLyogdGhpcyBpcyBv bmx5IGNvcnJlY3QgaWYgd2Uga25vdyByZWFkMCBpcyBnb2luZworICAgICB0byBiZSByZWFkaW5n IGV4cHJlc3Npb25zIGZyb20gc291cmNlLiAgT3RoZXIKKyAgICAgcmVhZGVycyBtaWdodCBkbyBz b21ldGhpbmcgd2l0aCBjb21tZW50cyBhbmQKKyAgICAgd2hpdGVzcGFjZS4gICovCisgIC8qIG9u bHkgYmVuZWZpdCBpcyB0byBhdm9pZCBjb25kaXRpb24tY2FzZSBmb3IKKyAgICAgY2F0Y2hpbmcg ZW5kLW9mLWZpbGUgPyAqLworIHJlYWRfbmV4dDoKKyAgYyA9IFJFQURDSEFSIChmcmFtZSk7Cisg IGlmIChjID09ICc7JykKKyAgICB7CisgICAgICB3aGlsZSAoKGMgPSBSRUFEQ0hBUiAoZnJhbWUp KSAhPSAnXG4nICYmIGMgIT0gLTEpOworICAgICAgZ290byByZWFkX25leHQ7CisgICAgfQorICBp ZiAoYyA8IDApCisgICAgeworICAgICAgZnJhbWUtPnJlYWRfZW9mID0gdHJ1ZTsKKyAgICB9CisK KyAgLyogSWdub3JlIHdoaXRlc3BhY2UgaGVyZSwgc28gd2UgY2FuIGRldGVjdCBlb2YuICAqLwor ICBpZiAoYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcZicgfHwg YyA9PSAnXHInCisgICAgICB8fCBjID09IE5PX0JSRUFLX1NQQUNFKQorICAgIGdvdG8gcmVhZF9u ZXh0OworICBVTlJFQUQgKGZyYW1lLCBjKTsKK30KKworc3RhdGljIExpc3BfT2JqZWN0CityZWFk ZXZhbGxvb3AgKExpc3BfT2JqZWN0IGZyYW1lcHRyKQoreworICByZWdpc3RlciBscmVhZF9mcmFt ZSAqZnJhbWUgPSB4bWludF9wb2ludGVyIChmcmFtZXB0cik7CiAgIExpc3BfT2JqZWN0IHZhbDsK LSAgc3BlY3BkbF9yZWYgY291bnQgPSBTUEVDUERMX0lOREVYICgpOwotICBzdHJ1Y3QgYnVmZmVy ICpiID0gMDsKLSAgYm9vbCBjb250aW51ZV9yZWFkaW5nX3A7CisgIHN0cnVjdCBidWZmZXIgKmIg PSBscmVhZF9nZXRfYnVmZmVyIChmcmFtZSk7CiAgIExpc3BfT2JqZWN0IGxleF9ib3VuZDsKICAg LyogVHJ1ZSBpZiByZWFkaW5nIGFuIGVudGlyZSBidWZmZXIuICAqLwotICBib29sIHdob2xlX2J1 ZmZlciA9IDA7Ci0gIC8qIFRydWUgb24gdGhlIGZpcnN0IHRpbWUgYXJvdW5kLiAgKi8KLSAgYm9v bCBmaXJzdF9zZXhwID0gMTsKICAgTGlzcF9PYmplY3QgbWFjcm9leHBhbmQ7Ci0KLSAgaWYgKCFO SUxQIChzb3VyY2VuYW1lKSkKLSAgICBDSEVDS19TVFJJTkcgKHNvdXJjZW5hbWUpOworICBib29s IGNvbXBpbGVkID0gKFNUUklOR1AgKGZyYW1lLT5zb3VyY2VuYW1lKSAmJiBzdWZmaXhfcCAoZnJh bWUtPnNvdXJjZW5hbWUsICIuZWxjIikpOworICBib29sIGlnbm9yZV9yZWFkZnVuID0gTklMUCAo ZnJhbWUtPnJlYWRmdW4pOworICBib29sIHVzZV9yZWFkMCA9IGNvbXBpbGVkIHx8IHdpbGxfZHVt cF9wKCkKKyAgICB8fCAoaWdub3JlX3JlYWRmdW4KKwkmJiAoTklMUCAoVmxvYWRfcmVhZF9mdW5j dGlvbikpKTsKKwkgICAgLyogfHwgRVEgKFZsb2FkX3JlYWRfZnVuY3Rpb24sIFFyZWFkKSkpOyAq LworICBMaXNwX09iamVjdCBwcmV2X1Zsb2FkX3JlYWRfZnVuY3Rpb24gPSBWbG9hZF9yZWFkX2Z1 bmN0aW9uOwogCiAgIG1hY3JvZXhwYW5kID0gUWludGVybmFsX21hY3JvZXhwYW5kX2Zvcl9sb2Fk OwogCi0gIGlmIChOSUxQIChGZmJvdW5kcCAobWFjcm9leHBhbmQpKQotICAgICAgfHwgKFNUUklO R1AgKHNvdXJjZW5hbWUpICYmIHN1ZmZpeF9wIChzb3VyY2VuYW1lLCAiLmVsYyIpKSkKKyAgaWYg KE5JTFAgKEZmYm91bmRwIChtYWNyb2V4cGFuZCkpIHx8IGNvbXBpbGVkKQogICAgIC8qIERvbid0 IG1hY3JvZXhwYW5kIGJlZm9yZSB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBpcyBkZWZpbmVk CiAgICAgICAgYW5kIGRvbid0IGJvdGhlciBtYWNyb2V4cGFuZGluZyBpbiAuZWxjIGZpbGVzLCBz aW5jZSBpdCBzaG91bGQgaGF2ZQogICAgICAgIGJlZW4gZG9uZSBhbHJlYWR5LiAgKi8KICAgICBt YWNyb2V4cGFuZCA9IFFuaWw7CiAKLSAgaWYgKE1BUktFUlAgKHJlYWRjaGFyZnVuKSkKLSAgICB7 Ci0gICAgICBpZiAoTklMUCAoc3RhcnQpKQotCXN0YXJ0ID0gcmVhZGNoYXJmdW47Ci0gICAgfQot Ci0gIGlmIChCVUZGRVJQIChyZWFkY2hhcmZ1bikpCi0gICAgYiA9IFhCVUZGRVIgKHJlYWRjaGFy ZnVuKTsKLSAgZWxzZSBpZiAoTUFSS0VSUCAocmVhZGNoYXJmdW4pKQotICAgIGIgPSBYTUFSS0VS IChyZWFkY2hhcmZ1biktPmJ1ZmZlcjsKLQogICAvKiBXZSBhc3N1bWUgU1RBUlQgaXMgbmlsIHdo ZW4gaW5wdXQgaXMgbm90IGZyb20gYSBidWZmZXIuICAqLwotICBpZiAoISBOSUxQIChzdGFydCkg JiYgIWIpCisgIGlmICghIE5JTFAgKGZyYW1lLT5zdGFydCkgJiYgIWIpCiAgICAgZW1hY3NfYWJv cnQgKCk7CiAKLSAgc3BlY2JpbmQgKFFzdGFuZGFyZF9pbnB1dCwgcmVhZGNoYXJmdW4pOwotICBy ZWNvcmRfdW53aW5kX3Byb3RlY3RfaW50IChyZWFkZXZhbGxvb3BfMSwgbG9hZF9jb252ZXJ0X3Rv X3VuaWJ5dGUpOwotICBsb2FkX2NvbnZlcnRfdG9fdW5pYnl0ZSA9ICFOSUxQICh1bmlieXRlKTsK KyAgLyogZWRlYnVnJ3MgaW5zdHJ1bWVudGF0aW9uIG1lY2hhbmlzbSB3cmFwcyBsb2FkLXJlYWQt ZnVuY3Rpb24KKyAgICAgYW5kIHJlcXVpcmVzIHRoZSBzdHJlYW0gYXJndW1lbnQgdG8gYmUgdGhl IGN1cnJlbnQtYnVmZmVyLgorICAgICBKdXN0IHVzaW5nIFFyZWFkZXJfaW5wdXRfc3RyZWFtIGJy ZWFrcyB0aGlzIHVuZG9jdW1lbnRlZAorICAgICBhc3N1bXB0aW9uIGFib3V0IHRoZSBhcmd1bWVu dCB0byBsb2FkLXJlYWQtZnVuY3Rpb24uICovCisgIExpc3BfT2JqZWN0IHN0cmVhbSA9IEZST01f QlVGRkVSX1AgKGZyYW1lLT5pbnR5cGUpID8KKyAgICBscmVhZF9nZXRfYnVmZmVyX29iaiAoZnJh bWUpIDogUXJlYWRlcl9pbnB1dF9zdHJlYW07CisgIHNwZWNiaW5kIChRc3RhbmRhcmRfaW5wdXQs IHN0cmVhbSk7CiAKICAgLyogSWYgbGV4aWNhbCBiaW5kaW5nIGlzIGFjdGl2ZSAoZWl0aGVyIGJl Y2F1c2UgaXQgd2FzIHNwZWNpZmllZCBpbgogICAgICB0aGUgZmlsZSdzIGhlYWRlciwgb3Igdmlh IGEgYnVmZmVyLWxvY2FsIHZhcmlhYmxlKSwgY3JlYXRlIGFuIGVtcHR5CkBAIC0yNDU2LDEzOSAr Mzc3MywxOTkgQEAgcmVhZGV2YWxsb29wIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwKIAkgICAg ID8gUW5pbCA6IGxpc3QxIChRdCkpKTsKICAgc3BlY2JpbmQgKFFtYWNyb2V4cF9fZHludmFycywg Vm1hY3JvZXhwX19keW52YXJzKTsKIAotICAvKiBFbnN1cmUgc291cmNlbmFtZSBpcyBhYnNvbHV0 ZSwgZXhjZXB0IHdoaWxzdCBwcmVsb2FkaW5nLiAgKi8KLSAgaWYgKCF3aWxsX2R1bXBfcCAoKQot ICAgICAgJiYgIU5JTFAgKHNvdXJjZW5hbWUpICYmICFOSUxQIChGZmlsZV9uYW1lX2Fic29sdXRl X3AgKHNvdXJjZW5hbWUpKSkKLSAgICBzb3VyY2VuYW1lID0gRmV4cGFuZF9maWxlX25hbWUgKHNv dXJjZW5hbWUsIFFuaWwpOwotCi0gIGxvYWRoaXN0X2luaXRpYWxpemUgKHNvdXJjZW5hbWUpOwor ICBsb2FkaGlzdF9pbml0aWFsaXplIChmcmFtZS0+c291cmNlbmFtZSk7CisgIGlmIChiICE9IE5V TEwpCisgICAgZnJhbWUtPndob2xlX2J1ZmZlciA9CisgICAgICBzZXR1cF9idWZmZXJfZm9yX3Jl YWRldmFsbG9vcCAoZnJhbWUsIGZyYW1lLT5zdGFydCwgZnJhbWUtPmVuZCkKKyAgICAgIHx8IGZy YW1lLT53aG9sZV9idWZmZXI7CiAKLSAgY29udGludWVfcmVhZGluZ19wID0gMTsKLSAgd2hpbGUg KGNvbnRpbnVlX3JlYWRpbmdfcCkKKyAgLyogdGhlIHJlYWQgZHluYW1pYyBmcmFtZSBtdXN0IGJl IGluaXRpYWxpemVkIGV2ZW4gaW4gdGhlIHN0cmVhbSBpcyBlbXB0eSAqLworICBscmVhZF9pbml0 X2R5bmFtaWNfZnJhbWUgKGZyYW1lKTsKKyAgd2hpbGUgKCFmcmFtZS0+cmVhZF9lb2YpCiAgICAg ewotICAgICAgc3BlY3BkbF9yZWYgY291bnQxID0gU1BFQ1BETF9JTkRFWCAoKTsKIAotICAgICAg aWYgKGIgIT0gMCAmJiAhQlVGRkVSX0xJVkVfUCAoYikpCi0JZXJyb3IgKCJSZWFkaW5nIGZyb20g a2lsbGVkIGJ1ZmZlciIpOworICAgICAgZnJhbWUtPm9iamVjdHNfbWFwID0gRmNscmhhc2ggKGZy YW1lLT5vYmplY3RzX21hcCk7CisgICAgICBmcmFtZS0+b2JqZWN0c19jb21wbGV0ZWQgPSBGY2xy aGFzaCAoZnJhbWUtPm9iamVjdHNfY29tcGxldGVkKTsKIAotICAgICAgaWYgKCFOSUxQIChzdGFy dCkpCi0JewotCSAgLyogU3dpdGNoIHRvIHRoZSBidWZmZXIgd2UgYXJlIHJlYWRpbmcgZnJvbS4g ICovCi0JICByZWNvcmRfdW53aW5kX3Byb3RlY3RfZXhjdXJzaW9uICgpOwotCSAgc2V0X2J1ZmZl cl9pbnRlcm5hbCAoYik7Ci0KLQkgIC8qIFNhdmUgcG9pbnQgaW4gaXQuICAqLwotCSAgcmVjb3Jk X3Vud2luZF9wcm90ZWN0X2V4Y3Vyc2lvbiAoKTsKLQkgIC8qIFNhdmUgWlYgaW4gaXQuICAqLwot CSAgcmVjb3JkX3Vud2luZF9wcm90ZWN0IChzYXZlX3Jlc3RyaWN0aW9uX3Jlc3RvcmUsIHNhdmVf cmVzdHJpY3Rpb25fc2F2ZSAoKSk7Ci0JICBsYWJlbGVkX3Jlc3RyaWN0aW9uc19yZW1vdmVfaW5f Y3VycmVudF9idWZmZXIgKCk7Ci0JICAvKiBUaG9zZSBnZXQgdW5ib3VuZCBhZnRlciB3ZSByZWFk IG9uZSBleHByZXNzaW9uLiAgKi8KLQotCSAgLyogU2V0IHBvaW50IGFuZCBaViBhcm91bmQgc3R1 ZmYgdG8gYmUgcmVhZC4gICovCi0JICBGZ290b19jaGFyIChzdGFydCk7Ci0JICBpZiAoIU5JTFAg KGVuZCkpCi0JICAgIEZuYXJyb3dfdG9fcmVnaW9uIChtYWtlX2ZpeG51bSAoQkVHViksIGVuZCk7 Ci0KLQkgIC8qIEp1c3QgZm9yIGNsZWFubGluZXNzLCBjb252ZXJ0IEVORCB0byBhIG1hcmtlcgot CSAgICAgaWYgaXQgaXMgYW4gaW50ZWdlci4gICovCi0JICBpZiAoRklYTlVNUCAoZW5kKSkKLQkg ICAgZW5kID0gRnBvaW50X21heF9tYXJrZXIgKCk7Ci0JfQorICAgICAgLyogQ2hlY2sgdGhpcyB3 aGV0aGVyIHRoZSBmcmFtZSBpcyBpbnRlZ3JhbCBvciBkeW5hbWljLXdpbmQgKi8KKyAgICAgIGNo ZWNrX2xpdmVfaW5wdXQgKGZyYW1lLCBiKTsKIAotICAgICAgLyogT24gdGhlIGZpcnN0IGN5Y2xl LCB3ZSBjYW4gZWFzaWx5IHRlc3QgaGVyZQotCSB3aGV0aGVyIHdlIGFyZSByZWFkaW5nIHRoZSB3 aG9sZSBidWZmZXIuICAqLwotICAgICAgaWYgKGIgJiYgZmlyc3Rfc2V4cCkKLQl3aG9sZV9idWZm ZXIgPSAoQlVGX1BUIChiKSA9PSBCVUZfQkVHIChiKSAmJiBCVUZfWlYgKGIpID09IEJVRl9aIChi KSk7CisgICAgICBpZiAoYiAmJiBmcmFtZS0+dHlwZSA9PSBMUkVBRF9GUkFNRV9EWU5BTUlDX1dJ TkQpCisJcHJlcGFyZV9idWZmZXJfZm9yX2ludGVycnVwdGlibGVfcmVhZCAoZnJhbWUsIGIpOwog Ci0gICAgICBlYXNzZXJ0ICghaW5maWxlMCB8fCBpbmZpbGUgPT0gaW5maWxlMCk7Ci0gICAgcmVh ZF9uZXh0OgotICAgICAgYyA9IFJFQURDSEFSOwotICAgICAgaWYgKGMgPT0gJzsnKQorICAgICAg ZnJhbWUtPnJlYWRfZXhwciA9IGZhbHNlOworICAgICAgLyogSGFuZGxlIHRoZSBtb3N0IGNvbW1v biBjYXNlIGZpcnN0ICovCisgICAgICAvKiBub3Qgc3VyZSB3aHkgdGhlIFZwdXJpZnlfZmxhZy93 aWxsX2R1bXBfcCBjYXNlIGlzIHNwZWNpYWwgKi8KKyAgICAgIGlmICh1c2VfcmVhZDApCiAJewot CSAgd2hpbGUgKChjID0gUkVBRENIQVIpICE9ICdcbicgJiYgYyAhPSAtMSk7Ci0JICBnb3RvIHJl YWRfbmV4dDsKKwkvKiBhdm9pZCBjb25kaXRpb24gY2FzZSAqLworCSAgbHJlYWRfc2tpcF9pbnNp Z25pZmljYW50IChmcmFtZSk7CisJICBpZiAoZnJhbWUtPnJlYWRfZW9mKQorCSAgICAgIGJyZWFr OworCSAgdmFsID0gcmVhZDAgKGZyYW1lKTsKKwkgIGZyYW1lLT5uZXhwcnMrKzsKIAl9Ci0gICAg ICBpZiAoYyA8IDApCisgICAgICBlbHNlCiAJewotCSAgdW5iaW5kX3RvIChjb3VudDEsIFFuaWwp OwotCSAgYnJlYWs7CisJICAvKiByZWFkIHN0b3BzIGJ5IHNpZ25hbGluZyBlbmQtb2YtZmlsZQor CSAgICAgTXVzdCBub3QgcmV0dXJuIGEgdmFsdWUgYW5kIHNldCByZWFkX2VvZiEKKwkgICAqLwor CSAgdmFsID0gaW50ZXJuYWxfY29uZGl0aW9uX2Nhc2VfMSAobm9uc3RhbmRhcmRfcmVhZCwKKwkJ CQkJICAgbWFrZV9taW50X3B0ciAoZnJhbWUpLAorCQkJCQkgICBsaXN0MSAoUWVuZF9vZl9maWxl KSwKKwkJCQkJICAgbHJlYWRfc2V0X3JlYWRfZW9mKTsKKwkgIGlmIChmcmFtZS0+cmVhZF9lb2Yg JiYgIWZyYW1lLT5yZWFkX2V4cHIpCisJICAgICAgYnJlYWs7CisJICBmcmFtZS0+bmV4cHJzKys7 CiAJfQogCi0gICAgICAvKiBJZ25vcmUgd2hpdGVzcGFjZSBoZXJlLCBzbyB3ZSBjYW4gZGV0ZWN0 IGVvZi4gICovCi0gICAgICBpZiAoYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8 fCBjID09ICdcZicgfHwgYyA9PSAnXHInCi0JICB8fCBjID09IE5PX0JSRUFLX1NQQUNFKQotCWdv dG8gcmVhZF9uZXh0OwotICAgICAgVU5SRUFEIChjKTsKLQotICAgICAgaWYgKCEgSEFTSF9UQUJM RV9QIChyZWFkX29iamVjdHNfbWFwKQotCSAgfHwgWEhBU0hfVEFCTEUgKHJlYWRfb2JqZWN0c19t YXApLT5jb3VudCkKLQlyZWFkX29iamVjdHNfbWFwCi0JICA9IG1ha2VfaGFzaF90YWJsZSAoJmhh c2h0ZXN0X2VxLCBERUZBVUxUX0hBU0hfU0laRSwgV2Vha19Ob25lKTsKLSAgICAgIGlmICghIEhB U0hfVEFCTEVfUCAocmVhZF9vYmplY3RzX2NvbXBsZXRlZCkKLQkgIHx8IFhIQVNIX1RBQkxFIChy ZWFkX29iamVjdHNfY29tcGxldGVkKS0+Y291bnQpCi0JcmVhZF9vYmplY3RzX2NvbXBsZXRlZAot CSAgPSBtYWtlX2hhc2hfdGFibGUgKCZoYXNodGVzdF9lcSwgREVGQVVMVF9IQVNIX1NJWkUsIFdl YWtfTm9uZSk7Ci0gICAgICBpZiAoIU5JTFAgKFZwdXJpZnlfZmxhZykgJiYgYyA9PSAnKCcpCi0J dmFsID0gcmVhZDAgKHJlYWRjaGFyZnVuLCBmYWxzZSk7Ci0gICAgICBlbHNlCisKKyAgICAgIC8q IFJlc3RvcmUgc2F2ZWQgcG9pbnQgYW5kIEJFR1YuICAqLworICAgICAgZWFzc2VydCAoIVVOSU5J VF9TUEVDUERMX1JFRiAoZnJhbWUtPmR5bmFtaWNfZnJhbWUpKTsKKyAgICAgIGlmIChmcmFtZS0+ dHlwZSA9PSBMUkVBRF9GUkFNRV9EWU5BTUlDX1dJTkQpCiAJewotCSAgaWYgKCFOSUxQIChyZWFk ZnVuKSkKKwkgIGlmIChiICYmICFmcmFtZS0+cmVhZF9lb2YgJiYgZnJhbWUtPnR5cGUgPT0gTFJF QURfRlJBTUVfRFlOQU1JQ19XSU5EKQogCSAgICB7Ci0JICAgICAgdmFsID0gY2FsbG4gKHJlYWRm dW4sIHJlYWRjaGFyZnVuKTsKLQotCSAgICAgIC8qIElmIFJFQURDSEFSRlVOIGhhcyBzZXQgcG9p bnQgdG8gWlYsIHdlIHNob3VsZAotCSAgICAgICAgIHN0b3AgcmVhZGluZywgZXZlbiBpZiB0aGUg Zm9ybSByZWFkIHNldHMgcG9pbnQKLQkJIHRvIGEgZGlmZmVyZW50IHZhbHVlIHdoZW4gZXZhbHVh dGVkLiAgKi8KLQkgICAgICBpZiAoQlVGRkVSUCAocmVhZGNoYXJmdW4pKQotCQl7Ci0JCSAgc3Ry dWN0IGJ1ZmZlciAqYnVmID0gWEJVRkZFUiAocmVhZGNoYXJmdW4pOwotCQkgIGlmIChCVUZfUFQg KGJ1ZikgPT0gQlVGX1pWIChidWYpKQotCQkgICAgY29udGludWVfcmVhZGluZ19wID0gMDsKLQkJ fQorCSAgICAgIGZyYW1lLT5zdGFydCA9IEZwb2ludF9tYXJrZXIgKCk7CisJICAgICAgZnJhbWUt PmNoYXJfb2Zmc2V0ID0gWE1BUktFUiAoZnJhbWUtPnN0YXJ0KS0+Y2hhcnBvczsKKwkgICAgICBm cmFtZS0+Ynl0ZV9vZmZzZXQgPSBYTUFSS0VSIChmcmFtZS0+c3RhcnQpLT5ieXRlcG9zOwogCSAg ICB9Ci0JICBlbHNlIGlmICghIE5JTFAgKFZsb2FkX3JlYWRfZnVuY3Rpb24pKQotCSAgICB2YWwg PSBjYWxsbiAoVmxvYWRfcmVhZF9mdW5jdGlvbiwgcmVhZGNoYXJmdW4pOwotCSAgZWxzZQotCSAg ICB2YWwgPSByZWFkX2ludGVybmFsX3N0YXJ0IChyZWFkY2hhcmZ1biwgUW5pbCwgUW5pbCwgZmFs c2UpOworCSAgbHJlYWRfdW53aW5kX2Zvcl9ldmFsIChmcmFtZSk7CiAJfQotICAgICAgLyogRW1w dHkgaGFzaGVzIGNhbiBiZSByZXVzZWQ7IG90aGVyd2lzZSwgcmVzZXQgb24gbmV4dCBjYWxsLiAg Ki8KLSAgICAgIGlmIChIQVNIX1RBQkxFX1AgKHJlYWRfb2JqZWN0c19tYXApCi0JICAmJiBYSEFT SF9UQUJMRSAocmVhZF9vYmplY3RzX21hcCktPmNvdW50ID4gMCkKLQlyZWFkX29iamVjdHNfbWFw ID0gUW5pbDsKLSAgICAgIGlmIChIQVNIX1RBQkxFX1AgKHJlYWRfb2JqZWN0c19jb21wbGV0ZWQp Ci0JICAmJiBYSEFTSF9UQUJMRSAocmVhZF9vYmplY3RzX2NvbXBsZXRlZCktPmNvdW50ID4gMCkK LQlyZWFkX29iamVjdHNfY29tcGxldGVkID0gUW5pbDsKLQotICAgICAgaWYgKCFOSUxQIChzdGFy dCkgJiYgY29udGludWVfcmVhZGluZ19wKQotCXN0YXJ0ID0gRnBvaW50X21hcmtlciAoKTsKLQot ICAgICAgLyogUmVzdG9yZSBzYXZlZCBwb2ludCBhbmQgQkVHVi4gICovCi0gICAgICB1bmJpbmRf dG8gKGNvdW50MSwgUW5pbCk7Ci0KICAgICAgIC8qIE5vdyBldmFsIHdoYXQgd2UganVzdCByZWFk LiAgKi8KICAgICAgIGlmICghTklMUCAobWFjcm9leHBhbmQpKQotICAgICAgICB2YWwgPSByZWFk ZXZhbGxvb3BfZWFnZXJfZXhwYW5kX2V2YWwgKHZhbCwgbWFjcm9leHBhbmQpOworCWZyYW1lLT52 YWx1ZSA9IHJlYWRldmFsbG9vcF9lYWdlcl9leHBhbmRfZXZhbCAodmFsLCBtYWNyb2V4cGFuZCk7 CiAgICAgICBlbHNlCi0gICAgICAgIHZhbCA9IGV2YWxfc3ViICh2YWwpOworCWZyYW1lLT52YWx1 ZSA9IGV2YWxfc3ViICh2YWwpOworCisgICAgICAvKiBjaGVjayBpZiB0aGUgZXZhbHVhdGlvbiBh ZmZlY3RlZCB3aGV0aGVyIHdlIGNhbiB1c2UgdGhlCisJIHNob3J0Y3V0IHRvIHJlYWQwICovCisg ICAgICBpZiAoIUVRIChWbG9hZF9yZWFkX2Z1bmN0aW9uLCBwcmV2X1Zsb2FkX3JlYWRfZnVuY3Rp b24pKQorCXsKKwkgIHByZXZfVmxvYWRfcmVhZF9mdW5jdGlvbiA9IFZsb2FkX3JlYWRfZnVuY3Rp b247CisJICB1c2VfcmVhZDAgPSBjb21waWxlZCB8fCB3aWxsX2R1bXBfcCAoKQorCSAgICB8fCAo aWdub3JlX3JlYWRmdW4KKwkJJiYgKE5JTFAgKFZsb2FkX3JlYWRfZnVuY3Rpb24pKSk7CisJCSAg ICAvKiB8fCBFUSAoVmxvYWRfcmVhZF9mdW5jdGlvbiwgUXJlYWQpKSk7ICovCisJfQogCi0gICAg ICBpZiAocHJpbnRmbGFnKQorICAgICAgaWYgKGZyYW1lLT5wcmludGZsYWcpCiAJewotCSAgVnZh bHVlcyA9IEZjb25zICh2YWwsIFZ2YWx1ZXMpOworCSAgVnZhbHVlcyA9IEZjb25zIChmcmFtZS0+ dmFsdWUsIFZ2YWx1ZXMpOwogCSAgaWYgKEVRIChWc3RhbmRhcmRfb3V0cHV0LCBRdCkpCi0JICAg IEZwcmluMSAodmFsLCBRbmlsLCBRbmlsKTsKKwkgICAgRnByaW4xIChmcmFtZS0+dmFsdWUsIFFu aWwsIFFuaWwpOwogCSAgZWxzZQotCSAgICBGcHJpbnQgKHZhbCwgUW5pbCk7CisJICAgIEZwcmlu dCAoZnJhbWUtPnZhbHVlLCBRbmlsKTsKIAl9CiAKLSAgICAgIGZpcnN0X3NleHAgPSAwOworICAg ICAgLyogcG9wIHRoZSByZWFkIGR5bmFtaWMgZnJhbWUgd2l0aG91dCBhY3R1YWxseSB1bndpbmRp bmcgKi8KKyAgICAgIGZyYW1lLT5keW5hbWljX2ZyYW1lID0gU1BFQ1BETF9SRUZfVU5JTklUOwor ICAgICAgbHJlYWRfaW5pdF9keW5hbWljX2ZyYW1lIChmcmFtZSk7CisKICAgICB9CisgIGlmIChm cmFtZS0+dHlwZSA9PSBMUkVBRF9GUkFNRV9EWU5BTUlDX1dJTkQpCisgICAgbHJlYWRfdW53aW5k X2Zvcl9ldmFsIChmcmFtZSk7CisgIHJldHVybiBmcmFtZS0+dmFsdWU7Cit9CiAKLSAgYnVpbGRf bG9hZF9oaXN0b3J5IChzb3VyY2VuYW1lLAotCQkgICAgICBpbmZpbGUwIHx8IHdob2xlX2J1ZmZl cik7CiAKLSAgdW5iaW5kX3RvIChjb3VudCwgUW5pbCk7CitzdGF0aWMgTGlzcF9PYmplY3QKK2Vu dGVyX3N0cmVhbV9yZWFkZXZhbGxvb3AgKExpc3BfT2JqZWN0IHN0cmVhbSkKK3sKKyAgTGlzcF9P YmplY3QgdmFsID0gUW5pbDsKKyAgbHJlYWRfZnJhbWUgdGhpc19mcmFtZSA9IElOSVRfTFJFQURf RlJBTUUoKTsKKyAgdGhpc19mcmFtZS5sb29wX2R5bmFtaWNfZnJhbWUgPSBTUEVDUERMX0lOREVY ICgpOworCisgIGluaXRfbHJlYWRfaW5wdXRfZnJvbV9zdHJlYW0gKCZ0aGlzX2ZyYW1lLAorCQkJ CXN0cmVhbSwKKwkJCQlRbmlsLCBRbmlsLAorCQkJCWZhbHNlLCBmYWxzZSwgTlVMTCwgUW5pbCk7 CisgIGluaXRfbHJlYWRfZXZhbF9wYXJhbXMoJnRoaXNfZnJhbWUsIFFuaWwsIFFuaWwsCisJCQkg UW5pbCwgZmFsc2UpOworICBhY3RpdmF0ZV9scmVhZF9mcmFtZSAoJnRoaXNfZnJhbWUsIExSRUFE X0ZSQU1FX0lOVEVHUkFMKTsKKyAgdmFsID0gcmVhZGV2YWxsb29wX2VvZl90cmFtcG9saW5lICht YWtlX21pbnRfcHRyICgmdGhpc19mcmFtZSkpOworICByZXR1cm4gdW5iaW5kX3RvICh0aGlzX2Zy YW1lLmxvb3BfZHluYW1pY19mcmFtZSwgdmFsKTsKK30KKworc3RhdGljIExpc3BfT2JqZWN0Citl bnRlcl9idWZmZXJfcmVhZGV2YWxsb29wIChMaXNwX09iamVjdCBidWZmZXIsCisJCQkgICBMaXNw X09iamVjdCBwcmludGZsYWcsCisJCQkgICBMaXNwX09iamVjdCBmaWxlbmFtZSwKKwkJCSAgIExp c3BfT2JqZWN0IGRvX2FsbG93X3ByaW50LAorCQkJICAgTGlzcF9PYmplY3Qgc3RhcnQsCisJCQkg ICBMaXNwX09iamVjdCBlbmQsCisJCQkgICBMaXNwX09iamVjdCByZWFkX2Z1bmN0aW9uLAorCQkJ ICAgYm9vbCB3aG9sZV9idWZmZXIpCit7CisgIExpc3BfT2JqZWN0IHRlbSwgYnVmLCB2YWwgPSBR bmlsOworICBzcGVjcGRsX3JlZiBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CisgIGxyZWFkX2Zy YW1lIHRoaXNfZnJhbWUgPSBJTklUX0xSRUFEX0ZSQU1FKCk7CisgIExpc3BfT2JqZWN0IGZ1bGxf bmFtZTsKKyAgbHJlYWRfZnJhbWVfdHlwZSBldmFsX3R5cGUgPSB3aG9sZV9idWZmZXIgPworICAg IExSRUFEX0ZSQU1FX0lOVEVHUkFMIDogTFJFQURfRlJBTUVfRFlOQU1JQ19XSU5EOworICBpZiAo TklMUCAoYnVmZmVyKSkKKyAgICBidWYgPSBGY3VycmVudF9idWZmZXIgKCk7CisgIGVsc2UKKyAg ICBidWYgPSBGZ2V0X2J1ZmZlciAoYnVmZmVyKTsKKyAgaWYgKE5JTFAgKGJ1ZikpCisgICAgZXJy b3IgKCJObyBzdWNoIGJ1ZmZlciIpOworCisgIGlmIChOSUxQIChwcmludGZsYWcpICYmIE5JTFAg KGRvX2FsbG93X3ByaW50KSkKKyAgICB0ZW0gPSBRc3ltYm9scDsKKyAgZWxzZQorICAgIHRlbSA9 IHByaW50ZmxhZzsKKyAgaWYgKE5JTFAgKGZpbGVuYW1lKSkKKyAgICBmaWxlbmFtZSA9IEJWQVIg KFhCVUZGRVIgKGJ1ZiksIGZpbGVuYW1lKTsKKyAgaWYgKCFOSUxQIChmaWxlbmFtZSkgJiYgTklM UCAoRmZpbGVfbmFtZV9hYnNvbHV0ZV9wIChmaWxlbmFtZSkpKQorICAgIGZ1bGxfbmFtZSA9IEZl eHBhbmRfZmlsZV9uYW1lIChmaWxlbmFtZSwgUW5pbCk7CisgIGVsc2UKKyAgICBmdWxsX25hbWUg PSBmaWxlbmFtZTsKKyAgc3BlY2JpbmQgKFFldmFsX2J1ZmZlcl9saXN0LCBGY29ucyAoYnVmLCBW ZXZhbF9idWZmZXJfbGlzdCkpOworICBzcGVjYmluZCAoUXN0YW5kYXJkX291dHB1dCwgdGVtKTsK KyAgdGhpc19mcmFtZS5sb29wX2R5bmFtaWNfZnJhbWUgPSBTUEVDUERMX0lOREVYICgpOworICBp bml0X2xyZWFkX2lucHV0X2Zyb21fc3RyZWFtICgmdGhpc19mcmFtZSwKKwkJCQlidWYsCisJCQkJ c3RhcnQsIGVuZCwKKwkJCQlmYWxzZSwgdHJ1ZSwgTlVMTCwgUW5pbCk7CisgIGluaXRfbHJlYWRf ZXZhbF9wYXJhbXMoJnRoaXNfZnJhbWUsIGZ1bGxfbmFtZSwgZmlsZW5hbWUsCisJCQkgcmVhZF9m dW5jdGlvbiwgd2hvbGVfYnVmZmVyKTsKKyAgLyogbm90ZSBhdCB0aGlzIHN0YWdlLCB3aG9sZV9i dWZmZXIgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY2FsbGVyCisgICAgIHdhbnRzIHRvIHNldCBsZXhp Y2FsIHNjb3BpbmcgYmFzZWQgb24gdGhlIGJ1ZmZlciBjb250ZW50cworICAgICByZWFkZXZhbGxv b3Agd2lsbCBzZXQgaXQgZm9yIHRoZSBzYWtlIG9mIHJlY29yZGluZyBsb2FkIGhpc3RvcnkKKyAg ICAgYmFzZWQgb24gdGhlIHN0YXJ0IGFuZCBlbmQsIGV2ZW4gaWYgdGhlIGNhbGxlciBkb2VzIG5v dAorICAgICBtYWtlIGl0IGV4cGxpY2l0LgorICAgKi8KKyAgLyogZnJhbWUtPnJlYWRvbmVjaGFy IG11c3QgYmUgc2V0IHRvIHVzZSBSRUFEQ0hBUiwKKyAgICAgYnV0IGFjdGl2YXRlX2xyZWFkX2Zy YW1lIGFsdGVycyB0aGUgc3BlY3BkbAorICAgICBtYXkgYWZmZWN0cyB0aGUgb3JkZXIgb2YgdGhl IHVud2luZC1wcm90ZWN0cyB2ZXJzdXMKKyAgICAgcHJlLXJlZmFjdG9yaW5nICovCisgIGlmICh3 aG9sZV9idWZmZXIpCisgICAgeworICAgICAgcmVjb3JkX3Vud2luZF9wcm90ZWN0X2V4Y3Vyc2lv biAoKTsKKyAgICAgIEJVRl9URU1QX1NFVF9QVCAoWEJVRkZFUiAoYnVmKSwgQlVGX0JFR1YgKFhC VUZGRVIgKGJ1ZikpKTsKKyAgICAgIC8qIERvbid0IGVtaXQgYSB3YXJuaW5nIGFib3V0ICdsZXhp Y2FsLWJpbmRpbmcnIGlmIGl0IGFscmVhZHkgaGFzIGEKKwkgbG9jYWwgYmluZGluZyBpbiB0aGUg YnVmZmVyLiAgKi8KKyAgICAgIGlmIChOSUxQIChGbG9jYWxfdmFyaWFibGVfcCAoUWxleGljYWxf YmluZGluZywgYnVmKSkpCisJc3BlY2JpbmQgKFFsZXhpY2FsX2JpbmRpbmcsIGdldF9sZXhpY2Fs X2JpbmRpbmcgKCZ0aGlzX2ZyYW1lLCBidWYpKTsKKyAgICAgIEJVRl9URU1QX1NFVF9QVCAoWEJV RkZFUiAoYnVmKSwgQlVGX0JFR1YgKFhCVUZGRVIgKGJ1ZikpKTsKKyAgICB9CisgIGFjdGl2YXRl X2xyZWFkX2ZyYW1lICgmdGhpc19mcmFtZSwgZXZhbF90eXBlKTsKKyAgdmFsID0gcmVhZGV2YWxs b29wX2VvZl90cmFtcG9saW5lIChtYWtlX21pbnRfcHRyICgmdGhpc19mcmFtZSkpOworICByZXR1 cm4gdW5iaW5kX3RvIChjb3VudCwgdmFsKTsKK30KKworREVGVU4gKCJldmFsLXN0cmVhbSIsIEZl dmFsX3N0cmVhbSwgU2V2YWxfc3RyZWFtLCAxLCAxLCAiIiwKKyAgZG9jOiAvKiBFeGVjdXRlIHRo ZSBzZXF1ZW5jZSBvZiBmb3JtcyByZWFkIGZyb20gU1RSRUFNCitmb3IgYW55IGlucHV0IHN0cmVh bSBhcmd1bWVudC4gICovKQorICAoTGlzcF9PYmplY3Qgc3RyZWFtKQoreworICByZXR1cm4gZW50 ZXJfc3RyZWFtX3JlYWRldmFsbG9vcCAoc3RyZWFtKTsKIH0KIAorLyogTkI6IHRoZSB1bmlieXRl IGFyZ3VtZW50IHRvIGV2YWwtYnVmZmVyIHVzZWQgdG8gc2V0IHRoZSBsb2FkX2NvbnZlcnRfdG9f dW5pYnl0ZSwKKyAgIHdoaWNoIGhhcyBubyBhcHBhcmVudCB1c2FnZXMgYW5kIGhhcyBub3Qgc2lu Y2UgcHJpb3IgdG8gMjAxMS4KKyAgIFdlIHN0b3AgcHJldGVuZGluZyB0byBjYXJlIGFib3V0IGl0 LiAgKi8KKwogREVGVU4gKCJldmFsLWJ1ZmZlciIsIEZldmFsX2J1ZmZlciwgU2V2YWxfYnVmZmVy LCAwLCA1LCAiIiwKICAgICAgICBkb2M6IC8qIEV4ZWN1dGUgdGhlIGFjY2Vzc2libGUgcG9ydGlv biBvZiBjdXJyZW50IGJ1ZmZlciBhcyBMaXNwIGNvZGUuCiBZb3UgY2FuIHVzZSBcXFtuYXJyb3ct dG8tcmVnaW9uXSB0byBsaW1pdCB0aGUgcGFydCBvZiBidWZmZXIgdG8gYmUgZXZhbHVhdGVkLgpA QCAtMjYyMCwzNiArMzk5Nyw5IEBAIERFRlVOICgiZXZhbC1idWZmZXIiLCBGZXZhbF9idWZmZXIs IFNldmFsX2J1ZmZlciwgMCwgNSwgIiIsCiAgIChMaXNwX09iamVjdCBidWZmZXIsIExpc3BfT2Jq ZWN0IHByaW50ZmxhZywgTGlzcF9PYmplY3QgZmlsZW5hbWUsCiAgICBMaXNwX09iamVjdCB1bmli eXRlLCBMaXNwX09iamVjdCBkb19hbGxvd19wcmludCkKIHsKLSAgc3BlY3BkbF9yZWYgY291bnQg PSBTUEVDUERMX0lOREVYICgpOwotICBMaXNwX09iamVjdCB0ZW0sIGJ1ZjsKLQotICBpZiAoTklM UCAoYnVmZmVyKSkKLSAgICBidWYgPSBGY3VycmVudF9idWZmZXIgKCk7Ci0gIGVsc2UKLSAgICBi dWYgPSBGZ2V0X2J1ZmZlciAoYnVmZmVyKTsKLSAgaWYgKE5JTFAgKGJ1ZikpCi0gICAgZXJyb3Ig KCJObyBzdWNoIGJ1ZmZlciIpOwotCi0gIGlmIChOSUxQIChwcmludGZsYWcpICYmIE5JTFAgKGRv X2FsbG93X3ByaW50KSkKLSAgICB0ZW0gPSBRc3ltYm9scDsKLSAgZWxzZQotICAgIHRlbSA9IHBy aW50ZmxhZzsKLQotICBpZiAoTklMUCAoZmlsZW5hbWUpKQotICAgIGZpbGVuYW1lID0gQlZBUiAo WEJVRkZFUiAoYnVmKSwgZmlsZW5hbWUpOwotCi0gIHNwZWNiaW5kIChRZXZhbF9idWZmZXJfbGlz dCwgRmNvbnMgKGJ1ZiwgVmV2YWxfYnVmZmVyX2xpc3QpKTsKLSAgc3BlY2JpbmQgKFFzdGFuZGFy ZF9vdXRwdXQsIHRlbSk7Ci0gIHJlY29yZF91bndpbmRfcHJvdGVjdF9leGN1cnNpb24gKCk7Ci0g IEJVRl9URU1QX1NFVF9QVCAoWEJVRkZFUiAoYnVmKSwgQlVGX0JFR1YgKFhCVUZGRVIgKGJ1Zikp KTsKLSAgLyogRG9uJ3QgZW1pdCBhIHdhcm5pbmcgYWJvdXQgJ2xleGljYWwtYmluZGluZycgaWYg aXQgYWxyZWFkeSBoYXMgYQotICAgICBsb2NhbCBiaW5kaW5nIGluIHRoZSBidWZmZXIuICAqLwot ICBpZiAoTklMUCAoRmxvY2FsX3ZhcmlhYmxlX3AgKFFsZXhpY2FsX2JpbmRpbmcsIGJ1ZikpKQot ICAgIHNwZWNiaW5kIChRbGV4aWNhbF9iaW5kaW5nLCBnZXRfbGV4aWNhbF9iaW5kaW5nIChidWYs IGJ1ZikpOwotICBCVUZfVEVNUF9TRVRfUFQgKFhCVUZGRVIgKGJ1ZiksIEJVRl9CRUdWIChYQlVG RkVSIChidWYpKSk7Ci0gIHJlYWRldmFsbG9vcCAoYnVmLCAwLCBmaWxlbmFtZSwKLQkJIU5JTFAg KHByaW50ZmxhZyksIHVuaWJ5dGUsIFFuaWwsIFFuaWwsIFFuaWwpOwotICByZXR1cm4gdW5iaW5k X3RvIChjb3VudCwgUW5pbCk7CisgIHJldHVybiBlbnRlcl9idWZmZXJfcmVhZGV2YWxsb29wIChi dWZmZXIsIHByaW50ZmxhZywgZmlsZW5hbWUsCisJCQkJICAgIGRvX2FsbG93X3ByaW50LCBRbmls LAorCQkJCSAgICBRbmlsLCBRbmlsLCB0cnVlKTsKIH0KIAogREVGVU4gKCJldmFsLXJlZ2lvbiIs IEZldmFsX3JlZ2lvbiwgU2V2YWxfcmVnaW9uLCAyLCA0LCAiciIsCkBAIC0yNjY1LDMwICs0MDE1 LDQxIEBAIERFRlVOICgiZXZhbC1yZWdpb24iLCBGZXZhbF9yZWdpb24sIFNldmFsX3JlZ2lvbiwg MiwgNCwgInIiLAogd2hpY2ggaXMgdGhlIGlucHV0IHN0cmVhbSBmb3IgcmVhZGluZyBjaGFyYWN0 ZXJzLgogCiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IG1vdmUgcG9pbnQuICAqLykKLSAgKExpc3Bf T2JqZWN0IHN0YXJ0LCBMaXNwX09iamVjdCBlbmQsIExpc3BfT2JqZWN0IHByaW50ZmxhZywgTGlz cF9PYmplY3QgcmVhZF9mdW5jdGlvbikKKyAgKExpc3BfT2JqZWN0IHN0YXJ0LCBMaXNwX09iamVj dCBlbmQsIExpc3BfT2JqZWN0IHByaW50ZmxhZywKKyAgIExpc3BfT2JqZWN0IHJlYWRfZnVuY3Rp b24pCiB7Ci0gIC8qIEZJWE1FOiBEbyB0aGUgZXZhbC1zZXhwLWFkZC1kZWZ2YXJzIGRhbmNlISAg Ki8KLSAgc3BlY3BkbF9yZWYgY291bnQgPSBTUEVDUERMX0lOREVYICgpOwotICBMaXNwX09iamVj dCB0ZW0sIGNidWY7Ci0KLSAgY2J1ZiA9IEZjdXJyZW50X2J1ZmZlciAoKTsKLQotICBpZiAoTklM UCAocHJpbnRmbGFnKSkKLSAgICB0ZW0gPSBRc3ltYm9scDsKLSAgZWxzZQotICAgIHRlbSA9IHBy aW50ZmxhZzsKLSAgc3BlY2JpbmQgKFFzdGFuZGFyZF9vdXRwdXQsIHRlbSk7Ci0gIHNwZWNiaW5k IChRZXZhbF9idWZmZXJfbGlzdCwgRmNvbnMgKGNidWYsIFZldmFsX2J1ZmZlcl9saXN0KSk7Cisg IHJldHVybiBlbnRlcl9idWZmZXJfcmVhZGV2YWxsb29wIChRbmlsLCBwcmludGZsYWcsIFFuaWws CisJCQkJICAgIFFuaWwsIHN0YXJ0LCBlbmQsIHJlYWRfZnVuY3Rpb24sCisJCQkJICAgIGZhbHNl KTsKK30KIAotICAvKiBgcmVhZGV2YWxsb29wJyBjYWxscyBmdW5jdGlvbnMgd2hpY2ggY2hlY2sg dGhlIHR5cGUgb2Ygc3RhcnQgYW5kIGVuZC4gICovCi0gIHJlYWRldmFsbG9vcCAoY2J1ZiwgMCwg QlZBUiAoWEJVRkZFUiAoY2J1ZiksIGZpbGVuYW1lKSwKLQkJIU5JTFAgKHByaW50ZmxhZyksIFFu aWwsIHJlYWRfZnVuY3Rpb24sCi0JCXN0YXJ0LCBlbmQpOwogCi0gIHJldHVybiB1bmJpbmRfdG8g KGNvdW50LCBRbmlsKTsKKwwKK3N0YXRpYyBMaXNwX09iamVjdAorZW50ZXJfcmVhZCAoTGlzcF9P YmplY3Qgc3RyZWFtLCBMaXNwX09iamVjdCBzdGFydCwgTGlzcF9PYmplY3QgZW5kLAorCSAgICBi b29sIGxvY2F0ZV9zeW1zLCBwdHJkaWZmX3QgKmNoYXJfb2Zmc2V0KQoreworICBpZiAoIWhhbmRs ZV9yZWFkX3N0cmVhbV9kZWZhdWx0cyAoJnN0cmVhbSkpCisgICAgcmV0dXJuIHN0cmVhbTsKKyAg bHJlYWRfZnJhbWUgdGhpc19mcmFtZSA9IElOSVRfTFJFQURfRlJBTUUoKTsKKyAgdGhpc19mcmFt ZS5sb29wX2R5bmFtaWNfZnJhbWUgPSBTUEVDUERMX0lOREVYICgpOworICBpbml0X2xyZWFkX2lu cHV0X2Zyb21fc3RyZWFtICgmdGhpc19mcmFtZSwKKwkJCQlzdHJlYW0sCisJCQkJc3RhcnQsIGVu ZCwgbG9jYXRlX3N5bXMsCisJCQkJZmFsc2UsCU5VTEwsIFFuaWwpOworICBhY3RpdmF0ZV9scmVh ZF9mcmFtZSAoJnRoaXNfZnJhbWUsIExSRUFEX0ZSQU1FX1NJTkdMRSk7CisgIGxyZWFkX2luaXRf ZHluYW1pY19mcmFtZSAoJnRoaXNfZnJhbWUpOworICBpZiAoY2hhcl9vZmZzZXQpCisgICAgKmNo YXJfb2Zmc2V0ID0gdGhpc19mcmFtZS5jaGFyX29mZnNldDsKKyAgTGlzcF9PYmplY3QgZGF0YSA9 IFFuaWw7CisgIC8qIEZyZWFkIG1heSBiZSBjYWxsZWQgd2hpbGUgbG9hZGluZyB0aGUgZHVtcCBm aWxlICovCisgIGRhdGEgPSByZWFkMCAoICZ0aGlzX2ZyYW1lKTsKKyAgaWYgKGNoYXJfb2Zmc2V0 KQorICAgICpjaGFyX29mZnNldCA9IHRoaXNfZnJhbWUuY2hhcl9vZmZzZXQ7CisgICB1bmJpbmRf dG8gKHRoaXNfZnJhbWUubG9vcF9keW5hbWljX2ZyYW1lLCBRbmlsKTsKKyAgIHJldHVybiBkYXRh OwogfQogCi0MCiBERUZVTiAoInJlYWQiLCBGcmVhZCwgU3JlYWQsIDAsIDEsIDAsCiAgICAgICAg ZG9jOiAvKiBSZWFkIG9uZSBMaXNwIGV4cHJlc3Npb24gYXMgdGV4dCBmcm9tIFNUUkVBTSwgcmV0 dXJuIGFzIExpc3Agb2JqZWN0LgogSWYgU1RSRUFNIGlzIG5pbCwgdXNlIHRoZSB2YWx1ZSBvZiBg c3RhbmRhcmQtaW5wdXQnICh3aGljaCBzZWUpLgpAQCAtMjcwMiwxOCArNDA2Myw3IEBAIERFRlVO ICgicmVhZCIsIEZyZWFkLCBTcmVhZCwgMCwgMSwgMCwKICAgICBzdGFuZGFyZCBpbnB1dCBpbiBi YXRjaCBtb2RlKS4gICovKQogICAoTGlzcF9PYmplY3Qgc3RyZWFtKQogewotICBpZiAoTklMUCAo c3RyZWFtKSkKLSAgICBzdHJlYW0gPSBWc3RhbmRhcmRfaW5wdXQ7Ci0gIGlmIChFUSAoc3RyZWFt LCBRdCkpCi0gICAgc3RyZWFtID0gUXJlYWRfY2hhcjsKLSAgaWYgKEVRIChzdHJlYW0sIFFyZWFk X2NoYXIpKQotICAgIC8qIEZJWE1FOiA/ISBUaGlzIGlzIHVzZWQgd2hlbiB0aGUgcmVhZGVyIGlz IGNhbGxlZCBmcm9tIHRoZQotICAgICAgIG1pbmlidWZmZXIgd2l0aG91dCBhIHN0cmVhbSwgYXMg aW4gKHJlYWQpLiAgQnV0IGlzIHRoaXMgZmVhdHVyZQotICAgICAgIGV2ZXIgdXNlZCwgYW5kIGlm IHNvLCB3aHk/ICBJT1csIHdpbGwgYW55dGhpbmcgYnJlYWsgaWYgdGhpcwotICAgICAgIGZlYXR1 cmUgaXMgcmVtb3ZlZCAhPyAgKi8KLSAgICByZXR1cm4gY2FsbG4gKFFyZWFkX21pbmlidWZmZXIs IGJ1aWxkX3N0cmluZyAoIkxpc3AgZXhwcmVzc2lvbjogIikpOwotCi0gIHJldHVybiByZWFkX2lu dGVybmFsX3N0YXJ0IChzdHJlYW0sIFFuaWwsIFFuaWwsIGZhbHNlKTsKKyAgcmV0dXJuIGVudGVy X3JlYWQgKHN0cmVhbSwgUW5pbCwgUW5pbCwgZmFsc2UsIE5VTEwpOwogfQogCiBERUZVTiAoInJl YWQtcG9zaXRpb25pbmctc3ltYm9scyIsIEZyZWFkX3Bvc2l0aW9uaW5nX3N5bWJvbHMsCkBAIC0y NzMyLDE1ICs0MDgyLDcgQEAgREVGVU4gKCJyZWFkLXBvc2l0aW9uaW5nLXN5bWJvbHMiLCBGcmVh ZF9wb3NpdGlvbmluZ19zeW1ib2xzLAogICAgIHN0YW5kYXJkIGlucHV0IGluIGJhdGNoIG1vZGUp LiAgKi8pCiAgIChMaXNwX09iamVjdCBzdHJlYW0pCiB7Ci0gIGlmIChOSUxQIChzdHJlYW0pKQot ICAgIHN0cmVhbSA9IFZzdGFuZGFyZF9pbnB1dDsKLSAgaWYgKEVRIChzdHJlYW0sIFF0KSkKLSAg ICBzdHJlYW0gPSBRcmVhZF9jaGFyOwotICBpZiAoRVEgKHN0cmVhbSwgUXJlYWRfY2hhcikpCi0g ICAgLyogRklYTUU6ID8hIFdoZW4gaXMgdGhpcyB1c2VkICE/ICAqLwotICAgIHJldHVybiBjYWxs biAoUXJlYWRfbWluaWJ1ZmZlciwgYnVpbGRfc3RyaW5nICgiTGlzcCBleHByZXNzaW9uOiAiKSk7 Ci0KLSAgcmV0dXJuIHJlYWRfaW50ZXJuYWxfc3RhcnQgKHN0cmVhbSwgUW5pbCwgUW5pbCwgdHJ1 ZSk7CisgIHJldHVybiBlbnRlcl9yZWFkIChzdHJlYW0sIFFuaWwsIFFuaWwsIHRydWUsIE5VTEwp OwogfQogCiBERUZVTiAoInJlYWQtZnJvbS1zdHJpbmciLCBGcmVhZF9mcm9tX3N0cmluZywgU3Jl YWRfZnJvbV9zdHJpbmcsIDEsIDMsIDAsCkBAIC0yNzU0LDkyICs0MDk2LDIyMSBAQCBERUZVTiAo InJlYWQtZnJvbS1zdHJpbmciLCBGcmVhZF9mcm9tX3N0cmluZywgU3JlYWRfZnJvbV9zdHJpbmcs IDEsIDMsIDAsCiAgIChMaXNwX09iamVjdCBzdHJpbmcsIExpc3BfT2JqZWN0IHN0YXJ0LCBMaXNw X09iamVjdCBlbmQpCiB7CiAgIExpc3BfT2JqZWN0IHJldDsKKyAgcHRyZGlmZl90IHBvczsKICAg Q0hFQ0tfU1RSSU5HIChzdHJpbmcpOwotICAvKiBgcmVhZF9pbnRlcm5hbF9zdGFydCcgc2V0cyBg cmVhZF9mcm9tX3N0cmluZ19pbmRleCcuICAqLwotICByZXQgPSByZWFkX2ludGVybmFsX3N0YXJ0 IChzdHJpbmcsIHN0YXJ0LCBlbmQsIGZhbHNlKTsKLSAgcmV0dXJuIEZjb25zIChyZXQsIG1ha2Vf Zml4bnVtIChyZWFkX2Zyb21fc3RyaW5nX2luZGV4KSk7CisgIHJldCA9IGVudGVyX3JlYWQgKHN0 cmluZywgc3RhcnQsIGVuZCwgZmFsc2UsICZwb3MpOworICByZXR1cm4gRmNvbnMgKHJldCwgbWFr ZV9maXhudW0gKHBvcykpOwogfQogCi0vKiBGdW5jdGlvbiB0byBzZXQgdXAgdGhlIGdsb2JhbCBj b250ZXh0IHdlIG5lZWQgaW4gdG9wbGV2ZWwgcmVhZAotICAgY2FsbHMuICBTVEFSVCBhbmQgRU5E IG9ubHkgdXNlZCB3aGVuIFNUUkVBTSBpcyBhIHN0cmluZy4KLSAgIExPQ0FURV9TWU1TIHRydWUg bWVhbnMgcmVhZCBzeW1ib2wgb2NjdXJyZW5jZXMgYXMgc3ltYm9scyB3aXRoCi0gICBwb3NpdGlv bi4gICovCi1zdGF0aWMgTGlzcF9PYmplY3QKLXJlYWRfaW50ZXJuYWxfc3RhcnQgKExpc3BfT2Jq ZWN0IHN0cmVhbSwgTGlzcF9PYmplY3Qgc3RhcnQsIExpc3BfT2JqZWN0IGVuZCwKLSAgICAgICAg ICAgICAgICAgICAgIGJvb2wgbG9jYXRlX3N5bXMpCi17Ci0gIExpc3BfT2JqZWN0IHJldHZhbDsK LQotICByZWFkY2hhcl9vZmZzZXQgPSBCVUZGRVJQIChzdHJlYW0pID8gWEJVRkZFUiAoc3RyZWFt KS0+cHQgOiAwOwotICAvKiBXZSBjYW4gZ2V0IGNhbGxlZCBmcm9tIHJlYWRldmFsbG9vcCB3aGlj aCBtYXkgaGF2ZSBzZXQgdGhlc2UKLSAgICAgYWxyZWFkeS4gICovCi0gIGlmICghIEhBU0hfVEFC TEVfUCAocmVhZF9vYmplY3RzX21hcCkKLSAgICAgIHx8IFhIQVNIX1RBQkxFIChyZWFkX29iamVj dHNfbWFwKS0+Y291bnQpCi0gICAgcmVhZF9vYmplY3RzX21hcAotICAgICAgPSBtYWtlX2hhc2hf dGFibGUgKCZoYXNodGVzdF9lcSwgREVGQVVMVF9IQVNIX1NJWkUsIFdlYWtfTm9uZSk7Ci0gIGlm ICghIEhBU0hfVEFCTEVfUCAocmVhZF9vYmplY3RzX2NvbXBsZXRlZCkKLSAgICAgIHx8IFhIQVNI X1RBQkxFIChyZWFkX29iamVjdHNfY29tcGxldGVkKS0+Y291bnQpCi0gICAgcmVhZF9vYmplY3Rz X2NvbXBsZXRlZAotICAgICAgPSBtYWtlX2hhc2hfdGFibGUgKCZoYXNodGVzdF9lcSwgREVGQVVM VF9IQVNIX1NJWkUsIFdlYWtfTm9uZSk7Ci0KLSAgaWYgKFNUUklOR1AgKHN0cmVhbSkKLSAgICAg IHx8ICgoQ09OU1AgKHN0cmVhbSkgJiYgU1RSSU5HUCAoWENBUiAoc3RyZWFtKSkpKSkKLSAgICB7 Ci0gICAgICBwdHJkaWZmX3Qgc3RhcnR2YWwsIGVuZHZhbDsKLSAgICAgIExpc3BfT2JqZWN0IHN0 cmluZzsKK2Jvb2wKK2hhbmRsZV9yZWFkX3N0cmVhbV9kZWZhdWx0cyAoTGlzcF9PYmplY3QgKnN0 cmVhbSkKK3sKKyAgaWYgKE5JTFAgKCpzdHJlYW0pKQorICAgICpzdHJlYW0gPSBWc3RhbmRhcmRf aW5wdXQ7CisgIGlmIChFUSAoKnN0cmVhbSwgUXQpKQorICAgICpzdHJlYW0gPSBRcmVhZF9jaGFy OworICBpZiAoRVEgKCpzdHJlYW0sIFFyZWFkX2NoYXIpKQorICAgIHsKKyAgICAgIC8qIEZJWE1F OiA/ISBUaGlzIGlzIHVzZWQgd2hlbiB0aGUgcmVhZGVyIGlzIGNhbGxlZCBmcm9tIHRoZQorCSBt aW5pYnVmZmVyIHdpdGhvdXQgYSBzdHJlYW0sIGFzIGluIChyZWFkKS4gIEJ1dCBpcyB0aGlzIGZl YXR1cmUKKwkgZXZlciB1c2VkLCBhbmQgaWYgc28sIHdoeT8gIElPVywgd2lsbCBhbnl0aGluZyBi cmVhayBpZiB0aGlzCisJIGZlYXR1cmUgaXMgcmVtb3ZlZCAhPwkqLworICAgICAgaWYgKCFOSUxQ IChGZmJvdW5kcCAoUXJlYWRfbWluaWJ1ZmZlcikpKQorCSpzdHJlYW0gPSBjYWxsbiAoUXJlYWRf bWluaWJ1ZmZlciwKKwkJCSBidWlsZF9zdHJpbmcgKCJMaXNwIGV4cHJlc3Npb246ICIpKTsKKyAg ICAgIGVsc2UKKwkvKiBGcm9tIGluaXRpYWwgZGVmaW5pdGlvbiBvZiByZWFkLW1pbmlidWZmZXIg aW4gc3Vici5lbCAqLworCSpzdHJlYW0gPSBGcmVhZF9mcm9tX21pbmlidWZmZXIgKGJ1aWxkX3N0 cmluZyAoIkxpc3AgZXhwcmVzc2lvbjogIiksCisJCQkJCSBRbmlsLCBWbWluaWJ1ZmZlcl9sb2Nh bF9tYXAsIFF0LAorCQkJCQkgUW1pbmlidWZmZXJfaGlzdG9yeSwgUW5pbCwgUW5pbCk7CisgICAg ICByZXR1cm4gZmFsc2U7CisgICAgfQorICByZXR1cm4gdHJ1ZTsKK30KKworLyogQ29udmVydCBy ZWFkIGFyZ3VtZW50IGludG8gbHJlYWRfaW5wdXQgb2YgYXBwcm9wcmlhdGUgdHlwZSAqLwordm9p ZAoraW5pdF9scmVhZF9pbnB1dF9mcm9tX3N0cmVhbSAobHJlYWRfZnJhbWUgKmZyYW1lLAorCQkJ ICAgICAgTGlzcF9PYmplY3Qgc3RyZWFtLAorCQkJICAgICAgTGlzcF9PYmplY3Qgc3RhcnQsCisJ CQkgICAgICBMaXNwX09iamVjdCBlbmQsCisJCQkgICAgICBib29sIGxvY2F0ZV9zeW1zLAorCQkJ ICAgICAgYm9vbCBzZWVrYWJsZSwKKwkJCSAgICAgIEZJTEUgKnN0cmVhbV9maWxlLAorCQkJICAg ICAgTGlzcF9PYmplY3QgY29kaW5nKQoreworICBMaXNwX09iamVjdCBmdWxsX25hbWUgPSBRbmls OworICBMaXNwX09iamVjdCBuYW1lID0gUW5pbDsKKyAgaWYgKENPRElOR19TWVNURU1fUCAoY29k aW5nKSkKKyAgICB7CisgICAgICBwdHJkaWZmX3QgaWQgPSBDT0RJTkdfU1lTVEVNX0lEIChjb2Rp bmcpOworICAgICAgZnJhbWUtPm11bHRpYnl0ZSA9IE5JTFAgKENPRElOR19BVFRSX0ZPUl9VTklC WVRFIChDT0RJTkdfSURfQVRUUlMgKGlkKSkpID8KKwlMUkVBRF9NVUxUSUJZVEVfVFJVRSA6IExS RUFEX01VTFRJQllURV9GQUxTRTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBjb2Rpbmcg PSBRbmlsOworICAgIH0KIAotICAgICAgaWYgKFNUUklOR1AgKHN0cmVhbSkpCi0Jc3RyaW5nID0g c3RyZWFtOworICBpZiAoQ09OU1AgKHN0cmVhbSkpCisgICAgeworICAgICAgTGlzcF9PYmplY3Qg YmFzZV9zdHJlYW0gPSBYQ0FSIChzdHJlYW0pOworICAgICAgaWYgKENPTlNQIChiYXNlX3N0cmVh bSkpCisJLyogZGlzYWxsb3cgbmVzdGVkIGNvbnMgdG8gYXZvaWQgaW5maW5pdGUKKwkgICByZWN1 cnNpb24gb24gY2lyY3VsYXIgaW5wdXQgKi8KKwl4c2lnbmFsMSAoUWVycm9yLAorCQkgIENBTExO IChGZm9ybWF0LAorCQkJIGJ1aWxkX3N0cmluZyAoInJlYWQ6IE5lc3RlZCBjb25zOiAlUyIpLAor CQkJIHN0cmVhbSkpOworICAgICAgTGlzcF9PYmplY3QgaXRlbTEgPSBYQ0RSIChzdHJlYW0pOwor ICAgICAgTGlzcF9PYmplY3QgaXRlbTIgPSBRbmlsOworICAgICAgaWYgKENPTlNQIChpdGVtMSkp CisgICAgICB7CisJaXRlbTIgPSBYQ0RSIChpdGVtMSk7CisJaXRlbTEgPSBYQ0FSKGl0ZW0xKTsK KyAgICAgIH0KKyAgICAgIGlmIChCVUZGRVJQIChiYXNlX3N0cmVhbSkgfHwgTUFSS0VSUCAoYmFz ZV9zdHJlYW0pCisJICB8fCBTVFJJTkdQIChiYXNlX3N0cmVhbSkpCisJeworCSAgc3RhcnQgPSAo TklMUCAoc3RhcnQpKSA/IGl0ZW0xIDogc3RhcnQ7CisJICBlbmQgPSAoTklMUCAoZW5kKSkgPyBp dGVtMiA6IGVuZDsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKE5JTFAgKG5hbWUpKQorCSAg ICBuYW1lID0gaXRlbTE7CisJICBpZiAoTklMUCAoZnVsbF9uYW1lKSkKKwkgICAgZnVsbF9uYW1l ID0gTklMUCAoaXRlbTIpID8gaXRlbTEgOiBpdGVtMjsKKwl9CisJICBzdHJlYW0gPSBiYXNlX3N0 cmVhbTsKKyAgICB9CisgIGZyYW1lLT5zdGFydCA9IHN0YXJ0OworICBmcmFtZS0+ZW5kID0gZW5k OworICBmcmFtZS0+ZnVsbF9uYW1lID0gZnVsbF9uYW1lOworICBmcmFtZS0+bmFtZSA9IG5hbWU7 CisgIGZyYW1lLT5sb2NhdGVfc3ltcyA9IGxvY2F0ZV9zeW1zOworICBpZiAoQlVGRkVSUCAoc3Ry ZWFtKSkKKyAgICB7CisjaWYgMAorICAgICAgaWYgKGN1cnJlbnRfZnJhbWUpCisJeworCSAgbHJl YWRfZnJhbWUgKnNvdXJjZSA9IGN1cnJlbnRfZnJhbWU7CisJICBpZiAoc291cmNlLT5pbnR5cGUg PT0gTFJFQURfSU5QVVRfSU5ESVJFQ1QpCisJICAgIHNvdXJjZSA9IHNvdXJjZS0+aW5wdXQuZnJh bWUuc291cmNlOworCSAgaWYgKHNvdXJjZS0+aW50eXBlID09IExSRUFEX0lOUFVUX0JVRkZFUgor CSAgICAgICYmIEVRIChzb3VyY2UtPmlucHV0LmIuYnVmZmVyLCBzdHJlYW0pKQorCSAgICBnb3Rv IGluZGlyZWN0X2ZyYW1lOworCX0KKyNlbmRpZgorICAgICAgZnJhbWUtPmludHlwZSA9IExSRUFE X0lOUFVUX0JVRkZFUjsKKyAgICAgIGluaXRfaW5idWZmZXIgKGZyYW1lLHN0cmVhbSk7CisgICAg fQorICBlbHNlIGlmIChNQVJLRVJQIChzdHJlYW0pKQorICAgIHsKKyAgICAgIGZyYW1lLT5pbnR5 cGUgPSBMUkVBRF9JTlBVVF9NQVJLRVI7CisgICAgICBpbml0X2lubWFya2VyIChmcmFtZSxzdHJl YW0pOworICAgIH0KKyAgZWxzZSBpZiAoU1RSSU5HUCAoc3RyZWFtKSkKKyAgICB7CisgICAgICBm cmFtZS0+aW50eXBlID0gTFJFQURfSU5QVVRfU1RSSU5HOworICAgICAgaW5pdF9pbnN0cmluZyAo ZnJhbWUsIHN0cmVhbSk7CisgICAgfQorICBlbHNlIGlmIChFUSAoc3RyZWFtLCBRZ2V0X2ZpbGVf Y2hhcikpCisgICAgeworICAgICAgLyogYWJ1c2Ugc3RhcnQgYW5kIGVuZCBhcmd1bWVudHMgZm9y IGZ1bGxfbmFtZSBhbmQgZmlsZSAqLworICAgICAgZWFzc2VydCAoc3RyZWFtX2ZpbGUgIT0gTlVM TCk7CisgICAgICBmcmFtZS0+aW50eXBlID0gTFJFQURfSU5QVVRfRklMRTsKKyAgICAgIGluaXRf aW5maWxlIChmcmFtZSwgc3RyZWFtX2ZpbGUsIHNlZWthYmxlLCBmYWxzZSwgY29kaW5nKTsKKyAg ICAgIGlmIChOSUxQIChjb2RpbmcpKQorCXsKKwkgIC8qIHRoZSByZWFkY2hhciBmdW5jdGlvbiBw ZXJmb3JtcyBlbWFjcy1pbnRlcm5hbCBkZWNvZGluZyAqLworCSAgZnJhbWUtPm11bHRpYnl0ZSA9 IExSRUFEX01VTFRJQllURV9UUlVFOworCX0KKyAgICB9CisgIGVsc2UgaWYgKEVRIChzdHJlYW0s IFFyZWFkZXJfaW5wdXRfc3RyZWFtKSkKKyAgICB7CisgICAgaW5kaXJlY3RfZnJhbWU6CisgICAg ICBmcmFtZS0+aW50eXBlID0gTFJFQURfSU5QVVRfSU5ESVJFQ1Q7CisgICAgICBscmVhZF9mcmFt ZSAqc291cmNlID0gY3VycmVudF9mcmFtZTsKKyAgICAgIHdoaWxlIChzb3VyY2UgJiYgc291cmNl LT5pbnR5cGUgPT0gTFJFQURfSU5QVVRfSU5ESVJFQ1QpCisJc291cmNlID0gc291cmNlLT5pbnB1 dC5mcmFtZS5zb3VyY2U7CisgICAgICBpZiAoISBzb3VyY2UpCisJLyogKHJlYWRlci1pbnB1dC1z dHJlYW0pIHdoZW4gbm8gcmVhZCBpcyBhY3RpdmUgKi8KKwlmcmFtZS0+aW50eXBlID0gTFJFQURf SU5QVVRfTlVMTDsKICAgICAgIGVsc2UKLQlzdHJpbmcgPSBYQ0FSIChzdHJlYW0pOwotCi0gICAg ICB2YWxpZGF0ZV9zdWJhcnJheSAoc3RyaW5nLCBzdGFydCwgZW5kLCBTQ0hBUlMgKHN0cmluZyks Ci0JCQkgJnN0YXJ0dmFsLCAmZW5kdmFsKTsKLQotICAgICAgcmVhZF9mcm9tX3N0cmluZ19pbmRl eCA9IHN0YXJ0dmFsOwotICAgICAgcmVhZF9mcm9tX3N0cmluZ19pbmRleF9ieXRlID0gc3RyaW5n X2NoYXJfdG9fYnl0ZSAoc3RyaW5nLCBzdGFydHZhbCk7Ci0gICAgICByZWFkX2Zyb21fc3RyaW5n X2xpbWl0ID0gZW5kdmFsOworCXsKKwkgIGZyYW1lLT5pbnB1dC5mcmFtZS5zb3VyY2UgPSBzb3Vy Y2U7CisJICBmcmFtZS0+Y2hhcl9vZmZzZXQgPSBzb3VyY2UtPmNoYXJfb2Zmc2V0OworCSAgZnJh bWUtPmJ5dGVfb2Zmc2V0ID0gc291cmNlLT5ieXRlX29mZnNldDsKKwl9CiAgICAgfQotCi0gIHJl dHZhbCA9IHJlYWQwIChzdHJlYW0sIGxvY2F0ZV9zeW1zKTsKLSAgaWYgKEhBU0hfVEFCTEVfUCAo cmVhZF9vYmplY3RzX21hcCkKLSAgICAgICYmIFhIQVNIX1RBQkxFIChyZWFkX29iamVjdHNfbWFw KS0+Y291bnQgPiAwKQotICAgIHJlYWRfb2JqZWN0c19tYXAgPSBRbmlsOwotICBpZiAoSEFTSF9U QUJMRV9QIChyZWFkX29iamVjdHNfY29tcGxldGVkKQotICAgICAgJiYgWEhBU0hfVEFCTEUgKHJl YWRfb2JqZWN0c19jb21wbGV0ZWQpLT5jb3VudCA+IDApCi0gICAgcmVhZF9vYmplY3RzX2NvbXBs ZXRlZCA9IFFuaWw7Ci0gIHJldHVybiByZXR2YWw7CisgIGVsc2UgaWYgKEVRIChzdHJlYW0sIFFn ZXRfZW1hY3NfbXVsZV9maWxlX2NoYXIpKQorICAgIHsKKyAgICAgIGVhc3NlcnQgKHN0cmVhbV9m aWxlICE9IE5VTEwpOworICAgICAgZnJhbWUtPmludHlwZSA9IExSRUFEX0lOUFVUX0ZJTEVfTVVM RTsKKyAgICAgIGluaXRfaW5maWxlIChmcmFtZSwgc3RyZWFtX2ZpbGUsIHNlZWthYmxlLCB0cnVl LCBjb2RpbmcpOworICAgIH0KKyAgZWxzZSBpZiAoTklMUCAoc3RyZWFtKSkKKyAgICB7CisgICAg ICBmcmFtZS0+aW50eXBlID0gTFJFQURfSU5QVVRfTlVMTDsKKyAgICAgIGZyYW1lLT5jaGFyX29m ZnNldCA9IDA7CisgICAgICBmcmFtZS0+Ynl0ZV9vZmZzZXQgPSAwOworICAgIH0KKyAgZWxzZQor ICAgIHsKKyAgICAgIC8qIEV2aWRlbnRseSB0aGlzIG11c3QgYmUgYSBmdW5jdGlvbiBuYW1lIG9y IHZhbHVlICovCisgICAgICBmcmFtZS0+aW50eXBlID0gTFJFQURfSU5QVVRfUFJPQ0VEVVJFOwor ICAgICAgZnJhbWUtPmlucHV0LnAgPSAoc3RydWN0IGlucHJvYykgeyAucHJvYyA9IFFuaWwgfTsK KyAgICAgIGZyYW1lLT5pbnB1dC5wLnByb2MgPSBzdHJlYW07CisgICAgICBmcmFtZS0+Y2hhcl9v ZmZzZXQgPSAwOworICAgICAgZnJhbWUtPmJ5dGVfb2Zmc2V0ID0gMDsKKyAgICB9CisgIGlmIChm cmFtZS0+aW50eXBlICE9IExSRUFEX0lOUFVUX05VTEwpCisgICAgeworICAgICAgLyogc3RhcnQg d2l0aCBkZWZhdWx0cyB0aGF0IGFyZW4ndCBzdGF0aWMgKElOSVRfTFJFQURfRlJBTUUoKSkqLwor ICAgICAgZnJhbWUtPm9iamVjdHNfbWFwCisJPSBtYWtlX2hhc2hfdGFibGUgKCZoYXNodGVzdF9l cSwgREVGQVVMVF9IQVNIX1NJWkUsIFdlYWtfTm9uZSk7CisgICAgICBmcmFtZS0+b2JqZWN0c19j b21wbGV0ZWQKKwk9IG1ha2VfaGFzaF90YWJsZSAoJmhhc2h0ZXN0X2VxLCBERUZBVUxUX0hBU0hf U0laRSwgV2Vha19Ob25lKTsKKyAgICB9CisgIC8qIGZyYW1lLT5tdWx0aWJ5dGUgbXVzdCBiZSBp bml0aWFsaXplZCEgKi8KKyAgaWYgKGZyYW1lLT5tdWx0aWJ5dGUgPT0gTFJFQURfTVVMVElCWVRF X0lOREVURVJNSU5BVEUpCisgICAgZnJhbWUtPm11bHRpYnl0ZSA9IExSRUFEX01VTFRJQllURV9U UlVFOworICBpbml0aWFsaXplX3JlYWRvbmVjaGFyIChmcmFtZSk7CiB9Ci0MCi0vKiBHcm93IGEg cmVhZCBidWZmZXIgQlVGIHRoYXQgY29udGFpbnMgT0ZGU0VUIHVzZWZ1bCBieXRlcyBvZiBkYXRh LAotICAgYnkgYXQgbGVhc3QgTUFYX01VTFRJQllURV9MRU5HVEggYnl0ZXMuICBVcGRhdGUgKkJV Rl9BRERSIGFuZAotICAgKkJVRl9TSVpFIGFjY29yZGluZ2x5OyAwIDw9IE9GRlNFVCA8PSAqQlVG X1NJWkUuICBJZiAqQlVGX0FERFIgaXMKLSAgIGluaXRpYWxseSBudWxsLCBCVUYgaXMgb24gdGhl IHN0YWNrOiBjb3B5IGl0cyBkYXRhIHRvIHRoZSBuZXcgaGVhcAotICAgYnVmZmVyLiAgT3RoZXJ3 aXNlLCBCVUYgbXVzdCBlcXVhbCAqQlVGX0FERFIgYW5kIGNhbiBzaW1wbHkgYmUKLSAgIHJlYWxs b2NhdGVkLiAgRWl0aGVyIHdheSwgcmVtZW1iZXIgdGhlIGhlYXAgYWxsb2NhdGlvbiAod2hpY2gg aXMgYXQKLSAgIHBkbCBzbG90IENPVU5UKSBzbyB0aGF0IGl0IGNhbiBiZSBmcmVlZCB3aGVuIHVu d2luZGluZyB0aGUgc3RhY2suKi8KIAotc3RhdGljIGNoYXIgKgotZ3Jvd19yZWFkX2J1ZmZlciAo Y2hhciAqYnVmLCBwdHJkaWZmX3Qgb2Zmc2V0LAotCQkgIGNoYXIgKipidWZfYWRkciwgcHRyZGlm Zl90ICpidWZfc2l6ZSwgc3BlY3BkbF9yZWYgY291bnQpCit2b2lkCitpbml0X2xyZWFkX2V2YWxf cGFyYW1zIChscmVhZF9mcmFtZSAqZnJhbWUsCisJCQlMaXNwX09iamVjdCBmdWxsX25hbWUsCisJ CQlMaXNwX09iamVjdCBuYW1lLAorCQkJTGlzcF9PYmplY3QgcmVhZGZ1biwKKwkJCWJvb2wgd2hv bGVfYnVmZmVyKQogewotICBjaGFyICpwID0geHBhbGxvYyAoKmJ1Zl9hZGRyLCBidWZfc2l6ZSwg TUFYX01VTFRJQllURV9MRU5HVEgsIC0xLCAxKTsKLSAgaWYgKCEqYnVmX2FkZHIpCisgIGlmICgh TklMUCAoZnVsbF9uYW1lKSkKKyAgICBmcmFtZS0+ZnVsbF9uYW1lID0gZnVsbF9uYW1lOworICBp ZiAoIU5JTFAgKG5hbWUpKQorICAgIGZyYW1lLT5uYW1lID0gbmFtZTsKKyAgaWYgKCFOSUxQIChm cmFtZS0+bmFtZSkgJiYgTklMUCAoZnJhbWUtPmZ1bGxfbmFtZSkpCiAgICAgewotICAgICAgbWVt Y3B5IChwLCBidWYsIG9mZnNldCk7Ci0gICAgICByZWNvcmRfdW53aW5kX3Byb3RlY3RfcHRyICh4 ZnJlZSwgcCk7CisgICAgICBmcmFtZS0+ZnVsbF9uYW1lID0gRmV4cGFuZF9maWxlX25hbWUgKGZy YW1lLT5uYW1lLCBRbmlsKTsKICAgICB9Ci0gIGVsc2UKLSAgICBzZXRfdW53aW5kX3Byb3RlY3Rf cHRyIChjb3VudCwgeGZyZWUsIHApOwotICAqYnVmX2FkZHIgPSBwOwotICByZXR1cm4gcDsKKyAg aWYgKCFOSUxQIChmcmFtZS0+ZnVsbF9uYW1lKSAmJiBOSUxQIChmcmFtZS0+bmFtZSkpCisgICAg eworICAgICAgZnJhbWUtPm5hbWUgPSBGZmlsZV9uYW1lX25vbmRpcmVjdG9yeSAoZnJhbWUtPmZ1 bGxfbmFtZSk7CisgICAgfQorICBmcmFtZS0+c291cmNlbmFtZSA9IHdpbGxfZHVtcF9wICgpID8g ZnJhbWUtPm5hbWUgOiBmcmFtZS0+ZnVsbF9uYW1lOworICBmcmFtZS0+cmVhZGZ1biA9IHJlYWRm dW47CisgIGZyYW1lLT53aG9sZV9idWZmZXIgPSB3aG9sZV9idWZmZXI7CisKIH0KIAorCisMCisK IC8qIFJldHVybiB0aGUgc2NhbGFyIHZhbHVlIHRoYXQgaGFzIHRoZSBVbmljb2RlIGNoYXJhY3Rl ciBuYW1lIE5BTUUuCiAgICBSYWlzZSAnaW52YWxpZC1yZWFkLXN5bnRheCcgaWYgdGhlcmUgaXMg bm8gc3VjaCBjaGFyYWN0ZXIuICAqLwotc3RhdGljIGludAotY2hhcmFjdGVyX25hbWVfdG9fY29k ZSAoY2hhciBjb25zdCAqbmFtZSwgcHRyZGlmZl90IG5hbWVfbGVuLAotCQkJTGlzcF9PYmplY3Qg cmVhZGNoYXJmdW4pCitpbnQKK2NoYXJhY3Rlcl9uYW1lX3RvX2NvZGUgKHJlZ2lzdGVyIGxyZWFk X2ZyYW1lICpmcmFtZSwgY2hhciBjb25zdCAqbmFtZSwgcHRyZGlmZl90IG5hbWVfbGVuKQogewog ICAvKiBGb3IgIlUrWFhYWCIsIHBhc3MgdGhlIGxlYWRpbmcgJysnIHRvIHN0cmluZ190b19udW1i ZXIgdG8gcmVqZWN0CiAgICAgIG1vbnN0cm9zaXRpZXMgbGlrZSAiVSstMDAwMCIuICAqLwpAQCAt Mjg1NSw3ICs0MzI2LDcgQEAgY2hhcmFjdGVyX25hbWVfdG9fY29kZSAoY2hhciBjb25zdCAqbmFt ZSwgcHRyZGlmZl90IG5hbWVfbGVuLAogICAgIHsKICAgICAgIEFVVE9fU1RSSU5HIChmb3JtYXQs ICJcXE57JXN9Iik7CiAgICAgICBBVVRPX1NUUklOR19XSVRIX0xFTiAobmFtZXN0ciwgbmFtZSwg bmFtZV9sZW4pOwotICAgICAgaW52YWxpZF9zeW50YXhfbGlzcCAoQ0FMTE4gKEZmb3JtYXQsIGZv cm1hdCwgbmFtZXN0ciksIHJlYWRjaGFyZnVuKTsKKyAgICAgIGludmFsaWRfc3ludGF4X2xpc3Ag KGZyYW1lLCBDQUxMTiAoRmZvcm1hdCwgZm9ybWF0LCBuYW1lc3RyKSk7CiAgICAgfQogCiAgIHJl dHVybiBGSVhOVU1QIChjb2RlKSA/IFhGSVhOVU0gKGNvZGUpIDogLTE7CkBAIC0yODY4LDcgKzQz MzksNyBAQCBjaGFyYWN0ZXJfbmFtZV90b19jb2RlIChjaGFyIGNvbnN0ICpuYW1lLCBwdHJkaWZm X3QgbmFtZV9sZW4sCiAvKiBSZWFkIGEgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZSwgYXNzdW1p bmcgd2UganVzdCByZWFkIGEgYmFja3NsYXNoCiAgICBhbmQgb25lIG1vcmUgY2hhcmFjdGVyIChu ZXh0X2NoYXIpLiAgKi8KIHN0YXRpYyBpbnQKLXJlYWRfY2hhcl9lc2NhcGUgKExpc3BfT2JqZWN0 IHJlYWRjaGFyZnVuLCBpbnQgbmV4dF9jaGFyKQorcmVhZF9jaGFyX2VzY2FwZSAocmVnaXN0ZXIg bHJlYWRfZnJhbWUgKmZyYW1lLCBpbnQgbmV4dF9jaGFyKQogewogICBpbnQgbW9kaWZpZXJzID0g MDsKICAgcHRyZGlmZl90IG5jb250cm9sID0gMDsKQEAgLTI4ODIsNyArNDM1Myw3IEBAIHJlYWRf Y2hhcl9lc2NhcGUgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBpbnQgbmV4dF9jaGFyKQogICBz d2l0Y2ggKGMpCiAgICAgewogICAgIGNhc2UgLTE6Ci0gICAgICBlbmRfb2ZfZmlsZV9lcnJvciAo KTsKKyAgICAgIGVuZF9vZl9maWxlX2Vycm9yIChmcmFtZSk7CiAKICAgICBjYXNlICdhJzogY2hy ID0gJ1xhJzsgYnJlYWs7CiAgICAgY2FzZSAnYic6IGNociA9ICdcYic7IGJyZWFrOwpAQCAtMjkw OCwxMyArNDM3OSwxMyBAQCByZWFkX2NoYXJfZXNjYXBlIChMaXNwX09iamVjdCByZWFkY2hhcmZ1 biwgaW50IG5leHRfY2hhcikKIAogICAgIG1vZF9rZXk6CiAgICAgICB7Ci0JaW50IGMxID0gUkVB RENIQVI7CisJaW50IGMxID0gUkVBRENIQVIgKGZyYW1lKTsKIAlpZiAoYzEgIT0gJy0nKQogCSAg ewogCSAgICBpZiAoYyA9PSAncycpCiAJICAgICAgewogCQkvKiBccyBub3QgZm9sbG93ZWQgYnkg YSBoeXBoZW4gaXMgU1BDLiAgKi8KLQkJVU5SRUFEIChjMSk7CisJCVVOUkVBRCAoZnJhbWUsIGMx KTsKIAkJY2hyID0gJyAnOwogCQlicmVhazsKIAkgICAgICB9CkBAIC0yOTIzLDEwICs0Mzk0LDEw IEBAIHJlYWRfY2hhcl9lc2NhcGUgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBpbnQgbmV4dF9j aGFyKQogCSAgICAgIGVycm9yICgiSW52YWxpZCBlc2NhcGUgY2hhciBzeW50YXg6IFxcJWMgbm90 IGZvbGxvd2VkIGJ5IC0iLCBjKTsKIAkgIH0KIAltb2RpZmllcnMgfD0gbW9kOwotCWMxID0gUkVB RENIQVI7CisJYzEgPSBSRUFEQ0hBUiAoZnJhbWUpOwogCWlmIChjMSA9PSAnXFwnKQogCSAgewot CSAgICBuZXh0X2NoYXIgPSBSRUFEQ0hBUjsKKwkgICAgbmV4dF9jaGFyID0gUkVBRENIQVIgKGZy YW1lKTsKIAkgICAgZ290byBhZ2FpbjsKIAkgIH0KIAljaHIgPSBjMTsKQEAgLTI5MzgsNyArNDQw OSw3IEBAIHJlYWRfY2hhcl9lc2NhcGUgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBpbnQgbmV4 dF9jaGFyKQogICAgICAgIEtlZXAgYSBjb3VudCBvZiB0aGVtIGFuZCBhcHBseSB0aGVtIHNlcGFy YXRlbHkuICAqLwogICAgIGNhc2UgJ0MnOgogICAgICAgewotCWludCBjMSA9IFJFQURDSEFSOwor CWludCBjMSA9IFJFQURDSEFSIChmcmFtZSk7CiAJaWYgKGMxICE9ICctJykKIAkgIGVycm9yICgi SW52YWxpZCBlc2NhcGUgY2hhciBzeW50YXg6IFxcJWMgbm90IGZvbGxvd2VkIGJ5IC0iLCBjKTsK ICAgICAgIH0KQEAgLTI5NDcsMTAgKzQ0MTgsMTAgQEAgcmVhZF9jaGFyX2VzY2FwZSAoTGlzcF9P YmplY3QgcmVhZGNoYXJmdW4sIGludCBuZXh0X2NoYXIpCiAgICAgY2FzZSAnXic6CiAgICAgICB7 CiAJbmNvbnRyb2wrKzsKLQlpbnQgYzEgPSBSRUFEQ0hBUjsKKwlpbnQgYzEgPSBSRUFEQ0hBUiAo ZnJhbWUpOwogCWlmIChjMSA9PSAnXFwnKQogCSAgewotCSAgICBuZXh0X2NoYXIgPSBSRUFEQ0hB UjsKKwkgICAgbmV4dF9jaGFyID0gUkVBRENIQVIgKGZyYW1lKTsKIAkgICAgZ290byBhZ2FpbjsK IAkgIH0KIAljaHIgPSBjMTsKQEAgLTI5NjUsMTAgKzQ0MzYsMTAgQEAgcmVhZF9jaGFyX2VzY2Fw ZSAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGludCBuZXh0X2NoYXIpCiAJaW50IGNvdW50ID0g MDsKIAl3aGlsZSAoY291bnQgPCAyKQogCSAgewotCSAgICBpbnQgYyA9IFJFQURDSEFSOworCSAg ICBpbnQgYyA9IFJFQURDSEFSIChmcmFtZSk7CiAJICAgIGlmIChjIDwgJzAnIHx8IGMgPiAnNycp CiAJICAgICAgewotCQlVTlJFQUQgKGMpOworCQlVTlJFQUQgKGZyYW1lLCBjKTsKIAkJYnJlYWs7 CiAJICAgICAgfQogCSAgICBpID0gKGkgPDwgMykgKyAoYyAtICcwJyk7CkBAIC0yOTg5LDExICs0 NDYwLDExIEBAIHJlYWRfY2hhcl9lc2NhcGUgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBpbnQg bmV4dF9jaGFyKQogCWludCBjb3VudCA9IDA7CiAJd2hpbGUgKDEpCiAJICB7Ci0JICAgIGludCBj ID0gUkVBRENIQVI7CisJICAgIGludCBjID0gUkVBRENIQVIgKGZyYW1lKTsKIAkgICAgaW50IGRp Z2l0ID0gY2hhcl9oZXhkaWdpdCAoYyk7CiAJICAgIGlmIChkaWdpdCA8IDApCiAJICAgICAgewot CQlVTlJFQUQgKGMpOworCQlVTlJFQUQgKGZyYW1lLCBjKTsKIAkJYnJlYWs7CiAJICAgICAgfQog CSAgICBpID0gKGkgPDwgNCkgKyBkaWdpdDsKQEAgLTMwMjYsNyArNDQ5Nyw3IEBAIHJlYWRfY2hh cl9lc2NhcGUgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBpbnQgbmV4dF9jaGFyKQogCXVuc2ln bmVkIGludCBpID0gMDsKIAlmb3IgKGludCBjb3VudCA9IDA7IGNvdW50IDwgdW5pY29kZV9oZXhf Y291bnQ7IGNvdW50KyspCiAJICB7Ci0JICAgIGludCBjID0gUkVBRENIQVI7CisJICAgIGludCBj ID0gUkVBRENIQVIgKGZyYW1lKTsKIAkgICAgaWYgKGMgPCAwKQogCSAgICAgIGVycm9yICgiTWFs Zm9ybWVkIFVuaWNvZGUgZXNjYXBlOiBcXCVjJXgiLAogCQkgICAgIHVuaWNvZGVfaGV4X2NvdW50 ID09IDQgPyAndScgOiAnVScsIGkpOwpAQCAtMzA0NSwyNiArNDUxNiwyNSBAQCByZWFkX2NoYXJf ZXNjYXBlIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgaW50IG5leHRfY2hhcikKICAgICAvKiBO YW1lZCBjaGFyYWN0ZXI6IFxOe25hbWV9ICovCiAgICAgY2FzZSAnTic6CiAgICAgICB7Ci0gICAg ICAgIGludCBjID0gUkVBRENIQVI7CisJaW50IGMgPSBSRUFEQ0hBUiAoZnJhbWUpOwogICAgICAg ICBpZiAoYyAhPSAneycpCi0gICAgICAgICAgaW52YWxpZF9zeW50YXggKCJFeHBlY3RlZCBvcGVu aW5nIGJyYWNlIGFmdGVyIFxcTiIsIHJlYWRjaGFyZnVuKTsKKwkgIGludmFsaWRfc3ludGF4IChm cmFtZSwgIkV4cGVjdGVkIG9wZW5pbmcgYnJhY2UgYWZ0ZXIgXFxOIik7CiAgICAgICAgIGNoYXIg bmFtZVtVTklDT0RFX0NIQVJBQ1RFUl9OQU1FX0xFTkdUSF9CT1VORCArIDFdOwogICAgICAgICBi b29sIHdoaXRlc3BhY2UgPSBmYWxzZTsKICAgICAgICAgcHRyZGlmZl90IGxlbmd0aCA9IDA7CiAg ICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIGludCBjID0gUkVB RENIQVI7CisJICAgIGludCBjID0gUkVBRENIQVIgKGZyYW1lKTsKICAgICAgICAgICAgIGlmIChj IDwgMCkKLSAgICAgICAgICAgICAgZW5kX29mX2ZpbGVfZXJyb3IgKCk7CisJICAgICAgZW5kX29m X2ZpbGVfZXJyb3IgKGZyYW1lKTsKICAgICAgICAgICAgIGlmIChjID09ICd9JykKLSAgICAgICAg ICAgICAgYnJlYWs7CisJICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoYyA+PSAweDgwKQog ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQVVUT19TVFJJTkcgKGZvcm1hdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgY2hhcmFjdGVyIFUrJTA0WCBpbiBj aGFyYWN0ZXIgbmFtZSIpOwotCQlpbnZhbGlkX3N5bnRheF9saXNwIChDQUxMTiAoRmZvcm1hdCwg Zm9ybWF0LAotCQkJCQkgICAgbWFrZV9maXhlZF9uYXRudW0gKGMpKSwKLQkJCQkgICAgIHJlYWRj aGFyZnVuKTsKKwkJaW52YWxpZF9zeW50YXhfbGlzcCAoZnJhbWUsIENBTExOIChGZm9ybWF0LCBm b3JtYXQsCisJCQkJCQkgICBtYWtlX2ZpeGVkX25hdG51bSAoYykpKTsKICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgLyogVHJlYXQgbXVsdGlwbGUgYWRqYWNlbnQgd2hpdGVzcGFjZSBjaGFy YWN0ZXJzIGFzIGEKICAgICAgICAgICAgICAgIHNpbmdsZSBzcGFjZSBjaGFyYWN0ZXIuICBUaGlz IG1ha2VzIGl0IGVhc2llciB0byB1c2UKQEAgLTMwODAsMTUgKzQ1NTAsMTUgQEAgcmVhZF9jaGFy X2VzY2FwZSAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGludCBuZXh0X2NoYXIpCiAgICAgICAg ICAgICAgIHdoaXRlc3BhY2UgPSBmYWxzZTsKICAgICAgICAgICAgIG5hbWVbbGVuZ3RoKytdID0g YzsKICAgICAgICAgICAgIGlmIChsZW5ndGggPj0gc2l6ZW9mIG5hbWUpCi0gICAgICAgICAgICAg IGludmFsaWRfc3ludGF4ICgiQ2hhcmFjdGVyIG5hbWUgdG9vIGxvbmciLCByZWFkY2hhcmZ1bik7 Ci0gICAgICAgICAgfQotICAgICAgICBpZiAobGVuZ3RoID09IDApCi0gICAgICAgICAgaW52YWxp ZF9zeW50YXggKCJFbXB0eSBjaGFyYWN0ZXIgbmFtZSIsIHJlYWRjaGFyZnVuKTsKKwkgICAgICBp bnZhbGlkX3N5bnRheCAoZnJhbWUsICJDaGFyYWN0ZXIgbmFtZSB0b28gbG9uZyIpOworCSAgfQor CWlmIChsZW5ndGggPT0gMCkKKwkgIGludmFsaWRfc3ludGF4IChmcmFtZSwgIkVtcHR5IGNoYXJh Y3RlciBuYW1lIik7CiAJbmFtZVtsZW5ndGhdID0gJ1wwJzsKIAogCS8qIGNoYXJhY3Rlcl9uYW1l X3RvX2NvZGUgY2FuIGludm9rZSByZWFkMCwgcmVjdXJzaXZlbHkuCiAJICAgVGhpcyBpcyB3aHkg cmVhZDAgbmVlZHMgdG8gYmUgcmUtZW50cmFudC4gICovCi0JY2hyID0gY2hhcmFjdGVyX25hbWVf dG9fY29kZSAobmFtZSwgbGVuZ3RoLCByZWFkY2hhcmZ1bik7CisJY2hyID0gY2hhcmFjdGVyX25h bWVfdG9fY29kZSAoZnJhbWUsIG5hbWUsIGxlbmd0aCk7CiAJYnJlYWs7CiAgICAgICB9CiAKQEAg LTMwOTgsNyArNDU2OCw3IEBAIHJlYWRfY2hhcl9lc2NhcGUgKExpc3BfT2JqZWN0IHJlYWRjaGFy ZnVuLCBpbnQgbmV4dF9jaGFyKQogICAgIH0KICAgZWFzc2VydCAoY2hyID49IDAgJiYgY2hyIDwg KDEgPDwgQ0hBUkFDVEVSQklUUykpOwogICBpZiAoY2hyIDwgMCB8fCBjaHIgPj0gKDEgPDwgQ0hB UkFDVEVSQklUUykpCi0gICAgaW52YWxpZF9zeW50YXggKCJJbnZhbGlkIGNoYXJhY3RlciIsIHJl YWRjaGFyZnVuKTsKKyAgICBpbnZhbGlkX3N5bnRheCAoZnJhbWUsICJJbnZhbGlkIGNoYXJhY3Rl ciIpOwogCiAgIC8qIEFwcGx5IENvbnRyb2wgbW9kaWZpZXJzLCB1c2luZyB0aGUgcnVsZXM6CiAg ICAgIFxDLVggPSBhc2NpaV9jdHJsKG5vbW9kKFgpKSB8IG1vZHMoWCkgIGlmIG5vbW9kKFgpIGlz IG9uZSBvZjoKQEAgLTMxNDYsMTMgKzQ2MTYsMTMgQEAgZGlnaXRfdG9fbnVtYmVyIChpbnQgY2hh cmFjdGVyLCBpbnQgYmFzZSkKICAgcmV0dXJuIGRpZ2l0IDwgYmFzZSA/IGRpZ2l0IDogLTE7CiB9 CiAKLXN0YXRpYyB2b2lkCi1pbnZhbGlkX3JhZGl4X2ludGVnZXIgKEVNQUNTX0lOVCByYWRpeCwg TGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCit2b2lkCitpbnZhbGlkX3JhZGl4X2ludGVnZXIgKHJl Z2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwgRU1BQ1NfSU5UIHJhZGl4KQogewogICBzdGF0aWMg Y2hhciBjb25zdCBmb3JtYXRbXSA9ICJpbnRlZ2VyLCByYWRpeCAlInBJImQiOwogICBjaGFyIGJ1 ZltzaXplb2YgZm9ybWF0IC0gc2l6ZW9mICIlInBJImQiICsgSU5UX0JVRlNJWkVfQk9VTkQgKHJh ZGl4KV07CiAgIHNwcmludGYgKGJ1ZiwgZm9ybWF0LCByYWRpeCk7Ci0gIGludmFsaWRfc3ludGF4 IChidWYsIHJlYWRjaGFyZnVuKTsKKyAgaW52YWxpZF9zeW50YXggKGZyYW1lLCBidWYpOwogfQog CiAvKiBSZWFkIGFuIGludGVnZXIgaW4gcmFkaXggUkFESVggdXNpbmcgUkVBRENIQVJGVU4gdG8g cmVhZApAQCAtMzE2MCw4ICs0NjMwLDggQEAgaW52YWxpZF9yYWRpeF9pbnRlZ2VyIChFTUFDU19J TlQgcmFkaXgsIExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQogICAgVmFsdWUgaXMgdGhlIGludGVn ZXIgcmVhZC4KICAgIFNpZ25hbCBhbiBlcnJvciBpZiBlbmNvdW50ZXJpbmcgaW52YWxpZCByZWFk IHN5bnRheC4gICovCiAKLXN0YXRpYyBMaXNwX09iamVjdAotcmVhZF9pbnRlZ2VyIChMaXNwX09i amVjdCByZWFkY2hhcmZ1biwgaW50IHJhZGl4KQorTGlzcF9PYmplY3QKK3JlYWRfaW50ZWdlciAo cmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBpbnQgcmFkaXgpCiB7CiAgIGNoYXIgc3RhY2ti dWZbMjBdOwogICBjaGFyICpyZWFkX2J1ZmZlciA9IHN0YWNrYnVmOwpAQCAtMzE3MSwxMSArNDY0 MSwxMSBAQCByZWFkX2ludGVnZXIgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBpbnQgcmFkaXgp CiAgIGludCB2YWxpZCA9IC0xOyAvKiAxIGlmIHZhbGlkLCAwIGlmIG5vdCwgLTEgaWYgaW5jb21w bGV0ZS4gICovCiAgIHNwZWNwZGxfcmVmIGNvdW50ID0gU1BFQ1BETF9JTkRFWCAoKTsKIAotICBp bnQgYyA9IFJFQURDSEFSOworICBpbnQgYyA9IFJFQURDSEFSIChmcmFtZSk7CiAgIGlmIChjID09 ICctJyB8fCBjID09ICcrJykKICAgICB7CiAgICAgICAqcCsrID0gYzsKLSAgICAgIGMgPSBSRUFE Q0hBUjsKKyAgICAgIGMgPSBSRUFEQ0hBUiAoZnJhbWUpOwogICAgIH0KIAogICBpZiAoYyA9PSAn MCcpCkBAIC0zMTg2LDcgKzQ2NTYsNyBAQCByZWFkX2ludGVnZXIgKExpc3BfT2JqZWN0IHJlYWRj aGFyZnVuLCBpbnQgcmFkaXgpCiAgICAgICAvKiBJZ25vcmUgcmVkdW5kYW50IGxlYWRpbmcgemVy b3MsIHNvIHRoZSBidWZmZXIgZG9lc24ndAogCSBmaWxsIHVwIHdpdGggdGhlbS4gICovCiAgICAg ICBkbwotCWMgPSBSRUFEQ0hBUjsKKwljID0gUkVBRENIQVIgKGZyYW1lKTsKICAgICAgIHdoaWxl IChjID09ICcwJyk7CiAgICAgfQogCkBAIC0zMjA2LDEzICs0Njc2LDEzIEBAIHJlYWRfaW50ZWdl ciAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGludCByYWRpeCkKIAkgIHAgPSByZWFkX2J1ZmZl ciArIG9mZnNldDsKIAl9CiAgICAgICAqcCsrID0gYzsKLSAgICAgIGMgPSBSRUFEQ0hBUjsKKyAg ICAgIGMgPSBSRUFEQ0hBUiAoZnJhbWUpOwogICAgIH0KIAotICBVTlJFQUQgKGMpOworICBVTlJF QUQgKGZyYW1lLCBjKTsKIAogICBpZiAodmFsaWQgIT0gMSkKLSAgICBpbnZhbGlkX3JhZGl4X2lu dGVnZXIgKHJhZGl4LCByZWFkY2hhcmZ1bik7CisgICAgaW52YWxpZF9yYWRpeF9pbnRlZ2VyIChm cmFtZSxyYWRpeCk7CiAKICAgKnAgPSAnXDAnOwogICByZXR1cm4gdW5iaW5kX3RvIChjb3VudCwg c3RyaW5nX3RvX251bWJlciAocmVhZF9idWZmZXIsIHJhZGl4LCBOVUxMKSk7CkBAIC0zMjIwLDEy ICs0NjkwLDEyIEBAIHJlYWRfaW50ZWdlciAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGludCBy YWRpeCkKIAwKIAogLyogUmVhZCBhIGNoYXJhY3RlciBsaXRlcmFsIChwcmVjZWRlZCBieSBgPycp LiAgKi8KLXN0YXRpYyBMaXNwX09iamVjdAotcmVhZF9jaGFyX2xpdGVyYWwgKExpc3BfT2JqZWN0 IHJlYWRjaGFyZnVuKQorTGlzcF9PYmplY3QKK3JlYWRfY2hhcl9saXRlcmFsIChyZWdpc3RlciBs cmVhZF9mcmFtZSAqZnJhbWUpCiB7Ci0gIGludCBjaCA9IFJFQURDSEFSOworICBpbnQgY2ggPSBS RUFEQ0hBUiAoZnJhbWUpOwogICBpZiAoY2ggPCAwKQotICAgIGVuZF9vZl9maWxlX2Vycm9yICgp OworICAgIGVuZF9vZl9maWxlX2Vycm9yIChmcmFtZSk7CiAKICAgLyogQWNjZXB0IGBzaW5nbGUg c3BhY2UnIHN5bnRheCBsaWtlIChsaXN0ID8geCkgd2hlcmUgdGhlCiAgICAgIHdoaXRlc3BhY2Ug Y2hhcmFjdGVyIGlzIFNQQyBvciBUQUIuCkBAIC0zMjM0LDcgKzQ3MDQsNyBAQCByZWFkX2NoYXJf bGl0ZXJhbCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCiAgIGlmIChjaCA9PSAnICcgfHwgY2gg PT0gJ1x0JykKICAgICByZXR1cm4gbWFrZV9maXhudW0gKGNoKTsKIAotICBpZiAoICAgY2ggPT0g JygnIHx8IGNoID09ICcpJyB8fCBjaCA9PSAnWycgfHwgY2ggPT0gJ10nCisgIGlmICgJIGNoID09 ICcoJyB8fCBjaCA9PSAnKScgfHwgY2ggPT0gJ1snIHx8IGNoID09ICddJwogICAgICAgfHwgY2gg PT0gJyInIHx8IGNoID09ICc7JykKICAgICB7CiAgICAgICBDSEVDS19MSVNUIChWbHJlYWRfdW5l c2NhcGVkX2NoYXJhY3Rlcl9saXRlcmFscyk7CkBAIC0zMjQ1LDcgKzQ3MTUsNyBAQCByZWFkX2No YXJfbGl0ZXJhbCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCiAgICAgfQogCiAgIGlmIChjaCA9 PSAnXFwnKQotICAgIGNoID0gcmVhZF9jaGFyX2VzY2FwZSAocmVhZGNoYXJmdW4sIFJFQURDSEFS KTsKKyAgICBjaCA9IHJlYWRfY2hhcl9lc2NhcGUgKGZyYW1lLCBSRUFEQ0hBUiAoZnJhbWUpKTsK IAogICBpbnQgbW9kaWZpZXJzID0gY2ggJiBDSEFSX01PRElGSUVSX01BU0s7CiAgIGNoICY9IH5D SEFSX01PRElGSUVSX01BU0s7CkBAIC0zMjUzLDIwICs0NzIzLDIwIEBAIHJlYWRfY2hhcl9saXRl cmFsIChMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKICAgICBjaCA9IENIQVJfVE9fQllURTggKGNo KTsKICAgY2ggfD0gbW9kaWZpZXJzOwogCi0gIGludCBuY2ggPSBSRUFEQ0hBUjsKLSAgVU5SRUFE IChuY2gpOworICBpbnQgbmNoID0gUkVBRENIQVIgKGZyYW1lKTsKKyAgVU5SRUFEIChmcmFtZSwg bmNoKTsKICAgaWYgKG5jaCA8PSAzMgogICAgICAgfHwgbmNoID09ICciJyB8fCBuY2ggPT0gJ1wn JyB8fCBuY2ggPT0gJzsnIHx8IG5jaCA9PSAnKCcKICAgICAgIHx8IG5jaCA9PSAnKScgfHwgbmNo ID09ICdbJyAgfHwgbmNoID09ICddJyB8fCBuY2ggPT0gJyMnCiAgICAgICB8fCBuY2ggPT0gJz8n IHx8IG5jaCA9PSAnYCcgIHx8IG5jaCA9PSAnLCcgfHwgbmNoID09ICcuJykKICAgICByZXR1cm4g bWFrZV9maXhudW0gKGNoKTsKIAotICBpbnZhbGlkX3N5bnRheCAoIj8iLCByZWFkY2hhcmZ1bik7 CisgIGludmFsaWRfc3ludGF4IChmcmFtZSwgIj8iKTsKIH0KIAogLyogUmVhZCBhIHN0cmluZyBs aXRlcmFsIChwcmVjZWRlZCBieSAnIicpLiAgKi8KLXN0YXRpYyBMaXNwX09iamVjdAotcmVhZF9z dHJpbmdfbGl0ZXJhbCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCitMaXNwX09iamVjdAorcmVh ZF9zdHJpbmdfbGl0ZXJhbCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQogewogICBjaGFy IHN0YWNrYnVmWzEwMjRdOwogICBjaGFyICpyZWFkX2J1ZmZlciA9IHN0YWNrYnVmOwpAQCAtMzI4 NCw3ICs0NzU0LDcgQEAgcmVhZF9zdHJpbmdfbGl0ZXJhbCAoTGlzcF9PYmplY3QgcmVhZGNoYXJm dW4pCiAgIHB0cmRpZmZfdCBuY2hhcnMgPSAwOwogCiAgIGludCBjaDsKLSAgd2hpbGUgKChjaCA9 IFJFQURDSEFSKSA+PSAwICYmIGNoICE9ICdcIicpCisgIHdoaWxlICgoY2ggPSBSRUFEQ0hBUiAo ZnJhbWUpKSA+PSAwICYmIGNoICE9ICdcIicpCiAgICAgewogICAgICAgaWYgKGVuZCAtIHAgPCBN QVhfTVVMVElCWVRFX0xFTkdUSCkKIAl7CkBAIC0zMjk4LDggKzQ3NjgsOCBAQCByZWFkX3N0cmlu Z19saXRlcmFsIChMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKIAogICAgICAgaWYgKGNoID09ICdc XCcpCiAJewotCSAgLyogRmlyc3QgYXBwbHkgc3RyaW5nLXNwZWNpZmljIGVzY2FwZSBydWxlczog ICovCi0JICBjaCA9IFJFQURDSEFSOworCSAgLyogRmlyc3QgYXBwbHkgc3RyaW5nLXNwZWNpZmlj IGVzY2FwZSBydWxlczogKi8KKwkgIGNoID0gUkVBRENIQVIgKGZyYW1lKTsKIAkgIHN3aXRjaCAo Y2gpCiAJICAgIHsKIAkgICAgY2FzZSAncyc6CkBAIC0zMzExLDcgKzQ3ODEsNyBAQCByZWFkX3N0 cmluZ19saXRlcmFsIChMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKIAkgICAgICAvKiBgXFNQQycg YW5kIGBcTEYnIGdlbmVyYXRlIG5vIGNoYXJhY3RlcnMgYXQgYWxsLiAgKi8KIAkgICAgICBjb250 aW51ZTsKIAkgICAgZGVmYXVsdDoKLQkgICAgICBjaCA9IHJlYWRfY2hhcl9lc2NhcGUgKHJlYWRj aGFyZnVuLCBjaCk7CisJICAgICAgY2ggPSByZWFkX2NoYXJfZXNjYXBlIChmcmFtZSwgY2gpOwog CSAgICAgIGJyZWFrOwogCSAgICB9CiAKQEAgLTMzNTYsNyArNDgyNiw3IEBAIHJlYWRfc3RyaW5n X2xpdGVyYWwgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQogCiAJICAvKiBBbnkgbW9kaWZpZXJz IHJlbWFpbmluZyBhcmUgaW52YWxpZC4gICovCiAJICBpZiAobW9kaWZpZXJzKQotCSAgICBpbnZh bGlkX3N5bnRheCAoIkludmFsaWQgbW9kaWZpZXIgaW4gc3RyaW5nIiwgcmVhZGNoYXJmdW4pOwor CSAgICBpbnZhbGlkX3N5bnRheCAoZnJhbWUsICJJbnZhbGlkIG1vZGlmaWVyIGluIHN0cmluZyIp OwogCSAgcCArPSBDSEFSX1NUUklORyAoY2gsICh1bnNpZ25lZCBjaGFyICopIHApOwogCX0KICAg ICAgIGVsc2UKQEAgLTMzNzEsNyArNDg0MSw3IEBAIHJlYWRfc3RyaW5nX2xpdGVyYWwgKExpc3Bf T2JqZWN0IHJlYWRjaGFyZnVuKQogICAgIH0KIAogICBpZiAoY2ggPCAwKQotICAgIGVuZF9vZl9m aWxlX2Vycm9yICgpOworICAgIGVuZF9vZl9maWxlX2Vycm9yIChmcmFtZSk7CiAKICAgaWYgKCFm b3JjZV9tdWx0aWJ5dGUgJiYgZm9yY2Vfc2luZ2xlYnl0ZSkKICAgICB7CkBAIC0zNDY3LDIzICs0 OTM3LDIyIEBAIHZlY3Rvcl9mcm9tX3Jldl9saXN0IChMaXNwX09iamVjdCBlbGVtcykKICAgcmV0 dXJuIG9iajsKIH0KIAotc3RhdGljIExpc3BfT2JqZWN0IGdldF9sYXp5X3N0cmluZyAoTGlzcF9P YmplY3QgdmFsKTsKIAotc3RhdGljIExpc3BfT2JqZWN0Ci1ieXRlY29kZV9mcm9tX3Jldl9saXN0 IChMaXNwX09iamVjdCBlbGVtcywgTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCitMaXNwX09iamVj dAorYnl0ZWNvZGVfZnJvbV9yZXZfbGlzdCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBM aXNwX09iamVjdCBlbGVtcykKIHsKICAgTGlzcF9PYmplY3Qgb2JqID0gdmVjdG9yX2Zyb21fcmV2 X2xpc3QgKGVsZW1zKTsKICAgTGlzcF9PYmplY3QgKnZlYyA9IFhWRUNUT1IgKG9iaiktPmNvbnRl bnRzOwogICBwdHJkaWZmX3Qgc2l6ZSA9IEFTSVpFIChvYmopOwogCi0gIGlmIChpbmZpbGUgJiYg c2l6ZSA+PSBDTE9TVVJFX0NPTlNUQU5UUykKKyAgaWYgKGZyYW1lLT5pbnB1dC5mLnN0cmVhbSAm JiBzaXplID49IENMT1NVUkVfQ09OU1RBTlRTKQogICAgIHsKICAgICAgIC8qIEFsd2F5cyByZWFk ICdsYXppbHktbG9hZGVkJyBieXRlY29kZSAoZ2VuZXJhdGVkIGJ5IHRoZQogICAgICAgICAgYGJ5 dGUtY29tcGlsZS1keW5hbWljJyBmZWF0dXJlIHByaW9yIHRvIEVtYWNzIDMwKSBlYWdlcmx5LCB0 bwogICAgICAgICAgYXZvaWQgY29kZSBpbiB0aGUgZmFzdCBwYXRoIGR1cmluZyBleGVjdXRpb24u ICAqLwogICAgICAgaWYgKENPTlNQICh2ZWNbQ0xPU1VSRV9DT0RFXSkKICAgICAgICAgICAmJiBG SVhOVU1QIChYQ0RSICh2ZWNbQ0xPU1VSRV9DT0RFXSkpKQotICAgICAgICB2ZWNbQ0xPU1VSRV9D T0RFXSA9IGdldF9sYXp5X3N0cmluZyAodmVjW0NMT1NVUkVfQ09ERV0pOworICAgICAgICB2ZWNb Q0xPU1VSRV9DT0RFXSA9IGdldF9sYXp5X3N0cmluZyAoZnJhbWUsIHZlY1tDTE9TVVJFX0NPREVd KTsKIAogICAgICAgLyogTGF6aWx5LWxvYWRlZCBieXRlY29kZSBpcyByZXByZXNlbnRlZCBieSB0 aGUgY29uc3RhbnQgc2xvdCBiZWluZyBuaWwKICAgICAgICAgIGFuZCB0aGUgYnl0ZWNvZGUgc2xv dCBhIChsYXppbHkgbG9hZGVkKSBzdHJpbmcgY29udGFpbmluZyB0aGUKQEAgLTM0OTQsMTMgKzQ5 NjMsMTMgQEAgYnl0ZWNvZGVfZnJvbV9yZXZfbGlzdCAoTGlzcF9PYmplY3QgZWxlbXMsIExpc3Bf T2JqZWN0IHJlYWRjaGFyZnVuKQogCSAgZWFzc2VydCAoIVNUUklOR19NVUxUSUJZVEUgKGVuYykp OwogCSAgLyogVGhlIHN0cmluZyAoYWx3YXlzIHVuaWJ5dGUpIG11c3QgYmUgZGVjb2RlZCB0byBi ZSBwYXJzZWQuICAqLwogCSAgZW5jID0gRmRlY29kZV9jb2Rpbmdfc3RyaW5nIChlbmMsCi0JCQkJ ICAgICAgIEVRIChyZWFkY2hhcmZ1biwKLQkJCQkJICAgUWdldF9lbWFjc19tdWxlX2ZpbGVfY2hh cikKKwkJCQkgICAgICAgKEZST01fRklMRV9QIChmcmFtZS0+aW50eXBlKQorCQkJCQkmJiBmcmFt ZS0+aW5wdXQuZi5tdWxlKQogCQkJCSAgICAgICA/IFFlbWFjc19tdWxlIDogUXV0Zl84X2VtYWNz LAogCQkJCSAgICAgICBRdCwgUW5pbCk7CiAJICBMaXNwX09iamVjdCBwYWlyID0gRnJlYWQgKGVu Yyk7CiAgICAgICAgICAgaWYgKCFDT05TUCAocGFpcikpCi0JICAgIGludmFsaWRfc3ludGF4ICgi SW52YWxpZCBieXRlLWNvZGUgb2JqZWN0IiwgcmVhZGNoYXJmdW4pOworCSAgICBpbnZhbGlkX3N5 bnRheCAoZnJhbWUsICJJbnZhbGlkIGJ5dGUtY29kZSBvYmplY3QiKTsKIAogICAgICAgICAgIHZl Y1tDTE9TVVJFX0NPREVdID0gWENBUiAocGFpcik7CiAgICAgICAgICAgdmVjW0NMT1NVUkVfQ09O U1RBTlRTXSA9IFhDRFIgKHBhaXIpOwpAQCAtMzUxOCw3ICs0OTg3LDcgQEAgYnl0ZWNvZGVfZnJv bV9yZXZfbGlzdCAoTGlzcF9PYmplY3QgZWxlbXMsIExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQog CSAgICB8fCAoQ09OU1AgKHZlY1tDTE9TVVJFX0NPREVdKSAvKiBJbnRlcnByZXRlZCBmdW5jdGlv bi4gICovCiAJICAgICAgICAmJiAoQ09OU1AgKHZlY1tDTE9TVVJFX0NPTlNUQU5UU10pCiAJICAg ICAgICAgICAgfHwgTklMUCAodmVjW0NMT1NVUkVfQ09OU1RBTlRTXSkpKSkpKQotICAgIGludmFs aWRfc3ludGF4ICgiSW52YWxpZCBieXRlLWNvZGUgb2JqZWN0IiwgcmVhZGNoYXJmdW4pOworICAg IGludmFsaWRfc3ludGF4IChmcmFtZSwgIkludmFsaWQgYnl0ZS1jb2RlIG9iamVjdCIpOwogCiAg IGlmIChTVFJJTkdQICh2ZWNbQ0xPU1VSRV9DT0RFXSkpCiAgICAgewpAQCAtMzUzOCwxOSArNTAw NywxOSBAQCBieXRlY29kZV9mcm9tX3Jldl9saXN0IChMaXNwX09iamVjdCBlbGVtcywgTGlzcF9P YmplY3QgcmVhZGNoYXJmdW4pCiAgIHJldHVybiBvYmo7CiB9CiAKLXN0YXRpYyBMaXNwX09iamVj dAotY2hhcl90YWJsZV9mcm9tX3Jldl9saXN0IChMaXNwX09iamVjdCBlbGVtcywgTGlzcF9PYmpl Y3QgcmVhZGNoYXJmdW4pCitMaXNwX09iamVjdAorY2hhcl90YWJsZV9mcm9tX3Jldl9saXN0IChy ZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsIExpc3BfT2JqZWN0IGVsZW1zKQogewogICBMaXNw X09iamVjdCBvYmogPSB2ZWN0b3JfZnJvbV9yZXZfbGlzdCAoZWxlbXMpOwogICBpZiAoQVNJWkUg KG9iaikgPCBDSEFSX1RBQkxFX1NUQU5EQVJEX1NMT1RTKQotICAgIGludmFsaWRfc3ludGF4ICgi SW52YWxpZCBzaXplIGNoYXItdGFibGUiLCByZWFkY2hhcmZ1bik7CisgICAgaW52YWxpZF9zeW50 YXggKGZyYW1lLCAiSW52YWxpZCBzaXplIGNoYXItdGFibGUiKTsKICAgWFNFVFBWRUNUWVBFIChY VkVDVE9SIChvYmopLCBQVkVDX0NIQVJfVEFCTEUpOwogICByZXR1cm4gb2JqOwogCiB9CiAKLXN0 YXRpYyBMaXNwX09iamVjdAotc3ViX2NoYXJfdGFibGVfZnJvbV9yZXZfbGlzdCAoTGlzcF9PYmpl Y3QgZWxlbXMsIExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQorTGlzcF9PYmplY3QKK3N1Yl9jaGFy X3RhYmxlX2Zyb21fcmV2X2xpc3QgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSwgTGlzcF9P YmplY3QgZWxlbXMpCiB7CiAgIC8qIEEgc3ViLWNoYXItdGFibGUgY2FuJ3QgYmUgcmVhZCBhcyBh IHJlZ3VsYXIgdmVjdG9yIGJlY2F1c2Ugb2YgdHdvCiAgICAgIEMgaW50ZWdlciBmaWVsZHMuICAq LwpAQCAtMzU4MSwyMyArNTA1MCwyMyBAQCBzdWJfY2hhcl90YWJsZV9mcm9tX3Jldl9saXN0IChM aXNwX09iamVjdCBlbGVtcywgTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCiAgIHJldHVybiB0Ymw7 CiB9CiAKLXN0YXRpYyBMaXNwX09iamVjdAotc3RyaW5nX3Byb3BzX2Zyb21fcmV2X2xpc3QgKExp c3BfT2JqZWN0IGVsZW1zLCBMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKK0xpc3BfT2JqZWN0Citz dHJpbmdfcHJvcHNfZnJvbV9yZXZfbGlzdCAocmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lLCBM aXNwX09iamVjdCBlbGVtcykKIHsKICAgZWxlbXMgPSBGbnJldmVyc2UgKGVsZW1zKTsKICAgaWYg KE5JTFAgKGVsZW1zKSB8fCAhU1RSSU5HUCAoWENBUiAoZWxlbXMpKSkKLSAgICBpbnZhbGlkX3N5 bnRheCAoIiMiLCByZWFkY2hhcmZ1bik7CisgICAgaW52YWxpZF9zeW50YXggKGZyYW1lLCAiIyIp OwogICBMaXNwX09iamVjdCBvYmogPSBYQ0FSIChlbGVtcyk7CiAgIGZvciAoTGlzcF9PYmplY3Qg dGwgPSBYQ0RSIChlbGVtcyk7ICFOSUxQICh0bCk7KQogICAgIHsKICAgICAgIExpc3BfT2JqZWN0 IGJlZyA9IFhDQVIgKHRsKTsKICAgICAgIHRsID0gWENEUiAodGwpOwogICAgICAgaWYgKE5JTFAg KHRsKSkKLQlpbnZhbGlkX3N5bnRheCAoIkludmFsaWQgc3RyaW5nIHByb3BlcnR5IGxpc3QiLCBy ZWFkY2hhcmZ1bik7CisJaW52YWxpZF9zeW50YXggKGZyYW1lLCAiSW52YWxpZCBzdHJpbmcgcHJv cGVydHkgbGlzdCIpOwogICAgICAgTGlzcF9PYmplY3QgZW5kID0gWENBUiAodGwpOwogICAgICAg dGwgPSBYQ0RSICh0bCk7CiAgICAgICBpZiAoTklMUCAodGwpKQotCWludmFsaWRfc3ludGF4ICgi SW52YWxpZCBzdHJpbmcgcHJvcGVydHkgbGlzdCIsIHJlYWRjaGFyZnVuKTsKKwlpbnZhbGlkX3N5 bnRheCAoZnJhbWUsICJJbnZhbGlkIHN0cmluZyBwcm9wZXJ0eSBsaXN0Iik7CiAgICAgICBMaXNw X09iamVjdCBwbGlzdCA9IFhDQVIgKHRsKTsKICAgICAgIHRsID0gWENEUiAodGwpOwogICAgICAg RnNldF90ZXh0X3Byb3BlcnRpZXMgKGJlZywgZW5kLCBwbGlzdCwgb2JqKTsKQEAgLTM2MDYsMzUg KzUwNzUsMzUgQEAgc3RyaW5nX3Byb3BzX2Zyb21fcmV2X2xpc3QgKExpc3BfT2JqZWN0IGVsZW1z LCBMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKIH0KIAogLyogUmVhZCBhIGJvb2wgdmVjdG9yIChw cmVjZWRlZCBieSAiIyYiKS4gICovCi1zdGF0aWMgTGlzcF9PYmplY3QKLXJlYWRfYm9vbF92ZWN0 b3IgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQorTGlzcF9PYmplY3QKK3JlYWRfYm9vbF92ZWN0 b3IgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKIHsKICAgRU1BQ1NfSU5UIGxlbmd0aCA9 IDA7CiAgIGZvciAoOzspCiAgICAgewotICAgICAgaW50IGMgPSBSRUFEQ0hBUjsKKyAgICAgIGlu dCBjID0gUkVBRENIQVIgKGZyYW1lKTsKICAgICAgIGlmIChjIDwgJzAnIHx8IGMgPiAnOScpCiAJ ewogCSAgaWYgKGMgIT0gJyInKQotCSAgICBpbnZhbGlkX3N5bnRheCAoIiMmIiwgcmVhZGNoYXJm dW4pOworCSAgICBpbnZhbGlkX3N5bnRheCAoZnJhbWUsICIjJiIpOwogCSAgYnJlYWs7CiAJfQog ICAgICAgaWYgKGNrZF9tdWwgKCZsZW5ndGgsIGxlbmd0aCwgMTApCiAJICB8fCBja2RfYWRkICgm bGVuZ3RoLCBsZW5ndGgsIGMgLSAnMCcpKQotCWludmFsaWRfc3ludGF4ICgiIyYiLCByZWFkY2hh cmZ1bik7CisJaW52YWxpZF9zeW50YXggKGZyYW1lLCAiIyYiKTsKICAgICB9CiAgIGlmIChCT09M X1ZFQ1RPUl9MRU5HVEhfTUFYIDwgbGVuZ3RoKQotICAgIGludmFsaWRfc3ludGF4ICgiIyYiLCBy ZWFkY2hhcmZ1bik7CisgICAgaW52YWxpZF9zeW50YXggKGZyYW1lLCAiIyYiKTsKIAogICBwdHJk aWZmX3Qgc2l6ZV9pbl9jaGFycyA9IGJvb2xfdmVjdG9yX2J5dGVzIChsZW5ndGgpOwotICBMaXNw X09iamVjdCBzdHIgPSByZWFkX3N0cmluZ19saXRlcmFsIChyZWFkY2hhcmZ1bik7CisgIExpc3Bf T2JqZWN0IHN0ciA9IHJlYWRfc3RyaW5nX2xpdGVyYWwgKGZyYW1lKTsKICAgaWYgKFNUUklOR19N VUxUSUJZVEUgKHN0cikKICAgICAgIHx8ICEoc2l6ZV9pbl9jaGFycyA9PSBTQ0hBUlMgKHN0cikK IAkgICAvKiBXZSB1c2VkIHRvIHByaW50IDEgY2hhciB0b28gbWFueSB3aGVuIHRoZSBudW1iZXIg b2YgYml0cwogCSAgICAgIHdhcyBhIG11bHRpcGxlIG9mIDguICBBY2NlcHQgc3VjaCBpbnB1dCBp biBjYXNlIGl0IGNhbWUKIAkgICAgICBmcm9tIGFuIG9sZCB2ZXJzaW9uLiAgKi8KIAkgICB8fCBs ZW5ndGggPT0gKFNDSEFSUyAoc3RyKSAtIDEpICogQk9PTF9WRUNUT1JfQklUU19QRVJfQ0hBUikp Ci0gICAgaW52YWxpZF9zeW50YXggKCIjJi4uLiIsIHJlYWRjaGFyZnVuKTsKKyAgICBpbnZhbGlk X3N5bnRheCAoZnJhbWUsICIjJi4uLiIpOwogCiAgIExpc3BfT2JqZWN0IG9iaiA9IG1ha2VfdW5p bml0X2Jvb2xfdmVjdG9yIChsZW5ndGgpOwogICB1bnNpZ25lZCBjaGFyICpkYXRhID0gYm9vbF92 ZWN0b3JfdWNoYXJfZGF0YSAob2JqKTsKQEAgLTM2NDgsMTQgKzUxMTcsMTQgQEAgcmVhZF9ib29s X3ZlY3RvciAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCiAvKiBTa2lwIChhbmQgb3B0aW9uYWxs eSByZW1lbWJlcikgYSBsYXppbHktbG9hZGVkIHN0cmluZwogICAgcHJlY2VkZWQgYnkgIiNAIi4g IFJldHVybiB0cnVlIGlmIHRoaXMgd2FzIGEgbm9ybWFsIHNraXAsCiAgICBmYWxzZSBpZiB3ZSBy ZWFkICNAMDAgKHdoaWNoIHNraXBzIHRvIEVPQi9FT0YpLiAgKi8KLXN0YXRpYyBib29sCi1za2lw X2xhenlfc3RyaW5nIChMaXNwX09iamVjdCByZWFkY2hhcmZ1bikKK2Jvb2wKK3NraXBfbGF6eV9z dHJpbmcgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKIHsKICAgcHRyZGlmZl90IG5za2lw ID0gMDsKICAgcHRyZGlmZl90IGRpZ2l0cyA9IDA7CiAgIGZvciAoOzspCiAgICAgewotICAgICAg aW50IGMgPSBSRUFEQ0hBUjsKKyAgICAgIGludCBjID0gUkVBRENIQVIgKGZyYW1lKTsKICAgICAg IGlmIChjIDwgJzAnIHx8IGMgPiAnOScpCiAJewogCSAgaWYgKG5za2lwID4gMCkKQEAgLTM2NjUs MzUgKzUxMzQsMzUgQEAgc2tpcF9sYXp5X3N0cmluZyAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4p CiAJICAgICAgIGEgc3BhY2UuICAqLwogCSAgICBuc2tpcC0tOwogCSAgZWxzZQotCSAgICBVTlJF QUQgKGMpOworCSAgICBVTlJFQUQgKGZyYW1lLCBjKTsKIAkgIGJyZWFrOwogCX0KICAgICAgIGlm IChja2RfbXVsICgmbnNraXAsIG5za2lwLCAxMCkKIAkgIHx8IGNrZF9hZGQgKCZuc2tpcCwgbnNr aXAsIGMgLSAnMCcpKQotCWludmFsaWRfc3ludGF4ICgiI0AiLCByZWFkY2hhcmZ1bik7CisJaW52 YWxpZF9zeW50YXggKGZyYW1lLCAiI0AiKTsKICAgICAgIGRpZ2l0cysrOwogICAgICAgaWYgKGRp Z2l0cyA9PSAyICYmIG5za2lwID09IDApCiAJewogCSAgLyogI0AwMCBtZWFucyAicmVhZCBuaWwg YW5kIHNraXAgdG8gZW5kIiAqLwotCSAgc2tpcF9keW5fZW9mIChyZWFkY2hhcmZ1bik7CisJICBz a2lwX2R5bl9lb2YgKGZyYW1lKTsKIAkgIHJldHVybiBmYWxzZTsKIAl9CiAgICAgfQogCi0gIGlm IChsb2FkX2ZvcmNlX2RvY19zdHJpbmdzICYmIEZST01fRklMRV9QIChyZWFkY2hhcmZ1bikpCisg IGlmIChsb2FkX2ZvcmNlX2RvY19zdHJpbmdzICYmIEZST01fRklMRV9QIChmcmFtZS0+aW50eXBl KSkKICAgICB7CiAgICAgICAvKiBJZiB3ZSBhcmUgc3VwcG9zZWQgdG8gZm9yY2UgZG9jIHN0cmlu Z3MgaW50byBjb3JlIHJpZ2h0IG5vdywKIAkgcmVjb3JkIHRoZSBsYXN0IHN0cmluZyB0aGF0IHdl IHNraXBwZWQsCiAJIGFuZCByZWNvcmQgd2hlcmUgaW4gdGhlIGZpbGUgaXQgY29tZXMgZnJvbS4g ICovCiAKICAgICAgIC8qIEZpcnN0IGV4Y2hhbmdlIHRoZSB0d28gc2F2ZWRfc3RyaW5ncy4gICov Ci0gICAgICBzdGF0aWNfYXNzZXJ0IChBUlJBWUVMVFMgKHNhdmVkX3N0cmluZ3MpID09IDIpOwot ICAgICAgc3RydWN0IHNhdmVkX3N0cmluZyB0ID0gc2F2ZWRfc3RyaW5nc1swXTsKLSAgICAgIHNh dmVkX3N0cmluZ3NbMF0gPSBzYXZlZF9zdHJpbmdzWzFdOwotICAgICAgc2F2ZWRfc3RyaW5nc1sx XSA9IHQ7CisgICAgICBzdGF0aWNfYXNzZXJ0IChBUlJBWUVMVFMgKGZyYW1lLT5zYXZlZF9zdHJp bmdzKSA9PSAyKTsKKyAgICAgIHN0cnVjdCBzYXZlZF9zdHJpbmcgdCA9IGZyYW1lLT5zYXZlZF9z dHJpbmdzWzBdOworICAgICAgZnJhbWUtPnNhdmVkX3N0cmluZ3NbMF0gPSBmcmFtZS0+c2F2ZWRf c3RyaW5nc1sxXTsKKyAgICAgIGZyYW1lLT5zYXZlZF9zdHJpbmdzWzFdID0gdDsKIAogICAgICAg ZW51bSB7IGV4dHJhID0gMTAwIH07Ci0gICAgICBzdHJ1Y3Qgc2F2ZWRfc3RyaW5nICpzcyA9ICZz YXZlZF9zdHJpbmdzWzBdOworICAgICAgc3RydWN0IHNhdmVkX3N0cmluZyAqc3MgPSAmKGZyYW1l LT5zYXZlZF9zdHJpbmdzWzBdKTsKICAgICAgIGlmIChzcy0+c2l6ZSA9PSAwKQogCXsKIAkgIHNz LT5zaXplID0gbnNraXAgKyBleHRyYTsKQEAgLTM3MDUsMTQgKzUxNzQsMTQgQEAgc2tpcF9sYXp5 X3N0cmluZyAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4pCiAJICBzcy0+c3RyaW5nID0geHJlYWxs b2MgKHNzLT5zdHJpbmcsIHNzLT5zaXplKTsKIAl9CiAKLSAgICAgIGZpbGVfc3RyZWFtIGluc3Ry ZWFtID0gaW5maWxlLT5zdHJlYW07Ci0gICAgICBzcy0+cG9zaXRpb24gPSAoZmlsZV90ZWxsIChp bnN0cmVhbSkgLSBpbmZpbGUtPmxvb2thaGVhZCk7CisgICAgICBmaWxlX3N0cmVhbSBpbnN0cmVh bSA9IGZyYW1lLT5pbnB1dC5mLnN0cmVhbTsKKyAgICAgIHNzLT5wb3NpdGlvbiA9IChmaWxlX3Rl bGwgKGluc3RyZWFtKSAtIGZyYW1lLT5pbnB1dC5mLmxvb2thaGVhZCk7CiAKICAgICAgIC8qIENv cHkgdGhhdCBtYW55IGJ5dGVzIGludG8gdGhlIHNhdmVkIHN0cmluZy4gICovCiAgICAgICBwdHJk aWZmX3QgaSA9IDA7CiAgICAgICBpbnQgYyA9IDA7Ci0gICAgICBmb3IgKGludCBuID0gbWluIChu c2tpcCwgaW5maWxlLT5sb29rYWhlYWQpOyBuID4gMDsgbi0tKQotCXNzLT5zdHJpbmdbaSsrXSA9 IGMgPSBpbmZpbGUtPmJ1ZlstLWluZmlsZS0+bG9va2FoZWFkXTsKKyAgICAgIGZvciAoaW50IG4g PSBtaW4gKG5za2lwLCBmcmFtZS0+aW5wdXQuZi5sb29rYWhlYWQpOyBuID4gMDsgbi0tKQorCXNz LT5zdHJpbmdbaSsrXSA9IGMgPSBmcmFtZS0+aW5wdXQuZi5idWZbLS0oZnJhbWUtPmlucHV0LmYu bG9va2FoZWFkKV07CiAgICAgICBibG9ja19pbnB1dCAoKTsKICAgICAgIGZvciAoOyBpIDwgbnNr aXAgJiYgYyA+PSAwOyBpKyspCiAJc3MtPnN0cmluZ1tpXSA9IGMgPSBmaWxlX2dldF9jaGFyIChp bnN0cmVhbSk7CkBAIC0zNzIyLDE1ICs1MTkxLDE1IEBAIHNraXBfbGF6eV9zdHJpbmcgKExpc3Bf T2JqZWN0IHJlYWRjaGFyZnVuKQogICAgIH0KICAgZWxzZQogICAgIC8qIFNraXAgdGhhdCBtYW55 IGJ5dGVzLiAgKi8KLSAgICBza2lwX2R5bl9ieXRlcyAocmVhZGNoYXJmdW4sIG5za2lwKTsKKyAg ICBza2lwX2R5bl9ieXRlcyAoZnJhbWUsIG5za2lwKTsKIAogICByZXR1cm4gdHJ1ZTsKIH0KIAog LyogR2l2ZW4gYSBsYXp5LWxvYWRlZCBzdHJpbmcgZGVzaWduYXRvciBWQUwsIHJldHVybiB0aGUg YWN0dWFsIHN0cmluZy4KICAgIFZBTCBpcyAoRklMRU5BTUUgLiBQT1MpLiAgKi8KLXN0YXRpYyBM aXNwX09iamVjdAotZ2V0X2xhenlfc3RyaW5nIChMaXNwX09iamVjdCB2YWwpCitMaXNwX09iamVj dAorZ2V0X2xhenlfc3RyaW5nIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsTGlzcF9PYmpl Y3QgdmFsKQogewogICAvKiBHZXQgYSBkb2Mgc3RyaW5nIGZyb20gdGhlIGZpbGUgd2UgYXJlIGxv YWRpbmcuCiAgICAgIElmIGl0J3MgaW4gYSBzYXZlZCBzdHJpbmcsIGdldCBpdCBmcm9tIHRoZXJl LgpAQCAtMzc0NCw4ICs1MjEzLDggQEAgZ2V0X2xhenlfc3RyaW5nIChMaXNwX09iamVjdCB2YWwp CiAgICAgIHN0cmluZ3Mgc3RhcnRlZCB3aXRoIGFuIGFzdGVyaXNrKTsgdGFrZSB0aGUgYWJzb2x1 dGUgdmFsdWUgZm9yCiAgICAgIGNvbXBhdGliaWxpdHkuICAqLwogICBFTUFDU19JTlQgcG9zID0g ZWFicyAoWEZJWE5VTSAoWENEUiAodmFsKSkpOwotICBzdHJ1Y3Qgc2F2ZWRfc3RyaW5nICpzcyA9 ICZzYXZlZF9zdHJpbmdzWzBdOwotICBzdHJ1Y3Qgc2F2ZWRfc3RyaW5nICpzc2VuZCA9IHNzICsg QVJSQVlFTFRTIChzYXZlZF9zdHJpbmdzKTsKKyAgc3RydWN0IHNhdmVkX3N0cmluZyAqc3MgPSAm KGZyYW1lLT5zYXZlZF9zdHJpbmdzWzBdKTsKKyAgc3RydWN0IHNhdmVkX3N0cmluZyAqc3NlbmQg PSBzcyArIEFSUkFZRUxUUyAoZnJhbWUtPnNhdmVkX3N0cmluZ3MpOwogICB3aGlsZSAoc3MgPCBz c2VuZAogCSAmJiAhKHBvcyA+PSBzcy0+cG9zaXRpb24gJiYgcG9zIDwgc3MtPnBvc2l0aW9uICsg c3MtPmxlbmd0aCkpCiAgICAgc3MrKzsKQEAgLTM3ODksOTIgKzUyNTgsMzAgQEAgc3ltYm9sX2No YXJfc3BhbiAoY29uc3QgY2hhciAqcykKICAgcmV0dXJuIHAgLSBzOwogfQogCi1zdGF0aWMgdm9p ZAotc2tpcF9zcGFjZV9hbmRfY29tbWVudHMgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuKQordm9p ZAorc2tpcF9zcGFjZV9hbmRfY29tbWVudHMgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkK IHsKICAgaW50IGM7CiAgIGRvCiAgICAgewotICAgICAgYyA9IFJFQURDSEFSOworICAgICAgYyA9 IFJFQURDSEFSIChmcmFtZSk7CiAgICAgICBpZiAoYyA9PSAnOycpCiAJZG8KLQkgIGMgPSBSRUFE Q0hBUjsKKwkgIGMgPSBSRUFEQ0hBUiAoZnJhbWUpOwogCXdoaWxlIChjID49IDAgJiYgYyAhPSAn XG4nKTsKICAgICAgIGlmIChjIDwgMCkKLQllbmRfb2ZfZmlsZV9lcnJvciAoKTsKKwllbmRfb2Zf ZmlsZV9lcnJvciAoZnJhbWUpOwogICAgIH0KICAgd2hpbGUgKGMgPD0gMzIgfHwgYyA9PSBOT19C UkVBS19TUEFDRSk7Ci0gIFVOUkVBRCAoYyk7CisgIFVOUkVBRCAoZnJhbWUsIGMpOwogfQogCi0v KiBXaGVuIGFuIG9iamVjdCBpcyByZWFkLCB0aGUgdHlwZSBvZiB0aGUgdG9wIHJlYWQgc3RhY2sg ZW50cnkgaW5kaWNhdGVzCi0gICB0aGUgc3ludGFjdGljIGNvbnRleHQuICAqLwotZW51bSByZWFk X2VudHJ5X3R5cGUKLXsKLQkJCQkvKiBwcmVjZWRpbmcgc3ludGFjdGljIGNvbnRleHQgKi8KLSAg UkVfbGlzdF9zdGFydCwJCS8qICIoIiAqLwotCi0gIFJFX2xpc3QsCQkJLyogIigiICgrIE9CSkVD VCkgKi8KLSAgUkVfbGlzdF9kb3QsCQkJLyogIigiICgrIE9CSkVDVCkgIi4iICovCi0KLSAgUkVf dmVjdG9yLAkJCS8qICJbIiAoKiBPQkpFQ1QpICovCi0gIFJFX3JlY29yZCwJCQkvKiAiI3MoIiAo KiBPQkpFQ1QpICovCi0gIFJFX2NoYXJfdGFibGUsCQkvKiAiI15bIiAoKiBPQkpFQ1QpICovCi0g IFJFX3N1Yl9jaGFyX3RhYmxlLAkJLyogIiNeXlsiICgqIE9CSkVDVCkgKi8KLSAgUkVfYnl0ZV9j b2RlLAkJCS8qICIjWyIgKCogT0JKRUNUKSAqLwotICBSRV9zdHJpbmdfcHJvcHMsCQkvKiAiIygi ICgqIE9CSkVDVCkgKi8KLQotICBSRV9zcGVjaWFsLAkJCS8qICInIiB8ICIjJyIgfCAiYCIgfCAi LCIgfCAiLEAiICovCi0KLSAgUkVfbnVtYmVyZWQsCQkJLyogIiMiICgrIERJR0lUKSAiPSIgKi8K LX07Ci0KLXN0cnVjdCByZWFkX3N0YWNrX2VudHJ5Ci17Ci0gIGVudW0gcmVhZF9lbnRyeV90eXBl IHR5cGU7Ci0gIHVuaW9uIHsKLSAgICAvKiBSRV9saXN0LCBSRV9saXN0X2RvdCAqLwotICAgIHN0 cnVjdCB7Ci0gICAgICBMaXNwX09iamVjdCBoZWFkOwkJLyogZmlyc3QgY29ucyBvZiBsaXN0ICov Ci0gICAgICBMaXNwX09iamVjdCB0YWlsOwkJLyogbGFzdCBjb25zIG9mIGxpc3QgKi8KLSAgICB9 IGxpc3Q7Ci0KLSAgICAvKiBSRV92ZWN0b3IsIFJFX3JlY29yZCwgUkVfY2hhcl90YWJsZSwgUkVf c3ViX2NoYXJfdGFibGUsCi0gICAgICAgUkVfYnl0ZV9jb2RlLCBSRV9zdHJpbmdfcHJvcHMgKi8K LSAgICBzdHJ1Y3QgewotICAgICAgTGlzcF9PYmplY3QgZWxlbXM7CS8qIGxpc3Qgb2YgZWxlbWVu dHMgaW4gcmV2ZXJzZSBvcmRlciAqLwotICAgICAgYm9vbCBvbGRfbG9jYXRlX3N5bXM7CS8qIG9s ZCB2YWx1ZSBvZiBsb2NhdGVfc3ltcyAqLwotICAgIH0gdmVjdG9yOwotCi0gICAgLyogUkVfc3Bl Y2lhbCAqLwotICAgIHN0cnVjdCB7Ci0gICAgICBMaXNwX09iamVjdCBzeW1ib2w7CS8qIHN5bWJv bCBmcm9tIHNwZWNpYWwgc3ludGF4ICovCi0gICAgfSBzcGVjaWFsOwotCi0gICAgLyogUkVfbnVt YmVyZWQgKi8KLSAgICBzdHJ1Y3QgewotICAgICAgTGlzcF9PYmplY3QgbnVtYmVyOwkvKiBudW1i ZXIgYXMgYSBmaXhudW0gKi8KLSAgICAgIExpc3BfT2JqZWN0IHBsYWNlaG9sZGVyOwkvKiBwbGFj ZWhvbGRlciBvYmplY3QgKi8KLSAgICB9IG51bWJlcmVkOwotICB9IHU7Ci19OwotCi1zdHJ1Y3Qg cmVhZF9zdGFjawotewotICBzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSAqc3RhY2s7ICAvKiBiYXNl IG9mIHN0YWNrICovCi0gIHB0cmRpZmZfdCBzaXplOwkJICAgLyogYWxsb2NhdGVkIHNpemUgaW4g ZW50cmllcyAqLwotICBwdHJkaWZmX3Qgc3A7CQkJICAgLyogY3VycmVudCBudW1iZXIgb2YgZW50 cmllcyAqLwotfTsKLQotc3RhdGljIHN0cnVjdCByZWFkX3N0YWNrIHJkc3RhY2sgPSB7TlVMTCwg MCwgMH07Ci0KLXZvaWQKLW1hcmtfbHJlYWQgKHZvaWQpCitJTkxJTkUgdm9pZAorbWFya19yZHN0 YWNrIChzdHJ1Y3QgcmVhZF9zdGFjayAqcmRzdGFjaykKIHsKLSAgLyogTWFyayB0aGUgcmVhZCBz dGFjaywgd2hpY2ggbWF5IGNvbnRhaW4gZGF0YSBub3Qgb3RoZXJ3aXNlIHRyYWNlZCAqLwotICBm b3IgKHB0cmRpZmZfdCBpID0gMDsgaSA8IHJkc3RhY2suc3A7IGkrKykKKyAgZm9yIChwdHJkaWZm X3QgaSA9IDA7IGkgPCByZHN0YWNrLT5zcDsgaSsrKQogICAgIHsKLSAgICAgIHN0cnVjdCByZWFk X3N0YWNrX2VudHJ5ICplID0gJnJkc3RhY2suc3RhY2tbaV07CisgICAgICBzdHJ1Y3QgcmVhZF9z dGFja19lbnRyeSAqZSA9ICYocmRzdGFjay0+c3RhY2tbaV0pOwogICAgICAgc3dpdGNoIChlLT50 eXBlKQogCXsKIAljYXNlIFJFX2xpc3Rfc3RhcnQ6CkBAIC0zOTAzLDc3ICs1MzEwLDE0NCBAQCBt YXJrX2xyZWFkICh2b2lkKQogICAgIH0KIH0KIAorSU5MSU5FIHZvaWQKK21hcmtfbHJlYWRfaW5w dXQgKGxyZWFkX2ZyYW1lICpmcmFtZSkKK3sKKyAgc3dpdGNoIChmcmFtZS0+aW50eXBlKQorICAg IHsKKyAgICBjYXNlIExSRUFEX0lOUFVUX0ZJTEU6CisgICAgY2FzZSBMUkVBRF9JTlBVVF9GSUxF X01VTEU6CisgICAgICBtYXJrX29iamVjdCAoZnJhbWUtPmlucHV0LmYuY29kaW5nKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfUFJPQ0VEVVJFOgorICAgICAgbWFya19vYmpl Y3QgKGZyYW1lLT5pbnB1dC5wLnByb2MpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9J TlBVVF9NQVJLRVI6CisgICAgICBtYXJrX29iamVjdCAoZnJhbWUtPmlucHV0Lm0ubWFya2VyKTsK KyAgICAgIG1hcmtfb2JqZWN0IChmcmFtZS0+aW5wdXQubS5iLmJ1ZmZlcik7CisgICAgICBicmVh azsKKyAgICBjYXNlIExSRUFEX0lOUFVUX0JVRkZFUjoKKyAgICAgIG1hcmtfb2JqZWN0IChmcmFt ZS0+aW5wdXQuYi5idWZmZXIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9T VFJJTkc6CisgICAgICBtYXJrX29iamVjdCAoZnJhbWUtPmlucHV0LnMuc3RyaW5nKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgTFJFQURfSU5QVVRfTlVMTDoKKyAgICAgIGJyZWFrOworICAgIGRl ZmF1bHQ6CisgICAgICAvKiBkbyBub3RoaW5nICovCisgICAgfQorfQordm9pZAorbWFya19scmVh ZCAodm9pZCkKK3sKKyAgcmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lID0gY3VycmVudF9mcmFt ZTsKKyAgLyogQWxsIHRoZSBmcmFtZSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIEMg c3RhY2sgc29tZXdoZXJlCisgICAgIE5vdCBzdXJlIGlmIHRoaXMgaXMgcmVkdW5kYW50IG9yIHJl cXVpcmVkICovCisgIHdoaWxlIChmcmFtZSAhPSBOVUxMKQorICAgIHsKKyAgICAgIG1hcmtfbHJl YWRfaW5wdXQgKGZyYW1lKTsKKyAgICAgIG1hcmtfcmRzdGFjayAoJihmcmFtZS0+cmRzdGFjaykp OworICAgICAgbWFya19vYmplY3QgKGZyYW1lLT5sb2Fkc19pbl9wcm9ncmVzcyk7CisgICAgICBt YXJrX29iamVjdCAoZnJhbWUtPm9iamVjdHNfbWFwKTsKKyAgICAgIG1hcmtfb2JqZWN0IChmcmFt ZS0+b2JqZWN0c19jb21wbGV0ZWQpOworICAgICAgbWFya19vYmplY3QgKGZyYW1lLT5zdGFydCk7 CisgICAgICBtYXJrX29iamVjdCAoZnJhbWUtPmVuZCk7CisgICAgICBtYXJrX29iamVjdCAoZnJh bWUtPmZ1bGxfbmFtZSk7CisgICAgICBtYXJrX29iamVjdCAoZnJhbWUtPm5hbWUpOworICAgICAg bWFya19vYmplY3QgKGZyYW1lLT5zb3VyY2VuYW1lKTsKKyAgICAgIG1hcmtfb2JqZWN0IChmcmFt ZS0+cmVhZGZ1bik7CisgICAgICBtYXJrX29iamVjdCAoZnJhbWUtPnZhbHVlKTsKKyAgICAgIG1h cmtfb2JqZWN0IChmcmFtZS0+ZXJyb3IpOworICAgICAgaWYgKGZyYW1lLT5tdWxlX2NoYXJzZXQp CisJbWFya19vYmplY3QgKGZyYW1lLT5tdWxlX2NoYXJzZXQtPmF0dHJpYnV0ZXMpOworICAgICAg ZnJhbWUgPSBmcmFtZS0+cHJldjsKKyAgICB9Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJl YWRfc3RhY2tfZW50cnkgKgotcmVhZF9zdGFja190b3AgKHZvaWQpCityZWFkX3N0YWNrX3RvcCAo cmVnaXN0ZXIgbHJlYWRfZnJhbWUgKmZyYW1lKQogewotICBlYXNzdW1lIChyZHN0YWNrLnNwID4g MCk7Ci0gIHJldHVybiAmcmRzdGFjay5zdGFja1tyZHN0YWNrLnNwIC0gMV07CisgIGVhc3N1bWUg KGZyYW1lLT5yZHN0YWNrLnNwID4gMCk7CisgIHJldHVybiAmKGZyYW1lLT5yZHN0YWNrLnN0YWNr W2ZyYW1lLT5yZHN0YWNrLnNwIC0gMV0pOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZWFk X3N0YWNrX2VudHJ5ICoKLXJlYWRfc3RhY2tfcG9wICh2b2lkKQorcmVhZF9zdGFja19wb3AgKHJl Z2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKIHsKLSAgZWFzc3VtZSAocmRzdGFjay5zcCA+IDAp OwotICByZXR1cm4gJnJkc3RhY2suc3RhY2tbLS1yZHN0YWNrLnNwXTsKKworCisKKyAgZWFzc3Vt ZSAoZnJhbWUtPnJkc3RhY2suc3AgPiAwKTsKKyAgcmV0dXJuICYoZnJhbWUtPnJkc3RhY2suc3Rh Y2tbLS0oZnJhbWUtPnJkc3RhY2suc3ApXSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbAotcmVh ZF9zdGFja19lbXB0eV9wIChwdHJkaWZmX3QgYmFzZV9zcCkKK0lOTElORSBib29sCityZWFkX3N0 YWNrX2VtcHR5X3AgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKIHsKLSAgcmV0dXJuIHJk c3RhY2suc3AgPD0gYmFzZV9zcDsKKyAgZWFzc2VydCAoZnJhbWUtPmJhc2Vfc3AgPT0gMCk7Cisg IHJldHVybiBmcmFtZS0+cmRzdGFjay5zcCA8PSBmcmFtZS0+YmFzZV9zcDsKIH0KIAogTk9fSU5M SU5FIHN0YXRpYyB2b2lkCi1ncm93X3JlYWRfc3RhY2sgKHZvaWQpCitncm93X3JlYWRfc3RhY2sg KHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKIHsKLSAgc3RydWN0IHJlYWRfc3RhY2sgKnJz ID0gJnJkc3RhY2s7CisgIHN0cnVjdCByZWFkX3N0YWNrICpycyA9ICZmcmFtZS0+cmRzdGFjazsK ICAgZWFzc2VydCAocnMtPnNwID09IHJzLT5zaXplKTsKICAgcnMtPnN0YWNrID0geHBhbGxvYyAo cnMtPnN0YWNrLCAmcnMtPnNpemUsIDEsIC0xLCBzaXplb2YgKnJzLT5zdGFjayk7CiAgIGVhc3Nl cnQgKHJzLT5zcCA8IHJzLT5zaXplKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1yZWFkX3N0 YWNrX3B1c2ggKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5IGUpCitJTkxJTkUgdm9pZAorcmVhZF9z dGFja19wdXNoIChyZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUsc3RydWN0IHJlYWRfc3RhY2tf ZW50cnkgZSkKIHsKLSAgaWYgKHJkc3RhY2suc3AgPj0gcmRzdGFjay5zaXplKQotICAgIGdyb3df cmVhZF9zdGFjayAoKTsKLSAgcmRzdGFjay5zdGFja1tyZHN0YWNrLnNwKytdID0gZTsKKyAgaWYg KGZyYW1lLT5yZHN0YWNrLnNwID49IGZyYW1lLT5yZHN0YWNrLnNpemUpCisgICAgZ3Jvd19yZWFk X3N0YWNrIChmcmFtZSk7CisgIGZyYW1lLT5yZHN0YWNrLnN0YWNrW2ZyYW1lLT5yZHN0YWNrLnNw KytdID0gZTsKIH0KIAogc3RhdGljIHZvaWQKLXJlYWRfc3RhY2tfcmVzZXQgKGludG1heF90IHNw KQotewotICBlYXNzZXJ0IChzcCA8PSByZHN0YWNrLnNwKTsKLSAgcmRzdGFjay5zcCA9IHNwOwot fQotCi0jZGVmaW5lIFJFQURfQU5EX0JVRkZFUihjKQkJCVwKLSAgYyA9IFJFQURDSEFSOwkJCQkJ XAotICBpZiAoYyA8IDApCQkJCQlcCi0gICAgSU5WQUxJRF9TWU5UQVhfV0lUSF9CVUZGRVIgKCk7 CQlcCi0gIGlmIChtdWx0aWJ5dGUpCQkJCVwKLSAgICBwICs9IENIQVJfU1RSSU5HIChjLCAodW5z aWduZWQgY2hhciAqKSBwKTsJXAotICBlbHNlCQkJCQkJXAotICAgICpwKysgPSBjOwkJCQkJXAot ICBpZiAoZW5kIC0gcCA8IE1BWF9NVUxUSUJZVEVfTEVOR1RIICsgMSkJXAotICAgIHsJCQkJCQlc Ci0gICAgICAgb2Zmc2V0ID0gcCAtIHJlYWRfYnVmZmVyOwkJXAotICAgICAgIHJlYWRfYnVmZmVy ID0gZ3Jvd19yZWFkX2J1ZmZlciAocmVhZF9idWZmZXIsIG9mZnNldCwgXAotCQkJCSAgICAgICAm aGVhcGJ1ZiwgJnJlYWRfYnVmZmVyX3NpemUsIGNvdW50KTsgXAotICAgICAgIHAgPSByZWFkX2J1 ZmZlciArIG9mZnNldDsJCQkJCVwKLSAgICAgICBlbmQgPSByZWFkX2J1ZmZlciArIHJlYWRfYnVm ZmVyX3NpemU7CQkJCVwKLSAgICB9Ci0KLSNkZWZpbmUgSU5WQUxJRF9TWU5UQVhfV0lUSF9CVUZG RVIoKQkJXAorcmVhZF9zdGFja19yZXNldCAodm9pZCAqcCkKK3sKKyAgcmVnaXN0ZXIgbHJlYWRf ZnJhbWUgKmZyYW1lID0gcDsKKyAgLyogbm90ZSB0aGlzIGJhc2Vfc3Agc2VlbXMgdG8gYmUgZnJv bSB3aGVuIHJlYWQwIHVzZWQgQy1sZXZlbCByZWN1cnNpb24sCisgICAgIHNvIHRoZSBiYXNlX3Nw IHBvaW50ZWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcmVhZCBzdGFjayBmb3IgdGhlCisgICAgIHBh cnRpY3VsYXIgcmVhZDAgYWN0aXZhdGlvbi4gIE5vdyB0aGVyZSBpcyBvbmx5IG9uZSBhY3RpdmF0 aW9uCisgICAgIG9mIHJlYWQwLCBzbyB0aGUgYmFzZV9zcCBpcyBhbHdheXMgMC4gIFRoaXMgYXNz ZXJ0IGlzIGp1c3QgdG8gdmVyaWZ5CisgICAgIHRoYXQgYmVmb3JlIHJlbW92aW5nIGJhc2Vfc3Ag YWx0b2dldGhlci4gICovCisgIGVhc3NlcnQgKGZyYW1lLT5iYXNlX3NwID09IDApOworICBlYXNz ZXJ0IChmcmFtZS0+YmFzZV9zcCA8PSBmcmFtZS0+cmRzdGFjay5zcCk7CisgIGZyYW1lLT5yZHN0 YWNrLnNwID0gZnJhbWUtPmJhc2Vfc3A7Cit9CisKKyNkZWZpbmUgUkVBRF9BTkRfQlVGRkVSKGZy YW1lLGMpCQkJCQlcCisgIGMgPSBSRUFEQ0hBUiAoZnJhbWUpOwkJCQkJCQlcCisgIGlmIChjIDwg MCkJCQkJCQkJCVwKKyAgICBJTlZBTElEX1NZTlRBWF9XSVRIX0JVRkZFUiAoZnJhbWUpOwkJCQkJ XAorICBpZiAoZnJhbWUtPm11bHRpYnl0ZSkJCQkJCQkJXAorICAgIHAgKz0gQ0hBUl9TVFJJTkcg KGMsICh1bnNpZ25lZCBjaGFyICopIHApOwkJCQlcCisgIGVsc2UJCQkJCQkJCQlcCisgICAgKnAr KyA9IGM7CQkJCQkJCQlcCisgIGlmIChlbmQgLSBwIDwgTUFYX01VTFRJQllURV9MRU5HVEggKyAx KQkJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIG9mZnNldCA9IHAgLSByZWFkX2J1ZmZlcjsJ CQkJCQlcCisgICAgICByZWFkX2J1ZmZlciA9IGdyb3dfcmVhZF9idWZmZXIgKHJlYWRfYnVmZmVy LCBvZmZzZXQsCQlcCisJCQkJICAgICAgJmhlYXBidWYsICZyZWFkX2J1ZmZlcl9zaXplLAlcCisJ CQkJICAgICAgY291bnQpOwkJCQlcCisgICAgICBwID0gcmVhZF9idWZmZXIgKyBvZmZzZXQ7CQkJ CQkJXAorICAgICAgZW5kID0gcmVhZF9idWZmZXIgKyByZWFkX2J1ZmZlcl9zaXplOwkJCQlcCisg ICAgfQorCisjZGVmaW5lIElOVkFMSURfU1lOVEFYX1dJVEhfQlVGRkVSKGZyYW1lKQlcCiAgIHsJ CQkJCQlcCiAgICAgKnAgPSAwOwkJCQkJXAotICAgIGludmFsaWRfc3ludGF4IChyZWFkX2J1ZmZl ciwgcmVhZGNoYXJmdW4pOwlcCisgICAgaW52YWxpZF9zeW50YXggKGZyYW1lLCByZWFkX2J1ZmZl cik7CVwKICAgfQogCiAvKiBSZWFkIGEgTGlzcCBvYmplY3QuCiAgICBJZiBMT0NBVEVfU1lNUyBp cyB0cnVlLCBzeW1ib2xzIGFyZSByZWFkIHdpdGggcG9zaXRpb24uICAqLwotc3RhdGljIExpc3Bf T2JqZWN0Ci1yZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJvb2wgbG9jYXRlX3N5bXMp CitMaXNwX09iamVjdAorcmVhZDAgKHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFtZSkKIHsKICAg Y2hhciBzdGFja2J1Zls2NF07CiAgIGNoYXIgKnJlYWRfYnVmZmVyID0gc3RhY2tidWY7CkBAIC0z OTgyLDggKzU0NTYsMTAgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBib29sIGxv Y2F0ZV9zeW1zKQogICBjaGFyICpoZWFwYnVmID0gTlVMTDsKIAogICBzcGVjcGRsX3JlZiBiYXNl X3BkbCA9IFNQRUNQRExfSU5ERVggKCk7Ci0gIHB0cmRpZmZfdCBiYXNlX3NwID0gcmRzdGFjay5z cDsKLSAgcmVjb3JkX3Vud2luZF9wcm90ZWN0X2ludG1heCAocmVhZF9zdGFja19yZXNldCwgYmFz ZV9zcCk7CisgIC8qIFRoaXMgYXNzaWdubWVudCBvZiBiYXNlX3NwIHNob3VsZCBhbHdheXMgYmUg MC4KKyAgICAgTWF5YmUgaXQgd2FzIHVzZWZ1bCB3aGVuIHJlYWQwL3JlYWQxIHVzZWQgcmVjdXJz aXZlIGNhbGxzPyovCisgIGZyYW1lLT5iYXNlX3NwID0gZnJhbWUtPnJkc3RhY2suc3A7CisgIHJl Y29yZF91bndpbmRfcHJvdGVjdF9wdHIgKHJlYWRfc3RhY2tfcmVzZXQsIGZyYW1lKTsKIAogICBz cGVjcGRsX3JlZiBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CiAKQEAgLTM5OTEsMzcgKzU0Njcs MzcgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBib29sIGxvY2F0ZV9zeW1zKQog ICBib29sIHNraXBfc2hvcnRoYW5kOwogCiAgIC8qIFJlYWQgYW4gb2JqZWN0IGludG8gYG9iaicu ICAqLwotIHJlYWRfb2JqOiA7CisgcmVhZF9vYmo6CiAgIExpc3BfT2JqZWN0IG9iajsKLSAgYm9v bCBtdWx0aWJ5dGU7Ci0gIGludCBjID0gUkVBRENIQVJfUkVQT1JUX01VTFRJQllURSAoJm11bHRp Ynl0ZSk7CisKKyAgaW50IGMgPSBSRUFEQ0hBUiAoZnJhbWUpOwogICBpZiAoYyA8IDApCi0gICAg ZW5kX29mX2ZpbGVfZXJyb3IgKCk7CisgICAgZW5kX29mX2ZpbGVfZXJyb3IgKGZyYW1lKTsKIAog ICBzd2l0Y2ggKGMpCiAgICAgewogICAgIGNhc2UgJygnOgotICAgICAgcmVhZF9zdGFja19wdXNo ICgoc3RydWN0IHJlYWRfc3RhY2tfZW50cnkpIHsudHlwZSA9IFJFX2xpc3Rfc3RhcnR9KTsKKyAg ICAgIHJlYWRfc3RhY2tfcHVzaCAoZnJhbWUsKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5KSB7LnR5 cGUgPSBSRV9saXN0X3N0YXJ0fSk7CiAgICAgICBnb3RvIHJlYWRfb2JqOwogCiAgICAgY2FzZSAn KSc6Ci0gICAgICBpZiAocmVhZF9zdGFja19lbXB0eV9wIChiYXNlX3NwKSkKLQlpbnZhbGlkX3N5 bnRheCAoIikiLCByZWFkY2hhcmZ1bik7Ci0gICAgICBzd2l0Y2ggKHJlYWRfc3RhY2tfdG9wICgp LT50eXBlKQorICAgICAgaWYgKHJlYWRfc3RhY2tfZW1wdHlfcCAoZnJhbWUpKQorCWludmFsaWRf c3ludGF4IChmcmFtZSwgIikiKTsKKyAgICAgIHN3aXRjaCAocmVhZF9zdGFja190b3AgKGZyYW1l KS0+dHlwZSkKIAl7CiAJY2FzZSBSRV9saXN0X3N0YXJ0OgotCSAgcmVhZF9zdGFja19wb3AgKCk7 CisJICByZWFkX3N0YWNrX3BvcCAoZnJhbWUpOwogCSAgb2JqID0gUW5pbDsKIAkgIGJyZWFrOwog CWNhc2UgUkVfbGlzdDoKLQkgIG9iaiA9IHJlYWRfc3RhY2tfcG9wICgpLT51Lmxpc3QuaGVhZDsK KwkgIG9iaiA9IHJlYWRfc3RhY2tfcG9wIChmcmFtZSktPnUubGlzdC5oZWFkOwogCSAgYnJlYWs7 CiAJY2FzZSBSRV9yZWNvcmQ6CiAJICB7Ci0JICAgIGxvY2F0ZV9zeW1zID0gcmVhZF9zdGFja190 b3AgKCktPnUudmVjdG9yLm9sZF9sb2NhdGVfc3ltczsKLQkgICAgTGlzcF9PYmplY3QgZWxlbXMg PSBGbnJldmVyc2UgKHJlYWRfc3RhY2tfcG9wICgpLT51LnZlY3Rvci5lbGVtcyk7CisJICAgIGZy YW1lLT5sb2NhdGVfc3ltcyA9IHJlYWRfc3RhY2tfdG9wIChmcmFtZSktPnUudmVjdG9yLm9sZF9s b2NhdGVfc3ltczsKKwkgICAgTGlzcF9PYmplY3QgZWxlbXMgPSBGbnJldmVyc2UgKHJlYWRfc3Rh Y2tfcG9wIChmcmFtZSktPnUudmVjdG9yLmVsZW1zKTsKIAkgICAgaWYgKE5JTFAgKGVsZW1zKSkK LQkgICAgICBpbnZhbGlkX3N5bnRheCAoIiNzIiwgcmVhZGNoYXJmdW4pOworCSAgICAgIGludmFs aWRfc3ludGF4IChmcmFtZSwgIiNzIik7CiAKIAkgICAgaWYgKEJBU0VfRVEgKFhDQVIgKGVsZW1z KSwgUWhhc2hfdGFibGUpKQogCSAgICAgIG9iaiA9IGhhc2hfdGFibGVfZnJvbV9wbGlzdCAoWENE UiAoZWxlbXMpKTsKQEAgLTQwMzAsNTAgKzU1MDYsNDYgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJl YWRjaGFyZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogCSAgICBicmVhazsKIAkgIH0KIAljYXNlIFJF X3N0cmluZ19wcm9wczoKLQkgIGxvY2F0ZV9zeW1zID0gcmVhZF9zdGFja190b3AgKCktPnUudmVj dG9yLm9sZF9sb2NhdGVfc3ltczsKLQkgIG9iaiA9IHN0cmluZ19wcm9wc19mcm9tX3Jldl9saXN0 IChyZWFkX3N0YWNrX3BvcCAoKSAtPnUudmVjdG9yLmVsZW1zLAotCQkJCQkgICAgcmVhZGNoYXJm dW4pOworCSAgZnJhbWUtPmxvY2F0ZV9zeW1zID0gcmVhZF9zdGFja190b3AgKGZyYW1lKS0+dS52 ZWN0b3Iub2xkX2xvY2F0ZV9zeW1zOworCSAgb2JqID0gc3RyaW5nX3Byb3BzX2Zyb21fcmV2X2xp c3QgKGZyYW1lLCByZWFkX3N0YWNrX3BvcCAoZnJhbWUpIC0+dS52ZWN0b3IuZWxlbXMpOwogCSAg YnJlYWs7CiAJZGVmYXVsdDoKLQkgIGludmFsaWRfc3ludGF4ICgiKSIsIHJlYWRjaGFyZnVuKTsK KwkgIGludmFsaWRfc3ludGF4IChmcmFtZSwgIikiKTsKIAl9CiAgICAgICBicmVhazsKIAogICAg IGNhc2UgJ1snOgotICAgICAgcmVhZF9zdGFja19wdXNoICgoc3RydWN0IHJlYWRfc3RhY2tfZW50 cnkpIHsKKyAgICAgIHJlYWRfc3RhY2tfcHVzaCAoZnJhbWUsIChzdHJ1Y3QgcmVhZF9zdGFja19l bnRyeSkgewogCSAgLnR5cGUgPSBSRV92ZWN0b3IsCiAJICAudS52ZWN0b3IuZWxlbXMgPSBRbmls LAotCSAgLnUudmVjdG9yLm9sZF9sb2NhdGVfc3ltcyA9IGxvY2F0ZV9zeW1zLAorCSAgLnUudmVj dG9yLm9sZF9sb2NhdGVfc3ltcyA9IGZyYW1lLT5sb2NhdGVfc3ltcywKIAl9KTsKLSAgICAgIC8q IEZJWE1FOiBzaG91bGQgdmVjdG9ycyBiZSByZWFkIHdpdGggbG9jYXRlX3N5bXM9ZmFsc2U/ICAq LworICAgICAgLyogRklYTUU6IHNob3VsZCB2ZWN0b3JzIGJlIHJlYWQgd2l0aCBsb2NhdGVfc3lt cz1mYWxzZT8JKi8KICAgICAgIGdvdG8gcmVhZF9vYmo7CiAKICAgICBjYXNlICddJzoKLSAgICAg IGlmIChyZWFkX3N0YWNrX2VtcHR5X3AgKGJhc2Vfc3ApKQotCWludmFsaWRfc3ludGF4ICgiXSIs IHJlYWRjaGFyZnVuKTsKLSAgICAgIHN3aXRjaCAocmVhZF9zdGFja190b3AgKCktPnR5cGUpCisg ICAgICBpZiAocmVhZF9zdGFja19lbXB0eV9wIChmcmFtZSkpCisJaW52YWxpZF9zeW50YXggKGZy YW1lLCAiXSIpOworICAgICAgc3dpdGNoIChyZWFkX3N0YWNrX3RvcCAoZnJhbWUpLT50eXBlKQog CXsKIAljYXNlIFJFX3ZlY3RvcjoKLQkgIGxvY2F0ZV9zeW1zID0gcmVhZF9zdGFja190b3AgKCkt PnUudmVjdG9yLm9sZF9sb2NhdGVfc3ltczsKLQkgIG9iaiA9IHZlY3Rvcl9mcm9tX3Jldl9saXN0 IChyZWFkX3N0YWNrX3BvcCAoKS0+dS52ZWN0b3IuZWxlbXMpOworCSAgZnJhbWUtPmxvY2F0ZV9z eW1zID0gcmVhZF9zdGFja190b3AgKGZyYW1lKS0+dS52ZWN0b3Iub2xkX2xvY2F0ZV9zeW1zOwor CSAgb2JqID0gdmVjdG9yX2Zyb21fcmV2X2xpc3QgKHJlYWRfc3RhY2tfcG9wIChmcmFtZSktPnUu dmVjdG9yLmVsZW1zKTsKIAkgIGJyZWFrOwogCWNhc2UgUkVfYnl0ZV9jb2RlOgotCSAgbG9jYXRl X3N5bXMgPSByZWFkX3N0YWNrX3RvcCAoKS0+dS52ZWN0b3Iub2xkX2xvY2F0ZV9zeW1zOwotCSAg b2JqID0gYnl0ZWNvZGVfZnJvbV9yZXZfbGlzdCAocmVhZF9zdGFja19wb3AgKCktPnUudmVjdG9y LmVsZW1zLAotCQkJCQlyZWFkY2hhcmZ1bik7CisJICBmcmFtZS0+bG9jYXRlX3N5bXMgPSByZWFk X3N0YWNrX3RvcCAoZnJhbWUpLT51LnZlY3Rvci5vbGRfbG9jYXRlX3N5bXM7CisJICBvYmogPSBi eXRlY29kZV9mcm9tX3Jldl9saXN0IChmcmFtZSxyZWFkX3N0YWNrX3BvcCAoZnJhbWUpLT51LnZl Y3Rvci5lbGVtcyk7CiAJICBicmVhazsKIAljYXNlIFJFX2NoYXJfdGFibGU6Ci0JICBsb2NhdGVf c3ltcyA9IHJlYWRfc3RhY2tfdG9wICgpLT51LnZlY3Rvci5vbGRfbG9jYXRlX3N5bXM7Ci0JICBv YmogPSBjaGFyX3RhYmxlX2Zyb21fcmV2X2xpc3QgKHJlYWRfc3RhY2tfcG9wICgpLT51LnZlY3Rv ci5lbGVtcywKLQkJCQkJICByZWFkY2hhcmZ1bik7CisJICBmcmFtZS0+bG9jYXRlX3N5bXMgPSBy ZWFkX3N0YWNrX3RvcCAoZnJhbWUpLT51LnZlY3Rvci5vbGRfbG9jYXRlX3N5bXM7CisJICBvYmog PSBjaGFyX3RhYmxlX2Zyb21fcmV2X2xpc3QgKGZyYW1lLCByZWFkX3N0YWNrX3BvcCAoZnJhbWUp LT51LnZlY3Rvci5lbGVtcyk7CiAJICBicmVhazsKIAljYXNlIFJFX3N1Yl9jaGFyX3RhYmxlOgot CSAgbG9jYXRlX3N5bXMgPSByZWFkX3N0YWNrX3RvcCAoKS0+dS52ZWN0b3Iub2xkX2xvY2F0ZV9z eW1zOwotCSAgb2JqID0gc3ViX2NoYXJfdGFibGVfZnJvbV9yZXZfbGlzdCAocmVhZF9zdGFja19w b3AgKCktPnUudmVjdG9yLmVsZW1zLAotCQkJCQkgICAgICByZWFkY2hhcmZ1bik7CisJICBmcmFt ZS0+bG9jYXRlX3N5bXMgPSByZWFkX3N0YWNrX3RvcCAoZnJhbWUpLT51LnZlY3Rvci5vbGRfbG9j YXRlX3N5bXM7CisJICBvYmogPSBzdWJfY2hhcl90YWJsZV9mcm9tX3Jldl9saXN0IChmcmFtZSwg cmVhZF9zdGFja19wb3AgKGZyYW1lKS0+dS52ZWN0b3IuZWxlbXMpOwogCSAgYnJlYWs7CiAJZGVm YXVsdDoKLQkgIGludmFsaWRfc3ludGF4ICgiXSIsIHJlYWRjaGFyZnVuKTsKKwkgIGludmFsaWRf c3ludGF4IChmcmFtZSwgIl0iKTsKIAkgIGJyZWFrOwogCX0KICAgICAgIGJyZWFrOwpAQCAtNDA4 NSwxMyArNTU1NywxMyBAQCByZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJvb2wgbG9j YXRlX3N5bXMpCiAKIAkqcCsrID0gJyMnOwogCWludCBjaDsKLQlSRUFEX0FORF9CVUZGRVIgKGNo KTsKKwlSRUFEX0FORF9CVUZGRVIgKGZyYW1lLGNoKTsKIAogCXN3aXRjaCAoY2gpCiAJICB7CiAJ ICBjYXNlICdcJyc6CiAJICAgIC8qICMnWCAtLSBzcGVjaWFsIHN5bnRheCBmb3IgKGZ1bmN0aW9u IFgpICovCi0JICAgIHJlYWRfc3RhY2tfcHVzaCAoKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5KSB7 CisJICAgIHJlYWRfc3RhY2tfcHVzaCAoZnJhbWUsIChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkg ewogCQkudHlwZSA9IFJFX3NwZWNpYWwsCiAJCS51LnNwZWNpYWwuc3ltYm9sID0gUWZ1bmN0aW9u LAogCSAgICAgIH0pOwpAQCAtNDEwNCw4MiArNTU3Niw4MiBAQCByZWFkMCAoTGlzcF9PYmplY3Qg cmVhZGNoYXJmdW4sIGJvb2wgbG9jYXRlX3N5bXMpCiAKIAkgIGNhc2UgJ3MnOgogCSAgICAvKiAj cyguLi4pIC0tIGEgcmVjb3JkIG9yIGhhc2gtdGFibGUgKi8KLQkgICAgUkVBRF9BTkRfQlVGRkVS IChjaCk7CisJICAgIFJFQURfQU5EX0JVRkZFUiAoZnJhbWUsY2gpOwogCSAgICBpZiAoY2ggIT0g JygnKQogCSAgICAgIHsKLQkJVU5SRUFEIChjaCk7Ci0JCUlOVkFMSURfU1lOVEFYX1dJVEhfQlVG RkVSICgpOworCQlVTlJFQUQgKGZyYW1lLCBjaCk7CisJCUlOVkFMSURfU1lOVEFYX1dJVEhfQlVG RkVSIChmcmFtZSk7CiAJICAgICAgfQotCSAgICByZWFkX3N0YWNrX3B1c2ggKChzdHJ1Y3QgcmVh ZF9zdGFja19lbnRyeSkgeworCSAgICByZWFkX3N0YWNrX3B1c2ggKGZyYW1lLCAoc3RydWN0IHJl YWRfc3RhY2tfZW50cnkpIHsKIAkJLnR5cGUgPSBSRV9yZWNvcmQsCiAJCS51LnZlY3Rvci5lbGVt cyA9IFFuaWwsCi0JCS51LnZlY3Rvci5vbGRfbG9jYXRlX3N5bXMgPSBsb2NhdGVfc3ltcywKKwkJ LnUudmVjdG9yLm9sZF9sb2NhdGVfc3ltcyA9IGZyYW1lLT5sb2NhdGVfc3ltcywKIAkgICAgICB9 KTsKLQkgICAgbG9jYXRlX3N5bXMgPSBmYWxzZTsKKwkgICAgZnJhbWUtPmxvY2F0ZV9zeW1zID0g ZmFsc2U7CiAJICAgIGdvdG8gcmVhZF9vYmo7CiAKIAkgIGNhc2UgJ14nOgogCSAgICAvKiAjXlsu Li5dICAtLSBjaGFyLXRhYmxlCiAJICAgICAgICNeXlsuLi5dIC0tIHN1Yi1jaGFyLXRhYmxlICov Ci0JICAgIFJFQURfQU5EX0JVRkZFUiAoY2gpOworCSAgICBSRUFEX0FORF9CVUZGRVIgKGZyYW1l LGNoKTsKIAkgICAgaWYgKGNoID09ICdeJykKIAkgICAgICB7Ci0JCWNoID0gUkVBRENIQVI7CisJ CWNoID0gUkVBRENIQVIgKGZyYW1lKTsKIAkJaWYgKGNoID09ICdbJykKIAkJICB7Ci0JCSAgICBy ZWFkX3N0YWNrX3B1c2ggKChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkgeworCQkgICAgcmVhZF9z dGFja19wdXNoIChmcmFtZSwgKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5KSB7CiAJCQkudHlwZSA9 IFJFX3N1Yl9jaGFyX3RhYmxlLAogCQkJLnUudmVjdG9yLmVsZW1zID0gUW5pbCwKLQkJCS51LnZl Y3Rvci5vbGRfbG9jYXRlX3N5bXMgPSBsb2NhdGVfc3ltcywKKwkJCS51LnZlY3Rvci5vbGRfbG9j YXRlX3N5bXMgPSBmcmFtZS0+bG9jYXRlX3N5bXMsCiAJCSAgICAgIH0pOwotCQkgICAgbG9jYXRl X3N5bXMgPSBmYWxzZTsKKwkJICAgIGZyYW1lLT5sb2NhdGVfc3ltcyA9IGZhbHNlOwogCQkgICAg Z290byByZWFkX29iajsKIAkJICB9CiAJCWVsc2UKIAkJICB7Ci0JCSAgICBVTlJFQUQgKGNoKTsK LQkJICAgIElOVkFMSURfU1lOVEFYX1dJVEhfQlVGRkVSICgpOworCQkgICAgVU5SRUFEIChmcmFt ZSwgY2gpOworCQkgICAgSU5WQUxJRF9TWU5UQVhfV0lUSF9CVUZGRVIgKGZyYW1lKTsKIAkJICB9 CiAJICAgICAgfQogCSAgICBlbHNlIGlmIChjaCA9PSAnWycpCiAJICAgICAgewotCQlyZWFkX3N0 YWNrX3B1c2ggKChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkgeworCQlyZWFkX3N0YWNrX3B1c2gg KGZyYW1lLCAoc3RydWN0IHJlYWRfc3RhY2tfZW50cnkpIHsKIAkJICAgIC50eXBlID0gUkVfY2hh cl90YWJsZSwKIAkJICAgIC51LnZlY3Rvci5lbGVtcyA9IFFuaWwsCi0JCSAgICAudS52ZWN0b3Iu b2xkX2xvY2F0ZV9zeW1zID0gbG9jYXRlX3N5bXMsCisJCSAgICAudS52ZWN0b3Iub2xkX2xvY2F0 ZV9zeW1zID0gZnJhbWUtPmxvY2F0ZV9zeW1zLAogCQkgIH0pOwotCQlsb2NhdGVfc3ltcyA9IGZh bHNlOworCQlmcmFtZS0+bG9jYXRlX3N5bXMgPSBmYWxzZTsKIAkJZ290byByZWFkX29iajsKIAkg ICAgICB9CiAJICAgIGVsc2UKIAkgICAgICB7Ci0JCVVOUkVBRCAoY2gpOwotCQlJTlZBTElEX1NZ TlRBWF9XSVRIX0JVRkZFUiAoKTsKKwkJVU5SRUFEIChmcmFtZSwgY2gpOworCQlJTlZBTElEX1NZ TlRBWF9XSVRIX0JVRkZFUiAoZnJhbWUpOwogCSAgICAgIH0KIAogCSAgY2FzZSAnKCc6CiAJICAg IC8qICMoLi4uKSAtLSBzdHJpbmcgd2l0aCBwcm9wZXJ0aWVzICovCi0JICAgIHJlYWRfc3RhY2tf cHVzaCAoKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5KSB7CisJICAgIHJlYWRfc3RhY2tfcHVzaCAo ZnJhbWUsIChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkgewogCQkudHlwZSA9IFJFX3N0cmluZ19w cm9wcywKIAkJLnUudmVjdG9yLmVsZW1zID0gUW5pbCwKLQkJLnUudmVjdG9yLm9sZF9sb2NhdGVf c3ltcyA9IGxvY2F0ZV9zeW1zLAorCQkudS52ZWN0b3Iub2xkX2xvY2F0ZV9zeW1zID0gZnJhbWUt PmxvY2F0ZV9zeW1zLAogCSAgICAgIH0pOwotCSAgICBsb2NhdGVfc3ltcyA9IGZhbHNlOworCSAg ICBmcmFtZS0+bG9jYXRlX3N5bXMgPSBmYWxzZTsKIAkgICAgZ290byByZWFkX29iajsKIAogCSAg Y2FzZSAnWyc6CiAJICAgIC8qICNbLi4uXSAtLSBieXRlLWNvZGUgKi8KLQkgICAgcmVhZF9zdGFj a19wdXNoICgoc3RydWN0IHJlYWRfc3RhY2tfZW50cnkpIHsKKwkgICAgcmVhZF9zdGFja19wdXNo IChmcmFtZSwgKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5KSB7CiAJCS50eXBlID0gUkVfYnl0ZV9j b2RlLAogCQkudS52ZWN0b3IuZWxlbXMgPSBRbmlsLAotCQkudS52ZWN0b3Iub2xkX2xvY2F0ZV9z eW1zID0gbG9jYXRlX3N5bXMsCisJCS51LnZlY3Rvci5vbGRfbG9jYXRlX3N5bXMgPSBmcmFtZS0+ bG9jYXRlX3N5bXMsCiAJICAgICAgfSk7Ci0JICAgIGxvY2F0ZV9zeW1zID0gZmFsc2U7CisJICAg IGZyYW1lLT5sb2NhdGVfc3ltcyA9IGZhbHNlOwogCSAgICBnb3RvIHJlYWRfb2JqOwogCiAJICBj YXNlICcmJzoKIAkgICAgLyogIyZOIi4uLiIgLS0gYm9vbC12ZWN0b3IgKi8KLQkgICAgb2JqID0g cmVhZF9ib29sX3ZlY3RvciAocmVhZGNoYXJmdW4pOworCSAgICBvYmogPSByZWFkX2Jvb2xfdmVj dG9yIChmcmFtZSk7CiAJICAgIGJyZWFrOwogCiAJICBjYXNlICchJzoKQEAgLTQxODgsMzEgKzU2 NjAsMzEgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBib29sIGxvY2F0ZV9zeW1z KQogCSAgICB7CiAJICAgICAgaW50IGM7CiAJICAgICAgZG8KLQkJYyA9IFJFQURDSEFSOworCQlj ID0gUkVBRENIQVIgKGZyYW1lKTsKIAkgICAgICB3aGlsZSAoYyA+PSAwICYmIGMgIT0gJ1xuJyk7 CiAJICAgICAgZ290byByZWFkX29iajsKIAkgICAgfQogCiAJICBjYXNlICd4JzoKIAkgIGNhc2Ug J1gnOgotCSAgICBvYmogPSByZWFkX2ludGVnZXIgKHJlYWRjaGFyZnVuLCAxNik7CisJICAgIG9i aiA9IHJlYWRfaW50ZWdlciAoZnJhbWUsIDE2KTsKIAkgICAgYnJlYWs7CiAKIAkgIGNhc2UgJ28n OgogCSAgY2FzZSAnTyc6Ci0JICAgIG9iaiA9IHJlYWRfaW50ZWdlciAocmVhZGNoYXJmdW4sIDgp OworCSAgICBvYmogPSByZWFkX2ludGVnZXIgKGZyYW1lLCA4KTsKIAkgICAgYnJlYWs7CiAKIAkg IGNhc2UgJ2InOgogCSAgY2FzZSAnQic6Ci0JICAgIG9iaiA9IHJlYWRfaW50ZWdlciAocmVhZGNo YXJmdW4sIDIpOworCSAgICBvYmogPSByZWFkX2ludGVnZXIgKGZyYW1lLCAyKTsKIAkgICAgYnJl YWs7CiAKIAkgIGNhc2UgJ0AnOgogCSAgICAvKiAjQE5VTUJFUiBpcyB1c2VkIHRvIHNraXAgTlVN QkVSIGZvbGxvd2luZyBieXRlcy4KIAkgICAgICAgVGhhdCdzIHVzZWQgaW4gLmVsYyBmaWxlcyB0 byBza2lwIG92ZXIgZG9jIHN0cmluZ3MKIAkgICAgICAgYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25z IHRoYXQgY2FuIGJlIGxvYWRlZCBsYXppbHkuICAqLwotCSAgICBpZiAoc2tpcF9sYXp5X3N0cmlu ZyAocmVhZGNoYXJmdW4pKQorCSAgICBpZiAoc2tpcF9sYXp5X3N0cmluZyAoZnJhbWUpKQogCSAg ICAgIGdvdG8gcmVhZF9vYmo7CiAJICAgIG9iaiA9IFFuaWw7CSAgICAgIC8qICNAMDAgc2tpcHMg dG8gRU9CL0VPRiBhbmQgeWllbGRzIG5pbC4gICovCiAJICAgIGJyZWFrOwpAQCAtNDIyNCwxNCAr NTY5NiwxNCBAQCByZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJvb2wgbG9jYXRlX3N5 bXMpCiAKIAkgIGNhc2UgJzonOgogCSAgICAvKiAjOlggLS0gdW5pbnRlcm5lZCBzeW1ib2wgKi8K LQkgICAgYyA9IFJFQURDSEFSOworCSAgICBjID0gUkVBRENIQVIgKGZyYW1lKTsKIAkgICAgaWYg KGMgPD0gMzIgfHwgYyA9PSBOT19CUkVBS19TUEFDRQogCQl8fCBjID09ICciJyB8fCBjID09ICdc JycgfHwgYyA9PSAnOycgfHwgYyA9PSAnIycKIAkJfHwgYyA9PSAnKCcgfHwgYyA9PSAnKScgIHx8 IGMgPT0gJ1snIHx8IGMgPT0gJ10nCiAJCXx8IGMgPT0gJ2AnIHx8IGMgPT0gJywnKQogCSAgICAg IHsKIAkJLyogTm8gc3ltYm9sIGNoYXJhY3RlciBmb2xsb3dzOiB0aGlzIGlzIHRoZSBlbXB0eSBz eW1ib2wuICAqLwotCQlVTlJFQUQgKGMpOworCQlVTlJFQUQgKGZyYW1lLCBjKTsKIAkJb2JqID0g Rm1ha2Vfc3ltYm9sIChlbXB0eV91bmlieXRlX3N0cmluZyk7CiAJCWJyZWFrOwogCSAgICAgIH0K QEAgLTQyNDEsMTQgKzU3MTMsMTQgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBi b29sIGxvY2F0ZV9zeW1zKQogCiAJICBjYXNlICdfJzoKIAkgICAgLyogI19YIC0tIHN5bWJvbCB3 aXRob3V0IHNob3J0aGFuZCAqLwotCSAgICBjID0gUkVBRENIQVI7CisJICAgIGMgPSBSRUFEQ0hB UiAoZnJhbWUpOwogCSAgICBpZiAoYyA8PSAzMiB8fCBjID09IE5PX0JSRUFLX1NQQUNFCiAJCXx8 IGMgPT0gJyInIHx8IGMgPT0gJ1wnJyB8fCBjID09ICc7JyB8fCBjID09ICcjJwogCQl8fCBjID09 ICcoJyB8fCBjID09ICcpJyAgfHwgYyA9PSAnWycgfHwgYyA9PSAnXScKIAkJfHwgYyA9PSAnYCcg fHwgYyA9PSAnLCcpCiAJICAgICAgewogCQkvKiBObyBzeW1ib2wgY2hhcmFjdGVyIGZvbGxvd3M6 IHRoaXMgaXMgdGhlIGVtcHR5IHN5bWJvbC4gICovCi0JCVVOUkVBRCAoYyk7CisJCVVOUkVBRCAo ZnJhbWUsIGMpOwogCQlvYmogPSBGaW50ZXJuIChlbXB0eV91bmlieXRlX3N0cmluZywgUW5pbCk7 CiAJCWJyZWFrOwogCSAgICAgIH0KQEAgLTQyNjQsMTkgKzU3MzYsMTkgQEAgcmVhZDAgKExpc3Bf T2JqZWN0IHJlYWRjaGFyZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogCQlpbnQgYzsKIAkJZm9yICg7 OykKIAkJICB7Ci0JCSAgICBSRUFEX0FORF9CVUZGRVIgKGMpOworCQkgICAgUkVBRF9BTkRfQlVG RkVSIChmcmFtZSxjKTsKIAkJICAgIGlmIChjIDwgJzAnIHx8IGMgPiAnOScpCiAJCSAgICAgIGJy ZWFrOwogCQkgICAgaWYgKGNrZF9tdWwgKCZuLCBuLCAxMCkKIAkJCXx8IGNrZF9hZGQgKCZuLCBu LCBjIC0gJzAnKSkKLQkJICAgICAgSU5WQUxJRF9TWU5UQVhfV0lUSF9CVUZGRVIgKCk7CisJCSAg ICAgIElOVkFMSURfU1lOVEFYX1dJVEhfQlVGRkVSIChmcmFtZSk7CiAJCSAgfQogCQlpZiAoYyA9 PSAncicgfHwgYyA9PSAnUicpCiAJCSAgewogCQkgICAgLyogI05yRElHSVRTIC0tIHJhZGl4LU4g bnVtYmVyICovCiAJCSAgICBpZiAobiA8IDIgfHwgbiA+IDM2KQotCQkgICAgICBpbnZhbGlkX3Jh ZGl4X2ludGVnZXIgKG4sIHJlYWRjaGFyZnVuKTsKLQkJICAgIG9iaiA9IHJlYWRfaW50ZWdlciAo cmVhZGNoYXJmdW4sIG4pOworCQkgICAgICBpbnZhbGlkX3JhZGl4X2ludGVnZXIgKGZyYW1lLG4p OworCQkgICAgb2JqID0gcmVhZF9pbnRlZ2VyIChmcmFtZSwgbik7CiAJCSAgICBicmVhazsKIAkJ ICB9CiAJCWVsc2UgaWYgKG4gPD0gTU9TVF9QT1NJVElWRV9GSVhOVU0gJiYgIU5JTFAgKFZyZWFk X2NpcmNsZSkpCkBAIC00Mjg3LDcgKzU3NTksNyBAQCByZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNo YXJmdW4sIGJvb2wgbG9jYXRlX3N5bXMpCiAJCQlMaXNwX09iamVjdCBwbGFjZWhvbGRlciA9IEZj b25zIChRbmlsLCBRbmlsKTsKIAogCQkJc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaAotCQkJICA9 IFhIQVNIX1RBQkxFIChyZWFkX29iamVjdHNfbWFwKTsKKwkJCSAgPSBYSEFTSF9UQUJMRSAoZnJh bWUtPm9iamVjdHNfbWFwKTsKIAkJCUxpc3BfT2JqZWN0IG51bWJlciA9IG1ha2VfZml4bnVtIChu KTsKIAkJCWhhc2hfaGFzaF90IGhhc2g7CiAJCQlwdHJkaWZmX3QgaSA9IGhhc2hfZmluZF9nZXRf aGFzaCAoaCwgbnVtYmVyLCAmaGFzaCk7CkBAIC00Mjk2LDcgKzU3NjgsNyBAQCByZWFkMCAoTGlz cF9PYmplY3QgcmVhZGNoYXJmdW4sIGJvb2wgbG9jYXRlX3N5bXMpCiAJCQkgIHNldF9oYXNoX3Zh bHVlX3Nsb3QgKGgsIGksIHBsYWNlaG9sZGVyKTsKIAkJCWVsc2UKIAkJCSAgaGFzaF9wdXQgKGgs IG51bWJlciwgcGxhY2Vob2xkZXIsIGhhc2gpOwotCQkJcmVhZF9zdGFja19wdXNoICgoc3RydWN0 IHJlYWRfc3RhY2tfZW50cnkpIHsKKwkJCXJlYWRfc3RhY2tfcHVzaCAoZnJhbWUsIChzdHJ1Y3Qg cmVhZF9zdGFja19lbnRyeSkgewogCQkJICAgIC50eXBlID0gUkVfbnVtYmVyZWQsCiAJCQkgICAg LnUubnVtYmVyZWQubnVtYmVyID0gbnVtYmVyLAogCQkJICAgIC51Lm51bWJlcmVkLnBsYWNlaG9s ZGVyID0gcGxhY2Vob2xkZXIsCkBAIC00MzA3LDQyICs1Nzc5LDQyIEBAIHJlYWQwIChMaXNwX09i amVjdCByZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3ltcykKIAkJICAgICAgewogCQkJLyogI04j IC0tIHJlZmVyZW5jZSB0byBudW1iZXJlZCBvYmplY3QgKi8KIAkJCXN0cnVjdCBMaXNwX0hhc2hf VGFibGUgKmgKLQkJCSAgPSBYSEFTSF9UQUJMRSAocmVhZF9vYmplY3RzX21hcCk7CisJCQkgID0g WEhBU0hfVEFCTEUgKGZyYW1lLT5vYmplY3RzX21hcCk7CiAJCQlwdHJkaWZmX3QgaSA9IGhhc2hf ZmluZCAoaCwgbWFrZV9maXhudW0gKG4pKTsKIAkJCWlmIChpIDwgMCkKLQkJCSAgSU5WQUxJRF9T WU5UQVhfV0lUSF9CVUZGRVIgKCk7CisJCQkgIElOVkFMSURfU1lOVEFYX1dJVEhfQlVGRkVSIChm cmFtZSk7CiAJCQlvYmogPSBIQVNIX1ZBTFVFIChoLCBpKTsKIAkJCWJyZWFrOwogCQkgICAgICB9 CiAJCSAgICBlbHNlCi0JCSAgICAgIElOVkFMSURfU1lOVEFYX1dJVEhfQlVGRkVSICgpOworCQkg ICAgICBJTlZBTElEX1NZTlRBWF9XSVRIX0JVRkZFUiAoZnJhbWUpOwogCQkgIH0KIAkJZWxzZQot CQkgIElOVkFMSURfU1lOVEFYX1dJVEhfQlVGRkVSICgpOworCQkgIElOVkFMSURfU1lOVEFYX1dJ VEhfQlVGRkVSIChmcmFtZSk7CiAJICAgICAgfQogCSAgICBlbHNlCi0JICAgICAgSU5WQUxJRF9T WU5UQVhfV0lUSF9CVUZGRVIgKCk7CisJICAgICAgSU5WQUxJRF9TWU5UQVhfV0lUSF9CVUZGRVIg KGZyYW1lKTsKIAkgIH0KIAlicmVhazsKICAgICAgIH0KIAogICAgIGNhc2UgJz8nOgotICAgICAg b2JqID0gcmVhZF9jaGFyX2xpdGVyYWwgKHJlYWRjaGFyZnVuKTsKKyAgICAgIG9iaiA9IHJlYWRf Y2hhcl9saXRlcmFsIChmcmFtZSk7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgJyInOgotICAg ICAgb2JqID0gcmVhZF9zdHJpbmdfbGl0ZXJhbCAocmVhZGNoYXJmdW4pOworICAgICAgb2JqID0g cmVhZF9zdHJpbmdfbGl0ZXJhbCAoZnJhbWUpOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlICdc Jyc6Ci0gICAgICByZWFkX3N0YWNrX3B1c2ggKChzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSkgewor ICAgICAgcmVhZF9zdGFja19wdXNoIChmcmFtZSwgKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5KSB7 CiAJICAudHlwZSA9IFJFX3NwZWNpYWwsCiAJICAudS5zcGVjaWFsLnN5bWJvbCA9IFFxdW90ZSwK IAl9KTsKICAgICAgIGdvdG8gcmVhZF9vYmo7CiAKICAgICBjYXNlICdgJzoKLSAgICAgIHJlYWRf c3RhY2tfcHVzaCAoKHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5KSB7CisgICAgICByZWFkX3N0YWNr X3B1c2ggKGZyYW1lLCAoc3RydWN0IHJlYWRfc3RhY2tfZW50cnkpIHsKIAkgIC50eXBlID0gUkVf c3BlY2lhbCwKIAkgIC51LnNwZWNpYWwuc3ltYm9sID0gUWJhY2txdW90ZSwKIAl9KTsKQEAgLTQz NTAsMTcgKzU4MjIsMTcgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBib29sIGxv Y2F0ZV9zeW1zKQogCiAgICAgY2FzZSAnLCc6CiAgICAgICB7Ci0JaW50IGNoID0gUkVBRENIQVI7 CisJaW50IGNoID0gUkVBRENIQVIgKGZyYW1lKTsKIAlMaXNwX09iamVjdCBzeW07CiAJaWYgKGNo ID09ICdAJykKIAkgIHN5bSA9IFFjb21tYV9hdDsKIAllbHNlCiAJICB7CiAJICAgIGlmIChjaCA+ PSAwKQotCSAgICAgIFVOUkVBRCAoY2gpOworCSAgICAgIFVOUkVBRCAoZnJhbWUsIGNoKTsKIAkg ICAgc3ltID0gUWNvbW1hOwogCSAgfQotCXJlYWRfc3RhY2tfcHVzaCAoKHN0cnVjdCByZWFkX3N0 YWNrX2VudHJ5KSB7CisJcmVhZF9zdGFja19wdXNoIChmcmFtZSwgKHN0cnVjdCByZWFkX3N0YWNr X2VudHJ5KSB7CiAJICAgIC50eXBlID0gUkVfc3BlY2lhbCwKIAkgICAgLnUuc3BlY2lhbC5zeW1i b2wgPSBzeW0sCiAJICB9KTsKQEAgLTQzNzEsMjcgKzU4NDMsMjcgQEAgcmVhZDAgKExpc3BfT2Jq ZWN0IHJlYWRjaGFyZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogICAgICAgewogCWludCBjOwogCWRv Ci0JICBjID0gUkVBRENIQVI7CisJICBjID0gUkVBRENIQVIgKGZyYW1lKTsKIAl3aGlsZSAoYyA+ PSAwICYmIGMgIT0gJ1xuJyk7CiAJZ290byByZWFkX29iajsKICAgICAgIH0KIAogICAgIGNhc2Ug Jy4nOgogICAgICAgewotCWludCBuY2ggPSBSRUFEQ0hBUjsKLQlVTlJFQUQgKG5jaCk7CisJaW50 IG5jaCA9IFJFQURDSEFSIChmcmFtZSk7CisJVU5SRUFEIChmcmFtZSwgbmNoKTsKIAlpZiAobmNo IDw9IDMyIHx8IG5jaCA9PSBOT19CUkVBS19TUEFDRQogCSAgICB8fCBuY2ggPT0gJyInIHx8IG5j aCA9PSAnXCcnIHx8IG5jaCA9PSAnOycKIAkgICAgfHwgbmNoID09ICcoJyB8fCBuY2ggPT0gJ1sn IHx8IG5jaCA9PSAnIycKIAkgICAgfHwgbmNoID09ICc/JyB8fCBuY2ggPT0gJ2AnIHx8IG5jaCA9 PSAnLCcpCiAJICB7Ci0JICAgIGlmICghcmVhZF9zdGFja19lbXB0eV9wIChiYXNlX3NwKQotCQkm JiByZWFkX3N0YWNrX3RvcCAoKS0+dHlwZSA9PSAgUkVfbGlzdCkKKwkgICAgaWYgKCFyZWFkX3N0 YWNrX2VtcHR5X3AgKGZyYW1lKQorCQkmJiByZWFkX3N0YWNrX3RvcCAoZnJhbWUpLT50eXBlID09 ICBSRV9saXN0KQogCSAgICAgIHsKLQkJcmVhZF9zdGFja190b3AgKCktPnR5cGUgPSBSRV9saXN0 X2RvdDsKKwkJcmVhZF9zdGFja190b3AgKGZyYW1lKS0+dHlwZSA9IFJFX2xpc3RfZG90OwogCQln b3RvIHJlYWRfb2JqOwogCSAgICAgIH0KLQkgICAgaW52YWxpZF9zeW50YXggKCIuIiwgcmVhZGNo YXJmdW4pOworCSAgICBpbnZhbGlkX3N5bnRheCAoZnJhbWUsICIuIik7CiAJICB9CiAgICAgICB9 CiAgICAgICAvKiBtYXkgYmUgYSBudW1iZXIgb3Igc3ltYm9sIHN0YXJ0aW5nIHdpdGggYSBkb3Qg Ki8KQEAgLTQ0MDksNyArNTg4MSw3IEBAIHJlYWQwIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwg Ym9vbCBsb2NhdGVfc3ltcykKIAljaGFyICpwID0gcmVhZF9idWZmZXI7CiAJY2hhciAqZW5kID0g cmVhZF9idWZmZXIgKyByZWFkX2J1ZmZlcl9zaXplOwogCWJvb2wgcXVvdGVkID0gZmFsc2U7Ci0J RU1BQ1NfSU5UIHN0YXJ0X3Bvc2l0aW9uID0gcmVhZGNoYXJfb2Zmc2V0IC0gMTsKKwlFTUFDU19J TlQgc3RhcnRfcG9zaXRpb24gPSBmcmFtZS0+Y2hhcl9vZmZzZXQgLSAxOwogCiAJZG8KIAkgIHsK QEAgLTQ0MjUsMTcgKzU4OTcsMTcgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBi b29sIGxvY2F0ZV9zeW1zKQogCiAJICAgIGlmIChjID09ICdcXCcpCiAJICAgICAgewotCQljID0g UkVBRENIQVI7CisJCWMgPSBSRUFEQ0hBUiAoZnJhbWUpOwogCQlpZiAoYyA8IDApCi0JCSAgZW5k X29mX2ZpbGVfZXJyb3IgKCk7CisJCSAgZW5kX29mX2ZpbGVfZXJyb3IgKGZyYW1lKTsKIAkJcXVv dGVkID0gdHJ1ZTsKIAkgICAgICB9CiAKLQkgICAgaWYgKG11bHRpYnl0ZSkKKwkgICAgaWYgKGZy YW1lLT5tdWx0aWJ5dGUpCiAJICAgICAgcCArPSBDSEFSX1NUUklORyAoYywgKHVuc2lnbmVkIGNo YXIgKikgcCk7CiAJICAgIGVsc2UKIAkgICAgICAqcCsrID0gYzsKLQkgICAgYyA9IFJFQURDSEFS OworCSAgICBjID0gUkVBRENIQVIgKGZyYW1lKTsKIAkgIH0KIAl3aGlsZSAoYyA+IDMyCiAJICAg ICAgICYmIGMgIT0gTk9fQlJFQUtfU1BBQ0UKQEAgLTQ0NDYsNyArNTkxOCw3IEBAIHJlYWQwIChM aXNwX09iamVjdCByZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3ltcykKIAogCSpwID0gMDsKIAlw dHJkaWZmX3QgbmJ5dGVzID0gcCAtIHJlYWRfYnVmZmVyOwotCVVOUkVBRCAoYyk7CisJVU5SRUFE IChmcmFtZSwgYyk7CiAKIAkvKiBPbmx5IGF0dGVtcHQgdG8gcGFyc2UgdGhlIHRva2VuIGFzIGEg bnVtYmVyIGlmIGl0IHN0YXJ0cyBhcyBvbmUuICAqLwogCWNoYXIgYzAgPSByZWFkX2J1ZmZlclsw XTsKQEAgLTQ0NjQsMTQgKzU5MzYsMTQgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVu LCBib29sIGxvY2F0ZV9zeW1zKQogCiAJLyogc3ltYm9sLCBwb3NzaWJseSB1bmludGVybmVkICov CiAJcHRyZGlmZl90IG5jaGFycwotCSAgPSAobXVsdGlieXRlCisJICA9IChmcmFtZS0+bXVsdGli eXRlCiAJICAgICA/IG11bHRpYnl0ZV9jaGFyc19pbl90ZXh0ICgodW5zaWduZWQgY2hhciAqKXJl YWRfYnVmZmVyLCBuYnl0ZXMpCiAJICAgICA6IG5ieXRlcyk7CiAJTGlzcF9PYmplY3QgcmVzdWx0 OwogCWlmICh1bmludGVybmVkX3N5bWJvbCkKIAkgIHsKIAkgICAgTGlzcF9PYmplY3QgbmFtZQot CSAgICAgID0gbWFrZV9zcGVjaWZpZWRfc3RyaW5nIChyZWFkX2J1ZmZlciwgbmNoYXJzLCBuYnl0 ZXMsIG11bHRpYnl0ZSk7CisJICAgICAgPSBtYWtlX3NwZWNpZmllZF9zdHJpbmcgKHJlYWRfYnVm ZmVyLCBuY2hhcnMsIG5ieXRlcywgZnJhbWUtPm11bHRpYnl0ZSk7CiAJICAgIHJlc3VsdCA9IEZt YWtlX3N5bWJvbCAobmFtZSk7CiAJICB9CiAJZWxzZQpAQCAtNDUwNywxOCArNTk3OSwxOCBAQCBy ZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJvb2wgbG9jYXRlX3N5bXMpCiAJCUxpc3Bf T2JqZWN0IG5hbWUgPSBtYWtlX3NwZWNpZmllZF9zdHJpbmcgKGxvbmdoYW5kLAogCQkJCQkJCSAg bG9uZ2hhbmRfY2hhcnMsCiAJCQkJCQkJICBsb25naGFuZF9ieXRlcywKLQkJCQkJCQkgIG11bHRp Ynl0ZSk7CisJCQkJCQkJICBmcmFtZS0+bXVsdGlieXRlKTsKIAkJeGZyZWUgKGxvbmdoYW5kKTsK IAkJcmVzdWx0ID0gaW50ZXJuX2RyaXZlciAobmFtZSwgb2JhcnJheSwgZm91bmQpOwogCSAgICAg IH0KIAkgICAgZWxzZQogCSAgICAgIHsKIAkJTGlzcF9PYmplY3QgbmFtZSA9IG1ha2Vfc3BlY2lm aWVkX3N0cmluZyAocmVhZF9idWZmZXIsIG5jaGFycywKLQkJCQkJCQkgIG5ieXRlcywgbXVsdGli eXRlKTsKKwkJCQkJCQkgIG5ieXRlcywgZnJhbWUtPm11bHRpYnl0ZSk7CiAJCXJlc3VsdCA9IGlu dGVybl9kcml2ZXIgKG5hbWUsIG9iYXJyYXksIGZvdW5kKTsKIAkgICAgICB9CiAJICB9Ci0JaWYg KGxvY2F0ZV9zeW1zICYmICFOSUxQIChyZXN1bHQpKQorCWlmIChmcmFtZS0+bG9jYXRlX3N5bXMg JiYgIU5JTFAgKHJlc3VsdCkpCiAJICByZXN1bHQgPSBidWlsZF9zeW1ib2xfd2l0aF9wb3MgKHJl c3VsdCwKIAkJCQkJICBtYWtlX2ZpeG51bSAoc3RhcnRfcG9zaXRpb24pKTsKIApAQCAtNDUyOSw5 ICs2MDAxLDkgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFyZnVuLCBib29sIGxvY2F0ZV9z eW1zKQogCiAgIC8qIFdlIGhhdmUgcmVhZCBhbiBvYmplY3QgaW4gYG9iaicuICBVc2UgdGhlIHN0 YWNrIHRvIGRlY2lkZSB3aGF0IHRvCiAgICAgIGRvIHdpdGggaXQuICAqLwotICB3aGlsZSAocmRz dGFjay5zcCA+IGJhc2Vfc3ApCisgIHdoaWxlIChmcmFtZS0+cmRzdGFjay5zcCA+IGZyYW1lLT5i YXNlX3NwKQogICAgIHsKLSAgICAgIHN0cnVjdCByZWFkX3N0YWNrX2VudHJ5ICplID0gcmVhZF9z dGFja190b3AgKCk7CisgICAgICBzdHJ1Y3QgcmVhZF9zdGFja19lbnRyeSAqZSA9IHJlYWRfc3Rh Y2tfdG9wIChmcmFtZSk7CiAgICAgICBzd2l0Y2ggKGUtPnR5cGUpCiAJewogCWNhc2UgUkVfbGlz dF9zdGFydDoKQEAgLTQ1NDksMTIgKzYwMjEsMTIgQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRj aGFyZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogCiAJY2FzZSBSRV9saXN0X2RvdDoKIAkgIHsKLQkg ICAgc2tpcF9zcGFjZV9hbmRfY29tbWVudHMgKHJlYWRjaGFyZnVuKTsKLQkgICAgaW50IGNoID0g UkVBRENIQVI7CisJICAgIHNraXBfc3BhY2VfYW5kX2NvbW1lbnRzIChmcmFtZSk7CisJICAgIGlu dCBjaCA9IFJFQURDSEFSIChmcmFtZSk7CiAJICAgIGlmIChjaCAhPSAnKScpCi0JICAgICAgaW52 YWxpZF9zeW50YXggKCJleHBlY3RlZCApIiwgcmVhZGNoYXJmdW4pOworCSAgICAgIGludmFsaWRf c3ludGF4IChmcmFtZSwgImV4cGVjdGVkICkiKTsKIAkgICAgWFNFVENEUiAoZS0+dS5saXN0LnRh aWwsIG9iaik7Ci0JICAgIHJlYWRfc3RhY2tfcG9wICgpOworCSAgICByZWFkX3N0YWNrX3BvcCAo ZnJhbWUpOwogCSAgICBvYmogPSBlLT51Lmxpc3QuaGVhZDsKIAogCSAgICAvKiBIYWNrOiBpbW1l ZGlhdGVseSBjb252ZXJ0ICgjJCAuIEZJWE5VTSkgdG8gdGhlIGNvcnJlc3BvbmRpbmcKQEAgLTQ1 NjMsNyArNjAzNSw3IEBAIHJlYWQwIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgYm9vbCBsb2Nh dGVfc3ltcykKIAkJJiYgQkFTRV9FUSAoWENBUiAob2JqKSwgVmxvYWRfZmlsZV9uYW1lKQogCQkm JiAhTklMUCAoWENBUiAob2JqKSkKIAkJJiYgRklYTlVNUCAoWENEUiAob2JqKSkpCi0JICAgICAg b2JqID0gZ2V0X2xhenlfc3RyaW5nIChvYmopOworCSAgICAgIG9iaiA9IGdldF9sYXp5X3N0cmlu ZyAoZnJhbWUsIG9iaik7CiAKIAkgICAgYnJlYWs7CiAJICB9CkBAIC00NTc4LDE5ICs2MDUwLDE5 IEBAIHJlYWQwIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3ltcykKIAkg IGdvdG8gcmVhZF9vYmo7CiAKIAljYXNlIFJFX3NwZWNpYWw6Ci0JICByZWFkX3N0YWNrX3BvcCAo KTsKKwkgIHJlYWRfc3RhY2tfcG9wIChmcmFtZSk7CiAJICBvYmogPSBsaXN0MiAoZS0+dS5zcGVj aWFsLnN5bWJvbCwgb2JqKTsKIAkgIGJyZWFrOwogCiAJY2FzZSBSRV9udW1iZXJlZDoKIAkgIHsK LQkgICAgcmVhZF9zdGFja19wb3AgKCk7CisJICAgIHJlYWRfc3RhY2tfcG9wIChmcmFtZSk7CiAJ ICAgIExpc3BfT2JqZWN0IHBsYWNlaG9sZGVyID0gZS0+dS5udW1iZXJlZC5wbGFjZWhvbGRlcjsK IAkgICAgaWYgKENPTlNQIChvYmopKQogCSAgICAgIHsKIAkJaWYgKEJBU0VfRVEgKG9iaiwgcGxh Y2Vob2xkZXIpKQogCQkgIC8qIENhdGNoIHNpbGx5IGdhbWVzIGxpa2UgIzE9IzEjICovCi0JCSAg aW52YWxpZF9zeW50YXggKCJub25zZW5zaWNhbCBzZWxmLXJlZmVyZW5jZSIsIHJlYWRjaGFyZnVu KTsKKwkJICBpbnZhbGlkX3N5bnRheCAoZnJhbWUsICJub25zZW5zaWNhbCBzZWxmLXJlZmVyZW5j ZSIpOwogCiAJCS8qIE9wdGltaXphdGlvbjogc2luY2UgdGhlIHBsYWNlaG9sZGVyIGlzIGFscmVh ZHkKIAkJICAgYSBjb25zLCByZXB1cnBvc2UgaXQgYXMgdGhlIGFjdHVhbCB2YWx1ZS4KQEAgLTQ2 MDEsNyArNjA3Myw3IEBAIHJlYWQwIChMaXNwX09iamVjdCByZWFkY2hhcmZ1biwgYm9vbCBsb2Nh dGVfc3ltcykKIAkJRnNldGNkciAocGxhY2Vob2xkZXIsIFhDRFIgKG9iaikpOwogCiAJCXN0cnVj dCBMaXNwX0hhc2hfVGFibGUgKmgyCi0JCSAgPSBYSEFTSF9UQUJMRSAocmVhZF9vYmplY3RzX2Nv bXBsZXRlZCk7CisJCSAgPSBYSEFTSF9UQUJMRSAoZnJhbWUtPm9iamVjdHNfY29tcGxldGVkKTsK IAkJaGFzaF9oYXNoX3QgaGFzaDsKIAkJcHRyZGlmZl90IGkgPSBoYXNoX2ZpbmRfZ2V0X2hhc2gg KGgyLCBwbGFjZWhvbGRlciwgJmhhc2gpOwogCQllYXNzZXJ0IChpIDwgMCk7CkBAIC00NjE2LDcg KzYwODgsNyBAQCByZWFkMCAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJvb2wgbG9jYXRlX3N5 bXMpCiAJCSAgICAmJiAhKFNUUklOR1AgKG9iaikgJiYgIXN0cmluZ19pbnRlcnZhbHMgKG9iaikp KQogCQkgIHsKIAkJICAgIHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgyCi0JCSAgICAgID0gWEhB U0hfVEFCTEUgKHJlYWRfb2JqZWN0c19jb21wbGV0ZWQpOworCQkgICAgICA9IFhIQVNIX1RBQkxF IChmcmFtZS0+b2JqZWN0c19jb21wbGV0ZWQpOwogCQkgICAgaGFzaF9oYXNoX3QgaGFzaDsKIAkJ ICAgIHB0cmRpZmZfdCBpID0gaGFzaF9maW5kX2dldF9oYXNoIChoMiwgb2JqLCAmaGFzaCk7CiAJ CSAgICBlYXNzZXJ0IChpIDwgMCk7CkBAIC00NjI1LDEwICs2MDk3LDEwIEBAIHJlYWQwIChMaXNw X09iamVjdCByZWFkY2hhcmZ1biwgYm9vbCBsb2NhdGVfc3ltcykKIAogCQkvKiBOb3cgcHV0IGl0 IGV2ZXJ5d2hlcmUgdGhlIHBsYWNlaG9sZGVyIHdhcy4uLiAgKi8KIAkJRmxyZWFkX19zdWJzdGl0 dXRlX29iamVjdF9pbl9zdWJ0cmVlIChvYmosIHBsYWNlaG9sZGVyLAotCQkJCQkJICAgICAgcmVh ZF9vYmplY3RzX2NvbXBsZXRlZCk7CisJCQkJCQkgICAgICBmcmFtZS0+b2JqZWN0c19jb21wbGV0 ZWQpOwogCiAJCS8qIC4uLmFuZCAjbiMgd2lsbCB1c2UgdGhlIHJlYWwgdmFsdWUgZnJvbSBub3cg b24uICAqLwotCQlzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpoID0gWEhBU0hfVEFCTEUgKHJlYWRf b2JqZWN0c19tYXApOworCQlzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpoID0gWEhBU0hfVEFCTEUg KGZyYW1lLT5vYmplY3RzX21hcCk7CiAJCWhhc2hfaGFzaF90IGhhc2g7CiAJCXB0cmRpZmZfdCBp ID0gaGFzaF9maW5kX2dldF9oYXNoIChoLCBlLT51Lm51bWJlcmVkLm51bWJlciwKIAkJCQkJCSAg Jmhhc2gpOwpAQCAtNDYzOSw3ICs2MTExLDggQEAgcmVhZDAgKExpc3BfT2JqZWN0IHJlYWRjaGFy ZnVuLCBib29sIGxvY2F0ZV9zeW1zKQogCSAgfQogCX0KICAgICB9Ci0KKyAgLyogQXR0ZW1wdCB0 byBmbHVzaCBhbnkgdW5yZWFkIGNoYXIgYW5kL29yIGJ1ZmZlcmVkIGJ5dGVzICovCisgIGNsb3Np bmdfdW5yZWFkY2hhciAoZnJhbWUpOwogICByZXR1cm4gdW5iaW5kX3RvIChiYXNlX3BkbCwgb2Jq KTsKIH0KIApAQCAtNDkwMCwxNCArNjM3Myw2IEBAIHN0cmluZ190b19udW1iZXIgKGNoYXIgY29u c3QgKnN0cmluZywgaW50IGJhc2UsIHB0cmRpZmZfdCAqcGxlbikKIH0KIAogDAotc3RhdGljIExp c3BfT2JqZWN0IGluaXRpYWxfb2JhcnJheTsKLQotLyogYG9ibG9va3VwJyBzdG9yZXMgdGhlIGJ1 Y2tldCBudW1iZXIgaGVyZSwgZm9yIHRoZSBzYWtlIG9mIEZ1bmludGVybi4gICovCi0KLXN0YXRp YyBzaXplX3Qgb2Jsb29rdXBfbGFzdF9idWNrZXRfbnVtYmVyOwotCi1zdGF0aWMgTGlzcF9PYmpl Y3QgbWFrZV9vYmFycmF5ICh1bnNpZ25lZCBiaXRzKTsKLQogLyogU2xvdyBwYXRoIG9iYXJyYXkg Y2hlY2s6IHJldHVybiB0aGUgb2JhcnJheSB0byB1c2Ugb3Igc2lnbmFsIGFuIGVycm9yLiAgKi8K IExpc3BfT2JqZWN0CiBjaGVja19vYmFycmF5X3Nsb3cgKExpc3BfT2JqZWN0IG9iYXJyYXkpCkBA IC01MTQ5LDE0ICs2NjE0LDE0IEBAIERFRlVOICgidW5pbnRlcm4iLCBGdW5pbnRlcm4sIFN1bmlu dGVybiwgMiwgMiwgMCwKIAkJCQkJU0NIQVJTIChzdHJpbmcpLCBTQllURVMgKHN0cmluZyksCiAJ CQkJCSZsb25naGFuZCwgJmxvbmdoYW5kX2NoYXJzLAogCQkJCQkmbG9uZ2hhbmRfYnl0ZXMpOwot ICBpZiAobG9uZ2hhbmQpCi0gICAgeGZyZWUobG9uZ2hhbmQpOwotCi0gIGlmIChGSVhOVU1QICh0 ZW0pKQotICAgIHJldHVybiBRbmlsOworICBpZiAoRklYTlVNUCAodGVtKQogICAvKiBJZiBhcmcg d2FzIGEgc3ltYm9sLCBkb24ndCBkZWxldGUgYW55dGhpbmcgYnV0IHRoYXQgc3ltYm9sIGl0c2Vs Zi4gICovCi0gIGlmIChCQVJFX1NZTUJPTF9QIChuYW1lKSAmJiAhQkFTRV9FUSAobmFtZSwgdGVt KSkKLSAgICByZXR1cm4gUW5pbDsKKyAgICAgIHx8IChCQVJFX1NZTUJPTF9QIChuYW1lKSAmJiAh QkFTRV9FUSAobmFtZSwgdGVtKSkpCisgICAgeworICAgICAgaWYgKGxvbmdoYW5kKQorCXhmcmVl IChsb25naGFuZCk7CisgICAgICByZXR1cm4gUW5pbDsKKyAgICB9CiAKICAgLyogVGhlcmUgYXJl IHBsZW50eSBvZiBvdGhlciBzeW1ib2xzIHdoaWNoIHdpbGwgc2NyZXcgdXAgdGhlIEVtYWNzCiAg ICAgIHNlc3Npb24gaWYgd2UgdW5pbnRlcm4gdGhlbSwgYXMgd2VsbCBhcyBldmVuIG1vcmUgd2F5 cyB0byB1c2UKQEAgLTUxNjgsNyArNjYzMywyNCBAQCBERUZVTiAoInVuaW50ZXJuIiwgRnVuaW50 ZXJuLCBTdW5pbnRlcm4sIDIsIDIsIDAsCiAgIHN0cnVjdCBMaXNwX1N5bWJvbCAqc3ltID0gWEJB UkVfU1lNQk9MICh0ZW0pOwogICBzeW0tPnUucy5pbnRlcm5lZCA9IFNZTUJPTF9VTklOVEVSTkVE OwogCi0gIHB0cmRpZmZfdCBpZHggPSBvYmxvb2t1cF9sYXN0X2J1Y2tldF9udW1iZXI7CisgIHB0 cmRpZmZfdCBpZHggPSAtMTsKKyAgeworICAgIC8qIFJlbW92ZWQgc3RhdGljIHZhcmlhYmxlIG9i bG9va3VwX2xhc3RfYnVja2V0X251bWJlciBtaWNyby1vcHRpbWl6YXRpb24KKyAgICAgICBEb24n dCB1c2UgYSBzdGF0aWMgdmFyaWFibGUganVzdCB0byBhdm9pZCB0aGlzCisgICAgICAgLSBob3cg ZnJlcXVlbnRseSB1c2VkIGlzIHVuaW50ZXJuIHRoYXQgdXNpbmcgYSBzdGF0aWMgdmFyaWFibGUK KyAgICAgICB0byBvcHRpbWl6ZSBhd2F5IHRoaXMgcmVkdW5kYW50IGluZGV4IGNhbGN1bGF0aW9u IHdvdWxkIGJlCisgICAgICAgd29ydGggYWRkaW5nIGEgc2Vjb25kIHJlZmVyZW5jZSBwYXJhbWV0 ZXI/ICovCisgICAgc3RydWN0IExpc3BfT2JhcnJheSAqbyA9IFhPQkFSUkFZIChvYmFycmF5KTsK KyAgICBpZiAobG9uZ2hhbmQpCisgICAgICB7CisJaWR4ID0gb2JhcnJheV9pbmRleCAobywgbG9u Z2hhbmQsIGxvbmdoYW5kX2J5dGVzKTsKKwl4ZnJlZSAobG9uZ2hhbmQpOworICAgICAgfQorICAg IGVsc2UKKyAgICAgIHsKKwlpZHggPSBvYmFycmF5X2luZGV4IChvLFNTREFUQSAoc3RyaW5nKSwg U0JZVEVTIChzdHJpbmcpKTsKKyAgICAgIH0KKyAgfQogICBMaXNwX09iamVjdCAqbG9jID0gJlhP QkFSUkFZIChvYmFycmF5KS0+YnVja2V0c1tpZHhdOwogCiAgIGVhc3NlcnQgKEJBUkVfU1lNQk9M X1AgKCpsb2MpKTsKQEAgLTUxOTQsNyArNjY3Niw3IEBAIERFRlVOICgidW5pbnRlcm4iLCBGdW5p bnRlcm4sIFN1bmludGVybiwgMiwgMiwgMCwKIAwKIAogLyogQnVja2V0IGluZGV4IG9mIHRoZSBz dHJpbmcgU1RSIG9mIGxlbmd0aCBTSVpFX0JZVEUgYnl0ZXMgaW4gb2JhcnJheSBPQS4gICovCi1z dGF0aWMgcHRyZGlmZl90CitwdHJkaWZmX3QKIG9iYXJyYXlfaW5kZXggKHN0cnVjdCBMaXNwX09i YXJyYXkgKm9hLCBjb25zdCBjaGFyICpzdHIsIHB0cmRpZmZfdCBzaXplX2J5dGUpCiB7CiAgIEVN QUNTX1VJTlQgaGFzaCA9IGhhc2hfY2hhcl9hcnJheSAoc3RyLCBzaXplX2J5dGUpOwpAQCAtNTIx NSw3ICs2Njk3LDYgQEAgb2Jsb29rdXAgKExpc3BfT2JqZWN0IG9iYXJyYXksIHJlZ2lzdGVyIGNv bnN0IGNoYXIgKnB0ciwgcHRyZGlmZl90IHNpemUsIHB0cmRpZmYKICAgcHRyZGlmZl90IGlkeCA9 IG9iYXJyYXlfaW5kZXggKG8sIHB0ciwgc2l6ZV9ieXRlKTsKICAgTGlzcF9PYmplY3QgYnVja2V0 ID0gby0+YnVja2V0c1tpZHhdOwogCi0gIG9ibG9va3VwX2xhc3RfYnVja2V0X251bWJlciA9IGlk eDsKICAgaWYgKCFCQVNFX0VRIChidWNrZXQsIG1ha2VfZml4bnVtICgwKSkpCiAgICAgewogICAg ICAgTGlzcF9PYmplY3Qgc3ltID0gYnVja2V0OwpAQCAtNTgwMSw3ICs3MjgyLDE1IEBAIGluaXRf bHJlYWQgKHZvaWQpCiAgIFZsb2FkX2ZpbGVfbmFtZSA9IFFuaWw7CiAgIFZsb2FkX3RydWVfZmls ZV9uYW1lID0gUW5pbDsKICAgVnN0YW5kYXJkX2lucHV0ID0gUXQ7Ci0gIFZsb2Fkc19pbl9wcm9n cmVzcyA9IFFuaWw7CisKKyAgc3RkaW5faW5maWxlLnMuc3RyZWFtID0gc3RkaW47CisgIHN0ZGlu X2luZmlsZS5zLmxvb2thaGVhZCA9IDA7CisgIG1lbXNldCAoc3RkaW5faW5maWxlLnMuYnVmLCAw LCBzaXplb2Yoc3RkaW5faW5maWxlLnMuYnVmKSk7CisgIC8qIFdlIHRyZWF0IHN0ZGluIGFzIGEg ZmlmbyBldmVuIGlmIGl0IHJlYWxseSBpcyBhIHJlZ3VsYXIgZmlsZSAqLworICBzdGRpbl9pbmZp bGUucy5zZWVrYWJsZSA9IGZhbHNlOworICBzdGRpbl9pbmZpbGUudW5yZWFkX2NoYXIgPSAtMTsK KyAgc3RkaW5faW5maWxlLnVucmVhZF9ieXRlcyA9IDA7CisgIHN0ZGluX2luZmlsZS5yZWFkX2Vv ZiA9IGZhbHNlOwogfQogCiAvKiBQcmludCBhIHdhcm5pbmcgdGhhdCBkaXJlY3RvcnkgaW50ZW5k ZWQgZm9yIHVzZSBVU0UgYW5kIHdpdGggbmFtZQpAQCAtNTgzOCw2ICs3MzI3LDE4NSBAQCBkaXJf d2FybmluZyAoY2hhciBjb25zdCAqdXNlLCBMaXNwX09iamVjdCBkaXJuYW1lKQogICAgIH0KIH0K IAordm9pZAorYWN0aXZhdGVfbHJlYWRfZnJhbWUgKGxyZWFkX2ZyYW1lICpuZXdfZnJhbWUsIGxy ZWFkX2ZyYW1lX3R5cGUgbmV3X3R5cGUpCit7CisgIHJlZ2lzdGVyIGxyZWFkX2ZyYW1lICpmcmFt ZSA9IGN1cnJlbnRfZnJhbWU7CisgIC8qIGFzc3VtZSB0eXBlLCBpbnR5cGUsIGlucHV0LCBhbmQg bG9jYXRlX3N5bXMKKyAgICAgZmllbGRzIGhhdmUgYmVlbiBpbml0aWFsaXplZCBieSBlbnRyeSBw b2ludCAqLworICBlYXNzZXJ0IChuZXdfZnJhbWUtPmludHlwZSAhPSBMUkVBRF9JTlBVVF9VTklO SVQpOworICAvKiBVcGRhdGUgdGhlIHN0ZGluIHN0cmVhbSBkYXRhIGFzIGl0IG1heSBiZSB1c2Vk IHJlY3Vyc2l2ZWx5ICovCisgIGlmIChmcmFtZSAmJiBmcmFtZS0+aW50eXBlID09IExSRUFEX0lO UFVUX0ZJTEUKKyAgICAgICYmIChmcmFtZS0+aW5wdXQuZi5zdHJlYW0gPT0gc3RkaW4pKQorICAg IHsKKyAgICAgIHN0ZGluX2luZmlsZS5zLmxvb2thaGVhZCA9IGZyYW1lLT5pbnB1dC5mLmxvb2th aGVhZDsKKyAgICAgIG1lbWNweSAoc3RkaW5faW5maWxlLnMuYnVmLCBmcmFtZS0+aW5wdXQuZi5i dWYsIHNpemVvZihzdGRpbl9pbmZpbGUucy5idWYpKTsKKyAgICAgIHN0ZGluX2luZmlsZS5ieXRl X29mZnNldCA9IGZyYW1lLT5ieXRlX29mZnNldDsKKyAgICAgIHN0ZGluX2luZmlsZS5jaGFyX29m ZnNldCA9IGZyYW1lLT5jaGFyX29mZnNldDsKKyAgICAgIHN0ZGluX2luZmlsZS51bnJlYWRfY2hh ciA9IGZyYW1lLT51bnJlYWRfY2hhcjsKKyAgICAgIHN0ZGluX2luZmlsZS51bnJlYWRfYnl0ZXMg PSBmcmFtZS0+dW5yZWFkX2J5dGVzOworICAgICAgc3RkaW5faW5maWxlLnJlYWRfZW9mID0gZnJh bWUtPnJlYWRfZW9mOworICAgIH0KKyAgaWYgKG5ld19mcmFtZSAhPSBmcmFtZSkKKyAgICAvKiBG bG9hZCBtYXkgcmV1c2UgYW4gYWN0aXZhdGVkIGR1bW15IGZyYW1lICovCisgICAgbmV3X2ZyYW1l LT5wcmV2ID0gZnJhbWU7CisgIGZyYW1lID0gbmV3X2ZyYW1lOworICBmcmFtZS0+dHlwZSA9IG5l d190eXBlOworICBpZiAoY3VycmVudF9mcmFtZSAmJiBjdXJyZW50X2ZyYW1lICE9IGZyYW1lKQor ICAgIGZyYW1lLT5sb2Fkc19pbl9wcm9ncmVzcyA9IGN1cnJlbnRfZnJhbWUtPmxvYWRzX2luX3By b2dyZXNzOworCisgIC8qIGNoYW5nZSB0aGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gYXMgbmVl ZGVkIGZvciBkaWZmZXJlbnQgaW5wdXQgdHlwZXMgKi8KKyAgc3dpdGNoIChmcmFtZS0+aW50eXBl KQorICAgIHsKKyAgICBjYXNlIExSRUFEX0lOUFVUX0ZJTEU6CisgICAgY2FzZSBMUkVBRF9JTlBV VF9GSUxFX01VTEU6CisgICAgICBpZiAoZnJhbWUtPmlucHV0LmYuc3RyZWFtID09IHN0ZGluKQor CXsKKwkgIGZyYW1lLT51bnJlYWRfY2hhciA9IHN0ZGluX2luZmlsZS51bnJlYWRfY2hhcjsKKwkg IGZyYW1lLT5yZWFkX2VvZiA9IHN0ZGluX2luZmlsZS5yZWFkX2VvZjsKKwkgIGZyYW1lLT5jaGFy X29mZnNldCA9IHN0ZGluX2luZmlsZS5jaGFyX29mZnNldDsKKwkgIGZyYW1lLT5ieXRlX29mZnNl dCA9IHN0ZGluX2luZmlsZS5ieXRlX29mZnNldDsKKwl9CisgICAgICBlbHNlIGlmIChmcmFtZS0+ aW5wdXQuZi5zZWVrYWJsZSAmJgorCSAgICAgICAoZnRlbGxvIChmcmFtZS0+aW5wdXQuZi5zdHJl YW0pICE9IDApKQorCXsKKwkgIGZzZWVrbyAoZnJhbWUtPmlucHV0LmYuc3RyZWFtLCAwLCBTRUVL X1NFVCk7CisJfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9TVFJJTkc6Cisg ICAgICB7CisJZnJhbWUtPmNoYXJfb2Zmc2V0ID0gZnJhbWUtPmlucHV0LnMuc3RhcnQ7CisJZnJh bWUtPmJ5dGVfb2Zmc2V0CisJICA9IHN0cmluZ19jaGFyX3RvX2J5dGUgKGZyYW1lLT5pbnB1dC5z LnN0cmluZywKKwkJCQkgZnJhbWUtPmlucHV0LnMuc3RhcnQpOworCS8qIGZyYW1lLT5tdWx0aWJ5 dGUgPSBTVFJJTkdfTVVMVElCWVRFIChmcmFtZS0+aW5wdXQucy5zdHJpbmcpOyAqLworICAgICAg fQorICAgICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9QUk9DRURVUkU6CisgICAgICBm cmFtZS0+Y2hhcl9vZmZzZXQgPSAwOworICAgICAgZnJhbWUtPmJ5dGVfb2Zmc2V0ID0gMDsKKyAg ICAgIC8qIGltcGxpY2l0bHkgZW5jb2RlZCBhcyBlbWFjcy1pbnRlcm5hbCwKKwkgYXMgd2Ugb25s eSBldmVyIHNlZSB0aGUgY2hhcmFjdGVyIHZhbHVlcyAqLworICAgICAgLyogZnJhbWUtPm11bHRp Ynl0ZSA9IExSRUFEX01VTFRJQllURV9UUlVFOyAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSBM UkVBRF9JTlBVVF9CVUZGRVI6CisgICAgICB7CisJc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIg KGZyYW1lLT5pbnB1dC5iLmJ1ZmZlcik7CisJZnJhbWUtPmNoYXJfb2Zmc2V0ID0gQlVGX1BUIChi KTsKKwlmcmFtZS0+Ynl0ZV9vZmZzZXQgPSBCVUZfUFRfQllURSAoYik7CisJLyogZnJhbWUtPm11 bHRpYnl0ZSA9ICEgTklMUCAoQlZBUiAoYiwgZW5hYmxlX211bHRpYnl0ZV9jaGFyYWN0ZXJzKSk7 ICovCisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIExSRUFEX0lOUFVUX01BUktFUjoK KyAgICAgIHsKKwlzdHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAoZnJhbWUtPmlucHV0Lm0uYi5i dWZmZXIpOworCWZyYW1lLT5jaGFyX29mZnNldCA9IEJVRl9QVCAoYik7CisJZnJhbWUtPmJ5dGVf b2Zmc2V0ID0gQlVGX1BUX0JZVEUgKGIpOworCS8qIGZyYW1lLT5tdWx0aWJ5dGUgPSAhIE5JTFAg KEJWQVIgKGIsIGVuYWJsZV9tdWx0aWJ5dGVfY2hhcmFjdGVycykpOyAqLworICAgICAgfQorICAg ICAgYnJlYWs7CisgICAgY2FzZSBMUkVBRF9JTlBVVF9CSU5BUlk6CisgICAgY2FzZSBMUkVBRF9J TlBVVF9OVUxMOgorICAgICAgLyogbm90aGluZyB0byBkbyAqLworICAgICAgYnJlYWs7CisgICAg Y2FzZSBMUkVBRF9JTlBVVF9JTkRJUkVDVDoKKyAgICAgIHsKKwlscmVhZF9mcmFtZSAqc291cmNl ID0gZnJhbWUtPmlucHV0LmZyYW1lLnNvdXJjZTsKKwkvKiBjb3B5IHRoZSBpdGVtcyB0aGF0IHJl ZmxlY3QgaW5mb3JtYXRpb24gZm9yICpyZWFkaW5nKiwKKwkgICBub3QgZXZhbHVhdGluZworCSAg IElmIHJlYWRlci1pbnB1dC1zdHJlYW0gaXMgY2FsbGVkIGR1cmluZyBhbiBpbnRlcnJ1cHQKKwkg ICBpbiB0aGUgbWlkZGxlIG9mIGEgcmVhZCwgd2UgaWdub3JlIGFueSBpbnRlcnJ1cHRpb24KKwkg ICBvZiBvYmplY3RfbWFwIGFuZCBvYmplY3RzX2NvbXBsZXRlZAorCSovCisJZnJhbWUtPnVucmVh ZF9jaGFyID0gc291cmNlLT51bnJlYWRfY2hhcjsKKwlmcmFtZS0+dW5yZWFkX2J5dGVzID0gc291 cmNlLT51bnJlYWRfYnl0ZXM7CisJZnJhbWUtPnJlYWRfZW9mID0gc291cmNlLT5yZWFkX2VvZjsK KwlmcmFtZS0+Y2hhcl9vZmZzZXQgPSBzb3VyY2UtPmNoYXJfb2Zmc2V0OworCWZyYW1lLT5ieXRl X29mZnNldCA9IHNvdXJjZS0+Ynl0ZV9vZmZzZXQ7CisJZnJhbWUtPnNhdmVkX3N0cmluZ3NbMF0g PSBzb3VyY2UtPnNhdmVkX3N0cmluZ3NbMF07CisJZnJhbWUtPnNhdmVkX3N0cmluZ3NbMV0gPSBz b3VyY2UtPnNhdmVkX3N0cmluZ3NbMV07CisJZnJhbWUtPm11bHRpYnl0ZSA9IHNvdXJjZS0+bXVs dGlieXRlOworCWZyYW1lLT5zdGFydCA9IHNvdXJjZS0+c3RhcnQ7CisJZnJhbWUtPmVuZCA9IHNv dXJjZS0+ZW5kOworCWZyYW1lLT5mdWxsX25hbWUgPSBzb3VyY2UtPmZ1bGxfbmFtZTsKKwlmcmFt ZS0+bmFtZSA9IHNvdXJjZS0+bmFtZTsKKwlmcmFtZS0+c291cmNlbmFtZSA9IHNvdXJjZS0+c291 cmNlbmFtZTsKKwlmcmFtZS0+bXVsZV9jaGFyc2V0ID0gc291cmNlLT5tdWxlX2NoYXJzZXQ7Cisg ICAgICB9CisgICAgICBicmVhazsKKyAgICAgIFVOUkVDT0dOSVpFRF9MUkVBRF9JTlBVVF9DQVNF UygiYWN0aXZhdGVfbHJlYWRfZnJhbWUiKTsKKyAgICB9CisgIGlmIChjdXJyZW50X2ZyYW1lICE9 IGZyYW1lKQorICAgIHsKKyAgICAgIC8qIGRvbid0IHBvcCB0d2ljZSAqLworICAgICAgZnJhbWUt PnJlc3RvcmVfZnJhbWVfaWR4ID0gU1BFQ1BETF9JTkRFWCgpOworICAgICAgcmVjb3JkX3Vud2lu ZF9wcm90ZWN0X3B0ciAocmVzdG9yZV9scmVhZF9mcmFtZSwgY3VycmVudF9mcmFtZSk7CisgICAg ICBjdXJyZW50X2ZyYW1lID0gZnJhbWU7CisgICAgfQorfQorCit2b2lkCityZXN0b3JlX2xyZWFk X2ZyYW1lICh2b2lkICpwKQoreworICByZWdpc3RlciBscmVhZF9mcmFtZSAqZnJhbWUgPSBjdXJy ZW50X2ZyYW1lOworCisgIC8qIFVwZGF0ZSB0aGUgc3RkaW4gc3RyZWFtIGRhdGEgYXMgaXQgbWF5 IGJlIHVzZWQgcmVjdXJzaXZlbHkgKi8KKyAgaWYgKGZyYW1lLT5pbnR5cGUgPT0gTFJFQURfSU5Q VVRfRklMRQorICAgICAgJiYgZnJhbWUtPmlucHV0LmYuc3RyZWFtID09IHN0ZGluKQorICAgIHsK KyAgICAgIHN0ZGluX2luZmlsZS5zLmxvb2thaGVhZCA9IGZyYW1lLT5pbnB1dC5mLmxvb2thaGVh ZDsKKyAgICAgIG1lbWNweSAoc3RkaW5faW5maWxlLnMuYnVmLCBmcmFtZS0+aW5wdXQuZi5idWYs IHNpemVvZihzdGRpbl9pbmZpbGUucy5idWYpKTsKKyAgICAgIHN0ZGluX2luZmlsZS51bnJlYWRf Y2hhciA9IGZyYW1lLT51bnJlYWRfY2hhcjsKKyAgICAgIHN0ZGluX2luZmlsZS5yZWFkX2VvZiA9 IGZyYW1lLT5yZWFkX2VvZjsKKyAgICAgIHN0ZGluX2luZmlsZS5jaGFyX29mZnNldCA9IGZyYW1l LT5jaGFyX29mZnNldDsKKyAgICAgIHN0ZGluX2luZmlsZS5ieXRlX29mZnNldCA9IGZyYW1lLT5i eXRlX29mZnNldDsKKyAgICB9CisgIGlmIChmcmFtZS0+aW50eXBlID09IExSRUFEX0lOUFVUX0lO RElSRUNUKQorICAgIHsKKyAgICAgIGxyZWFkX2ZyYW1lICpzb3VyY2UgPSBmcmFtZS0+aW5wdXQu ZnJhbWUuc291cmNlOworICAgICAgc291cmNlLT5zdGFydCA9IGZyYW1lLT5zdGFydDsKKyAgICAg IHNvdXJjZS0+ZW5kID0gZnJhbWUtPmVuZDsKKyAgICB9CisgIGZyYW1lID0gKGxyZWFkX2ZyYW1l ICopIHA7CisgIC8qIGNoYW5nZSB0aGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gYXMgbmVlZGVk IGZvciBkaWZmZXJlbnQgaW5wdXQgdHlwZXMgKi8KKyAgaWYgKGZyYW1lKQorICAgIHsKKyAgICAg IHN3aXRjaCAoZnJhbWUtPmludHlwZSkKKwl7CisJY2FzZSBMUkVBRF9JTlBVVF9GSUxFOgorCWNh c2UgTFJFQURfSU5QVVRfRklMRV9NVUxFOgorCSAgLyogSSdtIG5vdCBzdXJlIGFueXRoaW5nIGVs c2UgaGFzIGFjY2VzcyB0byB0aGVzZSBzdHJlYW0gb2JqZWN0cywKKwkgICAgIGV4Y2VwdCBtYXli ZSB0aHJvdWdoICJyZWFkZXItaW5wdXQtc3RyZWFtIiwKKwkgICAgIGJ1dCBqdXN0IGluIGNhc2Us IGVuc3VyZSB3ZSBhcmUgYXQgdGhlIHNhbWUgb2Zmc2V0CisJICAgICBPdGhlcndpc2UsIGVuc3Vy ZSAic2Vla2FibGUiIGZsYWcgaXMgb2ZmICovCisJICBpZiAoZnJhbWUtPmlucHV0LmYuc2Vla2Fi bGUpCisJICAgIHsKKwkgICAgICBmc2Vla28gKGZyYW1lLT5pbnB1dC5mLnN0cmVhbSwgKG9mZl90 KSBmcmFtZS0+Ynl0ZV9vZmZzZXQsIFNFRUtfU0VUKTsKKwkgICAgfQorCSAgYnJlYWs7CisJY2Fz ZSBMUkVBRF9JTlBVVF9TVFJJTkc6CisJY2FzZSBMUkVBRF9JTlBVVF9QUk9DRURVUkU6CisJICAv KiBNdWxpdGJ5dGUgY2Fubm90IGJlIGNoYW5nZWQgaGVyZSovCisJICBicmVhazsKKwljYXNlIExS RUFEX0lOUFVUX0JVRkZFUjoKKwljYXNlIExSRUFEX0lOUFVUX01BUktFUjoKKwkgIC8qIE1pZ2h0 IGhhdmUgY2hhbmdlZCBtdWx0aWJ5dGUqLworCSAgcmVwb3J0X2xyZWFkX211bHRpYnl0ZSAoZnJh bWUpOworCSAgaW5pdGlhbGl6ZV9yZWFkb25lY2hhciAoZnJhbWUpOworCSAgYnJlYWs7CisJY2Fz ZSBMUkVBRF9JTlBVVF9CSU5BUlk6CisJY2FzZSBMUkVBRF9JTlBVVF9OVUxMOgorCSAgLyogbm90 aGluZyB0byBkbyAqLworCSAgYnJlYWs7CisJY2FzZSBMUkVBRF9JTlBVVF9JTkRJUkVDVDoKKwkg IC8qIG5vdGhpbmcgdG8gZG8sIG1heWJlICovCisJICBicmVhazsKKwkgIFVOUkVDT0dOSVpFRF9M UkVBRF9JTlBVVF9DQVNFUygicmVzdG9yZV9scmVhZF9mcmFtZSIpOworCX0KKyAgICB9CisgIGN1 cnJlbnRfZnJhbWUgPSBmcmFtZTsKK30KKwogdm9pZAogc3ltc19vZl9scmVhZCAodm9pZCkKIHsK QEAgLTU4NTAsNiArNzUxOCw3IEBAIHN5bXNfb2ZfbHJlYWQgKHZvaWQpCiAgIGRlZnN1YnIgKCZT dW5pbnRlcm4pOwogICBkZWZzdWJyICgmU2dldF9sb2FkX3N1ZmZpeGVzKTsKICAgZGVmc3ViciAo JlNsb2FkKTsKKyAgZGVmc3ViciAoJlNldmFsX3N0cmVhbSk7CiAgIGRlZnN1YnIgKCZTZXZhbF9i dWZmZXIpOwogICBkZWZzdWJyICgmU2V2YWxfcmVnaW9uKTsKICAgZGVmc3ViciAoJlNyZWFkX2No YXIpOwpAQCAtNTg2Miw2ICs3NTMxLDcgQEAgc3ltc19vZl9scmVhZCAodm9pZCkKICAgZGVmc3Vi ciAoJlNvYmFycmF5cCk7CiAgIGRlZnN1YnIgKCZTb2JhcnJheV9jbGVhcik7CiAKKwogICBERUZW QVJfTElTUCAoIm9iYXJyYXkiLCBWb2JhcnJheSwKIAkgICAgICAgZG9jOiAvKiBTeW1ib2wgdGFi bGUgZm9yIHVzZSBieSBgaW50ZXJuJyBhbmQgYHJlYWQnLgogSXQgaXMgYSB2ZWN0b3Igd2hvc2Ug bGVuZ3RoIG91Z2h0IHRvIGJlIHByaW1lIGZvciBiZXN0IHJlc3VsdHMuCkBAIC02MTQ2LDExICs3 ODE2LDIyIEBAIHN5bXNfb2ZfbHJlYWQgKHZvaWQpCiAgIERFRlNZTSAoUXN0YW5kYXJkX2lucHV0 LCAic3RhbmRhcmQtaW5wdXQiKTsKICAgREVGU1lNIChRcmVhZF9jaGFyLCAicmVhZC1jaGFyIik7 CiAgIERFRlNZTSAoUWdldF9maWxlX2NoYXIsICJnZXQtZmlsZS1jaGFyIik7Ci0KKyAgREVGU1lN IChRcmVhZGVyX2lucHV0X3N0cmVhbSwgInJlYWRlci1pbnB1dC1zdHJlYW0iKTsKKyAgZGVmc3Vi ciAoJlNyZWFkZXJfaW5wdXRfc3RyZWFtKTsKICAgLyogVXNlZCBpbnN0ZWFkIG9mIFFnZXRfZmls ZV9jaGFyIHdoaWxlIGxvYWRpbmcgKi5lbGMgZmlsZXMgY29tcGlsZWQKICAgICAgYnkgRW1hY3Mg MjEgb3Igb2xkZXIuICAqLwogICBERUZTWU0gKFFnZXRfZW1hY3NfbXVsZV9maWxlX2NoYXIsICJn ZXQtZW1hY3MtbXVsZS1maWxlLWNoYXIiKTsKIAorICAvKiBUaGlzIGlzIGFuIGludGVybmFsIHNp Z25hbCBmb3Igc2tpcHBpbmcgaGFuZGxlcnMgd2hlbiBhbiBpbnRlcnJ1cHQKKyAgICAgcHJvZHVj ZXMgYW4gdW5oYW5kbGVkIHNpZ25hbCovCisgIERFRlNZTSAoUWVycm9yX2R1cmluZ19pbnRlcnJ1 cHQsImVycm9yLWR1cmluZy1pbnRlcnJ1cHQiKTsKKyAgLyogVGhpcyBpcyB1c2VkIGZvciBza2lw cGluZyBmcmFtZXMsIHNvIG5vIG90aGVyIGhhbmRsZXJzIGFyZSBhbGxvd2VkIHRvIGludGVyY2Vw dCovCisgIEZwdXQgKFFlcnJvcl9kdXJpbmdfaW50ZXJydXB0LCBRZXJyb3JfY29uZGl0aW9ucywK KwlRbmlsKTsKKyAgRnB1dCAoUWVycm9yX2R1cmluZ19pbnRlcnJ1cHQsIFFlcnJvcl9tZXNzYWdl LAorCWJ1aWxkX3N0cmluZyAoIlVuaGFuZGxlZCBlcnJvci1kdXJpbmctaW50ZXJydXB0OiBpbnRl cm5hbCBlcnJvciIpKTsKKworCiAgIERFRlNZTSAoUWxvYWRfZm9yY2VfZG9jX3N0cmluZ3MsICJs b2FkLWZvcmNlLWRvYy1zdHJpbmdzIik7CiAKICAgREVGU1lNIChRYmFja3F1b3RlLCAiYCIpOwpA QCAtNjE3NSwxMyArNzg1Niw2IEBAIHN5bXNfb2ZfbHJlYWQgKHZvaWQpCiAgIERFRlNZTSAoUWRp cl9vaywgImRpci1vayIpOwogICBERUZTWU0gKFFkb19hZnRlcl9sb2FkX2V2YWx1YXRpb24sICJk by1hZnRlci1sb2FkLWV2YWx1YXRpb24iKTsKIAotICBzdGF0aWNwcm8gKCZyZWFkX29iamVjdHNf bWFwKTsKLSAgcmVhZF9vYmplY3RzX21hcCA9IFFuaWw7Ci0gIHN0YXRpY3BybyAoJnJlYWRfb2Jq ZWN0c19jb21wbGV0ZWQpOwotICByZWFkX29iamVjdHNfY29tcGxldGVkID0gUW5pbDsKLQotICBW bG9hZHNfaW5fcHJvZ3Jlc3MgPSBRbmlsOwotICBzdGF0aWNwcm8gKCZWbG9hZHNfaW5fcHJvZ3Jl c3MpOwogCiAgIERFRlNZTSAoUWhhc2hfdGFibGUsICJoYXNoLXRhYmxlIik7CiAgIERFRlNZTSAo UWRhdGEsICJkYXRhIik7Ci0tIAoyLjQ5LjAKCg== --0000000000002492990639612157 Content-Type: text/x-patch; charset="US-ASCII"; name="0010-Base-support-for-noneditor-infrastructure-in-eval.c.patch" Content-Disposition: attachment; filename="0010-Base-support-for-noneditor-infrastructure-in-eval.c.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mctst9cj9 RnJvbSA5NWQ0NGIxZjVmZDBlNDNkYmQ5YWUxYzVkNzk2MTM1YWI1NDU4NGU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBPbm5pZSBMeW5uIFdpbmViYXJnZXIgPG93aW5lYmFyQGdtYWls LmNvbT4KRGF0ZTogTW9uLCA3IEp1bCAyMDI1IDA4OjIyOjU0IC0wNDAwClN1YmplY3Q6IFtQQVRD SCAxMC8xMl0gQmFzZSBzdXBwb3J0IGZvciBub25lZGl0b3IgaW5mcmFzdHJ1Y3R1cmUgaW4gZXZh bC5jCgotLS0KIHNyYy9ldmFsLmMgIHwgODQgKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9saXNwLmggIHwgIDMgKy0KIHNyYy9scmVhZC5j IHwgIDIgKy0KIDMgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgNTMgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2V2YWwuYyBiL3NyYy9ldmFsLmMKaW5kZXggMTA0OTUzZTg0 ODIuLjBjYTBkOTQzMjhkIDEwMDY0NAotLS0gYS9zcmMvZXZhbC5jCisrKyBiL3NyYy9ldmFsLmMK QEAgLTM0NywyOSArMzQ3LDIwIEBAIGRvX2RlYnVnX29uX2NhbGwgKExpc3BfT2JqZWN0IGNvZGUs IHNwZWNwZGxfcmVmIGNvdW50KQogICAgdGVtYWNzIGV4ZWN1dGFibGUgd2l0aG91dCBleGVjdXRp bmcgImxvYWR1cCIgYW5kIGV4aXQgbm9ybWFsbHkuCiAqLwogCi1zdHJ1Y3QKLXsKLSAgaW50IG5h cmdzOwotICBjaGFyICoqYXJnczsKLSAgaW50IG5leHByczsKLSAgaW50IGFyZ19pOwotICBMaXNw X09iamVjdCBhcmc7Ci0gIGludCBlcnJfa2luZDsKLSAgTGlzcF9PYmplY3QgZXJyOwotfSBub25l ZGl0b3I7CitzdHJ1Y3Qgbm9uZWRpdG9yX3N0YXRlIG5vbmVkaXRvcjsKIAogdHlwZWRlZiBMaXNw X09iamVjdCAoKm5vbmVkaXRvcl9wcm9jKSh2b2lkKTsKIHN0YXRpYyBMaXNwX09iamVjdCBub25l ZGl0b3JfZXZhbF9zaGltICh2b2lkKTsKIHN0YXRpYyBMaXNwX09iamVjdCBub25lZGl0b3JfZXZh bF9hcmdzICh2b2lkKTsKLXN0YXRpYyBMaXNwX09iamVjdCBub25lZGl0b3JfZXZhbF9zdGRpbl90 aHVuayAodm9pZCk7Ci1zdGF0aWMgTGlzcF9PYmplY3Qgbm9uZWRpdG9yX2Rpc3BhdGNoICh2b2lk KTsKK3N0YXRpYyBMaXNwX09iamVjdCBub25lZGl0b3JfZXZhbF9zdGRpbiAodm9pZCk7CitzdGF0 aWMgTGlzcF9PYmplY3Qgbm9uZWRpdG9yX2Rpc3BhdGNoICh2b2lkICopOwogCiAKIExpc3BfT2Jq ZWN0CiBub25lZGl0b3JfZXZhbF9zaGltICh2b2lkKQogewogICBMaXNwX09iamVjdCBzaGltID0g YnVpbGRfc3RyaW5nIChleGVfY29uZmlnLT5zLnNoaW0pOwotICByZXR1cm4gbm9uZWRpdG9yX2V2 YWxfc3RyZWFtIChzaGltLCAmKG5vbmVkaXRvci5uZXhwcnMpLCAmKG5vbmVkaXRvci5lcnIpKTsK KyAgcmV0dXJuIGV2YWxfc3RyZWFtIChzaGltLCAmKG5vbmVkaXRvci5uZXhwcnMpKTsKIH0KIAog TGlzcF9PYmplY3QKQEAgLTM4MSwzMyArMzcyLDMyIEBAIG5vbmVkaXRvcl9ldmFsX2FyZ3MgKHZv aWQpCiAJbm9uZWRpdG9yLmFyZ19pKyspCiAgICAgewogICAgICAgbm9uZWRpdG9yLmFyZyA9IGJ1 aWxkX3N0cmluZyAobm9uZWRpdG9yLmFyZ3Nbbm9uZWRpdG9yLmFyZ19pXSk7Ci0gICAgICB2YWwg PSBub25lZGl0b3JfZXZhbF9zdHJlYW0gKG5vbmVkaXRvci5hcmcsICYobm9uZWRpdG9yLm5leHBy cyksCi0JCQkJICAgJihub25lZGl0b3IuZXJyKSk7CisgICAgICB2YWwgPSBldmFsX3N0cmVhbSAo bm9uZWRpdG9yLmFyZywgJihub25lZGl0b3IubmV4cHJzKSk7CiAgICAgfQogICByZXR1cm4gdmFs OwogfQogCiBMaXNwX09iamVjdAotbm9uZWRpdG9yX2V2YWxfc3RkaW5fdGh1bmsgKHZvaWQpCitu b25lZGl0b3JfZXZhbF9zdGRpbiAodm9pZCkKIHsKLSAgcmV0dXJuIG5vbmVkaXRvcl9ldmFsX3N0 cmVhbSAoUXN0ZGluLCAmKG5vbmVkaXRvci5uZXhwcnMpLCAmKG5vbmVkaXRvci5lcnIpKTsKKyAg cmV0dXJuIGV2YWxfc3RyZWFtIChRc3RkaW4sICYobm9uZWRpdG9yLm5leHBycykpOwogfQogCiBM aXNwX09iamVjdAotbm9uZWRpdG9yX2Rpc3BhdGNoICh2b2lkKQorbm9uZWRpdG9yX2Rpc3BhdGNo ICh2b2lkICppZ25vcmVkKQogewogICBpZiAoRVhFX0NPTkZJR1VSRURfRVZBTF9TSElNKGV4ZV9j b25maWcpKQogICAgIG5vbmVkaXRvcl9ldmFsX3NoaW0oKTsKICAgZWxzZSBpZiAoTklMUCAoVm5v bmVkaXRvcikpCiAgICAgZmF0YWwgKCJub25lZGl0b3IgbXVzdCBiZSBub24tbmlsIHdoZW4gdXNl ZCBhcyBtYWluIHByb2Nlc3MgIgotCSAgICJ3aXRob3V0IGEgaGFyZC1jb2RlZCBsaXNwIHByb2dy YW0uIik7CisJICAgIndpdGhvdXQgYSBsaXNwIHByb2dyYW0gc2hpbS4iKTsKIAogICBpZiAoRVEg KFZub25lZGl0b3IsUXQpKQogICAgIHsKICAgICAgIFZjb21tYW5kX2xpbmVfYXJncyA9IFFuaWw7 CiAgICAgICBMaXNwX09iamVjdCB2YWwgPSBub25lZGl0b3JfZXZhbF9hcmdzKCk7CiAgICAgICBp ZiAobm9uZWRpdG9yLm5leHBycyA9PSAwKQotCXZhbCA9IG5vbmVkaXRvcl9ldmFsX3N0ZGluX3Ro dW5rKCk7CisJdmFsID0gbm9uZWRpdG9yX2V2YWxfc3RkaW4oKTsKICAgICAgIHJldHVybiB2YWw7 CiAgICAgfQogCkBAIC00MTksOCArNDA5LDkgQEAgbm9uZWRpdG9yX2Rpc3BhdGNoICh2b2lkKQog CiAKICAgaWYgKEVRIChWbm9uZWRpdG9yLFFzdGRpbikpCi0gICAgICByZXR1cm4gbm9uZWRpdG9y X2V2YWxfc3RkaW5fdGh1bmsoKTsKKyAgICAgIHJldHVybiBub25lZGl0b3JfZXZhbF9zdGRpbigp OwogCisgIC8qIE90aGVyd2lzZSwgZXhlY3V0aW5nIGV4cHJlc3Npb24gJyhub25lZGl0b3IpJyAq LwogICBub25lZGl0b3IubmV4cHJzID0gMTsKICAgaWYgKEZVTkNUSU9OUCAoVm5vbmVkaXRvcikp CiAgICAgICByZXR1cm4gZnVuY2FsbF9nZW5lcmFsIChWbm9uZWRpdG9yLCAwLCBOVUxMKTsKQEAg LTQ1NCwzNSArNDQ1LDI3IEBAIG5vbmVkaXRvcl9jYXRjaGFsbCAoZW51bSBub25sb2NhbF9leGl0 IGV4aXRfa2luZCwgTGlzcF9PYmplY3QgZGF0YSkKIAlyZXR1cm4gUW5pbDsKICAgICAgIH0KICAg ICBjYXNlIE5PTkxPQ0FMX0VYSVRfVEhST1c6CisgICAgICB7CisJTGlzcF9PYmplY3Qgb2xkX2xl dmVsLCBvbGRfbGVuZ3RoOworCWZwcmludGYoc3RkZXJyLCJVbmhhbmRsZWQgZXhjZXB0aW9uIGVu Y291bnRlcmVkIGluIG5vbmVkaXRvciBtb2RlLlxuIik7CisJLyogQXZvaWQgdW5xdWl0dGFibGUg bG9vcCBpZiBkYXRhIGNvbnRhaW5zIGEgY2lyY3VsYXIgbGlzdC4gICovCisJb2xkX2xldmVsID0g VnByaW50X2xldmVsOworCW9sZF9sZW5ndGggPSBWcHJpbnRfbGVuZ3RoOworCVhTRVRGQVNUSU5U IChWcHJpbnRfbGV2ZWwsIDEwKTsKKwlYU0VURkFTVElOVCAoVnByaW50X2xlbmd0aCwgMTApOwor CXByaW50X2Vycm9yX21lc3NhZ2UgKGRhdGEsIFFleHRlcm5hbF9kZWJ1Z2dpbmdfb3V0cHV0LCIi LAorCQkJICAgICBWc2lnbmFsaW5nX2Z1bmN0aW9uKTsKKwlGdGVycHJpIChRZXh0ZXJuYWxfZGVi dWdnaW5nX291dHB1dCwgUW5pbCk7CisJVnByaW50X2xldmVsID0gb2xkX2xldmVsOworCVZwcmlu dF9sZW5ndGggPSBvbGRfbGVuZ3RoOworCXJldHVybiBRbmlsOworICAgICAgfQorICAgIGRlZmF1 bHQ6CisgICAgICBmYXRhbCAoIlVucmVjb2duaXplZCBraW5kIG9mIG5vbmxvY2FsIGV4aXQuIik7 CiAgICAgfQorICBlYXNzdW1lIChmYWxzZSk7CiB9CiAKLS8qIEN1dCBkb3duIHZlcnNpb24gb2Yg Y21kX2Vycm9yICovCi1zdGF0aWMgTGlzcF9PYmplY3QKLW5vbmVkaXRvcl9iYXNlX2NvbmRpdGlv bl9oYW5kbGVyIChMaXNwX09iamVjdCBkYXRhKQotewotICBMaXNwX09iamVjdCBvbGRfbGV2ZWws IG9sZF9sZW5ndGg7Ci0gIGZwcmludGYoc3RkZXJyLCJFcnJvciBlbmNvdW50ZXJlZCBpbiBiYXJl IGV2YWwuXG4iKTsKLSAgLyogQXZvaWQgdW5xdWl0dGFibGUgbG9vcCBpZiBkYXRhIGNvbnRhaW5z IGEgY2lyY3VsYXIgbGlzdC4gICovCi0gIG9sZF9sZXZlbCA9IFZwcmludF9sZXZlbDsKLSAgb2xk X2xlbmd0aCA9IFZwcmludF9sZW5ndGg7Ci0gIFhTRVRGQVNUSU5UIChWcHJpbnRfbGV2ZWwsIDEw KTsKLSAgWFNFVEZBU1RJTlQgKFZwcmludF9sZW5ndGgsIDEwKTsKLSAgcHJpbnRfZXJyb3JfbWVz c2FnZSAoZGF0YSwgUWV4dGVybmFsX2RlYnVnZ2luZ19vdXRwdXQsIiIsIFZzaWduYWxpbmdfZnVu Y3Rpb24pOwotICBGdGVycHJpIChRZXh0ZXJuYWxfZGVidWdnaW5nX291dHB1dCwgUW5pbCk7Ci0g IFZwcmludF9sZXZlbCA9IG9sZF9sZXZlbDsKLSAgVnByaW50X2xlbmd0aCA9IG9sZF9sZW5ndGg7 Ci0gIG5vbmVkaXRvcl9ldmFsX2VyciA9IFF0OwotCi0gIHJldHVybiBRdDsKLX0KLQotc3RhdGlj IExpc3BfT2JqZWN0Ci1ub25lZGl0b3JfY29uZGl0aW9uX3RyYW1wb2xpbmUgKExpc3BfT2JqZWN0 IGlnbm9yZWQpCi17Ci0gIHJldHVybiBpbnRlcm5hbF9jb25kaXRpb25fY2FzZSAobm9uZWRpdG9y X2Rpc3BhdGNoLCBRZXJyb3IsCi0JCQkJICBub25lZGl0b3JfYmFzZV9jb25kaXRpb25faGFuZGxl cik7Ci19CiAKIC8qIEV2YWx1YXRlIGV4cHJlc3Npb25zIGluIGVpdGhlciBhIGJhcmUgb3Igbm9u LXN0YW5kYXJkCiAgICBkdW1wIGltcGxlbWVudGluZyBhIHN0YW5kLWFsb25lIG5vbmVkaXRvciBw cm9ncmFtLgpAQCAtNTA0LDE0ICs0ODcsMTMgQEAgbm9uZWRpdG9yX21haW4gKGludCBuYXJncywg Y2hhciAqKmFyZ3MpCiAgIEZzZXQgKFFzdGFuZGFyZF9vdXRwdXQsIFFleHRlcm5hbF9zdGFuZGFy ZF9vdXRwdXQpOwogICBGc2V0IChRc3RhbmRhcmRfaW5wdXQsIFFleHRlcm5hbF9zdGFuZGFyZF9p bnB1dCk7CiAgIC8qIEZzZXQgKFFzdGFuZGFyZF9pbnB1dCxRZ2V0X2ZpbGVfY2hhcik7ICovCi0g IExpc3BfT2JqZWN0IHZhbCA9IGludGVybmFsX2NhdGNoIChRdG9wX2xldmVsLAotCQkJCSAgICBu b25lZGl0b3JfY29uZGl0aW9uX3RyYW1wb2xpbmUsCi0JCQkJICAgIFFuaWwpOworICBpbnRlcm5h bF9jYXRjaF9hbGwgKG5vbmVkaXRvcl9kaXNwYXRjaCwgTlVMTCwKKwkJICAgICAgbm9uZWRpdG9y X2NhdGNoYWxsKTsKICAgLyogaWYgKG5vbmVkaXRvci5uZXhwcnMgPT0gMCkgKi8KICAgLyogICBm YXRhbCAoIkJhcmUgZXZhbHVhdGlvbiBtb2RlIGZvdW5kIG5vIGV4cHJlc3Npb25zIHRvIGV2YWx1 YXRlIik7ICovCiAKICAgc2h1dF9kb3duX2VtYWNzICgwLFFuaWwpOwotICBpbnQgZXhpdF9jb2Rl ID0gRVEgKG5vbmVkaXRvcl9ldmFsX2VyciwgUW5pbCkgPyAwIDogMTsKKyAgaW50IGV4aXRfY29k ZSA9IEVRIChub25lZGl0b3IuZXJyLCBRbmlsKSA/IDAgOiAxOwogICBleGl0KGV4aXRfY29kZSk7 CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9saXNwLmggYi9zcmMvbGlzcC5oCmluZGV4IDdmYjc3MDVk YmY0Li40MWI0NDNmYWU1YSAxMDA2NDQKLS0tIGEvc3JjL2xpc3AuaAorKysgYi9zcmMvbGlzcC5o CkBAIC00OTU1LDEzICs0OTU1LDE0IEBAIENIRUNLX0tFWVdPUkRfQVJHUyAocHRyZGlmZl90IG5h cmdzKQogCiBleHRlcm4gdm9pZCBub25lZGl0b3JfbWFpbiAoaW50IG5hcmdzLCBjaGFyICoqYXJn cyk7CiBleHRlcm4gTGlzcF9PYmplY3Qgbm9uZWRpdG9yX2NhdGNoYWxsIChlbnVtIG5vbmxvY2Fs X2V4aXQsTGlzcF9PYmplY3QpOwotZXh0ZXJuIHN0cnVjdAorZXh0ZXJuIHN0cnVjdCBub25lZGl0 b3Jfc3RhdGUKIHsKICAgaW50IG5hcmdzOwogICBjaGFyICoqYXJnczsKICAgaW50IG5leHByczsK ICAgaW50IGFyZ19pOwogICBMaXNwX09iamVjdCAgYXJnOworICBpbnQgZXJyX2tpbmQ7CiAgIExp c3BfT2JqZWN0IGVycjsKIH0gbm9uZWRpdG9yOwogCmRpZmYgLS1naXQgYS9zcmMvbHJlYWQuYyBi L3NyYy9scmVhZC5jCmluZGV4IDI0ZDc0ZTE2ZWU1Li45NDU2Y2U0MTJmNCAxMDA2NDQKLS0tIGEv c3JjL2xyZWFkLmMKKysrIGIvc3JjL2xyZWFkLmMKQEAgLTM5MDksNyArMzkwOSw3IEBAIHNhdmVf ZnJhbWVfbmV4cHJzICh2b2lkICpwKQogICBpZiAoY3VycmVudF9mcmFtZSAmJiBwKQogICAgIHsK ICAgICAgIGludCAqbmV4cHJzID0gcDsKLSAgICAgICpuZXhwcnMgPSBjdXJyZW50X2ZyYW1lLT5u ZXhwcnM7CisgICAgICAqbmV4cHJzICs9IGN1cnJlbnRfZnJhbWUtPm5leHByczsKICAgICB9CiB9 CiAKLS0gCjIuNDkuMAoK --0000000000002492990639612157 Content-Type: text/x-patch; charset="US-ASCII"; name="0012-Cleanup-remaining-compiler-warnings-from-new-code.patch" Content-Disposition: attachment; filename="0012-Cleanup-remaining-compiler-warnings-from-new-code.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mctst9co11 RnJvbSBlODgwYjAxOTYzM2RlZDA1YTc3NWQ5NDBhM2UzNTIzNmE5MDMyMjQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBPbm5pZSBMeW5uIFdpbmViYXJnZXIgPG93aW5lYmFyQGdtYWls LmNvbT4KRGF0ZTogTW9uLCA3IEp1bCAyMDI1IDIwOjMxOjUwIC0wNDAwClN1YmplY3Q6IFtQQVRD SCAxMi8xMl0gQ2xlYW51cCByZW1haW5pbmcgY29tcGlsZXIgd2FybmluZ3MgZnJvbSBuZXcgY29k ZQoKLS0tCiBzcmMvZW1hY3MuYyB8IDggLS0tLS0tLS0KIHNyYy9ldmFsLmMgIHwgMyAtLS0KIDIg ZmlsZXMgY2hhbmdlZCwgMTEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2VtYWNzLmMg Yi9zcmMvZW1hY3MuYwppbmRleCBjOWU3NDBkNTBkYi4uMmI1OTNjZWU3ZjkgMTAwNjQ0Ci0tLSBh L3NyYy9lbWFjcy5jCisrKyBiL3NyYy9lbWFjcy5jCkBAIC00MDAzLDExICs0MDAzLDcgQEAgREVG VU4gKCJnZXQtZW1hY3MtZXhlY3V0YWJsZS1maW5nZXJwcmludC1kYXRhIiwKICAgICB9CiAgIHJl Y29yZF91bndpbmRfcHJvdGVjdF9wdHIocmVsZWFzZV9maW5nZXJwcmludF9idWZmZXIsICh2b2lk ICopIGZiKTsKICAgdWludDY0X3QgZWNfc2l6ZSA9IGZiLT5oZHItPnNpemU7Ci0gIGV4ZV9jb25m aWdfaGVhZGVyICplY2ggPSAoZXhlX2NvbmZpZ19oZWFkZXIgKikgZmItPmhkci0+ZGF0YTsKLSAg dWludDY0X3QgZmxhZ3MwID0gZWNoLT5mbGFnczsKLSAgY2hhciAqYXJndjBfYmFzZTAgPSBlY2gt PmFyZ3YwX2Jhc2U7CiAgIHVpbnQ2NF90IGVjX3NoaW1fc3ogPSBlY19zaXplIC0gb2Zmc2V0b2Yg KGV4ZV9jb25maWdfaGVhZGVyLCBzaGltKTsKLSAgY2hhciAqc2hpbTAgPSBlY2gtPnNoaW07CiAK ICAgaWYgKE5JTFAgKG1heF9zaGltX3NpemUpKQogICAgIG1heF9zaGltX3NpemUgPSBtYWtlX2Zp eG51bSAoZWNfc2hpbV9zei0xKTsKQEAgLTQxNDYsOCArNDE0Miw2IEBAIERFRlVOICgibWFrZS1j dXN0b20tZW1hY3MtZXhlY3V0YWJsZSIsCiAJCSAgICAgICBidWlsZF9zdHJpbmcgKCJJbnZhbGlk IGhhc2ggb3B0aW9uOiAlUyIpLAogCQkgICAgICAgaGFzaCkpOwogICAgIH0KLSAgYm9vbCBrZWVw X2Jhc2VuYW1lID0gRVEgKGJhc2VuYW1lLCBRb3JpZ2luYWwpIHx8IEVRIChiYXNlbmFtZSwgUW5p bCk7Ci0gIGJvb2wgY2xlYXJfYmFzZW5hbWUgPSAoRVEgKGJhc2VuYW1lLCBRcmVzZXQpIHx8IEVR IChiYXNlbmFtZSwgUWNsZWFyKSk7CiAgIGJvb2wga2VlcF9zaGltID0gRVEgKHNoaW0sIFFvcmln aW5hbCk7CiAgIGJvb2wgY2xlYXJfc2hpbSA9IChFUSAoc2hpbSwgUXJlc2V0KSB8fCBFUSAoc2hp bSwgUWNsZWFyKSk7CiAgIGNoYXIgKmZpbGVuYW1lOwpAQCAtNDIyNyw3ICs0MjIxLDYgQEAgREVG VU4gKCJtYWtlLWN1c3RvbS1lbWFjcy1leGVjdXRhYmxlIiwKICAgdWludDY0X3QgZmxhZ3MwID0g ZWNoLT5mbGFnczsKICAgY2hhciAqYXJndjBfYmFzZTAgPSBlY2gtPmFyZ3YwX2Jhc2U7CiAgIHVp bnQ2NF90IGVjX3NoaW1fc3ogPSBlY19zaXplIC0gb2Zmc2V0b2YgKGV4ZV9jb25maWdfaGVhZGVy LCBzaGltKTsKLSAgY2hhciAqc2hpbTAgPSBlY2gtPnNoaW07CiAKICAgdWludDY0X3QgZmxhZ3Mg PSBwcm9jZXNzX2N1c3RvbV9leGVjdXRhYmxlX2ZsYWdzIChmbGFnczAsIGZsYWdfbHMpOwogCkBA IC00MjM1LDcgKzQyMjgsNiBAQCBERUZVTiAoIm1ha2UtY3VzdG9tLWVtYWNzLWV4ZWN1dGFibGUi LAogICBwdHJkaWZmX3QgYmFzZW5hbWVfc2l6ZSA9IDA7CiAgIGlmIChOSUxQIChiYXNlbmFtZSkp CiAgICAgewotICAgICAga2VlcF9iYXNlbmFtZSA9IHRydWU7CiAgICAgICBiYXNlbmFtZV9ieXRl cyA9IGFyZ3YwX2Jhc2UwOwogICAgICAgYmFzZW5hbWVfc2l6ZSA9IEVDRkdfQVJHVjBfQkFTRV9T SVpFOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9ldmFsLmMgYi9zcmMvZXZhbC5jCmluZGV4IDBj YTBkOTQzMjhkLi45ODg3NmFjODI4MyAxMDA2NDQKLS0tIGEvc3JjL2V2YWwuYworKysgYi9zcmMv ZXZhbC5jCkBAIC00ODYsMTEgKzQ4Niw4IEBAIG5vbmVkaXRvcl9tYWluIChpbnQgbmFyZ3MsIGNo YXIgKiphcmdzKQogICBGc2V0IChRc3RhbmRhcmRfZXJyb3IsIFFleHRlcm5hbF9kZWJ1Z2dpbmdf b3V0cHV0KTsKICAgRnNldCAoUXN0YW5kYXJkX291dHB1dCwgUWV4dGVybmFsX3N0YW5kYXJkX291 dHB1dCk7CiAgIEZzZXQgKFFzdGFuZGFyZF9pbnB1dCwgUWV4dGVybmFsX3N0YW5kYXJkX2lucHV0 KTsKLSAgLyogRnNldCAoUXN0YW5kYXJkX2lucHV0LFFnZXRfZmlsZV9jaGFyKTsgKi8KICAgaW50 ZXJuYWxfY2F0Y2hfYWxsIChub25lZGl0b3JfZGlzcGF0Y2gsIE5VTEwsCiAJCSAgICAgIG5vbmVk aXRvcl9jYXRjaGFsbCk7Ci0gIC8qIGlmIChub25lZGl0b3IubmV4cHJzID09IDApICovCi0gIC8q ICAgZmF0YWwgKCJCYXJlIGV2YWx1YXRpb24gbW9kZSBmb3VuZCBubyBleHByZXNzaW9ucyB0byBl dmFsdWF0ZSIpOyAqLwogCiAgIHNodXRfZG93bl9lbWFjcyAoMCxRbmlsKTsKICAgaW50IGV4aXRf Y29kZSA9IEVRIChub25lZGl0b3IuZXJyLCBRbmlsKSA/IDAgOiAxOwotLSAKMi40OS4wCgo= --0000000000002492990639612157 Content-Type: text/x-patch; charset="US-ASCII"; name="0011-Make-the-shim-run-in-editor-mode-if-configured.patch" Content-Disposition: attachment; filename="0011-Make-the-shim-run-in-editor-mode-if-configured.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mctst9cl10 RnJvbSBjNjhhODJkY2M1NGE0MzI0NDI5NWU2N2ZlNGJmODc4NzQxOTE4ZjI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBPbm5pZSBMeW5uIFdpbmViYXJnZXIgPG93aW5lYmFyQGdtYWls LmNvbT4KRGF0ZTogTW9uLCA3IEp1bCAyMDI1IDIwOjIxOjQ3IC0wNDAwClN1YmplY3Q6IFtQQVRD SCAxMS8xMl0gTWFrZSB0aGUgc2hpbSBydW4gaW4gZWRpdG9yIG1vZGUgaWYgY29uZmlndXJlZC4K CiogVXNlIGV2YWxfc3RyZWFtIHRvIHJ1biB0aGUgc2hpbSBjb2RlIGJlZm9yZSBpbnZva2luZyBy ZWN1cnNpdmUtZWRpdC4KKiBSZW1vdmUgZmluYWwgcmVtbmFudCBvZiB0aGUgdXNlIG9mIHRoZSBz dGFydCBwYXJhbWV0ZXIgdG8gcmVhZGV2YWxsb29wCiAgdG8gaW5kaWNhdGUgd2hlbiBEWU5BTUlD X1dJTkQgYmVoYXZpb3IgaXMgcmVxdWlyZWQgZm9yIGV2YWwtcmVnaW9uLgoqIFdoZW4gcnVubmlu ZyB1bmluc3RhbGxlZCwgdGhlIGRlZmF1bHQgbG9hZCBwYXRoIGZvciB1bmluaXRpYWxpemVkCiAg ZW1hY3MgaW4gbm9uZWRpdG9yIG1vZGUgc2hvdWxkIGJlIHRoZSB0aGUgc2FtZSBhcyBpZiBkdW1w aW5nLgotLS0KIHNyYy9lbWFjcy5jIHwgMzggKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLS0tLS0KIHNyYy9scmVhZC5jIHwgIDggKysrLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMjYg aW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2VtYWNzLmMg Yi9zcmMvZW1hY3MuYwppbmRleCA3YzM4ZWMwYmJjNS4uYzllNzQwZDUwZGIgMTAwNjQ0Ci0tLSBh L3NyYy9lbWFjcy5jCisrKyBiL3NyYy9lbWFjcy5jCkBAIC0xMzA0LDYgKzEzMDQsMTQgQEAgbWF5 YmVfbG9hZF9zZWNjb21wIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAjZW5kaWYgIC8qIFNFQ0NP TVBfVVNBQkxFICovCiBzdGF0aWMgY2hhciAqdGVtYWNzID0gTlVMTDsKIAorLyogZm9yIHByb3Rl Y3RlZCBldmFsdWF0aW9uIG9mIGhhcmQtY29kZWQgc2hpbSBpbiBlZGl0b3IgbW9kZSAqLworc3Rh dGljIExpc3BfT2JqZWN0CitldmFsX3NoaW0gKHZvaWQgKmlnbm9yZWQpCit7CisgIExpc3BfT2Jq ZWN0IHNoaW0gPSBidWlsZF9zdHJpbmcgKGV4ZV9jb25maWctPnMuc2hpbSk7CisgIHJldHVybiBl dmFsX3N0cmVhbSAoc2hpbSwgJihub25lZGl0b3IubmV4cHJzKSk7Cit9CisKICNpZiAhZGVmaW5l ZCBIQVZFX0FORFJPSUQgfHwgZGVmaW5lZCBBTkRST0lEX1NUVUJJRlkKIGludAogbWFpbiAoaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQpAQCAtMjU5Nyw3ICsyNjA1LDcgQEAgYW5kcm9pZF9lbWFjc19p bml0IChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKmR1bXBfZmlsZSkKICAgaW5pdF9zZm50 Zm9udF9hbmRyb2lkICgpOwogI2VuZGlmCiAKLSAgaWYgKCFpbml0aWFsaXplZCAmJiAhTklMUCAo Vm5vbmVkaXRvcikpCisgIGlmICghaW5pdGlhbGl6ZWQgJiYgTklMUCAoVm5vbmVkaXRvcikpCiAg ICAgewogICAgICAgY2hhciAqZmlsZTsKICAgICAgIC8qIEhhbmRsZSAtbCBsb2FkdXAsIGFyZ3Mg cGFzc2VkIGJ5IE1ha2VmaWxlLiAgKi8KQEAgLTI2NzksMjAgKzI2ODcsMjAgQEAgYW5kcm9pZF9l bWFjc19pbml0IChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKmR1bXBfZmlsZSkKICAgaWYg KEVYRV9DT05GSUdVUkVEX0VWQUxfU0hJTSAoZXhlX2NvbmZpZykKICAgICAgICYmICooZXhlX2Nv bmZpZy0+cy5zaGltKSkKICAgICB7Ci0gICAgICBMaXNwX09iamVjdCB4ID0gQ0FMTE4gKEZjb25j YXQsCi0JCQkgICAgIGJ1aWxkX3N0cmluZyAoIihwcm9nbiAiKSwKLQkJCSAgICAgYnVpbGRfc3Ry aW5nIChleGVfY29uZmlnLT5zLnNoaW0pLAotCQkJICAgICBidWlsZF9zdHJpbmcgKCIgKSIpKTsK LSAgICAgIHggPSBsaXN0MiAoUWV2YWwsIGxpc3QyIChRcmVhZCwgeCkpOwotCi0gICAgICAvKiBl dmFsdWF0ZSB0aGUgc2hpbSBwcm9ncmFtIHRoZW4gdXN1YWwgdG9wLWxldmVsCi0JIGVuc3VyZSB0 b3AtbGV2ZWwgaXMgc2V0IGJhY2sgdG8gdGhlIHVzdWFsIHZhbHVlCi0JIHNvIHRoZSBzaGltIGlz IG9ubHkgZXZhbHVhdGVkIG9uY2UgKGJ5IHRoaXMgbWVjaGFuaXNtLCBhdCBsZWFzdCkKLQkgYnV0 IGdpdmUgdGhlIHNoaW0gYSBjaGFuY2UgdG8gbW9kaWZ5IGl0ICovCi0gICAgICBWdG9wX2xldmVs ID0gbGlzdDQgKFFwcm9nbiwKLQkJCSAgbGlzdDMgKFFzZXRxLCBRdG9wX2xldmVsLCBWdG9wX2xl dmVsKSwKLQkJCSAgeCwKLQkJCSAgbGlzdDIgKFFldmFsLCBWdG9wX2xldmVsKSk7CisgICAgICBz cGVjcGRsX3JlZiBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CisgICAgICAvKiBTZXQgdXAganVz dCBmb3IgZXZhbHVhdGluZyB0aGUgc2hpbSovCisgICAgICBub25lZGl0b3IubmFyZ3MgPSAwOwor ICAgICAgbm9uZWRpdG9yLmFyZ3MgPSBOVUxMOworICAgICAgbm9uZWRpdG9yLm5leHBycyA9IDA7 CisgICAgICBub25lZGl0b3IuYXJnX2kgPSAwOworICAgICAgbm9uZWRpdG9yLmFyZyA9IFFuaWw7 CisKKyAgICAgIHNwZWNiaW5kIChRbGV4aWNhbF9iaW5kaW5nLCBRdCk7CisgICAgICBzcGVjYmlu ZCAoUXN0YW5kYXJkX2Vycm9yLCBRZXh0ZXJuYWxfZGVidWdnaW5nX291dHB1dCk7CisgICAgICBz cGVjYmluZCAoUXN0YW5kYXJkX291dHB1dCwgUWV4dGVybmFsX3N0YW5kYXJkX291dHB1dCk7Cisg ICAgICBzcGVjYmluZCAoUXN0YW5kYXJkX2lucHV0LCBRZXh0ZXJuYWxfc3RhbmRhcmRfaW5wdXQp OworICAgICAgaW50ZXJuYWxfY2F0Y2hfYWxsIChldmFsX3NoaW0sIE5VTEwsIG5vbmVkaXRvcl9j YXRjaGFsbCk7CisgICAgICB1bmJpbmRfdG8gKGNvdW50LCBRbmlsKTsKICAgICB9CiAKICAgLyog RW50ZXIgZWRpdG9yIGNvbW1hbmQgbG9vcC4gIFRoaXMgbmV2ZXIgcmV0dXJucy4gICovCmRpZmYg LS1naXQgYS9zcmMvbHJlYWQuYyBiL3NyYy9scmVhZC5jCmluZGV4IDk0NTZjZTQxMmY0Li4yYTIz Y2QyMTViNSAxMDA2NDQKLS0tIGEvc3JjL2xyZWFkLmMKKysrIGIvc3JjL2xyZWFkLmMKQEAgLTM3 ODcsMTAgKzM3ODcsNiBAQCByZWFkZXZhbGxvb3AgKExpc3BfT2JqZWN0IGZyYW1lcHRyKQogICAg ICAgIGJlZW4gZG9uZSBhbHJlYWR5LiAgKi8KICAgICBtYWNyb2V4cGFuZCA9IFFuaWw7CiAKLSAg LyogV2UgYXNzdW1lIFNUQVJUIGlzIG5pbCB3aGVuIGlucHV0IGlzIG5vdCBmcm9tIGEgYnVmZmVy LiAgKi8KLSAgaWYgKCEgTklMUCAoZnJhbWUtPnN0YXJ0KSAmJiAhYikKLSAgICBlbWFjc19hYm9y dCAoKTsKLQogICAvKiBlZGVidWcncyBpbnN0cnVtZW50YXRpb24gbWVjaGFuaXNtIHdyYXBzIGxv YWQtcmVhZC1mdW5jdGlvbgogICAgICBhbmQgcmVxdWlyZXMgdGhlIHN0cmVhbSBhcmd1bWVudCB0 byBiZSB0aGUgY3VycmVudC1idWZmZXIuCiAgICAgIEp1c3QgdXNpbmcgUXJlYWRlcl9pbnB1dF9z dHJlYW0gYnJlYWtzIHRoaXMgdW5kb2N1bWVudGVkCkBAIC03MTYwLDcgKzcxNTYsOSBAQCBsb2Fk X3BhdGhfY2hlY2sgKExpc3BfT2JqZWN0IGxwYXRoKQogc3RhdGljIExpc3BfT2JqZWN0CiBsb2Fk X3BhdGhfZGVmYXVsdCAodm9pZCkKIHsKLSAgaWYgKHdpbGxfZHVtcF9wICgpKQorICAvKiBVc2Ug UEFUSF9EVU1QTE9BRFNFQVJDSCBpZiBydW5uaW5nIGluIGJhcmUgZW52aXJvbm1lbnQKKyAgICAg ZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5LiAgKi8KKyAgaWYgKHdpbGxfZHVtcF9wICgpIHx8ICgh aW5pdGlhbGl6ZWQgJiYgISBOSUxQIChWaW5zdGFsbGF0aW9uX2RpcmVjdG9yeSkpKQogICAgIC8q IFBBVEhfRFVNUExPQURTRUFSQ0ggaXMgdGhlIGxpc3AgZGlyIGluIHRoZSBzb3VyY2UgZGlyZWN0 b3J5LgogICAgICAgIFdlIHVzZWQgdG8gYWRkIC4uL2xpc3AgKGllIHRoZSBsaXNwIGRpciBpbiB0 aGUgYnVpbGQKICAgICAgICBkaXJlY3RvcnkpIGF0IHRoZSBmcm9udCBoZXJlLCBidXQgdGhhdCBz aG91bGQgbm90IGJlCi0tIAoyLjQ5LjAKCg== --0000000000002492990639612157--