Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ogYRp-0003Kb-K1 for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Oct 2022 21:30:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ogYRn-0004rS-PS for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Oct 2022 21:30:27 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ogYRn-0004rJ-0G for pgsql-hackers@lists.postgresql.org; Thu, 06 Oct 2022 21:30:27 +0000 Received: from mail-pf1-x42e.google.com ([2607:f8b0:4864:20::42e]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ogYRj-0006N1-G1 for pgsql-hackers@lists.postgresql.org; Thu, 06 Oct 2022 21:30:26 +0000 Received: by mail-pf1-x42e.google.com with SMTP id 204so3201382pfx.10 for ; Thu, 06 Oct 2022 14:30:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=9l7rH4+Y/TjdAVAbCf2p2D2JMK1m/6rcNE6LnjV/4QI=; b=WJ5xXlzCN7z/c+j+6UcN3FzFSe143nfgRBYGEtgHjFdVeGwYF5HKLteZ9cnFTD4S0G KrSkm8eOb15QbGyKXkYhldVeP3jN/pSrqs3WNe7FSLr4cKhlgrLX4boREkqWyA0h3GAc owXD08d/fgCtuQJavb7d6RgQjX4im0ri1fDO7J5yUo9pTdbe9KfDo92C36LjQhNxM4Ci Bes5jTsiFDYRfazeuI4AaIZ3hYBJtSFeJhr1pIkx3OBnOwXZpyOOFyB2l4vHnnCDcYID +XBYkSdzaToFjq2IGSn6atFl4ANd3JzQCM1s7nsFsaHrJwxFBTfJZ0db2pNEvcJ2Jf4G aiHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=9l7rH4+Y/TjdAVAbCf2p2D2JMK1m/6rcNE6LnjV/4QI=; b=pfElOR7vOqUsM0KDzPVM1idj40Ab0+FWHNdklowySvKEXVkQZvhulO+ammoxy44JB6 tAHBW2hahMClFqmIfw1QZLdHz8RAeIyIlmWZgMhvOFFBIWdtYnU8mdb5F1p1JYom+0eQ ZjvEDtDTBc2ilGdyaiLC+0PDSRLK+tByIRE3wE3ywG/6+688/GRoR4xE1Jjdrbb2Xn/3 s5gq80luYdTQ9i3ZkNNJMDBPUtFLqE3go+YcjUtmsBb4cL3NPfqMxFBexd//lWRY6t+s 2wFOY4qw3IvEXxjLCUp0Iv1zFcvtkdciGjaopQ1fM0NzUYpOWXrivYauKRiuw9gV45XI p5tg== X-Gm-Message-State: ACrzQf0eA3ugda3ihvbGaEWPBiTQDe+VT4CsIkLHJBLB2TBsVRfwxV3g k6VrpQT8B1EVXgNCqas7tOCcmEPtF+nKsOAwp0A= X-Google-Smtp-Source: AMsMyM4I7A+eneGeLuw1pjLSeeL9gGycq6UlIRsr3HtXHug8TV6BxA5Vm90H4ITrEU0++Rs1R4cjfXZy/xXPiK7z/Us= X-Received: by 2002:a05:6a00:a96:b0:558:8915:2f0e with SMTP id b22-20020a056a000a9600b0055889152f0emr1679074pfl.38.1665091821094; Thu, 06 Oct 2022 14:30:21 -0700 (PDT) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> From: Zheng Li Date: Thu, 6 Oct 2022 17:30:09 -0400 Message-ID: Subject: Re: Support logical replication of DDLs To: Alvaro Herrera Cc: vignesh C , Ajin Cherian , "houzj.fnst@fujitsu.com" , Peter Smith , Amit Kapila , Masahiko Sawada , Japin Li , Dilip Kumar , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000008463b705ea646663" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008463b705ea646663 Content-Type: text/plain; charset="UTF-8" > > Some tweaking is made in deparse_drop_command in order to make DROP > > TRANSFORM deparsing work. This is because the objidentity captured in > > currentEventTriggerState->SQLDropList contains the keyword 'on', for > > example "for typename on language lang", but the keyword 'on' is not > > needed in the current DROP TRANSFORM syntax. So we need to remove the > > 'on' keyword in objidentity. I'm not sure if this is the best way to > > handle it, maybe we can consider directly modifying what's captured in > > currentEventTriggerState->SQLDropList > > so we don't have the "on" keyword to begin with? > > The exact output format for identity is not set in stone; we should only > set it in stone once we have an actual working case for them. This is > the first such use, so it seems OK to make minor modifications (such as > removing an undesirable ON) if it's a reasonable change and allows > consumer code to be more easily written. > So, +1 to dropping ON here. However, if there are further strings that > need to be modified, let's see what they are. Thanks for confirming. Attaching the new patch set that removes the undesirable ON from getObjectIdentityParts() for TRANSFORM. Regards, Zheng --0000000000008463b705ea646663 Content-Type: application/octet-stream; name="v25-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v25-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8xkmm4r1 RnJvbSBhMTJjYWUyMTU0MDhmMzYwNzMxOGVhNTk1NGIyZmE4Nzc4NDc5MDlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjkgU2VwIDIwMjIgMDk6MTA6NDQgLTA0MDAKU3ViamVjdDogW1BBVENI IDIvNl0gU3VwcG9ydCBEREwgcmVwbGljYXRpb24uCgpUbyBzdXBwb3J0IERETCByZXBsaWNhdGlv biwgd2UgdXNlIGV2ZW50IHRyaWdnZXIgYW5kIERETCBkZXBhcnNpbmcKZmFjaWxpdGllcy4gV2hp bGUgY3JlYXRpbmcgYSBwdWJsaWNhdGlvbiwgd2UgcmVnaXN0ZXIgYSBjb21tYW5kIGVuZAp0cmln Z2VyIHRoYXQgZGVwYXJzZXMgdGhlIERETCBhcyBhIEpTT04gYmxvYiwgYW5kIFdBTCBsb2dzIGl0 LiBUaGUgZXZlbnQKdHJpZ2dlciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgYXQgdGhlIHRpbWUg b2YgZHJvcCBwdWJsaWNhdGlvbi4gVGhlCldBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwgYW5kIHNl bmRzIGl0IGRvd25zdHJlYW0gc2ltaWxhciB0byBvdGhlciBETUwKY29tbWFuZHMuIFRoZSBzdWJz Y3JpYmVyIHRoZW4gY29udmVydHMgSlNPTiBiYWNrIHRvIHRoZSBEREwgY29tbWFuZCBzdHJpbmcK YW5kIGV4ZWN1dGVzIGl0LiBJbiB0aGUgc3Vic2NyaWJlciwgd2UgYWxzbyBhZGQgdGhlIG5ld2x5 IGFkZGVkIHJlbCB0bwpwZ19zdWJzY3JpcHRpb25fcmVsIHNvIHRoYXQgdGhlIERNTCBjaGFuZ2Vz IG9uIHRoZSBuZXcgdGFibGUgY2FuIGJlCnJlcGxpY2F0ZWQgd2l0aG91dCBoYXZpbmcgdG8gbWFu dWFsbHkgcnVuCiJBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggUFVCTElDQVRJT04iLgoK VGhpcyBpcyBhIFBPQyBwYXRjaCB0byBzaG93IGhvdyB1c2luZyBldmVudCB0cmlnZ2VycyBhbmQg RERMIGRlcGFyc2luZwpmYWNpbGl0aWVzIHdlIGNhbiBpbXBsZW1lbnQgRERMIHJlcGxpY2F0aW9u LiBTbywgdGhlIGltcGxlbWVudGF0aW9uIGlzCnJlc3RyaWN0ZWQgdG8gQ1JFQVRFIFRBQkxFL0FM VEVSIFRBQkxFL0RST1AgVEFCTEUgY29tbWFuZHMuCgotIEZvciBub24tcmV3cml0ZSBBTFRFUiBv YmplY3QgY29tbWFuZCBhbmQKLSAgICAgQ1JFQVRFIG9iamVjdCBjb21tYW5kOgp3ZSBkZXBhcnNl IHRoZSBjb21tYW5kIGF0IGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2VyIGFuZCBXQUwgbG9n IHRoZQpkZXBhcnNlZCBqc29uIHN0cmluZy4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwg YW5kIHNlbmRzIGl0IHRvCnN1YnNjcmliZXIgaWYgdGhlIGNyZWF0ZWQvYWx0ZXJlZCB0YWJsZSBp cyBwdWJsaXNoZWQuIEl0IHN1cHBvcnRzIG1vc3Qgb2YKQUxURVIgVEFCTEUgY29tbWFuZCBleGNl cHQgc29tZSBjb21tYW5kcyhEREwgcmVsYXRlZCB0byBQQVJUSVRJT05FRCBUQUJMRQouLi4pIHRo YXQgaW50cm9kdWNlZCByZWNlbnRseSB3aGljaCBoYXZlbid0IGJlZW4gc3VwcG9ydGVkIGJ5IHRo ZSBjdXJyZW50CmRkbF9kZXBhcnNlciwgd2Ugd2lsbCBzdXBwb3J0IHRoYXQgbGF0ZXIuCgpOb3Rl IHRoYXQgdGhlIHJlcGxpY2F0aW9uIGZvciBBTFRFUiBJTkRFWCBjb21tYW5kIGlzIHN0aWxsIHVu ZGVyCnByb2dyZXNzLgoKLSBGb3IgRFJPUCBvYmplY3Q6ClRoZSAnY29tbWFuZCBzdGFydCcgZXZl bnQgaGFuZGxlciBsb2dzIGEgZGRsIG1lc3NhZ2Ugd2l0aCB0aGUgcmVsaWRzIG9mCnRoZSB0YWJs ZXMgdGhhdCBhcmUgZHJvcHBlZCB3aGljaCB0aGUgb3V0cHV0IHBsdWdpbiAocGdvdXRwdXQpIHN0 b3JlcyBpbgppdHMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQg aXQgaXMgZm9yIGEgdGFibGUgdGhhdCBpcwpwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbi4gTGF0ZXIg dGhlICdjb21tYW5kIGVuZCcgZXZlbnQgaGFuZGxlciBzZW5kcyB0aGUKYWN0dWFsIGRyb3AgbWVz c2FnZS4gUGdvdXRwdXQgb24gcmVjZWl2aW5nIHRoZSBjb21tYW5kIGVuZCwgb25seSBzZW5kcyBv dXQKdGhlIGRyb3AgY29tbWFuZCBvbmx5IGlmIGl0IGlzIGZvciBvbmUgb2YgdGhlIHJlbGlkcyBt YXJrZWQgZm9yIGRlbGV0aW5nLgpUaGUgcmVhc29uIHdlIGhhdmUgdG8gZG8gdGhpcyBpcyBiZWNh dXNlLCBvbmNlIHRoZSBsb2dpY2FsIGRlY29kZXIKcmVjZWl2ZXMgdGhlICdjb21tYW5kIGVuZCcg bWVzc2FnZSwgIHRoZSByZWxpZCBvZiB0aGUgdGFibGUgaXMgbm8gbG9uZ2VyCnZhbGlkIGFzIGl0 IGhhcyBiZWVuIGRlbGV0ZWQgYXMgcGFydCBvZiBpbnZhbGlkYXRpb25zIHJlY2VpdmVkIGZvciB0 aGUKZHJvcCB0YWJsZSBjb21tYW5kLiBJdCBpcyBubyBsb25nZXIgcG9zc2libGUgdG8gdmVyaWZ5 IGlmIHRoZSB0YWJsZSBpcwpwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbiBsaXN0IG9yIG5vdC4gVG8g bWFrZSB0aGlzIHBvc3NpYmxlLCBJIGhhdmUgYWRkZWQKdHdvIG1vcmUgZWxlbWVudHMgdG8gdGhl IGRkbCB4bG9nIGFuZCBkZGwgbWVzc2FnZSwgKHJlbGlkIGFuZCBjbWR0eXBlKS4KCldlIGNvdWxk IGhhdmUgYWxzbyBoYW5kbGVkIGFsbCB0aGlzIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUgYXMgd2Vs bCwgYnV0CnRoYXQgd291bGQgbWVhbiBzZW5kaW5nIHNwdXJpb3VzIGRkbCBtZXNzYWdlcyBmb3Ig dGFibGVzIHRoYXQgYXJlIG5vdCBwYXJ0Cm9mIHRoZSBwdWJsaWNhdGlvbi4KCi0gRm9yIHRhYmxl X3Jld3JpdGUgQUxURVIgVEFCTEUgY29tbWFuZDoKKEFMVEVSIENPTFVNTiBUWVBFLCBBREQgQ09M VU1OIERFRkFVTFQsIFNFVCBMT0dHRUQsIFNFVCBBQ0NFU1MgTUVUSE9EKQoKd2UgZGVwYXJzZSB0 aGUgY29tbWFuZCBhbmQgV0FMIGxvZyB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcgYXQKdGFibGVf cmV3cml0ZSBldmVudCB0cmlnZ2VyLiBUaGUgV0FMU2VuZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQg c2VuZHMgaXQgdG8Kc3Vic2NyaWJlciBpZiB0aGUgYWx0ZXJlZCB0YWJsZSBpcyBwdWJsaXNoZWQu IFRoZW4sIHRoZSBXQUxTZW5kZXIgd2lsbApjb252ZXJ0IHRoZSB1cGNvbWluZyByZXdyaXRlIElO U0VSVHMgdG8gVVBEQVRFcyBhbmQgc2VuZCB0aGVtIHRvCnN1YnNjcmliZXIgc28gdGhhdCB0aGUg ZGF0YSBiZXR3ZWVuIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBjYW4gYWx3YXlzIGJlCmNvbnNp c3RlbnQuIE5vdGUgdGhhdCB0aGUgdGFibGVzIHRoYXQgcHVibGlzaCByZXdyaXRlIGRkbCBtdXN0 IGhhdmUgYQpyZXBsaWNhIGlkZW50aXR5IGNvbmZpZ3VyZWQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0 byByZXBsaWNhdGUgdGhlIHVwY29taW5nCnJld3JpdGUgVVBEQVRFcy4KCldlIGRvIHRoaXMgd2F5 IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKDEpIFRoZSBkYXRhIGJlZm9yZSB0aGUgcmV3cml0ZSBk ZGwgY291bGQgYWxyZWFkeSBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlzaGVyIGFuZCBzdWJzY3Jp YmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4dHJhIGRhdGEgaW4gc3Vic2NyaWJlciB3aGljaApkb2Vz bid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNvIGdldCByZXdyaXR0ZW4sIHdlIG5lZWQgdG8gbGV0 IHRoZQpzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUgZGRsIHRvIHJld3Jp dGUgYWxsIHRoZSBkYXRhIGF0CmZpcnN0LgoKKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyBy ZXdyaXRlIGRkbCBjb3VsZCBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlzaGVyIGFuZCBzdWJzY3Jp YmVyKGR1ZSB0byBkaWZmZXJlbnQgZnVuY3Rpb25zL29wZXJhdG9ycyB1c2VkIGR1cmluZwpyZXdy aXRlKSwgc28gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhlIHJld3JpdGUgVVBEQVRFcyB0byBrZWVw IHRoZSBkYXRhCmNvbnNpc3RlbnQuCgpUTyBJTVBST1ZFOgpUaGlzIGFwcHJvYWNoIGNvdWxkIGJl IGltcHJvdmVkIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmliZXIgdHJ5IHRvIHVwZGF0ZQp0aGUgZXh0 cmEgZGF0YSBpdHNlbGYgaW5zdGVhZCBvZiBkb2luZyBmdWxseSByZXdyaXRlIGRkbCBhbmQgdXNl IHRoZQp1cGNvbWluZyByZXdyaXRlIFVQREFURXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBkYXRhLiBU byBhY2hpZXZlIHRoaXMsIHdlCmNvdWxkIG1vZGlmeSB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcg dG8gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSByZXdyaXRlCnBhcnQgYW5kIGFkZCBzb21lIGxvZ2lj IGluIHN1YnNjcmliZXIgdG8gdXBkYXRlIHRoZSBleHRyYSBkYXRhLgpCZXNpZGVzLCB3ZSBtYXkg bm90IG5lZWQgdG8gc2VuZCByZXdyaXRlIGNoYW5nZXMgZm9yIGFsbCB0eXBlIG9mIHJld3JpdGUK ZGRsLCBmb3IgZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0byBza2lwIHNlbmRpbmcgcmV3cml0ZSBj aGFuZ2VzIGZvciBBTFRFUgpUQUJMRSBTRVQgTE9HR0VEIGFzIHRoZSBkYXRhIGluIHRoZSB0YWJs ZSBkb2Vzbid0IGFjdHVhbGx5IGJlIGNoYW5nZWQuIFdlCmNvdWxkIHVzZSB0aGUgZGVwYXJzZXIg YW5kIGV2ZW50IHRyaWdnZXIgdG8gZmlsdGVyIHRoZXNlIGRkbHMgYW5kIHNraXAKc2VuZGluZyBy ZXdyaXRlIGNoYW5nZXMgZm9yIHRoZW0uCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L01ha2VmaWxlICAgICAgICAgIHwgICAxICsKIC4uLi9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRk bG1zZ2Rlc2MuYyAgICAgICB8ICA1MiArKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGlj YXRpb24uYyAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmln Z2VyLmMgICAgICAgICAgfCAyNDUgKysrKysrKysrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVi bGljYXRpb25jbWRzLmMgICAgICAgIHwgMTQ1ICsrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv dGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL01ha2VmaWxlICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9kZGxtZXNzYWdlLmMgIHwgIDg2ICsrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvZGVjb2RlLmMgICAgICB8ICA0MSArKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9sb2dpY2FsLmMgICAgIHwgIDkzICsrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvcHJvdG8uYyAgICAgICB8ICA0OCArKwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cmVvcmRlcmJ1ZmZlci5jICAgICAgIHwgMTM2ICsrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwgMjMyICsrKysrKysrKysKIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgICB8IDE5MiArKysrKysrLQogc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgICB8ICAyMSArLQogc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfd2Fs ZHVtcC9ybWdyZGVzYy5jICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BzcWwvZGVz Y3JpYmUuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMTcgKy0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9ybWdybGlzdC5oICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5oICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuaCAgICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v ZGRsbWVzc2FnZS5oICAgICAgICAgIHwgIDYwICsrKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v ZGVjb2RlLmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xv Z2ljYWxwcm90by5oICAgICAgICB8ICAgNyArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0 cHV0X3BsdWdpbi5oICAgICAgIHwgIDI3ICsrCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291 dHB1dC5oICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRl cmJ1ZmZlci5oICAgICAgIHwgIDM5ICsrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwu b3V0ICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGlj YXRpb24ub3V0ICAgICB8IDQyMCArKysrKysrKystLS0tLS0tLS0KIDMxIGZpbGVzIGNoYW5nZWQs IDE2NjUgaW5zZXJ0aW9ucygrKSwgMjI5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKaW5kZXggZjg4ZDcyZmQ4Ni4uYjhlMjll OGRmMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQpAQCAtMTksNiArMTksNyBA QCBPQkpTID0gXAogCWhhc2hkZXNjLm8gXAogCWhlYXBkZXNjLm8gXAogCWxvZ2ljYWxtc2dkZXNj Lm8gXAorCWxvZ2ljYWxkZGxtc2dkZXNjLm8gXAogCW14YWN0ZGVzYy5vIFwKIAluYnRkZXNjLm8g XAogCXJlbG1hcGRlc2MubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2MvbG9naWNhbGRkbG1zZ2Rlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dp Y2FsZGRsbXNnZGVzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjgx ZGVlNTI5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2Mv bG9naWNhbGRkbG1zZ2Rlc2MuYwpAQCAtMCwwICsxLDUyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBsb2dpY2FsZGRsbXNnZGVzYy5jCisgKgkgIHJtZ3IgZGVzY3JpcHRvciByb3V0aW5l cyBmb3IgcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDIwMTUtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdl LmgiCisKK3ZvaWQKK2xvZ2ljYWxkZGxtc2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpCit7CisJY2hhcgkgICAqcmVjID0gWExvZ1JlY0dldERhdGEocmVjb3Jk KTsKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHJlY29yZCkgJiB+WExSX0lORk9fTUFT SzsKKworCWlmIChpbmZvID09IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwl7CisJCXhsX2xv Z2ljYWxfZGRsX21lc3NhZ2UgKnhscmVjID0gKHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKikgcmVj OworCQljaGFyCSAgICpwcmVmaXggPSB4bHJlYy0+bWVzc2FnZTsKKwkJY2hhcgkgICAqbWVzc2Fn ZSA9IHhscmVjLT5tZXNzYWdlICsgeGxyZWMtPnByZWZpeF9zaXplOworCQljaGFyCSAgICpzZXAg PSAiIjsKKworCQlBc3NlcnQocHJlZml4W3hscmVjLT5wcmVmaXhfc2l6ZV0gIT0gJ1wwJyk7CisK KwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJwcmVmaXggXCIlc1wiOyBwYXlsb2FkICglenUgYnl0 ZXMpOiAiLAorCQkJCQkJIHByZWZpeCwgeGxyZWMtPm1lc3NhZ2Vfc2l6ZSk7CisJCWFwcGVuZFN0 cmluZ0luZm8oYnVmLCAicmVsaWQgJXUgY21kdHlwZSAldSIsIHhscmVjLT5yZWxpZCwgeGxyZWMt PmNtZHR5cGUpOworCQkvKiBXcml0ZSBtZXNzYWdlIHBheWxvYWQgYXMgYSBzZXJpZXMgb2YgaGV4 IGJ5dGVzICovCisJCWZvciAoaW50IGNudCA9IDA7IGNudCA8IHhscmVjLT5tZXNzYWdlX3NpemU7 IGNudCsrKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJTAyWCIsIHNlcCwgKHVu c2lnbmVkIGNoYXIpIG1lc3NhZ2VbY250XSk7CisJCQlzZXAgPSAiICI7CisJCX0KKwl9Cit9CisK K2NvbnN0IGNoYXIgKgorbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBpbmZvKQoreworCWlm ICgoaW5mbyAmIH5YTFJfSU5GT19NQVNLKSA9PSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJ CXJldHVybiAiRERMIE1FU1NBR0UiOworCisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9n L3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggNTk5NjcwOThiMy4uNzIxZDAyM2FhNSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwpAQCAtMTAwNSw2ICsxMDA1LDcgQEAgR2V0UHVibGlj YXRpb24oT2lkIHB1YmlkKQogCXB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBwdWJmb3JtLT5w dWJ1cGRhdGU7CiAJcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IHB1YmZvcm0tPnB1YmRlbGV0 ZTsKIAlwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBwdWJmb3JtLT5wdWJ0cnVuY2F0ZTsK KwlwdWItPnB1YmFjdGlvbnMucHViZGRsID0gcHViZm9ybS0+cHViZGRsOwogCXB1Yi0+cHVidmlh cm9vdCA9IHB1YmZvcm0tPnB1YnZpYXJvb3Q7CiAKIAlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCA0NDFmMjlkNjg0Li5hNDk5OTg0MmZm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0zNyw4ICszNywxMSBAQAog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9mdW5jLmgiCiAj aW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgor I2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRlICJ0Y29wL2RlcGFyc2Vf dXRpbGl0eS5oIgogI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgorI2luY2x1ZGUgInRjb3AvZGRs X2RlcGFyc2UuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2V2dGNhY2hlLmgiCkBAIC0xNTM3LDYgKzE1NDAsNyBA QCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKQogCiAJY29tbWFu ZC0+ZC5hbHRlclRhYmxlLmNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CiAJY29tbWFuZC0+ ZC5hbHRlclRhYmxlLm9iamVjdElkID0gSW52YWxpZE9pZDsKKwljb21tYW5kLT5kLmFsdGVyVGFi bGUucmV3cml0ZSA9IGZhbHNlOwogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0gTklM OwogCWNvbW1hbmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKIApAQCAtMTU3 MCw3ICsxNTc0LDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmplY3RJZCkK ICAqIGludGVybmFsbHksIHNvIHRoYXQncyBhbGwgdGhhdCB0aGlzIGNvZGUgbmVlZHMgdG8gaGFu ZGxlIGF0IHRoZSBtb21lbnQuCiAgKi8KIHZvaWQKLUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRh YmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQorRXZlbnRUcmln Z2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFk ZHJlc3MsIGJvb2wgcmV3cml0ZSkKIHsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlDb2xsZWN0 ZWRBVFN1YmNtZCAqbmV3c3ViOwpAQCAtMTU5MCw2ICsxNTk0LDcgQEAgRXZlbnRUcmlnZ2VyQ29s bGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3Mp CiAJbmV3c3ViLT5hZGRyZXNzID0gYWRkcmVzczsKIAluZXdzdWItPnBhcnNldHJlZSA9IGNvcHlP YmplY3Qoc3ViY21kKTsKIAorCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1h bmQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlIHw9IHJld3JpdGU7CiAJY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPQogCQlsYXBwZW5k KGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5z dWJjbWRzLCBuZXdzdWIpOwogCkBAIC0yMTc1LDMgKzIxODAsMjQxIEBAIHN0cmluZ2lmeV9hZGVm cHJpdnNfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUpCiAKIAlyZXR1cm4gIj8/PyI7CQkJCS8q IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIH0KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2Vf ZGRsX2NvbW1hbmRfc3RhcnQKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgY29tbWFuZCBhbmQgbG9n IGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydChQ R19GVU5DVElPTl9BUkdTKQoreworCUV2ZW50VHJpZ2dlckRhdGEgKnRyaWdkYXRhOworCWNoYXIJ CSpjb21tYW5kID0gcHNwcmludGYoIkRyb3AgdGFibGUgY29tbWFuZCBzdGFydCIpOworCURyb3BT dG10CSpzdG10OworCUxpc3RDZWxsCSpjZWxsMTsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RS SUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2Vy IG1hbmFnZXIiKTsKKworCXRyaWdkYXRhID0gKEV2ZW50VHJpZ2dlckRhdGEgKikgZmNpbmZvLT5j b250ZXh0OworCXN0bXQJID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7CisKKwkv KiBleHRyYWN0IHRoZSByZWxpZCBmcm9tIHRoZSBwYXJzZSB0cmVlICovCisJZm9yZWFjaChjZWxs MSwgc3RtdC0+b2JqZWN0cykKKwl7CisJCWNoYXIJcmVscGVyc2lzdDsKKwkJTm9kZQkqb2JqZWN0 ID0gbGZpcnN0KGNlbGwxKTsKKwkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQlSZWxhdGlvbiBy ZWxhdGlvbiA9IE5VTEw7CisKKwkJYWRkcmVzcyA9IGdldF9vYmplY3RfYWRkcmVzcyhzdG10LT5y ZW1vdmVUeXBlLAorCQkJCQkJCQkJIG9iamVjdCwKKwkJCQkJCQkJCSAmcmVsYXRpb24sCisJCQkJ CQkJCQkgQWNjZXNzRXhjbHVzaXZlTG9jaywKKwkJCQkJCQkJCSB0cnVlKTsKKworCQlyZWxwZXJz aXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShhZGRyZXNzLm9iamVjdElkKTsKKworCQkvKgorCQkg KiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxl IGlzIGEKKwkJICogdGVtcG9yYXJ5IHRhYmxlLgorCQkgKgorCQkgKiBXZSB3aWxsIGdlbmVyYXRl IHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZAorCQkgKiB0YWJs ZXMgY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRl LiBUaGlzCisJCSAqIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VU IExPR0dFRCBjb21tYW5kIGFuZCB0aGUKKwkJICogaW5jb21pbmcgcmV3cml0ZSBtZXNzYWdlIHdp dGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJCSAqLworCQlpZiAocmVscGVyc2lzdCA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQorCQl7CisJCQl0YWJsZV9jbG9zZShyZWxhdGlvbiwgTm9Mb2Nr KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2Ui LCBhZGRyZXNzLm9iamVjdElkLCBEQ1RfVGFibGVEcm9wU3RhcnQsCisJCQkJCQkJIGNvbW1hbmQs IHN0cmxlbihjb21tYW5kKSArIDEpOworCisJCWlmIChyZWxhdGlvbikKKwkJCXRhYmxlX2Nsb3Nl KHJlbGF0aW9uLCBOb0xvY2spOworCX0KKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwor fQorCisvKgorICogcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlCisgKgorICogRGVw YXJzZSB0aGUgZGRsIHRhYmxlIHJld3JpdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1 bQorcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJY2hhcgkJCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1hbmQgICAqY21kOworCWNoYXIJ CQkgICAqanNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5m bykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7 CisKKwljbWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCisJ QXNzZXJ0KGNtZCAmJiBjbWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlKTsKKworCXJlbHBlcnNpc3Qg PSBnZXRfcmVsX3BlcnNpc3RlbmNlKGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkKTsKKworCS8q CisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0 YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRhYmxlLgorCSAqCisJICogV2Ugd2lsbCBnZW5lcmF0 ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQgdGFibGVzCisJ ICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRl LiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQg TE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCSAqIHJld3JpdGUgbWVzc2FnZSB3aXRo b3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCSAqLworCWlmIChyZWxwZXJzaXN0ID09IFJFTFBF UlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisKKwkvKiBE ZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBv ZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNt ZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3RyaW5nICE9IE5VTEwpCisJCUxvZ0xvZ2ljYWxERExN ZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQsIERDVF9UYWJsZUFs dGVyLAorCQkJCQkJCSBqc29uX3N0cmluZywgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCisJ cmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2Rl cGFyc2VfZGRsX2NvbW1hbmRfZW5kCisgKgorICogRGVwYXJzZSB0aGUgZGRsIGNvbW1hbmQgYW5k IGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5k KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTGlzdENlbGwgICAqbGM7CisJc2xpc3RfaXRlciAgaXRl cjsKKwlEZXBhcnNlZENvbW1hbmRUeXBlIHR5cGU7CisJT2lkIHJlbGlkOworCisJaWYgKCFDQUxM RURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5 IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJZm9yZWFjaChsYywgY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jb21tYW5kTGlzdCkKKwl7CisJCWNoYXIJCQkJcmVscGVyc2lzdCA9IFJFTFBF UlNJU1RFTkNFX1BFUk1BTkVOVDsKKwkJQ29sbGVjdGVkQ29tbWFuZCAgICpjbWQgPSBsZmlyc3Qo bGMpOworCQljaGFyCQkJICAgKmpzb25fc3RyaW5nOworCisJCS8qIFJld3JpdGUgRERMIGhhcyBi ZWVuIGhhbmRsZWQgaW4gdGFibGVfcmV3cml0ZSB0cmlnZ2VyICovCisJCWlmIChjbWQtPmQuYWx0 ZXJUYWJsZS5yZXdyaXRlKQorCQl7CisJCQlSZW5hbWVTdG10ICpyZW5hbWVTdG10ID0gKFJlbmFt ZVN0bXQgKiljbWQtPnBhcnNldHJlZTsKKworCQkJaWYgKHJlbmFtZVN0bXQgJiYgcmVuYW1lU3Rt dC0+cmVsYXRpb25UeXBlICE9IE9CSkVDVF9UWVBFICYmCisJCQkJcmVuYW1lU3RtdC0+cmVsYXRp b25UeXBlICE9IE9CSkVDVF9UQUJMRSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjbWQt PnR5cGUgPT0gU0NUX1NpbXBsZSAmJgorCQkJIU9pZElzVmFsaWQoY21kLT5kLnNpbXBsZS5hZGRy ZXNzLm9iamVjdElkKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWQtPnR5cGUgPT0gU0NUX0Fs dGVyVGFibGUpCisJCXsKKwkJCXJlbGlkID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7CisJ CQl0eXBlID0gRENUX1RhYmxlQWx0ZXI7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBPbmx5IFND VF9TaW1wbGUgZm9yIG5vdyAqLworCQkJcmVsaWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2Jq ZWN0SWQ7CisJCQl0eXBlID0gRENUX1NpbXBsZUNtZDsKKwkJfQorCisJCWlmIChnZXRfcmVsX3Jl bGtpbmQocmVsaWQpKQorCQkJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UocmVsaWQp OworCisJCS8qCisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9z ZSB0YXJnZXQgdGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAqIFdl IHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9n Z2VkIHRhYmxlcworCQkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBz dWJzY3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkJICogcG9zc2libGUgdG8gZGlyZWN0bHkg cmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCQkgKiByZXdy aXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlmIChy ZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCQljb250aW51ZTsKKworCQkvKgor CQkgKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNv ZGluZyBvZiB0aGUKKwkJICogc2FtZS4KKwkJICovCisJCWpzb25fc3RyaW5nID0gZGVwYXJzZV91 dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwkJaWYgKGpzb25fc3RyaW5nID09IE5VTEwp CisJCQljb250aW51ZTsKKworCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIHJlbGlk LCB0eXBlLCBqc29uX3N0cmluZywKKwkJCQkJCQkgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOwor CX0KKworCXNsaXN0X2ZvcmVhY2goaXRlciwgJihjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPlNR TERyb3BMaXN0KSkKKwl7CisJCXZvbGF0aWxlIFNRTERyb3BPYmplY3QgKm9iajsKKwkJRHJvcFN0 bXQJCQkgICAqc3RtdDsKKwkJRXZlbnRUcmlnZ2VyRGF0YSAJICAgKnRyaWdkYXRhOworCQljaGFy CQkJCSAgICpjb21tYW5kOworCQlEZXBhcnNlZENvbW1hbmRUeXBlCQljbWR0eXBlOworCQljb25z dCBjaGFyCQkJICAgKnRtcHR5cGU7CisKKwkJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAq KSBmY2luZm8tPmNvbnRleHQ7CisJCXN0bXQJID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJz ZXRyZWU7CisKKwkJb2JqID0gc2xpc3RfY29udGFpbmVyKFNRTERyb3BPYmplY3QsIG5leHQsIGl0 ZXIuY3VyKTsKKworCQlpZiAoc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRhYmxlIikgPT0gMCkK KwkJCWNtZHR5cGUgPSBEQ1RfVGFibGVEcm9wRW5kOworCQllbHNlIGlmIChzdHJjbXAob2JqLT5v YmplY3R0eXBlLCAic2VxdWVuY2UiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5 cGUsICJzY2hlbWEiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJpbmRl eCIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImZ1bmN0aW9uIikgPT0g MCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAicHJvY2VkdXJlIikgPT0gMCB8fAor CQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAib3BlcmF0b3IiKSA9PSAwIHx8CisJCQkJIHN0 cmNtcChvYmotPm9iamVjdHR5cGUsICJvcGVyYXRvciBjbGFzcyIpID09IDAgfHwKKwkJCQkgc3Ry Y21wKG9iai0+b2JqZWN0dHlwZSwgIm9wZXJhdG9yIGZhbWlseSIpID09IDAgfHwKKwkJCQkgc3Ry Y21wKG9iai0+b2JqZWN0dHlwZSwgImNhc3QiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9i amVjdHR5cGUsICJ0eXBlIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAi ZG9tYWluIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidHJpZ2dlciIp ID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImNvbnZlcnNpb24iKSA9PSAw IHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJwb2xpY3kiKSA9PSAwCXx8CisJCQkJ IHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJydWxlIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2Jq LT5vYmplY3R0eXBlLCAiZXh0ZW5zaW9uIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmpl Y3R0eXBlLCAiZm9yZWlnbi1kYXRhIHdyYXBwZXIiKSA9PSAwKQorCQkJY21kdHlwZSA9IERDVF9P YmplY3REcm9wOworCQllbHNlCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBDaGFuZ2UgZm9y ZWlnbi1kYXRhIHdyYXBwZXIgdG8gZm9yZWlnbiBkYXRhIHdyYXBwZXIuCisJCSAqLworCQlpZiAo c3RybmNtcChvYmotPm9iamVjdHR5cGUsICJmb3JlaWduLWRhdGEgd3JhcHBlciIsIDIwKSA9PSAw KQorCQl7CisJCQl0bXB0eXBlID0gcHN0cmR1cCgiZm9yZWlnbiBkYXRhIHdyYXBwZXIiKTsKKwkJ CWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3BfY29tbWFuZChvYmotPm9iamlkZW50aXR5LCB0bXB0eXBl LAorCQkJCQkJCQkJCSAgIHN0bXQtPmJlaGF2aW9yKTsKKwkJfQorCQllbHNlCisJCQljb21tYW5k ID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQob2JqLT5vYmppZGVudGl0eSwgb2JqLT5vYmplY3R0eXBl LAorCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZpb3IpOworCisJCWlmIChjb21tYW5kID09IE5VTEwp CisJCQljb250aW51ZTsKKworCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIG9iai0+ YWRkcmVzcy5vYmplY3RJZCwgY21kdHlwZSwKKwkJCQkJCQkgY29tbWFuZCwgc3RybGVuKGNvbW1h bmQpICsgMSk7CisJfQorCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXggYThiNzVlYjFiZS4uNTg0MzA4M2Q2 NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAgLTM3LDEwICszNywx MiBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oIgogI2luY2x1ZGUgImZ1 bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVu Y3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFy c2VfY2xhdXNlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NvbGxhdGUuaCIKICNpbmNsdWRl ICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VyLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVk ZSAidXRpbHMvYXJyYXkuaCIKQEAgLTk2LDYgKzk4LDcgQEAgcGFyc2VfcHVibGljYXRpb25fb3B0 aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJcHViYWN0aW9ucy0+cHVidXBkYXRlID0gdHJ1ZTsK IAlwdWJhY3Rpb25zLT5wdWJkZWxldGUgPSB0cnVlOwogCXB1YmFjdGlvbnMtPnB1YnRydW5jYXRl ID0gdHJ1ZTsKKwlwdWJhY3Rpb25zLT5wdWJkZGwgPSBmYWxzZTsKIAkqcHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QgPSBmYWxzZTsKIAogCS8qIFBhcnNlIG9wdGlvbnMgKi8KQEAgLTE0Myw2ICsx NDYsOCBAQCBwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJ CQkJcHViYWN0aW9ucy0+cHViZGVsZXRlID0gdHJ1ZTsKIAkJCQllbHNlIGlmIChzdHJjbXAocHVi bGlzaF9vcHQsICJ0cnVuY2F0ZSIpID09IDApCiAJCQkJCXB1YmFjdGlvbnMtPnB1YnRydW5jYXRl ID0gdHJ1ZTsKKwkJCQllbHNlIGlmIChzdHJjbXAocHVibGlzaF9vcHQsICJkZGwiKSA9PSAwKQor CQkJCQlwdWJhY3Rpb25zLT5wdWJkZGwgPSB0cnVlOwogCQkJCWVsc2UKIAkJCQkJZXJlcG9ydChF UlJPUiwKIAkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCkBAIC03MjcsNiAr NzMyLDUzIEBAIENoZWNrUHViUmVsYXRpb25Db2x1bW5MaXN0KGNoYXIgKnB1Ym5hbWUsIExpc3Qg KnRhYmxlcywKIAl9CiB9CiAKKy8qCisgKiBDcmVhdGUgZXZlbnQgdHJpZ2dlciB3aGljaCBpcyB1 c2VkIGZvciBEREwgcmVwbGljYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitDcmVhdGVERExSZXBs aWNhRXZlbnRUcmlnZ2VyKGNoYXIgKmV2ZW50bmFtZSwgQ29tbWFuZFRhZyAqY29tbWFuZHMsCisJ CQkJCQkJIGludCBuY29tbWFuZHMsIE9iamVjdEFkZHJlc3MgcHViYWRkcmVzcywKKwkJCQkJCQkg T2lkIHB1Ym9pZCkKK3sKKwlpbnQJCQkJCWk7CisJTGlzdAkJCSAgICp0YWdzID0gTklMOworCU9p ZAkJCQkJdHJpZ2dlcl9pZDsKKwlPYmplY3RBZGRyZXNzCQlyZWZlcmVuY2VkOworCUNyZWF0ZUV2 ZW50VHJpZ1N0bXQgKmRkbF90cmlnZ2VyOworCWNoYXIJCQkJdHJpZ2dlcl9uYW1lW05BTUVEQVRB TEVOXTsKKwljaGFyCQkJCXRyaWdnZXJfZnVuY19uYW1lW05BTUVEQVRBTEVOXTsKKwlzdGF0aWMg Y29uc3QgY2hhciAgICp0cmlnZ2VyX25hbWVfcHJlZml4ID0gInBnX2RlcGFyc2VfdHJpZ18lc18l dSI7CisJc3RhdGljIGNvbnN0IGNoYXIgICAqdHJpZ2dlcl9mdW5jX3ByZWZpeCA9ICJwdWJsaWNh dGlvbl9kZXBhcnNlXyVzIjsKKworCWRkbF90cmlnZ2VyID0gbWFrZU5vZGUoQ3JlYXRlRXZlbnRU cmlnU3RtdCk7CisKKwlzbnByaW50Zih0cmlnZ2VyX25hbWUsIHNpemVvZih0cmlnZ2VyX25hbWUp LCB0cmlnZ2VyX25hbWVfcHJlZml4LAorCQkJIGV2ZW50bmFtZSwgcHVib2lkKTsKKwlzbnByaW50 Zih0cmlnZ2VyX2Z1bmNfbmFtZSwgc2l6ZW9mKHRyaWdnZXJfZnVuY19uYW1lKSwgdHJpZ2dlcl9m dW5jX3ByZWZpeCwKKwkJCSBldmVudG5hbWUpOworCisJZGRsX3RyaWdnZXItPnRyaWduYW1lID0g cHN0cmR1cCh0cmlnZ2VyX25hbWUpOworCWRkbF90cmlnZ2VyLT5ldmVudG5hbWUgPSBldmVudG5h bWU7CisJZGRsX3RyaWdnZXItPmZ1bmNuYW1lID0gU3lzdGVtRnVuY05hbWUodHJpZ2dlcl9mdW5j X25hbWUpOworCisJZm9yIChpID0gMDsgaSA8IG5jb21tYW5kczsgaSsrKQorCXsKKwkJU3RyaW5n ICp0YWcgPSBtYWtlU3RyaW5nKHBzdHJkdXAoR2V0Q29tbWFuZFRhZ05hbWUoY29tbWFuZHNbaV0p KSk7CisJCXRhZ3MgPSBsYXBwZW5kKHRhZ3MsIHRhZyk7CisJfQorCisJZGRsX3RyaWdnZXItPndo ZW5jbGF1c2UgPSBsaXN0X21ha2UxKG1ha2VEZWZFbGVtKCJ0YWciLCAoTm9kZSAqKSB0YWdzLCAt MSkpOworCisJdHJpZ2dlcl9pZCA9IENyZWF0ZUV2ZW50VHJpZ2dlcihkZGxfdHJpZ2dlcik7CisK KwkvKgorCSAqIFJlZ2lzdGVyIHRoZSBldmVudCB0cmlnZ2VycyBhcyBpbnRlcm5hbGx5IGRlcGVu ZGVudCBvbiB0aGUKKwkgKiBwdWJsaWNhdGlvbi4KKwkgKi8KKwlPYmplY3RBZGRyZXNzU2V0KHJl ZmVyZW5jZWQsIEV2ZW50VHJpZ2dlclJlbGF0aW9uSWQsIHRyaWdnZXJfaWQpOworCXJlY29yZERl cGVuZGVuY3lPbigmcmVmZXJlbmNlZCwgJnB1YmFkZHJlc3MsIERFUEVOREVOQ1lfSU5URVJOQUwp OworfQorCiAvKgogICogQ3JlYXRlIG5ldyBwdWJsaWNhdGlvbi4KICAqLwpAQCAtNzk3LDYgKzg0 OSw4IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGlj YXRpb25TdG10ICpzdG10KQogCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZWxldGUpOwog CXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPQogCQlCb29sR2V0 RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CisJdmFsdWVzW0FudW1fcGdfcHVibGljYXRp b25fcHViZGRsIC0gMV0gPQorCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGwpOwogCXZh bHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnZpYXJvb3QgLSAxXSA9CiAJCUJvb2xHZXREYXR1 bShwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CiAKQEAgLTg1Nyw2ICs5MTEsOTQgQEAgQ3Jl YXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQg KnN0bXQpCiAJCX0KIAl9CiAKKwkvKgorCSAqIENyZWF0ZSBhbiBldmVudCB0cmlnZ2VyIHRvIGFs bG93IGxvZ2dpbmcgb2YgRERMIHN0YXRlbWVudHMuCisJICoKKwkgKiBUT0RPOiBXZSBuZWVkIHRv IGZpbmQgYSBiZXR0ZXIgc3ludGF4IHRvIGFsbG93IHJlcGxpY2F0aW9uIG9mIERETAorCSAqIHN0 YXRlbWVudHMuCisJICoKKwkgKiBYWFg6IFRoaXMgY29kZSBpcyBqdXN0IHRvIHNob3cgdGhlIHJl cGxpY2F0aW9uIG9mIENSRUFURS9BTFRFUi9EUk9QCisJICogVEFCTEUgd29ya3MuIFdlIG5lZWQg dG8gZW5oYW5jZSB0aGlzIG9uY2UgdGhlIGFwcHJvYWNoIGZvciBEREwKKwkgKiByZXBsaWNhdGlv biBpcyBmaW5hbGl6ZWQuCisJICovCisJaWYgKHB1YmFjdGlvbnMucHViZGRsKQorCXsKKwkJQ29t bWFuZFRhZwlzdGFydF9jb21tYW5kc1tdID0ge0NNRFRBR19EUk9QX1RBQkxFfTsKKwkJQ29tbWFu ZFRhZwlyZXdyaXRlX2NvbW1hbmRzW10gPSB7Q01EVEFHX0FMVEVSX1RBQkxFfTsKKworCQlDb21t YW5kVGFnCWVuZF9jb21tYW5kc1tdID0geworCQkJQ01EVEFHX0NSRUFURV9GT1JFSUdOX0RBVEFf V1JBUFBFUiwKKwkJCUNNRFRBR19BTFRFUl9GT1JFSUdOX0RBVEFfV1JBUFBFUiwKKwkJCUNNRFRB R19EUk9QX0ZPUkVJR05fREFUQV9XUkFQUEVSLAorCQkJQ01EVEFHX0NSRUFURV9FWFRFTlNJT04s CisJCQlDTURUQUdfQUxURVJfRVhURU5TSU9OLAorCQkJQ01EVEFHX0RST1BfRVhURU5TSU9OLAor CQkJQ01EVEFHX0NSRUFURV9QT0xJQ1ksCisJCQlDTURUQUdfQUxURVJfUE9MSUNZLAorCQkJQ01E VEFHX0RST1BfUE9MSUNZLAorCQkJQ01EVEFHX0NSRUFURV9DT05WRVJTSU9OLAorCQkJQ01EVEFH X0FMVEVSX0NPTlZFUlNJT04sCisJCQlDTURUQUdfRFJPUF9DT05WRVJTSU9OLAorCQkJQ01EVEFH X0NSRUFURV9ET01BSU4sCisJCQlDTURUQUdfQUxURVJfRE9NQUlOLAorCQkJQ01EVEFHX0RST1Bf RE9NQUlOLAorCQkJQ01EVEFHX0FMVEVSX0lOREVYLAorCQkJQ01EVEFHX0NSRUFURV9UWVBFLAor CQkJQ01EVEFHX0RST1BfVFlQRSwKKwkJCUNNRFRBR19BTFRFUl9UWVBFLAorCQkJQ01EVEFHX0NS RUFURV9DQVNULAorCQkJQ01EVEFHX0FMVEVSX0NBU1QsCisJCQlDTURUQUdfRFJPUF9DQVNULAor CQkJQ01EVEFHX0NSRUFURV9PUEVSQVRPUiwKKwkJCUNNRFRBR19DUkVBVEVfT1BFUkFUT1JfQ0xB U1MsCisJCQlDTURUQUdfQ1JFQVRFX09QRVJBVE9SX0ZBTUlMWSwKKwkJCUNNRFRBR19BTFRFUl9P UEVSQVRPUl9GQU1JTFksCisJCQlDTURUQUdfQUxURVJfT1BFUkFUT1JfQ0xBU1MsCisJCQlDTURU QUdfQUxURVJfT1BFUkFUT1IsCisJCQlDTURUQUdfRFJPUF9PUEVSQVRPUiwKKwkJCUNNRFRBR19E Uk9QX09QRVJBVE9SX0NMQVNTLAorCQkJQ01EVEFHX0RST1BfT1BFUkFUT1JfRkFNSUxZLAorCQkJ Q01EVEFHX0NSRUFURV9QUk9DRURVUkUsCisJCQlDTURUQUdfQUxURVJfUFJPQ0VEVVJFLAorCQkJ Q01EVEFHX0RST1BfUFJPQ0VEVVJFLAorCQkJQ01EVEFHX0NSRUFURV9GVU5DVElPTiwKKwkJCUNN RFRBR19BTFRFUl9GVU5DVElPTiwKKwkJCUNNRFRBR19EUk9QX0ZVTkNUSU9OLAorCQkJQ01EVEFH X0NSRUFURV9UUklHR0VSLAorCQkJQ01EVEFHX0FMVEVSX1RSSUdHRVIsCisJCQlDTURUQUdfRFJP UF9UQUJMRSwKKwkJCUNNRFRBR19DUkVBVEVfVEFCTEUsCisJCQlDTURUQUdfQUxURVJfVEFCTEUs CisJCQlDTURUQUdfQ1JFQVRFX1NFUVVFTkNFLAorCQkJQ01EVEFHX0FMVEVSX1NFUVVFTkNFLAor CQkJQ01EVEFHX0RST1BfU0VRVUVOQ0UsCisJCQlDTURUQUdfQ1JFQVRFX1NDSEVNQSwKKwkJCUNN RFRBR19BTFRFUl9TQ0hFTUEsCisJCQlDTURUQUdfRFJPUF9TQ0hFTUEsCisJCQlDTURUQUdfQ1JF QVRFX0lOREVYLAorCQkJQ01EVEFHX0RST1BfSU5ERVgsCisJCQlDTURUQUdfQUxURVJfSU5ERVgs CisJCQlDTURUQUdfR1JBTlQsCisJCQlDTURUQUdfUkVWT0tFLAorCQkJQ01EVEFHX0NSRUFURV9S VUxFLAorCQkJQ01EVEFHX0FMVEVSX1JVTEUsCisJCQlDTURUQUdfRFJPUF9SVUxFLAorCQkJQ01E VEFHX1JFRlJFU0hfTUFURVJJQUxJWkVEX1ZJRVcKKwkJfTsKKworCQkvKiBDcmVhdGUgdGhlIGRk bF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRy aWdnZXIoImRkbF9jb21tYW5kX2VuZCIsIGVuZF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhv ZihlbmRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxf Y29tbWFuZF9zdGFydCBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRy aWdnZXIoImRkbF9jb21tYW5kX3N0YXJ0Iiwgc3RhcnRfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVu Z3Rob2Yoc3RhcnRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRo ZSB0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50 VHJpZ2dlcigidGFibGVfcmV3cml0ZSIsIHJld3JpdGVfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVu Z3Rob2YocmV3cml0ZV9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKwl9CisKIAl0YWJsZV9j bG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOwogCiAJSW52b2tlT2JqZWN0UG9zdENyZWF0ZUhv b2soUHVibGljYXRpb25SZWxhdGlvbklkLCBwdWJvaWQsIDApOwpAQCAtOTk1LDYgKzExMzcsOSBA QCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGlj YXRpb25TdG10ICpzdG10LAogCiAJCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5j YXRlIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CiAJCXJlcGxh Y2VzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9IHRydWU7CisKKwkJdmFs dWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0 aW9ucy5wdWJkZGwpOworCQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbCAtIDFd ID0gdHJ1ZTsKIAl9CiAKIAlpZiAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW4pCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDFmNzc0YWMwNjUuLjdmYzZmNDE2MDEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC01MjUzLDcgKzUyNTMsNyBAQCBBVEV4ZWNDbWQoTGlz dCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCSAqIFJlcG9ydCB0aGUgc3ViY29t bWFuZCB0byBpbnRlcmVzdGVkIGV2ZW50IHRyaWdnZXJzLgogCSAqLwogCWlmIChjbWQpCi0JCUV2 ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcyk7 CisJCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRk cmVzcywgdGFiLT5yZXdyaXRlKTsKIAogCS8qCiAJICogQnVtcCB0aGUgY29tbWFuZCBjb3VudGVy IHRvIGVuc3VyZSB0aGUgbmV4dCBzdWJjb21tYW5kIGluIHRoZSBzZXF1ZW5jZQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXggYzRlMmZkZWI3MS4uZjNlZWI2NzMx MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQor KysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNiw2ICsx Niw3IEBAIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9C SlMgPSBcCiAJZGVjb2RlLm8gXAorCWRkbG1lc3NhZ2Uub1wKIAlsYXVuY2hlci5vIFwKIAlsb2dp Y2FsLm8gXAogCWxvZ2ljYWxmdW5jcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9kZGxtZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u NTA5MzUyM2U5YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvZGRsbWVzc2FnZS5jCkBAIC0wLDAgKzEsODYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIGRkbG1lc3NhZ2UuYworICoJICBMb2dpY2FsIERETCBtZXNzYWdlcy4KKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9kZGxtZXNzYWdlLmMKKyAqCisgKiBOT1RFUworICoKKyAqIExvZ2ljYWwgRERMIG1lc3NhZ2Vz IGFsbG93IFhMT0cgbG9nZ2luZyBvZiBEREwgY29tbWFuZCBzdHJpbmdzIHRoYXQKKyAqIGdldCBw YXNzZWQgdG8gdGhlIGxvZ2ljYWwgZGVjb2RpbmcgcGx1Z2luLiBJbiBub3JtYWwgWExPRyBwcm9j ZXNzaW5nIHRoZXkKKyAqIGFyZSBzYW1lIGFzIE5PT1AuCisgKgorICogVW5saWtlIGdlbmVyaWMg bG9naWNhbCBtZXNzYWdlcywgdGhlc2UgRERMIG1lc3NhZ2VzIGhhdmUgb25seSB0cmFuc2FjdGlv bmFsCisgKiBtb2RlLk5vdGUgYnkgZGVmYXVsdCBERExzIGluIFBvc3RncmVTUUwgYXJlIHRyYW5z YWN0aW9uYWwuCisgKgorICogVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnQgb2YgY3VycmVudCB0cmFu c2FjdGlvbiBhbmQgd2lsbCBiZSBzZW50IHRvCisgKiBkZWNvZGluZyBwbHVnaW4gdXNpbmcgaW4g YSBzYW1lIHdheSBhcyBETUwgb3BlcmF0aW9ucy4KKyAqCisgKiBFdmVyeSBtZXNzYWdlIGNhcnJp ZXMgcHJlZml4IHRvIGF2b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIGRpZmZlcmVudCBkZWNvZGluZwor ICogcGx1Z2lucy4gVGhlIHBsdWdpbiBhdXRob3JzIG11c3QgdGFrZSBleHRyYSBjYXJlIHRvIHVz ZSB1bmlxdWUgcHJlZml4LAorICogZ29vZCBvcHRpb25zIHNlZW1zIHRvIGJlIGZvciBleGFtcGxl IHRvIHVzZSB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uLgorICoKKyAqIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3hh Y3QuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUgImNhdGFsb2cv bmFtZXNwYWNlLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvZXhl Y25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgorI2luY2x1ZGUgInJl cGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorCisv KgorICogV3JpdGUgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSBpbnRvIFhMb2cuCisgKi8K K1hMb2dSZWNQdHIKK0xvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZpeCwgT2lk IHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSBjb25zdCBjaGFyICpt ZXNzYWdlLCBzaXplX3Qgc2l6ZSkKK3sKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlIHhscmVjOwor CisJLyoKKwkgKiBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHRyYW5zYWN0aW9uIGlkLgorCSAqLwor CUFzc2VydChJc1RyYW5zYWN0aW9uU3RhdGUoKSk7CisJR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQo KTsKKworCXhscmVjLmRiSWQgPSBNeURhdGFiYXNlSWQ7CisJLyogdHJhaWxpbmcgemVybyBpcyBj cml0aWNhbDsgc2VlIGxvZ2ljYWxkZGxtc2dfZGVzYyAqLworCXhscmVjLnByZWZpeF9zaXplID0g c3RybGVuKHByZWZpeCkgKyAxOworCXhscmVjLm1lc3NhZ2Vfc2l6ZSA9IHNpemU7CisJeGxyZWMu cmVsaWQgPSByZWxpZDsKKwl4bHJlYy5jbWR0eXBlID0gY21kdHlwZTsKKworCVhMb2dCZWdpbklu c2VydCgpOworCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgJnhscmVjLCBTaXplT2ZMb2dpY2Fs RERMTWVzc2FnZSk7CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgcHJlZml4 KSwgeGxyZWMucHJlZml4X3NpemUpOworCVhMb2dSZWdpc3RlckRhdGEodW5jb25zdGlmeShjaGFy ICosIG1lc3NhZ2UpLCBzaXplKTsKKworCS8qIGFsbG93IG9yaWdpbiBmaWx0ZXJpbmcgKi8KKwlY TG9nU2V0UmVjb3JkRmxhZ3MoWExPR19JTkNMVURFX09SSUdJTik7CisKKwlyZXR1cm4gWExvZ0lu c2VydChSTV9MT0dJQ0FMRERMTVNHX0lELCBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpOworfQor CisvKgorICogUmVkbyBpcyBiYXNpY2FsbHkganVzdCBub29wIGZvciBsb2dpY2FsIGRlY29kaW5n IGRkbCBtZXNzYWdlcy4KKyAqLwordm9pZAorbG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJT dGF0ZSAqcmVjb3JkKQoreworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocmVjb3JkKSAm IH5YTFJfSU5GT19NQVNLOworCisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdF KQorCQllbG9nKFBBTklDLCAibG9naWNhbGRkbG1zZ19yZWRvOiB1bmtub3duIG9wIGNvZGUgJXUi LCBpbmZvKTsKKworCS8qIFRoaXMgaXMgb25seSBpbnRlcmVzdGluZyBmb3IgbG9naWNhbCBkZWNv ZGluZywgc2VlIGRlY29kZS5jLiAqLworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9kZWNvZGUuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv ZGVjb2RlLmMKaW5kZXggMmNjMGFjOWViMC4uMWYyYzc1MTc1OSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiYWNj ZXNzL3hsb2d1dGlscy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3Nh Z2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpAQCAtNjAz LDYgKzYwNCw0NiBAQCBsb2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKIAkJCQkJCQkgIG1lc3NhZ2UtPm1lc3NhZ2UgKyBt ZXNzYWdlLT5wcmVmaXhfc2l6ZSk7CiB9CiAKKy8qCisgKiBIYW5kbGUgcm1nciBMT0dJQ0FMRERM TVNHX0lEIHJlY29yZHMgZm9yIERlY29kZVJlY29yZEludG9SZW9yZGVyQnVmZmVyKCkuCisgKi8K K3ZvaWQKK2xvZ2ljYWxkZGxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg WExvZ1JlY29yZEJ1ZmZlciAqYnVmKQoreworCVNuYXBCdWlsZCAgKmJ1aWxkZXIgPSBjdHgtPnNu YXBzaG90X2J1aWxkZXI7CisJWExvZ1JlYWRlclN0YXRlICpyID0gYnVmLT5yZWNvcmQ7CisJVHJh bnNhY3Rpb25JZCB4aWQgPSBYTG9nUmVjR2V0WGlkKHIpOworCXVpbnQ4CQlpbmZvID0gWExvZ1Jl Y0dldEluZm8ocikgJiB+WExSX0lORk9fTUFTSzsKKwlSZXBPcmlnaW5JZCBvcmlnaW5faWQgPSBY TG9nUmVjR2V0T3JpZ2luKHIpOworCXhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKm1lc3NhZ2U7CisK KwlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJCWVsb2coRVJST1IsICJ1 bmV4cGVjdGVkIFJNX0xPR0lDQUxERExNU0dfSUQgcmVjb3JkIHR5cGU6ICV1IiwgaW5mbyk7CisK KwlSZW9yZGVyQnVmZmVyUHJvY2Vzc1hpZChjdHgtPnJlb3JkZXIsIFhMb2dSZWNHZXRYaWQociks IGJ1Zi0+b3JpZ3B0cik7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUgc25hcHNob3Qgb3Ig d2UgYXJlIGp1c3QgZmFzdC1mb3J3YXJkaW5nLCB0aGVyZSBpcyBubworCSAqIHBvaW50IGluIGRl Y29kaW5nIGRkbCBtZXNzYWdlcy4KKwkgKi8KKwlpZiAoU25hcEJ1aWxkQ3VycmVudFN0YXRlKGJ1 aWxkZXIpIDwgU05BUEJVSUxEX0ZVTExfU05BUFNIT1QgfHwKKwkJY3R4LT5mYXN0X2ZvcndhcmQp CisJCXJldHVybjsKKworCW1lc3NhZ2UgPSAoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqKSBYTG9n UmVjR2V0RGF0YShyKTsKKworCWlmIChtZXNzYWdlLT5kYklkICE9IGN0eC0+c2xvdC0+ZGF0YS5k YXRhYmFzZSB8fAorCQlGaWx0ZXJCeU9yaWdpbihjdHgsIG9yaWdpbl9pZCkpCisJCXJldHVybjsK KworCWlmIChTbmFwQnVpbGRQcm9jZXNzQ2hhbmdlKGJ1aWxkZXIsIHhpZCwgYnVmLT5vcmlncHRy KSkKKwkJUmVvcmRlckJ1ZmZlclF1ZXVlRERMTWVzc2FnZShjdHgtPnJlb3JkZXIsIHhpZCwgYnVm LT5lbmRwdHIsCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZSwgLyogZmlyc3QgcGFydCBvZiBt ZXNzYWdlIGlzIHByZWZpeCAqLworCQkJCQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2Vfc2l6ZSwKKwkJ CQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlICsgbWVzc2FnZS0+cHJlZml4X3NpemUsCisJCQkJCQkJ CQkgbWVzc2FnZS0+cmVsaWQsIG1lc3NhZ2UtPmNtZHR5cGUpOworfQorCiAvKgogICogQ29uc29s aWRhdGVkIGNvbW1pdCByZWNvcmQgaGFuZGxpbmcgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGZvcm0g b2YgY29tbWl0CiAgKiByZWNvcmRzLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9sb2dpY2FsLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xv Z2ljYWwuYwppbmRleCA2MjVhN2Y0MjczLi45ODk2OWM3YWVjIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYworKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgImZt Z3IuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNs dWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVj b2RlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxp Y2F0aW9uL29yaWdpbi5oIgpAQCAtNzMsNiArNzQsMTAgQEAgc3RhdGljIHZvaWQgdHJ1bmNhdGVf Y2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog c3RhdGljIHZvaWQgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9v bCB0cmFuc2FjdGlvbmFsLAogCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNz YWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgZGRsbWVzc2FnZV9j Yl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJ CQkJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJ CQkJCQkgIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkg IFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyogc3RyZWFtaW5n IGNhbGxiYWNrcyAqLwogc3RhdGljIHZvaWQgc3RyZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRl ckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKQEAgLTkwLDYgKzk1LDExIEBA IHN0YXRpYyB2b2lkIHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNo ZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuCiBzdGF0aWMgdm9pZCBzdHJlYW1fbWVzc2FnZV9jYl93 cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJ CQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJ CQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAq bWVzc2FnZSk7CitzdGF0aWMgdm9pZCBzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3Jk ZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJIFhMb2dS ZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJ CQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJ IFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyB2b2lkIHN0 cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRp b25zW10sIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSk7CiAKQEAgLTIxOCw2ICsyMjgsNyBA QCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAlj dHgtPnJlb3JkZXItPmFwcGx5X3RydW5jYXRlID0gdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAljdHgt PnJlb3JkZXItPmNvbW1pdCA9IGNvbW1pdF9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+bWVz c2FnZSA9IG1lc3NhZ2VfY2Jfd3JhcHBlcjsKKwljdHgtPnJlb3JkZXItPmRkbG1lc3NhZ2UgPSBk ZGxtZXNzYWdlX2NiX3dyYXBwZXI7CiAKIAkvKgogCSAqIFRvIHN1cHBvcnQgc3RyZWFtaW5nLCB3 ZSByZXF1aXJlIHN0YXJ0L3N0b3AvYWJvcnQvY29tbWl0L2NoYW5nZQpAQCAtMjM0LDYgKzI0NSw3 IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAog CQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2NvbW1pdF9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5j YWxsYmFja3Muc3RyZWFtX2NoYW5nZV9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Mu c3RyZWFtX21lc3NhZ2VfY2IgIT0gTlVMTCkgfHwKKwkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9k ZGxtZXNzYWdlX2NiICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fdHJ1bmNh dGVfY2IgIT0gTlVMTCk7CiAKIAkvKgpAQCAtMjUxLDYgKzI2Myw3IEBAIFN0YXJ0dXBEZWNvZGlu Z0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+c3Ry ZWFtX2NvbW1pdCA9IHN0cmVhbV9jb21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0 cmVhbV9jaGFuZ2UgPSBzdHJlYW1fY2hhbmdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5z dHJlYW1fbWVzc2FnZSA9IHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVy LT5zdHJlYW1fZGRsbWVzc2FnZSA9IHN0cmVhbV9kZGxtZXNzYWdlX2NiX3dyYXBwZXI7CiAJY3R4 LT5yZW9yZGVyLT5zdHJlYW1fdHJ1bmNhdGUgPSBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcjsK IAogCkBAIC0xMjIwLDYgKzEyMzMsNDQgQEAgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZm ZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJZXJyb3JfY29udGV4dF9zdGFjayA9 IGVycmNhbGxiYWNrLnByZXZpb3VzOwogfQogCitzdGF0aWMgdm9pZAorZGRsbWVzc2FnZV9jYl93 cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJ CSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIE9p ZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkgIFNpemUgbWVzc2Fn ZV9zaXplLAorCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJTG9naWNhbERlY29kaW5n Q29udGV4dCAqY3R4ID0gY2FjaGUtPnByaXZhdGVfZGF0YTsKKwlMb2dpY2FsRXJyb3JDYWxsYmFj a1N0YXRlIHN0YXRlOworCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxiYWNrOworCisJQXNz ZXJ0KCFjdHgtPmZhc3RfZm9yd2FyZCk7CisKKwlpZiAoY3R4LT5jYWxsYmFja3MuZGRsbWVzc2Fn ZV9jYiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBQdXNoIGNhbGxiYWNrICsgaW5mbyBvbiB0 aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCXN0YXRlLmN0eCA9IGN0eDsKKwlzdGF0ZS5jYWxs YmFja19uYW1lID0gImRkbG1lc3NhZ2UiOworCXN0YXRlLnJlcG9ydF9sb2NhdGlvbiA9IG1lc3Nh Z2VfbHNuOworCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gb3V0cHV0X3BsdWdpbl9lcnJvcl9jYWxs YmFjazsKKwllcnJjYWxsYmFjay5hcmcgPSAodm9pZCAqKSAmc3RhdGU7CisJZXJyY2FsbGJhY2su cHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAm ZXJyY2FsbGJhY2s7CisKKwkvKiBzZXQgb3V0cHV0IHN0YXRlICovCisJY3R4LT5hY2NlcHRfd3Jp dGVzID0gdHJ1ZTsKKwljdHgtPndyaXRlX3hpZCA9IHR4biAhPSBOVUxMID8gdHhuLT54aWQgOiBJ bnZhbGlkVHJhbnNhY3Rpb25JZDsKKwljdHgtPndyaXRlX2xvY2F0aW9uID0gbWVzc2FnZV9sc247 CisKKwkvKiBkbyB0aGUgYWN0dWFsIHdvcms6IGNhbGwgY2FsbGJhY2sgKi8KKwljdHgtPmNhbGxi YWNrcy5kZGxtZXNzYWdlX2NiKGN0eCwgdHhuLCBtZXNzYWdlX2xzbiwgcHJlZml4LCByZWxpZCwg Y21kdHlwZSwKKwkJCQkJCQkJIG1lc3NhZ2Vfc2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3AgdGhl IGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJh Y2sucHJldmlvdXM7Cit9CisKIHN0YXRpYyB2b2lkCiBzdHJlYW1fc3RhcnRfY2Jfd3JhcHBlcihS ZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJWExvZ1Jl Y1B0ciBmaXJzdF9sc24pCkBAIC0xNTM1LDYgKzE1ODYsNDggQEAgc3RyZWFtX21lc3NhZ2VfY2Jf d3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCWVy cm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKIH0KIAorc3RhdGljIHZv aWQKK3N0cmVhbV9kZGxtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJ CQkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUg Y21kdHlwZSwKKwkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJIGNvbnN0IGNoYXIg Km1lc3NhZ2UpCit7CisJTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4ID0gY2FjaGUtPnByaXZh dGVfZGF0YTsKKwlMb2dpY2FsRXJyb3JDYWxsYmFja1N0YXRlIHN0YXRlOworCUVycm9yQ29udGV4 dENhbGxiYWNrIGVycmNhbGxiYWNrOworCisJQXNzZXJ0KCFjdHgtPmZhc3RfZm9yd2FyZCk7CisK KwkvKiBXZSdyZSBvbmx5IHN1cHBvc2VkIHRvIGNhbGwgdGhpcyB3aGVuIHN0cmVhbWluZyBpcyBz dXBwb3J0ZWQuICovCisJQXNzZXJ0KGN0eC0+c3RyZWFtaW5nKTsKKworCS8qIHRoaXMgY2FsbGJh Y2sgaXMgb3B0aW9uYWwgKi8KKwlpZiAoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbG1lc3NhZ2Vf Y2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhl IGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJh Y2tfbmFtZSA9ICJzdHJlYW1fZGRsbWVzc2FnZSI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0g bWVzc2FnZV9sc247CisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9y X2NhbGxiYWNrOworCWVycmNhbGxiYWNrLmFyZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxs YmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFj ayA9ICZlcnJjYWxsYmFjazsKKworCS8qIHNldCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2Vw dF93cml0ZXMgPSB0cnVlOworCWN0eC0+d3JpdGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhp ZCA6IEludmFsaWRUcmFuc2FjdGlvbklkOworCWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdl X2xzbjsKKworCS8qIGRvIHRoZSBhY3R1YWwgd29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+ Y2FsbGJhY2tzLnN0cmVhbV9kZGxtZXNzYWdlX2NiKGN0eCwgdHhuLCBtZXNzYWdlX2xzbiwgcHJl Zml4LCByZWxpZCwKKwkJCQkJCQkJCQljbWR0eXBlLCBtZXNzYWdlX3NpemUsIG1lc3NhZ2UpOwor CisJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJZXJyb3JfY29udGV4dF9zdGFj ayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOworfQorCiBzdGF0aWMgdm9pZAogc3RyZWFtX3RydW5j YXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKIAkJCQkJCSAgIGludCBucmVsYXRpb25zLCBSZWxhdGlvbiByZWxhdGlvbnNbXSwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwppbmRleCBmZjg1MTNlMmQyLi5mMzU0MDYy NzViIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMK KysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCkBAIC02NjIsNiAr NjYyLDUyIEBAIGxvZ2ljYWxyZXBfd3JpdGVfbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNh Y3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAogCXBxX3NlbmRieXRlcyhvdXQsIG1lc3NhZ2Us IHN6KTsKIH0KIAorLyoKKyAqIFJlYWQgRERMIE1FU1NBR0UgZnJvbSBzdHJlYW0KKyAqLworY2hh ciAqCitsb2dpY2FscmVwX3JlYWRfZGRsbWVzc2FnZShTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRy ICpsc24sCisJCQkJCQkgICBjb25zdCBjaGFyICoqcHJlZml4LAorCQkJCQkJICAgU2l6ZSAqc3op Cit7CisJdWludDggZmxhZ3M7CisJY2hhciAqbXNnOworCisJLy9UT0RPIGRvdWJsZSBjaGVjayB3 aGVuIGRvIHdlIG5lZWQgdG8gZ2V0IFRyYW5zYWN0aW9uSWQuCisKKwlmbGFncyA9IHBxX2dldG1z Z2ludChpbiwgMSk7CisJaWYgKGZsYWdzICE9IDApCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6 ZWQgZmxhZ3MgJXUgaW4gZGRsIG1lc3NhZ2UiLCBmbGFncyk7CisJKmxzbiA9IHBxX2dldG1zZ2lu dDY0KGluKTsKKwkqcHJlZml4ID0gcHFfZ2V0bXNnc3RyaW5nKGluKTsKKwkqc3ogPSBwcV9nZXRt c2dpbnQoaW4sIDQpOworCW1zZyA9IChjaGFyICopIHBxX2dldG1zZ2J5dGVzKGluLCAqc3opOwor CisJcmV0dXJuIG1zZzsKK30KKworLyoKKyAqIFdyaXRlIERETCBNRVNTQUdFIHRvIHN0cmVhbQor ICovCit2b2lkCitsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRy YW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQljb25zdCBjaGFyICpwcmVm aXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJdWludDgJCWZsYWdzID0gMDsK KworCXBxX3NlbmRieXRlKG91dCwgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0UpOworCisJLyog dHJhbnNhY3Rpb24gSUQgKGlmIG5vdCB2YWxpZCwgd2UncmUgbm90IHN0cmVhbWluZykgKi8KKwlp ZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKKwkJcHFfc2VuZGludDMyKG91dCwgeGlkKTsK KworCXBxX3NlbmRpbnQ4KG91dCwgZmxhZ3MpOworCXBxX3NlbmRpbnQ2NChvdXQsIGxzbik7CisJ cHFfc2VuZHN0cmluZyhvdXQsIHByZWZpeCk7CisJcHFfc2VuZGludDMyKG91dCwgc3opOworCXBx X3NlbmRieXRlcyhvdXQsIG1lc3NhZ2UsIHN6KTsKK30KKwogLyoKICAqIFdyaXRlIHJlbGF0aW9u IGRlc2NyaXB0aW9uIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCkBAIC0xMjE4LDYgKzEyNjQs OCBAQCBsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24pCiAJ CQlyZXR1cm4gIlRZUEUiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19NRVNTQUdFOgogCQkJcmV0 dXJuICJNRVNTQUdFIjsKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERMTUVTU0FHRToKKwkJCXJl dHVybiAiRERMIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfQkVHSU5fUFJFUEFSRToKIAkJCXJl dHVybiAiQkVHSU4gUFJFUEFSRSI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX1BSRVBBUkU6CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4 IDZkZmY5OTE1YTUuLjNjMzc2OTBjMzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSAibGli L2JpbmFyeWhlYXAuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQu aCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIK ICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCkBAIC01MTUsNiArNTE2LDE0IEBAIFJlb3Jk ZXJCdWZmZXJSZXR1cm5DaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJDaGFu Z2UgKmNoYW5nZSwKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UpOwogCQkJY2hh bmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTlVMTDsKIAkJCWJyZWFrOworCQljYXNlIFJFT1JERVJf QlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJaWYgKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJl Zml4ICE9IE5VTEwpCisJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgpOworCQkJ Y2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBOVUxMOworCQkJaWYgKGNoYW5nZS0+ZGF0YS5k ZGxtc2cubWVzc2FnZSAhPSBOVUxMKQorCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVz c2FnZSk7CisJCQljaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UgPSBOVUxMOworCQkJYnJlYWs7 CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCWlmIChjaGFu Z2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9ucykKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuaW52 YWwuaW52YWxpZGF0aW9ucyk7CkBAIC04NjksNiArODc4LDM2IEBAIFJlb3JkZXJCdWZmZXJRdWV1 ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCX0KIH0KIAor LyoKKyAqIEEgdHJhbnNhY3Rpb25hbCBEREwgbWVzc2FnZSBpcyBxdWV1ZWQgdG8gYmUgcHJvY2Vz c2VkIHVwb24gY29tbWl0LgorICovCit2b2lkCitSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdl KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKKwkJCQkJCQkgWExvZ1JlY1B0 ciBsc24sIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsIGNv bnN0IGNoYXIgKm1lc3NhZ2UsCisJCQkJCQkJIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlw ZSBjbWR0eXBlKQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlSZW9yZGVyQnVmZmVy Q2hhbmdlICpjaGFuZ2U7CisKKwlBc3NlcnQoeGlkICE9IEludmFsaWRUcmFuc2FjdGlvbklkKTsK KworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocmItPmNvbnRleHQpOworCisJ Y2hhbmdlID0gUmVvcmRlckJ1ZmZlckdldENoYW5nZShyYik7CisJY2hhbmdlLT5hY3Rpb24gPSBS RU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLnBy ZWZpeCA9IHBzdHJkdXAocHJlZml4KTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkID0gcmVs aWQ7CisJY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlID0gY21kdHlwZTsKKwljaGFuZ2UtPmRh dGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSA9IG1lc3NhZ2Vfc2l6ZTsKKwljaGFuZ2UtPmRhdGEuZGRs bXNnLm1lc3NhZ2UgPSBwYWxsb2MobWVzc2FnZV9zaXplKTsKKwltZW1jcHkoY2hhbmdlLT5kYXRh LmRkbG1zZy5tZXNzYWdlLCBtZXNzYWdlLCBtZXNzYWdlX3NpemUpOworCisJUmVvcmRlckJ1ZmZl clF1ZXVlQ2hhbmdlKHJiLCB4aWQsIGxzbiwgY2hhbmdlLCBmYWxzZSk7CisKKwlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Cit9CisKIC8qCiAgKiBBc3NlcnRUWE5Mc25PcmRlcgog ICoJCVZlcmlmeSBMU04gb3JkZXJpbmcgb2YgdHJhbnNhY3Rpb24gbGlzdHMgaW4gdGhlIHJlb3Jk ZXJidWZmZXIKQEAgLTE5NjgsNiArMjAwNywyOSBAQCBSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdl KFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCWNoYW5nZS0+ ZGF0YS5tc2cubWVzc2FnZSk7CiB9CiAKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIFJlb3Jk ZXJCdWZmZXJQcm9jZXNzVFhOIGZvciBhcHBseWluZyB0aGUgRERMIG1lc3NhZ2UuCisgKi8KK3N0 YXRpYyBpbmxpbmUgdm9pZAorUmVvcmRlckJ1ZmZlckFwcGx5RERMTWVzc2FnZShSZW9yZGVyQnVm ZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCSBSZW9yZGVyQnVmZmVyQ2hh bmdlICpjaGFuZ2UsIGJvb2wgc3RyZWFtaW5nKQoreworCWlmIChzdHJlYW1pbmcpCisJCXJiLT5z dHJlYW1fZGRsbWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJCQkgIGNoYW5nZS0+ ZGF0YS5kZGxtc2cucHJlZml4LAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwK KwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwKKwkJCQkJCQkgIGNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5t ZXNzYWdlKTsKKwllbHNlCisJCXJiLT5kZGxtZXNzYWdlKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAor CQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJICAgY2hhbmdlLT5kYXRh LmRkbG1zZy5yZWxpZCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLAorCQkJ CQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICAgY2hhbmdlLT5k YXRhLmRkbG1zZy5tZXNzYWdlKTsKK30KKwogLyoKICAqIEZ1bmN0aW9uIHRvIHN0b3JlIHRoZSBj b21tYW5kIGlkIGFuZCBzbmFwc2hvdCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CiAgKiBzdHJl YW0gc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgd2hpbGUgc2VuZGluZyB0aGUgbmV4dCBz dHJlYW0uCkBAIC0yMzQ4LDYgKzI0MTAsMTAgQEAgUmVvcmRlckJ1ZmZlclByb2Nlc3NUWE4oUmVv cmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJUmVvcmRlckJ1ZmZl ckFwcGx5TWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UsIHN0cmVhbWluZyk7CiAJCQkJCWJyZWFrOwog CisJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRToKKwkJCQkJUmVvcmRl ckJ1ZmZlckFwcGx5RERMTWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UsIHN0cmVhbWluZyk7CisJCQkJ CWJyZWFrOworCiAJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgog CQkJCQkvKiBFeGVjdXRlIHRoZSBpbnZhbGlkYXRpb24gbWVzc2FnZXMgbG9jYWxseSAqLwogCQkJ CQlSZW9yZGVyQnVmZmVyRXhlY3V0ZUludmFsaWRhdGlvbnMoY2hhbmdlLT5kYXRhLmludmFsLm5p bnZhbGlkYXRpb25zLApAQCAtMzc3MSw2ICszODM3LDQwIEBAIFJlb3JkZXJCdWZmZXJTZXJpYWxp emVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJ ICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOwogCQkJCWRhdGEgKz0gY2hhbmdlLT5k YXRhLm1zZy5tZXNzYWdlX3NpemU7CiAKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBSRU9SREVS X0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRToKKwkJCXsKKwkJCQljaGFyCSAgICpkYXRhOworCQkJ CVNpemUJCXByZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KSAr IDE7CisKKwkJCQlzeiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2Fn ZV9zaXplICsKKwkJCQkJc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KSAr IHNpemVvZihTaXplKTsKKwkJCQlSZW9yZGVyQnVmZmVyU2VyaWFsaXplUmVzZXJ2ZShyYiwgc3op OworCisJCQkJZGF0YSA9ICgoY2hhciAqKSByYi0+b3V0YnVmKSArIHNpemVvZihSZW9yZGVyQnVm ZmVyRGlza0NoYW5nZSk7CisKKwkJCQkvKiBtaWdodCBoYXZlIGJlZW4gcmVhbGxvY2F0ZWQgYWJv dmUgKi8KKwkJCQlvbmRpc2sgPSAoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UgKikgcmItPm91dGJ1 ZjsKKworCQkJCS8qIHdyaXRlIHRoZSBwcmVmaXgsIHJlbGlkIGFuZCBjbWR0eXBlIGluY2x1ZGlu ZyB0aGUgc2l6ZSAqLworCQkJCW1lbWNweShkYXRhLCAmcHJlZml4X3NpemUsIHNpemVvZihTaXpl KSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2Ut PmRhdGEuZGRsbXNnLnJlbGlkLCBzaXplb2YoT2lkKSk7CisJCQkJZGF0YSArPSBzaXplb2YoT2lk KTsKKwkJCQltZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwgc2l6ZW9m KGludCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKGludCk7CisJCQkJbWVtY3B5KGRhdGEsIGNoYW5n ZS0+ZGF0YS5kZGxtc2cucHJlZml4LAorCQkJCQkgICBwcmVmaXhfc2l6ZSk7CisJCQkJZGF0YSAr PSBwcmVmaXhfc2l6ZTsKKworCQkJCS8qIHdyaXRlIHRoZSBtZXNzYWdlIGluY2x1ZGluZyB0aGUg c2l6ZSAqLworCQkJCW1lbWNweShkYXRhLCAmY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3Np emUsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5 KGRhdGEsIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRh LmRkbG1zZy5tZXNzYWdlX3NpemUpOworCQkJCWRhdGEgKz0gY2hhbmdlLT5kYXRhLmRkbG1zZy5t ZXNzYWdlX3NpemU7CisKIAkJCQlicmVhazsKIAkJCX0KIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9D SEFOR0VfSU5WQUxJREFUSU9OOgpAQCAtNDA4NSw2ICs0MTg1LDE1IEBAIFJlb3JkZXJCdWZmZXJD aGFuZ2VTaXplKFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSkKIAkJCQlzeiArPSBwcmVmaXhf c2l6ZSArIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplICsKIAkJCQkJc2l6ZW9mKFNpemUp ICsgc2l6ZW9mKFNpemUpOwogCisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZG RVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQl7CisJCQkJU2l6ZQkJcHJlZml4X3NpemUgPSBzdHJs ZW4oY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgpICsgMTsKKworCQkJCXN6ICs9IHByZWZpeF9z aXplICsgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUgKworCQkJCQlzaXplb2YoU2l6 ZSkgKyBzaXplb2YoU2l6ZSkgKyBzaXplb2YoT2lkKSArIHNpemVvZihpbnQpOworCiAJCQkJYnJl YWs7CiAJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKQEAg LTQzNjAsNiArNDQ2OSwzMyBAQCBSZW9yZGVyQnVmZmVyUmVzdG9yZUNoYW5nZShSZW9yZGVyQnVm ZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkgICBjaGFuZ2UtPmRhdGEubXNn Lm1lc3NhZ2Vfc2l6ZSk7CiAJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6 ZTsKIAorCQkJCWJyZWFrOworCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExN RVNTQUdFOgorCQkJeworCQkJCVNpemUJCXByZWZpeF9zaXplOworCisJCQkJLyogcmVhZCBwcmVm aXggKi8KKwkJCQltZW1jcHkoJnByZWZpeF9zaXplLCBkYXRhLCBzaXplb2YoU2l6ZSkpOworCQkJ CWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLmRkbG1zZy5y ZWxpZCwgZGF0YSwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJ bWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUsIGRhdGEsIHNpemVvZihpbnQpKTsK KwkJCQlkYXRhICs9IHNpemVvZihpbnQpOworCQkJCWNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4 ID0gTWVtb3J5Q29udGV4dEFsbG9jKHJiLT5jb250ZXh0LCBwcmVmaXhfc2l6ZSk7CisJCQkJbWVt Y3B5KGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4LCBkYXRhLCBwcmVmaXhfc2l6ZSk7CisJCQkJ QXNzZXJ0KGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4W3ByZWZpeF9zaXplIC0gMV0gPT0gJ1ww Jyk7CisJCQkJZGF0YSArPSBwcmVmaXhfc2l6ZTsKKworCQkJCS8qIHJlYWQgdGhlIG1lc3NhZ2Ug Ki8KKwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplLCBkYXRhLCBzaXpl b2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCWNoYW5nZS0+ZGF0YS5t c2cubWVzc2FnZSA9IE1lbW9yeUNvbnRleHRBbGxvYyhyYi0+Y29udGV4dCwKKwkJCQkJCQkJCQkJ CQkJCSAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCW1lbWNweShjaGFuZ2Ut PmRhdGEubXNnLm1lc3NhZ2UsIGRhdGEsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2Fn ZV9zaXplKTsKKwkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplOworCiAJ CQkJYnJlYWs7CiAJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElP TjoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IDIwN2E1ODA1 YmEuLjIxYjgyZjM0NGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIu YwpAQCAtMTU2LDYgKzE1Niw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAi bm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2lu Y2x1ZGUgInBhcnNlci9hbmFseXplLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAi cG9zdG1hc3Rlci9iZ3dvcmtlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0Lmgi CkBAIC0xNzksNyArMTgwLDEwIEBACiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNs dWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCisjaW5jbHVkZSAidGNvcC9wcXVlcnkuaCIKICNpbmNs dWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCiAjaW5jbHVk ZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1 dGlscy9jYXRjYWNoZS5oIgpAQCAtMjQ2NCw2ICsyNDY4LDIzMCBAQCBhcHBseV9oYW5kbGVfdHJ1 bmNhdGUoU3RyaW5nSW5mbyBzKQogCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiB9CiAKKy8qIFJl bW92ZSB0aGUgZGF0YSBwb3B1bGF0aW9uIGZyb20gdGhlIGNvbW1hbmQgKi8KK3N0YXRpYyB2b2lk CitwcmVwcm9jZXNzX2NyZWF0ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQoreworCUNvbW1hbmRU YWcJY29tbWFuZFRhZzsKKworCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2RlICop Y29tbWFuZCk7CisKKwlzd2l0Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENNRFRBR19DUkVB VEVfVEFCTEVfQVM6CisJCWNhc2UgQ01EVEFHX1NFTEVDVF9JTlRPOgorCQkJeworCQkJCUNyZWF0 ZVRhYmxlQXNTdG10ICpjYXN0bXQgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKikgY29tbWFuZC0+c3Rt dDsKKwkJCQlpZiAoY2FzdG10LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkKKwkJCQl7CisJCQkJ CS8qCisJCQkJCSAqIEZvcmNlIHNraXBwaW5nIGRhdGEgcG9wdWxhdGlvbiB0byBhdm9pZCBkYXRh CisJCQkJCSAqIGluY29uc2lzdGVuY3kuIERhdGEgc2hvdWxkIGJlIHJlcGxpY2F0ZWQgZnJvbSB0 aGUKKwkJCQkJICogcHVibGlzaGVyIGluc3RlYWQuCisJCQkJCSAqLworCQkJCQljYXN0bXQtPmlu dG8tPnNraXBEYXRhID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDTURU QUdfU0VMRUNUOgorCQkJeworCQkJCVNlbGVjdFN0bXQgKnNzdG10ID0gKFNlbGVjdFN0bXQgKikg Y29tbWFuZC0+c3RtdDsKKworCQkJCWlmIChzc3RtdC0+aW50b0NsYXVzZSAhPSBOVUxMKQorCQkJ CXsKKwkJCQkJLyoKKwkJCQkJICogRm9yY2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0aW9uIHRvIGF2 b2lkIGRhdGEKKwkJCQkJICogaW5jb25zaXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUgcmVwbGljYXRl ZCBmcm9tIHRoZQorCQkJCQkgKiBwdWJsaXNoZXIgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJCXNz dG10LT5pbnRvQ2xhdXNlLT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogSGFuZGxlIENSRUFURSBUQUJM RSBjb21tYW5kCisgKgorICogQ2FsbCBBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZSBmb3IgQ1JFQVRF IFRBQkVMIGNvbW1hbmQgdG8gc2V0IHRoZSByZWxzdGF0ZSB0bworICogU1VCUkVMX1NUQVRFX1JF QURZIHNvIERNTCBjaGFuZ2VzIG9uIHRoaXMgbmV3IHRhYmxlIGNhbiBiZSByZXBsaWNhdGVkIHdp dGhvdXQKKyAqIGhhdmluZyB0byBtYW51YWxseSBydW4gImFsdGVyIHN1YnNjcmlwdGlvbiAuLi4g cmVmcmVzaCBwdWJsaWNhdGlvbiIKKyAqLworc3RhdGljIHZvaWQKK2hhbmRsZV9jcmVhdGVfdGFi bGUoUmF3U3RtdCAqY29tbWFuZCkKK3sKKwlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisJUmFuZ2VW YXIJICpydiA9IE5VTEw7CisJT2lkCQkJcmVsaWQ7CisJT2lkCQkJcmVsbmFtZXNwYWNlID0gSW52 YWxpZE9pZDsKKwljaGFyIAkJICpzY2hlbWFuYW1lID0gTlVMTDsKKwljaGFyCQkgKnJlbG5hbWUg PSBOVUxMOworCisJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikgY29tbWFu ZCk7CisKKwlzd2l0Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENNRFRBR19DUkVBVEVfVEFC TEU6CisJCQl7CisJCQkJQ3JlYXRlU3RtdCAqY3N0bXQgPSAoQ3JlYXRlU3RtdCAqKSBjb21tYW5k LT5zdG10OworCQkJCXJ2ID0gY3N0bXQtPnJlbGF0aW9uOworCQkJfQorCQkJYnJlYWs7CisJCWRl ZmF1bHQ6CisJCQlicmVhazsKKwl9CisKKwlpZiAoIXJ2KQorCQlyZXR1cm47CisKKwlzY2hlbWFu YW1lID0gcnYtPnNjaGVtYW5hbWU7CisJcmVsbmFtZSA9IHJ2LT5yZWxuYW1lOworCisJaWYgKHNj aGVtYW5hbWUgIT0gTlVMTCkKKwkJcmVsbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9vaWQoc2No ZW1hbmFtZSwgZmFsc2UpOworCisJaWYgKHJlbG5hbWVzcGFjZSAhPSBJbnZhbGlkT2lkKQorCQly ZWxpZCA9IGdldF9yZWxuYW1lX3JlbGlkKHJlbG5hbWUsIHJlbG5hbWVzcGFjZSk7CisJZWxzZQor CQlyZWxpZCA9IFJlbG5hbWVHZXRSZWxpZChyZWxuYW1lKTsKKworCWlmIChyZWxpZCAhPSBJbnZh bGlkT2lkKQorCXsKKwkJQWRkU3Vic2NyaXB0aW9uUmVsU3RhdGUoTXlTdWJzY3JpcHRpb24tPm9p ZCwgcmVsaWQsCisJCQkJCQkJCVNVQlJFTF9TVEFURV9SRUFEWSwKKwkJCQkJCQkJSW52YWxpZFhM b2dSZWNQdHIpOworCQllcmVwb3J0KERFQlVHMSwKKwkJCQkoZXJybXNnX2ludGVybmFsKCJ0YWJs ZSBcIiVzXCIgYWRkZWQgdG8gc3Vic2NyaXB0aW9uIFwiJXNcIiIsCisJCQkJCQkJCSByZWxuYW1l LCBNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCithcHBseV9o YW5kbGVfZGRsKFN0cmluZ0luZm8gcykKK3sKKwlYTG9nUmVjUHRyIGxzbjsKKwljb25zdCBjaGFy ICpwcmVmaXggPSBOVUxMOworCWNoYXIgKm1lc3NhZ2UgPSBOVUxMOworCWNoYXIJICAgKmRkbF9j b21tYW5kOworCVNpemUJCXN6OworCUxpc3QJICAgKnBhcnNldHJlZV9saXN0OworCUxpc3RDZWxs ICAgKnBhcnNldHJlZV9pdGVtOworCURlc3RSZWNlaXZlciAqcmVjZWl2ZXI7CisJTWVtb3J5Q29u dGV4dCBvbGRjb250ZXh0OworCWNvbnN0IGNoYXIgKnNhdmVfZGVidWdfcXVlcnlfc3RyaW5nID0g ZGVidWdfcXVlcnlfc3RyaW5nOworCisJbWVzc2FnZSA9IGxvZ2ljYWxyZXBfcmVhZF9kZGxtZXNz YWdlKHMsICZsc24sICZwcmVmaXgsICZzeik7CisKKwkvKiBNYWtlIHN1cmUgd2UgYXJlIGluIGEg dHJhbnNhY3Rpb24gY29tbWFuZCAqLworCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKworCWRk bF9jb21tYW5kID0gZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcobWVzc2FnZSk7CisJZGVidWdf cXVlcnlfc3RyaW5nID0gZGRsX2NvbW1hbmQ7CisKKwkvKiBEZXN0Tm9uZSBmb3IgbG9naWNhbCBy ZXBsaWNhdGlvbiAqLworCXJlY2VpdmVyID0gQ3JlYXRlRGVzdFJlY2VpdmVyKERlc3ROb25lKTsK KwlwYXJzZXRyZWVfbGlzdCA9IHBnX3BhcnNlX3F1ZXJ5KGRkbF9jb21tYW5kKTsKKworCWZvcmVh Y2gocGFyc2V0cmVlX2l0ZW0sIHBhcnNldHJlZV9saXN0KQorCXsKKwkJTGlzdAkgICAqcGxhbnRy ZWVfbGlzdDsKKwkJTGlzdAkgICAqcXVlcnl0cmVlX2xpc3Q7CisJCVJhd1N0bXQJICAgKmNvbW1h bmQgPSAoUmF3U3RtdCAqKSBsZmlyc3QocGFyc2V0cmVlX2l0ZW0pOworCQlDb21tYW5kVGFnCWNv bW1hbmRUYWc7CisJCU1lbW9yeUNvbnRleHQgcGVyX3BhcnNldHJlZV9jb250ZXh0ID0gTlVMTDsK KwkJUG9ydGFsCQlwb3J0YWw7CisJCWJvb2wJCSBzbmFwc2hvdF9zZXQgPSBmYWxzZTsKKworCQlj b21tYW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKworCQkvKiBJ ZiB3ZSBnb3QgYSBjYW5jZWwgc2lnbmFsIGluIHBhcnNpbmcgb3IgcHJpb3IgY29tbWFuZCwgcXVp dCAqLworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIFJlbW92ZSBkYXRhIHBvcHVs YXRpb24gZnJvbSB0aGUgY29tbWFuZCAqLworCQlwcmVwcm9jZXNzX2NyZWF0ZV90YWJsZShjb21t YW5kKTsKKworCQkvKgorCQkgKiBTZXQgdXAgYSBzbmFwc2hvdCBpZiBwYXJzZSBhbmFseXNpcy9w bGFubmluZyB3aWxsIG5lZWQgb25lLgorCQkgKi8KKwkJaWYgKGFuYWx5emVfcmVxdWlyZXNfc25h cHNob3QoY29tbWFuZCkpCisJCXsKKwkJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlv blNuYXBzaG90KCkpOworCQkJc25hcHNob3Rfc2V0ID0gdHJ1ZTsKKwkJfQorCisJCS8qCisJCSAq IFdlIGRvIHRoZSB3b3JrIGZvciBlYWNoIHBhcnNldHJlZSBpbiBhIHNob3J0LWxpdmVkIGNvbnRl eHQsIHRvCisJCSAqIGxpbWl0IHRoZSBtZW1vcnkgdXNlZCB3aGVuIHRoZXJlIGFyZSBtYW55IGNv bW1hbmRzIGluIHRoZSBzdHJpbmcuCisJCSAqLworCQlwZXJfcGFyc2V0cmVlX2NvbnRleHQgPQor CQkJQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkg ICJleGVjdXRlX3NxbF9zdHJpbmcgcGVyLXN0YXRlbWVudCBjb250ZXh0IiwKKwkJCQkJCQkJICBB TExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhwZXJfcGFyc2V0cmVlX2NvbnRleHQpOworCisJCXF1ZXJ5dHJlZV9saXN0ID0gcGdfYW5h bHl6ZV9hbmRfcmV3cml0ZV9maXhlZHBhcmFtcyhjb21tYW5kLAorCQkJCQkJCQkJCQkJCQkJZGRs X2NvbW1hbmQsCisJCQkJCQkJCQkJCQkJCQlOVUxMLCAwLCBOVUxMKTsKKworCQlwbGFudHJlZV9s aXN0ID0gcGdfcGxhbl9xdWVyaWVzKHF1ZXJ5dHJlZV9saXN0LCBkZGxfY29tbWFuZCwgMCwgTlVM TCk7CisKKwkJLyogRG9uZSB3aXRoIHRoZSBzbmFwc2hvdCB1c2VkIGZvciBwYXJzaW5nL3BsYW5u aW5nICovCisJCWlmIChzbmFwc2hvdF9zZXQpCisJCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCisJ CXBvcnRhbCA9IENyZWF0ZVBvcnRhbCgibG9naWNhbCByZXBsaWNhdGlvbiIsIHRydWUsIHRydWUp OworCisJCS8qCisJCSAqIFdlIGRvbid0IGhhdmUgdG8gY29weSBhbnl0aGluZyBpbnRvIHRoZSBw b3J0YWwsIGJlY2F1c2UgZXZlcnl0aGluZworCQkgKiB3ZSBhcmUgcGFzc2luZyBoZXJlIGlzIGlu IEFwcGx5TWVzc2FnZUNvbnRleHQgb3IgdGhlCisJCSAqIHBlcl9wYXJzZXRyZWVfY29udGV4dCwg YW5kIHNvIHdpbGwgb3V0bGl2ZSB0aGUgcG9ydGFsIGFueXdheS4KKwkJICovCisJCVBvcnRhbERl ZmluZVF1ZXJ5KHBvcnRhbCwKKwkJCQkJCSAgTlVMTCwKKwkJCQkJCSAgZGRsX2NvbW1hbmQsCisJ CQkJCQkgIGNvbW1hbmRUYWcsCisJCQkJCQkgIHBsYW50cmVlX2xpc3QsCisJCQkJCQkgIE5VTEwp OworCisJCS8qCisJCSAqIFN0YXJ0IHRoZSBwb3J0YWwuICBObyBwYXJhbWV0ZXJzIGhlcmUuCisJ CSAqLworCQlQb3J0YWxTdGFydChwb3J0YWwsIE5VTEwsIDAsIEludmFsaWRTbmFwc2hvdCk7CisK KwkJLyoKKwkJICogU3dpdGNoIGJhY2sgdG8gdHJhbnNhY3Rpb24gY29udGV4dCBmb3IgZXhlY3V0 aW9uLgorCQkgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJCSh2 b2lkKSBQb3J0YWxSdW4ocG9ydGFsLAorCQkJCQkJIEZFVENIX0FMTCwKKwkJCQkJCSB0cnVlLAor CQkJCQkJIHRydWUsCisJCQkJCQkgcmVjZWl2ZXIsCisJCQkJCQkgcmVjZWl2ZXIsCisJCQkJCQkg TlVMTCk7CisKKwkJUG9ydGFsRHJvcChwb3J0YWwsIGZhbHNlKTsKKworCQlDb21tYW5kQ291bnRl ckluY3JlbWVudCgpOworCisJCS8qCisJCSAqIFRhYmxlIGNyZWF0ZWQgYnkgRERMIHJlcGxpY2F0 aW9uIChkYXRhYmFzZSBsZXZlbCkgaXMgYXV0b21hdGljYWxseQorCQkgKiBhZGRlZCB0byB0aGUg c3Vic2NyaXB0aW9uIGhlcmUuCisJCSAqLworCQloYW5kbGVfY3JlYXRlX3RhYmxlKGNvbW1hbmQp OworCisJCS8qIE5vdyB3ZSBtYXkgZHJvcCB0aGUgcGVyLXBhcnNldHJlZSBjb250ZXh0LCBpZiBv bmUgd2FzIGNyZWF0ZWQuICovCisJCU1lbW9yeUNvbnRleHREZWxldGUocGVyX3BhcnNldHJlZV9j b250ZXh0KTsKKwl9CisKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBzYXZlX2RlYnVnX3F1ZXJ5X3N0 cmluZzsKKwllbmRfcmVwbGljYXRpb25fc3RlcCgpOworfQorCiAKIC8qCiAgKiBMb2dpY2FsIHJl cGxpY2F0aW9uIHByb3RvY29sIG1lc3NhZ2UgZGlzcGF0Y2hlci4KQEAgLTI1MjksNiArMjc1Nywx MCBAQCBhcHBseV9kaXNwYXRjaChTdHJpbmdJbmZvIHMpCiAJCQkgKi8KIAkJCWJyZWFrOwogCisJ CWNhc2UgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0U6CisJCQlhcHBseV9oYW5kbGVfZGRsKHMp OworCQkJYnJlYWs7CisKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX1NUQVJUOgogCQkJ YXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChzKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKaW5kZXggMmVjYWE1YjkwNy4uNWU1YjFjYTEy ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQu YworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC01 Myw2ICs1MywxMSBAQCBzdGF0aWMgdm9pZCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwKIAkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRy IG1lc3NhZ2VfbHNuLAogCQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnBy ZWZpeCwKIAkJCQkJCQkgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9p ZCBwZ291dHB1dF9kZGxtZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJ CQkJUmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJ CQljb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwKKwkJCQkJCQkJRGVwYXJzZWRDb21tYW5k VHlwZSBjbWR0eXBlLAorCQkJCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0 YXRpYyBib29sIHBnb3V0cHV0X29yaWdpbl9maWx0ZXIoTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LAogCQkJCQkJCQkgICBSZXBPcmlnaW5JZCBvcmlnaW5faWQpOwogc3RhdGljIHZvaWQgcGdv dXRwdXRfYmVnaW5fcHJlcGFyZV90eG4oTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LApAQCAt MjU2LDYgKzI2MSw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJh Y2tzICpjYikKIAljYi0+Y2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdlOwogCWNiLT50cnVuY2F0 ZV9jYiA9IHBnb3V0cHV0X3RydW5jYXRlOwogCWNiLT5tZXNzYWdlX2NiID0gcGdvdXRwdXRfbWVz c2FnZTsKKwljYi0+ZGRsbWVzc2FnZV9jYiA9IHBnb3V0cHV0X2RkbG1lc3NhZ2U7CiAJY2ItPmNv bW1pdF9jYiA9IHBnb3V0cHV0X2NvbW1pdF90eG47CiAKIAljYi0+YmVnaW5fcHJlcGFyZV9jYiA9 IHBnb3V0cHV0X2JlZ2luX3ByZXBhcmVfdHhuOwpAQCAtMjcyLDYgKzI3OCw3IEBAIF9QR19vdXRw dXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikKIAljYi0+c3RyZWFtX2Nv bW1pdF9jYiA9IHBnb3V0cHV0X3N0cmVhbV9jb21taXQ7CiAJY2ItPnN0cmVhbV9jaGFuZ2VfY2Ig PSBwZ291dHB1dF9jaGFuZ2U7CiAJY2ItPnN0cmVhbV9tZXNzYWdlX2NiID0gcGdvdXRwdXRfbWVz c2FnZTsKKwljYi0+c3RyZWFtX2RkbG1lc3NhZ2VfY2IgPSBwZ291dHB1dF9kZGxtZXNzYWdlOwog CWNiLT5zdHJlYW1fdHJ1bmNhdGVfY2IgPSBwZ291dHB1dF90cnVuY2F0ZTsKIAkvKiB0cmFuc2Fj dGlvbiBzdHJlYW1pbmcgLSB0d28tcGhhc2UgY29tbWl0ICovCiAJY2ItPnN0cmVhbV9wcmVwYXJl X2NiID0gcGdvdXRwdXRfc3RyZWFtX3ByZXBhcmVfdHhuOwpAQCAtNDI2LDYgKzQzMyw3IEBAIHBn b3V0cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVnaW5P cHRpb25zICpvcHQsCiAKIAkvKiBUaGlzIHBsdWdpbiB1c2VzIGJpbmFyeSBwcm90b2NvbC4gKi8K IAlvcHQtPm91dHB1dF90eXBlID0gT1VUUFVUX1BMVUdJTl9CSU5BUllfT1VUUFVUOworCW9wdC0+ cmVjZWl2ZV9yZXdyaXRlcyA9IHRydWU7CiAKIAkvKgogCSAqIFRoaXMgaXMgcmVwbGljYXRpb24g c3RhcnQgYW5kIG5vdCBzbG90IGluaXRpYWxpemF0aW9uLgpAQCAtNDk5LDYgKzUwNyw3IEBAIHBn b3V0cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVnaW5P cHRpb25zICpvcHQsCiAKIAkJLyogSW5pdCBwdWJsaWNhdGlvbiBzdGF0ZS4gKi8KIAkJZGF0YS0+ cHVibGljYXRpb25zID0gTklMOworCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IE5JTDsKIAkJcHVi bGljYXRpb25zX3ZhbGlkID0gZmFsc2U7CiAJCUNhY2hlUmVnaXN0ZXJTeXNjYWNoZUNhbGxiYWNr KFBVQkxJQ0FUSU9OT0lELAogCQkJCQkJCQkJICBwdWJsaWNhdGlvbl9pbnZhbGlkYXRpb25fY2Is CkBAIC0xMzc3LDkgKzEzODYsMjIgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCVJlb3JkZXJCdWZmZXJDaGFuZ2VU eXBlIGFjdGlvbiA9IGNoYW5nZS0+YWN0aW9uOwogCVR1cGxlVGFibGVTbG90ICpvbGRfc2xvdCA9 IE5VTEw7CiAJVHVwbGVUYWJsZVNsb3QgKm5ld19zbG90ID0gTlVMTDsKKwlib29sCQkJdGFibGVf cmV3cml0ZSA9IGZhbHNlOwogCiAJdXBkYXRlX3JlcGxpY2F0aW9uX3Byb2dyZXNzKGN0eCwgZmFs c2UpOwogCisJLyoKKwkgKiBGb3IgaGVhcCByZXdyaXRlcywgd2UgbWlnaHQgbmVlZCB0byByZXBs aWNhdGUgdGhlbSBpZiB0aGUgcmV3cml0dGVuCisJICogdGFibGUgcHVibGlzaGVzIHJld3JpdGUg ZGRsIG1lc3NhZ2UuIFNvIGdldCB0aGUgYWN0dWFsIHJlbGF0aW9uIGhlcmUgYW5kCisJICogY2hl Y2sgdGhlIHB1YmFjdGlvbiBsYXRlci4KKwkgKi8KKwlpZiAocmVsYXRpb24tPnJkX3JlbC0+cmVs cmV3cml0ZSkKKwl7CisJCXRhYmxlX3Jld3JpdGUgPSB0cnVlOworCQlyZWxhdGlvbiA9IFJlbGF0 aW9uSWRHZXRSZWxhdGlvbihyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRlKTsKKwkJdGFyZ2V0 cmVsID0gcmVsYXRpb247CisJfQorCiAJaWYgKCFpc19wdWJsaXNoYWJsZV9yZWxhdGlvbihyZWxh dGlvbikpCiAJCXJldHVybjsKIApAQCAtMTQxMyw2ICsxNDM1LDEzIEBAIHBnb3V0cHV0X2NoYW5n ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJ CUFzc2VydChmYWxzZSk7CiAJfQogCisJLyoKKwkgKiBXZSBkb24ndCBwdWJsaXNoIHRhYmxlIHJl d3JpdGUgY2hhbmdlIHVubGVzcyB3ZSBwdWJsaXNoIHRoZSByZXdyaXRlIGRkbAorCSAqIG1lc3Nh Z2UuCisJICovCisJaWYgKHRhYmxlX3Jld3JpdGUgJiYgIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1 YmRkbCkKKwkJcmV0dXJuOworCiAJLyogQXZvaWQgbGVha2luZyBtZW1vcnkgYnkgdXNpbmcgYW5k IHJlc2V0dGluZyBvdXIgb3duIGNvbnRleHQgKi8KIAlvbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8oZGF0YS0+Y29udGV4dCk7CiAKQEAgLTE0NDIsOCArMTQ3MSw4IEBAIHBnb3V0cHV0X2NoYW5n ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJ CX0KIAogCQkJLyogQ2hlY2sgcm93IGZpbHRlciAqLwotCQkJaWYgKCFwZ291dHB1dF9yb3dfZmls dGVyKHRhcmdldHJlbCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwKLQkJCQkJCQkJCSAmYWN0 aW9uKSkKKwkJCWlmICghdGFibGVfcmV3cml0ZSAmJgorCQkJCSFwZ291dHB1dF9yb3dfZmlsdGVy KHRhcmdldHJlbCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwgJmFjdGlvbikpCiAJCQkJYnJl YWs7CiAKIAkJCS8qCkBAIC0xNDYzLDggKzE0OTIsMTkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJbWF5YmVf c2VuZF9zY2hlbWEoY3R4LCBjaGFuZ2UsIHJlbGF0aW9uLCByZWxlbnRyeSk7CiAKIAkJCU91dHB1 dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOwotCQkJbG9naWNhbHJlcF93cml0ZV9pbnNl cnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKLQkJCQkJCQkJCWRhdGEtPmJp bmFyeSwgcmVsZW50cnktPmNvbHVtbnMpOworCisJCQkvKgorCQkJICogQ29udmVydCB0aGUgcmV3 cml0ZSBpbnNlcnRzIHRvIHVwZGF0ZXMgc28gdGhhdCB0aGUgc3Vic2NyaWJlcgorCQkJICogY2Fu IHJlcGxheSBpdC4gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIGJldHdlZW4K KwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBpcyBjb25zaXN0ZW50LgorCQkJICovCisJ CQlpZiAodGFibGVfcmV3cml0ZSkKKwkJCQlsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShjdHgtPm91 dCwgeGlkLCB0YXJnZXRyZWwsCisJCQkJCQkJCQkJTlVMTCwgbmV3X3Nsb3QsIGRhdGEtPmJpbmFy eSwKKwkJCQkJCQkJCQlyZWxlbnRyeS0+Y29sdW1ucyk7CisJCQllbHNlCisJCQkJbG9naWNhbHJl cF93cml0ZV9pbnNlcnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKKwkJCQkJ CQkJCQlkYXRhLT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKIAkJCU91dHB1dFBsdWdpbldy aXRlKGN0eCwgdHJ1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0Vf VVBEQVRFOgpAQCAtMTU5NCw2ICsxNjM0LDkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQlhbmNlc3RvciA9IE5V TEw7CiAJfQogCisJaWYgKHRhYmxlX3Jld3JpdGUpCisJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24p OworCiAJLyogQ2xlYW51cCAqLwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGQpOwogCU1lbW9y eUNvbnRleHRSZXNldChkYXRhLT5jb250ZXh0KTsKQEAgLTE2NzEsOCArMTcxNCw4IEBAIHBnb3V0 cHV0X3RydW5jYXRlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAogCiBzdGF0aWMgdm9pZAogcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKLQkJCQkgWExvZ1JlY1B0ciBtZXNz YWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3os Ci0JCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCisJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24s IGJvb2wgdHJhbnNhY3Rpb25hbCwKKwkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBj b25zdCBjaGFyICptZXNzYWdlKQogewogCVBHT3V0cHV0RGF0YSAqZGF0YSA9IChQR091dHB1dERh dGEgKikgY3R4LT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CiAJVHJhbnNhY3Rpb25JZCB4aWQgPSBJ bnZhbGlkVHJhbnNhY3Rpb25JZDsKQEAgLTE3MTIsNiArMTc1NSwxMzcgQEAgcGdvdXRwdXRfbWVz c2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK IAlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOwogfQogCitzdGF0aWMgdm9pZAorcGdvdXRw dXRfZGRsbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwKKwkJCQkJWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJY29uc3QgY2hhciAq cHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJU2l6 ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlQR091dHB1dERhdGEgKmRhdGEgPSAoUEdP dXRwdXREYXRhICopIGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCVBHT3V0cHV0VHhuRGF0 YSAqdHhuZGF0YSA9IChQR091dHB1dFR4bkRhdGEgKikgdHhuLT5vdXRwdXRfcGx1Z2luX3ByaXZh dGU7CisJUmVsYXRpb24JcmVsYXRpb24gPSBOVUxMOworCVRyYW5zYWN0aW9uSWQgeGlkID0gSW52 YWxpZFRyYW5zYWN0aW9uSWQ7CisJUmVsYXRpb25TeW5jRW50cnkgKnJlbGVudHJ5OworCisJLyoK KwkgKiBSZW1lbWJlciB0aGUgeGlkIGZvciB0aGUgbWVzc2FnZSBpbiBzdHJlYW1pbmcgbW9kZS4g U2VlCisJICogcGdvdXRwdXRfY2hhbmdlLgorCSAqLworCWlmIChpbl9zdHJlYW1pbmcpCisJCXhp ZCA9IHR4bi0+eGlkOworCisJc3dpdGNoIChjbWR0eXBlKQorCXsKKwkJY2FzZSBEQ1RfVGFibGVE cm9wU3RhcnQ6CisJCQkvKgorCQkJICogT24gRFJPUCBzdGFydCwgYWRkIHRoZSByZWxpZCB0byBh IGRlbGV0ZWRfcmVsaWQgbGlzdCBpZiB0aGUKKwkJCSAqIHJlbGlkIGlzIHBhcnQgb2YgYSBwdWJs aWNhdGlvbiB0aGF0IHN1cHBvcnRzIGRkbCBwdWJsaWNhdGlvbi4gV2UKKwkJCSAqIG5lZWQgdGhp cyBiZWNhdXNlIG9uIERST1AgZW5kLCB0aGUgcmVsaWQgd2lsbCBubyBsb25nZXIgYmUKKwkJCSAq IHZhbGlkLiBMYXRlciBvbiBEcm9wIGVuZCwgdmVyaWZ5IHRoYXQgdGhlIGRyb3AgaXMgZm9yIGEg cmVsaWQKKwkJCSAqIHRoYXQgaXMgb24gdGhlIGRlbGV0ZWRfcmlkIGxpc3QsIGFuZCBvbmx5IHRo ZW4gc2VuZCB0aGUgZGRsCisJCQkgKiBtZXNzYWdlLgorCQkJICovCisJCQlyZWxhdGlvbiA9IFJl bGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7CisKKwkJCUFzc2VydChyZWxhdGlvbik7CisJCQly ZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCWlmIChy ZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwpCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBs YXBwZW5kX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQpOworCisJCQlSZWxhdGlvbkNs b3NlKHJlbGF0aW9uKTsKKwkJCXJldHVybjsKKwkJY2FzZSBEQ1RfVGFibGVEcm9wRW5kOgorCQkJ aWYgKCFsaXN0X21lbWJlcl9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKSkKKwkJCQly ZXR1cm47CisJCQllbHNlCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBsaXN0X2RlbGV0ZV9v aWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKTsKKwkJCWJyZWFrOworCQljYXNlIERDVF9U YWJsZUFsdGVyOgorCQkJLyoKKwkJCSAqIEZvciB0YWJsZSByZXdyaXRlIGRkbCwgd2UgZmlyc3Qg c2VuZCB0aGUgb3JpZ2luYWwgZGRsIG1lc3NhZ2UgdG8KKwkJCSAqIHN1YnNjcmliZXIsIHRoZW4g Y29udmVydCB0aGUgdXBjb21pbmcgcmV3cml0ZSBJTlNFUlQgdG8gVVBEQVRFIGFuZAorCQkJICog c2VuZCB0aGVtIHRvIHN1YnNjcmliZXIgc28gdGhhdCB0aGUgZGF0YSBiZXR3ZWVuIHB1Ymxpc2hl ciBhbmQKKwkJCSAqIHN1YnNjcmliZXIgY2FuIGFsd2F5cyBiZSBjb25zaXN0ZW50LgorCQkJICoK KwkJCSAqIFdlIGRvIHRoaXMgd2F5IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKwkJCSAqCisJCQkg KiAoMSkgVGhlIGRhdGEgYmVmb3JlIHRoZSByZXdyaXRlIGRkbCBjb3VsZCBhbHJlYWR5IGJlIGRp ZmZlcmVudCBhbW9uZworCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyLiBUbyBtYWtlIHN1 cmUgdGhlIGV4dHJhIGRhdGEgaW4gc3Vic2NyaWJlcgorCQkJICogd2hpY2ggZG9lc24ndCBleGlz dCBpbiBwdWJsaXNoZXIgYWxzbyBnZXQgcmV3cml0dGVuLCB3ZSBuZWVkIHRvIGxldAorCQkJICog dGhlIHN1YnNjcmliZXIgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgcmV3cml0ZSBkZGwgdG8gcmV3cml0 ZSBhbGwgdGhlCisJCQkgKiBkYXRhIGF0IGZpcnN0LgorCQkJICoKKwkJCSAqICgyKSB0aGUgZGF0 YSBhZnRlciBleGVjdXRpbmcgcmV3cml0ZSBkZGwgY291bGQgYmUgZGlmZmVyZW50IGFtb25nCisJ CQkgKiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIoZHVlIHRvIGRpZmZlcmVudCBmdW5jdGlvbnMv b3BlcmF0b3JzIHVzZWQKKwkJCSAqIGR1cmluZyByZXdyaXRlKSwgc28gd2UgbmVlZCB0byByZXBs aWNhdGUgdGhlIHJld3JpdGUgVVBEQVRFcyB0byBrZWVwCisJCQkgKiB0aGUgZGF0YSBjb25zaXN0 ZW50LgorCQkJICoKKwkJCSAqIFRPIElNUFJPVkU6IFdlIGNvdWxkIGltcHJvdmUgdGhpcyBieSBs ZXR0aW5nIHRoZSBzdWJzY3JpYmVyIG9ubHkKKwkJCSAqIHJld3JpdGUgdGhlIGV4dHJhIGRhdGEg aW5zdGVhZCBvZiBkb2luZyBmdWxseSByZXdyaXRlIGFuZCB1c2UgdGhlCisJCQkgKiB1cGNvbWlu ZyByZXdyaXRlIFVQREFURXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBkYXRhLiBCZXNpZGVzLCB3ZSBt YXkKKwkJCSAqIG5vdCBuZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwgdHlwZSBv ZiByZXdyaXRlIGRkbCwgZm9yCisJCQkgKiBleGFtcGxlLCBpdCBzZWVtcyBmaW5lIHRvIHNraXAg c2VuZGluZyByZXdyaXRlIGNoYW5nZXMgZm9yIEFMVEVSCisJCQkgKiBUQUJMRSBTRVQgTE9HR0VE IGFzIHRoZSBkYXRhIGluIHRoZSB0YWJsZSBkb2Vzbid0IGFjdHVhbGx5IGJlCisJCQkgKiBjaGFu Z2VkLgorCQkJICovCisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7 CisJCQlBc3NlcnQocmVsYXRpb24pOworCisJCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRy eShkYXRhLCByZWxhdGlvbik7CisKKwkJCS8qCisJCQkgKiBTa2lwIHNlbmRpbmcgdGhpcyBkZGwg aWYgd2UgZG9uJ3QgcHVibGlzaCBkZGwgbWVzc2FnZSBvciB0aGUgZGRsCisJCQkgKiBuZWVkIHRv IGJlIHB1Ymxpc2hlZCB2aWEgaXRzIHJvb3QgcmVsYXRpb24uCisJCQkgKi8KKwkJCWlmICghcmVs ZW50cnktPnB1YmFjdGlvbnMucHViZGRsIHx8CisJCQkJcmVsZW50cnktPnB1Ymxpc2hfYXNfcmVs aWQgIT0gcmVsaWQpCisJCQl7CisJCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJcmV0 dXJuOworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSBEQ1RfU2ltcGxlQ21kOgorCQkJcmVsYXRp b24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCisJCQlpZiAocmVsYXRpb24gPT0g TlVMTCkKKwkJCQlicmVhazsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0 YSwgcmVsYXRpb24pOworCisJCQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJ CXsKKwkJCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJ CWJyZWFrOworCQljYXNlIERDVF9PYmplY3REcm9wOgorCQkJLyogZG8gbm90aGluZyAqLworCQkJ YnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgdHlwZSAlZCIs IGNtZHR5cGUpOworCQkJYnJlYWs7CisJfQorCisJLyogU2VuZCBCRUdJTiBpZiB3ZSBoYXZlbid0 IHlldCAqLworCWlmICh0eG5kYXRhICYmICF0eG5kYXRhLT5zZW50X2JlZ2luX3R4bikKKwkJcGdv dXRwdXRfc2VuZF9iZWdpbihjdHgsIHR4bik7CisKKwlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUo Y3R4LCB0cnVlKTsKKwlsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoY3R4LT5vdXQsCisJCQkJ CQkJCXhpZCwKKwkJCQkJCQkJbWVzc2FnZV9sc24sCisJCQkJCQkJCXByZWZpeCwKKwkJCQkJCQkJ c3osCisJCQkJCQkJCW1lc3NhZ2UpOworCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CisK KwlpZiAocmVsYXRpb24pCisJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworfQorCiAvKgogICog UmV0dXJuIHRydWUgaWYgdGhlIGRhdGEgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIG9yaWdpbiBhbmQg dGhlIHVzZXIgaGFzCiAgKiByZXF1ZXN0ZWQgdGhlIGNoYW5nZXMgdGhhdCBkb24ndCBoYXZlIGFu IG9yaWdpbiwgZmFsc2Ugb3RoZXJ3aXNlLgpAQCAtMTk5Myw3ICsyMTY3LDggQEAgZ2V0X3JlbF9z eW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5 LT5zY2hlbWFfc2VudCA9IGZhbHNlOwogCQllbnRyeS0+c3RyZWFtZWRfdHhucyA9IE5JTDsKIAkJ ZW50cnktPnB1YmFjdGlvbnMucHViaW5zZXJ0ID0gZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRl ID0KLQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1 YnRydW5jYXRlID0gZmFsc2U7CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBlbnRy eS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwg PSBmYWxzZTsKIAkJZW50cnktPm5ld19zbG90ID0gTlVMTDsKIAkJZW50cnktPm9sZF9zbG90ID0g TlVMTDsKIAkJbWVtc2V0KGVudHJ5LT5leHByc3RhdGUsIDAsIHNpemVvZihlbnRyeS0+ZXhwcnN0 YXRlKSk7CkBAIC0yMDUxLDYgKzIyMjYsNyBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXRE YXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJZW50cnktPnB1YmFjdGlvbnMucHVidXBk YXRlID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGZhbHNlOwogCQll bnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IGZhbHNlOworCQllbnRyeS0+cHViYWN0aW9u cy5wdWJkZGwgPSBmYWxzZTsKIAogCQkvKgogCQkgKiBUdXBsZSBzbG90cyBjbGVhbnVwcy4gKFdp bGwgYmUgcmVidWlsdCBsYXRlciBpZiBuZWVkZWQpLgpAQCAtMjE2NCw2ICsyMzQwLDcgQEAgZ2V0 X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJ CQkJZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRh dGU7CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5w dWJkZWxldGU7CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgfD0gcHViLT5wdWJh Y3Rpb25zLnB1YnRydW5jYXRlOworCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCB8PSBwdWIt PnB1YmFjdGlvbnMucHViZGRsOwogCiAJCQkJLyoKIAkJCQkgKiBXZSB3YW50IHRvIHB1Ymxpc2gg dGhlIGNoYW5nZXMgYXMgdGhlIHRvcC1tb3N0IGFuY2VzdG9yCkBAIC0yMzQ5LDYgKzI1MjYsNyBA QCByZWxfc3luY19jYWNoZV9wdWJsaWNhdGlvbl9jYihEYXR1bSBhcmcsIGludCBjYWNoZWlkLCB1 aW50MzIgaGFzaHZhbHVlKQogCXsKIAkJZW50cnktPnJlcGxpY2F0ZV92YWxpZCA9IGZhbHNlOwog CX0KKwogfQogCiAvKiBTZW5kIFJlcGxpY2F0aW9uIG9yaWdpbiAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L3JlbGNhY2hlLmMKaW5kZXggMDBkYzBmMjQwMy4uZjFiNGQwOTNjZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9yZWxjYWNoZS5jCkBAIC01NjgzLDYgKzU2ODMsNyBAQCBSZWxhdGlvbkJ1aWxkUHVibGlj YXRpb25EZXNjKFJlbGF0aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2MgKnB1YmRlc2MpCiAJ CXB1YmRlc2MtPnB1YmFjdGlvbnMucHVidXBkYXRlIHw9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAkJ cHViZGVzYy0+cHViYWN0aW9ucy5wdWJkZWxldGUgfD0gcHViZm9ybS0+cHViZGVsZXRlOwogCQlw dWJkZXNjLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlIHw9IHB1YmZvcm0tPnB1YnRydW5jYXRlOwor CQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YmRkbCB8PSBwdWJmb3JtLT5wdWJkZGw7CiAKIAkJLyoK IAkJICogQ2hlY2sgaWYgYWxsIGNvbHVtbnMgcmVmZXJlbmNlZCBpbiB0aGUgZmlsdGVyIGV4cHJl c3Npb24gYXJlIHBhcnQKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IGJkOWIwNjZlNGUuLjk3ZjQzNGE3ZTggMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuYwpAQCAtMzg5Nyw2ICszODk3LDcgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUg KmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCWludAkJCWlfcHVidXBkYXRlOwogCWludAkJ CWlfcHViZGVsZXRlOwogCWludAkJCWlfcHVidHJ1bmNhdGU7CisJaW50CQkJaV9wdWJkZGw7CiAJ aW50CQkJaV9wdWJ2aWFyb290OwogCWludAkJCWksCiAJCQkJbnR1cHM7CkBAIC0zOTEyLDIzICsz OTEzLDIzIEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0 aW9ucykKIAlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsKIAogCS8qIEdldCB0aGUgcHVibGljYXRp b25zLiAqLwotCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDEzMDAwMCkKKwlpZiAoZm91dC0+ cmVtb3RlVmVyc2lvbiA+PSAxNTAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAog CQkJCQkJCSAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCQkg InAucHVib3duZXIsICIKLQkJCQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5w dWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBwLnB1YnZpYXJvb3QgIgorCQkJ CQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxl dGUsIHAucHVidHJ1bmNhdGUsIHAucHViZGRsLCBwLnB1YnZpYXJvb3QgIgogCQkJCQkJCSAiRlJP TSBwZ19wdWJsaWNhdGlvbiBwIik7CiAJZWxzZSBpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAx MTAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNUIHAu dGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCQkgInAucHVib3duZXIsICIKLQkJ CQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVs ZXRlLCBwLnB1YnRydW5jYXRlLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKKwkJCQkJCQkgInAucHVi YWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRy dW5jYXRlLCBmYWxzZSBhcyBwLnB1YmRkbCwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCiAJCQkJCQkJ ICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAllbHNlCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIK IAkJCQkJCQkgInAucHVib3duZXIsICIKLQkJCQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymlu c2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBmYWxzZSBBUyBwdWJ0cnVuY2F0ZSwgZmFs c2UgQVMgcHVidmlhcm9vdCAiCisJCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQs IHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2UgQVMgcHVidHJ1bmNhdGUsIGZhbHNlIGFz IHAucHViZGRsLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVibGlj YXRpb24gcCIpOwogCiAJcmVzID0gRXhlY3V0ZVNxbFF1ZXJ5KGZvdXQsIHF1ZXJ5LT5kYXRhLCBQ R1JFU19UVVBMRVNfT0spOwpAQCAtMzk0NCw2ICszOTQ1LDcgQEAgZ2V0UHVibGljYXRpb25zKEFy Y2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCWlfcHVidXBkYXRlID0gUFFmbnVt YmVyKHJlcywgInB1YnVwZGF0ZSIpOwogCWlfcHViZGVsZXRlID0gUFFmbnVtYmVyKHJlcywgInB1 YmRlbGV0ZSIpOwogCWlfcHVidHJ1bmNhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidHJ1bmNhdGUi KTsKKwlpX3B1YmRkbCA9IFBRZm51bWJlcihyZXMsICJwdWJkZGwiKTsKIAlpX3B1YnZpYXJvb3Qg PSBQUWZudW1iZXIocmVzLCAicHVidmlhcm9vdCIpOwogCiAJcHViaW5mbyA9IHBnX21hbGxvYyhu dHVwcyAqIHNpemVvZihQdWJsaWNhdGlvbkluZm8pKTsKQEAgLTM5NjcsNiArMzk2OSw4IEBAIGdl dFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAkJCShz dHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGVsZXRlKSwgInQiKSA9PSAwKTsKIAkJcHVi aW5mb1tpXS5wdWJ0cnVuY2F0ZSA9CiAJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1 YnRydW5jYXRlKSwgInQiKSA9PSAwKTsKKwkJcHViaW5mb1tpXS5wdWJkZGwgPQorCQkJKHN0cmNt cChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJkZGwpLCAidCIpID09IDApOwogCQlwdWJpbmZvW2ld LnB1YnZpYXJvb3QgPQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJ2aWFyb290 KSwgInQiKSA9PSAwKTsKIApAQCAtNDA0Niw2ICs0MDUwLDE1IEBAIGR1bXBQdWJsaWNhdGlvbihB cmNoaXZlICpmb3V0LCBjb25zdCBQdWJsaWNhdGlvbkluZm8gKnB1YmluZm8pCiAJCWZpcnN0ID0g ZmFsc2U7CiAJfQogCisJaWYgKHB1YmluZm8tPnB1YmRkbCkKKwl7CisJCWlmICghZmlyc3QpCisJ CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgIik7CisKKwkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIocXVlcnksICJkZGwiKTsKKwkJZmlyc3QgPSBmYWxzZTsKKwl9CisKIAlhcHBlbmRQUUV4 cEJ1ZmZlckNoYXIocXVlcnksICdcJycpOwogCiAJaWYgKHB1YmluZm8tPnB1YnZpYXJvb3QpCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3Bn X2R1bXAuaAppbmRleCA0MjdmNWQ0NWY2Li42ODU2ODNlZWIwIDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKQEAgLTYy MCw2ICs2MjAsNyBAQCB0eXBlZGVmIHN0cnVjdCBfUHVibGljYXRpb25JbmZvCiAJYm9vbAkJcHVi ZGVsZXRlOwogCWJvb2wJCXB1YnRydW5jYXRlOwogCWJvb2wJCXB1YnZpYXJvb3Q7CisJYm9vbAkJ cHViZGRsOwogfSBQdWJsaWNhdGlvbkluZm87CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X3dhbGR1bXAvcm1ncmRlc2MuYyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCmluZGV4 IDZiOGMxN2JiNGMuLjc5MmY0Mzg5NTkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC9y bWdyZGVzYy5jCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCkBAIC0yNyw2ICsy Nyw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKICNpbmNsdWRlICJjb21tYW5k cy90YWJsZXNwYWNlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgorI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmln aW4uaCIKICNpbmNsdWRlICJybWdyZGVzYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3RhbmRieWRl ZnMuaCIKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9wc3Fs L2Rlc2NyaWJlLmMKaW5kZXggYzY0NWQ2NjQxOC4uMmU5NGZjYTc0NCAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTYx NTksNyArNjE1OSw3IEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlQ UUV4cEJ1ZmZlckRhdGEgYnVmOwogCVBHcmVzdWx0ICAgKnJlczsKIAlwcmludFF1ZXJ5T3B0IG15 b3B0ID0gcHNldC5wb3B0OwotCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10g PSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl fTsKKwlzdGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1uc1tdID0ge2ZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OwogCiAJ aWYgKHBzZXQuc3ZlcnNpb24gPCAxMDAwMDApCiAJewpAQCAtNjE5NCw2ICs2MTk0LDEwIEBAIGxp c3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJYXBwZW5kUFFFeHBCdWZmZXIo JmJ1ZiwKIAkJCQkJCSAgIixcbiAgcHVidmlhcm9vdCBBUyBcIiVzXCIiLAogCQkJCQkJICBnZXR0 ZXh0X25vb3AoIlZpYSByb290IikpOworCWlmIChwc2V0LnN2ZXJzaW9uID49IDE0MDAwMCkKKwkJ YXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAgIixcbiAgcHViZGRsIEFTIFwiJXNcIiIs CisJCQkJCQkgIGdldHRleHRfbm9vcCgiRERMcyIpKTsKIAogCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KCZidWYsCiAJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uXG4iKTsKQEAg LTYyODQsNiArNjI4OCw3IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRl cm4pCiAJUEdyZXN1bHQgICAqcmVzOwogCWJvb2wJCWhhc19wdWJ0cnVuY2F0ZTsKIAlib29sCQlo YXNfcHVidmlhcm9vdDsKKwlib29sCQloYXNfcHViZGRsOwogCiAJUFFFeHBCdWZmZXJEYXRhIHRp dGxlOwogCXByaW50VGFibGVDb250ZW50IGNvbnQ7CkBAIC02MzAwLDYgKzYzMDUsNyBAQCBkZXNj cmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCiAJaGFzX3B1YnRydW5jYXRl ID0gKHBzZXQuc3ZlcnNpb24gPj0gMTEwMDAwKTsKIAloYXNfcHVidmlhcm9vdCA9IChwc2V0LnN2 ZXJzaW9uID49IDEzMDAwMCk7CisJaGFzX3B1YmRkbCA9ICAocHNldC5zdmVyc2lvbiA+PSAxNTAw MDApOwogCiAJaW5pdFBRRXhwQnVmZmVyKCZidWYpOwogCkBAIC02MzEzLDYgKzYzMTksOSBAQCBk ZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCWlmIChoYXNfcHVidmlh cm9vdCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCQkgIiwgcHVidmlhcm9v dCIpOworCWlmIChoYXNfcHViZGRsKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAorCQkJ CQkJCSAiLCBwdWJkZGwiKTsKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJICJc bkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvblxuIik7CiAKQEAgLTYzNjQsNiArNjM3Myw4 IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQluY29scysr OwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQluY29scysrOworCQlpZiAoaGFzX3B1YmRkbCkK KwkJCW5jb2xzKys7CiAKIAkJaW5pdFBRRXhwQnVmZmVyKCZ0aXRsZSk7CiAJCXByaW50ZlBRRXhw QnVmZmVyKCZ0aXRsZSwgXygiUHVibGljYXRpb24gJXMiKSwgcHVibmFtZSk7CkBAIC02Mzc4LDYg KzYzODksOCBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJ cHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJUcnVuY2F0ZXMiKSwgdHJ1 ZSwgYWxpZ24pOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlwcmludFRhYmxlQWRkSGVhZGVy KCZjb250LCBnZXR0ZXh0X25vb3AoIlZpYSByb290IiksIHRydWUsIGFsaWduKTsKKwkJaWYgKGhh c19wdWJkZGwpCisJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIkRE THMiKSwgdHJ1ZSwgYWxpZ24pOwogCiAJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZh bHVlKHJlcywgaSwgMiksIGZhbHNlLCBmYWxzZSk7CiAJCXByaW50VGFibGVBZGRDZWxsKCZjb250 LCBQUWdldHZhbHVlKHJlcywgaSwgMyksIGZhbHNlLCBmYWxzZSk7CkBAIC02Mzg4LDYgKzY0MDEs OCBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJcHJpbnRU YWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA3KSwgZmFsc2UsIGZhbHNlKTsK IAkJaWYgKGhhc19wdWJ2aWFyb290KQogCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0 dmFsdWUocmVzLCBpLCA4KSwgZmFsc2UsIGZhbHNlKTsKKwkJaWYgKGhhc19wdWJkZGwpCisJCQlw cmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDkpLCBmYWxzZSwgZmFs c2UpOwogCiAJCWlmICghcHViYWxsdGFibGVzKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3Mvcm1ncmxpc3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oCmluZGV4 IDAwMGJjYmZkYWYuLjM3ZGZkNDUxZjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9y bWdybGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oCkBAIC00NywzICs0 Nyw0IEBAIFBHX1JNR1IoUk1fQ09NTUlUX1RTX0lELCAiQ29tbWl0VHMiLCBjb21taXRfdHNfcmVk bywgY29tbWl0X3RzX2Rlc2MsIGNvbW1pdF90c19pCiBQR19STUdSKFJNX1JFUExPUklHSU5fSUQs ICJSZXBsaWNhdGlvbk9yaWdpbiIsIHJlcGxvcmlnaW5fcmVkbywgcmVwbG9yaWdpbl9kZXNjLCBy ZXBsb3JpZ2luX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQogUEdfUk1HUihSTV9H RU5FUklDX0lELCAiR2VuZXJpYyIsIGdlbmVyaWNfcmVkbywgZ2VuZXJpY19kZXNjLCBnZW5lcmlj X2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBnZW5lcmljX21hc2ssIE5VTEwpCiBQR19STUdSKFJNX0xP R0lDQUxNU0dfSUQsICJMb2dpY2FsTWVzc2FnZSIsIGxvZ2ljYWxtc2dfcmVkbywgbG9naWNhbG1z Z19kZXNjLCBsb2dpY2FsbXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBsb2dpY2FsbXNn X2RlY29kZSkKK1BHX1JNR1IoUk1fTE9HSUNBTERETE1TR19JRCwgIkxvZ2ljYWxERExNZXNzYWdl IiwgbG9naWNhbGRkbG1zZ19yZWRvLCBsb2dpY2FsZGRsbXNnX2Rlc2MsIGxvZ2ljYWxkZGxtc2df aWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxkZGxtc2dfZGVjb2RlKQpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKaW5kZXggMmM4NzEwNmVlZi4uY2UxYjE3ZjVhYiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0CkBAIC0xMTgyOSw0ICsxMTgyOSwxMyBAQAogeyBvaWQgPT4gJzQ2NDMnLCBk ZXNjciA9PiAnZXhwYW5kIGpzb24gZm9ybWF0IERETCB0byBhIHBsYWluIERETCBjb21tYW5kJywK ICAgcHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ ICd0ZXh0JywKICAgcHJvYXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNl X2V4cGFuZF9jb21tYW5kJyB9LAoreyBvaWQgPT4gJzQ2NDQnLCBkZXNjciA9PiAndHJpZ2dlciBm b3IgZGRsIGNvbW1hbmQgZGVwYXJzZScsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFy c2VfZGRsX2NvbW1hbmRfZW5kJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHBy b2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1h bmRfZW5kJyB9LAoreyBvaWQgPT4gJzQ2NDUnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNv bW1hbmQgZGVwYXJzZSBzdGFydCcsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2Vf ZGRsX2NvbW1hbmRfc3RhcnQnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJv YXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFu ZF9zdGFydCcgfSwKK3sgb2lkID0+ICc0NjQ2JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBj b21tYW5kIGRlcGFyc2UgdGFibGUgcmV3cml0ZScsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9u X2RlcGFyc2VfdGFibGVfcmV3cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAor ICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxl X3Jld3JpdGUnIH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5kZXggZWNm NWEyOGUwMC4uZGFmZDQ4Mzc2YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w dWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaApA QCAtNTQsNiArNTQsOSBAQCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9uLDYxMDQsUHVibGljYXRpb25S ZWxhdGlvbklkKQogCiAJLyogdHJ1ZSBpZiBwYXJ0aXRpb24gY2hhbmdlcyBhcmUgcHVibGlzaGVk IHVzaW5nIHJvb3Qgc2NoZW1hICovCiAJYm9vbAkJcHVidmlhcm9vdDsKKworCS8qIHRydWUgaWYg dGFibGUgY3JlYXRpb25zIGFyZSBwdWJsaXNoZWQgKi8KKwlib29sCQlwdWJkZGw7CiB9IEZvcm1E YXRhX3BnX3B1YmxpY2F0aW9uOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC03Miw2ICs3NSw3 IEBAIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uQWN0aW9ucwogCWJvb2wJCXB1YnVwZGF0ZTsK IAlib29sCQlwdWJkZWxldGU7CiAJYm9vbAkJcHVidHJ1bmNhdGU7CisJYm9vbAkJcHViZGRsOwog fSBQdWJsaWNhdGlvbkFjdGlvbnM7CiAKIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uRGVzYwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4IDEwMDkxYzNhYWYuLmZkMmVlN2Zm ZTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysg Yi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKQEAgLTcxLDcgKzcxLDggQEAg ZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdFNpbXBsZUNvbW1hbmQoT2JqZWN0QWRkcmVz cyBhZGRyZXNzLAogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUg KnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVsaWQoT2lk IG9iamVjdElkKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3Vi Y21kKE5vZGUgKnN1YmNtZCwKLQkJCQkJCQkJCQkJCU9iamVjdEFkZHJlc3MgYWRkcmVzcyk7CisJ CQkJCQkJCQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3MsCisJCQkJCQkJCQkJCQlib29sIHJld3Jp dGUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZUVuZCh2b2lkKTsKIAogZXh0 ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEdyYW50KEludGVybmFsR3JhbnQgKmlzdG10KTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi5hOGRjYTg2M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICogZGRsbWVzc2FnZS5oCisgKgkgICBFeHBvcnRzIGZyb20gcmVwbGljYXRpb24vbG9n aWNhbC9kZGxtZXNzYWdlLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v ZGRsbWVzc2FnZS5oCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19MT0dJQ0FM X0RETF9NRVNTQUdFX0gKKyNkZWZpbmUgUEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisKKyNpbmNs dWRlICJhY2Nlc3MveGxvZy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1 ZGUgImFjY2Vzcy94bG9ncmVhZGVyLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKKworCisv KgorICogU3VwcG9ydCBmb3Iga2VlcGluZyB0cmFjayBvZiBkZXBhcnNlZCBjb21tYW5kcy4KKyAq LwordHlwZWRlZiBlbnVtIERlcGFyc2VkQ29tbWFuZFR5cGUKK3sKKwlEQ1RfU2ltcGxlQ21kLAor CURDVF9UYWJsZURyb3BTdGFydCwKKwlEQ1RfVGFibGVEcm9wRW5kLAorCURDVF9UYWJsZUFsdGVy LAorCURDVF9PYmplY3RDcmVhdGUsCisJRENUX09iamVjdERyb3AKK30gRGVwYXJzZWRDb21tYW5k VHlwZTsKKworLyoKKyAqIEdlbmVyaWMgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSB3YWwg cmVjb3JkLgorICovCit0eXBlZGVmIHN0cnVjdCB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlCit7CisJ T2lkCQkJCQkJZGJJZDsJCQkvKiBkYXRhYmFzZSBPaWQgZW1pdHRlZCBmcm9tICovCisJU2l6ZQkJ CQkJcHJlZml4X3NpemU7CS8qIGxlbmd0aCBvZiBwcmVmaXggKi8KKwlPaWQJCQkJCQlyZWxpZDsJ CQkvKiBpZCBvZiB0aGUgdGFibGUgKi8KKwlEZXBhcnNlZENvbW1hbmRUeXBlCQljbWR0eXBlOwkJ LyogdHlwZSBvZiBzcWwgY29tbWFuZCAqLworCVNpemUJCQkJCW1lc3NhZ2Vfc2l6ZTsJICAvKiBz aXplIG9mIHRoZSBtZXNzYWdlICovCisKKwkvKgorCSAqIHBheWxvYWQsIGluY2x1ZGluZyBudWxs LXRlcm1pbmF0ZWQgcHJlZml4IG9mIGxlbmd0aCBwcmVmaXhfc2l6ZQorCSAqLworCWNoYXIJCW1l c3NhZ2VbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30geGxfbG9naWNhbF9kZGxfbWVzc2FnZTsK KworI2RlZmluZSBTaXplT2ZMb2dpY2FsRERMTWVzc2FnZQkob2Zmc2V0b2YoeGxfbG9naWNhbF9k ZGxfbWVzc2FnZSwgbWVzc2FnZSkpCisKK2V4dGVybiBYTG9nUmVjUHRyIExvZ0xvZ2ljYWxERExN ZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBl IGNtZHR5cGUsCisJCQkJCQkJCQkgICBjb25zdCBjaGFyICpkZGxfbWVzc2FnZSwgc2l6ZV90IHNp emUpOworCisvKiBSTUdSIEFQSSovCisjZGVmaW5lIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRQkw eDAwCit2b2lkCQlsb2dpY2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwor dm9pZAkJbG9naWNhbGRkbG1zZ19kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUg KnJlY29yZCk7Citjb25zdCBjaGFyICpsb2dpY2FsZGRsbXNnX2lkZW50aWZ5KHVpbnQ4IGluZm8p OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5o IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKaW5kZXggNzQxYmY2NWNmNy4uNDI3 YTdiOTk3ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKKysr IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKQEAgLTI3LDYgKzI3LDcgQEAgZXh0 ZXJuIHZvaWQgaGVhcDJfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1Jl Y29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIHhhY3RfZGVjb2RlKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIHN0YW5k YnlfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAq YnVmKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxkZGxt c2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAq YnVmKTsKIAogZXh0ZXJuIHZvaWQgTG9naWNhbERlY29kaW5nUHJvY2Vzc1JlY29yZChMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCQkJIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3Jk KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXggN2VhYTRjOTdlZC4u NWQ2MTc0ODRmYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHBy b3RvLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTYx LDYgKzYxLDcgQEAgdHlwZWRlZiBlbnVtIExvZ2ljYWxSZXBNc2dUeXBlCiAJTE9HSUNBTF9SRVBf TVNHX1JFTEFUSU9OID0gJ1InLAogCUxPR0lDQUxfUkVQX01TR19UWVBFID0gJ1knLAogCUxPR0lD QUxfUkVQX01TR19NRVNTQUdFID0gJ00nLAorCUxPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFID0g J0wnLAogCUxPR0lDQUxfUkVQX01TR19CRUdJTl9QUkVQQVJFID0gJ2InLAogCUxPR0lDQUxfUkVQ X01TR19QUkVQQVJFID0gJ1AnLAogCUxPR0lDQUxfUkVQX01TR19DT01NSVRfUFJFUEFSRUQgPSAn SycsCkBAIC0yMjksNyArMjMwLDExIEBAIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfdHJ1 bmNhdGUoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAogZXh0ZXJuIExpc3QgKmxv Z2ljYWxyZXBfcmVhZF90cnVuY2F0ZShTdHJpbmdJbmZvIGluLAogCQkJCQkJCQkJICBib29sICpj YXNjYWRlLCBib29sICpyZXN0YXJ0X3NlcXMpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0 ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBs c24sCi0JCQkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNp emUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCQkJCQkJCQkJIGJvb2wgdHJhbnNhY3Rpb25h bCwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1l c3NhZ2UpOworZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9kZGxtZXNzYWdlKFN0cmluZ0lu Zm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJY29u c3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiBj aGFyICpsb2dpY2FscmVwX3JlYWRfZGRsbWVzc2FnZShTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRy ICpsc24sIGNvbnN0IGNoYXIgKipwcmVmaXgsIFNpemUgKnN6KTsKIGV4dGVybiB2b2lkIGxvZ2lj YWxyZXBfd3JpdGVfcmVsKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJ CQkJIFJlbGF0aW9uIHJlbCwgQml0bWFwc2V0ICpjb2x1bW5zKTsKIGV4dGVybiBMb2dpY2FsUmVw UmVsYXRpb24gKmxvZ2ljYWxyZXBfcmVhZF9yZWwoU3RyaW5nSW5mbyBpbik7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmggYi9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKaW5kZXggYjdkMjhkNzA0NS4uNzYzZTQzZjZiZSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCisrKyBi L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaApAQCAtOTAsNiArOTAsMTgg QEAgdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCQkJU2l6ZSBtZXNzYWdlX3NpemUsCiAJCQkJ CQkJCQkJY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qCisgKiBDYWxsZWQgZm9yIHRoZSBsb2dp Y2FsIGRlY29kaW5nIERETCBtZXNzYWdlcy4KKyAqLwordHlwZWRlZiB2b2lkICgqTG9naWNhbERl Y29kZURETE1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJ CQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSAgIFhMb2dSZWNQ dHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJ CQkJCSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkgICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5 cGUsCisJCQkJCQkJCQkJICAgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJICAgY29uc3Qg Y2hhciAqbWVzc2FnZSk7CisKIC8qCiAgKiBGaWx0ZXIgY2hhbmdlcyBieSBvcmlnaW4uCiAgKi8K QEAgLTIwMSw2ICsyMTMsMTkgQEAgdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZVN0cmVhbU1l c3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgKIAkJCQkJCQkJCQkJ ICBTaXplIG1lc3NhZ2Vfc2l6ZSwKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsK IAorLyoKKyAqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcgbG9naWNhbCBkZWNvZGluZyBEREwgbWVz c2FnZXMgZnJvbSBpbi1wcm9ncmVzcworICogdHJhbnNhY3Rpb25zLgorICovCit0eXBlZGVmIHZv aWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFtRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJ CQkJCQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBj aGFyICpwcmVmaXgsCisJCQkJCQkJCQkJCQkgT2lkIHJlbGlkLAorCQkJCQkJCQkJCQkJIERlcGFy c2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwK KwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyoKICAqIENhbGxiYWNrIGZv ciBzdHJlYW1pbmcgdHJ1bmNhdGVzIGZyb20gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLgogICov CkBAIC0yMjEsNiArMjQ2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3V0cHV0UGx1Z2luQ2FsbGJhY2tz CiAJTG9naWNhbERlY29kZVRydW5jYXRlQ0IgdHJ1bmNhdGVfY2I7CiAJTG9naWNhbERlY29kZUNv bW1pdENCIGNvbW1pdF9jYjsKIAlMb2dpY2FsRGVjb2RlTWVzc2FnZUNCIG1lc3NhZ2VfY2I7CisJ TG9naWNhbERlY29kZURETE1lc3NhZ2VDQiBkZGxtZXNzYWdlX2NiOwogCUxvZ2ljYWxEZWNvZGVG aWx0ZXJCeU9yaWdpbkNCIGZpbHRlcl9ieV9vcmlnaW5fY2I7CiAJTG9naWNhbERlY29kZVNodXRk b3duQ0Igc2h1dGRvd25fY2I7CiAKQEAgLTIzOSw2ICsyNjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBP dXRwdXRQbHVnaW5DYWxsYmFja3MKIAlMb2dpY2FsRGVjb2RlU3RyZWFtQ29tbWl0Q0Igc3RyZWFt X2NvbW1pdF9jYjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5nZV9j YjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlX2NiOworCUxv Z2ljYWxEZWNvZGVTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbG1lc3NhZ2VfY2I7CiAJTG9n aWNhbERlY29kZVN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlX2NiOwogfSBPdXRwdXRQ bHVnaW5DYWxsYmFja3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bn b3V0cHV0LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCmluZGV4IDAyMDI3 NTUwZTIuLjgzZTBiMWUyZTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bn b3V0cHV0LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaApAQCAtMjUs NiArMjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQR091dHB1dERhdGEKIAl1aW50MzIJCXByb3RvY29s X3ZlcnNpb247CiAJTGlzdAkgICAqcHVibGljYXRpb25fbmFtZXM7CiAJTGlzdAkgICAqcHVibGlj YXRpb25zOworCUxpc3QJICAgKmRlbGV0ZWRfcmVsaWRzOwogCWJvb2wJCWJpbmFyeTsKIAlib29s CQlzdHJlYW1pbmc7CiAJYm9vbAkJbWVzc2FnZXM7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9y ZGVyYnVmZmVyLmgKaW5kZXggMDJiNTlhMTkzMS4uMGIxYTkxNjFjNSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApAQCAtMTEsNiArMTEsOCBAQAogCiAjaW5jbHVkZSAi YWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUg Im5vZGVzL25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2lu Y2x1ZGUgInN0b3JhZ2Uvc2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogI2lu Y2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCkBAIC01Niw2ICs1OCw3IEBAIHR5cGVkZWYgZW51bSBS ZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZQogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlNFUlQsCiAJ UkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFURSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfREVM RVRFLAorCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFLAogCVJFT1JERVJfQlVGRkVS X0NIQU5HRV9NRVNTQUdFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT04sCiAJ UkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVEVSTkFMX1NOQVBTSE9ULApAQCAtMTMwLDYgKzEzMywx NiBAQCB0eXBlZGVmIHN0cnVjdCBSZW9yZGVyQnVmZmVyQ2hhbmdlCiAJCQljaGFyCSAgICptZXNz YWdlOwogCQl9CQkJbXNnOwogCisJCS8qIERETCBNZXNzYWdlLiAqLworCQlzdHJ1Y3QKKwkJewor CQkJY2hhcgkgICAqcHJlZml4OworCQkJU2l6ZQkJbWVzc2FnZV9zaXplOworCQkJY2hhcgkgICAq bWVzc2FnZTsKKwkJCU9pZAkJCXJlbGlkOworCQkJRGVwYXJzZWRDb21tYW5kVHlwZQljbWR0eXBl OworCQl9CQkJZGRsbXNnOworCiAJCS8qIE5ldyBzbmFwc2hvdCwgc2V0IHdoZW4gYWN0aW9uID09 ICpfSU5URVJOQUxfU05BUFNIT1QgKi8KIAkJU25hcHNob3QJc25hcHNob3Q7CiAKQEAgLTQzNSw2 ICs0NDgsMTYgQEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlck1lc3NhZ2VDQikgKFJlb3Jk ZXJCdWZmZXIgKnJiLAogCQkJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKIAkJ CQkJCQkJCQljb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyogRERMIG1lc3NhZ2UgY2FsbGJhY2sg c2lnbmF0dXJlICovCit0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyRERMTWVzc2FnZUNCKSAo UmVvcmRlckJ1ZmZlciAqcmIsCisJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAor CQkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJICAgY29uc3Qg Y2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkgICBEZXBh cnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJICAgU2l6ZSBzeiwKKwkJCQkJCQkJ CQkgICBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyogYmVnaW4gcHJlcGFyZSBjYWxsYmFjayBz aWduYXR1cmUgKi8KIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJCZWdpblByZXBhcmVDQikg KFJlb3JkZXJCdWZmZXIgKnJiLAogCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuKTsK QEAgLTUwMSw2ICs1MjQsMTcgQEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbU1l c3NhZ2VDQikgKAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKIAkJ CQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyogc3RyZWFtIERETCBtZXNzYWdl IGNhbGxiYWNrIHNpZ25hdHVyZSAqLwordHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVh bURETE1lc3NhZ2VDQikgKAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJ CQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1l c3NhZ2VfbHNuLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJ CSBPaWQgcmVsaWQsCisJCQkJCQkJCQkJCQkgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAor CQkJCQkJCQkJCQkJIFNpemUgc3osCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7 CisKIC8qIHN0cmVhbSB0cnVuY2F0ZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KIHR5cGVkZWYgdm9p ZCAoKlJlb3JkZXJCdWZmZXJTdHJlYW1UcnVuY2F0ZUNCKSAoCiAJCQkJCQkJCQkJCSAgIFJlb3Jk ZXJCdWZmZXIgKnJiLApAQCAtNTUyLDYgKzU4Niw3IEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVyCiAJ UmVvcmRlckJ1ZmZlckFwcGx5VHJ1bmNhdGVDQiBhcHBseV90cnVuY2F0ZTsKIAlSZW9yZGVyQnVm ZmVyQ29tbWl0Q0IgY29tbWl0OwogCVJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IgbWVzc2FnZTsKKwlS ZW9yZGVyQnVmZmVyRERMTWVzc2FnZUNCIGRkbG1lc3NhZ2U7CiAKIAkvKgogCSAqIENhbGxiYWNr cyB0byBiZSBjYWxsZWQgd2hlbiBzdHJlYW1pbmcgYSB0cmFuc2FjdGlvbiBhdCBwcmVwYXJlIHRp bWUuCkBAIC01NzEsNiArNjA2LDcgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVm ZmVyU3RyZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1pdDsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ2hh bmdlQ0Igc3RyZWFtX2NoYW5nZTsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCIHN0cmVh bV9tZXNzYWdlOworCVJlb3JkZXJCdWZmZXJTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbG1l c3NhZ2U7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlOwog CiAJLyoKQEAgLTY1MCw2ICs2ODYsOSBAQCBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVN ZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCSAg U25hcHNob3Qgc25hcCwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJCQkgIGJvb2wgdHJhbnNhY3Rp b25hbCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwg Y29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVERExN ZXNzYWdlKFJlb3JkZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwgWExvZ1JlY1B0ciBsc24sCisJ CQkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJ CQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBl IGNtZHR5cGUpOwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckNvbW1pdChSZW9yZGVyQnVmZmVy ICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCVhMb2dSZWNQdHIgY29tbWl0X2xzbiwg WExvZ1JlY1B0ciBlbmRfbHNuLAogCQkJCQkJCQlUaW1lc3RhbXBUeiBjb21taXRfdGltZSwgUmVw T3JpZ2luSWQgb3JpZ2luX2lkLCBYTG9nUmVjUHRyIG9yaWdpbl9sc24pOwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHNxbC5vdXQKaW5kZXggYTdmNTcwMGVkYy4uYmZjNzNjMjMyOCAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3BzcWwub3V0CkBAIC01OTcwLDkgKzU5NzAsOSBAQCBMaXN0IG9mIHNjaGVtYXMK ICgwIHJvd3MpCiAKIFxkUnAgIm5vLnN1Y2gucHVibGljYXRpb24iCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotIE5hbWUgfCBPd25lciB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworIE5hbWUgfCBPd25lciB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KICgwIHJvd3MpCiAKIFxkUnMgIm5vLnN1 Y2guc3Vic2NyaXB0aW9uIgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w dWJsaWNhdGlvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91 dAppbmRleCA0MjdmODdlYTA3Li4yYjdjZDBkNTk2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3B1YmxpY2F0aW9uLm91dApAQCAtMzAsMjAgKzMwLDIwIEBAIEVSUk9SOiAgY29uZmxpY3Rp bmcgb3IgcmVkdW5kYW50IG9wdGlvbnMKIExJTkUgMTogLi4udWJfeHh4IFdJVEggKHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290ID0gJ3RydWUnLCBwdWJsaXNoX3ZpLi4uCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogXGRScAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVi bGljYXRpb25zCi0gICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAg IHwgZgotIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCBmICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Yg cHVibGljYXRpb25zCisgICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICB8IHQgICAgICAg fCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMiByb3dzKQogCiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViX2RlZmF1bHQgU0VUIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRl LCBkZWxldGUnKTsKIFxkUnAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgICAgICBOYW1lICAgICAgICB8ICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgICB8IGYKLSB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgICBOYW1lICAgICAgICB8ICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cGli X2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCisgdGVz dHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgog KDIgcm93cykKIAogLS0tIGFkZGluZyB0YWJsZXMKQEAgLTg3LDEwICs4NywxMCBAQCBSRVNFVCBj bGllbnRfbWluX21lc3NhZ2VzOwogLS0gc2hvdWxkIGJlIGFibGUgdG8gYWRkIHNjaGVtYSB0byAn Rk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJs ZSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0 YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJs ZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgpAQCAtOTksMjAgKzk5LDIwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAtLSBzaG91bGQgYmUgYWJsZSB0byBkcm9wIHNjaGVtYSBmcm9tICdGT1IgVEFCTEUnIHB1Ymxp Y2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIERST1AgVEFCTEVTIElO IFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBm CiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCiAKIC0tIHNob3VsZCBiZSBhYmxl IHRvIHNldCBzY2hlbWEgdG8gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWJfZm9ydGFibGUgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJw KyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAicHViX3Rlc3QiCiAKQEAgLTEyMywxMCArMTIzLDEwIEBAIENSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViX2ZvcnNjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIENSRUFU RSBQVUJMSUNBVElPTiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1B IHB1Yl90ZXN0LCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBSRVNFVCBjbGllbnRfbWlu X21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAg ICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogVGFibGVzIGZyb20g c2NoZW1hczoKQEAgLTEzNSwxMCArMTM1LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBz aG91bGQgYmUgYWJsZSB0byBhZGQgYSB0YWJsZSBvZiB0aGUgc2FtZSBzY2hlbWEgdG8gdGhlIHNj aGVtYSBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgQURE IFRBQkxFIHB1Yl90ZXN0LnRlc3RwdWJfbm9wazsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogVGFi bGVzIGZyb20gc2NoZW1hczoKQEAgLTE0NywxMCArMTQ3LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAtLSBzaG91bGQgYmUgYWJsZSB0byBkcm9wIHRoZSB0YWJsZQogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1Yl9mb3JzY2hlbWEgRFJPUCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBc ZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hl bWFzOgogICAgICJwdWJfdGVzdCIKIApAQCAtMTYxLDEwICsxNjEsMTAgQEAgRVJST1I6ICByZWxh dGlvbiAidGVzdHB1Yl9ub3BrIiBpcyBub3QgcGFydCBvZiB0aGUgcHVibGljYXRpb24KIC0tIHNo b3VsZCBiZSBhYmxlIHRvIHNldCB0YWJsZSB0byBzY2hlbWEgcHVibGljYXRpb24KIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIFNFVCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25v cGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAg ICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKIApAQCAtMTg2LDEwICsxODYsMTAgQEAgUHVibGlj YXRpb25zOgogICAgICJ0ZXN0cHViX2ZvcmFsbHRhYmxlcyIKIAogXGRScCsgdGVzdHB1Yl9mb3Jh bGx0YWJsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZm9yYWxsdGFibGVzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCB0ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3JhbGx0YWJsZXMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiBEUk9QIFRBQkxFIHRlc3Rw dWJfdGJsMjsKQEAgLTIwMSwxOSArMjAxLDE5IEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHVi MyBGT1IgVEFCTEUgdGVzdHB1Yl90YmwzOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI0IEZP UiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJsMzsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBc ZFJwKyB0ZXN0cHViMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDMi CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDNhIgogCiBcZFJwKyB0ZXN0cHViNAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNAorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDMiCiAKQEAgLTIzNCwxMCArMjM0LDEwIEBA IFVQREFURSB0ZXN0cHViX3BhcnRlZDEgU0VUIGEgPSAxOwogLS0gb25seSBwYXJlbnQgaXMgbGlz dGVkIGFzIGJlaW5nIGluIHB1YmxpY2F0aW9uLCBub3QgdGhlIHBhcnRpdGlvbgogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1Yl9mb3JwYXJ0ZWQgQUREIFRBQkxFIHRlc3RwdWJfcGFydGVkOwogXGRS cCsgdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJs aWMudGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTI1MiwxMCArMjUyLDEwIEBAIEFMVEVSIFRBQkxFIHRl c3RwdWJfcGFydGVkIERFVEFDSCBQQVJUSVRJT04gdGVzdHB1Yl9wYXJ0ZWQxOwogVVBEQVRFIHRl c3RwdWJfcGFydGVkMSBTRVQgYSA9IDE7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBh cnRlZCBTRVQgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CiBcZFJwKyB0ZXN0 cHViX2ZvcnBhcnRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnBhcnRlZAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgdCAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0 cHViX3BhcnRlZCIKIApAQCAtMjg0LDEwICsyODQsMTAgQEAgU0VUIGNsaWVudF9taW5fbWVzc2Fn ZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEZPUiBUQUJMRSB0ZXN0 cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfdGJsMiBXSEVSRSAoYyA8PiAndGVzdCcgQU5EIGQgPCA1 KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsK IFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBm ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZf dGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6 dGV4dCkgQU5EIChkIDwgNSkpCkBAIC0zMDAsMTAgKzMwMCwxMCBAQCBUYWJsZXM6CiAKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEFERCBUQUJMRSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUg PiAxMDAwIEFORCBlIDwgMjAwMCk7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAg ICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDIi IFdIRVJFICgoYyA8PiAndGVzdCc6OnRleHQpIEFORCAoZCA8IDUpKQpAQCAtMzE5LDEwICszMTks MTAgQEAgUHVibGljYXRpb25zOgogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBEUk9QIFRB QkxFIHRlc3RwdWJfcmZfdGJsMjsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIg V0hFUkUgKChlID4gMTAwMCkgQU5EIChlIDwgMjAwMCkpCkBAIC0zMzAsMTAgKzMzMCwxMCBAQCBU YWJsZXM6CiAtLSByZW1vdmUgdGVzdHB1Yl9yZl90YmwxIGFuZCBhZGQgdGVzdHB1Yl9yZl90Ymwz IGFnYWluIChhbm90aGVyIFdIRVJFIGV4cHJlc3Npb24pCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlID4gMzAwIEFORCBlIDwgNTAw KTsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg fCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJf cmZfdGJsMyIgV0hFUkUgKChlID4gMzAwKSBBTkQgKGUgPCA1MDApKQogCkBAIC0zNjYsMTAgKzM2 NiwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1Yl9zeW50YXgxIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIE9OTFkgdGVz dHB1Yl9yZl90YmwzIFdIRVJFIChlIDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwog UkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4MQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDEKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDEKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJs aWMudGVzdHB1Yl9yZl90YmwzIiBXSEVSRSAoZSA8IDk5OSkKQEAgLTM3OSwxMCArMzc5LDEwIEBA IFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0 ZXN0cHViX3N5bnRheDIgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSwgdGVzdHB1Yl9yZl9zY2hl bWExLnRlc3RwdWJfcmZfdGJsNSBXSEVSRSAoaCA8IDk5OSkgV0lUSCAocHVibGlzaCA9ICdpbnNl cnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX3N5bnRheDIK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50 YXgyCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgy CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAg ICAidGVzdHB1Yl9yZl9zY2hlbWExLnRlc3RwdWJfcmZfdGJsNSIgV0hFUkUgKGggPCA5OTkpCkBA IC00OTcsMTAgKzQ5NywxMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjYgRk9SIFRBQkxF UyBJTiBTQ0hFTUEgdGVzdHB1Yl9yZl9zY2hlbWEyOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjYgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgdGVzdHB1Yl9yZl9zY2hlbWEyLCBUQUJMRSB0ZXN0cHVi X3JmX3NjaGVtYTIudGVzdHB1Yl9yZl90Ymw2IFdIRVJFIChpIDwgOTkpOwogUkVTRVQgY2xpZW50 X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWI2Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNgotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAidGVz dHB1Yl9yZl9zY2hlbWEyLnRlc3RwdWJfcmZfdGJsNiIgV0hFUkUgKGkgPCA5OSkKIFRhYmxlcyBm cm9tIHNjaGVtYXM6CkBAIC03MTQsMTAgKzcxNCwxMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVz dHB1Yl90YWJsZV9pbnMgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQsIHRydW5jYXRlJyk7CiBSRVNF VCBjbGllbnRfbWluX21lc3NhZ2VzOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl90YWJsZV9p bnMgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSk7CQktLSBvawogXGRScCsgdGVzdHB1Yl90YWJs ZV9pbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi X3RhYmxlX2lucwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90 YWJsZV9pbnMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90Ymw1 IiAoYSkKIApAQCAtODkxLDEwICs4OTEsMTAgQEAgQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsX2Jv dGhfZmlsdGVycyAoYSBpbnQsIGIgaW50LCBjIGludCwgUFJJTUFSWSBLRVkgKGEsYykpOwogQUxU RVIgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcg SU5ERVggdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzX3BrZXk7CiBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2JvdGhfZmlsdGVycyBBREQgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChh LGMpIFdIRVJFIChjICE9IDEpOwogXGRScCsgdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfYm90aF9maWx0ZXJzCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYg ICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmxfYm90aF9maWx0ZXJz IiAoYSwgYykgV0hFUkUgKGMgPD4gMSkKIApAQCAtMTA5OSwxMCArMTA5OSwxMCBAQCBFUlJPUjog IHJlbGF0aW9uICJ0ZXN0cHViX3RibDEiIGlzIGFscmVhZHkgbWVtYmVyIG9mIHB1YmxpY2F0aW9u ICJ0ZXN0cHViX2ZvcnRibAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGJsIEZPUiBU QUJMRSB0ZXN0cHViX3RibDE7CiBFUlJPUjogIHB1YmxpY2F0aW9uICJ0ZXN0cHViX2ZvcnRibCIg YWxyZWFkeSBleGlzdHMKIFxkUnArIHRlc3RwdWJfZm9ydGJsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRibAotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGJsCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl czoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogICAgICJwdWJsaWMudGVzdHB1Yl90Ymwx IgpAQCAtMTE0MCwxMCArMTE0MCwxMCBAQCBQdWJsaWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9y dGJsIgogCiBcZFJwKyB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgpAQCAt MTIyMSwxMCArMTIyMSwxMCBAQCBSRVZPS0UgQ1JFQVRFIE9OIERBVEFCQVNFIHJlZ3Jlc3Npb24g RlJPTSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogRFJPUCBUQUJMRSB0ZXN0cHViX3BhcnRl ZDsKIERST1AgVEFCTEUgdGVzdHB1Yl90YmwxOwogXGRScCsgdGVzdHB1Yl9kZWZhdWx0Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAg ICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIGZhaWwgLSBtdXN0IGJlIG93bmVyIG9mIHB1YmxpY2F0 aW9uCkBAIC0xMjM0LDIwICsxMjM0LDIwIEBAIEVSUk9SOiAgbXVzdCBiZSBvd25lciBvZiBwdWJs aWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKIFJFU0VUIFJPTEU7CiBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2RlZmF1bHQgUkVOQU1FIFRPIHRlc3RwdWJfZm9vOwogXGRScCB0ZXN0cHViX2Zvbwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGlj YXRpb25zCi0gICAgTmFtZSAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVz dHB1Yl9mb28gfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgTmFt ZSAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0 cHViX2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykK IAogLS0gcmVuYW1lIGJhY2sgdG8ga2VlcCB0aGUgcmVzdCBzaW1wbGUKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWJfZm9vIFJFTkFNRSBUTyB0ZXN0cHViX2RlZmF1bHQ7CiBBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViX2RlZmF1bHQgT1dORVIgVE8gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsK IFxkUnAgdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgICAgTmFtZSAgICAgICB8ICAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cHViX2RlZmF1bHQgfCByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgTmFtZSAgICAgICB8ICAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwdWJf ZGVmYXVsdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cp CiAKIC0tIGFkZGluZyBzY2hlbWFzIGFuZCB0YWJsZXMKQEAgLTEyNjMsMTkgKzEyNjMsMTkgQEAg Q1JFQVRFIFRBQkxFICJDVVJSRU5UX1NDSEVNQSIuIkNVUlJFTlRfU0NIRU1BIihpZCBpbnQpOwog U0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRl c3RwdWIxX2ZvcnNjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0 ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgInB1Yl90ZXN0MSIKIAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIyX2ZvcnNjaGVt YSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MiwgcHViX3Rlc3QzOwog XGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBz Y2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEyODksNDQgKzEy ODksNDQgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2X2ZvcnNjaGVtYSBGT1IgVEFCTEVT IElOIFNDSEVNQSAiQ1VSUkVOVF9TQ0hFTUEiLCBDVVIKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0 cHViX2ZvcnRhYmxlIEZPUiBUQUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSI7 CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2No ZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJsaWMiCiAKIFxk UnArIHRlc3RwdWI0X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWI0X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViNF9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAKIFxkUnArIHRlc3RwdWI1X2ZvcnNjaGVtYQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1X2ZvcnNj aGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNV9mb3JzY2hl bWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hF TUEiCiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIKICAgICAi cHVibGljIgogCiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVz OgogICAgICJDVVJSRU5UX1NDSEVNQS5DVVJSRU5UX1NDSEVNQSIKIApAQCAtMTM2MCwxMCArMTM2 MCwxMCBAQCBFUlJPUjogIHNjaGVtYSAidGVzdHB1Yl92aWV3IiBkb2VzIG5vdCBleGlzdAogLS0g ZHJvcHBpbmcgdGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0 aW9uCiBEUk9QIFNDSEVNQSBwdWJfdGVzdDM7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAg ICAicHViX3Rlc3QyIgpAQCAtMTM3MSwyMCArMTM3MSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFz OgogLS0gcmVuYW1pbmcgdGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1 YmxpY2F0aW9uCiBBTFRFUiBTQ0hFTUEgcHViX3Rlc3QxIFJFTkFNRSB0byBwdWJfdGVzdDFfcmVu YW1lZDsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVz IGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxX3JlbmFtZWQiCiAgICAgInB1Yl90ZXN0MiIK IAogQUxURVIgU0NIRU1BIHB1Yl90ZXN0MV9yZW5hbWVkIFJFTkFNRSB0byBwdWJfdGVzdDE7CiBc ZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTM5MiwxMCArMTM5 MiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gYWx0ZXIgcHVibGljYXRpb24gYWRkIHNj aGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVz dDIiCkBAIC0xNDA0LDEwICsxNDA0LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4 aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2Vz IG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAg LTE0MTYsMTAgKzE0MTYsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBF UlJPUjogIHNjaGVtYSAicHViX3Rlc3QxIiBpcyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlv biAidGVzdHB1YjFfZm9yc2NoZW1hIgogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1 Yl90ZXN0MiIKQEAgLTE0MjcsMTAgKzE0MjcsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0t IGFsdGVyIHB1YmxpY2F0aW9uIGRyb3Agc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi MV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3Rw dWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAg ICAicHViX3Rlc3QxIgogCkBAIC0xNDM4LDEwICsxNDM4LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MjsKIEVSUk9SOiAgdGFibGVzIGZyb20gc2NoZW1hICJwdWJfdGVzdDIi IGFyZSBub3QgcGFydCBvZiB0aGUgcHVibGljYXRpb24KIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3Qx IgogCkBAIC0xNDQ5LDI5ICsxNDQ5LDI5IEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9l eGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9l cyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgog VGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCiAtLSBkcm9wIGFsbCBzY2hl bWFzCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogKDEgcm93KQogCiAtLSBhbHRlciBwdWJsaWNhdGlvbiBzZXQgbXVsdGlwbGUgc2NoZW1h CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hF TUEgcHViX3Rlc3QxLCBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAi cHViX3Rlc3QyIgpAQCAtMTQ4MCwxMCArMTQ4MCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgog QUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1B IG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVt YSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVz dDIiCkBAIC0xNDkyLDEwICsxNDkyLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSByZW1v dmluZyB0aGUgZHVwbGljYXRlIHNjaGVtYXMKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2Zv cnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MTsKIFxkUnAr IHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1h czoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTc0LDE4ICsxNTc0LDE4IEBAIFNFVCBjbGllbnRf bWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3Jz Y2hlbWE7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjNfZm9yc2No ZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNf Zm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2Zv cnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWIzX2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0 cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjNfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAg ICAgInB1Yl90ZXN0MSIKIApAQCAtMTU5NSwyMCArMTU5NSwyMCBAQCBDUkVBVEUgUFVCTElDQVRJ T04gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rl c3QxLCBUQQogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hIEZP UiBUQUJMRSBwdWJfdGVzdDIudGJsMSwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBSRVNF VCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1h X2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hl bWFfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogXGRScCsgdGVzdHB1Yl9m b3J0YWJsZV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJfdGVzdDIudGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6Ci0tIAoyLjM3LjEKCg== --0000000000008463b705ea646663 Content-Type: application/octet-stream; name="v25-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v25-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8xkmm4t3 RnJvbSBjODFmNzRhYzAxYjk3ZDNlY2E3NTMyMjE0OGUwZGJiNjYxNzlkZGVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjkgU2VwIDIwMjIgMDk6Mzc6MjggLTA0MDAKU3ViamVjdDogW1BBVENI IDQvNl0gVGVzdCBjYXNlcyBmb3IgRERMIHJlcGxpY2F0aW9uLgoKQXV0aG9yOiBUYWthbWljaGkg T3N1bWkKLS0tCiAuLi4vc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbCAgICAg fCA0NjUgKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDY1IGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3Jl cGxpY2F0aW9uLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2Rk bF9yZXBsaWNhdGlvbi5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGlj YXRpb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNjZkY2IwMTJh NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVw bGljYXRpb24ucGwKQEAgLTAsMCArMSw0NjUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBSZWdyZXNzaW9uIHRlc3RzIGZvciBs b2dpY2FsIHJlcGxpY2F0aW9uIG9mIERETHMKKyMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7 Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpV dGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVyLT5pbml0 KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7 CisKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9 PiAnbG9naWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKK215ICRkZGwgPSAiQ1JF QVRFIFRBQkxFIHRlc3RfcmVwKGlkIGludCBwcmltYXJ5IGtleSwgbmFtZSB2YXJjaGFyLCB2YWx1 ZSBpbnRlZ2VyKTsiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJGRk bCk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dGVzdF9yZXAgVkFMVUVTICgxLCAnZGF0YTEnLCAxKTsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAkZGRsKTsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJG5v ZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIG15cHViIEZP UiBBTEwgVEFCTEVTIHdpdGggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZSwgZGRs Jyk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRF IFNVQlNDUklQVElPTiBteXN1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJ Q0FUSU9OIG15cHViOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1 YicpOworCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGZ1bGx5IHN5bmNocm9uaXplZCB0aGUgdGFibGUu CisjIFRoaXMgcHJldmVudHMgQUxURVIgVEFCTEUgY29tbWFuZCBiZWxvdyBmcm9tIGJlaW5nIGV4 ZWN1dGVkIGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24uCiskbm9kZV9zdWJzY3JpYmVyLT5w b2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisgICAiU0VMRUNUIENPVU5UKDEpID0gMCBGUk9N IHBnX3N1YnNjcmlwdGlvbl9yZWwgc3IgV0hFUkUgc3Iuc3JzdWJzdGF0ZSBOT1QgSU4gKCdzJywg J3InKSBBTkQgc3Iuc3JyZWxpZCA9ICd0ZXN0X3JlcCc6OnJlZ2NsYXNzIgorKTsKKworIyBUZXN0 IEFMVEVSIFRBQkxFIEFERAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFERCBjNCBpbnQ7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgyLCAnZGF0 YTInLCAyLCAyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKK215ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGM0ID0gMjsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgQUREIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFM VEVSIFRBQkxFIERST1AKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJB TFRFUiBUQUJMRSB0ZXN0X3JlcCBEUk9QIGM0OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfcmVwIHdoZXJlIGlkID0gMjsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHRlc3RfcmVwOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBEUk9QIHJl cGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFRZUEUKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2 YWx1ZSBUWVBFIHZhcmNoYXIiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDMsICdkYXRhMycsICczJyk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJP TSB0ZXN0X3JlcCBXSEVSRSB2YWx1ZSA9ICczJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQUxU RVIgdGVzdF9yZXAgQUxURVIgQ09MVU1OIFRZUEUgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQUxU RVIgVEFCTEUgQUxURVIgU0VUIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgZGVmYXVs dCB2YWx1ZSBhZnRlciB0aGUgZGlyZWN0IGluc2VydCB0byBzdWJzY3JpYmVyIG5vZGUuCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAg QUxURVIgQ09MVU1OIHZhbHVlIFNFVCBERUZBVUxUICdmb28nIik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNCwgJ2RhdGE0Jyk7Iik7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgdmFsdWUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDQ7Iik7CitpcygkcmVzdWx0LCAnZm9v JywgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIFNFVCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBkb24ndCBo YXZlIHRoZSBkZWZhdWx0IHZhbHVlIHByZXZpb3VzbHkgZGVmaW5lZC4KKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiBDT0xV TU4gdmFsdWUgRFJPUCBERUZBVUxUOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDUsICdkYXRhNScpOyIpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVlIElTIE5V TEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7CitpcygkcmVzdWx0LCBxKHQpLCAnQUxU RVIgdGVzdF9yZXAgQUxURVIgRFJPUCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFM VEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTAorIyBSZW1vdmUgdGhlIGV4aXN0aW5nIHJlY29y ZCB0aGF0IGNvbnRhaW5zIG51bGwgdmFsdWUgZmlyc3QuCitteSAoJHN0ZG91dCwgJHN0ZGVycik7 Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRl c3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBTRVQgTk9UIE5VTEw7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDYs ICdkYXRhNicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJy ID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAv RVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiBcInZhbHVlXCIgb2YgcmVsYXRpb24gXCJ0ZXN0 X3JlcFwiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFpbGVkIHRv IHJlcGxpY2F0ZSBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwiOworCisjIFRlc3QgQUxU RVIgVEFCTEUgQUxURVIgRFJPUCBOT1QgTlVMTAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIERST1AgTk9UIE5V TEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIElu c2VydCBzYW1lIGRhdGEgdGhhdCBoYXMgTlVMTCB2YWx1ZS4gVGhpcyBmYWlsZWQgYmVmb3JlIGJ1 dCBub3cgc2hvdWxkIHN1Y2NlZWQuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNiwgJ2RhdGE2Jyk7Iik7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgdmFs dWUgSVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNjsiKTsKK2lzKCRyZXN1bHQsIHEo dCksICJBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIE5PVCBOVUxMIHJlcGxpY2F0ZWQiKTsKKwor IyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBVTkxPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBVTkxPR0dFRDsnKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDcs ICdkYXRhNycsICc3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDc7Iik7CitpcygkcmVz dWx0LCBxcSgwKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBVTkxPR0dFRCByZXBsaWNhdGVkJyk7CisK KyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIExPR0dFRDsnKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDgsICdk YXRhOCcsICc4Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3Vi Jyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDg7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBMT0dHRUQgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQ1JFQVRFIFRBQkxFIGFuZCBETUwgY2hhbmdlcworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGEgaW50LCBiIHZhcmNoYXIpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEo MSksICdDUkVBVEUgdG1wIGlzIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgdmFsdWVzICgxLCAnYScpIik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIHZhbHVl cyAoMiwgJ2InKSIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMiksICdETUwgQ2hhbmdl cyB0byB0bXAgYXJlIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJTkhFUklU UworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0 bXAyIChjMyBpbnQpIElOSEVSSVRTICh0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDIgVkFMVUVTICgxLCAnYScsIDEpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAyJzsiKTsKK2lzKCRyZXN1bHQsIHFx KDEpLCAnQ1JFQVRFIFRBQkxFIElOSEVSSVRTIGlzIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBm cm9tIHRtcDI7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBzb21lIGRhdGEgdG8g aW5oZXJpdGVkIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDIiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBM SUtFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxF IHRtcDMgKGMzIGludCwgTElLRSB0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDMgVkFMVUVTICgxLCAxLCAnYScpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20g cGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAzJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEp LCAnQ1JFQVRFIFRBQkxFIExJS0UgcmVwbGljYXRlZCcpOworJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wMzsi KTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0IHNvbWUgZGF0YSB0byBhIHRhYmxlIGRlZmlu ZWQgd2l0aCBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDMiKTsKKworIyBUZXN0IERST1AgVEFCTEUKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDAp LCAnVEFCTEUgdG1wIGlzIGRyb3BwZWQnKTsKKworIyBUZXN0IENSRUFURSBVTkxPR0dFRCBUQUJM RQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBVTkxPR0dF RCBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ190YWJsZXMgd2hl cmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBVTkxP R0dFRCBUQUJMRSBpcyByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1w OyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdpbnNlcnRpbmcgZGF0YSB0byB1bmxvZ2dlZCB0YWJs ZSBpcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxF IElGIE5PVCBFWElTVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJD UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBx cSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIGRhdGEgdG8gYSB0 YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RT IChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUg dGFibGUgb24gdGhlIHN1YnNjcmliZXIgaW4gYWR2YW5jZSwgYW5kIGlmIHdlIHN1Y2NlZWQKKyMg aW4gcmVwbGljYXRpbmcgY2hhbmdlcy4pCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChp ZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSks ICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENS RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRh YmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUgdGFibGUgb24gdGhlIHB1Ymxpc2hlciwgYnV0IG5vdCBv biB0aGUgc3Vic2NyaWJlci4pCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFU RSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRB QkxFIHdpdGggY29sbGF0ZQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBUQUJMRSB0bXAgKG5hbWUgdGV4dCBDT0xMQVRFIFwiQ1wiKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgn Zm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg Y29sbGF0aW9uX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBXSEVSRSB0YWJs ZV9uYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcShDKSwgJ0NSRUFURSBUQUJMRSB3aXRo IGNvbGxhdGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0aCBuYW1l ZCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRBQkxFIHRtcCAoaWQgaW50IENPTlNUUkFJTlQgXCJtdXN0IGJlIGJpZ2dlciB0aGFuIDEw XCIgQ0hFQ0sgKGlkID4gMTApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJ ICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0 ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVj ayBjb25zdHJhaW50ICJtdXN0IGJlIGJpZ2dlciB0aGFuIDEwIi8KKyAgb3IgZGllICJmYWlsZWQg dG8gcmVwbGljYXRlIG5hbWVkIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisj IFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdmFyaW91cyB0eXBlcyBvZiBjb25zdHJhaW50cy4KKyMg Tk9UIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IE5PVCBOVUxMKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBudWxsIHZhbHVl IGluIGNvbHVtbiAibmFtZSIgb2YgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgbm90LW51bGwgY29u c3RyYWludC8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIG5vbiBudWxsIGNvbnN0cmFp bnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwg bmFtZSB0ZXh0IE5VTEwpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1lIElTIE5VTEwgRlJPTSB0bXA7Iik7Citpcygk cmVzdWx0LCBxcSh0KSwgIkNSRUFURSBUQUJMRSB3aXRoIE5VTEwgY29uc3RyYWludCByZXBsaWNh dGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSB0bXAiKTsKKworIyBDSEVDSyBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBwcm9kdWN0X2FtZSB0ZXh0 LCBwcmljZSBpbnQgQ0hFQ0sgKHByaWNlID4gMCkpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycsIC0xMDApOyIsCisJCQkJCSAgIG9u X2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBz dGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxh dGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfcHJpY2VfY2hlY2siLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgQ0hFQ0sgY29uc3RyYWludCI7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMg REVGQVVMVAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IERFRkFVTFQgJ2ZvbycpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1l IGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoZm9vKSwgIkNSRUFURSBUQUJMRSB3aXRoIGRl ZmF1bHQgdmFsdWUgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVU5JUVVFIGNvbnN0cmFpbnQKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBp bnQgVU5JUVVFKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwK KwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQp OworJHN0ZGVyciA9fiAvRVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1 ZSBjb25zdHJhaW50ICJ0bXBfaWRfa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRl IGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFBSSU1BUlkgS0VZCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQg aW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdiYXInKTsi LAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVy ciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVw bGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXkiLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgcHJpbWFyeSBrZXkgYXQgY3JlYXRpbmcgdGFi bGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUg dG1wOyIpOworCisjIEVYQ0xVREUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgY2lyY2xlcyAoYyBjaXJjbGUsIEVYQ0xVREUgVVNJTkcgZ2lzdCAo YyBXSVRIICYmKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3Jp YmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAoJzwoMSwg MSksIDE+Jzo6Y2lyY2xlKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAg IHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRl cnIgPX4gL0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1c2lvbiBj b25zdHJhaW50ICJjaXJjbGVzX2NfZXhjbCIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0 ZSBFWENMVURFIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIGNpcmNsZXMiKTsKKworIyBSRUZFUkVOQ0VTCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHByb2R1Y3Qg KGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMSwgJ2Zvbycp OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRP IHByb2R1Y3QgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBSSU1BUlkg S0VZLCBwcm9kdWN0X2lkIGludCBSRUZFUkVOQ0VTIHByb2R1Y3QgKGlkKSkiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIG9yZGVycyBWQUxVRVMgKDEsIDEwKSIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBpbnNlcnQgb3Ig dXBkYXRlIG9uIHRhYmxlICJvcmRlcnMiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQg Im9yZGVyc19wcm9kdWN0X2lkX2ZrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUg UkVGRVJFTkNFUyBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBvcmRlcnMiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHByb2R1Y3QiKTsKKworIyBERUZFUlJBQkxF Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRt cCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hlY2sgb2YgZGVmZXJyYWJsZSBjbGF1 c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVVBEQVRFIHRtcCBT RVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUgYSB0ZXN0IHRoYXQgc2hvdWxkIGZh aWwgZm9yIElOSVRJQUxMWSBJTU1FRElBVEUodGhlIGRlZmF1bHQpCiskbm9kZV9zdWJzY3JpYmVy LT5wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsg MTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsKK0RFTEVURSBGUk9NIHRt cCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispLCBvbl9lcnJvcl9zdG9wID0+IDAsIHN0ZGVyciA9 PiBcJHN0ZGVyciwgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVw bGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXkiLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgREVGRVJSQUJMRSBhdCBjcmVhdGluZyB0YWJs ZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0 bXA7Iik7CisKKyMgTk9UIERFRkVSUkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgTk9UIERFRkVS UkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdi YXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRu b2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQg KyAxOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwk c3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6 ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfcGtl eSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBOT1QgREVGRVJSQUJMRSBhdCBjcmVh dGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXA7Iik7CisKKyMgREVGRVJSQUJMRSBhbmQgSU5JVElBTExZIERFRkVSUkVECisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAo aWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVELCBuYW1lIHRl eHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNoZWNrIG9m IGRlZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRlIGEgdGVz dCB0aGF0IHNob3VsZCBzdWNjZWVkIGZvciBJTklUSUFMTFkgREVGRVJSRUQKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRtcCBTRVQg aWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7CitERUxF VEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVB VEUgVEFCTEUgd2l0aCB0YWJsZSBjb25zdHJhaW50CisjIFdlIHdpbGwgc2V0IHR3byBjaGVja3Mg YW5kIGNvbmR1Y3QgdHdvIGluc2VydHMgdGhhdCBzaG91bGQgZmFpbCByZXNwZWN0aXZlbHkuCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdG1w IChwcmljZSBpbnQsIGRpc2NvdW50ZWRfcHJpY2UgaW50LCBDSEVDSyAoZGlzY291bnRlZF9wcmlj ZSA+IDAgQU5EIHByaWNlID4gZGlzY291bnRlZF9wcmljZSkpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMTAwLCAwKTsiLAorCQkJCQkgICBvbl9l cnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rk b3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRp b24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAgb3IgZGll ICJmYWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKGZpcnN0IGNvbmRpdGlvbikg YXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoNTAsIDEwMCk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3Rv cCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBc JHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0bXAi IHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9yIGRpZSAiZmFpbGVk IHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChzZWNvbmQgY29uZGl0aW9uKSBhdCBjcmVh dGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgV0lUSCBzdHJvcmFnZV9wYXJh bWV0ZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFC TEUgdG1wIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA4MCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBnX2NsYXNz IFdIRVJFIHJlbG5hbWUgPSAndG1wJzsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRvdXQgPX4gL3tmaWxsZmFjdG9yPTgwfS8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGlj YXRlIHN0b3JhZ2Ugb3B0aW9uIjsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQs IHFxKDEpLCAnQ1JFQVRFIFRBQkxFIHdpdGggc3RvcmFnZV9wYXJhbWV0ZXIgcmVwbGljYXRlZCcp OworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1w OyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgKGNyZWF0aW5nIGEgdGFibGVz cGFjZSBpcyBub3QgcmVwbGljYXRlZCkKKyMgUHJlcGFyZSB0aGUgZGlyZWN0b3JpZXMgZm9yIHRo ZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZmlyc3QuCitteSAoJGJhc2VkaXIsICR0YWJsZXNw YWNlX2Rpcik7CisKKyRiYXNlZGlyID0gJG5vZGVfcHVibGlzaGVyLT5iYXNlZGlyOworJHRhYmxl c3BhY2VfZGlyID0gIiRiYXNlZGlyL3RibHNwY19wdWIiOworbWtkaXIoJHRhYmxlc3BhY2VfZGly KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVT UEFDRSBteXRibHNwYyBMT0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKyRiYXNlZGlyID0g JG5vZGVfc3Vic2NyaWJlci0+YmFzZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFzZWRpci90 YmxzcGNfc3ViIjsKK21rZGlyICgkdGFibGVzcGFjZV9kaXIpOworJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVTUEFDRSBteXRibHNwYyBMT0NBVElP TiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCkgVEFCTEVTUEFDRSBteXRibHNwYzsi KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0 bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRF IFRBQkxFIFRBQkxFU1BBQ0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRZUEUK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBteXR5 cGUgQVMgKGlkIGludCwgbmFtZSB0ZXh0LCBhZ2UgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIE9GIG15dHlwZTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnYmFy Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBPRiBy ZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRZUEUgbXl0eXBlIik7CisKKyMgVGVzdCBDUkVBVEUgRU5VTSBUWVBFCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXllbnVtdHlwZSBBUyBF TlVNICgnbmV3JywgJ29wZW4nLCAnY2xvc2VkJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoc3RhdHVzIG15ZW51bXR5cGUpOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKCdu ZXcnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAq IGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEobmV3KSwgJ0NSRUFURSBUQUJMRSBPRiByZXBs aWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9Q IFRZUEUgbXllbnVtdHlwZSIpOworCisjIFRlc3QgQ1JFQVRFIFJBTkdFIFRZUEUKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBmbG9hdDhfcmFuZ2Ug QVMgUkFOR0UgKHN1YnR5cGUgPSBmbG9hdDgsIHN1YnR5cGVfZGlmZiA9IGZsb2F0OG1pKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wICh2YWwgZmxvYXQ4 X3JhbmdlKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJpbnNl cnQgaW50byB0bXAgdmFsdWVzKGZsb2F0OF9yYW5nZSgtMTIuMzQsICcxLjExMTExM2UzJykpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogZnJvbSB0 bXA7Iik7CitpcygkcmVzdWx0LCBxcShbLTEyLjM0LDExMTEuMTEzXCkpLCAnQ1JFQVRFIFRBQkxF IE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRST1AgVFlQRSBmbG9hdDhfcmFuZ2UiKTsKKworIyBUZXN0IENSRUFURSBCQVNFIERBVEEg VFlQRSBhbmQgdXNlIGl0IGluIHRhYmxlIGRlZmluaXRpb24KKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICIKK0NSRUFURSBUWVBFIGludDQyOworQ1JFQVRFIEZVTkNUSU9O IGludDQyX2luKGNzdHJpbmcpCisgICBSRVRVUk5TIGludDQyCisgICBBUyAnaW50NGluJworICAg TEFOR1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBGVU5DVElPTiBpbnQ0 Ml9vdXQoaW50NDIpCisgICBSRVRVUk5TIGNzdHJpbmcKKyAgIEFTICdpbnQ0b3V0JworICAgTEFO R1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBUWVBFIGludDQyICgKKyAg IGludGVybmFsbGVuZ3RoID0gNCwKKyAgIGlucHV0ID0gaW50NDJfaW4sCisgICBvdXRwdXQgPSBp bnQ0Ml9vdXQsCisgICBhbGlnbm1lbnQgPSBpbnQ0LAorICAgZGVmYXVsdCA9IDQyLAorICAgcGFz c2VkYnl2YWx1ZQorKTsKK0NSRUFURSBUQUJMRSB0bXAgKGYxIGludDQyKTsKK0lOU0VSVCBJTlRP IHRtcCBERUZBVUxUIFZBTFVFUzsKKyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUICogZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSg0MiksICdDUkVB VEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUWVBFIGludDQyIGNhc2NhZGUiKTsKKworcGFzcyAiRERMIHJlcGxp Y2F0aW9uIHRlc3RzIHBhc3NlZDoiOworCiskbm9kZV9zdWJzY3JpYmVyLT5zdG9wOworJG5vZGVf cHVibGlzaGVyLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuMzcuMQoK --0000000000008463b705ea646663 Content-Type: application/octet-stream; name="v25-0005-Add-DDL-deparser-support-for-TEXT-SEARCH-commands-wh.patch" Content-Disposition: attachment; filename="v25-0005-Add-DDL-deparser-support-for-TEXT-SEARCH-commands-wh.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8xkmm4t4 RnJvbSBkM2ZmZDNhOTBjMGE4NTMzMGE0MzBmN2U5MmE2MjI1OTkwMWNmN2M5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiWmhlbmcgKFphbmUpIExpIiA8emhlbGxpQGFtYXpvbi5jb20+ CkRhdGU6IEZyaSwgMzAgU2VwIDIwMjIgMTI6MjM6MDMgKzA1MzAKU3ViamVjdDogW1BBVENIIDUv Nl0gQWRkIERETCBkZXBhcnNlciBzdXBwb3J0IGZvciBURVhUIFNFQVJDSCBjb21tYW5kcywgd2hp Y2gKIGluY2x1ZGVzOiAtQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04vUEFSU0VSL0RJ Q1RJT05BUlkvVEVNUExBVEUgLURST1AKIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04vUEFSU0VS L0RJQ1RJT05BUlkvVEVNUExBVEUgLUFMVEVSIFRFWFQgU0VBUkNICiBDT05GSUdVUkFUSU9OIGFu ZCBBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9kZXBhcnNlLmMgICAgIHwgNDU2ICsrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9i YWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9j b21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyB8ICAxMCArCiAzIGZpbGVzIGNoYW5nZWQsIDQ3MSBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMK aW5kZXggODEzYmFiODU2Ny4uNWJmYTgwMGZjMiAxMDA3NTUKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJz ZS5jCkBAIC01NCw2ICs1NCwxMCBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfcmFuZ2UuaCIKICNp bmNsdWRlICJjYXRhbG9nL3BnX3Jld3JpdGUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3NlcXVl bmNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190c19jb25maWcuaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX3RzX2RpY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX3BhcnNlci5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfdHNfdGVtcGxhdGUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5 cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKICNpbmNsdWRlICJjb21tYW5kcy9z ZXF1ZW5jZS5oIgpAQCAtMTU2LDYgKzE2MCwxMCBAQCBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9D b2x1bW5JZGVudGl0eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJfdAog c3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpz dWJjbWQpOwogc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9PcGVyYXRvcihPaWQg b2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CiBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9E ZWZpbmVTdG10X1R5cGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGlj IE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhPaWQgb2JqZWN0SWQsIERlZmlu ZVN0bXQgKmRlZmluZSwgT2JqZWN0QWRkcmVzcyBjb3BpZWQpOworc3RhdGljIE9ialRyZWUgKmRl cGFyc2VfRGVmaW5lU3RtdF9UU1BhcnNlcihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmlu ZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RTRGljdGlvbmFyeShPaWQg b2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9E ZWZpbmVTdG10X1RTVGVtcGxhdGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOwog CiBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0gKmVsZW0sIGJvb2wgaXNf cmVzZXQpOwogc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRnVuY3Rpb25TZXQoVmFyaWFibGVTZXRL aW5kIGtpbmQsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKTsKQEAgLTU0MDYsNiArNTQxNCwyMiBA QCBkZXBhcnNlX0RlZmluZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsIE9iamVj dEFkZHJlc3Mgc2Vjb25kYXJ5T2JqKQogCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9U eXBlKG9iamVjdElkLCBkZWZpbmUpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBPQkpFQ1RfVFNDT05G SUdVUkFUSU9OOgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhvYmpl Y3RJZCwgZGVmaW5lLCBzZWNvbmRhcnlPYmopOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1Rf VFNQQVJTRVI6CisJCQlkZWZTdG10ID0gZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2VyKG9iamVj dElkLCBkZWZpbmUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgor CQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rpb25hcnkob2JqZWN0SWQsIGRl ZmluZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UU1RFTVBMQVRFOgorCQkJZGVmU3Rt dCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UU1RlbXBsYXRlKG9iamVjdElkLCBkZWZpbmUpOworCQkJ YnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3Qg a2luZCIpOwogCX0KQEAgLTU3NjYsNiArNTc5MCw0MjcgQEAgZGVwYXJzZV9EZWZpbmVTdG10X1R5 cGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCiAJcmV0dXJuIHN0bXQ7CiB9CiAK K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhPaWQgb2JqZWN0 SWQsIERlZmluZVN0bXQgKmRlZmluZSwKKwkJCQkJCQlPYmplY3RBZGRyZXNzIGNvcGllZCkKK3sK KwlIZWFwVHVwbGUgICB0c2NUdXA7CisJSGVhcFR1cGxlICAgdHNwVHVwOworCU9ialRyZWUJICAg KnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUZvcm1fcGdfdHNfY29uZmlnIHRzY0Zvcm07CisJ Rm9ybV9wZ190c19wYXJzZXIgdHNwRm9ybTsKKwlMaXN0CSAgICpsaXN0OworCisJdHNjVHVwID0g U2VhcmNoU3lzQ2FjaGUxKFRTQ09ORklHT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzY1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBjb25maWd1cmF0aW9uICV1IiwKKwkJCSBvYmpl Y3RJZCk7CisJdHNjRm9ybSA9IChGb3JtX3BnX3RzX2NvbmZpZykgR0VUU1RSVUNUKHRzY1R1cCk7 CisKKwl0c3BUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNQQVJTRVJPSUQsIE9iamVjdElkR2V0RGF0 dW0odHNjRm9ybS0+Y2ZncGFyc2VyKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzcFR1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBwYXJz ZXIgJXUiLAorCQkJIHRzY0Zvcm0tPmNmZ3BhcnNlcik7CisJdHNwRm9ybSA9IChGb3JtX3BnX3Rz X3BhcnNlcikgR0VUU1RSVUNUKHRzcFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJ ICoKKwkgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgKCV7 ZWxlbXM6LCB9cykKKwkgKi8KKwlzdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBw ZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIlRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVu dGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNjRm9ybS0+Y2ZnbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzY0Zvcm0tPmNmZ25hbWUpKSk7CisKKwkv KgorCSAqIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UuICBJZiB3ZSBoYXZlIENPUFknZWQgYW4g ZXhpc3RpbmcgY29uZmlnLCBhZGQKKwkgKiBhIENPUFkgY2xhdXNlOyBvdGhlcndpc2UgYWRkIGEg UEFSU0VSIGNsYXVzZS4KKwkgKi8KKwlsaXN0ID0gTklMOworCS8qIENPUFkgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiQ09QWT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAiY29weSIpOworCWlmIChjb3BpZWQub2JqZWN0SWQgIT0gSW52YWxpZE9pZCkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wLCAiJXt0c2NvbmZpZ31EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFRTQ29uZmlnUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNvcGll ZC5vYmplY3RJZCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQi LCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwkvKiBQQVJTRVIgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFSU0VSPSIsIDEsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwYXJzZXIiKTsKKwlpZiAoY29waWVkLm9i amVjdElkID09IEludmFsaWRPaWQpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cGFy c2VyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNwRm9ybS0+cHJzbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3BGb3JtLT5wcnNuYW1lKSkpOworCWVs c2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlhcHBlbmRfYXJyYXlf b2JqZWN0KHN0bXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hl KHRzcFR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKHRzY1R1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30K Kworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2VyKE9pZCBvYmpl Y3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZSAgIHRzcFR1cDsKKwlPYmpU cmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0OworCUZvcm1f cGdfdHNfcGFyc2VyIHRzcEZvcm07CisKKwl0c3BUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNQQVJT RVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQodHNwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQg c2VhcmNoIHBhcnNlciB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRzcEZvcm0gPSAo Rm9ybV9wZ190c19wYXJzZXIpIEdFVFNUUlVDVCh0c3BUdXApOworCisJLyoKKwkgKiBWZXJib3Nl IHN5bnRheAorCSAqCisJICogQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUiAle2lkZW50aXR5fUQg KCV7ZWxlbXM6LCB9cykKKwkgKi8KKwlzdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJ YXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIlRFWFQgU0VBUkNIIFBBUlNFUiAle2lkZW50aXR5 fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3BGb3JtLT5wcnNuYW1lc3Bh Y2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNwRm9ybS0+cHJzbmFtZSkpKTsKKworCS8qIEFk ZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0ID0gTklMOworCisJLyogU1RBUlQgKi8K Kwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1RBUlQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInN0YXJ0Iik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9j ZWR1cmV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc3N0YXJ0KSk7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBHRVRUT0tFTiAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJHRVRUT0tFTj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiZ2V0dG9rZW4iKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIl e3Byb2NlZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2Vk dXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzdG9rZW4pKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEVORCAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJFTkQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImVuZCIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJl fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNlbmQpKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIExFWFRZUEVTICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIkxFWFRZUEVTPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJsZXh0eXBlcyIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2Vk dXJlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNsZXh0eXBlKSk7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBIRUFETElORSAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIRUFETElORT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiaGVhZGxpbmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0c3BGb3JtLT5wcnNo ZWFkbGluZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2hlYWRsaW5lKSk7CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwg Iigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNwVHVwKTsKKwor CXJldHVybiBzdG10OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRf VFNEaWN0aW9uYXJ5KE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBU dXBsZSAgIHRzZFR1cDsKKwlPYmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlM aXN0CSAgICpsaXN0OworCURhdHVtCQlvcHRpb25zOworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3Bn X3RzX2RpY3QgdHNkRm9ybTsKKworCXRzZFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU0RJQ1RPSUQs IE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNk VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNo IGRpY3Rpb25hcnkgIgorCQkJICJ3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0c2RGb3JtID0g KEZvcm1fcGdfdHNfZGljdCkgR0VUU1RSVUNUKHRzZFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ug c3ludGF4CisJICoKKwkgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSAle2lkZW50aXR5 fUQgKCV7ZWxlbXM6LCB9cykKKwkgKi8KKwlzdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOwor CisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIlRFWFQgU0VBUkNIIERJQ1RJT05BUlkgJXtp ZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNkRm9ybS0+ZGlj dG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c2RGb3JtLT5kaWN0bmFtZSkpKTsK KworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0ID0gTklMOworCisJLyog VEVNUExBVEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVEVNUExBVEU9IiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInRlbXBsYXRlIik7CisJYXBwZW5kX29iamVjdF9v YmplY3QodG1wLCAiJXt0ZW1wbGF0ZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoVFNUZW1wbGF0ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzZEZvcm0tPmRpY3R0 ZW1wbGF0ZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCisJLyoKKwkgKiBvcHRpb25zLiAgWFhYIHRoaXMgaXMgYSBwcmV0dHkgdXNlbGVzcyByZXBy ZXNlbnRhdGlvbiwgYnV0IHdlIGNhbid0IGRvCisJICogYmV0dGVyIHdpdGhvdXQgbW9yZSB0c19j YWNoZS5jIGNvb3BlcmF0aW9uIC4uLgorCSAqLworCW9wdGlvbnMgPSBTeXNDYWNoZUdldEF0dHIo VFNESUNUT0lELCB0c2RUdXAsCisJCQkJCQkJICBBbnVtX3BnX3RzX2RpY3RfZGljdGluaXRvcHRp b24sCisJCQkJCQkJICAmaXNudWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiIiwgMCk7CisJ aWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7b3B0aW9uc31zIiwg VGV4dERhdHVtR2V0Q1N0cmluZyhvcHRpb25zKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwgIigle2VsZW1z OiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNkVHVwKTsKKworCXJldHVybiBz dG10OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNUZW1wbGF0 ZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUgICB0c3RU dXA7CisJT2JqVHJlZQkgICAqc3RtdDsKKwlPYmpUcmVlCSAgICp0bXA7CisJTGlzdAkgICAqbGlz dDsKKwlGb3JtX3BnX3RzX3RlbXBsYXRlIHRzdEZvcm07CisKKwl0c3RUdXAgPSBTZWFyY2hTeXND YWNoZTEoVFNURU1QTEFURU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZCh0c3RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgdGV4dCBzZWFyY2ggdGVtcGxhdGUgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElk KTsKKwl0c3RGb3JtID0gKEZvcm1fcGdfdHNfdGVtcGxhdGUpIEdFVFNUUlVDVCh0c3RUdXApOwor CisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIFRFWFQgU0VBUkNIIFRF TVBMQVRFICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKQorCSAqLworCXN0bXQgPSBuZXdfb2Jq dHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiVEVYVCBTRUFS Q0ggVEVNUExBVEUgJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUodHN0Rm9ybS0+dG1wbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3RGb3Jt LT50bXBsbmFtZSkpKTsKKworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0 ID0gTklMOworCisJLyogSU5JVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTklUPSIsIDEs CisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJpbml0Iik7CisJaWYgKE9pZElzVmFs aWQodHN0Rm9ybS0+dG1wbGluaXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3By b2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0c3RGb3JtLT50bXBsaW5pdCkpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBMRVhJWkUgKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiTEVYSVpFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJsZXhpemUiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2Nl ZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHN0Rm9ybS0+dG1wbGxleGl6ZSkpOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29i amVjdChzdG10LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0 c3RUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf QWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlBbHRl clRTQ29uZmlndXJhdGlvblN0bXQgKm5vZGUgPSAoQWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10ICop IGNtZC0+cGFyc2V0cmVlOworCU9ialRyZWUgKmNvbmZpZzsKKwlPYmpUcmVlICp0bXA7CisJTGlz dAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWludAkJCWk7CisKKwkvKgorCSAqIFZl cmJvc2Ugc3ludGF4CisJICogY2FzZSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORzoKKwkgKiBB TFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBREQgTUFQUElORyBG T1IgJXt0b2tlbnR5cGU6LCB9SSBXSVRIICV7ZGljdGlvbmFyaWVzOiwgfUQKKwkgKgorCSAqIGNh c2UgQUxURVJfVFNDT05GSUdfRFJPUF9NQVBQSU5HOgorCSAqIEFMVEVSIFRFWFQgU0VBUkNIIENP TkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIERST1AgTUFQUElORyAle2lmX2V4aXN0c31zIEZPUiAl e3Rva2VudHlwZX1JCisJICoKKwkgKiBjYXNlIEFMVEVSX1RTQ09ORklHX0FMVEVSX01BUFBJTkdf Rk9SX1RPS0VOOgorCSAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0 eX1EIEFMVEVSIE1BUFBJTkcgRk9SICV7dG9rZW50eXBlOiwgfUkgV0lUSCAle2RpY3Rpb25hcmll czosIH1ECisJICoKKwkgKiBjYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVDoKKwkgKiBB TFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5H IFJFUExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIFdJVEggJXtuZXdfZGljdGlvbmFyeX1ECisJICoK KwkgKiBjYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9LRU46CisJICogQUxU RVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQUxURVIgTUFQUElORyBG T1IgJXt0b2tlbnR5cGU6LCB9SSBSRVBMQUNFICV7b2xkX2RpY3Rpb25hcnl9RCBXSVRIICV7bmV3 X2RpY3Rpb25hcnl9RAorCSAqLworCisJY29uZmlnID0gbmV3X29ianRyZWUoIkFMVEVSIFRFWFQg U0VBUkNIIENPTkZJR1VSQVRJT04iKTsKKworCS8qIGRldGVybWluZSB0aGUgZm9ybWF0IHN0cmlu ZyBhcHByb3ByaWF0ZSB0byBlYWNoIHN1YmNvbW1hbmQgKi8KKwlzd2l0Y2ggKG5vZGUtPmtpbmQp CisJeworCQljYXNlIEFMVEVSX1RTQ09ORklHX0FERF9NQVBQSU5HOgorCQkJYXBwZW5kX29iamVj dF9vYmplY3QoY29uZmlnLCAiJXtpZGVudGl0eX1EIEFERCBNQVBQSU5HIiwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJ CQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19EUk9QX01BUFBJTkc6CisJCQlhcHBlbmRfb2JqZWN0 X29iamVjdChjb25maWcsICIle2lkZW50aXR5fUQgRFJPUCBNQVBQSU5HIiwKKwkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwK KwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJJRiBFWElTVFMiLCAwKTsKKwkJCWFwcGVuZF9ib29sX29iamVj dCh0bXAsICJwcmVzZW50Iiwgbm9kZS0+bWlzc2luZ19vayk7CisJCQlhcHBlbmRfb2JqZWN0X29i amVjdChjb25maWcsICIle2lmX2V4aXN0c31zIiwgdG1wKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug QUxURVJfVFNDT05GSUdfQUxURVJfTUFQUElOR19GT1JfVE9LRU46CisJCQlhcHBlbmRfb2JqZWN0 X29iamVjdChjb25maWcsICIle2lkZW50aXR5fUQgQUxURVIgTUFQUElORyIsCisJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQs CisJCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQli cmVhazsKKworCQljYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVDoKKwkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HIiwKKwkJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xh c3NJZCwKKwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsK KwkJCWJyZWFrOworCisJCWNhc2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tF TjoKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBBTFRFUiBN QVBQSU5HIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRz Y2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJl c3Mub2JqZWN0SWQpKTsKKwkJCWJyZWFrOworCX0KKworCS8qIEFkZCB0aGUgYWZmZWN0ZWQgdG9r ZW4gbGlzdCwgZm9yIHN1YmNvbW1hbmRzIHRoYXQgaGF2ZSBvbmUgKi8KKwlpZiAobm9kZS0+a2lu ZCA9PSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORyB8fAorCQlub2RlLT5raW5kID09IEFMVEVS X1RTQ09ORklHX0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxU RVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTiB8fAorCQlub2RlLT5raW5kID09IEFM VEVSX1RTQ09ORklHX0RST1BfTUFQUElORykKKwl7CisJCWxpc3QgPSBOSUw7CisJCWZvcmVhY2go Y2VsbCwgbm9kZS0+dG9rZW50eXBlKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmlu Z19vYmplY3Qoc3RyVmFsKGxmaXJzdChjZWxsKSkpKTsKKwkJYXBwZW5kX2FycmF5X29iamVjdChj b25maWcsICJGT1IgJXt0b2tlbnR5cGU6LCB9SSIsIGxpc3QpOworCX0KKworCS8qIGFkZCBmdXJ0 aGVyIHN1YmNvbW1hbmQtc3BlY2lmaWMgZWxlbWVudHMgKi8KKwlpZiAobm9kZS0+a2luZCA9PSBB TFRFUl9UU0NPTkZJR19BRERfTUFQUElORyB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RTQ09O RklHX0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOKQorCXsKKwkJLyogQUREIE1BUFBJTkcgYW5kIEFM VEVSIE1BUFBJTkcgRk9SIG5lZWQgYSBsaXN0IG9mIGRpY3Rpb25hcmllcyAqLworCQlsaXN0ID0g TklMOworCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5kLmF0c2NmZy5uZGljdHM7IGkrKykKKwkJewor CQkJT2JqVHJlZQkqZGljdG9iajsKKworCQkJZGljdG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJICBjbWQtPmQuYXRz Y2ZnLmRpY3RJZHNbaV0pOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwKKwkJCQkJCSAgIG5ld19v YmplY3Rfb2JqZWN0KGRpY3RvYmopKTsKKwkJfQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbmZp ZywgIldJVEggJXtkaWN0aW9uYXJpZXM6LCB9RCIsIGxpc3QpOworCX0KKwllbHNlIGlmIChub2Rl LT5raW5kID09IEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVCB8fAorCQkJIG5vZGUtPmtpbmQg PT0gQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTikKKwl7CisJCS8qIHRoZSBS RVBMQUNFIGZvcm1zIHdhbnQgb2xkIGFuZCBuZXcgZGljdGlvbmFyaWVzICovCisJCUFzc2VydChj bWQtPmQuYXRzY2ZnLm5kaWN0cyA9PSAyKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY29uZmln LCAiUkVQTEFDRSAle29sZF9kaWN0aW9uYXJ5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNtZC0+ ZC5hdHNjZmcuZGljdElkc1swXSkpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb25maWcsICJX SVRIICV7bmV3X2RpY3Rpb25hcnl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2Nm Zy5kaWN0SWRzWzFdKSk7CisJfQorCisJcmV0dXJuIGNvbmZpZzsKK30KKworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9BbHRlclRTRGljdGlvbmFyeVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpw YXJzZXRyZWUpCit7CisJT2JqVHJlZSAqYWx0ZXJUU0Q7CisJT2JqVHJlZSAqdG1wOworCURhdHVt CQlvcHRpb25zOworCUxpc3QJICAgKmRlZmluaXRpb24gPSBOSUw7CisJYm9vbAkJaXNudWxsOwor CUhlYXBUdXBsZSAgIHRzZFR1cDsKKwlGb3JtX3BnX3RzX2RpY3QgdHNkRm9ybTsKKworCXRzZFR1 cCA9IFNlYXJjaFN5c0NhY2hlMShUU0RJQ1RPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNkVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIGRpY3Rpb25hcnkgIgorCQkJICJ3aXRoIE9J RCAldSIsIG9iamVjdElkKTsKKwl0c2RGb3JtID0gKEZvcm1fcGdfdHNfZGljdCkgR0VUU1RSVUNU KHRzZFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICogQUxURVIgVEVYVCBTRUFS Q0ggRElDVElPTkFSWSAle2lkZW50aXR5fUQgKCV7ZGVmaW5pdGlvbjosIH1zKQorCSAqLworCisJ YWx0ZXJUU0QgPSBuZXdfb2JqdHJlZSgiQUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSIpOwor CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJUU0QsICIle2lkZW50aXR5fUQiLAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2RGb3JtLT5kaWN0bmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJICBOYW1lU3RyKHRzZEZvcm0tPmRpY3RuYW1lKSkpOworCisJLyogQWRkIHRoZSBkZWZp bml0aW9uIGxpc3QgYWNjb3JkaW5nIHRvIHRoZSBwZ190c19kaWN0IGRpY3Rpbml0b3B0aW9uIGNv bHVtbiAqLworCW9wdGlvbnMgPSBTeXNDYWNoZUdldEF0dHIoVFNESUNUT0lELCB0c2RUdXAsCisJ CQkJCQkJICBBbnVtX3BnX3RzX2RpY3RfZGljdGluaXRvcHRpb24sCisJCQkJCQkJICAmaXNudWxs KTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiIiwgMCk7CisJaWYgKCFpc251bGwpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7b3B0aW9uc31zIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhv cHRpb25zKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZh bHNlKTsKKworCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJUU0QsICIoJXtkZWZpbml0aW9u OiwgfXMpIiwgZGVmaW5pdGlvbik7CisJUmVsZWFzZVN5c0NhY2hlKHRzZFR1cCk7CisKKwlyZXR1 cm4gYWx0ZXJUU0Q7Cit9CisKIC8qCiAgKiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVTRVQg KC4uLikKICAqLwpAQCAtNjYxMSw2ICs3MDU2LDEwIEBAIGRlcGFyc2VfUmVuYW1lU3RtdChPYmpl Y3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKIAkJY2FzZSBPQkpFQ1RfVFlQRToK IAkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKIAkJY2FzZSBPQkpFQ1RfRE9NQUlOOgorCQljYXNl IE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCWNhc2UgT0JKRUNUX1RTUEFSU0VSOgorCQljYXNlIE9C SkVDVF9UU1RFTVBMQVRFOgorCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CiAJCQl7CiAJ CQkJSGVhcFR1cGxlCW9ialR1cDsKIAkJCQlSZWxhdGlvbgljYXRhbG9nOwpAQCAtNzM1MSw2ICs3 ODAwLDEwIEBAIGRlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQog CQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlQ2FzdFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CiAJCQlicmVhazsKIAorCQljYXNlIFRfQWx0ZXJUU0RpY3Rpb25hcnlTdG10OgorCQkJY29tbWFu ZCA9IGRlcGFyc2VfQWx0ZXJUU0RpY3Rpb25hcnlTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwor CQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCWNvbW1hbmQgPSBOVUxMOwogCQkJZWxvZyhMT0cs ICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQiLApAQCAtNzQ3 Miw2ICs3OTI1LDkgQEAgZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAq Y21kLCBib29sIHZlcmJvc2VfbW9kZSkKIAkJY2FzZSBTQ1RfQ3JlYXRlT3BDbGFzczoKIAkJCXRy ZWUgPSBkZXBhcnNlX0NyZWF0ZU9wQ2xhc3NTdG10KGNtZCk7CiAJCQlicmVhazsKKwkJY2FzZSBT Q1RfQWx0ZXJUU0NvbmZpZzoKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyVFNDb25maWd1cmF0aW9u U3RtdChjbWQpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5leHBl Y3RlZCBkZXBhcnNlIG5vZGUgdHlwZSAlZCIsIGNtZC0+dHlwZSk7CiAJfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4IDE3ZWUxYzI2NTAuLjgxZWRiY2I0NjcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAgLTI1NTUsNyArMjU1NSwxMSBAQCBwdWJsaWNh dGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZChQR19GVU5DVElPTl9BUkdTKQogCQkJCSBzdHJj bXAob2JqLT5vYmplY3R0eXBlLCAicG9saWN5IikgPT0gMAl8fAogCQkJCSBzdHJjbXAob2JqLT5v YmplY3R0eXBlLCAicnVsZSIpID09IDAgfHwKIAkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwg ImV4dGVuc2lvbiIpID09IDAgfHwKLQkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImZvcmVp Z24tZGF0YSB3cmFwcGVyIikgPT0gMCkKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImZv cmVpZ24tZGF0YSB3cmFwcGVyIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBl LCAidGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+ b2JqZWN0dHlwZSwgInRleHQgc2VhcmNoIGRpY3Rpb25hcnkiKSA9PSAwIHx8CisJCQkJIHN0cmNt cChvYmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCBwYXJzZXIiKSA9PSAwIHx8CisJCQkJIHN0 cmNtcChvYmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCB0ZW1wbGF0ZSIpID09IDApCiAJCQlj bWR0eXBlID0gRENUX09iamVjdERyb3A7CiAJCWVsc2UKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCA2NWU5ODc2NDE3Li4zN2QzMzZlN2FhIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtOTMzLDYgKzkzMywxNiBA QCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9u U3RtdCAqc3RtdCkKIAkJCUNNRFRBR19DUkVBVEVfRVhURU5TSU9OLAogCQkJQ01EVEFHX0FMVEVS X0VYVEVOU0lPTiwKIAkJCUNNRFRBR19EUk9QX0VYVEVOU0lPTiwKKwkJCUNNRFRBR19DUkVBVEVf VEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwKKwkJCUNNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9D T05GSUdVUkFUSU9OLAorCQkJQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwK KwkJCUNNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwKKwkJCUNNRFRBR19BTFRF Ul9URVhUX1NFQVJDSF9ESUNUSU9OQVJZLAorCQkJQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfRElD VElPTkFSWSwKKwkJCUNNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfUEFSU0VSLAorCQkJQ01EVEFH X0RST1BfVEVYVF9TRUFSQ0hfUEFSU0VSLAorCQkJQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9U RU1QTEFURSwKKwkJCUNNRFRBR19EUk9QX1RFWFRfU0VBUkNIX1RFTVBMQVRFLAogCQkJQ01EVEFH X0NSRUFURV9QT0xJQ1ksCiAJCQlDTURUQUdfQUxURVJfUE9MSUNZLAogCQkJQ01EVEFHX0RST1Bf UE9MSUNZLAotLSAKMi4zNy4xCgo= --0000000000008463b705ea646663 Content-Type: application/octet-stream; name="v25-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v25-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8xkmm4s2 RnJvbSBkYjE5NDI0MWYzZmVlOWFlMjU1NjRmMjE5ZDljMTk0MGEyMjM4NjcyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNod2FyYW4gQyA8dmlnbmVzaDIxQGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAzMCBTZXAgMjAyMiAxMjowNToyMyArMDUzMApTdWJqZWN0OiBbUEFUQ0ggMy82 XSBTdXBwb3J0IENSRUFURSBUQUJMRSBBUyBTRUxFQ1QgSU5UTwoKVGhlIG1haW4gaWRlYSBvZiBy ZXBsaWNhdGluZyB0aGUgQ1JFQVRFIFRBQkxFIEFTIGlzIHRoYXQgd2UgZGVwcmFzZSB0aGUgQ1JF QVRFClRBQkxFIEFTIGludG8gYSBzaW1wbGUgQ1JFQVRFIFRBQkxFKHdpdGhvdXQgc3VicXVlcnkp IGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQKYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIGFuZCBiZWZv cmUgd3JpdGluZyBkYXRhIGludG8gdGhlIHRhYmxlIGFuZCByZXBsaWNhdGUKdGhlIGluY29taW5n IHdyaXRlcyBsYXRlciBhcyBub3JtYWwgSU5TRVJUcy4gSW4gdGhpcyBhcHBvcmFjaCwgd2UgZG9u J3QgZXhlY3V0ZQp0aGUgc3VicXVlcnkgb24gc3Vic2NyaWJlciBzbyB0aGF0IGRvbid0IG5lZWQg dG8gbWFrZSBzdXJlIGFsbCB0aGUgb2JqZWN0cwpyZWZlcmVuY2VkIGluIHRoZSBzdWJxdWVyeSBh bHNvIGV4aXN0cyBpbiBzdWJzY3JpYmVyLiBBbmQgVGhpcyBhcHByb2FjaCB3b3Jrcwpmb3IgYWxs IGtpbmQgb2YgY29tbWFuZHMoZS5nLiBDUkFFVEUgVEFCTEUgQVMgW1NFTEVDVF1bRVhFQ1VURV1b VkFMVUVTXSkKCkludHJvZHVjaW5nIGEgbmV3IHR5cGUgb2YgZXZlbnQgdHJpZ2dlciAidGFibGVf aW5pdF93cml0ZSIuIHdoaWNoIHdvdWxkIGJlIGZpcmVkCmZvciBDUkVBVEUgVEFCTEUgQVMvU0VM RUNUIElOVE8gYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIGFuZApiZWZvcmUgYW55IG90aGVyIG1v ZGlmaWNhdGlvbi4gd2UgZGVwYXJzZSB0aGUgY29tbWFuZCBpbiB0aGUgdGFibGVfaW5pdF93cml0 ZSBldmVudAp0cmlnZ2VyIGFuZCBXQUwgbG9nIHRoZSBkZXBhcnNlZCBqc29uIHN0cmluZy4gVGhl IHdhbHNlbmRlciB3aWxsIHNlbmQgdGhlCnN0cmluZyB0byBzdWJzY3JpYmVyLiBBbmQgaW5jb21p bmcgSU5TRVJUcyB3aWxsIGFsc28gYmUgcmVwbGljYXRlZC4KLS0tCiBzcmMvYmFja2VuZC9jb21t YW5kcy9jcmVhdGVhcy5jICAgICAgICB8ICAxMCArKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYyAgICAgfCAgMjQgKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5jICAgfCAxNzIgKysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvY29t bWFuZHMvcHVibGljYXRpb25jbWRzLmMgfCAgIDkgKysKIHNyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0 eS5jICAgICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hl LmMgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgIHwg ICAzICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCAgIHwgICA0ICsKIHNy Yy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggICAgIHwgICA5ICstCiBzcmMvaW5jbHVk ZS91dGlscy9ldnRjYWNoZS5oICAgICAgICAgICB8ICAgMyArLQogMTAgZmlsZXMgY2hhbmdlZCwg MjMyIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvY3JlYXRlYXMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMK aW5kZXggMTUyYzI5YjU1MS4uMGQ4MGM2Yzk3NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvY3JlYXRlYXMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCkBA IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3RvYXN0aW5nLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvY3JlYXRlYXMuaCIKKyNp bmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvbWF0 dmlldy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ByZXBhcmUuaCIKICNpbmNsdWRlICJjb21tYW5k cy90YWJsZWNtZHMuaCIKQEAgLTE0Myw2ICsxNDQsMTUgQEAgY3JlYXRlX2N0YXNfaW50ZXJuYWwo TGlzdCAqYXR0ckxpc3QsIEludG9DbGF1c2UgKmludG8pCiAJCVN0b3JlVmlld1F1ZXJ5KGludG9S ZWxhdGlvbkFkZHIub2JqZWN0SWQsIHF1ZXJ5LCBmYWxzZSk7CiAJCUNvbW1hbmRDb3VudGVySW5j cmVtZW50KCk7CiAJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIEZpcmUgdGhlIHRyaWdnZXIgZm9y IHRhYmxlX2luaXRfd3JpdGUgYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIHNvCisJCSAqIHRoYXQg d2UgY2FuIGFjY2VzcyB0aGUgY2F0YWxvZyBpbmZvIGFib3V0IHRoZSBuZXdseSBjcmVhdGVkIHRh YmxlIGluCisJCSAqIHRoZSB0cmlnZ2VyIGZ1bmN0aW9uLgorCQkgKi8KKwkJRXZlbnRUcmlnZ2Vy VGFibGVJbml0V3JpdGUoKE5vZGUgKikgY3JlYXRlLCBpbnRvUmVsYXRpb25BZGRyKTsKKwl9CiAK IAlyZXR1cm4gaW50b1JlbGF0aW9uQWRkcjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5j CmluZGV4IDhkYzMxNTA2MWIuLjgxM2JhYjg1NjcgMTAwNzU1Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbF9kZXBhcnNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFy c2UuYwpAQCAtNzE2OSw2ICs3MTY5LDI3IEBAIGRlcGFyc2VfUnVsZVN0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCiAJcmV0dXJuIHJ1bGVTdG10OwogfQogCisvKgorICogRGVwYXJz ZSBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqCisgKiBkZXBhcnNlX0NyZWF0ZVN0bXQgZG8g dGhlIGFjdHVhbCB3b3JrIGFzIHdlIGRlcGFyc2UgdGhlIGZpbmFsIENyZWF0ZVN0bXQgZm9yCisg KiBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9DcmVhdGVUYWJsZUFzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb2Jq ZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1Rf Q3JlYXRlVGFibGVBcyk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPmQuY3Rhcy5yZWFsX2NyZWF0ZTsK KwlvYmplY3RJZCA9IGNtZC0+ZC5jdGFzLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlyZXR1cm4gZGVw YXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworfQorCisKIC8qCiAgKiBIYW5k bGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5kcy4KICAqCkBAIC03NDQyLDYgKzc0NjMsOSBA QCBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVy Ym9zZV9tb2RlKQogCQljYXNlIFNDVF9HcmFudDoKIAkJCXRyZWUgPSBkZXBhcnNlX0dyYW50U3Rt dChjbWQpOwogCQkJYnJlYWs7CisJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CisJCQl0cmVlID0g ZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdChjbWQpOworCQkJYnJlYWs7CiAJCWNhc2UgU0NUX0Fs dGVyT3BGYW1pbHk6CiAJCQl0cmVlID0gZGVwYXJzZV9BbHRlck9wRmFtaWx5KGNtZCk7CiAJCQli cmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCBhNDk5OTg0MmZmLi4x N2VlMWMyNjUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2Vy LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0xMzMsNyAr MTMzLDggQEAgQ3JlYXRlRXZlbnRUcmlnZ2VyKENyZWF0ZUV2ZW50VHJpZ1N0bXQgKnN0bXQpCiAJ aWYgKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9zdGFydCIpICE9IDAgJiYK IAkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX2VuZCIpICE9IDAgJiYKIAkJ c3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgIT0gMCAmJgotCQlzdHJjbXAoc3Rt dC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDApCisJCXN0cmNtcChzdG10LT5ldmVu dG5hbWUsICJ0YWJsZV9yZXdyaXRlIikgIT0gMCAmJgorCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1l LCAidGFibGVfaW5pdF93cml0ZSIpICE9IDApCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNv ZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJCSBlcnJtc2coInVucmVjb2duaXplZCBldmVu dCBuYW1lIFwiJXNcIiIsCkBAIC0xNTksNyArMTYwLDggQEAgQ3JlYXRlRXZlbnRUcmlnZ2VyKENy ZWF0ZUV2ZW50VHJpZ1N0bXQgKnN0bXQpCiAJLyogVmFsaWRhdGUgdGFnIGxpc3QsIGlmIGFueS4g Ki8KIAlpZiAoKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9zdGFydCIpID09 IDAgfHwKIAkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9lbmQiKSA9PSAw IHx8Ci0JCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ryb3AiKSA9PSAwKQorCQkgc3Ry Y21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgPT0gMCB8fAorCQkgc3RyY21wKHN0bXQt PmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSA9PSAwKQogCQkmJiB0YWdzICE9IE5VTEwp CiAJCXZhbGlkYXRlX2RkbF90YWdzKCJ0YWciLCB0YWdzKTsKIAllbHNlIGlmIChzdHJjbXAoc3Rt dC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpID09IDAKQEAgLTU4NSw3ICs1ODcsOCBAQCBF dmVudFRyaWdnZXJDb21tb25TZXR1cChOb2RlICpwYXJzZXRyZWUsCiAJCWRiZ3RhZyA9IENyZWF0 ZUNvbW1hbmRUYWcocGFyc2V0cmVlKTsKIAkJaWYgKGV2ZW50ID09IEVWVF9ERExDb21tYW5kU3Rh cnQgfHwKIAkJCWV2ZW50ID09IEVWVF9ERExDb21tYW5kRW5kIHx8Ci0JCQlldmVudCA9PSBFVlRf U1FMRHJvcCkKKwkJCWV2ZW50ID09IEVWVF9TUUxEcm9wIHx8CisJCQlldmVudCA9PSBFVlRfVGFi bGVJbml0V3JpdGUpCiAJCXsKIAkJCWlmICghY29tbWFuZF90YWdfZXZlbnRfdHJpZ2dlcl9vayhk Ymd0YWcpKQogCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGNvbW1hbmQgdGFnIFwiJXNcIiIs IEdldENvbW1hbmRUYWdOYW1lKGRiZ3RhZykpOwpAQCAtODY4LDYgKzg3MSwxNjMgQEAgRXZlbnRU cmlnZ2VyVGFibGVSZXdyaXRlKE5vZGUgKnBhcnNldHJlZSwgT2lkIHRhYmxlT2lkLCBpbnQgcmVh c29uKQogCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CiB9CiAKKworLyoKKyAqIEV2ZW50VHJp Z2dlclRhYmxlSW5pdFdyaXRlU3RhcnQKKyAqICAgICBQcmVwYXJlIHRvIHJlY2VpdmUgZGF0YSBv biBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRVQgSU5UTyBjb21tYW5kIGFib3V0CisgKiAgICAgdG8g YmUgZXhlY3V0ZWQuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQo Tm9kZSAqcGFyc2V0cmVlKQoreworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCUNvbGxlY3RlZENv bW1hbmQgKmNvbW1hbmQ7CisKKwkvKiBpZ25vcmUgaWYgZXZlbnQgdHJpZ2dlciBjb250ZXh0IG5v dCBzZXQsIG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRDb2xsZWN0aW9u SW5oaWJpdGVkKQorCQlyZXR1cm47CisKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8o Y3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jeHQpOworCisJY29tbWFuZCA9IHBhbGxvYyhzaXpl b2YoQ29sbGVjdGVkQ29tbWFuZCkpOworCisJY29tbWFuZC0+dHlwZSA9IFNDVF9DcmVhdGVUYWJs ZUFzOworCWNvbW1hbmQtPmluX2V4dGVuc2lvbiA9IGNyZWF0aW5nX2V4dGVuc2lvbjsKKwljb21t YW5kLT5kLmN0YXMuYWRkcmVzcyA9IEludmFsaWRPYmplY3RBZGRyZXNzOworCWNvbW1hbmQtPmQu Y3Rhcy5yZWFsX2NyZWF0ZSA9IE5VTEw7CisJY29tbWFuZC0+cGFyc2V0cmVlID0gY29weU9iamVj dChwYXJzZXRyZWUpOworCisJY29tbWFuZC0+cGFyZW50ID0gY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5jdXJyZW50Q29tbWFuZDsKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRD b21tYW5kID0gY29tbWFuZDsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworfQor CisvKgorICogRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQKKyAqCQlGaW5pc2ggdXAgc2F2 aW5nIGFuIENSRUFURSBUQUJMRSBBUy9TRUxFQ1QgSU5UTyBjb21tYW5kLgorICoKKyAqIEZJWE1F IHRoaXMgQVBJIGlzbid0IGNvbnNpZGVyaW5nIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGFuIHhhY3Qv c3VieGFjdCBpcworICogYWJvcnRlZCBwYXJ0d2F5IHRocm91Z2guICBQcm9iYWJseSBpdCdzIGJl c3QgdG8gYWRkIGFuCisgKiBBdEVPU3ViWGFjdF9FdmVudFRyaWdnZXJzKCkgdG8gZml4IHRoaXMu CisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKHZvaWQpCit7CisJQ29s bGVjdGVkQ29tbWFuZCAqcGFyZW50OworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29u dGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29s bGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJcGFyZW50ID0gY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+cGFyZW50OworCisJcGZyZWUoY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCk7CisKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3Rh dGUtPmN1cnJlbnRDb21tYW5kID0gcGFyZW50OworfQorCisvKgorICogcHVibGljYXRpb25fZGVw YXJzZV90YWJsZV9pbml0X3dyaXRlCisgKgorICogRGVwYXJzZSB0aGUgZGRsIHRhYmxlIGNyZWF0 ZSBjb21tYW5kIGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX3Rh YmxlX2luaXRfd3JpdGUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCQkJCXJlbHBlcnNpc3Q7 CisJQ29sbGVjdGVkQ29tbWFuZCAgICpjbWQ7CisJY2hhciAgIAkJCSAgICpqc29uX3N0cmluZzsK KworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwg Im5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKworCWNtZCA9IGN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJQXNzZXJ0KGNtZCk7CisKKwlyZWxw ZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0 SWQpOworCisJLyoKKwkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hv c2UgdGFyZ2V0IHRhYmxlIGlzIGEgdGVtcG9yYXJ5CisJICogdGFibGUuCisJICoKKwkgKiBXZSB3 aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dl ZCB0YWJsZXMKKwkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJz Y3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBs YXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJICogcmV3cml0ZSBt ZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJICovCisJaWYgKHJlbHBlcnNp c3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxM KTsKKworCS8qIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93 IGRlY29kaW5nIG9mIHRoZSBzYW1lLiAqLworCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5 X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKKwkJTG9n TG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0 SWQsIERDVF9TaW1wbGVDbWQsCisJCQkJCQkJIGpzb25fc3RyaW5nLCBzdHJsZW4oanNvbl9zdHJp bmcpICsgMSk7CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQorCisvKgorICog RmlyZSB0YWJsZV9pbml0X3Jld3JpdGUgdHJpZ2dlcnMuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dl clRhYmxlSW5pdFdyaXRlKE5vZGUgKnJlYWxfY3JlYXRlLCBPYmplY3RBZGRyZXNzIGFkZHJlc3Mp Cit7CisJTGlzdAkgICAqcnVubGlzdDsKKwlFdmVudFRyaWdnZXJEYXRhIHRyaWdkYXRhOworCUNv bGxlY3RlZENvbW1hbmQgKmNvbW1hbmQ7CisKKwkvKgorCSAqIFNlZSBFdmVudFRyaWdnZXJERExD b21tYW5kU3RhcnQgZm9yIGEgZGlzY3Vzc2lvbiBhYm91dCB3aHkgZXZlbnQKKwkgKiB0cmlnZ2Vy cyBhcmUgZGlzYWJsZWQgaW4gc2luZ2xlIHVzZXIgbW9kZS4KKwkgKi8KKwlpZiAoIUlzVW5kZXJQ b3N0bWFzdGVyKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEFsc28gZG8gbm90aGluZyBpZiBvdXIg c3RhdGUgaXNuJ3Qgc2V0IHVwLCB3aGljaCBpdCB3b24ndCBiZSBpZiB0aGVyZQorCSAqIHdlcmVu J3QgYW55IHJlbGV2YW50IGV2ZW50IHRyaWdnZXJzIGF0IHRoZSBzdGFydCBvZiB0aGUgY3VycmVu dCBEREwKKwkgKiBjb21tYW5kLiAgVGhpcyB0ZXN0IG1pZ2h0IHRoZXJlZm9yZSBzZWVtIG9wdGlv bmFsLCBidXQgaXQncworCSAqICpuZWNlc3NhcnkqLCBiZWNhdXNlIEV2ZW50VHJpZ2dlckNvbW1v blNldHVwIG1pZ2h0IGZpbmQgdHJpZ2dlcnMgdGhhdAorCSAqIGRpZG4ndCBleGlzdCBhdCB0aGUg dGltZSB0aGUgY29tbWFuZCBzdGFydGVkLgorCSAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlKQorCQlyZXR1cm47CisKKwkvKiBEbyBub3RoaW5nIGlmIG5vIGNvbW1hbmQgd2FzIGNv bGxlY3RlZC4gKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1h bmQpCisJCXJldHVybjsKKworCWNvbW1hbmQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1 cnJlbnRDb21tYW5kOworCisJcnVubGlzdCA9IEV2ZW50VHJpZ2dlckNvbW1vblNldHVwKGNvbW1h bmQtPnBhcnNldHJlZSwKKwkJCQkJCQkJCSAgRVZUX1RhYmxlSW5pdFdyaXRlLAorCQkJCQkJCQkJ ICAidGFibGVfaW5pdF93cml0ZSIsCisJCQkJCQkJCQkgICZ0cmlnZGF0YSk7CisJaWYgKHJ1bmxp c3QgPT0gTklMKQorCQlyZXR1cm47CisKKwkvKiBTZXQgdGhlIHJlYWwgQ3JlYXRlVGFibGUgc3Rh dG1lbnQgYW5kIG9iamVjdCBhZGRyZXNzICovCisJY29tbWFuZC0+ZC5jdGFzLnJlYWxfY3JlYXRl ID0gcmVhbF9jcmVhdGU7CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBhZGRyZXNzOworCisJ LyogUnVuIHRoZSB0cmlnZ2Vycy4gKi8KKwlFdmVudFRyaWdnZXJJbnZva2UocnVubGlzdCwgJnRy aWdkYXRhKTsKKworCS8qIENsZWFudXAuICovCisJbGlzdF9mcmVlKHJ1bmxpc3QpOworCisJLyoK KwkgKiBNYWtlIHN1cmUgYW55dGhpbmcgdGhlIGV2ZW50IHRyaWdnZXJzIGRpZCB3aWxsIGJlIHZp c2libGUgdG8gdGhlIG1haW4KKwkgKiBjb21tYW5kLgorCSAqLworCUNvbW1hbmRDb3VudGVySW5j cmVtZW50KCk7Cit9CisKIC8qCiAgKiBJbnZva2UgZWFjaCBldmVudCB0cmlnZ2VyIGluIGEgbGlz dCBvZiBldmVudCB0cmlnZ2Vycy4KICAqLwpAQCAtMTE0OSw3ICsxMzA5LDggQEAgdHJhY2tEcm9w cGVkT2JqZWN0c05lZWRlZCh2b2lkKQogCSAqLwogCXJldHVybiAoRXZlbnRDYWNoZUxvb2t1cChF VlRfU1FMRHJvcCkgIT0gTklMKSB8fAogCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfVGFibGVSZXdy aXRlKSAhPSBOSUwpIHx8Ci0JCShFdmVudENhY2hlTG9va3VwKEVWVF9ERExDb21tYW5kRW5kKSAh PSBOSUwpOworCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfRERMQ29tbWFuZEVuZCkgIT0gTklMKSB8 fAorCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfVGFibGVJbml0V3JpdGUpICE9IE5JTCk7CiB9CiAK IC8qCkBAIC0xODY4LDYgKzIwMjksNyBAQCBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcyhQ R19GVU5DVElPTl9BUkdTKQogCQkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToKIAkJCWNhc2UgU0NU X0NyZWF0ZU9wQ2xhc3M6CiAJCQljYXNlIFNDVF9BbHRlclRTQ29uZmlnOgorCQkJY2FzZSBTQ1Rf Q3JlYXRlVGFibGVBczoKIAkJCQl7CiAJCQkJCWNoYXIJICAgKmlkZW50aXR5OwogCQkJCQljaGFy CSAgICp0eXBlOwpAQCAtMTg4NSw2ICsyMDQ3LDggQEAgcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29t bWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCWFkZHIgPSBjbWQtPmQuY3JlYXRlb3BjLmFk ZHJlc3M7CiAJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUU0NvbmZpZykKIAkJ CQkJCWFkZHIgPSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3M7CisJCQkJCWVsc2UgaWYgKGNtZC0+dHlw ZSA9PSBTQ1RfQWx0ZXJUU0NvbmZpZykKKwkJCQkJCWFkZHIgPSBjbWQtPmQuY3Rhcy5hZGRyZXNz OwogCiAJCQkJCS8qCiAJCQkJCSAqIElmIGFuIG9iamVjdCB3YXMgZHJvcHBlZCBpbiB0aGUgc2Ft ZSBjb21tYW5kIHdlIG1heSBlbmQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1 YmxpY2F0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMK aW5kZXggNTg0MzA4M2Q2NS4uNjVlOTg3NjQxNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGlj YXRpb25jbWRzLmMKQEAgLTk4Niw2ICs5ODYsMTEgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VT dGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCQlDTURUQUdfUkVG UkVTSF9NQVRFUklBTElaRURfVklFVwogCQl9OwogCisJCUNvbW1hbmRUYWcJaW5pdF9jb21tYW5k c1tdID0geworCQkJQ01EVEFHX0NSRUFURV9UQUJMRV9BUywKKwkJCUNNRFRBR19TRUxFQ1RfSU5U TworCQl9OworCiAJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRyaWdnZXIg Ki8KIAkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5kIiwgZW5k X2NvbW1hbmRzLAogCQkJCQkJCQkJIGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15c2VsZiwgcHVi b2lkKTsKQEAgLTk5Nyw2ICsxMDAyLDEwIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUg KnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQkvKiBDcmVhdGUgdGhlIHRh YmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAqLwogCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmln Z2VyKCJ0YWJsZV9yZXdyaXRlIiwgcmV3cml0ZV9jb21tYW5kcywKIAkJCQkJCQkJCSBsZW5ndGhv ZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUg dGFibGVfaW5pdF93cml0ZSBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVu dFRyaWdnZXIoInRhYmxlX2luaXRfd3JpdGUiLCBpbml0X2NvbW1hbmRzLAorCQkJCQkJCQkJIGxl bmd0aG9mKGluaXRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CiAJfQogCiAJdGFibGVfY2xv c2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3Av dXRpbGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKaW5kZXggMjQ3ZDA4MTZhZC4u YzYzNDkyYjQ5YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKKysrIGIv c3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKQEAgLTE2NjUsOCArMTY2NSwxMCBAQCBQcm9jZXNz VXRpbGl0eVNsb3coUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCWJyZWFrOwogCiAJCQljYXNlIFRf Q3JlYXRlVGFibGVBc1N0bXQ6CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChw YXJzZXRyZWUpOwogCQkJCWFkZHJlc3MgPSBFeGVjQ3JlYXRlVGFibGVBcyhwc3RhdGUsIChDcmVh dGVUYWJsZUFzU3RtdCAqKSBwYXJzZXRyZWUsCiAJCQkJCQkJCQkJCXBhcmFtcywgcXVlcnlFbnYs IHFjKTsKKwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZCgpOwogCQkJCWJyZWFrOwog CiAJCQljYXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hl LmMKaW5kZXggZjdmNzE2NWY3Zi4uN2ZiOGNiMjkxZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRj YWNoZS5jCkBAIC0xNjcsNiArMTY3LDggQEAgQnVpbGRFdmVudFRyaWdnZXJDYWNoZSh2b2lkKQog CQkJZXZlbnQgPSBFVlRfU1FMRHJvcDsKIAkJZWxzZSBpZiAoc3RyY21wKGV2dGV2ZW50LCAidGFi bGVfcmV3cml0ZSIpID09IDApCiAJCQlldmVudCA9IEVWVF9UYWJsZVJld3JpdGU7CisJCWVsc2Ug aWYgKHN0cmNtcChldnRldmVudCwgInRhYmxlX2luaXRfd3JpdGUiKSA9PSAwKQorCQkJZXZlbnQg PSBFVlRfVGFibGVJbml0V3JpdGU7CiAJCWVsc2UKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdAppbmRleCBjZTFiMTdmNWFiLi44MWZiZmQ0YWFjIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKQEAgLTExODM4LDQgKzExODM4LDcgQEAKIHsgb2lkID0+ICc0NjQ2JywgZGVzY3Ig PT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UgdGFibGUgcmV3cml0ZScsCiAgIHBy b25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZScsIHByb3JldHR5cGUg PT4gJ2V2ZW50X3RyaWdnZXInLAogICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJs aWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnIH0sCit7IG9pZCA9PiAnNDY0NycsIGRlc2Ny ID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIGluaXQnLAorICBwcm9u YW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUnLCBwcm9yZXR0eXBl ID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVi bGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5oCmluZGV4IGZkMmVlN2ZmZTQuLmE5ZTBmNzFmNmEgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmgKQEAgLTU1LDYgKzU1LDEwIEBAIGV4dGVybiB2b2lkIEV2 ZW50VHJpZ2dlckRETENvbW1hbmRFbmQoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2 ZW50VHJpZ2dlclNRTERyb3AoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJp Z2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9pZCB0YWJsZU9pZCwgaW50IHJlYXNv bik7CiAKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQoTm9kZSAq cGFyc2V0cmVlKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlKE5vZGUg KnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJp Z2dlclRhYmxlSW5pdFdyaXRlRW5kKHZvaWQpOworCiBleHRlcm4gYm9vbCBFdmVudFRyaWdnZXJC ZWdpbkNvbXBsZXRlUXVlcnkodm9pZCk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJFbmRDb21w bGV0ZVF1ZXJ5KHZvaWQpOwogZXh0ZXJuIGJvb2wgdHJhY2tEcm9wcGVkT2JqZWN0c05lZWRlZCh2 b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggYi9z cmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4IGI1MzI5NGJmNTcuLjNkMjk0 YTAzNzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKKysr IGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApAQCAtMjksNyArMjksOCBAQCB0 eXBlZGVmIGVudW0gQ29sbGVjdGVkQ29tbWFuZFR5cGUKIAlTQ1RfQWx0ZXJPcEZhbWlseSwKIAlT Q1RfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlcywKIAlTQ1RfQ3JlYXRlT3BDbGFzcywKLQlTQ1RfQWx0 ZXJUU0NvbmZpZworCVNDVF9BbHRlclRTQ29uZmlnLAorCVNDVF9DcmVhdGVUYWJsZUFzCiB9IENv bGxlY3RlZENvbW1hbmRUeXBlOwogCiAvKgpAQCAtMTAxLDYgKzEwMiwxMiBAQCB0eXBlZGVmIHN0 cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJCU9iamVjdFR5cGUJb2JqdHlwZTsKIAkJfQkJ CWRlZnByaXZzOworCisJCXN0cnVjdAorCQl7CisJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJ CQlOb2RlCQkgKnJlYWxfY3JlYXRlOworCQl9CQkJY3RhczsKIAl9CQkJZDsKIAogCXN0cnVjdCBD b2xsZWN0ZWRDb21tYW5kICpwYXJlbnQ7CS8qIHdoZW4gbmVzdGVkICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUu aAppbmRleCBkZGI2N2E2OGZhLi4xZTY0ODMxN2FlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy9ldnRjYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKQEAgLTIy LDcgKzIyLDggQEAgdHlwZWRlZiBlbnVtCiAJRVZUX0RETENvbW1hbmRTdGFydCwKIAlFVlRfRERM Q29tbWFuZEVuZCwKIAlFVlRfU1FMRHJvcCwKLQlFVlRfVGFibGVSZXdyaXRlCisJRVZUX1RhYmxl UmV3cml0ZSwKKwlFVlRfVGFibGVJbml0V3JpdGUKIH0gRXZlbnRUcmlnZ2VyRXZlbnQ7CiAKIHR5 cGVkZWYgc3RydWN0Ci0tIAoyLjM3LjEKCg== --0000000000008463b705ea646663 Content-Type: application/octet-stream; name="v25-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v25-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8xkmm4h0 RnJvbSBkYTU5ZDc4ZGEzNGIzNzc1MWJmY2M1Y2JhYTNjMDgzZGI3MGExYzAyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjggU2VwIDIwMjIgMDk6NDY6MzEgLTA0MDAKU3ViamVjdDogW1BBVENI IDEvNl0gRnVuY3Rpb25zIHRvIGRlcGFyc2UgRERMIGNvbW1hbmRzLgoKVGhpcyBwYXRjaCBwcm92 aWRlcyBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMsIHdoaWNoIGNhbgpsYXRl ciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJp bnRmLWxpa2UKZXhwYW5zaW9uLiBUaGVzZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVkIHRvIGFs bG93IGZvciBtYWNoaW5lLWVkaXRpbmcgb2YKdGhlIGNvbW1hbmRzLCBieSByZXBsYWNpbmcgY2Vy dGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCgpNdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBp biB0aGUgb3V0cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KY2F0YWxvZ3MsIG5v dCBmcm9tIHRoZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8gcmVs aWFibHkKY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1hbmQgKGkuZS4gb25lIG5vdCBk ZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5v ZGUuCgpUaGlzIHByb3ZpZGVzIGEgYmFzZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBEREwg c3RhdGVtZW50cy4gQ3VycmVudGx5LAp0aGUgcGF0Y2ggaGFzIHN1cHBvcnQgZm9yOgoKQ1JFQVRF L0FMVEVSL0RST1AgVEFCTEUgLS0gTm90ZSAjMSwgTm90ZSAjMgpDUkVBVEUvQUxURVIvRFJPUCBT RVFVRU5DRQpDUkVBVEUvQUxURVIvRFJPUCBTQ0hFTUEKQ1JFQVRFL0FMVEVSIEZVTkNUSU9OL1BS T0NFRFVSRQpDUkVBVEUvQUxURVIgVFJJR0dFUgpDUkVBVEUvRFJPUCBJTkRFWApDUkVBVEUvRFJP UCBPUEVSQVRPUiBbQ0xBU1MvRkFNSUxZXQpDUkVBVEUvQUxURVIvRFJPUCBDQVNUCkNSRUFURS9B TFRFUi9EUk9QIERPTUFJTgpDUkVBVEUvQUxURVIvRFJPUCBUWVBFCkNSRUFURS9BTFRFUi9EUk9Q IENPTlZFUlNJT04KQ1JFQVRFL0FMVEVSL0RST1AgUE9MSUNZCkNSRUFURS9BTFRFUi9EUk9QIEVY VEVOU0lPTgpDUkVBVEUvQUxURVIvRFJPUCBGT1JFSUdOIERBVEEgV1JBUFBFUgpDUkVBVEUvQUxU RVIvRFJPUCBSVUxFCkdSQU5UClJFVk9LRQpSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXCgooTm90 ZSAjMSkgTm90ZSB0aGF0IHNvbWUgcmVjZW50bHkgaW50cm9kdWNlZCBERExzKGUuZy4gRERMcyBy ZWxhdGVkIHRvClBBUlRJVElPTkVEIFRBQkxFKSBhcmUgdW5zdXBwb3J0ZWQuIFdlIGNhbiBleHRl bmQgaXQgYXMgd2UgbmVlZCBtb3JlCmZ1bmN0aW9uYWxpdHkgZm9yIERETCByZXBsaWNhdGlvbi4K CihOb3RlICMyKSBOb3RlIHRoYXQsIGZvciBBVFRBQ0gvREVUQUNIIFBBUlRJVElPTiwgd2UgaGF2 ZW4ndCBhZGRlZCBleHRyYSBsb2dpYyBvbgpzdWJzY3JpYmVyIHRvIGhhbmRsZSB0aGUgY2FzZSB3 aGVyZSB0aGUgdGFibGUgb24gcHVibGlzaGVyIGlzIGEgUEFSVElUSU9ORUQKVEFCTEUgd2hpbGUg dGhlIHRhcmdldCB0YWJsZSBvbiBzdWJjcmliZXIgc2lkZSBpcyBOT1JNQUwgdGFibGUuIFdlIHdp bGwKcmVzZWFyY2ggdGhpcyBtb3JlIGFuZCBpbXByb3ZlIHRoaXMgbGF0ZXIuCi0tLQogc3JjL2Jh Y2tlbmQvY2F0YWxvZy9hY2xjaGsuYyAgICAgICAgfCAgICA0ICsKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL01ha2VmaWxlICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVw YXJzZS5jICB8IDc0NzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9j b21tYW5kcy9kZGxfanNvbi5jICAgICB8ICA3NjMgKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9z ZXF1ZW5jZS5jICAgICB8ICAgMzMgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBl LmMgfCAgICAzICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jICAgICB8ICAgNTIg Kwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgfCAgMjIwICstCiBzcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICB8ICAgIDYgKwogc3JjL2luY2x1ZGUvY29tbWFu ZHMvc2VxdWVuY2UuaCAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2Uu aCAgICAgIHwgICAyMyArCiBzcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oICB8ICAg IDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvYWNsY2hrX2ludGVybmFsLmggfCAgICAxICsKIHNyYy9p bmNsdWRlL3V0aWxzL2J1aWx0aW5zLmggICAgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS91dGls cy9ydWxldXRpbHMuaCAgICAgICB8ICAgMTYgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgfCAgICA0ICsKIDE2IGZpbGVzIGNoYW5nZWQsIDg1MzYgaW5zZXJ0aW9ucygrKSwg NzAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3JjL2JhY2tlbmQvY29tbWFuZHMv ZGRsX2RlcGFyc2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9qc29uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNl LmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jIGIvc3JjL2JhY2tl bmQvY2F0YWxvZy9hY2xjaGsuYwppbmRleCBhYTVhMmVkOTQ4Li43ZGMxOTBkZGViIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvYWNsY2hrLmMKQEAgLTM4NSw3ICszODUsMTEgQEAgRXhlY3V0ZUdyYW50U3RtdChHcmFudFN0 bXQgKnN0bXQpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRV UkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJCSBlcnJtc2coImdyYW50b3IgbXVzdCBiZSBjdXJyZW50 IHVzZXIiKSkpOworCisJCWlzdG10LmdyYW50b3JfdWlkID0gZ3JhbnRvcjsKIAl9CisJZWxzZQor CQlpc3RtdC5ncmFudG9yX3VpZCA9IEludmFsaWRPaWQ7CiAKIAkvKgogCSAqIFR1cm4gdGhlIHJl Z3VsYXIgR3JhbnRTdG10IGludG8gdGhlIEludGVybmFsR3JhbnQgZm9ybS4KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFr ZWZpbGUKaW5kZXggNDhmNzM0OGY5MS4uMTcxZGZiMjgwMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUK QEAgLTI5LDYgKzI5LDggQEAgT0JKUyA9IFwKIAljb3B5dG8ubyBcCiAJY3JlYXRlYXMubyBcCiAJ ZGJjb21tYW5kcy5vIFwKKwlkZGxfZGVwYXJzZS5vIFwKKwlkZGxfanNvbi5vIFwKIAlkZWZpbmUu byBcCiAJZGlzY2FyZC5vIFwKIAlkcm9wY21kcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJz ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAuLjhkYzMxNTA2MWIKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCkBAIC0w LDAgKzEsNzQ3NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2RlcGFyc2UuYwor ICoJICBGdW5jdGlvbnMgdG8gY29udmVydCB1dGlsaXR5IGNvbW1hbmRzIHRvIG1hY2hpbmUtcGFy c2VhYmxlCisgKgkgIHJlcHJlc2VudGF0aW9uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2Fs aWZvcm5pYQorICoKKyAqIE5PVEVTCisgKgorICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRl IEpTT04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5kcywgd2hpY2ggY2FuCisgKiBsYXRl ciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJp bnRmLWxpa2UKKyAqIGV4cGFuc2lvbi4gIFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50ZW5kZWQg dG8gYWxsb3cgZm9yIG1hY2hpbmUtZWRpdGluZyBvZgorICogdGhlIGNvbW1hbmRzLCBieSByZXBs YWNpbmcgY2VydGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCisgKgorICogTXVjaCBvZiB0 aGUgaW5mb3JtYXRpb24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lz dGVtCisgKiBjYXRhbG9ncywgbm90IGZyb20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQg aXMgaW1wb3NzaWJsZSB0byByZWxpYWJseQorICogY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVk IGNvbW1hbmQgKGkuZS4gb25lIG5vdCBkZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKKyAqIGV0Yykg bG9va2luZyBvbmx5IGF0IHRoZSBwYXJzZSBub2RlLgorICoKKyAqIElERU5USUZJQ0FUSU9OCisg KgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKKyAqCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSAidGNvcC9kZGxfZGVw YXJzZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJs ZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFt ZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfYXR0cmlidXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX2Nhc3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnN0 cmFpbnQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX2RlcGVuZC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZXh0ZW5zaW9uLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWduX2RhdGFfd3JhcHBlci5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGdfZm9yZWlnbl9zZXJ2ZXIuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRz LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYW5ndWFnZS5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfbGFyZ2VvYmplY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfb3BjbGFzcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0 b3IuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29wZmFtaWx5LmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19wb2xpY3kuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3JhbmdlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19yZXdyaXRlLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5o IgorI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3NlcXVl bmNlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgImZ1bmNh cGkuaCIKKyNpbmNsdWRlICJsaWIvaWxpc3QuaCIKKyNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgor I2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5o IgorI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0 aW1pemVyLmgiCisjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oIgorI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKKyNpbmNsdWRl ICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgorI2luY2x1ZGUgInV0aWxz L2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRp bHMvcmVsLmgiCisjaW5jbHVkZSAidXRpbHMvcnVsZXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMv c3lzY2FjaGUuaCIKKworLyogRXN0aW1hdGVkIGxlbmd0aCBvZiB0aGUgZ2VuZXJhdGVkIGpzb25i IHN0cmluZyAqLworI2RlZmluZSBKU09OQl9FU1RJTUFURURfTEVOIDEyOAorCisvKgorICogQmVm b3JlIHRoZXkgYXJlIHR1cm5lZCBpbnRvIEpTT05CIHJlcHJlc2VudGF0aW9uLCBlYWNoIGNvbW1h bmQgaXMKKyAqIHJlcHJlc2VudGVkIGFzIGFuIG9iamVjdCB0cmVlLCB1c2luZyB0aGUgc3RydWN0 cyBiZWxvdy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJT2JqVHlwZU51bGwsCisJT2JqVHlwZUJv b2wsCisJT2JqVHlwZVN0cmluZywKKwlPYmpUeXBlQXJyYXksCisJT2JqVHlwZUludGVnZXIsCisJ T2JqVHlwZUZsb2F0LAorCU9ialR5cGVPYmplY3QKK30gT2JqVHlwZTsKKwordHlwZWRlZiBzdHJ1 Y3QgT2JqVHJlZQoreworCXNsaXN0X2hlYWQJcGFyYW1zOworCWludAkJCW51bVBhcmFtczsKKwlT dHJpbmdJbmZvCWZtdGluZm87CisJYm9vbAkJcHJlc2VudDsKK30gT2JqVHJlZTsKKwordHlwZWRl ZiBzdHJ1Y3QgT2JqRWxlbQoreworCWNoYXIJICAgKm5hbWU7CisJT2JqVHlwZQkJb2JqdHlwZTsK KworCXVuaW9uCisJeworCQlib29sCQlib29sZWFuOworCQljaGFyCSAgICpzdHJpbmc7CisJCWlu dDY0CQlpbnRlZ2VyOworCQlmbG9hdDgJCWZsdDsKKwkJT2JqVHJlZQkgICAqb2JqZWN0OworCQlM aXN0CSAgICphcnJheTsKKwl9IHZhbHVlOworCXNsaXN0X25vZGUJbm9kZTsKK30gT2JqRWxlbTsK KworYm9vbCB2ZXJib3NlID0gdHJ1ZTsKKworc3RhdGljIHZvaWQgYXBwZW5kX2FycmF5X29iamVj dChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBMaXN0ICphcnJheSk7CitzdGF0aWMgdm9pZCBh cHBlbmRfYm9vbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgYm9vbCB2YWx1ZSk7 CitzdGF0aWMgdm9pZCBhcHBlbmRfZmxvYXRfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5h bWUsIGZsb2F0OCB2YWx1ZSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfbnVsbF9vYmplY3QoT2JqVHJl ZSAqdHJlZSwgY2hhciAqbmFtZSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfb2JqZWN0X29iamVjdChP YmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBPYmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgY2hhciAq YXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9m bXQpOworc3RhdGljIHZvaWQgYXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9i akVsZW0gKmVsZW0pOworc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAq dHJlZSwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOworc3RhdGljIHZvaWQgZm9ybWF0X3R5cGVf ZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAorCQkJCQkJCQkgT2lkICpuc3Bp ZCwgY2hhciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkJCQkgYm9vbCAqdHlw YXJyYXkpOworc3RhdGljIExpc3QgKkZ1bmN0aW9uR2V0RGVmYXVsdHModGV4dCAqcHJvYXJnZGVm YXVsdHMpOworc3RhdGljIE9iakVsZW0gKm5ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpu YW1lKTsKK3N0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT2lkIGNs YXNzSWQsIE9pZCBvYmplY3RJZCk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfZm9yX3Jv bGVzcGVjKFJvbGVTcGVjICpzcGVjKTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfb2JqZWN0X29iamVj dChPYmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfVkEoY2hhciAq Zm10LCBpbnQgbnVtb2JqcywuLi4pOworc3RhdGljIE9iakVsZW0gKm5ld19zdHJpbmdfb2JqZWN0 KGNoYXIgKnZhbHVlKTsKK3N0YXRpYyBKc29uYlZhbHVlICpvYmp0cmVlX3RvX2pzb25iX3JlYyhP YmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKTsKK3N0YXRpYyB2b2lkIHBnX2dl dF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJCQkJCQkJCSBjaGFyICoqaW5k ZXhfYW0sCisJCQkJCQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkJCQkgY2hhciAqKnJl bG9wdGlvbnMsCisJCQkJCQkJCQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJCQkJCQkgY2hhciAq KndoZXJlQ2xhdXNlKTsKK3N0YXRpYyBjaGFyICpSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQoUmVs YXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG5vLAorCQkJCQkJCQkJICBMaXN0ICpkcGNvbnRleHQs IExpc3QgKipleHBycyk7CitzdGF0aWMgY29uc3QgY2hhciAqc3RyaW5naWZ5X29ianR5cGUoT2Jq ZWN0VHlwZSBvYmp0eXBlKTsKKworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uRGVmKFJl bGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIGJvb2wgY29tcG9zaXRlLAorCQkJCQkJ CQkgIENvbHVtbkRlZiAqY29sZGVmLCBib29sIGlzX2FsdGVyLCBMaXN0ICoqZXhwcnMpOworc3Rh dGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoT2lkIHNlcXJlbGlkLCBjaGFyIGlk ZW50aXR5LCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVt blNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBh cnNlX0RlZmluZVN0bXRfT3BlcmF0b3IoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUp Oworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9UeXBlKE9pZCBvYmplY3RJZCwg RGVmaW5lU3RtdCAqZGVmaW5lKTsKKworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmRWxlbShE ZWZFbGVtICplbGVtLCBib29sIGlzX3Jlc2V0KTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0Z1 bmN0aW9uU2V0KFZhcmlhYmxlU2V0S2luZCBraW5kLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSk7 CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9PbkNvbW1pdENsYXVzZShPbkNvbW1pdEFjdGlvbiBv cHRpb24pOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfUmVsU2V0T3B0aW9ucyhBbHRlclRhYmxl Q21kICpzdWJjbWQpOworCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0NhY2hl KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3Rh YmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQ3ljbGUoT2JqVHJlZSAq cGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3Rh dGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShPYmpUcmVlICpwYXJl bnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMg aW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX01pbnZhbHVlKE9ialRyZWUgKnBhcmVudCwgRm9y bV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqZGVwYXJzZV9TZXFfTWF4dmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3Nl cXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIE9iakVsZW0gKmRlcGFy c2VfU2VxX093bmVkQnkoT2JqVHJlZSAqcGFyZW50LCBPaWQgc2VxdWVuY2VJZCwgYm9vbCBhbHRl cl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX1Jlc3RhcnQoT2Jq VHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YSk7CitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX1N0YXJ0d2l0aChPYmpUcmVlICpwYXJlbnQsIEZvcm1f cGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9i akVsZW0gKmRlcGFyc2VfVHlwZV9TdG9yYWdlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBl IHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfUmVjZWl2ZShP YmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqZGVwYXJzZV9UeXBlX1NlbmQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlw Rm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9UeXBtb2RfSW4oT2Jq VHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKmRlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBl IHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfQW5hbHl6ZShP YmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlw ZSB0eXBGb3JtKTsKKworc3RhdGljIExpc3QgKmRlcGFyc2VfSW5oUmVsYXRpb25zKE9pZCBvYmpl Y3RJZCk7CitzdGF0aWMgTGlzdCAqZGVwYXJzZV9UYWJsZUVsZW1lbnRzKFJlbGF0aW9uIHJlbGF0 aW9uLCBMaXN0ICp0YWJsZUVsZW1lbnRzLCBMaXN0ICpkcGNvbnRleHQsCisJCQkJCQkJCSAgIGJv b2wgdHlwZWQsIGJvb2wgY29tcG9zaXRlKTsKKworLyoKKyAqIEFkZCBjb21tb24gY2xhdXNlcyB0 byBDcmVhdGVQb2xpY3kgb3IgQWx0ZXJQb2xpY3kgZGVwYXJzZSBvYmplY3RzCisgKi8KK3N0YXRp YyB2b2lkCithZGRfcG9saWN5X2NsYXVzZXMoT2JqVHJlZSAqcG9saWN5U3RtdCwgT2lkIHBvbGlj eU9pZCwgTGlzdCAqcm9sZXMsCisJCQkJICAgYm9vbCBkb19xdWFsLCBib29sIGRvX3dpdGhfY2hl Y2spCit7CisJUmVsYXRpb24JcG9sUmVsID0gdGFibGVfb3BlbihQb2xpY3lSZWxhdGlvbklkLCBB Y2Nlc3NTaGFyZUxvY2spOworCUhlYXBUdXBsZQlwb2xUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3Rf Ynlfb2lkKHBvbFJlbCwgQW51bV9wZ19wb2xpY3lfb2lkLCBwb2xpY3lPaWQpOworCUZvcm1fcGdf cG9saWN5IHBvbEZvcm07CisKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocG9sVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHBvbGljeSAldSIsIHBvbGljeU9pZCk7 CisKKwlwb2xGb3JtID0gKEZvcm1fcGdfcG9saWN5KSBHRVRTVFJVQ1QocG9sVHVwKTsKKworCS8q IGFkZCB0aGUgIk9OIHRhYmxlIiBjbGF1c2UgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChwb2xp Y3lTdG10LCAiT04gJXt0YWJsZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBwb2xGb3JtLT5wb2xyZWxpZCkp OworCisJLyoKKwkgKiBBZGQgdGhlICJUTyByb2xlIiBjbGF1c2UsIGlmIGFueS4gIEluIHRoZSBD UkVBVEUgY2FzZSwgaXQgYWx3YXlzCisJICogY29udGFpbnMgYXQgbGVhc3QgUFVCTElDLCBidXQg aW4gdGhlIEFMVEVSIGNhc2UgaXQgbWlnaHQgYmUgZW1wdHkuCisJICovCisJaWYgKHJvbGVzKQor CXsKKwkJTGlzdCAgICpsaXN0ID0gTklMOworCQlMaXN0Q2VsbCAqY2VsbDsKKworCQlmb3JlYWNo IChjZWxsLCByb2xlcykKKwkJeworCQkJUm9sZVNwZWMgICAqc3BlYyA9IChSb2xlU3BlYyAqKSBs Zmlyc3QoY2VsbCk7CisKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCQkgICBuZXdfb2Jq ZWN0X29iamVjdChuZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoc3BlYykpKTsKKwkJfQorCQlhcHBl bmRfYXJyYXlfb2JqZWN0KHBvbGljeVN0bXQsIlRPICV7cm9sZTosIH1SIiwgbGlzdCk7CisJfQor CWVsc2UKKwl7CisJCWFwcGVuZF9ib29sX29iamVjdChwb2xpY3lTdG10LCAicHJlc2VudCIsIGZh bHNlKTsKKwl9CisKKwkvKiBhZGQgdGhlIFVTSU5HIGNsYXVzZSwgaWYgYW55ICovCisJaWYgKGRv X3F1YWwpCisJeworCQlEYXR1bQlkZXBhcnNlZDsKKwkJRGF0dW0Jc3RvcmVkZXhwcjsKKwkJYm9v bAlpc251bGw7CisKKwkJc3RvcmVkZXhwciA9IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFudW1fcGdf cG9saWN5X3BvbHF1YWwsCisJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwb2xSZWwpLCAmaXNu dWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE5VTEwgcG9scXVh bCBleHByZXNzaW9uIGluIHBvbGljeSAldSIsIHBvbGljeU9pZCk7CisJCWRlcGFyc2VkID0gRGly ZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwgc3RvcmVkZXhwciwgcG9sRm9ybS0+cG9scmVs aWQpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChwb2xpY3lTdG10LCAiVVNJTkcgKCV7ZXhwcmVz c2lvbn1zKSIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwl9CisJ ZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QocG9saWN5U3RtdCwgInByZXNlbnQiLCBmYWxzZSk7 CisKKwkvKiBhZGQgdGhlIFdJVEggQ0hFQ0sgY2xhdXNlLCBpZiBhbnkgKi8KKwlpZiAoZG9fd2l0 aF9jaGVjaykKKwl7CisJCURhdHVtCWRlcGFyc2VkOworCQlEYXR1bQlzdG9yZWRleHByOworCQli b29sCWlzbnVsbDsKKworCQlzdG9yZWRleHByID0gaGVhcF9nZXRhdHRyKHBvbFR1cCwgQW51bV9w Z19wb2xpY3lfcG9sd2l0aGNoZWNrLAorCQkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IocG9sUmVs KSwgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxM IHBvbHdpdGhjaGVjayBleHByZXNzaW9uIGluIHBvbGljeSAldSIsIHBvbGljeU9pZCk7CisJCWRl cGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwgc3RvcmVkZXhwciwgcG9s Rm9ybS0+cG9scmVsaWQpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChwb2xpY3lTdG10LCAiV0lU SCBDSEVDSyAoJXtleHByZXNzaW9ufXMpIiwKKwkJCQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhk ZXBhcnNlZCkpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdChwb2xpY3lTdG10LCAi cHJlc2VudCIsIGZhbHNlKTsKKworCXJlbGF0aW9uX2Nsb3NlKHBvbFJlbCwgQWNjZXNzU2hhcmVM b2NrKTsKK30KKworLyogQXBwZW5kIGFuIGFycmF5IHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0 YXRpYyB2b2lkCithcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9m bXQsIExpc3QgKmFycmF5KQoreworCU9iakVsZW0JKnBhcmFtOworCWNoYXIgKm9iamVjdF9uYW1l OworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKGxpc3RfbGVuZ3RoKGFycmF5KSA9PSAwKQor CQlyZXR1cm47CisKKwlpZiAoIXZlcmJvc2UpCisJeworCQlMaXN0Q2VsbCAqbGM7CisKKwkJLyog RXh0cmFjdCB0aGUgT2JqRWxlbXMgd2hvc2UgcHJlc2VudCBmbGFnIGlzIHRydWUgKi8KKwkJZm9y ZWFjaChsYywgYXJyYXkpCisJCXsKKwkJCU9iakVsZW0gKmVsZW0gPSAoT2JqRWxlbSAqKSBsZmly c3QobGMpOworCisJCQlBc3NlcnQoZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlT2JqZWN0IHx8CisJ CQkJICAgZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlU3RyaW5nKTsKKworCQkJaWYgKCFlbGVtLT52 YWx1ZS5vYmplY3QtPnByZXNlbnQgJiYKKwkJCQllbGVtLT5vYmp0eXBlID09IE9ialR5cGVPYmpl Y3QpCisJCQkJYXJyYXkgPSBmb3JlYWNoX2RlbGV0ZV9jdXJyZW50KGFycmF5LCBsYyk7CisJCX0K KworCX0KKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRy ZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVBcnJheSwgb2JqZWN0 X25hbWUpOworCXBhcmFtLT52YWx1ZS5hcnJheSA9IGFycmF5OworCWFwcGVuZF9wcmVtYWRlX29i amVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qIEFwcGVuZCBhIGJvb2xlYW4gcGFyYW1ldGVyIHRv IGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVl LCBjaGFyICpzdWJfZm10LCBib29sIHZhbHVlKQoreworCU9iakVsZW0gICpwYXJhbTsKKwljaGFy CSAqb2JqZWN0X25hbWUgPSBzdWJfZm10OworCWJvb2wJICBpc19wcmVzZW50X2ZsYWcgPSBmYWxz ZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCS8qIENoZWNrIGlmIHRoZSBwcmVzZW50IGlzIHBh cnQgb2YgdGhlIGZvcm1hdCBzdHJpbmcgYW5kIHN0b3JlIHRoZSBib29sZWFuIHZhbHVlKi8KKwlp ZiAoc3RyY21wKHN1Yl9mbXQsICJwcmVzZW50IikgPT0gMCkKKwl7CisJCWlzX3ByZXNlbnRfZmxh ZyA9IHRydWU7CisJCXRyZWUtPnByZXNlbnQgPSB2YWx1ZTsKKwl9CisKKwlpZiAoIXZlcmJvc2Ug JiYgIXRyZWUtPnByZXNlbnQpCisJCXJldHVybjsKKworCWlmICghaXNfcHJlc2VudF9mbGFnKQor CQlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJf Zm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlQm9vbCwgb2JqZWN0X25hbWUpOwor CXBhcmFtLT52YWx1ZS5ib29sZWFuID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRy ZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFwcGVuZCBhIGZsb2F0OCBwYXJhbWV0ZXIgdG8gYSB0 cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2Zsb2F0X29iamVjdChPYmpUcmVlICp0cmVl LCBjaGFyICpzdWJfZm10LCBmbG9hdDggdmFsdWUpCit7CisJT2JqRWxlbQkgICAqcGFyYW07CisJ Y2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlvYmplY3RfbmFt ZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBh cmFtID0gbmV3X29iamVjdChPYmpUeXBlRmxvYXQsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFs dWUuZmx0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30K KworLyoKKyAqIEFwcGVuZCB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZyB0byB0aGUgT2JqVHJlZS4K KyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNo YXIgKnN1Yl9mbXQpCit7CisJaW50CQkJCWxlbjsKKwljaGFyCQkgICAqZm10OworCisJaWYgKHRy ZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm10ID0gdHJlZS0+Zm10aW5mby0+ ZGF0YTsKKwlsZW4gPSB0cmVlLT5mbXRpbmZvLT5sZW47CisKKwkvKiBBZGQgYSBzZXBhcmF0b3Ig aWYgbmVjZXNzYXJ5ICovCisJaWYgKGxlbiA+IDAgJiYgZm10W2xlbiAtIDFdICE9ICcgJykKKwkJ YXBwZW5kU3RyaW5nSW5mb1NwYWNlcyh0cmVlLT5mbXRpbmZvLCAxKTsKKworCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcodHJlZS0+Zm10aW5mbywgc3ViX2ZtdCk7Cit9CisKKy8qIEFwcGVuZCBhIE5V TEwgb2JqZWN0IHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9udWxsX29iamVjdChP YmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KQoreworCWNoYXIgKm9iamVjdF9uYW1lOworCisJ QXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKCF2ZXJib3NlKQorCQlyZXR1cm47CisKKwlvYmplY3Rf bmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKwor CWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBuZXdfb2JqZWN0KE9ialR5cGVOdWxsLCBvYmpl Y3RfbmFtZSkpOworfQorCisvKiBBcHBlbmQgYW4gb2JqZWN0IHBhcmFtZXRlciB0byBhIHRyZWUg Ki8KK3N0YXRpYyB2b2lkCithcHBlbmRfb2JqZWN0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFy ICpzdWJfZm10LCBPYmpUcmVlICp2YWx1ZSkKK3sKKwlPYmpFbGVtCSpwYXJhbTsKKwljaGFyICAg Km9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKCF2ZXJib3NlICYmICF2 YWx1ZS0+cHJlc2VudCkKKwkJcmV0dXJuOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0 X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3Qo T2JqVHlwZU9iamVjdCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5vYmplY3QgPSB2YWx1 ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKgorICogUmV0 dXJuIHRoZSBvYmplY3QgbmFtZSB3aGljaCBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgaW5wdXQgIiol e25hbWVbOi5dfSoiCisgKiBzdHlsZSBzdHJpbmcuIEFuZCBhcHBlbmQgdGhlIGlucHV0IGZvcm1h dCBzdHJpbmcgdG8gdGhlIE9ialRyZWUuCisgKi8KK3N0YXRpYyBjaGFyICoKK2FwcGVuZF9vYmpl Y3RfdG9fZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KQoreworCVN0 cmluZ0luZm9EYXRhCW9iamVjdF9uYW1lOworCWNvbnN0IGNoYXIJICAgKmVuZF9wdHI7CisJY29u c3QgY2hhcgkgICAqY3A7CisJYm9vbAkJCXN0YXJ0X2NvcHkgPSBmYWxzZTsKKworCWlmIChzdWJf Zm10ID09IE5VTEwgfHwgdHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gc3ViX2ZtdDsK KworCWluaXRTdHJpbmdJbmZvKCZvYmplY3RfbmFtZSk7CisJZW5kX3B0ciA9IHN1Yl9mbXQgKyBz dHJsZW4oc3ViX2ZtdCk7CisKKwlmb3IgKGNwID0gc3ViX2ZtdDsgY3AgPCBlbmRfcHRyOyBjcCsr KQorCXsKKwkJaWYgKCpjcCA9PSAneycpCisJCXsKKwkJCXN0YXJ0X2NvcHkgPSB0cnVlOworCQkJ Y29udGludWU7CisJCX0KKworCQlpZiAoIXN0YXJ0X2NvcHkpCisJCQljb250aW51ZTsKKworCQlp ZiAoKmNwID09ICc6JyB8fCAqY3AgPT0gJ30nKQorCQkJYnJlYWs7CisKKwkJYXBwZW5kU3RyaW5n SW5mb0NoYXJNYWNybygmb2JqZWN0X25hbWUsICpjcCk7CisJfQorCisJaWYgKG9iamVjdF9uYW1l LmxlbiA9PSAwKQorCQllbG9nKEVSUk9SLCAib2JqZWN0IG5hbWUgbm90IGZvdW5kIik7CisKKwlh cHBlbmRfZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXJldHVybiBvYmplY3RfbmFt ZS5kYXRhOworfQorCisvKiBBcHBlbmQgYSBwcmVhbGxvY2F0ZWQgcGFyYW1ldGVyIHRvIGEgdHJl ZSAqLworc3RhdGljIGlubGluZSB2b2lkCithcHBlbmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAq dHJlZSwgT2JqRWxlbSAqZWxlbSkKK3sKKwlzbGlzdF9wdXNoX2hlYWQoJnRyZWUtPnBhcmFtcywg JmVsZW0tPm5vZGUpOworCXRyZWUtPm51bVBhcmFtcysrOworfQorCisvKiBBcHBlbmQgYSBzdHJp bmcgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9zdHJpbmdfb2Jq ZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGNoYXIgKnZhbHVlKQoreworCU9iakVs ZW0JICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQp OworCisJaWYgKCF2ZXJib3NlICYmICh2YWx1ZSA9PSBOVUxMIHx8IHZhbHVlWzBdID09ICdcMCcp KQorCQlyZXR1cm47CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0 cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlU3RyaW5n LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLnN0cmluZyA9IHZhbHVlOworCWFwcGVuZF9w cmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBTaW1pbGFyIHRvIGZvcm1h dF90eXBlX2V4dGVuZGVkLCBleGNlcHQgd2UgcmV0dXJuIGVhY2ggYml0IG9mIGluZm9ybWF0aW9u CisgKiBzZXBhcmF0ZWx5OgorICoKKyAqIC0gbnNwaWQgaXMgdGhlIHNjaGVtYSBPSUQuICBGb3Ig Y2VydGFpbiBTUUwtc3RhbmRhcmQgdHlwZXMgd2hpY2ggaGF2ZSB3ZWlyZAorICogICB0eXBtb2Qg cnVsZXMsIHdlIHJldHVybiBJbnZhbGlkT2lkOyBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gbm90IHNj aGVtYS0KKyAqICAgcXVhbGlmeSB0aGUgbmFtZSBub3IgYWRkIHF1b3RlcyB0byB0aGUgdHlwZSBu YW1lIGluIHRoaXMgY2FzZS4KKyAqCisgKiAtIHR5cG5hbWUgaXMgc2V0IHRvIHRoZSB0eXBlIG5h bWUsIHdpdGhvdXQgcXVvdGVzCisgKgorICogLSB0eXBlbW9kc3RyIGlzIHNldCB0byB0aGUgdHlw ZW1vZCwgaWYgYW55LCBhcyBhIHN0cmluZyB3aXRoIHBhcmVucworICoKKyAqIC0gdHlwYXJyYXkg aW5kaWNhdGVzIHdoZXRoZXIgW11zIG11c3QgYmUgYWRkZWQKKyAqCisgKiBXZSBkb24ndCB0cnkg dG8gZGVjb2RlIHR5cGUgbmFtZXMgdG8gdGhlaXIgc3RhbmRhcmQtbWFuZGF0ZWQgbmFtZXMsIGV4 Y2VwdAorICogaW4gdGhlIGNhc2VzIG9mIHR5cGVzIHdpdGggdW51c3VhbCB0eXBtb2QgcnVsZXMu CisgKi8KK3N0YXRpYyB2b2lkCitmb3JtYXRfdHlwZV9kZXRhaWxlZChPaWQgdHlwZV9vaWQsIGlu dDMyIHR5cGVtb2QsCisJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoqdHlwbmFtZSwgY2hhciAqKnR5 cGVtb2RzdHIsCisJCQkJCSBib29sICp0eXBhcnJheSkKK3sKKwlIZWFwVHVwbGUJCXR1cGxlOwor CUZvcm1fcGdfdHlwZQl0eXBlZm9ybTsKKwlPaWQJCQkJYXJyYXlfYmFzZV90eXBlOworCisJdHVw bGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bSh0eXBlX29pZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciB0eXBlICV1IiwgdHlwZV9vaWQpOworCisJdHlwZWZvcm0gPSAoRm9y bV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCisJLyoKKwkgKiBDaGVjayBpZiBpdCdzIGEg cmVndWxhciAodmFyaWFibGUgbGVuZ3RoKSBhcnJheSB0eXBlLiAgQXMgYWJvdmUsCisJICogZml4 ZWQtbGVuZ3RoIGFycmF5IHR5cGVzIHN1Y2ggYXMgIm5hbWUiIHNob3VsZG4ndCBnZXQgZGVjb25z dHJ1Y3RlZC4KKwkgKi8KKwlhcnJheV9iYXNlX3R5cGUgPSB0eXBlZm9ybS0+dHlwZWxlbTsKKwor CSp0eXBhcnJheSA9IChJc1RydWVBcnJheVR5cGUodHlwZWZvcm0pICYmIHR5cGVmb3JtLT50eXBz dG9yYWdlICE9IFRZUFNUT1JBR0VfUExBSU4pOworCisJaWYgKCp0eXBhcnJheSkKKwl7CisJCS8q IFN3aXRjaCBvdXIgYXR0ZW50aW9uIHRvIHRoZSBhcnJheSBlbGVtZW50IHR5cGUgKi8KKwkJUmVs ZWFzZVN5c0NhY2hlKHR1cGxlKTsKKwkJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwg T2JqZWN0SWRHZXREYXR1bShhcnJheV9iYXNlX3R5cGUpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHR1cGxlKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBl ICV1IiwgdHlwZV9vaWQpOworCisJCXR5cGVmb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNU KHR1cGxlKTsKKwkJdHlwZV9vaWQgPSBhcnJheV9iYXNlX3R5cGU7CisJfQorCisJLyoKKwkgKiBT cGVjaWFsLWNhc2UgY3JvY2sgZm9yIHR5cGVzIHdpdGggc3RyYW5nZSB0eXBtb2QgcnVsZXMgd2hl cmUgd2UgcHV0CisJICogdHlwbW9kIGF0IHRoZSBtaWRkbGUgb2YgbmFtZShlLmcuIFRJTUUoNikg d2l0aCB0aW1lIHpvbmUgKS4gV2UgY2Fubm90CisJICogc2NoZW1hLXF1YWxpZnkgbm9yIGFkZCBx dW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGVzZSBjYXNlcy4KKwkgKi8KKwlpZiAodHlwZV9v aWQgPT0gSU5URVJWQUxPSUQgfHwKKwkJdHlwZV9vaWQgPT0gVElNRVNUQU1QT0lEIHx8CisJCXR5 cGVfb2lkID09IFRJTUVTVEFNUFRaT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVPSUQgfHwKKwkJ dHlwZV9vaWQgPT0gVElNRVRaT0lEKQorCXsKKwkJc3dpdGNoICh0eXBlX29pZCkKKwkJeworCQkJ Y2FzZSBJTlRFUlZBTE9JRDoKKwkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIklOVEVSVkFMIik7CisJ CQkJYnJlYWs7CisJCQljYXNlIFRJTUVTVEFNUFRaT0lEOgorCQkJCWlmICh0eXBlbW9kIDwgMCkK KwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAgV0lUSCBUSU1FIFpPTkUiKTsKKwkJ CQllbHNlCisJCQkJCS8qIG90aGVyd2lzZSwgV0lUSCBUWiBpcyBhZGRlZCBieSB0eXBtb2QuICov CisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIik7CisJCQkJYnJlYWs7CisJCQlj YXNlIFRJTUVTVEFNUE9JRDoKKwkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFNUCIpOwor CQkJCWJyZWFrOworCQkJY2FzZSBUSU1FVFpPSUQ6CisJCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJ CQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUgV0lUSCBUSU1FIFpPTkUiKTsKKwkJCQllbHNlCisJ CQkJCS8qIG90aGVyd2lzZSwgV0lUSCBUWiBpcyBhZGRlZCBieSB0eXBtb2RlLiAqLworCQkJCQkq dHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRU9JRDoK KwkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJCQlicmVhazsKKwkJfQorCQkqbnNw aWQgPSBJbnZhbGlkT2lkOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBObyBhZGRpdGlvbmFs IHByb2Nlc3NpbmcgaXMgcmVxdWlyZWQgZm9yIG90aGVyIHR5cGVzLCBzbyBnZXQgdGhlIHR5cGUK KwkJICogbmFtZSBhbmQgc2NoZW1hIGRpcmVjdGx5IGZyb20gdGhlIGNhdGFsb2cuCisJCSAqLwor CQkqbnNwaWQgPSB0eXBlZm9ybS0+dHlwbmFtZXNwYWNlOworCQkqdHlwbmFtZSA9IHBzdHJkdXAo TmFtZVN0cih0eXBlZm9ybS0+dHlwbmFtZSkpOworCX0KKworCWlmICh0eXBlbW9kID49IDApCisJ CSp0eXBlbW9kc3RyID0gcHJpbnRUeXBtb2QoIiIsIHR5cGVtb2QsIHR5cGVmb3JtLT50eXBtb2Rv dXQpOworCWVsc2UKKwkJKnR5cGVtb2RzdHIgPSBwc3RyZHVwKCIiKTsKKworCVJlbGVhc2VTeXND YWNoZSh0dXBsZSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGRlZmF1bHRzIHZhbHVlcyBvZiBh cmd1bWVudHMgdG8gYSBmdW5jdGlvbiwgYXMgYSBsaXN0IG9mCisgKiBkZXBhcnNlZCBleHByZXNz aW9ucy4KKyAqLworc3RhdGljIExpc3QgKgorRnVuY3Rpb25HZXREZWZhdWx0cyh0ZXh0ICpwcm9h cmdkZWZhdWx0cykKK3sKKwlMaXN0ICAgKm5vZGVkZWZzOworCUxpc3QgICAqc3RyZGVmcyA9IE5J TDsKKwlMaXN0Q2VsbCAqY2VsbDsKKworCW5vZGVkZWZzID0gKExpc3QgKikgc3RyaW5nVG9Ob2Rl KHRleHRfdG9fY3N0cmluZyhwcm9hcmdkZWZhdWx0cykpOworCWlmICghSXNBKG5vZGVkZWZzLCBM aXN0KSkKKwkJZWxvZyhFUlJPUiwgInByb2FyZ2RlZmF1bHRzIGlzIG5vdCBhIGxpc3QiKTsKKwor CWZvcmVhY2goY2VsbCwgbm9kZWRlZnMpCisJeworCQlOb2RlICAgKm9uZWRlZiA9IGxmaXJzdChj ZWxsKTsKKworCQlzdHJkZWZzID0gbGFwcGVuZChzdHJkZWZzLCBkZXBhcnNlX2V4cHJlc3Npb24o b25lZGVmLCBOSUwsIGZhbHNlLCBmYWxzZSkpOworCX0KKworCXJldHVybiBzdHJkZWZzOworfQor CisvKgorICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFJF TFBFUlNJU1RFTkNFIHZhbHVlLgorICovCitzdGF0aWMgY2hhciAqCitnZXRfcGVyc2lzdGVuY2Vf c3RyKGNoYXIgcGVyc2lzdGVuY2UpCit7CisJc3dpdGNoIChwZXJzaXN0ZW5jZSkKKwl7CisJCWNh c2UgUkVMUEVSU0lTVEVOQ0VfVEVNUDoKKwkJCXJldHVybiAiVEVNUE9SQVJZIjsKKwkJY2FzZSBS RUxQRVJTSVNURU5DRV9VTkxPR0dFRDoKKwkJCXJldHVybiAiVU5MT0dHRUQiOworCQljYXNlIFJF TFBFUlNJU1RFTkNFX1BFUk1BTkVOVDoKKwkJCXJldHVybiAiIjsKKwkJZGVmYXVsdDoKKwkJCWVs b2coRVJST1IsICJ1bmV4cGVjdGVkIHBlcnNpc3RlbmNlIG1hcmtpbmcgJWMiLCBwZXJzaXN0ZW5j ZSk7CisJCQlyZXR1cm4gIiI7CQkvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisJfQorfQorCisv KiBBbGxvY2F0ZSBhIG5ldyBwYXJhbWV0ZXIgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmpl Y3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKQoreworCU9iakVsZW0JKnBhcmFtOworCisJcGFy YW0gPSBwYWxsb2MwKHNpemVvZihPYmpFbGVtKSk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOworCXBh cmFtLT5vYmp0eXBlID0gdHlwZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyogQWxsb2NhdGUg YSBuZXcgb2JqZWN0IHBhcmFtZXRlciAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X29iamVjdF9v YmplY3QoT2JqVHJlZSAqdmFsdWUpCit7CisJT2JqRWxlbQkqcGFyYW07CisKKwlwYXJhbSA9IG5l d19vYmplY3QoT2JqVHlwZU9iamVjdCwgTlVMTCk7CisJcGFyYW0tPnZhbHVlLm9iamVjdCA9IHZh bHVlOworCisJcmV0dXJuIHBhcmFtOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0 IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgor bmV3X29ianRyZWUoY2hhciAqZm10KQoreworCU9ialRyZWUJKnBhcmFtczsKKworCXBhcmFtcyA9 IHBhbGxvYzAoc2l6ZW9mKE9ialRyZWUpKTsKKwlwYXJhbXMtPnByZXNlbnQgPSB0cnVlOworCXNs aXN0X2luaXQoJnBhcmFtcy0+cGFyYW1zKTsKKworCWlmIChmbXQpCisJeworCQlwYXJhbXMtPmZt dGluZm8gPSBtYWtlU3RyaW5nSW5mbygpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHBhcmFt cy0+Zm10aW5mbywgZm10KTsKKwl9CisKKwlyZXR1cm4gcGFyYW1zOworfQorCisvKgorICogQSBo ZWxwZXIgcm91dGluZSB0byBzZXR1cCAle31EIGFuZCAle31PIGVsZW1lbnRzLgorICoKKyAqIEVs ZW1lbnRzICJzY2hlbWFuYW1lIiBhbmQgIm9iam5hbWUiIGFyZSBzZXQuICBJZiB0aGUgbmFtZXNw YWNlIE9JRAorICogY29ycmVzcG9uZHMgdG8gYSB0ZW1wIHNjaGVtYSwgdGhhdCdzIHNldCB0byAi cGdfdGVtcCIuCisgKgorICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gZWxlbWVu dCB0eXBlcyBpcyB3aGV0aGVyIHRoZSBvYmpuYW1lIHdpbGwKKyAqIGJlIHF1b3RlZCBhcyBhbiBp ZGVudGlmaWVyIG9yIG5vdCwgd2hpY2ggaXMgbm90IHNvbWV0aGluZyB0aGF0IHRoaXMgcm91dGlu ZQorICogY29uY2VybnMgaXRzZWxmIHdpdGg7IHRoYXQgd2lsbCBiZSB1cCB0byB0aGUgZXhwYW5k IGZ1bmN0aW9uLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUoT2lkIG5zcGlkLCBjaGFyICpuYW1lKQoreworCU9ialRyZWUJKnF1YWxpZmllZDsKKwljaGFy CSAgICpuYW1lc3BhY2U7CisKKwlpZiAoaXNBbnlUZW1wTmFtZXNwYWNlKG5zcGlkKSkKKwkJbmFt ZXNwYWNlID0gcHN0cmR1cCgicGdfdGVtcCIpOworCWVsc2UKKwkJbmFtZXNwYWNlID0gZ2V0X25h bWVzcGFjZV9uYW1lKG5zcGlkKTsKKworCXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX1ZBKE5VTEws IDIsCisJCQkJCQkJICAic2NoZW1hbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWVzcGFjZSwKKwkJ CQkJCQkgICJvYmpuYW1lIiwgT2JqVHlwZVN0cmluZywgcHN0cmR1cChuYW1lKSk7CisKKwlyZXR1 cm4gcXVhbGlmaWVkOworfQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAle31E IGFuZCAle31PIGVsZW1lbnRzLCB3aXRoIHRoZSBvYmplY3Qgc3BlY2lmaWVkCisgKiBieSBjbGFz c0lkL29iaklkLgorICoKKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKE9pZCBjbGFzc0lkLCBPaWQgb2JqZWN0SWQpCit7CisJT2JqVHJlZQkqcXVhbGlm aWVkOworCVJlbGF0aW9uCWNhdGFsb2c7CisJSGVhcFR1cGxlCWNhdG9iajsKKwlEYXR1bQkJb2Jq bnNwOworCURhdHVtCQlvYmpuYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1lOworCUF0dHJOdW1i ZXIJQW51bV9uYW1lc3BhY2U7CisJQXR0ck51bWJlcglBbnVtX29pZCA9IGdldF9vYmplY3RfYXR0 bnVtX29pZChjbGFzc0lkKTsKKwlib29sCQlpc251bGw7CisKKwljYXRhbG9nID0gdGFibGVfb3Bl bihjbGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJY2F0b2JqID0gZ2V0X2NhdGFsb2dfb2Jq ZWN0X2J5X29pZChjYXRhbG9nLCBBbnVtX29pZCwgb2JqZWN0SWQpOworCWlmICghY2F0b2JqKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb2JqZWN0ICV1IG9mIGNhdGFs b2cgXCIlc1wiIiwKKwkJCSBvYmplY3RJZCwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoY2F0YWxv ZykpOworCUFudW1fbmFtZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWUoY2xhc3NJZCk7CisJQW51 bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lc3BhY2UoY2xhc3NJZCk7CisKKwlv Ympuc3AgPSBoZWFwX2dldGF0dHIoY2F0b2JqLCBBbnVtX25hbWVzcGFjZSwgUmVsYXRpb25HZXRE ZXNjcihjYXRhbG9nKSwKKwkJCQkJCSAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhF UlJPUiwgInVuZXhwZWN0ZWQgTlVMTCBuYW1lc3BhY2UiKTsKKworCW9iam5hbWUgPSBoZWFwX2dl dGF0dHIoY2F0b2JqLCBBbnVtX25hbWUsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJ CQkgICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBO VUxMIG5hbWUiKTsKKworCXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShEYXR1 bUdldE9iamVjdElkKG9iam5zcCksCisJCQkJCQkJCQkJIE5hbWVTdHIoKkRhdHVtR2V0TmFtZShv YmpuYW1lKSkpOworCXRhYmxlX2Nsb3NlKGNhdGFsb2csIEFjY2Vzc1NoYXJlTG9jayk7CisKKwly ZXR1cm4gcXVhbGlmaWVkOworfQorCisvKgorICogSGVscGVyIHJvdXRpbmUgZm9yICV7fVIgb2Jq ZWN0cywgd2l0aCByb2xlIHNwZWNpZmllZCBieSBSb2xlU3BlYyBub2RlLgorICogU3BlY2lhbCB2 YWx1ZXMgc3VjaCBhcyBST0xFU1BFQ19DVVJSRU5UX1VTRVIgYXJlIGV4cGFuZGVkIHRvIHRoZWly IGZpbmFsCisgKiBuYW1lcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9y X3JvbGVzcGVjKFJvbGVTcGVjICpzcGVjKQoreworCU9ialRyZWUJICAgKnJvbGU7CisJY2hhcgkg ICAqcm9sZXR5cGU7CisKKwlpZiAoc3BlYy0+cm9sZXR5cGUgIT0gUk9MRVNQRUNfUFVCTElDKQor CQlyb2xldHlwZSA9IGdldF9yb2xlc3BlY19uYW1lKHNwZWMpOworCWVsc2UKKwkJcm9sZXR5cGUg PSBwc3RyZHVwKCIiKTsKKworCXJvbGUgPSBuZXdfb2JqdHJlZV9WQShOVUxMLDIsCisJCQkJCQkg ICJpc19wdWJsaWMiLCBPYmpUeXBlQm9vbCwgc3BlYy0+cm9sZXR5cGUgPT0gUk9MRVNQRUNfUFVC TElDLAorCQkJCQkJICAicm9sZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCByb2xldHlwZSk7CisJcmV0 dXJuIHJvbGU7Cit9CisKKy8qCisgKiBIZWxwZXIgcm91dGluZSBmb3IgJXt9UiBvYmplY3RzLCB3 aXRoIHJvbGUgc3BlY2lmaWVkIGJ5IE9JRC4gIChBQ0xfSURfUFVCTElDCisgKiBtZWFucyB0byB1 c2UgInB1YmxpYyIpLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3Jfcm9s ZV9pZChPaWQgcm9sZW9pZCkKK3sKKwlPYmpUcmVlICAgICpyb2xlOworCisJcm9sZSA9IG5ld19v Ymp0cmVlKCIiKTsKKworCWlmIChyb2xlb2lkICE9IEFDTF9JRF9QVUJMSUMpCisJeworCQlIZWFw VHVwbGUJcm9sdHVwOworCQljaGFyCSAgICpyb2xlbmFtZTsKKworCQlyb2x0dXAgPSBTZWFyY2hT eXNDYWNoZTEoQVVUSE9JRCwgT2JqZWN0SWRHZXREYXR1bShyb2xlb2lkKSk7CisJCWlmICghSGVh cFR1cGxlSXNWYWxpZChyb2x0dXApKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUo RVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkJIGVycm1zZygicm9sZSB3aXRoIE9JRCAl dSBkb2VzIG5vdCBleGlzdCIsIHJvbGVvaWQpKSk7CisKKwkJcm9sZW5hbWUgPSBOYW1lU3RyKCgo Rm9ybV9wZ19hdXRoaWQpIEdFVFNUUlVDVChyb2x0dXApKS0+cm9sbmFtZSk7CisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJvbGUsICIle3JvbGVuYW1lfUkiLCBwc3RyZHVwKHJvbGVuYW1lKSk7CisK KwkJUmVsZWFzZVN5c0NhY2hlKHJvbHR1cCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX3N0cmluZ19v YmplY3Qocm9sZSwgIiV7cm9sZW5hbWV9SSIsICJwdWJsaWMiKTsKKworCXJldHVybiByb2xlOwor fQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAle31UIGVsZW1lbnRzLgorICov CitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfdHlwZShPaWQgdHlwZUlkLCBpbnQz MiB0eXBtb2QpCit7CisJT2JqVHJlZQkqdHlwZVBhcmFtOworCU9pZAkJCXR5cG5zcGlkOworCWNo YXIJICAgKnR5cG5zcDsKKwljaGFyCSAgICp0eXBlbmFtZSA9IE5VTEw7CisJY2hhcgkgICAqdHlw bW9kc3RyOworCWJvb2wJCXR5cGFycmF5OworCisJZm9ybWF0X3R5cGVfZGV0YWlsZWQodHlwZUlk LCB0eXBtb2QsCisJCQkJCQkgJnR5cG5zcGlkLCAmdHlwZW5hbWUsICZ0eXBtb2RzdHIsICZ0eXBh cnJheSk7CisKKwlpZiAoT2lkSXNWYWxpZCh0eXBuc3BpZCkpCisJCXR5cG5zcCA9IGdldF9uYW1l c3BhY2VfbmFtZV9vcl90ZW1wKHR5cG5zcGlkKTsKKwllbHNlCisJCXR5cG5zcCA9IHBzdHJkdXAo IiIpOworCisJdHlwZVBhcmFtID0gbmV3X29ianRyZWVfVkEoTlVMTCwgNCwKKwkJCQkJCQkgICAi c2NoZW1hbmFtZSIsIE9ialR5cGVTdHJpbmcsIHR5cG5zcCwKKwkJCQkJCQkgICAidHlwZW5hbWUi LCBPYmpUeXBlU3RyaW5nLCB0eXBlbmFtZSwKKwkJCQkJCQkgICAidHlwbW9kIiwgT2JqVHlwZVN0 cmluZywgdHlwbW9kc3RyLAorCQkJCQkJCSAgICJ0eXBhcnJheSIsIE9ialR5cGVCb29sLCB0eXBh cnJheSk7CisKKwlyZXR1cm4gdHlwZVBhcmFtOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcg b2JqZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcyAtLSB2YXJhcmdzIHZlcnNpb24u CisgKgorICogVGhlICJmbXQiIGFyZ3VtZW50IGlzIHVzZWQgdG8gYXBwZW5kIGFzIGEgImZtdCIg ZWxlbWVudCBpbiB0aGUgb3V0cHV0IGJsb2IuCisgKiBudW1vYmpzIGluZGljYXRlcyB0aGUgbnVt YmVyIG9mIGV4dHJhIGVsZW1lbnRzIHRvIGFwcGVuZDsgZm9yIGVhY2ggb25lLCBhCisgKiBuYW1l IChzdHJpbmcpLCB0eXBlIChmcm9tIHRoZSBPYmpUeXBlIGVudW0pIGFuZCB2YWx1ZSBtdXN0IGJl IHN1cHBsaWVkLiAgVGhlCisgKiB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB0eXBlIGdpdmVuOyBmb3Ig aW5zdGFuY2UsIE9ialR5cGVJbnRlZ2VyIHJlcXVpcmVzIGFuCisgKiBpbnQ2NCwgT2JqVHlwZVN0 cmluZyByZXF1aXJlcyBhIGNoYXIgKiwgT2JqVHlwZUFycmF5IHJlcXVpcmVzIGEgbGlzdCAob2YK KyAqIE9iakVsZW0pLCBPYmpUeXBlT2JqZWN0IHJlcXVpcmVzIGFuIE9ialRyZWUsIGFuZCBzbyBv bi4gIEVhY2ggZWxlbWVudCB0eXBlICoKKyAqIG11c3QgbWF0Y2ggdGhlIGNvbnZlcnNpb24gc3Bl Y2lmaWVyIGdpdmVuIGluIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBkZXNjcmliZWQKKyAqIGluIGRk bF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kLCBxLnYuCisgKgorICogTm90ZSB3ZSBkb24ndCBoYXZl IHRoZSBsdXh1cnkgb2Ygc3ByaW50Zi1saWtlIGNvbXBpbGVyIHdhcm5pbmdzIGZvcgorICogbWFs Zm9ybWVkIGFyZ3VtZW50IGxpc3RzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJl ZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLikKK3sKKwlPYmpUcmVlCSAgICp0cmVlOwor CXZhX2xpc3QJCWFyZ3M7CisJaW50CQkJaTsKKworCS8qIFNldCB1cCB0aGUgdG9wbGV2ZWwgb2Jq ZWN0IGFuZCBpdHMgImZtdCIgKi8KKwl0cmVlID0gbmV3X29ianRyZWUoZm10KTsKKworCS8qIEFu ZCBwcm9jZXNzIHRoZSBnaXZlbiB2YXJhcmdzICovCisJdmFfc3RhcnQoYXJncywgbnVtb2Jqcyk7 CisJZm9yIChpID0gMDsgaSA8IG51bW9ianM7IGkrKykKKwl7CisJCWNoYXIJICAgKm5hbWU7CisJ CU9ialR5cGUJCXR5cGU7CisJCU9iakVsZW0JICAgKmVsZW07CisKKwkJbmFtZSA9IHZhX2FyZyhh cmdzLCBjaGFyICopOworCQl0eXBlID0gdmFfYXJnKGFyZ3MsIE9ialR5cGUpOworCQllbGVtID0g bmV3X29iamVjdCh0eXBlLCBOVUxMKTsKKworCQkvKgorCQkgKiBGb3IgYWxsIG90aGVyIHBhcmFt IHR5cGVzIHRoZXJlIG11c3QgYmUgYSB2YWx1ZSBpbiB0aGUgdmFyYXJncy4KKwkJICogRmV0Y2gg aXQgYW5kIGFkZCB0aGUgZnVsbHkgZm9ybWVkIHN1Ym9iamVjdCBpbnRvIHRoZSBtYWluIG9iamVj dC4KKwkJICovCisJCXN3aXRjaCAodHlwZSkKKwkJeworCQkJY2FzZSBPYmpUeXBlTnVsbDoKKwkJ CQkvKiBOdWxsIHBhcmFtcyBkb24ndCBoYXZlIGEgdmFsdWUgKG9idmlvdXNseSkgKi8KKwkJCQli cmVhazsKKwkJCWNhc2UgT2JqVHlwZUJvb2w6CisJCQkJZWxlbS0+dmFsdWUuYm9vbGVhbiA9IHZh X2FyZyhhcmdzLCBpbnQpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlU3RyaW5nOgorCQkJ CWVsZW0tPnZhbHVlLnN0cmluZyA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQkJCWJyZWFrOwor CQkJY2FzZSBPYmpUeXBlQXJyYXk6CisJCQkJZWxlbS0+dmFsdWUuYXJyYXkgPSB2YV9hcmcoYXJn cywgTGlzdCAqKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQkJZWxl bS0+dmFsdWUuaW50ZWdlciA9IHZhX2FyZyhhcmdzLCBpbnQ2NCk7CisJCQkJYnJlYWs7CisJCQlj YXNlIE9ialR5cGVGbG9hdDoKKwkJCQllbGVtLT52YWx1ZS5mbHQgPSB2YV9hcmcoYXJncywgZG91 YmxlKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZU9iamVjdDoKKwkJCQllbGVtLT52YWx1 ZS5vYmplY3QgPSB2YV9hcmcoYXJncywgT2JqVHJlZSAqKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1 bHQ6CisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgT2JqVHJlZSBlbGVtZW50IHR5cGUgJWQiLCB0 eXBlKTsKKwkJfQorCisJCWVsZW0tPm5hbWUgPSBuYW1lOworCQlhcHBlbmRfcHJlbWFkZV9vYmpl Y3QodHJlZSwgZWxlbSk7CisJfQorCisJdmFfZW5kKGFyZ3MpOworCXJldHVybiB0cmVlOworfQor CisvKiBBbGxvY2F0ZSBhIG5ldyBzdHJpbmcgb2JqZWN0ICovCitzdGF0aWMgT2JqRWxlbSAqCitu ZXdfc3RyaW5nX29iamVjdChjaGFyICp2YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKwor CUFzc2VydCh2YWx1ZSk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZVN0cmluZywgTlVM TCk7CisJcGFyYW0tPnZhbHVlLnN0cmluZyA9IHZhbHVlOworCisJcmV0dXJuIHBhcmFtOworfQor CisvKgorICogUHJvY2VzcyB0aGUgcHJlLWJ1aWx0IGZvcm1hdCBzdHJpbmcgZnJvbSB0aGUgT2Jq VHJlZSBpbnRvIHRoZSBvdXRwdXQgcGFyc2UKKyAqIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAor b2JqdHJlZV9mbXRfdG9fanNvbmJfZWxlbWVudChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBPYmpU cmVlICp0cmVlKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUJdmFsOworCisJaWYg KHRyZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVzaCB0aGUga2V5IGZp cnN0ICovCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0gImZt dCI7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtleS52YWwuc3RyaW5nLnZhbCk7CisJ cHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5KTsKKworCS8qIFRoZW4gcHJvY2Vz cyB0aGUgcHJlLWJ1aWx0IGZvcm1hdCBzdHJpbmcgKi8KKwl2YWwudHlwZSA9IGpidlN0cmluZzsK Kwl2YWwudmFsLnN0cmluZy5sZW4gPSB0cmVlLT5mbXRpbmZvLT5sZW47CisJdmFsLnZhbC5zdHJp bmcudmFsID0gdHJlZS0+Zm10aW5mby0+ZGF0YTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdK Ql9WQUxVRSwgJnZhbCk7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBKU09OQiByZXByZXNlbnRhdGlv biBmcm9tIGFuIE9ialRyZWUuCisgKi8KK3N0YXRpYyBKc29uYiAqCitvYmp0cmVlX3RvX2pzb25i KE9ialRyZWUgKnRyZWUpCit7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisKKwl2YWx1ZSA9IG9ianRy ZWVfdG9fanNvbmJfcmVjKHRyZWUsIE5VTEwpOworCXJldHVybiBKc29uYlZhbHVlVG9Kc29uYih2 YWx1ZSk7Cit9CisKKy8qCisgKiBIZWxwZXIgZm9yIG9ianRyZWVfdG9fanNvbmI6IHByb2Nlc3Mg YW4gaW5kaXZpZHVhbCBlbGVtZW50IGZyb20gYW4gb2JqZWN0IG9yCisgKiBhbiBhcnJheSBpbnRv IHRoZSBvdXRwdXQgcGFyc2Ugc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitvYmp0cmVlX3RvX2pz b25iX2VsZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2JqRWxlbSAqb2JqZWN0LAorCQkJ CQkJIEpzb25iSXRlcmF0b3JUb2tlbiBlbGVtX3Rva2VuKQoreworCUxpc3RDZWxsICAgKmNlbGw7 CisJSnNvbmJWYWx1ZQl2YWw7CisKKwlzd2l0Y2ggKG9iamVjdC0+b2JqdHlwZSkKKwl7CisJCWNh c2UgT2JqVHlwZU51bGw6CisJCQl2YWwudHlwZSA9IGpidk51bGw7CisJCQlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBl U3RyaW5nOgorCQkJdmFsLnR5cGUgPSBqYnZTdHJpbmc7CisJCQl2YWwudmFsLnN0cmluZy5sZW4g PSBzdHJsZW4ob2JqZWN0LT52YWx1ZS5zdHJpbmcpOworCQkJdmFsLnZhbC5zdHJpbmcudmFsID0g b2JqZWN0LT52YWx1ZS5zdHJpbmc7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9r ZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlSW50ZWdlcjoKKwkJCXZhbC50 eXBlID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQorCQkJCURh dHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGludDhfbnVtZXJpYywKKwkJCQkJCQkJ CQkJCQlvYmplY3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwg ZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVGbG9hdDoKKwkJ CXZhbC50eXBlID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQor CQkJCURhdHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGZsb2F0OF9udW1lcmljLAor CQkJCQkJCQkJCQkJCW9iamVjdC0+dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUJv b2w6CisJCQl2YWwudHlwZSA9IGpidkJvb2w7CisJCQl2YWwudmFsLmJvb2xlYW4gPSBvYmplY3Qt PnZhbHVlLmJvb2xlYW47CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2 YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlT2JqZWN0OgorCQkJLyogUmVjdXJzaXZl bHkgYWRkIHRoZSBvYmplY3QgaW50byB0aGUgZXhpc3RpbmcgcGFyc2Ugc3RhdGUgKi8KKwkJCW9i anRyZWVfdG9fanNvbmJfcmVjKG9iamVjdC0+dmFsdWUub2JqZWN0LCBzdGF0ZSk7CisJCQlicmVh azsKKworCQljYXNlIE9ialR5cGVBcnJheToKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0JFR0lOX0FSUkFZLCBOVUxMKTsKKwkJCWZvcmVhY2goY2VsbCwgb2JqZWN0LT52YWx1ZS5hcnJh eSkKKwkJCXsKKwkJCQlPYmpFbGVtICAgKmVsZW0gPSBsZmlyc3QoY2VsbCk7CisKKwkJCQlvYmp0 cmVlX3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIGVsZW0sIFdKQl9FTEVNKTsKKwkJCX0KKwkJCXB1 c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9BUlJBWSwgTlVMTCk7CisJCQlicmVhazsKKwor CQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBvYmplY3QgdHlwZSAlZCIs IG9iamVjdC0+b2JqdHlwZSk7CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBSZWN1cnNpdmUg aGVscGVyIGZvciBvYmp0cmVlX3RvX2pzb25iLgorICovCitzdGF0aWMgSnNvbmJWYWx1ZSAqCitv Ymp0cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRl KQoreworCXNsaXN0X2l0ZXIJaXRlcjsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JF R0lOX09CSkVDVCwgTlVMTCk7CisKKwlvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KHN0YXRl LCB0cmVlKTsKKworCXNsaXN0X2ZvcmVhY2goaXRlciwgJnRyZWUtPnBhcmFtcykKKwl7CisJCU9i akVsZW0JKm9iamVjdCA9IHNsaXN0X2NvbnRhaW5lcihPYmpFbGVtLCBub2RlLCBpdGVyLmN1cik7 CisJCUpzb25iVmFsdWUJa2V5OworCisJCS8qIFB1c2ggdGhlIGtleSBmaXJzdCAqLworCQlrZXku dHlwZSA9IGpidlN0cmluZzsKKwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKG9iamVjdC0+ bmFtZSk7CisJCWtleS52YWwuc3RyaW5nLnZhbCA9IG9iamVjdC0+bmFtZTsKKwkJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5KTsKKworCQkvKiBUaGVuIHByb2Nlc3MgdGhlIHZh bHVlIGFjY29yZGluZyB0byBpdHMgdHlwZSAqLworCQlvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQo c3RhdGUsIG9iamVjdCwgV0pCX1ZBTFVFKTsKKwl9CisKKwlyZXR1cm4gcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZv ciBDUkVBVEUgVEFCTEUvQ1JFQVRFIERPTUFJTiBkZXBhcnNpbmcuCisgKgorICogR2l2ZW4gYSB0 YWJsZSBPSUQgb3IgZG9tYWluIE9JRCwgb2J0YWluIGl0cyBjb25zdHJhaW50cyBhbmQgYXBwZW5k IHRoZW0gdG8KKyAqIHRoZSBnaXZlbiBlbGVtZW50cyBsaXN0LiAgVGhlIHVwZGF0ZWQgbGlzdCBp cyByZXR1cm5lZC4KKyAqCisgKiBUaGlzIHdvcmtzIGZvciB0eXBlZCB0YWJsZXMsIHJlZ3VsYXIg dGFibGVzLCBhbmQgZG9tYWlucy4KKyAqCisgKiBOb3RlIHRoYXQgQ09OU1RSQUlOVF9GT1JFSUdO IGNvbnN0cmFpbnRzIGFyZSBhbHdheXMgaWdub3JlZC4KKyAqLworc3RhdGljIExpc3QgKgorb2J0 YWluQ29uc3RyYWludHMoTGlzdCAqZWxlbWVudHMsIE9pZCByZWxhdGlvbklkLCBPaWQgZG9tYWlu SWQpCit7CisJUmVsYXRpb24JY29uUmVsOworCVNjYW5LZXlEYXRhIGtleTsKKwlTeXNTY2FuRGVz YyBzY2FuOworCUhlYXBUdXBsZQl0dXBsZTsKKwlPYmpUcmVlCSpjb25zdHI7CisKKwkvKiBPbmx5 IG9uZSBtYXkgYmUgdmFsaWQgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChyZWxhdGlvbklkKSBeIE9p ZElzVmFsaWQoZG9tYWluSWQpKTsKKworCS8qCisJICogU2NhbiBwZ19jb25zdHJhaW50IHRvIGZl dGNoIGFsbCBjb25zdHJhaW50cyBsaW5rZWQgdG8gdGhlIGdpdmVuCisJICogcmVsYXRpb24uCisJ ICovCisJY29uUmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwlpZiAoT2lkSXNWYWxpZChyZWxhdGlvbklkKSkKKwl7CisJCVNjYW5LZXlJbml0 KCZrZXksCisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQkJQlRFcXVhbFN0 cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKHJlbGF0aW9uSWQp KTsKKwkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5 cGlkTmFtZUluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisJfQorCWVs c2UKKwl7CisJCUFzc2VydChPaWRJc1ZhbGlkKGRvbWFpbklkKSk7CisJCVNjYW5LZXlJbml0KCZr ZXksCisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb250eXBpZCwKKwkJCQkJQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKGRvbWFpbklkKSk7CisJ CXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50VHlwaWRJbmRleElk LAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKworCS8qCisJICogRm9yIGVh Y2ggY29uc3RyYWludCwgYWRkIGEgbm9kZSB0byB0aGUgbGlzdCBvZiB0YWJsZSBlbGVtZW50cy4g IEluCisJICogdGhlc2Ugbm9kZXMgd2UgaW5jbHVkZSBub3Qgb25seSB0aGUgcHJpbnRhYmxlIGlu Zm9ybWF0aW9uICgiZm10IiksIGJ1dAorCSAqIGFsc28gc2VwYXJhdGUgYXR0cmlidXRlcyB0byBp bmRpY2F0ZSB0aGUgdHlwZSBvZiBjb25zdHJhaW50LCBmb3IKKwkgKiBhdXRvbWF0aWMgcHJvY2Vz c2luZy4KKwkgKi8KKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dl dG5leHQoc2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbnN0ckZvcm07CisJCWNo YXIJICAgKmNvbnR5cGU7CisKKwkJY29uc3RyRm9ybSA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdF VFNUUlVDVCh0dXBsZSk7CisKKwkJc3dpdGNoIChjb25zdHJGb3JtLT5jb250eXBlKQorCQl7CisJ CQljYXNlIENPTlNUUkFJTlRfQ0hFQ0s6CisJCQkJY29udHlwZSA9ICJjaGVjayI7CisJCQkJYnJl YWs7CisJCQljYXNlIENPTlNUUkFJTlRfRk9SRUlHTjoKKwkJCQljb250aW51ZTsJLyogbm90IGhl cmUgKi8KKwkJCWNhc2UgQ09OU1RSQUlOVF9QUklNQVJZOgorCQkJCWNvbnR5cGUgPSAicHJpbWFy eSBrZXkiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1VOSVFVRToKKwkJCQljb250 eXBlID0gInVuaXF1ZSI7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfVFJJR0dFUjoK KwkJCQljb250eXBlID0gInRyaWdnZXIiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5U X0VYQ0xVU0lPTjoKKwkJCQljb250eXBlID0gImV4Y2x1c2lvbiI7CisJCQkJYnJlYWs7CisJCQlk ZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgY29uc3RyYWludCB0eXBlIik7 CisJCX0KKworCQkvKgorCQkgKiAidHlwZSIgYW5kICJjb250eXBlIiBhcmUgbm90IHBhcnQgb2Yg dGhlIHByaW50YWJsZSBvdXRwdXQsIGJ1dCBhcmUKKwkJICogdXNlZnVsIHRvIHByb2dyYW1tYXRp Y2FsbHkgZGlzdGluZ3Vpc2ggdGhlc2UgZnJvbSBjb2x1bW5zIGFuZCBhbW9uZworCQkgKiBkaWZm ZXJlbnQgY29uc3RyYWludCB0eXBlcy4KKwkJICoKKwkJICogWFhYIGl0IG1pZ2h0IGJlIHVzZWZ1 bCB0byBhbHNvIGxpc3QgdGhlIGNvbHVtbiBuYW1lcyBpbiBhIFBLLCBldGMuCisJCSAqLworCQlj b25zdHIgPSBuZXdfb2JqdHJlZV9WQSgiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259 cyIsCisJCQkJCQkJCTQsCisJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbnN0cmFp bnQiLAorCQkJCQkJCQkiY29udHlwZSIsIE9ialR5cGVTdHJpbmcsIGNvbnR5cGUsCisJCQkJCQkJ CSJuYW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihjb25zdHJGb3JtLT5jb25uYW1lKSwKKwkJ CQkJCQkJImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgcGdfZ2V0X2NvbnN0 cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyRm9ybS0+b2lkKSk7CisJCWVsZW1lbnRzID0g bGFwcGVuZChlbGVtZW50cywgbmV3X29iamVjdF9vYmplY3QoY29uc3RyKSk7CisJfQorCisJc3lz dGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwlyZXR1cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBSZXR1cm4gYW4gaW5kZXggZGVm aW5pdGlvbiwgc3BsaXQgaW4gc2V2ZXJhbCBwaWVjZXMuCisgKgorICogQSBsYXJnZSBhbW91bnQg b2YgY29kZSBpcyBkdXBsaWNhdGVkIGZyb20gIHBnX2dldF9pbmRleGRlZl93b3JrZXIsIGJ1dAor ICogY29udHJvbCBmbG93IGlzIGRpZmZlcmVudCBlbm91Z2ggdGhhdCBpdCBkb2Vzbid0IHNlZW0g d29ydGgga2VlcGluZyB0aGVtCisgKiB0b2dldGhlci4KKyAqLworc3RhdGljIHZvaWQKK3BnX2dl dF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJCQkJCSBjaGFyICoqaW5kZXhf YW0sCisJCQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkgY2hhciAqKnJlbG9wdGlvbnMs CisJCQkJCQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJCQkgY2hhciAqKndoZXJlQ2xhdXNlKQor eworCUhlYXBUdXBsZQlodF9pZHg7CisJSGVhcFR1cGxlCWh0X2lkeHJlbDsKKwlIZWFwVHVwbGUJ aHRfYW07CisJRm9ybV9wZ19pbmRleCBpZHhyZWM7CisJRm9ybV9wZ19jbGFzcyBpZHhyZWxyZWM7 CisJRm9ybV9wZ19hbQlhbXJlYzsKKwlJbmRleEFtUm91dGluZSAqYW1yb3V0aW5lOworCUxpc3QJ ICAgKmluZGV4cHJzOworCUxpc3RDZWxsICAgKmluZGV4cHJfaXRlbTsKKwlMaXN0CSAgICpjb250 ZXh0OworCU9pZAkJCWluZHJlbGlkOworCWludAkJCWtleW5vOworCURhdHVtCQlpbmRjb2xsRGF0 dW07CisJRGF0dW0JCWluZGNsYXNzRGF0dW07CisJRGF0dW0JCWluZG9wdGlvbkRhdHVtOworCWJv b2wJCWlzbnVsbDsKKwlvaWR2ZWN0b3IgICppbmRjb2xsYXRpb247CisJb2lkdmVjdG9yICAqaW5k Y2xhc3M7CisJaW50MnZlY3RvciAqaW5kb3B0aW9uOworCVN0cmluZ0luZm9EYXRhIGRlZmluaXRp b25CdWY7CisKKwkvKgorCSAqIEZldGNoIHRoZSBwZ19pbmRleCB0dXBsZSBieSB0aGUgT2lkIG9m IHRoZSBpbmRleAorCSAqLworCWh0X2lkeCA9IFNlYXJjaFN5c0NhY2hlMShJTkRFWFJFTElELCBP YmplY3RJZEdldERhdHVtKGluZGV4cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRf aWR4KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGluZGV4ICV1Iiwg aW5kZXhyZWxpZCk7CisJaWR4cmVjID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChodF9pZHgp OworCisJaW5kcmVsaWQgPSBpZHhyZWMtPmluZHJlbGlkOworCUFzc2VydChpbmRleHJlbGlkID09 IGlkeHJlYy0+aW5kZXhyZWxpZCk7CisKKwkvKiBNdXN0IGdldCBpbmRjb2xsYXRpb24sIGluZGNs YXNzLCBhbmQgaW5kb3B0aW9uIHRoZSBoYXJkIHdheSAqLworCWluZGNvbGxEYXR1bSA9IFN5c0Nh Y2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCSAgIEFudW1fcGdfaW5kZXhf aW5kY29sbGF0aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY29sbGF0aW9u ID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY29sbERhdHVtKTsKKworCWluZGNs YXNzRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJ QW51bV9wZ19pbmRleF9pbmRjbGFzcywgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWlu ZGNsYXNzID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY2xhc3NEYXR1bSk7CisK KwlpbmRvcHRpb25EYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJ CQkJCQkJCQkgQW51bV9wZ19pbmRleF9pbmRvcHRpb24sICZpc251bGwpOworCUFzc2VydCghaXNu dWxsKTsKKwlpbmRvcHRpb24gPSAoaW50MnZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kb3B0 aW9uRGF0dW0pOworCisJLyoKKwkgKiBGZXRjaCB0aGUgcGdfY2xhc3MgdHVwbGUgb2YgdGhlIGlu ZGV4IHJlbGF0aW9uCisJICovCisJaHRfaWR4cmVsID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwg T2JqZWN0SWRHZXREYXR1bShpbmRleHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0 X2lkeHJlbCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlv biAldSIsIGluZGV4cmVsaWQpOworCWlkeHJlbHJlYyA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJV Q1QoaHRfaWR4cmVsKTsKKworCS8qCisJICogRmV0Y2ggdGhlIHBnX2FtIHR1cGxlIG9mIHRoZSBp bmRleCcgYWNjZXNzIG1ldGhvZAorCSAqLworCWh0X2FtID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lE LCBPYmplY3RJZEdldERhdHVtKGlkeHJlbHJlYy0+cmVsYW0pKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQoaHRfYW0pKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNj ZXNzIG1ldGhvZCAldSIsCisJCQkgaWR4cmVscmVjLT5yZWxhbSk7CisJYW1yZWMgPSAoRm9ybV9w Z19hbSkgR0VUU1RSVUNUKGh0X2FtKTsKKworCS8qCisJICogR2V0IHRoZSBpbmRleCBleHByZXNz aW9ucywgaWYgYW55LiAgKE5PVEU6IHdlIGRvIG5vdCB1c2UgdGhlIHJlbGNhY2hlCisJICogdmVy c2lvbnMgb2YgdGhlIGV4cHJlc3Npb25zIGFuZCBwcmVkaWNhdGUsIGJlY2F1c2Ugd2Ugd2FudCB0 byBkaXNwbGF5CisJICogbm9uLWNvbnN0LWZvbGRlZCBleHByZXNzaW9ucy4pCisJICovCisJaWYg KCFoZWFwX2F0dGlzbnVsbChodF9pZHgsIEFudW1fcGdfaW5kZXhfaW5kZXhwcnMsIE5VTEwpKQor CXsKKwkJRGF0dW0JCWV4cHJzRGF0dW07CisJCWJvb2wJCWlzbnVsbDsKKwkJY2hhcgkgICAqZXhw cnNTdHJpbmc7CisKKwkJZXhwcnNEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBo dF9pZHgsCisJCQkJCQkJCQkgQW51bV9wZ19pbmRleF9pbmRleHBycywgJmlzbnVsbCk7CisJCUFz c2VydCghaXNudWxsKTsKKwkJZXhwcnNTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHJz RGF0dW0pOworCQlpbmRleHBycyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShleHByc1N0cmluZyk7 CisJCXBmcmVlKGV4cHJzU3RyaW5nKTsKKwl9CisJZWxzZQorCQlpbmRleHBycyA9IE5JTDsKKwor CWluZGV4cHJfaXRlbSA9IGxpc3RfaGVhZChpbmRleHBycyk7CisKKwljb250ZXh0ID0gZGVwYXJz ZV9jb250ZXh0X2ZvcihnZXRfcmVsX25hbWUoaW5kcmVsaWQpLCBpbmRyZWxpZCk7CisKKwlpbml0 U3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1Zik7CisKKwkvKiBPdXRwdXQgaW5kZXggQU0gKi8KKwkq aW5kZXhfYW0gPSBwc3RyZHVwKHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhbXJlYy0+YW1uYW1l KSkpOworCisJLyogRmV0Y2ggdGhlIGluZGV4IEFNJ3MgQVBJIHN0cnVjdCAqLworCWFtcm91dGlu ZSA9IEdldEluZGV4QW1Sb3V0aW5lKGFtcmVjLT5hbWhhbmRsZXIpOworCisJLyoKKwkgKiBPdXRw dXQgaW5kZXggZGVmaW5pdGlvbi4gIE5vdGUgdGhlIG91dGVyIHBhcmVucyBtdXN0IGJlIHN1cHBs aWVkIGJ5CisJICogY2FsbGVyLgorCSAqLworCWZvciAoa2V5bm8gPSAwOyBrZXlubyA8IGlkeHJl Yy0+aW5kbmF0dHM7IGtleW5vKyspCisJeworCQlBdHRyTnVtYmVyCWF0dG51bSA9IGlkeHJlYy0+ aW5ka2V5LnZhbHVlc1trZXlub107CisJCWludDE2CQlvcHQgPSBpbmRvcHRpb24tPnZhbHVlc1tr ZXlub107CisJCU9pZAkJCWtleWNvbHR5cGU7CisJCU9pZAkJCWtleWNvbGNvbGxhdGlvbjsKKwkJ T2lkCQkJaW5kY29sbDsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVm LCBrZXlubyA9PSAwID8gIiIgOiAiLCAiKTsKKworCQlpZiAoYXR0bnVtICE9IDApCisJCXsKKwkJ CS8qIFNpbXBsZSBpbmRleCBjb2x1bW4gKi8KKwkJCWNoYXIJICAgKmF0dG5hbWU7CisJCQlpbnQz MgkJa2V5Y29sdHlwbW9kOworCisJCQlhdHRuYW1lID0gZ2V0X2F0dG5hbWUoaW5kcmVsaWQsIGF0 dG51bSwgZmFsc2UpOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1Ziwg cXVvdGVfaWRlbnRpZmllcihhdHRuYW1lKSk7CisJCQlnZXRfYXR0dHlwZXR5cG1vZGNvbGwoaW5k cmVsaWQsIGF0dG51bSwKKwkJCQkJCQkJICAma2V5Y29sdHlwZSwgJmtleWNvbHR5cG1vZCwKKwkJ CQkJCQkJICAma2V5Y29sY29sbGF0aW9uKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIEV4cHJl c3Npb25hbCBpbmRleCAqLworCQkJTm9kZQkgICAqaW5kZXhrZXk7CisJCQljaGFyCSAgICpzdHI7 CisKKwkJCWlmIChpbmRleHByX2l0ZW0gPT0gTlVMTCkKKwkJCQllbG9nKEVSUk9SLCAidG9vIGZl dyBlbnRyaWVzIGluIGluZGV4cHJzIGxpc3QiKTsKKwkJCWluZGV4a2V5ID0gKE5vZGUgKikgbGZp cnN0KGluZGV4cHJfaXRlbSk7CisJCQlpbmRleHByX2l0ZW0gPSBsbmV4dChpbmRleHBycywgaW5k ZXhwcl9pdGVtKTsKKwkJCS8qIERlcGFyc2UgKi8KKwkJCXN0ciA9IGRlcGFyc2VfZXhwcmVzc2lv bihpbmRleGtleSwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKworCQkJLyogTmVlZCBwYXJlbnMg aWYgaXQncyBub3QgYSBiYXJlIGZ1bmN0aW9uIGNhbGwgKi8KKwkJCWlmIChpbmRleGtleSAmJiBJ c0EoaW5kZXhrZXksIEZ1bmNFeHByKSAmJgorCQkJCSgoRnVuY0V4cHIgKikgaW5kZXhrZXkpLT5m dW5jZm9ybWF0ID09IENPRVJDRV9FWFBMSUNJVF9DQUxMKQorCQkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmRlZmluaXRpb25CdWYsIHN0cik7CisJCQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5m bygmZGVmaW5pdGlvbkJ1ZiwgIiglcykiLCBzdHIpOworCisJCQlrZXljb2x0eXBlID0gZXhwclR5 cGUoaW5kZXhrZXkpOworCQkJa2V5Y29sY29sbGF0aW9uID0gZXhwckNvbGxhdGlvbihpbmRleGtl eSk7CisJCX0KKworCQkvKiBBZGQgY29sbGF0aW9uLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJaW5k Y29sbCA9IGluZGNvbGxhdGlvbi0+dmFsdWVzW2tleW5vXTsKKwkJaWYgKE9pZElzVmFsaWQoaW5k Y29sbCkpCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZkZWZpbml0aW9uQnVmLCAiIENPTExBVEUgJXMi LAorCQkJCQkJCSBnZW5lcmF0ZV9jb2xsYXRpb25fbmFtZSgoaW5kY29sbCkpKTsKKworCQkvKiBB ZGQgdGhlIG9wZXJhdG9yIGNsYXNzIG5hbWUsIGV2ZW4gaWYgZGVmYXVsdCAqLworCQlnZXRfb3Bj bGFzc19uYW1lKGluZGNsYXNzLT52YWx1ZXNba2V5bm9dLCBJbnZhbGlkT2lkLCAmZGVmaW5pdGlv bkJ1Zik7CisKKwkJLyogQWRkIG9wdGlvbnMgaWYgcmVsZXZhbnQgKi8KKwkJaWYgKGFtcm91dGlu ZS0+YW1jYW5vcmRlcikKKwkJeworCQkJLyogSWYgaXQgc3VwcG9ydHMgc29ydCBvcmRlcmluZywg cmVwb3J0IERFU0MgYW5kIE5VTExTIG9wdHMgKi8KKwkJCWlmIChvcHQgJiBJTkRPUFRJT05fREVT QykKKwkJCXsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIERF U0MiKTsKKwkJCQkvKiBOVUxMUyBGSVJTVCBpcyB0aGUgZGVmYXVsdCBpbiB0aGlzIGNhc2UgKi8K KwkJCQlpZiAoIShvcHQgJiBJTkRPUFRJT05fTlVMTFNfRklSU1QpKQorCQkJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIE5VTExTIExBU1QiKTsKKwkJCX0KKwkJCWVs c2UKKwkJCXsKKwkJCQlpZiAob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKQorCQkJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIE5VTExTIEZJUlNUIik7CisJCQl9 CisJCX0KKworCQkvKiBYWFggZXhjbHVkZU9wcyB0aGluZ3kgd2FzIGhlcmU7IGRvIHdlIG5lZWQg YW55dGhpbmc/ICovCisJfQorCSpkZWZpbml0aW9uID0gZGVmaW5pdGlvbkJ1Zi5kYXRhOworCisJ LyogT3V0cHV0IHJlbG9wdGlvbnMgKi8KKwkqcmVsb3B0aW9ucyA9IGZsYXR0ZW5fcmVsb3B0aW9u cyhpbmRleHJlbGlkKTsKKworCS8qIE91dHB1dCB0YWJsZXNwYWNlICovCisJeworCQlPaWQJCQl0 YmxzcGM7CisKKwkJdGJsc3BjID0gZ2V0X3JlbF90YWJsZXNwYWNlKGluZGV4cmVsaWQpOworCQlp ZiAoT2lkSXNWYWxpZCh0YmxzcGMpKQorCQkJKnRhYmxlc3BhY2UgPSBwc3RyZHVwKHF1b3RlX2lk ZW50aWZpZXIoZ2V0X3RhYmxlc3BhY2VfbmFtZSh0YmxzcGMpKSk7CisJCWVsc2UKKwkJCSp0YWJs ZXNwYWNlID0gTlVMTDsKKwl9CisKKwkvKiBSZXBvcnQgaW5kZXggcHJlZGljYXRlLCBpZiBhbnkg Ki8KKwlpZiAoIWhlYXBfYXR0aXNudWxsKGh0X2lkeCwgQW51bV9wZ19pbmRleF9pbmRwcmVkLCBO VUxMKSkKKwl7CisJCU5vZGUJICAgKm5vZGU7CisJCURhdHVtCQlwcmVkRGF0dW07CisJCWJvb2wJ CWlzbnVsbDsKKwkJY2hhcgkgICAqcHJlZFN0cmluZzsKKworCQkvKiBDb252ZXJ0IHRleHQgc3Ry aW5nIHRvIG5vZGUgdHJlZSAqLworCQlwcmVkRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhS RUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJQW51bV9wZ19pbmRleF9pbmRwcmVkLCAmaXNudWxsKTsK KwkJQXNzZXJ0KCFpc251bGwpOworCQlwcmVkU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmluZyhw cmVkRGF0dW0pOworCQlub2RlID0gKE5vZGUgKikgc3RyaW5nVG9Ob2RlKHByZWRTdHJpbmcpOwor CQlwZnJlZShwcmVkU3RyaW5nKTsKKworCQkvKiBEZXBhcnNlICovCisJCSp3aGVyZUNsYXVzZSA9 CisJCQlkZXBhcnNlX2V4cHJlc3Npb24obm9kZSwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwl9 CisJZWxzZQorCQkqd2hlcmVDbGF1c2UgPSBOVUxMOworCisJLyogQ2xlYW4gdXAgKi8KKwlSZWxl YXNlU3lzQ2FjaGUoaHRfaWR4KTsKKwlSZWxlYXNlU3lzQ2FjaGUoaHRfaWR4cmVsKTsKKwlSZWxl YXNlU3lzQ2FjaGUoaHRfYW0pOworfQorCisvKgorICogT2J0YWluIHRoZSBkZXBhcnNlZCBkZWZh dWx0IHZhbHVlIGZvciB0aGUgZ2l2ZW4gY29sdW1uIG9mIHRoZSBnaXZlbiB0YWJsZS4KKyAqCisg KiBDYWxsZXIgbXVzdCBoYXZlIHNldCBhIGNvcnJlY3QgZGVwYXJzZSBjb250ZXh0LgorICovCitz dGF0aWMgY2hhciAqCitSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQoUmVsYXRpb24gcmVsLCBBdHRy TnVtYmVyIGF0dG5vLCBMaXN0ICpkcGNvbnRleHQsCisJCQkJCQkgTGlzdCAqKmV4cHJzKQorewor CU5vZGUgKmRlZnZhbDsKKwljaGFyICpkZWZzdHI7CisKKwlkZWZ2YWwgPSBidWlsZF9jb2x1bW5f ZGVmYXVsdChyZWwsIGF0dG5vKTsKKwlkZWZzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFs LCBkcGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkvKiBDb2xsZWN0IHRoZSBleHByZXNzaW9u IGZvciBsYXRlciByZXBsaWNhdGlvbiBzYWZldHkgY2hlY2tzICovCisJaWYgKGV4cHJzKQorCQkq ZXhwcnMgPSBsYXBwZW5kKCpleHBycywgZGVmdmFsKTsKKworCXJldHVybiBkZWZzdHI7Cit9CisK Ky8qCisgKiBPYnRhaW4gdGhlIGRlcGFyc2VkIHBhcnRpdGlvbiBib3VuZCBleHByZXNzaW9uIGZv ciB0aGUgZ2l2ZW4gdGFibGUuCisgKi8KK3N0YXRpYyBjaGFyICoKK1JlbGF0aW9uR2V0UGFydGl0 aW9uQm91bmQoT2lkIHJlbGlkKQoreworCURhdHVtCQlkZXBhcnNlZDsKKwlEYXR1bQkJYm91bmRE YXR1bTsKKwlib29sCQlpc251bGw7CisJSGVhcFR1cGxlCXR1cGxlOworCisJdHVwbGUgPSBTZWFy Y2hTeXNDYWNoZTEoUkVMT0lELCByZWxpZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxl KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJlbGF0aW9uICV1IiwK KwkJCSByZWxpZCk7CisKKwlib3VuZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFJFTE9JRCwgdHVw bGUsCisJCQkJCQkJCSBBbnVtX3BnX2NsYXNzX3JlbHBhcnRib3VuZCwKKwkJCQkJCQkJICZpc251 bGwpOworCisJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAorCQkJ CQkJCQkgICBDU3RyaW5nR2V0VGV4dERhdHVtKFRleHREYXR1bUdldENTdHJpbmcoYm91bmREYXR1 bSkpLAorCQkJCQkJCQkgICByZWxpZCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCisJ cmV0dXJuIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpOworfQorCisvKgorICogUmV0dXJu IHRoZSBnaXZlbiBvYmplY3QgdHlwZSBhcyBhIHN0cmluZy4KKyAqLworc3RhdGljIGNvbnN0IGNo YXIgKgorc3RyaW5naWZ5X29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlKQoreworCXN3aXRjaCAo b2JqdHlwZSkKKwl7CisJCWNhc2UgT0JKRUNUX0FHR1JFR0FURToKKwkJCXJldHVybiAiQUdHUkVH QVRFIjsKKwkJY2FzZSBPQkpFQ1RfQ0FTVDoKKwkJCXJldHVybiAiQ0FTVCI7CisJCWNhc2UgT0JK RUNUX0NPTFVNTjoKKwkJCXJldHVybiAiQ09MVU1OIjsKKwkJY2FzZSBPQkpFQ1RfQ09MTEFUSU9O OgorCQkJcmV0dXJuICJDT0xMQVRJT04iOworCQljYXNlIE9CSkVDVF9DT05WRVJTSU9OOgorCQkJ cmV0dXJuICJDT05WRVJTSU9OIjsKKwkJY2FzZSBPQkpFQ1RfREFUQUJBU0U6CisJCQlyZXR1cm4g IkRBVEFCQVNFIjsKKwkJY2FzZSBPQkpFQ1RfRE9NQUlOOgorCQkJcmV0dXJuICJET01BSU4iOwor CQljYXNlIE9CSkVDVF9FVkVOVF9UUklHR0VSOgorCQkJcmV0dXJuICJFVkVOVCBUUklHR0VSIjsK KwkJY2FzZSBPQkpFQ1RfRVhURU5TSU9OOgorCQkJcmV0dXJuICJFWFRFTlNJT04iOworCQljYXNl IE9CSkVDVF9GRFc6CisJCQlyZXR1cm4gIkZPUkVJR04gREFUQSBXUkFQUEVSIjsKKwkJY2FzZSBP QkpFQ1RfRk9SRUlHTl9TRVJWRVI6CisJCQlyZXR1cm4gIlNFUlZFUiI7CisJCWNhc2UgT0JKRUNU X0ZPUkVJR05fVEFCTEU6CisJCQlyZXR1cm4gIkZPUkVJR04gVEFCTEUiOworCQljYXNlIE9CSkVD VF9GVU5DVElPTjoKKwkJCXJldHVybiAiRlVOQ1RJT04iOworCQljYXNlIE9CSkVDVF9JTkRFWDoK KwkJCXJldHVybiAiSU5ERVgiOworCQljYXNlIE9CSkVDVF9MQU5HVUFHRToKKwkJCXJldHVybiAi TEFOR1VBR0UiOworCQljYXNlIE9CSkVDVF9MQVJHRU9CSkVDVDoKKwkJCXJldHVybiAiTEFSR0Ug T0JKRUNUIjsKKwkJY2FzZSBPQkpFQ1RfTUFUVklFVzoKKwkJCXJldHVybiAiTUFURVJJQUxJWkVE IFZJRVciOworCQljYXNlIE9CSkVDVF9PUENMQVNTOgorCQkJcmV0dXJuICJPUEVSQVRPUiBDTEFT UyI7CisJCWNhc2UgT0JKRUNUX09QRVJBVE9SOgorCQkJcmV0dXJuICJPUEVSQVRPUiI7CisJCWNh c2UgT0JKRUNUX09QRkFNSUxZOgorCQkJcmV0dXJuICJPUEVSQVRPUiBGQU1JTFkiOworCQljYXNl IE9CSkVDVF9QT0xJQ1k6CisJCQlyZXR1cm4gIlBPTElDWSI7CisJCWNhc2UgT0JKRUNUX1JPTEU6 CisJCQlyZXR1cm4gIlJPTEUiOworCQljYXNlIE9CSkVDVF9SVUxFOgorCQkJcmV0dXJuICJSVUxF IjsKKwkJY2FzZSBPQkpFQ1RfU0NIRU1BOgorCQkJcmV0dXJuICJTQ0hFTUEiOworCQljYXNlIE9C SkVDVF9TRVFVRU5DRToKKwkJCXJldHVybiAiU0VRVUVOQ0UiOworCQljYXNlIE9CSkVDVF9UQUJM RToKKwkJCXJldHVybiAiVEFCTEUiOworCQljYXNlIE9CSkVDVF9UQUJMRVNQQUNFOgorCQkJcmV0 dXJuICJUQUJMRVNQQUNFIjsKKwkJY2FzZSBPQkpFQ1RfVFJJR0dFUjoKKwkJCXJldHVybiAiVFJJ R0dFUiI7CisJCWNhc2UgT0JKRUNUX1RTQ09ORklHVVJBVElPTjoKKwkJCXJldHVybiAiVEVYVCBT RUFSQ0ggQ09ORklHVVJBVElPTiI7CisJCS8qCisJCWNhc2UgT0JKRUNUX1RTQ09ORklHX01BUFBJ Tkc6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gTUFQUElORyI7CisJCSov CisJCWNhc2UgT0JKRUNUX1RTRElDVElPTkFSWToKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggRElD VElPTkFSWSI7CisJCWNhc2UgT0JKRUNUX1RTUEFSU0VSOgorCQkJcmV0dXJuICJURVhUIFNFQVJD SCBQQVJTRVIiOworCQljYXNlIE9CSkVDVF9UU1RFTVBMQVRFOgorCQkJcmV0dXJuICJURVhUIFNF QVJDSCBURU1QTEFURSI7CisJCWNhc2UgT0JKRUNUX1RZUEU6CisJCQlyZXR1cm4gIlRZUEUiOwor CQljYXNlIE9CSkVDVF9VU0VSX01BUFBJTkc6CisJCQlyZXR1cm4gIlVTRVIgTUFQUElORyI7CisJ CWNhc2UgT0JKRUNUX1ZJRVc6CisJCQlyZXR1cm4gIlZJRVciOworCisJCWRlZmF1bHQ6CisJCQll bG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgJWQiLCBvYmp0eXBlKTsKKwl9Cit9 CisKKy8qCisgKiBHaXZlbiBhIENvbGxlY3RlZENvbW1hbmQsIHJldHVybiBhIEpTT04gcmVwcmVz ZW50YXRpb24gb2YgaXQuCisgKgorICogVGhlIGNvbW1hbmQgaXMgZXhwYW5kZWQgZnVsbHksIHNv IHRoYXQgdGhlcmUgYXJlIG5vIGFtYmlndWl0aWVzIGV2ZW4gaW4gdGhlCisgKiBmYWNlIG9mIHNl YXJjaF9wYXRoIGNoYW5nZXMuCisgKi8KK0RhdHVtCitkZGxfZGVwYXJzZV90b19qc29uKFBHX0ZV TkNUSU9OX0FSR1MpCit7CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kID0gKENvbGxlY3RlZENvbW1h bmQgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisJY2hhcgkJICAgKmNvbW1hbmQ7CisKKwljb21t YW5kID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCB0cnVlKTsKKworCWlmIChjb21tYW5k KQorCQlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChjb21tYW5kKSk7CisKKwlQR19S RVRVUk5fTlVMTCgpOworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckZ1bmN0aW9uU3RtdCAo QUxURVIgRlVOQ1RJT04pCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJz ZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50 aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Fs dGVyRnVuY3Rpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJGdW5j dGlvblN0bXQgKm5vZGUgPSAoQWx0ZXJGdW5jdGlvblN0bXQgKikgcGFyc2V0cmVlOworCU9ialRy ZWUJICAgKmFsdGVyRnVuYzsKKwlPYmpUcmVlCSAgICpzaWduOworCUhlYXBUdXBsZQlwcm9jVHVw OworCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlMaXN0CSAgICpwYXJhbXMgPSBOSUw7CisJTGlz dAkgICAqZWxlbXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlpbnQJCQlpOworCisJLyog R2V0IHRoZSBwZ19wcm9jIHR1cGxlICovCisJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9D T0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1IiwK KwkJCSBvYmplY3RJZCk7CisJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJv Y1R1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBGVU5DVElP TiAle3NpZ25hdHVyZX1zICV7ZGVmaW5pdGlvbjogfXMKKwkgKi8KKwlhbHRlckZ1bmMgPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgRlVOQ1RJT04iLCAwKTsKKworCS8qCisJICogQUxURVIgRlVOQ1RJ T04gZG9lcyBub3QgY2hhbmdlIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlIGNhdGFsb2cKKwkgKiB0 byBnZXQgaW5wdXQgdHlwZSBPaWRzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+ cHJvbmFyZ3M7IGkrKykKKwl7CisJCU9ialRyZWUJICAgKnRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCIle3R5cGV9VCIsIDApOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgInR5cGUi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFs dWVzW2ldLCAtMSkpOworCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJfQorCisJc2lnbiA9IG5ld19vYmp0cmVlKCIiKTsKKworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHNpZ24sICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJ ZCkpOworCWFwcGVuZF9hcnJheV9vYmplY3Qoc2lnbiwgIigle2FyZ3VtZW50czosIH1zKSIsIHBh cmFtcyk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckZ1bmMsICIle3NpZ25hdHVyZX1z Iiwgc2lnbik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPmFjdGlvbnMpCisJeworCQlEZWZFbGVt CSpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2Jq ID0gTlVMTDsKKworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidm9sYXRpbGl0eSIpID09 IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKHN0clZhbChkZWZlbC0+YXJnKSwg MCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3RyaWN0IikgPT0g MCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoaW50VmFsKGRlZmVsLT5hcmcpID8K KwkJCQkJCQkJICJSRVRVUk5TIE5VTEwgT04gTlVMTCBJTlBVVCIgOgorCQkJCQkJCQkgIkNBTExF RCBPTiBOVUxMIElOUFVUIiwgMCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZu YW1lLCAic2VjdXJpdHkiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShp bnRWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIlNFQ1VSSVRZIERFRklORVIiIDogIlNFQ1VS SVRZIElOVk9LRVIiLCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUs ICJsZWFrcHJvb2YiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShpbnRW YWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIkxFQUtQUk9PRiIgOiAiTk9UIExFQUtQUk9PRiIs IDApOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImNvc3QiKSA9PSAw KQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQ09TVCAle2Nvc3R9biIsIDEsCisJ CQkJCQkJCSAiY29zdCIsIE9ialR5cGVGbG9hdCwKKwkJCQkJCQkJIGRlZkdldE51bWVyaWMoZGVm ZWwpKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJyb3dzIikgPT0g MCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlJPV1MiLCAwKTsKKwkJCWlmIChk ZWZHZXROdW1lcmljKGRlZmVsKSA9PSAwKQorCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmos ICJwcmVzZW50IiwgZmFsc2UpOworCQkJZWxzZQorCQkJCWFwcGVuZF9mbG9hdF9vYmplY3QodG1w b2JqLCAiJXtyb3dzfW4iLAorCQkJCQkJCQkJZGVmR2V0TnVtZXJpYyhkZWZlbCkpOworCQl9CisJ CWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09IDApCisJCXsKKwkJCVZh cmlhYmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICopIGRlZmVsLT5hcmc7CisJ CQljaGFyICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0bXQpOworCisJCQl0bXBv YmogPSBkZXBhcnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+bmFtZSwgdmFsdWUp OworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN1cHBvcnQiKSA9PSAw KQorCQl7CisJCQlPaWQJCQlhcmd0eXBlc1sxXTsKKworCQkJdG1wb2JqID0gbmV3X29ianRyZWUo IlNVUFBPUlQiKTsKKworCQkJQXNzZXJ0KHByb2NGb3JtLT5wcm9zdXBwb3J0KTsKKworCQkJLyoK KwkJCSAqIFdlIHNob3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9uJ3MgbmFtZSBpZiBp dCB3b3VsZG4ndCBiZQorCQkJICogcmVzb2x2ZWQgYnkgbG9va3VwIGluIHRoZSBjdXJyZW50IHNl YXJjaCBwYXRoLgorCQkJICovCisJCQlhcmd0eXBlc1swXSA9IElOVEVSTkFMT0lEOworCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtuYW1lfXMiLAorCQkJCQkJCQkgZ2VuZXJhdGVf ZnVuY3Rpb25fbmFtZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwgMSwKKwkJCQkJCQkJCQkJCQkJTklM LCBhcmd0eXBlcywKKwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5VTEwsCisJCQkJCQkJCQkJCQkJCUVY UFJfS0lORF9OT05FKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAi cGFyYWxsZWwiKSA9PSAwKQorCQl7CisJCQljaGFyICpmbXQgPSBwc3ByaW50ZigiUEFSQUxMRUwg JXMiLCBzdHJWYWwoZGVmZWwtPmFyZykpOworCQkJdG1wb2JqID0gbmV3X29ianRyZWUoZm10KTsK KwkJfQorCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlckZ1bmMsICIle2RlZmluaXRpb246 IH1zIiwgZWxlbXMpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJcmV0dXJuIGFs dGVyRnVuYzsKK30KKworLyoKKyAqIGRlcGFyc2UgYW4gQUxURVIgLi4uIFNFVCBTQ0hFTUEgY29t bWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck9iamVjdFNjaGVtYVN0 bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQkJICBPYmpl Y3RBZGRyZXNzIG9sZHNjaGVtYSkKK3sKKwlBbHRlck9iamVjdFNjaGVtYVN0bXQgKm5vZGUgPSAo QWx0ZXJPYmplY3RTY2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICphbHRlclN0 bXQ7CisJY2hhcgkgICAqZm10OworCWNoYXIJICAgKmlkZW50aXR5OworCWNoYXIJICAgKm5ld3Nj aGVtYTsKKwljaGFyCSAgICpvbGRzY2huYW1lOworCWNoYXIJICAgKmlkZW50OworCisJbmV3c2No ZW1hID0gbm9kZS0+bmV3c2NoZW1hOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJ ICogQUxURVIgJXMgJXtpZGVudGl0eX1zIFNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SQorCSAqLwor CWZtdCA9IHBzcHJpbnRmKCJBTFRFUiAlcyIsIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9iamVj dFR5cGUpKTsKKwlhbHRlclN0bXQgPSBuZXdfb2JqdHJlZShmbXQpOworCisJLyoKKwkgKiBTaW5j ZSB0aGUgY29tbWFuZCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBmcm9tIHRoZSBwb2ludCBvZiB2 aWV3IG9mCisJICogY2F0YWxvZ3MsIGdldE9iamVjdElkZW50aXR5IHJldHVybnMgdGhlIG9iamVj dCBuYW1lIHdpdGggdGhlIGFscmVhZHkKKwkgKiBjaGFuZ2VkIHNjaGVtYS4gIFRoZSBvdXRwdXQg b2Ygb3VyIGRlcGFyc2luZyBtdXN0IHJldHVybiB0aGUgb3JpZ2luYWwKKwkgKiBzY2hlbWEgbmFt ZSBob3dldmVyLCBzbyB3ZSBjaG9wIHRoZSBzY2hlbWEgbmFtZSBvZmYgdGhlIGlkZW50aXR5IHN0 cmluZworCSAqIGFuZCB0aGVuIHByZXBlbmQgdGhlIHF1b3RlZCBzY2hlbWEgbmFtZS4KKwkgKgor CSAqIFhYWCBUaGlzIGlzIHByZXR0eSBjbHVua3kuIENhbiB3ZSBkbyBiZXR0ZXI/CisJICovCisJ aWRlbnRpdHkgPSBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpOworCW9sZHNjaG5h bWUgPSBnZXRfbmFtZXNwYWNlX25hbWUob2xkc2NoZW1hLm9iamVjdElkKTsKKwlpZiAoIW9sZHNj aG5hbWUpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzY2hlbWEgd2l0 aCBPSUQgJXUiLAorCQkJIG9sZHNjaGVtYS5vYmplY3RJZCk7CisKKwlpZGVudCA9IHBzcHJpbnRm KCIlcyVzIiwgcXVvdGVfaWRlbnRpZmllcihvbGRzY2huYW1lKSwKKwkJCQkJIGlkZW50aXR5ICsg c3RybGVuKHF1b3RlX2lkZW50aWZpZXIobmV3c2NoZW1hKSkpOworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGFsdGVyU3RtdCwgIiV7aWRlbnRpdHl9cyIsIGlkZW50KTsKKworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGFsdGVyU3RtdCwgIlNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SSIsIG5ld3NjaGVtYSk7 CisKKwlyZXR1cm4gYWx0ZXJTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIEdSQU5UL1JFVk9L RSBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0dyYW50U3RtdChDb2xs ZWN0ZWRDb21tYW5kICpjbWQpCit7CisJSW50ZXJuYWxHcmFudCAqaXN0bXQ7CisJT2JqVHJlZQkg ICAqZ3JhbnRTdG10OworCWNoYXIJICAgKmZtdDsKKwljaGFyCSAgICpvYmp0eXBlOworCUxpc3QJ ICAgKmxpc3Q7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPaWQJCQljbGFzc0lkOworCU9ialRyZWUJ ICAgKnRtcDsKKworCWlzdG10ID0gY21kLT5kLmdyYW50LmlzdG10OworCisJLyoKKwkgKiBJZiB0 aGVyZSBhcmUgbm8gb2JqZWN0cyBmcm9tICJBTEwgLi4uIElOIFNDSEVNQSIgdG8gYmUgZ3JhbnRl ZCwgdGhlbgorCSAqIHdlIG5lZWQgbm90IGRvIGFueXRoaW5nLgorCSAqLworCWlmIChpc3RtdC0+ b2JqZWN0cyA9PSBOSUwpCisJCXJldHVybiBOVUxMOworCisJc3dpdGNoIChpc3RtdC0+b2JqdHlw ZSkKKwl7CisJCWNhc2UgT0JKRUNUX0NPTFVNTjoKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJCQlv Ymp0eXBlID0gIlRBQkxFIjsKKwkJCWNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CisJCQli cmVhazsKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQlvYmp0eXBlID0gIlNFUVVFTkNFIjsK KwkJCWNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpF Q1RfRE9NQUlOOgorCQkJb2JqdHlwZSA9ICJET01BSU4iOworCQkJY2xhc3NJZCA9IFR5cGVSZWxh dGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZEVzoKKwkJCW9ianR5cGUgPSAiRk9S RUlHTiBEQVRBIFdSQVBQRVIiOworCQkJY2xhc3NJZCA9IEZvcmVpZ25EYXRhV3JhcHBlclJlbGF0 aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9TRVJWRVI6CisJCQlvYmp0 eXBlID0gIkZPUkVJR04gU0VSVkVSIjsKKwkJCWNsYXNzSWQgPSBGb3JlaWduU2VydmVyUmVsYXRp b25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJCW9ianR5cGUgPSAi RlVOQ1RJT04iOworCQkJY2xhc3NJZCA9IFByb2NlZHVyZVJlbGF0aW9uSWQ7CisJCQlicmVhazsK KwkJY2FzZSBPQkpFQ1RfUFJPQ0VEVVJFOgorCQkJb2JqdHlwZSA9ICJQUk9DRURVUkUiOworCQkJ Y2xhc3NJZCA9IFByb2NlZHVyZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1Rf Uk9VVElORToKKwkJCW9ianR5cGUgPSAiUk9VVElORSI7CisJCQljbGFzc0lkID0gUHJvY2VkdXJl UmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9MQU5HVUFHRToKKwkJCW9ianR5 cGUgPSAiTEFOR1VBR0UiOworCQkJY2xhc3NJZCA9IExhbmd1YWdlUmVsYXRpb25JZDsKKwkJCWJy ZWFrOworCQljYXNlIE9CSkVDVF9MQVJHRU9CSkVDVDoKKwkJCW9ianR5cGUgPSAiTEFSR0UgT0JK RUNUIjsKKwkJCWNsYXNzSWQgPSBMYXJnZU9iamVjdFJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJ Y2FzZSBPQkpFQ1RfU0NIRU1BOgorCQkJb2JqdHlwZSA9ICJTQ0hFTUEiOworCQkJY2xhc3NJZCA9 IE5hbWVzcGFjZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJ CW9ianR5cGUgPSAiVFlQRSI7CisJCQljbGFzc0lkID0gVHlwZVJlbGF0aW9uSWQ7CisJCQlicmVh azsKKwkJY2FzZSBPQkpFQ1RfREFUQUJBU0U6CisJCWNhc2UgT0JKRUNUX1RBQkxFU1BBQ0U6CisJ CQlvYmp0eXBlID0gIiI7CisJCQljbGFzc0lkID0gSW52YWxpZE9pZDsKKwkJCWVsb2coRVJST1Is ICJnbG9iYWwgb2JqZWN0cyBub3Qgc3VwcG9ydGVkIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoK KwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE9CSkVDVCB2YWx1ZSAlZCIsIGlzdG10LT5vYmp0eXBl KTsKKwl9CisKKwkvKiBHUkFOVCBUTyBvciBSRVZPS0UgRlJPTSAqLworCWlmIChpc3RtdC0+aXNf Z3JhbnQpCisJCWZtdCA9IHBzcHJpbnRmKCJHUkFOVCIpOworCWVsc2UKKwkJZm10ID0gcHNwcmlu dGYoIlJFVk9LRSIpOworCisJZ3JhbnRTdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAwKTsKKwor CS8qIGJ1aWxkIGxpc3Qgb2YgcHJpdmlsZWdlcyB0byBncmFudC9yZXZva2UgKi8KKwlpZiAoaXN0 bXQtPmFsbF9wcml2cykKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTEwgUFJJVklMRUdF UyIsIDApOworCQlsaXN0ID0gbGlzdF9tYWtlMShuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9 CisJZWxzZQorCXsKKwkJbGlzdCA9IE5JTDsKKworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBB Q0xfSU5TRVJUKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIklO U0VSVCIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1NFTEVDVCkKKwkJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJTRUxFQ1QiKSk7CisJCWlmIChpc3Rt dC0+cHJpdmlsZWdlcyAmIEFDTF9VUERBVEUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf c3RyaW5nX29iamVjdCgiVVBEQVRFIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xf REVMRVRFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIkRFTEVU RSIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1RSVU5DQVRFKQorCQkJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlRSVU5DQVRFIikpOworCQlpZiAoaXN0 bXQtPnByaXZpbGVnZXMgJiBBQ0xfUkVGRVJFTkNFUykKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19zdHJpbmdfb2JqZWN0KCJSRUZFUkVOQ0VTIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVn ZXMgJiBBQ0xfVFJJR0dFUikKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2Jq ZWN0KCJUUklHR0VSIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfRVhFQ1VURSkK KwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJFWEVDVVRFIikpOwor CQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVVNBR0UpCisJCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfc3RyaW5nX29iamVjdCgiVVNBR0UiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdl cyAmIEFDTF9DUkVBVEUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVj dCgiQ1JFQVRFIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfQ1JFQVRFX1RFTVAp CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiVEVNUE9SQVJZIikp OworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfQ09OTkVDVCkKKwkJCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJDT05ORUNUIikpOworCisJCWlmICghaXN0bXQt PmlzX2dyYW50ICYmIGlzdG10LT5ncmFudF9vcHRpb24pCisJCQlhcHBlbmRfc3RyaW5nX29iamVj dChncmFudFN0bXQsICIle2dyYW50X29wdGlvbn1zIiwKKwkJCQkJCQkJIGlzdG10LT5ncmFudF9v cHRpb24gPyAgIkdSQU5UIE9QVElPTiBGT1IiIDogIiIpOworCisJCWlmIChpc3RtdC0+Y29sX3By aXZzICE9IE5JTCkKKwkJeworCQkJTGlzdENlbGwgICAqb2NlbGw7CisKKwkJCWZvcmVhY2gob2Nl bGwsIGlzdG10LT5jb2xfcHJpdnMpCisJCQl7CisJCQkJQWNjZXNzUHJpdiAqcHJpdiA9IGxmaXJz dChvY2VsbCk7CisJCQkJTGlzdCAgICpjb2xzID0gTklMOworCisJCQkJdG1wID0gbmV3X29ianRy ZWUoIiIpOworCQkJCWZvcmVhY2goY2VsbCwgcHJpdi0+Y29scykKKwkJCQl7CisJCQkJCVN0cmlu ZyAqY29sbmFtZSA9IGxmaXJzdF9ub2RlKFN0cmluZywgY2VsbCk7CisKKwkJCQkJY29scyA9IGxh cHBlbmQoY29scywKKwkJCQkJCQkJICAgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKGNvbG5hbWUp KSk7CisJCQkJfQorCQkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wLCAiKCV7Y29sczosIH1zKSIs IGNvbHMpOworCisJCQkJaWYgKHByaXYtPnByaXZfbmFtZSA9PSBOVUxMKQorCQkJCQlhcHBlbmRf c3RyaW5nX29iamVjdChncmFudFN0bXQsICIle3ByaXZ9cyIsICJBTEwgUFJJVklMRUdFUyIpOwor CQkJCWVsc2UKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoZ3JhbnRTdG10LCAiJXtwcml2fXMi LCBwcml2LT5wcml2X25hbWUpOworCisJCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisJCQl9CisJCX0KKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChncmFu dFN0bXQsICIle3ByaXZpbGVnZXM6LCB9cyBPTiIsIGxpc3QpOworCisJYXBwZW5kX3N0cmluZ19v YmplY3QoZ3JhbnRTdG10LCAiJXtvYmp0eXBlfXMiLCBvYmp0eXBlKTsKKworCS8qIHRhcmdldCBv YmplY3RzLiAgV2UgdXNlIG9iamVjdCBpZGVudGl0aWVzIGhlcmUgKi8KKwlsaXN0ID0gTklMOwor CWZvcmVhY2goY2VsbCwgaXN0bXQtPm9iamVjdHMpCisJeworCQlPaWQJCW9iamlkID0gbGZpcnN0 X29pZChjZWxsKTsKKwkJT2JqZWN0QWRkcmVzcyBhZGRyOworCisJCWFkZHIuY2xhc3NJZCA9IGNs YXNzSWQ7CisJCWFkZHIub2JqZWN0SWQgPSBvYmppZDsKKwkJYWRkci5vYmplY3RTdWJJZCA9IDA7 CisKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHl9cyIsIDEsCisJCQkJCQkJICAg ImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgICBnZXRPYmplY3RJZGVudGl0eSgm YWRkciwgZmFsc2UpKTsKKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChncmFudFN0bXQsICIle3ByaXZ0YXJn ZXQ6LCB9cyIsIGxpc3QpOworCisJaWYgKGlzdG10LT5pc19ncmFudCkKKwkJYXBwZW5kX2Zvcm1h dF9zdHJpbmcoZ3JhbnRTdG10LCAiVE8iKTsKKwllbHNlCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5n KGdyYW50U3RtdCwgIkZST00iKTsKKworCS8qIGxpc3Qgb2YgZ3JhbnRlZXMgKi8KKwlsaXN0ID0g TklMOworCWZvcmVhY2goY2VsbCwgaXN0bXQtPmdyYW50ZWVzKQorCXsKKwkJT2lkCQlncmFudGVl ID0gbGZpcnN0X29pZChjZWxsKTsKKworCQl0bXAgPSBuZXdfb2JqdHJlZV9mb3Jfcm9sZV9pZChn cmFudGVlKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChncmFudFN0bXQsICIle2dyYW50ZWVzOiwgfXMi LCBsaXN0KTsKKworCS8qIHRoZSB3b3JkaW5nIG9mIHRoZSBncmFudCBvcHRpb24gaXMgdmFyaWFi bGUgLi4uICovCisJaWYgKGlzdG10LT5pc19ncmFudCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo Z3JhbnRTdG10LCAiJXtncmFudF9vcHRpb259cyIsCisJCQkJCQkJIGlzdG10LT5ncmFudF9vcHRp b24gPyAgIldJVEggR1JBTlQgT1BUSU9OIiA6ICIiKTsKKworCWlmIChpc3RtdC0+Z3JhbnRvcl91 aWQpCisJeworCQlIZWFwVHVwbGUJcm9sdHVwOworCQljaGFyCSAgICpyb2xlbmFtZTsKKworCQly b2x0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQVVUSE9JRCwgT2JqZWN0SWRHZXREYXR1bShpc3RtdC0+ Z3JhbnRvcl91aWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJvbHR1cCkpCisJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJ CQkgZXJybXNnKCJyb2xlIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwgaXN0bXQtPmdyYW50 b3JfdWlkKSkpOworCisJCXJvbGVuYW1lID0gTmFtZVN0cigoKEZvcm1fcGdfYXV0aGlkKSBHRVRT VFJVQ1Qocm9sdHVwKSktPnJvbG5hbWUpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChncmFudFN0 bXQsICJHUkFOVEVEIEJZICV7cm9sZW5hbWV9cyIsIHJvbGVuYW1lKTsKKwkJUmVsZWFzZVN5c0Nh Y2hlKHJvbHR1cCk7CisJfQorCisJaWYgKCFpc3RtdC0+aXNfZ3JhbnQpCisJeworCQlpZiAoaXN0 bXQtPmJlaGF2aW9yID09IERST1BfQ0FTQ0FERSkKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdy YW50U3RtdCwgIiV7Y2FzY2FkZX1zIiwgIkNBU0NBREUiKTsKKwkJZWxzZQorCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QoZ3JhbnRTdG10LCAiJXtjYXNjYWRlfXMiLCAiIik7CisJfQorCisJcmV0dXJu IGdyYW50U3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJPcGVyYXRvclN0bXQgKEFM VEVSIE9QRVJBVE9SIC4uLiBTRVQgLi4uKS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9BbHRlck9wZXJhdG9yU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlI ZWFwVHVwbGUgICAJb3ByVHVwOworCUFsdGVyT3BlcmF0b3JTdG10ICpub2RlID0gKEFsdGVyT3Bl cmF0b3JTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCQkgICAqYWx0ZXJvcDsKKwlGb3JtX3Bn X29wZXJhdG9yIG9wckZvcm07CisJTGlzdENlbGwJICAgKmNlbGw7CisJTGlzdAkJICAgKmxpc3Qg PSBOSUw7CisKKwlvcHJUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BFUk9JRCwgT2JqZWN0SWRHZXRE YXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcHJUdXApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3Igd2l0aCBPSUQgJXUiLCBv YmplY3RJZCk7CisJb3ByRm9ybSA9IChGb3JtX3BnX29wZXJhdG9yKSBHRVRTVFJVQ1Qob3ByVHVw KTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSIE9QRVJBVE9SICV7 aWRlbnRpdHl9TyAoJXtsZWZ0X3R5cGV9VCwgJXtyaWdodF90eXBlfVQpIFNFVAorCSAqICgle2Vs ZW1zOiwgfXMpCisJICovCisJYWx0ZXJvcCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBPUEVSQVRP UiAle2lkZW50aXR5fU8iLCAxLAorCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3ByRm9ybS0+b3BybmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJCSAgTmFtZVN0cihvcHJGb3JtLT5vcHJuYW1lKSkpOworCisJLyogTEVGVEFS RyAqLworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKQorCQlhcHBlbmRfb2JqZWN0 X29iamVjdChhbHRlcm9wLCAiKCV7bGVmdF90eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfdHlwZShvcHJGb3JtLT5vcHJsZWZ0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QoYWx0ZXJvcCwgIigle2xlZnRfdHlwZX1zIiwgIk5PTkUiKTsKKworCS8qIFJJR0hUQVJH ICovCisJQXNzZXJ0KE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkpOworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGFsdGVyb3AsICIsICV7cmlnaHRfdHlwZX1UKSIsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BycmlnaHQsIC0xKSk7CisKKwlmb3JlYWNoKGNlbGwsIG5v ZGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICplbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNl bGwpOworCQlPYmpUcmVlICp0bXBvYmogPSBOVUxMOworCisJCWlmIChzdHJjbXAoZWxlbS0+ZGVm bmFtZSwgInJlc3RyaWN0IikgPT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IlJFU1RSSUNUPSIsIDEsCisJCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3Ry aWN0Iik7CisJCQlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJyZXN0KSkKKwkJCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ CQkgb3ByRm9ybS0+b3BycmVzdCkpOworCQkJZWxzZQorCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcG9iaiwgIiV7cHJvY2VkdXJlfXMiLCAiTk9ORSIpOworCQl9CisJCWVsc2UgaWYgKHN0cmNt cChlbGVtLT5kZWZuYW1lLCAiam9pbiIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJKT0lOPSIsIDEsCisJCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImpv aW4iKTsKKwkJCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmpvaW4pKQorCQkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJ CSBvcHJGb3JtLT5vcHJqb2luKSk7CisJCQllbHNlCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wb2JqLCAiJXtwcm9jZWR1cmV9cyIsICJOT05FIik7CisJCX0KKworCQlBc3NlcnQodG1wb2Jq KTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ fQorCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlcm9wLCAiU0VUICgle2VsZW1zOiwgfXMpIiwg bGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3ByVHVwKTsKKworCXJldHVybiBhbHRlcm9wOwor fQorCisvKgorICogRGVwYXJzZSBhbiBBTFRFUiBPUEVSQVRPUiBGQU1JTFkgQUREL0RST1AgY29t bWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck9wRmFtaWx5KENvbGxl Y3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPYmpUcmVlCSAgICphbHRlck9wRmFtOworCUFsdGVyT3BG YW1pbHlTdG10ICpzdG10ID0gKEFsdGVyT3BGYW1pbHlTdG10ICopIGNtZC0+cGFyc2V0cmVlOwor CUhlYXBUdXBsZQlmdHA7CisJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUxpc3QJICAgKmxp c3Q7CisJTGlzdENlbGwgICAqY2VsbDsKKworCWZ0cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlM WU9JRCwKKwkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShjbWQtPmQub3BmYW0uYWRkcmVzcy5vYmpl Y3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChmdHApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5ICV1IiwKKwkJCSBjbWQtPmQub3Bm YW0uYWRkcmVzcy5vYmplY3RJZCk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRT VFJVQ1QoZnRwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSIE9Q RVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXthbW5hbWV9SSBBREQvRFJPUAorCSAq ICV7aXRlbXM6LCB9cworCSAqLworCWFsdGVyT3BGYW0gPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg T1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCAiCisJCQkJCQkJCSJVU0lORyAle2FtbmFtZX1J IiwgMiwKKwkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJ IE5hbWVTdHIob3BmRm9ybS0+b3BmbmFtZSkpLAorCQkJCQkJCQkiYW1uYW1lIiwgT2JqVHlwZVN0 cmluZywgc3RtdC0+YW1uYW1lKTsKKworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBjbWQt PmQub3BmYW0ub3BlcmF0b3JzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKm9wZXIgPSBsZmlyc3Qo Y2VsbCk7CisJCU9ialRyZWUJICAgKnRtcG9iajsKKworCQkvKgorCQkgKiBWZXJib3NlIHN5bnRh eAorCQkgKgorCQkgKiBPUEVSQVRPUiAle251bX1uICV7b3BlcmF0b3J9Tygle2x0eXBlfVQsICV7 cnR5cGV9VCkgJXtwdXJwb3NlfXMKKwkJICovCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJP UEVSQVRPUiAle251bX1uIiwgMSwKKwkJCQkJCQkgIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVy LT5udW1iZXIpOworCisJCS8qIEFkZCB0aGUgb3BlcmF0b3IgbmFtZTsgdGhlIERST1AgY2FzZSBk b2Vzbid0IGhhdmUgdGhpcyAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtvcGVyYXRvcn1PIiwKKwkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkg b3Blci0+b2JqZWN0KSk7CisJCX0KKworCQkvKiBBZGQgdGhlIHR5cGVzICovCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcG9iaiwgIigle2x0eXBlfVQsIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3R5cGUob3Blci0+bGVmdHR5cGUsIC0xKSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cG9iaiwgIiV7cnR5cGV9VCkiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5y aWdodHR5cGUsIC0xKSk7CisKKwkJLyogQWRkIHRoZSBGT1IgU0VBUkNIIC8gRk9SIE9SREVSIEJZ IGNsYXVzZTsgbm90IGluIHRoZSBEUk9QIGNhc2UgKi8KKwkJaWYgKCFzdG10LT5pc0Ryb3ApCisJ CXsKKwkJCWlmIChvcGVyLT5zb3J0ZmFtaWx5ID09IEludmFsaWRPaWQpCisJCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wb2JqLCAiJXtwdXJwb3NlfXMiLCAiRk9SIFNFQVJDSCIpOworCQkJZWxz ZQorCQkJeworCQkJCU9ialRyZWUJICAgKnRtcG9iajI7CisKKwkJCQl0bXBvYmoyID0gbmV3X29i anRyZWVfVkEoIkZPUiBPUkRFUiBCWSIsIDApOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cG9iajIsICIle29wZmFtaWx5fUQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChPcGVyYXRvckZhbWlseVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIG9wZXItPnNv cnRmYW1pbHkpKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3B1cnBvc2V9 cyIsIHRtcG9iajIpOworCQkJfQorCQl9CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJZm9yZWFjaChjZWxsLCBjbWQtPmQub3BmYW0u cHJvY2VkdXJlcykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpwcm9jID0gbGZpcnN0KGNlbGwpOwor CQlPYmpUcmVlCSAgICp0bXBvYmo7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkZVTkNU SU9OICV7bnVtfW4gKCV7bHR5cGV9VCwgJXtydHlwZX1UKSIsIDMsCisJCQkJCQkJICJudW0iLCBP YmpUeXBlSW50ZWdlciwgcHJvYy0+bnVtYmVyLAorCQkJCQkJCSAibHR5cGUiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jLT5sZWZ0dHlwZSwgLTEpLAor CQkJCQkJCSAicnR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf dHlwZShwcm9jLT5yaWdodHR5cGUsIC0xKSk7CisKKwkJLyogQWRkIHRoZSBmdW5jdGlvbiBuYW1l IGFuZCBhcmcgdHlwZXM7IHRoZSBEUk9QIGNhc2UgZG9lc24ndCBoYXZlIHRoaXMgKi8KKwkJaWYg KCFzdG10LT5pc0Ryb3ApCisJCXsKKwkJCUhlYXBUdXBsZQlwcm9jVHVwOworCQkJRm9ybV9wZ19w cm9jIHByb2NGb3JtOworCQkJT2lkCQkgICAqcHJvYXJndHlwZXM7CisJCQlMaXN0CSAgICphcmds aXN0ID0gTklMOworCQkJaW50CQkJaTsKKworCQkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQ Uk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2MtPm9iamVjdCkpOworCQkJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHByb2NUdXApKQorCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBwcm9jZWR1cmUgJXUiLCBwcm9jLT5vYmplY3QpOworCQkJcHJvY0Zvcm0gPSAoRm9ybV9w Z19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJCXByb2FyZ3R5cGVzID0gcHJvY0Zvcm0t PnByb2FyZ3R5cGVzLnZhbHVlczsKKwkJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFy Z3M7IGkrKykKKwkJCXsKKwkJCQlPYmpUcmVlCSAgICphcmc7CisKKwkJCQlhcmcgPSBuZXdfb2Jq dHJlZV9mb3JfdHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJCWFyZ2xpc3QgPSBsYXBwZW5k KGFyZ2xpc3QsIG5ld19vYmplY3Rfb2JqZWN0KGFyZykpOworCQkJfQorCisJCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBvYmosICIle2Z1bmN0aW9ufUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFt ZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKworCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1w b2JqLCAiKCIpOworCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIle2FyZ3R5cGVzOiwg fVQiLCBhcmdsaXN0KTsKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIikiKTsKKwor CQkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCQl9CisKKwkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJaWYgKHN0bXQtPmlzRHJvcCkK KwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0ZXJPcEZhbSwgIkRST1AiKTsKKwllbHNlCisJCWFw cGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVyT3BGYW0sICJBREQiKTsKKworCWFwcGVuZF9hcnJheV9v YmplY3QoYWx0ZXJPcEZhbSwgIiV7aXRlbXM6LCB9cyIsIGxpc3QpOworCisJUmVsZWFzZVN5c0Nh Y2hlKGZ0cCk7CisKKwlyZXR1cm4gYWx0ZXJPcEZhbTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBB bHRlck93bmVyU3RtdCAoQUxURVIgLi4uIE9XTkVSIFRPIC4uLikuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQWx0ZXJPd25lclN0bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2Rl ICpwYXJzZXRyZWUpCit7CisJQWx0ZXJPd25lclN0bXQgKm5vZGUgPSAoQWx0ZXJPd25lclN0bXQg KikgcGFyc2V0cmVlOworCU9ialRyZWUJCSAgICpvd25lclN0bXQ7CisJY2hhcgkJICAgKmZtdDsK KworCWZtdCA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0eX1zIE9XTkVSIFRPICUle25l d293bmVyfUkiLAorCQkJCSAgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9iamVjdFR5cGUpKTsK KworCW93bmVyU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICAiaWRlbnRp dHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSAgIGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNz LCBmYWxzZSksCisJCQkJCQkJICAgIm5ld293bmVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkg ICBnZXRfcm9sZXNwZWNfbmFtZShub2RlLT5uZXdvd25lcikpOworCisJcmV0dXJuIG93bmVyU3Rt dDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJTZXFTdG10LgorICoKKyAqIEdpdmVuIGEg c2VxdWVuY2UgT0lEIGFuZCBhIHBhcnNldHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyU2VxU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNl dHJlZSkKK3sKKwlPYmpUcmVlCQkqYWx0ZXJTZXE7CisJT2JqVHJlZQkJKnRtcG9iajsKKwlSZWxh dGlvbgkgcmVsYXRpb247CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJTGlzdAkg ICAqZWxlbXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlGb3JtX3BnX3NlcXVlbmNlIHNl cWZvcm07CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlBbHRlclNlcVN0 bXQgKmFsdGVyU2VxU3RtdCA9IChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlOworCisJLyoKKwkg KiBTZXF1ZW5jZSBmb3IgSURFTlRJVFkgQ09MVU1OIG91dHB1dCBzZXBhcmF0ZWx5KHZpYSBDUkVB VEUgVEFCTEUgb3IKKwkgKiBBTFRFUiBUQUJMRSk7IHJldHVybiBlbXB0eSBoZXJlLgorCSAqLwor CWlmIChhbHRlclNlcVN0bXQtPmZvcl9pZGVudGl0eSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXFk YXRhID0gZ2V0X3NlcXVlbmNlX3ZhbHVlcyhvYmplY3RJZCk7CisKKwlyZWxhdGlvbiA9IHJlbGF0 aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJcmVsID0gdGFibGVfb3BlbihT ZXF1ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0gU2VhcmNo U3lzQ2FjaGVDb3B5MShTRVFSRUxJRCwKKwkJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShvYmpl Y3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzZXF1ZW5jZSAldSIsCisJCQkgb2JqZWN0SWQpOwor CisJc2VxZm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCisJ YWx0ZXJTZXEgPSBuZXdfb2JqdHJlZSgiQUxURVIgU0VRVUVOQ0UiKTsKKworCXRtcG9iaiA9IG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJ CQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7CisJYXBwZW5kX29i amVjdF9vYmplY3QoYWx0ZXJTZXEsICIle2lkZW50aXR5fUQiLCB0bXBvYmopOworCisJZm9yZWFj aChjZWxsLCAoKEFsdGVyU2VxU3RtdCAqKSBwYXJzZXRyZWUpLT5vcHRpb25zKQorCXsKKwkJRGVm RWxlbSAqZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2JqRWxlbSAqbmV3ZWxt OworCisJCWlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImNhY2hlIikgPT0gMCkKKwkJCW5ld2Vs bSA9IGRlcGFyc2VfU2VxX0NhY2hlKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2Ug aWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiY3ljbGUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVw YXJzZV9TZXFfQ3ljbGUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3Ry Y21wKGVsZW0tPmRlZm5hbWUsICJpbmNyZW1lbnQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJz ZV9TZXFfSW5jcmVtZW50QnkoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAo c3RyY21wKGVsZW0tPmRlZm5hbWUsICJtaW52YWx1ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBh cnNlX1NlcV9NaW52YWx1ZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChz dHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm1heHZhbHVlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFy c2VfU2VxX01heHZhbHVlKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0 cmNtcChlbGVtLT5kZWZuYW1lLCAic3RhcnQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9T ZXFfU3RhcnR3aXRoKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNt cChlbGVtLT5kZWZuYW1lLCAicmVzdGFydCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1Nl cV9SZXN0YXJ0KGFsdGVyU2VxLCBzZXFkYXRhKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRl Zm5hbWUsICJvd25lZF9ieSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9Pd25lZEJ5 KGFsdGVyU2VxLCBvYmplY3RJZCwgZmFsc2UpOworCQllbHNlCisJCQllbG9nKEVSUk9SLCAiaW52 YWxpZCBzZXF1ZW5jZSBvcHRpb24gJXMiLCBlbGVtLT5kZWZuYW1lKTsKKworCQllbGVtcyA9IGxh cHBlbmQoZWxlbXMsIG5ld2VsbSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlclNl cSwgIiV7ZGVmaW5pdGlvbjogfXMiLCBlbGVtcyk7CisKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4 Y2x1c2l2ZUxvY2spOworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJcmV0dXJuIGFsdGVyU2VxOworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclR5cGVT dG10LgorICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQgYW5kIGEgcGFyc2V0cmVlIHRoYXQgbW9kaWZp ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJUeXBlU2V0U3RtdChPaWQgb2Jq ZWN0SWQsIE5vZGUgKmNtZCkKK3sKKwlBbHRlclR5cGVTdG10ICphbHRlclR5cGVTZXRTdG10ID0g KEFsdGVyVHlwZVN0bXQgKiljbWQ7CisJT2JqVHJlZQkJKmFsdGVyVHlwZTsKKwlMaXN0Q2VsbCAg ICpwbDsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlIZWFwVHVwbGUgICB0eXBUdXA7CisJRm9y bV9wZ190eXBlIHR5cEZvcm07CisKKwl0eXBUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwg T2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXBU dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9J RCAldSIsIG9iamVjdElkKTsKKwl0eXBGb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5 cFR1cCk7CisKKwlhbHRlclR5cGUgPSBuZXdfb2JqdHJlZSgiQUxURVIgVFlQRSIpOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGFsdGVyVHlwZSwgIiV7aWRlbnRpdHl9RCBTRVQiLAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkg b2JqZWN0SWQpKTsKKworCWZvcmVhY2gocGwsIGFsdGVyVHlwZVNldFN0bXQtPm9wdGlvbnMpCisJ eworCQlEZWZFbGVtICAgICpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChwbCk7CisJCU9iakVs ZW0gKm5ld2VsbTsKKworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3RvcmFnZSIpID09 IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfU3RvcmFnZShhbHRlclR5cGUsIHR5cEZvcm0p OworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAicmVjZWl2ZSIpID09IDApCisJCQluZXdl bG0gPSBkZXBhcnNlX1R5cGVfUmVjZWl2ZShhbHRlclR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3Ry Y21wKGRlZmVsLT5kZWZuYW1lLCAic2VuZCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5 cGVfU2VuZChhbHRlclR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1l LCAidHlwbW9kX2luIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9UeXBtb2RfSW4o YWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInR5cG1v ZF9vdXQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1R5cG1vZF9PdXQoYWx0ZXJU eXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImFuYWx5emUiKSA9 PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX0FuYWx5emUoYWx0ZXJUeXBlLCB0eXBGb3Jt KTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN1YnNjcmlwdCIpID09IDApCisJCQlu ZXdlbG0gPSBkZXBhcnNlX1R5cGVfU3Vic2NyaXB0KGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWVs c2UKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHR5cGUgb3B0aW9uICVzIiwgZGVmZWwtPmRlZm5h bWUpOworCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3ZWxtKTsKKwl9CisKKwlhcHBlbmRf YXJyYXlfb2JqZWN0KGFsdGVyVHlwZSwgIigle2RlZmluaXRpb246IH1zKSIsIGVsZW1zKTsKKwor CVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCisJcmV0dXJuIGFsdGVyVHlwZTsKK30KKworLyoK KyAqIERlcGFyc2UgYSBDb21wb3NpdGVUeXBlU3RtdCAoQ1JFQVRFIFRZUEUgQVMpCisgKgorICog R2l2ZW4gYSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVy biBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29tcG9zaXRlVHlwZVN0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ29tcG9zaXRlVHlwZVN0bXQgKm5vZGUgPSAoQ29tcG9z aXRlVHlwZVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmNvbXBvc2l0ZTsKKwlIZWFw VHVwbGUJdHlwdHVwOworCUZvcm1fcGdfdHlwZSB0eXBmb3JtOworCVJlbGF0aW9uCXR5cGVyZWw7 CisJTGlzdAkgICAqZHBjb250ZXh0OworCUxpc3QJICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCS8q IEZpbmQgdGhlIHBnX3R5cGUgZW50cnkgYW5kIG9wZW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVsYXRp b24gKi8KKwl0eXB0dXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1 bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXB0dXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSAldSIsIG9iamVjdElkKTsKKwl0eXBm b3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cHR1cCk7CisJdHlwZXJlbCA9IHJlbGF0 aW9uX29wZW4odHlwZm9ybS0+dHlwcmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlkcGNvbnRl eHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHR5cGVyZWwp LAorCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxpZCh0eXBlcmVsKSk7CisKKwljb21wb3NpdGUgPSBu ZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRZUEUiLCAwKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChj b21wb3NpdGUsICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKworCXRhYmxl ZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyh0eXBlcmVsLCBub2RlLT5jb2xkZWZsaXN0LCBk cGNvbnRleHQsCisJCQkJCQkJCQkgIGZhbHNlLAkJLyogbm90IHR5cGVkICovCisJCQkJCQkJCQkg IHRydWUpOwkJLyogY29tcG9zaXRlIHR5cGUgKi8KKworCWFwcGVuZF9hcnJheV9vYmplY3QoY29t cG9zaXRlLCAiQVMgKCV7Y29sdW1uczosIH1zKSIsIHRhYmxlZWx0cyk7CisKKwl0YWJsZV9jbG9z ZSh0eXBlcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCVJlbGVhc2VTeXNDYWNoZSh0eXB0dXApOwor CisJcmV0dXJuIGNvbXBvc2l0ZTsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVh dGVDb252ZXJzaW9uKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBs ZSAgIGNvblR1cDsKKwlSZWxhdGlvbgljb252cmVsOworCUZvcm1fcGdfY29udmVyc2lvbiBjb25G b3JtOworCU9ialRyZWUJICAgKmNjU3RtdCwgKnRtcE9iajsKKworCWNvbnZyZWwgPSB0YWJsZV9v cGVuKENvbnZlcnNpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWNvblR1cCA9IGdl dF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY29udnJlbCwgQW51bV9wZ19jb252ZXJzaW9uX29pZCwg b2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjb25UdXApKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29udmVyc2lvbiB3aXRoIE9JRCAldSIsIG9iamVj dElkKTsKKwljb25Gb3JtID0gKEZvcm1fcGdfY29udmVyc2lvbikgR0VUU1RSVUNUKGNvblR1cCk7 CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtkZWZhdWx0fXMg Q09OVkVSU0lPTiAle2lkZW50aXR5fUQgRk9SICV7c291cmNlfUwgVE8gJXtkZXN0fUwKKwkgKiBG Uk9NICV7ZnVuY3Rpb259RAorCSAqLworCWNjU3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsK KworCisJLyogQWRkIHRoZSBERUZBVUxUIGNsYXVzZSAqLworCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGNjU3RtdCwgImRlZmF1bHQiLAorCQkJCQkJIGNvbkZvcm0tPmNvbmRlZmF1bHQgPyAiREVGQVVM VCIgOiAiIik7CisKKwl0bXBPYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoY29uRm9ybS0+ Y29ubmFtZXNwYWNlLCBOYW1lU3RyKGNvbkZvcm0tPmNvbm5hbWUpKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChjY1N0bXQsICJDT05WRVJTSU9OICV7aWRlbnRpdHl9RCIsIHRtcE9iaik7CisJYXBw ZW5kX3N0cmluZ19vYmplY3QoY2NTdG10LCAiRk9SICV7c291cmNlfUwiLCAoY2hhciAqKQorCQkJ CQkJIHBnX2VuY29kaW5nX3RvX2NoYXIoY29uRm9ybS0+Y29uZm9yZW5jb2RpbmcpKTsKKwlhcHBl bmRfc3RyaW5nX29iamVjdChjY1N0bXQsICJUTyAle2Rlc3R9TCIsIChjaGFyICopCisJCQkJCQkg cGdfZW5jb2RpbmdfdG9fY2hhcihjb25Gb3JtLT5jb250b2VuY29kaW5nKSk7CisJYXBwZW5kX29i amVjdF9vYmplY3QoY2NTdG10LCAiRlJPTSAle2Z1bmN0aW9ufUQiLAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBj b25Gb3JtLT5jb25wcm9jKSk7CisKKwl0YWJsZV9jbG9zZShjb252cmVsLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJcmV0dXJuIGNjU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVFbnVt U3RtdCAoQ1JFQVRFIFRZUEUgQVMgRU5VTSkKKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCB0 aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJl c2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9DcmVhdGVFbnVtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlD cmVhdGVFbnVtU3RtdCAqbm9kZSA9IChDcmVhdGVFbnVtU3RtdCAqKSBwYXJzZXRyZWU7CisJT2Jq VHJlZQkgICAqZW51bXR5cGU7CisJTGlzdAkgICAqdmFsdWVzOworCUxpc3RDZWxsICAgKmNlbGw7 CisKKwllbnVtdHlwZSA9IG5ld19vYmp0cmVlKCJDUkVBVEUgVFlQRSIpOworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGVudW10eXBlLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7 CisKKwl2YWx1ZXMgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBub2RlLT52YWxzKQorCXsKKwkJU3Ry aW5nICAgKnZhbCA9IGxmaXJzdF9ub2RlKFN0cmluZywgY2VsbCk7CisKKwkJdmFsdWVzID0gbGFw cGVuZCh2YWx1ZXMsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbCh2YWwpKSk7CisJfQorCisJYXBw ZW5kX2FycmF5X29iamVjdChlbnVtdHlwZSwgIkFTIEVOVU0gKCV7dmFsdWVzOiwgfUwpIiwgdmFs dWVzKTsKKwlyZXR1cm4gZW51bXR5cGU7Cit9CisKKy8qCisgKiBkZXBhcnNlX0NyZWF0ZUV4dGVu c2lvblN0bXQKKyAqCQlkZXBhcnNlIGEgQ3JlYXRlRXh0ZW5zaW9uU3RtdAorICoKKyAqIEdpdmVu IGFuIGV4dGVuc2lvbiBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1 cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgor ICoKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVFeHRlbnNpb25TdG10KE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUV4dGVuc2lvblN0bXQgKm5v ZGUgPSAoQ3JlYXRlRXh0ZW5zaW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24gICAgcGdf ZXh0ZW5zaW9uOworCUhlYXBUdXBsZSAgIGV4dFR1cDsKKwlGb3JtX3BnX2V4dGVuc2lvbiBleHRG b3JtOworCU9ialRyZWUJICAgKmV4dFN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAg Kmxpc3Q7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkg KgorCSAqIENSRUFURSBFWFRFTlNJT04gJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1JICV7 b3B0aW9uczogfXMKKwkgKi8KKworCXBnX2V4dGVuc2lvbiA9IHRhYmxlX29wZW4oRXh0ZW5zaW9u UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlleHRUdXAgPSBnZXRfY2F0YWxvZ19vYmpl Y3RfYnlfb2lkKHBnX2V4dGVuc2lvbiwgQW51bV9wZ19leHRlbnNpb25fb2lkLCBvYmplY3RJZCk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGV4dFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBleHRlbnNpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsK KwlleHRGb3JtID0gKEZvcm1fcGdfZXh0ZW5zaW9uKSBHRVRTVFJVQ1QoZXh0VHVwKTsKKworCWV4 dFN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIEVYVEVOU0lPTiIpOworCisJYXBwZW5kX3N0cmlu Z19vYmplY3QoZXh0U3RtdCwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCSBub2RlLT5pZl9u b3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoZXh0U3RtdCwgIiV7bmFtZX1JIiwgbm9kZS0+ZXh0bmFtZSk7CisKKwkvKiBMaXN0IG9mIG9w dGlvbnMgKi8KKwlsaXN0ID0gTklMOworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7 CisJCURlZkVsZW0gKm9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAoc3Ry Y21wKG9wdC0+ZGVmbmFtZSwgInNjaGVtYSIpID09IDApCisJCXsKKwkJCS8qIHNraXAgdGhpcyBv bmU7IHdlIGFkZCBvbmUgdW5jb25kaXRpb25hbGx5IGJlbG93ICovCisJCQljb250aW51ZTsKKwkJ fQorCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAibmV3X3ZlcnNpb24iKSA9PSAwKQor CQl7CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkVSU0lPTiAle3ZlcnNpb259TCIsIDIsCisJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2ZXJzaW9uIiwKKwkJCQkJCQkJICJ2ZXJz aW9uIiwgT2JqVHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOworCQkJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21w KG9wdC0+ZGVmbmFtZSwgIm9sZF92ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJdG1wID0gbmV3X29i anRyZWVfVkEoIkZST00gJXt2ZXJzaW9ufUwiLCAyLAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiZnJvbSIsCisJCQkJCQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsIGRlZkdl dFN0cmluZyhvcHQpKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCQl9CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvcHRpb24g JXMiLCBvcHQtPmRlZm5hbWUpOworCX0KKworCS8qIEFkZCB0aGUgU0NIRU1BIG9wdGlvbiAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTQ0hFTUEgJXtzY2hlbWF9SSIsCisJCQkJCQkgMiwgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAic2NoZW1hIiwKKwkJCQkJCSAic2NoZW1hIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCSBnZXRfbmFtZXNwYWNlX25hbWUoZXh0Rm9ybS0+ZXh0bmFtZXNwYWNlKSk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBk b25lICovCisJYXBwZW5kX2FycmF5X29iamVjdChleHRTdG10LCAiJXtvcHRpb25zOiB9cyIsIGxp c3QpOworCisJdGFibGVfY2xvc2UocGdfZXh0ZW5zaW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJ cmV0dXJuIGV4dFN0bXQ7Cit9CisKKy8qCisgKiBJZiBhIGNvbHVtbiBuYW1lIGlzIHNwZWNpZmll ZCwgYWRkIGFuIGVsZW1lbnQgZm9yIGl0OyBvdGhlcndpc2UgaXQncyBhCisgKiB0YWJsZS1sZXZl bCBvcHRpb24uCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRmR3T3B0aW9ucyhMaXN0 ICpvcHRpb25zLCBjaGFyICpjb2xuYW1lKQoreworCU9ialRyZWUJICAgKnRtcDsKKworCWlmIChj b2xuYW1lKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUki LAorCQkJCQkJCSAxLCAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgY29sbmFtZSk7CisJZWxzZQor CQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiT1BUSU9OUyIsIDApOworCisJaWYgKG9wdGlvbnMgIT0g TklMKQorCXsKKwkJTGlzdAkgICAqb3B0b3V0ID0gTklMOworCQlMaXN0Q2VsbCAgICpjZWxsOwor CisJCWZvcmVhY2goY2VsbCwgb3B0aW9ucykKKwkJeworCQkJRGVmRWxlbQkgICAqZWxlbTsKKwkJ CU9ialRyZWUJICAgKm9wdDsKKworCQkJZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsK KworCQkJc3dpdGNoIChlbGVtLT5kZWZhY3Rpb24pCisJCQl7CisJCQkJY2FzZSBERUZFTEVNX1VO U1BFQzoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIiV7bGFiZWx9SSAle3ZhbHVlfUwiLCAy LAorCQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lLAorCQkJ CQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBlbGVtLT5hcmcgPyBk ZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRS VUUiIDogIkZBTFNFIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgREVGRUxFTV9TRVQ6CisJCQkJ CW9wdCA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgJXtsYWJlbH1JICV7dmFsdWV9TCIsIDIsCisJCQkJ CQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcsIGVsZW0tPmRlZm5hbWUsCisJCQkJCQkJCQkJ ICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0 cmluZyhlbGVtKSA6CisJCQkJCQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAi RkFMU0UiKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBERUZFTEVNX0FERDoKKwkJCQkJb3B0ID0g bmV3X29ianRyZWVfVkEoIkFERCAle2xhYmVsfUkgJXt2YWx1ZX1MIiwgMiwKKwkJCQkJCQkJCQkg ImxhYmVsIiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ZGVmbmFtZSwKKwkJCQkJCQkJCQkgInZhbHVl IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVs ZW0pIDoKKwkJCQkJCQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIp OworCQkJCQlicmVhazsKKwkJCQljYXNlIERFRkVMRU1fRFJPUDoKKwkJCQkJb3B0ID0gbmV3X29i anRyZWVfVkEoIkRST1AgJXtsYWJlbH1JIiwgMSwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlw ZVN0cmluZywgZWxlbS0+ZGVmbmFtZSk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJ CWVsb2coRVJST1IsICJpbnZhbGlkIGRlZiBhY3Rpb24gJWQiLCBlbGVtLT5kZWZhY3Rpb24pOwor CQkJCQlvcHQgPSBOVUxMOworCQkJfQorCisJCQlvcHRvdXQgPSBsYXBwZW5kKG9wdG91dCwgbmV3 X29iamVjdF9vYmplY3Qob3B0KSk7CisJCX0KKworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwg Iigle29wdGlvbjogLH1zKSIsIG9wdG91dCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2Jq ZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gdG1wOworfQorCisvKgorICog ZGVwYXJzZV9DcmVhdGVGZHdTdG10CisgKiAgIERlcGFyc2UgYSBDcmVhdGVGZHdTdG10IChDUkVB VEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIpCisgKgorICogR2l2ZW4gYSB0cmlnZ2VyIE9JRCBhbmQg dGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsCisgKiByZXR1cm4gYW4gT2JqVHJlZSByZXBy ZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQ3JlYXRlRmR3U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlD cmVhdGVGZHdTdG10ICpub2RlID0gKENyZWF0ZUZkd1N0bXQgKikgcGFyc2V0cmVlOworCUhlYXBU dXBsZQkJZmR3VHVwOworCUZvcm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIgZmR3Rm9ybTsKKwlS ZWxhdGlvbglyZWw7CisKKwlPYmpUcmVlCSAgICpjcmVhdGVTdG10OworCU9ialRyZWUJICAgKnRt cDsKKworCXJlbCA9IHRhYmxlX29wZW4oRm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZCwgUm93 RXhjbHVzaXZlTG9jayk7CisKKwlmZHdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoRk9SRUlHTkRBVEFX UkFQUEVST0lELAorCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKGZkd1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciBmb3JlaWduLWRhdGEgd3JhcHBlciAldSIsIG9iamVjdElkKTsKKworCWZkd0Zvcm0g PSAoRm9ybV9wZ19mb3JlaWduX2RhdGFfd3JhcHBlcikgR0VUU1RSVUNUKGZkd1R1cCk7CisKKwlj cmVhdGVTdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUiAl e2lkZW50aXR5fUkiLCAxLAorCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBOYW1l U3RyKGZkd0Zvcm0tPmZkd25hbWUpKTsKKworCS8qIGFkZCBIQU5ETEVSIGNsYXVzZSAqLworCWlm IChmZHdGb3JtLT5mZHdoYW5kbGVyID09IEludmFsaWRPaWQpCisJCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJOTyBIQU5ETEVSIiwgMCk7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEo IkhBTkRMRVIgJXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJICJoYW5kbGVyIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHdoYW5kbGVyKSk7CisJfQorCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2hhbmRsZXJ9cyIsIHRtcCk7CisKKwkvKiBh ZGQgVkFMSURBVE9SIGNsYXVzZSAqLworCWlmIChmZHdGb3JtLT5mZHd2YWxpZGF0b3IgPT0gSW52 YWxpZE9pZCkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIk5PIFZBTElEQVRPUiIsIDApOworCWVs c2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFUT1IgJXtwcm9jZWR1cmV9RCIs IDEsCisJCQkJCQkJICJ2YWxpZGF0b3IiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ IGZkd0Zvcm0tPmZkd3ZhbGlkYXRvcikpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVh dGVTdG10LCAiJXt2YWxpZGF0b3J9cyIsIHRtcCk7CisKKwkvKiBhZGQgYW4gT1BUSU9OUyBjbGF1 c2UsIGlmIGFueSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2dlbmVy aWNfb3B0aW9uc31zIiwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlvbnMobm9kZS0+b3B0aW9ucywg TlVMTCkpOworCisJUmVsZWFzZVN5c0NhY2hlKGZkd1R1cCk7CisJdGFibGVfY2xvc2UocmVsLCBS b3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVTdG10OworfQorCisvKgorICogZGVw YXJzZV9BbHRlckZkd1N0bXQKKyAqICBEZXBhcnNlIGFuIEFsdGVyRmR3U3RtdCAoQUxURVIgRk9S RUlHTiBEQVRBIFdSQVBQRVIpCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBw YXJzZXRyZWUgdGhhdCBjcmVhdGUgaXQsIHJldHVybiB0aGUKKyAqIEpTT04gYmxvYiByZXByZXNl bnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf QWx0ZXJGZHdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRmR3 U3RtdCAqbm9kZSA9IChBbHRlckZkd1N0bXQgKikgcGFyc2V0cmVlOworCUhlYXBUdXBsZQkJZmR3 VHVwOworCUZvcm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIgZmR3Rm9ybTsKKwlSZWxhdGlvbgly ZWw7CisJT2JqVHJlZQkgICAqYWx0ZXJTdG10OworCUxpc3QJICAgKmZkd19vcHRpb25zID0gTklM OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlyZWwgPSB0YWJsZV9vcGVuKEZvcmVpZ25EYXRhV3Jh cHBlclJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJZmR3VHVwID0gU2VhcmNoU3lz Q2FjaGUxKEZPUkVJR05EQVRBV1JBUFBFUk9JRCwKKwkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShv YmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChmZHdUdXApKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZm9yZWlnbi1kYXRhIHdyYXBwZXIgJXUiLCBvYmpl Y3RJZCk7CisKKwlmZHdGb3JtID0gKEZvcm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIpIEdFVFNU UlVDVChmZHdUdXApOworCisJYWx0ZXJTdG10ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIEZPUkVJ R04gREFUQSBXUkFQUEVSICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkJICAgImlkZW50aXR5Iiwg T2JqVHlwZVN0cmluZywgTmFtZVN0cihmZHdGb3JtLT5mZHduYW1lKSk7CisKKwkvKgorCSAqIEl0 ZXJhdGUgdGhyb3VnaCBvcHRpb25zLCB0byBzZWUgd2hhdCBjaGFuZ2VkLCBidXQgdXNlIGNhdGFs b2cgYXMgYmFzaXMKKwkgKiBmb3IgbmV3IHZhbHVlcy4KKwkgKi8KKwlmb3JlYWNoKGNlbGwsIG5v ZGUtPmZ1bmNfb3B0aW9ucykKKwl7CisJCURlZkVsZW0JICAgKmVsZW07CisJCU9ialRyZWUJICAg KnRtcDsKKworCQllbGVtID0gbGZpcnN0KGNlbGwpOworCisJCWlmIChwZ19zdHJjYXNlY21wKGVs ZW0tPmRlZm5hbWUsICJoYW5kbGVyIikgPT0gMCkKKwkJeworCQkJLyogYWRkIEhBTkRMRVIgY2xh dXNlICovCisJCQlpZiAoZmR3Rm9ybS0+ZmR3aGFuZGxlciA9PSBJbnZhbGlkT2lkKQorCQkJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJOTyBIQU5ETEVSIiwgMCk7CisJCQllbHNlCisJCQl7CisJCQkJ dG1wID0gbmV3X29ianRyZWVfVkEoIkhBTkRMRVIgJXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJ CQkgInByb2NlZHVyZSIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIGZkd0Zvcm0tPmZkd2hhbmRsZXIp KTsKKwkJCX0KKwkJCWZkd19vcHRpb25zID0gbGFwcGVuZChmZHdfb3B0aW9ucywgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChlbGVtLT5kZWZu YW1lLCAidmFsaWRhdG9yIikgPT0gMCkKKwkJeworCQkJLyogYWRkIFZBTElEQVRPUiBjbGF1c2Ug Ki8KKwkJCWlmIChmZHdGb3JtLT5mZHd2YWxpZGF0b3IgPT0gSW52YWxpZE9pZCkKKwkJCQl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiTk8gVkFMSURBVE9SIiwgMCk7CisJCQllbHNlCisJCQl7CisJCQkJ dG1wID0gbmV3X29ianRyZWVfVkEoIlZBTElEQVRPUiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJ CQkJCSAicHJvY2VkdXJlIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3dmFsaWRh dG9yKSk7CisJCQl9CisJCQlmZHdfb3B0aW9ucyA9IGxhcHBlbmQoZmR3X29wdGlvbnMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJfQorCisJLyogQWRkIEhBTkRMRVIvVkFMSURBVE9S IGlmIHNwZWNpZmllZCAqLworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJTdG10LCAiJXtmZHdf b3B0aW9uczogfXMiLCBmZHdfb3B0aW9ucyk7CisKKworCS8qIGFkZCBhbiBPUFRJT05TIGNsYXVz ZSwgaWYgYW55ICovCisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJTdG10LCAiJXtnZW5lcmlj X29wdGlvbnN9RCIsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5V TEwpKTsKKworCVJlbGVhc2VTeXNDYWNoZShmZHdUdXApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93 RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gYWx0ZXJTdG10OworfQorCisvKgorICogRGVwYXJz ZSBhIENSRUFURSBUWVBFIEFTIFJBTkdFIHN0YXRlbWVudAorICoKKyAqIEdpdmVuIGEgdHlwZSBP SUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQor ICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0NyZWF0ZVJhbmdlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJl ZSkKK3sKKwlPYmpUcmVlCSAgICpyYW5nZTsKKwlPYmpUcmVlCSAgICp0bXA7CisJTGlzdAkgICAq ZGVmaW5pdGlvbiA9IE5JTDsKKwlSZWxhdGlvbglwZ19yYW5nZTsKKwlIZWFwVHVwbGUJcmFuZ2VU dXA7CisJRm9ybV9wZ19yYW5nZSByYW5nZUZvcm07CisJU2NhbktleURhdGEga2V5WzFdOworCVN5 c1NjYW5EZXNjIHNjYW47CisKKwlwZ19yYW5nZSA9IHRhYmxlX29wZW4oUmFuZ2VSZWxhdGlvbklk LCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJQW51bV9w Z19yYW5nZV9ybmd0eXBpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJ CQkJT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2lu c2NhbihwZ19yYW5nZSwgUmFuZ2VUeXBpZEluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAx LCBrZXkpOworCisJcmFuZ2VUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChyYW5nZVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciByYW5nZSB3aXRoIHR5cGUgb2lkICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlyYW5n ZUZvcm0gPSAoRm9ybV9wZ19yYW5nZSkgR0VUU1RSVUNUKHJhbmdlVHVwKTsKKworCXJhbmdlID0g bmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJdG1wID0gbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLCBvYmplY3RJZCk7CisJYXBwZW5kX29iamVjdF9v YmplY3QocmFuZ2UsICIle2lkZW50aXR5fUQgQVMgUkFOR0UiLCB0bXApOworCisJLyogU1VCVFlQ RSAqLworCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwK KwkJCQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdzdWJ0eXBlKTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiU1VCVFlQRSA9ICV7dHlwZX1EIiwKKwkJCQkJCSAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAic3VidHlwZSIsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LCB0bXAp OworCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJLyogU1VCVFlQRV9PUENMQVNTICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3Jt LT5ybmdzdWJvcGMpKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9w ZXJhdG9yQ2xhc3NSZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdzdWJvcGMp OworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRV9PUENMQVNTID0gJXtvcGNsYXNzfUQi LAorCQkJCQkJCSAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm9wY2xhc3Mi LAorCQkJCQkJCSAib3BjbGFzcyIsIE9ialR5cGVPYmplY3QsIHRtcCk7CisJCWRlZmluaXRpb24g PSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8q IENPTExBVElPTiAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nY29sbGF0aW9uKSkK Kwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlv bklkLAorCQkJCQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdjb2xsYXRpb24pOworCQl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiQ09MTEFUSU9OID0gJXtjb2xsYXRpb259RCIsCisJCQkJCQkJIDIsCisJCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29sbGF0aW9uIiwKKwkJCQkJCQkgImNvbGxh dGlvbiIsIE9ialR5cGVPYmplY3QsIHRtcCk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmlu aXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIENBTk9OSUNBTCAqLwor CWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nY2Fub25pY2FsKSkKKwl7CisJCXRtcCA9IG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJ CSAgcmFuZ2VGb3JtLT5ybmdjYW5vbmljYWwpOworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FO T05JQ0FMID0gJXtjYW5vbmljYWx9RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiY2Fub25pY2FsIiwKKwkJCQkJCQkgImNhbm9uaWNhbCIsIE9ialR5cGVP YmplY3QsIHRtcCk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIFNVQlRZUEVfRElGRiAqLworCWlmIChPaWRJc1Zh bGlkKHJhbmdlRm9ybS0+cm5nc3ViZGlmZikpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHJhbmdlRm9ybS0+ cm5nc3ViZGlmZik7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFX0RJRkYgPSAle3N1 YnR5cGVfZGlmZn1EIiwKKwkJCQkJCQkgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJzdWJ0eXBlX2RpZmYiLAorCQkJCQkJCSAic3VidHlwZV9kaWZmIiwgT2JqVHlwZU9iamVj dCwgdG1wKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChyYW5nZSwgIigle2RlZmlu aXRpb246LCB9cykiLCBkZWZpbml0aW9uKTsKKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJ dGFibGVfY2xvc2UocGdfcmFuZ2UsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHJhbmdl OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckVudW1TdG10LgorICoKKyAqIEdpdmVuIGEg dHlwZSBPSUQgYW5kIGEgcGFyc2V0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpU cmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQWx0ZXJFbnVtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlBbHRlckVudW1TdG10ICpub2RlID0gKEFsdGVyRW51bVN0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUJICAgKmFsdGVyRW51bTsKKworCWFsdGVyRW51bSA9CW5ld19vYmp0cmVlX1ZBKCJB TFRFUiBUWVBFIiwgMCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJFbnVtLCAiJXtpZGVu dGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwlpZiAoIW5vZGUtPm9sZFZhbCkKKwl7 CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVyRW51bSwgIkFERCBWQUxVRSIpOworCQlhcHBl bmRfc3RyaW5nX29iamVjdChhbHRlckVudW0sICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkJ bm9kZS0+c2tpcElmTmV3VmFsRXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIiV7dmFsdWV9TCIsIG5vZGUtPm5ld1ZhbCk7 CisKKwkJaWYgKG5vZGUtPm5ld1ZhbE5laWdoYm9yKQorCQl7CisJCQlhcHBlbmRfc3RyaW5nX29i amVjdChhbHRlckVudW0sICIle2FmdGVyX29yX2JlZm9yZX1zIiwKKwkJCQkJCQkJbm9kZS0+bmV3 VmFsSXNBZnRlciA/ICJBRlRFUiIgOiAiQkVGT1JFIik7CisJCQlhcHBlbmRfc3RyaW5nX29iamVj dChhbHRlckVudW0sICIle25laWdoYm91cn1MIiwgbm9kZS0+bmV3VmFsTmVpZ2hib3IpOworCQl9 CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIlJFTkFN RSBWQUxVRSAle3ZhbHVlfUwgVE8iLAorCQkJCQkJCSBub2RlLT5vbGRWYWwpOworCQlhcHBlbmRf c3RyaW5nX29iamVjdChhbHRlckVudW0sICIle25ld3ZhbHVlfUwiLAorCQkJCQkJCSBub2RlLT5u ZXdWYWwpOworCX0KKworCXJldHVybiBhbHRlckVudW07Cit9CisKKy8qCisgKiBEZXBhcnNlIEFM VEVSIEVYVEVOU0lPTiAuLiBVUERBVEUgVE8gVkVSU0lPTgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJl ZSkKK3sKKwlBbHRlckV4dGVuc2lvblN0bXQgKm5vZGUgPSAoQWx0ZXJFeHRlbnNpb25TdG10ICop IHBhcnNldHJlZTsKKwlSZWxhdGlvbiAgICBwZ19leHRlbnNpb247CisJSGVhcFR1cGxlICAgZXh0 VHVwOworCUZvcm1fcGdfZXh0ZW5zaW9uIGV4dEZvcm07CisJT2JqVHJlZQkgICAqc3RtdDsKKwlP YmpUcmVlCSAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxs OworCisJcGdfZXh0ZW5zaW9uID0gdGFibGVfb3BlbihFeHRlbnNpb25SZWxhdGlvbklkLCBBY2Nl c3NTaGFyZUxvY2spOworCWV4dFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfZXh0 ZW5zaW9uLCBBbnVtX3BnX2V4dGVuc2lvbl9vaWQsICBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKGV4dFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBleHRlbnNpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlleHRGb3JtID0gKEZv cm1fcGdfZXh0ZW5zaW9uKSBHRVRTVFJVQ1QoZXh0VHVwKTsKKworCXN0bXQgPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgRVhURU5TSU9OICV7aWRlbnRpdHl9RCBVUERBVEUiLCAxLAorCQkJCQkJICAi aWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUoZXh0Rm9ybS0+ZXh0bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICAgTmFtZVN0cihleHRGb3Jt LT5leHRuYW1lKSkpOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVm RWxlbSAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChzdHJjbXAob3B0 LT5kZWZuYW1lLCAibmV3X3ZlcnNpb24iKSA9PSAwKQorCQl7CisJCQl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiVE8gJXt2ZXJzaW9ufUwiLCAyLAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAidmVyc2lvbiIsCisJCQkJCQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsIGRlZkdldFN0 cmluZyhvcHQpKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCQl9CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvcHRpb24gJXMi LCBvcHQtPmRlZm5hbWUpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwgIiV7b3B0 aW9uczogfXMiLCBsaXN0KTsKKworCXRhYmxlX2Nsb3NlKHBnX2V4dGVuc2lvbiwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXJldHVybiBzdG10OworfQorCisvKgorICogQUxURVIgRVhURU5TSU9OIGV4 dCBBREQvRFJPUCBvYmplY3QKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckV4 dGVuc2lvbkNvbnRlbnRzU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJ CQkJICAgT2JqZWN0QWRkcmVzcyBvYmplY3RBZGRyZXNzKQoreworCUFsdGVyRXh0ZW5zaW9uQ29u dGVudHNTdG10ICpub2RlID0gKEFsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10ICopIHBhcnNldHJl ZTsKKwlPYmpUcmVlCSAgICpzdG10OworCWNoYXIJICAgKmZtdDsKKworCUFzc2VydChub2RlLT5h Y3Rpb24gPT0gKzEgfHwgbm9kZS0+YWN0aW9uID09IC0xKTsKKworCWZtdCA9IHBzcHJpbnRmKCJB TFRFUiBFWFRFTlNJT04gJSV7ZXh0aWRlbnRpdHl9SSAlcyAlcyAlJXtvYmppZGVudGl0eX1zIiwK KwkJCQkgICBub2RlLT5hY3Rpb24gPT0gKzEgPyAiQUREIiA6ICJEUk9QIiwKKwkJCQkgICBzdHJp bmdpZnlfb2JqdHlwZShub2RlLT5vYmp0eXBlKSk7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEo Zm10LCAyLCAiZXh0aWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBub2RlLT5leHRu YW1lLAorCQkJCQkJICAib2JqaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBnZXRP YmplY3RJZGVudGl0eSgmb2JqZWN0QWRkcmVzcywgZmFsc2UpKTsKKworCXJldHVybiBzdG10Owor fQorLyoKKyAqIERlcGFyc2UgYW4gQ3JlYXRlQ2FzdFN0bXQuCisgKgorICogR2l2ZW4gYSBzZXF1 ZW5jZSBPSUQgYW5kIGEgcGFyc2V0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpU cmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlQ2FzdFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJQ3JlYXRlQ2FzdFN0bXQgKm5vZGUgPSAoQ3JlYXRlQ2FzdFN0bXQgKikgcGFy c2V0cmVlOworCVJlbGF0aW9uCWNhc3RyZWw7CisJSGVhcFR1cGxlCWNhc3RUdXA7CisJRm9ybV9w Z19jYXN0IGNhc3RGb3JtOworCU9ialRyZWUJICAgKmNyZWF0ZUNhc3Q7CisJY2hhcgkgICAqY29u dGV4dDsKKworCWNhc3RyZWwgPSB0YWJsZV9vcGVuKENhc3RSZWxhdGlvbklkLCBBY2Nlc3NTaGFy ZUxvY2spOworCWNhc3RUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhc3RyZWwsIEFu dW1fcGdfY2FzdF9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY2FzdFR1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjYXN0IHdpdGggT0lE ICV1Iiwgb2JqZWN0SWQpOworCWNhc3RGb3JtID0gKEZvcm1fcGdfY2FzdCkgR0VUU1RSVUNUKGNh c3RUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIENBU1Qg KCV7c291cmNldHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSAle21lY2hhbmlzbX1zICV7Y29udGV4 dH1zCisJICovCisJY3JlYXRlQ2FzdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgQ0FTVCAoJXtz b3VyY2V0eXBlfVQgQVMgJXt0YXJnZXR0eXBlfVQpIiwKKwkJCQkJCQkJMiwgInNvdXJjZXR5cGUi LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShjYXN0Rm9ybS0+ Y2FzdHNvdXJjZSwgLTEpLAorCQkJCQkJCQkidGFyZ2V0dHlwZSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKGNhc3RGb3JtLT5jYXN0dGFyZ2V0LCAtMSkpOwor CisJaWYgKG5vZGUtPmlub3V0KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVDYXN0LCAi JXttZWNoYW5pc219cyIsICJXSVRIIElOT1VUIik7CisJZWxzZSBpZiAobm9kZS0+ZnVuYyA9PSBO VUxMKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVDYXN0LCAiJXttZWNoYW5pc219cyIs ICJXSVRIT1VUIEZVTkNUSU9OIik7CisJZWxzZQorCXsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOwor CQlTdHJpbmdJbmZvRGF0YSBmdW5jOworCQlIZWFwVHVwbGUJZnVuY1R1cDsKKwkJRm9ybV9wZ19w cm9jIGZ1bmNGb3JtOworCQlpbnQJCQlpOworCisJCWZ1bmNUdXAgPSBTZWFyY2hTeXNDYWNoZTEo UFJPQ09JRCwgY2FzdEZvcm0tPmNhc3RmdW5jKTsKKwkJZnVuY0Zvcm0gPSAoRm9ybV9wZ19wcm9j KSBHRVRTVFJVQ1QoZnVuY1R1cCk7CisKKwkJaW5pdFN0cmluZ0luZm8oJmZ1bmMpOworCQlhcHBl bmRTdHJpbmdJbmZvKCZmdW5jLCAiJXMoIiwKKwkJCQkJCXF1b3RlX3F1YWxpZmllZF9pZGVudGlm aWVyKGdldF9uYW1lc3BhY2VfbmFtZShmdW5jRm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJCQkJCQkJ CQkJCSAgIE5hbWVTdHIoZnVuY0Zvcm0tPnByb25hbWUpKSk7CisJCWZvciAoaSA9IDA7IGkgPCBm dW5jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZ1bmMs CisJCQkJCQkJCSAgIGZvcm1hdF90eXBlX2JlX3F1YWxpZmllZChmdW5jRm9ybS0+cHJvYXJndHlw ZXMudmFsdWVzW2ldKSk7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZmdW5jLCAnKScpOworCisJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJXSVRIIEZVTkNUSU9OICV7Y2FzdGZ1bmN0aW9ufXMi LCAxLAorCQkJCQkJCSAiY2FzdGZ1bmN0aW9uIiwgT2JqVHlwZVN0cmluZywgZnVuYy5kYXRhKTsK KwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlQ2FzdCwgIiV7bWVjaGFuaXNtfXMiLCB0bXBv YmopOworCisJCVJlbGVhc2VTeXNDYWNoZShmdW5jVHVwKTsKKwl9CisKKwlzd2l0Y2ggKG5vZGUt PmNvbnRleHQpCisJeworCQljYXNlIENPRVJDSU9OX0lNUExJQ0lUOgorCQkJY29udGV4dCA9ICJB UyBJTVBMSUNJVCI7CisJCQlicmVhazsKKwkJY2FzZSBDT0VSQ0lPTl9BU1NJR05NRU5UOgorCQkJ Y29udGV4dCA9ICJBUyBBU1NJR05NRU5UIjsKKwkJCWJyZWFrOworCQljYXNlIENPRVJDSU9OX0VY UExJQ0lUOgorCQkJY29udGV4dCA9ICIiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9n KEVSUk9SLCAiaW52YWxpZCBjb2VyY2lvbiBjb2RlICVjIiwgbm9kZS0+Y29udGV4dCk7CisJCQly ZXR1cm4gTlVMTDsJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworCX0KKwlhcHBlbmRfc3RyaW5n X29iamVjdChjcmVhdGVDYXN0LCAiJXtjb250ZXh0fXMiLCBjb250ZXh0KTsKKworCXRhYmxlX2Ns b3NlKGNhc3RyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRlQ2FzdDsKK30K KworLyoKKyAqIERlcGFyc2UgYWxsIHRoZSBjb2xsZWN0ZWQgc3ViY29tbWFuZHMgYW5kIHJldHVy biBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUKKyAqIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJUYWJsZVN0bXQoQ29sbGVjdGVkQ29tbWFuZCAq Y21kKQoreworCU9ialRyZWUJICAgKmFsdGVyVGFibGVTdG10OworCU9ialRyZWUJICAgKnRtcG9i ajsKKwlPYmpUcmVlCSAgICp0bXBvYmoyOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlSZWxhdGlv bglyZWw7CisJTGlzdAkgICAqc3ViY21kcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWNo YXIJICAgKmZtdHN0cjsKKwljb25zdCBjaGFyICpyZWx0eXBlOworCWJvb2wJCWlzdHlwZSA9IGZh bHNlOworCUxpc3QJICAgKmV4cHJzID0gTklMOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1Rf QWx0ZXJUYWJsZSk7CisKKwlyZWwgPSByZWxhdGlvbl9vcGVuKGNtZC0+ZC5hbHRlclRhYmxlLm9i amVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9m b3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCWNtZC0+ZC5hbHRlclRh YmxlLm9iamVjdElkKTsKKworCXN3aXRjaCAocmVsLT5yZF9yZWwtPnJlbGtpbmQpCisJeworCQlj YXNlIFJFTEtJTkRfUkVMQVRJT046CisJCWNhc2UgUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRToK KwkJCXJlbHR5cGUgPSAiVEFCTEUiOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9JTkRFWDoK KwkJY2FzZSBSRUxLSU5EX1BBUlRJVElPTkVEX0lOREVYOgorCQkJcmVsdHlwZSA9ICJJTkRFWCI7 CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX1ZJRVc6CisJCQlyZWx0eXBlID0gIlZJRVciOwor CQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9DT01QT1NJVEVfVFlQRToKKwkJCXJlbHR5cGUgPSAi VFlQRSI7CisJCQlpc3R5cGUgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9GT1JF SUdOX1RBQkxFOgorCQkJcmVsdHlwZSA9ICJGT1JFSUdOIFRBQkxFIjsKKwkJCWJyZWFrOworCisJ CS8qIFRPRE8gc3VwcG9ydCBmb3IgcGFydGl0aW9uZWQgdGFibGUgKi8KKworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgcmVsa2luZCAlZCIsIHJlbC0+cmRfcmVsLT5yZWxr aW5kKTsKKwl9CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiByZWx0 eXBlICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9cworCSAqLworCWZtdHN0ciA9IHBzcHJpbnRm KCJBTFRFUiAlcyIsIHJlbHR5cGUpOworCWFsdGVyVGFibGVTdG10ID0gbmV3X29ianRyZWUoZm10 c3RyKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWwtPnJkX3JlbC0+ cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsK KwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclRhYmxlU3RtdCwgIiV7aWRlbnRpdHl9RCIsIHRt cG9iaik7CisKKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMpCisJewor CQlDb2xsZWN0ZWRBVFN1YmNtZCAqc3ViID0gKENvbGxlY3RlZEFUU3ViY21kICopIGxmaXJzdChj ZWxsKTsKKwkJQWx0ZXJUYWJsZUNtZAkqc3ViY21kID0gKEFsdGVyVGFibGVDbWQgKikgc3ViLT5w YXJzZXRyZWU7CisJCU9ialRyZWUJICAgKnRyZWU7CisKKwkJQXNzZXJ0KElzQShzdWJjbWQsIEFs dGVyVGFibGVDbWQpKTsKKworCQlzd2l0Y2ggKHN1YmNtZC0+c3VidHlwZSkKKwkJeworCQkJY2Fz ZSBBVF9BZGRDb2x1bW46CisJCQljYXNlIEFUX0FkZENvbHVtblJlY3Vyc2U6CisJCQkJLyogWFhY IG5lZWQgdG8gc2V0IHRoZSAicmVjdXJzZSIgYml0IHNvbWV3aGVyZT8gKi8KKwkJCQlBc3NlcnQo SXNBKHN1YmNtZC0+ZGVmLCBDb2x1bW5EZWYpKTsKKwkJCQl0cmVlID0gZGVwYXJzZV9Db2x1bW5E ZWYocmVsLCBkcGNvbnRleHQsIGZhbHNlLAorCQkJCQkJCQkJCSAoQ29sdW1uRGVmICopIHN1YmNt ZC0+ZGVmLCB0cnVlLCAmZXhwcnMpOworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJBREQgJXMgJSV7 ZGVmaW5pdGlvbn1zIiwKKwkJCQkJCQkJICBpc3R5cGUgPyAiQVRUUklCVVRFIiA6ICJDT0xVTU4i KTsKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbHVtbiIsCisJCQkJCQkJCQkgImRlZmluaXRpb24i LCBPYmpUeXBlT2JqZWN0LCB0cmVlKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJ bmRleENvbnN0cmFpbnQ6CisJCQkJeworCQkJCQlJbmRleFN0bXQgICppc3RtdDsKKwkJCQkJUmVs YXRpb24JaWR4OworCQkJCQlPaWQJCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7 CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW5kZXhTdG10KSk7CisJCQkJCWlzdG10 ID0gKEluZGV4U3RtdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQlBc3NlcnQoaXN0bXQtPmlzY29u c3RyYWludCAmJiBpc3RtdC0+dW5pcXVlKTsKKworCQkJCQlpZHggPSByZWxhdGlvbl9vcGVuKGlz dG10LT5pbmRleE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJCQkvKgorCQkJCQkgKiBWZXJi b3NlIHN5bnRheAorCQkJCQkgKgorCQkJCQkgKiBBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2Nv bnN0cmFpbnRfdHlwZX1zIFVTSU5HIElOREVYCisJCQkJCSAqICVpbmRleF9uYW1lfUkgJXtkZWZl cnJhYmxlfXMgJXtpbml0X2RlZmVycmVkfXMKKwkJCQkJICovCisJCQkJCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSIsIDIsCisJCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IHVzaW5nIGluZGV4IiwKKwkJCQkJCQkJ CQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCkp OworCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7Y29uc3RyYWludF90eXBl fXMiLCBpc3RtdC0+ZGVmZXJyYWJsZSA/CisJCQkJCQkJCQkJICJERUZFUlJBQkxFIiA6ICJOT1Qg REVGRVJSQUJMRSIpOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICJVU0lORyBJ TkRFWCAle2luZGV4X25hbWV9SSIsCisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KGlkeCkpOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2RlZmVycmFibGV9 cyIsIGlzdG10LT5kZWZlcnJhYmxlID8KKwkJCQkJCQkJCQkgIkRFRkVSUkFCTEUiIDogIk5PVCBE RUZFUlJBQkxFIik7CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aW5pdF9k ZWZlcnJlZH1zIiwgaXN0bXQtPmluaXRkZWZlcnJlZCA/CisJCQkJCQkJCQkJICJJTklUSUFMTFkg REVGRVJSRUQiIDogIklOSVRJQUxMWSBJTU1FRElBVEUiKTsKKworCQkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCQkJCQlyZWxhdGlv bl9jbG9zZShpZHgsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX1JlQWRkSW5kZXg6CisJCQljYXNlIEFUX1JlQWRkQ29uc3RyYWludDoKKwkJCWNhc2Ug QVRfUmVBZGRDb21tZW50OgorCQkJY2FzZSBBVF9SZXBsYWNlUmVsT3B0aW9uczoKKwkJCQkvKiBT dWJ0eXBlcyB1c2VkIGZvciBpbnRlcm5hbCBvcGVyYXRpb25zOyBub3RoaW5nIHRvIGRvIGhlcmUg Ki8KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRDb2x1bW5Ub1ZpZXc6CisJCQkJLyogQ1JF QVRFIE9SIFJFUExBQ0UgVklFVyAtLSBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9Db2x1bW5EZWZhdWx0OgorCQkJCWlmIChzdWJjbWQtPmRlZiA9PSBOVUxM KQorCQkJCXsKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2Nv bHVtbn1JIERST1AgREVGQVVMVCIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImRyb3AgZGVmYXVsdCIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlMaXN0CSAgICpkcGNv bnRleHQ7CisJCQkJCUhlYXBUdXBsZQlhdHRydHVwOworCQkJCQlBdHRyTnVtYmVyCWF0dG5vOwor CisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBT RVQgREVGQVVMVCIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBk ZWZhdWx0IiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFt ZSk7CisKKwkJCQkJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJ CQkJCWF0dHJ0dXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUoUmVsYXRpb25HZXRSZWxpZChyZWwp LCBzdWJjbWQtPm5hbWUpOworCQkJCQlhdHRubyA9ICgoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNU UlVDVChhdHRydHVwKSktPmF0dG51bTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2Jq LCAiJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQo cmVsLCBhdHRubywgZHBjb250ZXh0LCBOVUxMKSk7CisJCQkJCVJlbGVhc2VTeXNDYWNoZShhdHRy dHVwKTsKKwkJCQl9CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wTm90TnVsbDoK KwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJP UCBOT1QgTlVMTCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBu b3QgbnVsbCIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFt ZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0Tm90TnVsbDoKKwkJCQl0bXBvYmog PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIE5PVCBOVUxMIiwg MiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgbm90IG51bGwiLAorCQkJ CQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0Ryb3BFeHByZXNzaW9uOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIEVYUFJFU1NJT04iLCAyLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgZXhwcmVzc2lvbiIsCisJCQkJCQkJ CQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJCQkJIHN1YmNt ZC0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiOiAiIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfU2V0U3RhdGlzdGljczoKKwkJCQl7CisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYs IEludGVnZXIpKTsKKwkJCQkJaWYgKHN1YmNtZC0+bmFtZSkKKwkJCQkJCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RBVElTVElDUyAle3N0YXRp c3RpY3N9biIsCisJCQkJCQkJCQkJCSAzLAorCQkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAic2V0IHN0YXRpc3RpY3MiLAorCQkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkJICJzdGF0aXN0aWNzIiwgT2JqVHlwZUludGVn ZXIsCisJCQkJCQkJCQkJCSBpbnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQkJ ZWxzZQorCQkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVt bn1uIFNFVCBTVEFUSVNUSUNTICV7c3RhdGlzdGljc31uIiwKKwkJCQkJCQkJCQkJIDMsCisJCQkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RhdGlzdGljcyIsCisJCQkJCQkJ CQkJCSAiY29sdW1uIiwgT2JqVHlwZUludGVnZXIsIHN1YmNtZC0+bnVtLAorCQkJCQkJCQkJCQkg InN0YXRpc3RpY3MiLCBPYmpUeXBlSW50ZWdlciwKKwkJCQkJCQkJCQkJIGludFZhbCgoSW50ZWdl ciAqKSBzdWJjbWQtPmRlZikpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf U2V0T3B0aW9uczoKKwkJCWNhc2UgQVRfUmVzZXRPcHRpb25zOgorCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KAorCQkJCQkJCQkJICBkZXBhcnNlX0NvbHVt blNldE9wdGlvbnMoc3ViY21kKSkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFN0b3Jh Z2U6CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5nKSk7CisJCQkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVE9SQUdFICV7c3Rv cmFnZX1zIiwgMywKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RvcmFn ZSIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJ CQkJCQkJCSAic3RvcmFnZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyVmFsKChTdHJp bmcgKikgc3ViY21kLT5kZWYpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRDb21w cmVzc2lvbjoKKwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBTdHJpbmcpKTsKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIENPTVBSRVNT SU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfXMiLAorCQkJCQkJCQkJIDMsCisJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGNvbXByZXNzaW9uIiwKKwkJCQkJCQkJCSAiY29sdW1u IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJICJjb21wcmVzc2lvbl9t ZXRob2QiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0clZhbCgoU3RyaW5nICopIHN1YmNt ZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENvbHVtblJlY3Vyc2U6 CisJCQljYXNlIEFUX0Ryb3BDb2x1bW46CisJCQkJZm10c3RyID0gcHNwcmludGYoIkRST1AgJXMg JSV7Y29sdW1ufUkiLAorCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIp OworCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGNvbHVtbiIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlX1ZB KCJDQVNDQURFIiwgMSwKKwkJCQkJCQkJCSAgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgc3ViY21k LT5iZWhhdmlvcik7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtjYXNjYWRl fXMiLCB0bXBvYmoyKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluZGV4Ogor CQkJCXsKKwkJCQkJT2lkCQkJaWR4T2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlJ bmRleFN0bXQgICppc3RtdDsKKwkJCQkJUmVsYXRpb24JaWR4OworCQkJCQljb25zdCBjaGFyICpp ZHhuYW1lOworCQkJCQlPaWQJCQljb25zdHJPaWQ7CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQt PmRlZiwgSW5kZXhTdG10KSk7CisJCQkJCWlzdG10ID0gKEluZGV4U3RtdCAqKSBzdWJjbWQtPmRl ZjsKKworCQkJCQlpZiAoIWlzdG10LT5pc2NvbnN0cmFpbnQpCisJCQkJCQlicmVhazsKKworCQkJ CQlpZHggPSByZWxhdGlvbl9vcGVuKGlkeE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQkJaWR4 bmFtZSA9IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeCk7CisKKwkJCQkJY29uc3RyT2lkID0g Z2V0X3JlbGF0aW9uX2NvbnN0cmFpbnRfb2lkKAorCQkJCQkJY21kLT5kLmFsdGVyVGFibGUub2Jq ZWN0SWQsIGlkeG5hbWUsIGZhbHNlKTsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi QUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCQkJICJuYW1l IiwgT2JqVHlwZVN0cmluZywgaWR4bmFtZSwKKwkJCQkJCQkJCQkgImRlZmluaXRpb24iLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJCQkJCSBwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBs ZShjb25zdHJPaWQpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisKKwkJCQkJcmVsYXRpb25fY2xvc2UoaWR4LCBBY2Nlc3NTaGFy ZUxvY2spOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRDb25zdHJhaW50Ogor CQkJY2FzZSBBVF9BZGRDb25zdHJhaW50UmVjdXJzZToKKwkJCQl7CisJCQkJCS8qIFhYWCBuZWVk IHRvIHNldCB0aGUgInJlY3Vyc2UiIGJpdCBzb21ld2hlcmU/ICovCisJCQkJCU9pZAkJCWNvbnN0 ck9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJYm9vbAkJaXNudWxsOworCQkJCQlI ZWFwVHVwbGUJdHVwOworCQkJCQlEYXR1bQkJdmFsOworCQkJCQlDb25zdHJhaW50ICpjb25zdHI7 CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgQ29uc3RyYWludCkpOworCQkJCQljb25z dHIgPSAgY2FzdE5vZGUoQ29uc3RyYWludCwgc3ViY21kLT5kZWYpOworCisJCQkJCWlmICghY29u c3RyLT5za2lwX3ZhbGlkYXRpb24pCisJCQkJCXsKKwkJCQkJCXR1cCA9IFNlYXJjaFN5c0NhY2hl MShDT05TVFJPSUQsIE9iamVjdElkR2V0RGF0dW0oY29uc3RyT2lkKSk7CisKKwkJCQkJCWlmIChI ZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJCQkJCQl7CisJCQkJCQkJY2hhcgkgICAqY29uYmluOwor CisJCQkJCQkJLyogRmV0Y2ggY29uc3RyYWludCBleHByZXNzaW9uIGluIHBhcnNldHJlZSBmb3Jt ICovCisJCQkJCQkJdmFsID0gU3lzQ2FjaGVHZXRBdHRyKENPTlNUUk9JRCwgdHVwLAorCQkJCQkJ CQkJCQkJICBBbnVtX3BnX2NvbnN0cmFpbnRfY29uYmluLCAmaXNudWxsKTsKKworCQkJCQkJCWlm ICghaXNudWxsKQorCQkJCQkJCXsKKwkJCQkJCQkJY29uYmluID0gVGV4dERhdHVtR2V0Q1N0cmlu Zyh2YWwpOworCQkJCQkJCQlleHBycyA9IGxhcHBlbmQoZXhwcnMsIHN0cmluZ1RvTm9kZShjb25i aW4pKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKKwkJCQkJCX0K KwkJCQkJfQorCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBREQgQ09OU1RSQUlOVCAl e25hbWV9SSAle2RlZmluaXRpb259cyIsIDMsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImFkZCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5n LCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCksCisJCQkJCQkJCQkJICJkZWZpbml0aW9u IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFu ZF9zaW1wbGUoY29uc3RyT2lkKSk7CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9BbHRlckNvbnN0cmFpbnQ6CisJCQkJeworCQkJCQlPaWQJCWNvbnN0ck9pZCA9IHN1Yi0+YWRk cmVzcy5vYmplY3RJZDsKKwkJCQkJQ29uc3RyYWludCAqYyA9IChDb25zdHJhaW50ICopIHN1YmNt ZC0+ZGVmOworCisJCQkJCS8qIElmIG5vIGNvbnN0cmFpbnQgd2FzIGFsdGVyZWQsIHNpbGVudGx5 IHNraXAgaXQgKi8KKwkJCQkJaWYgKCFPaWRJc1ZhbGlkKGNvbnN0ck9pZCkpCisJCQkJCQlicmVh azsKKworCQkJCQlBc3NlcnQoSXNBKGMsIENvbnN0cmFpbnQpKTsKKwkJCQkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIkFMVEVSIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZlcnJhYmxlfXMgJXtp bml0X2RlZmVycmVkfXMiLAorCQkJCQkJCQkJCSA0LAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJhbHRlciBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkgIm5hbWUiLCBPYmpUeXBl U3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCksCisJCQkJCQkJCQkJICJkZWZl cnJhYmxlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgYy0+ZGVmZXJyYWJsZSA/ICJERUZF UlJBQkxFIiA6ICJOT1QgREVGRVJSQUJMRSIsCisJCQkJCQkJCQkJICJpbml0X2RlZmVycmVkIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgYy0+aW5pdGRlZmVycmVkID8gIklOSVRJQUxMWSBE RUZFUlJFRCIgOiAiSU5JVElBTExZIElNTUVESUFURSIpOworCisJCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9WYWxpZGF0ZUNvbnN0cmFpbnRSZWN1cnNlOgorCQkJY2FzZSBBVF9W YWxpZGF0ZUNvbnN0cmFpbnQ6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlZBTElEQVRF IENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgInZhbGlkYXRlIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJICJjb25zdHJhaW50Iiwg T2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9Ecm9wQ29uc3RyYWludFJlY3Vyc2U6CisJCQljYXNlIEFUX0Ryb3BDb25zdHJhaW50OgorCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QIENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUki LCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgY29uc3RyYWludCIs CisJCQkJCQkJCQkgImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29sdW1uVHlwZToKKwkJCQl7CisJCQkJ CVR1cGxlRGVzYyB0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCQkJCQlGb3JtX3Bn X2F0dHJpYnV0ZSBhdHQ7CisJCQkJCUNvbHVtbkRlZgkgICAqZGVmOworCisJCQkJCWF0dCA9ICYo dHVwZGVzYy0+YXR0cnNbc3ViLT5hZGRyZXNzLm9iamVjdFN1YklkIC0gMV0pOworCQkJCQlkZWYg PSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCQkJCQlBc3NlcnQoSXNBKGRlZiwgQ29sdW1u RGVmKSk7CisKKwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCQkJICoKKwkJCQkJ ICogQ29tcG9zaXRlIHR5cGVzOiBBTFRFUiByZWx0eXBlICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQ RQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xsYXRpb259cyBBVFRSSUJVVEUgJXtjYXNjYWRl fXMKKwkJCQkJICoKKwkJCQkJICogTm9ybWFsIHR5cGVzOiBBTFRFUiByZWx0eXBlICV7Y29sdW1u fUkgU0VUIERBVEEgVFlQRQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xsYXRpb259cyBDT0xV TU4gJXt1c2luZ31zCisJCQkJCSAqLworCQkJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMg JSV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRSIsCisJCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJV VEUiIDogIkNPTFVNTiIpOworCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwg MiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWx0ZXIgY29sdW1uIHR5cGUi LAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJ CQkJLyogQWRkIHRoZSBUWVBFIGNsYXVzZSAqLworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXBvYmosICIle2RhdGF0eXBlfVQiLAorCQkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShh dHQtPmF0dHR5cGlkLAorCQkJCQkJCQkJCQkJCQkJICBhdHQtPmF0dHR5cG1vZCkpOworCisJCQkJ CS8qIEFkZCBhIENPTExBVEUgY2xhdXNlLCBpZiBuZWVkZWQgKi8KKwkJCQkJdG1wb2JqMiA9IG5l d19vYmp0cmVlKCJDT0xMQVRFIik7CisJCQkJCWlmIChPaWRJc1ZhbGlkKGF0dC0+YXR0Y29sbGF0 aW9uKSkKKwkJCQkJeworCQkJCQkJT2JqVHJlZSAqY29sbG5hbWU7CisKKwkJCQkJCWNvbGxuYW1l ID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJCQkgICBhdHQtPmF0dGNvbGxhdGlvbik7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXBvYmoyLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJCQkJCX0KKwkJCQkJZWxzZQor CQkJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iajIsICJwcmVzZW50IiwgZmFsc2UpOworCQkJ CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle2NvbGxhdGlvbn1zIiwgdG1wb2JqMik7 CisKKwkJCQkJLyogSWYgbm90IGEgY29tcG9zaXRlIHR5cGUsIGFkZCB0aGUgVVNJTkcgY2xhdXNl ICovCisJCQkJCWlmICghaXN0eXBlKQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJICogSWYgdGhl cmUncyBhIFVTSU5HIGNsYXVzZSwgdHJhbnNmb3JtQWx0ZXJUYWJsZVN0bXQKKwkJCQkJCSAqIHJh biBpdCB0aHJvdWdoIHRyYW5zZm9ybUV4cHIgYW5kIHN0b3JlZCB0aGUKKwkJCQkJCSAqIHJlc3Vs dGluZyBub2RlIGluIGNvb2tlZF9kZWZhdWx0LCB3aGljaCB3ZSBjYW4gdXNlCisJCQkJCQkgKiBo ZXJlLgorCQkJCQkJICovCisJCQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWUoIlVTSU5HIik7CisJ CQkJCQlpZiAoZGVmLT5yYXdfZGVmYXVsdCkKKwkJCQkJCXsKKwkJCQkJCQlEYXR1bQlkZXBhcnNl ZDsKKwkJCQkJCQljaGFyICAgKmRlZmV4cHI7CisKKwkJCQkJCQlleHBycyA9IGxhcHBlbmQoZXhw cnMsIGRlZi0+Y29va2VkX2RlZmF1bHQpOworCQkJCQkJCWRlZmV4cHIgPSBub2RlVG9TdHJpbmco ZGVmLT5jb29rZWRfZGVmYXVsdCk7CisJCQkJCQkJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNh bGwyKHBnX2dldF9leHByLAorCQkJCQkJCQkJCQkJCQkgICBDU3RyaW5nR2V0VGV4dERhdHVtKGRl ZmV4cHIpLAorCQkJCQkJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJCQkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iajIsICIle2V4cHJlc3Npb259cyIsCisJCQkJCQkJ CQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCQkJCQkJfQorCQkJCQkJZWxz ZQorCQkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmoyLCAicHJlc2VudCIsIGZhbHNlKTsK KwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7dXNpbmd9cyIsIHRtcG9iajIp OworCQkJCQl9CisKKwkJCQkJLyogSWYgaXQncyBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhlIENB U0NBREUgY2xhdXNlICovCisJCQkJCWlmIChpc3R5cGUpCisJCQkJCXsKKwkJCQkJCXRtcG9iajIg PSBuZXdfb2JqdHJlZSgiQ0FTQ0FERSIpOworCQkJCQkJaWYgKHN1YmNtZC0+YmVoYXZpb3IgIT0g RFJPUF9DQVNDQURFKQorCQkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmoyLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7Y2FzY2Fk ZX1zIiwgdG1wb2JqMik7CisJCQkJCX0KKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKyNpZmRl ZiBUT0RPTElTVAorCQkJY2FzZSBBVF9BbHRlckNvbHVtbkdlbmVyaWNPcHRpb25zOgorCQkJCXRt cG9iaiA9IGRlcGFyc2VfRmR3T3B0aW9ucygoTGlzdCAqKSBzdWJjbWQtPmRlZiwKKwkJCQkJCQkJ CQkgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJY2FzZSBBVF9DaGFu Z2VPd25lcjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiT1dORVIgVE8gJXtvd25lcn1J IiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjaGFuZ2Ugb3duZXIiLAor CQkJCQkJCQkJICJvd25lciIsICBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIGdldF9yb2xlc3Bl Y19uYW1lKHN1YmNtZC0+bmV3b3duZXIpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9D bHVzdGVyT246CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkNMVVNURVIgT04gJXtpbmRl eH1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjbHVzdGVyIG9uIiwK KwkJCQkJCQkJCSAiaW5kZXgiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDbHVzdGVyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJTRVQgV0lUSE9VVCBDTFVTVEVSIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJzZXQgd2l0aG91dCBjbHVzdGVyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfU2V0TG9nZ2VkOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgTE9HR0VE IiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgbG9nZ2VkIik7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0VW5Mb2dnZWQ6CisJCQkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIlNFVCBVTkxPR0dFRCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAic2V0IHVubG9nZ2VkIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJv cE9pZHM6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBXSVRIT1VUIE9JRFMiLCAx LAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB3aXRob3V0IG9pZHMiKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0QWNjZXNzTWV0aG9kOgorCQkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJTRVQgQUNDRVNTIE1FVEhPRCAle2FjY2Vzc19tZXRob2R9SSIsIDIs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGFjY2VzcyBtZXRob2QiLAor CQkJCQkJCQkJICJhY2Nlc3NfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0VGFibGVTcGFjZToKKwkJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiU0VUIFRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAyLAorCQkJCQkJ CQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB0YWJsZXNwYWNlIiwKKwkJCQkJCQkJCSAi dGFibGVzcGFjZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfU2V0UmVsT3B0aW9uczoKKwkJCWNhc2UgQVRfUmVzZXRSZWxPcHRpb25z OgorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KAorCQkJ CQkJCQkJICBkZXBhcnNlX1JlbFNldE9wdGlvbnMoc3ViY21kKSkpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0VuYWJsZVRyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJM RSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJlbmFibGUgdHJpZ2dlciIsCisJCQkJCQkJCQkgInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5n LCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZUFsd2F5 c1RyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBBTFdBWVMgVFJJR0dF UiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5h YmxlIGFsd2F5cyB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcs IHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUmVwbGlj YVRyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSRVBMSUNBIFRSSUdH RVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVu YWJsZSByZXBsaWNhIHRyaWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJp ZzoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklHR0VSICV7dHJpZ2dl cn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdn ZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnQWxsOgorCQkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiBBTEwiLCAxLAorCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0Rpc2FibGVUcmlnQWxsOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJESVNBQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJkaXNhYmxlIHRyaWdnZXIgYWxsIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RW5hYmxlVHJpZ1VzZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBUUklH R0VSIFVTRVIiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0 cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ1Vz ZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJR0dFUiBVU0VSIiwg MSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIgdXNl ciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJ1bGU6CisJCQkJdG1wb2Jq ID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0VuYWJsZUFsd2F5c1J1bGU6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBB TFdBWVMgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiZW5hYmxlIGFsd2F5cyBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJpbmcs IHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUmVwbGlj YVJ1bGU6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSRVBMSUNBIFJVTEUg JXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBy ZXBsaWNhIHJ1bGUiLAorCQkJCQkJCQkJICJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5u YW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlUnVsZToKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHJ1bGUiLAorCQkJCQkJCQkJICJydWxl IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9BZGRJbmhlcml0OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJJTkhFUklUICV7 cGFyZW50fUQiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImluaGVyaXQi LAorCQkJCQkJCQkJICJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJ IHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ry b3BJbmhlcml0OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJOTyBJTkhFUklUICV7cGFy ZW50fUQiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgaW5oZXJp dCIsCisJCQkJCQkJCQkgInBhcmVudCIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ CQkgc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf QWRkT2Y6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9GICV7dHlwZV9vZn1UIiwgMiwK KwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgb2YiLAorCQkJCQkJCQkJICJ0 eXBlX29mIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShz dWItPmFkZHJlc3Mub2JqZWN0SWQsIC0xKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RHJvcE9mOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJOT1QgT0YiLCAxLAorCQkJCQkJ CQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgIm5vdCBvZiIpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX1JlcGxpY2FJZGVudGl0eToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi UkVQTElDQSBJREVOVElUWSIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi cmVwbGljYSBpZGVudGl0eSIpOworCQkJCXN3aXRjaCAoKChSZXBsaWNhSWRlbnRpdHlTdG10ICop IHN1YmNtZC0+ZGVmKS0+aWRlbnRpdHlfdHlwZSkKKwkJCQl7CisJCQkJCWNhc2UgUkVQTElDQV9J REVOVElUWV9ERUZBVUxUOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtp ZGVudH1zIiwgIkRFRkFVTFQiKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURF TlRJVFlfRlVMTDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aWRlbnR9 cyIsICJGVUxMIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZX05P VEhJTkc6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2lkZW50fXMiLCAi Tk9USElORyIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9JTkRF WDoKKwkJCQkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZV9WQSgiVVNJTkcgSU5ERVggJXtpbmRleH1J IiwgMSwKKwkJCQkJCQkJCQkJICAiaW5kZXgiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQkg ICgoUmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJjbWQtPmRlZiktPm5hbWUpOworCQkJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtpZGVudH1zIiwgdG1wb2JqMik7CisJCQkJCQli cmVhazsKKwkJCQl9CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUm93U2VjdXJp dHk6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBST1cgTEVWRUwgU0VDVVJJ VFkiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSByb3cgc2Vj dXJpdHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlUm93U2VjdXJpdHk6 CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUk9XIExFVkVMIFNFQ1VSSVRZ IiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHJvdyBzZWN1 cml0eSIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCQkJCWJyZWFrOworI2lmZGVmIFRPRE9MSVNUCisJCQljYXNlIEFUX0dlbmVy aWNPcHRpb25zOgorCQkJCXRtcG9iaiA9IGRlcGFyc2VfRmR3T3B0aW9ucygoTGlzdCAqKSBzdWJj bWQtPmRlZiwgTlVMTCk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNhc2UgQVRfQXR0YWNo UGFydGl0aW9uOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBVFRBQ0ggUEFSVElUSU9O ICV7cGFydGl0aW9uX2lkZW50aXR5fUQiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImF0dGFjaCBwYXJ0aXRpb24iLAorCQkJCQkJCQkJICJwYXJ0aXRpb25faWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChS ZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJ ZCkpOworCisJCQkJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9O RURfVEFCTEUpCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7cGFydGl0aW9u X2JvdW5kfXMiLAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKHN1Yi0+YWRk cmVzcy5vYmplY3RJZCkpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0RldGFjaFBhcnRp dGlvbjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiREVUQUNIIFBBUlRJVElPTiAle3Bh cnRpdGlvbl9pZGVudGl0eX1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJkZXRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCSAicGFydGl0aW9uX2lkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRp b25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfRGV0YWNoUGFydGl0aW9uRmluYWxpemU6CisJCQkJ dG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRl bnRpdHl9RCBGSU5BTElaRSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZGV0YWNoIHBhcnRpdGlvbiBmaW5hbGl6ZSIsCisJCQkJCQkJCQkgInBhcnRpdGlvbl9pZGVudGl0 eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNzLm9iamVj dElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0FkZElkZW50aXR5OgorCQkJCXsKKwkJ CQkJQXR0ck51bWJlcglhdHRudW07CisJCQkJCU9pZAkJCXNlcV9yZWxpZDsKKwkJCQkJT2JqVHJl ZQkqc2VxZGVmOworCQkJCQlDb2x1bW5EZWYgICpjb2xkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNt ZC0+ZGVmOworCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtj b2x1bW59SSBBREQgJXtpZGVudGl0eV9jb2x1bW59cyIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImFkZCBpZGVudGl0eSIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWF0dG51bSA9IGdldF9hdHRudW0oUmVs YXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlzZXFfcmVsaWQgPSBnZXRJ ZGVudGl0eVNlcXVlbmNlKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtLCB0cnVlKTsKKwkJ CQkJc2VxZGVmID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzZXFfcmVsaWQsIGNvbGRlZi0+aWRl bnRpdHksIGZhbHNlKTsKKworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICJpZGVu dGl0eV9jb2x1bW4iLCBzZXFkZWYpOworCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2Ug QVRfU2V0SWRlbnRpdHk6CisJCQkJeworCQkJCQlEZWZFbGVtCSpkZWZlbDsKKwkJCQkJY2hhcgkJ aWRlbnRpdHkgPSAwOworCQkJCQlPYmpUcmVlCSAgICpzZXFkZWY7CisJCQkJCUF0dHJOdW1iZXIJ YXR0bnVtOworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisKKworCQkJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJzZXQgaWRlbnRpdHkiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2Jq VHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlpZiAoc3ViY21kLT5kZWYpCisJCQkJ CXsKKwkJCQkJCUxpc3QJICAgKmRlZiA9IChMaXN0ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCQlB c3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBMaXN0KSk7CisKKwkJCQkJCWRlZmVsID0gbGluaXRpYWxf bm9kZShEZWZFbGVtLCBkZWYpOworCQkJCQkJaWRlbnRpdHkgPSBkZWZHZXRJbnQzMihkZWZlbCk7 CisJCQkJCX0KKworCQkJCQlhdHRudW0gPSBnZXRfYXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQocmVs KSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJc2VxX3JlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShS ZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSwgdHJ1ZSk7CisJCQkJCXNlcWRlZiA9IGRlcGFy c2VfQ29sdW1uSWRlbnRpdHkoc2VxX3JlbGlkLCBpZGVudGl0eSwgdHJ1ZSk7CisKKwkJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtkZWZpbml0aW9ufXMiLCBzZXFkZWYpOworCisJ CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCQkJCQlicmVhazsKKwkJCQl9CisJCQljYXNlIEFUX0Ryb3BJZGVudGl0eToKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBJREVOVElU WSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBpZGVudGl0eSIs CisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJ CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJ CQkJCQkgc3ViY21kLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7CisKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQli cmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhXQVJOSU5HLCAidW5zdXBwb3J0ZWQgYWx0ZXIg dGFibGUgc3VidHlwZSAlZCIsCisJCQkJCSBzdWJjbWQtPnN1YnR5cGUpOworCQkJCWJyZWFrOwor CQl9CisKKwkJLyoKKwkJICogV2UgZG9uJ3Qgc3VwcG9ydCByZXBsaWNhdGluZyBBTFRFUiBUQUJM RSB3aGljaCBjb250YWlucyB2b2xhdGlsZQorCQkgKiBmdW5jdGlvbnMgYmVjYXVzZSBJdCdzIHBv c3NpYmxlIHRoZSBmdW5jdGlvbnMgY29udGFpbiBEREwvRE1MIGluCisJCSAqIHdoaWNoIGNhc2Ug dGhlc2Ugb3BlcnRpb25zIHdpbGwgYmUgZXhlY3V0ZWQgdHdpY2UgYW5kIGNhdXNlCisJCSAqIGR1 cGxpY2F0ZSBkYXRhLiBJbiBhZGRpdGlvbiwgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSB0YWJs ZXMgYmVpbmcKKwkJICogYWNjZXNzZWQgYnkgdGhlc2UgRERML0RNTCBhcmUgcHVibGlzaGVkIG9y IG5vdC4gU28gYmxpbmRseSBhbGxvd2luZworCQkgKiBzdWNoIGZ1bmN0aW9ucyBjYW4gYWxsb3cg dW5pbnRlbmRlZCBjbGF1c2VzIGxpa2UgdGhlIHRhYmxlcyBhY2Nlc3NlZAorCQkgKiBpbiB0aG9z ZSBmdW5jdGlvbnMgbWF5IG5vdCBldmVuIGV4aXN0IG9uIHRoZSBzdWJzY3JpYmVyLXNpZGUuCisJ CSAqLworCQlpZiAoY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnMoKE5vZGUgKikgZXhwcnMpKQor CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQ T1JURUQpLAorCQkJCQkgZXJybXNnKCJBTFRFUiBUQUJMRSBjb21tYW5kIHVzaW5nIHZvbGF0aWxl IGZ1bmN0aW9uIGNhbm5vdCBiZSByZXBsaWNhdGVkIikpKTsKKworCQkvKgorCQkgKiBDbGVhbiB0 aGUgbGlzdCBhcyB3ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGVyZSBpcyBubyB2b2xhdGlsZQorCQkg KiBmdW5jdGlvbi4KKwkJICovCisJCWxpc3RfZnJlZShleHBycyk7CisJCWV4cHJzID0gTklMOwor CX0KKworCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCWlmIChsaXN0X2xl bmd0aChzdWJjbWRzKSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWFwcGVuZF9hcnJheV9vYmpl Y3QoYWx0ZXJUYWJsZVN0bXQsICIle3N1YmNtZHM6LCB9cyIsIHN1YmNtZHMpOworCisJcmV0dXJu IGFsdGVyVGFibGVTdG10OworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxF IGRlcGFyc2luZy4KKyAqCisgKiBEZXBhcnNlIGEgQ29sdW1uRGVmIG5vZGUgd2l0aGluIGEgcmVn dWxhciAobm9uIHR5cGVkKSB0YWJsZSBjcmVhdGlvbi4KKyAqCisgKiBOT1QgTlVMTCBjb25zdHJh aW50cyBpbiB0aGUgY29sdW1uIGRlZmluaXRpb24gYXJlIGVtaXR0ZWQgZGlyZWN0bHkgaW4gdGhl CisgKiBjb2x1bW4gZGVmaW5pdGlvbiBieSB0aGlzIHJvdXRpbmU7IG90aGVyIGNvbnN0cmFpbnRz IG11c3QgYmUgZW1pdHRlZAorICogZWxzZXdoZXJlICh0aGUgaW5mbyBpbiB0aGUgcGFyc2Ugbm9k ZSBpcyBpbmNvbXBsZXRlIGFueXdheS4pLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0NvbHVtbkRlZihSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBib29sIGNvbXBv c2l0ZSwKKwkJCQkgIENvbHVtbkRlZiAqY29sZGVmLCBib29sIGlzX2FsdGVyLCBMaXN0ICoqZXhw cnMpCit7CisJT2JqVHJlZQkgICAqY29sdW1uOworCU9ialRyZWUJICAgKnRtcG9iajsKKwlPaWQJ CQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCUhlYXBUdXBsZQlhdHRyVHVw OworCUZvcm1fcGdfYXR0cmlidXRlIGF0dHJGb3JtOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0 eXBtb2Q7CisJT2lkCQkJdHlwY29sbGF0aW9uOworCWJvb2wJCXNhd19ub3RudWxsOworCUxpc3RD ZWxsICAgKmNlbGw7CisKKwkvKgorCSAqIEluaGVyaXRlZCBjb2x1bW5zIHdpdGhvdXQgbG9jYWwg ZGVmaW5pdGlvbnMgbXVzdCBub3QgYmUgZW1pdHRlZC4KKwkgKgorCSAqIFhYWCBtYXliZSBpdCBp cyB1c2VmdWwgdG8gaGF2ZSB0aGVtIHdpdGggInByZXNlbnQgPSBmYWxzZSIgb3Igc29tZSBzdWNo PworCSAqLworCWlmICghY29sZGVmLT5pc19sb2NhbCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhdHRy VHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZChhdHRyVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBm aW5kIGNhY2hlIGVudHJ5IGZvciBjb2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uICV1IiwKKwkJCSBj b2xkZWYtPmNvbG5hbWUsIHJlbGlkKTsKKwlhdHRyRm9ybSA9IChGb3JtX3BnX2F0dHJpYnV0ZSkg R0VUU1RSVUNUKGF0dHJUdXApOworCisJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKHJlbGlkLCBhdHRy Rm9ybS0+YXR0bnVtLAorCQkJCQkJICAmdHlwaWQsICZ0eXBtb2QsICZ0eXBjb2xsYXRpb24pOwor CisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogJXtuYW1lfUkgJXtjb2x0eXBlfVQg JXtjb21wcmVzc2lvbn1zICV7ZGVmYXVsdH1zICV7bm90X251bGx9cworCSAqICV7Y29sbGF0aW9u fXMKKwkgKi8KKwljb2x1bW4gPSBuZXdfb2JqdHJlZV9WQSgiJXtuYW1lfUkgJXtjb2x0eXBlfVQi LCAzLAorCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJCQkJCQkJIm5h bWUiLCBPYmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUsCisJCQkJCQkJImNvbHR5cGUiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGlkLCB0eXBtb2Qp KTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJDT01QUkVT U0lPTiIpOworCWlmIChjb2xkZWYtPmNvbXByZXNzaW9uKQorCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXBvYmosICIle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgY29sZGVmLT5jb21wcmVzc2lvbik7 CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwgIiV7Y29tcHJlc3Npb25f bWV0aG9kfUkiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxz ZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7Y29tcHJlc3Npb259cyIs IHRtcG9iaik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCWlmIChPaWRJ c1ZhbGlkKHR5cGNvbGxhdGlvbikpCisJeworCQlPYmpUcmVlICpjb2xsbmFtZTsKKworCQljb2xs bmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAor CQkJCQkJCQkJCQkgICB0eXBjb2xsYXRpb24pOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBv YmosICIle25hbWV9RCIsIGNvbGxuYW1lKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1 bW4sICIle2NvbGxhdGlvbn1zIiwgdG1wb2JqKTsKKworCWlmICghY29tcG9zaXRlKQorCXsKKwkJ T2lkCXNlcXJlbGlkID0gSW52YWxpZE9pZDsKKworCQkvKgorCQkgKiBFbWl0IGEgTk9UIE5VTEwg ZGVjbGFyYXRpb24gaWYgbmVjZXNzYXJ5LiAgTm90ZSB0aGF0IHdlIGNhbm5vdCB0cnVzdAorCQkg KiBwZ19hdHRyaWJ1dGUuYXR0bm90bnVsbCBoZXJlLCBiZWNhdXNlIHRoYXQgYml0IGlzIGFsc28g c2V0IHdoZW4KKwkJICogcHJpbWFyeSBrZXlzIGFyZSBzcGVjaWZpZWQ7IGFuZCB3ZSBtdXN0IG5v dCBlbWl0IGEgTk9UIE5VTEwKKwkJICogY29uc3RyYWludCBpbiB0aGF0IGNhc2UsIHVubGVzcyBl eHBsaWNpdGVseSBzcGVjaWZpZWQuICBUaGVyZWZvcmUsCisJCSAqIHdlIHNjYW4gdGhlIGxpc3Qg b2YgY29uc3RyYWludHMgYXR0YWNoZWQgdG8gdGhpcyBjb2x1bW4gdG8gZGV0ZXJtaW5lCisJCSAq IHdoZXRoZXIgd2UgbmVlZCB0byBlbWl0IGFueXRoaW5nLgorCQkgKiAoRm9ydHVuYXRlbHksIE5P VCBOVUxMIGNvbnN0cmFpbnRzIGNhbm5vdCBiZSB0YWJsZSBjb25zdHJhaW50cy4pCisJCSAqCisJ CSAqIEluIHRoZSBBTFRFUiBUQUJMRSBjYXNlcywgd2UgYWxzbyBhZGQgYSBOT1QgTlVMTCBpZiB0 aGUgY29sRGVmIGlzCisJCSAqIG1hcmtlZCBpc19ub3RfbnVsbC4KKwkJICovCisJCXNhd19ub3Ru dWxsID0gZmFsc2U7CisJCWZvcmVhY2goY2VsbCwgY29sZGVmLT5jb25zdHJhaW50cykKKwkJewor CQkJQ29uc3RyYWludCAqY29uc3RyID0gKENvbnN0cmFpbnQgKikgbGZpcnN0KGNlbGwpOworCisJ CQlpZiAoY29uc3RyLT5jb250eXBlID09IENPTlNUUl9OT1ROVUxMKQorCQkJCXNhd19ub3RudWxs ID0gdHJ1ZTsKKwkJfQorCQlpZiAoaXNfYWx0ZXIgJiYgY29sZGVmLT5pc19ub3RfbnVsbCkKKwkJ CXNhd19ub3RudWxsID0gdHJ1ZTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjb2x1bW4sICIl e25vdF9udWxsfXMiLAorCQkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVMTCIgOiAiIik7CisK KwkJdG1wb2JqID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwkJaWYgKGF0dHJGb3JtLT5hdHRo YXNkZWYpCisJCXsKKwkJCWNoYXIgKmRlZnN0cjsKKworCQkJZGVmc3RyID0gUmVsYXRpb25HZXRD b2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCQkgIGRw Y29udGV4dCwgZXhwcnMpOworCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2Rl ZmF1bHR9cyIsIGRlZnN0cik7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwg IiV7ZGVmYXVsdH1zIiwgdG1wb2JqKTsKKworCQkvKiBJREVOVElUWSBDT0xVTU4gKi8KKwkJaWYg KGNvbGRlZi0+aWRlbnRpdHkpCisJCXsKKwkJCU9pZAlhdHRubyA9IGdldF9hdHRudW0ocmVsaWQs IGNvbGRlZi0+Y29sbmFtZSk7CisJCQlzZXFyZWxpZCA9IGdldElkZW50aXR5U2VxdWVuY2UocmVs aWQsIGF0dG5vLCBmYWxzZSk7CisJCX0KKworCQl0bXBvYmogPSBkZXBhcnNlX0NvbHVtbklkZW50 aXR5KHNlcXJlbGlkLCBjb2xkZWYtPmlkZW50aXR5LCBpc19hbHRlcik7CisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGNvbHVtbiwgIiV7aWRlbnRpdHlfY29sdW1ufXMiLCB0bXBvYmopOworCisJCS8q IEdFTkVSQVRFRCBDT0xVTU4gRVhQUkVTU0lPTiAqLworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgi R0VORVJBVEVEIEFMV0FZUyBBUyIpOworCQlpZiAoY29sZGVmLT5nZW5lcmF0ZWQgPT0gQVRUUklC VVRFX0dFTkVSQVRFRF9TVE9SRUQpCisJCXsKKwkJCWNoYXIgKmRlZnN0cjsKKworCQkJZGVmc3Ry ID0gUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAor CQkJCQkJCQkJCQkgIGRwY29udGV4dCwgZXhwcnMpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wb2JqLCAiJXtnZW5lcmF0aW9uX2V4cHJ9cyBTVE9SRUQiLCBkZWZzdHIpOworCQl9CisJCWVs c2UKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgdG1w b2JqKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisKKwlyZXR1cm4gY29sdW1u OworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxFIE9GIGRlcGFyc2luZy4K KyAqCisgKiBEZXBhcnNlIGEgQ29sdW1uRGVmIG5vZGUgd2l0aGluIGEgdHlwZWQgdGFibGUgY3Jl YXRpb24uCVRoaXMgaXMgc2ltcGxlcgorICogdGhhbiB0aGUgcmVndWxhciBjYXNlLCBiZWNhdXNl IHdlIGRvbid0IGhhdmUgdG8gZW1pdCB0aGUgdHlwZSBkZWNsYXJhdGlvbiwKKyAqIGNvbGxhdGlv biwgb3IgZGVmYXVsdC4gIEhlcmUgd2Ugb25seSByZXR1cm4gc29tZXRoaW5nIGlmIHRoZSBjb2x1 bW4gaXMgYmVpbmcKKyAqIGRlY2xhcmVkIE5PVCBOVUxMLgorICoKKyAqIEFzIGluIGRlcGFyc2Vf Q29sdW1uRGVmLCBhbnkgb3RoZXIgY29uc3RyYWludCBpcyBwcm9jZXNzZWQgZWxzZXdoZXJlLgor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChSZWxhdGlvbiBy ZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBDb2x1bW5EZWYgKmNvbGRlZikKK3sKKwlPYmpUcmVl CSpjb2x1bW4gPSBOVUxMOworCU9ialRyZWUJKnRtcG9iajsKKwlPaWQJCQlyZWxpZCA9IFJlbGF0 aW9uR2V0UmVsaWQocmVsYXRpb24pOworCUhlYXBUdXBsZQlhdHRyVHVwOworCUZvcm1fcGdfYXR0 cmlidXRlIGF0dHJGb3JtOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0eXBtb2Q7CisJT2lkCQkJ dHlwY29sbGF0aW9uOworCWJvb2wJCXNhd19ub3RudWxsOworCUxpc3RDZWxsICAgKmNlbGw7CisK KwlhdHRyVHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChhdHRyVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNvdWxk IG5vdCBmaW5kIGNhY2hlIGVudHJ5IGZvciBjb2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uICV1IiwK KwkJCSBjb2xkZWYtPmNvbG5hbWUsIHJlbGlkKTsKKwlhdHRyRm9ybSA9IChGb3JtX3BnX2F0dHJp YnV0ZSkgR0VUU1RSVUNUKGF0dHJUdXApOworCisJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKHJlbGlk LCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJICAmdHlwaWQsICZ0eXBtb2QsICZ0eXBjb2xsYXRp b24pOworCisJLyoKKwkgKiBTZWFyY2ggZm9yIGEgTk9UIE5VTEwgZGVjbGFyYXRpb24uICBBcyBp biBkZXBhcnNlX0NvbHVtbkRlZiwgd2UgcmVseSBvbgorCSAqIGZpbmRpbmcgYSBjb25zdHJhaW50 IG9uIHRoZSBjb2x1bW4gcmF0aGVyIHRoYW4gY29sZGVmLT5pc19ub3RfbnVsbC4KKwkgKiAoVGhp cyByb3V0aW5lIGlzIG5ldmVyIHVzZWQgZm9yIEFMVEVSIGNhc2VzLikKKwkgKi8KKwlzYXdfbm90 bnVsbCA9IGZhbHNlOworCWZvcmVhY2goY2VsbCwgY29sZGVmLT5jb25zdHJhaW50cykKKwl7CisJ CUNvbnN0cmFpbnQgKmNvbnN0ciA9IChDb25zdHJhaW50ICopIGxmaXJzdChjZWxsKTsKKworCQlp ZiAoY29uc3RyLT5jb250eXBlID09IENPTlNUUl9OT1ROVUxMKQorCQl7CisJCQlzYXdfbm90bnVs bCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghc2F3X25vdG51bGwgJiYgIWF0 dHJGb3JtLT5hdHRoYXNkZWYpCisJeworCQlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisJCXJl dHVybiBOVUxMOworCX0KKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqICV7bmFt ZX1JIFdJVEggT1BUSU9OUyAle2RlZmF1bHR9cyAle25vdF9udWxsfXMuCisJICovCisJY29sdW1u ID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1JIFdJVEggT1BUSU9OUyIsIDIsCisJCQkJCQkJInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1uIiwKKwkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJp bmcsIGNvbGRlZi0+Y29sbmFtZSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjb2x1bW4sICIl e25vdF9udWxsfXMiLAorCQkJCQkJIHNhd19ub3RudWxsID8gIk5PVCBOVUxMIiA6ICIiKTsKKwor CXRtcG9iaiA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJaWYgKGF0dHJGb3JtLT5hdHRoYXNk ZWYpCisJeworCQljaGFyICpkZWZzdHI7CisKKwkJZGVmc3RyID0gUmVsYXRpb25HZXRDb2x1bW5E ZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCSAgZHBjb250ZXh0 LCBOVUxMKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2RlZmF1bHR9cyIs IGRlZnN0cik7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNl bnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtkZWZhdWx0fXMi LCB0bXBvYmopOworCisJLyoKKwkgKiBHZW5lcmF0ZWQgY29sdW1ucyBhcmUgbm90IHN1cHBvcnRl ZCBvbiB0eXBlZCB0YWJsZXMsIHNvIHdlIGFyZSBkb25lLgorCSAqLworCisJUmVsZWFzZVN5c0Nh Y2hlKGF0dHJUdXApOworCisJcmV0dXJuIGNvbHVtbjsKK30KKworLyoKKyAqIERlcGFyc2UgdGhl IGRlZmluaXRpb24gb2YgY29sdW1uIGlkZW50aXR5LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0NvbHVtbklkZW50aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBh bHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICpjb2x1bW47CisJT2JqVHJlZQkgICAqaWRlbnRv Ymo7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlz ZXF0dXBsZTsKKwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07CisJRm9ybV9wZ19zZXF1ZW5jZV9k YXRhIHNlcWRhdGE7CisJY2hhcgkgICAqaWRlbnRmbXQ7CisJY2hhcgkgICAqb2JqZm10OworCisJ Y29sdW1uID0gbmV3X29ianRyZWUoIiIpOworCisJaWYgKCFPaWRJc1ZhbGlkKHNlcXJlbGlkKSkK Kwl7CisJCWFwcGVuZF9ib29sX29iamVjdChjb2x1bW4sICJwcmVzZW50IiwgZmFsc2UpOworCQly ZXR1cm4gY29sdW1uOworCX0KKworCWlmIChhbHRlcl90YWJsZSkKKwl7CisJCWlkZW50Zm10ID0g IlNFVCBHRU5FUkFURUQgIjsKKwkJb2JqZm10ID0gIiV7b3B0aW9ufXMiOworCX0KKwllbHNlCisJ eworCQlpZGVudGZtdCA9ICJHRU5FUkFURUQgIjsKKwkJb2JqZm10ID0gIiV7b3B0aW9ufXMgQVMg SURFTlRJVFkiOworCX0KKworCWlkZW50b2JqID0gbmV3X29ianRyZWUoaWRlbnRmbXQpOworCisJ aWYgKGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVOVElUWV9BTFdBWVMpCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGlkZW50b2JqLCBvYmpmbXQsICJBTFdBWVMiKTsKKwllbHNlIGlmIChpZGVudGl0 eSA9PSAgQVRUUklCVVRFX0lERU5USVRZX0JZX0RFRkFVTFQpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGlkZW50b2JqLCBvYmpmbXQsICJCWSBERUZBVUxUIik7CisJZWxzZQorCQlhcHBlbmRfYm9v bF9vYmplY3QoaWRlbnRvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJYXBwZW5kX29iamVjdF9v YmplY3QoY29sdW1uLCAiJXtpZGVudGl0eV90eXBlfXMiLCBpZGVudG9iaik7CisKKwlyZWwgPSB0 YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVw bGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELCBzZXFyZWxpZCk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIHNlcXVlbmNlICV1IiwKKwkJCSBzZXFyZWxpZCk7CisKKwlzZXFmb3JtID0gKEZvcm1f cGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisJc2VxZGF0YSA9IGdldF9zZXF1ZW5j ZV92YWx1ZXMoc2VxcmVsaWQpOworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWVsZW1z ID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ2FjaGUoTlVMTCwgc2VxZm9ybSwgYWx0ZXJf dGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0N5Y2xlKE5VTEws IHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNl X1NlcV9JbmNyZW1lbnRCeShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0g bGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWludmFsdWUoTlVMTCwgc2VxZm9ybSwgYWx0ZXJf dGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01heHZhbHVlKE5V TEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBh cnNlX1NlcV9TdGFydHdpdGgoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9 IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1Jlc3RhcnQoTlVMTCwgc2VxZGF0YSkpOworCS8q IFdlIHB1cnBvc2VmdWxseSBkbyBub3QgZW1pdCBPV05FRCBCWSBoZXJlICovCisKKwlpZiAoYWx0 ZXJfdGFibGUpCisJCWFwcGVuZF9hcnJheV9vYmplY3QoY29sdW1uLCAiJXtzZXFfZGVmaW5pdGlv bjogfXMiLCBlbGVtcyk7CisJZWxzZQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbHVtbiwgIigg JXtzZXFfZGVmaW5pdGlvbjogfXMgKSIsIGVsZW1zKTsKKworCXRhYmxlX2Nsb3NlKHJlbCwgUm93 RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gY29sdW1uOworfQorCisvKgorICogLi4uIEFMVEVS IENPTFVNTiAuLi4gU0VUL1JFU0VUICguLi4pCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpCit7CisJTGlzdAkgICAq c2V0cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9ialRyZWUJICAgKmNvbHNldDsKKwlj aGFyCSAgICpmbXQ7CisJYm9vbAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1YnR5cGUgPT0gQVRfUmVz ZXRPcHRpb25zOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQUxURVIgQ09M VU1OICV7Y29sdW1ufUkgUkVTRVR8U0VUICgle29wdGlvbnM6LCB9cykKKwkgKi8KKwlpZiAoaXNf cmVzZXQpCisJCWZtdCA9ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBSRVNFVCAiOworCWVsc2UK KwkJZm10ID0gIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCAiOworCisJY29sc2V0ID0gbmV3 X29ianRyZWVfVkEoZm10LCAxLCAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1l KTsKKworCWZvcmVhY2goY2VsbCwgKExpc3QgKikgc3ViY21kLT5kZWYpCisJeworCQlEZWZFbGVt CSAgICplbGVtOworCQlPYmpUcmVlCSAgICpzZXQ7CisKKwkJZWxlbSA9IChEZWZFbGVtICopIGxm aXJzdChjZWxsKTsKKwkJc2V0ID0gZGVwYXJzZV9EZWZFbGVtKGVsZW0sIGlzX3Jlc2V0KTsKKwkJ c2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3Qoc2V0KSk7CisJfQorCisJQXNz ZXJ0KHNldHMpOworCWFwcGVuZF9hcnJheV9vYmplY3QoY29sc2V0LCAiKCV7b3B0aW9uczosIH1z KSIsIHNldHMpOworCisJcmV0dXJuIGNvbHNldDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIENS RUFURSBET01BSU4KKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBhbmQgdGhlIHBhcnNldHJl ZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3Jl YXRlRG9tYWluKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUJICAg KmNyZWF0ZURvbWFpbjsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJSGVhcFR1cGxlCXR5cFR1cDsK KwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKwlMaXN0CSAgICpjb25zdHJhaW50czsKKworCXR5cFR1 cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBk b21haW4gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUp IEdFVFNUUlVDVCh0eXBUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICog Q1JFQVRFIERPTUFJTiAle2lkZW50aXR5fUQgQVMgJXt0eXBlfVQgJXtub3RfbnVsbH1zICV7Y29u c3RyYWludHN9cworCSAqICV7Y29sbGF0aW9ufXMKKwkgKi8KKwljcmVhdGVEb21haW4gPSBuZXdf b2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVEb21haW4s CisJCQkJCQkgIkRPTUFJTiAle2lkZW50aXR5fUQgQVMiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsK KwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVEb21haW4sCisJCQkJCQkgIiV7dHlwZX1UIiwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBGb3JtLT50eXBiYXNldHlwZSwgdHlwRm9y bS0+dHlwdHlwbW9kKSk7CisKKwlpZiAodHlwRm9ybS0+dHlwbm90bnVsbCkKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtub3RfbnVsbH1zIiwgIk5PVCBOVUxMIik7CisJ ZWxzZQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVEb21haW4sICIle25vdF9udWxsfXMi LCAiIik7CisKKwljb25zdHJhaW50cyA9IG9idGFpbkNvbnN0cmFpbnRzKE5JTCwgSW52YWxpZE9p ZCwgb2JqZWN0SWQpOworCWlmIChjb25zdHJhaW50cyA9PSBOSUwpCisJeworCQl0bXBvYmogPSBu ZXdfb2JqdHJlZSgiIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50Iiwg ZmFsc2UpOworCX0KKwllbHNlCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2VsZW1lbnRz OiwgfXMiLCAxLAorCQkJCQkJCSAiZWxlbWVudHMiLCBPYmpUeXBlQXJyYXksIGNvbnN0cmFpbnRz KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVEb21haW4sICIle2NvbnN0cmFpbnRzfXMi LCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3X29ianRyZWUoIkNPTExBVEUiKTsKKwlpZiAoT2lk SXNWYWxpZCh0eXBGb3JtLT50eXBjb2xsYXRpb24pKQorCXsKKwkJT2JqVHJlZSAqY29sbG5hbWU7 CisKKwkJY29sbG5hbWUgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJICAgdHlwRm9ybS0+dHlwY29sbGF0aW9uKTsKKwkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJfQorCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5k X29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtjb2xsYXRpb259cyIsIHRtcG9iaik7CisK KwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVybiBjcmVhdGVEb21haW47Cit9CisK Ky8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRnVuY3Rpb25TdG10IChDUkVBVEUgRlVOQ1RJT04pCisg KgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVk IGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBj b21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUZ1bmN0aW9uKE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZ1bmN0aW9uU3RtdCAqbm9k ZSA9IChDcmVhdGVGdW5jdGlvblN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmNyZWF0 ZUZ1bmM7CisJT2JqVHJlZQkgICAqdG1wb2JqOworCURhdHVtCQl0bXBkYXR1bTsKKwljaGFyCSAg ICpzb3VyY2U7CisJY2hhcgkgICAqcHJvYmluOworCUxpc3QJICAgKnBhcmFtczsKKwlMaXN0CSAg ICpkZWZhdWx0czsKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3QJICAgKnR5cGVzID0gTklM OworCUxpc3RDZWxsICAgKmNlbGw7CisJTGlzdENlbGwgICAqY3VyZGVmOworCUxpc3RDZWxsICAg KnRhYmxlX3BhcmFtcyA9IE5VTEw7CisJSGVhcFR1cGxlCXByb2NUdXA7CisJRm9ybV9wZ19wcm9j IHByb2NGb3JtOworCUhlYXBUdXBsZQlsYW5nVHVwOworCU9pZAkJICAgKnR5cGFycmF5OworCU9p ZAkJICAgKnRyZnR5cGVzOworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zvcm07CisJaW50CQkJaTsK KwlpbnQJCQl0eXBudW07CisJaW50CQkJbnR5cGVzOworCWJvb2wJCWlzbnVsbDsKKwlib29sCQlp c2Z1bmN0aW9uOworCisJLyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlICovCisJcHJvY1R1cCA9IFNl YXJjaFN5c0NhY2hlMShQUk9DT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHByb2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGZ1bmN0 aW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJcHJvY0Zvcm0gPSAoRm9ybV9wZ19w cm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkvKiBHZXQgdGhlIGNvcnJlc3BvbmRpbmcgcGdf bGFuZ3VhZ2UgdHVwbGUgKi8KKwlsYW5nVHVwID0gU2VhcmNoU3lzQ2FjaGUxKExBTkdPSUQsIHBy b2NGb3JtLT5wcm9sYW5nKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQobGFuZ1R1cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgbGFuZ3VhZ2Ugd2l0aCBPSUQgJXUi LAorCQkJIHByb2NGb3JtLT5wcm9sYW5nKTsKKwlsYW5nRm9ybSA9IChGb3JtX3BnX2xhbmd1YWdl KSBHRVRTVFJVQ1QobGFuZ1R1cCk7CisKKwkvKgorCSAqIERldGVybWluZSB1c2VmdWwgdmFsdWVz IGZvciBwcm9zcmMgYW5kIHByb2Jpbi4gIFdlIGNvcGUgd2l0aCBwcm9iaW4KKwkgKiBiZWluZyBl aXRoZXIgTlVMTCBvciAiLSIsIGJ1dCBwcm9zcmMgbXVzdCBoYXZlIGEgdmFsaWQgdmFsdWUuCisJ ICovCisJdG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJ CQkgICBBbnVtX3BnX3Byb2NfcHJvc3JjLCAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9n KEVSUk9SLCAibnVsbCBwcm9zcmMgaW4gZnVuY3Rpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7 CisJc291cmNlID0gVGV4dERhdHVtR2V0Q1N0cmluZyh0bXBkYXR1bSk7CisKKwkvKiBEZXRlcm1p bmUgYSB1c2VmdWwgdmFsdWUgZm9yIHByb2JpbiAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRB dHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2JpbiwgJmlz bnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJcHJvYmluID0gTlVMTDsKKwllbHNlCisJeworCQlwcm9i aW4gPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHRtcGRhdHVtKTsKKwkJaWYgKHByb2JpblswXSA9PSAn XDAnIHx8IHN0cmNtcChwcm9iaW4sICItIikgPT0gMCkKKwkJCXByb2JpbiA9IE5VTEw7CisJfQor CisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7b3JfcmVwbGFjZX1z IEZVTkNUSU9OICV7c2lnbmF0dXJlfXMgUkVUVVJOUyAle3JldHVybl90eXBlfXMKKwkgKiBMQU5H VUFHRSAle3RyYW5zZm9ybV90eXBlfXMgJXtsYW5ndWFnZX1JICV7d2luZG93fXMgJXt2b2xhdGls aXR5fXMKKwkgKiAle3BhcmFsbGVsX3NhZmV0eX1zICV7bGVha3Byb29mfXMgJXtzdHJpY3R9cyAl e3NlY3VyaXR5X2RlZmluZXJ9cworCSAqICV7Y29zdH1zICV7cm93c31zICV7c3VwcG9ydH1zICV7 c2V0X29wdGlvbnM6IH1zIEFTICV7b2JqZmlsZX1MLAorCSAqICV7c3ltYm9sfUwKKwkgKi8KKwlj cmVhdGVGdW5jID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY3JlYXRlRnVuYywgIiV7b3JfcmVwbGFjZX1zIiwKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8g Ik9SIFJFUExBQ0UiIDogIiIpOworCisJLyoKKwkgKiBUbyBjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50 cyBhcnJheSwgZXh0cmFjdCB0aGUgdHlwZSBPSURzIGZyb20gdGhlCisJICogZnVuY3Rpb24ncyBw Z19wcm9jIGVudHJ5LiAgSWYgcHJvbmFyZ3MgZXF1YWxzIHRoZSBwYXJhbWV0ZXIgbGlzdCBsZW5n dGgsCisJICogdGhlcmUgYXJlIG5vIE9VVCBwYXJhbWV0ZXJzIGFuZCB0aHVzIHdlIGNhbiBleHRy YWN0IHRoZSB0eXBlIE9JRCBmcm9tCisJICogcHJvYXJndHlwZXM7IG90aGVyd2lzZSB3ZSBuZWVk IHRvIGRlY29kZSBwcm9hbGxhcmd0eXBlcywgd2hpY2ggaXMKKwkgKiBhIGJpdCBtb3JlIGludm9s dmVkLgorCSAqLworCXR5cGFycmF5ID0gcGFsbG9jKGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRl cnMpICogc2l6ZW9mKE9pZCkpOworCWlmIChsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKSA+ IHByb2NGb3JtLT5wcm9uYXJncykKKwl7CisJCWJvb2wJaXNudWxsOworCQlEYXR1bQlhbGx0eXBl czsKKwkJRGF0dW0gICp2YWx1ZXM7CisJCWJvb2wgICAqbnVsbHM7CisJCWludAkJbmVsZW1zOwor CisJCWFsbHR5cGVzID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJ CSAgIEFudW1fcGdfcHJvY19wcm9hbGxhcmd0eXBlcywgJmlzbnVsbCk7CisJCWlmIChpc251bGwp CisJCQllbG9nKEVSUk9SLCAiTlVMTCBwcm9hbGxhcmd0eXBlcywgYnV0IG1vcmUgcGFyYW1ldGVy cyB0aGFuIGFyZ3MiKTsKKwkJZGVjb25zdHJ1Y3RfYXJyYXkoRGF0dW1HZXRBcnJheVR5cGVQKGFs bHR5cGVzKSwKKwkJCQkJCSAgT0lET0lELCA0LCAndCcsICdpJywKKwkJCQkJCSAgJnZhbHVlcywg Jm51bGxzLCAmbmVsZW1zKTsKKwkJaWYgKG5lbGVtcyAhPSBsaXN0X2xlbmd0aChub2RlLT5wYXJh bWV0ZXJzKSkKKwkJCWVsb2coRVJST1IsICJtaXNtYXRjaGVkIHByb2FsbGFyZ2F0eXBlcyIpOwor CQlmb3IgKGkgPSAwOyBpIDwgbGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycyk7IGkrKykKKwkJ CXR5cGFycmF5W2ldID0gdmFsdWVzW2ldOworCX0KKwllbHNlCisJeworCQlmb3IgKGkgPSAwOyBp IDwgbGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycyk7IGkrKykKKwkJCSB0eXBhcnJheVtpXSA9 IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV07CisJfQorCisJLyoKKwkgKiBJZiB0aGVy ZSBhcmUgYW55IGRlZmF1bHQgZXhwcmVzc2lvbnMsIHdlIHJlYWQgdGhlIGRlcGFyc2VkIGV4cHJl c3Npb24gYXMKKwkgKiBhIGxpc3Qgc28gdGhhdCB3ZSBjYW4gYXR0YWNoIHRoZW0gdG8gZWFjaCBh cmd1bWVudC4KKwkgKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9j VHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9hcmdkZWZhdWx0cywgJmlzbnVsbCk7CisJ aWYgKCFpc251bGwpCisJeworCQlkZWZhdWx0cyA9IEZ1bmN0aW9uR2V0RGVmYXVsdHMoRGF0dW1H ZXRUZXh0UCh0bXBkYXR1bSkpOworCQljdXJkZWYgPSBsaXN0X2hlYWQoZGVmYXVsdHMpOworCX0K KwllbHNlCisJeworCQlkZWZhdWx0cyA9IE5JTDsKKwkJY3VyZGVmID0gTlVMTDsKKwl9CisKKwkv KgorCSAqIE5vdyBpdGVyYXRlIG92ZXIgZWFjaCBwYXJhbWV0ZXIgaW4gdGhlIHBhcnNldHJlZSB0 byBjcmVhdGUgdGhlCisJICogcGFyYW1ldGVycyBhcnJheS4KKwkgKi8KKwlwYXJhbXMgPSBOSUw7 CisJdHlwbnVtID0gMDsKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPnBhcmFtZXRlcnMpCisJeworCQlG dW5jdGlvblBhcmFtZXRlciAqcGFyYW0gPSAoRnVuY3Rpb25QYXJhbWV0ZXIgKikgbGZpcnN0KGNl bGwpOworCQlPYmpUcmVlCSAgICpwYXJhbW9iajsKKwkJT2JqVHJlZQkgICAqZGVmYXVsdHZhbDsK KwkJT2JqVHJlZQkgICAqbmFtZTsKKworCQkvKgorCQkgKiBBIFBBUkFNX1RBQkxFIHBhcmFtZXRl ciBpbmRpY2F0ZXMgZW5kIG9mIGlucHV0IGFyZ3VtZW50czsgdGhlCisJCSAqIGZvbGxvd2luZyBw YXJhbWV0ZXJzIGFyZSBwYXJ0IG9mIHRoZSByZXR1cm4gdHlwZS4gIFdlIGlnbm9yZSB0aGVtCisJ CSAqIGhlcmUsIGJ1dCBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBs aXN0IHNvIHRoYXQKKwkJICogd2UgY2FuIGVhc2lseSBwcm9kdWNlIHRoZSByZXR1cm4gdHlwZSBi ZWxvdy4KKwkJICovCisJCWlmIChwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX1RBQkxFKQorCQl7 CisJCQl0YWJsZV9wYXJhbXMgPSBjZWxsOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBW ZXJib3NlIHN5bnRheCBmb3IgcGFyYW1hdGVyOiAle21vZGV9cyAle25hbWV9cyAle3R5cGV9VCAl e2RlZmF1bHR9cworCQkgKgorCQkgKiBOb3RlIHRoYXQgJXtuYW1lfXMgaXMgYSBzdHJpbmcgaGVy ZSwgbm90IGFuIGlkZW50aWZpZXI7IHRoZSByZWFzb24KKwkJICogZm9yIHRoaXMgaXMgdGhhdCBh biBhYnNlbnQgcGFyYW1ldGVyIG5hbWUgbXVzdCBwcm9kdWNlIGFuIGVtcHR5CisJCSAqIHN0cmlu Zywgbm90ICIiLCB3aGljaCBpcyB3aGF0IHdvdWxkIGhhcHBlbiBpZiB3ZSB3ZXJlIHRvIHVzZQor CQkgKiAle25hbWV9SSBoZXJlLiAgU28gd2UgYWRkIGFub3RoZXIgbGV2ZWwgb2YgaW5kaXJlY3Rp b24gdG8gYWxsb3cgdXMKKwkJICogdG8gaW5qZWN0IGEgInByZXNlbnQiIHBhcmFtZXRlci4KKwkJ ICovCisJCXBhcmFtb2JqID0gbmV3X29ianRyZWUoIiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVj dChwYXJhbW9iaiwgIiV7bW9kZX1zIiwKKwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJB TV9JTiA/ICJJTiIgOgorCQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX09VVCA/ICJP VVQiIDoKKwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9JTk9VVCA/ICJJTk9VVCIg OgorCQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX1ZBUklBRElDID8gIlZBUklBRElD IiA6CisJCQkJCQkJICJJTiIpOworCisJCS8qIE9wdGlvbmFsIHdob2xlc2FsZSBzdXBwcmVzc2lv biBvZiAibmFtZSIgb2NjdXJzIGhlcmUgKi8KKworCQluYW1lID0gbmV3X29ianRyZWUoIiIpOwor CQlhcHBlbmRfc3RyaW5nX29iamVjdChuYW1lLCAiJXtuYW1lfUkiLAorCQkJCQkJCSBwYXJhbS0+ bmFtZSA/IHBhcmFtLT5uYW1lIDogIk5VTEwiKTsKKworCQlhcHBlbmRfYm9vbF9vYmplY3QobmFt ZSwgInByZXNlbnQiLAorCQkJCQkJICAgcGFyYW0tPm5hbWUgPyB0cnVlIDogZmFsc2UpOworCisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXtuYW1lfXMiLCBuYW1lKTsKKworCQlk ZWZhdWx0dmFsID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwkJaWYgKFBvaW50ZXJJc1ZhbGlk KHBhcmFtLT5kZWZleHByKSkKKwkJeworCQkJY2hhciAqZXhwcjsKKworCQkJaWYgKGN1cmRlZiA9 PSBOVUxMKQorCQkJCWVsb2coRVJST1IsICJwcm9hcmdkZWZhdWx0cyBsaXN0IHRvbyBzaG9ydCIp OworCQkJZXhwciA9IGxmaXJzdChjdXJkZWYpOworCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChk ZWZhdWx0dmFsLCAiJXt2YWx1ZX1zIiwgZXhwcik7CisJCQljdXJkZWYgPSBsbmV4dChkZWZhdWx0 cywgY3VyZGVmKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QoZGVmYXVsdHZh bCwgInByZXNlbnQiLCBmYWxzZSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmos ICIle3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGFycmF5W3R5cG51 bSsrXSwgLTEpKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7ZGVmYXVs dH1zIiwgZGVmYXVsdHZhbCk7CisKKwkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmpl Y3Rfb2JqZWN0KHBhcmFtb2JqKSk7CisJfQorCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiV7 aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCSAgb2JqZWN0SWQpKTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwg IigiKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIiV7YXJndW1lbnRzOiwgfXMiLCBw YXJhbXMpOworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIikiKTsKKworCWlzZnVuY3Rp b24gPSAocHJvY0Zvcm0tPnByb2tpbmQgIT0gUFJPS0lORF9QUk9DRURVUkUpOworCisJaWYgKGlz ZnVuY3Rpb24pCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICJGVU5DVElPTiAl e3NpZ25hdHVyZX1zIiwgdG1wb2JqKTsKKwllbHNlCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNy ZWF0ZUZ1bmMsICJQUk9DRURVUkUgJXtzaWduYXR1cmV9cyIsIHRtcG9iaik7CisKKwkvKgorCSAq IEEgcmV0dXJuIHR5cGUgY2FuIGFkb3B0IG9uZSBvZiB0d28gZm9ybXM6IGVpdGhlciBhIFtTRVRP Rl0gc29tZV90eXBlLCBvcgorCSAqIGEgVEFCTEUobGlzdC1vZi10eXBlcykuICBXZSBjYW4gdGVs bCB0aGUgc2Vjb25kIGZvcm0gYmVjYXVzZSB3ZSBzYXcgYQorCSAqIHRhYmxlIHBhcmFtIGFib3Zl IHdoaWxlIHNjYW5uaW5nIHRoZSBhcmd1bWVudCBsaXN0LgorCSAqLworCWlmICh0YWJsZV9wYXJh bXMgPT0gTlVMTCkKKwl7CisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJ CSAicmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAicGxhaW4iKTsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wb2JqLCAiJXtzZXRvZn1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3JldHNl dCA/ICJTRVRPRiIgOiAiIik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cmV0 dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb3JldHR5 cGUsIC0xKSk7CisJfQorCWVsc2UKKwl7CisJCUxpc3QJICAgKnJldHR5cGVzID0gTklMOworCQlP YmpUcmVlCSAgICpwYXJhbW9iajsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiVEFCTEUi LCAxLAorCQkJCQkJCSAicmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAidGFibGUiKTsKKwkJ Zm9yICg7IHRhYmxlX3BhcmFtcyAhPSBOVUxMOyB0YWJsZV9wYXJhbXMgPSBsbmV4dChub2RlLT5w YXJhbWV0ZXJzLCB0YWJsZV9wYXJhbXMpKQorCQl7CisJCQlGdW5jdGlvblBhcmFtZXRlciAqcGFy YW0gPSBsZmlyc3QodGFibGVfcGFyYW1zKTsKKworCQkJcGFyYW1vYmogPSBuZXdfb2JqdHJlZSgi Iik7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChwYXJhbW9iaiwgIiV7bmFtZX1JIiwgcGFyYW0t Pm5hbWUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIle3R5cGV9VCIsCisJ CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBhcnJheVt0eXBudW0rK10sIC0xKSk7CisJ CQlyZXR0eXBlcyA9IGxhcHBlbmQocmV0dHlwZXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtb2Jq KSk7CisJCX0KKworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle3JldHR5cGVzOiwg fXMpIiwgcmV0dHlwZXMpOworCX0KKworCWlmIChpc2Z1bmN0aW9uKQorCQlhcHBlbmRfb2JqZWN0 X29iamVjdChjcmVhdGVGdW5jLCAiUkVUVVJOUyAle3JldHVybl90eXBlfXMiLCB0bXBvYmopOwor CisJLyogVFJBTlNGT1JNIEZPUiBUWVBFICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlRSQU5T Rk9STSIpOworCisJbnR5cGVzID0gZ2V0X2Z1bmNfdHJmdHlwZXMocHJvY1R1cCwgJnRyZnR5cGVz KTsKKwlmb3IgKGkgPSAwOyBpIDwgbnR5cGVzOyBpKyspCisJeworCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiRk9SIFRZUEUgJXt0eXBlfVQiLCAxLAorCQkJCQkJCSAidHlwZSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHRyZnR5cGVzW2ldLCAtMSkpOwor CQl0eXBlcyA9IGxhcHBlbmQodHlwZXMsIHRtcG9iaik7CisJfQorCisJaWYgKHR5cGVzKQorCQlh cHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIiV7Zm9yX3R5cGU6LCB9cyIsIHR5cGVzKTsKKwll bHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJ YXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIiV7dHJhbnNmb3JtX3R5cGV9cyIsIHRt cG9iaik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiTEFOR1VBR0UgJXts YW5ndWFnZX1JIiwKKwkJCQkJCSBOYW1lU3RyKGxhbmdGb3JtLT5sYW5uYW1lKSk7CisKKwlpZiAo aXNmdW5jdGlvbikKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3dp bmRvd31zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb2tpbmQgPT0gUFJPS0lORF9XSU5ET1cgPyAi V0lORE9XIiA6ICIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7dm9s YXRpbGl0eX1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3ZvbGF0aWxlID09IFBST1ZPTEFUSUxF X1ZPTEFUSUxFID8KKwkJCQkJCQkgIlZPTEFUSUxFIiA6CisJCQkJCQkJIHByb2NGb3JtLT5wcm92 b2xhdGlsZSA9PSBQUk9WT0xBVElMRV9TVEFCTEUgPworCQkJCQkJCSAiU1RBQkxFIiA6ICJJTU1V VEFCTEUiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtwYXJhbGxl bF9zYWZldHl9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9wYXJhbGxlbCA9PSBQUk9QQVJBTExF TF9TQUZFID8KKwkJCQkJCQkgIlBBUkFMTEVMIFNBRkUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0tPnBy b3BhcmFsbGVsID09IFBST1BBUkFMTEVMX1JFU1RSSUNURUQgPworCQkJCQkJCSAiUEFSQUxMRUwg UkVTVFJJQ1RFRCIgOiAiUEFSQUxMRUwgVU5TQUZFIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY3JlYXRlRnVuYywgIiV7bGVha3Byb29mfXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvbGVh a3Byb29mID8gIkxFQUtQUk9PRiIgOiAiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0 ZUZ1bmMsICIle3N0cmljdH1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb2lzc3RyaWN0ID8KKwkJ CQkJCQkgIlJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUIiA6CisJCQkJCQkJICJDQUxMRUQgT04g TlVMTCBJTlBVVCIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3Nl Y3VyaXR5X2RlZmluZXJ9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9zZWNkZWYgPworCQkJCQkJ CSAiU0VDVVJJVFkgREVGSU5FUiIgOiAiU0VDVVJJVFkgSU5WT0tFUiIpOworCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle2Nvc3R9cyIsCisJCQkJCQkJIG5ld19vYmp0cmVl X1ZBKCJDT1NUICV7Y29zdH1uIiwgMSwKKwkJCQkJCQkJCQkJImNvc3QiLCBPYmpUeXBlRmxvYXQs CisJCQkJCQkJCQkJCXByb2NGb3JtLT5wcm9jb3N0KSk7CisKKwkJdG1wb2JqID0gbmV3X29ianRy ZWUoIlJPV1MiKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9yb3dzID09IDApCisJCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJZWxzZQorCQkJYXBwZW5kX2Zs b2F0X29iamVjdCh0bXBvYmosICIle3Jvd3N9biIsIHByb2NGb3JtLT5wcm9yb3dzKTsKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIiV7cm93c31zIiwgdG1wb2JqKTsKKworCQl0 bXBvYmogPSBuZXdfb2JqdHJlZSgiU1VQUE9SVCAle25hbWV9cyIpOworCQlpZiAocHJvY0Zvcm0t PnByb3N1cHBvcnQpCisJCXsKKwkJCU9pZAkJCWFyZ3R5cGVzWzFdOworCisJCQkvKgorCQkJICog V2Ugc2hvdWxkIHF1YWxpZnkgdGhlIHN1cHBvcnQgZnVuY3Rpb24ncyBuYW1lIGlmIGl0IHdvdWxk bid0IGJlCisJCQkgKiByZXNvbHZlZCBieSBsb29rdXAgaW4gdGhlIGN1cnJlbnQgc2VhcmNoIHBh dGguCisJCQkgKi8KKwkJCWFyZ3R5cGVzWzBdID0gSU5URVJOQUxPSUQ7CisJCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXBvYmosICIle25hbWV9cyIsCisJCQkJCQkJCSBnZW5lcmF0ZV9mdW5jdGlv bl9uYW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJCQkJCQkJCQlOSUwsIGFyZ3R5 cGVzLAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJCQkJCQkJCQkJRVhQUl9LSU5E X05PTkUpKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJl c2VudCIsIGZhbHNlKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiJXtz dXBwb3J0fXMiLCB0bXBvYmopOworCX0KKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykK Kwl7CisJCURlZkVsZW0JKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlPYmpU cmVlCSAgICp0bXBvYmo7CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09 IDApCisJCXsKKwkJCVZhcmlhYmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICop IGRlZmVsLT5hcmc7CisJCQljaGFyICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0 bXQpOworCisJCQl0bXBvYmogPSBkZXBhcnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3Rt dC0+bmFtZSwgdmFsdWUpOworCQkJc2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJCX0KKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVGdW5jLCAi JXtzZXRfb3B0aW9uczogfXMiLCBzZXRzKTsKKworCS8qIEFkZCB0aGUgZnVuY3Rpb24gZGVmaW5p dGlvbiAqLworCSh2b2lkKSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwgQW51bV9w Z19wcm9jX3Byb3NxbGJvZHksICZpc251bGwpOworCWlmIChwcm9jRm9ybS0+cHJvbGFuZyA9PSBT UUxsYW5ndWFnZUlkICYmICFpc251bGwpCisJeworCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkJ aW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJCXByaW50X2Z1bmN0aW9uX3NxbGJvZHkoJmJ1ZiwgcHJv Y1R1cCk7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7ZGVmaW5pdGlv bn1zIiwgYnVmLmRhdGEpOworCX0KKwllbHNlIGlmIChwcm9iaW4gPT0gTlVMTCkKKwl7CisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICJBUyAle2RlZmluaXRpb259TCIsCisJCQkJ CQkJIHNvdXJjZSk7CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0 ZUZ1bmMsICJBUyAle29iamZpbGV9TCIsIHByb2Jpbik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGNyZWF0ZUZ1bmMsICIsICV7c3ltYm9sfUwiLCBzb3VyY2UpOworCX0KKworCVJlbGVhc2VTeXND YWNoZShsYW5nVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwlyZXR1cm4gY3Jl YXRlRnVuYzsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgY29t bWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVPcENsYXNzU3RtdChD b2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb3Bjb2lkID0gY21kLT5kLmNyZWF0ZW9w Yy5hZGRyZXNzLm9iamVjdElkOworCUhlYXBUdXBsZSAgIG9wY1R1cDsKKwlIZWFwVHVwbGUgICBv cGZUdXA7CisJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUZvcm1fcGdfb3BjbGFzcyBvcGNG b3JtOworCU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wb2JqOworCUxpc3QJICAg Kmxpc3Q7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qIERvbid0IGRlcGFyc2Ugc3FsIGNvbW1h bmRzIGdlbmVyYXRlZCB3aGlsZSBjcmVhdGluZyBleHRlbnNpb24gKi8KKwlpZiAoY21kLT5pbl9l eHRlbnNpb24pCisJCXJldHVybiBOVUxMOworCisJb3BjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENM QU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGNvaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo b3BjVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wY2xhc3Mg d2l0aCBPSUQgJXUiLCBvcGNvaWQpOworCW9wY0Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRT VFJVQ1Qob3BjVHVwKTsKKworCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwg b3BjRm9ybS0+b3BjZmFtaWx5KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRo IE9JRCAldSIsIG9wY0Zvcm0tPm9wY2ZhbWlseSk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFt aWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgor CSAqIENSRUFURSBPUEVSQVRPUiBDTEFTUyAle2lkZW50aXR5fUQgJXtkZWZhdWx0fXMgRk9SIFRZ UEUgJXt0eXBlfVQgVVNJTkcKKwkgKiAle2FtbmFtZX1JICV7b3BmYW1pbHl9cyBBUyAle2l0ZW1z OiwgfXMKKwkgKi8KKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIENM QVNTICV7aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGNGb3JtLT5vcGNuYW1lc3BhY2Us CisJCQkJCQkJCQkJCQkgICBOYW1lU3RyKG9wY0Zvcm0tPm9wY25hbWUpKSk7CisKKwkvKiBBZGQg dGhlIERFRkFVTFQgY2xhdXNlICovCisJYXBwZW5kX3N0cmluZ19vYmplY3Qoc3RtdCwgIiV7ZGVm YXVsdH1zIiwKKwkJCQkJCSBvcGNGb3JtLT5vcGNkZWZhdWx0ID8gIkRFRkFVTFQiIDogIiIpOwor CisJLyogQWRkIHRoZSBGT1IgVFlQRSBjbGF1c2UgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChz dG10LCAiRk9SIFRZUEUgJXt0eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9w Y0Zvcm0tPm9wY2ludHlwZSwgLTEpKTsKKworCS8qIEFkZCB0aGUgVVNJTkcgY2xhdXNlICovCisJ YXBwZW5kX3N0cmluZ19vYmplY3Qoc3RtdCwgIlVTSU5HICV7YW1uYW1lfUkiLCBnZXRfYW1fbmFt ZShvcGNGb3JtLT5vcGNtZXRob2QpKTsKKworCS8qCisJICogQWRkIHRoZSBGQU1JTFkgY2xhdXNl OyBidXQgaWYgaXQgaGFzIHRoZSBzYW1lIG5hbWUgYW5kIG5hbWVzcGFjZSBhcyB0aGUKKwkgKiBv cGNsYXNzLCB0aGVuIGhhdmUgaXQgZXhwYW5kIHRvIGVtcHR5LCBiZWNhdXNlIGl0IHdvdWxkIGNh dXNlIGEgZmFpbHVyZQorCSAqIGlmIHRoZSBvcGZhbWlseSB3YXMgY3JlYXRlZCBpbnRlcm5hbGx5 LgorCSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJGQU1JTFkgJXtvcGZhbWlseX1EIiwg MSwKKwkJCQkJCSAib3BmYW1pbHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVT dHIob3BmRm9ybS0+b3BmbmFtZSkpKTsKKworCWlmIChzdHJjbXAoTmFtZVN0cihvcGZGb3JtLT5v cGZuYW1lKSwgTmFtZVN0cihvcGNGb3JtLT5vcGNuYW1lKSkgPT0gMCAmJgorCQlvcGZGb3JtLT5v cGZuYW1lc3BhY2UgPT0gb3BjRm9ybS0+b3BjbmFtZXNwYWNlKQorCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0 bXQsICIle29wZmFtaWx5fXMiLCAgdG1wb2JqKTsKKworCS8qCisJICogQWRkIHRoZSBpbml0aWFs IGl0ZW0gbGlzdC4gIE5vdGUgd2UgYWx3YXlzIGFkZCB0aGUgU1RPUkFHRSBjbGF1c2UsIGV2ZW4K KwkgKiB3aGVuIGl0IGlzIGltcGxpY2l0IGluIHRoZSBvcmlnaW5hbCBjb21tYW5kLgorCSAqLwor CXRtcG9iaiA9IG5ld19vYmp0cmVlKCJTVE9SQUdFIik7CisJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wY0Zvcm0t Pm9wY2tleXR5cGUgIT0gSW52YWxpZE9pZCA/CisJCQkJCQkJCQkJCSAgb3BjRm9ybS0+b3Bja2V5 dHlwZSA6IG9wY0Zvcm0tPm9wY2ludHlwZSwKKwkJCQkJCQkJCQkJICAtMSkpOworCWxpc3QgPSBs aXN0X21ha2UxKG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogQWRkIHRoZSBkZWNs YXJlZCBvcGVyYXRvcnMgKi8KKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5jcmVhdGVvcGMub3BlcmF0 b3JzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKm9wZXIgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRy ZWUJICAgKnRtcG9iajsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiT1BFUkFUT1IgJXtu dW19biAle29wZXJhdG9yfU8oJXtsdHlwZX1ULCAle3J0eXBlfVQpIiwKKwkJCQkJCQkgNCwKKwkJ CQkJCQkgIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVyLT5udW1iZXIsCisJCQkJCQkJICJvcGVy YXRvciIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcGVyLT5vYmplY3QpLAorCQkJ CQkJCSJsdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUo b3Blci0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkicnR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBB ZGQgdGhlIEZPUiBTRUFSQ0ggLyBGT1IgT1JERVIgQlkgY2xhdXNlICovCisJCWlmIChvcGVyLT5z b3J0ZmFtaWx5ID09IEludmFsaWRPaWQpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmos ICIle3B1cnBvc2V9cyIsICJGT1IgU0VBUkNIIik7CisJCWVsc2UKKwkJeworCQkJT2JqVHJlZQkg ICAqdG1wb2JqMjsKKworCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgT1JERVIgQlkg JXtvcGZhbWlseX1EIiwgMCk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmoyLCAib3Bm YW1pbHkiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yRmFt aWx5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSBvcGVyLT5zb3J0ZmFtaWx5KSk7CisJCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3B1cnBvc2V9cyIsIHRtcG9iajIpOworCQl9 CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ fQorCisJLyogQWRkIHRoZSBkZWNsYXJlZCBzdXBwb3J0IGZ1bmN0aW9ucyAqLworCWZvcmVhY2go Y2VsbCwgY21kLT5kLmNyZWF0ZW9wYy5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIg KnByb2MgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnRtcG9iajsKKwkJSGVhcFR1cGxl CXByb2NUdXA7CisJCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJT2lkCQkgICAqcHJvYXJndHlw ZXM7CisJCUxpc3QJICAgKmFyZ2xpc3QgPSBOSUw7CisJCWludAkJCWk7CisKKwkJcHJvY1R1cCA9 IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2MtPm9iamVjdCkp OworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvYy0+b2JqZWN0KTsKKwkJcHJv Y0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIkZVTkNUSU9OICV7bnVtfW4gKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAl e2Z1bmN0aW9ufUQiLAorCQkJCQkJCSA0LAorCQkJCQkJCSAibnVtIiwgT2JqVHlwZUludGVnZXIs IHByb2MtPm51bWJlciwKKwkJCQkJCQkgImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkgInJ0eXBl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmln aHR0eXBlLCAtMSksCisJCQkJCQkJICJmdW5jdGlvbiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJCSAgTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKworCQlwcm9hcmd0eXBlcyA9 IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9y bS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2JqVHJlZQkgICAqYXJnOworCisJCQlhcmcgPSBu ZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJYXJnbGlzdCA9IGxh cHBlbmQoYXJnbGlzdCwgbmV3X29iamVjdF9vYmplY3QoYXJnKSk7CisJCX0KKworCQlhcHBlbmRf Zm9ybWF0X3N0cmluZyh0bXBvYmosICIoIik7CisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2Jq LCAiJXthcmd0eXBlczosIH1UIiwgYXJnbGlzdCk7CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRt cG9iaiwgIikiKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwkJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJYXBwZW5kX2Fy cmF5X29iamVjdChzdG10LCAiQVMgJXtpdGVtczosIH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lz Q2FjaGUob3BmVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsKKworCXJldHVybiBzdG10 OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVRyaWdTdG10IChDUkVBVEUgT1BFUkFUT1Ig RkFNSUxZKQorICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhh dCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVh dGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9wRmFt aWx5KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZSAgIG9wZlR1 cDsKKwlIZWFwVHVwbGUgICBhbVR1cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJRm9y bV9wZ19hbSAgYW1Gb3JtOworCU9ialRyZWUJICAgKmNvcGZTdG10OworCisJb3BmVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJ b3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCWFtVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVtKG9wZkZvcm0tPm9wZm1l dGhvZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChhbVR1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kICV1IiwKKwkJCSBvcGZGb3JtLT5v cGZtZXRob2QpOworCWFtRm9ybSA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXApOworCisJ Y29wZlN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50 aXR5fUQgVVNJTkcgJXthbW5hbWV9SSIsCisJCQkJCQkJICAyLAorCQkJCQkJCSAgImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZG b3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICAgTmFtZVN0cihvcGZGb3JtLT5vcGZu YW1lKSksCisJCQkJCQkJICAiYW1uYW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihhbUZvcm0t PmFtbmFtZSkpOworCisJUmVsZWFzZVN5c0NhY2hlKGFtVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUo b3BmVHVwKTsKKworCXJldHVybiBjb3BmU3RtdDsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9DcmVhdGVQb2xpY3lTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CUNyZWF0ZVBvbGljeVN0bXQgKm5vZGUgPSAoQ3JlYXRlUG9saWN5U3RtdCAqKSBwYXJzZXRyZWU7 CisJT2JqVHJlZQkgICAqcG9saWN5OworCisJcG9saWN5ID0gbmV3X29ianRyZWVfVkEoIkNSRUFU RSBQT0xJQ1kgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlU3Ry aW5nLCBub2RlLT5wb2xpY3lfbmFtZSk7CisKKwkvKiBhZGQgdGhlIHJlc3Qgb2YgdGhlIHN0dWZm ICovCisJYWRkX3BvbGljeV9jbGF1c2VzKHBvbGljeSwgb2JqZWN0SWQsIG5vZGUtPnJvbGVzLCAh IW5vZGUtPnF1YWwsCisJCQkJCSAgICEhbm9kZS0+d2l0aF9jaGVjayk7CisKKwlyZXR1cm4gcG9s aWN5OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyUG9saWN5U3RtdChPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlclBvbGljeVN0bXQgKm5vZGUgPSAo QWx0ZXJQb2xpY3lTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpwb2xpY3k7CisKKwlw b2xpY3kgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgUE9MSUNZICV7aWRlbnRpdHl9SSIsIDEsCisJ CQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+cG9saWN5X25hbWUpOworCisJ LyogYWRkIHRoZSByZXN0IG9mIHRoZSBzdHVmZiAqLworCWFkZF9wb2xpY3lfY2xhdXNlcyhwb2xp Y3ksIG9iamVjdElkLCBub2RlLT5yb2xlcywgISFub2RlLT5xdWFsLAorCQkJCQkgICAhIW5vZGUt PndpdGhfY2hlY2spOworCisJcmV0dXJuIHBvbGljeTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBD cmVhdGVTY2hlbWFTdG10LgorICoKKyAqIEdpdmVuIGEgc2NoZW1hIE9JRCBhbmQgdGhlIHBhcnNl dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0NyZWF0ZVNjaGVtYVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3Jl YXRlU2NoZW1hU3RtdCAqbm9kZSA9IChDcmVhdGVTY2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlP YmpUcmVlCQkJICpjcmVhdGVTY2hlbWE7CisJT2JqVHJlZQkJCSAqYXV0aDsKKworCS8qCisJICog VmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMg JXtuYW1lfUkgJXthdXRob3JpemF0aW9ufXMKKwkgKi8KKwljcmVhdGVTY2hlbWEgPSBuZXdfb2Jq dHJlZSgiQ1JFQVRFIFNDSEVNQSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU2No ZW1hLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAi SUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTY2hl bWEsICIle25hbWV9SSIsIG5vZGUtPnNjaGVtYW5hbWUpOworCisJYXV0aCA9IG5ld19vYmp0cmVl KCJBVVRIT1JJWkFUSU9OIik7CisJaWYgKG5vZGUtPmF1dGhyb2xlKQorCQlhcHBlbmRfc3RyaW5n X29iamVjdChhdXRoLCAiJXthdXRob3JpemF0aW9uX3JvbGV9SSIsCisJCQkJCQkJIGdldF9yb2xl c3BlY19uYW1lKG5vZGUtPmF1dGhyb2xlKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2Jq ZWN0KGF1dGgsICIle2F1dGhvcml6YXRpb25fcm9sZX1JICIpOworCQlhcHBlbmRfYm9vbF9vYmpl Y3QoYXV0aCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNy ZWF0ZVNjaGVtYSwgIiV7YXV0aG9yaXphdGlvbn1zIiwgYXV0aCk7CisKKwlyZXR1cm4gY3JlYXRl U2NoZW1hOworfQorCisvKgorICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgZG9tYWlu LgorICovCitzdGF0aWMgY2hhciAqCitEb21haW5HZXREZWZhdWx0KEhlYXBUdXBsZSBkb21UdXAp Cit7CisJRGF0dW0JZGVmOworCU5vZGUgICAqZGVmdmFsOworCWNoYXIgICAqZGVmc3RyOworCWJv b2wJaXNudWxsOworCisJZGVmID0gU3lzQ2FjaGVHZXRBdHRyKFRZUEVPSUQsIGRvbVR1cCwgQW51 bV9wZ190eXBlX3R5cGRlZmF1bHRiaW4sCisJCQkJCQkJICZpc251bGwpOworCWlmIChpc251bGwp CisJCWVsb2coRVJST1IsICJkb21haW4gXCIlc1wiIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZh bHVlIiwKKwkJCSBOYW1lU3RyKCgoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QoZG9tVHVwKSktPnR5 cG5hbWUpKTsKKwlkZWZ2YWwgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyhkZWYp KTsKKwlkZWZzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFsLCBOVUxMIC8qIGRwY29udGV4 dD8gKi8sCisJCQkJCQkJCQkgICBmYWxzZSwgZmFsc2UpOworCisJcmV0dXJuIGRlZnN0cjsKK30K KworLyoKKyAqIERlcGFyc2UgYSBBbHRlckRvbWFpblN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQWx0ZXJEb21haW5TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVl LAorCQkJCQkJT2JqZWN0QWRkcmVzcyBjb25zdHJhaW50QWRkcikKK3sKKwlBbHRlckRvbWFpblN0 bXQgKm5vZGUgPSAoQWx0ZXJEb21haW5TdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZG9t VHVwOworCUZvcm1fcGdfdHlwZSBkb21Gb3JtOworCU9ialRyZWUJICAgKmFsdGVyRG9tOworCWNo YXIJICAgKmZtdDsKKwljb25zdCBjaGFyICp0eXBlOworCisJLyogQUxURVIgRE9NQUlOIERST1Ag Q09OU1RSQUlOVCBpcyBoYW5kbGVkIGJ5IHRoZSBEUk9QIHN1cHBvcnQgY29kZSAqLworCWlmIChu b2RlLT5zdWJ0eXBlID09ICdYJykKKwkJcmV0dXJuIE5VTEw7CisKKwlkb21UdXAgPSBTZWFyY2hT eXNDYWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChkb21U dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZG9tYWluIHdpdGgg T0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJZG9tRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNU UlVDVChkb21UdXApOworCisJc3dpdGNoIChub2RlLT5zdWJ0eXBlKQorCXsKKwkJY2FzZSAnVCc6 CisJCQkvKiBTRVQgREVGQVVMVCAvIERST1AgREVGQVVMVCAqLworCQkJaWYgKG5vZGUtPmRlZiA9 PSBOVUxMKQorCQkJeworCQkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJCXR5cGUgPSAiZHJv cCBkZWZhdWx0IjsKKwkJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRv bSwgIiV7aWRlbnRpdHl9RCBEUk9QIERFRkFVTFQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgIE5hbWVT dHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlmbXQgPSAi QUxURVIgRE9NQUlOIjsKKwkJCQl0eXBlID0gInNldCBkZWZhdWx0IjsKKwkJCQlhbHRlckRvbSA9 IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJ CQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCBTRVQgREVGQVVM VCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVz cGFjZSwKKwkJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRG9tLCAiJXtkZWZhdWx0fXMiLCBEb21haW5HZXRE ZWZhdWx0KGRvbVR1cCkpOworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSAnTic6CisJCQkvKiBE Uk9QIE5PVCBOVUxMICovCisJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAiZHJv cCBub3QgbnVsbCI7CisJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9t LCAiJXtpZGVudGl0eX1EIERST1AgTk9UIE5VTEwiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3Ry KGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQlicmVhazsKKwkJY2FzZSAnTyc6CisJCQkvKiBTRVQg Tk9UIE5VTEwgKi8KKwkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJzZXQgbm90 IG51bGwiOworCQkJYWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgdHlwZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7 aWRlbnRpdHl9RCBTRVQgTk9UIE5VTEwiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZv cm0tPnR5cG5hbWUpKSk7CisJCQlicmVhazsKKwkJY2FzZSAnQyc6CisJCQkvKiBBREQgQ09OU1RS QUlOVC4gIE9ubHkgQ0hFQ0sgY29uc3RyYWludHMgYXJlIHN1cHBvcnRlZCBieSBkb21haW5zICov CisJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAiYWRkIGNvbnN0cmFpbnQiOwor CQkJYWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgdHlwZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9 RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCS8q IGEgbmV3IGNvbnN0cmFpbnQgaGFzIGEgbmFtZSBhbmQgZGVmaW5pdGlvbiAqLworCQkJYXBwZW5k X3N0cmluZ19vYmplY3QoYWx0ZXJEb20sICJBREQgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFt ZX1zIiwKKwkJCQkJCQkJIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyYWludEFkZHIub2JqZWN0 SWQpKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRG9tLCAiJXtkZWZpbml0aW9ufXMi LAorCQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyYWlu dEFkZHIub2JqZWN0SWQpKTsKKwkJCWJyZWFrOworCQljYXNlICdWJzoKKwkJCS8qIFZBTElEQVRF IENPTlNUUkFJTlQgKi8KKwkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJ2YWxp ZGF0ZSBjb25zdHJhaW50IjsKKworCQkJLyoKKwkJCSAqIFByb2Nlc3Mgc3VidHlwZT1zcGVjaWZp YyBvcHRpb25zLiBWYWxpZGF0aW9uIGEgY29uc3RyYWludAorCQkJICogcmVxdWlyZXMgaXRzIG5h bWUuCisJCQkgKi8KKwkJCWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIs IE9ialR5cGVTdHJpbmcsIHR5cGUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20s ICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZv cm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5h bWUpKSk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRvbSwgIlZBTElEQVRFIENPTlNU UkFJTlQgJXtjb25zdHJhaW50X25hbWV9cyIsIG5vZGUtPm5hbWUpOworCisJCQlicmVhazsKKwkJ ZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHN1YnR5cGUgJWMiLCBub2RlLT5zdWJ0 eXBlKTsKKwl9CisKKwkvKiBkb25lICovCisJUmVsZWFzZVN5c0NhY2hlKGRvbVR1cCk7CisKKwly ZXR1cm4gYWx0ZXJEb207Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU2VxU3RtdC4KKyAq CisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZSBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFu ZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVTZXFTdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUJKmNyZWF0ZVNlcTsKKwlPYmpUcmVl CSp0bXBvYmo7CisJUmVsYXRpb24JcmVsYXRpb247CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNl cWRhdGE7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3Jt OworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQ3JlYXRlU2VxU3RtdCAq Y3JlYXRlU2VxU3RtdCA9IChDcmVhdGVTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICog U2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSh2aWEgQ1JFQVRF IFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlp ZiAoY3JlYXRlU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCXNlcWRh dGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVjdElkKTsKKworCXJlbGF0aW9uID0gcmVsYXRp b25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZWwgPSB0YWJsZV9vcGVuKFNl cXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hT eXNDYWNoZUNvcHkxKFNFUVJFTElELAorCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKG9iamVj dElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlICV1IiwKKwkJCSBvYmplY3RJZCk7CisK KwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisKKwkv KgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFNF UVVFTkNFICV7aWRlbnRpdHl9RAorCSAqLworCWNyZWF0ZVNlcSA9IG5ld19vYmp0cmVlKCJDUkVB VEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVNlcSwgIiV7cGVyc2lzdGVuY2V9 cyIsCisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJz aXN0ZW5jZSkpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9u LT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUocmVsYXRpb24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTZXEsICJTRVFVRU5D RSAle2lkZW50aXR5fUQiLCB0bXBvYmopOworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLwor CWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ2FjaGUoY3JlYXRlU2VxLCBzZXFm b3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUo Y3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVw YXJzZV9TZXFfSW5jcmVtZW50QnkoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1z ID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWludmFsdWUoY3JlYXRlU2VxLCBzZXFmb3Jt LCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUo Y3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVw YXJzZV9TZXFfU3RhcnR3aXRoKGNyZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9 IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1Jlc3RhcnQoY3JlYXRlU2VxLCBzZXFkYXRhKSk7 CisKKwkvKiBXZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCWFw cGVuZF9hcnJheV9vYmplY3QoY3JlYXRlU2VxLCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsK KworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2Uo cmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRlU2VxOworfQorCisv KgorICogRGVwYXJzZSBhIENyZWF0ZVN0bXQgKENSRUFURSBUQUJMRSkuCisgKgorICogR2l2ZW4g YSB0YWJsZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJQ3JlYXRlU3RtdCAqbm9kZSA9IChDcmVhdGVTdG10ICopIHBhcnNldHJlZTsK KwlSZWxhdGlvbglyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJTGlzdAkgICAqZHBjb250ZXh0OworCU9ialRyZWUJKmNyZWF0ZVN0bXQ7CisJT2Jq VHJlZQkqdG1wb2JqOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsK KworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle3BlcnNpc3RlbmNl fXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIFtPRgorCSAqICV7b2ZfdHlw ZX1UIHwgUEFSVElUSU9OIE9GICV7cGFyZW50X2lkZW50aXR5fURdICV7dGFibGVfZWxlbWVudHN9 cworCSAqICV7aW5oZXJpdHN9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7 d2l0aF9jbGF1c2V9cworCSAqICV7b25fY29tbWl0fXMgJXt0YWJsZXNwYWNlfXMKKwkgKi8KKwlj cmVhdGVTdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY3JlYXRlU3RtdCwgIiV7cGVyc2lzdGVuY2V9cyIsCisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNl X3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSkpOworCisJYXBwZW5kX2Zvcm1h dF9zdHJpbmcoY3JlYXRlU3RtdCwgIlRBQkxFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChj cmVhdGVTdG10LCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlz dHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxh dGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNy ZWF0ZVN0bXQsICIle2lkZW50aXR5fUQiLCB0bXBvYmopOworCisJZHBjb250ZXh0ID0gZGVwYXJz ZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJ CQlvYmplY3RJZCk7CisKKwkvKgorCSAqIFR5cGVkIHRhYmxlcyBhbmQgcGFydGl0aW9ucyB1c2Ug YSBzbGlnaHRseSBkaWZmZXJlbnQgZm9ybWF0IHN0cmluZzogd2UKKwkgKiBtdXN0IG5vdCBwdXQg dGFibGVfZWxlbWVudHMgd2l0aCBwYXJlbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nLAor CSAqIGJlY2F1c2UgaWYgdGhlcmUgYXJlIG5vIG9wdGlvbnMgdGhlIHBhcmVucyBtdXN0IG5vdCBi ZSBlbWl0dGVkOyBhbmQKKwkgKiBhbHNvLCB0eXBlZCB0YWJsZXMgZG8gbm90IGFsbG93IGZvciBp bmhlcml0YW5jZS4KKwkgKi8KKwlpZiAobm9kZS0+b2ZUeXBlbmFtZSB8fCBub2RlLT5wYXJ0Ym91 bmQpCisJeworCQlMaXN0ICAgICAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogV2Ug Y2FuJ3QgcHV0IHRhYmxlIGVsZW1lbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nIGFzIGFu IGFycmF5CisJCSAqIHN1cnJvdW5kZWQgYnkgcGFyZW5zIGhlcmUsIGJlY2F1c2UgYW4gZW1wdHkg Y2xhdXNlIHdvdWxkIGNhdXNlIGEKKwkJICogc3ludGF4IGVycm9yLiAgVGhlcmVmb3JlLCB3ZSB1 c2UgYW4gaW5kaXJlY3Rpb24gZWxlbWVudCBhbmQgc2V0CisJCSAqIHByZXNlbnQ9ZmFsc2Ugd2hl biB0aGVyZSBhcmUgbm8gZWxlbWVudHMuCisJCSAqLworCQlpZiAobm9kZS0+b2ZUeXBlbmFtZSkK KwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3R5cGUocmVsYXRpb24tPnJkX3JlbC0+ cmVsb2Z0eXBlLCAtMSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiT0Yg JXtvZl90eXBlfVQiLCB0bXBvYmopOworCQl9CisJCWVsc2UKKwkJeworCQkJTGlzdCAgICAgKnBh cmVudHM7CisJCQlPYmpFbGVtICAqZWxlbTsKKworCQkJcGFyZW50cyA9IGRlcGFyc2VfSW5oUmVs YXRpb25zKG9iamVjdElkKTsKKwkJCWVsZW0gPSAoT2JqRWxlbSAqKSBsaW5pdGlhbChwYXJlbnRz KTsKKworCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHBhcmVudHMpID09IDEpOworCisJCQlhcHBlbmRf Zm9ybWF0X3N0cmluZyhjcmVhdGVTdG10LCAiUEFSVElUSU9OIE9GIik7CisKKwkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3BhcmVudF9pZGVudGl0eX1EIiwKKwkJCQkJCQkJ IGVsZW0tPnZhbHVlLm9iamVjdCk7CisJCX0KKworCQl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxl RWxlbWVudHMocmVsYXRpb24sIG5vZGUtPnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJ CSAgdHJ1ZSwgICAgICAvKiB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOyAgICAv KiBub3QgY29tcG9zaXRlICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxl ZWx0cywgb2JqZWN0SWQsIEludmFsaWRPaWQpOworCisJCWlmICh0YWJsZWVsdHMgPT0gTklMKQor CQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiIik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3Qo dG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJfQorCQllbHNlCisJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiKCV7ZWxlbWVudHM6LCB9cykiLCAxLAorCQkJCQkJCQkgImVsZW1lbnRzIiwg T2JqVHlwZUFycmF5LCB0YWJsZWVsdHMpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0 ZVN0bXQsICIle3RhYmxlX2VsZW1lbnRzfXMiLCB0bXBvYmopOworCX0KKwllbHNlCisJeworCQlM aXN0ICAgICAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgbm8gbmVl ZCB0byBwcm9jZXNzIExJS0UgY2xhdXNlcyBzZXBhcmF0ZWx5OyB0aGV5IGhhdmUKKwkJICogYWxy ZWFkeSBiZWVuIHRyYW5zZm9ybWVkIGludG8gY29sdW1ucyBhbmQgY29uc3RyYWludHMuCisJCSAq LworCisJCS8qCisJCSAqIFByb2Nlc3MgdGFibGUgZWxlbWVudHM6IGNvbHVtbiBkZWZpbml0aW9u cyBhbmQgY29uc3RyYWludHMuICBPbmx5CisJCSAqIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgYXJl IG9idGFpbmVkIGZyb20gdGhlIHBhcnNlIG5vZGUgaXRzZWxmLiAgVG8KKwkJICogZ2V0IGNvbnN0 cmFpbnRzIHdlIHJlbHkgb24gcGdfY29uc3RyYWludCwgYmVjYXVzZSB0aGUgcGFyc2Ugbm9kZQor CQkgKiBtaWdodCBiZSBtaXNzaW5nIHNvbWUgdGhpbmdzIHN1Y2ggYXMgdGhlIG5hbWUgb2YgdGhl IGNvbnN0cmFpbnRzLgorCQkgKi8KKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRz KHJlbGF0aW9uLCBub2RlLT50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIGZhbHNl LCAgICAgLyogbm90IHR5cGVkIHRhYmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7ICAgIC8qIG5v dCBjb21wb3NpdGUgKi8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRz LCBvYmplY3RJZCwgSW52YWxpZE9pZCk7CisKKwkJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVT dG10LCAiKCV7dGFibGVfZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOworCisJCS8qCisJCSAq IEFkZCBpbmhlcml0YW5jZSBzcGVjaWZpY2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRo ZSBsaXN0IG9mCisJCSAqIHBhcmVudHMgZnJvbSB0aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhh dCBtYXkgbGFjayB0aGUgYWN0dWFsCisJCSAqIHF1YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50 IHJlbGF0aW9ucy4gIFJhdGhlciB0aGFuIHRyeWluZyB0bworCQkgKiByZS1yZXNvbHZlIHRoZW0g ZnJvbSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSAqIG1v cmUgYWNjdXJhdGUgYW5kIGNvbnZlbmllbnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2luaGVyaXRzLgor CQkgKi8KKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIklOSEVSSVRTIik7CisJCWlmIChsaXN0X2xl bmd0aChub2RlLT5pbmhSZWxhdGlvbnMpID4gMCkKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1w b2JqLCAiKCV7cGFyZW50czosIH1EKSIsIGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKSk7 CisJCWVsc2UKKwkJeworCQkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwgIigle3BhcmVudHM6 LCB9RCkiKTsKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2Up OworCQl9CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2luaGVyaXRzfXMi LCB0bXBvYmopOworCX0KKworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJ aWYgKG5vZGUtPnRhYmxlc3BhY2VuYW1lKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmos ICIle3RhYmxlc3BhY2V9SSIsIG5vZGUtPnRhYmxlc3BhY2VuYW1lKTsKKwllbHNlCisJeworCQlh cHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiJXt0YWJsZXNwYWNlfUkiKTsKKwkJYXBwZW5kX2Jv b2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNyZWF0ZVN0bXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcG9iaik7CisJYXBwZW5kX29i amVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7b25fY29tbWl0fXMiLAorCQkJCQkJICBkZXBhcnNl X09uQ29tbWl0Q2xhdXNlKG5vZGUtPm9uY29tbWl0KSk7CisKKwkvKiBGT1IgVkFMVUVTIGNsYXVz ZSAqLworCWlmIChub2RlLT5wYXJ0Ym91bmQpCisJeworCQkvKgorCQkgKiBHZXQgcGdfY2xhc3Mu cmVscGFydGJvdW5kLiBXZSBjYW5ub3QgdXNlIHBhcnRib3VuZCBpbiB0aGUKKwkJICogcGFyc2V0 cmVlIGRpcmVjdGx5IGFzIGl0J3MgdGhlIG9yaWdpbmFsIHBhcnRib3VuZCBleHByZXNzaW9uCisJ CSAqIHdoaWNoIGhhdmVuJ3QgYmVlbiB0cmFuc2Zvcm1lZC4KKwkJICovCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3BhcnRpdGlvbl9ib3VuZH1zIiwKKwkJCQkJCQkgUmVs YXRpb25HZXRQYXJ0aXRpb25Cb3VuZChvYmplY3RJZCkpOworCX0KKworCS8qIFBBUlRJVElPTiBC WSBjbGF1c2UgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiUEFSVElUSU9OIEJZIik7CisJaWYg KHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZpbml0aW9ufXMiLCBwZ19nZXRf cGFydGtleWRlZl9zaW1wbGUob2JqZWN0SWQpKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9v YmplY3QodG1wb2JqLCAiJXtkZWZpbml0aW9ufXMiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0 ZVN0bXQsICIle3BhcnRpdGlvbl9ieX1zIiwgdG1wb2JqKTsKKworCS8qIFVTSU5HIGNsYXVzZSAq LworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJVU0lORyIpOworCWlmIChub2RlLT5hY2Nlc3NNZXRo b2QpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7YWNjZXNzX21ldGhvZH1JIiwg bm9kZS0+YWNjZXNzTWV0aG9kKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1w b2JqLCAiJXthY2Nlc3NfbWV0aG9kfUkiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwg InByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQs ICIle2FjY2Vzc19tZXRob2R9cyIsIHRtcG9iaik7CisKKwkvKiBXSVRIIGNsYXVzZSAqLworCXRt cG9iaiA9IG5ld19vYmp0cmVlKCJXSVRIIik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlv bnMpCisJeworCQlPYmpUcmVlICAgICp0bXBvYmoyOworCQlEZWZFbGVtICpvcHQgPSAoRGVmRWxl bSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJdG1wb2JqMiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZh bHNlKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqMikp OworCX0KKworCWlmIChsaXN0KQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle3dp dGg6LCB9cykiLCBsaXN0KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJw cmVzZW50IiwgZmFsc2UpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7 d2l0aF9jbGF1c2V9cyIsIHRtcG9iaik7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVTdG10OworfQorCisvKgorICogRGVwYXJz ZSBhIERlZmluZVN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBzZWNvbmRhcnlP YmopCit7CisJRGVmaW5lU3RtdCAqZGVmaW5lID0gKERlZmluZVN0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUJICAgKmRlZlN0bXQgPSBOVUxMOworCisJc3dpdGNoIChkZWZpbmUtPmtpbmQpCisJ eworCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0 bXRfT3BlcmF0b3Iob2JqZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVD VF9UWVBFOgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UeXBlKG9iamVjdElkLCBk ZWZpbmUpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBv cnRlZCBvYmplY3Qga2luZCIpOworCX0KKworCXJldHVybiBkZWZTdG10OworfQorCisvKgorICog RGVwYXJzZSBhIERlZmluZVN0bXQgKENSRUFURSBPUEVSQVRPUikKKyAqCisgKiBHaXZlbiBhIHRy aWdnZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9i alRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVm aW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZSAgIG9wclR1cDsKKwlPYmpUcmVlCSAgICpz dG10OworCU9ialRyZWUJICAgKnRtcG9iajsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUZvcm1f cGdfb3BlcmF0b3Igb3ByRm9ybTsKKworCW9wclR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVST0lE LCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9w clR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciB3 aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0b3IpIEdF VFNUUlVDVChvcHJUdXApOworCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFU T1IgJXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wckZvcm0tPm9wcm5hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCSAgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIFBST0NF RFVSRSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJQUk9DRURVUkU9JXtwcm9jZWR1cmV9 RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwcm9jZWR1cmUiLAorCQkJ CQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5v cHJjb2RlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisKKwkvKiBMRUZUQVJHICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkxFRlRBUkc9 IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxlZnRhcmciKTsKKwlpZiAo T2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w b2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5v cHJsZWZ0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNl bnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisKKwkvKiBSSUdIVEFSRyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJSSUdI VEFSRz0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmlnaHRhcmciKTsK KwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJyaWdodCkpCisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRtcG9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3By Rm9ybS0+b3BycmlnaHQsIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq LCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKworCS8qIENPTU1VVEFUT1IgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiQ09NTVVUQVRPUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi Y29tbXV0YXRvciIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmNvbSkpCisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3Blcn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZv cm0tPm9wcmNvbSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNl bnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisKKwkvKiBORUdBVE9SICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk5FR0FU T1I9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm5lZ2F0b3IiKTsKKwlp ZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJuZWdhdGUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBvYmosICIle29wZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJuZWdhdGUp KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2Up OworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJ LyogUkVTVFJJQ1QgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiUkVTVFJJQ1Q9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3RyaWN0Iik7CisJaWYgKE9pZElz VmFsaWQob3ByRm9ybS0+b3BycmVzdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwg IiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJv Y2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcnJlc3QpKTsKKwll bHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogSk9J TiAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJKT0lOPSIsIDEsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJqb2luIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3By am9pbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfUQiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpvaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ib29s X29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogTUVSR0VTICovCisJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIk1FUkdFUyIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJtZXJnZXMiKTsKKwlpZiAoIW9wckZvcm0tPm9wcmNhbm1lcmdlKQorCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIEhBU0hFUyAqLworCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJIQVNIRVMiLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAiaGFzaGVzIik7CisJaWYgKCFvcHJGb3JtLT5vcHJjYW5oYXNoKQorCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3Rt dCwgIigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3ByVHVwKTsK KworCXJldHVybiBzdG10OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBUWVBFIHN0YXRl bWVudC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUoT2lk IG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlICAgdHlwVHVwOwor CU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmxpc3Q7CisJ Y2hhcgkgICAqc3RyOworCURhdHVtCQlkZmx0OworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3BnX3R5 cGUgdHlwRm9ybTsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJ ZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1Iiwg b2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsK KworCS8qIFNob3J0Y3V0IHByb2Nlc3NpbmcgZm9yIHNoZWxsIHR5cGVzLiAqLworCWlmICghdHlw Rm9ybS0+dHlwaXNkZWZpbmVkKQorCXsKKwkJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUg VFlQRSIsIDApOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtpZGVudGl0eX1EIiwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHlwRm9ybS0+dHlwbmFtZSkpKTsKKwkJYXBwZW5kX2Jv b2xfb2JqZWN0KHN0bXQsICJwcmVzZW50IiwgdHJ1ZSk7CisJCVJlbGVhc2VTeXNDYWNoZSh0eXBU dXApOworCQlyZXR1cm4gc3RtdDsKKwl9CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFU RSBUWVBFIiwgMCk7CisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7aWRlbnRpdHl9RCIs CisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCQlOYW1lU3RyKHR5cEZvcm0tPnR5cG5hbWUpKSk7CisJYXBwZW5kX2Jvb2xf b2JqZWN0KHN0bXQsICJwcmVzZW50IiwgdHJ1ZSk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24g Y2xhdXNlICovCisJbGlzdCA9IE5JTDsKKworCS8qIElOUFVUICovCisJdG1wID0gbmV3X29ianRy ZWVfVkEoIihJTlBVVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaW5w dXQiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkgdHlwRm9ybS0+dHlwaW5wdXQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIE9VVFBVVCAqLworCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJPVVRQVVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm91dHB1 dCIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCSB0eXBGb3JtLT50eXBvdXRwdXQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFJFQ0VJVkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiUkVDRUlWRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVj ZWl2ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHJlY2VpdmUpKQorCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBG b3JtLT50eXByZWNlaXZlKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJl c2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCS8qIFNFTkQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0VORD0iLCAxLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic2VuZCIpOworCWlmIChPaWRJc1ZhbGlk KHR5cEZvcm0tPnR5cHNlbmQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2Nl ZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzZW5kKSk7CisJZWxzZQorCQlh cHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFRZUE1PRF9JTiAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfSU49IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInR5cG1vZF9pbiIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1v ZGluKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29i amVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogVFlQTU9EX09VVCAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJUWVBNT0RfT1VUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJ0eXBtb2Rfb3V0Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kb3V0KSkKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkgdHlwRm9ybS0+dHlwbW9kb3V0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w LCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIEFOQUxZWkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQU5B TFlaRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiYW5hbHl6ZSIpOwor CWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGFuYWx5emUpKQorCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBh bmFseXplKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZh bHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwor CS8qIElOVEVSTkFMTEVOR1RIICovCisJaWYgKHR5cEZvcm0tPnR5cGxlbiA9PSAtMSkKKwl7CisJ CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTlRFUk5BTExFTkdUSD1WQVJJQUJMRSIsIDApOworCX0K KwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5URVJOQUxMRU5HVEg9JXt0eXBs ZW59biIsIDEsCisJCQkJCQkJICJ0eXBsZW4iLCBPYmpUeXBlSW50ZWdlciwgdHlwRm9ybS0+dHlw bGVuKTsKKwl9CisKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qIFBBU1NFREJZVkFMVUUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFTU0VE QllWQUxVRSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwYXNzZWRieXZh bHVlIik7CisJaWYgKCF0eXBGb3JtLT50eXBieXZhbCkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisKKwkvKiBBTElHTk1FTlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi QUxJR05NRU5UPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbGlnbm1l bnQiKTsKKwkvKiBYWFggaXQncyBvZGQgdG8gcmVwcmVzZW50IGFsaWdubWVudCB3aXRoIHNjaGVt YS1xdWFsaWZpZWQgdHlwZSBuYW1lcyAqLworCXN3aXRjaCAodHlwRm9ybS0+dHlwYWxpZ24pCisJ eworCQljYXNlICdkJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmZsb2F0OCI7CisJCQlicmVhazsK KwkJY2FzZSAnaSc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5pbnQ0IjsKKwkJCWJyZWFrOworCQlj YXNlICdzJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmludDIiOworCQkJYnJlYWs7CisJCWNhc2Ug J2MnOgorCQkJc3RyID0gInBnX2NhdGFsb2cuYnBjaGFyIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgYWxpZ25tZW50ICVjIiwgdHlwRm9ybS0+dHlwYWxp Z24pOworCX0KKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2FsaWdufXMiLCBzdHIpOwor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJdG1wID0g bmV3X29ianRyZWVfVkEoIlNUT1JBR0U9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInN0b3JhZ2UiKTsKKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cHN0b3JhZ2UpCisJeworCQlj YXNlICdwJzoKKwkJCXN0ciA9ICJwbGFpbiI7CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJCQlz dHIgPSAiZXh0ZXJuYWwiOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJc3RyID0gImV4dGVu ZGVkIjsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCXN0ciA9ICJtYWluIjsKKwkJCWJyZWFr OworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc3RvcmFnZSBzcGVjaWZpZXIg JWMiLCB0eXBGb3JtLT50eXBzdG9yYWdlKTsKKwl9CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w LCAiJXtzdG9yYWdlfXMiLCBzdHIpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJLyogQ0FURUdPUlkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi Q0FURUdPUlk9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNhdGVnb3J5 Iik7CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtjYXRlZ29yeX1zIiwKKwkJCQkJCSBw c3ByaW50ZigiJWMiLCB0eXBGb3JtLT50eXBjYXRlZ29yeSkpOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogUFJFRkVSUkVEICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIlBSRUZFUlJFRD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAicHJlZmVycmVkIik7CisJaWYgKCF0eXBGb3JtLT50eXBpc3ByZWZlcnJlZCkKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBERUZBVUxUICovCisJZGZs dCA9IFN5c0NhY2hlR2V0QXR0cihUWVBFT0lELCB0eXBUdXAsCisJCQkJCQkgICBBbnVtX3BnX3R5 cGVfdHlwZGVmYXVsdCwKKwkJCQkJCSAgICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJERUZBVUxUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJkZWZhdWx0 Iik7CisJaWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVmYXVs dH1zIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkZmx0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEVMRU1FTlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiRUxFTUVOVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZWxl bWVudCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGVsZW0pKQorCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXAsICJlbGVtIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlw Rm9ybS0+dHlwZWxlbSwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJw cmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJLyogREVMSU1JVEVSICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkRFTElN SVRFUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZGVsaW1pdGVyIik7 CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtkZWxpbX1MIiwKKwkJCQkJCSBwc3ByaW50 ZigiJWMiLCB0eXBGb3JtLT50eXBkZWxpbSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQ09MTEFUQUJMRSAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJDT0xMQVRBQkxFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJjb2xsYXRhYmxlIik7CisJaWYgKCFPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGNvbGxhdGlvbikp CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29i amVjdChzdG10LCAiJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHR5 cFR1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4u IFNFVC9SRVNFVCAoLi4uKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbFNldE9w dGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJ TGlzdENlbGwgICAqY2VsbDsKKwlPYmpUcmVlCSAgICpyZWxzZXQ7CisJY2hhcgkgICAqZm10Owor CWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0UmVsT3B0aW9uczsK KworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIFJFU0VUfFNFVCAoJXtvcHRpb25z OiwgfXMpCisJICovCisJaWYgKGlzX3Jlc2V0KQorCQlmbXQgPSAiUkVTRVQgIjsKKwllbHNlCisJ CWZtdCA9ICJTRVQgIjsKKworCXJlbHNldCA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwlmb3JlYWNo KGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbQkgICAqZWxlbTsKKwkJ T2JqVHJlZQkgICAqc2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJ CXNldCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMgPSBsYXBwZW5k KHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChzZXRzKTsKKwlh cHBlbmRfYXJyYXlfb2JqZWN0KHJlbHNldCwgIigle29wdGlvbnM6LCB9cykiLCBzZXRzKTsKKwor CXJldHVybiByZWxzZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlVHJpZ1N0bXQgKENS RUFURSBUUklHR0VSKQorICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRy ZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRo ZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0 ZVRyaWdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVRyaWdT dG10ICpub2RlID0gKENyZWF0ZVRyaWdTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglwZ190 cmlnZ2VyOworCUhlYXBUdXBsZQl0cmlnVHVwOworCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsK KwlPYmpUcmVlCSAgICp0cmlnZ2VyOworCU9ialRyZWUJICAgKnRtcG9iajsKKwlpbnQJCQl0Z25h cmdzOworCUxpc3QJICAgKmxpc3Q7CisJTGlzdAkgICAqZXZlbnRzOworCisJcGdfdHJpZ2dlciA9 IHRhYmxlX29wZW4oVHJpZ2dlclJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwl0cmln VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ190cmlnZ2VyLCBBbnVtX3BnX3RyaWdn ZXJfb2lkLCBvYmplY3RJZCk7CisJdHJpZ0Zvcm0gPSAoRm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJV Q1QodHJpZ1R1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUg JXtjb25zdHJhaW50fXMgVFJJR0dFUiAle25hbWV9SSAle3RpbWV9cyAle2V2ZW50czogT1IgfXMK KwkgKiBPTiAle3JlbGF0aW9ufUQgJXtmcm9tX3RhYmxlfXMgJXtjb25zdHJhaW50X2F0dHJzOiB9 cworCSAqIEZPUiBFQUNIICV7Zm9yX2VhY2h9cyAle3doZW59cyBFWEVDVVRFIFBST0NFRFVSRSAl e2Z1bmN0aW9ufXMKKwkgKi8KKwl0cmlnZ2VyID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJ YXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7Y29uc3RyYWludH1zIiwKKwkJCQkJCSBu b2RlLT5pc2NvbnN0cmFpbnQgPyAiQ09OU1RSQUlOVCIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5n X29iamVjdCh0cmlnZ2VyLCAiVFJJR0dFUiAle25hbWV9SSIsIG5vZGUtPnRyaWduYW1lKTsKKwor CWlmIChub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0JFRk9SRSkKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QodHJpZ2dlciwgIiV7dGltZX1zIiwgIkJFRk9SRSIpOworCWVsc2UgaWYgKG5vZGUt PnRpbWluZyA9PSBUUklHR0VSX1RZUEVfQUZURVIpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRy aWdnZXIsICIle3RpbWV9cyIsICJBRlRFUiIpOworCWVsc2UgaWYgKG5vZGUtPnRpbWluZyA9PSBU UklHR0VSX1RZUEVfSU5TVEVBRCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7 dGltZX1zIiwgIklOU1RFQUQgT0YiKTsKKwllbHNlCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6 ZWQgdHJpZ2dlciB0aW1pbmcgdHlwZSAlZCIsIG5vZGUtPnRpbWluZyk7CisKKwkvKgorCSAqIERl Y29kZSB0aGUgZXZlbnRzIHRoYXQgdGhlIHRyaWdnZXIgZmlyZXMgZm9yLiAgVGhlIG91dHB1dCBp cyBhIGxpc3Q7CisJICogaW4gbW9zdCBjYXNlcyBpdCB3aWxsIGp1c3QgYmUgYSBzdHJpbmcgd2l0 aCB0aGUgZXZlbnQgbmFtZSwgYnV0IHdoZW4KKwkgKiB0aGVyZSdzIGFuIFVQREFURSB3aXRoIGEg bGlzdCBvZiBjb2x1bW5zLCB3ZSByZXR1cm4gYSBKU09OIG9iamVjdC4KKwkgKi8KKwlldmVudHMg PSBOSUw7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9JTlNFUlQpCisJCWV2ZW50 cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiSU5TRVJUIikpOworCWlmIChu b2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfREVMRVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2 ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIkRFTEVURSIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYg VFJJR0dFUl9UWVBFX1RSVU5DQVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0 cmluZ19vYmplY3QoIlRSVU5DQVRFIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZ UEVfVVBEQVRFKQorCXsKKwkJaWYgKG5vZGUtPmNvbHVtbnMgPT0gTklMKQorCQl7CisJCQlldmVu dHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIlVQREFURSIpKTsKKwkJfQor CQllbHNlCisJCXsKKwkJCU9ialRyZWUJICAgKnVwZGF0ZTsKKwkJCUxpc3RDZWxsICAgKmNlbGw7 CisJCQlMaXN0CSAgICpjb2xzID0gTklMOworCisJCQkvKgorCQkJICogQ3VycmVudGx5IG9ubHkg VVBEQVRFIE9GIGNhbiBiZSBvYmplY3RzIGluIHRoZSBvdXRwdXQgSlNPTiwgYnV0CisJCQkgKiB3 ZSBhZGQgYSAia2luZCIgZWxlbWVudCBzbyB0aGF0IHVzZXIgY29kZSBjYW4gZGlzdGluZ3Vpc2gK KwkJCSAqIHBvc3NpYmxlIGZ1dHVyZSBuZXcgZXZlbnQgdHlwZXMuCisJCQkgKi8KKwkJCXVwZGF0 ZSA9IG5ld19vYmp0cmVlX1ZBKCJVUERBVEUgT0YiLCAxLAorCQkJCQkJCQkJImtpbmQiLCBPYmpU eXBlU3RyaW5nLCAidXBkYXRlX29mIik7CisKKwkJCWZvcmVhY2goY2VsbCwgbm9kZS0+Y29sdW1u cykKKwkJCXsKKwkJCQljaGFyICAgKmNvbG5hbWUgPSBzdHJWYWwobGZpcnN0KGNlbGwpKTsKKwor CQkJCWNvbHMgPSBsYXBwZW5kKGNvbHMsIG5ld19zdHJpbmdfb2JqZWN0KGNvbG5hbWUpKTsKKwkJ CX0KKworCQkJYXBwZW5kX2FycmF5X29iamVjdCh1cGRhdGUsICIle2NvbHVtbnM6LCB9SSIsIGNv bHMpOworCisJCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X29iamVjdF9vYmplY3QodXBk YXRlKSk7CisJCX0KKwl9CisJYXBwZW5kX2FycmF5X29iamVjdCh0cmlnZ2VyLCAiJXtldmVudHM6 IE9SIH1zIiwgZXZlbnRzKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkgIHRyaWdGb3JtLT50Z3JlbGlkKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdCh0cmlnZ2VyLCAiT04gJXtyZWxhdGlvbn1EIiwgdG1wb2JqKTsK KworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJGUk9NIiwgMCk7CisJaWYgKHRyaWdGb3JtLT50 Z2NvbnN0cnJlbGlkKQorCXsKKwkJT2JqVHJlZQkgICAqcmVsOworCisJCXJlbCA9IG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICB0cmln Rm9ybS0+dGdjb25zdHJyZWxpZCk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7 cmVsYXRpb259RCIsIHJlbCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9i aiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwgIiV7 ZnJvbV90YWJsZX1zIiwgdG1wb2JqKTsKKworCWxpc3QgPSBOSUw7CisJaWYgKG5vZGUtPmRlZmVy cmFibGUpCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCSAgIG5ld19zdHJpbmdfb2JqZWN0 KCJERUZFUlJBQkxFIikpOworCWlmIChub2RlLT5pbml0ZGVmZXJyZWQpCisJCWxpc3QgPSBsYXBw ZW5kKGxpc3QsCisJCQkJCSAgIG5ld19zdHJpbmdfb2JqZWN0KCJJTklUSUFMTFkgREVGRVJSRUQi KSk7CisJYXBwZW5kX2FycmF5X29iamVjdCh0cmlnZ2VyLCAiJXtjb25zdHJhaW50X2F0dHJzOiB9 cyIsIGxpc3QpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIkZPUiBFQUNIICV7 Zm9yX2VhY2h9cyIsCisJCQkJCQkgbm9kZS0+cm93ID8gIlJPVyIgOiAiU1RBVEVNRU5UIik7CisK Kwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiV0hFTiIsIDApOworCWlmIChub2RlLT53aGVuQ2xh dXNlKQorCXsKKwkJTm9kZQkgICAqd2hlbkNsYXVzZTsKKwkJRGF0dW0JCXZhbHVlOworCQlib29s CQlpc251bGw7CisKKwkJdmFsdWUgPSBmYXN0Z2V0YXR0cih0cmlnVHVwLCBBbnVtX3BnX3RyaWdn ZXJfdGdxdWFsLAorCQkJCQkJCVJlbGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dlciksICZpc251bGwp OworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgImJvZ3VzIE5VTEwgdGdxdWFsIik7CisK KwkJd2hlbkNsYXVzZSA9IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7 CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIigle2NsYXVzZX1zKSIsCisJCQkJCQkJ IHBnX2dldF90cmlnZ2VyX3doZW5jbGF1c2UodHJpZ0Zvcm0sCisJCQkJCQkJCQkJCQkJICAgd2hl bkNsYXVzZSwKKwkJCQkJCQkJCQkJCQkgICBmYWxzZSkpOworCX0KKwllbHNlCisJCWFwcGVuZF9i b29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRyaWdnZXIsICIle3doZW59cyIsIHRtcG9iaik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiJXtmdW5jbmFtZX1EIiwgMSwKKwkJCQkJCSAiZnVuY25hbWUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCSB0cmlnRm9ybS0+dGdmb2lkKSk7CisJbGlzdCA9IE5JTDsKKwl0Z25h cmdzID0gdHJpZ0Zvcm0tPnRnbmFyZ3M7CisJaWYgKHRnbmFyZ3MgPiAwKQorCXsKKwkJYnl0ZWEg ICp0Z2FyZ3M7CisJCWNoYXIgICAqYXJnc3RyOworCQlib29sCWlzbnVsbDsKKwkJaW50CQlmaW5k eDsKKwkJaW50CQlsZW50Z2FyZ3M7CisJCWNoYXIgICAqcDsKKworCQl0Z2FyZ3MgPSBEYXR1bUdl dEJ5dGVhUChmYXN0Z2V0YXR0cih0cmlnVHVwLAorCQkJCQkJCQkJCQlBbnVtX3BnX3RyaWdnZXJf dGdhcmdzLAorCQkJCQkJCQkJCQlSZWxhdGlvbkdldERlc2NyKHBnX3RyaWdnZXIpLAorCQkJCQkJ CQkJCQkmaXNudWxsKSk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBO VUxMIHRnYXJncyIpOworCQlhcmdzdHIgPSAoY2hhciAqKSBWQVJEQVRBKHRnYXJncyk7CisJCWxl bnRnYXJncyA9IFZBUlNJWkVfQU5ZX0VYSERSKHRnYXJncyk7CisKKwkJcCA9IGFyZ3N0cjsKKwkJ Zm9yIChmaW5keCA9IDA7IGZpbmR4IDwgdGduYXJnczsgZmluZHgrKykKKwkJeworCQkJc2l6ZV90 CXRsZW47CisKKwkJCS8qIFZlcmlmeSB0aGF0IHRoZSBhcmd1bWVudCBlbmNvZGluZyBpcyBjb3Jy ZWN0ICovCisJCQl0bGVuID0gc3RybGVuKHApOworCQkJaWYgKHAgKyB0bGVuID49IGFyZ3N0ciAr IGxlbnRnYXJncykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJpbnZhbGlkIGFyZ3VtZW50 IHN0cmluZyAoJXMpIGZvciB0cmlnZ2VyIFwiJXNcIiIsCisJCQkJCQkJCWFyZ3N0ciwgTmFtZVN0 cih0cmlnRm9ybS0+dGduYW1lKSkpKTsKKworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0 cmluZ19vYmplY3QocCkpOworCisJCQlwICs9IHRsZW4gKyAxOworCQl9CisJfQorCisJYXBwZW5k X2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKCIpOworCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2Jq LCAiJXthcmdzOiwgfUwiLCBsaXN0KTsJCS8qIG1pZ2h0IGJlIE5JTCAqLworCWFwcGVuZF9mb3Jt YXRfc3RyaW5nKHRtcG9iaiwgIikiKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRyaWdnZXIs ICJFWEVDVVRFIFBST0NFRFVSRSAle2Z1bmN0aW9ufXMiLCB0bXBvYmopOworCisJdGFibGVfY2xv c2UocGdfdHJpZ2dlciwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiB0cmlnZ2VyOworfQor CisvKgorICogRGVwYXJzZSBhIFJlZnJlc2hNYXRWaWV3U3RtdCAoUkVGUkVTSCBNQVRFUklBTEla RUQgVklFVykKKyAqCisgKiBHaXZlbiBhIG1hdGVyaWFsaXplZCB2aWV3IE9JRCBhbmQgdGhlIHBh cnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRp bmcgdGhlIHJlZnJlc2ggY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9S ZWZyZXNoTWF0Vmlld1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJUmVm cmVzaE1hdFZpZXdTdG10ICpub2RlID0gKFJlZnJlc2hNYXRWaWV3U3RtdCAqKSBwYXJzZXRyZWU7 CisJT2JqVHJlZQkgICAqcmVmcmVzaFN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCisJcmVmcmVz aFN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyIsIDApOwor CisJLyogYWRkIGEgQ09OQ1VSUkVOVExZIGNsYXVzZSAqLworCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHJlZnJlc2hTdG10LCAiJXtjb25jdXJyZW50bHl9cyIsCisJCQkJCQkgbm9kZS0+Y29uY3VycmVu dCA/ICJDT05DVVJSRU5UTFkiIDogIiIpOworCS8qIGFkZCB0aGUgbWF0dmlldyBuYW1lICovCisJ YXBwZW5kX29iamVjdF9vYmplY3QocmVmcmVzaFN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJIG9iamVjdElkKSk7CisJLyogYWRkIGEgV0lUSCBOTyBEQVRBIGNsYXVzZSAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJXSVRIIE5PIERBVEEiLCAxLAorCQkJCQkJICJwcmVzZW50Iiwg T2JqVHlwZUJvb2wsCisJCQkJCQkgbm9kZS0+c2tpcERhdGEgPyB0cnVlIDogZmFsc2UpOworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJlZnJlc2hTdG10LCAiJXt3aXRoX25vX2RhdGF9cyIsIHRtcCk7 CisKKwlyZXR1cm4gcmVmcmVzaFN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIERlZkVsZW1zLCBh cyB1c2VkIGUuZy4gYnkgQUxURVIgQ09MVU1OIC4uLiBTRVQsIGludG8gYSBsaXN0IG9mIFNFVAor ICogKC4uLikgIG9yIFJFU0VUICguLi4pIGNvbnRlbnRzLgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNldCkKK3sKKwlPYmpU cmVlCSAgICpzZXQ7CisJT2JqVHJlZQkgICAqb3B0bmFtZTsKKworCXNldCA9IG5ld19vYmp0cmVl KCIiKTsKKwlvcHRuYW1lID0gbmV3X29ianRyZWUoIiIpOworCisJaWYgKGVsZW0tPmRlZm5hbWVz cGFjZSAhPSBOVUxMKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChvcHRuYW1lLCAiJXtzY2hlbWF9 SS4iLCBlbGVtLT5kZWZuYW1lc3BhY2UpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qob3B0bmFt ZSwgIiV7bGFiZWx9SSIsIGVsZW0tPmRlZm5hbWUpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qo c2V0LCAiJXtsYWJlbH1zIiwgb3B0bmFtZSk7CisKKwlpZiAoIWlzX3Jlc2V0KQorCQlhcHBlbmRf c3RyaW5nX29iamVjdChzZXQsICIgPSAle3ZhbHVlfUwiLAorCQkJCQkJCSBlbGVtLT5hcmcgPyBk ZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRSVUUi IDogIkZBTFNFIik7CisKKwlyZXR1cm4gc2V0OworfQorCisvKgorICogSGFuZGxlIGRlcGFyc2lu ZyBvZiBEUk9QIGNvbW1hbmRzLgorICovCitjaGFyICoKK2RlcGFyc2VfZHJvcF9jb21tYW5kKGNv bnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBlLAorCQkJCQkgRHJv cEJlaGF2aW9yIGJlaGF2aW9yKQoreworCVN0cmluZ0luZm9EYXRhICBzdHI7CisJY2hhcgkJICAg KmNvbW1hbmQ7CisJY2hhcgkJICAgKmlkZW50aXR5ID0gKGNoYXIgKikgb2JqaWRlbnRpdHk7CisJ Y2hhcgkJICAgKmZtdDsKKwlPYmpUcmVlCQkqc3RtdCwgKnN0bXQyOworCUpzb25iCQkgICpqc29u YjsKKworCWluaXRTdHJpbmdJbmZvKCZzdHIpOworCisJZm10ID0gcHNwcmludGYoIkRST1AgJXMg SUYgRVhJU1RTICUle29iamlkZW50aXR5fXMiLCBvYmplY3R0eXBlKTsKKworCXN0bXQgPSBuZXdf b2JqdHJlZV9WQShmbXQsIDEsICJvYmppZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50aXR5 KTsKKwlzdG10MiA9IG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCSAgICJwcmVz ZW50IiwgT2JqVHlwZUJvb2wsIGJlaGF2aW9yID09IERST1BfQ0FTQ0FERSk7CisKKwlhcHBlbmRf b2JqZWN0X29iamVjdChzdG10LCAiJXtjYXNjYWRlfXMiLCBzdG10Mik7CisKKwlqc29uYiA9IG9i anRyZWVfdG9fanNvbmIoc3RtdCk7CisJY29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZq c29uYi0+cm9vdCwgSlNPTkJfRVNUSU1BVEVEX0xFTik7CisKKwlyZXR1cm4gY29tbWFuZDsKK30K KworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgc2V0dGluZyBvZiBGdW5jdGlvbgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Z1bmN0aW9uU2V0KFZhcmlhYmxlU2V0S2luZCBraW5kLCBj aGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpUcmVlCSAgICpvYmo7CisKKwlpZiAoa2lu ZCA9PSBWQVJfUkVTRVRfQUxMKQorCXsKKwkJb2JqID0gbmV3X29ianRyZWUoIlJFU0VUIEFMTCIp OworCX0KKwllbHNlIGlmICh2YWx1ZSAhPSBOVUxMKQorCXsKKwkJb2JqID0gbmV3X29ianRyZWVf VkEoIlNFVCAle3NldF9uYW1lfUkiLCAxLAorCQkJCQkJICAgInNldF9uYW1lIiwgT2JqVHlwZVN0 cmluZywgbmFtZSk7CisKKwkJLyoKKwkJICogU29tZSBHVUMgdmFyaWFibGUgbmFtZXMgYXJlICdM SVNUJyB0eXBlIGFuZCBoZW5jZSBtdXN0IG5vdCBiZQorCQkgKiBxdW90ZWQuCisJCSAqLworCQlp ZiAoR2V0Q29uZmlnT3B0aW9uRmxhZ3MobmFtZSwgdHJ1ZSkgJiBHVUNfTElTVF9RVU9URSkKKwkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9iaiwgIlRPICV7c2V0X3ZhbHVlfXMiLCB2YWx1ZSk7CisJ CWVsc2UKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9iaiwgIlRPICV7c2V0X3ZhbHVlfUwiLCB2 YWx1ZSk7CisJfQorCWVsc2UKKwl7CisJCW9iaiA9IG5ld19vYmp0cmVlKCJSRVNFVCIpOworCQlh cHBlbmRfc3RyaW5nX29iamVjdChvYmosICIle3NldF9uYW1lfUkiLCBuYW1lKTsKKwl9CisKKwly ZXR1cm4gb2JqOworfQorCisvKgorICogRGVwYXJzZSBhbiBJbmRleFN0bXQuCisgKgorICogR2l2 ZW4gYW4gaW5kZXggT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJu IGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisg KiBJZiB0aGUgaW5kZXggY29ycmVzcG9uZHMgdG8gYSBjb25zdHJhaW50LCBOVUxMIGlzIHJldHVy bmVkLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0luZGV4U3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlJbmRleFN0bXQgICpub2RlID0gKEluZGV4U3RtdCAq KSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqaW5kZXhTdG10OworCU9ialRyZWUJICAgKnRtcG9i ajsKKwlSZWxhdGlvbglpZHhyZWw7CisJUmVsYXRpb24JaGVhcHJlbDsKKwljaGFyCSAgICppbmRl eF9hbTsKKwljaGFyCSAgICpkZWZpbml0aW9uOworCWNoYXIJICAgKnJlbG9wdGlvbnM7CisJY2hh cgkgICAqdGFibGVzcGFjZTsKKwljaGFyCSAgICp3aGVyZUNsYXVzZTsKKworCWlmIChub2RlLT5w cmltYXJ5IHx8IG5vZGUtPmlzY29uc3RyYWludCkKKwl7CisJCS8qCisJCSAqIEluZGV4ZXMgZm9y IFBSSU1BUlkgS0VZIGFuZCBvdGhlciBjb25zdHJhaW50cyBhcmUgb3V0cHV0CisJCSAqIHNlcGFy YXRlbHk7IHJldHVybiBlbXB0eSBoZXJlLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ aWR4cmVsID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwloZWFw cmVsID0gcmVsYXRpb25fb3BlbihpZHhyZWwtPnJkX2luZGV4LT5pbmRyZWxpZCwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXBnX2dldF9pbmRleGRlZl9kZXRhaWxlZChvYmplY3RJZCwKKwkJCQkJCQkg JmluZGV4X2FtLCAmZGVmaW5pdGlvbiwgJnJlbG9wdGlvbnMsCisJCQkJCQkJICZ0YWJsZXNwYWNl LCAmd2hlcmVDbGF1c2UpOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JF QVRFICV7dW5pcXVlfXMgSU5ERVggJXtjb25jdXJyZW50bHl9cyAle2lmX25vdF9leGlzdHN9cyAl e25hbWV9SSBPTgorCSAqICV7dGFibGV9RCBVU0lORyAle2luZGV4X2FtfXMgKCV7ZGVmaW5pdGlv bn1zKSAle3dpdGh9cyAle3RhYmxlc3BhY2V9cworCSAqICV7d2hlcmVfY2xhdXNlfXMKKwkgKi8K KwlpbmRleFN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfc3RyaW5nX29i amVjdChpbmRleFN0bXQsICIle3VuaXF1ZX1zIiwKKwkJCQkJCSBub2RlLT51bmlxdWUgPyAiVU5J UVVFIiA6ICIiKTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGluZGV4U3RtdCwgIklOREVYIik7 CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICIle2NvbmN1cnJlbnRseX1zIiwK KwkJCQkJCSBub2RlLT5jb25jdXJyZW50ID8gIkNPTkNVUlJFTlRMWSIgOiAiIik7CisKKwlhcHBl bmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkg bm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7bmFtZX1JIiwKKwkJCQkJCSBSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShpZHhyZWwpKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwg Ik9OICV7dGFibGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGhlYXByZWwt PnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGhl YXByZWwpKSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICJVU0lORyAle2lu ZGV4X2FtfXMiLCBpbmRleF9hbSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQs ICIoJXtkZWZpbml0aW9ufXMpIiwgZGVmaW5pdGlvbik7CisKKwkvKiByZWxvcHRpb25zICovCisJ dG1wb2JqID0gbmV3X29ianRyZWUoIldJVEgiKTsKKwlpZiAocmVsb3B0aW9ucykKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wb2JqLCAiKCV7b3B0c31zKSIsIHJlbG9wdGlvbnMpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5k X29iamVjdF9vYmplY3QoaW5kZXhTdG10LCAiJXt3aXRofXMiLCB0bXBvYmopOworCisJLyogdGFi bGVzcGFjZSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJaWYgKHRh Ymxlc3BhY2UpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7dGFibGVzcGFjZX1z IiwgdGFibGVzcGFjZSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJl c2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQsICIle3RhYmxl c3BhY2V9cyIsIHRtcG9iaik7CisKKwkvKiBXSEVSRSBjbGF1c2UgKi8KKwl0bXBvYmogPSBuZXdf b2JqdHJlZSgiV0hFUkUiKTsKKwlpZiAod2hlcmVDbGF1c2UpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIiV7d2hlcmV9cyIsIHdoZXJlQ2xhdXNlKTsKKwllbHNlCisJCWFwcGVuZF9i b29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGluZGV4U3RtdCwgIiV7d2hlcmVfY2xhdXNlfXMiLCB0bXBvYmopOworCisJdGFibGVfY2xv c2UoaWR4cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCXRhYmxlX2Nsb3NlKGhlYXByZWwsIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlyZXR1cm4gaW5kZXhTdG10OworfQorCisvKgorICogRGVwYXJzZSB0 aGUgSU5IRVJJVFMgcmVsYXRpb25zLgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lELCByZXR1cm4g YSBzY2hlbWEgcXVhbGlmaWVkIHRhYmxlIGxpc3QgcmVwcmVzZW50aW5nCisgKiB0aGUgcGFyZW50 IHRhYmxlcy4KKyAqLworc3RhdGljIExpc3QgKgorZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9i amVjdElkKQoreworCUxpc3QJICAgKnBhcmVudHMgPSBOSUw7CisJUmVsYXRpb24JaW5oUmVsOwor CVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5OworCUhlYXBUdXBsZQl0dXBsZTsK KworCWluaFJlbCA9IHRhYmxlX29wZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVM b2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXksCisJCQkJQW51bV9wZ19pbmhlcml0c19pbmhyZWxp ZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXRE YXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihpbmhSZWwsIElu aGVyaXRzUmVsaWRTZXFub0luZGV4SWQsCisJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsK KworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2Fu KSkpCisJeworCQlPYmpUcmVlCSpwYXJlbnQ7CisJCUZvcm1fcGdfaW5oZXJpdHMgZm9ybUluaCA9 IChGb3JtX3BnX2luaGVyaXRzKSBHRVRTVFJVQ1QodHVwbGUpOworCisJCXBhcmVudCA9IG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSBm b3JtSW5oLT5pbmhwYXJlbnQpOworCQlwYXJlbnRzID0gbGFwcGVuZChwYXJlbnRzLCBuZXdfb2Jq ZWN0X29iamVjdChwYXJlbnQpKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRh YmxlX2Nsb3NlKGluaFJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gcGFyZW50czsK K30KKworLyoKKyAqIERlcGFyc2UgdGhlIE9OIENPTU1NSVQgLi4uIGNsYXVzZSBmb3IgQ1JFQVRF IC4uLiBURU1QT1JBUlkgLi4uCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfT25Db21t aXRDbGF1c2UoT25Db21taXRBY3Rpb24gb3B0aW9uKQoreworCU9ialRyZWUJICAgKm9uY29tbWl0 OworCisJb25jb21taXQgPSBuZXdfb2JqdHJlZSgiT04gQ09NTUlUIik7CisJc3dpdGNoIChvcHRp b24pCisJeworCQljYXNlIE9OQ09NTUlUX0RST1A6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChv bmNvbW1pdCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiLCAiRFJPUCIpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBPTkNPTU1JVF9ERUxFVEVfUk9XUzoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9uY29t bWl0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIsICJERUxFVEUgUk9XUyIpOworCQkJYnJlYWs7CisK KwkJY2FzZSBPTkNPTU1JVF9QUkVTRVJWRV9ST1dTOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo b25jb21taXQsICIle29uX2NvbW1pdF92YWx1ZX1zIiwgIlBSRVNFUlZFIFJPV1MiKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgT05DT01NSVRfTk9PUDoKKwkJCWFwcGVuZF9udWxsX29iamVjdChvbmNv bW1pdCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiKTsKKwkJCWFwcGVuZF9ib29sX29iamVjdChvbmNv bW1pdCwgInByZXNlbnQiLCBmYWxzZSk7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gb25jb21t aXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgUmVuYW1lU3RtdC4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9SZW5hbWVTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFy c2V0cmVlKQoreworCVJlbmFtZVN0bXQgKm5vZGUgPSAoUmVuYW1lU3RtdCAqKSBwYXJzZXRyZWU7 CisJT2JqVHJlZQkgICAqcmVuYW1lU3RtdDsKKwljaGFyCSAgICpmbXRzdHI7CisJY29uc3QgY2hh ciAqb2JqdHlwZTsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlPaWQJCQlzY2hlbWFJZDsKKworCS8q CisJICogSW4gYW4gQUxURVIgLi4gUkVOQU1FIGNvbW1hbmQsIHdlIGRvbid0IGhhdmUgdGhlIG9y aWdpbmFsIG5hbWUgb2YgdGhlCisJICogb2JqZWN0IGluIHN5c3RlbSBjYXRhbG9nczogc2luY2Ug d2UgaW5zcGVjdCB0aGVtIGFmdGVyIHRoZSBjb21tYW5kIGhhcworCSAqIGV4ZWN1dGVkLCB0aGUg b2xkIG5hbWUgaXMgYWxyZWFkeSBnb25lLiAgVGhlcmVmb3JlLCB3ZSBleHRyYWN0IGl0IGZyb20K KwkgKiB0aGUgcGFyc2Ugbm9kZS4gIE5vdGUgd2Ugc3RpbGwgZXh0cmFjdCB0aGUgc2NoZW1hIG5h bWUgZnJvbSB0aGUgY2F0YWxvZworCSAqIChpdCBtaWdodCBub3QgYmUgcHJlc2VudCBpbiB0aGUg cGFyc2Ugbm9kZSk7IGl0IGNhbm5vdCBwb3NzaWJseSBoYXZlCisJICogY2hhbmdlZCBhbnl3YXku CisJICovCisJc3dpdGNoIChub2RlLT5yZW5hbWVUeXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfVEFC TEU6CisJCWNhc2UgT0JKRUNUX0lOREVYOgorCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKworCQkJ LyoKKwkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkgKgorCQkJICogQUxURVIgJXMgJXtpZl9leGlz dHN9cyAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisJCQkgKi8KKwkJCW9ianR5 cGUgPSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKTsKKwkJCWZtdHN0ciA9IHBz cHJpbnRmKCJBTFRFUiAlcyIsIG9ianR5cGUpOworCQkJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVu KGFkZHJlc3Mub2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlzY2hlbWFJZCA9IFJlbGF0 aW9uR2V0TmFtZXNwYWNlKHJlbGF0aW9uKTsKKwkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9W QShmbXRzdHIsIDApOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIiV7aWZf ZXhpc3RzfXMiLAorCQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIp OworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJ CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJ CSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJl bmFtZVN0bXQsICJSRU5BTUUgVE8gJXtuZXduYW1lfUkiLAorCQkJCQkJCQkgbm9kZS0+bmV3bmFt ZSk7CisJCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgT0JKRUNUX1BPTElDWToKKwkJCXsKKwkJCQlIZWFwVHVwbGUJcG9sVHVw OworCQkJCUZvcm1fcGdfcG9saWN5IHBvbEZvcm07CisJCQkJUmVsYXRpb24JcGdfcG9saWN5Owor CQkJCVNjYW5LZXlEYXRhCWtleTsKKwkJCQlTeXNTY2FuRGVzYwlzY2FuOworCisJCQkJcGdfcG9s aWN5ID0gcmVsYXRpb25fb3BlbihQb2xpY3lSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOwor CQkJCVNjYW5LZXlJbml0KCZrZXksIEFudW1fcGdfcG9saWN5X29pZCwKKwkJCQkJCQlCVEVxdWFs U3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShhZGRyZXNz Lm9iamVjdElkKSk7CisJCQkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19wb2xpY3ksIFBv bGljeU9pZEluZGV4SWQsIHRydWUsCisJCQkJCQkJCQkJICBOVUxMLCAxLCAma2V5KTsKKwkJCQlw b2xUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxp ZChwb2xUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcG9s aWN5ICV1IiwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcG9sRm9ybSA9IChGb3JtX3BnX3BvbGlj eSkgR0VUU1RSVUNUKHBvbFR1cCk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEo IkFMVEVSIFBPTElDWSIsIDApOworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQs ICIle2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJCSBub2RlLT5taXNzaW5nX29rID8gIklGIEVYSVNU UyIgOiAiIik7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIiV7cG9saWN5 bmFtZX1JIiwgbm9kZS0+c3VibmFtZSk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1l U3RtdCwgIk9OICV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCSBwb2xGb3JtLT5wb2xyZWxpZCkp OworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICJSRU5BTUUgVE8gJXtuZXdu YW1lfUkiLAorCQkJCQkJCQkJIG5vZGUtPm5ld25hbWUpOworCQkJCXN5c3RhYmxlX2VuZHNjYW4o c2Nhbik7CisJCQkJcmVsYXRpb25fY2xvc2UocGdfcG9saWN5LCBBY2Nlc3NTaGFyZUxvY2spOwor CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9BVFRSSUJVVEU6CisJCWNhc2UgT0JK RUNUX0NPTFVNTjoKKwkJCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLm9iamVjdElk LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJc2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShy ZWxhdGlvbik7CisKKwkJCS8qCisJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJICoKKwkJCSAqIENv bXBvc2l0ZSB0eXBlczogQUxURVIgb2JqdHlwZSAle2lkZW50aXR5fUQgUkVOQU1FIEFUVFJJQlVU RQorCQkJICogJXtjb2xuYW1lfUkgVE8gJXtuZXduYW1lfUkgJXtjYXNjYWRlfXMKKwkJCSAqCisJ CQkgKiBOb3JtYWwgdHlwZXM6IEFMVEVSIG9ianR5cGUgJXtpZl9leGlzdHN9cyAlJXtpZGVudGl0 eX1EIFJFTkFNRQorCQkJICogQ09MVU1OICV7Y29sbmFtZX1JIFRPICV7bmV3bmFtZX1JCisJCQkg Ki8KKworCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNUX0FUVFJJQlVURSkKKwkJCXsK KwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWUoIkFMVEVSIFRZUEUiKTsKKwkJCQkJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJl bGF0aW9uLT5yZWxuYW1lKSk7CisJCQkJZm10c3RyID0gcHNwcmludGYoIlJFTkFNRSBBVFRSSUJV VEUgJSV7Y29sbmFtZX1JIik7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJb2JqdHlwZSA9IHN0 cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbGF0aW9uVHlwZSk7CisJCQkJZm10c3RyID0gcHNwcmlu dGYoIkFMVEVSICVzIiwgb2JqdHlwZSk7CisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlKGZt dHN0cik7CisKKwkJCQkvKiBDb21wb3NpdGUgdHlwZXMgZG8gbm90IHN1cHBvcnQgSUYgRVhJU1RT ICovCisJCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNUX0NPTFVNTikKKwkJCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIiV7aWZfZXhpc3RzfXMiLAorCQkJCQkJCQkJ CW5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKworCQkJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRp b24tPnJlbG5hbWUpKTsKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiUkVOQU1FIENPTFVNTiAlJXtj b2xuYW1lfUkiKTsKKwkJCX0KKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwg Zm10c3RyLCBub2RlLT5zdWJuYW1lKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0 bXQsICJUTyAle25ld25hbWV9SSIsIG5vZGUtPm5ld25hbWUpOworCisJCQlpZiAobm9kZS0+cmVu YW1lVHlwZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQorCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl bmFtZVN0bXQsICIle2Nhc2NhZGV9cyIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfVkEoIkNBU0NB REUiLCAxLAorCQkJCQkJCQkJCQkJCSJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkJCQkJ CQkJbm9kZS0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKSk7CisKKwkJCXJlbGF0aW9uX2Nsb3Nl KHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1Rf RlVOQ1RJT046CisJCQl7CisJCQkJY2hhcgkqaWRlbnQ7CisJCQkJSGVhcFR1cGxlIHByb2N0dXA7 CisJCQkJRm9ybV9wZ19wcm9jIHByb2Nmb3JtOworCQkJCUxpc3QJICAgKmlkZW50aXR5OworCisJ CQkJQXNzZXJ0KElzQShub2RlLT5vYmplY3QsIE9iamVjdFdpdGhBcmdzKSk7CisJCQkJaWRlbnRp dHkgPSAoKE9iamVjdFdpdGhBcmdzICopIG5vZGUtPm9iamVjdCktPm9iam5hbWU7CisKKwkJCQlw cm9jdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsCisJCQkJCQkJCQkJICBPYmplY3RJZEdl dERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJv Y3R1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1 cmUgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXByb2Nmb3JtID0gKEZvcm1f cGdfcHJvYykgR0VUU1RSVUNUKHByb2N0dXApOworCisJCQkJLyogWFhYIGRvZXMgdGhpcyB3b3Jr IGZvciBvcmRlcmVkLXNldCBhZ2dyZWdhdGVzPyAqLworCQkJCWlkZW50ID0gcHNwcmludGYoIiVz JXMiLAorCQkJCQkJCQkgcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9u YW1lKHByb2Nmb3JtLT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJCQkJc3RyVmFsKGxsYXN0 KGlkZW50aXR5KSkpLAorCQkJCQkJCQkgZm9ybWF0X3Byb2NlZHVyZV9hcmdzKGFkZHJlc3Mub2Jq ZWN0SWQsIHRydWUpKTsKKworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVu dGl0eX1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkiLAorCQkJCQkJCQkgIHN0cmluZ2lmeV9vYmp0 eXBlKG5vZGUtPnJlbmFtZVR5cGUpKTsKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEo Zm10c3RyLCAyLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBpZGVudCwK KwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwor CQkJCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2Ug T0JKRUNUX09QQ0xBU1M6CisJCQl7CisJCQkJSGVhcFR1cGxlICAgb3BjVHVwOworCQkJCUZvcm1f cGdfb3BjbGFzcyBvcGNGb3JtOworCQkJCUxpc3QJICAgKm9sZG5hbWVzOworCQkJCWNoYXIJICAg KnNjaGVtYW5hbWU7CisJCQkJY2hhcgkgICAqb3BjbmFtZTsKKwkJCQljaGFyCSAgICpmbXQ7CisK KwkJCQlmbXQgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRpdHl9RCBVU0lORyAlJXtpbmRl eF9tZXRob2R9cyBSRU5BTUUgVE8gJSV7bmV3bmFtZX1JIiwKKwkJCQkJCQkgICBzdHJpbmdpZnlf b2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKSk7CisKKwkJCQlvcGNUdXAgPSBTZWFyY2hTeXNDYWNo ZTEoQ0xBT0lELCBPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlpZiAo IUhlYXBUdXBsZUlzVmFsaWQob3BjVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIG9wY2xhc3Mgd2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0 SWQpOworCisJCQkJb3BjRm9ybSA9IChGb3JtX3BnX29wY2xhc3MpIEdFVFNUUlVDVChvcGNUdXAp OworCisJCQkJb2xkbmFtZXMgPSBsaXN0X2NvcHlfdGFpbCgoTGlzdCAqKSBub2RlLT5vYmplY3Qs IDEpOworCisJCQkJLyogZGVjb25zdHJ1Y3QgdGhlIG5hbWUgbGlzdCAqLworCQkJCURlY29uc3Ry dWN0UXVhbGlmaWVkTmFtZShvbGRuYW1lcywgJnNjaGVtYW5hbWUsICZvcGNuYW1lKTsKKworCQkJ CXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDMsCisJCQkJCQkJCQkJCSJpZGVudGl0 eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShv cGNGb3JtLT5vcGNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkJCSBvcGNuYW1lKSwKKwkJCQkJ CQkJCQkJImluZGV4X21ldGhvZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWdldF9hbV9u YW1lKG9wY0Zvcm0tPm9wY21ldGhvZCksCisJCQkJCQkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0 cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsKKwkJ CX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX09QRkFNSUxZOgorCQkJeworCQkJCUhlYXBU dXBsZSAgIG9wZlR1cDsKKwkJCQlIZWFwVHVwbGUgICBhbVR1cDsKKwkJCQlGb3JtX3BnX29wZmFt aWx5IG9wZkZvcm07CisJCQkJRm9ybV9wZ19hbSAgYW1Gb3JtOworCQkJCUxpc3QJICAgKm9sZG5h bWVzOworCQkJCWNoYXIJICAgKnNjaGVtYW5hbWU7CisJCQkJY2hhcgkgICAqb3BmbmFtZTsKKwkJ CQljaGFyCSAgICpmbXQ7CisKKwkJCQlmbXQgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRp dHl9RCBVU0lORyAlJXtpbmRleF9tZXRob2R9cyBSRU5BTUUgVE8gJSV7bmV3bmFtZX1JIiwKKwkJ CQkJCQkgICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKSk7CisKKwkJCQlvcGZU dXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJ CWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGZUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1IiwKKwkJCQkJCSBh ZGRyZXNzLm9iamVjdElkKTsKKwkJCQlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNU UlVDVChvcGZUdXApOworCisJCQkJYW1UdXAgPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVj dElkR2V0RGF0dW0ob3BmRm9ybS0+b3BmbWV0aG9kKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGFtVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFj Y2VzcyBtZXRob2QgJXUiLAorCQkJCQkJIG9wZkZvcm0tPm9wZm1ldGhvZCk7CisKKwkJCQlhbUZv cm0gPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNUKGFtVHVwKTsKKworCQkJCW9sZG5hbWVzID0gbGlz dF9jb3B5X3RhaWwoKExpc3QgKikgbm9kZS0+b2JqZWN0LCAxKTsKKworCQkJCS8qIGRlY29uc3Ry dWN0IHRoZSBuYW1lIGxpc3QgKi8KKwkJCQlEZWNvbnN0cnVjdFF1YWxpZmllZE5hbWUob2xkbmFt ZXMsICZzY2hlbWFuYW1lLCAmb3BmbmFtZSk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRy ZWVfVkEoZm10LCAzLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJCQkJCQkgb3BmbmFtZSksCisJCQkJCQkJCQkJCSJpbmRleF9tZXRob2QiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlOYW1lU3RyKGFtRm9ybS0+YW1uYW1lKSwKKwkJCQkJ CQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCVJl bGVhc2VTeXNDYWNoZShhbVR1cCk7CisJCQkJUmVsZWFzZVN5c0NhY2hlKG9wZlR1cCk7CisJCQl9 CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlyZW5hbWVTdG10ID0KKwkJ CQluZXdfb2JqdHJlZV9WQSgiQUxURVIgU0NIRU1BICV7aWRlbnRpdHl9SSBSRU5BTUUgVE8gJXtu ZXduYW1lfUkiLCAyLAorCQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUt PnN1Ym5hbWUsCisJCQkJCQkJICAgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXdu YW1lKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX0ZEVzoKKwkJCXsKKwkJCQlTdHJpbmcg KmlkZW50aXR5ID0gY2FzdE5vZGUoU3RyaW5nLCBub2RlLT5vYmplY3QpOworCisJCQkJcmVuYW1l U3RtdCA9CisJCQkJCW5ld19vYmp0cmVlX1ZBKCJBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUiAl e2lkZW50aXR5fUkgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJICAgMiwgImlkZW50 aXR5IiwgT2JqVHlwZVN0cmluZywgc3RyVmFsKGlkZW50aXR5KSwKKwkJCQkJCQkJICAgIm5ld25h bWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwkJCX0KKwkJCWJyZWFrOworCisJ CWNhc2UgT0JKRUNUX1JVTEU6CisJCQl7CisJCQkJSGVhcFR1cGxlCXJld3JUdXA7CisJCQkJRm9y bV9wZ19yZXdyaXRlIHJld3JGb3JtOworCQkJCVJlbGF0aW9uCXBnX3Jld3JpdGU7CisKKwkJCQlw Z19yZXdyaXRlID0gcmVsYXRpb25fb3BlbihSZXdyaXRlUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVM b2NrKTsKKwkJCQlyZXdyVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ19yZXdyaXRl LCBBbnVtX3BnX3Jld3JpdGVfb2lkLCAgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcmV3ckZvcm0g PSAoRm9ybV9wZ19yZXdyaXRlKSBHRVRTVFJVQ1QocmV3clR1cCk7CisKKwkJCQlyZW5hbWVTdG10 ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFJVTEUgJXtydWxlbmFtZX1JIE9OICV7aWRlbnRpdHl9 RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLAorCQkJCQkJCQkJCQkzLAorCQkJCQkJCQkJCQkicnVs ZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJCQkiaWRlbnRp dHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQkJcmV3ckZvcm0tPmV2X2Ns YXNzKSwKKwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1l KTsKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ19yZXdyaXRlLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJ fQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFJJR0dFUjoKKwkJCXsKKwkJCQlIZWFwVHVw bGUJdHJpZ1R1cDsKKwkJCQlGb3JtX3BnX3RyaWdnZXIgdHJpZ0Zvcm07CisJCQkJUmVsYXRpb24J cGdfdHJpZ2dlcjsKKworCQkJCXBnX3RyaWdnZXIgPSByZWxhdGlvbl9vcGVuKFRyaWdnZXJSZWxh dGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCXRyaWdUdXAgPSBnZXRfY2F0YWxvZ19vYmpl Y3RfYnlfb2lkKHBnX3RyaWdnZXIsIGdldF9vYmplY3RfYXR0bnVtX29pZChhZGRyZXNzLmNsYXNz SWQpLCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQl0cmlnRm9ybSA9IChGb3JtX3BnX3RyaWdnZXIp IEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgVFJJR0dFUiAle3RyaWdnZXJuYW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAl e25ld25hbWV9SSIsCisJCQkJCQkJCQkJCTMsCisJCQkJCQkJCQkJCSJ0cmlnZ2VybmFtZSIsIE9i alR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlv blJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCQl0cmlnRm9ybS0+dGdyZWxpZCksCisJCQkJ CQkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQly ZWxhdGlvbl9jbG9zZShwZ190cmlnZ2VyLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJl YWs7CisKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJ Y2FzZSBPQkpFQ1RfRE9NQUlOOgorCQkJeworCQkJCUhlYXBUdXBsZQlvYmpUdXA7CisJCQkJUmVs YXRpb24JY2F0YWxvZzsKKwkJCQlEYXR1bQkJb2JqbnNwOworCQkJCWJvb2wJCWlzbnVsbDsKKwkJ CQlBdHRyTnVtYmVyCUFudW1fbmFtZXNwYWNlOworCQkJCUxpc3QJICAgKmlkZW50aXR5ID0gY2Fz dE5vZGUoTGlzdCwgbm9kZS0+b2JqZWN0KTsKKwkJCQljaGFyCSAgICpmbXRzdHJpbmc7CisKKwkJ CQkvKiBvYnRhaW4gb2JqZWN0IHR1cGxlICovCisJCQkJY2F0YWxvZyA9IHJlbGF0aW9uX29wZW4o YWRkcmVzcy5jbGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCW9ialR1cCA9IGdldF9jYXRh bG9nX29iamVjdF9ieV9vaWQoY2F0YWxvZywgZ2V0X29iamVjdF9hdHRudW1fb2lkKGFkZHJlc3Mu Y2xhc3NJZCksIGFkZHJlc3Mub2JqZWN0SWQpOworCisJCQkJLyogb2J0YWluIG5hbWVzcGFjZSAq LworCQkJCUFudW1fbmFtZXNwYWNlID0gZ2V0X29iamVjdF9hdHRudW1fbmFtZXNwYWNlKGFkZHJl c3MuY2xhc3NJZCk7CisJCQkJb2JqbnNwID0gaGVhcF9nZXRhdHRyKG9ialR1cCwgQW51bV9uYW1l c3BhY2UsCisJCQkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksICZpc251bGwpOwor CQkJCWlmIChpc251bGwpCisJCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIE5VTEwgbmFtZXNwYWNl Iik7CisKKwkJCQlvYmp0eXBlID0gc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSk7 CisJCQkJZm10c3RyaW5nID0gcHNwcmludGYoIkFMVEVSICVzIiwgb2JqdHlwZSk7CisKKwkJCQly ZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoZm10c3RyaW5nLAorCQkJCQkJCQkJCTApOworCQkJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJ CQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKERhdHVtR2V0T2JqZWN0SWQob2JqbnNwKSwKKwkJ CQkJCQkJCQkJCQkJCSAgc3RyVmFsKGxsYXN0KGlkZW50aXR5KSkpKTsKKworCQkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICJSRU5BTUUgVE8gJXtuZXduYW1lfUkiLAorCQkJCQkJ CQkJIG5vZGUtPm5ld25hbWUpOworCQkJCXJlbGF0aW9uX2Nsb3NlKGNhdGFsb2csIEFjY2Vzc1No YXJlTG9jayk7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwg InVuc3VwcG9ydGVkIG9iamVjdCB0eXBlICVkIiwgbm9kZS0+cmVuYW1lVHlwZSk7CisJfQorCisJ cmV0dXJuIHJlbmFtZVN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0ZXJPYmplY3REZXBl bmRzU3RtdCAoQUxURVIgLi4uIERFUEVORFMgT04gLi4uKS4KKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9BbHRlckRlcGVuZFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAqbm9kZSA9IChBbHRlck9iamVjdERlcGVuZHNT dG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCQkgICAqYWx0ZXJEZXBlbmRlU3RtdCA9IE5VTEw7 CisKKworCWlmIChub2RlLT5vYmplY3RUeXBlID09IE9CSkVDVF9JTkRFWCkKKwl7CisJCVJlbGF0 aW9uICAgICAgICByZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJCU9ialRyZWUgKnF1YWxpZmllZDsKKworCQlhbHRlckRlcGVuZGVTdG10ID0gbmV3 X29ianRyZWUoIkFMVEVSIElOREVYIik7CisKKwkJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJIG5v ZGUtPnJlbGF0aW9uLT5yZWxuYW1lKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEZXBl bmRlU3RtdCwgIiV7aWRlbnRpdHl9RCIsIHF1YWxpZmllZCk7CisJCXJlbGF0aW9uX2Nsb3NlKHJl bGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVy RGVwZW5kZVN0bXQsICIle05PfXMiLAorCQkJCQkJIG5vZGUtPnJlbW92ZSA/ICJOTyIgOiAiIik7 CisKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0ZXJEZXBlbmRlU3RtdCwgIkRFUEVORFMgT04g RVhURU5TSU9OIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRGVwZW5kZVN0bXQsICIl e25ld25hbWV9SSIsIHN0clZhbChub2RlLT5leHRuYW1lKSk7CisJfQorCWVsc2UKKwkJZWxvZyhM T0csICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQiLAorCQkJ IChpbnQpIG5vZGVUYWcocGFyc2V0cmVlKSk7CisKKwlyZXR1cm4gYWx0ZXJEZXBlbmRlU3RtdDsK K30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIENBQ0hFIG9wdGlvbi4KKyAqLworc3Rh dGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0NhY2hlKE9ialRyZWUgKnBhcmVudCwg Rm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJ ICAgKmNhY2hlOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwl0bXBzdHIg PSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWNhY2hlKTsKKworCWlmIChhbHRl cl90YWJsZSkKKwkJZm10ID0gIlNFVCBDQUNIRSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0g IkNBQ0hFICV7dmFsdWV9cyI7CisKKwljYWNoZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJ CQkJCSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjYWNoZSIsCisJCQkJCQkgICJ2YWx1ZSIs IE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QoY2Fj aGUpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQ1lDTEUgb3B0aW9uLgorICov CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfQ3ljbGUoT2JqVHJlZSAqcGFy ZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2Jq VHJlZQkgICAqY3ljbGU7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlm bXQgPSAiU0VUICV7bm99cyBDWUNMRSI7CisJZWxzZQorCQlmbXQgPSAiJXtub31zIENZQ0xFIjsK KworCWN5Y2xlID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICAgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJjeWNsZSIsCisJCQkJCQkgICAibm8iLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJICAgc2VxZGF0YS0+c2VxY3ljbGUgPyAiIiA6ICJOTyIpOworCXJldHVybiBuZXdfb2JqZWN0 X29iamVjdChjeWNsZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBJTkNSRU1F TlQgQlkgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFf SW5jcmVtZW50QnkoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJv b2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqaW5jcmVtZW50YWxieTsKKwljaGFyCSAg ICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAi U0VUIElOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIklOQ1JFTUVOVCBC WSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRh LT5zZXFpbmNyZW1lbnQpOworCWluY3JlbWVudGFsYnkgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIs CisJCQkJCQkJCSAgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic2VxaW5jcmVtZW50IiwKKwkJ CQkJCQkJICAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29i amVjdF9vYmplY3QoaW5jcmVtZW50YWxieSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1 ZW5jZSBNQVhWQUxVRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBh cnNlX1NlcV9NYXh2YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0 YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICptYXh2YWx1ZTsKKwljaGFyCSAg ICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAi U0VUIE1BWFZBTFVFICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAiTUFYVkFMVUUgJXt2YWx1 ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxbWF4 KTsKKwltYXh2YWx1ZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAibWF4dmFsdWUiLAorCQkJCQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0 cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QobWF4dmFsdWUpOworfQor CisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgTUlOVkFMVUUgb3B0aW9uLgorICovCitzdGF0 aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfTWludmFsdWUoT2JqVHJlZSAqcGFyZW50 LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJl ZQkgICAqbWludmFsdWU7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWlm IChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCBNSU5WQUxVRSAle3ZhbHVlfXMiOworCWVsc2UK KwkJZm10ID0gIk1JTlZBTFVFICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2 NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1pbik7CisJbWludmFsdWUgPSBuZXdfb2JqdHJlZV9WQShm bXQsIDIsCisJCQkJCQkJICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1pbnZhbHVlIiwKKwkJ CQkJCQkgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmpl Y3Rfb2JqZWN0KG1pbnZhbHVlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE9X TkVEIEJZIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX093bmVk QnkoT2JqVHJlZSAqcGFyZW50LCBPaWQgc2VxdWVuY2VJZCwgYm9vbCBhbHRlcl90YWJsZSkKK3sK KwlPYmpUcmVlCSAgICpvd25lZGJ5ID0gTlVMTDsKKwlSZWxhdGlvbglkZXBSZWw7CisJU3lzU2Nh bkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXlzWzNdOworCUhlYXBUdXBsZSAgIHR1cGxlOwor CisJZGVwUmVsID0gdGFibGVfb3BlbihEZXBlbmRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2sp OworCVNjYW5LZXlJbml0KCZrZXlzWzBdLAorCQkJCUFudW1fcGdfZGVwZW5kX2NsYXNzaWQsCisJ CQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0o UmVsYXRpb25SZWxhdGlvbklkKSk7CisJU2NhbktleUluaXQoJmtleXNbMV0sCisJCQkJQW51bV9w Z19kZXBlbmRfb2JqaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJ CU9iamVjdElkR2V0RGF0dW0oc2VxdWVuY2VJZCkpOworCVNjYW5LZXlJbml0KCZrZXlzWzJdLAor CQkJCUFudW1fcGdfZGVwZW5kX29ianN1YmlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwg Rl9JTlQ0RVEsCisJCQkJSW50MzJHZXREYXR1bSgwKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVn aW5zY2FuKGRlcFJlbCwgRGVwZW5kRGVwZW5kZXJJbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVM TCwgMywga2V5cyk7CisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9n ZXRuZXh0KHNjYW4pKSkKKwl7CisJCU9pZAkJIG93bmVySWQ7CisJCUZvcm1fcGdfZGVwZW5kIGRl cGZvcm07CisJCU9ialRyZWUJKnRtcG9iajsKKwkJY2hhcgkgICAqY29sbmFtZTsKKworCQlkZXBm b3JtID0gKEZvcm1fcGdfZGVwZW5kKSBHRVRTVFJVQ1QodHVwbGUpOworCisJCS8qIE9ubHkgY29u c2lkZXIgQVVUTyBkZXBlbmRlbmNpZXMgb24gcGdfY2xhc3MgKi8KKwkJaWYgKGRlcGZvcm0tPmRl cHR5cGUgIT0gREVQRU5ERU5DWV9BVVRPKQorCQkJY29udGludWU7CisJCWlmIChkZXBmb3JtLT5y ZWZjbGFzc2lkICE9IFJlbGF0aW9uUmVsYXRpb25JZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVw Zm9ybS0+cmVmb2Jqc3ViaWQgPD0gMCkKKwkJCWNvbnRpbnVlOworCisJCW93bmVySWQgPSBkZXBm b3JtLT5yZWZvYmppZDsKKwkJY29sbmFtZSA9IGdldF9hdHRuYW1lKG93bmVySWQsIGRlcGZvcm0t PnJlZm9ianN1YmlkLCBmYWxzZSk7CisJCWlmIChjb2xuYW1lID09IE5VTEwpCisJCQljb250aW51 ZTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxh dGlvbklkLCBvd25lcklkKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiYXR0cm5h bWUiLCBjb2xuYW1lKTsKKwkJb3duZWRieSA9IG5ld19vYmp0cmVlX1ZBKCJPV05FRCBCWSAle293 bmVyfUQiLAorCQkJCQkJCQkgMiwKKwkJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi b3duZWQiLAorCQkJCQkJCQkgIm93bmVyIiwgT2JqVHlwZU9iamVjdCwgdG1wb2JqKTsKKwl9CisK KwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXJlbGF0aW9uX2Nsb3NlKGRlcFJlbCwgQWNjZXNz U2hhcmVMb2NrKTsKKworCS8qCisJICogSWYgdGhlcmUncyBubyBvd25lciBjb2x1bW4sIGVtaXQg YW4gZW1wdHkgT1dORUQgQlkgZWxlbWVudCwgc2V0IHVwIHNvCisJICogdGhhdCBpdCB3b24ndCBw cmludCBhbnl0aGluZy4KKwkgKi8KKwlpZiAoIW93bmVkYnkpCisJCS8qIFhYWCB0aGlzIHNob3Vs ZG4ndCBoYXBwZW4gLi4uICovCisJCW93bmVkYnkgPSBuZXdfb2JqdHJlZV9WQSgiT1dORUQgQlkg JXtvd25lcn1EIiwKKwkJCQkJCQkJIDMsCisJCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgIm93bmVkIiwKKwkJCQkJCQkJICJvd25lciIsIE9ialR5cGVOdWxsLAorCQkJCQkJCQkgInBy ZXNlbnQiLCBPYmpUeXBlQm9vbCwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0 KG93bmVkYnkpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgUkVTVEFSVCBvcHRp b24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9SZXN0YXJ0KE9i alRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGEpCit7CisJT2JqVHJl ZQkgICAqcmVzdGFydDsKKwljaGFyCSAgICp0bXBzdHI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJ TlQ2NF9GT1JNQVQsIHNlcWRhdGEtPmxhc3RfdmFsdWUpOworCXJlc3RhcnQgPSBuZXdfb2JqdHJl ZV9WQSgiUkVTVEFSVCAle3ZhbHVlfXMiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInJlc3RhcnQiLAorCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIp OworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXN0YXJ0KTsKK30KKworLyoKKyAqIERlcGFy c2UgdGhlIHNlcXVlbmNlIFNUQVJUIFdJVEggb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9i akVsZW0gKgorZGVwYXJzZV9TZXFfU3RhcnR3aXRoKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19z ZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKnN0YXJ0 d2l0aDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3Rh YmxlKQorCQlmbXQgPSAiU0VUIFNUQVJUIFdJVEggJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9 ICJTVEFSVCBXSVRIICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JN QVQsIHNlcWRhdGEtPnNlcXN0YXJ0KTsKKwlzdGFydHdpdGggPSBuZXdfb2JqdHJlZV9WQShmbXQs IDIsCisJCQkJCQkJICAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdGFydCIsCisJCQkJCQkJ ICAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9v YmplY3Qoc3RhcnR3aXRoKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgU1RPUkFHRSBv cHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU3RvcmFn ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAg KnN0b3JhZ2U7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKwljaGFyCSAgICpz dHI7CisKKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cHN0b3JhZ2UpCisJeworCQljYXNlICdwJzoKKwkJ CXN0ciA9ICJwbGFpbiI7CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJCQlzdHIgPSAiZXh0ZXJu YWwiOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJc3RyID0gImV4dGVuZGVkIjsKKwkJCWJy ZWFrOworCQljYXNlICdtJzoKKwkJCXN0ciA9ICJtYWluIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc3RvcmFnZSBzcGVjaWZpZXIgJWMiLCB0eXBGb3Jt LT50eXBzdG9yYWdlKTsKKwl9CisKKwl0bXBzdHIgPSBwc3ByaW50ZigiJXMiLCBzdHIpOworCisJ Zm10ID0gIlNUT1JBR0UgPSAle3ZhbHVlfXMiOworCisJc3RvcmFnZSA9IG5ld19vYmp0cmVlX1ZB KGZtdCwgMiwKKwkJCQkJCSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdG9yYWdlIiwKKwkJ CQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJldHVybiBuZXdfb2Jq ZWN0X29iamVjdChzdG9yYWdlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgUkVDRUlW RSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfUmVj ZWl2ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJ ICAgKnJlY2VpdmU7CisKKwlyZWNlaXZlID0gbmV3X29ianRyZWVfVkEoIlJFQ0VJVkU9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlY2VpdmUiKTsKKwlpZiAoT2lkSXNW YWxpZCh0eXBGb3JtLT50eXByZWNlaXZlKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmVjZWl2 ZSwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHJlY2VpdmUp KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdChyZWNlaXZlLCAicHJlc2VudCIsIGZhbHNl KTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZWNlaXZlKTsKK30KKworLyoKKyAqIERl cGFyc2UgdGhlIHR5cGUgU0VORCBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAq CitkZXBhcnNlX1R5cGVfU2VuZChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3Jt KQoreworCU9ialRyZWUJICAgKnNlbmQ7CisKKwlzZW5kID0gbmV3X29ianRyZWVfVkEoIlNFTkQ9 IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInNlbmQiKTsKKwlpZiAoT2lk SXNWYWxpZCh0eXBGb3JtLT50eXBzZW5kKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qoc2VuZCwg IiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJv Y2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHNlbmQpKTsKKwll bHNlCisJCWFwcGVuZF9ib29sX29iamVjdChzZW5kLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJl dHVybiBuZXdfb2JqZWN0X29iamVjdChzZW5kKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5 cGUgdHlwbW9kX2luIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFy c2VfVHlwZV9UeXBtb2RfSW4oT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkK K3sKKwlPYmpUcmVlCSAgICp0eXBtb2RpbjsKKworCXR5cG1vZGluID0gbmV3X29ianRyZWVfVkEo IlRZUE1PRF9JTj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9k X2luIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kaW4pKQorCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0eXBtb2RpbiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5 cEZvcm0tPnR5cG1vZGluKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodHlwbW9kaW4s ICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5cG1vZGlu KTsKK30KKworCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSB0eXBtb2Rfb3V0IG9wdGlvbi4KKyAq Lworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KE9ialRy ZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZQkgICAqdHlwbW9k b3V0OworCisJdHlwbW9kb3V0ID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9PVVQ9IiwgMSwKKwkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9vdXQiKTsKKwlpZiAoT2lkSXNW YWxpZCh0eXBGb3JtLT50eXBtb2RvdXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0eXBtb2Rv dXQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RvdXQp KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0eXBtb2RvdXQsICJwcmVzZW50IiwgZmFs c2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5cG1vZG91dCk7Cit9CisKKworLyoK KyAqIERlcGFyc2UgdGhlIHR5cGUgYW5hbHl6ZSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfQW5hbHl6ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdf dHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnR5cGFuYWx5emU7CisKKwl0eXBhbmFseXpl ID0gbmV3X29ianRyZWVfVkEoIkFOQUxZWkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImFuYWx5emUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBhbmFseXpl KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodHlwYW5hbHl6ZSwgIiV7cHJvY2VkdXJlfUQiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGFuYWx5emUpKTsKKwllbHNlCisJCWFwcGVuZF9i b29sX29iamVjdCh0eXBhbmFseXplLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdf b2JqZWN0X29iamVjdCh0eXBhbmFseXplKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUg c3Vic2NyaXB0IG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2Vf VHlwZV9TdWJzY3JpcHQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sK KwlPYmpUcmVlCSAgICp0eXBzdWJzY3JpcHQ7CisKKwl0eXBzdWJzY3JpcHQgPSBuZXdfb2JqdHJl ZV9WQSgiU1VCU0NSSVBUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJz dWJzY3JpcHQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBzdWJzY3JpcHQpKQorCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0eXBzdWJzY3JpcHQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzdWJzY3JpcHQpKTsKKwllbHNlCisJCWFwcGVuZF9ib29s X29iamVjdCh0eXBzdWJzY3JpcHQsICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19v YmplY3Rfb2JqZWN0KHR5cHN1YnNjcmlwdCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgUnVsZVN0 bXQgKENSRUFURSBSVUxFKS4KKyAqCisgKiBHaXZlbiBhIHJ1bGUgT0lEIGFuZCB0aGUgcGFyc2V0 cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0 aGUgcnVsZSBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1J1bGVTdG10 KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCVJ1bGVTdG10ICpub2RlID0gKFJ1 bGVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpydWxlU3RtdDsKKwlPYmpUcmVlCSAg ICp0bXA7CisJUmVsYXRpb24JcGdfcmV3cml0ZTsKKwlGb3JtX3BnX3Jld3JpdGUgcmV3ckZvcm07 CisJSGVhcFR1cGxlCXJld3JUdXA7CisJU3lzU2NhbkRlc2MJc2NhbjsKKwlTY2FuS2V5RGF0YQlr ZXk7CisJRGF0dW0JCWV2X3F1YWw7CisJRGF0dW0JCWV2X2FjdGlvbnM7CisJYm9vbAkJaXNudWxs OworCWNoYXIJICAgKnF1YWw7CisJTGlzdAkgICAqYWN0aW9uczsKKwlMaXN0CSAgICpsaXN0Owor CUxpc3RDZWxsICAgKmNlbGw7CisKKwlwZ19yZXdyaXRlID0gdGFibGVfb3BlbihSZXdyaXRlUmVs YXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgma2V5LAorCQkJCUFudW1f cGdfcmV3cml0ZV9vaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLAorCQkJCUZfT0lERVEs IE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNj YW4ocGdfcmV3cml0ZSwgUmV3cml0ZU9pZEluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAx LCAma2V5KTsKKwlyZXdyVHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQocmV3clR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciByZXdyaXRlIHJ1bGUgd2l0aCBvaWQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXJld3JG b3JtID0gKEZvcm1fcGdfcmV3cml0ZSkgR0VUU1RSVUNUKHJld3JUdXApOworCisJcnVsZVN0bXQg PSBuZXdfb2JqdHJlZSgiQ1JFQVRFIFJVTEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJ1 bGVTdG10LCAiJXtvcl9yZXBsYWNlfXMiLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQ TEFDRSIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChydWxlU3RtdCwgIiV7aWRlbnRp dHl9SSIsCisJCQkJCQkgbm9kZS0+cnVsZW5hbWUpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qo cnVsZVN0bXQsICJBUyBPTiAle2V2ZW50fXMiLAorCQkJCQkJIG5vZGUtPmV2ZW50ID09IENNRF9T RUxFQ1QgPyAiU0VMRUNUIiA6CisJCQkJCQkgbm9kZS0+ZXZlbnQgPT0gQ01EX1VQREFURSA/ICJV UERBVEUiIDoKKwkJCQkJCSBub2RlLT5ldmVudCA9PSBDTURfREVMRVRFID8gIkRFTEVURSIgOgor CQkJCQkJIG5vZGUtPmV2ZW50ID09IENNRF9JTlNFUlQgPyAiSU5TRVJUIiA6ICJYWFgiKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdChydWxlU3RtdCwgIlRPICV7dGFibGV9RCIsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkgcmV3ckZvcm0tPmV2X2NsYXNzKSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChydWxlU3Rt dCwgIkRPICV7aW5zdGVhZH1zIiwKKwkJCQkJCSBub2RlLT5pbnN0ZWFkID8gIklOU1RFQUQiIDog IkFMU08iKTsKKworCWV2X3F1YWwgPSBoZWFwX2dldGF0dHIocmV3clR1cCwgQW51bV9wZ19yZXdy aXRlX2V2X3F1YWwsCisJCQkJCQkgICBSZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAmaXNu dWxsKTsKKwlldl9hY3Rpb25zID0gaGVhcF9nZXRhdHRyKHJld3JUdXAsIEFudW1fcGdfcmV3cml0 ZV9ldl9hY3Rpb24sCisJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAmaXNu dWxsKTsKKworCXBnX2dldF9ydWxlZGVmX2RldGFpbGVkKGV2X3F1YWwsIGV2X2FjdGlvbnMsICZx dWFsLCAmYWN0aW9ucyk7CisKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiV0hFUkUgJXtjbGF1c2V9 cyIsIDApOworCisJaWYgKHF1YWwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgImNsYXVz ZSIsIHF1YWwpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXAsICJjbGF1c2Ui KTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCisJ YXBwZW5kX29iamVjdF9vYmplY3QocnVsZVN0bXQsICJ3aGVyZV9jbGF1c2UiLCB0bXApOworCisJ bGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIGFjdGlvbnMpCisJeworCQljaGFyICphY3Rpb24g PSBsZmlyc3QoY2VsbCk7CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmpl Y3QoYWN0aW9uKSk7CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QocnVsZVN0bXQsICIle2FjdGlv bnM6LCB9cyIsIGxpc3QpOworCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9z ZShwZ19yZXdyaXRlLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJ1bGVTdG10OworfQor CisvKgorICogSGFuZGxlIGRlcGFyc2luZyBvZiBzaW1wbGUgY29tbWFuZHMuCisgKgorICogVGhp cyBmdW5jdGlvbiBzaG91bGQgY292ZXIgYWxsIGNhc2VzIGhhbmRsZWQgaW4gUHJvY2Vzc1V0aWxp dHlTbG93LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX3NpbXBsZV9jb21tYW5kKENv bGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvYmplY3RJZDsKKwlOb2RlCSAgICpwYXJz ZXRyZWU7CisJT2JqVHJlZQkgICAqY29tbWFuZDsKKworCUFzc2VydChjbWQtPnR5cGUgPT0gU0NU X1NpbXBsZSk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPnBhcnNldHJlZTsKKwlvYmplY3RJZCA9IGNt ZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZDsKKworCWlmIChjbWQtPmluX2V4dGVuc2lvbiAm JiAobm9kZVRhZyhwYXJzZXRyZWUpICE9IFRfQ3JlYXRlRXh0ZW5zaW9uU3RtdCkpCisJCXJldHVy biBOVUxMOworCisKKwkvKiBUaGlzIHN3aXRjaCBuZWVkcyB0byBoYW5kbGUgZXZlcnl0aGluZyB0 aGF0IFByb2Nlc3NVdGlsaXR5U2xvdyBkb2VzICovCisJc3dpdGNoIChub2RlVGFnKHBhcnNldHJl ZSkpCisJeworCQljYXNlIFRfQ3JlYXRlU2NoZW1hU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNl X0NyZWF0ZVNjaGVtYVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQlj YXNlIFRfQWx0ZXJEb21haW5TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJEb21haW5T dG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJCSAgY21kLT5kLnNpbXBsZS5zZWNv bmRhcnlPYmplY3QpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZVN0bXQ6CisJCQljb21t YW5kID0gZGVwYXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBUX1JlZnJlc2hNYXRWaWV3U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX1Jl ZnJlc2hNYXRWaWV3U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNh c2UgVF9DcmVhdGVUcmlnU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVRyaWdTdG10 KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX1J1bGVTdG10Ogor CQkJY29tbWFuZCA9IGRlcGFyc2VfUnVsZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQli cmVhazsKKworCQljYXNlIFRfQ3JlYXRlU2VxU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Ny ZWF0ZVNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRf Q3JlYXRlRmR3U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUZkd1N0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJGZHdTdG10OgorCQkJ Y29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJGZHdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyU2VxU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Fs dGVyU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9E ZWZpbmVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfRGVmaW5lU3RtdChvYmplY3RJZCwgcGFy c2V0cmVlLAorCQkJCQkJCQkJCSBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisJCQli cmVhazsKKworCQljYXNlIFRfQ3JlYXRlQ29udmVyc2lvblN0bXQ6CisJCQljb21tYW5kID0gZGVw YXJzZV9DcmVhdGVDb252ZXJzaW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisK KwkJY2FzZSBUX0NyZWF0ZURvbWFpblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVE b21haW4ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRl RXh0ZW5zaW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUV4dGVuc2lvblN0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJFeHRlbnNp b25TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJFeHRlbnNpb25TdG10KG9iamVjdElk LCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRXh0ZW5zaW9uQ29udGVu dHNTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5zaW1wbGUuc2Vjb25k YXJ5T2JqZWN0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVPcEZhbWlseVN0bXQ6CisJ CQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVPcEZhbWlseShvYmplY3RJZCwgcGFyc2V0cmVlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVQb2xpY3lTdG10OgorCQkJY29tbWFuZCA9IGRl cGFyc2VfQ3JlYXRlUG9saWN5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgVF9JbmRleFN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9JbmRleFN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlRnVuY3Rpb25T dG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlRnVuY3Rpb24ob2JqZWN0SWQsIHBhcnNl dHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJGdW5jdGlvblN0bXQ6CisJCQljb21t YW5kID0gZGVwYXJzZV9BbHRlckZ1bmN0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBUX1JlbmFtZVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9SZW5hbWVT dG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNh c2UgVF9BbHRlck9iamVjdERlcGVuZHNTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJE ZXBlbmRTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0Fs dGVyT2JqZWN0U2NoZW1hU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyT2JqZWN0U2No ZW1hU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsCisJCQkJCQkJCQkJCQkJcGFyc2V0cmVlLAor CQkJCQkJCQkJCQkJCWNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKwkJCWJyZWFrOwor CisJCWNhc2UgVF9BbHRlck93bmVyU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyT3du ZXJTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgVF9BbHRlck9wZXJhdG9yU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyT3Bl cmF0b3JTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0Fs dGVyUG9saWN5U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyUG9saWN5U3RtdChvYmpl Y3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlclR5cGVTdG10Ogor CQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJUeXBlU2V0U3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9Db21wb3NpdGVUeXBlU3RtdDoKKwkJCWNvbW1hbmQg PSBkZXBhcnNlX0NvbXBvc2l0ZVR5cGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBUX0NyZWF0ZUVudW1TdG10OgkvKiBDUkVBVEUgVFlQRSBBUyBFTlVNICov CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVFbnVtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVSYW5nZVN0bXQ6CS8qIENSRUFURSBUWVBF IEFTIFJBTkdFICovCisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVSYW5nZVN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJFbnVtU3RtdDoKKwkJ CWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRW51bVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlQ2FzdFN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJz ZV9DcmVhdGVDYXN0U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWRl ZmF1bHQ6CisJCQljb21tYW5kID0gTlVMTDsKKwkJCWVsb2coTE9HLCAidW5yZWNvZ25pemVkIG5v ZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJCQkgKGludCkgbm9kZVRhZyhwYXJz ZXRyZWUpKTsKKwl9CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUg Zm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcuCisgKgorICogRGVhbCB3aXRoIGFsbCB0aGUgdGFi bGUgZWxlbWVudHMgKGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzKS4KKyAqCisgKiBOb3RlIHdlIGln bm9yZSBjb25zdHJhaW50cyBpbiB0aGUgcGFyc2Ugbm9kZSBoZXJlOyB0aGV5IGFyZSBleHRyYWN0 ZWQgZnJvbQorICogc3lzdGVtIGNhdGFsb2dzIGluc3RlYWQuCisgKi8KK3N0YXRpYyBMaXN0ICoK K2RlcGFyc2VfVGFibGVFbGVtZW50cyhSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqdGFibGVFbGVt ZW50cywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkgIGJvb2wgdHlwZWQsIGJvb2wgY29tcG9zaXRl KQoreworCUxpc3QJICAgKmVsZW1lbnRzID0gTklMOworCUxpc3RDZWxsICAgKmxjOworCisJZm9y ZWFjaChsYywgdGFibGVFbGVtZW50cykKKwl7CisJCU5vZGUJICAgKmVsdCA9IChOb2RlICopIGxm aXJzdChsYyk7CisKKwkJc3dpdGNoIChub2RlVGFnKGVsdCkpCisJCXsKKwkJCWNhc2UgVF9Db2x1 bW5EZWY6CisJCQkJeworCQkJCQlPYmpUcmVlCSAgICp0cmVlOworCisJCQkJCXRyZWUgPSB0eXBl ZCA/CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChyZWxhdGlvbiwgZHBjb250ZXh0LAor CQkJCQkJCQkJCQkJKENvbHVtbkRlZiAqKSBlbHQpIDoKKwkJCQkJCWRlcGFyc2VfQ29sdW1uRGVm KHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJCSAgY29tcG9zaXRlLCAoQ29sdW1uRGVm ICopIGVsdCwKKwkJCQkJCQkJCQkJICBmYWxzZSwgTlVMTCk7CisJCQkJCWlmICh0cmVlICE9IE5V TEwpCisJCQkJCXsKKwkJCQkJCU9iakVsZW0JKmNvbHVtbjsKKworCQkJCQkJY29sdW1uID0gbmV3 X29iamVjdF9vYmplY3QodHJlZSk7CisJCQkJCQllbGVtZW50cyA9IGxhcHBlbmQoZWxlbWVudHMs IGNvbHVtbik7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFRfQ29uc3RyYWlu dDoKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgbm9k ZSB0eXBlICVkIiwgbm9kZVRhZyhlbHQpKTsKKwkJfQorCX0KKworCXJldHVybiBlbGVtZW50czsK K30KKworLyoKKyAqIFdvcmtob3JzZSB0byBkZXBhcnNlIGEgQ29sbGVjdGVkQ29tbWFuZC4KKyAq LworY2hhciAqCitkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQs IGJvb2wgdmVyYm9zZV9tb2RlKQoreworCU92ZXJyaWRlU2VhcmNoUGF0aCAqb3ZlcnJpZGVQYXRo OworCU1lbW9yeUNvbnRleHQJb2xkY3h0OworCU1lbW9yeUNvbnRleHQJdG1wY3h0OworCU9ialRy ZWUJCSAgICp0cmVlOworCWNoYXIJCSAgICpjb21tYW5kOworCVN0cmluZ0luZm9EYXRhICBzdHI7 CisKKwkvKgorCSAqIEFsbG9jYXRlIGV2ZXJ5dGhpbmcgZG9uZSBieSB0aGUgZGVwYXJzaW5nIHJv dXRpbmVzIGludG8gYSB0ZW1wIGNvbnRleHQsCisJICogdG8gYXZvaWQgaGF2aW5nIHRvIHNwcmlu a2xlIHRoZW0gd2l0aCBtZW1vcnkgaGFuZGxpbmcgY29kZTsgYnV0IGFsbG9jYXRlCisJICogdGhl IG91dHB1dCBTdHJpbmdJbmZvIGJlZm9yZSBzd2l0Y2hpbmcuCisJICovCisJaW5pdFN0cmluZ0lu Zm8oJnN0cik7CisJdG1wY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlD b250ZXh0LAorCQkJCQkJCQkgICAiZGVwYXJzZSBjdHgiLAorCQkJCQkJCQkgICBBTExPQ1NFVF9E RUZBVUxUX01JTlNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCisJ CQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUFYU0laRSk7CisJb2xkY3h0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKHRtcGN4dCk7CisKKwkvKgorCSAqIE1hbnkgcm91dGluZXMgdW5kZXJseWlu ZyB0aGlzIG9uZSB3aWxsIGludm9rZSBydWxldXRpbHMuYyBmdW5jdGlvbmFsaXR5CisJICogaW4g b3JkZXIgdG8gb2J0YWluIGRlcGFyc2VkIHZlcnNpb25zIG9mIGV4cHJlc3Npb25zLiAgSW4gc3Vj aCByZXN1bHRzLAorCSAqIHdlIHdhbnQgYWxsIG9iamVjdCBuYW1lcyB0byBiZSBxdWFsaWZpZWQs IHNvIHRoYXQgcmVzdWx0cyBhcmUgInBvcnRhYmxlIgorCSAqIHRvIGVudmlyb25tZW50cyB3aXRo IGRpZmZlcmVudCBzZWFyY2hfcGF0aCBzZXR0aW5ncy4gIFJhdGhlciB0aGFuIGluamVjdAorCSAq IHdoYXQgd291bGQgYmUgcmVwZXRpdGl2ZSBjYWxscyB0byBvdmVycmlkZSBzZWFyY2ggcGF0aCBh bGwgb3ZlciB0aGUKKwkgKiBwbGFjZSwgd2UgZG8gaXQgY2VudHJhbGx5IGhlcmUuCisJICovCisJ b3ZlcnJpZGVQYXRoID0gR2V0T3ZlcnJpZGVTZWFyY2hQYXRoKEN1cnJlbnRNZW1vcnlDb250ZXh0 KTsKKwlvdmVycmlkZVBhdGgtPnNjaGVtYXMgPSBOSUw7CisJb3ZlcnJpZGVQYXRoLT5hZGRDYXRh bG9nID0gZmFsc2U7CisJb3ZlcnJpZGVQYXRoLT5hZGRUZW1wID0gdHJ1ZTsKKwlQdXNoT3ZlcnJp ZGVTZWFyY2hQYXRoKG92ZXJyaWRlUGF0aCk7CisKKwl2ZXJib3NlID0gdmVyYm9zZV9tb2RlOwor CisJc3dpdGNoIChjbWQtPnR5cGUpCisJeworCQljYXNlIFNDVF9TaW1wbGU6CisJCQl0cmVlID0g ZGVwYXJzZV9zaW1wbGVfY29tbWFuZChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVy VGFibGU6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlclRhYmxlU3RtdChjbWQpOworCQkJYnJlYWs7 CisJCWNhc2UgU0NUX0dyYW50OgorCQkJdHJlZSA9IGRlcGFyc2VfR3JhbnRTdG10KGNtZCk7CisJ CQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToKKwkJCXRyZWUgPSBkZXBhcnNlX0Fs dGVyT3BGYW1pbHkoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgor CQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlT3BDbGFzc1N0bXQoY21kKTsKKwkJCWJyZWFrOworCQlk ZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgZGVwYXJzZSBub2RlIHR5cGUgJWQi LCBjbWQtPnR5cGUpOworCX0KKworCVBvcE92ZXJyaWRlU2VhcmNoUGF0aCgpOworCisJaWYgKHRy ZWUpCisJeworCQlKc29uYiAqanNvbmI7CisKKwkJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHRy ZWUpOworCQljb21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09O Ql9FU1RJTUFURURfTEVOKTsKKwl9CisJZWxzZQorCQljb21tYW5kID0gTlVMTDsKKworCS8qCisJ ICogQ2xlYW4gdXAuICBOb3RlIHRoYXQgc2luY2Ugd2UgY3JlYXRlZCB0aGUgU3RyaW5nSW5mbyBp biB0aGUgY2FsbGVyJ3MKKwkgKiBjb250ZXh0LCB0aGUgb3V0cHV0IHN0cmluZyBpcyBub3QgZGVs ZXRlZCBoZXJlLgorCSAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCU1lbW9y eUNvbnRleHREZWxldGUodG1wY3h0KTsKKworCXJldHVybiBjb21tYW5kOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9qc29uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZmI5NzBm MmJlZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMK QEAgLTAsMCArMSw3NjMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9qc29uLmMK KyAqCSAgSlNPTiBjb2RlIHJlbGF0ZWQgdG8gRERMIGNvbW1hbmQgZGVwYXJzaW5nCisgKgorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkg IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5o IgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIK KworCisvKgorICogQ29udmVyc2lvbiBzcGVjaWZpZXIsIGl0IGRldGVybWluZXMgaG93IHdlIGV4 cGFuZCB0aGUganNvbiBlbGVtZW50IGludG8KKyAqIHN0cmluZy4KKyAqLwordHlwZWRlZiBlbnVt Cit7CisJU3BlY1R5cGVuYW1lLAorCVNwZWNPcGVyYXRvcm5hbWUsCisJU3BlY0RvdHRlZE5hbWUs CisJU3BlY1N0cmluZywKKwlTcGVjTnVtYmVyLAorCVNwZWNTdHJpbmdMaXRlcmFsLAorCVNwZWNJ ZGVudGlmaWVyLAorCVNwZWNSb2xlCit9IGNvbnZTcGVjaWZpZXI7CisKKy8qCisgKiBBIHRlcm5h cnkgdmFsdWUgd2hpY2ggcmVwcmVzZW50cyBhIGJvb2xlYW4gdHlwZSBKc29uYlZhbHVlLgorICov Cit0eXBlZGVmIGVudW0KK3sKKwl0dl9hYnNlbnQsCisJdHZfdHJ1ZSwKKwl0dl9mYWxzZQorfSBq c29uX3RyaXZhbHVlOworCitzdGF0aWMgYm9vbCBleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3Ry aW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJCQkJIEpzb25iVmFsdWUgKmpzb252YWwsIGNv bnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCQkJIGNvbnN0IGNoYXIgKmZtdCk7CitzdGF0aWMg dm9pZCBleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJ CSAgIEpzb25iVmFsdWUgKmpzb25hcnIsIGNoYXIgKmFycmF5c2VwLAorCQkJCSAgIGNvbnZTcGVj aWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpmbXQpOworc3RhdGljIHZvaWQgZm10c3RyX2Vy cm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CitjaGFyICpkZGxfZGVwYXJzZV9qc29uX3RvX3N0cmlu ZyhjaGFyICpqc29uYik7CisKKy8qCisgKiBHaXZlbiBhIEpzb25iQ29udGFpbmVyLCBmaW5kIHRo ZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtleSBuYW1lIGluIGl0LgorICogSWYgaXQncyBv ZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZCb29sLCBhbiBlcnJvciBpcyByYWlzZWQuIElmIGl0IGRv ZXNuJ3QKKyAqIGV4aXN0LCB0dl9hYnNlbnQgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSByZXR1cm4g dGhlIGFjdHVhbCBqc29uX3RyaXZhbHVlLgorICovCitzdGF0aWMganNvbl90cml2YWx1ZQorZmlu ZF9ib29sX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIGNoYXIg KmtleW5hbWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJanNv bl90cml2YWx1ZQlyZXN1bHQ7CisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0 cmluZy52YWwgPSBrZXluYW1lOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1l KTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJ CQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwpCisJCXJldHVybiB0 dl9hYnNlbnQ7CisJaWYgKHZhbHVlLT50eXBlICE9IGpidkJvb2wpCisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVy cm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IG9mIHR5cGUgYm9vbGVhbiIsCisJCQkJCQlrZXlu YW1lKSkpOworCXJlc3VsdCA9IHZhbHVlLT52YWwuYm9vbGVhbiA/IHR2X3RydWUgOiB0dl9mYWxz ZTsKKwlwZnJlZSh2YWx1ZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogR2l2ZW4g YSBKc29uYkNvbnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3aXRoIHRoZSBnaXZlbiBrZXkg bmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90aGVyIHRoYW4gamJ2U3RyaW5nLCBh biBlcnJvciBpcyByYWlzZWQuICBJZiBpdCBkb2Vzbid0CisgKiBleGlzdCwgYW4gZXJyb3IgaXMg cmFpc2VkIHVubGVzcyBtaXNzaW5nX29rOyBvdGhlcndpc2UgcmV0dXJuIE5VTEwuCisgKgorICog SWYgaXQgZXhpc3RzIGFuZCBpcyBhIHN0cmluZywgYSBmcmVzaGx5IHBhbGxvYydlZCBjb3B5IGlz IHJldHVybmVkLgorICoKKyAqIElmICpsZW5ndGggaXMgbm90IE5VTEwsIGl0IGlzIHNldCB0byB0 aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjaGFyICoKK2ZpbmRfc3RyaW5n X2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIGNoYXIgKmtleW5h bWUsCisJCQkJCQkJICBib29sIG1pc3Npbmdfb2ssIGludCAqbGVuZ3RoKQoreworCUpzb25iVmFs dWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNoYXIJICAgKnN0cjsKKworCS8qIFhYWCB2 ZXJpZnkgdGhhdCB0aGlzIGlzIGFuIG9iamVjdCwgbm90IGFuIGFycmF5ICovCisKKwlrZXkudHlw ZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXluYW1lOworCWtleS52YWwu c3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJv bUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7CisJaWYg KHZhbHVlID09IE5VTEwpCisJeworCQlpZiAobWlzc2luZ19vaykKKwkJCXJldHVybiBOVUxMOwor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCSBlcnJtc2coIm1pc3NpbmcgZWxlbWVudCBcIiVzXCIgaW4ganNvbiBvYmpl Y3QiLCBrZXluYW1lKSkpOworCX0KKworCXN0ciA9IHBuc3RyZHVwKHZhbHVlLT52YWwuc3RyaW5n LnZhbCwgdmFsdWUtPnZhbC5zdHJpbmcubGVuKTsKKwlpZiAobGVuZ3RoKQorCQkqbGVuZ3RoID0g dmFsdWUtPnZhbC5zdHJpbmcubGVuOworCXBmcmVlKHZhbHVlKTsKKwlyZXR1cm4gc3RyOworfQor CisjZGVmaW5lIEFEVkFOQ0VfUEFSU0VfUE9JTlRFUihwdHIsZW5kX3B0cikgXAorCWRvIHsgXAor CQlpZiAoKysocHRyKSA+PSAoZW5kX3B0cikpIFwKKwkJCWVyZXBvcnQoRVJST1IsIFwKKwkJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksIFwKKwkJCQkJIGVycm1z ZygidW50ZXJtaW5hdGVkIGZvcm1hdCBzcGVjaWZpZXIiKSkpOyBcCisJfSB3aGlsZSAoMCkKKwor LyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIHBnX2V2ZW50X3RyaWdnZXJfZXhwYW5kX2NvbW1h bmQKKyAqCisgKiBGaW5kIHRoZSAiZm10IiBlbGVtZW50IGluIHRoZSBnaXZlbiBjb250YWluZXIs IGFuZCBleHBhbmQgaXQgaW50byB0aGUKKyAqIHByb3ZpZGVkIFN0cmluZ0luZm8uCisgKi8KK3N0 YXRpYyB2b2lkCitleHBhbmRfZm10X3JlY3Vyc2l2ZShKc29uYkNvbnRhaW5lciAqY29udGFpbmVy LCBTdHJpbmdJbmZvIGJ1ZikKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1 ZTsKKwljb25zdCBjaGFyICpjcDsKKwljb25zdCBjaGFyICpzdGFydF9wdHI7CisJY29uc3QgY2hh ciAqZW5kX3B0cjsKKwlpbnQJCQlsZW47CisKKwlzdGFydF9wdHIgPSBmaW5kX3N0cmluZ19pbl9q c29uYmNvbnRhaW5lcihjb250YWluZXIsICJmbXQiLCBmYWxzZSwgJmxlbik7CisJZW5kX3B0ciA9 IHN0YXJ0X3B0ciArIGxlbjsKKworCWZvciAoY3AgPSBzdGFydF9wdHI7IGNwIDwgZW5kX3B0cjsg Y3ArKykKKwl7CisJCWNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyOworCQlib29sCQlpc19hcnJheSA9 IGZhbHNlOworCQljaGFyCSAgICpwYXJhbSA9IE5VTEw7CisJCWNoYXIJICAgKmFycmF5c2VwID0g TlVMTDsKKworCQlpZiAoKmNwICE9ICclJykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJN YWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJfQorCisKKwkJQURWQU5DRV9QQVJTRV9Q T0lOVEVSKGNwLCBlbmRfcHRyKTsKKworCQkvKiBFYXN5IGNhc2U6ICUlIG91dHB1dHMgYSBzaW5n bGUgJSAqLworCQlpZiAoKmNwID09ICclJykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJN YWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFNjYW4gdGhl IG1hbmRhdG9yeSBlbGVtZW50IG5hbWUuICBBbGxvdyBmb3IgYW4gYXJyYXkgc2VwYXJhdG9yCisJ CSAqICh3aGljaCBtYXkgYmUgdGhlIGVtcHR5IHN0cmluZykgdG8gYmUgc3BlY2lmaWVkIGFmdGVy IGNvbG9uLgorCQkgKi8KKwkJaWYgKCpjcCA9PSAneycpCisJCXsKKwkJCVN0cmluZ0luZm9EYXRh IHBhcmJ1ZjsKKwkJCVN0cmluZ0luZm9EYXRhIGFycmF5c2VwYnVmOworCQkJU3RyaW5nSW5mbwlh cHBlbmRUbzsKKworCQkJaW5pdFN0cmluZ0luZm8oJnBhcmJ1Zik7CisJCQlhcHBlbmRUbyA9ICZw YXJidWY7CisKKwkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQlmb3Ig KDsgY3AgPCBlbmRfcHRyOykKKwkJCXsKKwkJCQlpZiAoKmNwID09ICc6JykKKwkJCQl7CisJCQkJ CS8qCisJCQkJCSAqIEZvdW5kIGFycmF5IHNlcGFyYXRvciBkZWxpbWl0ZXI7IGVsZW1lbnQgbmFt ZSBpcyBub3cKKwkJCQkJICogY29tcGxldGUsIHN0YXJ0IGZpbGxpbmcgdGhlIHNlcGFyYXRvci4K KwkJCQkJICovCisJCQkJCWluaXRTdHJpbmdJbmZvKCZhcnJheXNlcGJ1Zik7CisJCQkJCWFwcGVu ZFRvID0gJmFycmF5c2VwYnVmOworCQkJCQlpc19hcnJheSA9IHRydWU7CisJCQkJCUFEVkFOQ0Vf UEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJ CWlmICgqY3AgPT0gJ30nKQorCQkJCXsKKwkJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBl bmRfcHRyKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFj cm8oYXBwZW5kVG8sICpjcCk7CisJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRy KTsKKwkJCX0KKwkJCXBhcmFtID0gcGFyYnVmLmRhdGE7CisJCQlpZiAoaXNfYXJyYXkpCisJCQkJ YXJyYXlzZXAgPSBhcnJheXNlcGJ1Zi5kYXRhOworCQl9CisJCWlmIChwYXJhbSA9PSBOVUxMKQor CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJIGVycm1zZygibWlzc2luZyBjb252ZXJzaW9uIG5hbWUgaW4gY29udmVy c2lvbiBzcGVjaWZpZXIiKSkpOworCisJCXN3aXRjaCAoKmNwKQorCQl7CisJCQljYXNlICdJJzoK KwkJCQlzcGVjaWZpZXIgPSBTcGVjSWRlbnRpZmllcjsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0Qn OgorCQkJCXNwZWNpZmllciA9IFNwZWNEb3R0ZWROYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAn cyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1N0cmluZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0wn OgorCQkJCXNwZWNpZmllciA9IFNwZWNTdHJpbmdMaXRlcmFsOworCQkJCWJyZWFrOworCQkJY2Fz ZSAnVCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1R5cGVuYW1lOworCQkJCWJyZWFrOworCQkJY2Fz ZSAnTyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY09wZXJhdG9ybmFtZTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgJ24nOgorCQkJCXNwZWNpZmllciA9IFNwZWNOdW1iZXI7CisJCQkJYnJlYWs7CisJCQlj YXNlICdSJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjUm9sZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1 bHQ6CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBjb252ZXJzaW9uIHNwZWNp ZmllciBcIiVjXCIiLCAqY3ApKSk7CisJCX0KKworCQkvKgorCQkgKiBPYnRhaW4gdGhlIGVsZW1l bnQgdG8gYmUgZXhwYW5kZWQuCisJCSAqLworCQlrZXkudHlwZSA9IGpidlN0cmluZzsKKwkJa2V5 LnZhbC5zdHJpbmcudmFsID0gcGFyYW07CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihw YXJhbSk7CisKKwkJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVy LCBKQl9GT0JKRUNULCAma2V5KTsKKworCQkvKgorCQkgKiBFeHBhbmQgdGhlIGRhdGEgKHBvc3Np Ymx5IGFuIGFycmF5KSBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mby4KKwkJICovCisJCWlmIChp c19hcnJheSkKKwkJCWV4cGFuZF9qc29uYl9hcnJheShidWYsIHBhcmFtLCB2YWx1ZSwgYXJyYXlz ZXAsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwkJZWxzZQorCQkJZXhwYW5kX29uZV9qc29uYl9l bGVtZW50KGJ1ZiwgcGFyYW0sIHZhbHVlLCBzcGVjaWZpZXIsIHN0YXJ0X3B0cik7CisJfQorfQor CisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHF1b3RlZCBpZGVudGlmaWVyLiAgVGhl IHZhbHVlIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRf anNvbnZhbF9pZGVudGlmaWVyKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQor eworCWNoYXIJICAgKnN0cjsKKworCUFzc2VydChqc29udmFsLT50eXBlID09IGpidlN0cmluZyk7 CisKKwlzdHIgPSBwbnN0cmR1cChqc29udmFsLT52YWwuc3RyaW5nLnZhbCwganNvbnZhbC0+dmFs LnN0cmluZy5sZW4pOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlm aWVyKHN0cikpOworCXBmcmVlKHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVl IGFzIGEgZG90LXNlcGFyYXRlZC1uYW1lLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZQorICog b2JqZWN0IGFuZCBtYXkgY29udGFpbiBlbGVtZW50cyAic2NoZW1hbmFtZSIgKG9wdGlvbmFsKSwg Im9iam5hbWUiCisgKiAobWFuZGF0b3J5KSwgImF0dHJuYW1lIiAob3B0aW9uYWwpLiAgRG91Ymxl IHF1b3RlcyBhcmUgYWRkZWQgdG8gZWFjaCBlbGVtZW50CisgKiBhcyBuZWNlc3NhcnksIGFuZCBk b3Qgc2VwYXJhdG9ycyB3aGVyZSBuZWVkZWQuCisgKgorICogT25lIGRheSB3ZSBtaWdodCBuZWVk IGEgImNhdGFsb2ciIGVsZW1lbnQgYXMgd2VsbCwgYnV0IG5vIGN1cnJlbnQgdXNlIGNhc2UKKyAq IG5lZWRzIHRoYXQuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9kb3R0ZWRuYW1l KFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cjsK KworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5h cnkuZGF0YSwKKwkJCQkJCQkJCQkic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCWlmIChzdHIp CisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiIsIHF1b3RlX2lkZW50aWZpZXIoc3Ry KSk7CisJCXBmcmVlKHN0cik7CisJfQorCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250 YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJvYmpuYW1lIiwgZmFs c2UsIE5VTEwpOworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMiLCBxdW90ZV9pZGVudGlmaWVy KHN0cikpOworCXBmcmVlKHN0cik7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRh aW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJImF0dHJuYW1lIiwgdHJ1 ZSwgTlVMTCk7CisJaWYgKHN0cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiLiVzIiwg cXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9Cit9CisKKy8qCisgKiBF eHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgdHlwZSBuYW1lLgorICovCitzdGF0aWMgdm9pZAorZXhw YW5kX2pzb252YWxfdHlwZW5hbWUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwp Cit7CisJY2hhcgkgICAqc2NoZW1hID0gTlVMTDsKKwljaGFyCSAgICp0eXBlbmFtZTsKKwljaGFy CSAgICp0eXBtb2RzdHI7CisJanNvbl90cml2YWx1ZQlpc19hcnJheTsKKwljaGFyCSAgICphcnJh eV9kZWNvcjsKKworCS8qCisJICogV2Ugb21pdCBzY2hlbWEtcXVhbGlmeWluZyB0aGUgb3V0cHV0 IG5hbWUgaWYgdGhlIHNjaGVtYSBlbGVtZW50IGlzCisJICogZWl0aGVyIHRoZSBlbXB0eSBzdHJp bmcgb3IgTlVMTDsgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gY2FzZXMKKwkgKiBp cyB0aGF0IGluIHRoZSBsYXR0ZXIgd2UgcXVvdGUgdGhlIHR5cGUgbmFtZSwgaW4gdGhlIGZvcm1l ciB3ZSBkb24ndC4KKwkgKiBUaGlzIGFsbG93cyBmb3IgdHlwZXMgd2l0aCBzcGVjaWFsIHR5cG1v ZCBuZWVkcywgc3VjaCBhcyBpbnRlcnZhbCBhbmQKKwkgKiB0aW1lc3RhbXAgKHNlZSBmb3JtYXRf dHlwZV9kZXRhaWxlZCksIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgYWxsb3dpbmcKKwkgKiBmb3Ig dGhlIHNjaGVtYSBuYW1lIHRvIGJlIG9taXR0ZWQgZnJvbSB0eXBlIG5hbWVzIHRoYXQgcmVxdWly ZSBxdW90ZXMKKwkgKiBidXQgYXJlIHRvIGJlIG9idGFpbmVkIGZyb20gYSB1c2VyIHNjaGVtYS4K KwkgKi8KKworCXNjaGVtYSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwt PnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkgICAic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwp OworCXR5cGVuYW1lID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFs LmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgInR5cGVuYW1lIiwgZmFsc2UsIE5VTEwpOworCXR5 cG1vZHN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5h cnkuZGF0YSwKKwkJCQkJCQkJCQkJICAidHlwbW9kIiwgdHJ1ZSwgTlVMTCk7CisJaXNfYXJyYXkg PSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAor CQkJCQkJCQkJCSAgICJ0eXBhcnJheSIpOworCXN3aXRjaCAoaXNfYXJyYXkpCisJeworCQljYXNl IHR2X3RydWU6CisJCQlhcnJheV9kZWNvciA9ICJbXSI7CisJCQlicmVhazsKKworCQljYXNlIHR2 X2ZhbHNlOgorCQkJYXJyYXlfZGVjb3IgPSAiIjsKKwkJCWJyZWFrOworCisJCWNhc2UgdHZfYWJz ZW50OgorCQlkZWZhdWx0OgorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIm1pc3NpbmcgdHlwYXJy YXkgZWxlbWVudCIpKSk7CisJfQorCisJaWYgKHNjaGVtYSA9PSBOVUxMKQorCQlhcHBlbmRTdHJp bmdJbmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRlbnRpZmllcih0eXBlbmFtZSkpOworCWVsc2UgaWYg KHNjaGVtYVswXSA9PSAnXDAnKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgdHlwZW5h bWUpOyAvKiBTcGVjaWFsIHR5cG1vZCBuZWVkcyAqLworCWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5m byhidWYsICIlcy4lcyIsIHF1b3RlX2lkZW50aWZpZXIoc2NoZW1hKSwKKwkJCQkJCSBxdW90ZV9p ZGVudGlmaWVyKHR5cGVuYW1lKSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJXMiLCB0 eXBtb2RzdHIgPyB0eXBtb2RzdHIgOiAiIiwgYXJyYXlfZGVjb3IpOworfQorCisvKgorICogRXhw YW5kIGEganNvbiB2YWx1ZSBhcyBhbiBvcGVyYXRvciBuYW1lCisgKi8KK3N0YXRpYyB2b2lkCitl eHBhbmRfanNvbnZhbF9vcGVyYXRvcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZh bCkKK3sKKwljaGFyCSAgICpzdHI7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRh aW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJInNjaGVtYW5hbWUiLCB0 cnVlLCBOVUxMKTsKKwkvKiBTY2hlbWEgbWlnaHQgYmUgTlVMTCBvciBlbXB0eSAqLworCWlmIChz dHIgIT0gTlVMTCAmJiBzdHJbMF0gIT0gJ1wwJykKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVm LCAiJXMuIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9CisKKwlz dHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRh dGEsCisJCQkJCQkJCQkJIm9iam5hbWUiLCBmYWxzZSwgTlVMTCk7CisKKwlpZiAoc3RyKQorCXsK KwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHN0cik7CisJCXBmcmVlKHN0cik7CisJfQor fQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHN0cmluZy4gIFRoZSB2YWx1ZSBt dXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIG9mCisgKiB0eXBlIG9iamVjdC4gIEluIHRoZSBsYXR0 ZXIgY2FzZSBpdCBtdXN0IGNvbnRhaW4gYSAiZm10IiBlbGVtZW50IHdoaWNoIHdpbGwKKyAqIGJl IHJlY3Vyc2l2ZWx5IGV4cGFuZGVkOyBhbHNvLCBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zIGFuIGVs ZW1lbnQgInByZXNlbnQiCisgKiBhbmQgaXQgaXMgc2V0IHRvIGZhbHNlLCB0aGUgZXhwYW5zaW9u IGlzIHRoZSBlbXB0eSBzdHJpbmcuCisgKgorICogUmV0dXJucyBmYWxzZSBpZiBubyBhY3R1YWwg ZXhwYW5zaW9uIHdhcyBtYWRlIGR1ZSB0byB0aGUgInByZXNlbnQiIGZsYWcKKyAqIGJlaW5nIHNl dCB0byAiZmFsc2UiLgorICovCitzdGF0aWMgYm9vbAorZXhwYW5kX2pzb252YWxfc3RyaW5nKFN0 cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWlmIChqc29udmFsLT50eXBl ID09IGpidlN0cmluZykKKwl7CisJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oYnVmLCBqc29udmFs LT52YWwuc3RyaW5nLnZhbCwKKwkJCQkJCQkgICBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7CisJ fQorCWVsc2UgaWYgKGpzb252YWwtPnR5cGUgPT0gamJ2QmluYXJ5KQorCXsKKwkJanNvbl90cml2 YWx1ZQlwcmVzZW50OworCisJCXByZXNlbnQgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIo anNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgICJwcmVzZW50Iik7CisJCS8q CisJCSAqIElmICJwcmVzZW50IiBpcyBzZXQgdG8gZmFsc2UsIHRoaXMgZWxlbWVudCBleHBhbmRz IHRvIGVtcHR5OworCQkgKiBvdGhlcndpc2UgKGVpdGhlciB0cnVlIG9yIGFic2VudCksIGZhbGwg dGhyb3VnaCB0byBleHBhbmQgImZtdCIuCisJCSAqLworCQlpZiAocHJlc2VudCA9PSB0dl9mYWxz ZSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlleHBhbmRfZm10X3JlY3Vyc2l2ZShqc29udmFsLT52 YWwuYmluYXJ5LmRhdGEsIGJ1Zik7CisJfQorCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0 dXJuIHRydWU7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgc3RyaW5nIGxp dGVyYWwuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9zdHJsaXQoU3RyaW5nSW5m byBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhciAgICpzdHI7CisJU3RyaW5nSW5m b0RhdGEgZHFkZWxpbTsKKwlzdGF0aWMgY29uc3QgY2hhciBkcXN1ZmZpeGVzW10gPSAiX1hZWlpZ WF8iOworCWludCAgICAgICAgIGRxbmV4dGNoYXIgPSAwOworCisJc3RyID0gcG5zdHJkdXAoanNv bnZhbC0+dmFsLnN0cmluZy52YWwsIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsKKworCS8qIEVh c3kgY2FzZTogaWYgdGhlcmUgYXJlIG5vICcgYW5kIG5vIFwsIGp1c3QgdXNlIGEgc2luZ2xlIHF1 b3RlICovCisJaWYgKHN0cmNocihzdHIsICdcJycpID09IE5VTEwgJiYKKwkJc3RyY2hyKHN0ciwg J1xcJykgPT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJyVzJyIsIHN0cik7 CisJCXBmcmVlKHN0cik7CisJCXJldHVybjsKKwl9CisKKwkvKiBPdGhlcndpc2UgbmVlZCB0byBm aW5kIGEgdXNlZnVsIGRvbGxhci1xdW90ZSBkZWxpbWl0ZXIgKi8KKwlpbml0U3RyaW5nSW5mbygm ZHFkZWxpbSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZHFkZWxpbSwgIiQiKTsKKwl3aGls ZSAoc3Ryc3RyKHN0ciwgZHFkZWxpbS5kYXRhKSAhPSBOVUxMKQorCXsKKwkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoJmRxZGVsaW0sIGRxc3VmZml4ZXNbZHFuZXh0Y2hhcisrXSk7CisJCWRxbmV4dGNo YXIgPSBkcW5leHRjaGFyICUgKHNpemVvZihkcXN1ZmZpeGVzKSAtIDEpOworCX0KKwkvKiBBZGQg dHJhaWxpbmcgJCAqLworCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkcWRlbGltLCAnJCcpOworCisJ LyogQW5kIGZpbmFsbHkgcHJvZHVjZSB0aGUgcXVvdGVkIGxpdGVyYWwgaW50byB0aGUgb3V0cHV0 IFN0cmluZ0luZm8gKi8KKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJXMlcyIsIGRxZGVsaW0u ZGF0YSwgc3RyLCBkcWRlbGltLmRhdGEpOworCXBmcmVlKGRxZGVsaW0uZGF0YSk7CisJcGZyZWUo c3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYW4gaW50ZWdlciBxdWFu dGl0eS4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX251bWJlcihTdHJpbmdJbmZv IGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyICpzdHJkYXR1bTsKKworCXN0cmRh dHVtID0gRGF0dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJpY19vdXQsCisJ CQkJCQkJCQkJCQkgICBOdW1lcmljR2V0RGF0dW0oanNvbnZhbC0+dmFsLm51bWVyaWMpKSk7CisJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHN0cmRhdHVtKTsKK30KKworLyoKKyAqIEV4cGFu ZCBhIGpzb24gdmFsdWUgYXMgYSByb2xlIG5hbWUuICBJZiB0aGUgaXNfcHVibGljIGVsZW1lbnQg aXMgc2V0IHRvCisgKiB0cnVlLCBQVUJMSUMgaXMgZXhwYW5kZWQgKG5vIHF1b3Rlcyk7IG90aGVy d2lzZSwgZXhwYW5kIHRoZSBnaXZlbiByb2xlIG5hbWUsCisgKiBxdW90aW5nIGFzIGFuIGlkZW50 aWZpZXIuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9yb2xlKFN0cmluZ0luZm8g YnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWpzb25fdHJpdmFsdWUJaXNfcHVibGljOwor CisJaXNfcHVibGljID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5i aW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJImlzX3B1YmxpYyIpOworCWlmIChpc19wdWJsaWMgPT0g dHZfdHJ1ZSkKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJQVUJMSUMiKTsKKwllbHNl CisJeworCQljaGFyICpyb2xlbmFtZTsKKworCQlyb2xlbmFtZSA9IGZpbmRfc3RyaW5nX2luX2pz b25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJCSAicm9s ZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJCWlmIChyb2xlbmFtZSkKKwkJeworCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZpZXIocm9sZW5hbWUpKTsKKwkJCXBmcmVl KHJvbGVuYW1lKTsKKwkJfQorCX0KK30KKworLyoKKyAqIEV4cGFuZCBvbmUganNvbiBlbGVtZW50 IGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvIGFjY29yZGluZyB0byB0aGUKKyAqIGNvbnZlcnNp b24gc3BlY2lmaWVyLiAgVGhlIGVsZW1lbnQgdHlwZSBpcyB2YWxpZGF0ZWQsIGFuZCBhbiBlcnJv ciBpcyByYWlzZWQKKyAqIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggd2hhdCB3ZSBleHBlY3QgZm9yIHRo ZSBjb252ZXJzaW9uIHNwZWNpZmllci4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIGFjdHVh bCBleHBhbnNpb24gd2FzIG1hZGUgKGR1ZSB0byB0aGUgInByZXNlbnQiIGZsYWcKKyAqIGJlaW5n IHNldCB0byAiZmFsc2UiIGluIGZvcm1hdHRlZCBzdHJpbmcgZXhwYW5zaW9uKS4KKyAqLworc3Rh dGljIGJvb2wKK2V4cGFuZF9vbmVfanNvbmJfZWxlbWVudChTdHJpbmdJbmZvIGJ1ZiwgY2hhciAq cGFyYW0sIEpzb25iVmFsdWUgKmpzb252YWwsCisJCQkJCQkgY29udlNwZWNpZmllciBzcGVjaWZp ZXIsIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlib29sIHJlc3VsdCA9IHRydWU7CisJRXJyb3JDb250 ZXh0Q2FsbGJhY2sgc3FsZXJyY29udGV4dDsKKworCS8qIElmIHdlIHdlcmUgZ2l2ZW4gYSBmb3Jt YXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0KCkgY29udGV4dCBjYWxsYmFjayAqLworCWlmIChm bXQpCisJeworCQlzcWxlcnJjb250ZXh0LmNhbGxiYWNrID0gZm10c3RyX2Vycm9yX2NhbGxiYWNr OworCQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2b2lkICopIGZtdDsKKwkJc3FsZXJyY29udGV4dC5w cmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSAm c3FsZXJyY29udGV4dDsKKwl9CisKKwlpZiAoIWpzb252YWwpCisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1z ZygiZWxlbWVudCBcIiVzXCIgbm90IGZvdW5kIiwgcGFyYW0pKSk7CisKKwlzd2l0Y2ggKHNwZWNp ZmllcikKKwl7CisJCWNhc2UgU3BlY0lkZW50aWZpZXI6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAh PSBqYnZTdHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBz dHJpbmcgZm9yICUlSSBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpz b252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9pZGVudGlmaWVyKGJ1ZiwganNvbnZh bCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNEb3R0ZWROYW1lOgorCQkJaWYgKGpzb252YWwt PnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVk IEpTT04gb2JqZWN0IGZvciAlJUQgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBh cmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfZG90dGVkbmFtZShidWYs IGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nOgorCQkJaWYgKGpzb252 YWwtPnR5cGUgIT0gamJ2U3RyaW5nICYmCisJCQkJanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkp CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJpbmcgb3Igb2Jq ZWN0IGZvciAlJXMgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29u dmFsLT50eXBlKSkpOworCQkJcmVzdWx0ID0gZXhwYW5kX2pzb252YWxfc3RyaW5nKGJ1ZiwganNv bnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNTdHJpbmdMaXRlcmFsOgorCQkJaWYgKGpz b252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4 cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUwgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJ CQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfc3RybGl0KGJ1 ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNUeXBlbmFtZToKKwkJCWlmIChq c29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJl eHBlY3RlZCBKU09OIG9iamVjdCBmb3IgJSVUIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJ CQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3R5cGVuYW1l KGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNPcGVyYXRvcm5hbWU6CisJ CQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVy cm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUlTyBlbGVtZW50IFwiJXNcIiwgZ290ICVk IiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9v cGVyYXRvcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjTnVtYmVyOgor CQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkg ZXJybXNnKCJleHBlY3RlZCBKU09OIG51bWVyaWMgZm9yICUlbiBlbGVtZW50IFwiJXNcIiwgZ290 ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZh bF9udW1iZXIoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1JvbGU6CisJ CQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVy cm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUlUiBlbGVtZW50IFwiJXNcIiwgZ290ICVk IiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9y b2xlKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKwl9CisKKwlpZiAoZm10KQorCQllcnJvcl9j b250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91czsKKworCXJldHVybiByZXN1bHQ7 Cit9CisKKy8qCisgKiBJdGVyYXRlIG9uIHRoZSBlbGVtZW50cyBvZiBhIEpTT04gYXJyYXksIGV4 cGFuZGluZyBlYWNoIG9uZSBpbnRvIHRoZSBvdXRwdXQKKyAqIFN0cmluZ0luZm8gcGVyIHRoZSBn aXZlbiBjb252ZXJzaW9uIHNwZWNpZmllciwgc2VwYXJhdGVkIGJ5IHRoZSBnaXZlbgorICogc2Vw YXJhdG9yLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb25iX2FycmF5KFN0cmluZ0luZm8g YnVmLCBjaGFyICpwYXJhbSwKKwkJCQkgICBKc29uYlZhbHVlICpqc29uYXJyLCBjaGFyICphcnJh eXNlcCwgY29udlNwZWNpZmllciBzcGVjaWZpZXIsCisJCQkJICAgY29uc3QgY2hhciAqZm10KQor eworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisJSnNvbmJDb250YWluZXIg KmNvbnRhaW5lcjsKKwlKc29uYkl0ZXJhdG9yICAqaXQ7CisJSnNvbmJWYWx1ZQl2OworCWludAkJ CXR5cGU7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCVN0cmluZ0luZm9EYXRhIGFycmF5ZWxlbTsK KworCS8qIElmIHdlIHdlcmUgZ2l2ZW4gYSBmb3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0 KCkgY29udGV4dCBjYWxsYmFjayAqLworCWlmIChmbXQpCisJeworCQlzcWxlcnJjb250ZXh0LmNh bGxiYWNrID0gZm10c3RyX2Vycm9yX2NhbGxiYWNrOworCQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2 b2lkICopIGZtdDsKKwkJc3FsZXJyY29udGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3Rh Y2s7CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmc3FsZXJyY29udGV4dDsKKwl9CisKKwlpZiAo anNvbmFyci0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVu dCBcIiVzXCIgaXMgbm90IGEgSlNPTiBhcnJheSIsIHBhcmFtKSkpOworCisJY29udGFpbmVyID0g anNvbmFyci0+dmFsLmJpbmFyeS5kYXRhOworCWlmICghSnNvbkNvbnRhaW5lcklzQXJyYXkoY29u dGFpbmVyKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3QgYSBK U09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwlpbml0U3RyaW5nSW5mbygmYXJyYXllbGVtKTsKKwor CWl0ID0gSnNvbmJJdGVyYXRvckluaXQoY29udGFpbmVyKTsKKwl3aGlsZSAoKHR5cGUgPSBKc29u Ykl0ZXJhdG9yTmV4dCgmaXQsICZ2LCB0cnVlKSkgIT0gV0pCX0RPTkUpCisJeworCQlpZiAodHlw ZSA9PSBXSkJfRUxFTSkKKwkJeworCQkJcmVzZXRTdHJpbmdJbmZvKCZhcnJheWVsZW0pOworCisJ CQlpZiAoZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KCZhcnJheWVsZW0sIHBhcmFtLCAmdiwgc3Bl Y2lmaWVyLCBOVUxMKSkKKwkJCXsKKwkJCQlpZiAoIWZpcnN0KQorCQkJCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKGJ1ZiwgYXJyYXlzZXApOworCisJCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhi dWYsIGFycmF5ZWxlbS5kYXRhLCBhcnJheWVsZW0ubGVuKTsKKwkJCQlmaXJzdCA9IGZhbHNlOwor CQkJfQorCQl9CisJfQorCisJaWYgKGZtdCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNxbGVy cmNvbnRleHQucHJldmlvdXM7Cit9CisKKy8qCisgKiBXb3JraG9yc2UgZm9yIGRkbF9kZXBhcnNl X2V4cGFuZF9jb21tYW5kLgorICovCitjaGFyICoKK2RkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5n KGNoYXIgKmpzb25fc3RyKQoreworCURhdHVtCQlkOworCUpzb25iCSAgICpqc29uYjsKKwlTdHJp bmdJbmZvIGJ1ZiA9IChTdHJpbmdJbmZvKSBwYWxsb2MwKHNpemVvZihTdHJpbmdJbmZvRGF0YSkp OworCisJaW5pdFN0cmluZ0luZm8oYnVmKTsKKworCWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKGpz b25iX2luLCBQb2ludGVyR2V0RGF0dW0oanNvbl9zdHIpKTsKKwlqc29uYiA9IChKc29uYiAqKSBE YXR1bUdldFBvaW50ZXIoZCk7CisKKwlleHBhbmRfZm10X3JlY3Vyc2l2ZSgmanNvbmItPnJvb3Qs IGJ1Zik7CisKKwlyZXR1cm4gYnVmLT5kYXRhOworfQorCisvKi0tLS0tLQorICogUmV0dXJucyBh IGZvcm1hdHRlZCBzdHJpbmcgZnJvbSBhIEpTT04gb2JqZWN0LgorICoKKyAqIFRoZSBzdGFydGlu ZyBwb2ludCBpcyB0aGUgZWxlbWVudCBuYW1lZCAiZm10IiAod2hpY2ggbXVzdCBiZSBhIHN0cmlu ZykuCisgKiBUaGlzIGZvcm1hdCBzdHJpbmcgbWF5IGNvbnRhaW4gemVybyBvciBtb3JlICUtZXNj YXBlcywgd2hpY2ggY29uc2lzdCBvZiBhbgorICogZWxlbWVudCBuYW1lIGVuY2xvc2VkIGluIHsg fSwgcG9zc2libHkgZm9sbG93ZWQgYnkgYSBjb252ZXJzaW9uIG1vZGlmaWVyLAorICogZm9sbG93 ZWQgYnkgYSBjb252ZXJzaW9uIHNwZWNpZmllci4gIFBvc3NpYmxlIGNvbnZlcnNpb24gc3BlY2lm aWVycyBhcmU6CisgKgorICogJQkJZXhwYW5kIHRvIGEgbGl0ZXJhbCAlLgorICogSQkJZXhwYW5k IGFzIGEgc2luZ2xlLCBub24tcXVhbGlmaWVkIGlkZW50aWZpZXIKKyAqIEQJCWV4cGFuZCBhcyBh IHBvc3NpYmx5LXF1YWxpZmllZCBpZGVudGlmaWVyCisgKiBUCQlleHBhbmQgYXMgYSB0eXBlIG5h bWUKKyAqIE8JCWV4cGFuZCBhcyBhbiBvcGVyYXRvciBuYW1lCisgKiBMCQlleHBhbmQgYXMgYSBz dHJpbmcgbGl0ZXJhbCAocXVvdGUgdXNpbmcgc2luZ2xlIHF1b3RlcykKKyAqIHMJCWV4cGFuZCBh cyBhIHNpbXBsZSBzdHJpbmcgKG5vIHF1b3RpbmcpCisgKiBuCQlleHBhbmQgYXMgYSBzaW1wbGUg bnVtYmVyIChubyBxdW90aW5nKQorICogUgkJZXhwYW5kIGFzIGEgcm9sZSBuYW1lIChwb3NzaWJs eSBxdW90ZWQgbmFtZSwgb3IgUFVCTElDKQorICoKKyAqIFRoZSBlbGVtZW50IG5hbWUgbWF5IGhh dmUgYW4gb3B0aW9uYWwgc2VwYXJhdG9yIHNwZWNpZmljYXRpb24gcHJlY2VkZWQKKyAqIGJ5IGEg Y29sb24uICBJdHMgcHJlc2VuY2UgaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgaXMgZXhwZWN0 ZWQgdG8gYmUKKyAqIGFuIGFycmF5OyB0aGUgc3BlY2lmaWVkIHNlcGFyYXRvciBpcyB1c2VkIHRv IGpvaW4gdGhlIGFycmF5IGVsZW1lbnRzLgorICotLS0tLS0KKyAqLworRGF0dW0KK2RkbF9kZXBh cnNlX2V4cGFuZF9jb21tYW5kKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJdGV4dAkgICAqanNvbiA9 IFBHX0dFVEFSR19URVhUX1AoMCk7CisJY2hhcgkgICAqanNvbl9zdHI7CisKKwlqc29uX3N0ciA9 IHRleHRfdG9fY3N0cmluZyhqc29uKTsKKworCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190 ZXh0KGRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGpzb25fc3RyKSkpOworfQorCisvKgorICog RXJyb3IgY29udGV4dCBjYWxsYmFjayBmb3IgSlNPTiBmb3JtYXQgc3RyaW5nIGV4cGFuc2lvbi4K KyAqCisgKiBYWFg6IGluZGljYXRlIHdoaWNoIGVsZW1lbnQgd2UncmUgZXhwYW5kaW5nLCBpZiBh cHBsaWNhYmxlLgorICovCitzdGF0aWMgdm9pZAorZm10c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQg KmFyZykKK3sKKwllcnJjb250ZXh0KCJ3aGlsZSBleHBhbmRpbmcgZm9ybWF0IHN0cmluZyBcIiVz XCIiLCAoY2hhciAqKSBhcmcpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv c2VxdWVuY2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKaW5kZXggOTljOWY5 MWNiYS4uNDIwNWRkYTIyMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVu Y2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCkBAIC0xNzA4LDYgKzE3 MDgsMzkgQEAgcHJvY2Vzc19vd25lZF9ieShSZWxhdGlvbiBzZXFyZWwsIExpc3QgKm93bmVkX2J5 LCBib29sIGZvcl9pZGVudGl0eSkKIAkJcmVsYXRpb25fY2xvc2UodGFibGVyZWwsIE5vTG9jayk7 CiB9CiAKKy8qCisgKiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycywgZGV0YWlsZWQKKyAqLwor Rm9ybV9wZ19zZXF1ZW5jZV9kYXRhCitnZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5jZUlk KQoreworCUJ1ZmZlciAgICAgIGJ1ZjsKKwlTZXFUYWJsZSAgICBlbG07CisJUmVsYXRpb24gICAg c2VxcmVsOworCUhlYXBUdXBsZURhdGEgc2VxdHVwbGU7CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRh IHNlcTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgcmV0U2VxOworCisJLyogT3BlbiBhbmQgQWNj ZXNzU2hhcmVMb2NrIHNlcXVlbmNlICovCisJaW5pdF9zZXF1ZW5jZShzZXF1ZW5jZUlkLCAmZWxt LCAmc2VxcmVsKTsKKworCWlmIChwZ19jbGFzc19hY2xjaGVjayhzZXF1ZW5jZUlkLCBHZXRVc2Vy SWQoKSwKKwkJCUFDTF9TRUxFQ1QgfCBBQ0xfVVBEQVRFIHwgQUNMX1VTQUdFKSAhPSBBQ0xDSEVD S19PSykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lF TlRfUFJJVklMRUdFKSwKKwkJCQkJIGVycm1zZygicGVybWlzc2lvbiBkZW5pZWQgZm9yIHNlcXVl bmNlICVzIiwKKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzZXFyZWwpKSkpOworCisJ c2VxID0gcmVhZF9zZXFfdHVwbGUoc2VxcmVsLCAmYnVmLCAmc2VxdHVwbGUpOworCXJldFNlcSA9 IHBhbGxvYyhzaXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJbWVtY3B5KHJl dFNlcSwgc2VxLCBzaXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJVW5sb2Nr UmVsZWFzZUJ1ZmZlcihidWYpOworCXJlbGF0aW9uX2Nsb3NlKHNlcXJlbCwgTm9Mb2NrKTsKKwor CXJldHVybiByZXRTZXE7Cit9CiAKIC8qCiAgKiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycyBp biBhIGxpc3Qgb2YgdGhlIGZvcm0gY3JlYXRlZCBieSB0aGUgcGFyc2VyLgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvZm9ybWF0X3R5cGUuYwppbmRleCAyOTE4ZmRiZmI2Li5mNjRhNzIxM2I3IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvZm9ybWF0X3R5cGUuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgInV0aWxz L251bWVyaWMuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCi1zdGF0aWMgY2hhciAq cHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9k b3V0KTsKIAogCiAvKgpAQCAtMzYzLDcgKzM2Miw3IEBAIGZvcm1hdF90eXBlX3dpdGhfdHlwZW1v ZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpCiAvKgogICogQWRkIHR5cG1vZCBkZWNvcmF0 aW9uIHRvIHRoZSBiYXNpYyB0eXBlIG5hbWUKICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBw cmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0eXBtb2Rv dXQpCiB7CiAJY2hhcgkgICAqcmVzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3JlZ3Byb2MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKaW5kZXggNmQ0YzFj MjdhNS4uNmIyMzZlNWYxOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3By b2MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCkBAIC00NCw2ICs0NCw4 IEBACiBzdGF0aWMgdm9pZCBwYXJzZU5hbWVBbmRBcmdUeXBlcyhjb25zdCBjaGFyICpzdHJpbmcs IGJvb2wgYWxsb3dOb25lLAogCQkJCQkJCQkgTGlzdCAqKm5hbWVzLCBpbnQgKm5hcmdzLCBPaWQg KmFyZ3R5cGVzKTsKIAorc3RhdGljIHZvaWQgZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFs KEZvcm1fcGdfcHJvYyBwcm9jZm9ybSwKKwkJCQkJCQkJCQkgICBTdHJpbmdJbmZvIGJ1ZiwgYm9v bCBmb3JjZV9xdWFsaWZ5KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkgVVNFUiBJL08g Uk9VVElORVMJCQkJCQkJCQkJCQkJCSAqCkBAIC0zMzEsNiArMzMzLDI5IEBAIGZvcm1hdF9wcm9j ZWR1cmVfcXVhbGlmaWVkKE9pZCBwcm9jZWR1cmVfb2lkKQogCXJldHVybiBmb3JtYXRfcHJvY2Vk dXJlX2V4dGVuZGVkKHByb2NlZHVyZV9vaWQsIEZPUk1BVF9QUk9DX0ZPUkNFX1FVQUxJRlkpOwog fQogCisvKgorICogZm9ybWF0X3Byb2NlZHVyZV9hcmdzICAgLSBjb252ZXJ0cyBwcm9jIE9JRCB0 byAiKGFyZ3MpIgorICovCitjaGFyICoKK2Zvcm1hdF9wcm9jZWR1cmVfYXJncyhPaWQgcHJvY2Vk dXJlX29pZCwgYm9vbCBmb3JjZV9xdWFsaWZ5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlI ZWFwVHVwbGUgICBwcm9jdHVwOworCUZvcm1fcGdfcHJvYyBwcm9jZm9ybTsKKworCXByb2N0dXAg PSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jZWR1cmVfb2lk KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2N0dXApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvY2VkdXJlX29pZCk7CisJcHJv Y2Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7CisKKwlpbml0U3RyaW5n SW5mbygmYnVmKTsKKwlmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwocHJvY2Zvcm0sICZi dWYsIGZvcmNlX3F1YWxpZnkpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2N0dXApOworCisJcmV0 dXJuIGJ1Zi5kYXRhOworfQorCiAvKgogICogZm9ybWF0X3Byb2NlZHVyZV9leHRlbmRlZCAtIGNv bnZlcnRzIHByb2NlZHVyZSBPSUQgdG8gInByb19uYW1lKGFyZ3MpIgogICoKQEAgLTIwNjAsMyAr MjA4NSwzMCBAQCBwYXJzZU5hbWVBbmRBcmdUeXBlcyhjb25zdCBjaGFyICpzdHJpbmcsIGJvb2wg YWxsb3dOb25lLCBMaXN0ICoqbmFtZXMsCiAKIAlwZnJlZShyYXduYW1lKTsKIH0KKworLyoKKyAq IEFwcGVuZCB0aGUgcGFyZW50aGlzZWQgYXJndW1lbnRzIG9mIHRoZSBnaXZlbiBwZ19wcm9jIHJv dyBpbnRvIHRoZSBvdXRwdXQKKyAqIGJ1ZmZlci4gIGZvcmNlX3F1YWxpZnkgaW5kaWNhdGVzIHdo ZXRoZXIgdG8gc2NoZW1hLXF1YWxpZnkgdHlwZSBuYW1lcworICogcmVnYXJkbGVzcyBvZiB2aXNp YmlsaXR5LgorICovCitzdGF0aWMgdm9pZAorZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFs KEZvcm1fcGdfcHJvYyBwcm9jZm9ybSwgU3RyaW5nSW5mbyBidWYsCisJCQkJCQkJICAgYm9vbCBm b3JjZV9xdWFsaWZ5KQoreworCWludAkJCWk7CisJaW50CQkJbmFyZ3MgPSBwcm9jZm9ybS0+cHJv bmFyZ3M7CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcoJyk7CisJZm9yIChpID0gMDsg aSA8IG5hcmdzOyBpKyspCisJeworCQlPaWQJCQl0aGlzYXJndHlwZSA9IHByb2Nmb3JtLT5wcm9h cmd0eXBlcy52YWx1ZXNbaV07CisKKwkJaWYgKGkgPiAwKQorCQkJYXBwZW5kU3RyaW5nSW5mb0No YXIoYnVmLCAnLCcpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwKKwkJCQkJCQkgICBm b3JjZV9xdWFsaWZ5ID8KKwkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQodGhpc2Fy Z3R5cGUpIDoKKwkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZSh0aGlzYXJndHlwZSkpOworCX0KKwlh cHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxz LmMKaW5kZXggODU1ZDQ4MzcyYS4uMzBiOGQ5MDc2NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRp bHMuYwpAQCAtMzU4LDcgKzM1OCw2IEBAIHN0YXRpYyBpbnQJcHJpbnRfZnVuY3Rpb25fYXJndW1l bnRzKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCwKIAkJCQkJCQkJCSBib29sIHBy aW50X3RhYmxlX2FyZ3MsIGJvb2wgcHJpbnRfZGVmYXVsdHMpOwogc3RhdGljIHZvaWQgcHJpbnRf ZnVuY3Rpb25fcmV0dHlwZShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApOwogc3Rh dGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fdHJmdHlwZXMoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBs ZSBwcm9jdHVwKTsKLXN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5m byBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0YXRpYyB2b2lkIHNldF9ydGFibGVfbmFtZXMo ZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIExpc3QgKnBhcmVudF9uYW1lc3BhY2VzLAogCQkJCQkJ CSBCaXRtYXBzZXQgKnJlbHNfdXNlZCk7CiBzdGF0aWMgdm9pZCBzZXRfZGVwYXJzZV9mb3JfcXVl cnkoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIFF1ZXJ5ICpxdWVyeSwKQEAgLTQ4MiwyMiArNDgx LDE1IEBAIHN0YXRpYyB2b2lkIGdldF9mcm9tX2NsYXVzZV9jb2xkZWZsaXN0KFJhbmdlVGJsRnVu Y3Rpb24gKnJ0ZnVuYywKIAkJCQkJCQkJCSAgIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBz dGF0aWMgdm9pZCBnZXRfdGFibGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNh bXBsZSwKIAkJCQkJCQkJZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKLXN0YXRpYyB2b2lkIGdl dF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUsCi0JCQkJCQkJ IFN0cmluZ0luZm8gYnVmKTsKIHN0YXRpYyBOb2RlICpwcm9jZXNzSW5kaXJlY3Rpb24oTm9kZSAq bm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIHByaW50U3Vic2Ny aXB0cyhTdWJzY3JpcHRpbmdSZWYgKnNic3JlZiwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsK IHN0YXRpYyBjaGFyICpnZXRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpOwogc3RhdGljIGNoYXIg KmdlbmVyYXRlX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkLCBMaXN0ICpuYW1lc3BhY2VzKTsKIHN0 YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpOwot c3RhdGljIGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwgaW50IG5hcmdz LAotCQkJCQkJCQkJTGlzdCAqYXJnbmFtZXMsIE9pZCAqYXJndHlwZXMsCi0JCQkJCQkJCQlib29s IGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCi0JCQkJCQkJCQlQYXJzZUV4cHJL aW5kIHNwZWNpYWxfZXhwcmtpbmQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX29wZXJhdG9yX25h bWUoT2lkIG9wZXJpZCwgT2lkIGFyZzEsIE9pZCBhcmcyKTsKIHN0YXRpYyB2b2lkIGFkZF9jYXN0 X3RvKFN0cmluZ0luZm8gYnVmLCBPaWQgdHlwaWQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX3F1 YWxpZmllZF90eXBlX25hbWUoT2lkIHR5cGlkKTsKIHN0YXRpYyB0ZXh0ICpzdHJpbmdfdG9fdGV4 dChjaGFyICpzdHIpOwotc3RhdGljIGNoYXIgKmZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQp Owogc3RhdGljIHZvaWQgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9w dGlvbnMpOwogCiAjZGVmaW5lIG9ubHlfbWFya2VyKHJ0ZSkgICgocnRlKS0+aW5oID8gIiIgOiAi T05MWSAiKQpAQCAtNTQ1LDYgKzUzNyw3NyBAQCBwZ19nZXRfcnVsZWRlZl9leHQoUEdfRlVOQ1RJ T05fQVJHUykKIAlQR19SRVRVUk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHJlcykpOwogfQogCisv KgorICogR2l2ZW4gYSBwYWlyIG9mIERhdHVtIGNvcnJlc3BvbmRpbmcgdG8gYSBydWxlJ3MgcGdf cmV3cml0ZS5ldl9xdWFsIGFuZAorICogZXZfYWN0aW9uIGNvbHVtbnMsIHJldHVybiB0aGVpciB0 ZXh0IHJlcHJlc2VudGF0aW9uOyBldl9xdWFsIGFzIGEgc2luZ2xlCisgKiBzdHJpbmcgaW4gd2hl cmVDbGF1c2UgYW5kIGV2X2FjdGlvbiBhcyBhIExpc3Qgb2Ygc3RyaW5ncyAod2hpY2ggbWlnaHQg YmUKKyAqIE5JTCwgc2lnbmFsbGluZyBOT1RISU5HKSBpbiBhY3Rpb25zLgorICovCit2b2lkCitw Z19nZXRfcnVsZWRlZl9kZXRhaWxlZChEYXR1bSBldl9xdWFsLCBEYXR1bSBldl9hY3Rpb24sCisJ CQkJCQljaGFyICoqd2hlcmVDbGF1c2UsIExpc3QgKiphY3Rpb25zKQoreworCWludCBwcmV0dHlG bGFncyA9IDA7CisJY2hhciAqcXVhbHN0ciA9IFRleHREYXR1bUdldENTdHJpbmcoZXZfcXVhbCk7 CisJY2hhciAqYWN0aW9uc3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhldl9hY3Rpb24pOworCUxp c3QgKmFjdGlvbk5vZGVMaXN0ID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGFjdGlvbnN0cik7CisJ U3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJaWYgKHN0cmxl bihxdWFsc3RyKSA+IDAgJiYgc3RyY21wKHF1YWxzdHIsICI8PiIpICE9IDApCisJeworCQlOb2Rl CSAgICpxdWFsOworCQlRdWVyeQkgICAqcXVlcnk7CisJCWRlcGFyc2VfY29udGV4dCBjb250ZXh0 OworCQlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOworCisJCXF1YWwgPSBzdHJpbmdUb05vZGUocXVh bHN0cik7CisKKwkJcXVlcnkgPSAoUXVlcnkgKikgbGluaXRpYWwoYWN0aW9uTm9kZUxpc3QpOwor CQlxdWVyeSA9IGdldEluc2VydFNlbGVjdFF1ZXJ5KHF1ZXJ5LCBOVUxMKTsKKworCQlBY3F1aXJl UmV3cml0ZUxvY2tzKHF1ZXJ5LCBmYWxzZSwgZmFsc2UpOworCisJCWNvbnRleHQuYnVmID0gJmJ1 ZjsKKwkJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7CisJCWNvbnRleHQu d2luZG93Q2xhdXNlID0gTklMOworCQljb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOworCQljb250 ZXh0LnZhcnByZWZpeCA9IChsaXN0X2xlbmd0aChxdWVyeS0+cnRhYmxlKSAhPSAxKTsKKwkJY29u dGV4dC5wcmV0dHlGbGFncyA9IHByZXR0eUZsYWdzOworCQljb250ZXh0LndyYXBDb2x1bW4gPSBX UkFQX0NPTFVNTl9ERUZBVUxUOworCQljb250ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5U X1NURDsKKworCQlzZXRfZGVwYXJzZV9mb3JfcXVlcnkoJmRwbnMsIHF1ZXJ5LCBOSUwpOworCisJ CWdldF9ydWxlX2V4cHIocXVhbCwgJmNvbnRleHQsIGZhbHNlKTsKKworCQkqd2hlcmVDbGF1c2Ug PSBwc3RyZHVwKGJ1Zi5kYXRhKTsKKwl9CisJZWxzZQorCQkqd2hlcmVDbGF1c2UgPSBOVUxMOwor CisJaWYgKGxpc3RfbGVuZ3RoKGFjdGlvbk5vZGVMaXN0KSA9PSAwKQorCQkqYWN0aW9ucyA9IE5J TDsKKwllbHNlCisJeworCQlMaXN0Q2VsbCAqY2VsbDsKKwkJTGlzdAkqb3V0cHV0ID0gTklMOwor CisJCWZvcmVhY2goY2VsbCwgYWN0aW9uTm9kZUxpc3QpCisJCXsKKwkJCVF1ZXJ5CSpxdWVyeSA9 IChRdWVyeSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCWlmIChxdWVyeS0+Y29tbWFuZFR5cGUgPT0g Q01EX05PVEhJTkcpCisJCQkJY29udGludWU7CisKKwkJCXJlc2V0U3RyaW5nSW5mbygmYnVmKTsK KwkJCWdldF9xdWVyeV9kZWYocXVlcnksICZidWYsIE5JTCwgTlVMTCwgdHJ1ZSwKKwkJCQkJCSAg cHJldHR5RmxhZ3MsIFdSQVBfQ09MVU1OX0RFRkFVTFQsIDApOworCQkJb3V0cHV0ID0gbGFwcGVu ZChvdXRwdXQsIHBzdHJkdXAoYnVmLmRhdGEpKTsKKwkJfQorCQkqYWN0aW9ucyA9IG91dHB1dDsK Kwl9Cit9CiAKIHN0YXRpYyBjaGFyICoKIHBnX2dldF9ydWxlZGVmX3dvcmtlcihPaWQgcnVsZW9p ZCwgaW50IHByZXR0eUZsYWdzKQpAQCAtMTAxNSw2NSArMTA3OCwxMiBAQCBwZ19nZXRfdHJpZ2dl cmRlZl93b3JrZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJaWYgKCFpc251bGwpCiAJewog CQlOb2RlCSAgICpxdWFsOwotCQljaGFyCQlyZWxraW5kOwotCQlkZXBhcnNlX2NvbnRleHQgY29u dGV4dDsKLQkJZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKLQkJUmFuZ2VUYmxFbnRyeSAqb2xkcnRl OwotCQlSYW5nZVRibEVudHJ5ICpuZXdydGU7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm YnVmLCAiV0hFTiAoIik7CisJCWNoYXIgICAgICAgKnF1YWxzdHI7CiAKIAkJcXVhbCA9IHN0cmlu Z1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJCXF1YWxzdHIgPSBwZ19nZXRf dHJpZ2dlcl93aGVuY2xhdXNlKHRyaWdyZWMsIHF1YWwsIHByZXR0eSk7CiAKLQkJcmVsa2luZCA9 IGdldF9yZWxfcmVsa2luZCh0cmlncmVjLT50Z3JlbGlkKTsKLQotCQkvKiBCdWlsZCBtaW5pbWFs IE9MRCBhbmQgTkVXIFJURXMgZm9yIHRoZSByZWwgKi8KLQkJb2xkcnRlID0gbWFrZU5vZGUoUmFu Z2VUYmxFbnRyeSk7Ci0JCW9sZHJ0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKLQkJb2xkcnRl LT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7Ci0JCW9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7 Ci0JCW9sZHJ0ZS0+cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7Ci0JCW9sZHJ0ZS0+YWxp YXMgPSBtYWtlQWxpYXMoIm9sZCIsIE5JTCk7Ci0JCW9sZHJ0ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxp YXM7Ci0JCW9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOwotCQlvbGRydGUtPmluaCA9IGZhbHNlOwot CQlvbGRydGUtPmluRnJvbUNsID0gdHJ1ZTsKLQotCQluZXdydGUgPSBtYWtlTm9kZShSYW5nZVRi bEVudHJ5KTsKLQkJbmV3cnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOwotCQluZXdydGUtPnJl bGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKLQkJbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsKLQkJ bmV3cnRlLT5yZWxsb2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKLQkJbmV3cnRlLT5hbGlhcyA9 IG1ha2VBbGlhcygibmV3IiwgTklMKTsKLQkJbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5hbGlhczsK LQkJbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7Ci0JCW5ld3J0ZS0+aW5oID0gZmFsc2U7Ci0JCW5l d3J0ZS0+aW5Gcm9tQ2wgPSB0cnVlOwotCi0JCS8qIEJ1aWxkIHR3by1lbGVtZW50IHJ0YWJsZSAq LwotCQltZW1zZXQoJmRwbnMsIDAsIHNpemVvZihkcG5zKSk7Ci0JCWRwbnMucnRhYmxlID0gbGlz dF9tYWtlMihvbGRydGUsIG5ld3J0ZSk7Ci0JCWRwbnMuc3VicGxhbnMgPSBOSUw7Ci0JCWRwbnMu Y3RlcyA9IE5JTDsKLQkJZHBucy5hcHBlbmRyZWxzID0gTlVMTDsKLQkJc2V0X3J0YWJsZV9uYW1l cygmZHBucywgTklMLCBOVUxMKTsKLQkJc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRwbnMpOwot Ci0JCS8qIFNldCB1cCBjb250ZXh0IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICovCi0J CWNvbnRleHQuYnVmID0gJmJ1ZjsKLQkJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgm ZHBucyk7Ci0JCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOwotCQljb250ZXh0LndpbmRvd1RM aXN0ID0gTklMOwotCQljb250ZXh0LnZhcnByZWZpeCA9IHRydWU7Ci0JCWNvbnRleHQucHJldHR5 RmxhZ3MgPSBHRVRfUFJFVFRZX0ZMQUdTKHByZXR0eSk7Ci0JCWNvbnRleHQud3JhcENvbHVtbiA9 IFdSQVBfQ09MVU1OX0RFRkFVTFQ7Ci0JCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRF TlRfU1REOwotCQljb250ZXh0LnNwZWNpYWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRfTk9ORTsKLQkJ Y29udGV4dC5hcHBlbmRwYXJlbnRzID0gTlVMTDsKLQotCQlnZXRfcnVsZV9leHByKHF1YWwsICZj b250ZXh0LCBmYWxzZSk7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAiKSAiKTsK KwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiV0hFTiAoJXMpICIsIHF1YWxzdHIpOwogCX0KIAog CWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIkVYRUNVVEUgRlVOQ1RJT04gJXMoIiwKQEAgLTExMTQs NiArMTEyNCw2NCBAQCBwZ19nZXRfdHJpZ2dlcmRlZl93b3JrZXIoT2lkIHRyaWdpZCwgYm9vbCBw cmV0dHkpCiAJcmV0dXJuIGJ1Zi5kYXRhOwogfQogCitjaGFyICoKK3BnX2dldF90cmlnZ2VyX3do ZW5jbGF1c2UoRm9ybV9wZ190cmlnZ2VyIHRyaWdyZWMsIE5vZGUgKndoZW5DbGF1c2UsIGJvb2wg cHJldHR5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwljaGFyICAgICAgICByZWxraW5kOwor CWRlcGFyc2VfY29udGV4dCBjb250ZXh0OworCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7CisJUmFu Z2VUYmxFbnRyeSAqb2xkcnRlOworCVJhbmdlVGJsRW50cnkgKm5ld3J0ZTsKKworICAgaW5pdFN0 cmluZ0luZm8oJmJ1Zik7CisKKyAgIHJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQodHJpZ3JlYy0+ dGdyZWxpZCk7CisKKyAgIC8qIEJ1aWxkIG1pbmltYWwgT0xEIGFuZCBORVcgUlRFcyBmb3IgdGhl IHJlbCAqLworICAgb2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7CisgICBvbGRydGUt PnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047CisgICBvbGRydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdy ZWxpZDsKKyAgIG9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7CisgICBvbGRydGUtPmFsaWFzID0g bWFrZUFsaWFzKCJvbGQiLCBOSUwpOworICAgb2xkcnRlLT5lcmVmID0gb2xkcnRlLT5hbGlhczsK KyAgIG9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOworICAgb2xkcnRlLT5pbmggPSBmYWxzZTsKKyAg IG9sZHJ0ZS0+aW5Gcm9tQ2wgPSB0cnVlOworCisgICBuZXdydGUgPSBtYWtlTm9kZShSYW5nZVRi bEVudHJ5KTsKKyAgIG5ld3J0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKKyAgIG5ld3J0ZS0+ cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOworICAgbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsK KyAgIG5ld3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm5ldyIsIE5JTCk7CisgICBuZXdydGUtPmVy ZWYgPSBuZXdydGUtPmFsaWFzOworICAgbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7CisgICBuZXdy dGUtPmluaCA9IGZhbHNlOworICAgbmV3cnRlLT5pbkZyb21DbCA9IHRydWU7CisKKyAgIC8qIEJ1 aWxkIHR3by1lbGVtZW50IHJ0YWJsZSAqLworICAgbWVtc2V0KCZkcG5zLCAwLCBzaXplb2YoZHBu cykpOworICAgZHBucy5ydGFibGUgPSBsaXN0X21ha2UyKG9sZHJ0ZSwgbmV3cnRlKTsKKyAgIGRw bnMuY3RlcyA9IE5JTDsKKyAgIHNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwgTlVMTCk7Cisg ICBzZXRfc2ltcGxlX2NvbHVtbl9uYW1lcygmZHBucyk7CisKKyAgIC8qIFNldCB1cCBjb250ZXh0 IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICovCisgICBjb250ZXh0LmJ1ZiA9ICZidWY7 CisgICBjb250ZXh0Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZkcG5zKTsKKyAgIGNvbnRleHQu d2luZG93Q2xhdXNlID0gTklMOworICAgY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKKyAgIGNv bnRleHQudmFycHJlZml4ID0gdHJ1ZTsKKyAgIGNvbnRleHQucHJldHR5RmxhZ3MgPSBwcmV0dHkg PyBQUkVUVFlGTEFHX1BBUkVOIHwgUFJFVFRZRkxBR19JTkRFTlQgOiBQUkVUVFlGTEFHX0lOREVO VDsKKyAgIGNvbnRleHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7CisgICBjb250 ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKKyAgIGNvbnRleHQuc3BlY2lhbF9l eHBya2luZCA9IEVYUFJfS0lORF9OT05FOworCisgICBnZXRfcnVsZV9leHByKHdoZW5DbGF1c2Us ICZjb250ZXh0LCBmYWxzZSk7CisKKyAgIHJldHVybiBidWYuZGF0YTsKK30KKwogLyogLS0tLS0t LS0tLQogICogcGdfZ2V0X2luZGV4ZGVmCQkJLSBHZXQgdGhlIGRlZmluaXRpb24gb2YgYW4gaW5k ZXgKICAqCkBAIC0xODgwLDYgKzE5NDgsMTMgQEAgcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhP aWQgcmVsaWQsIGJvb2wgcHJldHR5KQogCXJldHVybiBwZ19nZXRfcGFydGtleWRlZl93b3JrZXIo cmVsaWQsIHByZXR0eUZsYWdzLCB0cnVlLCBmYWxzZSk7CiB9CiAKKy8qIEludGVybmFsIHZlcnNp b24gdGhhdCByZXBvcnRzIHRoZSBmdWxsIHBhcnRpdGlvbiBrZXkgZGVmaW5pdGlvbiAqLworY2hh ciAqCitwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUoT2lkIHJlbGlkKQoreworCXJldHVybiBwZ19n ZXRfcGFydGtleWRlZl93b3JrZXIocmVsaWQsIDAsIGZhbHNlLCBmYWxzZSk7Cit9CisKIC8qCiAg KiBJbnRlcm5hbCB3b3JraG9yc2UgdG8gZGVjb21waWxlIGEgcGFydGl0aW9uIGtleSBkZWZpbml0 aW9uLgogICovCkBAIC0yMTMxLDYgKzIyMDYsMTUgQEAgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfZXh0 KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChyZXMp KTsKIH0KIAorLyoKKyAqIEludGVybmFsIHZlcnNpb24gdGhhdCByZXR1cm5zIGRlZmluaXRpb24g b2YgYSBDT05TVFJBSU5UIGNvbW1hbmQKKyAqLworY2hhciAqCitwZ19nZXRfY29uc3RyYWludGRl Zl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKQoreworCXJldHVybiBwZ19nZXRfY29u c3RyYWludGRlZl93b3JrZXIoY29uc3RyYWludElkLCBmYWxzZSwgMCwgZmFsc2UpOworfQorCiAv KgogICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgYSBmdWxsIEFMVEVSIFRBQkxFIC4u LiBBREQgQ09OU1RSQUlOVCBjb21tYW5kCiAgKi8KQEAgLTM1MDEsNyArMzU4NSw3IEBAIHBnX2dl dF9mdW5jdGlvbl9hcmdfZGVmYXVsdChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9URVhU X1Aoc3RyaW5nX3RvX3RleHQoc3RyKSk7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBwcmludF9m dW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCkKIHsKIAlp bnQJCQludW1hcmdzOwpAQCAtMTEzODQsNyArMTE0NjgsNyBAQCBnZXRfdGFibGVzYW1wbGVfZGVm KFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBsZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0 KQogICogYWN0dWFsX2RhdGF0eXBlLiAgKElmIHlvdSBkb24ndCB3YW50IHRoaXMgYmVoYXZpb3Is IGp1c3QgcGFzcwogICogSW52YWxpZE9pZCBmb3IgYWN0dWFsX2RhdGF0eXBlLikKICAqLwotc3Rh dGljIHZvaWQKK3ZvaWQKIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxf ZGF0YXR5cGUsCiAJCQkJIFN0cmluZ0luZm8gYnVmKQogewpAQCAtMTE3NzgsNyArMTE4NjIsNyBA QCBnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpCiAgKgogICogVGhl IHJlc3VsdCBpbmNsdWRlcyBhbGwgbmVjZXNzYXJ5IHF1b3RpbmcgYW5kIHNjaGVtYS1wcmVmaXhp bmcuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShP aWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAogCQkJ CQkgICBib29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCiAJCQkJCSAgIFBh cnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCkKQEAgLTEyMTY0LDcgKzEyMjQ4LDcgQEAgZ2V0 X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMpCiAvKgogICogR2Vu ZXJhdGUgYSBDIHN0cmluZyByZXByZXNlbnRpbmcgYSByZWxhdGlvbidzIHJlbG9wdGlvbnMsIG9y IE5VTEwgaWYgbm9uZS4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBmbGF0dGVuX3JlbG9w dGlvbnMoT2lkIHJlbGlkKQogewogCWNoYXIJICAgKnJlc3VsdCA9IE5VTEw7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdAppbmRleCA2OGJiMDMyZDNlLi4yYzg3MTA2ZWVmIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKQEAgLTExODIzLDQgKzExODIzLDEwIEBACiAgIHByb3JldHR5cGUgPT4gJ2J5dGVh JywgcHJvYXJndHlwZXMgPT4gJ3BnX2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnknLAogICBwcm9z cmMgPT4gJ2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnlfc2VuZCcgfSwKIAoreyBvaWQgPT4gJzQ2 NDInLCBkZXNjciA9PiAnZGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgaW50byBqc29uIGZvcm1hdCBz dHJpbmcnLAorICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV90b19qc29uJywgcHJvcmV0dHlwZSA9 PiAndGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ICdwZ19kZGxfY29tbWFuZCcsIHByb3NyYyA9PiAn ZGRsX2RlcGFyc2VfdG9fanNvbicgfSwKK3sgb2lkID0+ICc0NjQzJywgZGVzY3IgPT4gJ2V4cGFu ZCBqc29uIGZvcm1hdCBEREwgdG8gYSBwbGFpbiBEREwgY29tbWFuZCcsCisgIHByb25hbWUgPT4g J2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHBy b2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFu ZCcgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmggYi9z cmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCmluZGV4IGIzYjA0Y2NmYTkuLmMyYjFjYTMy ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKKysrIGIvc3Jj L2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaApAQCAtNTQsNiArNTQsNyBAQCB0eXBlZGVmIHN0 cnVjdCB4bF9zZXFfcmVjCiBleHRlcm4gaW50NjQgbmV4dHZhbF9pbnRlcm5hbChPaWQgcmVsaWQs IGJvb2wgY2hlY2tfcGVybWlzc2lvbnMpOwogZXh0ZXJuIERhdHVtIG5leHR2YWwoUEdfRlVOQ1RJ T05fQVJHUyk7CiBleHRlcm4gTGlzdCAqc2VxdWVuY2Vfb3B0aW9ucyhPaWQgcmVsaWQpOworZXh0 ZXJuIEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBnZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5j ZUlkKTsKIAogZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lU2VxdWVuY2UoUGFyc2VTdGF0ZSAq cHN0YXRlLCBDcmVhdGVTZXFTdG10ICpzZXEpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJT ZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2VxU3RtdCAqc3RtdCk7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggYi9zcmMvaW5jbHVkZS90Y29wL2Rk bF9kZXBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYmRmZGY0 N2UyZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaApA QCAtMCwwICsxLDIzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJzZS5o CisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJl Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRl L3Rjb3AvZGRsX2RlcGFyc2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVm IERETF9ERVBBUlNFX0gKKyNkZWZpbmUgRERMX0RFUEFSU0VfSAorCisjaW5jbHVkZSAidGNvcC9k ZXBhcnNlX3V0aWxpdHkuaCIKKworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9jb21tYW5k KENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOworZXh0ZXJuIGNoYXIg KmRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKK2V4dGVybiBjaGFyICpk ZXBhcnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAq b2JqZWN0dHlwZSwKKwkJCQkJCQkJICBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpOworCisKKyNlbmRp ZgkJLyogRERMX0RFUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBh cnNlX3V0aWxpdHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKaW5kZXgg OTRkZTEzZDk5MC4uYjUzMjk0YmY1NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBh cnNlX3V0aWxpdHkuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCkBA IC02Miw2ICs2Miw3IEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJ T2lkCQkJb2JqZWN0SWQ7CiAJCQlPaWQJCQljbGFzc0lkOworCQkJYm9vbAkJcmV3cml0ZTsKIAkJ CUxpc3QJICAgKnN1YmNtZHM7CiAJCX0JCQlhbHRlclRhYmxlOwogCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNo a19pbnRlcm5hbC5oCmluZGV4IDM2MTI4NGQ4ZWIuLjRlMDIwZWY0YWUgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L2FjbGNoa19pbnRlcm5hbC5oCkBAIC0zOSw2ICszOSw3IEBAIHR5cGVkZWYgc3RydWN0CiAJTGlz dAkgICAqZ3JhbnRlZXM7CiAJYm9vbAkJZ3JhbnRfb3B0aW9uOwogCURyb3BCZWhhdmlvciBiZWhh dmlvcjsKKwlPaWQJCQlncmFudG9yX3VpZDsKIH0gSW50ZXJuYWxHcmFudDsKIAogCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVp bHRpbnMuaAppbmRleCA4MTYzMWYxNjQ1Li43MTUwZmFiZDI0IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS91dGlscy9idWlsdGlucy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgK QEAgLTExNCwxMCArMTE0LDEyIEBAIGV4dGVybiBEYXR1bSBudW1lcmljX2Zsb2F0OF9ub19vdmVy ZmxvdyhQR19GVU5DVElPTl9BUkdTKTsKICNkZWZpbmUgRk9STUFUX1RZUEVfRk9SQ0VfUVVBTElG WQkweDA0CS8qIGZvcmNlIHF1YWxpZmljYXRpb24gb2YgdHlwZSAqLwogI2RlZmluZSBGT1JNQVRf VFlQRV9JTlZBTElEX0FTX05VTEwJMHgwOAkvKiBOVUxMIGlmIHVuZGVmaW5lZCAqLwogZXh0ZXJu IGNoYXIgKmZvcm1hdF90eXBlX2V4dGVuZGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwg Yml0czE2IGZsYWdzKTsKK2V4dGVybiBjaGFyICpmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoT2lkIHBy b2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSk7CiAKIGV4dGVybiBjaGFyICpmb3JtYXRf dHlwZV9iZShPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2JlX3F1YWxp ZmllZChPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX3dpdGhfdHlwZW1v ZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOworZXh0ZXJuIGNoYXIgKnByaW50VHlwbW9k KGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91dCk7CiAKIGV4 dGVybiBpbnQzMiB0eXBlX21heGltdW1fc2l6ZShPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2Qp OwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaCBiL3NyYy9pbmNs dWRlL3V0aWxzL3J1bGV1dGlscy5oCmluZGV4IDdkNDg5NzE4YTMuLjNjYmNhNDhmODUgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0 aWxzL3J1bGV1dGlscy5oCkBAIC0xMyw2ICsxMyw3IEBACiAjaWZuZGVmIFJVTEVVVElMU19ICiAj ZGVmaW5lIFJVTEVVVElMU19ICiAKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKICNp bmNsdWRlICJub2Rlcy9ub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNp bmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCkBAIC0yMywxMiArMjQsMTkgQEAgc3RydWN0IFBsYW5u ZWRTdG10OwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX3N0cmluZyhPaWQgaW5kZXhy ZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX2NvbHVtbnMoT2lkIGluZGV4cmVs aWQsIGJvb2wgcHJldHR5KTsKK2V4dGVybiBjaGFyICpwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNl KEZvcm1fcGdfdHJpZ2dlciB0cmlncmVjLAorCQkJCQkJCQkJICAgTm9kZSAqd2hlbkNsYXVzZSwg Ym9vbCBwcmV0dHkpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9xdWVyeWRlZihRdWVyeSAqcXVlcnks IGJvb2wgcHJldHR5KTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMo T2lkIHJlbGlkLCBib29sIHByZXR0eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZf c2ltcGxlKE9pZCByZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRjb25zdHJkZWZfc3Ry aW5nKE9pZCBwYXJ0aXRpb25JZCwgY2hhciAqYWxpYXNuYW1lKTsKIAogZXh0ZXJuIGNoYXIgKnBn X2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFpbnRJZCk7CitleHRlcm4gY2hh ciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoT2lkIGNvbnN0cmFpbnRJZCk7 CitleHRlcm4gdm9pZCBwZ19nZXRfcnVsZWRlZl9kZXRhaWxlZChEYXR1bSBldl9xdWFsLCBEYXR1 bSBldl9hY3Rpb24sCisJCQkJCQkJCSAgIGNoYXIgKip3aGVyZUNsYXVzZSwgTGlzdCAqKmFjdGlv bnMpOworCiBleHRlcm4gY2hhciAqZGVwYXJzZV9leHByZXNzaW9uKE5vZGUgKmV4cHIsIExpc3Qg KmRwY29udGV4dCwKIAkJCQkJCQkJYm9vbCBmb3JjZXByZWZpeCwgYm9vbCBzaG93aW1wbGljaXQp OwogZXh0ZXJuIExpc3QgKmRlcGFyc2VfY29udGV4dF9mb3IoY29uc3QgY2hhciAqYWxpYXNuYW1l LCBPaWQgcmVsaWQpOwpAQCAtNDAsOCArNDgsMTYgQEAgZXh0ZXJuIExpc3QgKnNlbGVjdF9ydGFi bGVfbmFtZXNfZm9yX2V4cGxhaW4oTGlzdCAqcnRhYmxlLAogCQkJCQkJCQkJCQkgQml0bWFwc2V0 ICpyZWxzX3VzZWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKE9pZCBj b2xsaWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcyk7 CitleHRlcm4gY2hhciAqZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFy Z3MsIExpc3QgKmFyZ25hbWVzLAorCQkJCQkJCQkJT2lkICphcmd0eXBlcywgYm9vbCBoYXNfdmFy aWFkaWMsCisJCQkJCQkJCQlib29sICp1c2VfdmFyaWFkaWNfcCwKKwkJCQkJCQkJCVBhcnNlRXhw cktpbmQgc3BlY2lhbF9leHBya2luZCk7CiBleHRlcm4gY2hhciAqZ2V0X3JhbmdlX3BhcnRib3Vu ZF9zdHJpbmcoTGlzdCAqYm91bmRfZGF0dW1zKTsKK2V4dGVybiB2b2lkIGdldF9vcGNsYXNzX25h bWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUsCisJCQkJCQkJICBTdHJpbmdJbmZv IGJ1Zik7CitleHRlcm4gY2hhciAqZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCk7CiAKIGV4 dGVybiBjaGFyICpwZ19nZXRfc3RhdGlzdGljc29iamRlZl9zdHJpbmcoT2lkIHN0YXRleHRpZCk7 CitleHRlcm4gdm9pZCBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFw VHVwbGUgcHJvY3R1cCk7CiAKICNlbmRpZgkJCQkJCQkvKiBSVUxFVVRJTFNfSCAqLwpkaWZmIC0t Z2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdAppbmRleCA5N2M5YmMxODYxLi5lZjE2ODY5NGExIDEwMDY0NAotLS0g YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdApAQCAtMTYxMCw2ICsxNjEwLDkgQEAgT1NJbmZvCiBPU1NMQ2lwaGVy CiBPU1NMRGlnZXN0CiBPVkVSTEFQUEVECitPYmpFbGVtCitPYmpUcmVlCitPYmpUeXBlCiBPYmpl Y3RBY2Nlc3NEcm9wCiBPYmplY3RBY2Nlc3NOYW1lc3BhY2VTZWFyY2gKIE9iamVjdEFjY2Vzc1Bv c3RBbHRlcgpAQCAtMzE3Niw2ICszMTc5LDcgQEAgY29sb3JtYXByYW5nZQogY29tcGFyZV9jb250 ZXh0CiBjb25maWdfdmFyX3ZhbHVlCiBjb250YWluX2FnZ3Nfb2ZfbGV2ZWxfY29udGV4dAorY29u dlNwZWNpZmllcgogY29udmVydF90ZXN0ZXhwcl9jb250ZXh0CiBjb3B5X2RhdGFfc291cmNlX2Ni CiBjb3JlX1lZU1RZUEUKLS0gCjIuMzcuMQoK --0000000000008463b705ea646663 Content-Type: application/octet-stream; name="v25-0006-Support-CREATE-TRANSFORM-and-DROP-TRANSFORM-commands.patch" Content-Disposition: attachment; filename="v25-0006-Support-CREATE-TRANSFORM-and-DROP-TRANSFORM-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8xkmm4u5 RnJvbSBkZDZhOTcyMGFjM2JkMmU0Y2FjMWYwNzE2MDJhMzlmMTAzOWFjMjhlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiWmhlbmcgKFphbmUpIExpIiA8emhlbGxpQGFtYXpvbi5jb20+ CkRhdGU6IFRodSwgNiBPY3QgMjAyMiAxNTo0MToxNSArMDAwMApTdWJqZWN0OiBbUEFUQ0ggNi82 XSBTdXBwb3J0IENSRUFURSBUUkFOU0ZPUk0gYW5kIERST1AgVFJBTlNGT1JNIGNvbW1hbmRzLgoK UmVtb3ZlZCBhbiB1bmRlc2lyYWJsZSAnb24nIGZyb20gdGhlIGlkZW50aXR5IHN0cmluZyBmb3Ig VFJBTlNGT1JNCmluIGdldE9iamVjdElkZW50aXR5UGFydHMuIFRoaXMgaXMgbmVlZGVkIHRvIG1h a2UgZGVwYXJzZSBvZiBEUk9QClRSQU5TRk9STSBjb21tYW5kIHdvcmsgc2luY2UgJ29uJyBpcyBu b3QgcHJlc2VudCBpbiB0aGUgY3VycmVudApEUk9QIFRSQU5TRk9STSBzeW50YXguIEZvciBleGFt cGxlLCB0aGUgY29ycmVjdCBzeW50YXggaXMKZHJvcCB0cmFuc2Zvcm0gdHJmIGZvciBpbnQgbGFu Z3VhZ2Ugc3FsOwppbnN0ZWFkIG9mCmRyb3AgdHJhbnNmb3JtIHRyZiBmb3IgaW50IG9uIGxhbmd1 YWdlIHNxbDsKLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYyAgICAgICAg ICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyAgICAgICAgICAg fCAxNTQgKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5jICAgICAgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9u Y21kcy5jICAgICAgIHwgICAyICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2Fk ZHJlc3Mub3V0IHwgICAyICstCiA1IGZpbGVzIGNoYW5nZWQsIDE2MCBpbnNlcnRpb25zKCspLCAz IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRk cmVzcy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMKaW5kZXggMjg0Y2E1 NTQ2OS4uMDg0YWNlYmJlMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3Rh ZGRyZXNzLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMKQEAgLTYw MDEsNyArNjAwMSw3IEBAIGdldE9iamVjdElkZW50aXR5UGFydHMoY29uc3QgT2JqZWN0QWRkcmVz cyAqb2JqZWN0LAogCQkJCXRyYW5zZm9ybVR5cGUgPSBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQo dHJhbnNmb3JtLT50cmZ0eXBlKTsKIAkJCQl0cmFuc2Zvcm1MYW5nID0gZ2V0X2xhbmd1YWdlX25h bWUodHJhbnNmb3JtLT50cmZsYW5nLCBmYWxzZSk7CiAKLQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZi dWZmZXIsICJmb3IgJXMgb24gbGFuZ3VhZ2UgJXMiLAorCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1 ZmZlciwgImZvciAlcyBsYW5ndWFnZSAlcyIsCiAJCQkJCQkJCSB0cmFuc2Zvcm1UeXBlLAogCQkJ CQkJCQkgdHJhbnNmb3JtTGFuZyk7CiAJCQkJaWYgKG9iam5hbWUpCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYwppbmRleCA1YmZhODAwZmMyLi41YTYzYmZhZmFjIDEwMDc1NQotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9kZXBhcnNlLmMKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX3Jh bmdlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19yZXdyaXRlLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJhbnNmb3JtLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ190c19jb25maWcuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX2Rp Y3QuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX3BhcnNlci5oIgpAQCAtNzYzOCw2ICs3NjM5 LDE1NSBAQCBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkK IAlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwogfQogCisv KgorICogRGVwYXJzZSBhIENyZWF0ZVRyYW5zZm9ybVN0bXQgKENSRUFURSBUUkFOU0ZPUk0pLgor ICoKKyAqIEdpdmVuIGEgdHJhbnNmb3JtIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0 ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIENSRUFURSBUUkFO U0ZPUk0gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUcmFu c2Zvcm1TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVRyYW5z Zm9ybVN0bXQgKm5vZGUgPSAoQ3JlYXRlVHJhbnNmb3JtU3RtdCAqKSBwYXJzZXRyZWU7CisJT2Jq VHJlZQkqY3JlYXRlVHJhbnNmb3JtOworCU9ialRyZWUgKnNpZ247CisJSGVhcFR1cGxlIHRyZlR1 cDsKKwlIZWFwVHVwbGUgbGFuZ1R1cDsKKwlIZWFwVHVwbGUgcHJvY1R1cDsKKwlGb3JtX3BnX3Ry YW5zZm9ybSB0cmZGb3JtOworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zvcm07CisJRm9ybV9wZ19w cm9jIHByb2NGb3JtOworCWludCBpOworCisJLyogR2V0IHRoZSBwZ190cmFuc2Zvcm0gdHVwbGUg Ki8KKwl0cmZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFJGT0lELCBPYmplY3RJZEdldERhdHVtKG9i amVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRyZlR1cCkpCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgdHJhbnNmb3JtIHdpdGggT0lEICV1IiwKKwkJCSBv YmplY3RJZCk7CisJdHJmRm9ybSA9IChGb3JtX3BnX3RyYW5zZm9ybSkgR0VUU1RSVUNUKHRyZlR1 cCk7CisKKwkvKiBHZXQgdGhlIGNvcnJlc3BvbmRpbmcgcGdfbGFuZ3VhZ2UgdHVwbGUgKi8KKwls YW5nVHVwID0gU2VhcmNoU3lzQ2FjaGUxKExBTkdPSUQsIHRyZkZvcm0tPnRyZmxhbmcpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZChsYW5nVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsdXJlIGZvciBsYW5ndWFnZSB3aXRoIE9JRCAldSIsCisJCQkgdHJmRm9ybS0+dHJmbGFu Zyk7CisJbGFuZ0Zvcm0gPSAoRm9ybV9wZ19sYW5ndWFnZSkgR0VUU1RSVUNUKGxhbmdUdXApOwor CisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7b3JfcmVwbGFjZX1z IFRSQU5TRk9STSBGT1IgJXt0eXBlbmFtZX1EIExBTkdVQUdFICV7bGFuZ3VhZ2V9SQorCSAqICgg RlJPTSBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZX1zLCBUTyBTUUwgV0lUSCBGVU5DVElP TiAle3NpZ25hdHVyZV90b2Z9cyApCisJICovCisJY3JlYXRlVHJhbnNmb3JtID0gbmV3X29ianRy ZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlVHJhbnNmb3JtLCAi JXtvcl9yZXBsYWNlfXMiLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAi Iik7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlVHJhbnNmb3JtLCAiVFJBTlNGT1JNIEZP UiAle3R5cGVuYW1lfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBl UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHJmRm9ybS0+dHJmdHlwZSkpOworCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGNyZWF0ZVRyYW5zZm9ybSwgIkxBTkdVQUdFICV7bGFuZ3VhZ2V9SSIsCisJ CQkJCQkgTmFtZVN0cihsYW5nRm9ybS0+bGFubmFtZSkpOworCisJLyogZGVwYXJzZSB0aGUgdHJh bnNmb3JtX2VsZW1lbnRfbGlzdCAqLworCWlmICh0cmZGb3JtLT50cmZmcm9tc3FsICE9IEludmFs aWRPaWQpCisJeworCQlMaXN0ICpwYXJhbXMgPSBOSUw7CisKKwkJLyoKKwkJICogVmVyYm9zZSBz eW50YXgKKwkJICoKKwkJICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zIFRSQU5TRk9STSBGT1IgJXt0 eXBlbmFtZX1EIExBTkdVQUdFICV7bGFuZ3VhZ2V9SQorCQkgKiAoIEZST00gU1FMIFdJVEggRlVO Q1RJT04gJXtzaWduYXR1cmV9cyApCisJCSAqLworCisJCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBs ZSBmb3IgdGhlIEZST00gRlVOQ1RJT04gKi8KKwkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQ Uk9DT0lELCB0cmZGb3JtLT50cmZmcm9tc3FsKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBy b2NUdXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZvciBmdW5jdGlv biB3aXRoIE9JRCAldSIsCisJCQkJdHJmRm9ybS0+dHJmZnJvbXNxbCk7CisJCXByb2NGb3JtID0g KEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCS8qCisJCSAqIENSRUFURSBU UkFOU0ZPUk0gZG9lcyBub3QgY2hhbmdlIGZ1bmN0aW9uIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNl IGNhdGFsb2cKKwkJICogdG8gZ2V0IGlucHV0IHR5cGUgT2lkcy4KKwkJICovCisJCWZvciAoaSA9 IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2JqVHJlZSAqcGFyYW1v YmogPSBuZXdfb2JqdHJlZSgiIik7CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2Jq LCAiJXt0eXBlfVQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnBy b2FyZ3R5cGVzLnZhbHVlc1tpXSwgLTEpKTsKKwkJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBu ZXdfb2JqZWN0X29iamVjdChwYXJhbW9iaikpOworCQl9CisKKwkJc2lnbiA9IG5ld19vYmp0cmVl KCIiKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChzaWduLCAiJXtpZGVudGl0eX1EIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJ CQkJCQkJCQkJCQkJICBOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSkpOworCQlhcHBlbmRfYXJy YXlfb2JqZWN0KHNpZ24sICIoJXthcmd1bWVudHM6LCB9cykiLCBwYXJhbXMpOworCisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVRyYW5zZm9ybSwgIihGUk9NIFNRTCBXSVRIIEZVTkNUSU9O ICV7c2lnbmF0dXJlfXMiLCBzaWduKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCX0K KwlpZiAodHJmRm9ybS0+dHJmdG9zcWwgIT0gSW52YWxpZE9pZCkKKwl7CisJCUxpc3QgKnBhcmFt cyA9IE5JTDsKKworCQkvKgorCQkgKiBWZXJib3NlIHN5bnRheAorCQkgKgorCQkgKiBDUkVBVEUg JXtvcl9yZXBsYWNlfXMgVFJBTlNGT1JNIEZPUiAle3R5cGVuYW1lfUQgTEFOR1VBR0UgJXtsYW5n dWFnZX1JCisJCSAqICggRlJPTSBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZX1zLCBUTyBT UUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZV90b2Z9cyApCisJCSAqCisJCSAqIE9SCisJCSAq CisJCSAqIENSRUFURSAle29yX3JlcGxhY2V9cyBUUkFOU0ZPUk0gRk9SICV7dHlwZW5hbWV9RCBM QU5HVUFHRSAle2xhbmd1YWdlfUkKKwkJICogKCBUTyBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25h dHVyZV90b2Z9cyApCisJCSAqLworCisJCS8qIEFwcGVuZCBhICcsJyBpZiB0cmZmcm9tc3FsIGlz IHByZXNlbnQsIGVsc2UgYXBwZW5kICcoJyAqLworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVh dGVUcmFuc2Zvcm0sICIle2NvbW1hfXMiLAorCQkJCQkJCSB0cmZGb3JtLT50cmZmcm9tc3FsICE9 IEludmFsaWRPaWQgPyAiLCIgOiAiKCIpOworCisJCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSBm b3IgdGhlIFRPIEZVTkNUSU9OICovCisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09J RCwgdHJmRm9ybS0+dHJmdG9zcWwpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkp CisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGZ1bmN0aW9uIHdpdGgg T0lEICV1IiwKKwkJCQl0cmZGb3JtLT50cmZ0b3NxbCk7CisJCXByb2NGb3JtID0gKEZvcm1fcGdf cHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCS8qCisJCSAqIENSRUFURSBUUkFOU0ZPUk0g ZG9lcyBub3QgY2hhbmdlIGZ1bmN0aW9uIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlIGNhdGFsb2cK KwkJICogdG8gZ2V0IGlucHV0IHR5cGUgT2lkcy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBw cm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2JqVHJlZSAqcGFyYW1vYmogPSBuZXdf b2JqdHJlZSgiIik7CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXt0eXBl fVQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb2FyZ3R5cGVz LnZhbHVlc1tpXSwgLTEpKTsKKwkJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0 X29iamVjdChwYXJhbW9iaikpOworCQl9CisKKwkJc2lnbiA9IG5ld19vYmp0cmVlKCIiKTsKKwor CQlhcHBlbmRfb2JqZWN0X29iamVjdChzaWduLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQluZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CQkgTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKwkJYXBwZW5kX2FycmF5X29iamVjdChz aWduLCAiKCV7YXJndW1lbnRzOiwgfXMpIiwgcGFyYW1zKTsKKworCQlhcHBlbmRfb2JqZWN0X29i amVjdChjcmVhdGVUcmFuc2Zvcm0sICJUTyBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZV90 b2Z9cyIsIHNpZ24pOworCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJfQorCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGNyZWF0ZVRyYW5zZm9ybSwgIiV7Y2xvc2VfYnJhY2tldH1zIiwgIikiKTsK KworCVJlbGVhc2VTeXNDYWNoZShsYW5nVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHJmVHVwKTsK KwlyZXR1cm4gY3JlYXRlVHJhbnNmb3JtOworfQorCiAKIC8qCiAgKiBIYW5kbGUgZGVwYXJzaW5n IG9mIHNpbXBsZSBjb21tYW5kcy4KQEAgLTc4MDQsNiArNzk1NCwxMCBAQCBkZXBhcnNlX3NpbXBs ZV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKIAkJCWNvbW1hbmQgPSBkZXBhcnNlX0Fs dGVyVFNEaWN0aW9uYXJ5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKIAkJCWJyZWFrOwogCisJ CWNhc2UgVF9DcmVhdGVUcmFuc2Zvcm1TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRl VHJhbnNmb3JtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCiAJCWRlZmF1 bHQ6CiAJCQljb21tYW5kID0gTlVMTDsKIAkJCWVsb2coTE9HLCAidW5yZWNvZ25pemVkIG5vZGUg dHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuYwppbmRleCA4MWVkYmNiNDY3Li4yNTU1OGFhMWM1IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZl bnRfdHJpZ2dlci5jCkBAIC0yNTU5LDcgKzI1NTksOCBAQCBwdWJsaWNhdGlvbl9kZXBhcnNlX2Rk bF9jb21tYW5kX2VuZChQR19GVU5DVElPTl9BUkdTKQogCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0 eXBlLCAidGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbiIpID09IDAgfHwKIAkJCQkgc3RyY21wKG9i ai0+b2JqZWN0dHlwZSwgInRleHQgc2VhcmNoIGRpY3Rpb25hcnkiKSA9PSAwIHx8CiAJCQkJIHN0 cmNtcChvYmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCBwYXJzZXIiKSA9PSAwIHx8Ci0JCQkJ IHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCB0ZW1wbGF0ZSIpID09IDApCisJ CQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCB0ZW1wbGF0ZSIpID09IDAg fHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRyYW5zZm9ybSIpID09IDApCiAJCQlj bWR0eXBlID0gRENUX09iamVjdERyb3A7CiAJCWVsc2UKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCAzN2QzMzZlN2FhLi5iNjAwNTUwYmUxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtOTI3LDYgKzkyNyw4IEBA IENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25T dG10ICpzdG10KQogCQlDb21tYW5kVGFnCXJld3JpdGVfY29tbWFuZHNbXSA9IHtDTURUQUdfQUxU RVJfVEFCTEV9OwogCiAJCUNvbW1hbmRUYWcJZW5kX2NvbW1hbmRzW10gPSB7CisJCQlDTURUQUdf Q1JFQVRFX1RSQU5TRk9STSwKKwkJCUNNRFRBR19EUk9QX1RSQU5TRk9STSwKIAkJCUNNRFRBR19D UkVBVEVfRk9SRUlHTl9EQVRBX1dSQVBQRVIsCiAJCQlDTURUQUdfQUxURVJfRk9SRUlHTl9EQVRB X1dSQVBQRVIsCiAJCQlDTURUQUdfRFJPUF9GT1JFSUdOX0RBVEFfV1JBUFBFUiwKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9vYmplY3RfYWRkcmVzcy5vdXQKaW5kZXggMzU0OWI2M2E3OS4u M2M0Y2I3YjMzNiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vYmplY3Rf YWRkcmVzcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vYmplY3RfYWRkcmVz cy5vdXQKQEAgLTQ5MCw3ICs0OTAsNyBAQCBTRUxFQ1QgKHBnX2lkZW50aWZ5X29iamVjdChhZGRy MS5jbGFzc2lkLCBhZGRyMS5vYmppZCwgYWRkcjEub2Jqc3ViaWQpKS4qLAogIHBvbGljeSAgICAg ICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCBnZW5wb2wg b24gYWRkcl9uc3AuZ2VudGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8IHQKICBzdGF0aXN0aWNzIG9iamVjdCAgICAgICAgIHwgYWRkcl9uc3AgICB8IGdlbnRh YmxlX3N0YXQgICAgIHwgYWRkcl9uc3AuZ2VudGFibGVfc3RhdCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0CiAgY29sbGF0aW9uICAgICAgICAgICAgICAg ICB8IHBnX2NhdGFsb2cgfCAiZGVmYXVsdCIgICAgICAgICB8IHBnX2NhdGFsb2cuImRlZmF1bHQi ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdAotIHRy YW5zZm9ybSAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg fCBmb3IgaW50ZWdlciBvbiBsYW5ndWFnZSBzcWwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IHQKKyB0cmFuc2Zvcm0gICAgICAgICAgICAgICAgIHwgICAgICAgICAg ICB8ICAgICAgICAgICAgICAgICAgIHwgZm9yIGludGVnZXIgbGFuZ3VhZ2Ugc3FsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0CiAgdGV4dCBzZWFyY2ggZGlj dGlvbmFyeSAgICB8IGFkZHJfbnNwICAgfCBhZGRyX3RzX2RpY3QgICAgICB8IGFkZHJfbnNwLmFk ZHJfdHNfZGljdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgdAogIHRleHQgc2VhcmNoIHBhcnNlciAgICAgICAgfCBhZGRyX25zcCAgIHwgYWRkcl90c19w cnMgICAgICAgfCBhZGRyX25zcC5hZGRyX3RzX3BycyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IHQKICB0ZXh0IHNlYXJjaCBjb25maWd1cmF0aW9uIHwg YWRkcl9uc3AgICB8IGFkZHJfdHNfY29uZiAgICAgIHwgYWRkcl9uc3AuYWRkcl90c19jb25mICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0Ci0tIAoyLjM3 LjEKCg== --0000000000008463b705ea646663--