From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Stefan Kangas Newsgroups: gmane.emacs.devel Subject: [PATCH] Remove obsolete fast-lock and lazy-lock libraries (was: Re: Deleting old `:version` from defcustoms) Date: Fri, 7 Aug 2020 17:42:33 +0200 Message-ID: References: <20200515175844.18941.61355@vcs0.savannah.gnu.org> <20200515175845.997EC20999@vcs0.savannah.gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000b560b005ac4b74b7" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="22900"; mail-complaints-to="usenet@ciao.gmane.io" To: Stefan Monnier , Emacs developers Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Fri Aug 07 17:43:52 2020 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1k44XA-0005kG-70 for ged-emacs-devel@m.gmane-mx.org; Fri, 07 Aug 2020 17:43:52 +0200 Original-Received: from localhost ([::1]:52424 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k44X9-0007hF-8u for ged-emacs-devel@m.gmane-mx.org; Fri, 07 Aug 2020 11:43:51 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:54270) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k44WB-00078i-7W for emacs-devel@gnu.org; Fri, 07 Aug 2020 11:42:51 -0400 Original-Received: from mail-yb1-xb42.google.com ([2607:f8b0:4864:20::b42]:41847) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k44W6-0004wl-HK for emacs-devel@gnu.org; Fri, 07 Aug 2020 11:42:50 -0400 Original-Received: by mail-yb1-xb42.google.com with SMTP id v89so1223161ybi.8 for ; Fri, 07 Aug 2020 08:42:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=ct/RM18kHWRhYUaCnKLMPhuEIbfQKXEzjRn8s44q62Y=; b=KLcVyjC/utDHhoddQgElsCwOCBirxdz8KTvxNOEQDsqpEVJaQq5z23txxfhw1AdvO9 Dozy+IPiSFZBXV8i1Bi14nRdVGJI1WFbZF61pPmOYokWt6H4PyIbouUR2BnMf6IoBYyM SHF765Tc129uJHyE3qGlTJcRPPcj1gVTp2t5InLzOnDRLdVWNtNEa86J+y+XwvcPUgz3 n40+9IK4I4I/aPjXOjkz7fw5bEcNPYaTCqO7B75X1TQZyD67rTfcRjeIC1A9cge5+lau ufRz8ScyFpeWm7jqMMQftiCWFzr3YFscLjQDUUSnQANmuDwc0yOTjlePHyMIFgBtLPnL YFog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=ct/RM18kHWRhYUaCnKLMPhuEIbfQKXEzjRn8s44q62Y=; b=NWIJSaQ6hxuu9n8br6UDvVc2pG9xraHqFkYDEFmZyZcSMA5Zsz3oKLTGF9pQ6chCTe hDaOrW9gj3KIDpJqskod3VLP3ZzJtDgXjAfz9ZDNeXU5XY23S7YnOvnGuKN4k5R0rs5C ScSXI46d09fx4WnEQEUlrhk2kN87Rj54JIX5s4JOEpi0Wofp60fqmzChd36VubIotyyU Rpuyd2+YNHR8Q8P5z6JbMvfKYkFSL4v8/plVrbislqiYRUT1qljrAUJMFI1ooERv1W/A eeK6V4QfjCz//tL8mG66ItgBsoFvO8/5Xyd5C6UUgi+1ENkrIV9u5b5s3LUTL+4re7Tm TJlg== X-Gm-Message-State: AOAM531ddV4b1X1t6xBwSBVUsOlQrpkLhJNHnTlkfqeXggV8l4n6/KRu 3UAtbn14Y205VqcNUoAXIwFDvzo5cLUjns7XH3Q= X-Google-Smtp-Source: ABdhPJzJFdVjtMLFX2DjKFJVmIsjjDWoSd2LpR9exRJ/Pwv0iLjrjba/0Bqn5BdaDRrTf0kqjVJXr0rwrHXykXgHprA= X-Received: by 2002:a25:b88b:: with SMTP id w11mr22339943ybj.129.1596814964112; Fri, 07 Aug 2020 08:42:44 -0700 (PDT) In-Reply-To: Received-SPF: pass client-ip=2607:f8b0:4864:20::b42; envelope-from=stefankangas@gmail.com; helo=mail-yb1-xb42.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:253497 Archived-At: --000000000000b560b005ac4b74b7 Content-Type: text/plain; charset="UTF-8" Stefan Kangas writes: > There are also these two libraries: > > ./lisp/obsolete/fast-lock.el9:;; Obsolete-since: 22.1 > ./lisp/obsolete/lazy-lock.el9:;; Obsolete-since: 22.1 > > For some reason they weren't removed in 27.1, when most other libraries > obsolete since 22.x were deleted. This made me wonder if there was any > particular reason for their non-removal. Does anyone know? And could > we delete them now? I have attached a patch to remove them below. One thing to note is that I've kept the support for 'font-lock-support-mode' set to nil since Alan Mackenzie indicated that this could be useful for debugging purposes here: https://lists.gnu.org/archive/html/emacs-devel/2011-10/msg00748.html Perhaps it should be changed into a defvar, though. Or maybe it is no longer useful. But that could in any case be done separately, I think. (In case anyone is wondering, the motivation here is that these libraries are the only reason why some variables obsolete since 23.1 can't yet be removed.) Any comments or objections? Best regards, Stefan Kangas --000000000000b560b005ac4b74b7 Content-Type: text/x-patch; charset="UTF-8"; name="0001-Remove-obsolete-fast-lock-and-lazy-lock-libraries.patch" Content-Disposition: attachment; filename="0001-Remove-obsolete-fast-lock-and-lazy-lock-libraries.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kdkecc800 RnJvbSA3ZWNmYWM0NDEyYzBmMWYxMjY2ODFmYzljOTkxNTNhYjU4MDdlMTA2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gS2FuZ2FzIDxzdGVmYW5rYW5nYXNAZ21haWwuY29t PgpEYXRlOiBGcmksIDcgQXVnIDIwMjAgMTc6MTc6MDggKzAyMDAKU3ViamVjdDogW1BBVENIXSBS ZW1vdmUgb2Jzb2xldGUgZmFzdC1sb2NrIGFuZCBsYXp5LWxvY2sgbGlicmFyaWVzCgpUaGVzZSBs aWJyYXJpZXMgaGF2ZSBiZWVuIG9ic29sZXRlIHNpbmNlIDIyLjEuCgoqIGxpc3Avb2Jzb2xldGUv ZmFzdC1sb2NrLmVsOgoqIGxpc3Avb2Jzb2xldGUvbGF6eS1sb2NrLmVsOiBSZW1vdmUgbGlicmFy aWVzIG9ic29sZXRlIHNpbmNlIDIyLjEuCgoqIGxpc3AvZm9udC1sb2NrLmVsIChmb250LWxvY2st dHVybi1vZmYtdGhpbmctbG9jaykKKGZvbnQtbG9jay1hZnRlci1mb250aWZ5LWJ1ZmZlcikKKGZv bnQtbG9jay1hZnRlci11bmZvbnRpZnktYnVmZmVyKQooZm9udC1sb2NrLWRlZmF1bHQtZm9udGlm eS1idWZmZXIpCihmb250LWxvY2stZGVmYXVsdC11bmZvbnRpZnktYnVmZmVyLCBmb250LWxvY2st c3VwcG9ydC1tb2RlKToKKiBsaXNwL21haWwvcm1haWwuZWwgKHJtYWlsLXZhcmlhYmxlcyk6Ciog bGlzcC9wcy1wcmludC5lbCAocHMtcHJpbnQtZW5zdXJlLWZvbnRpZmllZCk6IFJlbW92ZSBzdXBw b3J0IGZvcgonZmFzdC1sb2NrJyBhbmQgJ2xhenktbG9jaycuCgoqIGxpc3AvZm9udC1jb3JlLmVs IChmb250LWxvY2stZGVmYXVsdHMpOgoqIGxpc3AvZm9udC1sb2NrLmVsIChmb250LWxvY2staW5o aWJpdC10aGluZy1sb2NrKQooZm9udC1sb2NrLWtleXdvcmRzLCB0b3AtbGV2ZWwpOgoqIGxpc3Av cHJvZ21vZGVzL2FudGxyLW1vZGUuZWwgKHRvcC1sZXZlbCk6CiogbGlzcC9wcm9nbW9kZXMvY2Mt Zm9udHMuZWwgKGMtZm9udC1sb2NrLWRlY2xhcmF0aW9ucyk6CiogbGlzcC9wcm9nbW9kZXMvY3Bl cmwtbW9kZS5lbCAodG9wLWxldmVsKToKKiBzcmMvYnVmZmVyLmMgKEZzZXRfYnVmZmVyX21vZGlm aWVkX3ApOiBEb2MgZml4ZXMgdG8gcmVtb3ZlCnJlZmVyZW5jZXMgdG8gJ2Zhc3QtbG9jaycgYW5k ICdsYXp5LWxvY2snLgoKKiBldGMvTkVXUzogQW5ub3VuY2UgdGhhdCB0aGV5IGhhdmUgYmVlbiBy ZW1vdmVkLgotLS0KIGV0Yy9ORVdTICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKIGxpc3Av Zm9udC1jb3JlLmVsICAgICAgICAgICAgfCAgICAyICstCiBsaXNwL2ZvbnQtbG9jay5lbCAgICAg ICAgICAgIHwgICA4MyArLS0KIGxpc3AvbWFpbC9ybWFpbC5lbCAgICAgICAgICAgfCAgICAzICst CiBsaXNwL29ic29sZXRlL2Zhc3QtbG9jay5lbCAgIHwgIDg0MSAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIGxpc3Avb2Jzb2xldGUvbGF6eS1sb2NrLmVsICAgfCAxMDUzIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxpc3AvcHJvZ21vZGVzL2FudGxyLW1vZGUuZWwgfCAg ICAzIC0KIGxpc3AvcHJvZ21vZGVzL2NjLWZvbnRzLmVsICAgfCAgICAyICstCiBsaXNwL3Byb2dt b2Rlcy9jcGVybC1tb2RlLmVsIHwgICAgMiAtCiBsaXNwL3BzLXByaW50LmVsICAgICAgICAgICAg IHwgICAgNSArLQogc3JjL2J1ZmZlci5jICAgICAgICAgICAgICAgICB8ICAgMTQgKy0KIDExIGZp bGVzIGNoYW5nZWQsIDQxIGluc2VydGlvbnMoKyksIDE5NzIgZGVsZXRpb25zKC0pCiBkZWxldGUg bW9kZSAxMDA2NDQgbGlzcC9vYnNvbGV0ZS9mYXN0LWxvY2suZWwKIGRlbGV0ZSBtb2RlIDEwMDY0 NCBsaXNwL29ic29sZXRlL2xhenktbG9jay5lbAoKZGlmZiAtLWdpdCBhL2V0Yy9ORVdTIGIvZXRj L05FV1MKaW5kZXggODUwYjE2NjA2OS4uZDgwZWY2ODY1ZSAxMDA2NDQKLS0tIGEvZXRjL05FV1MK KysrIGIvZXRjL05FV1MKQEAgLTc3MSw2ICs3NzEsMTEgQEAgaGF2ZSBub3cgYmVlbiByZW1vdmVk LgogKiogU29tZSBsaWJyYXJpZXMgb2Jzb2xldGUgc2luY2UgRW1hY3MgMjMgaGF2ZSBiZWVuIHJl bW92ZWQ6CiAnbGVkaXQuZWwnLCAnbG1lbnUuZWwnLCAnbHVjaWQuZWwgYW5kICdvbGQtd2hpdGVz cGFjZS5lbCcuCiAKKy0tLQorKiogVGhlICdsYXp5LWxvY2snIGFuZCAnZmFzdC1sb2NrJyBsaWJy YXJpZXMgaGF2ZSBiZWVuIHJlbW92ZWQuCitUaGV5IGhhdmUgYmVlbiBvYnNvbGV0ZSBzaW5jZSAy Mi4xLiAgVXNlICdqaXQtbG9jaycgaW5zdGVhZCAodGhlCitkZWZhdWx0KS4KKwogDAogKiBMaXNw IENoYW5nZXMgaW4gRW1hY3MgMjguMQogCmRpZmYgLS1naXQgYS9saXNwL2ZvbnQtY29yZS5lbCBi L2xpc3AvZm9udC1jb3JlLmVsCmluZGV4IDA5ODI1M2ViMTYuLjM0NGQ3ZWUyYWQgMTAwNjQ0Ci0t LSBhL2xpc3AvZm9udC1jb3JlLmVsCisrKyBiL2xpc3AvZm9udC1jb3JlLmVsCkBAIC02Myw3ICs2 Myw3IEBAIGZvbnQtbG9jay1kZWZhdWx0cwogYGZvbnQtbG9jay1zeW50YWN0aWMta2V5d29yZHMn IGFuZCB0aG9zZSBmb3IgYnVmZmVyLXNwZWNpYWxpemVkIGZvbnRpZmljYXRpb24KIGZ1bmN0aW9u cywgYGZvbnQtbG9jay1mb250aWZ5LWJ1ZmZlci1mdW5jdGlvbicsCiBgZm9udC1sb2NrLXVuZm9u dGlmeS1idWZmZXItZnVuY3Rpb24nLCBgZm9udC1sb2NrLWZvbnRpZnktcmVnaW9uLWZ1bmN0aW9u JywKLWBmb250LWxvY2stdW5mb250aWZ5LXJlZ2lvbi1mdW5jdGlvbicsIGFuZCBgZm9udC1sb2Nr LWluaGliaXQtdGhpbmctbG9jaycuIikKK2Bmb250LWxvY2stdW5mb250aWZ5LXJlZ2lvbi1mdW5j dGlvbicuIikKIDs7OyMjI2F1dG9sb2FkCiAocHV0ICdmb250LWxvY2stZGVmYXVsdHMgJ3Jpc2t5 LWxvY2FsLXZhcmlhYmxlIHQpCiAobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2ZvbnQtbG9j ay1kZWZhdWx0cykKZGlmZiAtLWdpdCBhL2xpc3AvZm9udC1sb2NrLmVsIGIvbGlzcC9mb250LWxv Y2suZWwKaW5kZXggNWNkYTRhNjkzZC4uZjVhZGM1Yjc2OCAxMDA2NDQKLS0tIGEvbGlzcC9mb250 LWxvY2suZWwKKysrIGIvbGlzcC9mb250LWxvY2suZWwKQEAgLTQ3LDkgKzQ3LDcgQEAKIDs7CiA7 OyBGb250aWZpY2F0aW9uIGZvciBhIHBhcnRpY3VsYXIgbW9kZSBtYXkgYmUgYXZhaWxhYmxlIGlu IGEgbnVtYmVyIG9mIGxldmVscwogOzsgb2YgZGVjb3JhdGlvbi4gIFRoZSBoaWdoZXIgdGhlIGxl dmVsLCB0aGUgbW9yZSBkZWNvcmF0aW9uLCBidXQgdGhlIG1vcmUgdGltZQotOzsgaXQgdGFrZXMg dG8gZm9udGlmeS4gIFNlZSB0aGUgdmFyaWFibGUgYGZvbnQtbG9jay1tYXhpbXVtLWRlY29yYXRp b24nLCBhbmQKLTs7IGFsc28gdGhlIHZhcmlhYmxlIGBmb250LWxvY2stbWF4aW11bS1zaXplJy4g IFN1cHBvcnQgbW9kZXMgZm9yIEZvbnQgTG9jawotOzsgbW9kZSBjYW4gYmUgdXNlZCB0byBzcGVl ZCB1cCBGb250IExvY2sgbW9kZS4gIFNlZSBgZm9udC1sb2NrLXN1cHBvcnQtbW9kZScuCis7OyBp dCB0YWtlcyB0byBmb250aWZ5LiAgU2VlIHRoZSB2YXJpYWJsZSBgZm9udC1sb2NrLW1heGltdW0t ZGVjb3JhdGlvbicuCiAMCiA7OzsgSG93IEZvbnQgTG9jayBtb2RlIGZvbnRpZmllczoKIApAQCAt NDcxLDggKzQ2OSw3IEBAIGZvbnQtbG9jay1rZXl3b3JkcwogVGhlc2UgcmVndWxhciBleHByZXNz aW9ucyBjYW4gbWF0Y2ggdGV4dCB3aGljaCBzcGFucyBsaW5lcywKIGFsdGhvdWdoIGl0IGlzIGJl dHRlciB0byBhdm9pZCBpdCBpZiBwb3NzaWJsZSBzaW5jZSB1cGRhdGluZyB0aGVtCiB3aGlsZSBl ZGl0aW5nIHRleHQgaXMgc2xvd2VyLCBhbmQgaXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUKLWFs d2F5cyBjb3JyZWN0IHdoZW4gdXNpbmcgc3VwcG9ydCBtb2RlcyBsaWtlIGppdC1sb2NrIG9yCi1s YXp5LWxvY2suCithbHdheXMgY29ycmVjdCB3aGVuIHVzaW5nIGppdC1sb2NrLgogCiBUaGlzIHZh cmlhYmxlIGlzIHNldCBieSBtYWpvciBtb2RlcyB2aWEgdGhlIHZhcmlhYmxlCiBgZm9udC1sb2Nr LWRlZmF1bHRzJy4gIEJlIGNhcmVmdWwgd2hlbiBjb21wb3NpbmcgcmVnZXhwcyBmb3IgdGhpcwpA QCAtNjA4LDggKzYwNSw3IEBAIGZvbnQtbG9jay11bmZvbnRpZnktcmVnaW9uLWZ1bmN0aW9uCiAK IChkZWZ2YXIgZm9udC1sb2NrLWluaGliaXQtdGhpbmctbG9jayBuaWwKICAgIkxpc3Qgb2YgRm9u dCBMb2NrIG1vZGUgcmVsYXRlZCBtb2RlcyB0aGF0IHNob3VsZCBub3QgYmUgdHVybmVkIG9uLgot Q3VycmVudGx5LCB2YWxpZCBtb2RlIG5hbWVzIGFyZSBgZmFzdC1sb2NrLW1vZGUnLCBgaml0LWxv Y2stbW9kZScgYW5kCi1gbGF6eS1sb2NrLW1vZGUnLiAgVGhpcyBpcyBub3JtYWxseSBzZXQgdmlh IGBmb250LWxvY2stZGVmYXVsdHMnLiIpCitUaGlzIHZhcmlhYmxlIGlzIG5vdyB1bnVzZWQuIikK IChtYWtlLW9ic29sZXRlLXZhcmlhYmxlICdmb250LWxvY2staW5oaWJpdC10aGluZy1sb2NrIG5p bCAiMjUuMSIpCiAKIChkZWZ2YXItbG9jYWwgZm9udC1sb2NrLW11bHRpbGluZSBuaWwKQEAgLTg3 OSwyNSArODc1LDE5IEBAIGZvbnQtbG9jay1yZW1vdmUta2V5d29yZHMKIChkZWZjdXN0b20gZm9u dC1sb2NrLXN1cHBvcnQtbW9kZSAnaml0LWxvY2stbW9kZQogICAiU3VwcG9ydCBtb2RlIGZvciBG b250IExvY2sgbW9kZS4KIFN1cHBvcnQgbW9kZXMgc3BlZWQgdXAgRm9udCBMb2NrIG1vZGUgYnkg YmVpbmcgY2hvb3N5IGFib3V0IHdoZW4gZm9udGlmaWNhdGlvbgotb2NjdXJzLiAgVGhlIGRlZmF1 bHQgc3VwcG9ydCBtb2RlLCBKdXN0LWluLXRpbWUgTG9jayBtb2RlIChzeW1ib2wKLWBqaXQtbG9j ay1tb2RlJyksIGlzIHJlY29tbWVuZGVkLgotCi1PdGhlciwgb2xkZXIgc3VwcG9ydCBtb2RlcyBh cmUgRmFzdCBMb2NrIG1vZGUgKHN5bWJvbCBgZmFzdC1sb2NrLW1vZGUnKSBhbmQKLUxhenkgTG9j ayBtb2RlIChzeW1ib2wgYGxhenktbG9jay1tb2RlJykuICBTZWUgdGhvc2UgbW9kZXMgZm9yIG1v cmUgaW5mby4KLUhvd2V2ZXIsIHRoZXkgYXJlIG5vIGxvbmdlciByZWNvbW1lbmRlZCwgYXMgSnVz dC1pbi10aW1lIExvY2sgbW9kZSBpcyBiZXR0ZXIuCitvY2N1cnMuICBUaGUgb25seSBzdXBwb3J0 ZWQgbW9kZSBpcyBKdXN0LWluLXRpbWUgTG9jayBtb2RlIChzeW1ib2wKK2BqaXQtbG9jay1tb2Rl JykuCiAKIElmIG5pbCwgbWVhbnMgc3VwcG9ydCBmb3IgRm9udCBMb2NrIG1vZGUgaXMgbmV2ZXIg cGVyZm9ybWVkLgogSWYgYSBzeW1ib2wsIHVzZSB0aGF0IHN1cHBvcnQgbW9kZS4KIElmIGEgbGlz dCwgZWFjaCBlbGVtZW50IHNob3VsZCBiZSBvZiB0aGUgZm9ybSAoTUFKT1ItTU9ERSAuIFNVUFBP UlQtTU9ERSksCiB3aGVyZSBNQUpPUi1NT0RFIGlzIGEgc3ltYm9sIG9yIHQgKG1lYW5pbmcgdGhl IGRlZmF1bHQpLiAgRm9yIGV4YW1wbGU6Ci0gKChjLW1vZGUgLiBmYXN0LWxvY2stbW9kZSkgKGMr Ky1tb2RlIC4gZmFzdC1sb2NrLW1vZGUpICh0IC4gbGF6eS1sb2NrLW1vZGUpKQotbWVhbnMgdGhh dCBGYXN0IExvY2sgbW9kZSBpcyB1c2VkIHRvIHN1cHBvcnQgRm9udCBMb2NrIG1vZGUgZm9yIGJ1 ZmZlcnMgaW4gQyBvcgotQysrIG1vZGVzLCBhbmQgTGF6eSBMb2NrIG1vZGUgaXMgdXNlZCB0byBz dXBwb3J0IEZvbnQgTG9jayBtb2RlIG90aGVyd2lzZS4KKyAoKGMtbW9kZSAuIG5pbCkgKHQgLiBq aXQtbG9jay1tb2RlKSkKK21lYW5zIHRoYXQgbm8gZm9udCBsb2NraW5nIGlzIHVzZWQgZm9yIGJ1 ZmZlcnMgaW4gQyBvciwgYW5kIEppdAorTG9jayBtb2RlIGlzIHVzZWQgdG8gc3VwcG9ydCBGb250 IExvY2sgbW9kZSBvdGhlcndpc2UuCiAKIFRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIHVz ZWQgd2hlbiBGb250IExvY2sgbW9kZSBpcyB0dXJuZWQgb24uIgogICA6dHlwZSAnKGNob2ljZSAo Y29uc3QgOnRhZyAibm9uZSIgbmlsKQotCQkgKGNvbnN0IDp0YWcgImZhc3QgbG9jayIgZmFzdC1s b2NrLW1vZGUpCi0JCSAoY29uc3QgOnRhZyAibGF6eSBsb2NrIiBsYXp5LWxvY2stbW9kZSkKIAkJ IChjb25zdCA6dGFnICJqaXQgbG9jayIgaml0LWxvY2stbW9kZSkKIAkJIChyZXBlYXQgOm1lbnUt dGFnICJtb2RlIHNwZWNpZmljIiA6dGFnICJtb2RlIHNwZWNpZmljIgogCQkJIDp2YWx1ZSAoKHQg LiBqaXQtbG9jay1tb2RlKSkKQEAgLTkwNywyOCArODk3LDE1IEBAIGZvbnQtbG9jay1zdXBwb3J0 LW1vZGUKIAkJCQkgICAgICAoc3ltYm9sIDp0YWcgIm5hbWUiKSkKIAkJCSAgICAgICAocmFkaW8g OnRhZyAiU3VwcG9ydCIKIAkJCQkgICAgICAoY29uc3QgOnRhZyAibm9uZSIgbmlsKQotCQkJCSAg ICAgIChjb25zdCA6dGFnICJmYXN0IGxvY2siIGZhc3QtbG9jay1tb2RlKQotCQkJCSAgICAgIChj b25zdCA6dGFnICJsYXp5IGxvY2siIGxhenktbG9jay1tb2RlKQogCQkJCSAgICAgIChjb25zdCA6 dGFnICJKSVQgbG9jayIgaml0LWxvY2stbW9kZSkpKQogCQkJICkpCiAgIDp2ZXJzaW9uICIyMS4x IgogICA6Z3JvdXAgJ2ZvbnQtbG9jaykKIAotKGRlZnZhciBmYXN0LWxvY2stbW9kZSkKLShkZWZ2 YXIgbGF6eS1sb2NrLW1vZGUpCiAoZGVmdmFyIGppdC1sb2NrLW1vZGUpCiAKLShkZWNsYXJlLWZ1 bmN0aW9uIGZhc3QtbG9jay1hZnRlci1mb250aWZ5LWJ1ZmZlciAiZmFzdC1sb2NrIikKLShkZWNs YXJlLWZ1bmN0aW9uIGZhc3QtbG9jay1hZnRlci11bmZvbnRpZnktYnVmZmVyICJmYXN0LWxvY2si KQotKGRlY2xhcmUtZnVuY3Rpb24gZmFzdC1sb2NrLW1vZGUgImZhc3QtbG9jayIpCi0oZGVjbGFy ZS1mdW5jdGlvbiBsYXp5LWxvY2stYWZ0ZXItZm9udGlmeS1idWZmZXIgImxhenktbG9jayIpCi0o ZGVjbGFyZS1mdW5jdGlvbiBsYXp5LWxvY2stYWZ0ZXItdW5mb250aWZ5LWJ1ZmZlciAibGF6eS1s b2NrIikKLShkZWNsYXJlLWZ1bmN0aW9uIGxhenktbG9jay1tb2RlICJsYXp5LWxvY2siKQotCiAo ZGVmdW4gZm9udC1sb2NrLXR1cm4tb24tdGhpbmctbG9jayAoKQogICAocGNhc2UgKGZvbnQtbG9j ay12YWx1ZS1pbi1tYWpvci1tb2RlIGZvbnQtbG9jay1zdXBwb3J0LW1vZGUpCi0gICAgKCdmYXN0 LWxvY2stbW9kZSAoZmFzdC1sb2NrLW1vZGUgdCkpCi0gICAgKCdsYXp5LWxvY2stbW9kZSAobGF6 eS1sb2NrLW1vZGUgdCkpCiAgICAgKCdqaXQtbG9jay1tb2RlCiAgICAgIDs7IFByZXBhcmUgZm9y IGppdC1sb2NrCiAgICAgIChyZW1vdmUtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucwpAQCAt OTU0LDM3ICs5MzEsMjkgQEAgZm9udC1sb2NrLXR1cm4tb24tdGhpbmctbG9jawogICAgICAgICAg ICAgICAgbmlsIHQpKSkpCiAKIChkZWZ1biBmb250LWxvY2stdHVybi1vZmYtdGhpbmctbG9jayAo KQotICAoY29uZCAoKGJvdW5kLWFuZC10cnVlLXAgZmFzdC1sb2NrLW1vZGUpCi0JIChmYXN0LWxv Y2stbW9kZSAtMSkpCi0JKChib3VuZC1hbmQtdHJ1ZS1wIGppdC1sb2NrLW1vZGUpCisgIChjb25k ICgoYm91bmQtYW5kLXRydWUtcCBqaXQtbG9jay1tb2RlKQogCSAoaml0LWxvY2stdW5yZWdpc3Rl ciAnZm9udC1sb2NrLWZvbnRpZnktcmVnaW9uKQogCSA7OyBSZXNldCBsb2NhbCB2YXJzIHRvIHRo ZSBub24taml0LWxvY2sgY2FzZS4KLQkgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ2ZvbnQtbG9jay1m b250aWZ5LWJ1ZmZlci1mdW5jdGlvbikpCi0JKChib3VuZC1hbmQtdHJ1ZS1wIGxhenktbG9jay1t b2RlKQotCSAobGF6eS1sb2NrLW1vZGUgLTEpKSkpCisJIChraWxsLWxvY2FsLXZhcmlhYmxlICdm b250LWxvY2stZm9udGlmeS1idWZmZXItZnVuY3Rpb24pKSkpCiAKIChkZWZ1biBmb250LWxvY2st YWZ0ZXItZm9udGlmeS1idWZmZXIgKCkKLSAgKGNvbmQgKChib3VuZC1hbmQtdHJ1ZS1wIGZhc3Qt bG9jay1tb2RlKQotCSAoZmFzdC1sb2NrLWFmdGVyLWZvbnRpZnktYnVmZmVyKSkKLQk7OyBVc2Vs ZXNzIG5vdyB0aGF0IGppdC1sb2NrIGludGVyY2VwdHMgZm9udC1sb2NrLWZvbnRpZnktYnVmZmVy LiAgLXNtCi0JOzsgKGppdC1sb2NrLW1vZGUKLQk7OyAgKGppdC1sb2NrLWFmdGVyLWZvbnRpZnkt YnVmZmVyKSkKLQkoKGJvdW5kLWFuZC10cnVlLXAgbGF6eS1sb2NrLW1vZGUpCi0JIChsYXp5LWxv Y2stYWZ0ZXItZm9udGlmeS1idWZmZXIpKSkpCisgIChkZWNsYXJlIChvYnNvbGV0ZSAiZG9lcyBu b3RoaW5nLiIgIjI4LjEiKSkKKyAgOzsgVXNlbGVzcyBub3cgdGhhdCBqaXQtbG9jayBpbnRlcmNl cHRzIGZvbnQtbG9jay1mb250aWZ5LWJ1ZmZlci4gIC1zbQorICA7OyAoaml0LWxvY2stbW9kZQor ICA7OyAgKGppdC1sb2NrLWFmdGVyLWZvbnRpZnktYnVmZmVyKSkKKyAgKQogCiAoZGVmdW4gZm9u dC1sb2NrLWFmdGVyLXVuZm9udGlmeS1idWZmZXIgKCkKLSAgKGNvbmQgKChib3VuZC1hbmQtdHJ1 ZS1wIGZhc3QtbG9jay1tb2RlKQotCSAoZmFzdC1sb2NrLWFmdGVyLXVuZm9udGlmeS1idWZmZXIp KQotCTs7IFVzZWxlc3MgYXMgd2VsbC4gIEl0J3Mgb25seSBjYWxsZWQgd2hlbjoKLQk7OyAtIHR1 cm5pbmcgb2ZmIGZvbnQtbG9jazogaXQgZG9lcyBub3QgbWF0dGVyIGlmIHdlIGxlYXZlIHNwdXJp b3VzCi0JOzsgICBgZm9udGlmaWVkJyB0ZXh0IHByb3BzIGFyb3VuZCBzaW5jZSBqaXQtbG9jay1t b2RlIGlzIGFsc28gb2ZmLgotCTs7IC0gZm9udC1sb2NrLWRlZmF1bHQtZm9udGlmeS1idWZmZXIg ZmFpbHM6IHRoaXMgaXMgbm90IHJ1bgotCTs7ICAgYW55IG1vcmUgYW55d2F5LiAgIC1zbQotCTs7 Ci0JOzsgKGppdC1sb2NrLW1vZGUKLQk7OyAgKGppdC1sb2NrLWFmdGVyLXVuZm9udGlmeS1idWZm ZXIpKQotCSgoYm91bmQtYW5kLXRydWUtcCBsYXp5LWxvY2stbW9kZSkKLQkgKGxhenktbG9jay1h ZnRlci11bmZvbnRpZnktYnVmZmVyKSkpKQorICAoZGVjbGFyZSAob2Jzb2xldGUgImRvZXMgbm90 aGluZy4iICIyOC4xIikpCisgIDs7IFVzZWxlc3MgYXMgd2VsbC4gIEl0J3Mgb25seSBjYWxsZWQg d2hlbjoKKyAgOzsgLSB0dXJuaW5nIG9mZiBmb250LWxvY2s6IGl0IGRvZXMgbm90IG1hdHRlciBp ZiB3ZSBsZWF2ZSBzcHVyaW91cworICA7OyAgIGBmb250aWZpZWQnIHRleHQgcHJvcHMgYXJvdW5k IHNpbmNlIGppdC1sb2NrLW1vZGUgaXMgYWxzbyBvZmYuCisgIDs7IC0gZm9udC1sb2NrLWRlZmF1 bHQtZm9udGlmeS1idWZmZXIgZmFpbHM6IHRoaXMgaXMgbm90IHJ1bgorICA7OyAgIGFueSBtb3Jl IGFueXdheS4gICAtc20KKyAgOzsKKyAgOzsgKGppdC1sb2NrLW1vZGUKKyAgOzsgIChqaXQtbG9j ay1hZnRlci11bmZvbnRpZnktYnVmZmVyKSkKKyAgKQogCiA7OzsgRW5kIG9mIEZvbnQgTG9jayBT dXBwb3J0IG1vZGUuCiAMCkBAIC0xMTQxLDcgKzExMTAsNiBAQCBmb250LWxvY2stZGVmYXVsdC1m b250aWZ5LWJ1ZmZlcgogCSAgICAoc2F2ZS1leGN1cnNpb24KIAkgICAgICAoc2F2ZS1tYXRjaC1k YXRhCiAJCShmb250LWxvY2stZm9udGlmeS1yZWdpb24gKHBvaW50LW1pbikgKHBvaW50LW1heCkg dmVyYm9zZSkKLQkJKGZvbnQtbG9jay1hZnRlci1mb250aWZ5LWJ1ZmZlcikKIAkJKHNldHEgZm9u dC1sb2NrLWZvbnRpZmllZCB0KSkpCiAJICA7OyBXZSBkb24ndCByZXN0b3JlIHRoZSBvbGQgZm9u dGlmaWNhdGlvbiwgc28gaXQncyBiZXN0IHRvIHVuZm9udGlmeS4KIAkgIChxdWl0IChmb250LWxv Y2stdW5mb250aWZ5LWJ1ZmZlcikpKSkpKSkKQEAgLTExNTIsNyArMTEyMCw2IEBAIGZvbnQtbG9j ay1kZWZhdWx0LXVuZm9udGlmeS1idWZmZXIKICAgKHNhdmUtcmVzdHJpY3Rpb24KICAgICAod2lk ZW4pCiAgICAgKGZvbnQtbG9jay11bmZvbnRpZnktcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1t YXgpKQotICAgIChmb250LWxvY2stYWZ0ZXItdW5mb250aWZ5LWJ1ZmZlcikKICAgICAoc2V0cSBm b250LWxvY2stZm9udGlmaWVkIG5pbCkpKQogCiAoZGVmdmFyIGZvbnQtbG9jay1kb250LXdpZGVu IG5pbApkaWZmIC0tZ2l0IGEvbGlzcC9tYWlsL3JtYWlsLmVsIGIvbGlzcC9tYWlsL3JtYWlsLmVs CmluZGV4IDQ0Y2RlN2NiNWEuLmJiYzIyMGNmZDEgMTAwNjQ0Ci0tLSBhL2xpc3AvbWFpbC9ybWFp bC5lbAorKysgYi9saXNwL21haWwvcm1haWwuZWwKQEAgLTE1MTgsOCArMTUxOCw3IEBAIHJtYWls LXZhcmlhYmxlcwogCScocm1haWwtZm9udC1sb2NrLWtleXdvcmRzCiAJICB0IHQgbmlsIG5pbAog CSAgKGZvbnQtbG9jay1tYXhpbXVtLXNpemUgLiBuaWwpCi0gICAgICAgICAgKGZvbnQtbG9jay1k b250LXdpZGVuIC4gdCkKLQkgIChmb250LWxvY2staW5oaWJpdC10aGluZy1sb2NrIC4gKGxhenkt bG9jay1tb2RlIGZhc3QtbG9jay1tb2RlKSkpKQorICAgICAgICAgIChmb250LWxvY2stZG9udC13 aWRlbiAuIHQpKSkKICAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ3JlcXVpcmUtZmluYWwtbmV3bGlu ZSkKICAgKHNldHEgcmVxdWlyZS1maW5hbC1uZXdsaW5lIG5pbCkKICAgKG1ha2UtbG9jYWwtdmFy aWFibGUgJ3ZlcnNpb24tY29udHJvbCkKZGlmZiAtLWdpdCBhL2xpc3Avb2Jzb2xldGUvZmFzdC1s b2NrLmVsIGIvbGlzcC9vYnNvbGV0ZS9mYXN0LWxvY2suZWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDllMDE5OGRkNTkuLjAwMDAwMDAwMDAKLS0tIGEvbGlzcC9vYnNvbGV0ZS9mYXN0 LWxvY2suZWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NDEgKzAsMCBAQAotOzs7IGZhc3QtbG9jay5l bCAtLS0gYXV0b21hZ2ljIHRleHQgcHJvcGVydGllcyBjYWNoaW5nIGZvciBmYXN0IEZvbnQgTG9j ayBtb2RlCi0KLTs7IENvcHlyaWdodCAoQykgMTk5NC0xOTk4LCAyMDAxLTIwMjAgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLTs7IEF1dGhvcjogU2ltb24gTWFyc2hhbGwgPHNpbW9u QGdudS5vcmc+Ci07OyBNYWludGFpbmVyOiBlbWFjcy1kZXZlbEBnbnUub3JnCi07OyBLZXl3b3Jk czogZmFjZXMgZmlsZXMKLTs7IFZlcnNpb246IDMuMTQKLTs7IE9ic29sZXRlLXNpbmNlOiAyMi4x Ci0KLTs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBFbWFjcy4KLQotOzsgR05VIEVtYWNzIGlz IGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLTs7 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5Ci07OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KLQotOzsgR05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCi07OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotOzsgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotOzsgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLTs7IGFsb25nIHdp dGggR05VIEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KLQotOzs7IENvbW1lbnRhcnk6Ci0KLTs7IEZhc3QgTG9jayBtb2RlIGlzIGEgRm9udCBMb2Nr IHN1cHBvcnQgbW9kZS4KLTs7IEl0IG1ha2VzIHZpc2l0aW5nIGEgZmlsZSBpbiBGb250IExvY2sg bW9kZSBmYXN0ZXIgYnkgcmVzdG9yaW5nIGl0cyBmYWNlIHRleHQKLTs7IHByb3BlcnRpZXMgZnJv bSBhdXRvbWF0aWNhbGx5IHNhdmVkIGFzc29jaWF0ZWQgRm9udCBMb2NrIGNhY2hlIGZpbGVzLgot OzsKLTs7IFNlZSBjYXZlYXRzIGFuZCBmZWVkYmFjayBiZWxvdy4KLTs7IFNlZSBhbHNvIHRoZSBs YXp5LWxvY2sgcGFja2FnZS4gIChCdXQgZG9uJ3QgdXNlIHRoZSB0d28gYXQgdGhlIHNhbWUgdGlt ZSEpCi0KLTs7IEluc3RhbGxhdGlvbjoKLTs7Ci07OyBQdXQgaW4geW91ciB+Ly5lbWFjczoKLTs7 Ci07OyAoc2V0cSBmb250LWxvY2stc3VwcG9ydC1tb2RlICdmYXN0LWxvY2stbW9kZSkKLTs7Ci07 OyBTdGFydCB1cCBhIG5ldyBFbWFjcyBhbmQgdXNlIGZvbnQtbG9jayBhcyB1c3VhbCAoZXhjZXB0 IHRoYXQgeW91IGNhbiB1c2UgdGhlCi07OyBzby1jYWxsZWQgImdhdWRpZXIiIGZvbnRpZmljYXRp b24gcmVnZXhwcyBvbiBiaWcgZmlsZXMgd2l0aG91dCBmcnVzdHJhdGlvbikuCi07OwotOzsgV2hl biB5b3UgdmlzaXQgYSBmaWxlICh3aGljaCBoYXMgYGZvbnQtbG9jay1tb2RlJyBlbmFibGVkKSB0 aGF0IGhhcyBhCi07OyBjb3JyZXNwb25kaW5nIEZvbnQgTG9jayBjYWNoZSBmaWxlIGFzc29jaWF0 ZWQgd2l0aCBpdCwgdGhlIEZvbnQgTG9jayBjYWNoZQotOzsgd2lsbCBiZSBsb2FkZWQgZnJvbSB0 aGF0IGZpbGUgaW5zdGVhZCBvZiBiZWluZyBnZW5lcmF0ZWQgYnkgRm9udCBMb2NrIGNvZGUuCi0K LTs7IENhdmVhdHM6Ci07OwotOzsgQSBjYWNoZSB3aWxsIGJlIHNhdmVkIHdoZW4gdmlzaXRpbmcg YSBjb21wcmVzc2VkIGZpbGUgdXNpbmcgY3J5cHQrKywgYnV0IG5vdAotOzsgYmUgcmVhZC4gIFRo aXMgaXMgYSAiZmVhdHVyZSIvImNvbnNlcXVlbmNlIi8iYnVnIiBvZiBjcnlwdCsrLgotOzsKLTs7 IFZlcnNpb24gY29udHJvbCBwYWNrYWdlcyBhcmUgbGlrZWx5IHRvIHN0YW1wIGFsbCBvdmVyIGZp bGUgbW9kaWZpY2F0aW9uCi07OyB0aW1lcy4gIFRoZXJlZm9yZSB0aGUgYWN0IG9mIGNoZWNraW5n IG91dCBtYXkgaW52YWxpZGF0ZSBhIGNhY2hlLgotDAotOzsgSGlzdG9yeToKLTs7Ci07OyAwLjAy LS0xLjAwOgotOzsgLSBDaGFuZ2VkIG5hbWUgZnJvbSB0dXJiby1wcm9wIHRvIGZhc3QtbG9jay4g IEF1dG9tYWdpYyBmb3IgZm9udC1sb2NrIG9ubHkKLTs7IC0gTWFkZSBgZmFzdC1sb2NrLW1vZGUn IGEgbWlub3IgbW9kZSwgbGlrZSBHLiBEaW5lc2ggRHV0dCdzIGZzcy1tb2RlCi07OyAxLjAwLS0x LjAxOgotOzsgLSBUdXJuIG9uIGBmYXN0LWxvY2stbW9kZScgb25seSBpZiBgYnVmZmVyLWZpbGUt bmFtZScgb3IgYGludGVyYWN0aXZlLXAnCi07OyAtIE1hZGUgYGZhc3QtbG9jay1maWxlLW5hbWUn IHVzZSBgYnVmZmVyLW5hbWUnIGlmIGBidWZmZXItZmlsZS1uYW1lJyBpcyBuaWwKLTs7IC0gTW92 ZWQgc2F2ZS1hbGwgY29uZGl0aW9ucyB0byBgZmFzdC1sb2NrLXNhdmUtY2FjaGUnCi07OyAtIEFk ZGVkIGBmYXN0LWxvY2stc2F2ZS10ZXh0LXByb3BlcnRpZXMnIHRvIGBraWxsLWJ1ZmZlci1ob29r JwotOzsgMS4wMS0tMi4wMDogY29tcGxldGUgcmV3cml0ZS0tLW5vdCB3b3J0aCB0aGUgc3BhY2Ug dG8gZG9jdW1lbnQKLTs7IC0gQ2hhbmdlZCBzdHJ1Y3R1cmUgb2YgdGV4dCBwcm9wZXJ0aWVzIGNh Y2hlIGFuZCB0aHJldyBvdXQgZmlsZSBtb2QgY2hlY2tzCi07OyAyLjAwLS0yLjAxOgotOzsgLSBN YWRlIGBjb25kaXRpb24tY2FzZScgZm9ybXMgdW5kZXJzdGFuZCBgcXVpdCcuCi07OyAtIE1hZGUg YGZhc3QtbG9jaycgcmVxdWlyZSBgZm9udC1sb2NrJwotOzsgLSBNYWRlIGBmYXN0LWxvY2stY2Fj aGUtbmFtZScgY2hhc2UgbGlua3MgKGZyb20gQmVuIExpYmxpdCkKLTs7IDIuMDEtLTMuMDA6Ci07 OyAtIENoYW5nZWQgc3RydWN0dXJlIG9mIGNhY2hlIHRvIGluY2x1ZGUgYGZvbnQtbG9jay1rZXl3 b3JkcycgKGZyb20gcm1zKQotOzsgLSBDaGFuZ2VkIGBmYXN0LWxvY2stY2FjaGUtbWVjaGFuaXNt cycgdG8gYGZhc3QtbG9jay1jYWNoZS1kaXJlY3RvcmllcycKLTs7IC0gUmVtb3ZlZCBgZmFzdC1s b2NrLXJlYWQtb3RoZXJzJwotOzsgLSBNYWRlIGBmYXN0LWxvY2stcmVhZC1jYWNoZScgaWdub3Jl IGNhY2hlIG93bmVyCi07OyAtIE1hZGUgYGZhc3QtbG9jay1zYXZlLWNhY2hlLWV4dGVybmFsJyBj cmVhdGUgY2FjaGUgZGlyZWN0b3J5Ci07OyAtIE1hZGUgYGZhc3QtbG9jay1zYXZlLWNhY2hlLWV4 dGVybmFsJyBzYXZlIGBmb250LWxvY2sta2V5d29yZHMnCi07OyAtIE1hZGUgYGZhc3QtbG9jay1j YWNoZS1kYXRhJyBjaGVjayBgZm9udC1sb2NrLWtleXdvcmRzJwotOzsgMy4wMC0tMy4wMTogaW5j b3Jwb3JhdGVkIHBvcnQgb2YgMi4wMCB0byBMdWNpZCwgbWFkZSBieSBCYXJyeSBXYXJzYXcKLTs7 IC0gUGFja2FnZSBub3cgcHJvdmlkZXMgaXRzZWxmCi07OyAtIEx1Y2lkOiBVc2UgYGZvbnQtbG9j ay1hbnktZXh0ZW50cy1wJyBmb3IgYGZvbnQtbG9jay1hbnktcHJvcGVydGllcy1wJwotOzsgLSBM dWNpZDogVXNlIGBsaXN0LWZhY2VzJyBmb3IgYGZhY2UtbGlzdCcKLTs7IC0gTHVjaWQ6IEFkZGVk IGBzZXQtdGV4dC1wcm9wZXJ0aWVzJwotOzsgLSBMdWNpZDogTWFkZSBgdHVybi1vbi1mYXN0LWxv Y2snIHBhc3MgMSBub3QgdCB0byBgZmFzdC1sb2NrLW1vZGUnCi07OyAtIFJlbW92ZWQgdGVzdCBm b3IgYGZhc3QtbG9jay1tb2RlJyBmcm9tIGBmYXN0LWxvY2stcmVhZC1jYWNoZScKLTs7IC0gTHVj aWQ6IEFkZGVkIEx1Y2lkLXNwZWNpZmljIGBmYXN0LWxvY2stZ2V0LWZhY2UtcHJvcGVydGllcycK LTs7IDMuMDEtLTMuMDI6IG5vdyB3b3JrcyB3aXRoIEx1Y2lkIEVtYWNzLCB0aGFua3MgdG8gQmFy cnkgV2Fyc2F3Ci07OyAtIE1hZGUgYGZhc3QtbG9jay1jYWNoZS1uYW1lJyBtYXAgIjoiIHRvICI7 IiBmb3IgT1MvMiAoZnJvbSBTZXJnYW5vdmEgVmVyYSkKLTs7IC0gTWFkZSBgZmFzdC1sb2NrLWNh Y2hlLW5hbWUnIHVzZSBhYmJyZXZpYXRlZCBmaWxlIG5hbWUgKGZyb20gQmFycnkgV2Fyc2F3KQot OzsgLSBMdWNpZDogU2VwYXJhdGVkIGhhbmRsZXJzIGZvciBgZXJyb3InIGFuZCBgcXVpdCcgZm9y IGBjb25kaXRpb24tY2FzZScKLTs7IDMuMDItLTMuMDM6Ci07OyAtIENoYW5nZWQgYGZhc3QtbG9j ay1zYXZlLWNhY2hlLWV4dGVybmFsJyB0byBgZmFzdC1sb2NrLXNhdmUtY2FjaGUtZGF0YScKLTs7 IC0gTHVjaWQ6IEFkZGVkIEx1Y2lkLXNwZWNpZmljIGBmYXN0LWxvY2stc2V0LWZhY2UtcHJvcGVy dGllcycKLTs7IDMuMDMtLTMuMDQ6Ci07OyAtIENvcnJlY3RlZCBgc3VicnAnIHRlc3Qgb2YgTHVj aWQgY29kZQotOzsgLSBSZXBsYWNlZCBgZm9udC1sb2NrLWFueS1wcm9wZXJ0aWVzLXAnIHdpdGgg YHRleHQtcHJvcGVydHktbm90LWFsbCcKLTs7IC0gTHVjaWQ6IE1hZGUgYGZhc3QtbG9jay1zZXQt ZmFjZS1wcm9wZXJ0aWVzJyBwdXQgYHRleHQtcHJvcCcgb24gZXh0ZW50cwotOzsgLSBNYWRlIGBm YXN0LWxvY2stY2FjaGUtZGlyZWN0b3JpZXMnIGEgcmVnZXhwIGFsaXN0IChmcm9tIENvbGluIFJh ZmZlcnR5KQotOzsgLSBNYWRlIGBmYXN0LWxvY2stY2FjaGUtZGlyZWN0b3J5JyB0byByZXR1cm4g YSB1c2FibGUgY2FjaGUgZmlsZSBkaXJlY3RvcnkKLTs7IDMuMDQtLTMuMDU6Ci07OyAtIEx1Y2lk OiBGaXggZm9yIFhFbWFjcyAxOS4xMSBgdGV4dC1wcm9wZXJ0eS1ub3QtYWxsJwotOzsgLSBSZXBs YWNlZCBgc3VicnAnIHRlc3Qgb2YgTHVjaWQgY29kZSB3aXRoIGBlbWFjcy12ZXJzaW9uJyBgc3Ry aW5nLW1hdGNoJwotOzsgLSBNYWRlIGBieXRlLWNvbXBpbGUtd2FybmluZ3MnIG9taXQgYHVucmVz b2x2ZWQnIG9uIGNvbXBpbGF0aW9uCi07OyAtIE1hZGUgYGZhc3QtbG9jay1zYXZlLWNhY2hlLWRh dGEnIHVzZSBhIGJ1ZmZlciAoZnJvbSBSaWNrIFNsYWRrZXkpCi07OyAtIFJldmVydGVkIHRvIG9s ZCBgZmFzdC1sb2NrLWdldC1mYWNlLXByb3BlcnRpZXMnIChmcm9tIFJpY2sgU2xhZGtleSkKLTs7 IDMuMDUtLTMuMDY6IGluY29ycG9yYXRlZCBoYWNrIG9mIDMuMDMsIG1hZGUgYnkgSm9uYXRoYW4g U3RpZ2VsbWFuIChTdGlnKQotOzsgLSBSZXZlcnRlZCB0byAzLjA0IHZlcnNpb24gb2YgYGZhc3Qt bG9jay1nZXQtZmFjZS1wcm9wZXJ0aWVzJwotOzsgLSBYRW1hY3M6IFJlbW92ZWQgYGxpc3QtZmFj ZXMnIGBkZWZhbGlhcycKLTs7IC0gTWFkZSBgZmFzdC1sb2NrLW1vZGUnIGFuZCBgdHVybi1vbi1m YXN0LWxvY2snIHN1Y2NlZWQgYGF1dG9sb2FkJyBjb29raWVzCi07OyAtIEFkZGVkIGBmYXN0LWxv Y2stc3VibWl0LWJ1Zy1yZXBvcnQnCi07OyAtIFJlbmFtZWQgYGZhc3QtbG9jay1zYXZlLXNpemUn IHRvIGBmYXN0LWxvY2stbWluaW11bS1zaXplJwotOzsgLSBNYWRlIGBmYXN0LWxvY2stc2F2ZS1j YWNoZScgb3V0cHV0IGEgbWVzc2FnZSBpZiBubyBzYXZlIGV2ZXIgYXR0ZW1wdGVkCi07OyAtIE1h ZGUgYGZhc3QtbG9jay1zYXZlLWNhY2hlLWRhdGEnIG91dHB1dCBhIG1lc3NhZ2UgaWYgc2F2ZSBh dHRlbXB0ZWQKLTs7IC0gTWFkZSBgZmFzdC1sb2NrLWNhY2hlLWRhdGEnIG91dHB1dCBhIG1lc3Nh Z2UgaWYgbG9hZCBhdHRlbXB0ZWQKLTs7IC0gTWFkZSBgZmFzdC1sb2NrLXNhdmUtY2FjaGUtZGF0 YScgZG8gYGNvbmRpdGlvbi1jYXNlJyBub3QgYHVud2luZC1wcm90ZWN0JwotOzsgLSBNYWRlIGBm YXN0LWxvY2stc2F2ZS1jYWNoZScgYW5kIGBmYXN0LWxvY2stcmVhZC1jYWNoZScgcmV0dXJuIG5v dGhpbmcKLTs7IC0gTWFkZSBgZmFzdC1sb2NrLXNhdmUtY2FjaGUnIGNoZWNrIGBidWZmZXItbW9k aWZpZWQtcCcgKFN0aWcpCi07OyAtIEFkZGVkIGBmYXN0LWxvY2stc2F2ZS1ldmVudHMnCi07OyAt IEFkZGVkIGBmYXN0LWxvY2stYWZ0ZXItc2F2ZS1ob29rJyB0byBgYWZ0ZXItc2F2ZS1ob29rJyAo U3RpZykKLTs7IC0gQWRkZWQgYGZhc3QtbG9jay1raWxsLWJ1ZmZlci1ob29rJyB0byBga2lsbC1i dWZmZXItaG9vaycKLTs7IC0gQ2hhbmdlZCBgZmFzdC1sb2NrLXNhdmUtY2FjaGVzJyB0byBgZmFz dC1sb2NrLWtpbGwtZW1hY3MtaG9vaycKLTs7IC0gQWRkZWQgYGZhc3QtbG9jay1raWxsLWVtYWNz LWhvb2snIHRvIGBraWxsLWVtYWNzLWhvb2snCi07OyAtIE1hZGUgYGZhc3QtbG9jay1zYXZlLWNh Y2hlJyBjaGVjayBgdmVyaWZ5LXZpc2l0ZWQtZmlsZS1tb2R0aW1lJyAoU3RpZykKLTs7IC0gTWFk ZSBgdmlzaXRlZC1maWxlLW1vZHRpbWUnIGJlIHRoZSBiYXNpcyBvZiB0aGUgdGltZXN0YW1wIChT dGlnKQotOzsgLSBNYWRlIGBmYXN0LWxvY2stc2F2ZS1jYWNoZS0xJyBhbmQgYGZhc3QtbG9jay1j YWNoZS1kYXRhJyB1c2UvcmVmb3JtYXQgaXQKLTs7IC0gQWRkZWQgYGZhc3QtbG9jay1jYWNoZS1m aWxlbmFtZScgdG8ga2VlcCB0cmFjayBvZiB0aGUgY2FjaGUgZmlsZSBuYW1lCi07OyAtIEFkZGVk IGBmYXN0LWxvY2stYWZ0ZXItZm9udGlmeS1idWZmZXInCi07OyAtIEFkZGVkIGBmYXN0LWxvY2st c2F2ZS1mYWNlcycgbGlzdCBvZiBmYWNlcyB0byBzYXZlIChpZGVhIGZyb20gU3RpZy9UaWJvcikK LTs7IC0gTWFkZSBgZmFzdC1sb2NrLWdldC1mYWNlLXByb3BlcnRpZXMnIGZ1bmN0aW9ucyB1c2Ug aXQKLTs7IC0gWEVtYWNzOiBNYWRlIGBmYXN0LWxvY2stc2V0LWZhY2UtcHJvcGVydGllcycgZG8g ZXh0ZW50cyB0aGUgRm9udCBMb2NrIHdheQotOzsgLSBYRW1hY3M6IFJlbW92ZWQgZml4IGZvciBg dGV4dC1wcm9wZXJ0eS1ub3QtYWxsJyAoMTkuMTEgc3VwcG9ydCBkcm9wcGVkKQotOzsgLSBNYWRl IGBmYXN0LWxvY2stbW9kZScgZW5zdXJlIGBmb250LWxvY2stbW9kZScgaXMgb24KLTs7IC0gTWFk ZSBgZmFzdC1sb2NrLXNhdmUtY2FjaGUnIGRvIGBjZHItc2FmZScgbm90IGBjZHInIChmcm9tIERh dmUgRm9zdGVyKQotOzsgLSBNYWRlIGBmYXN0LWxvY2stc2F2ZS1jYWNoZScgZG8gYHNldC1idWZm ZXInIGZpcnN0IChmcm9tIERhdmUgRm9zdGVyKQotOzsgLSBNYWRlIGBmYXN0LWxvY2stc2F2ZS1j YWNoZScgbG9vcCB1bnRpbCBzYXZlZCBvciBxdWl0IChmcm9tIEdlb3JnIE5pa29keW0pCi07OyAt IE1hZGUgYGZhc3QtbG9jay1jYWNoZS1kYXRhJyBjaGVjayBgYnVmZmVyLW1vZGlmaWVkLXAnCi07 OyAtIE1hZGUgYGZhc3QtbG9jay1jYWNoZS1kYXRhJyBkbyBgZm9udC1sb2NrLWNvbXBpbGUta2V5 d29yZHMnIGlmIG5lY2Vzc2FyeQotOzsgLSBYRW1hY3M6IE1hZGUgYGZvbnQtbG9jay1jb21waWxl LWtleXdvcmRzJyBgZGVmYWxpYXMnCi07OyAzLjA2LS0zLjA3OgotOzsgLSBYRW1hY3M6IEFkZCBg ZmFzdC1sb2NrLWFmdGVyLWZvbnRpZnktYnVmZmVyJyB0byB0aGUgRm9udCBMb2NrIGhvb2sKLTs7 IC0gTWFkZSBgZmFzdC1sb2NrLWNhY2hlLW5hbWUnIGV4cGxhaW4gdGhlIHVzZSBvZiBgZGlyZWN0 b3J5LWFiYnJldi1hbGlzdCcKLTs7IC0gTWFkZSBgZmFzdC1sb2NrLW1vZGUnIHVzZSBgYnVmZmVy LWZpbGUtdHJ1ZW5hbWUnIG5vdCBgYnVmZmVyLWZpbGUtbmFtZScKLTs7IDMuMDctLTMuMDg6Ci07 OyAtIE1hZGUgYGZhc3QtbG9jay1yZWFkLWNhY2hlJyBzZXQgYGZhc3QtbG9jay1jYWNoZS1maWxl bmFtZScKLTs7IDMuMDgtLTMuMDk6Ci07OyAtIE1hZGUgYGZhc3QtbG9jay1zYXZlLWNhY2hlJyBj b3BlIGlmIGBmYXN0LWxvY2stbWluaW11bS1zaXplJyBpcyBhIGxpc3QKLTs7IC0gTWFkZSBgZmFz dC1sb2NrLW1vZGUnIHJlc3BlY3QgdGhlIHZhbHVlIG9mIGBmb250LWxvY2staW5oaWJpdC10aGlu Zy1sb2NrJwotOzsgLSBBZGRlZCBgZmFzdC1sb2NrLWFmdGVyLXVuZm9udGlmeS1idWZmZXInCi07 OyAzLjA5LS0zLjEwOgotOzsgLSBSZXdyaXRlIGZvciBDb21tb24gTGlzcCBtYWNyb3MKLTs7IC0g TWFkZSBmYXN0LWxvY2suZWwgYmFyZiBvbiBhIGNyYXAgOCszIHBzZXVkby1PUyAoRWxpIFphcmV0 c2tpaSBoZWxwKQotOzsgLSBYRW1hY3M6IE1hZGUgYGFkZC1taW5vci1tb2RlJyBzdWNjZWVkIGBh dXRvbG9hZCcgY29va2llCi07OyAtIFhFbWFjczogTWFkZSBgZmFzdC1sb2NrLXNhdmUtZmFjZXMn IGRlZmF1bHQgdG8gYGZvbnQtbG9jay1mYWNlLWxpc3QnCi07OyAtIE1hZGUgYGZhc3QtbG9jay1z YXZlLWNhY2hlJyB1c2UgYGZvbnQtbG9jay12YWx1ZS1pbi1tYWpvci1tb2RlJwotOzsgLSBXcmFw IHdpdGggYHNhdmUtYnVmZmVyLXN0YXRlJyAoUmF5IFZhbiBUYXNzbGUgcmVwb3J0KQotOzsgLSBN YWRlIGBmYXN0LWxvY2stbW9kZScgd3JhcCBgZm9udC1sb2NrLXN1cHBvcnQtbW9kZScKLTs7IDMu MTAtLTMuMTE6Ci07OyAtIE1hZGUgYGZhc3QtbG9jay1nZXQtZmFjZS1wcm9wZXJ0aWVzJyBjb3Bl IHdpdGggZmFjZSBsaXN0cwotOzsgLSBBZGRlZCBgZmFzdC1sb2NrLXZlcmJvc2UnCi07OyAtIFhF bWFjczogQWRkIGBmb250LWxvY2stdmFsdWUtaW4tbWFqb3ItbW9kZScgaWYgbmVjZXNzYXJ5Ci07 OyAtIFJlbW92ZWQgYGZhc3QtbG9jay1zdWJtaXQtYnVnLXJlcG9ydCcgYW5kIGJhZGUgZmFyZXdl bGwKLTs7IDMuMTEtLTMuMTI6Ci07OyAtIEFkZGVkIEN1c3RvbSBzdXBwb3J0IChIcnZvamUgTmlr xaFpxIcgaGVscCkKLTs7IC0gTWFkZSBgc2F2ZS1idWZmZXItc3RhdGUnIHdyYXAgYGluaGliaXQt cG9pbnQtbW90aW9uLWhvb2tzJwotOzsgLSBNYWRlIGBmYXN0LWxvY2stY2FjaGUtZGF0YScgc2lt cGxpZnkgY2FsbHMgb2YgYGZvbnQtbG9jay1jb21waWxlLWtleXdvcmRzJwotOzsgMy4xMi0tMy4x MzoKLTs7IC0gUmVtb3ZlZCBgYnl0ZS0qJyB2YXJpYWJsZXMgZnJvbSBgZXZhbC13aGVuLWNvbXBp bGUnIChFcmlrIE5hZ2d1bSBoaW50KQotOzsgLSBDaGFuZ2VkIHN0cnVjdHVyZSBvZiBjYWNoZSB0 byBpbmNsdWRlIGBmb250LWxvY2stc3ludGFjdGljLWtleXdvcmRzJwotOzsgLSBNYWRlIGBmYXN0 LWxvY2stc2F2ZS1jYWNoZS0xJyBzYXZlIHN5bnRhY3RpYyBmb250aWZpY2F0aW9uIGRhdGEKLTs7 IC0gTWFkZSBgZmFzdC1sb2NrLWNhY2hlLWRhdGEnIHRha2Ugc3ludGFjdGljIGZvbnRpZmljYXRp b24gZGF0YQotOzsgLSBBZGRlZCBgZmFzdC1sb2NrLWdldC1zeW50YWN0aWMtcHJvcGVydGllcycK LTs7IC0gUmVuYW1lZCBgZmFzdC1sb2NrLXNldC1mYWNlLXByb3BlcnRpZXMnIHRvIGBmYXN0LWxv Y2stYWRkLXByb3BlcnRpZXMnCi07OyAtIE1hZGUgYGZhc3QtbG9jay1hZGQtcHJvcGVydGllcycg YWRkIHN5bnRhY3RpYyBhbmQgZmFjZSBmb250aWZpY2F0aW9uIGRhdGEKLTs7IDMuMTMtLTMuMTQ6 Ci07OyAtIE1hZGUgYGZhc3QtbG9jay1jYWNoZS1uYW1lJyBjb3BlIHdpdGggYHdpbmRvd3NudCcg KEdlb2ZmIFZvZWxrZXIgZml4KQotOzsgLSBNYWRlIGBmYXN0LWxvY2stdmVyYm9zZScgdXNlIGBv dGhlcicgd2lkZ2V0IChBbmRyZWFzIFNjaHdhYiBmaXgpCi07OyAtIFVzZWQgYHdpdGgtdGVtcC1t ZXNzYWdlJyB3aGVyZSBwb3NzaWJsZSB0byBtYWtlIG1lc3NhZ2VzIHRlbXBvcmFyeS4KLQwKLTs7 OyBDb2RlOgotCi0ocmVxdWlyZSAnZm9udC1sb2NrKQotCi0oZGVjbGFyZS1mdW5jdGlvbiBtc2Rv cy1sb25nLWZpbGUtbmFtZXMgIm1zZG9zLmMiKQotCi07OyBNYWtlIHN1cmUgZmFzdC1sb2NrLmVs IGlzIHN1cHBvcnRlZC4KLShpZiAoYW5kIChlcSBzeXN0ZW0tdHlwZSAnbXMtZG9zKSAobm90ICht c2Rvcy1sb25nLWZpbGUtbmFtZXMpKSkKLSAgICAoZXJyb3IgImBmYXN0LWxvY2snIHdhcyB3cml0 dGVuIGZvciBsb25nIGZpbGUgbmFtZSBzeXN0ZW1zIikpCi0KLShkZWZ2YXIgZm9udC1sb2NrLWZh Y2UtbGlzdCkKLQotKGV2YWwtd2hlbi1jb21waWxlCi0gOzsgV2UgdXNlIHRoaXMgdG8gcHJlc2Vy dmUgb3IgcHJvdGVjdCB0aGluZ3Mgd2hlbiBtb2RpZnlpbmcgdGV4dCBwcm9wZXJ0aWVzLgotIChk ZWZtYWNybyBzYXZlLWJ1ZmZlci1zdGF0ZSAodmFybGlzdCAmcmVzdCBib2R5KQotICAgIkJpbmQg dmFyaWFibGVzIGFjY29yZGluZyB0byBWQVJMSVNUIGFuZCBldmFsIEJPRFkgcmVzdG9yaW5nIGJ1 ZmZlciBzdGF0ZS4iCi0gICBgKGxldCogKCxAKGFwcGVuZCB2YXJsaXN0Ci0gICAgICAgICAgICAg ICAgICAgICAnKChtb2RpZmllZCAoYnVmZmVyLW1vZGlmaWVkLXApKSAoYnVmZmVyLXVuZG8tbGlz dCB0KQotICAgICAgICAgICAgICAgICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkgdCkgKGluaGli aXQtcG9pbnQtbW90aW9uLWhvb2tzIHQpCi0gICAgICAgICAgICAgICAgICAgICAgIChpbmhpYml0 LW1vZGlmaWNhdGlvbi1ob29rcyB0KQotICAgICAgICAgICAgICAgICAgICAgICBkZWFjdGl2YXRl LW1hcmsgYnVmZmVyLWZpbGUtbmFtZSBidWZmZXItZmlsZS10cnVlbmFtZSkpKQotICAgICAsQGJv ZHkKLSAgICAgKHdoZW4gKGFuZCAobm90IG1vZGlmaWVkKSAoYnVmZmVyLW1vZGlmaWVkLXApKQot ICAgICAgIChzZXQtYnVmZmVyLW1vZGlmaWVkLXAgbmlsKSkpKQotIChwdXQgJ3NhdmUtYnVmZmVy LXN0YXRlICdsaXNwLWluZGVudC1mdW5jdGlvbiAxKQotIDs7Ci0gOzsgV2UgdXNlIHRoaXMgdG8g dmVyaWZ5IHRoYXQgYSBmYWNlIHNob3VsZCBiZSBzYXZlZC4KLSAoZGVmbWFjcm8gZmFzdC1sb2Nr LXNhdmUtZmFjZXAgKGZhY2UpCi0gICAiUmV0dXJuIG5vbi1uaWwgaWYgRkFDRSBpcyBvbmUgb2Yg YGZhc3QtbG9jay1zYXZlLWZhY2VzJy4iCi0gICBgKG9yIChudWxsIGZhc3QtbG9jay1zYXZlLWZh Y2VzKQotICAgICAoaWYgKHN5bWJvbHAgLGZhY2UpCi0gICAgICAgICAobWVtcSAsZmFjZSBmYXN0 LWxvY2stc2F2ZS1mYWNlcykKLSAgICAgICAgIChsZXQgKChmYWNlcyAsZmFjZSkpCi0gICAgICAg ICAgICh3aGlsZSAodW5sZXNzIChtZW1xIChjYXIgZmFjZXMpIGZhc3QtbG9jay1zYXZlLWZhY2Vz KQotICAgICAgICAgICAgICAgICAgICAoc2V0cSBmYWNlcyAoY2RyIGZhY2VzKSkpKQotICAgICAg ICAgICBmYWNlcykpKSkpCi0KLShkZWZncm91cCBmYXN0LWxvY2sgbmlsCi0gICJGb250IExvY2sg c3VwcG9ydCBtb2RlIHRvIGNhY2hlIGZvbnRpZmljYXRpb24uIgotICA6bG9hZCAnZmFzdC1sb2Nr Ci0gIDpncm91cCAnZm9udC1sb2NrKQotCi0oZGVmdmFyIGZhc3QtbG9jay1tb2RlIG5pbCkJCTsg V2hldGhlciB3ZSBhcmUgdHVybmVkIG9uLgotKGRlZnZhciBmYXN0LWxvY2stY2FjaGUtdGltZXN0 YW1wIG5pbCkJOyBGb3Igc2F2aW5nL3JlYWRpbmcuCi0oZGVmdmFyIGZhc3QtbG9jay1jYWNoZS1m aWxlbmFtZSBuaWwpCTsgRm9yIGRlbGV0aW5nLgotDAotOzsgVXNlciBWYXJpYWJsZXM6Ci0KLShk ZWZjdXN0b20gZmFzdC1sb2NrLW1pbmltdW0tc2l6ZSAyNTYwMAotICAiTWluaW11bSBzaXplIG9m IGEgYnVmZmVyIGZvciBjYWNoZWQgZm9udGlmaWNhdGlvbi4KLU9ubHkgYnVmZmVycyBtb3JlIHRo YW4gdGhpcyBjYW4gaGF2ZSBhc3NvY2lhdGVkIEZvbnQgTG9jayBjYWNoZSBmaWxlcyBzYXZlZC4K LUlmIG5pbCwgbWVhbnMgY2FjaGUgZmlsZXMgYXJlIG5ldmVyIGNyZWF0ZWQuCi1JZiBhIGxpc3Qs IGVhY2ggZWxlbWVudCBzaG91bGQgYmUgYSBjb25zIHBhaXIgb2YgdGhlIGZvcm0gKE1BSk9SLU1P REUgLiBTSVpFKSwKLXdoZXJlIE1BSk9SLU1PREUgaXMgYSBzeW1ib2wgb3IgdCAobWVhbmluZyB0 aGUgZGVmYXVsdCkuICBGb3IgZXhhbXBsZToKLSAoKGMtbW9kZSAuIDI1NjAwKSAoYysrLW1vZGUg LiAyNTYwMCkgKHJtYWlsLW1vZGUgLiAxMDQ4NTc2KSkKLW1lYW5zIHRoYXQgdGhlIG1pbmltdW0g c2l6ZSBpcyAyNUsgZm9yIGJ1ZmZlcnMgaW4gQyBvciBDKysgbW9kZXMsIG9uZSBtZWdhYnl0ZQot Zm9yIGJ1ZmZlcnMgaW4gUm1haWwgbW9kZSwgYW5kIHNpemUgaXMgaXJyZWxldmFudCBvdGhlcndp c2UuIgotICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRhZyAibm9uZSIgbmlsKQotCQkgKGludGVn ZXIgOnRhZyAic2l6ZSIpCi0JCSAocmVwZWF0IDptZW51LXRhZyAibW9kZSBzcGVjaWZpYyIgOnRh ZyAibW9kZSBzcGVjaWZpYyIKLQkJCSA6dmFsdWUgKCh0IC4gbmlsKSkKLQkJCSAoY29ucyA6dGFn ICJJbnN0YW5jZSIKLQkJCSAgICAgICAocmFkaW8gOnRhZyAiTW9kZSIKLQkJCQkgICAgICAoY29u c3QgOnRhZyAiYWxsIiB0KQotCQkJCSAgICAgIChzeW1ib2wgOnRhZyAibmFtZSIpKQotCQkJICAg ICAgIChyYWRpbyA6dGFnICJTaXplIgotCQkJCSAgICAgIChjb25zdCA6dGFnICJub25lIiBuaWwp Ci0JCQkJICAgICAgKGludGVnZXIgOnRhZyAic2l6ZSIpKSkpKQotICA6Z3JvdXAgJ2Zhc3QtbG9j aykKLQotKGRlZmN1c3RvbSBmYXN0LWxvY2stY2FjaGUtZGlyZWN0b3JpZXMgJygifi8uZW1hY3Mt ZmxjIikKLTsgLSBgaW50ZXJuYWwnLCBrZWVwIGVhY2ggZmlsZSdzIEZvbnQgTG9jayBjYWNoZSBm aWxlIGluIHRoZSBzYW1lIGZpbGUuCi07IC0gYGV4dGVybmFsJywga2VlcCBlYWNoIGZpbGUncyBG b250IExvY2sgY2FjaGUgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCi0gICJEaXJlY3Rvcmll cyBpbiB3aGljaCBGb250IExvY2sgY2FjaGUgZmlsZXMgYXJlIHNhdmVkIGFuZCByZWFkLgotRWFj aCBpdGVtIHNob3VsZCBiZSBlaXRoZXIgRElSIG9yIGEgY29ucyBwYWlyIG9mIHRoZSBmb3JtIChS RUdFWFAgLiBESVIpIHdoZXJlCi1ESVIgaXMgYSBkaXJlY3RvcnkgbmFtZSAocmVsYXRpdmUgb3Ig YWJzb2x1dGUpIGFuZCBSRUdFWFAgaXMgYSByZWdleHAuCi0KLUFuIGF0dGVtcHQgd2lsbCBiZSBt YWRlIHRvIHNhdmUgb3IgcmVhZCBGb250IExvY2sgY2FjaGUgZmlsZXMgdXNpbmcgdGhlc2UgaXRl bXMKLXVudGlsIG9uZSBzdWNjZWVkcyAoaS5lLiwgdW50aWwgYSByZWFkYWJsZSBvciB3cml0YWJs ZSBvbmUgaXMgZm91bmQpLiAgSWYgYW4KLWl0ZW0gY29udGFpbnMgUkVHRVhQLCBESVIgaXMgdXNl ZCBvbmx5IGlmIHRoZSBidWZmZXIgZmlsZSBuYW1lIG1hdGNoZXMgUkVHRVhQLgotRm9yIGV4YW1w bGU6Ci0KLSAobGV0ICgoaG9tZSAoZXhwYW5kLWZpbGUtbmFtZSAoYWJicmV2aWF0ZS1maWxlLW5h bWUgKGZpbGUtdHJ1ZW5hbWUgXCJ+L1wiKSkpKSkKLSAgIChsaXN0IChjb25zIChjb25jYXQgXCJe XCIgKHJlZ2V4cC1xdW90ZSBob21lKSkgXCIuXCIpIFwifi8uZW1hY3MtZmxjXCIpKQotICAgID0+ Ci0gKChcIl4veW91ci90cnVlL2hvbWUvZGlyZWN0b3J5L1wiIC4gXCIuXCIpIFwifi8uZW1hY3Mt ZmxjXCIpCi0KLXdvdWxkIGNhdXNlIGEgZmlsZSdzIGN1cnJlbnQgZGlyZWN0b3J5IHRvIGJlIHVz ZWQgaWYgdGhlIGZpbGUgaXMgdW5kZXIgeW91cgotaG9tZSBkaXJlY3RvcnkgaGllcmFyY2h5LCBv ciBvdGhlcndpc2UgdGhlIGFic29sdXRlIGRpcmVjdG9yeSBgfi8uZW1hY3MtZmxjJy4KLUZvciBz ZWN1cml0eSByZWFzb25zLCBpdCBpcyBub3QgYWR2aXNhYmxlIHRvIHVzZSB0aGUgZmlsZSdzIGN1 cnJlbnQgZGlyZWN0b3J5Ci10byBhdm9pZCB0aGUgcG9zc2liaWxpdHkgb2YgdXNpbmcgdGhlIGNh Y2hlIG9mIGFub3RoZXIgdXNlci4iCi0gIDp0eXBlICcocmVwZWF0IChyYWRpbyAoZGlyZWN0b3J5 IDp0YWcgImRpcmVjdG9yeSIpCi0JCQkoY29ucyA6dGFnICJNYXRjaGluZyIKLQkJCSAgICAgIChy ZWdleHAgOnRhZyAicmVnZXhwIikKLQkJCSAgICAgIChkaXJlY3RvcnkgOnRhZyAiZGlyZWN0b3J5 IikpKSkKLSAgOmdyb3VwICdmYXN0LWxvY2spCi0ocHV0ICdmYXN0LWxvY2stY2FjaGUtZGlyZWN0 b3JpZXMgJ3Jpc2t5LWxvY2FsLXZhcmlhYmxlIHQpCi0KLShkZWZjdXN0b20gZmFzdC1sb2NrLXNh dmUtZXZlbnRzICcoa2lsbC1idWZmZXIga2lsbC1lbWFjcykKLSAgIkV2ZW50cyB1bmRlciB3aGlj aCBjYWNoZXMgd2lsbCBiZSBzYXZlZC4KLVZhbGlkIGV2ZW50cyBhcmUgYHNhdmUtYnVmZmVyJywg YGtpbGwtYnVmZmVyJyBhbmQgYGtpbGwtZW1hY3MnLgotSWYgY29uY3VycmVudCBlZGl0aW5nIHNl c3Npb25zIHVzZSB0aGUgc2FtZSBhc3NvY2lhdGVkIGNhY2hlIGZpbGUgZm9yIGEgZmlsZSdzCi1i dWZmZXIsIHRoZW4geW91IHNob3VsZCBhZGQgYHNhdmUtYnVmZmVyJyB0byB0aGlzIGxpc3QuIgot ICA6dHlwZSAnKHNldCAoY29uc3QgOnRhZyAiYnVmZmVyIHNhdmluZyIgc2F2ZS1idWZmZXIpCi0J ICAgICAgKGNvbnN0IDp0YWcgImJ1ZmZlciBraWxsaW5nIiBraWxsLWJ1ZmZlcikKLQkgICAgICAo Y29uc3QgOnRhZyAiZW1hY3Mga2lsbGluZyIga2lsbC1lbWFjcykpCi0gIDpncm91cCAnZmFzdC1s b2NrKQotCi0oZGVmY3VzdG9tIGZhc3QtbG9jay1zYXZlLW90aGVycyB0Ci0gICJJZiBub24tbmls LCBzYXZlIEZvbnQgTG9jayBjYWNoZSBmaWxlcyBpcnJlc3BlY3RpdmUgb2YgZmlsZSBvd25lci4K LUlmIG5pbCwgbWVhbnMgb25seSBidWZmZXIgZmlsZXMga25vd24gdG8gYmUgb3duZWQgYnkgeW91 IGNhbiBoYXZlIGFzc29jaWF0ZWQKLUZvbnQgTG9jayBjYWNoZSBmaWxlcyBzYXZlZC4gIE93bmVy c2hpcCBtYXkgYmUgdW5rbm93biBmb3IgbmV0d29ya2VkIGZpbGVzLiIKLSAgOnR5cGUgJ2Jvb2xl YW4KLSAgOmdyb3VwICdmYXN0LWxvY2spCi0KLShkZWZjdXN0b20gZmFzdC1sb2NrLXZlcmJvc2Ug Zm9udC1sb2NrLXZlcmJvc2UKLSAgIklmIG5vbi1uaWwsIG1lYW5zIHNob3cgc3RhdHVzIG1lc3Nh Z2VzIGZvciBjYWNoZSBwcm9jZXNzaW5nLgotSWYgYSBudW1iZXIsIG9ubHkgYnVmZmVycyBncmVh dGVyIHRoYW4gdGhpcyBzaXplIGhhdmUgcHJvY2Vzc2luZyBtZXNzYWdlcy4iCi0gIDp0eXBlICco Y2hvaWNlIChjb25zdCA6dGFnICJuZXZlciIgbmlsKQotCQkgKG90aGVyIDp0YWcgImFsd2F5cyIg dCkKLQkJIChpbnRlZ2VyIDp0YWcgInNpemUiKSkKLSAgOmdyb3VwICdmYXN0LWxvY2spCi0KLShk ZWZ2YXIgZmFzdC1sb2NrLXNhdmUtZmFjZXMKLSAgKHdoZW4gKGZlYXR1cmVwICd4ZW1hY3MpCi0g ICAgOzsgWEVtYWNzIHVzZXMgZXh0ZW50cyBmb3IgZXZlcnl0aGluZywgc28gd2UgaGF2ZSB0byBw aWNrIHRoZSByaWdodCBvbmVzLgotICAgIGZvbnQtbG9jay1mYWNlLWxpc3QpCi0gICJGYWNlcyB0 aGF0IHdpbGwgYmUgc2F2ZWQgaW4gYSBGb250IExvY2sgY2FjaGUgZmlsZS4KLUlmIG5pbCwgbWVh bnMgaW5mb3JtYXRpb24gZm9yIGFsbCBmYWNlcyB3aWxsIGJlIHNhdmVkLiIpCi0MCi07OyBVc2Vy IEZ1bmN0aW9uczoKLQotOzs7IyMjYXV0b2xvYWQKLShkZWZ1biBmYXN0LWxvY2stbW9kZSAoJm9w dGlvbmFsIGFyZykKLSAgIlRvZ2dsZSBGYXN0IExvY2sgbW9kZS4KLVdpdGggYXJnLCB0dXJuIEZh c3QgTG9jayBtb2RlIG9uIGlmIGFuZCBvbmx5IGlmIGFyZyBpcyBwb3NpdGl2ZSBhbmQgdGhlIGJ1 ZmZlcgotaXMgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZS4gIEVuYWJsZSBpdCBhdXRvbWF0aWNhbGx5 IGluIHlvdXIgYH4vLmVtYWNzJyBieToKLQotIChzZXRxIGZvbnQtbG9jay1zdXBwb3J0LW1vZGUg XFw9J2Zhc3QtbG9jay1tb2RlKQotCi1JZiBGYXN0IExvY2sgbW9kZSBpcyBlbmFibGVkLCBhbmQg dGhlIGN1cnJlbnQgYnVmZmVyIGRvZXMgbm90IGNvbnRhaW4gYW55IHRleHQKLXByb3BlcnRpZXMs IGFueSBhc3NvY2lhdGVkIEZvbnQgTG9jayBjYWNoZSBpcyB1c2VkIGlmIGl0cyB0aW1lc3RhbXAg bWF0Y2hlcyB0aGUKLWJ1ZmZlcidzIGZpbGUsIGFuZCBpdHMgYGZvbnQtbG9jay1rZXl3b3Jkcycg bWF0Y2ggdGhvc2UgdGhhdCB5b3UgYXJlIHVzaW5nLgotCi1Gb250IExvY2sgY2FjaGVzIG1heSBi ZSBzYXZlZDoKLS0gV2hlbiB5b3Ugc2F2ZSB0aGUgZmlsZSdzIGJ1ZmZlci4KLS0gV2hlbiB5b3Ug a2lsbCBhbiB1bm1vZGlmaWVkIGZpbGUncyBidWZmZXIuCi0tIFdoZW4geW91IGV4aXQgRW1hY3Ms IGZvciBhbGwgdW5tb2RpZmllZCBvciBzYXZlZCBidWZmZXJzLgotRGVwZW5kaW5nIG9uIHRoZSB2 YWx1ZSBvZiBgZmFzdC1sb2NrLXNhdmUtZXZlbnRzJy4KLVNlZSBhbHNvIHRoZSBjb21tYW5kcyBg ZmFzdC1sb2NrLXJlYWQtY2FjaGUnIGFuZCBgZmFzdC1sb2NrLXNhdmUtY2FjaGUnLgotCi1Vc2Ug XFxbZm9udC1sb2NrLWZvbnRpZnktYnVmZmVyXSB0byBmb250aWZ5IHRoZSBidWZmZXIgaWYgdGhl IGNhY2hlIGlzIGJhZC4KLQotVmFyaW91cyBtZXRob2RzIG9mIGNvbnRyb2wgYXJlIHByb3ZpZGVk IGZvciB0aGUgRm9udCBMb2NrIGNhY2hlLiAgSW4gZ2VuZXJhbCwKLXNlZSB2YXJpYWJsZSBgZmFz dC1sb2NrLWNhY2hlLWRpcmVjdG9yaWVzJyBhbmQgZnVuY3Rpb24gYGZhc3QtbG9jay1jYWNoZS1u YW1lJy4KLUZvciBzYXZpbmcsIHNlZSB2YXJpYWJsZXMgYGZhc3QtbG9jay1taW5pbXVtLXNpemUn LCBgZmFzdC1sb2NrLXNhdmUtZXZlbnRzJywKLWBmYXN0LWxvY2stc2F2ZS1vdGhlcnMnIGFuZCBg ZmFzdC1sb2NrLXNhdmUtZmFjZXMnLiIKLSAgKGludGVyYWN0aXZlICJQIikKLSAgOzsgT25seSB0 dXJuIG9uIGlmIHdlIGFyZSB2aXNpdGluZyBhIGZpbGUuICBXZSBjb3VsZCB1c2UgYGJ1ZmZlci1m aWxlLW5hbWUnLAotICA7OyBidXQgbWFueSBwYWNrYWdlcyB0ZW1wb3JhcmlseSB3cmFwIHRoYXQg dG8gbmlsIHdoZW4gZG9pbmcgdGhlaXIgb3duIHRoaW5nLgotICAoc2V0IChtYWtlLWxvY2FsLXZh cmlhYmxlICdmYXN0LWxvY2stbW9kZSkKLSAgICAgICAoYW5kIGJ1ZmZlci1maWxlLXRydWVuYW1l Ci0JICAgIChub3QgKG1lbXEgJ2Zhc3QtbG9jay1tb2RlIGZvbnQtbG9jay1pbmhpYml0LXRoaW5n LWxvY2spKQotCSAgICAoaWYgYXJnICg+IChwcmVmaXgtbnVtZXJpYy12YWx1ZSBhcmcpIDApIChu b3QgZmFzdC1sb2NrLW1vZGUpKSkpCi0gIChpZiAoYW5kIGZhc3QtbG9jay1tb2RlIChub3QgZm9u dC1sb2NrLW1vZGUpKQotICAgICAgOzsgVHVybmVkIG9uIGBmYXN0LWxvY2stbW9kZScgcmF0aGVy IHRoYW4gYGZvbnQtbG9jay1tb2RlJy4KLSAgICAgIChwcm9nbgotICAgICAgICAobWVzc2FnZSAi VXNlIGZvbnQtbG9jay1zdXBwb3J0LW1vZGUgcmF0aGVyIHRoYW4gY2FsbGluZyBmYXN0LWxvY2st bW9kZSIpCi0gICAgICAgIChzaXQtZm9yIDIpKQotICAgIDs7IExldCdzIGdldCBkb3duIHRvIGJ1 c2luZXNzLgotICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2Zhc3QtbG9jay1jYWNoZS10 aW1lc3RhbXApIG5pbCkKLSAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdmYXN0LWxvY2st Y2FjaGUtZmlsZW5hbWUpIG5pbCkKLSAgICAod2hlbiAoYW5kIGZhc3QtbG9jay1tb2RlIChub3Qg Zm9udC1sb2NrLWZvbnRpZmllZCkpCi0gICAgICAoZmFzdC1sb2NrLXJlYWQtY2FjaGUpKSkpCi0K LShkZWZ1biBmYXN0LWxvY2stcmVhZC1jYWNoZSAoKQotICAiUmVhZCB0aGUgRm9udCBMb2NrIGNh Y2hlIGZvciB0aGUgY3VycmVudCBidWZmZXIuCi0KLVRoZSBmb2xsb3dpbmcgY3JpdGVyaWEgbXVz dCBiZSBtZXQgZm9yIGEgRm9udCBMb2NrIGNhY2hlIGZpbGUgdG8gYmUgcmVhZDoKLS0gRmFzdCBM b2NrIG1vZGUgbXVzdCBiZSB0dXJuZWQgb24gaW4gdGhlIGJ1ZmZlci4KLS0gVGhlIGJ1ZmZlciBt dXN0IG5vdCBiZSBtb2RpZmllZC4KLS0gVGhlIGJ1ZmZlcidzIGBmb250LWxvY2sta2V5d29yZHMn IG11c3QgbWF0Y2ggdGhlIGNhY2hlJ3MuCi0tIFRoZSBidWZmZXIgZmlsZSdzIHRpbWVzdGFtcCBt dXN0IG1hdGNoIHRoZSBjYWNoZSdzLgotLSBDcml0ZXJpYSBpbXBvc2VkIGJ5IGBmYXN0LWxvY2st Y2FjaGUtZGlyZWN0b3JpZXMnLgotCi1TZWUgYGZhc3QtbG9jay1tb2RlJy4iCi0gIChpbnRlcmFj dGl2ZSkKLSAgKGxldCAoKGRpcmVjdG9yaWVzIGZhc3QtbG9jay1jYWNoZS1kaXJlY3RvcmllcykK LQkobW9kaWZpZWQgKGJ1ZmZlci1tb2RpZmllZC1wKSkgKGluaGliaXQtcmVhZC1vbmx5IHQpCi0J KGZvbnRpZmllZCBmb250LWxvY2stZm9udGlmaWVkKSkKLSAgICAoc2V0IChtYWtlLWxvY2FsLXZh cmlhYmxlICdmb250LWxvY2stZm9udGlmaWVkKSBuaWwpCi0gICAgOzsgS2VlcCB0cnlpbmcgZGly ZWN0b3JpZXMgdW50aWwgZm9udGlmaWNhdGlvbiBpcyB0dXJuZWQgb2ZmLgotICAgICh3aGlsZSAo YW5kIGRpcmVjdG9yaWVzIChub3QgZm9udC1sb2NrLWZvbnRpZmllZCkpCi0gICAgICAobGV0ICgo ZGlyZWN0b3J5IChmYXN0LWxvY2stY2FjaGUtZGlyZWN0b3J5IChjYXIgZGlyZWN0b3JpZXMpIG5p bCkpKQotCShjb25kaXRpb24tY2FzZSBuaWwKLQkgICAgKHdoZW4gZGlyZWN0b3J5Ci0JICAgICAg KHNldHEgZmFzdC1sb2NrLWNhY2hlLWZpbGVuYW1lIChmYXN0LWxvY2stY2FjaGUtbmFtZSBkaXJl Y3RvcnkpKQotCSAgICAgICh3aGVuIChmaWxlLXJlYWRhYmxlLXAgZmFzdC1sb2NrLWNhY2hlLWZp bGVuYW1lKQotCQkobG9hZCBmYXN0LWxvY2stY2FjaGUtZmlsZW5hbWUgdCB0IHQpKSkKLQkgIChl cnJvciBuaWwpIChxdWl0IG5pbCkpCi0JKHNldHEgZGlyZWN0b3JpZXMgKGNkciBkaXJlY3Rvcmll cykpKSkKLSAgICA7OyBVbnNldCBgZmFzdC1sb2NrLWNhY2hlLWZpbGVuYW1lJywgYW5kIHJlc3Rv cmUgYGZvbnQtbG9jay1mb250aWZpZWQnLCBpZgotICAgIDs7IHdlIGRvbid0IHVzZSBhIGNhY2hl LiAgKE5vdGUgdGhhdCBgZmFzdC1sb2NrLWNhY2hlLWRhdGEnIHNldHMgdGhlIHZhbHVlCi0gICAg Ozsgb2YgYGZhc3QtbG9jay1jYWNoZS10aW1lc3RhbXAnLikKLSAgICAoc2V0LWJ1ZmZlci1tb2Rp ZmllZC1wIG1vZGlmaWVkKQotICAgICh1bmxlc3MgZm9udC1sb2NrLWZvbnRpZmllZAotICAgICAg KHNldHEgZmFzdC1sb2NrLWNhY2hlLWZpbGVuYW1lIG5pbCBmb250LWxvY2stZm9udGlmaWVkIGZv bnRpZmllZCkpKSkKLQotKGRlZnVuIGZhc3QtbG9jay1zYXZlLWNhY2hlICgmb3B0aW9uYWwgYnVm ZmVyKQotICAiU2F2ZSB0aGUgRm9udCBMb2NrIGNhY2hlIG9mIEJVRkZFUiBvciB0aGUgY3VycmVu dCBidWZmZXIuCi0KLVRoZSBmb2xsb3dpbmcgY3JpdGVyaWEgbXVzdCBiZSBtZXQgZm9yIGEgRm9u dCBMb2NrIGNhY2hlIGZpbGUgdG8gYmUgc2F2ZWQ6Ci0tIEZhc3QgTG9jayBtb2RlIG11c3QgYmUg dHVybmVkIG9uIGluIHRoZSBidWZmZXIuCi0tIFRoZSBldmVudCBtdXN0IGJlIG9uZSBvZiBgZmFz dC1sb2NrLXNhdmUtZXZlbnRzJy4KLS0gVGhlIGJ1ZmZlciBtdXN0IGJlIGF0IGxlYXN0IGBmYXN0 LWxvY2stbWluaW11bS1zaXplJyBieXRlcyBsb25nLgotLSBUaGUgYnVmZmVyIGZpbGUgbXVzdCBi ZSBvd25lZCBieSB5b3UsIG9yIGBmYXN0LWxvY2stc2F2ZS1vdGhlcnMnIG11c3QgYmUgdC4KLS0g VGhlIGJ1ZmZlciBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGBmYWNlJyB0ZXh0IHByb3BlcnR5 LgotLSBUaGUgYnVmZmVyIG11c3Qgbm90IGJlIG1vZGlmaWVkLgotLSBUaGUgYnVmZmVyIGZpbGUn cyB0aW1lc3RhbXAgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgZmlsZSdzIG9uIGRpc2suCi0tIFRo ZSBvbiBkaXNrIGZpbGUncyB0aW1lc3RhbXAgbXVzdCBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgYnVm ZmVyJ3MgY2FjaGUuCi0tIENyaXRlcmlhIGltcG9zZWQgYnkgYGZhc3QtbG9jay1jYWNoZS1kaXJl Y3RvcmllcycuCi0KLVNlZSBgZmFzdC1sb2NrLW1vZGUnLiIKLSAgKGludGVyYWN0aXZlKQotICAo c2F2ZS1leGN1cnNpb24KLSAgICAod2hlbiBidWZmZXIKLSAgICAgIChzZXQtYnVmZmVyIGJ1ZmZl cikpCi0gICAgKGxldCAoKG1pbi1zaXplIChmb250LWxvY2stdmFsdWUtaW4tbWFqb3ItbW9kZSBm YXN0LWxvY2stbWluaW11bS1zaXplKSkKLQkgIChmaWxlLXRpbWVzdGFtcCAodmlzaXRlZC1maWxl LW1vZHRpbWUpKSAoc2F2ZWQgbmlsKSkKLSAgICAgICh3aGVuIChhbmQgZmFzdC1sb2NrLW1vZGUK LQkgICAgIDs7Ci0JICAgICA7OyAiT25seSBzYXZlIGlmIHRoZSBidWZmZXIgbWF0Y2hlcyB0aGUg ZmlsZSwgdGhlIGZpbGUgaGFzCi0JICAgICA7OyBjaGFuZ2VkLCBhbmQgaXQgd2FzIGNoYW5nZWQg YnkgdGhlIGN1cnJlbnQgZW1hY3Mgc2Vzc2lvbi4iCi0JICAgICA7OwotCSAgICAgOzsgT25seSBz YXZlIGlmIHRoZSBidWZmZXIgaXMgbm90IG1vZGlmaWVkLAotCSAgICAgOzsgKGkuZS4sIHNvIHdl IGRvbid0IHNhdmUgZm9yIHNvbWV0aGluZyBub3Qgb24gZGlzaykKLQkgICAgIChub3QgKGJ1ZmZl ci1tb2RpZmllZC1wKSkKLQkgICAgIDs7IGFuZCB0aGUgZmlsZSdzIHRpbWVzdGFtcCBpcyB0aGUg c2FtZSBhcyB0aGUgYnVmZmVyJ3MsCi0JICAgICA7OyAoaS5lLiwgc29tZW9uZSBlbHNlIGhhc24n dCB3cml0dGVuIHRoZSBmaWxlIGluIHRoZSBtZWFudGltZSkKLQkgICAgICh2ZXJpZnktdmlzaXRl ZC1maWxlLW1vZHRpbWUgKGN1cnJlbnQtYnVmZmVyKSkKLQkgICAgIDs7IGFuZCB0aGUgZmlsZSdz IHRpbWVzdGFtcCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY2FjaGUncy4KLQkgICAgIDs7IChpLmUu LCBhIHNhdmUgaGFzIG9jY3VycmVkIHNpbmNlIHRoZSBjYWNoZSB3YXMgcmVhZCkKLQkgICAgIChu b3QgKGVxdWFsIGZhc3QtbG9jay1jYWNoZS10aW1lc3RhbXAgZmlsZS10aW1lc3RhbXApKQotCSAg ICAgOzsKLQkgICAgIDs7IE9ubHkgc2F2ZSBpZiB1c2VyJ3MgcmVzdHJpY3Rpb25zIGFyZSBzYXRp c2ZpZWQuCi0JICAgICAoYW5kIG1pbi1zaXplICg+PSAoYnVmZmVyLXNpemUpIG1pbi1zaXplKSkK LQkgICAgIChvciBmYXN0LWxvY2stc2F2ZS1vdGhlcnMKLQkJIChlcSAodXNlci11aWQpIChmaWxl LWF0dHJpYnV0ZS11c2VyLWlkCi0JCQkJIChmaWxlLWF0dHJpYnV0ZXMgYnVmZmVyLWZpbGUtbmFt ZSkpKSkKLQkgICAgIDs7Ci0JICAgICA7OyBPbmx5IHNhdmUgaWYgdGhlcmUgYXJlIGBmYWNlJyBw cm9wZXJ0aWVzIHRvIHNhdmUuCi0JICAgICAodGV4dC1wcm9wZXJ0eS1ub3QtYWxsIChwb2ludC1t aW4pIChwb2ludC1tYXgpICdmYWNlIG5pbCkpCi0JOzsKLQk7OyBUcnkgZWFjaCBkaXJlY3Rvcnkg dW50aWwgd2UgbWFuYWdlIHRvIHNhdmUgb3IgdGhlIHVzZXIgcXVpdHMuCi0JKGxldCAoKGRpcmVj dG9yaWVzIGZhc3QtbG9jay1jYWNoZS1kaXJlY3RvcmllcykpCi0JICAod2hpbGUgKGFuZCBkaXJl Y3RvcmllcyAobWVtcSBzYXZlZCAnKG5pbCBlcnJvcikpKQotCSAgICAobGV0KiAoKGRpciAoZmFz dC1sb2NrLWNhY2hlLWRpcmVjdG9yeSAoY2FyIGRpcmVjdG9yaWVzKSB0KSkKLQkJICAgKGZpbGUg KGFuZCBkaXIgKGZhc3QtbG9jay1jYWNoZS1uYW1lIGRpcikpKSkKLQkgICAgICAod2hlbiAoYW5k IGZpbGUgKGZpbGUtd3JpdGFibGUtcCBmaWxlKSkKLQkJKHNldHEgc2F2ZWQgKGZhc3QtbG9jay1z YXZlLWNhY2hlLTEgZmlsZSBmaWxlLXRpbWVzdGFtcCkpKQotCSAgICAgIChzZXRxIGRpcmVjdG9y aWVzIChjZHIgZGlyZWN0b3JpZXMpKSkpKSkpKSkKLQotOzs7IyMjYXV0b2xvYWQKLShkZWZ1biB0 dXJuLW9uLWZhc3QtbG9jayAoKQotICAiVW5jb25kaXRpb25hbGx5IHR1cm4gb24gRmFzdCBMb2Nr IG1vZGUuIgotICAoZmFzdC1sb2NrLW1vZGUgdCkpCi0MCi07OzsgQVBJIEZ1bmN0aW9uczoKLQot KGRlZnVuIGZhc3QtbG9jay1hZnRlci1mb250aWZ5LWJ1ZmZlciAoKQotICA7OyBEZWxldGUgdGhl IEZvbnQgTG9jayBjYWNoZSBmaWxlIHVzZWQgdG8gcmVzdG9yZSBmb250aWZpY2F0aW9uLCBpZiBh bnkuCi0gICh3aGVuIGZhc3QtbG9jay1jYWNoZS1maWxlbmFtZQotICAgIChpZiAoZmlsZS13cml0 YWJsZS1wIGZhc3QtbG9jay1jYWNoZS1maWxlbmFtZSkKLQkoZGVsZXRlLWZpbGUgZmFzdC1sb2Nr LWNhY2hlLWZpbGVuYW1lKQotICAgICAgKG1lc3NhZ2UgIkZpbGUgJXMgZm9udCBsb2NrIGNhY2hl IGNhbm5vdCBiZSBkZWxldGVkIiAoYnVmZmVyLW5hbWUpKSkpCi0gIDs7IEZsYWcgc28gdGhhdCBh IGNhY2hlIHdpbGwgYmUgc2F2ZWQgbGF0ZXIgZXZlbiBpZiB0aGUgZmlsZSBpcyBuZXZlciBzYXZl ZC4KLSAgKHNldHEgZmFzdC1sb2NrLWNhY2hlLXRpbWVzdGFtcCBuaWwpKQotCi0oZGVmYWxpYXMg J2Zhc3QtbG9jay1hZnRlci11bmZvbnRpZnktYnVmZmVyCi0gICdpZ25vcmUpCi0MCi07OyBNaXNj ZWxsYW5lb3VzIEZ1bmN0aW9uczoKLQotKGRlZnVuIGZhc3QtbG9jay1zYXZlLWNhY2hlLWFmdGVy LXNhdmUtZmlsZSAoKQotICA7OyBEbyBgZmFzdC1sb2NrLXNhdmUtY2FjaGUnIGlmIGBzYXZlLWJ1 ZmZlcicgaXMgb24gYGZhc3QtbG9jay1zYXZlLWV2ZW50cycuCi0gICh3aGVuIChtZW1xICdzYXZl LWJ1ZmZlciBmYXN0LWxvY2stc2F2ZS1ldmVudHMpCi0gICAgKGZhc3QtbG9jay1zYXZlLWNhY2hl KSkpCi0KLShkZWZ1biBmYXN0LWxvY2stc2F2ZS1jYWNoZS1iZWZvcmUta2lsbC1idWZmZXIgKCkK LSAgOzsgRG8gYGZhc3QtbG9jay1zYXZlLWNhY2hlJyBpZiBga2lsbC1idWZmZXInIGlzIG9uIGBm YXN0LWxvY2stc2F2ZS1ldmVudHMnLgotICAod2hlbiAobWVtcSAna2lsbC1idWZmZXIgZmFzdC1s b2NrLXNhdmUtZXZlbnRzKQotICAgIChmYXN0LWxvY2stc2F2ZS1jYWNoZSkpKQotCi0oZGVmdW4g ZmFzdC1sb2NrLXNhdmUtY2FjaGVzLWJlZm9yZS1raWxsLWVtYWNzICgpCi0gIDs7IERvIGBmYXN0 LWxvY2stc2F2ZS1jYWNoZSdzIGlmIGBraWxsLWVtYWNzJyBpcyBvbiBgZmFzdC1sb2NrLXNhdmUt ZXZlbnRzJy4KLSAgKHdoZW4gKG1lbXEgJ2tpbGwtZW1hY3MgZmFzdC1sb2NrLXNhdmUtZXZlbnRz KQotICAgIChtYXBjYXIgJ2Zhc3QtbG9jay1zYXZlLWNhY2hlIChidWZmZXItbGlzdCkpKSkKLQot KGRlZnVuIGZhc3QtbG9jay1jYWNoZS1kaXJlY3RvcnkgKGRpcmVjdG9yeSBjcmVhdGUpCi0gICJS ZXR1cm4gdXNhYmxlIGRpcmVjdG9yeSBiYXNlZCBvbiBESVJFQ1RPUlkuCi1SZXR1cm5zIG5pbCBp ZiB0aGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LCBvciwgaWYgQ1JFQVRFIG5vbi1uaWwsIGNh bm5vdCBiZQotY3JlYXRlZC4gIERJUkVDVE9SWSBtYXkgYmUgYSBzdHJpbmcgb3IgYSBjb25zIHBh aXIgb2YgdGhlIGZvcm0gKFJFR0VYUCAuIERJUikuCi1TZWUgYGZhc3QtbG9jay1jYWNoZS1kaXJl Y3RvcmllcycuIgotICAobGV0ICgoZGlyCi0JIChjb25kICgobm90IGJ1ZmZlci1maWxlLW5hbWUp Ci0JCTs7IFNob3VsZCBuZXZlciBiZSBuaWwsIGJ1dCBgY3J5cHQrKycgc2NyZXdzIGl0IHVwLgot CQluaWwpCi0JICAgICAgICgoc3RyaW5ncCBkaXJlY3RvcnkpCi0JCTs7IEp1c3QgYSBkaXJlY3Rv cnkuCi0JCWRpcmVjdG9yeSkKLQkgICAgICAgKHQKLQkJOzsgQSBkaXJlY3RvcnkgaWYgdGhlIGZp bGUgbmFtZSBtYXRjaGVzIHRoZSByZWdleHAuCi0JCShsZXQgKChidWZpbGUgKGV4cGFuZC1maWxl LW5hbWUgYnVmZmVyLWZpbGUtdHJ1ZW5hbWUpKQotCQkgICAgICAoY2FzZS1mb2xkLXNlYXJjaCBu aWwpKQotCQkgICh3aGVuIChzYXZlLW1hdGNoLWRhdGEgKHN0cmluZy1tYXRjaCAoY2FyIGRpcmVj dG9yeSkgYnVmaWxlKSkKLQkJICAgIChjZHIgZGlyZWN0b3J5KSkpKSkpKQotICAgIChjb25kICgo bm90IGRpcikKLQkgICBuaWwpCi0JICAoKGZpbGUtYWNjZXNzaWJsZS1kaXJlY3RvcnktcCBkaXIp Ci0JICAgZGlyKQotCSAgKGNyZWF0ZQotCSAgIChjb25kaXRpb24tY2FzZSBuaWwKLQkgICAgICAg KHByb2duIChtYWtlLWRpcmVjdG9yeSBkaXIgdCkgZGlyKQotCSAgICAgKGVycm9yIG5pbCkpKSkp KQotCi07OyBJZiB5b3UgYXJlIHdvbmRlcmluZyB3aHkgd2Ugb25seSBoYXNoIGlmIHRoZSBkaXJl Y3RvcnkgaXMgbm90ICIuIiwgcmF0aGVyCi07OyB0aGFuIGlmIGBmaWxlLW5hbWUtYWJzb2x1dGUt cCcsIGl0IGlzIGJlY2F1c2UgaWYgd2UganVzdCBhcHBlbmRlZCAiLmZsYyIgZm9yCi07OyByZWxh dGl2ZSBjYWNoZSBkaXJlY3RvcmllcyAodGhhdCBhcmUgbm90ICIuIikgdGhlbiBpdCBpcyBwb3Nz aWJsZSB0aGF0IG1vcmUKLTs7IHRoYW4gb25lIGZpbGUgd291bGQgaGF2ZSB0aGUgc2FtZSBjYWNo ZSBuYW1lIGluIHRoYXQgZGlyZWN0b3J5LCBpZiB0aGUgbHVzZXIKLTs7IG1hZGUgYSBsaW5rIGZy b20gb25lIHJlbGF0aXZlIGNhY2hlIGRpcmVjdG9yeSB0byBhbm90aGVyLiAgKFBoZXchKQotKGRl ZnVuIGZhc3QtbG9jay1jYWNoZS1uYW1lIChkaXJlY3RvcnkpCi0gICJSZXR1cm4gZnVsbCBjYWNo ZSBmaWxlIG5hbWUgdXNpbmcgY2FjaGluZyBESVJFQ1RPUlkuCi1JZiBESVJFQ1RPUlkgaXMgYC4n LCB0aGUgZmlsZSBuYW1lIGlzIHRoZSBidWZmZXIgZmlsZSBuYW1lIGFwcGVuZGVkIHdpdGggYC5m bGMnLgotT3RoZXJ3aXNlLCB0aGUgZmlsZSBuYW1lIGlzIGNvbnN0cnVjdGVkIGZyb20gRElSRUNU T1JZIGFuZCB0aGUgYnVmZmVyJ3MgdHJ1ZQotYWJicmV2aWF0ZWQgZmlsZSBuYW1lLCB3aXRoIGFs bCBgLycgY2hhcmFjdGVycyBpbiB0aGUgbmFtZSByZXBsYWNlZCB3aXRoIGAjJwotY2hhcmFjdGVy cywgYW5kIGFwcGVuZGVkIHdpdGggYC5mbGMnLgotCi1JZiB0aGUgc2FtZSBmaWxlIGhhcyBkaWZm ZXJlbnQgY2FjaGUgZmlsZSBuYW1lcyB3aGVuIGVkaXRlZCBvbiBkaWZmZXJlbnQKLW1hY2hpbmVz LCBlLmcuLCBvbiBvbmUgbWFjaGluZSB0aGUgY2FjaGUgZmlsZSBuYW1lIGhhcyB0aGUgcHJlZml4 IGAjaG9tZScsCi1wZXJoYXBzIGR1ZSB0byBhdXRvbW91bnQsIHRyeSBwdXR0aW5nIGluIHlvdXIg YH4vLmVtYWNzJyBzb21ldGhpbmcgbGlrZToKLQotIChzZXRxIGRpcmVjdG9yeS1hYmJyZXYtYWxp c3QgKGNvbnMgXFw9JyhcIl4vaG9tZS9cIiAuIFwiL1wiKSBkaXJlY3RvcnktYWJicmV2LWFsaXN0 KSkKLQotRW1hY3MgYXV0b21hZ2ljYWxseSByZW1vdmVzIHRoZSBjb21tb24gYC90bXBfbW50JyBh dXRvbW91bnQgcHJlZml4IGJ5IGRlZmF1bHQuCi0KLVNlZSBgZmFzdC1sb2NrLWNhY2hlLWRpcmVj dG9yeScuIgotICAoaWYgKHN0cmluZy1lcXVhbCBkaXJlY3RvcnkgIi4iKQotICAgICAgKGNvbmNh dCBidWZmZXItZmlsZS1uYW1lICIuZmxjIikKLSAgICAobGV0KiAoKGJ1ZmlsZSAoZXhwYW5kLWZp bGUtbmFtZSBidWZmZXItZmlsZS10cnVlbmFtZSkpCi0JICAgKGNoYXJzLWFsaXN0Ci0JICAgIChp ZiAobWVtcSBzeXN0ZW0tdHlwZSAnKHdpbmRvd3MtbnQgY3lnd2luKSkKLQkJJygoPy8gLiAoPyMp KSAoPyMgLiAoPyMgPyMpKSAoPzogLiAoP1w7KSkgKD9cOyAuICg/XDsgP1w7KSkpCi0JICAgICAg JygoPy8gLiAoPyMpKSAoPyMgLiAoPyMgPyMpKSkpKQotCSAgIChtYXBjaGFycwotCSAgICAoZnVu Y3Rpb24gKGxhbWJkYSAoYykgKG9yIChjZHIgKGFzc3EgYyBjaGFycy1hbGlzdCkpIChsaXN0IGMp KSkpKSkKLSAgICAgIChjb25jYXQKLSAgICAgICAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSAoZXhw YW5kLWZpbGUtbmFtZSBkaXJlY3RvcnkpKQotICAgICAgIChtYXBjb25jYXQgJ2NoYXItdG8tc3Ry aW5nIChhcHBseSAnYXBwZW5kIChtYXBjYXIgbWFwY2hhcnMgYnVmaWxlKSkgIiIpCi0gICAgICAg Ii5mbGMiKSkpKQotDAotOzsgRm9udCBMb2NrIENhY2hlIFByb2Nlc3NpbmcgRnVuY3Rpb25zOgot Ci07OyBUaGUgdmVyc2lvbiAzIGZvcm1hdCBvZiB0aGUgY2FjaGUgaXM6Ci07OwotOzsgKGZhc3Qt bG9jay1jYWNoZS1kYXRhIFZFUlNJT04gVElNRVNUQU1QCi07OyAgZm9udC1sb2NrLXN5bnRhY3Rp Yy1rZXl3b3JkcyBTWU5UQUNUSUMtUFJPUEVSVElFUwotOzsgIGZvbnQtbG9jay1rZXl3b3JkcyBG QUNFLVBST1BFUlRJRVMpCi0KLShkZWZ1biBmYXN0LWxvY2stc2F2ZS1jYWNoZS0xIChmaWxlIHRp bWVzdGFtcCkKLSAgOzsgU2F2ZSB0aGUgRklMRSB3aXRoIHRoZSBUSU1FU1RBTVAgcGx1cyBmb250 aWZpY2F0aW9uIGRhdGEuCi0gIDs7IFJldHVybnMgbm9uLW5pbCBpZiBhIHNhdmUgd2FzIGF0dGVt cHRlZCB0byBhIHdyaXRhYmxlIGNhY2hlIGZpbGUuCi0gIChsZXQgKCh0cGJ1ZiAoZ2VuZXJhdGUt bmV3LWJ1ZmZlciAiICpmYXN0LWxvY2sqIikpCi0JKHZlcmJvc2UgKGlmIChudW1iZXJwIGZhc3Qt bG9jay12ZXJib3NlKQotCQkgICAgICg+IChidWZmZXItc2l6ZSkgZmFzdC1sb2NrLXZlcmJvc2Up Ci0JCSAgIGZhc3QtbG9jay12ZXJib3NlKSkKLQkoc2F2ZWQgdCkpCi0gICAgKHdpdGgtdGVtcC1t ZXNzYWdlCi0JKHdoZW4gdmVyYm9zZQotCSAgKGZvcm1hdCAiU2F2aW5nICVzIGZvbnQgbG9jayBj YWNoZS4uLiIgKGJ1ZmZlci1uYW1lKSkpCi0gICAgICAoY29uZGl0aW9uLWNhc2UgbmlsCi0JICAo c2F2ZS1leGN1cnNpb24KLQkgICAgKHByaW50IChsaXN0ICdmYXN0LWxvY2stY2FjaGUtZGF0YSAz Ci0JCQkgKGxpc3QgJ3F1b3RlIHRpbWVzdGFtcCkKLQkJCSAobGlzdCAncXVvdGUgZm9udC1sb2Nr LXN5bnRhY3RpYy1rZXl3b3JkcykKLQkJCSAobGlzdCAncXVvdGUgKGZhc3QtbG9jay1nZXQtc3lu dGFjdGljLXByb3BlcnRpZXMpKQotCQkJIChsaXN0ICdxdW90ZSBmb250LWxvY2sta2V5d29yZHMp Ci0JCQkgKGxpc3QgJ3F1b3RlIChmYXN0LWxvY2stZ2V0LWZhY2UtcHJvcGVydGllcykpKQotCQkg ICB0cGJ1ZikKLQkgICAgKHNldC1idWZmZXIgdHBidWYpCi0JICAgICh3cml0ZS1yZWdpb24gKHBv aW50LW1pbikgKHBvaW50LW1heCkgZmlsZSBuaWwgJ3F1aWV0bHkpCi0JICAgIChzZXRxIGZhc3Qt bG9jay1jYWNoZS10aW1lc3RhbXAgdGltZXN0YW1wCi0JCSAgZmFzdC1sb2NrLWNhY2hlLWZpbGVu YW1lIGZpbGUpKQotCShlcnJvciAoc2V0cSBzYXZlZCAnZXJyb3IpKSAocXVpdCAoc2V0cSBzYXZl ZCAncXVpdCkpKQotICAgICAgKGtpbGwtYnVmZmVyIHRwYnVmKSkKLSAgICAoY29uZCAoKGVxIHNh dmVkICdxdWl0KQotCSAgIChtZXNzYWdlICJTYXZpbmcgJXMgZm9udCBsb2NrIGNhY2hlLi4ucXVp dCIgKGJ1ZmZlci1uYW1lKSkpCi0JICAoKGVxIHNhdmVkICdlcnJvcikKLQkgICAobWVzc2FnZSAi U2F2aW5nICVzIGZvbnQgbG9jayBjYWNoZS4uLmZhaWxlZCIgKGJ1ZmZlci1uYW1lKSkpKQotICAg IDs7IFdlIHJldHVybiBub24tbmlsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhIGZhaWx1cmUgb2Nj dXJyZWQuCi0gICAgc2F2ZWQpKQotCi0oZGVmdW4gZmFzdC1sb2NrLWNhY2hlLWRhdGEgKHZlcnNp b24gdGltZXN0YW1wCi0JCQkgICAgIHN5bnRhY3RpYy1rZXl3b3JkcyBzeW50YWN0aWMtcHJvcGVy dGllcwotCQkJICAgICBrZXl3b3JkcyBmYWNlLXByb3BlcnRpZXMKLQkJCSAgICAgJnJlc3QgaWdu b3JlZCkKLSAgOzsgRmluZCB2YWx1ZSBvZiBzeW50YWN0aWMga2V5d29yZHMgaW4gY2FzZSBpdCBp cyBhIHN5bWJvbC4KLSAgKHNldHEgZm9udC1sb2NrLXN5bnRhY3RpYy1rZXl3b3JkcyAoZm9udC1s b2NrLWV2YWwta2V5d29yZHMKLQkJCQkgICAgICBmb250LWxvY2stc3ludGFjdGljLWtleXdvcmRz KSkKLSAgOzsgQ29tcGlsZSBhbGwga2V5d29yZHMgaW4gY2FzZSBzb21lIGFyZSBhbmQgc29tZSBh cmVuJ3QuCi0gICh3aGVuIGZvbnQtbG9jay1zeW50YWN0aWMta2V5d29yZHMKLSAgICAoc2V0cSBm b250LWxvY2stc3ludGFjdGljLWtleXdvcmRzIChmb250LWxvY2stY29tcGlsZS1rZXl3b3Jkcwot CQkJCQlmb250LWxvY2stc3ludGFjdGljLWtleXdvcmRzIHQpKSkKLSAgKHdoZW4gc3ludGFjdGlj LWtleXdvcmRzCi0gICAgKHNldHEgc3ludGFjdGljLWtleXdvcmRzIChmb250LWxvY2stY29tcGls ZS1rZXl3b3JkcyBzeW50YWN0aWMta2V5d29yZHMgdCkpKQotICAoc2V0cSBmb250LWxvY2sta2V5 d29yZHMgKGZvbnQtbG9jay1jb21waWxlLWtleXdvcmRzIGZvbnQtbG9jay1rZXl3b3JkcykKLQlr ZXl3b3JkcyAoZm9udC1sb2NrLWNvbXBpbGUta2V5d29yZHMga2V5d29yZHMpKQotICA7OyBVc2Ug dGhlIEZvbnQgTG9jayBjYWNoZSBTWU5UQUNUSUMtUFJPUEVSVElFUyBhbmQgRkFDRS1QUk9QRVJU SUVTIGlmIHdlJ3JlCi0gIDs7IHVzaW5nIGNhY2hlIFZFUlNJT04gZm9ybWF0IDMsIHRoZSBjdXJy ZW50IGJ1ZmZlcidzIGZpbGUgdGltZXN0YW1wIG1hdGNoZXMKLSAgOzsgdGhlIFRJTUVTVEFNUCwg dGhlIGN1cnJlbnQgYnVmZmVyJ3MgYGZvbnQtbG9jay1zeW50YWN0aWMta2V5d29yZHMnIGFyZSB0 aGUKLSAgOzsgc2FtZSBhcyBTWU5UQUNUSUMtS0VZV09SRFMsIGFuZCB0aGUgY3VycmVudCBidWZm ZXIncyBgZm9udC1sb2NrLWtleXdvcmRzJwotICA7OyBhcmUgdGhlIHNhbWUgYXMgS0VZV09SRFMu Ci0gIChsZXQgKChidWYtdGltZXN0YW1wICh2aXNpdGVkLWZpbGUtbW9kdGltZSkpCi0JKHZlcmJv c2UgKGlmIChudW1iZXJwIGZhc3QtbG9jay12ZXJib3NlKQotCQkgICAgICg+IChidWZmZXItc2l6 ZSkgZmFzdC1sb2NrLXZlcmJvc2UpCi0JCSAgIGZhc3QtbG9jay12ZXJib3NlKSkKLQkobG9hZGVk IHQpKQotICAgIChpZiAob3IgKC89IHZlcnNpb24gMykKLQkgICAgKGJ1ZmZlci1tb2RpZmllZC1w KQotCSAgICAobm90IChlcXVhbCB0aW1lc3RhbXAgYnVmLXRpbWVzdGFtcCkpCi0JICAgIChub3Qg KGVxdWFsIHN5bnRhY3RpYy1rZXl3b3JkcyBmb250LWxvY2stc3ludGFjdGljLWtleXdvcmRzKSkK LQkgICAgKG5vdCAoZXF1YWwga2V5d29yZHMgZm9udC1sb2NrLWtleXdvcmRzKSkpCi0JKHNldHEg bG9hZGVkIG5pbCkKLSAgICAgICh3aXRoLXRlbXAtbWVzc2FnZQotCSAgKHdoZW4gdmVyYm9zZQot CSAgICAoZm9ybWF0ICJMb2FkaW5nICVzIGZvbnQgbG9jayBjYWNoZS4uLiIgKGJ1ZmZlci1uYW1l KSkpCi0JKGNvbmRpdGlvbi1jYXNlIG5pbAotCSAgICAoZmFzdC1sb2NrLWFkZC1wcm9wZXJ0aWVz IHN5bnRhY3RpYy1wcm9wZXJ0aWVzIGZhY2UtcHJvcGVydGllcykKLQkgIChlcnJvciAoc2V0cSBs b2FkZWQgJ2Vycm9yKSkgKHF1aXQgKHNldHEgbG9hZGVkICdxdWl0KSkpKQotICAgICAgKGNvbmQg KChlcSBsb2FkZWQgJ3F1aXQpCi0JICAgICAobWVzc2FnZSAiTG9hZGluZyAlcyBmb250IGxvY2sg Y2FjaGUuLi5xdWl0IiAoYnVmZmVyLW5hbWUpKSkKLQkgICAgKChlcSBsb2FkZWQgJ2Vycm9yKQot CSAgICAgKG1lc3NhZ2UgIkxvYWRpbmcgJXMgZm9udCBsb2NrIGNhY2hlLi4uZmFpbGVkIiAoYnVm ZmVyLW5hbWUpKSkpKQotICAgIChzZXRxIGZvbnQtbG9jay1mb250aWZpZWQgKGVxIGxvYWRlZCB0 KQotCSAgZmFzdC1sb2NrLWNhY2hlLXRpbWVzdGFtcCAoYW5kIChlcSBsb2FkZWQgdCkgdGltZXN0 YW1wKSkpKQotDAotOzsgVGV4dCBQcm9wZXJ0aWVzIFByb2Nlc3NpbmcgRnVuY3Rpb25zOgotCi07 OyBUaGlzIGlzIGZhc3QsIGJ1dCBmYWlscyBpZiBhZGphY2VudCBjaGFyYWN0ZXJzIGhhdmUgZGlm ZmVyZW50IGBmYWNlJyB0ZXh0Ci07OyBwcm9wZXJ0aWVzLiAgTWF5YmUgdGhhdCdzIHdoeSBJIGRy b3BwZWQgaXQgaW4gdGhlIGZpcnN0IHBsYWNlPwotOyhkZWZ1biBmYXN0LWxvY2stZ2V0LWZhY2Ut cHJvcGVydGllcyAoKQotOyAgIlJldHVybiBhIGxpc3Qgb2YgYGZhY2UnIHRleHQgcHJvcGVydGll cyBpbiB0aGUgY3VycmVudCBidWZmZXIuCi07RWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0IGlzIG9m IHRoZSBmb3JtIChWQUxVRSBTVEFSVDEgRU5EMSBTVEFSVDIgRU5EMiAuLi4pCi07d2hlcmUgVkFM VUUgaXMgYSBgZmFjZScgcHJvcGVydHkgdmFsdWUgYW5kIFNUQVJUeCBhbmQgRU5EeCBhcmUgcG9z aXRpb25zLiIKLTsgIChzYXZlLXJlc3RyaWN0aW9uCi07ICAgICh3aWRlbikKLTsgICAgKGxldCAo KHN0YXJ0ICh0ZXh0LXByb3BlcnR5LW5vdC1hbGwgKHBvaW50LW1pbikgKHBvaW50LW1heCkgJ2Zh Y2UgbmlsKSkKLTsJICAobGltaXQgKHBvaW50LW1heCkpIGVuZCBwcm9wZXJ0aWVzIHZhbHVlIGNl bGwpCi07ICAgICAgKHdoaWxlIHN0YXJ0Ci07CShzZXRxIGVuZCAobmV4dC1zaW5nbGUtcHJvcGVy dHktY2hhbmdlIHN0YXJ0ICdmYWNlIG5pbCBsaW1pdCkKLTsJICAgICAgdmFsdWUgKGdldC10ZXh0 LXByb3BlcnR5IHN0YXJ0ICdmYWNlKSkKLTsJOzsgTWFrZSwgb3IgYWRkIHRvIGV4aXN0aW5nLCBs aXN0IG9mIHJlZ2lvbnMgd2l0aCBzYW1lIGBmYWNlJy4KLTsJKGlmIChzZXRxIGNlbGwgKGFzc3Eg dmFsdWUgcHJvcGVydGllcykpCi07CSAgICAoc2V0Y2RyIGNlbGwgKGNvbnMgc3RhcnQgKGNvbnMg ZW5kIChjZHIgY2VsbCkpKSkKLTsJICAoc2V0cSBwcm9wZXJ0aWVzIChjb25zIChsaXN0IHZhbHVl IHN0YXJ0IGVuZCkgcHJvcGVydGllcykpKQotOwkoc2V0cSBzdGFydCAobmV4dC1zaW5nbGUtcHJv cGVydHktY2hhbmdlIGVuZCAnZmFjZSkpKQotOyAgICAgIHByb3BlcnRpZXMpKSkKLQotOzsgVGhp cyBpcyBzbG93LCBidXQgY29wZXMgaWYgYWRqYWNlbnQgY2hhcmFjdGVycyBoYXZlIGRpZmZlcmVu dCBgZmFjZScgdGV4dAotOzsgcHJvcGVydGllcywgYnV0IGZhaWxzIGlmIHRoZXkgYXJlIGxpc3Rz LgotOyhkZWZ1biBmYXN0LWxvY2stZ2V0LWZhY2UtcHJvcGVydGllcyAoKQotOyAgIlJldHVybiBh IGxpc3Qgb2YgYGZhY2UnIHRleHQgcHJvcGVydGllcyBpbiB0aGUgY3VycmVudCBidWZmZXIuCi07 RWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0IGlzIG9mIHRoZSBmb3JtIChWQUxVRSBTVEFSVDEgRU5E MSBTVEFSVDIgRU5EMiAuLi4pCi07d2hlcmUgVkFMVUUgaXMgYSBgZmFjZScgcHJvcGVydHkgdmFs dWUgYW5kIFNUQVJUeCBhbmQgRU5EeCBhcmUgcG9zaXRpb25zLgotO09ubHkgdGhvc2UgYGZhY2Un IFZBTFVFcyBpbiBgZmFzdC1sb2NrLXNhdmUtZmFjZXMnIGFyZSByZXR1cm5lZC4iCi07ICAoc2F2 ZS1yZXN0cmljdGlvbgotOyAgICAod2lkZW4pCi07ICAgIChsZXQgKChmYWNlcyAob3IgZmFzdC1s b2NrLXNhdmUtZmFjZXMgKGZhY2UtbGlzdCkpKSAobGltaXQgKHBvaW50LW1heCkpCi07CSAgcHJv cGVydGllcyByZWdpb25zIGZhY2Ugc3RhcnQgZW5kKQotOyAgICAgICh3aGlsZSBmYWNlcwotOwko c2V0cSBmYWNlIChjYXIgZmFjZXMpIGZhY2VzIChjZHIgZmFjZXMpIHJlZ2lvbnMgKCkgZW5kIChw b2ludC1taW4pKQotOwk7OyBNYWtlIGEgbGlzdCBvZiBzdGFydC9lbmQgcmVnaW9ucyB3aXRoIGBm YWNlJyBwcm9wZXJ0eSBmYWNlLgotOwkod2hpbGUgKHNldHEgc3RhcnQgKHRleHQtcHJvcGVydHkt YW55IGVuZCBsaW1pdCAnZmFjZSBmYWNlKSkKLTsJICAoc2V0cSBlbmQgKG9yICh0ZXh0LXByb3Bl cnR5LW5vdC1hbGwgc3RhcnQgbGltaXQgJ2ZhY2UgZmFjZSkgbGltaXQpCi07CQlyZWdpb25zIChj b25zIHN0YXJ0IChjb25zIGVuZCByZWdpb25zKSkpKQotOwk7OyBBZGQgYGZhY2UnIGZhY2UncyBy ZWdpb25zLCBpZiBhbnksIHRvIHByb3BlcnRpZXMuCi07CSh3aGVuIHJlZ2lvbnMKLTsJICAocHVz aCAoY29ucyBmYWNlIHJlZ2lvbnMpIHByb3BlcnRpZXMpKSkKLTsgICAgICBwcm9wZXJ0aWVzKSkp Ci0KLShkZWZ1biBmYXN0LWxvY2stZ2V0LWZhY2UtcHJvcGVydGllcyAoKQotICAiUmV0dXJuIGEg bGlzdCBvZiBgZmFjZScgdGV4dCBwcm9wZXJ0aWVzIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4KLUVh Y2ggZWxlbWVudCBvZiB0aGUgbGlzdCBpcyBvZiB0aGUgZm9ybSAoVkFMVUUgU1RBUlQxIEVORDEg U1RBUlQyIEVORDIgLi4uKQotd2hlcmUgVkFMVUUgaXMgYSBgZmFjZScgcHJvcGVydHkgdmFsdWUg YW5kIFNUQVJUeCBhbmQgRU5EeCBhcmUgcG9zaXRpb25zLiIKLSAgKHNhdmUtcmVzdHJpY3Rpb24K LSAgICAod2lkZW4pCi0gICAgKGxldCAoKHN0YXJ0ICh0ZXh0LXByb3BlcnR5LW5vdC1hbGwgKHBv aW50LW1pbikgKHBvaW50LW1heCkgJ2ZhY2UgbmlsKSkKLQkgIGVuZCBwcm9wZXJ0aWVzIHZhbHVl IGNlbGwpCi0gICAgICAod2hpbGUgc3RhcnQKLQkoc2V0cSBlbmQgKG5leHQtc2luZ2xlLXByb3Bl cnR5LWNoYW5nZSBzdGFydCAnZmFjZSBuaWwgKHBvaW50LW1heCkpCi0JICAgICAgdmFsdWUgKGdl dC10ZXh0LXByb3BlcnR5IHN0YXJ0ICdmYWNlKSkKLQk7OyBNYWtlLCBvciBhZGQgdG8gZXhpc3Rp bmcsIGxpc3Qgb2YgcmVnaW9ucyB3aXRoIHNhbWUgYGZhY2UnLgotCShjb25kICgoc2V0cSBjZWxs IChhc3NvYyB2YWx1ZSBwcm9wZXJ0aWVzKSkKLQkgICAgICAgKHNldGNkciBjZWxsIChjb25zIHN0 YXJ0IChjb25zIGVuZCAoY2RyIGNlbGwpKSkpKQotCSAgICAgICgoZmFzdC1sb2NrLXNhdmUtZmFj ZXAgdmFsdWUpCi0JICAgICAgIChwdXNoIChsaXN0IHZhbHVlIHN0YXJ0IGVuZCkgcHJvcGVydGll cykpKQotCShzZXRxIHN0YXJ0ICh0ZXh0LXByb3BlcnR5LW5vdC1hbGwgZW5kIChwb2ludC1tYXgp ICdmYWNlIG5pbCkpKQotICAgICAgcHJvcGVydGllcykpKQotCi0oZGVmdW4gZmFzdC1sb2NrLWdl dC1zeW50YWN0aWMtcHJvcGVydGllcyAoKQotICAiUmV0dXJuIGEgbGlzdCBvZiBgc3ludGF4LXRh YmxlJyB0ZXh0IHByb3BlcnRpZXMgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgotU2VlIGBmYXN0LWxv Y2stZ2V0LWZhY2UtcHJvcGVydGllcycuIgotICAoc2F2ZS1yZXN0cmljdGlvbgotICAgICh3aWRl bikKLSAgICAobGV0ICgoc3RhcnQgKHRleHQtcHJvcGVydHktbm90LWFsbCAocG9pbnQtbWluKSAo cG9pbnQtbWF4KSAnc3ludGF4LXRhYmxlCi0JCQkJCW5pbCkpCi0JICBlbmQgcHJvcGVydGllcyB2 YWx1ZSBjZWxsKQotICAgICAgKHdoaWxlIHN0YXJ0Ci0JKHNldHEgZW5kIChuZXh0LXNpbmdsZS1w cm9wZXJ0eS1jaGFuZ2Ugc3RhcnQgJ3N5bnRheC10YWJsZSBuaWwKLQkJCQkJICAgICAgIChwb2lu dC1tYXgpKQotCSAgICAgIHZhbHVlIChnZXQtdGV4dC1wcm9wZXJ0eSBzdGFydCAnc3ludGF4LXRh YmxlKSkKLQk7OyBNYWtlLCBvciBhZGQgdG8gZXhpc3RpbmcsIGxpc3Qgb2YgcmVnaW9ucyB3aXRo IHNhbWUgYHN5bnRheC10YWJsZScuCi0JKGlmIChzZXRxIGNlbGwgKGFzc29jIHZhbHVlIHByb3Bl cnRpZXMpKQotCSAgICAoc2V0Y2RyIGNlbGwgKGNvbnMgc3RhcnQgKGNvbnMgZW5kIChjZHIgY2Vs bCkpKSkKLQkgIChwdXNoIChsaXN0IHZhbHVlIHN0YXJ0IGVuZCkgcHJvcGVydGllcykpCi0JKHNl dHEgc3RhcnQgKHRleHQtcHJvcGVydHktbm90LWFsbCBlbmQgKHBvaW50LW1heCkgJ3N5bnRheC10 YWJsZSBuaWwpKSkKLSAgICAgIHByb3BlcnRpZXMpKSkKLQotKGRlZnVuIGZhc3QtbG9jay1hZGQt cHJvcGVydGllcyAoc3ludGFjdGljLXByb3BlcnRpZXMgZmFjZS1wcm9wZXJ0aWVzKQotICAiQWRk IGBzeW50YXgtdGFibGUnIGFuZCBgZmFjZScgdGV4dCBwcm9wZXJ0aWVzIHRvIHRoZSBjdXJyZW50 IGJ1ZmZlci4KLUFueSBleGlzdGluZyBgc3ludGF4LXRhYmxlJyBhbmQgYGZhY2UnIHRleHQgcHJv cGVydGllcyBhcmUgcmVtb3ZlZCBmaXJzdC4KLVNlZSBgZmFzdC1sb2NrLWdldC1mYWNlLXByb3Bl cnRpZXMnLiIKLSAgKHNhdmUtYnVmZmVyLXN0YXRlIChwbGlzdCByZWdpb25zKQotICAgIChzYXZl LXJlc3RyaWN0aW9uCi0gICAgICAod2lkZW4pCi0gICAgICAoZm9udC1sb2NrLXVuZm9udGlmeS1y ZWdpb24gKHBvaW50LW1pbikgKHBvaW50LW1heCkpCi0gICAgICA7OwotICAgICAgOzsgU2V0IHRo ZSBgc3ludGF4LXRhYmxlJyBwcm9wZXJ0eSBmb3IgZWFjaCBzdGFydC9lbmQgcmVnaW9uLgotICAg ICAgKHdoaWxlIHN5bnRhY3RpYy1wcm9wZXJ0aWVzCi0JKHNldHEgcGxpc3QgKGxpc3QgJ3N5bnRh eC10YWJsZSAoY2FyIChjYXIgc3ludGFjdGljLXByb3BlcnRpZXMpKSkKLQkgICAgICByZWdpb25z IChjZHIgKGNhciBzeW50YWN0aWMtcHJvcGVydGllcykpCi0JICAgICAgc3ludGFjdGljLXByb3Bl cnRpZXMgKGNkciBzeW50YWN0aWMtcHJvcGVydGllcykpCi0JKHdoaWxlIHJlZ2lvbnMKLQkgIChh ZGQtdGV4dC1wcm9wZXJ0aWVzIChudGggMCByZWdpb25zKSAobnRoIDEgcmVnaW9ucykgcGxpc3Qp Ci0JICAoc2V0cSByZWdpb25zIChudGhjZHIgMiByZWdpb25zKSkpKQotICAgICAgOzsKLSAgICAg IDs7IFNldCB0aGUgYGZhY2UnIHByb3BlcnR5IGZvciBlYWNoIHN0YXJ0L2VuZCByZWdpb24uCi0g ICAgICAod2hpbGUgZmFjZS1wcm9wZXJ0aWVzCi0JKHNldHEgcGxpc3QgKGxpc3QgJ2ZhY2UgKGNh ciAoY2FyIGZhY2UtcHJvcGVydGllcykpKQotCSAgICAgIHJlZ2lvbnMgKGNkciAoY2FyIGZhY2Ut cHJvcGVydGllcykpCi0JICAgICAgZmFjZS1wcm9wZXJ0aWVzIChjZHIgZmFjZS1wcm9wZXJ0aWVz KSkKLQkod2hpbGUgcmVnaW9ucwotCSAgKGFkZC10ZXh0LXByb3BlcnRpZXMgKG50aCAwIHJlZ2lv bnMpIChudGggMSByZWdpb25zKSBwbGlzdCkKLQkgIChzZXRxIHJlZ2lvbnMgKG50aGNkciAyIHJl Z2lvbnMpKSkpKSkpCi0MCi07OyBGdW5jdGlvbnMgZm9yIFhFbWFjczoKLQotKHdoZW4gKGZlYXR1 cmVwICd4ZW1hY3MpCi0gIDs7Ci0gIDs7IEl0IHdvdWxkIGJlIGJldHRlciB0byB1c2UgWEVtYWNz JyBgbWFwLWV4dGVudHMnIG92ZXIgZXh0ZW50cyB3aXRoIGEKLSAgOzsgYGZvbnQtbG9jaycgcHJv cGVydHksIGJ1dCBgZmFjZScgcHJvcGVydGllcyBhcmUgb24gZGlmZmVyZW50IGV4dGVudHMuCi0g IChkZWZ1biBmYXN0LWxvY2stZ2V0LWZhY2UtcHJvcGVydGllcyAoKQotICAgICJSZXR1cm4gYSBs aXN0IG9mIGBmYWNlJyB0ZXh0IHByb3BlcnRpZXMgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgotRWFj aCBlbGVtZW50IG9mIHRoZSBsaXN0IGlzIG9mIHRoZSBmb3JtIChWQUxVRSBTVEFSVDEgRU5EMSBT VEFSVDIgRU5EMiAuLi4pCi13aGVyZSBWQUxVRSBpcyBhIGBmYWNlJyBwcm9wZXJ0eSB2YWx1ZSBh bmQgU1RBUlR4IGFuZCBFTkR4IGFyZSBwb3NpdGlvbnMuCi1Pbmx5IHRob3NlIGBmYWNlJyBWQUxV RXMgaW4gYGZhc3QtbG9jay1zYXZlLWZhY2VzJyBhcmUgcmV0dXJuZWQuIgotICAgIChzYXZlLXJl c3RyaWN0aW9uCi0gICAgICAod2lkZW4pCi0gICAgICAobGV0ICgocHJvcGVydGllcyAoKSkgY2Vs bCkKLQkobWFwLWV4dGVudHMKLQkgKGZ1bmN0aW9uIChsYW1iZGEgKGV4dGVudCBpZ25vcmUpCi0J ICAgIChsZXQgKCh2YWx1ZSAoZXh0ZW50LWZhY2UgZXh0ZW50KSkpCi0JICAgICAgOzsgV2UncmUg b25seSBpbnRlcmVzdGVkIGlmIGl0J3Mgb25lIG9mIGBmYXN0LWxvY2stc2F2ZS1mYWNlcycuCi0J ICAgICAgKHdoZW4gKGFuZCB2YWx1ZSAoZmFzdC1sb2NrLXNhdmUtZmFjZXAgdmFsdWUpKQotCQko bGV0ICgoc3RhcnQgKGV4dGVudC1zdGFydC1wb3NpdGlvbiBleHRlbnQpKQotCQkgICAgICAoZW5k IChleHRlbnQtZW5kLXBvc2l0aW9uIGV4dGVudCkpKQotCQkgIDs7IE1ha2Ugb3IgYWRkIHRvIGV4 aXN0aW5nIGxpc3Qgb2YgcmVnaW9ucyB3aXRoIHRoZSBzYW1lCi0JCSAgOzsgYGZhY2UnIHByb3Bl cnR5IHZhbHVlLgotCQkgIChpZiAoc2V0cSBjZWxsIChhc3NvYyB2YWx1ZSBwcm9wZXJ0aWVzKSkK LQkJICAgICAgKHNldGNkciBjZWxsIChjb25zIHN0YXJ0IChjb25zIGVuZCAoY2RyIGNlbGwpKSkp Ci0JCSAgICAocHVzaCAobGlzdCB2YWx1ZSBzdGFydCBlbmQpIHByb3BlcnRpZXMpKSkpCi0JICAg ICAgOzsgUmV0dXJuIG5pbCB0byBrZWVwIGBtYXAtZXh0ZW50cycgZ29pbmcuCi0JICAgICAgbmls KSkpKQotCXByb3BlcnRpZXMpKSkKLSAgOzsKLSAgOzsgWEVtYWNzIGRvZXMgbm90IHN1cHBvcnQg dGhlIGBzeW50YXgtdGFibGUnIHRleHQgcHJvcGVydHkuCi0gIChkZWZhbGlhcyAnZmFzdC1sb2Nr LWdldC1zeW50YWN0aWMtcHJvcGVydGllcwotICAgICdpZ25vcmUpCi0gIDs7Ci0gIDs7IE1ha2Ug ZXh0ZW50cyBqdXN0IGxpa2UgWEVtYWNzJyBmb250LWxvY2suZWwgZG9lcy4KLSAgKGRlZnVuIGZh c3QtbG9jay1hZGQtcHJvcGVydGllcyAoc3ludGFjdGljLXByb3BlcnRpZXMgZmFjZS1wcm9wZXJ0 aWVzKQotICAgICJTZXQgYGZhY2UnIHRleHQgcHJvcGVydGllcyBpbiB0aGUgY3VycmVudCBidWZm ZXIuCi1BbnkgZXhpc3RpbmcgYGZhY2UnIHRleHQgcHJvcGVydGllcyBhcmUgcmVtb3ZlZCBmaXJz dC4KLVNlZSBgZmFzdC1sb2NrLWdldC1mYWNlLXByb3BlcnRpZXMnLiIKLSAgICAoc2F2ZS1yZXN0 cmljdGlvbgotICAgICAgKHdpZGVuKQotICAgICAgKGZvbnQtbG9jay11bmZvbnRpZnktcmVnaW9u IChwb2ludC1taW4pIChwb2ludC1tYXgpKQotICAgICAgOzsgU2V0IHRoZSBgZmFjZScgcHJvcGVy dHksIGV0Yy4sIGZvciBlYWNoIHN0YXJ0L2VuZCByZWdpb24uCi0gICAgICAod2hpbGUgZmFjZS1w cm9wZXJ0aWVzCi0JKGxldCAoKGZhY2UgKGNhciAoY2FyIGZhY2UtcHJvcGVydGllcykpKQotCSAg ICAgIChyZWdpb25zIChjZHIgKGNhciBmYWNlLXByb3BlcnRpZXMpKSkpCi0JICAod2hpbGUgcmVn aW9ucwotCSAgICAoZm9udC1sb2NrLXNldC1mYWNlIChudGggMCByZWdpb25zKSAobnRoIDEgcmVn aW9ucykgZmFjZSkKLQkgICAgKHNldHEgcmVnaW9ucyAobnRoY2RyIDIgcmVnaW9ucykpKQotCSAg KHNldHEgZmFjZS1wcm9wZXJ0aWVzIChjZHIgZmFjZS1wcm9wZXJ0aWVzKSkpKQotICAgICAgOzsg WEVtYWNzIGRvZXMgbm90IHN1cHBvcnQgdGhlIGBzeW50YXgtdGFibGUnIHRleHQgcHJvcGVydHku Ci0gICAgICApKQotICA7OwotICA7OyBYRW1hY3MgMTkuMTIgZm9udC1sb2NrLmVsJ3MgYGZvbnQt bG9jay1mb250aWZ5LWJ1ZmZlcicgcnVucyBhIGhvb2suCi0gIChhZGQtaG9vayAnZm9udC1sb2Nr LWFmdGVyLWZvbnRpZnktYnVmZmVyLWhvb2sKLQkgICAgJ2Zhc3QtbG9jay1hZnRlci1mb250aWZ5 LWJ1ZmZlcikpCi0KLSh1bmxlc3MgKGJvdW5kcCAnZm9udC1sb2NrLXN5bnRhY3RpYy1rZXl3b3Jk cykKLSAgKGRlZnZhciBmb250LWxvY2stc3ludGFjdGljLWtleXdvcmRzIG5pbCkpCi0KLSh1bmxl c3MgKGJvdW5kcCAnZm9udC1sb2NrLWluaGliaXQtdGhpbmctbG9jaykKLSAgKGRlZnZhciBmb250 LWxvY2staW5oaWJpdC10aGluZy1sb2NrIG5pbCkpCi0KLSh1bmxlc3MgKGZib3VuZHAgJ2ZvbnQt bG9jay1jb21waWxlLWtleXdvcmRzKQotICAoZGVmYWxpYXMgJ2ZvbnQtbG9jay1jb21waWxlLWtl eXdvcmRzICdpZGVudGl0eSkpCi0KLSh1bmxlc3MgKGZib3VuZHAgJ2ZvbnQtbG9jay1ldmFsLWtl eXdvcmRzKQotICAoZGVmdW4gZm9udC1sb2NrLWV2YWwta2V5d29yZHMgKGtleXdvcmRzKQotICAg IChpZiAoc3ltYm9scCBrZXl3b3JkcykKLQkoZm9udC1sb2NrLWV2YWwta2V5d29yZHMgKGlmIChm Ym91bmRwIGtleXdvcmRzKQotCQkJCSAgICAgKGZ1bmNhbGwga2V5d29yZHMpCi0JCQkJICAgKGV2 YWwga2V5d29yZHMpKSkKLSAgICAgIGtleXdvcmRzKSkpCi0KLSh1bmxlc3MgKGZib3VuZHAgJ2Zv bnQtbG9jay12YWx1ZS1pbi1tYWpvci1tb2RlKQotICAoZGVmdW4gZm9udC1sb2NrLXZhbHVlLWlu LW1ham9yLW1vZGUgKGFsaXN0KQotICAgIChpZiAoY29uc3AgYWxpc3QpCi0JKGNkciAob3IgKGFz c3EgbWFqb3ItbW9kZSBhbGlzdCkgKGFzc3EgdCBhbGlzdCkpKQotICAgICAgYWxpc3QpKSkKLQot KHVubGVzcyAoZmJvdW5kcCAnY3VycmVudC1tZXNzYWdlKQotICAoZGVmdW4gY3VycmVudC1tZXNz YWdlICgpCi0gICAgIiIpKQotDAotOzsgSW5zdGFsbCBvdXJzZWx2ZXM6Ci0KLShhZGQtaG9vayAn YWZ0ZXItc2F2ZS1ob29rICdmYXN0LWxvY2stc2F2ZS1jYWNoZS1hZnRlci1zYXZlLWZpbGUpCi0o YWRkLWhvb2sgJ2tpbGwtYnVmZmVyLWhvb2sgJ2Zhc3QtbG9jay1zYXZlLWNhY2hlLWJlZm9yZS1r aWxsLWJ1ZmZlcikKLSh1bmxlc3Mgbm9uaW50ZXJhY3RpdmUKLSAgKGFkZC1ob29rICdraWxsLWVt YWNzLWhvb2sgJ2Zhc3QtbG9jay1zYXZlLWNhY2hlcy1iZWZvcmUta2lsbC1lbWFjcykpCi0KLTs7 OyMjI2F1dG9sb2FkCi0od2hlbiAoZmJvdW5kcCAnYWRkLW1pbm9yLW1vZGUpCi0gIChkZWZ2YXIg ZmFzdC1sb2NrLW1vZGUgbmlsKQotICAoYWRkLW1pbm9yLW1vZGUgJ2Zhc3QtbG9jay1tb2RlIG5p bCkpCi07OzsjIyNkb250LWF1dG9sb2FkCi0odW5sZXNzIChhc3NxICdmYXN0LWxvY2stbW9kZSBt aW5vci1tb2RlLWFsaXN0KQotICAoc2V0cSBtaW5vci1tb2RlLWFsaXN0IChhcHBlbmQgbWlub3It bW9kZS1hbGlzdCAnKChmYXN0LWxvY2stbW9kZSBuaWwpKSkpKQotCi07OyBQcm92aWRlIG91cnNl bHZlczoKLQotKHByb3ZpZGUgJ2Zhc3QtbG9jaykKLQotOzs7IGZhc3QtbG9jay5lbCBlbmRzIGhl cmUKLQotOzsgTG9jYWwgVmFyaWFibGVzOgotOzsgYnl0ZS1jb21waWxlLXdhcm5pbmdzOiAobm90 IG9ic29sZXRlKQotOzsgRW5kOgpkaWZmIC0tZ2l0IGEvbGlzcC9vYnNvbGV0ZS9sYXp5LWxvY2su ZWwgYi9saXNwL29ic29sZXRlL2xhenktbG9jay5lbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggNjk0MTg4ZmYyMy4uMDAwMDAwMDAwMAotLS0gYS9saXNwL29ic29sZXRlL2xhenktbG9j ay5lbAorKysgL2Rldi9udWxsCkBAIC0xLDEwNTMgKzAsMCBAQAotOzs7IGxhenktbG9jay5lbCAt LS0gbGF6eSBkZW1hbmQtZHJpdmVuIGZvbnRpZmljYXRpb24gZm9yIGZhc3QgRm9udCBMb2NrIG1v ZGUKLQotOzsgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTgsIDIwMDEtMjAyMCBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KLQotOzsgQXV0aG9yOiBTaW1vbiBNYXJzaGFsbCA8c2ltb25AZ251 Lm9yZz4KLTs7IE1haW50YWluZXI6IGVtYWNzLWRldmVsQGdudS5vcmcKLTs7IEtleXdvcmRzOiBm YWNlcyBmaWxlcwotOzsgVmVyc2lvbjogMi4xMQotOzsgT2Jzb2xldGUtc2luY2U6IDIyLjEKLQot OzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEVtYWNzLgotCi07OyBHTlUgRW1hY3MgaXMgZnJl ZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotOzsgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKLTs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9u IDMgb2YgdGhlIExpY2Vuc2UsIG9yCi07OyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgotCi07OyBHTlUgRW1hY3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKLTs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi07OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi07OyBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi07OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotOzsgYWxvbmcgd2l0aCBH TlUgRW1hY3MuICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgot Ci07OzsgQ29tbWVudGFyeToKLQotOzsgUHVycG9zZToKLTs7Ci07OyBMYXp5IExvY2sgbW9kZSBp cyBhIEZvbnQgTG9jayBzdXBwb3J0IG1vZGUuCi07OyBJdCBtYWtlcyB2aXNpdGluZyBidWZmZXJz IGluIEZvbnQgTG9jayBtb2RlIGZhc3RlciBieSBtYWtpbmcgZm9udGlmaWNhdGlvbgotOzsgYmUg ZGVtYW5kLWRyaXZlbiwgZGVmZXJyZWQgYW5kIHN0ZWFsdGh5LCBzbyB0aGF0IGZvbnRpZmljYXRp b24gb25seSBvY2N1cnMKLTs7IHdoZW4sIGFuZCB3aGVyZSwgbmVjZXNzYXJ5LgotOzsKLTs7IFNl ZSBjYXZlYXRzIGFuZCBmZWVkYmFjayBiZWxvdy4KLTs7IFNlZSBhbHNvIHRoZSBmYXN0LWxvY2sg cGFja2FnZS4gIChCdXQgZG9uJ3QgdXNlIHRoZW0gYXQgdGhlIHNhbWUgdGltZSEpCi0KLTs7IElu c3RhbGxhdGlvbjoKLTs7Ci07OyBQdXQgaW4geW91ciB+Ly5lbWFjczoKLTs7Ci07OyAoc2V0cSBm b250LWxvY2stc3VwcG9ydC1tb2RlICdsYXp5LWxvY2stbW9kZSkKLTs7Ci07OyBTdGFydCB1cCBh IG5ldyBFbWFjcyBhbmQgdXNlIGZvbnQtbG9jayBhcyB1c3VhbCAoZXhjZXB0IHRoYXQgeW91IGNh biB1c2UgdGhlCi07OyBzby1jYWxsZWQgImdhdWRpZXIiIGZvbnRpZmljYXRpb24gcmVnZXhwcyBv biBiaWcgZmlsZXMgd2l0aG91dCBmcnVzdHJhdGlvbikuCi07OwotOzsgSW4gYSBidWZmZXIgKHdo aWNoIGhhcyBgZm9udC1sb2NrLW1vZGUnIGVuYWJsZWQpIHdoaWNoIGlzIGF0IGxlYXN0Ci07OyBg bGF6eS1sb2NrLW1pbmltdW0tc2l6ZScgY2hhcmFjdGVycyBsb25nLCBidWZmZXIgZm9udGlmaWNh dGlvbiB3aWxsIG5vdAotOzsgb2NjdXIgYW5kIG9ubHkgdGhlIHZpc2libGUgcG9ydGlvbiBvZiB0 aGUgYnVmZmVyIHdpbGwgYmUgZm9udGlmaWVkLiAgTW90aW9uCi07OyBhcm91bmQgdGhlIGJ1ZmZl ciB3aWxsIGZvbnRpZnkgdGhvc2UgdmlzaWJsZSBwb3J0aW9ucyBub3QgcHJldmlvdXNseQotOzsg Zm9udGlmaWVkLiAgSWYgc3RlYWx0aCBmb250aWZpY2F0aW9uIGlzIGVuYWJsZWQsIGJ1ZmZlciBm b250aWZpY2F0aW9uIHdpbGwKLTs7IG9jY3VyIGluIGludmlzaWJsZSBwYXJ0cyBvZiB0aGUgYnVm ZmVyIGFmdGVyIGBsYXp5LWxvY2stc3RlYWx0aC10aW1lJwotOzsgc2Vjb25kcyBvZiBpZGxlIHRp bWUuICBJZiBvbi10aGUtZmx5IGZvbnRpZmljYXRpb24gaXMgZGVmZXJyZWQsIG9uLXRoZS1mbHkK LTs7IGZvbnRpZmljYXRpb24gd2lsbCBvY2N1ciBhZnRlciBgbGF6eS1sb2NrLWRlZmVyLXRpbWUn IHNlY29uZHMgb2YgaWRsZSB0aW1lLgotCi07OyBVc2VyLXZpc2libGUgZGlmZmVyZW5jZXMgd2l0 aCB2ZXJzaW9uIDE6Ci07OwotOzsgLSBWZXJzaW9uIDIgY2FuIGRlZmVyIG9uLXRoZS1mbHkgZm9u dGlmaWNhdGlvbi4gIFRoZXJlZm9yZSB5b3UgbmVlZCBub3QsIGFuZAotOzsgc2hvdWxkIG5vdCwg dXNlIGRlZmVyLWxvY2suZWwgd2l0aCB0aGlzIHZlcnNpb24gb2YgbGF6eS1sb2NrLmVsLgotOzsK LTs7IEEgbnVtYmVyIG9mIHZhcmlhYmxlcyBoYXZlIGNoYW5nZWQgbWVhbmluZzoKLTs7Ci07OyAt IEEgdmFsdWUgb2YgbmlsIGZvciB0aGUgdmFyaWFibGUgYGxhenktbG9jay1taW5pbXVtLXNpemUn IG1lYW5zIG5ldmVyIHR1cm4KLTs7IG9uIGRlbWFuZC1kcml2ZW4gZm9udGlmaWNhdGlvbi4gIElu IHZlcnNpb24gMSB0aGlzIG1lYW50IGFsd2F5cyB0dXJuIG9uCi07OyBkZW1hbmQtZHJpdmVuIGZv bnRpZmljYXRpb24uICBJZiB5b3UgcmVhbGx5IHdhbnQgZGVtYW5kLWRyaXZlbiBmb250aWZpY2F0 aW9uCi07OyByZWdhcmRsZXNzIG9mIGJ1ZmZlciBzaXplLCBzZXQgdGhpcyB2YXJpYWJsZSB0byAw LgotOzsKLTs7IC0gVGhlIHZhcmlhYmxlIGBsYXp5LWxvY2stc3RlYWx0aC1saW5lcycgY2Fubm90 IGhhdmUgYSBuaWwgdmFsdWUuICBJbgotOzsgdmVyc2lvbiAxIHRoaXMgbWVhbnQgdXNlIGB3aW5k b3ctaGVpZ2h0JyBhcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8KLTs7IGZvbnRpZnkg YXMgYSBzdGVhbHRoIGNodW5rLiAgVGhpcyBtYWtlcyBubyBzZW5zZTsgc3RlYWx0aCBmb250aWZp Y2F0aW9uIGlzCi07OyBvZiBhIGJ1ZmZlciwgbm90IGEgd2luZG93LgotCi07OyBJbXBsZW1lbnRh dGlvbiBkaWZmZXJlbmNlcyB3aXRoIHZlcnNpb24gMToKLTs7Ci07OyAtIFZlcnNpb24gMSBvZiBs YXp5LWxvY2suZWwgaXMgYSBiaXQgb2YgYSBoYWNrLiAgVmVyc2lvbiAxIGRlbWFuZC1kcml2ZW4K LTs7IGZvbnRpZmljYXRpb24sIHRoZSBjb3JlIGZlYXR1cmUgb2YgbGF6eS1sb2NrLmVsLCBpcyBp bXBsZW1lbnRlZCBieSBwbGFjaW5nIGEKLTs7IGZ1bmN0aW9uIG9uIGBwb3N0LWNvbW1hbmQtaG9v aycuICBUaGlzIGZ1bmN0aW9uIGZvbnRpZmllcyB3aGVyZSBuZWNlc3NhcnksCi07OyBpLmUuLCB3 aGVyZSBhIHdpbmRvdyBzY3JvbGwgaGFzIG9jY3VycmVkLiAgSG93ZXZlciwgdGhlcmUgYXJlIGEg bnVtYmVyIG9mCi07OyBwcm9ibGVtcyB3aXRoIHVzaW5nIGBwb3N0LWNvbW1hbmQtaG9vayc6Ci07 OwotOzsgKGEpIEFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBgcG9zdC1jb21tYW5kLWhvb2snIGlzIHJ1 biBhZnRlciBldmVyeSBjb21tYW5kLAotOzsgICAgIGkuZS4sIGZyZXF1ZW50bHkgYW5kIHJlZ2Fy ZGxlc3Mgb2Ygd2hldGhlciBzY3JvbGxpbmcgaGFzIG9jY3VycmVkLgotOzsgKGIpIFNjcm9sbGlu ZyBjYW4gb2NjdXIgZHVyaW5nIGEgY29tbWFuZCwgd2hlbiBgcG9zdC1jb21tYW5kLWhvb2snIGlz IG5vdAotOzsgICAgIHJ1biwgaS5lLiwgaXQgaXMgbm90IG5lY2Vzc2FyaWx5IHJ1biBhZnRlciBz Y3JvbGxpbmcgaGFzIG9jY3VycmVkLgotOzsgKGMpIFdoZW4gYHBvc3QtY29tbWFuZC1ob29rJyBp cyBydW4sIHRoZXJlIGlzIG5vdGhpbmcgdG8gc3VnZ2VzdCB3aGVyZQotOzsgICAgIHNjcm9sbGlu ZyBtaWdodCBoYXZlIG9jY3VycmVkLCBpLmUuLCB3aGljaCB3aW5kb3dzIGhhdmUgc2Nyb2xsZWQu Ci07OwotOzsgVGh1cyBsYXp5LWxvY2suZWwncyBmdW5jdGlvbiBpcyBjYWxsZWQgYWxtb3N0IGFz IG9mdGVuIGFzIHBvc3NpYmxlLCB1c3VhbGx5Ci07OyB3aGVuIGl0IG5lZWQgbm90IGJlIGNhbGxl ZCwgeWV0IGl0IGlzIG5vdCBhbHdheXMgY2FsbGVkIHdoZW4gaXQgaXMgbmVlZGVkLgotOzsgQWxz bywgbGF6eS1sb2NrLmVsJ3MgZnVuY3Rpb24gbXVzdCBjaGVjayBlYWNoIHdpbmRvdyB0byBzZWUg aWYgYSBzY3JvbGwgaGFzCi07OyBvY2N1cnJlZCB0aGVyZS4gIFdvcnNlIHN0aWxsLCBsYXp5LWxv Y2suZWwncyBmdW5jdGlvbiBtdXN0IGZvbnRpZnkgYSByZWdpb24KLTs7IHR3aWNlIGFzIGxhcmdl IGFzIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgdGhlIHdpbmRvdyBpcyBjb21wbGV0ZWx5IGZvbnRp ZmllZC4KLTs7IEJhc2ljYWxseSwgYHBvc3QtY29tbWFuZC1ob29rJyBpcyBjb21wbGV0ZWx5IGlu YXBwcm9wcmlhdGUgZm9yIGxhenktbG9jay5lbC4KLTs7Ci07OyBJZGVhbGx5LCB3ZSB3YW50IHRv IGF0dGFjaCBsYXp5LWxvY2suZWwncyBmdW5jdGlvbiB0byBhIGhvb2sgdGhhdCBpcyBydW4KLTs7 IG9ubHkgd2hlbiBzY3JvbGxpbmcgb2NjdXJzLCBlLmcuLCBgd2luZG93LXN0YXJ0JyBoYXMgY2hh bmdlZCwgYW5kIHRlbGxzIHVzCi07OyBhcyBtdWNoIGluZm9ybWF0aW9uIGFzIHdlIG5lZWQsIGku ZS4sIHRoZSB3aW5kb3cgYW5kIGl0cyBuZXcgYnVmZmVyIHJlZ2lvbi4KLTs7IFJpY2hhcmQgU3Rh bGxtYW4gaW1wbGVtZW50ZWQgYSBgd2luZG93LXNjcm9sbC1mdW5jdGlvbnMnIGZvciBFbWFjcyAx OS4zMC4KLTs7IEZ1bmN0aW9ucyBvbiBpdCBhcmUgcnVuIHdoZW4gYHdpbmRvdy1zdGFydCcgaGFz IGNoYW5nZWQsIGFuZCBhcmUgc3VwcGxpZWQKLTs7IHdpdGggdGhlIHdpbmRvdyBhbmQgdGhlIHdp bmRvdydzIG5ldyBgd2luZG93LXN0YXJ0JyBwb3NpdGlvbi4gIChJdCB3b3VsZCBiZQotOzsgYmV0 dGVyIGlmIGl0IGFsc28gc3VwcGxpZWQgdGhlIHdpbmRvdydzIG5ldyBgd2luZG93LWVuZCcgcG9z aXRpb24sIGJ1dCB0aGF0Ci07OyBpcyBjYWxjdWxhdGVkIGFzIHBhcnQgb2YgdGhlIHJlZGlzcGxh eSBwcm9jZXNzLCBhbmQgdGhlIGZ1bmN0aW9ucyBvbgotOzsgYHdpbmRvdy1zY3JvbGwtZnVuY3Rp b25zJyBhcmUgcnVuIGJlZm9yZSByZWRpc3BsYXkgaGFzIGZpbmlzaGVkLikgIFRodXMsIHRoZQot OzsgaG9vayBkZWFscyB3aXRoIHRoZSBhYm92ZSBwcm9ibGVtcyAoYSksIChiKSBhbmQgKGMpLgot OzsKLTs7IElmIG9ubHkgbGlmZSB3YXMgdGhhdCBlYXN5LiAgVmVyc2lvbiAyIGRlbWFuZC1kcml2 ZW4gZm9udGlmaWNhdGlvbiBpcyBtb3N0bHkKLTs7IGltcGxlbWVudGVkIGJ5IHBsYWNpbmcgYSBm dW5jdGlvbiBvbiBgd2luZG93LXNjcm9sbC1mdW5jdGlvbnMnLiAgSG93ZXZlciwKLTs7IG5vdCBh bGwgc2Nyb2xsaW5nIG9jY3VycyB3aGVuIGB3aW5kb3ctc3RhcnQnIGhhcyBjaGFuZ2VkLiAgQSBj aGFuZ2UgaW4KLTs7IHdpbmRvdyBzaXplLCBlLmcuLCB2aWEgQy14IDEsIG9yIGEgc2lnbmlmaWNh bnQgZGVsZXRpb24sIGUuZy4sIG9mIGEgbnVtYmVyCi07OyBvZiBsaW5lcywgY2F1c2VzIHRleHQg cHJldmlvdXNseSBpbnZpc2libGUgKGkuZS4sIGFmdGVyIGB3aW5kb3ctZW5kJykgdG8KLTs7IGJl Y29tZSB2aXNpYmxlIHdpdGhvdXQgY2hhbmdpbmcgYHdpbmRvdy1zdGFydCcuICBBcmd1YWJseSwg dGhlc2UgZXZlbnRzIGFyZQotOzsgbm90IHNjcm9sbGluZyBldmVudHMsIGJ1dCBmb250aWZpY2F0 aW9uIG11c3Qgb2NjdXIgZm9yIGxhenktbG9jay5lbCB0byB3b3JrLgotOzsgSG9va3MgYHdpbmRv dy1zaXplLWNoYW5nZS1mdW5jdGlvbnMnIGFuZCBgcmVkaXNwbGF5LWVuZC10cmlnZ2VyLWZ1bmN0 aW9ucycKLTs7IHdlcmUgYWRkZWQgZm9yIHRoZXNlIGNpcmN1bXN0YW5jZXMuCi07OwotOzsgKEJl biBXaW5nIHRoaW5rcyB0aGVzZSBob29rcyBhcmUgImhvcnJpYmx5IGhvcnJpYmx5IGtsdWRneSIs IGFuZCBpbXBsZW1lbnRlZAotOzsgYSBgcHJlLWlkbGUtaG9vaycsIGEgYG1vdGhlci1vZi1hbGwt cG9zdC1jb21tYW5kLWhvb2tzJywgZm9yIFhFbWFjcyAxOS4xNC4KLTs7IEhlIHRoZW4gaGFja2Vk IHVwIGEgdmVyc2lvbiAxIGxhenktbG9jay5lbCB0byB1c2UgYHByZS1pZGxlLWhvb2snIHJhdGhl cgotOzsgdGhhbiBgcG9zdC1jb21tYW5kLWhvb2snLiAgV2hlcmVhcyBmdW5jdGlvbnMgb24gYHBv c3QtY29tbWFuZC1ob29rJyBhcmUKLTs7IGNhbGxlZCBhbG1vc3QgYXMgb2Z0ZW4gYXMgcG9zc2li bGUsIGZ1bmN0aW9ucyBvbiBgcHJlLWlkbGUtaG9vaycgcmVhbGx5IGFyZQotOzsgY2FsbGVkIGFz IG9mdGVuIGFzIHBvc3NpYmxlLCBldmVuIHdoZW4gdGhlIG1vdXNlIG1vdmVzIGFuZCwgb24gc29t ZSBzeXN0ZW1zLAotOzsgd2hpbGUgWEVtYWNzIGlzIGlkbGUuICBUaHVzLCB0aGUgaG9vayBkZWFs cyB3aXRoIHRoZSBhYm92ZSBwcm9ibGVtIChiKSwgYnV0Ci07OyB1bmZvcnR1bmF0ZWx5IGl0IG1h a2VzIChhKSB3b3JzZSBhbmQgZG9lcyBub3QgYWRkcmVzcyAoYykgYXQgYWxsLgotOzsKLTs7IEkg ZnJlZWx5IGFkbWl0IHRoYXQgYHJlZGlzcGxheS1lbmQtdHJpZ2dlci1mdW5jdGlvbnMnIGFuZCwg dG8gYSBtdWNoIGxlc3NlcgotOzsgZXh0ZW50LCBgd2luZG93LXNpemUtY2hhbmdlLWZ1bmN0aW9u cycgYXJlIG5vdCBwcmV0dHkuICBIb3dldmVyLCBJIGZlZWwgdGhhdAotOzsgYSBgd2luZG93LXNj cm9sbC1mdW5jdGlvbnMnIGZlYXR1cmUgaXMgY2xlYW5lciB0aGFuIGEgYHByZS1pZGxlLWhvb2sn LCBhbmQKLTs7IHRoZSByZXN1bHQgaXMgZmFzdGVyIGFuZCBzbWFsbGVyLCBsZXNzIGludHJ1c2l2 ZSBhbmQgbW9yZSB0YXJnZXRlZCwgY29kZS4KLTs7IFNpbmNlIGBwcmUtaWRsZS1ob29rJyBpcyBw cmV0dHkgbXVjaCBsaWtlIGBwb3N0LWNvbW1hbmQtaG9vaycsIHRoZXJlIGlzIG5vCi07OyBwb2lu dCBpbiBtYWtpbmcgdGhpcyB2ZXJzaW9uIG9mIGxhenktbG9jay5lbCB3b3JrIHdpdGggaXQuICBB bnl3YXksIHRoYXQncwotOzsgTGl0IDMwIG9mIG15IGh1bWJsZSBvcGluaW9uLgotOzsKLTs7IC0g VmVyc2lvbiAxIHN0ZWFsdGggZm9udGlmaWNhdGlvbiBpcyBhbHNvIGltcGxlbWVudGVkIGJ5IHBs YWNpbmcgYSBmdW5jdGlvbgotOzsgb24gYHBvc3QtY29tbWFuZC1ob29rJy4gIFRoaXMgZnVuY3Rp b24gd2FpdHMgZm9yIGEgZ2l2ZW4gYW1vdW50IG9mIHRpbWUsCi07OyBhbmQsIGlmIEVtYWNzIHJl bWFpbnMgaWRsZSwgZm9udGlmaWVzIHdoZXJlIG5lY2Vzc2FyeS4gIEFnYWluLCB0aGVyZSBhcmUg YQotOzsgbnVtYmVyIG9mIHByb2JsZW1zIHdpdGggdXNpbmcgYHBvc3QtY29tbWFuZC1ob29rJzoK LTs7Ci07OyAoYSkgRnVuY3Rpb25zIG9uIGBwb3N0LWNvbW1hbmQtaG9vaycgYXJlIHJ1biBzZXF1 ZW50aWFsbHksIHNvIHRoaXMgZnVuY3Rpb24KLTs7ICAgICBjYW4gaW50ZXJmZXJlIHdpdGggb3Ro ZXIgZnVuY3Rpb25zIG9uIHRoZSBob29rLCBhbmQgdmljZSB2ZXJzYS4KLTs7IChiKSBUaGlzIGZ1 bmN0aW9uIHdhaXRzIGZvciBhIGdpdmVuIGFtb3VudCBvZiB0aW1lLCBzbyBpdCBjYW4gaW50ZXJm ZXJlIHdpdGgKLTs7ICAgICB2YXJpb3VzIGZlYXR1cmVzIHRoYXQgYXJlIGRlYWx0IHdpdGggYnkg RW1hY3MgYWZ0ZXIgYSBjb21tYW5kLCBlLmcuLAotOzsgICAgIHJlZ2lvbiBoaWdobGlnaHRpbmcs IGFzeW5jaHJvbm91cyB1cGRhdGluZyBhbmQga2V5c3Ryb2tlIGVjaG9pbmcuCi07OyAoYykgRm9u dGlmaWNhdGlvbiBtYXkgYmUgcmVxdWlyZWQgZHVyaW5nIGEgY29tbWFuZCwgd2hlbiBgcG9zdC1j b21tYW5kLWhvb2snCi07OyAgICAgaXMgbm90IHJ1bi4gIChWZXJzaW9uIDIgZGVmZXJyZWQgZm9u dGlmaWNhdGlvbiBvbmx5LikKLTs7Ci07OyBBZ2FpbiwgYHBvc3QtY29tbWFuZC1ob29rJyBpcyBj b21wbGV0ZWx5IGluYXBwcm9wcmlhdGUgZm9yIGxhenktbG9jay5lbC4KLTs7IFJpY2hhcmQgU3Rh bGxtYW4gYW5kIE1vcnRlbiBXZWxpbmRlciBpbXBsZW1lbnRlZCBpbnRlcm5hbCBUaW1lcnMgYW5k IElkbGUKLTs7IFRpbWVycyBmb3IgRW1hY3MgMTkuMzEuICBGdW5jdGlvbnMgY2FuIGJlIHJ1biBp bmRlcGVuZGVudGx5IGF0IGdpdmVuIHRpbWVzCi07OyBvciBhZnRlciBnaXZlbiBhbW91bnRzIG9m IGlkbGUgdGltZS4gIFRodXMsIHRoZSBmZWF0dXJlIGRlYWxzIHdpdGggdGhlIGFib3ZlCi07OyBw cm9ibGVtcyAoYSksIChiKSBhbmQgKGMpLiAgVmVyc2lvbiAyIGRlZmVycmFsIGFuZCBzdGVhbHRo IGFyZSBpbXBsZW1lbnRlZAotOzsgYnkgZnVuY3Rpb25zIG9uIElkbGUgVGltZXJzLiAgKEEgZnVu Y3Rpb24gb24gWEVtYWNzJyBgcHJlLWlkbGUtaG9vaycgaXMKLTs7IHNpbWlsYXIgdG8gYW4gRW1h Y3MgSWRsZSBUaW1lciBmdW5jdGlvbiB3aXRoIGEgZml4ZWQgemVybyBzZWNvbmQgdGltZW91dC4p Ci0KLTs7IC0gVmVyc2lvbiAxIGhhcyB0aGUgZm9sbG93aW5nIHByb2JsZW1zIChyZWxhdGl2ZSB0 byB2ZXJzaW9uIDIpOgotOzsKLTs7IChhKSBJdCBpcyBzbG93IHdoZW4gaXQgZG9lcyBpdHMgam9i LgotOzsgKGIpIEl0IGRvZXMgbm90IGFsd2F5cyBkbyBpdHMgam9iIHdoZW4gaXQgc2hvdWxkLgot OzsgKGMpIEl0IHNsb3dzIGFsbCBpbnRlcmFjdGlvbiAod2hlbiBpdCBkb2Vzbid0IG5lZWQgdG8g ZG8gaXRzIGpvYikuCi07OyAoZCkgSXQgaW50ZXJmZXJlcyB3aXRoIG90aGVyIHBhY2thZ2UgZnVu Y3Rpb25zIG9uIGBwb3N0LWNvbW1hbmQtaG9vaycuCi07OyAoZSkgSXQgaW50ZXJmZXJlcyB3aXRo IEVtYWNzIHRoaW5ncyB3aXRoaW4gdGhlIHJlYWQtZXZhbCBsb29wLgotOzsKLTs7IEJlbidzIGhh Y2tlZC11cCBsYXp5LWxvY2suZWwgMS4xNCBhbG1vc3Qgc29sdmVkIChiKSBidXQgbWFkZSAoYykg d29yc2UuCi07OwotOzsgLSBWZXJzaW9uIDIgaGFzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBm ZWF0dXJlcyAocmVsYXRpdmUgdG8gdmVyc2lvbiAxKToKLTs7Ci07OyAoYSkgSXQgY2FuIGRlZmVy IGZvbnRpZmljYXRpb24gKGJvdGggb24tdGhlLWZseSBhbmQgb24tc2Nyb2xsaW5nKS4KLTs7IChi KSBJdCBjYW4gZm9udGlmeSBjb250ZXh0dWFsbHkgKHN5bnRhY3RpY2FsbHkgdHJ1ZSBvbi10aGUt Zmx5KS4KLQotOzsgQ2F2ZWF0czoKLTs7Ci07OyBMYXp5IExvY2sgbW9kZSBkb2VzIG5vdCB3b3Jr IGVmZmljaWVudGx5IHdpdGggT3V0bGluZSBtb2RlLgotOzsgVGhpcyBpcyBiZWNhdXNlIHdoZW4g aW4gT3V0bGluZSBtb2RlLCBhbHRob3VnaCB0ZXh0IG1heSBiZSBub3QgdmlzaWJsZSB0bwotOzsg eW91IGluIHRoZSB3aW5kb3csIHRoZSB0ZXh0IGlzIHZpc2libGUgdG8gRW1hY3MgTGlzcCBjb2Rl IChub3Qgc3VycHJpc2luZ2x5KQotOzsgYW5kIExhenkgTG9jayBmb250aWZpZXMgaXQgbWVyY2ls ZXNzbHkuICBNYXliZSBpdCB3aWxsIGJlIGZpeGVkIG9uZSBkYXkuCi07OwotOzsgQmVjYXVzZSBi dWZmZXIgdGV4dCBpcyBub3QgbmVjZXNzYXJpbHkgZm9udGlmaWVkLCBvdGhlciBwYWNrYWdlcyB0 aGF0IGV4cGVjdAotOzsgYnVmZmVyIHRleHQgdG8gYmUgZm9udGlmaWVkIGluIEZvbnQgTG9jayBt b2RlIGVpdGhlciBtaWdodCBub3Qgd29yayBhcwotOzsgZXhwZWN0ZWQsIG9yIG1pZ2h0IG5vdCBk aXNwbGF5IGJ1ZmZlciB0ZXh0IGFzIGV4cGVjdGVkLiAgQW4gZXhhbXBsZSBvZiB0aGUKLTs7IGxh dHRlciBpcyBgb2NjdXInLCB3aGljaCBjb3BpZXMgbGluZXMgb2YgYnVmZmVyIHRleHQgaW50byBh bm90aGVyIGJ1ZmZlci4KLTs7Ci07OyBJbiBFbWFjcyAxOS4zMCwgTGF6eSBMb2NrIG1vZGUgZG9l cyBub3QgZW5zdXJlIHRoYXQgYW4gZXhpc3RpbmcgYnVmZmVyIGlzCi07OyBmb250aWZpZWQgaWYg aXQgaXMgbWFkZSB2aXNpYmxlIHZpYSBhIG1pbmlidWZmZXItbGVzcyBjb21tYW5kIHRoYXQgcmVw bGFjZXMKLTs7IGFuIGV4aXN0aW5nIHdpbmRvdydzIGJ1ZmZlciAoZS5nLiwgdmlhIHRoZSBCdWZm ZXJzIG1lbnUpLiAgVXBncmFkZSEKLTs7Ci07OyBJbiBFbWFjcyAxOS4zMCwgTGF6eSBMb2NrIG1v ZGUgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggVHJhbnNpZW50IE1hcmsgbW9kZQotOzsgb3IgbW9k ZXMgYmFzZWQgb24gQ29taW50IG1vZGUgKGUuZy4sIFNoZWxsIG1vZGUpLCBhbmQgYWxzbyBpbnRl cmZlcmVzIHdpdGgKLTs7IHRoZSBlY2hvaW5nIG9mIGtleXN0cm9rZXMgaW4gdGhlIG1pbmlidWZm ZXIuICBUaGlzIGlzIGJlY2F1c2Ugb2YgdGhlIHdheQotOzsgZGVmZXJyYWwgYW5kIHN0ZWFsdGgg aGF2ZSB0byBiZSBpbXBsZW1lbnRlZCBmb3IgRW1hY3MgMTkuMzAuICBVcGdyYWRlIQotOzsKLTs7 IEN1cnJlbnRseSBYRW1hY3MgZG9lcyBub3QgaGF2ZSB0aGUgZmVhdHVyZXMgdG8gc3VwcG9ydCB0 aGlzIHZlcnNpb24gb2YKLTs7IGxhenktbG9jay5lbC4gIE1heWJlIGl0IHdpbGwgb25lIGRheS4K LQwKLTs7IEhpc3Rvcnk6Ci07OwotOzsgMS4xNS0tMi4wMDoKLTs7IC0gUmV3cml0ZSBmb3IgRW1h Y3MgMTkuMzAgYW5kIHRoZSBmZWF0dXJlcyBybXMgYWRkZWQgdG8gc3VwcG9ydCBsYXp5LWxvY2su ZWwKLTs7ICAgc28gdGhhdCBpdCBjb3VsZCB3b3JrIGNvcnJlY3RseSBhbmQgZWZmaWNpZW50bHku Ci07OyAtIE1hbnkgdGhhbmtzIHRvIHRob3NlIHdobyByZXBvcnRlZCBidWdzLCBmaXhlZCBidWdz LCBtYWRlIHN1Z2dlc3Rpb25zIG9yCi07OyAgIG90aGVyd2lzZSBjb250cmlidXRlZCBpbiB0aGUg dmVyc2lvbiAxIGN5Y2xlOyBKYXJpIEFhbHRvLCBLZXZpbiBCcm9hZGV5LAotOzsgICBVbHJpayBE aWNrb3csIEJpbGwgRHVidXF1ZSwgQm9iIEdsaWNrc3RlaW4sIEJvcmlzIEdvbGRvd3NreSwKLTs7 ICAgSm9uYXMgSmFybmVzdHJvbSwgRGF2aWQgS2FyciwgTWljaGFlbCBLaWZlciwgRXJpayBOYWdn dW0sIFJpY2sgU2xhZGtleSwKLTs7ICAgSmltIFRob21wc29uLCBCZW4gV2luZywgSWx5YSBaYWto YXJldmljaCwgYW5kIFJpY2hhcmQgU3RhbGxtYW4uCi07OyAyLjAwLS0yLjAxOgotOzsgLSBNYWRl IGBsYXp5LWxvY2stZm9udGlmeS1hZnRlci1jb21tYW5kJyBhbHdheXMgYHNpdC1mb3InIGFuZCBz byByZWRpc3BsYXkKLTs7IC0gVXNlIGBidWZmZXItbmFtZScgbm90IGBidWZmZXItbGl2ZS1wJyAo QmlsbCBEdWJ1cXVlIGhpbnQpCi07OyAtIE1hZGUgYGxhenktbG9jay1pbnN0YWxsJyBkbyBgYWRk LXRvLWxpc3QnIG5vdCBgc2V0cScgb2YgYGN1cnJlbnQtYnVmZmVyJwotOzsgLSBNYWRlIGBsYXp5 LWxvY2stZm9udGlmeS1hZnRlci1pbnN0YWxsJyBsb29wIG92ZXIgYnVmZmVyIGxpc3QKLTs7IC0g TWFkZSBgbGF6eS1sb2NrLWFycmFuZ2UtYmVmb3JlLWNoYW5nZScgdG8gYXJyYW5nZSBgd2luZG93 LWVuZCcgdHJpZ2dlcmluZwotOzsgLSBNYWRlIGBsYXp5LWxvY2stbGV0LWJ1ZmZlci1zdGF0ZScg d3JhcCBib3RoIGBiZWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucycKLTs7IC0gTWFkZSBgbGF6eS1sb2Nr LWZvbnRpZnktcmVnaW9uJyBkbyBgY29uZGl0aW9uLWNhc2UnIChIeW1hbiBSb3NlbiByZXBvcnQp Ci07OyAyLjAxLS0yLjAyOgotOzsgLSBVc2UgYGJ1ZmZlci1saXZlLXAnIGFzIGBidWZmZXItbmFt ZScgY2FuIGJhcmYgKFJpY2hhcmQgU3RhbnRvbiByZXBvcnQpCi07OyAtIE1hZGUgYGxhenktbG9j ay1pbnN0YWxsJyBzZXQgYGZvbnQtbG9jay1mb250aWZpZWQnIChLZXZpbiBEYXZpZHNvbiByZXBv cnQpCi07OyAtIE1hZGUgYGxhenktbG9jay1pbnN0YWxsJyBhZGQgaG9va3Mgb25seSBpZiBuZWVk ZWQKLTs7IC0gTWFkZSBgbGF6eS1sb2NrLXVuc3RhbGwnIGFkZCBgZm9udC1sb2NrLWFmdGVyLWNo YW5nZS1mdW5jdGlvbicgaWYgbmVlZGVkCi07OyAyLjAyLS0yLjAzOgotOzsgLSBNYWRlIGBsYXp5 LWxvY2stZm9udGlmeS1yZWdpb24nIGRvIGBjb25kaXRpb24tY2FzZScgZm9yIGBxdWl0JyB0b28K LTs7IC0gTWFkZSBgbGF6eS1sb2NrLW1vZGUnIHJlc3BlY3QgdGhlIHZhbHVlIG9mIGBmb250LWxv Y2staW5oaWJpdC10aGluZy1sb2NrJwotOzsgLSBBZGRlZCBgbGF6eS1sb2NrLWFmdGVyLXVuZm9u dGlmeS1idWZmZXInCi07OyAtIFJlbW92ZWQgYGxhenktbG9jay1mb250aWZ5LWFmdGVyLWluc3Rh bGwnIGhhY2sKLTs7IC0gTWFkZSBgbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXItc2Nyb2xsJyBub3Qg YHNldC1idWZmZXInIHRvIGB3aW5kb3ctYnVmZmVyJwotOzsgLSBNYWRlIGBsYXp5LWxvY2stZm9u dGlmeS1hZnRlci10cmlnZ2VyJyBub3QgYHNldC1idWZmZXInIHRvIGB3aW5kb3ctYnVmZmVyJwot OzsgLSBNYWRlIGBsYXp5LWxvY2stZm9udGlmeS1hZnRlci1pZGxlJyBiZSBpbnRlcnJ1cHRpYmxl IChTY290dCBCdXJzb24gaGludCkKLTs7IDIuMDMtLTIuMDQ6Ci07OyAtIFJld3JpdGUgZm9yIEVt YWNzIDE5LjMxIGlkbGUgdGltZXJzCi07OyAtIFJlbmFtZWQgYGJ1ZmZlci13aW5kb3dzJyB0byBg Z2V0LWJ1ZmZlci13aW5kb3ctbGlzdCcKLTs7IC0gUmVtb3ZlZCBgYnVmZmVyLWxpdmUtcCcKLTs7 IC0gTWFkZSBgbGF6eS1sb2NrLWRlZmVyLWFmdGVyLWNoYW5nZScgYWx3YXlzIHNhdmUgYGN1cnJl bnQtYnVmZmVyJwotOzsgLSBNYWRlIGBsYXp5LWxvY2stZm9udGlmeS1hZnRlci1kZWZlcicganVz dCBwcm9jZXNzIGJ1ZmZlcnMKLTs7IC0gTWFkZSBgbGF6eS1sb2NrLWluc3RhbGwtaG9va3MnIGFk ZCBob29rcyBjb3JyZWN0bHkgKEtldmluIEJyb2FkZXkgcmVwb3J0KQotOzsgLSBNYWRlIGBsYXp5 LWxvY2staW5zdGFsbCcgY29wZSBpZiBgbGF6eS1sb2NrLWRlZmVyLXRpbWUnIGlzIGEgbGlzdAot OzsgMi4wNC0tMi4wNToKLTs7IC0gUmV3cml0ZSBmb3IgQ29tbW9uIExpc3AgbWFjcm9zCi07OyAt IEFkZGVkIGBkby13aGlsZScgbWFjcm8KLTs7IC0gUmVuYW1lZCBgbGF6eS1sb2NrLWxldC1idWZm ZXItc3RhdGUnIG1hY3JvIHRvIGBzYXZlLWJ1ZmZlci1zdGF0ZScKLTs7IC0gUmV0dXJuZWQgYGxh enktbG9jay1mb250aWZ5LWFmdGVyLWluc3RhbGwnIGhhY2sgKERhcnJlbiBIYWxsIGhpbnQpCi07 OyAtIEFkZGVkIGBsYXp5LWxvY2stZGVmZXItb24tc2Nyb2xsaW5nJyBmdW5jdGlvbmFsaXR5IChT Y290dCBCeWVyIGhpbnQpCi07OyAtIE1hZGUgYGxhenktbG9jay1tb2RlJyB3cmFwIGBmb250LWxv Y2stc3VwcG9ydC1tb2RlJwotOzsgMi4wNS0tMi4wNjoKLTs7IC0gTWFkZSBgbGF6eS1sb2NrLWZv bnRpZnktYWZ0ZXItZGVmZXInIHN3YXAgY29ycmVjdGx5IChTY290dCBCeWVyIHJlcG9ydCkKLTs7 IDIuMDYtLTIuMDc6Ci07OyAtIEFkZGVkIGBsYXp5LWxvY2stc3RlYWx0aC1sb2FkJyBmdW5jdGlv bmFsaXR5IChSb2IgSG9vZnQgaGludCkKLTs7IC0gTWFkZSBgbGF6eS1sb2NrLXVuc3RhbGwnIGNh bGwgYGxhenktbG9jay1mb250aWZ5LXJlZ2lvbicgaWYgbmVlZGVkCi07OyAtIE1hZGUgYGxhenkt bG9jay1tb2RlJyBjYWxsIGBsYXp5LWxvY2stdW5zdGFsbCcgb25seSBpZiBuZWVkZWQKLTs7IC0g TWFkZSBgbGF6eS1sb2NrLWRlZmVyLWFmdGVyLXNjcm9sbCcgZG8gYHNldC13aW5kb3ctcmVkaXNw bGF5LWVuZC10cmlnZ2VyJwotOzsgLSBBZGRlZCBgbGF6eS1sb2NrLWRlZmVyLWNvbnRleHR1YWxs eScgZnVuY3Rpb25hbGl0eQotOzsgLSBBZGRlZCBgbGF6eS1sb2NrLWRlZmVyLW9uLXRoZS1mbHkn IGZyb20gYGxhenktbG9jay1kZWZlci10aW1lJwotOzsgLSBSZW5hbWVkIGBsYXp5LWxvY2stZGVm ZXItZHJpdmVuJyB0byBgbGF6eS1sb2NrLWRlZmVyLW9uLXNjcm9sbGluZycKLTs7IC0gUmVtb3Zl ZCBgbGF6eS1sb2NrLXN1Ym1pdC1idWctcmVwb3J0JyBhbmQgYmFkZSBmYXJld2VsbAotOzsgMi4w Ny0tMi4wODoKLTs7IC0gTWFkZSBgbGF6eS1sb2NrLWZvbnRpZnktY29uc2VydmF0aXZlbHknIGZv bnRpZnkgYXJvdW5kIGB3aW5kb3ctcG9pbnQnCi07OyAtIE1hZGUgYHNhdmUtYnVmZmVyLXN0YXRl JyB3cmFwIGBpbmhpYml0LXBvaW50LW1vdGlvbi1ob29rcycKLTs7IC0gQWRkZWQgQ3VzdG9tIHN1 cHBvcnQKLTs7IDIuMDgtLTIuMDk6Ci07OyAtIFJlbW92ZWQgYGJ5dGUtKicgdmFyaWFibGVzIGZy b20gYGV2YWwtd2hlbi1jb21waWxlJyAoRXJpayBOYWdndW0gaGludCkKLTs7IC0gTWFkZSB2YXJp b3VzIHdyYXBwaW5nIGBpbmhpYml0LXBvaW50LW1vdGlvbi1ob29rcycgKFZpbmljaXVzIExhdG9y cmUgaGludCkKLTs7IC0gTWFkZSBgbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXItaWRsZScgd3JhcCBg bWluaWJ1ZmZlci1hdXRvLXJhaXNlJwotOzsgLSBNYWRlIGBsYXp5LWxvY2stZm9udGlmeS1hZnRl ci1kZWZlcicgcGFyYW5vaWQgYWJvdXQgZGVmZXJyZWQgYnVmZmVycwotOzsgMi4wOS0tMi4xMDoK LTs7IC0gVXNlIGB3aW5kb3ctZW5kJyBVUERBVEUgYXJnIGZvciBFbWFjcyAyMC40IGFuZCBsYXRl ci4KLTs7IC0gTWFkZSBkZWZlcnJhbCBgd2lkZW4nIGJlZm9yZSB1bmZvbnRpZnlpbmcgKERhbiBO aWNvbGFlc2N1IHJlcG9ydCkKLTs7IC0gVXNlIGBsYXp5LWxvY2stZm9udGlmeS1hZnRlci12aXNh Z2UnIGZvciBoaWRlc2hvdy5lbCAoRGFuIE5pY29sYWVzY3UgaGludCkKLTs7IC0gVXNlIGBvdGhl cicgd2lkZ2V0IHdoZXJlIHBvc3NpYmxlIChBbmRyZWFzIFNjaHdhYiBmaXgpCi07OyAyLjEwLS0y LjExOgotOzsgLSBVc2VkIGB3aXRoLXRlbXAtbWVzc2FnZScgd2hlcmUgcG9zc2libGUgdG8gbWFr ZSBtZXNzYWdlcyB0ZW1wb3JhcnkuCi0MCi07OzsgQ29kZToKLQotKHJlcXVpcmUgJ2ZvbnQtbG9j aykKLShldmFsLXdoZW4tY29tcGlsZSAocmVxdWlyZSAnY2wtbGliKSkKLQotKGV2YWwtd2hlbi1j b21waWxlCi0gOzsgV2UgdXNlIHRoaXMgdG8gcHJlc2VydmUgb3IgcHJvdGVjdCB0aGluZ3Mgd2hl biBtb2RpZnlpbmcgdGV4dCBwcm9wZXJ0aWVzLgotIChkZWZtYWNybyBzYXZlLWJ1ZmZlci1zdGF0 ZSAodmFybGlzdCAmcmVzdCBib2R5KQotICAgIkJpbmQgdmFyaWFibGVzIGFjY29yZGluZyB0byBW QVJMSVNUIGFuZCBldmFsIEJPRFkgcmVzdG9yaW5nIGJ1ZmZlciBzdGF0ZS4iCi0gICBgKGxldCog KCxAKGFwcGVuZCB2YXJsaXN0Ci0JCSAgICcoKG1vZGlmaWVkIChidWZmZXItbW9kaWZpZWQtcCkp Ci0JCSAgICAgKGJ1ZmZlci11bmRvLWxpc3QgdCkKLQkJICAgICAoaW5oaWJpdC1yZWFkLW9ubHkg dCkKLQkJICAgICAoaW5oaWJpdC1wb2ludC1tb3Rpb24taG9va3MgdCkKLQkJICAgICAoaW5oaWJp dC1tb2RpZmljYXRpb24taG9va3MgdCkKLQkJICAgICBkZWFjdGl2YXRlLW1hcmsKLQkJICAgICBi dWZmZXItZmlsZS1uYW1lCi0JCSAgICAgYnVmZmVyLWZpbGUtdHJ1ZW5hbWUpKSkKLSAgICAgLEBi b2R5Ci0gICAgICh3aGVuIChhbmQgKG5vdCBtb2RpZmllZCkgKGJ1ZmZlci1tb2RpZmllZC1wKSkK LSAgICAgICAocmVzdG9yZS1idWZmZXItbW9kaWZpZWQtcCBuaWwpKSkpCi0gKHB1dCAnc2F2ZS1i dWZmZXItc3RhdGUgJ2xpc3AtaW5kZW50LWZ1bmN0aW9uIDEpCi0gOzsKLSA7OyBXZSB1c2UgdGhp cyBmb3IgY2xhcml0eSBhbmQgc3BlZWQuICBOYXVnaHR5IGJ1dCBuaWNlLgotIChkZWZtYWNybyBk by13aGlsZSAodGVzdCAmcmVzdCBib2R5KQotICAgIihkby13aGlsZSBURVNUIEJPRFkuLi4pOiBl dmFsIEJPRFkuLi4gYW5kIHJlcGVhdCBpZiBURVNUIHlpZWxkcyBub24tbmlsLgotVGhlIG9yZGVy IG9mIGV4ZWN1dGlvbiBpcyB0aHVzIEJPRFksIFRFU1QsIEJPRFksIFRFU1QgYW5kIHNvIG9uCi11 bnRpbCBURVNUIHJldHVybnMgbmlsLiIKLSAgIGAod2hpbGUgKHByb2duICxAYm9keSAsdGVzdCkp KQotIChwdXQgJ2RvLXdoaWxlICdsaXNwLWluZGVudC1mdW5jdGlvbiAoZ2V0ICd3aGlsZSAnbGlz cC1pbmRlbnQtZnVuY3Rpb24pKSkKLQotKGRlZmdyb3VwIGxhenktbG9jayBuaWwKLSAgIkZvbnQg TG9jayBzdXBwb3J0IG1vZGUgdG8gZm9udGlmeSBsYXppbHkuIgotICA6Z3JvdXAgJ2ZvbnQtbG9j aykKLQotKGRlZnZhciBsYXp5LWxvY2stbW9kZSBuaWwpCQkJOyBXaGV0aGVyIHdlIGFyZSB0dXJu ZWQgb24uCi0oZGVmdmFyIGxhenktbG9jay1idWZmZXJzIG5pbCkJCQk7IEZvciBkZWZlcnJhbC4K LShkZWZ2YXIgbGF6eS1sb2NrLXRpbWVycyAoY29ucyBuaWwgbmlsKSkJOyBGb3IgZGVmZXJyYWwg YW5kIHN0ZWFsdGguCi0MCi07OyBVc2VyIFZhcmlhYmxlczoKLQotKGRlZmN1c3RvbSBsYXp5LWxv Y2stbWluaW11bS1zaXplIDI1NjAwCi0gICJNaW5pbXVtIHNpemUgb2YgYSBidWZmZXIgZm9yIGRl bWFuZC1kcml2ZW4gZm9udGlmaWNhdGlvbi4KLU9uLWRlbWFuZCBmb250aWZpY2F0aW9uIG9jY3Vy cyBpZiB0aGUgYnVmZmVyIHNpemUgaXMgZ3JlYXRlciB0aGFuIHRoaXMgdmFsdWUuCi1JZiBuaWws IG1lYW5zIGRlbWFuZC1kcml2ZW4gZm9udGlmaWNhdGlvbiBpcyBuZXZlciBwZXJmb3JtZWQuCi1J ZiBhIGxpc3QsIGVhY2ggZWxlbWVudCBzaG91bGQgYmUgYSBjb25zIHBhaXIgb2YgdGhlIGZvcm0g KE1BSk9SLU1PREUgLiBTSVpFKSwKLXdoZXJlIE1BSk9SLU1PREUgaXMgYSBzeW1ib2wgb3IgdCAo bWVhbmluZyB0aGUgZGVmYXVsdCkuICBGb3IgZXhhbXBsZToKLSAoKGMtbW9kZSAuIDI1NjAwKSAo YysrLW1vZGUgLiAyNTYwMCkgKHJtYWlsLW1vZGUgLiAxMDQ4NTc2KSkKLW1lYW5zIHRoYXQgdGhl IG1pbmltdW0gc2l6ZSBpcyAyNUsgZm9yIGJ1ZmZlcnMgaW4gQyBvciBDKysgbW9kZXMsIG9uZSBt ZWdhYnl0ZQotZm9yIGJ1ZmZlcnMgaW4gUm1haWwgbW9kZSwgYW5kIHNpemUgaXMgaXJyZWxldmFu dCBvdGhlcndpc2UuCi0KLVRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIHVzZWQgd2hlbiBM YXp5IExvY2sgbW9kZSBpcyB0dXJuZWQgb24uIgotICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRh ZyAibm9uZSIgbmlsKQotCQkgKGludGVnZXIgOnRhZyAic2l6ZSIpCi0JCSAocmVwZWF0IDptZW51 LXRhZyAibW9kZSBzcGVjaWZpYyIgOnRhZyAibW9kZSBzcGVjaWZpYyIKLQkJCSA6dmFsdWUgKCh0 IC4gbmlsKSkKLQkJCSAoY29ucyA6dGFnICJJbnN0YW5jZSIKLQkJCSAgICAgICAocmFkaW8gOnRh ZyAiTW9kZSIKLQkJCQkgICAgICAoY29uc3QgOnRhZyAiYWxsIiB0KQotCQkJCSAgICAgIChzeW1i b2wgOnRhZyAibmFtZSIpKQotCQkJICAgICAgIChyYWRpbyA6dGFnICJTaXplIgotCQkJCSAgICAg IChjb25zdCA6dGFnICJub25lIiBuaWwpCi0JCQkJICAgICAgKGludGVnZXIgOnRhZyAic2l6ZSIp KSkpKQotICA6Z3JvdXAgJ2xhenktbG9jaykKLQotKGRlZmN1c3RvbSBsYXp5LWxvY2stZGVmZXIt b24tdGhlLWZseSB0Ci0gICJJZiBub24tbmlsLCBtZWFucyBmb250aWZpY2F0aW9uIGFmdGVyIGEg Y2hhbmdlIHNob3VsZCBiZSBkZWZlcnJlZC4KLUlmIG5pbCwgbWVhbnMgb24tdGhlLWZseSBmb250 aWZpY2F0aW9uIGlzIHBlcmZvcm1lZC4gIFRoaXMgbWVhbnMgd2hlbiBjaGFuZ2VzCi1vY2N1ciBp biB0aGUgYnVmZmVyLCB0aG9zZSBhcmVhcyBhcmUgaW1tZWRpYXRlbHkgZm9udGlmaWVkLgotSWYg YSBsaXN0LCBpdCBzaG91bGQgYmUgYSBsaXN0IG9mIGBtYWpvci1tb2RlJyBzeW1ib2wgbmFtZXMg Zm9yIHdoaWNoIGRlZmVycmVkCi1mb250aWZpY2F0aW9uIHNob3VsZCBvY2N1ci4gIFRoZSBzZW5z ZSBvZiB0aGUgbGlzdCBpcyBuZWdhdGVkIGlmIGl0IGJlZ2lucyB3aXRoCi1gbm90Jy4gIEZvciBl eGFtcGxlOgotIChjLW1vZGUgYysrLW1vZGUpCi1tZWFucyB0aGF0IG9uLXRoZS1mbHkgZm9udGlm aWNhdGlvbiBpcyBkZWZlcnJlZCBmb3IgYnVmZmVycyBpbiBDIGFuZCBDKysgbW9kZXMKLW9ubHks IGFuZCBkZWZlcnJhbCBkb2VzIG5vdCBvY2N1ciBvdGhlcndpc2UuCi0KLVRoZSB2YWx1ZSBvZiB0 aGlzIHZhcmlhYmxlIGlzIHVzZWQgd2hlbiBMYXp5IExvY2sgbW9kZSBpcyB0dXJuZWQgb24uIgot ICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRhZyAibmV2ZXIiIG5pbCkKLQkJIChjb25zdCA6dGFn ICJhbHdheXMiIHQpCi0JCSAoc2V0IDptZW51LXRhZyAibW9kZSBzcGVjaWZpYyIgOnRhZyAibW9k ZXMiCi0JCSAgICAgIDp2YWx1ZSAobm90KQotCQkgICAgICAoY29uc3QgOnRhZyAiRXhjZXB0IiBu b3QpCi0JCSAgICAgIChyZXBlYXQgOmlubGluZSB0IChzeW1ib2wgOnRhZyAibW9kZSIpKSkpCi0g IDpncm91cCAnbGF6eS1sb2NrKQotCi0oZGVmY3VzdG9tIGxhenktbG9jay1kZWZlci1vbi1zY3Jv bGxpbmcgbmlsCi0gICJJZiBub24tbmlsLCBtZWFucyBmb250aWZpY2F0aW9uIGFmdGVyIGEgc2Ny b2xsIHNob3VsZCBiZSBkZWZlcnJlZC4KLUlmIG5pbCwgbWVhbnMgZGVtYW5kLWRyaXZlbiBmb250 aWZpY2F0aW9uIGlzIHBlcmZvcm1lZC4gIFRoaXMgbWVhbnMgd2hlbgotc2Nyb2xsaW5nIGludG8g dW5mb250aWZpZWQgYXJlYXMgb2YgdGhlIGJ1ZmZlciwgdGhvc2UgYXJlYXMgYXJlIGltbWVkaWF0 ZWx5Ci1mb250aWZpZWQuICBUaHVzIHNjcm9sbGluZyBuZXZlciBwcmVzZW50cyB1bmZvbnRpZmll ZCBhcmVhcy4gIEhvd2V2ZXIsIHNpbmNlCi1mb250aWZpY2F0aW9uIG9jY3VycyBkdXJpbmcgc2Ny b2xsaW5nLCBzY3JvbGxpbmcgbWF5IGJlIHNsb3cuCi1JZiB0LCBtZWFucyBkZWZlci1kcml2ZW4g Zm9udGlmaWNhdGlvbiBpcyBwZXJmb3JtZWQuICBUaGlzIG1lYW5zIGZvbnRpZmljYXRpb24KLW9m IHRob3NlIGFyZWFzIGlzIGRlZmVycmVkLiAgVGh1cyBzY3JvbGxpbmcgbWF5IHByZXNlbnQgbW9t ZW50YXJpbHkgdW5mb250aWZpZWQKLWFyZWFzLiAgSG93ZXZlciwgc2luY2UgZm9udGlmaWNhdGlv biBkb2VzIG5vdCBvY2N1ciBkdXJpbmcgc2Nyb2xsaW5nLCBzY3JvbGxpbmcKLXdpbGwgYmUgZmFz dGVyIHRoYW4gZGVtYW5kLWRyaXZlbiBmb250aWZpY2F0aW9uLgotSWYgYW55IG90aGVyIHZhbHVl LCBlLmcuLCBgZXZlbnR1YWxseScsIG1lYW5zIGRlbWFuZC1kcml2ZW4gZm9udGlmaWNhdGlvbiBp cwotcGVyZm9ybWVkIHVudGlsIHRoZSBidWZmZXIgaXMgZm9udGlmaWVkLCB0aGVuIGJ1ZmZlciBm b250aWZpY2F0aW9uIGJlY29tZXMKLWRlZmVyLWRyaXZlbi4gIFRodXMgc2Nyb2xsaW5nIG5ldmVy IHByZXNlbnRzIHVuZm9udGlmaWVkIGFyZWFzIHVudGlsIHRoZSBidWZmZXIKLWlzIGZpcnN0IGZv bnRpZmllZCwgYWZ0ZXIgd2hpY2ggc3Vic2VxdWVudCBzY3JvbGxpbmcgbWF5IHByZXNlbnQgZnV0 dXJlIGJ1ZmZlcgotaW5zZXJ0aW9ucyBtb21lbnRhcmlseSB1bmZvbnRpZmllZC4gIEhvd2V2ZXIs IHNpbmNlIGZvbnRpZmljYXRpb24gZG9lcyBub3QKLW9jY3VyIGR1cmluZyBzY3JvbGxpbmcgYWZ0 ZXIgdGhlIGJ1ZmZlciBpcyBmaXJzdCBmb250aWZpZWQsIHNjcm9sbGluZyB3aWxsCi1iZWNvbWUg ZmFzdGVyLiAgKEJ1dCwgc2luY2UgY29udGV4dHVhbCBjaGFuZ2VzIGNvbnRpbnVhbGx5IG9jY3Vy LCBzdWNoIGEgdmFsdWUKLW1ha2VzIGxpdHRsZSBzZW5zZSBpZiBgbGF6eS1sb2NrLWRlZmVyLWNv bnRleHR1YWxseScgaXMgbm9uLW5pbC4pCi0KLVRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlz IHVzZWQgd2hlbiBMYXp5IExvY2sgbW9kZSBpcyB0dXJuZWQgb24uIgotICA6dHlwZSAnKGNob2lj ZSAoY29uc3QgOnRhZyAibmV2ZXIiIG5pbCkKLQkJIChjb25zdCA6dGFnICJhbHdheXMiIHQpCi0J CSAob3RoZXIgOnRhZyAiZXZlbnR1YWxseSIgZXZlbnR1YWxseSkpCi0gIDpncm91cCAnbGF6eS1s b2NrKQotCi0oZGVmY3VzdG9tIGxhenktbG9jay1kZWZlci1jb250ZXh0dWFsbHkgJ3N5bnRheC1k cml2ZW4KLSAgIklmIG5vbi1uaWwsIG1lYW5zIGRlZmVycmVkIGZvbnRpZmljYXRpb24gc2hvdWxk IGJlIHN5bnRhY3RpY2FsbHkgdHJ1ZS4KLUlmIG5pbCwgbWVhbnMgZGVmZXJyZWQgZm9udGlmaWNh dGlvbiBvY2N1cnMgb25seSBvbiB0aG9zZSBsaW5lcyBtb2RpZmllZC4gIFRoaXMKLW1lYW5zIHdo ZXJlIG1vZGlmaWNhdGlvbiBvbiBhIGxpbmUgY2F1c2VzIHN5bnRhY3RpYyBjaGFuZ2Ugb24gc3Vi c2VxdWVudCBsaW5lcywKLXRob3NlIHN1YnNlcXVlbnQgbGluZXMgYXJlIG5vdCByZWZvbnRpZmll ZCB0byByZWZsZWN0IHRoZWlyIG5ldyBjb250ZXh0LgotSWYgdCwgbWVhbnMgZGVmZXJyZWQgZm9u dGlmaWNhdGlvbiBvY2N1cnMgb24gdGhvc2UgbGluZXMgbW9kaWZpZWQgYW5kIGFsbAotc3Vic2Vx dWVudCBsaW5lcy4gIFRoaXMgbWVhbnMgdGhvc2Ugc3Vic2VxdWVudCBsaW5lcyBhcmUgcmVmb250 aWZpZWQgdG8gcmVmbGVjdAotdGhlaXIgbmV3IHN5bnRhY3RpYyBjb250ZXh0LCBlaXRoZXIgaW1t ZWRpYXRlbHkgb3Igd2hlbiBzY3JvbGxpbmcgaW50byB0aGVtLgotSWYgYW55IG90aGVyIHZhbHVl LCBlLmcuLCBgc3ludGF4LWRyaXZlbicsIG1lYW5zIGRlZmVycmVkIHN5bnRhY3RpY2FsbHkgdHJ1 ZQotZm9udGlmaWNhdGlvbiBvY2N1cnMgb25seSBpZiBzeW50YWN0aWMgZm9udGlmaWNhdGlvbiBp cyBwZXJmb3JtZWQgdXNpbmcgdGhlCi1idWZmZXIgbW9kZSdzIHN5bnRheCB0YWJsZSwgaS5lLiwg b25seSBpZiBgZm9udC1sb2NrLWtleXdvcmRzLW9ubHknIGlzIG5pbC4KLQotVGhlIHZhbHVlIG9m IHRoaXMgdmFyaWFibGUgaXMgdXNlZCB3aGVuIExhenkgTG9jayBtb2RlIGlzIHR1cm5lZCBvbi4i Ci0gIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJuZXZlciIgbmlsKQotCQkgKGNvbnN0IDp0 YWcgImFsd2F5cyIgdCkKLQkJIChvdGhlciA6dGFnICJzeW50YXgtZHJpdmVuIiBzeW50YXgtZHJp dmVuKSkKLSAgOmdyb3VwICdsYXp5LWxvY2spCi0KLShkZWZjdXN0b20gbGF6eS1sb2NrLWRlZmVy LXRpbWUgMC4yNQotICAiVGltZSBpbiBzZWNvbmRzIHRvIGRlbGF5IGJlZm9yZSBiZWdpbm5pbmcg ZGVmZXJyZWQgZm9udGlmaWNhdGlvbi4KLURlZmVycmVkIGZvbnRpZmljYXRpb24gb2NjdXJzIGlm IHRoZXJlIGlzIG5vIGlucHV0IHdpdGhpbiB0aGlzIHRpbWUuCi1JZiBuaWwsIG1lYW5zIGZvbnRp ZmljYXRpb24gaXMgbmV2ZXIgZGVmZXJyZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlcyBvZiB0 aGUKLXZhcmlhYmxlcyBgbGF6eS1sb2NrLWRlZmVyLW9uLXRoZS1mbHknLCBgbGF6eS1sb2NrLWRl ZmVyLW9uLXNjcm9sbGluZycgYW5kCi1gbGF6eS1sb2NrLWRlZmVyLWNvbnRleHR1YWxseScuCi0K LVRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIHVzZWQgd2hlbiBMYXp5IExvY2sgbW9kZSBp cyB0dXJuZWQgb24uIgotICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRhZyAibmV2ZXIiIG5pbCkK LQkJIChudW1iZXIgOnRhZyAic2Vjb25kcyIpKQotICA6Z3JvdXAgJ2xhenktbG9jaykKLQotKGRl ZmN1c3RvbSBsYXp5LWxvY2stc3RlYWx0aC10aW1lIDMwCi0gICJUaW1lIGluIHNlY29uZHMgdG8g ZGVsYXkgYmVmb3JlIGJlZ2lubmluZyBzdGVhbHRoIGZvbnRpZmljYXRpb24uCi1TdGVhbHRoIGZv bnRpZmljYXRpb24gb2NjdXJzIGlmIHRoZXJlIGlzIG5vIGlucHV0IHdpdGhpbiB0aGlzIHRpbWUu Ci1JZiBuaWwsIG1lYW5zIHN0ZWFsdGggZm9udGlmaWNhdGlvbiBpcyBuZXZlciBwZXJmb3JtZWQu Ci0KLVRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIHVzZWQgd2hlbiBMYXp5IExvY2sgbW9k ZSBpcyB0dXJuZWQgb24uIgotICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRhZyAibmV2ZXIiIG5p bCkKLQkJIChudW1iZXIgOnRhZyAic2Vjb25kcyIpKQotICA6Z3JvdXAgJ2xhenktbG9jaykKLQot KGRlZmN1c3RvbSBsYXp5LWxvY2stc3RlYWx0aC1saW5lcyAoaWYgZm9udC1sb2NrLW1heGltdW0t ZGVjb3JhdGlvbiAxMDAgMjUwKQotICAiTWF4aW11bSBzaXplIG9mIGEgY2h1bmsgb2Ygc3RlYWx0 aCBmb250aWZpY2F0aW9uLgotRWFjaCBpdGVyYXRpb24gb2Ygc3RlYWx0aCBmb250aWZpY2F0aW9u IGNhbiBmb250aWZ5IHRoaXMgbnVtYmVyIG9mIGxpbmVzLgotVG8gc3BlZWQgdXAgaW5wdXQgcmVz cG9uc2UgZHVyaW5nIHN0ZWFsdGggZm9udGlmaWNhdGlvbiwgYXQgdGhlIGNvc3Qgb2Ygc3RlYWx0 aAotdGFraW5nIGxvbmdlciB0byBmb250aWZ5LCB5b3UgY291bGQgcmVkdWNlIHRoZSB2YWx1ZSBv ZiB0aGlzIHZhcmlhYmxlLiIKLSAgOnR5cGUgJyhpbnRlZ2VyIDp0YWcgImxpbmVzIikKLSAgOmdy b3VwICdsYXp5LWxvY2spCi0KLShkZWZjdXN0b20gbGF6eS1sb2NrLXN0ZWFsdGgtbG9hZAotICAo aWYgKGNvbmRpdGlvbi1jYXNlIG5pbCAobG9hZC1hdmVyYWdlKSAoZXJyb3IpKSAyMDApCi0gICJM b2FkIGluIHBlcmNlbnRhZ2UgYWJvdmUgd2hpY2ggc3RlYWx0aCBmb250aWZpY2F0aW9uIGlzIHN1 c3BlbmRlZC4KLVN0ZWFsdGggZm9udGlmaWNhdGlvbiBwYXVzZXMgd2hlbiB0aGUgc3lzdGVtIHNo b3J0LXRlcm0gbG9hZCBhdmVyYWdlIChhcwotcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uIGBsb2Fk LWF2ZXJhZ2UnIGlmIHN1cHBvcnRlZCkgZ29lcyBhYm92ZSB0aGlzIGxldmVsLAotdGh1cyByZWR1 Y2luZyB0aGUgZGVtYW5kIHRoYXQgc3RlYWx0aCBmb250aWZpY2F0aW9uIG1ha2VzIG9uIHRoZSBz eXN0ZW0uCi1JZiBuaWwsIG1lYW5zIHN0ZWFsdGggZm9udGlmaWNhdGlvbiBpcyBuZXZlciBzdXNw ZW5kZWQuCi1UbyByZWR1Y2UgbWFjaGluZSBsb2FkIGR1cmluZyBzdGVhbHRoIGZvbnRpZmljYXRp b24sIGF0IHRoZSBjb3N0IG9mIHN0ZWFsdGgKLXRha2luZyBsb25nZXIgdG8gZm9udGlmeSwgeW91 IGNvdWxkIHJlZHVjZSB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZS4KLVNlZSBhbHNvIGBsYXp5 LWxvY2stc3RlYWx0aC1uaWNlJy4iCi0gIDp0eXBlIChpZiAoY29uZGl0aW9uLWNhc2UgbmlsIChs b2FkLWF2ZXJhZ2UpIChlcnJvcikpCi0JICAgICcoY2hvaWNlIChjb25zdCA6dGFnICJuZXZlciIg bmlsKQotCQkgICAgIChpbnRlZ2VyIDp0YWcgImxvYWQiKSkKLQkgICcoY29uc3QgOmZvcm1hdCAi JXQ6IHVuc3VwcG9ydGVkXG4iIG5pbCkpCi0gIDpncm91cCAnbGF6eS1sb2NrKQotCi0oZGVmY3Vz dG9tIGxhenktbG9jay1zdGVhbHRoLW5pY2UgMC4xMjUKLSAgIlRpbWUgaW4gc2Vjb25kcyB0byBw YXVzZSBiZXR3ZWVuIGNodW5rcyBvZiBzdGVhbHRoIGZvbnRpZmljYXRpb24uCi1FYWNoIGl0ZXJh dGlvbiBvZiBzdGVhbHRoIGZvbnRpZmljYXRpb24gaXMgc2VwYXJhdGVkIGJ5IHRoaXMgYW1vdW50 IG9mIHRpbWUsCi10aHVzIHJlZHVjaW5nIHRoZSBkZW1hbmQgdGhhdCBzdGVhbHRoIGZvbnRpZmlj YXRpb24gbWFrZXMgb24gdGhlIHN5c3RlbS4KLUlmIG5pbCwgbWVhbnMgc3RlYWx0aCBmb250aWZp Y2F0aW9uIGlzIG5ldmVyIHBhdXNlZC4KLVRvIHJlZHVjZSBtYWNoaW5lIGxvYWQgZHVyaW5nIHN0 ZWFsdGggZm9udGlmaWNhdGlvbiwgYXQgdGhlIGNvc3Qgb2Ygc3RlYWx0aAotdGFraW5nIGxvbmdl ciB0byBmb250aWZ5LCB5b3UgY291bGQgaW5jcmVhc2UgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFi bGUuCi1TZWUgYWxzbyBgbGF6eS1sb2NrLXN0ZWFsdGgtbG9hZCcuIgotICA6dHlwZSAnKGNob2lj ZSAoY29uc3QgOnRhZyAibmV2ZXIiIG5pbCkKLQkJIChudW1iZXIgOnRhZyAic2Vjb25kcyIpKQot ICA6Z3JvdXAgJ2xhenktbG9jaykKLQotKGRlZmN1c3RvbSBsYXp5LWxvY2stc3RlYWx0aC12ZXJi b3NlCi0gIChhbmQgKG5vdCBsYXp5LWxvY2stZGVmZXItY29udGV4dHVhbGx5KSAobm90IChudWxs IGZvbnQtbG9jay12ZXJib3NlKSkpCi0gICJJZiBub24tbmlsLCBtZWFucyBzdGVhbHRoIGZvbnRp ZmljYXRpb24gc2hvdWxkIHNob3cgc3RhdHVzIG1lc3NhZ2VzLiIKLSAgOnR5cGUgJ2Jvb2xlYW4K LSAgOmdyb3VwICdsYXp5LWxvY2spCi0MCi07OyBVc2VyIEZ1bmN0aW9uczoKLQotOzs7IyMjYXV0 b2xvYWQKLShkZWZ1biBsYXp5LWxvY2stbW9kZSAoJm9wdGlvbmFsIGFyZykKLSAgIlRvZ2dsZSBM YXp5IExvY2sgbW9kZS4KLVdpdGggYXJnLCB0dXJuIExhenkgTG9jayBtb2RlIG9uIGlmIGFuZCBv bmx5IGlmIGFyZyBpcyBwb3NpdGl2ZS4gIEVuYWJsZSBpdAotYXV0b21hdGljYWxseSBpbiB5b3Vy IGB+Ly5lbWFjcycgYnk6Ci0KLSAoc2V0cSBmb250LWxvY2stc3VwcG9ydC1tb2RlIFxcPSdsYXp5 LWxvY2stbW9kZSkKLQotRm9yIGEgbmV3ZXIgZm9udC1sb2NrIHN1cHBvcnQgbW9kZSB3aXRoIHNp bWlsYXIgZnVuY3Rpb25hbGl0eSwgc2VlCi1gaml0LWxvY2stbW9kZScuICBFdmVudHVhbGx5LCBM YXp5IExvY2sgbW9kZSB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4KLUpJVCBMb2NrJ3MgZmF2b3IuCi0K LVdoZW4gTGF6eSBMb2NrIG1vZGUgaXMgZW5hYmxlZCwgZm9udGlmaWNhdGlvbiBjYW4gYmUgbGF6 eSBpbiBhIG51bWJlciBvZiB3YXlzOgotCi0tIERlbWFuZC1kcml2ZW4gYnVmZmVyIGZvbnRpZmlj YXRpb24gaWYgYGxhenktbG9jay1taW5pbXVtLXNpemUnIGlzIG5vbi1uaWwuCi0gIFRoaXMgbWVh bnMgaW5pdGlhbCBmb250aWZpY2F0aW9uIGRvZXMgbm90IG9jY3VyIGlmIHRoZSBidWZmZXIgaXMg Z3JlYXRlciB0aGFuCi0gIGBsYXp5LWxvY2stbWluaW11bS1zaXplJyBjaGFyYWN0ZXJzIGluIGxl bmd0aC4gIEluc3RlYWQsIGZvbnRpZmljYXRpb24gb2NjdXJzCi0gIHdoZW4gbmVjZXNzYXJ5LCBz dWNoIGFzIHdoZW4gc2Nyb2xsaW5nIHRocm91Z2ggdGhlIGJ1ZmZlciB3b3VsZCBvdGhlcndpc2UK LSAgcmV2ZWFsIHVuZm9udGlmaWVkIGFyZWFzLiAgVGhpcyBpcyB1c2VmdWwgaWYgYnVmZmVyIGZv bnRpZmljYXRpb24gaXMgdG9vIHNsb3cKLSAgZm9yIGxhcmdlIGJ1ZmZlcnMuCi0KLS0gRGVmZXJy ZWQgc2Nyb2xsIGZvbnRpZmljYXRpb24gaWYgYGxhenktbG9jay1kZWZlci1vbi1zY3JvbGxpbmcn IGlzIG5vbi1uaWwuCi0gIFRoaXMgbWVhbnMgZGVtYW5kLWRyaXZlbiBmb250aWZpY2F0aW9uIGRv ZXMgbm90IG9jY3VyIGFzIHlvdSBzY3JvbGwuCi0gIEluc3RlYWQsIGZvbnRpZmljYXRpb24gaXMg ZGVmZXJyZWQgdW50aWwgYWZ0ZXIgYGxhenktbG9jay1kZWZlci10aW1lJyBzZWNvbmRzCi0gIG9m IEVtYWNzIGlkbGUgdGltZSwgd2hpbGUgRW1hY3MgcmVtYWlucyBpZGxlLiAgVGhpcyBpcyB1c2Vm dWwgaWYKLSAgZm9udGlmaWNhdGlvbiBpcyB0b28gc2xvdyB0byBrZWVwIHVwIHdpdGggc2Nyb2xs aW5nLgotCi0tIERlZmVycmVkIG9uLXRoZS1mbHkgZm9udGlmaWNhdGlvbiBpZiBgbGF6eS1sb2Nr LWRlZmVyLW9uLXRoZS1mbHknIGlzIG5vbi1uaWwuCi0gIFRoaXMgbWVhbnMgb24tdGhlLWZseSBm b250aWZpY2F0aW9uIGRvZXMgbm90IG9jY3VyIGFzIHlvdSB0eXBlLiAgSW5zdGVhZCwKLSAgZm9u dGlmaWNhdGlvbiBpcyBkZWZlcnJlZCB1bnRpbCBhZnRlciBgbGF6eS1sb2NrLWRlZmVyLXRpbWUn IHNlY29uZHMgb2YgRW1hY3MKLSAgaWRsZSB0aW1lLCB3aGlsZSBFbWFjcyByZW1haW5zIGlkbGUu ICBUaGlzIGlzIHVzZWZ1bCBpZiBmb250aWZpY2F0aW9uIGlzIHRvbwotICBzbG93IHRvIGtlZXAg dXAgd2l0aCB5b3VyIHR5cGluZy4KLQotLSBEZWZlcnJlZCBjb250ZXh0IGZvbnRpZmljYXRpb24g aWYgYGxhenktbG9jay1kZWZlci1jb250ZXh0dWFsbHknIGlzIG5vbi1uaWwuCi0gIFRoaXMgbWVh bnMgZm9udGlmaWNhdGlvbiB1cGRhdGVzIHRoZSBidWZmZXIgY29ycmVzcG9uZGluZyB0byB0cnVl IHN5bnRhY3RpYwotICBjb250ZXh0LCBhZnRlciBgbGF6eS1sb2NrLWRlZmVyLXRpbWUnIHNlY29u ZHMgb2YgRW1hY3MgaWRsZSB0aW1lLCB3aGlsZSBFbWFjcwotICByZW1haW5zIGlkbGUuICBPdGhl cndpc2UsIGZvbnRpZmljYXRpb24gb2NjdXJzIG9uIG1vZGlmaWVkIGxpbmVzIG9ubHksIGFuZAot ICBzdWJzZXF1ZW50IGxpbmVzIGNhbiByZW1haW4gZm9udGlmaWVkIGNvcnJlc3BvbmRpbmcgdG8g cHJldmlvdXMgc3ludGFjdGljCi0gIGNvbnRleHRzLiAgVGhpcyBpcyB1c2VmdWwgd2hlcmUgc3Ry aW5ncyBvciBjb21tZW50cyBzcGFuIGxpbmVzLgotCi0tIFN0ZWFsdGh5IGJ1ZmZlciBmb250aWZp Y2F0aW9uIGlmIGBsYXp5LWxvY2stc3RlYWx0aC10aW1lJyBpcyBub24tbmlsLgotICBUaGlzIG1l YW5zIHJlbWFpbmluZyB1bmZvbnRpZmllZCBhcmVhcyBvZiBidWZmZXJzIGFyZSBmb250aWZpZWQg aWYgRW1hY3MgaGFzCi0gIGJlZW4gaWRsZSBmb3IgYGxhenktbG9jay1zdGVhbHRoLXRpbWUnIHNl Y29uZHMsIHdoaWxlIEVtYWNzIHJlbWFpbnMgaWRsZS4KLSAgVGhpcyBpcyB1c2VmdWwgaWYgYW55 IGJ1ZmZlciBoYXMgYW55IGRlZmVycmVkIGZvbnRpZmljYXRpb24uCi0KLUJhc2ljIEZvbnQgTG9j ayBtb2RlIG9uLXRoZS1mbHkgZm9udGlmaWNhdGlvbiBiZWhhdmlvciBmb250aWZpZXMgbW9kaWZp ZWQKLWxpbmVzIG9ubHkuICBUaHVzLCBpZiBgbGF6eS1sb2NrLWRlZmVyLWNvbnRleHR1YWxseScg aXMgbm9uLW5pbCwgTGF6eSBMb2NrIG1vZGUKLW9uLXRoZS1mbHkgZm9udGlmaWNhdGlvbiBtYXkg Zm9udGlmeSBkaWZmZXJlbnRseSwgYWxiZWl0IGNvcnJlY3RseS4gIEluIGFueQotZXZlbnQsIHRv IHJlZm9udGlmeSBzb21lIGxpbmVzIHlvdSBjYW4gdXNlIFxcW2ZvbnQtbG9jay1mb250aWZ5LWJs b2NrXS4KLQotU3RlYWx0aCBmb250aWZpY2F0aW9uIG9ubHkgb2NjdXJzIHdoaWxlIHRoZSBzeXN0 ZW0gcmVtYWlucyB1bmxvYWRlZC4KLUlmIHRoZSBzeXN0ZW0gbG9hZCByaXNlcyBhYm92ZSBgbGF6 eS1sb2NrLXN0ZWFsdGgtbG9hZCcgcGVyY2VudCwgc3RlYWx0aAotZm9udGlmaWNhdGlvbiBpcyBz dXNwZW5kZWQuICBTdGVhbHRoIGZvbnRpZmljYXRpb24gaW50ZW5zaXR5IGlzIGNvbnRyb2xsZWQg dmlhCi10aGUgdmFyaWFibGUgYGxhenktbG9jay1zdGVhbHRoLW5pY2UnIGFuZCBgbGF6eS1sb2Nr LXN0ZWFsdGgtbGluZXMnLCBhbmQKLXZlcmJvc2l0eSBpcyBjb250cm9sbGVkIHZpYSB0aGUgdmFy aWFibGUgYGxhenktbG9jay1zdGVhbHRoLXZlcmJvc2UnLiIKLSAgKGludGVyYWN0aXZlICJQIikK LSAgKGxldCogKCh3YXMtb24gbGF6eS1sb2NrLW1vZGUpCi0JIChub3ctb24gKHVubGVzcyAobWVt cSAnbGF6eS1sb2NrLW1vZGUgZm9udC1sb2NrLWluaGliaXQtdGhpbmctbG9jaykKLQkJICAgKGlm IGFyZyAoPiAocHJlZml4LW51bWVyaWMtdmFsdWUgYXJnKSAwKSAobm90IHdhcy1vbikpKSkpCi0g ICAgKGNvbmQgKChhbmQgbm93LW9uIChub3QgZm9udC1sb2NrLW1vZGUpKQotCSAgIDs7IFR1cm5l ZCBvbiBgbGF6eS1sb2NrLW1vZGUnIHJhdGhlciB0aGFuIGBmb250LWxvY2stbW9kZScuCi0gICAg ICAgICAgIChtZXNzYWdlICJVc2UgZm9udC1sb2NrLXN1cHBvcnQtbW9kZSByYXRoZXIgdGhhbiBj YWxsaW5nIGxhenktbG9jay1tb2RlIikKLSAgICAgICAgICAgKHNpdC1mb3IgMikpCi0JICAobm93 LW9uCi0JICAgOzsgVHVybiBvdXJzZWx2ZXMgb24uCi0JICAgKHNldCAobWFrZS1sb2NhbC12YXJp YWJsZSAnbGF6eS1sb2NrLW1vZGUpIHQpCi0JICAgKGxhenktbG9jay1pbnN0YWxsKSkKLQkgICh3 YXMtb24KLQkgICA7OyBUdXJuIG91cnNlbHZlcyBvZmYuCi0JICAgKHNldCAobWFrZS1sb2NhbC12 YXJpYWJsZSAnbGF6eS1sb2NrLW1vZGUpIG5pbCkKLQkgICAobGF6eS1sb2NrLXVuc3RhbGwpKSkp KQotCi07OzsjIyNhdXRvbG9hZAotKGRlZnVuIHR1cm4tb24tbGF6eS1sb2NrICgpCi0gICJVbmNv bmRpdGlvbmFsbHkgdHVybiBvbiBMYXp5IExvY2sgbW9kZS4iCi0gIChsYXp5LWxvY2stbW9kZSB0 KSkKLQotKGRlZnVuIGxhenktbG9jay1pbnN0YWxsICgpCi0gIChsZXQgKChtaW4tc2l6ZSAoZm9u dC1sb2NrLXZhbHVlLWluLW1ham9yLW1vZGUgbGF6eS1sb2NrLW1pbmltdW0tc2l6ZSkpCi0JKGRl ZmVyLWNoYW5nZSAoYW5kIGxhenktbG9jay1kZWZlci10aW1lIGxhenktbG9jay1kZWZlci1vbi10 aGUtZmx5KSkKLQkoZGVmZXItc2Nyb2xsIChhbmQgbGF6eS1sb2NrLWRlZmVyLXRpbWUgbGF6eS1s b2NrLWRlZmVyLW9uLXNjcm9sbGluZykpCi0JKGRlZmVyLWNvbnRleHQgKGFuZCBsYXp5LWxvY2st ZGVmZXItdGltZSBsYXp5LWxvY2stZGVmZXItY29udGV4dHVhbGx5Ci0JCQkgICAgKG9yIChlcSBs YXp5LWxvY2stZGVmZXItY29udGV4dHVhbGx5IHQpCi0JCQkJKG51bGwgZm9udC1sb2NrLWtleXdv cmRzLW9ubHkpKSkpKQotICAgIDs7Ci0gICAgOzsgVGVsbCBGb250IExvY2sgd2hldGhlciBMYXp5 IExvY2sgd2lsbCBkbyBmb250aWZpY2F0aW9uLgotICAgIChtYWtlLWxvY2FsLXZhcmlhYmxlICdm b250LWxvY2stZm9udGlmaWVkKQotICAgIChzZXRxIGZvbnQtbG9jay1mb250aWZpZWQgKGFuZCBt aW4tc2l6ZSAoPj0gKGJ1ZmZlci1zaXplKSBtaW4tc2l6ZSkpKQotICAgIDs7Ci0gICAgOzsgQWRk IHRoZSB0ZXh0IHByb3BlcnRpZXMgYW5kIGZvbnRpZnkuCi0gICAgKGlmIChub3QgZm9udC1sb2Nr LWZvbnRpZmllZCkKLQkobGF6eS1sb2NrLWFmdGVyLWZvbnRpZnktYnVmZmVyKQotICAgICAgOzsg TWFrZSBzdXJlIHdlIGZvbnRpZnkgaW4gYW55IGV4aXN0aW5nIHdpbmRvd3Mgc2hvd2luZyB0aGUg YnVmZmVyLgotICAgICAgKGxldCAoKHdpbmRvd3MgKGdldC1idWZmZXItd2luZG93LWxpc3QgKGN1 cnJlbnQtYnVmZmVyKSAnbm9taW5pIHQpKSkKLQkobGF6eS1sb2NrLWFmdGVyLXVuZm9udGlmeS1i dWZmZXIpCi0JKHdoaWxlIHdpbmRvd3MKLQkgIChsYXp5LWxvY2stZm9udGlmeS1jb25zZXJ2YXRp dmVseSAoY2FyIHdpbmRvd3MpKQotCSAgKHNldHEgd2luZG93cyAoY2RyIHdpbmRvd3MpKSkpKQot ICAgIDs7Ci0gICAgOzsgQWRkIHRoZSBmb250aWZpY2F0aW9uIGhvb2tzLgotICAgIChsYXp5LWxv Y2staW5zdGFsbC1ob29rcwotICAgICBmb250LWxvY2stZm9udGlmaWVkCi0gICAgIChjb25kICgo ZXEgKGNhci1zYWZlIGRlZmVyLWNoYW5nZSkgJ25vdCkKLQkgICAgKG5vdCAobWVtcSBtYWpvci1t b2RlIChjZHIgZGVmZXItY2hhbmdlKSkpKQotCSAgICgobGlzdHAgZGVmZXItY2hhbmdlKQotCSAg ICAobWVtcSBtYWpvci1tb2RlIGRlZmVyLWNoYW5nZSkpCi0JICAgKHQKLQkgICAgZGVmZXItY2hh bmdlKSkKLSAgICAgKGVxIGRlZmVyLXNjcm9sbCB0KQotICAgICBkZWZlci1jb250ZXh0KQotICAg IDs7Ci0gICAgOzsgQWRkIHRoZSBmb250aWZpY2F0aW9uIHRpbWVycy4KLSAgICAobGF6eS1sb2Nr LWluc3RhbGwtdGltZXJzCi0gICAgIChpZiAob3IgZGVmZXItY2hhbmdlIGRlZmVyLXNjcm9sbCBk ZWZlci1jb250ZXh0KSBsYXp5LWxvY2stZGVmZXItdGltZSkKLSAgICAgbGF6eS1sb2NrLXN0ZWFs dGgtdGltZSkpKQotCi0oZGVmdW4gbGF6eS1sb2NrLWluc3RhbGwtaG9va3MgKGZvbnRpZnlpbmcK LQkJCQlkZWZlci1jaGFuZ2UgZGVmZXItc2Nyb2xsIGRlZmVyLWNvbnRleHQpCi0gIDs7Ci0gIDs7 IEFkZCBob29rIGlmIGxhenktbG9jay5lbCBpcyBmb250aWZ5aW5nIG9uIHNjcm9sbGluZyBvciBp cyBkZWZlcnJpbmcuCi0gICh3aGVuIChvciBmb250aWZ5aW5nIGRlZmVyLWNoYW5nZSBkZWZlci1z Y3JvbGwgZGVmZXItY29udGV4dCkKLSAgICAoYWRkLWhvb2sgJ3dpbmRvdy1zY3JvbGwtZnVuY3Rp b25zIChpZiBkZWZlci1zY3JvbGwKLQkJCQkJICAgJ2xhenktbG9jay1kZWZlci1hZnRlci1zY3Jv bGwKLQkJCQkJICdsYXp5LWxvY2stZm9udGlmeS1hZnRlci1zY3JvbGwpCi0JICAgICAgbmlsIHQp KQotICA7OwotICA7OyBBZGQgaG9vayBpZiBsYXp5LWxvY2suZWwgaXMgZm9udGlmeWluZyBhbmQg aXMgbm90IGRlZmVycmluZyBjaGFuZ2VzLgotICAod2hlbiAoYW5kIGZvbnRpZnlpbmcgKG5vdCBk ZWZlci1jaGFuZ2UpIChub3QgZGVmZXItY29udGV4dCkpCi0gICAgKGFkZC1ob29rICdiZWZvcmUt Y2hhbmdlLWZ1bmN0aW9ucyAnbGF6eS1sb2NrLWFycmFuZ2UtYmVmb3JlLWNoYW5nZSBuaWwgdCkp Ci0gIDs7Ci0gIDs7IFJlcGxhY2UgRm9udCBMb2NrIG1vZGUgaG9vay4KLSAgKHJlbW92ZS1ob29r ICdhZnRlci1jaGFuZ2UtZnVuY3Rpb25zICdmb250LWxvY2stYWZ0ZXItY2hhbmdlLWZ1bmN0aW9u IHQpCi0gIChhZGQtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucwotCSAgICAoY29uZCAoKGFu ZCBkZWZlci1jaGFuZ2UgZGVmZXItY29udGV4dCkKLQkJICAgJ2xhenktbG9jay1kZWZlci1yZXN0 LWFmdGVyLWNoYW5nZSkKLQkJICAoZGVmZXItY2hhbmdlCi0JCSAgICdsYXp5LWxvY2stZGVmZXIt bGluZS1hZnRlci1jaGFuZ2UpCi0JCSAgKGRlZmVyLWNvbnRleHQKLQkJICAgJ2xhenktbG9jay1m b250aWZ5LXJlc3QtYWZ0ZXItY2hhbmdlKQotCQkgICh0Ci0JCSAgICdsYXp5LWxvY2stZm9udGlm eS1saW5lLWFmdGVyLWNoYW5nZSkpCi0JICAgIG5pbCB0KQotICA7OwotICA7OyBBZGQgcGFja2Fn ZS1zcGVjaWZpYyBob29rLgotICAoYWRkLWhvb2sgJ291dGxpbmUtdmlldy1jaGFuZ2UtaG9vayAn bGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXItdmlzYWdlIG5pbCB0KQotICAoYWRkLWhvb2sgJ2hzLWhp ZGUtaG9vayAnbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXItdmlzYWdlIG5pbCB0KSkKLQotKGRlZnVu IGxhenktbG9jay1pbnN0YWxsLXRpbWVycyAoZHRpbWUgc3RpbWUpCi0gIDs7IFNjaGVkdWxlIG9y IHJlLXNjaGVkdWxlIHRoZSBkZWZlcnJhbCBhbmQgc3RlYWx0aCB0aW1lcnMuCi0gIDs7IFRoZSBs YXlvdXQgb2YgYGxhenktbG9jay10aW1lcnMnIGlzOgotICA7OyAgKChERUZFUi1USU1FIC4gREVG RVItVElNRVIpIChTVEVBTFRILVRJTUUgLiBTVEVBTFRILVRJTUVSKQotICA7OyBJZiBhbiBpZGxl IHRpbWVvdXQgaGFzIGNoYW5nZWQsIGNhbmNlbCB0aGUgZXhpc3RpbmcgaWRsZSB0aW1lciAoaWYg dGhlcmUKLSAgOzsgaXMgb25lKSBhbmQgc2NoZWR1bGUgYSBuZXcgb25lIChpZiB0aGUgbmV3IGlk bGUgdGltZW91dCBpcyBub24tbmlsKS4KLSAgKHVubGVzcyAoZXEgZHRpbWUgKGNhciAoY2FyIGxh enktbG9jay10aW1lcnMpKSkKLSAgICAobGV0ICgoZGVmZXIgKGNhciBsYXp5LWxvY2stdGltZXJz KSkpCi0gICAgICAod2hlbiAoY2RyIGRlZmVyKQotCShjYW5jZWwtdGltZXIgKGNkciBkZWZlcikp KQotICAgICAgKHNldGNhciBsYXp5LWxvY2stdGltZXJzIChjb25zIGR0aW1lIChhbmQgZHRpbWUK LQkgICAgICAocnVuLXdpdGgtaWRsZS10aW1lciBkdGltZSB0ICdsYXp5LWxvY2stZm9udGlmeS1h ZnRlci1kZWZlcikpKSkpKQotICAodW5sZXNzIChlcSBzdGltZSAoY2FyIChjZHIgbGF6eS1sb2Nr LXRpbWVycykpKQotICAgIChsZXQgKChzdGVhbHRoIChjZHIgbGF6eS1sb2NrLXRpbWVycykpKQot ICAgICAgKHdoZW4gKGNkciBzdGVhbHRoKQotCShjYW5jZWwtdGltZXIgKGNkciBzdGVhbHRoKSkp Ci0gICAgICAoc2V0Y2RyIGxhenktbG9jay10aW1lcnMgKGNvbnMgc3RpbWUgKGFuZCBzdGltZQot CSAgICAgIChydW4td2l0aC1pZGxlLXRpbWVyIHN0aW1lIHQgJ2xhenktbG9jay1mb250aWZ5LWFm dGVyLWlkbGUpKSkpKSkpCi0KLShkZWZ1biBsYXp5LWxvY2stdW5zdGFsbCAoKQotICA7OwotICA7 OyBJZiBGb250IExvY2sgbW9kZSBpcyBzdGlsbCBlbmFibGVkLCBtYWtlIHN1cmUgdGhhdCB0aGUg YnVmZmVyIGlzCi0gIDs7IGZvbnRpZmllZCwgYW5kIHJlaW5zdGFsbCBpdHMgaG9vay4gIFdlIG11 c3QgZG8gdGhpcyBmaXJzdC4KLSAgKHdoZW4gZm9udC1sb2NrLW1vZGUKLSAgICAod2hlbiAobGF6 eS1sb2NrLXVuZm9udGlmaWVkLXApCi0gICAgICAobGV0ICgodmVyYm9zZSAoaWYgKG51bWJlcnAg Zm9udC1sb2NrLXZlcmJvc2UpCi0JCQkgKD4gKGJ1ZmZlci1zaXplKSBmb250LWxvY2stdmVyYm9z ZSkKLQkJICAgICAgIGZvbnQtbG9jay12ZXJib3NlKSkpCi0JKHdpdGgtdGVtcC1tZXNzYWdlCi0J ICAgICh3aGVuIHZlcmJvc2UKLQkgICAgICAoZm9ybWF0ICJGb250aWZ5aW5nICVzLi4uIiAoYnVm ZmVyLW5hbWUpKSkKLQkgIDs7IE1ha2Ugc3VyZSB3ZSBmb250aWZ5IGV0Yy4gaW4gdGhlIHdob2xl IGJ1ZmZlci4KLQkgIChzYXZlLXJlc3RyaWN0aW9uCi0JICAgICh3aWRlbikKLQkgICAgKGxhenkt bG9jay1mb250aWZ5LXJlZ2lvbiAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpKSkpCi0gICAgKGFk ZC1ob29rICdhZnRlci1jaGFuZ2UtZnVuY3Rpb25zICdmb250LWxvY2stYWZ0ZXItY2hhbmdlLWZ1 bmN0aW9uIG5pbCB0KSkKLSAgOzsKLSAgOzsgUmVtb3ZlIHRoZSB0ZXh0IHByb3BlcnRpZXMuCi0g IChsYXp5LWxvY2stYWZ0ZXItdW5mb250aWZ5LWJ1ZmZlcikKLSAgOzsKLSAgOzsgUmVtb3ZlIHRo ZSBmb250aWZpY2F0aW9uIGhvb2tzLgotICAocmVtb3ZlLWhvb2sgJ3dpbmRvdy1zY3JvbGwtZnVu Y3Rpb25zICdsYXp5LWxvY2stZm9udGlmeS1hZnRlci1zY3JvbGwgdCkKLSAgKHJlbW92ZS1ob29r ICd3aW5kb3ctc2Nyb2xsLWZ1bmN0aW9ucyAnbGF6eS1sb2NrLWRlZmVyLWFmdGVyLXNjcm9sbCB0 KQotICAocmVtb3ZlLWhvb2sgJ2JlZm9yZS1jaGFuZ2UtZnVuY3Rpb25zICdsYXp5LWxvY2stYXJy YW5nZS1iZWZvcmUtY2hhbmdlIHQpCi0gIChyZW1vdmUtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1bmN0 aW9ucyAnbGF6eS1sb2NrLWZvbnRpZnktbGluZS1hZnRlci1jaGFuZ2UgdCkKLSAgKHJlbW92ZS1o b29rICdhZnRlci1jaGFuZ2UtZnVuY3Rpb25zICdsYXp5LWxvY2stZm9udGlmeS1yZXN0LWFmdGVy LWNoYW5nZSB0KQotICAocmVtb3ZlLWhvb2sgJ2FmdGVyLWNoYW5nZS1mdW5jdGlvbnMgJ2xhenkt bG9jay1kZWZlci1saW5lLWFmdGVyLWNoYW5nZSB0KQotICAocmVtb3ZlLWhvb2sgJ2FmdGVyLWNo YW5nZS1mdW5jdGlvbnMgJ2xhenktbG9jay1kZWZlci1yZXN0LWFmdGVyLWNoYW5nZSB0KQotICAo cmVtb3ZlLWhvb2sgJ291dGxpbmUtdmlldy1jaGFuZ2UtaG9vayAnbGF6eS1sb2NrLWZvbnRpZnkt YWZ0ZXItdmlzYWdlIHQpCi0gIChyZW1vdmUtaG9vayAnaHMtaGlkZS1ob29rICdsYXp5LWxvY2st Zm9udGlmeS1hZnRlci12aXNhZ2UgdCkpCi0MCi07OyBIb29rIGZ1bmN0aW9ucy4KLQotOzsgTGF6 eSBMb2NrIG1vZGUgaW50ZXJ2ZW5lcyB3aGVuICgxKSBhIHByZXZpb3VzbHkgaW52aXNpYmxlIGJ1 ZmZlciByZWdpb24KLTs7IGJlY29tZXMgdmlzaWJsZSwgaS5lLiwgZm9yIGRlbWFuZC0gb3IgZGVm ZXItZHJpdmVuIG9uLXRoZS1zY3JvbGwKLTs7IGZvbnRpZmljYXRpb24sICgyKSBhIGJ1ZmZlciBt b2RpZmljYXRpb24gb2NjdXJzLCBpLmUuLCBmb3IgZGVmZXItZHJpdmVuCi07OyBvbi10aGUtZmx5 IGZvbnRpZmljYXRpb24sICgzKSBFbWFjcyBiZWNvbWVzIGlkbGUsIGkuZS4sIGZvciBmb250aWZp Y2F0aW9uIG9mCi07OyBkZWZlcnJlZCBmb250aWZpY2F0aW9uIGFuZCBzdGVhbHRoIGZvbnRpZmlj YXRpb24sIGFuZCAoNCkgb3RoZXIgc3BlY2lhbAotOzsgb2NjYXNpb25zLgotCi07OyAxLiAgVGhl cmUgYXJlIHRocmVlIHdheXMgd2hlcmVieSB0aGlzIGNhbiBoYXBwZW4uCi07OwotOzsgKGEpIFNj cm9sbGluZyB0aGUgd2luZG93LCBlaXRoZXIgZXhwbGljaXRseSAoZS5nLiwgYHNjcm9sbC11cCcp IG9yCi07OyAgICAgaW1wbGljaXRseSAoZS5nLiwgYHNlYXJjaC1mb3J3YXJkJykuICBIZXJlLCBg d2luZG93LXN0YXJ0JyBjaGFuZ2VzLgotOzsgICAgIEZvbnRpZmljYXRpb24gb2NjdXJzIGJ5IGFk ZGluZyBgbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXItc2Nyb2xsJyAoZm9yCi07OyAgICAgZGVtYW5k LWRyaXZlbiBmb250aWZpY2F0aW9uKSBvciBgbGF6eS1sb2NrLWRlZmVyLWFmdGVyLXNjcm9sbCcg KGZvcgotOzsgICAgIGRlZmVyLWRyaXZlbiBmb250aWZpY2F0aW9uKSB0byB0aGUgaG9vayBgd2lu ZG93LXNjcm9sbC1mdW5jdGlvbnMnLgotCi0oZGVmdW4gbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXIt c2Nyb2xsICh3aW5kb3cgd2luZG93LXN0YXJ0KQotICA7OyBDYWxsZWQgZnJvbSBgd2luZG93LXNj cm9sbC1mdW5jdGlvbnMnLgotICA7OyBGb250aWZ5IFdJTkRPVyBmcm9tIFdJTkRPVy1TVEFSVCBm b2xsb3dpbmcgdGhlIHNjcm9sbC4KLSAgKGxldCAoKGluaGliaXQtcG9pbnQtbW90aW9uLWhvb2tz IHQpKQotICAgIChsYXp5LWxvY2stZm9udGlmeS1yZWdpb24gd2luZG93LXN0YXJ0ICh3aW5kb3ct ZW5kIHdpbmRvdyB0KSkpCi0gIDs7IEEgcHJpb3IgZGVsZXRpb24gdGhhdCBkaWQgbm90IGNhdXNl IHNjcm9sbGluZywgZm9sbG93ZWQgYnkgYSBzY3JvbGwsIHdvdWxkCi0gIDs7IHJlc3VsdCBpbiBh biB1bm5lY2Vzc2FyeSB0cmlnZ2VyIGFmdGVyIHRoaXMgaWYgd2UgZGlkIG5vdCBjYW5jZWwgaXQg bm93LgotICAoc2V0LXdpbmRvdy1yZWRpc3BsYXktZW5kLXRyaWdnZXIgd2luZG93IG5pbCkpCi0K LShkZWZ1biBsYXp5LWxvY2stZGVmZXItYWZ0ZXItc2Nyb2xsICh3aW5kb3cgd2luZG93LXN0YXJ0 KQotICA7OyBDYWxsZWQgZnJvbSBgd2luZG93LXNjcm9sbC1mdW5jdGlvbnMnLgotICA7OyBEZWZl ciBmb250aWZpY2F0aW9uIGZvbGxvd2luZyB0aGUgc2Nyb2xsLiAgU2F2ZSB0aGUgY3VycmVudCBi dWZmZXIgc28gdGhhdAotICA7OyB3ZSBzdWJzZXF1ZW50bHkgZm9udGlmeSBpbiBhbGwgd2luZG93 cyBzaG93aW5nIHRoZSBidWZmZXIuCi0gICh1bmxlc3MgKG1lbXEgKGN1cnJlbnQtYnVmZmVyKSBs YXp5LWxvY2stYnVmZmVycykKLSAgICAocHVzaCAoY3VycmVudC1idWZmZXIpIGxhenktbG9jay1i dWZmZXJzKSkKLSAgOzsgQSBwcmlvciBkZWxldGlvbiB0aGF0IGRpZCBub3QgY2F1c2Ugc2Nyb2xs aW5nLCBmb2xsb3dlZCBieSBhIHNjcm9sbCwgd291bGQKLSAgOzsgcmVzdWx0IGluIGFuIHVubmVj ZXNzYXJ5IHRyaWdnZXIgYWZ0ZXIgdGhpcyBpZiB3ZSBkaWQgbm90IGNhbmNlbCBpdCBub3cuCi0g IChzZXQtd2luZG93LXJlZGlzcGxheS1lbmQtdHJpZ2dlciB3aW5kb3cgbmlsKSkKLQotOzsgKGIp IFJlc2l6aW5nIHRoZSB3aW5kb3csIGVpdGhlciBleHBsaWNpdGx5IChlLmcuLCBgZW5sYXJnZS13 aW5kb3cnKSBvcgotOzsgICAgIGltcGxpY2l0bHkgKGUuZy4sIGBkZWxldGUtb3RoZXItd2luZG93 cycpLiAgSGVyZSwgYHdpbmRvdy1lbmQnIGNoYW5nZXMuCi07OyAgICAgRm9udGlmaWNhdGlvbiBv Y2N1cnMgYnkgYWRkaW5nIGBsYXp5LWxvY2stZm9udGlmeS1hZnRlci1yZXNpemUnIHRvIHRoZQot OzsgICAgIGhvb2sgYHdpbmRvdy1zaXplLWNoYW5nZS1mdW5jdGlvbnMnLgotCi0oZGVmdW4gbGF6 eS1sb2NrLWZvbnRpZnktYWZ0ZXItcmVzaXplIChmcmFtZSkKLSAgOzsgQ2FsbGVkIGZyb20gYHdp bmRvdy1zaXplLWNoYW5nZS1mdW5jdGlvbnMnLgotICA7OyBGb250aWZ5IHdpbmRvd3MgaW4gRlJB TUUgZm9sbG93aW5nIHRoZSByZXNpemUuICBXZSBjYW5ub3QgdXNlCi0gIDs7IGB3aW5kb3ctc3Rh cnQnIG9yIGB3aW5kb3ctZW5kJyBzbyB3ZSBmb250aWZ5IGNvbnNlcnZhdGl2ZWx5LgotICAoc2F2 ZS1leGN1cnNpb24KLSAgICAoc2F2ZS1zZWxlY3RlZC13aW5kb3cKLSAgICAgIChzZWxlY3QtZnJh bWUgZnJhbWUpCi0gICAgICAod2Fsay13aW5kb3dzIChmdW5jdGlvbiAobGFtYmRhICh3aW5kb3cp Ci0JCSAgICAgICAoc2V0LWJ1ZmZlciAod2luZG93LWJ1ZmZlciB3aW5kb3cpKQotCQkgICAgICAg KHdoZW4gbGF6eS1sb2NrLW1vZGUKLQkJCSAobGF6eS1sb2NrLWZvbnRpZnktY29uc2VydmF0aXZl bHkgd2luZG93KSkKLQkJICAgICAgIChzZXQtd2luZG93LXJlZGlzcGxheS1lbmQtdHJpZ2dlciB3 aW5kb3cgbmlsKSkpCi0JCSAgICAnbm9taW5pIGZyYW1lKSkpKQotCi07OyAoYykgRGVsZXRpb24g aW4gdGhlIGJ1ZmZlci4gIEhlcmUsIGEgYHdpbmRvdy1lbmQnIG1hcmtlciBjYW4gYmVjb21lIHZp c2libGUuCi07OyAgICAgRm9udGlmaWNhdGlvbiBvY2N1cnMgYnkgYWRkaW5nIGBsYXp5LWxvY2st YXJyYW5nZS1iZWZvcmUtY2hhbmdlJyB0bwotOzsgICAgIGBiZWZvcmUtY2hhbmdlLWZ1bmN0aW9u cycgYW5kIGBsYXp5LWxvY2stZm9udGlmeS1hZnRlci10cmlnZ2VyJyB0byB0aGUKLTs7ICAgICBo b29rIGByZWRpc3BsYXktZW5kLXRyaWdnZXItZnVuY3Rpb25zJy4gIEJlZm9yZSBldmVyeSBkZWxl dGlvbiwgdGhlCi07OyAgICAgbWFya2VyIGB3aW5kb3ctcmVkaXNwbGF5LWVuZC10cmlnZ2VyJyBw b3NpdGlvbiBpcyBzZXQgdG8gdGhlIHNvb24tdG8tYmUKLTs7ICAgICBjaGFuZ2VkIGB3aW5kb3ct ZW5kJyBwb3NpdGlvbi4gIElmIHRoZSBtYXJrZXIgYmVjb21lcyB2aXNpYmxlLAotOzsgICAgIGBs YXp5LWxvY2stZm9udGlmeS1hZnRlci10cmlnZ2VyJyBnZXRzIGNhbGxlZC4gIE91Y2guICBOb3Rl IHRoYXQgd2Ugb25seQotOzsgICAgIGhhdmUgdG8gZGVhbCB3aXRoIHRoaXMgZXZlbnR1YWxpdHkg aWYgdGhlcmUgaXMgbm8gb24tdGhlLWZseSBkZWZlcnJhbC4KLQotKGRlZnVuIGxhenktbG9jay1h cnJhbmdlLWJlZm9yZS1jaGFuZ2UgKGJlZyBlbmQpCi0gIDs7IENhbGxlZCBmcm9tIGBiZWZvcmUt Y2hhbmdlLWZ1bmN0aW9ucycuCi0gIDs7IEFycmFuZ2UgdGhhdCBpZiB0ZXh0IGJlY29tZXMgdmlz aWJsZSBpdCB3aWxsIGJlIGZvbnRpZmllZCAoaWYgYSBkZWxldGlvbgotICA7OyBpcyBwZW5kaW5n LCB0ZXh0IG1pZ2h0IGJlY29tZSB2aXNpYmxlIGF0IHRoZSBib3R0b20pLgotICAodW5sZXNzIChl cSBiZWcgZW5kKQotICAgIChsZXQgKCh3aW5kb3dzIChnZXQtYnVmZmVyLXdpbmRvdy1saXN0IChj dXJyZW50LWJ1ZmZlcikgJ25vbWluaSB0KSkgd2luZG93KQotICAgICAgKHdoaWxlIHdpbmRvd3MK LQkoc2V0cSB3aW5kb3cgKGNhciB3aW5kb3dzKSkKLQkodW5sZXNzIChtYXJrZXJwICh3aW5kb3ct cmVkaXNwbGF5LWVuZC10cmlnZ2VyIHdpbmRvdykpCi0JICAoc2V0LXdpbmRvdy1yZWRpc3BsYXkt ZW5kLXRyaWdnZXIgd2luZG93IChtYWtlLW1hcmtlcikpKQotCShzZXQtbWFya2VyICh3aW5kb3ct cmVkaXNwbGF5LWVuZC10cmlnZ2VyIHdpbmRvdykgKHdpbmRvdy1lbmQgd2luZG93KSkKLQkoc2V0 cSB3aW5kb3dzIChjZHIgd2luZG93cykpKSkpKQotCi0oZGVmdW4gbGF6eS1sb2NrLWZvbnRpZnkt YWZ0ZXItdHJpZ2dlciAod2luZG93IHRyaWdnZXItcG9pbnQpCi0gIDs7IENhbGxlZCBmcm9tIGBy ZWRpc3BsYXktZW5kLXRyaWdnZXItZnVuY3Rpb25zJy4KLSAgOzsgRm9udGlmeSBXSU5ET1cgZnJv bSBUUklHR0VSLVBPSU5UIGZvbGxvd2luZyB0aGUgcmVkaXNwbGF5LgotICA7OyBXZSBjb3VsZCBw cm9iYWJseSBqdXN0IHVzZSBgbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXItc2Nyb2xsJyB3aXRob3V0 IGxvc3M6Ci0gIDs7ICAoaW5saW5lIChsYXp5LWxvY2stZm9udGlmeS1hZnRlci1zY3JvbGwgd2lu ZG93ICh3aW5kb3ctc3RhcnQgd2luZG93KSkpCi0gIChsZXQgKChpbmhpYml0LXBvaW50LW1vdGlv bi1ob29rcyB0KSkKLSAgICAobGF6eS1sb2NrLWZvbnRpZnktcmVnaW9uIHRyaWdnZXItcG9pbnQg KHdpbmRvdy1lbmQgd2luZG93IHQpKSkpCi0KLTs7IDIuICBNb2RpZmllZCB0ZXh0IG11c3QgYmUg bWFya2VkIGFzIHVuZm9udGlmaWVkIHNvIGl0IGNhbiBiZSBpZGVudGlmaWVkIGFuZAotOzsgICAg IGZvbnRpZmllZCBsYXRlciB3aGVuIEVtYWNzIGlzIGlkbGUuICBEZWZlcnJhbCBvY2N1cnMgYnkg YWRkaW5nIG9uZSBvZgotOzsgICAgIGBsYXp5LWxvY2stZm9udGlmeS0qLWFmdGVyLWNoYW5nZScg KGZvciBvbi10aGUtZmx5IGZvbnRpZmljYXRpb24pIG9yCi07OyAgICAgYGxhenktbG9jay1kZWZl ci0qLWFmdGVyLWNoYW5nZScgKGZvciBkZWZlcnJlZCBmb250aWZpY2F0aW9uKSB0byB0aGUKLTs7 ICAgICBob29rIGBhZnRlci1jaGFuZ2UtZnVuY3Rpb25zJy4KLQotKGRlZmFsaWFzICdsYXp5LWxv Y2stZm9udGlmeS1saW5lLWFmdGVyLWNoYW5nZQotICA7OyBDYWxsZWQgZnJvbSBgYWZ0ZXItY2hh bmdlLWZ1bmN0aW9ucycuCi0gIDs7IEZvbnRpZnkgdGhlIGN1cnJlbnQgY2hhbmdlLgotICAnZm9u dC1sb2NrLWFmdGVyLWNoYW5nZS1mdW5jdGlvbikKLQotKGRlZnVuIGxhenktbG9jay1mb250aWZ5 LXJlc3QtYWZ0ZXItY2hhbmdlIChiZWcgZW5kIG9sZC1sZW4pCi0gIDs7IENhbGxlZCBmcm9tIGBh ZnRlci1jaGFuZ2UtZnVuY3Rpb25zJy4KLSAgOzsgRm9udGlmeSB0aGUgY3VycmVudCBjaGFuZ2Ug YW5kIGRlZmVyIGZvbnRpZmljYXRpb24gb2YgdGhlIHJlc3Qgb2YgdGhlCi0gIDs7IGJ1ZmZlci4g IFNhdmUgdGhlIGN1cnJlbnQgYnVmZmVyIHNvIHRoYXQgd2Ugc3Vic2VxdWVudGx5IGZvbnRpZnkg aW4gYWxsCi0gIDs7IHdpbmRvd3Mgc2hvd2luZyB0aGUgYnVmZmVyLgotICAobGF6eS1sb2NrLWZv bnRpZnktbGluZS1hZnRlci1jaGFuZ2UgYmVnIGVuZCBvbGQtbGVuKQotICAoc2F2ZS1idWZmZXIt c3RhdGUgbmlsCi0gICAgKHVubGVzcyAobWVtcSAoY3VycmVudC1idWZmZXIpIGxhenktbG9jay1i dWZmZXJzKQotICAgICAgKHB1c2ggKGN1cnJlbnQtYnVmZmVyKSBsYXp5LWxvY2stYnVmZmVycykp Ci0gICAgKHNhdmUtcmVzdHJpY3Rpb24KLSAgICAgICh3aWRlbikKLSAgICAgIChyZW1vdmUtdGV4 dC1wcm9wZXJ0aWVzIGVuZCAocG9pbnQtbWF4KSAnKGxhenktbG9jayBuaWwpKSkpKQotCi0oZGVm dW4gbGF6eS1sb2NrLWRlZmVyLWxpbmUtYWZ0ZXItY2hhbmdlIChiZWcgZW5kIG9sZC1sZW4pCi0g IDs7IENhbGxlZCBmcm9tIGBhZnRlci1jaGFuZ2UtZnVuY3Rpb25zJy4KLSAgOzsgRGVmZXIgZm9u dGlmaWNhdGlvbiBvZiB0aGUgY3VycmVudCBjaGFuZ2UuICBTYXZlIHRoZSBjdXJyZW50IGJ1ZmZl ciBzbwotICA7OyB0aGF0IHdlIHN1YnNlcXVlbnRseSBmb250aWZ5IGluIGFsbCB3aW5kb3dzIHNo b3dpbmcgdGhlIGJ1ZmZlci4KLSAgKHNhdmUtYnVmZmVyLXN0YXRlIG5pbAotICAgICh1bmxlc3Mg KG1lbXEgKGN1cnJlbnQtYnVmZmVyKSBsYXp5LWxvY2stYnVmZmVycykKLSAgICAgIChwdXNoIChj dXJyZW50LWJ1ZmZlcikgbGF6eS1sb2NrLWJ1ZmZlcnMpKQotICAgIChyZW1vdmUtdGV4dC1wcm9w ZXJ0aWVzIChtYXggKDEtIGJlZykgKHBvaW50LW1pbikpCi0JCQkgICAgKG1pbiAoMSsgZW5kKSAo cG9pbnQtbWF4KSkKLQkJCSAgICAnKGxhenktbG9jayBuaWwpKSkpCi0KLShkZWZ1biBsYXp5LWxv Y2stZGVmZXItcmVzdC1hZnRlci1jaGFuZ2UgKGJlZyBlbmQgb2xkLWxlbikKLSAgOzsgQ2FsbGVk IGZyb20gYGFmdGVyLWNoYW5nZS1mdW5jdGlvbnMnLgotICA7OyBEZWZlciBmb250aWZpY2F0aW9u IG9mIHRoZSByZXN0IG9mIHRoZSBidWZmZXIuICBTYXZlIHRoZSBjdXJyZW50IGJ1ZmZlciBzbwot ICA7OyB0aGF0IHdlIHN1YnNlcXVlbnRseSBmb250aWZ5IGluIGFsbCB3aW5kb3dzIHNob3dpbmcg dGhlIGJ1ZmZlci4KLSAgKHNhdmUtYnVmZmVyLXN0YXRlIG5pbAotICAgICh1bmxlc3MgKG1lbXEg KGN1cnJlbnQtYnVmZmVyKSBsYXp5LWxvY2stYnVmZmVycykKLSAgICAgIChwdXNoIChjdXJyZW50 LWJ1ZmZlcikgbGF6eS1sb2NrLWJ1ZmZlcnMpKQotICAgIChzYXZlLXJlc3RyaWN0aW9uCi0gICAg ICAod2lkZW4pCi0gICAgICAocmVtb3ZlLXRleHQtcHJvcGVydGllcyAobWF4ICgxLSBiZWcpIChw b2ludC1taW4pKQotCQkJICAgICAgKHBvaW50LW1heCkKLQkJCSAgICAgICcobGF6eS1sb2NrIG5p bCkpKSkpCi0KLTs7IDMuICBEZWZlcnJlZCBmb250aWZpY2F0aW9uIGFuZCBzdGVhbHRoIGZvbnRp ZmljYXRpb24gYXJlIGRvbmUgZnJvbSB0aGVzZSB0d28KLTs7ICAgICBmdW5jdGlvbnMuICBUaGV5 IGFyZSBzZXQgdXAgYXMgSWRsZSBUaW1lcnMuCi0KLShkZWZ1biBsYXp5LWxvY2stZm9udGlmeS1h ZnRlci1kZWZlciAoKQotICA7OyBDYWxsZWQgZnJvbSBgdGltZXItaWRsZS1saXN0Jy4KLSAgOzsg Rm9udGlmeSBhbGwgd2luZG93cyB3aGVyZSBkZWZlcnJhbCBoYXMgb2NjdXJyZWQgZm9yIGl0cyBi dWZmZXIuCi0gIChzYXZlLWV4Y3Vyc2lvbgotICAgICh3aGlsZSAoYW5kIGxhenktbG9jay1idWZm ZXJzIChub3QgKGlucHV0LXBlbmRpbmctcCkpKQotICAgICAgKGxldCAoKGJ1ZmZlciAoY2FyIGxh enktbG9jay1idWZmZXJzKSkgd2luZG93cykKLQk7OyBQYXJhbm9pYTogY2hlY2sgdGhhdCB0aGUg YnVmZmVyIGlzIHN0aWxsIGxpdmUgYW5kIExhenkgTG9jayBtb2RlIG9uLgotCSh3aGVuIChidWZm ZXItbGl2ZS1wIGJ1ZmZlcikKLQkgIChzZXQtYnVmZmVyIGJ1ZmZlcikKLQkgICh3aGVuIGxhenkt bG9jay1tb2RlCi0JICAgIChzZXRxIHdpbmRvd3MgKGdldC1idWZmZXItd2luZG93LWxpc3QgYnVm ZmVyICdub21pbmkgdCkpCi0JICAgICh3aGlsZSB3aW5kb3dzCi0JICAgICAgKGxhenktbG9jay1m b250aWZ5LXdpbmRvdyAoY2FyIHdpbmRvd3MpKQotCSAgICAgIChzZXRxIHdpbmRvd3MgKGNkciB3 aW5kb3dzKSkpKSkKLQkoc2V0cSBsYXp5LWxvY2stYnVmZmVycyAoY2RyIGxhenktbG9jay1idWZm ZXJzKSkpKSkKLSAgOzsgQWRkIGhvb2sgaWYgZm9udGlmaWNhdGlvbiBzaG91bGQgbm93IGJlIGRl ZmVyLWRyaXZlbiBpbiB0aGlzIGJ1ZmZlci4KLSAgKHdoZW4gKGFuZCBsYXp5LWxvY2stbW9kZSBs YXp5LWxvY2stZGVmZXItb24tc2Nyb2xsaW5nCi0JICAgICAobWVtcSAnbGF6eS1sb2NrLWZvbnRp ZnktYWZ0ZXItc2Nyb2xsIHdpbmRvdy1zY3JvbGwtZnVuY3Rpb25zKQotCSAgICAgKG5vdCAob3Ig KGlucHV0LXBlbmRpbmctcCkgKGxhenktbG9jay11bmZvbnRpZmllZC1wKSkpKQotICAgIChyZW1v dmUtaG9vayAnd2luZG93LXNjcm9sbC1mdW5jdGlvbnMgJ2xhenktbG9jay1mb250aWZ5LWFmdGVy LXNjcm9sbCB0KQotICAgIChhZGQtaG9vayAnd2luZG93LXNjcm9sbC1mdW5jdGlvbnMgJ2xhenkt bG9jay1kZWZlci1hZnRlci1zY3JvbGwgbmlsIHQpKSkKLQotKGRlZnVuIGxhenktbG9jay1mb250 aWZ5LWFmdGVyLWlkbGUgKCkKLSAgOzsgQ2FsbGVkIGZyb20gYHRpbWVyLWlkbGUtbGlzdCcuCi0g IDs7IEZvbnRpZnkgYWxsIGJ1ZmZlcnMgdGhhdCBuZWVkIGl0LCBzdGVhbHRoaWx5IHdoaWxlIGlk bGUuCi0gICh1bmxlc3MgKG9yIGV4ZWN1dGluZy1rYmQtbWFjcm8gKHdpbmRvdy1taW5pYnVmZmVy LXAgKHNlbGVjdGVkLXdpbmRvdykpKQotICAgIDs7IExvb3Agb3ZlciBhbGwgYnVmZmVycywgZm9u dGlmeSBzdGVhbHRoaWx5IGZvciBlYWNoIGlmIG5lY2Vzc2FyeS4KLSAgICAobGV0ICgoYnVmZmVy cyAoYnVmZmVyLWxpc3QpKSAoY29udGludWUgdCkKLQkgIG1lc3NhZ2UgbWVzc2FnZS1sb2ctbWF4 IG1pbmlidWZmZXItYXV0by1yYWlzZSkKLSAgICAgIChzYXZlLWV4Y3Vyc2lvbgotCShkby13aGls ZSAoYW5kIGJ1ZmZlcnMgY29udGludWUpCi0JICAoc2V0LWJ1ZmZlciAoY2FyIGJ1ZmZlcnMpKQot CSAgKGlmIChub3QgKGFuZCBsYXp5LWxvY2stbW9kZSAobGF6eS1sb2NrLXVuZm9udGlmaWVkLXAp KSkKLQkgICAgICAoc2V0cSBjb250aW51ZSAobm90IChpbnB1dC1wZW5kaW5nLXApKSkKLQkgICAg OzsgRm9udGlmeSByZWdpb25zIGluIHRoaXMgYnVmZmVyIHdoaWxlIHRoZXJlIGlzIG5vIGlucHV0 LgotCSAgICAod2l0aC10ZW1wLW1lc3NhZ2UKLQkJKHdoZW4gbGF6eS1sb2NrLXN0ZWFsdGgtdmVy Ym9zZQotCQkgICJGb250aWZ5aW5nIHN0ZWFsdGhpbHkuLi4iKQotCSAgICAgIChkby13aGlsZSAo YW5kIChsYXp5LWxvY2stdW5mb250aWZpZWQtcCkgY29udGludWUpCi0JCShpZiAoYW5kIGxhenkt bG9jay1zdGVhbHRoLWxvYWQKLQkJCSAoPiAoY2FyIChsb2FkLWF2ZXJhZ2UpKSBsYXp5LWxvY2st c3RlYWx0aC1sb2FkKSkKLQkJICAgIDs7IFdhaXQgYSB3aGlsZSBiZWZvcmUgY29udGludWluZyB3 aXRoIHRoZSBsb29wLgotCQkgICAgKHByb2duCi0JCSAgICAgICh3aGVuIG1lc3NhZ2UKLQkJCSht ZXNzYWdlICJGb250aWZ5aW5nIHN0ZWFsdGhpbHkuLi5zdXNwZW5kZWQiKQotCQkJKHNldHEgbWVz c2FnZSBuaWwpKQotCQkgICAgICAoc2V0cSBjb250aW51ZSAoc2l0LWZvciAob3IgbGF6eS1sb2Nr LXN0ZWFsdGgtdGltZSAzMCkpKSkKLQkJICA7OyBGb250aWZ5IGEgY2h1bmsuCi0JCSAgKHdoZW4g bGF6eS1sb2NrLXN0ZWFsdGgtdmVyYm9zZQotCQkgICAgKGlmIG1lc3NhZ2UKLQkJCShtZXNzYWdl ICJGb250aWZ5aW5nIHN0ZWFsdGhpbHkuLi4gJTJkJSUgb2YgJXMiCi0JCQkJIChsYXp5LWxvY2st cGVyY2VudC1mb250aWZpZWQpIChidWZmZXItbmFtZSkpCi0JCSAgICAgIChtZXNzYWdlICJGb250 aWZ5aW5nIHN0ZWFsdGhpbHkuLi4iKQotCQkgICAgICAoc2V0cSBtZXNzYWdlIHQpKSkKLQkJICA7 OyBDdXJyZW50IGJ1ZmZlciBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyBgc2l0LWZvcicuCi0JCSAg KHNldC1idWZmZXIgKGNhciBidWZmZXJzKSkKLQkJICAobGF6eS1sb2NrLWZvbnRpZnktY2h1bmsp Ci0JCSAgKHNldHEgY29udGludWUgKHNpdC1mb3IgKG9yIGxhenktbG9jay1zdGVhbHRoLW5pY2Ug MCkpKSkpKSkKLQkgIChzZXRxIGJ1ZmZlcnMgKGNkciBidWZmZXJzKSkpKSkpKQotCi07OyA0LiAg U3BlY2lhbCBjaXJjdW1zdGFuY2VzLgotCi0oZGVmdW4gbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXIt dmlzYWdlICgpCi0gIDs7IENhbGxlZCBmcm9tIGBvdXRsaW5lLXZpZXctY2hhbmdlLWhvb2snIGFu ZCBgaHMtaGlkZS1ob29rJy4KLSAgOzsgRm9udGlmeSB3aW5kb3dzIHNob3dpbmcgdGhlIGN1cnJl bnQgYnVmZmVyLCBhcyBpdHMgdmlzaWJpbGl0eSBoYXMgY2hhbmdlZC4KLSAgOzsgVGhpcyBpcyBh IGNvbnNwaXJhY3kgaGFjayBiZXR3ZWVuIGxhenktbG9jay5lbCwgb3V0bGluZS5lbCBhbmQKLSAg OzsgaGlkZXNob3cuZWwuCi0gIChsZXQgKCh3aW5kb3dzIChnZXQtYnVmZmVyLXdpbmRvdy1saXN0 IChjdXJyZW50LWJ1ZmZlcikgJ25vbWluaSB0KSkpCi0gICAgKHdoaWxlIHdpbmRvd3MKLSAgICAg IChsYXp5LWxvY2stZm9udGlmeS1jb25zZXJ2YXRpdmVseSAoY2FyIHdpbmRvd3MpKQotICAgICAg KHNldHEgd2luZG93cyAoY2RyIHdpbmRvd3MpKSkpKQotCi0oZGVmdW4gbGF6eS1sb2NrLWFmdGVy LWZvbnRpZnktYnVmZmVyICgpCi0gIDs7IENhbGxlZCBmcm9tIGBmb250LWxvY2stYWZ0ZXItZm9u dGlmeS1idWZmZXInLgotICA7OyBNYXJrIHRoZSBjdXJyZW50IGJ1ZmZlciBhcyBmb250aWZpZWQu Ci0gIDs7IFRoaXMgaXMgYSBjb25zcGlyYWN5IGhhY2sgYmV0d2VlbiBsYXp5LWxvY2suZWwgYW5k IGZvbnQtbG9jay5lbC4KLSAgKHNhdmUtYnVmZmVyLXN0YXRlIG5pbAotICAgIChhZGQtdGV4dC1w cm9wZXJ0aWVzIChwb2ludC1taW4pIChwb2ludC1tYXgpICcobGF6eS1sb2NrIHQpKSkpCi0KLShk ZWZ1biBsYXp5LWxvY2stYWZ0ZXItdW5mb250aWZ5LWJ1ZmZlciAoKQotICA7OyBDYWxsZWQgZnJv bSBgZm9udC1sb2NrLWFmdGVyLXVuZm9udGlmeS1idWZmZXInLgotICA7OyBNYXJrIHRoZSBjdXJy ZW50IGJ1ZmZlciBhcyB1bmZvbnRpZmllZC4KLSAgOzsgVGhpcyBpcyBhIGNvbnNwaXJhY3kgaGFj ayBiZXR3ZWVuIGxhenktbG9jay5lbCBhbmQgZm9udC1sb2NrLmVsLgotICAoc2F2ZS1idWZmZXIt c3RhdGUgbmlsCi0gICAgKHJlbW92ZS10ZXh0LXByb3BlcnRpZXMgKHBvaW50LW1pbikgKHBvaW50 LW1heCkgJyhsYXp5LWxvY2sgbmlsKSkpKQotDAotOzsgRm9udGlmaWNhdGlvbiBmdW5jdGlvbnMu Ci0KLTs7IElmIHBhY2thZ2VzIHdhbnQgdG8gZW5zdXJlIHRoYXQgc29tZSByZWdpb24gb2YgdGhl IGJ1ZmZlciBpcyBmb250aWZpZWQsIHRoZXkKLTs7IHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbi4g IEZvciBhbiBleGFtcGxlLCBzZWUgcHMtcHJpbnQuZWwuCi0oZGVmdW4gbGF6eS1sb2NrLWZvbnRp ZnktcmVnaW9uIChiZWcgZW5kKQotICA7OyBGb250aWZ5IGJldHdlZW4gQkVHIGFuZCBFTkQsIHdo ZXJlIG5lY2Vzc2FyeSwgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgotICAoc2F2ZS1yZXN0cmljdGlv bgotICAgICh3aWRlbikKLSAgICAod2hlbiAoc2V0cSBiZWcgKHRleHQtcHJvcGVydHktYW55IGJl ZyBlbmQgJ2xhenktbG9jayBuaWwpKQotICAgICAgKHNhdmUtZXhjdXJzaW9uCi0JKHNhdmUtbWF0 Y2gtZGF0YQotCSAgKHNhdmUtYnVmZmVyLXN0YXRlCi0JICAgKG5leHQpCi0JICAgOzsgRmluZCBz dWNjZXNzaXZlIHVuZm9udGlmaWVkIHJlZ2lvbnMgYmV0d2VlbiBCRUcgYW5kIEVORC4KLQkgICAo Y29uZGl0aW9uLWNhc2UgZGF0YQotCSAgICAgICAoZG8td2hpbGUgYmVnCi0JCQkgKHNldHEgbmV4 dCAob3IgKHRleHQtcHJvcGVydHktYW55IGJlZyBlbmQgJ2xhenktbG9jayB0KSBlbmQpKQotCSAg OzsgTWFrZSBzdXJlIHRoZSByZWdpb24gZW5kIHBvaW50cyBhcmUgYXQgYmVnaW5uaW5nIG9mIGxp bmUuCi0JCQkgKGdvdG8tY2hhciBiZWcpCi0JCQkgKHVubGVzcyAoYm9scCkKLQkJCSAgIChiZWdp bm5pbmctb2YtbGluZSkKLQkJCSAgIChzZXRxIGJlZyAocG9pbnQpKSkKLQkJCSAoZ290by1jaGFy IG5leHQpCi0JCQkgKHVubGVzcyAoYm9scCkKLQkJCSAgIChmb3J3YXJkLWxpbmUpCi0JCQkgICAo c2V0cSBuZXh0IChwb2ludCkpKQotCQkgICAgIDs7IEZvbnRpZnkgdGhlIHJlZ2lvbiwgdGhlbiBm bGFnIGl0IGFzIGZvbnRpZmllZC4KLQkJCSAoZm9udC1sb2NrLWZvbnRpZnktcmVnaW9uIGJlZyBu ZXh0KQotCQkJIChhZGQtdGV4dC1wcm9wZXJ0aWVzIGJlZyBuZXh0ICcobGF6eS1sb2NrIHQpKQot CQkJIChzZXRxIGJlZyAodGV4dC1wcm9wZXJ0eS1hbnkgbmV4dCBlbmQgJ2xhenktbG9jayBuaWwp KSkKLQkgICAgICgoZXJyb3IgcXVpdCkgKG1lc3NhZ2UgIkZvbnRpZnlpbmcgcmVnaW9uLi4uJXMi IGRhdGEpKSkpKSkpKSkKLQotKGRlZnVuIGxhenktbG9jay1mb250aWZ5LWNodW5rICgpCi0gIDs7 IEZvbnRpZnkgdGhlIG5lYXJlc3QgY2h1bmssIGZvciBzdGVhbHRoLCBpbiB0aGUgY3VycmVudCBi dWZmZXIuCi0gIChsZXQgKChpbmhpYml0LXBvaW50LW1vdGlvbi1ob29rcyB0KSkKLSAgICAoc2F2 ZS1leGN1cnNpb24KLSAgICAgIChzYXZlLXJlc3RyaWN0aW9uCi0JKHdpZGVuKQotCTs7IE1vdmUg dG8gZW5kIG9mIGxpbmUgaW4gY2FzZSB0aGUgY2hhcmFjdGVyIGF0IHBvaW50IGlzIG5vdCBmb250 aWZpZWQuCi0JKGVuZC1vZi1saW5lKQotCTs7IEZpbmQgd2hlcmUgdGhlIHByZXZpb3VzIChuZXh0 KSB1bmZvbnRpZmllZCByZWdpb25zIGVuZCAoYmVnaW4pLgotCShsZXQgKChwcmV2IChwcmV2aW91 cy1zaW5nbGUtcHJvcGVydHktY2hhbmdlIChwb2ludCkgJ2xhenktbG9jaykpCi0JICAgICAgKG5l eHQgKHRleHQtcHJvcGVydHktYW55IChwb2ludCkgKHBvaW50LW1heCkgJ2xhenktbG9jayBuaWwp KSkKLQkgIDs7IEZvbnRpZnkgZnJvbSB0aGUgbmVhcmVzdCB1bmZvbnRpZmllZCBwb3NpdGlvbi4K LQkgIChpZiAob3IgKG51bGwgcHJldikgKGFuZCBuZXh0ICg8ICgtIG5leHQgKHBvaW50KSkgKC0g KHBvaW50KSBwcmV2KSkpKQotCSAgICAgIDs7IFRoZSBuZXh0LCBvciBuZWl0aGVyLCByZWdpb24g aXMgdGhlIG5lYXJlc3Qgbm90IGZvbnRpZmllZC4KLQkgICAgICAobGF6eS1sb2NrLWZvbnRpZnkt cmVnaW9uCi0JICAgICAgIChwcm9nbiAoZ290by1jaGFyIChvciBuZXh0IChwb2ludC1taW4pKSkK LQkJICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQotCQkgICAgICAocG9pbnQpKQotCSAgICAgICAo cHJvZ24gKGdvdG8tY2hhciAob3IgbmV4dCAocG9pbnQtbWluKSkpCi0JCSAgICAgIChmb3J3YXJk LWxpbmUgbGF6eS1sb2NrLXN0ZWFsdGgtbGluZXMpCi0JCSAgICAgIChwb2ludCkpKQotCSAgICA7 OyBUaGUgcHJldmlvdXMgcmVnaW9uIGlzIHRoZSBuZWFyZXN0IG5vdCBmb250aWZpZWQuCi0JICAg IChsYXp5LWxvY2stZm9udGlmeS1yZWdpb24KLQkgICAgIChwcm9nbiAoZ290by1jaGFyIHByZXYp Ci0JCSAgICAoZm9yd2FyZC1saW5lICgtIGxhenktbG9jay1zdGVhbHRoLWxpbmVzKSkKLQkJICAg IChwb2ludCkpCi0JICAgICAocHJvZ24gKGdvdG8tY2hhciBwcmV2KQotCQkgICAgKGZvcndhcmQt bGluZSkKLQkJICAgIChwb2ludCkpKSkpKSkpKQotCi0oZGVmdW4gbGF6eS1sb2NrLWZvbnRpZnkt d2luZG93ICh3aW5kb3cpCi0gIDs7IEZvbnRpZnkgaW4gV0lORE9XIGJldHdlZW4gYHdpbmRvdy1z dGFydCcgYW5kIGB3aW5kb3ctZW5kJy4KLSAgOzsgV2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIHdl IGNhbiB1c2UgYHdpbmRvdy1zdGFydCcgYW5kIGB3aW5kb3ctZW5kJy4KLSAgKHdpdGgtY3VycmVu dC1idWZmZXIgKHdpbmRvdy1idWZmZXIgd2luZG93KQotICAgIChsYXp5LWxvY2stZm9udGlmeS1y ZWdpb24gKHdpbmRvdy1zdGFydCB3aW5kb3cpICh3aW5kb3ctZW5kIHdpbmRvdykpKSkKLQotKGRl ZnVuIGxhenktbG9jay1mb250aWZ5LWNvbnNlcnZhdGl2ZWx5ICh3aW5kb3cpCi0gIDs7IEZvbnRp ZnkgaW4gV0lORE9XIGNvbnNlcnZhdGl2ZWx5IGFyb3VuZCBwb2ludC4KLSAgOzsgV2hlcmUgd2Ug Y2Fubm90IHVzZSBgd2luZG93LXN0YXJ0JyBhbmQgYHdpbmRvdy1lbmQnIHdlIGRvIGB3aW5kb3ct aGVpZ2h0JwotICA7OyBsaW5lcyBhcm91bmQgcG9pbnQuICBUaGF0IHdheSB3ZSBndWFyYW50ZWUg dG8gaGF2ZSBkb25lIGVub3VnaC4KLSAgKHdpdGgtY3VycmVudC1idWZmZXIgKHdpbmRvdy1idWZm ZXIgd2luZG93KQotICAgIChsZXQgKChpbmhpYml0LXBvaW50LW1vdGlvbi1ob29rcyB0KSkKLSAg ICAgIChsYXp5LWxvY2stZm9udGlmeS1yZWdpb24KLSAgICAgICAoc2F2ZS1leGN1cnNpb24KLQkg KGdvdG8tY2hhciAod2luZG93LXBvaW50IHdpbmRvdykpCi0JICh2ZXJ0aWNhbC1tb3Rpb24gKC0g KHdpbmRvdy1oZWlnaHQgd2luZG93KSkgd2luZG93KSAocG9pbnQpKQotICAgICAgIChzYXZlLWV4 Y3Vyc2lvbgotCSAoZ290by1jaGFyICh3aW5kb3ctcG9pbnQgd2luZG93KSkKLQkgKHZlcnRpY2Fs LW1vdGlvbiAod2luZG93LWhlaWdodCB3aW5kb3cpIHdpbmRvdykgKHBvaW50KSkpKSkpCi0KLShk ZWZ1biBsYXp5LWxvY2stdW5mb250aWZpZWQtcCAoKQotICA7OyBSZXR1cm4gbm9uLW5pbCBpZiB0 aGVyZSBpcyBhbnl3aGVyZSBzdGlsbCB0byBiZSBmb250aWZpZWQuCi0gIChzYXZlLXJlc3RyaWN0 aW9uCi0gICAgKHdpZGVuKQotICAgICh0ZXh0LXByb3BlcnR5LWFueSAocG9pbnQtbWluKSAocG9p bnQtbWF4KSAnbGF6eS1sb2NrIG5pbCkpKQotCi0oZGVmdW4gbGF6eS1sb2NrLXBlcmNlbnQtZm9u dGlmaWVkICgpCi0gIDs7IFJldHVybiB0aGUgcGVyY2VudGFnZSAob2YgY2hhcmFjdGVycykgb2Yg dGhlIGJ1ZmZlciB0aGF0IGFyZSBmb250aWZpZWQuCi0gIChzYXZlLXJlc3RyaWN0aW9uCi0gICAg KHdpZGVuKQotICAgIChsZXQgKChiZWcgKHBvaW50LW1pbikpIChzaXplIDApIG5leHQpCi0gICAg ICA7OyBGaW5kIHdoZXJlIHRoZSBuZXh0IGZvbnRpZmllZCByZWdpb24gYmVnaW5zLgotICAgICAg KHdoaWxlIChzZXRxIGJlZyAodGV4dC1wcm9wZXJ0eS1hbnkgYmVnIChwb2ludC1tYXgpICdsYXp5 LWxvY2sgdCkpCi0JKHNldHEgbmV4dCAob3IgKHRleHQtcHJvcGVydHktYW55IGJlZyAocG9pbnQt bWF4KSAnbGF6eS1sb2NrIG5pbCkKLQkJICAgICAgIChwb2ludC1tYXgpKSkKLQkoY2wtaW5jZiBz aXplICgtIG5leHQgYmVnKSkKLQkoc2V0cSBiZWcgbmV4dCkpCi0gICAgICA7OyBGbG9hdCBiZWNh dXNlIHVzaW5nIGludGVnZXIgbXVsdGlwbGljYXRpb24gd2lsbCBmcmVxdWVudGx5IG92ZXJmbG93 LgotICAgICAgKHRydW5jYXRlICgqICgvIChmbG9hdCBzaXplKSAocG9pbnQtbWF4KSkgMTAwKSkp KSkKLQwKLTs7IFZlcnNpb24gZGVwZW5kZW50IHdvcmthcm91bmRzIGFuZCBmaXhlcy4KLQotKHdo ZW4gKGNvbnNwIGxhenktbG9jay1kZWZlci10aW1lKQotICA7OwotICA7OyBJbiAyLjA2LjA0IGFu ZCBiZWxvdywgYGxhenktbG9jay1kZWZlci10aW1lJyBjb3VsZCBzcGVjaWZ5IG1vZGVzIGFuZCB0 aW1lLgotICAod2l0aC1vdXRwdXQtdG8tdGVtcC1idWZmZXIgIipIZWxwKiIKLSAgICAocHJpbmMg IlRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgYGxhenktbG9jay1kZWZlci10aW1lJyB3YXNcbiAi KQotICAgIChwcmluYyBsYXp5LWxvY2stZGVmZXItdGltZSkKLSAgICAocHJpbmMgIlxuIikKLSAg ICAocHJpbmMgIlRoaXMgdmFyaWFibGUgY2Fubm90IG5vdyBiZSBhIGxpc3Qgb2YgbW9kZXMgYW5k IHRpbWUsXG4iKQotICAgIChwcmluYyAic28gaW5zdGVhZCB1c2UgIikKLSAgICAocHJpbmMgKHN1 YnN0aXR1dGUtY29tbWFuZC1rZXlzICJcXFtjdXN0b21pemUtb3B0aW9uXSIpKQotICAgIChwcmlu YyAiIHRvIG1vZGlmeSB0aGUgdmFyaWFibGVzLCBvciBwdXQgdGhlIGZvcm1zOlxuIikKLSAgICAo cHJpbmMgIiAoc2V0cSBsYXp5LWxvY2stZGVmZXItdGltZSAiKQotICAgIChwcmluYyAoY2RyIGxh enktbG9jay1kZWZlci10aW1lKSkKLSAgICAocHJpbmMgIilcbiIpCi0gICAgKHByaW5jICIgKHNl dHEgbGF6eS1sb2NrLWRlZmVyLW9uLXRoZS1mbHkgJyIpCi0gICAgKHByaW5jIChjYXIgbGF6eS1s b2NrLWRlZmVyLXRpbWUpKQotICAgIChwcmluYyAiKVxuIikKLSAgICAocHJpbmMgImluIHlvdXIg fi8uZW1hY3MuICAiKQotICAgIChwcmluYyAiVGhlIGFib3ZlIGZvcm1zIGhhdmUgYmVlbiBldmFs dWF0ZWQgZm9yIHRoaXMgZWRpdG9yIHNlc3Npb24sXG4iKQotICAgIChwcmluYyAiYnV0IHlvdSBz aG91bGQgdXNlICIpCi0gICAgKHByaW5jIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cyAiXFxbY3Vz dG9taXplLW9wdGlvbl0iKSkKLSAgICAocHJpbmMgIiBvciBjaGFuZ2UgeW91ciB+Ly5lbWFjcyBu b3cuIikpCi0gIChzZXRxIGxhenktbG9jay1kZWZlci1vbi10aGUtZmx5IChjYXIgbGF6eS1sb2Nr LWRlZmVyLXRpbWUpCi0JbGF6eS1sb2NrLWRlZmVyLXRpbWUgKGNkciBsYXp5LWxvY2stZGVmZXIt dGltZSkpKQotCi0od2hlbiAoYm91bmRwICdsYXp5LWxvY2stZGVmZXItZHJpdmVuKQotICA7Owot ICA7OyBJbiAyLjA2LjA0IGFuZCBiZWxvdywgYGxhenktbG9jay1kZWZlci1kcml2ZW4nIHdhcyB0 aGUgdmFyaWFibGUgbmFtZS4KLSAgKHdpdGgtb3V0cHV0LXRvLXRlbXAtYnVmZmVyICIqSGVscCoi Ci0gICAgKHByaW5jICJUaGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGBsYXp5LWxvY2stZGVmZXIt ZHJpdmVuJyBpcyBzZXQgdG8gIikKLSAgICAoaWYgKG1lbXEgbGF6eS1sb2NrLWRlZmVyLWRyaXZl biAnKG5pbCB0KSkKLQkocHJpbmMgbGF6eS1sb2NrLWRlZmVyLWRyaXZlbikKLSAgICAgIChwcmlu YyAiYCIpCi0gICAgICAocHJpbmMgbGF6eS1sb2NrLWRlZmVyLWRyaXZlbikKLSAgICAgIChwcmlu YyAiJyIpKQotICAgIChwcmluYyAiLlxuIikKLSAgICAocHJpbmMgIlRoaXMgdmFyaWFibGUgaXMg bm93IGNhbGxlZCBgbGF6eS1sb2NrLWRlZmVyLW9uLXNjcm9sbGluZycsXG4iKQotICAgIChwcmlu YyAic28gaW5zdGVhZCB1c2UgIikKLSAgICAocHJpbmMgKHN1YnN0aXR1dGUtY29tbWFuZC1rZXlz ICJcXFtjdXN0b21pemUtb3B0aW9uXSIpKQotICAgIChwcmluYyAiIHRvIG1vZGlmeSB0aGUgdmFy aWFibGUsIG9yIHB1dCB0aGUgZm9ybTpcbiIpCi0gICAgKHByaW5jICIgKHNldHEgbGF6eS1sb2Nr LWRlZmVyLW9uLXNjcm9sbGluZyAiKQotICAgICh1bmxlc3MgKG1lbXEgbGF6eS1sb2NrLWRlZmVy LWRyaXZlbiAnKG5pbCB0KSkKLSAgICAgIChwcmluYyAiJyIpKQotICAgIChwcmluYyBsYXp5LWxv Y2stZGVmZXItZHJpdmVuKQotICAgIChwcmluYyAiKVxuIikKLSAgICAocHJpbmMgImluIHlvdXIg fi8uZW1hY3MuICAiKQotICAgIChwcmluYyAiVGhlIGFib3ZlIGZvcm0gaGFzIGJlZW4gZXZhbHVh dGVkIGZvciB0aGlzIGVkaXRvciBzZXNzaW9uLFxuIikKLSAgICAocHJpbmMgImJ1dCB5b3Ugc2hv dWxkIHVzZSAiKQotICAgIChwcmluYyAoc3Vic3RpdHV0ZS1jb21tYW5kLWtleXMgIlxcW2N1c3Rv bWl6ZS1vcHRpb25dIikpCi0gICAgKHByaW5jICIgb3IgY2hhbmdlIHlvdXIgfi8uZW1hY3Mgbm93 LiIpKQotICAoc2V0cSBsYXp5LWxvY2stZGVmZXItb24tc2Nyb2xsaW5nIGxhenktbG9jay1kZWZl ci1kcml2ZW4pKQotDAotOzsgSW5zdGFsbCBvdXJzZWx2ZXM6Ci0KLShhZGQtaG9vayAnd2luZG93 LXNpemUtY2hhbmdlLWZ1bmN0aW9ucyAnbGF6eS1sb2NrLWZvbnRpZnktYWZ0ZXItcmVzaXplKQot KGFkZC1ob29rICdyZWRpc3BsYXktZW5kLXRyaWdnZXItZnVuY3Rpb25zICdsYXp5LWxvY2stZm9u dGlmeS1hZnRlci10cmlnZ2VyKQotCi0odW5sZXNzIChhc3NxICdsYXp5LWxvY2stbW9kZSBtaW5v ci1tb2RlLWFsaXN0KQotICAoc2V0cSBtaW5vci1tb2RlLWFsaXN0IChhcHBlbmQgbWlub3ItbW9k ZS1hbGlzdCAnKChsYXp5LWxvY2stbW9kZSBuaWwpKSkpKQotCi07OyBQcm92aWRlIG91cnNlbHZl czoKLQotKHByb3ZpZGUgJ2xhenktbG9jaykKLQotOzsgTG9jYWwgVmFyaWFibGVzOgotOzsgYnl0 ZS1jb21waWxlLXdhcm5pbmdzOiAobm90IG9ic29sZXRlKQotOzsgRW5kOgotCi07OzsgbGF6eS1s b2NrLmVsIGVuZHMgaGVyZQpkaWZmIC0tZ2l0IGEvbGlzcC9wcm9nbW9kZXMvYW50bHItbW9kZS5l bCBiL2xpc3AvcHJvZ21vZGVzL2FudGxyLW1vZGUuZWwKaW5kZXggYmY1NmE3ZWU0OS4uNzg2NDQ4 NTg5NSAxMDA2NDQKLS0tIGEvbGlzcC9wcm9nbW9kZXMvYW50bHItbW9kZS5lbAorKysgYi9saXNw L3Byb2dtb2Rlcy9hbnRsci1tb2RlLmVsCkBAIC03NSw5ICs3NSw2IEBACiA7OyAgIChhZGQtaG9v ayAnc3BlZWRiYXItbG9hZC1ob29rICA7IHdvdWxkIGJlIHRvbyBsYXRlIGluIGFudGxyLW1vZGUu ZWwKIDs7CSAgICAgICAobGFtYmRhICgpIChzcGVlZGJhci1hZGQtc3VwcG9ydGVkLWV4dGVuc2lv biAiLmciKSkpCiAKLTs7IEkgc3Ryb25nbHkgcmVjb21tZW5kIHRvIHVzZSBmb250LWxvY2sgd2l0 aCBhIHN1cHBvcnQgbW9kZSBsaWtlIGZhc3QtbG9jaywKLTs7IGxhenktbG9jayBvciBiZXR0ZXIg aml0LWxvY2sgKEVtYWNzLTIxLjErKSAvIGxhenktc2hvdCAoWEVtYWNzKS4KLQogOzsgVG8gY3Vz dG9taXplLCB1c2UgbWVudSBpdGVtICJBbnRsciIgLT4gIkN1c3RvbWl6ZSBBbnRsciIuCiAKIDs7 OyBDb2RlOgpkaWZmIC0tZ2l0IGEvbGlzcC9wcm9nbW9kZXMvY2MtZm9udHMuZWwgYi9saXNwL3By b2dtb2Rlcy9jYy1mb250cy5lbAppbmRleCAzODZjYzJmMTZmLi4xNWYzMDNjNzU2IDEwMDY0NAot LS0gYS9saXNwL3Byb2dtb2Rlcy9jYy1mb250cy5lbAorKysgYi9saXNwL3Byb2dtb2Rlcy9jYy1m b250cy5lbApAQCAtMTQzMCw3ICsxNDMwLDcgQEAgYy1mb250LWxvY2stZGVjbGFyYXRpb25zCiAJ ICAgICApKQogCiAJOzsgQmVsb3cgd2UgZm9udGlmeSBhIHdob2xlIGRlY2xhcmF0aW9uIGV2ZW4g d2hlbiBpdCBjcm9zc2VzIHRoZSBsaW1pdCwKLQk7OyB0byBhdm9pZCBnYXBzIHdoZW4gaml0L2xh enktbG9jayBmb250aWZpZXMgdGhlIGZpbGUgYSBibG9jayBhdCBhCisJOzsgdG8gYXZvaWQgZ2Fw cyB3aGVuIGppdC1sb2NrIGZvbnRpZmllcyB0aGUgZmlsZSBhIGJsb2NrIGF0IGEKIAk7OyB0aW1l LiAgVGhhdCBpcyBob3dldmVyIGFubm95aW5nIGR1cmluZyBlZGl0aW5nLCBlLmcuIHRoZSBmb2xs b3dpbmcgaXMKIAk7OyBhIGNvbW1vbiBzaXR1YXRpb24gd2hpbGUgdGhlIGZpcnN0IGxpbmUgaXMg YmVpbmcgd3JpdHRlbjoKIAk7OwpkaWZmIC0tZ2l0IGEvbGlzcC9wcm9nbW9kZXMvY3BlcmwtbW9k ZS5lbCBiL2xpc3AvcHJvZ21vZGVzL2NwZXJsLW1vZGUuZWwKaW5kZXggNjEyMmNhZjUxOC4uNjQ4 ZmJmNDNjMyAxMDA2NDQKLS0tIGEvbGlzcC9wcm9nbW9kZXMvY3BlcmwtbW9kZS5lbAorKysgYi9s aXNwL3Byb2dtb2Rlcy9jcGVybC1tb2RlLmVsCkBAIC00OSw4ICs0OSw2IEBACiA7OyBgY3Blcmwt cHJhaXNlJywgYGNwZXJsLXNwZWVkJy4JCQkJICAgPDw8PDw8CiAKIDs7IFRoZSBtb2RlIGluZm9y bWF0aW9uIChvbiBDLWggbSkgcHJvdmlkZXMgc29tZSBjdXN0b21pemF0aW9uIGhlbHAuCi07OyBJ ZiB5b3UgdXNlIGZvbnQtbG9jayBmZWF0dXJlIG9mIHRoaXMgbW9kZSwgaXQgaXMgYWR2aXNhYmxl IHRvIHVzZQotOzsgZWl0aGVyIGxhenktbG9jay1tb2RlIG9yIGZhc3QtbG9jay1tb2RlLiAgSSBw cmVmZXIgbGF6eS1sb2NrLgogCiA7OyBGYWNlcyB1c2VkIG5vdzogdGhyZWUgZmFjZXMgZm9yIGZp cnN0LWNsYXNzIGFuZCBzZWNvbmQtY2xhc3Mga2V5d29yZHMKIDs7IGFuZCBjb250cm9sIGZsb3cg d29yZHMsIG9uZSBmb3IgZWFjaDogY29tbWVudHMsIHN0cmluZywgbGFiZWxzLApkaWZmIC0tZ2l0 IGEvbGlzcC9wcy1wcmludC5lbCBiL2xpc3AvcHMtcHJpbnQuZWwKaW5kZXggYWNlMzAwMTc4MS4u MzY3NDk1ZjViZCAxMDA2NDQKLS0tIGEvbGlzcC9wcy1wcmludC5lbAorKysgYi9saXNwL3BzLXBy aW50LmVsCkBAIC02MzMxLDE0ICs2MzMxLDExIEBAIHBzLXNjcmVlbi10by1iaXQtZmFjZQogCiAK IChkZWNsYXJlLWZ1bmN0aW9uIGppdC1sb2NrLWZvbnRpZnktbm93ICJqaXQtbG9jayIgKCZvcHRp b25hbCBzdGFydCBlbmQpKQotKGRlY2xhcmUtZnVuY3Rpb24gbGF6eS1sb2NrLWZvbnRpZnktcmVn aW9uICJsYXp5LWxvY2siIChiZWcgZW5kKSkKIAogOzsgdG8gYXZvaWQgY29tcGlsYXRpb24gZ3Jp cGVzCiAoZGVmdW4gcHMtcHJpbnQtZW5zdXJlLWZvbnRpZmllZCAoc3RhcnQgZW5kKQogICAoY29u ZCAoKGFuZCAoYm91bmRwICdqaXQtbG9jay1tb2RlKSAoc3ltYm9sLXZhbHVlICdqaXQtbG9jay1t b2RlKSkKLQkgKGppdC1sb2NrLWZvbnRpZnktbm93IHN0YXJ0IGVuZCkpCi0JKChhbmQgKGJvdW5k cCAnbGF6eS1sb2NrLW1vZGUpIChzeW1ib2wtdmFsdWUgJ2xhenktbG9jay1tb2RlKSkKLQkgKGxh enktbG9jay1mb250aWZ5LXJlZ2lvbiBzdGFydCBlbmQpKSkpCisJIChqaXQtbG9jay1mb250aWZ5 LW5vdyBzdGFydCBlbmQpKSkpCiAKIAogKGRlZnVuIHBzLWdlbmVyYXRlLXBvc3RzY3JpcHQtd2l0 aC1mYWNlcyAoZnJvbSB0bykKZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIuYyBiL3NyYy9idWZmZXIu YwppbmRleCAyNDFmMmQ0M2E5Li5lNGViNmQ2NzQxIDEwMDY0NAotLS0gYS9zcmMvYnVmZmVyLmMK KysrIGIvc3JjL2J1ZmZlci5jCkBAIC0xMzk4LDEzICsxMzk4LDEzIEBAIERFRlVOICgic2V0LWJ1 ZmZlci1tb2RpZmllZC1wIiwgRnNldF9idWZmZXJfbW9kaWZpZWRfcCwgU3NldF9idWZmZXJfbW9k aWZpZWRfcCwKIHsKICAgRnJlc3RvcmVfYnVmZmVyX21vZGlmaWVkX3AgKGZsYWcpOwogCi0gIC8q IFNldCB1cGRhdGVfbW9kZV9saW5lcyBvbmx5IGlmIGJ1ZmZlciBpcyBkaXNwbGF5ZWQgaW4gc29t ZSB3aW5kb3cuCi0gICAgIFBhY2thZ2VzIGxpa2Ugaml0LWxvY2sgb3IgbGF6eS1sb2NrIHByZXNl cnZlIGEgYnVmZmVyJ3MgbW9kaWZpZWQKLSAgICAgc3RhdGUgYnkgcmVjb3JkaW5nL3Jlc3Rvcmlu ZyB0aGUgc3RhdGUgYXJvdW5kIGJsb2NrcyBvZiBjb2RlLgotICAgICBTZXR0aW5nIHVwZGF0ZV9t b2RlX2xpbmVzIG1ha2VzIHJlZGlzcGxheSBjb25zaWRlciBhbGwgd2luZG93cwotICAgICAob24g YWxsIGZyYW1lcykuICBTdGVhbHRoIGZvbnRpZmljYXRpb24gb2YgYnVmZmVycyBub3QgZGlzcGxh eWVkCi0gICAgIHdvdWxkIGluY3VyIGFkZGl0aW9uYWwgcmVkaXNwbGF5IGNvc3RzIGlmIHdlJ2Qg c2V0Ci0gICAgIHVwZGF0ZV9tb2Rlc19saW5lcyB1bmNvbmRpdGlvbmFsbHkuCisgIC8qIFNldCB1 cGRhdGVfbW9kZV9saW5lcyBvbmx5IGlmIGJ1ZmZlciBpcyBkaXNwbGF5ZWQgaW4gc29tZQorICAg ICB3aW5kb3cuIFBhY2thZ2VzIGxpa2Ugaml0LWxvY2sgcHJlc2VydmUgYSBidWZmZXIncyBtb2Rp ZmllZCBzdGF0ZQorICAgICBieSByZWNvcmRpbmcvcmVzdG9yaW5nIHRoZSBzdGF0ZSBhcm91bmQg YmxvY2tzIG9mIGNvZGUuIFNldHRpbmcKKyAgICAgdXBkYXRlX21vZGVfbGluZXMgbWFrZXMgcmVk aXNwbGF5IGNvbnNpZGVyIGFsbCB3aW5kb3dzIChvbiBhbGwKKyAgICAgZnJhbWVzKS4gIFN0ZWFs dGggZm9udGlmaWNhdGlvbiBvZiBidWZmZXJzIG5vdCBkaXNwbGF5ZWQgd291bGQKKyAgICAgaW5j dXIgYWRkaXRpb25hbCByZWRpc3BsYXkgY29zdHMgaWYgd2UnZCBzZXQgdXBkYXRlX21vZGVzX2xp bmVzCisgICAgIHVuY29uZGl0aW9uYWxseS4KIAogICAgICBJZGVhbGx5LCBJIHRoaW5rIHRoZXJl IHNob3VsZCBiZSBhbm90aGVyIG1lY2hhbmlzbSBmb3IgZm9udGlmeWluZwogICAgICBidWZmZXJz IHdpdGhvdXQgIm1vZGlmeWluZyIgYnVmZmVycywgb3IgcmVkaXNwbGF5IHNob3VsZCBiZQotLSAK Mi4yNy4wCgo= --000000000000b560b005ac4b74b7--