From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Serghei Newsgroups: gmane.emacs.devel Subject: [ELPA] New package: bnf-mode Date: Sat, 4 May 2019 18:51:11 +0300 Message-ID: <23ebbedf-5474-bbbd-47d2-3404f47f7a23@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------D1F59E88CEDB209D065C4307" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="100513"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sat May 04 17:52:05 2019 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hMwxI-000Q0P-1h for ged-emacs-devel@m.gmane.org; Sat, 04 May 2019 17:52:05 +0200 Original-Received: from localhost ([127.0.0.1]:58132 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hMwxH-0000Es-4B for ged-emacs-devel@m.gmane.org; Sat, 04 May 2019 11:52:03 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:39246) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hMwwa-0000Ei-CK for emacs-devel@gnu.org; Sat, 04 May 2019 11:51:21 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hMwwZ-0004Oa-5F for emacs-devel@gnu.org; Sat, 04 May 2019 11:51:20 -0400 Original-Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]:39870) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hMwwX-0004Lh-6R for emacs-devel@gnu.org; Sat, 04 May 2019 11:51:18 -0400 Original-Received: by mail-wm1-x336.google.com with SMTP id n25so10004321wmk.4 for ; Sat, 04 May 2019 08:51:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:message-id:date:user-agent:mime-version :content-language; bh=6u0mR1qVakiEtqzRRpYKZ6aVchBOGPh6a5yf6NNiTtU=; b=TCjFU3vUhTN9POEk8YuXEVciRC7hjRTEbBGyWbRIB0j8FNVt6xI1ILJAQKtWyfbNhO MqvfbAa8Uhf2JjuSM/e/by0JbpghBOkw9SibG7JGHAxNQyfFrofLezBOIT7gu5huOwCK vJNGLKsS5vrKSsyStFLwsax6dWyVdXF1xrgGfj7G3H3gIrqqYSFreGeQn5ndOekdDgxs /7/bOxCWkJqsfQ1hmYsXUBxpkOkcxSaoqHUVmdKqDerSUg2A3wZPzGE2vMS3pMkRsWVn MshEmqtTruiQ4H1BGn/wV30c6kdUCrAxFiUL4aLaVDmVIExjNOx3CGgnP9YVQEGMZDnH wi1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:message-id:date:user-agent :mime-version:content-language; bh=6u0mR1qVakiEtqzRRpYKZ6aVchBOGPh6a5yf6NNiTtU=; b=EeI02VDda4myfYrIkS17cq/QpV3oEz1+JbFiNos/rNeJb/4uhLSWTA0oAokjzIiebm 86S08CutuKmZBNBOGql9XQygl8UtYLyEpHXpmtbFrD8DHwwvrmX5rkQ4+9P+Z0kyRKwI wbH/lVZ4+3YjH92bphBzsGPRJJikU1u6TM146XPxDiVfgGXHgzM+yw8vHsODboxuKXA5 by1aMCe/KoPJI+ezTnnQyDRC0oFdW9eMQ/KVXaeT0uT7pOySC9jdv7SKv/3ObVE8vVPj kxKuYXOkpVCyvRZpAsUO2k8rj/Atc8JIZt8HxBKlFRC3Io0eejlRISPG1DO/OoJ4lQvo ccSQ== X-Gm-Message-State: APjAAAWghIHKyXGppiUA+hrWbFAAwdRbrTETR4q0YZ7AFTLghTj3Xrgm 7iveE9sVo0t+UacXVdUunFUCReAAZ44= X-Google-Smtp-Source: APXvYqy+CYlmudzfJZxW/gkrsvyUKyjkcJhCemlKyc+ghJZ4bu48RY3IKcNQVstDilWNALjjGOLFig== X-Received: by 2002:a1c:f909:: with SMTP id x9mr10665758wmh.18.1556985073617; Sat, 04 May 2019 08:51:13 -0700 (PDT) Original-Received: from [192.168.0.104] (host-static-93-116-190-186.moldtelecom.md. [93.116.190.186]) by smtp.gmail.com with ESMTPSA id w7sm5600773wmm.16.2019.05.04.08.51.11 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 04 May 2019 08:51:12 -0700 (PDT) Content-Language: en-US X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::336 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 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.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:236153 Archived-At: This is a multi-part message in MIME format. --------------D1F59E88CEDB209D065C4307 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Hello, I created a major mode for editing BNF grammars [1] and would like to add this package to the ELPA [2].  Currently it provides basic syntax and font-locking for BNF files.  BNF notation is supported exactly form as it was first announced in the ALGOL 60 report.  EBNF and ABNF are not supported but in my plans for the near future. I have no push access to ELPA repository so I heed a help.  Could you please assist me with the following steps. N.B. I've attached the package as a tar archive. [1]: https://github.com/sergeyklay/bnf-mode [2]: https://git.savannah.gnu.org/git/emacs/elpa.git Have a nice day, -- Serghei Iakovlev --------------D1F59E88CEDB209D065C4307 Content-Type: application/x-tar; name="bnf-mode-0.4.1.tar" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="bnf-mode-0.4.1.tar" Ym5mLW1vZGUtMC40LjEvUkVBRE1FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDY2NCAA MDAxNzUwIAAwMDE3NTAgADAwMDAwMDEzMDAzIDEzNDYzMzMxNjMzIDAxNDAzMQAgMAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGtsYXkA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa2xheQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAwMDAwMDAgADAwMDAwMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCkJORiBNT0RFIEZPUiBHTlUgRU1BQ1MKCgpB IEdOVSBFbWFjcyBtYWpvciBtb2RlIGZvciBlZGl0aW5nIEJORiBncmFtbWFycy4KCiAg4oCc UHJlY2lzZSBsYW5ndWFnZSBpcyBub3QgdGhlIHByb2JsZW0uIENsZWFyIGxhbmd1YWdlIGlz IHRoZSBwcm9ibGVtLuKAnQoKICBSaWNoYXJkIEZleW5tYW4KCkN1cnJlbnRseSBwcm92aWRl cyBiYXNpYyBzeW50YXggYW5kIGZvbnQtbG9ja2luZyBmb3IgQk5GIGZpbGVzLiBCTkYKbm90 YXRpb24gaXMgc3VwcG9ydGVkIGV4YWN0bHkgZm9ybSBhcyBpdCB3YXMgZmlyc3QgYW5ub3Vu Y2VkIGluIHRoZQpBTEdPTCA2MCByZXBvcnQuIEVCTkYgYW5kIEFCTkYgYXJlIG5vdCBzdXBw b3J0ZWQgYnV0IGluIG15IHBsYW5zIGZvciB0aGUKbmVhciBmdXR1cmUuCgpXaGVuIGRldmVs b3BpbmcgdGhpcyBtb2RlLCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyB3ZXJlIHRha2VuIGlu dG8KYWNjb3VudDoKCi0gICBbUmV2aXNlZCBSZXBvcnQgb24gdGhlIEFsZ29yaXRobWljIExh bmd1YWdlIEFsZ29sIDYwXQotICAgW1JGQzgyMl06IFN0YW5kYXJkIGZvciBBUlBBIEludGVy bmV0IFRleHQgTWVzc2FnZXMKLSAgIFtSRkM1MjM0XTogQXVnbWVudGVkIEJORiBmb3IgU3lu dGF4IFNwZWNpZmljYXRpb25zOiBBQk5GCi0gICBbUkZDNzQwNV06IENhc2UtU2Vuc2l0aXZl IFN0cmluZyBTdXBwb3J0IGluIEFCTkYKCgpGZWF0dXJlcwoKLSAgIEJhc2ljIHN5bnRheCBk ZWZpbml0aW9uCi0gICBTeW50YXggaGlnaGxpZ2h0aW5nCgoKSW5zdGFsbGF0aW9uCgpLbm93 biB0byB3b3JrIHdpdGggR05VIEVtYWNzIDI0LjMgYW5kIGxhdGVyLiBCTkYgTW9kZSBtYXkg d29yayB3aXRoCm9sZGVyIHZlcnNpb25zIG9mIEVtYWNzLCBvciB3aXRoIG90aGVyIGZsYXZv cnMgb2YgRW1hY3MgKGUuZy4gWEVtYWNzKQpidXQgdGhpcyBpcyBfbm90XyBndWFyYW50ZWVk LiBCdWcgcmVwb3J0cyBmb3IgcHJvYmxlbXMgcmVsYXRlZCB0byB1c2luZwpCTkYgTW9kZSB3 aXRoIG9sZGVyIHZlcnNpb25zIG9mIEVtYWNzIHdpbGwgbW9zdCBsaWtlIG5vdCBiZSBhZGRy ZXNzZWQuCgpUaGUgbWFzdGVyIG9mIGFsbCB0aGUgbWF0ZXJpYWwgaXMgdGhlIEdpdCByZXBv c2l0b3J5IGF0Cmh0dHBzOi8vZ2l0aHViLmNvbS9zZXJnZXlrbGF5L2JuZi1tb2RlIC4KCk5P VEU6IFRoZSBtYXN0ZXIgYnJhbmNoIHdpbGwgYWx3YXlzIGNvbnRhaW4gdGhlIGxhdGVzdCB1 bnN0YWJsZSB2ZXJzaW9uLgpJZiB5b3Ugd2lzaCB0byBjaGVjayBvbGRlciB2ZXJzaW9ucyBv ciBmb3JtYWwsIHRhZ2dlZCByZWxlYXNlLCBwbGVhc2UKc3dpdGNoIHRvIHRoZSByZWxldmFu dCBbdGFnXS4KClVzaW5nIE1FTFBBCgpUaGUgYmVzdCB3YXkgb2YgaW5zdGFsbGluZyB0aGlz IG1ham9yIG1vZGUsIGF0IGxlYXN0IGZvciBHTlUgRW1hY3MgMjQsCmlzIHRvIHVzZSB0aGUg cGFja2FnaW5nIHN5c3RlbS4gQWRkIE1FTFBBIG9yIE1FTFBBIFN0YWJsZSB0byB0aGUgbGlz dCBvZgpyZXBvc2l0b3JpZXMgdG8gYWNjZXNzIHRoaXMgbW9kZS4gRm9yIHRob3NlIHdobyB3 YW50IG9ubHkgZm9ybWFsLCB0YWdnZWQKcmVsZWFzZXMgdXNlIE1FTFBBIFN0YWJsZToKCiAg ICAocmVxdWlyZSAncGFja2FnZSkKICAgIChhZGQtdG8tbGlzdCAncGFja2FnZS1hcmNoaXZl cwogICAgICAgICAgICAgICAgICcoIm1lbHBhLXN0YWJsZSIgLiAiaHR0cHM6Ly9zdGFibGUu bWVscGEub3JnL3BhY2thZ2VzLyIpIHQpCiAgICAocGFja2FnZS1pbml0aWFsaXplKQoKRm9y IHRob3NlIHdobyB3YW50IHJvbGxpbmcgcmVsZWFzZXMgYXMgdGhleSBoYXBwZW4gdXNlIE1F TFBBOgoKICAgIChyZXF1aXJlICdwYWNrYWdlKQogICAgKGFkZC10by1saXN0ICdwYWNrYWdl LWFyY2hpdmVzCiAgICAgICAgICAgICAgICAgJygibWVscGEiIC4gImh0dHBzOi8vbWVscGEu b3JnL3BhY2thZ2VzLyIpIHQpCiAgICAocGFja2FnZS1pbml0aWFsaXplKQoKYW5kIHRoZW4g dXNlIE0teCBwYWNrYWdlLXJlZnJlc2gtY29udGVudHMgYW5kIE0teCBwYWNrYWdlLWxpc3Qt cGFja2FnZXMKdG8gZ2V0IHRvIHRoZSBwYWNrYWdlIGxpc3RpbmcgYW5kIGluc3RhbGwgYm5m LW1vZGUgZnJvbSB0aGVyZS4gTUVMUEEKdHJhY2tzIHRoaXMgR2l0IHJlcG9zaXRvcnkgYW5k IHVwZGF0ZXMgcmVsYXRpdmVseSBzb29uIGFmdGVyIGVhY2ggY29tbWl0Cm9yIGZvcm1hbCBy ZWxlYXNlLiBGb3IgbW9yZSBkZXRhaWwgb24gc2V0dGluZyB1cCBzZWUgW01FTFBBIEdldHRp bmcKU3RhcnRlZF0uCgpZb3UgY2FuIGluc3RhbGwgYm5mLW1vZGUgbWFudWFsbHkgYnkgYWRk aW5nIGZvbGxvd2luZyB0byB5b3VyIGluaXQgZmlsZToKCiAgICAodW5sZXNzIChwYWNrYWdl LWluc3RhbGxlZC1wICdibmYtbW9kZSkKICAgICAgICAocGFja2FnZS1yZWZyZXNoLWNvbnRl bnRzKQogICAgICAgIChwYWNrYWdlLWluc3RhbGwgJ2JuZi1tb2RlKSkKCjEuICBVc2luZyBD YXNrCgogICAgQWRkIGZvbGxvd2luZyB0byB5b3VyIFtDYXNrXSBmaWxlOgoKICAgICAgICAo c291cmNlIG1lbHBhKQoKICAgICAgICAoZGVwZW5kcy1vbiAiYm5mLW1vZGUiKQoKMi4gIFVz aW5nIHVzZS1wYWNrYWdlCgogICAgQWRkIGZvbGxvd2luZyB0byB5b3VyIGluaXQgZmlsZToK CiAgICAgICAgKHVzZS1wYWNrYWdlIGJuZi1tb2RlCiAgICAgICAgICA6ZW5zdXJlIHQKICAg ICAgICAgIDptb2RlICJcXC5ibmZcXCciKQoKRWwtZ2V0CgpJZiB5b3UgdXNlIGVsLWdldCwg anVzdCBjcmVhdGUgYSByZWNpcGUgZmlsZSBibmYucmNwOgoKICAgICg6bmFtZSBibmYtbW9k ZQogICAgICAgICAgIDp3ZWJzaXRlICJodHRwczovL2dpdGh1Yi5jb20vc2VyZ2V5a2xheS9i bmYtbW9kZSIKICAgICAgICAgICA6ZGVzY3JpcHRpb24gIkJORiBNb2RlOiBBIG1ham9yIG1v ZGUgZm9yIGVkaXRpbmcgQk5GIGdyYW1tYXJzIgogICAgICAgICAgIDp0eXBlIGdpdGh1Ygog ICAgICAgICAgIDpwa2duYW1lICJzZXJnZXlrbGF5L2JuZi1tb2RlIikKCmFuZCBhZGQgaXQg dG8gYSBkaXJlY3RvcnkgcHJlc2VudCBpbiBlbC1nZXQtcmVjaXBlLXBhdGguIFRoZW4sIHVz ZQpNLXggZWwtZ2V0LWluc3RhbGwgPFJFVD4gYm5mLW1vZGUgb3IgYWRkOgoKICAgIChlbC1n ZXQtYnVuZGxlIGJuZi1tb2RlKQoKdG8geW91ciBpbml0IGZpbGUuCgpNYW51YWwgSW5zdGFs bAoKMS4gIERvd25sb2FkIGJuZi1tb2RlLmVsCgoyLiAgUHV0IHRoZSBmaWxlIGluIHlvdXIg RWxpc3AgY29tbW9uIGZvbGRlciBsaWtlICRIT01FLy5lbWFjcy5kL2xpc3AvCgozLiAgVGhl biB5b3UgY2FuIGluY2x1ZGUgbGlrZSB0aGlzOgoKICAgICAgICAoYWRkLXRvLWxpc3QgJ2xv YWQtcGF0aAogICAgICAgICAgICAgICAgICAgICAoZXhwYW5kLWZpbGUtbmFtZSAibGlzcCIg dXNlci1lbWFjcy1kaXJlY3RvcnkpKQoKNC4gIEFkZCBfZWl0aGVyXyBvZiB0aGUgdHdvIGZv bGxvd2luZyBsaW5lcyB0byB5b3VyIGluaXRpYWxpemF0aW9uIGZpbGUuCiAgICBUaGUgZmly c3Qgb25seSBsb2FkcyBCTkYgTW9kZSB3aGVuIG5lY2Vzc2FyeSwgdGhlIDJuZCBhbHdheXMg ZHVyaW5nCiAgICBzdGFydHVwIG9mIEdOVSBFbWFjcy4KCiAgICAgICAgKGF1dG9sb2FkICdi bmYtbW9kZSAiYm5mLW1vZGUiIG5pbCB0KQogICAgICAgIDs7IE9SCiAgICAgICAgKHJlcXVp cmUgJ2JuZi1tb2RlKQoKNS4gIE9wdGlvbmFsbHkgYnl0ZSBjb21waWxlIGJuZi1tb2RlLmVs IGZvciBmYXN0ZXIgc3RhcnR1cDoKICAgIE0teCBieXRlLWNvbXBpbGUKCgpVc2FnZQoKSW50 ZXJhY3RpdmUgQ29tbWFuZHMKCiAgQ29tbWFuZCAoRm9yIHRoZSBNLXggcHJvbXB0LikgICBE ZXNjcmlwdGlvbgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICBibmYtbW9kZSAgICAgICAgICAgICAgICAgICAgICAgIFN3aXRj aGVzIHRvIEJORiBNb2RlLgoKQW55IGZpbGUgdGhhdCBtYXRjaGVzIHRoZSBnbG9iICouYm5m IGlzIGF1dG9tYXRpY2FsbHkgb3BlbmVkIGluCmJuZi1tb2RlLgoKClN1cHBvcnQKCkZlZWwg ZnJlZSB0byBhc2sgcXVlc3Rpb24gb3IgbWFrZSBzdWdnZXN0aW9ucyBpbiBvdXIgW2lzc3Vl IHRyYWNrZXJdIC4KCgpDaGFuZ2VzCgpUbyBzZWUgd2hhdCBoYXMgY2hhbmdlZCBpbiByZWNl bnQgdmVyc2lvbnMgb2YgQk5GIE1vZGUsIHNlZSB0aGUKW0NIQU5HRUxPRy5vcmddIC4KCgpF eHRlcm5hbCBMaW5rcwoKLSAgIFtXaWtpcGVkaWE6IEJhY2t1c+KAk05hdXIgZm9ybV0KLSAg IFtXaWtpcGVkaWE6IEV4dGVuZGVkIEJhY2t1c+KAk05hdXIgZm9ybV0KLSAgIFtXaWtpcGVk aWE6IEF1Z21lbnRlZCBCYWNrdXPigJNOYXVyIGZvcm1dCi0gICBbSVNPL0lFQyAxNDk3Nzog RUJORl0KLSAgIFtFQk5GOiBBIE5vdGF0aW9uIHRvIERlc2NyaWJlIFN5bnRheF0KCgpMaWNl bnNlCgpCTkYgTW9kZSBpcyBvcGVuIHNvdXJjZSBzb2Z0d2FyZSBsaWNlbnNlZCB1bmRlciB0 aGUgW0dOVSBHZW5lcmFsIFB1YmxpYwpMaWNlbmNlIHZlcnNpb24gM10gLgoKICBbUmV2aXNl ZCBSZXBvcnQgb24gdGhlIEFsZ29yaXRobWljIExhbmd1YWdlIEFsZ29sIDYwXTogaHR0cHM6 Ly93d3cubWFzc3dlcmsuYXQvYWxnb2w2MC9yZXBvcnQuaHRtCiAgW1JGQzgyMl06IGh0dHBz Oi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM4MjIKICBbUkZDNTIzNF06IGh0dHBzOi8vdG9v bHMuaWV0Zi5vcmcvaHRtbC9yZmM1MjM0CiAgW1JGQzc0MDVdOiBodHRwczovL3Rvb2xzLmll dGYub3JnL2h0bWwvcmZjNzQwNQogIFt0YWddOiBodHRwczovL2dpdGh1Yi5jb20vc2VyZ2V5 a2xheS9ibmYtbW9kZS90YWdzCiAgW01FTFBBIEdldHRpbmcgU3RhcnRlZF06IGh0dHBzOi8v bWVscGEub3JnLyMvZ2V0dGluZy1zdGFydGVkCiAgW0Nhc2tdOiBodHRwczovL2Nhc2suZ2l0 aHViLmlvLwogIFtpc3N1ZSB0cmFja2VyXTogaHR0cHM6Ly9naXRodWIuY29tL3NlcmdleWts YXkvYm5mLW1vZGUvaXNzdWVzCiAgW0NIQU5HRUxPRy5vcmddOiBodHRwczovL2dpdGh1Yi5j b20vc2VyZ2V5a2xheS9ibmYtbW9kZS9ibG9iL21hc3Rlci9DSEFOR0VMT0cub3JnCiAgW1dp a2lwZWRpYTogQmFja3Vz4oCTTmF1ciBmb3JtXTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3Jn L3dpa2kvQmFja3VzJUUyJTgwJTkzTmF1cl9mb3JtCiAgW1dpa2lwZWRpYTogRXh0ZW5kZWQg QmFja3Vz4oCTTmF1ciBmb3JtXTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXh0 ZW5kZWRfQmFja3VzJTI1RTIlMjU4MCUyNTkzTmF1cl9mb3JtCiAgW1dpa2lwZWRpYTogQXVn bWVudGVkIEJhY2t1c+KAk05hdXIgZm9ybV06IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93 aWtpL0F1Z21lbnRlZF9CYWNrdXMlMjVFMiUyNTgwJTI1OTNOYXVyX2Zvcm0KICBbSVNPL0lF QyAxNDk3NzogRUJORl06IGh0dHBzOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvaXNvLTE0 OTc3LnBkZgogIFtFQk5GOiBBIE5vdGF0aW9uIHRvIERlc2NyaWJlIFN5bnRheF06IGh0dHBz Oi8vd3d3Lmljcy51Y2kuZWR1L35wYXR0aXMvSUNTLTMzL2xlY3R1cmVzL2VibmYucGRmCiAg W0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlIHZlcnNpb24gM106IGh0dHBzOi8vZ2l0aHVi LmNvbS9zZXJnZXlrbGF5L2JuZi1tb2RlL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAABibmYtbW9kZS0wLjQuMS9DaGFuZ2VMb2cAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAMDAwNjY0IAAwMDE3NTAgADAwMTc1MCAAMDAwMDAwMDU1NDAgMTM0NjMzMzE2MzMg MDE0NzMyACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AHVzdGFyADAwa2xheQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrbGF5AAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFsbCBub3RhYmxlIGNo YW5nZXMgdG8gdGhpcyBwcm9qZWN0IHdpbGwgYmUgZG9jdW1lbnRlZCBpbiB0aGlzIGZpbGUu CgpUaGUgZm9ybWF0IGlzIGJhc2VkIG9uIFtLZWVwIGEgQ2hhbmdlbG9nXSBhbmQgdGhpcyBw cm9qZWN0IGFkaGVyZXMgdG8KW1NlbWFudGljIFZlcnNpb25pbmddLgoKCltVbnJlbGVhc2Vk XQoKQWRkZWQKCi0gICBJbnRyb2R1Y2VkIEFMR09MIDYwIGNvbW1lbnRzIHN0eWxlLiBEaXNh YmxlZCBieSBkZWZhdWx0LiBGb3IgbW9yZQogICAgc2VlOiBbIzRdIC4KCkNoYW5nZWQKCi0g ICBPbmx5IHNldHRpbmcgYm5mLW1vZGUtYWxnb2wtY29tbWVudHMtc3R5bGUgdG8gbm9uLW5p bCB3aWxsIGFsbG93IHVzZQogICAgc2VtaWNvbG9ucyBhcyBhIHJlZ3VsYXIgdGVybWluYWwg c3ltYm9scy4gRm9yIG1vcmUgc2VlOiBbIzRdIC4KCgpbMC40LjFdIC0gMjAxOS0wNC0yMQoK Rml4ZXMKCi0gICBNaW5vciBmaXggcmVsYXRlZCB0byBidWlsZCAmIGRlcGxveSBCTkYgTW9k ZSBvbiBUcmF2aXMgQ0kuCgoKWzAuNC4wXSAtIDIwMTktMDQtMjEKCkFkZGVkCgotICAgQWRk ZWQgY29tbWVudC1zdGFydC1za2lwIHRvIGhlbHAgY29tbWVudCBjb21tYW5kcyByZWNvZ25p emUKICAgIGNvbW1lbnRzLgotICAgUmV0dXJuIGJhY2sgY29tbWVudC1zdGFydCBhbmQgY29t bWVudC1lbmQgcmVtb3ZlZCBpbiBbODNmMGUwZl0gLgotICAgTW9yZSBpbnRlbGxpZ2VudCB0 ZXJtaW5hbCBzeW50YXggcmVjb2duaXRpb24uIEFkZGVkIHN1cHBvcnQgb2YgIjsiCiAgICBj aGFyYWN0ZXIgYXMgYW4gZXh0cmEgY2hhcmFjdGVyIHVzZWQgaW4gdGVybWluYWxzLgotICAg UHJvdmlkZWQgYWJpbGl0eSB0byBidWlsZCBpbnN0YWxsYXRpb24gcGFja2FnZS4gU2VlIG1h a2UgaGVscCBmb3IKICAgIG1vcmUuCgoKWzAuMy4yXSAtIDIwMTktMDMtMjQKCkNoYW5nZWQK Ci0gICBQdWJsaXNoZWQgcGFja2FnZSBvbiBNRUxQQSAoW21lbHBhL21lbHBhIzYwNzRdKS4K CkZpeGVkCgotICAgSW4gdGhlIEJORiB0aGVyZSBhcmUgbm8gc3RyaW5ncyB0aHVzIHRyZWF0 ICcgYW5kICIgYXMgYSByZWd1bGFyCiAgICBzeW1ib2xzLgotICAgTWlub3IgY29kZSBjbGVh bnVwOiByZW1vdmVkIG5vIGxvbmdlciBuZWVkZWQgY29tbWVudC0qIHZhcmlhYmxlcy4KLSAg IEluIHRoZSBCTkYgdGhlcmUgYXJlIG5vIGdyb3VwaW5nIGJyYWNrZXRzIGV4Y2VwdCBhbmds ZSBvbmVzLiBGaXhlZC4KClJlbW92ZWQKCi0gICBSZW1vdmVkIHRoZSBibmYtbW9kZS12ZXJz aW9uIGZ1bmN0aW9uLiBVc2VycyBjYW4gZWFzaWx5IGNhbGwKICAgIGRlc2NyaWJlLXBhY2th Z2Ugb3IgcGtnLWluZm8tcGFja2FnZS12ZXJzaW9uIGludGVyYWN0aXZlbHkgaWYgdGhleQog ICAgd2FudCB0byBnZXQgdGhpcyBpbmZvcm1hdGlvbiAoWyMxXSkuCgoKWzAuMy4xXSAtIDIw MTktMDMtMTcKCkZpeGVkCgotICAgRml4ZWQgQk5GIHJ1bGUgbmFtZSBkZWZpbml0aW9uIHRv IGZvbGxvdyBbQUxHT0wgNjAgcmVwb3J0XSAuCgoKWzAuMy4wXSAtIDIwMTktMDMtMTcKCkNo YW5nZWQKCi0gICBMSFMgbm9udGVybWluYWxzIG1heSBiZSBwcmVjZWRlZCBieSBhbiB1bmxp bWl0ZWQgbnVtYmVyIG9mIHNwYWNlcy4KCgpbMC4yLjBdIC0gMjAxOS0wMy0xNgoKQ2hhbmdl ZAoKLSAgIENvbW1lbnRzIGFyZSBubyBsb25nZXIgdXNlIHN5bnRheCB0YWJsZS4gRm9yIG1v cmUgc2VlCiAgICBjb21tZW50LXVzZS1zeW50YXguCgpGaXhlZAoKLSAgIENoYW5nZWQgY29t bWVudCBzeW50YXggZnJvbSAjIHRvIDsgdG8gZm9sbG93IFtSRkM4MjIjMi44XSAuCgoKMC4x LjAgLSAyMDE5LTAzLTE2CgpBZGRlZAoKLSAgIEluaXRpYWwgc3RhYmxlIHJlbGVhc2UuCgpb R05VIEVtYWNzXQoKICBbS2VlcCBhIENoYW5nZWxvZ106IGh0dHA6Ly9rZWVwYWNoYW5nZWxv Zy5jb20KICBbU2VtYW50aWMgVmVyc2lvbmluZ106IGh0dHA6Ly9zZW12ZXIub3JnCiAgW1Vu cmVsZWFzZWRdOiBodHRwczovL2dpdGh1Yi5jb20vc2VyZ2V5a2xheS9ibmYtbW9kZS9jb21w YXJlLzAuNC4xLi4uSEVBRAogIFsjNF06IGh0dHBzOi8vZ2l0aHViLmNvbS9zZXJnZXlrbGF5 L2JuZi1tb2RlL3B1bGwvNAogIFswLjQuMV06IGh0dHBzOi8vZ2l0aHViLmNvbS9zZXJnZXlr bGF5L2JuZi1tb2RlL2NvbXBhcmUvMC40LjAuLi4wLjQuMQogIFswLjQuMF06IGh0dHBzOi8v Z2l0aHViLmNvbS9zZXJnZXlrbGF5L2JuZi1tb2RlL2NvbXBhcmUvMC4zLjIuLi4wLjQuMAog IFs4M2YwZTBmXTogaHR0cHM6Ly9naXRodWIuY29tL3NlcmdleWtsYXkvYm5mLW1vZGUvY29t bWl0LzgzZjBlMGZjMTQ0ZTQ1M2JjY2U0NTlkMmQ2NTVhN2I0OGU3Nzk1M2UKICBbMC4zLjJd OiBodHRwczovL2dpdGh1Yi5jb20vc2VyZ2V5a2xheS9ibmYtbW9kZS9jb21wYXJlLzAuMy4x Li4uMC4zLjIKICBbbWVscGEvbWVscGEjNjA3NF06IGh0dHBzOi8vZ2l0aHViLmNvbS9tZWxw YS9tZWxwYS9wdWxsLzYwNzQKICBbIzFdOiBodHRwczovL2dpdGh1Yi5jb20vc2VyZ2V5a2xh eS9ibmYtbW9kZS9pc3N1ZXMvMQogIFswLjMuMV06IGh0dHBzOi8vZ2l0aHViLmNvbS9zZXJn ZXlrbGF5L2JuZi1tb2RlL2NvbXBhcmUvMC4zLjAuLi4wLjMuMQogIFtBTEdPTCA2MCByZXBv cnRdOiBodHRwczovL3d3dy5tYXNzd2Vyay5hdC9hbGdvbDYwL3JlcG9ydC5odG0KICBbMC4z LjBdOiBodHRwczovL2dpdGh1Yi5jb20vc2VyZ2V5a2xheS9ibmYtbW9kZS9jb21wYXJlLzAu Mi4wLi4uMC4zLjAKICBbMC4yLjBdOiBodHRwczovL2dpdGh1Yi5jb20vc2VyZ2V5a2xheS9i bmYtbW9kZS9jb21wYXJlLzAuMS4wLi4uMC4yLjAKICBbUkZDODIyIzIuOF06IGh0dHBzOi8v dG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM4MjIjc2VjdGlvbi0yLjgKICBbR05VIEVtYWNzXTog aHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9lbWFjcy8KAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJuZi1tb2RlLTAuNC4xL0xJQ0VO U0UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NjQgADAwMTc1MCAAMDAxNzUwIAAwMDAw MDEwNDUxMiAxMzQ0Mjc2NzAxMyAwMTQxNjYAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBrbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAGtsYXkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAg AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQog ICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CgogQ29weXJp Z2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2Zz Zi5vcmcvPgogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUg dmVyYmF0aW0gY29waWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2lu ZyBpdCBpcyBub3QgYWxsb3dlZC4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVh bWJsZQoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5 bGVmdCBsaWNlbnNlIGZvcgpzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCgog IFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdv cmtzIGFyZSBkZXNpZ25lZAp0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFu ZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCnRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCnNo YXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJl IGl0IHJlbWFpbnMgZnJlZQpzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCmFu eSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNh biBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2Yg ZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2Uu ICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3Vy ZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZy ZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlv dSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91CndhbnQgaXQsIHRo YXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4g bmV3CmZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2Ug dGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQg b3RoZXJzIGZyb20gZGVueWluZyB5b3UKdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8g c3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCmNlcnRhaW4gcmVz cG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJl LCBvciBpZgp5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhl IGZyZWVkb20gb2Ygb3RoZXJzLgoKICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUg Y29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCmdyYXRpcyBvciBmb3IgYSBmZWUs IHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKZnJlZWRvbXMg dGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28s IHJlY2VpdmUKb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hv dyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkKa25vdyB0aGVpciByaWdodHMuCgogIERldmVs b3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3 byBzdGVwczoKKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIp IG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRv IGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KCiAgRm9yIHRoZSBkZXZlbG9w ZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5z CnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZv ciBib3RoIHVzZXJzJyBhbmQKYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0 IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFuZ2VkLCBzbyB0aGF0IHRoZWly IHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KYXV0aG9y cyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KCiAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0 byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgptb2RpZmllZCB2ZXJzaW9u cyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVy ZXIKY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRo IHRoZSBhaW0gb2YKcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNv ZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBp biB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KdXNlLCB3aGljaCBp cyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUs IHdlCmhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQg dGhlIHByYWN0aWNlIGZvciB0aG9zZQpwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJp c2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQpzdGFuZCByZWFkeSB0byBl eHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lv bnMKb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNl cnMuCgogIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5 IGJ5IHNvZnR3YXJlIHBhdGVudHMuClN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMg dG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgpzb2Z0d2FyZSBvbiBnZW5lcmFs LXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bwph dm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVl IHByb2dyYW0gY291bGQKbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHBy ZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKcGF0ZW50cyBjYW5ub3QgYmUgdXNl ZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCgogIFRoZSBwcmVjaXNlIHRlcm1z IGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCm1vZGlmaWNh dGlvbiBmb2xsb3cuCgogICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJ T05TCgogIDAuIERlZmluaXRpb25zLgoKICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVy c2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIkNvcHlyaWdo dCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIg a2luZHMgb2YKd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KCiAgIlRoZSBQ cm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRl ciB0aGlzCkxpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4g ICJMaWNlbnNlZXMiIGFuZAoicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9y Z2FuaXphdGlvbnMuCgogIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20g b3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKaW4gYSBmYXNoaW9uIHJlcXVpcmlu ZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCmV4 YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZl cnNpb24iIG9mIHRoZQplYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVh cmxpZXIgd29yay4KCiAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9k aWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKb24gdGhlIFByb2dyYW0uCgogIFRvICJw cm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdp dGhvdXQKcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJp bHkgbGlhYmxlIGZvcgppbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQg bGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEg cHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKZGlzdHJpYnV0 aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0 byB0aGUKcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBh cyB3ZWxsLgoKICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFn YXRpb24gdGhhdCBlbmFibGVzIG90aGVyCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNv cGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAphIGNvbXB1dGVy IG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5n LgoKICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlh dGUgTGVnYWwgTm90aWNlcyIKdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29u dmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQpmZWF0dXJlIHRoYXQgKDEpIGRpc3Bs YXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKdGVsbHMgdGhl IHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0 byB0aGUKZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vu c2VlcyBtYXkgY29udmV5IHRoZQp3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0 byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgp0aGUgaW50ZXJmYWNlIHByZXNl bnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQptZW51 LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgoK ICAxLiBTb3VyY2UgQ29kZS4KCiAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFu cyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKZm9yIG1ha2luZyBtb2RpZmljYXRp b25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQpmb3JtIG9m IGEgd29yay4KCiAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2Ug dGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29n bml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgppbnRlcmZhY2VzIHNw ZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhh dAppcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5n dWFnZS4KCiAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsg aW5jbHVkZSBhbnl0aGluZywgb3RoZXIKdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0 IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKcGFja2FnaW5nIGEgTWFq b3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgpDb21w b25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3 aXRoIHRoYXQKTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJ bnRlcmZhY2UgZm9yIHdoaWNoIGFuCmltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0 aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCiJNYWpvciBDb21wb25lbnQiLCBp biB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAooa2Vy bmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRp bmcgc3lzdGVtCihpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywg b3IgYSBjb21waWxlciB1c2VkIHRvCnByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBj b2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgoKICBUaGUgIkNvcnJlc3BvbmRpbmcg U291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCnRoZSBz b3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4 ZWN1dGFibGUKd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3 b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bwpjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBI b3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKU3lzdGVtIExpYnJhcmll cywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJl ZQpwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhv c2UgYWN0aXZpdGllcyBidXQKd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9y IGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCmluY2x1ZGVzIGludGVyZmFjZSBkZWZp bml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCnRoZSB3b3Jr LCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWlj YWxseQpsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkg ZGVzaWduZWQgdG8gcmVxdWlyZSwKc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmlj YXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKc3VicHJvZ3JhbXMgYW5kIG90 aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgoKICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVl ZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCmNhbiByZWdlbmVyYXRlIGF1dG9t YXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZwpTb3VyY2Uu CgogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2Rl IGZvcm0gaXMgdGhhdApzYW1lIHdvcmsuCgogIDIuIEJhc2ljIFBlcm1pc3Npb25zLgoKICBB bGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0 aGUgdGVybSBvZgpjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2Fi bGUgcHJvdmlkZWQgdGhlIHN0YXRlZApjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vu c2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCnBlcm1pc3Npb24gdG8gcnVu IHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCmNv dmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRw dXQsIGdpdmVuIGl0cwpjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRo aXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgpyaWdodHMgb2YgZmFpciB1c2Ugb3Igb3Ro ZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KCiAgWW91IG1h eSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5v dApjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBv dGhlcndpc2UgcmVtYWlucwppbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29y a3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCm9mIGhhdmluZyB0aGVtIG1ha2Ug bW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQp3aXRo IGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91 IGNvbXBseSB3aXRoCnRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFs bCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCm5vdCBjb250cm9sIGNvcHlyaWdodC4gIFRo b3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKZm9yIHlvdSBt dXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVj dGlvbgphbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFr aW5nIGFueSBjb3BpZXMgb2YKeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRo ZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KCiAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhl ciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKdGhlIGNvbmRpdGlv bnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9u IDEwCm1ha2VzIGl0IHVubmVjZXNzYXJ5LgoKICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdh bCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgoKICBObyBjb3ZlcmVkIHdv cmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwK bWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9u cyB1bmRlciBhcnRpY2xlCjExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRl ZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgpzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3Ig cmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCm1lYXN1cmVzLgoKICBXaGVuIHlv dSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8g Zm9yYmlkCmNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUg ZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgppcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJp Z2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCnRoZSBjb3ZlcmVkIHdv cmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24g b3IKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBh Z2FpbnN0IHRoZSB3b3JrJ3MKdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwg cmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCnRlY2hub2xvZ2ljYWwgbWVhc3Vy ZXMuCgogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCgogIFlvdSBtYXkgY29udmV5 IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQpy ZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91 c2x5IGFuZAphcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJp YXRlIGNvcHlyaWdodCBub3RpY2U7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcg dGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQpub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBp biBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CmtlZXAgaW50YWN0 IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUg YWxsCnJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQ cm9ncmFtLgoKICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVh Y2ggY29weSB0aGF0IHlvdSBjb252ZXksCmFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Ig d2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCgogIDUuIENvbnZleWluZyBNb2RpZmll ZCBTb3VyY2UgVmVyc2lvbnMuCgogIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0 aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KcHJvZHVjZSBpdCBmcm9tIHRo ZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKdGVybXMg b2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNl IGNvbmRpdGlvbnM6CgogICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90 aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCiAgICBpdCwgYW5kIGdpdmluZyBhIHJl bGV2YW50IGRhdGUuCgogICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90 aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5z ZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgogICAgNy4gIFRoaXMg cmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bwog ICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KCiAgICBjKSBZb3UgbXVzdCBsaWNlbnNl IHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcwogICAgTGljZW5zZSB0 byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCiAg ICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNh YmxlIHNlY3Rpb24gNwogICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRo ZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkg YXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCiAgICBwZXJtaXNzaW9uIHRv IGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CiAg ICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJl Y2VpdmVkIGl0LgoKICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGlu dGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CiAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3Rp Y2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKICAgIGludGVy ZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5 b3VyCiAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KCiAgQSBjb21waWxhdGlv biBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVu dAp3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0 aGUgY292ZXJlZCB3b3JrLAphbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1 Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAppbiBvciBvbiBhIHZvbHVtZSBvZiBh IHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCiJhZ2dyZWdh dGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJl IG5vdAp1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBj b21waWxhdGlvbidzIHVzZXJzCmJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBl cm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yawppbiBhbiBhZ2dyZWdhdGUgZG9l cyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgpwYXJ0cyBv ZiB0aGUgYWdncmVnYXRlLgoKICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KCiAg WW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRl ciB0aGUgdGVybXMKb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxz byBjb252ZXkgdGhlCm1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKaW4gb25lIG9mIHRoZXNlIHdheXM6Cgog ICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5 c2ljYWwgcHJvZHVjdAogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBt ZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZp eGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KICAgIGN1c3RvbWFyaWx5IHVzZWQg Zm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgoKICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNv ZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKICAgIChpbmNsdWRp bmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQog ICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2 YWxpZCBmb3IgYXMKICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3Rv bWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAogICAgbW9kZWwsIHRvIGdpdmUgYW55b25l IHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQogICAgY29weSBv ZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhl CiAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVy YWJsZSBwaHlzaWNhbAogICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJl IGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubwogICAgbW9yZSB0aGFuIHlvdXIgcmVhc29u YWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCiAgICBjb252ZXlpbmcg b2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCiAgICBDb3JyZXNwb25kaW5n IFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgoKICAgIGMpIENv bnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkg b2YgdGhlCiAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcg U291cmNlLiAgVGhpcwogICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9u YWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKICAgIG9ubHkgaWYgeW91IHJlY2VpdmVk IHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAogICAgd2l0 aCBzdWJzZWN0aW9uIDZiLgoKICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2Zm ZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCiAgICBwbGFjZSAoZ3JhdGlzIG9yIGZv ciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKICAgIENv cnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBs YWNlIGF0IG5vCiAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJl Y2lwaWVudHMgdG8gY29weSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdp dGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCiAgICBjb3B5IHRoZSBvYmpl Y3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UK ICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBh IHRoaXJkIHBhcnR5KQogICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFj aWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCiAgICBjbGVhciBkaXJlY3Rpb25zIG5l eHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQogICAgQ29y cmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRo ZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVu c3VyZSB0aGF0IGl0IGlzCiAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRv IHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgoKICAgIGUpIENvbnZleSB0aGUgb2JqZWN0 IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKICAgIHlv dSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNw b25kaW5nCiAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhl IGdlbmVyYWwgcHVibGljIGF0IG5vCiAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4K CiAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJj ZSBjb2RlIGlzIGV4Y2x1ZGVkCmZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEg U3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCmluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUg b2JqZWN0IGNvZGUgd29yay4KCiAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEg ImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKdGFuZ2libGUgcGVyc29uYWwg cHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwK b3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29s ZCBmb3IgaW5jb3Jwb3JhdGlvbgppbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3 aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCmRvdWJ0ZnVsIGNhc2Vz IHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGlj dWxhcgpwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkg dXNlZCIgcmVmZXJzIHRvIGEKdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mg b2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCm9mIHRoZSBwYXJ0aWN1bGFy IHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCmFjdHVh bGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVj dC4gIEEgcHJvZHVjdAppcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0 aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbApjb21tZXJjaWFsLCBpbmR1c3RyaWFs IG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAp0aGUg b25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KCiAgIkluc3Rh bGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRo b2RzLApwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0 aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMg b2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQphIG1vZGlmaWVk IHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9u IG11c3QKc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5n IG9mIHRoZSBtb2RpZmllZCBvYmplY3QKY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBv ciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKbW9kaWZpY2F0aW9uIGhhcyBiZWVu IG1hZGUuCgogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlz IHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCnNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVz ZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCnBhcnQgb2YgYSB0cmFu c2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRo ZQpVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJw ZXR1aXR5IG9yIGZvciBhCmZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFu c2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGNv bnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCmJ5IHRoZSBJ bnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5v dCBhcHBseQppZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhl IGFiaWxpdHkgdG8gaW5zdGFsbAptb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQ cm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCmJlZW4gaW5zdGFsbGVkIGluIFJP TSkuCgogIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1h dGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJv dmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCmZvciBhIHdvcmsg dGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwg b3IgZm9yCnRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQg b3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4g dGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKYWR2ZXJzZWx5IGFmZmVj dHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMg YW5kCnByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCgog IENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9y bWF0aW9uIHByb3ZpZGVkLAppbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBp biBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5CmRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGlt cGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCnNvdXJjZSBjb2RlIGZv cm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgp1 bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KCiAgNy4gQWRkaXRpb25hbCBUZXJtcy4K CiAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQg dGhlIHRlcm1zIG9mIHRoaXMKTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9u ZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgpBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRo YXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCmJlIHRyZWF0 ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRo ZSBleHRlbnQKdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElm IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9n cmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQp1bmRlciB0aG9zZSBwZXJt aXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5CnRo aXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9u cy4KCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1h eSBhdCB5b3VyIG9wdGlvbgpyZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJv bSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKaXQuICAoQWRkaXRpb25hbCBwZXJt aXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgpyZW1vdmFsIGlu IGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxh Y2UKYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRv IGEgY292ZXJlZCB3b3JrLApmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9w cmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCgogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3Ro ZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQphZGQgdG8g YSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdo dCBob2xkZXJzIG9mCnRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRo aXMgTGljZW5zZSB3aXRoIHRlcm1zOgoKICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9y IGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQogICAgdGVybXMgb2Yg c2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKCiAgICBiKSBSZXF1aXJp bmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMg b3IKICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUg QXBwcm9wcmlhdGUgTGVnYWwKICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRh aW5pbmcgaXQ7IG9yCgogICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2Yg dGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgogICAgcmVxdWlyaW5nIHRoYXQgbW9k aWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KICAgIHJlYXNv bmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IK CiAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFt ZXMgb2YgbGljZW5zb3JzIG9yCiAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKCiAg ICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9y IHVzZSBvZiBzb21lCiAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBt YXJrczsgb3IKCiAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29y cyBhbmQgYXV0aG9ycyBvZiB0aGF0CiAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZl eXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgogICAgaXQpIHdpdGgg Y29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQs IGZvcgogICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRp b25zIGRpcmVjdGx5IGltcG9zZSBvbgogICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3Jz LgoKICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29u c2lkZXJlZCAiZnVydGhlcgpyZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBz ZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CnJlY2VpdmVkIGl0LCBvciBhbnkg cGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCmdvdmVy bmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhl cgpyZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNl IGRvY3VtZW50IGNvbnRhaW5zCmEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyBy ZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcwpMaWNlbnNlLCB5b3UgbWF5IGFk ZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKb2Yg dGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3Ry aWN0aW9uIGRvZXMKbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcu CgogIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGgg dGhpcyBzZWN0aW9uLCB5b3UKbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBm aWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCmFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0 byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwp3aGVyZSB0byBmaW5kIHRo ZSBhcHBsaWNhYmxlIHRlcm1zLgoKICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9y IG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQpmb3JtIG9mIGEgc2VwYXJh dGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwp0aGUgYWJv dmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCgogIDguIFRlcm1pbmF0aW9uLgoK ICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2Vw dCBhcyBleHByZXNzbHkKcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVt cHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdp bGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKdGhpcyBMaWNl bnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0 aGlyZApwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCgogIEhvd2V2ZXIsIGlmIHlvdSBjZWFz ZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCmxpY2Vuc2UgZnJv bSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQpwcm92 aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxp Y2l0bHkgYW5kCmZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVy bWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ug b2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKcHJpb3IgdG8gNjAg ZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgoKICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZy b20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKcmVpbnN0YXRlZCBwZXJtYW5l bnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCnZpb2xh dGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUg eW91IGhhdmUKcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2Ug KGZvciBhbnkgd29yaykgZnJvbSB0aGF0CmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3Vy ZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKeW91ciByZWNlaXB0IG9m IHRoZSBub3RpY2UuCgogIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMg c2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCmxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hv IGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgp0aGlzIExp Y2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBl cm1hbmVudGx5CnJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5l dyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KCiAg OS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCgogIFlvdSBh cmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVj ZWl2ZSBvcgpydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0 aW9uIG9mIGEgY292ZXJlZCB3b3JrCm9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5j ZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCnRvIHJlY2VpdmUgYSBjb3B5 IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCm5vdGhp bmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHBy b3BhZ2F0ZSBvcgptb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5m cmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbwpub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRo ZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKY292ZXJlZCB3b3JrLCB5 b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4K CiAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgoK ICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBh dXRvbWF0aWNhbGx5CnJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNl bnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZApwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0 IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCmZvciBlbmZvcmNp bmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgoKICBB biAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBj b250cm9sIG9mIGFuCm9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRz IG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4Kb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9y Z2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKd29yayByZXN1bHRz IGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKdHJhbnNh Y3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdo YXRldmVyCmxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGlu IGludGVyZXN0IGhhZCBvciBjb3VsZApnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3Jh cGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQpDb3JyZXNwb25kaW5nIFNv dXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYK dGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBl ZmZvcnRzLgoKICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25z IG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5k ZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKbm90IGltcG9zZSBhIGxp Y2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCnJp Z2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRp YXRlIGxpdGlnYXRpb24KKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFp bSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKYW55IHBhdGVudCBjbGFpbSBpcyBpbmZy aW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCnNhbGUsIG9y IGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KCiAgMTEuIFBh dGVudHMuCgogIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1 dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdv cmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKd29yayB0aHVzIGxpY2Vu c2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIu CgogIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwg cGF0ZW50IGNsYWltcwpvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwg d2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCmhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3 b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZApieSB0aGlzIExp Y2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZl cnNpb24sCmJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5n ZWQgb25seSBhcyBhCmNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRo ZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCnB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlv biwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudApwYXRlbnQgc3VibGlj ZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YK dGhpcyBMaWNlbnNlLgoKICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhj bHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQpwYXRlbnQgbGljZW5zZSB1bmRlciB0 aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KbWFrZSwgdXNl LCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2Rp ZnkgYW5kCnByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNp b24uCgogIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxp Y2Vuc2UiIGlzIGFueSBleHByZXNzCmFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVy IGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAooc3VjaCBhcyBhbiBleHBy ZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRv CnN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRl bnQgbGljZW5zZSB0byBhCnBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQg b3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCnBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0 eS4KCiAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcg b24gYSBwYXRlbnQgbGljZW5zZSwKYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0 aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKdG8gY29weSwgZnJlZSBvZiBj aGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQpw dWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nl c3NpYmxlIG1lYW5zLAp0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJl c3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCmF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8g ZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKcGF0ZW50IGxpY2Vuc2Ug Zm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIK Y29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBl eHRlbmQgdGhlIHBhdGVudApsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJL bm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKYWN0dWFsIGtub3dsZWRnZSB0aGF0 LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCmNvdmVy ZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBj b3ZlcmVkIHdvcmsKaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBp ZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0CmNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFz b24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCgogIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25u ZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKYXJyYW5nZW1lbnQsIHlvdSBj b252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQpjb3Zl cmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBh cnRpZXMKcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1 c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Cm9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhl IGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKeW91IGdyYW50IGlzIGF1 dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQK d29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCgogIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRp c2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgp0aGUgc2NvcGUg b2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwpjb25k aXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdo dHMgdGhhdCBhcmUKc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAg WW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAp3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0 byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwppbiB0aGUgYnVz aW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBw YXltZW50CnRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIg YWN0aXZpdHkgb2YgY29udmV5aW5nCnRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRo aXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQpwYXJ0aWVzIHdobyB3b3VsZCByZWNl aXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKcGF0ZW50 IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQg d29yawpjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVz KSwgb3IgKGIpIHByaW1hcmlseQpmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZp YyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdApjb250YWluIHRoZSBjb3ZlcmVkIHdv cmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCm9yIHRoYXQg cGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCgog IE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRp bmcgb3IgbGltaXRpbmcKYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0 byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3Ug dW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgoKICAxMi4gTm8gU3VycmVuZGVyIG9mIE90 aGVycycgRnJlZWRvbS4KCiAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdo ZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgpvdGhlcndpc2UpIHRoYXQgY29u dHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CmV4 Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3Ug Y2Fubm90IGNvbnZleSBhCmNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFu ZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3Ro ZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1h eQpub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8g dGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRo ZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5CnRoZSBQcm9ncmFt LCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQg dGhpcwpMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlp bmcgdGhlIFByb2dyYW0uCgogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlLgoKICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lv biBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCnBlcm1pc3Npb24gdG8gbGluayBvciBjb21i aW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKdW5kZXIgdmVyc2lv biAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNp bmdsZQpjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4g IFRoZSB0ZXJtcyBvZiB0aGlzCkxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0 aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLApidXQgdGhlIHNwZWNpYWwgcmVx dWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnNl Y3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2ls bCBhcHBseSB0byB0aGUKY29tYmluYXRpb24gYXMgc3VjaC4KCiAgMTQuIFJldmlzZWQgVmVy c2lvbnMgb2YgdGhpcyBMaWNlbnNlLgoKICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u IG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgp0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJz aW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24s IGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBj b25jZXJucy4KCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVy c2lvbiBudW1iZXIuICBJZiB0aGUKUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4g bnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwKUHVibGljIExpY2Vuc2UgIm9y IGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKb3B0aW9u IG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQg bnVtYmVyZWQKdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90 IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCmJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgogIElmIHRoZSBQcm9ncmFtIHNwZWNpZmll cyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKdmVyc2lvbnMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MK cHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRs eSBhdXRob3JpemVzIHlvdQp0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3Jh bS4KCiAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBv ciBkaWZmZXJlbnQKcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGln YXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQphdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBh cyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCmxhdGVyIHZlcnNpb24u CgogIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgoKICBUSEVSRSBJUyBOTyBXQVJSQU5U WSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCkFQUExJQ0FC TEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBD T1BZUklHSFQKSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9H UkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQpPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJF U1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKVEhFIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZ IEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQpJUyBXSVRIIFlPVS4gIFNIT1VMRCBU SEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKQUxM IE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gTGlt aXRhdGlvbiBvZiBMaWFiaWxpdHkuCgogIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBC WSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZ UklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBD T05WRVlTClRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlP VSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQpHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVO VEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKVVNFIE9S IElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gTE9TUyBPRgpEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBP UiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRApQQVJUSUVTIE9SIEEgRkFJTFVS RSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwK RVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRgpTVUNIIERBTUFHRVMuCgogIDE3LiBJbnRlcnByZXRhdGlv biBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCgogIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJh bnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAphYm92ZSBjYW5ub3Qg YmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywK cmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3Nl bHkgYXBwcm94aW1hdGVzCmFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmls aXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkg b3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQpjb3B5IG9mIHRoZSBQ cm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCgogICAgICAgICAgICAgICAgICAgICBFTkQg T0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVz ZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwoKICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBw cm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxl IHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRv IG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRl IGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCgogIFRvIGRvIHNvLCBhdHRhY2ggdGhl IGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CnRvIGF0 dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZm ZWN0aXZlbHkKc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmls ZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAp0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2lu dGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUg dG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0 IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAg ICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAg ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAog ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCgogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LgoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0 cm9uaWMgYW5kIHBhcGVyIG1haWwuCgogIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwg aW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKbm90aWNlIGxpa2UgdGhpcyB3 aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgoKICAgIDxwcm9ncmFtPiAg Q29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KICAgIFRoaXMgcHJvZ3Jh bSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUg YHNob3cgdycuCiAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNv bWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5 cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCgpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBz aG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKcGFydHMg b2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHlvdXIgcHJvZ3Jh bSdzIGNvbW1hbmRzCm1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwg eW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KCiAgWW91IHNob3VsZCBhbHNvIGdldCB5 b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwK aWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dy YW0sIGlmIG5lY2Vzc2FyeS4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhv dyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9l cyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCmludG8gcHJvcHJpZXRh cnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnks IHlvdQptYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJv cHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdo YXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBM aWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LCBwbGVhc2UgcmVh ZAo8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+LgAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAYm5mLW1vZGUtMC40LjEvYm5mLW1vZGUuZWwAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAADAwMDY2NCAAMDAxNzUwIAAwMDE3NTAgADAwMDAwMDIyMjIzIDEzNDYwNTc2 MTI0IDAxNTE3MQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAB1c3RhcgAwMGtsYXkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa2xheQAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7OzsgYm5mLW1v ZGUuZWwgLS0tIE1ham9yIG1vZGUgZm9yIGVkaXRpbmcgQk5GIGdyYW1tYXJzLiAtKi0gbGV4 aWNhbC1iaW5kaW5nOiB0OyAtKi0KCjs7IENvcHlyaWdodCAoQykgMjAxOSBTZXJnaGVpIElh a292bGV2Cgo7OyBBdXRob3I6IFNlcmdoZWkgSWFrb3ZsZXYgPHNhZGhvb2tsYXlAZ21haWwu Y29tPgo7OyBNYWludGFpbmVyOiBTZXJnaGVpIElha292bGV2Cjs7IFZlcnNpb246IDAuNC4x Cjs7IFVSTDogaHR0cHM6Ly9naXRodWIuY29tL3NlcmdleWtsYXkvYm5mLW1vZGUKOzsgS2V5 d29yZHM6IGxhbmd1YWdlcwo7OyBQYWNrYWdlLVJlcXVpcmVzOiAoKGNsLWxpYiAiMC41Iikg KGVtYWNzICIyNC4zIikpCgo7OyBUaGlzIGZpbGUgaXMgTk9UIHBhcnQgb2YgR05VIEVtYWNz LgoKOzs7IExpY2Vuc2UKCjs7IFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKOzsgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKOzsgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMKOzsgb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgo7OyBU aGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKOzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKOzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKOzsgYWxvbmcgd2l0aCB0 aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKOzsgRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN QQo7OyAwMjExMC0xMzAxLCBVU0EuCgo7OzsgQ29tbWVudGFyeToKCjs7ICAgR05VIEVtYWNz IG1ham9yIG1vZGUgZm9yIGVkaXRpbmcgQk5GIGdyYW1tYXJzLiAgQ3VycmVudGx5IHRoaXMg bW9kZQo7OyBwcm92aWRlcyBiYXNpYyBzeW50YXggYW5kIGZvbnQtbG9ja2luZyBmb3IgQk5G IGZpbGVzLiAgQk5GIG5vdGF0aW9uIGlzCjs7IHN1cHBvcnRlZCBleGFjdGx5IGZvcm0gYXMg aXQgd2FzIGZpcnN0IGFubm91bmNlZCBpbiB0aGUgQUxHT0wgNjAgcmVwb3J0Lgo7Owo7OyBX aGVuIGRldmVsb3BpbmcgdGhpcyBtb2RlLCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyB3ZXJl IHRha2VuIGludG8gYWNjb3VudDoKOzsKOzsgLSBSRkM4MjI6IFN0YW5kYXJkIGZvciBBUlBB IEludGVybmV0IFRleHQgTWVzc2FnZXMKOzsgICAoc2VlIFVSTCBgaHR0cHM6Ly93d3cuaWV0 Zi5vcmcvcmZjL3JmYzgyMi50eHQnKQo7OyAtIFJGQzUyMzQ6IEF1Z21lbnRlZCBCTkYgZm9y IFN5bnRheCBTcGVjaWZpY2F0aW9uczogQUJORgo7OyAgIChzZWUgVVJMIGBodHRwczovL3d3 dy5pZXRmLm9yZy9yZmMvcmZjNTIzNC50eHQnKQo7OyAtIEZSQzc0MDU6IENhc2UtU2Vuc2l0 aXZlIFN0cmluZyBTdXBwb3J0IGluIEFCTkYKOzsgICAoc2VlIFVSTCBgaHR0cHM6Ly93d3cu aWV0Zi5vcmcvcmZjL3JmYzc0MDUudHh0JykKOzsgLSBSZXZpc2VkIFJlcG9ydCBvbiB0aGUg QWxnb3JpdGhtaWMgTGFuZ3VhZ2UgQWxnb2wgNjAKOzsgICAoc2VlIFVSTCBgaHR0cHM6Ly93 d3cubWFzc3dlcmsuYXQvYWxnb2w2MC9yZXBvcnQuaHRtJykKOzsKOzsgVXNhZ2U6ICBQdXQg dGhpcyBmaWxlIGluIHlvdXIgRW1hY3MgTGlzcCBwYXRoIChlZy4gc2l0ZS1saXNwKSBhbmQg YWRkIHRvCjs7IHlvdXIgLmVtYWNzIGZpbGU6Cjs7Cjs7ICAgKHJlcXVpcmUgJ2JuZi1tb2Rl KQo7Owo7OyBCdWdzOiBCdWcgdHJhY2tpbmcgaXMgY3VycmVudGx5IGhhbmRsZWQgdXNpbmcg dGhlIEdpdEh1YiBpc3N1ZSB0cmFja2VyCjs7IChzZWUgVVJMIGBodHRwczovL2dpdGh1Yi5j b20vc2VyZ2V5a2xheS9ibmYtbW9kZS9pc3N1ZXMnKQo7Owo7OyBIaXN0b3J5OiBIaXN0b3J5 IGlzIHRyYWNrZWQgaW4gdGhlIEdpdCByZXBvc2l0b3J5IHJhdGhlciB0aGFuIGluIHRoaXMg ZmlsZS4KOzsgU2VlIFVSTCBgaHR0cHM6Ly9naXRodWIuY29tL3NlcmdleWtsYXkvYm5mLW1v ZGUvYmxvYi9tYXN0ZXIvQ0hBTkdFTE9HLm9yZycKCjs7OyBDb2RlOgoKDAo7OzsgUmVxdWly ZW1lbnRzCgooZXZhbC13aGVuLWNvbXBpbGUKICAocmVxdWlyZSAncngpKSAgICA7IGByeCcK CihyZXF1aXJlICdjbC1saWIpICAgOyBgY2wtZGVmbWFjcm8nCgoMCjs7OyBDdXN0b21pemF0 aW9uCgo7OzsjIyNhdXRvbG9hZAooZGVmZ3JvdXAgYm5mIG5pbAogICJNYWpvciBtb2RlIGZv ciBlZGl0aW5nIEJORiBncmFtbWFycy4iCiAgOnRhZyAiQk5GIgogIDpwcmVmaXggImJuZi0i CiAgOmdyb3VwICdsYW5ndWFnZXMKICA6bGluayAnKHVybC1saW5rIDp0YWcgIkdpdEh1YiBQ YWdlIiAiaHR0cHM6Ly9naXRodWIuY29tL3NlcmdleWtsYXkvYm5mLW1vZGUiKQogIDpsaW5r ICcoZW1hY3MtY29tbWVudGFyeS1saW5rIDp0YWcgIkNvbW1lbnRhcnkiICJibmYtbW9kZSIp KQoKKGRlZmN1c3RvbSBibmYtbW9kZS1ob29rIG5pbAogICJMaXN0IG9mIGZ1bmN0aW9ucyB0 byBjYWxsIHdoZW4gZW50ZXJpbmcgQk5GIE1vZGUuIgogIDp0YWcgIkhvb2siCiAgOnR5cGUg J2hvb2sKICA6Z3JvdXAgJ2JuZikKCihkZWZjdXN0b20gYm5mLW1vZGUtYWxnb2wtY29tbWVu dHMtc3R5bGUgbmlsCiAgIk5vbi1uaWwgbWVhbnMgdXNlIGZvciBCTkYgY29tbWVudHMgc3R5 bGUgaW50cm9kdWNlZCBpbiBBTEdPTCA2MC4KCkZvciB0aGUgcHVycG9zZSBvZiBpbmNsdWRp bmcgdGV4dCBhbW9uZyB0aGUgc3ltYm9scyBvZiBhIHByb2dyYW0gdGhlCmZvbGxvd2luZyBc ImNvbW1lbnRcIiBjb252ZW50aW9ucyB3aWxsIGhvbGQ6CgogIDotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS06LS0tLS0tLS0tLS0tLS0tLS0tOgog IHwgVGhlIHNlcXVlbmNlIG9mIGJhc2ljIHN5bWJvbHM6ICAgICAgICAgICAgICAgICB8IGlz IGVxdWl2YWxlbnQgdG8gfAogIDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS06LS0tLS0tLS0tLS0tLS0tLS0tOgogIHwgOyBjb21tZW50IDxhbnkg c2VxdWVuY2Ugbm90IGNvbnRhaW5pbmcgOz47ICAgICB8IDsgICAgICAgICAgICAgICAgfAog IHwgYmVnaW4gY29tbWVudCA8YW55IHNlcXVlbmNlIG5vdCBjb250YWluaW5nIDs+OyB8IGJl Z2luICAgICAgICAgICAgfAogIDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS06LS0tLS0tLS0tLS0tLS0tLS0tOgoKTm90ZTogRW5hYmxpbmcgdGhp cyBmZWF0dXJlIHdpbGwgZGlzYWJsZSBjb21tZW50cyByZWNvZ25pdGlvbiB3aGljaCB1c2UK c2VtaWNvbG9uIG9ubHkgKFwiO1wiKS4iCiAgOmdyb3VwICdibmYKICA6dHlwZSAnYm9vbGVh bikKCgwKOzs7IFNwZWNpYWxpemVkIHJ4CgooZXZhbC13aGVuLWNvbXBpbGUKICAoZGVmY29u c3QgYm5mLXJ4LWNvbnN0aXR1ZW50cwogICAgYCgoYm5mLXJ1bGUtbmFtZSAuICwocnggKGFu ZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKyAob3IgYWxudW0gZGlnaXQpKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwKyAob3IgYWxudW0gZGlnaXQKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbiAiIVwiXCMkJSYnKCkqKyxcLS4v Ojs9P0BcW1xcXF1eX2B7fH1+IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChpbiAiIFx0IikpKSkpKQogICAgIkFkZGl0aW9uYWwgc3BlY2lhbCBzZXhwcyBmb3Ig YGJuZi1yeCcuIikpCgogIChjbC1kZWZtYWNybyBibmYtcnggKCZyZXN0IHNleHBzKQogICAg ICJCTkYtc3BlY2lmaWMgcmVwbGFjZW1lbnQgZm9yIGByeCcuCgpJbiBhZGRpdGlvbiB0byB0 aGUgc3RhbmRhcmQgZm9ybXMgb2YgYHJ4JywgdGhlIGZvbGxvd2luZyBmb3JtcwphcmUgYXZh aWxhYmxlOgoKYGJuZi1ydWxlLW5hbWUnCiAgICAgIEFueSB2YWxpZCBCTkYgcnVsZSBuYW1l LiAgVGhpcyBydWxlIHdhcyBvYnRhaW5lZCBieSBzdHVkeWluZwogICAgICBBTEdPTCA2MCBy ZXBvcnQsIHdoZXJlIHRoZSBCTkYgd2FzIG9mZmljaWFsbHkgYW5ub3VuY2VkLgogICAgICBQ bGVhc2Ugbm90ZTogVGhpcyBydWxlIGlzIG5vdCBzdWl0YWJsZSBmb3IgQUJORiBvciBFQk5G CiAgICAgIChzZWUgVVJMIGBodHRwczovL3d3dy5tYXNzd2Vyay5hdC9hbGdvbDYwL3JlcG9y dC5odG0nKS4KClNlZSBgcngnIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24g YWJvdXQgUkVHRVhQUyBwYXJhbS4iCiAgICAgKGxldCAoKHJ4LWNvbnN0aXR1ZW50cyAoYXBw ZW5kIGJuZi1yeC1jb25zdGl0dWVudHMgcngtY29uc3RpdHVlbnRzKSkpCiAgICAgICAoY29u ZCAoKG51bGwgc2V4cHMpCiAgICAgICAgICAgICAgKGVycm9yICJObyByZWdleHAiKSkKICAg ICAgICAgICAgICgoY2RyIHNleHBzKQogICAgICAgICAgICAgIChyeC10by1zdHJpbmcgYChh bmQgLEBzZXhwcykgdCkpCiAgICAgICAgICAgICAodAogICAgICAgICAgICAgIChyeC10by1z dHJpbmcgKGNhciBzZXhwcykgdCkpKSkpKQoKDAo7OzsgRm9udCBMb2NraW5nCgooZGVmdmFy IGJuZi1mb250LWxvY2sta2V5d29yZHMKICBgKAogICAgOzsgTEhTIG5vbnRlcm1pbmFscyBt YXkgYmUgcHJlY2VkZWQKICAgIDs7IGJ5IGFuIHVubGltaXRlZCBudW1iZXIgb2Ygc3BhY2Vz CiAgICAoLChibmYtcnggKGFuZCBsaW5lLXN0YXJ0CiAgICAgICAgICAgICAgICAgICAoMCsg c3BhY2UpCiAgICAgICAgICAgICAgICAgICAiPCIKICAgICAgICAgICAgICAgICAgIChncm91 cCBibmYtcnVsZS1uYW1lKQogICAgICAgICAgICAgICAgICAgIj4iCiAgICAgICAgICAgICAg ICAgICAoMCsgc3BhY2UpCiAgICAgICAgICAgICAgICAgICAiOjo9IikpCiAgICAgMSBmb250 LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKQogICAgOzsgT3RoZXIgbm9udGVybWluYWxzCiAg ICAoLChibmYtcnggKGFuZCAoMCsgc3BhY2UpCiAgICAgICAgICAgICAgICAgICAiPCIKICAg ICAgICAgICAgICAgICAgIChncm91cCBibmYtcnVsZS1uYW1lKQogICAgICAgICAgICAgICAg ICAgIj4iCiAgICAgICAgICAgICAgICAgICAoMCsgc3BhY2UpKSkKICAgICAxIGZvbnQtbG9j ay1idWlsdGluLWZhY2UpCiAgICA7OyDigJxtYXkgZXhwYW5kIGludG/igJ0gc3ltYm9sCiAg ICAoLChibmYtcnggKGFuZCBzeW1ib2wtc3RhcnQKICAgICAgICAgICAgICAgICAgIChncm91 cCAiOjo9IikKICAgICAgICAgICAgICAgICAgIHN5bWJvbC1lbmQpKQogICAgIDEgZm9udC1s b2NrLWNvbnN0YW50LWZhY2UpCiAgICA7OyBBbHRlcm5hdGl2ZXMKICAgICgsKGJuZi1yeCAo YW5kICgwKyBzcGFjZSkKICAgICAgICAgICAgICAgICAgIHN5bWJvbC1zdGFydAogICAgICAg ICAgICAgICAgICAgKGdyb3VwICJ8IikKICAgICAgICAgICAgICAgICAgIHN5bWJvbC1lbmQK ICAgICAgICAgICAgICAgICAgICgwKyBzcGFjZSkpKQogICAgIDEgZm9udC1sb2NrLXdhcm5p bmctZmFjZSkpCiAgIkZvbnQgbG9jayBCTkYga2V5d29yZHMgZm9yIEJORiBNb2RlLiIpCgoM Cjs7OyBTeW50YXgKCihkZWZ2YXIgYm5mLW1vZGUtc3ludGF4LXRhYmxlCiAgKGxldCAoKHRh YmxlIChtYWtlLXN5bnRheC10YWJsZSkpKQogICAgOzsgR2l2ZSBDUiB0aGUgc2FtZSBzeW50 YXggYXMgbmV3bGluZQogICAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1xebSAiPiBiIiB0YWJs ZSkKCiAgICA7OyBUcmVhdCA6Oj0gYXMgc2VxdWVuY2Ugb2Ygc3ltYm9scwogICAgKG1vZGlm eS1zeW50YXgtZW50cnkgP1w6ICJfIiB0YWJsZSkKICAgIChtb2RpZnktc3ludGF4LWVudHJ5 ID9cPSAiXyIgdGFibGUpCgogICAgOzsgVHJlYXQgfCBhcyBhIHN5bWJvbAogICAgKG1vZGlm eS1zeW50YXgtZW50cnkgP1x8ICJfIiB0YWJsZSkKCiAgICA7OyBJbiBCTkYgdGhlcmUgYXJl IG5vIHN0cmluZ3MKICAgIDs7IHNvIHRyZWF0ICcgYW5kICIgYXMgYSBzeW1ib2xzCiAgICAo bW9kaWZ5LXN5bnRheC1lbnRyeSA/XCIgIl8iIHRhYmxlKQogICAgKG1vZGlmeS1zeW50YXgt ZW50cnkgP1wnICJfIiB0YWJsZSkKCiAgICA7OyBJbiBCTkYgdGhlcmUgYXJlIG5vIGdyb3Vw aW5nCiAgICA7OyBicmFja2V0cyBleGNlcHQgYW5nbGUgb25lcwogICAgKG1vZGlmeS1zeW50 YXgtZW50cnkgP1woICJfIiB0YWJsZSkKICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID9cKSAi XyIgdGFibGUpCiAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XHsgIl8iIHRhYmxlKQogICAg KG1vZGlmeS1zeW50YXgtZW50cnkgP1x9ICJfIiB0YWJsZSkKICAgIChtb2RpZnktc3ludGF4 LWVudHJ5ID9cWyAiXyIgdGFibGUpCiAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XF0gIl8i IHRhYmxlKQoKICAgIDs7IEdyb3VwIGFuZ2xlIGJyYWNrZXRzCiAgICAobW9kaWZ5LXN5bnRh eC1lbnRyeSA/XDwgIig+IiB0YWJsZSkKICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID9cPiAi KTwiIHRhYmxlKQoKICAgIDs7IENvbW1lbnRzIHNldHVwCiAgICAoaWYgYm5mLW1vZGUtYWxn b2wtY29tbWVudHMtc3R5bGUKICAgICAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XDsgIj4i IHRhYmxlKQogICAgICAocHJvZ24KICAgICAgICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XDsg IjwiIHRhYmxlKQogICAgICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID9cbiAiPiIgdGFibGUp KSkKCiAgICB0YWJsZSkKICAiU3ludGF4IHRhYmxlIGluIHVzZSBpbiBgYm5mLW1vZGUnIGJ1 ZmZlcnMuIikKCihkZWZjb25zdCBibmYtLXN5bnRheC1wcm9wZXJ0aXplCiAgKHN5bnRheC1w cm9wZXJ0aXplLXJ1bGVzCiAgIDs7IEZvbnRpZnkgY29tbWVudHMgaW4gQUxHT0wgNjAgc3R5 bGUuCiAgICgiXFwoPzpiZWdpblxccy0rXFx8O1xccy0qXFwpXFwoY29tbWVudFxcKVxcKDtc XHxcXHMtK1teO10qO1xcKSIgKDEgIjwiKSkpCiAgIkFwcGx5IHN5bnRheCB0YWJsZSBwcm9w ZXJ0aWVzIHRvIHNwZWNpYWwgY29uc3RydWN0cy4KUHJvdmlkZSBhIG1hY3JvIHRvIGFwcGx5 IHN5bnRheCB0YWJsZSBwcm9wZXJ0aWVzIHRvIGNvbW1lbnRzIGluIEFMR09MIDYwIHN0eWxl LgpXaWxsIGJlIHVzZWQgb25seSBpZiBgYm5mLW1vZGUtYWxnb2wtY29tbWVudHMtc3R5bGUn IGlzIHNldCB0byB0IikKCgwKOzs7IEluaXRpYWxpemF0aW9uCgo7OzsjIyNhdXRvbG9hZAoo ZGVmaW5lLWRlcml2ZWQtbW9kZSBibmYtbW9kZSBwcm9nLW1vZGUgIkJORiIKICAiQSBtYWpv ciBtb2RlIGZvciBlZGl0aW5nIEJORiBncmFtbWFycy4iCiAgOnN5bnRheC10YWJsZSBibmYt bW9kZS1zeW50YXgtdGFibGUKICA6Z3JvdXAgJ2JuZi1tb2RlCgogIDs7IENvbW1lbnRzIHNl dHVwCiAgKHNldHEtbG9jYWwgY29tbWVudC11c2Utc3ludGF4IG5pbCkKICAoaWYgYm5mLW1v ZGUtYWxnb2wtY29tbWVudHMtc3R5bGUKICAgICAgKHByb2duCiAgICAgICAgKHNldHEtbG9j YWwgY29tbWVudC1zdGFydCAiOyBjb21tZW50ICIpCiAgICAgICAgKHNldHEtbG9jYWwgY29t bWVudC1lbmQgIjsiKQogICAgICAgIChzZXRxLWxvY2FsIGNvbW1lbnQtc3RhcnQtc2tpcCAi XFwoPzpcXChcXFdcXHxeXFwpY29tbWVudFxcKVxccy0rIikKICAgICAgICAoc2V0cS1sb2Nh bCBzeW50YXgtcHJvcGVydGl6ZS1mdW5jdGlvbiBibmYtLXN5bnRheC1wcm9wZXJ0aXplKSkK ICAgIChwcm9nbgogICAgICAoc2V0cS1sb2NhbCBjb21tZW50LXN0YXJ0ICI7ICIpCiAgICAg IChzZXRxLWxvY2FsIGNvbW1lbnQtZW5kICIiKQogICAgICAoc2V0cS1sb2NhbCBjb21tZW50 LXN0YXJ0LXNraXAgIlxcKD86XFwoXFxXXFx8XlxcKTsrXFwpXFxzLSsiKSkpCgogIDs7IEJh c2ljYWxseSBgc3ludGF4LXByb3BlcnRpemUtZnVuY3Rpb24nIGlzIGEgY29uc3RydWN0IHdo aWNoIGJlbG9uZ3MKICA7OyB0byBgZm9udC1sb2NrJy4gIEJ1dCBjb3JyZWN0IGluZGVudGF0 aW9uIGRlcGVuZHMgb24KICA7OyBzeW50YXggcHJvcGVydGllcyBvZiB0aGUgdGV4dCwgYW5k IHRoYXQgc2hvdWxkIGlkZWFsbHkgYmUKICA7OyBpbmRlcGVuZGVudCBvZiBmb250LWxvY2sg YmVpbmcgYWN0aXZhdGVkIG9yIG5vdC4KICA7OwogIDs7IEZvciBgYm5mLW1vZGUnLCB0aGlz IG1lYW5zIHRoYXQgd2l0aCBgZm9udC1sb2NrJyBkaXNhYmxlZCwgd2Ugd29udAogIDs7IGhh dmUgb3VyIHN5bnRheCBwcm9wZXJ0aWVzIHNldCBjb3JyZWN0bHksIGFuZCBpbmRlbnRhdGlv biB3aWxsCiAgOzsgc3VmZmVyLgogIDs7CiAgOzsgVG8gcGF0Y2ggb3VyIHdheSBhcm91bmQg dGhpcywgd2UgaXNzdWUgYSBgc3ludGF4LXByb3BlcnRpemUnIGNhbGwKICA7OyBtYW51YWxs eSwgYGZvbnQtbG9jaycgZW5hYmxlZCBvciBub3QuCiAgKHdpdGgtc2lsZW50LW1vZGlmaWNh dGlvbnMKICAgICh3aGVuIGJuZi1tb2RlLWFsZ29sLWNvbW1lbnRzLXN0eWxlCiAgICAgICAg KGZ1bmNhbGwgc3ludGF4LXByb3BlcnRpemUtZnVuY3Rpb24gKHBvaW50LW1pbikgKHBvaW50 LW1heCkpKSkKCiAgOzsgRm9udCBsb2NraW5nCiAgKHNldHEgZm9udC1sb2NrLWRlZmF1bHRz CiAgICAgICAgJygKICAgICAgICAgIDs7IEtleXdvcmRzCiAgICAgICAgICBibmYtZm9udC1s b2NrLWtleXdvcmRzCiAgICAgICAgICA7OyBrZXl3b3Jkcy1vbmx5CiAgICAgICAgICBuaWwK ICAgICAgICAgIDs7IFJlZ2FyZGluZyB0byBSRkM1MjM0IHJ1bGUgbmFtZXMgYXJlIGNhc2Ug aW5zZW5zaXRpdmUuCiAgICAgICAgICA7OyBUaGUgbmFtZXMgPHJ1bGVuYW1lPiwgPFJ1bGVu YW1lPiwgPFJVTEVOQU1FPiwgYW5kIDxyVWxFTmFtRT4KICAgICAgICAgIDs7IGFsbCByZWZl ciB0byB0aGUgc2FtZSBydWxlLiAgQXMgZmFyIGFzIGlzIGtub3duLCB0aGlzIGRvZXNuJ3QK ICAgICAgICAgIDs7IGNvbmZsaWN0IHdpdGggb3JpZ2luYWwgQk5GIHZlcnNpb24KICAgICAg ICAgIDs7IChzZWUgVVJMIGBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTIzNCcp CiAgICAgICAgICB0KSkpCgo7OyBJbnZva2UgYm5mLW1vZGUgd2hlbiBhcHByb3ByaWF0ZQoK Ozs7IyMjYXV0b2xvYWQKKGFkZC10by1saXN0ICdhdXRvLW1vZGUtYWxpc3QgJygiXFwuYm5m XFwnIiAuIGJuZi1tb2RlKSkKCihwcm92aWRlICdibmYtbW9kZSkKOzs7IGJuZi1tb2RlLmVs IGVuZHMgaGVyZQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJu Zi1tb2RlLTAuNC4xL2JuZi1tb2RlLXBrZy5lbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NjQgADAw MTc1MCAAMDAxNzUwIAAwMDAwMDAwMDIyMCAxMzQ2MzMzMTYzNCAwMTU3MzcAIDAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBrbGF5AAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtsYXkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKGRlZmluZS1wYWNrYWdlICJibmYtbW9kZSIgIjAu NC4xIiAiTWFqb3IgbW9kZSBmb3IgZWRpdGluZyBCTkYgZ3JhbW1hcnMuIgogICcoKGNsLWxp YiBuaWwpCiAgICAocnggbmlsKQogICAgKGVtYWNzICIyNC4zIikKICAgIChjbC1saWIgIjAu NSIpKSkKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABibmYt bW9kZS0wLjQuMS9ibmYtbW9kZS5pbmZvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwNjY0IAAwMDE3 NTAgADAwMTc1MCAAMDAwMDAwMTY2NTMgMTM0NjMzMzE2MzQgMDE1NTM0ACAwAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwa2xheQAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ADAwMDAwMCAAMDAwMDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFRoaXMgaXMgYm5mLW1vZGUuaW5mbywgcHJvZHVjZWQg YnkgbWFrZWluZm8gdmVyc2lvbiA2LjEgZnJvbSBzdGRpbi4KCh8KRmlsZTogYm5mLW1vZGUu aW5mbywgIE5vZGU6IFRvcCwgIE5leHQ6IEJORiBNb2RlIGZvciBHTlUgRW1hY3MsICBVcDog KGRpcikKClRvcAoqKioKCiogTWVudToKCiogQk5GIE1vZGUgZm9yIEdOVSBFbWFjczo6Cgof CkZpbGU6IGJuZi1tb2RlLmluZm8sICBOb2RlOiBCTkYgTW9kZSBmb3IgR05VIEVtYWNzLCAg UHJldjogVG9wLCAgVXA6IFRvcAoKMSBCTkYgTW9kZSBmb3IgR05VIEVtYWNzCioqKioqKioq KioqKioqKioqKioqKioqKgoKQSBHTlUgRW1hY3MgbWFqb3IgbW9kZSBmb3IgZWRpdGluZyBC TkYgZ3JhbW1hcnMuCgogICAgIOKAnFByZWNpc2UgbGFuZ3VhZ2UgaXMgbm90IHRoZSBwcm9i bGVtLiAgQ2xlYXIgbGFuZ3VhZ2UgaXMgdGhlCiAgICAgcHJvYmxlbS7igJ0KCiAgICAgUmlj aGFyZCBGZXlubWFuCiAgIEN1cnJlbnRseSBwcm92aWRlcyBiYXNpYyBzeW50YXggYW5kIGZv bnQtbG9ja2luZyBmb3IgQk5GIGZpbGVzLiAgQk5GCm5vdGF0aW9uIGlzIHN1cHBvcnRlZCBl eGFjdGx5IGZvcm0gYXMgaXQgd2FzIGZpcnN0IGFubm91bmNlZCBpbiB0aGUKQUxHT0wgNjAg cmVwb3J0LiAgRUJORiBhbmQgQUJORiBhcmUgbm90IHN1cHBvcnRlZCBidXQgaW4gbXkgcGxh bnMgZm9yCnRoZSBuZWFyIGZ1dHVyZS4KCiAgIFdoZW4gZGV2ZWxvcGluZyB0aGlzIG1vZGUs IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIHdlcmUgdGFrZW4gaW50bwphY2NvdW50OgoKICAg KiBSZXZpc2VkIFJlcG9ydCBvbiB0aGUgQWxnb3JpdGhtaWMgTGFuZ3VhZ2UgQWxnb2wgNjAK ICAgICAoaHR0cHM6Ly93d3cubWFzc3dlcmsuYXQvYWxnb2w2MC9yZXBvcnQuaHRtKQogICAq IFJGQzgyMiAoaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzgyMik6IFN0YW5kYXJk IGZvciBBUlBBCiAgICAgSW50ZXJuZXQgVGV4dCBNZXNzYWdlcwogICAqIFJGQzUyMzQgKGh0 dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1MjM0KTogQXVnbWVudGVkIEJORiBmb3IK ICAgICBTeW50YXggU3BlY2lmaWNhdGlvbnM6IEFCTkYKICAgKiBSRkM3NDA1IChodHRwczov L3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzQwNSk6IENhc2UtU2Vuc2l0aXZlCiAgICAgU3Ry aW5nIFN1cHBvcnQgaW4gQUJORgoKKiBNZW51OgoKKiBGZWF0dXJlczo6CiogSW5zdGFsbGF0 aW9uOjoKKiBVc2FnZTo6CiogU3VwcG9ydDo6CiogQ2hhbmdlczo6CiogRXh0ZXJuYWwgTGlu a3M6OgoqIExpY2Vuc2U6OgoKHwpGaWxlOiBibmYtbW9kZS5pbmZvLCAgTm9kZTogRmVhdHVy ZXMsICBOZXh0OiBJbnN0YWxsYXRpb24sICBVcDogQk5GIE1vZGUgZm9yIEdOVSBFbWFjcwoK MS4xIEZlYXR1cmVzCj09PT09PT09PT09PQoKICAgKiBCYXNpYyBzeW50YXggZGVmaW5pdGlv bgogICAqIFN5bnRheCBoaWdobGlnaHRpbmcKCh8KRmlsZTogYm5mLW1vZGUuaW5mbywgIE5v ZGU6IEluc3RhbGxhdGlvbiwgIE5leHQ6IFVzYWdlLCAgUHJldjogRmVhdHVyZXMsICBVcDog Qk5GIE1vZGUgZm9yIEdOVSBFbWFjcwoKMS4yIEluc3RhbGxhdGlvbgo9PT09PT09PT09PT09 PT09CgpLbm93biB0byB3b3JrIHdpdGggR05VIEVtYWNzIDI0LjMgYW5kIGxhdGVyLiAgQk5G IE1vZGUgbWF5IHdvcmsgd2l0aApvbGRlciB2ZXJzaW9ucyBvZiBFbWFjcywgb3Igd2l0aCBv dGhlciBmbGF2b3JzIG9mIEVtYWNzIChlLmcuICBYRW1hY3MpCmJ1dCB0aGlzIGlzIF9ub3Rf IGd1YXJhbnRlZWQuICBCdWcgcmVwb3J0cyBmb3IgcHJvYmxlbXMgcmVsYXRlZCB0byB1c2lu ZwpCTkYgTW9kZSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIEVtYWNzIHdpbGwgbW9zdCBsaWtl IG5vdCBiZSBhZGRyZXNzZWQuCgogICBUaGUgbWFzdGVyIG9mIGFsbCB0aGUgbWF0ZXJpYWwg aXMgdGhlIEdpdCByZXBvc2l0b3J5IGF0CjxodHRwczovL2dpdGh1Yi5jb20vc2VyZ2V5a2xh eS9ibmYtbW9kZT4gLgoKICAgTk9URTogVGhlICdtYXN0ZXInIGJyYW5jaCB3aWxsIGFsd2F5 cyBjb250YWluIHRoZSBsYXRlc3QgdW5zdGFibGUKdmVyc2lvbi4gIElmIHlvdSB3aXNoIHRv IGNoZWNrIG9sZGVyIHZlcnNpb25zIG9yIGZvcm1hbCwgdGFnZ2VkIHJlbGVhc2UsCnBsZWFz ZSBzd2l0Y2ggdG8gdGhlIHJlbGV2YW50IHRhZwooaHR0cHM6Ly9naXRodWIuY29tL3Nlcmdl eWtsYXkvYm5mLW1vZGUvdGFncykuCgoqIE1lbnU6CgoqIFVzaW5nIE1FTFBBOjoKKiBFbC1n ZXQ6OgoqIE1hbnVhbCBJbnN0YWxsOjoKCh8KRmlsZTogYm5mLW1vZGUuaW5mbywgIE5vZGU6 IFVzaW5nIE1FTFBBLCAgTmV4dDogRWwtZ2V0LCAgVXA6IEluc3RhbGxhdGlvbgoKMS4yLjEg VXNpbmcgTUVMUEEKLS0tLS0tLS0tLS0tLS0tLS0KClRoZSBiZXN0IHdheSBvZiBpbnN0YWxs aW5nIHRoaXMgbWFqb3IgbW9kZSwgYXQgbGVhc3QgZm9yIEdOVSBFbWFjcyAyNCwKaXMgdG8g dXNlIHRoZSBwYWNrYWdpbmcgc3lzdGVtLiAgQWRkIE1FTFBBIG9yIE1FTFBBIFN0YWJsZSB0 byB0aGUgbGlzdApvZiByZXBvc2l0b3JpZXMgdG8gYWNjZXNzIHRoaXMgbW9kZS4gIEZvciB0 aG9zZSB3aG8gd2FudCBvbmx5IGZvcm1hbCwKdGFnZ2VkIHJlbGVhc2VzIHVzZSBNRUxQQSBT dGFibGU6CgoocmVxdWlyZSAncGFja2FnZSkKKGFkZC10by1saXN0ICdwYWNrYWdlLWFyY2hp dmVzCiAgICAgICAgICAgICAnKCJtZWxwYS1zdGFibGUiIC4gImh0dHBzOi8vc3RhYmxlLm1l bHBhLm9yZy9wYWNrYWdlcy8iKSB0KQoocGFja2FnZS1pbml0aWFsaXplKQoKICAgRm9yIHRo b3NlIHdobyB3YW50IHJvbGxpbmcgcmVsZWFzZXMgYXMgdGhleSBoYXBwZW4gdXNlIE1FTFBB OgoKKHJlcXVpcmUgJ3BhY2thZ2UpCihhZGQtdG8tbGlzdCAncGFja2FnZS1hcmNoaXZlcwog ICAgICAgICAgICAgJygibWVscGEiIC4gImh0dHBzOi8vbWVscGEub3JnL3BhY2thZ2VzLyIp IHQpCihwYWNrYWdlLWluaXRpYWxpemUpCgogICBhbmQgdGhlbiB1c2UgJ00teCBwYWNrYWdl LXJlZnJlc2gtY29udGVudHMnIGFuZCAnTS14CnBhY2thZ2UtbGlzdC1wYWNrYWdlcycgdG8g Z2V0IHRvIHRoZSBwYWNrYWdlIGxpc3RpbmcgYW5kIGluc3RhbGwKJ2JuZi1tb2RlJyBmcm9t IHRoZXJlLiAgTUVMUEEgdHJhY2tzIHRoaXMgR2l0IHJlcG9zaXRvcnkgYW5kIHVwZGF0ZXMK cmVsYXRpdmVseSBzb29uIGFmdGVyIGVhY2ggY29tbWl0IG9yIGZvcm1hbCByZWxlYXNlLiAg Rm9yIG1vcmUgZGV0YWlsIG9uCnNldHRpbmcgdXAgc2VlIE1FTFBBIEdldHRpbmcgU3RhcnRl ZAooaHR0cHM6Ly9tZWxwYS5vcmcvIy9nZXR0aW5nLXN0YXJ0ZWQpLgoKICAgWW91IGNhbiBp bnN0YWxsICdibmYtbW9kZScgbWFudWFsbHkgYnkgYWRkaW5nIGZvbGxvd2luZyB0byB5b3Vy IGluaXQKZmlsZToKCih1bmxlc3MgKHBhY2thZ2UtaW5zdGFsbGVkLXAgJ2JuZi1tb2RlKQog ICAgKHBhY2thZ2UtcmVmcmVzaC1jb250ZW50cykKICAgIChwYWNrYWdlLWluc3RhbGwgJ2Ju Zi1tb2RlKSkKCiAgMS4gVXNpbmcgQ2FzawoKICAgICBBZGQgZm9sbG93aW5nIHRvIHlvdXIg Q2FzayAoaHR0cHM6Ly9jYXNrLmdpdGh1Yi5pby8pIGZpbGU6CgogICAgIChzb3VyY2UgbWVs cGEpCgogICAgIChkZXBlbmRzLW9uICJibmYtbW9kZSIpCgogIDIuIFVzaW5nIHVzZS1wYWNr YWdlCgogICAgIEFkZCBmb2xsb3dpbmcgdG8geW91ciBpbml0IGZpbGU6CgogICAgICh1c2Ut cGFja2FnZSBibmYtbW9kZQogICAgICAgOmVuc3VyZSB0CiAgICAgICA6bW9kZSAiXFwuYm5m XFwnIikKCh8KRmlsZTogYm5mLW1vZGUuaW5mbywgIE5vZGU6IEVsLWdldCwgIE5leHQ6IE1h bnVhbCBJbnN0YWxsLCAgUHJldjogVXNpbmcgTUVMUEEsICBVcDogSW5zdGFsbGF0aW9uCgox LjIuMiBFbC1nZXQKLS0tLS0tLS0tLS0tCgpJZiB5b3UgdXNlIGVsLWdldCwganVzdCBjcmVh dGUgYSByZWNpcGUgZmlsZSAnYm5mLnJjcCc6CgooOm5hbWUgYm5mLW1vZGUKICAgICAgIDp3 ZWJzaXRlICJodHRwczovL2dpdGh1Yi5jb20vc2VyZ2V5a2xheS9ibmYtbW9kZSIKICAgICAg IDpkZXNjcmlwdGlvbiAiQk5GIE1vZGU6IEEgbWFqb3IgbW9kZSBmb3IgZWRpdGluZyBCTkYg Z3JhbW1hcnMiCiAgICAgICA6dHlwZSBnaXRodWIKICAgICAgIDpwa2duYW1lICJzZXJnZXlr bGF5L2JuZi1tb2RlIikKCiAgIGFuZCBhZGQgaXQgdG8gYSBkaXJlY3RvcnkgcHJlc2VudCBp biAnZWwtZ2V0LXJlY2lwZS1wYXRoJy4gIFRoZW4sIHVzZQonTS14IGVsLWdldC1pbnN0YWxs IDxSRVQ+IGJuZi1tb2RlJyBvciBhZGQ6CgooZWwtZ2V0LWJ1bmRsZSBibmYtbW9kZSkKCiAg IHRvIHlvdXIgaW5pdCBmaWxlLgoKHwpGaWxlOiBibmYtbW9kZS5pbmZvLCAgTm9kZTogTWFu dWFsIEluc3RhbGwsICBQcmV2OiBFbC1nZXQsICBVcDogSW5zdGFsbGF0aW9uCgoxLjIuMyBN YW51YWwgSW5zdGFsbAotLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAxLiBEb3dubG9hZCAnYm5m LW1vZGUuZWwnCgogIDIuIFB1dCB0aGUgZmlsZSBpbiB5b3VyIEVsaXNwIGNvbW1vbiBmb2xk ZXIgbGlrZQogICAgICckSE9NRS8uZW1hY3MuZC9saXNwLycKCiAgMy4gVGhlbiB5b3UgY2Fu IGluY2x1ZGUgbGlrZSB0aGlzOgoKICAgICAoYWRkLXRvLWxpc3QgJ2xvYWQtcGF0aAogICAg ICAgICAgICAgICAgICAoZXhwYW5kLWZpbGUtbmFtZSAibGlzcCIgdXNlci1lbWFjcy1kaXJl Y3RvcnkpKQoKICA0LiBBZGQgX2VpdGhlcl8gb2YgdGhlIHR3byBmb2xsb3dpbmcgbGluZXMg dG8geW91ciBpbml0aWFsaXphdGlvbgogICAgIGZpbGUuICBUaGUgZmlyc3Qgb25seSBsb2Fk cyBCTkYgTW9kZSB3aGVuIG5lY2Vzc2FyeSwgdGhlIDJuZCBhbHdheXMKICAgICBkdXJpbmcg c3RhcnR1cCBvZiBHTlUgRW1hY3MuCgogICAgIChhdXRvbG9hZCAnYm5mLW1vZGUgImJuZi1t b2RlIiBuaWwgdCkKICAgICA7OyBPUgogICAgIChyZXF1aXJlICdibmYtbW9kZSkKCiAgNS4g T3B0aW9uYWxseSBieXRlIGNvbXBpbGUgJ2JuZi1tb2RlLmVsJyBmb3IgZmFzdGVyIHN0YXJ0 dXA6ICdNLXgKICAgICBieXRlLWNvbXBpbGUnCgofCkZpbGU6IGJuZi1tb2RlLmluZm8sICBO b2RlOiBVc2FnZSwgIE5leHQ6IFN1cHBvcnQsICBQcmV2OiBJbnN0YWxsYXRpb24sICBVcDog Qk5GIE1vZGUgZm9yIEdOVSBFbWFjcwoKMS4zIFVzYWdlCj09PT09PT09PQoKKiBNZW51OgoK KiBJbnRlcmFjdGl2ZSBDb21tYW5kczo6CgofCkZpbGU6IGJuZi1tb2RlLmluZm8sICBOb2Rl OiBJbnRlcmFjdGl2ZSBDb21tYW5kcywgIFVwOiBVc2FnZQoKMS4zLjEgSW50ZXJhY3RpdmUg Q29tbWFuZHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkNvbW1hbmQgKEZvciB0aGUg J00teCcgcHJvbXB0LikgICBEZXNjcmlwdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCidibmYtbW9kZScgICAgICAgICAg ICAgICAgICAgICAgICBTd2l0Y2hlcyB0byBCTkYgTW9kZS4KCiAgIEFueSBmaWxlIHRoYXQg bWF0Y2hlcyB0aGUgZ2xvYiAnKi5ibmYnIGlzIGF1dG9tYXRpY2FsbHkgb3BlbmVkIGluCidi bmYtbW9kZScuCgofCkZpbGU6IGJuZi1tb2RlLmluZm8sICBOb2RlOiBTdXBwb3J0LCAgTmV4 dDogQ2hhbmdlcywgIFByZXY6IFVzYWdlLCAgVXA6IEJORiBNb2RlIGZvciBHTlUgRW1hY3MK CjEuNCBTdXBwb3J0Cj09PT09PT09PT09CgpGZWVsIGZyZWUgdG8gYXNrIHF1ZXN0aW9uIG9y IG1ha2Ugc3VnZ2VzdGlvbnMgaW4gb3VyIGlzc3VlIHRyYWNrZXIKKGh0dHBzOi8vZ2l0aHVi LmNvbS9zZXJnZXlrbGF5L2JuZi1tb2RlL2lzc3VlcykgLgoKHwpGaWxlOiBibmYtbW9kZS5p bmZvLCAgTm9kZTogQ2hhbmdlcywgIE5leHQ6IEV4dGVybmFsIExpbmtzLCAgUHJldjogU3Vw cG9ydCwgIFVwOiBCTkYgTW9kZSBmb3IgR05VIEVtYWNzCgoxLjUgQ2hhbmdlcwo9PT09PT09 PT09PQoKVG8gc2VlIHdoYXQgaGFzIGNoYW5nZWQgaW4gcmVjZW50IHZlcnNpb25zIG9mIEJO RiBNb2RlLCBzZWUgdGhlCkNIQU5HRUxPRy5vcmcKKGh0dHBzOi8vZ2l0aHViLmNvbS9zZXJn ZXlrbGF5L2JuZi1tb2RlL2Jsb2IvbWFzdGVyL0NIQU5HRUxPRy5vcmcpIC4KCh8KRmlsZTog Ym5mLW1vZGUuaW5mbywgIE5vZGU6IEV4dGVybmFsIExpbmtzLCAgTmV4dDogTGljZW5zZSwg IFByZXY6IENoYW5nZXMsICBVcDogQk5GIE1vZGUgZm9yIEdOVSBFbWFjcwoKMS42IEV4dGVy bmFsIExpbmtzCj09PT09PT09PT09PT09PT09PQoKICAgKiBXaWtpcGVkaWE6IEJhY2t1cy1O YXVyIGZvcm0KICAgICAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFja3VzJUUy JTgwJTkzTmF1cl9mb3JtKQogICAqIFdpa2lwZWRpYTogRXh0ZW5kZWQgQmFja3VzLU5hdXIg Zm9ybQogICAgIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHRlbmRlZF9CYWNr dXMlMjVFMiUyNTgwJTI1OTNOYXVyX2Zvcm0pCiAgICogV2lraXBlZGlhOiBBdWdtZW50ZWQg QmFja3VzLU5hdXIgZm9ybQogICAgIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9B dWdtZW50ZWRfQmFja3VzJTI1RTIlMjU4MCUyNTkzTmF1cl9mb3JtKQogICAqIElTTy9JRUMg MTQ5Nzc6IEVCTkYgKGh0dHBzOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvaXNvLTE0OTc3 LnBkZikKICAgKiBFQk5GOiBBIE5vdGF0aW9uIHRvIERlc2NyaWJlIFN5bnRheAogICAgICho dHRwczovL3d3dy5pY3MudWNpLmVkdS9+cGF0dGlzL0lDUy0zMy9sZWN0dXJlcy9lYm5mLnBk ZikKCh8KRmlsZTogYm5mLW1vZGUuaW5mbywgIE5vZGU6IExpY2Vuc2UsICBQcmV2OiBFeHRl cm5hbCBMaW5rcywgIFVwOiBCTkYgTW9kZSBmb3IgR05VIEVtYWNzCgoxLjcgTGljZW5zZQo9 PT09PT09PT09PQoKQk5GIE1vZGUgaXMgb3BlbiBzb3VyY2Ugc29mdHdhcmUgbGljZW5zZWQg dW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpMaWNlbmNlIHZlcnNpb24gMwooaHR0cHM6 Ly9naXRodWIuY29tL3NlcmdleWtsYXkvYm5mLW1vZGUvYmxvYi9tYXN0ZXIvTElDRU5TRSkg LgoKHwpUYWcgVGFibGU6Ck5vZGU6IFRvcH82OQpOb2RlOiBCTkYgTW9kZSBmb3IgR05VIEVt YWNzfzE5MwpSZWY6ICNibmYtbW9kZS1mb3ItZ251LWVtYWNzfzMyMApOb2RlOiBGZWF0dXJl c38xMjkyClJlZjogI2ZlYXR1cmVzfzE0MDkKTm9kZTogSW5zdGFsbGF0aW9ufzE0NjQKUmVm OiAjaW5zdGFsbGF0aW9ufzE2MDMKTm9kZTogVXNpbmcgTUVMUEF/MjI3MQpSZWY6ICN1c2lu Zy1tZWxwYX8yMzg1Ck5vZGU6IEVsLWdldH8zNzY1ClJlZjogI2VsLWdldH8zODkyCk5vZGU6 IE1hbnVhbCBJbnN0YWxsfzQzMTkKUmVmOiAjbWFudWFsLWluc3RhbGx/NDQ0MgpOb2RlOiBV c2FnZX81MDI5ClJlZjogI3VzYWdlfzUxNTMKTm9kZTogSW50ZXJhY3RpdmUgQ29tbWFuZHN/ NTE4OApSZWY6ICNpbnRlcmFjdGl2ZS1jb21tYW5kc381MzA3Ck5vZGU6IFN1cHBvcnR/NTU1 MQpSZWY6ICNzdXBwb3J0fzU2NzQKTm9kZTogQ2hhbmdlc381NzkyClJlZjogI2NoYW5nZXN/ NTkyNApOb2RlOiBFeHRlcm5hbCBMaW5rc382MDcyClJlZjogI2V4dGVybmFsLWxpbmtzfzYy MTgKTm9kZTogTGljZW5zZX82NzMyClJlZjogI2xpY2Vuc2V/Njg0OAofCkVuZCBUYWcgVGFi bGUKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJuZi1tb2RlLTAuNC4xL2RpcgAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NjQgADAwMTc1MCAAMDAxNzUwIAAwMDAw MDAwMTE2MyAxMzQ1NjcwMjEyMCAwMTM2NTEAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBrbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAGtsYXkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAg AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAVGhpcyBpcyB0aGUgZmlsZSAuLi4vaW5mby9kaXIsIHdoaWNoIGNvbnRhaW5zIHRo ZQp0b3Btb3N0IG5vZGUgb2YgdGhlIEluZm8gaGllcmFyY2h5LCBjYWxsZWQgKGRpcilUb3Au ClRoZSBmaXJzdCB0aW1lIHlvdSBpbnZva2UgSW5mbyB5b3Ugc3RhcnQgb2ZmIGxvb2tpbmcg YXQgdGhpcyBub2RlLgofCkZpbGU6IGRpciwJTm9kZTogVG9wCVRoaXMgaXMgdGhlIHRvcCBv ZiB0aGUgSU5GTyB0cmVlCgogIFRoaXMgKHRoZSBEaXJlY3Rvcnkgbm9kZSkgZ2l2ZXMgYSBt ZW51IG9mIG1ham9yIHRvcGljcy4KICBUeXBpbmcgInEiIGV4aXRzLCAiPyIgbGlzdHMgYWxs IEluZm8gY29tbWFuZHMsICJkIiByZXR1cm5zIGhlcmUsCiAgImgiIGdpdmVzIGEgcHJpbWVy IGZvciBmaXJzdC10aW1lcnMsCiAgIm1FbWFjczxSZXR1cm4+IiB2aXNpdHMgdGhlIEVtYWNz IG1hbnVhbCwgZXRjLgoKICBJbiBFbWFjcywgeW91IGNhbiBjbGljayBtb3VzZSBidXR0b24g MiBvbiBhIG1lbnUgaXRlbSBvciBjcm9zcyByZWZlcmVuY2UKICB0byBzZWxlY3QgaXQuCgoq IE1lbnU6CgpMYW5ndWFnZXMKKiBCTkYgTW9kZTogKGJuZi1tb2RlKS4gICAgICAgICAgICAg ICBNYWpvciBtb2RlIGZvciBlZGl0aW5nIEJORiBncmFtbWFycy4KAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAA= --------------D1F59E88CEDB209D065C4307--