diff options
| author | Jonathan Amsterdam <jba@google.com> | 2020-10-26 10:31:27 -0400 |
|---|---|---|
| committer | Jonathan Amsterdam <jba@google.com> | 2020-10-27 13:19:30 +0000 |
| commit | 90295cd6899f032ee9832f91c200c8e96c437ee8 (patch) | |
| tree | 6e0598e0edd84ec260416941575f3593c1763095 /internal/testing/sample | |
| parent | 8520d59c35f6c7c3c032a111dc8691b3be7c81ae (diff) | |
| download | go-x-pkgsite-90295cd6899f032ee9832f91c200c8e96c437ee8.tar.xz | |
internal/testing/sample,etc.: add package source
Add encoded source to the sample Documentation value, and render it to
get the documentation HTML. Use the package in
internal/godoc/testdata.
I had hoped to use the godoc package in an init function to create the
needed values, but that caused an import cycle between sample and the
godoc test package. So instead, a small program invoked with `go
generate` uses godoc to generate the values and embed them in a Go
file.
This change required a few other changes:
internal/postgres: Always insert source when comparing Documentation.
internal/frontend: Change the strings we look for in doc to match the
one in the sample package.
internal/frontend: Remove the check on HTML ids. This was added when I
was doing safehtml, when I was being strict about HTML ids. The
safehtml package wants ids to conform to some strict rules to avoid
certain attacks, and I tried to follow those rules. But in the end I
had to be more forgiving, or I would have broken anchor tags to Go
symbols, like pkg.go.dev/fmt#Println. (safehtml does not consider
"Println" a safe identifier unless it is a constant string.)
The checkIDs function was added somewhere in the middle of that
process, and it worked until now because the value of
sample.DocumentationHTML was an ordinary text string with no ids, not
real HTML doc. It was actually only checking the ids for license
files, and those do contain a hyphen. I don't think its loss is
important.
Change-Id: I4019c56b216aaf1a4e92a6167c2af1eef4cfbf89
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/265297
Trust: Jonathan Amsterdam <jba@google.com>
Run-TryBot: Jonathan Amsterdam <jba@google.com>
TryBot-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jamal Carvalho <jamal@golang.org>
Diffstat (limited to 'internal/testing/sample')
| -rw-r--r-- | internal/testing/sample/documentation.gen.go | 362 | ||||
| -rw-r--r-- | internal/testing/sample/gen_documentation.go | 85 | ||||
| -rw-r--r-- | internal/testing/sample/sample.go | 31 |
3 files changed, 460 insertions, 18 deletions
diff --git a/internal/testing/sample/documentation.gen.go b/internal/testing/sample/documentation.gen.go new file mode 100644 index 00000000..3ee3c776 --- /dev/null +++ b/internal/testing/sample/documentation.gen.go @@ -0,0 +1,362 @@ + +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sample + +import ( + "github.com/google/safehtml/testconversions" + "golang.org/x/pkgsite/internal" +) + + + +var ( + DocumentationHTML = testconversions.MakeHTMLForTest(` + <nav class="DocNav js-sideNav"> + <ul role="tree" aria-label="Outline"> + + <li class="DocNav-overview" role="none"> + <a href="#pkg-overview" role="treeitem" aria-level="1" tabindex="0">Overview</a> + </li> + <li class="DocNav-index" role="none"> + <a href="#pkg-index" role="treeitem" aria-level="1" tabindex="0">Index</a> + </li> + + + <li class="DocNav-examples" role="none"> + <a href="#pkg-examples" role="treeitem" aria-level="1" tabindex="-1">Examples</a> + </li> + + + <li class="DocNav-constants" role="none"> + <a href="#pkg-constants" role="treeitem" aria-level="1" tabindex="-1">Constants</a> + </li> + + + <li class="DocNav-variables" role="none"> + <a href="#pkg-variables" role="treeitem" aria-level="1" tabindex="-1">Variables</a> + </li> + + + + <li class="DocNav-functions" role="none"> + <span class="DocNav-groupLabel" role="treeitem" aria-expanded="true" aria-level="1" aria-owns="nav-group-functions" tabindex="-1">Functions</span> + <ul role="group" id="nav-group-functions"> + + <li role="none"> + <a href="#F" title="F(t)" role="treeitem" aria-level="2" tabindex="-1">F(t)</a> + </li> + + </ul> + </li> + + + + <li class="DocNav-types" role="none"> + <span class="DocNav-groupLabel" role="treeitem" aria-expanded="true" aria-level="1" aria-owns="nav-group-types" tabindex="-1">Types</span> + <ul role="group" id="nav-group-types"> + + + <li role="none"> + + <a href="#I" role="treeitem" aria-level="2" tabindex="-1">type I</a> + + </li> + + + <li role="none"> + + <a href="#S1" role="treeitem" aria-level="2" tabindex="-1">type S1</a> + + </li> + + + <li role="none"> + + <a href="#S2" role="treeitem" aria-level="2" tabindex="-1">type S2</a> + + </li> + + + <li role="none"> + + + + <a class="DocNav-groupLabel" href="#T" role="treeitem" aria-expanded="true" aria-level="2" data-aria-owns="nav.group.T" tabindex="-1">type T</a> + <ul role="group" id="nav.group.T"> + + <li role="none"> + <a href="#TF" title="TF()" role="treeitem" aria-level="3" tabindex="-1">TF()</a> + </li> + + + <li role="none"> + <a href="#T.M" title="M()" role="treeitem" aria-level="3" tabindex="-1">M()</a> + </li> + + </ul> + + </li> + + </ul> + </li> + + + + <li class="DocNav-notes" role="none"> + <span class="DocNav-groupLabel" role="treeitem" aria-expanded="true" aria-level="1" aria-owns="nav-group-notes" tabindex="-1">Notes</span> + <ul role="group" id="nav-group-notes"> + + <li role="none"> + <a href="#pkg-note-BUG" role="treeitem" aria-level="2" tabindex="-1">BUGs</a> + </li> + + </ul> + </li> + + + + <li class="DocNav-files" role="none"> + <a href="#pkg-files" role="treeitem" aria-level="1" tabindex="-1">Package Files</a> + </li> + + </ul> + </nav> + <nav class="DocNavMobile js-mobileNav"> + <label for="DocNavMobile-select" class="DocNavMobile-label"> + <svg class="DocNavMobile-selectIcon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="18px" height="18px"> + <path d="M0 0h24v24H0z" fill="none"/><path d="M3 9h14V7H3v2zm0 4h14v-2H3v2zm0 4h14v-2H3v2zm16 0h2v-2h-2v2zm0-10v2h2V7h-2zm0 6h2v-2h-2v2z"/> + </svg> + <span class="DocNavMobile-selectText js-mobileNavSelectText">Outline</span> + </label> + <select id="DocNavMobile-select" class="DocNavMobile-select"> + <option value="">Outline</option> + + <option value="pkg-overview">Overview</option> + + + <option value="pkg-examples">Examples</option> + + + <option value="pkg-constants">Constants</option> + + + <option value="pkg-variables">Variables</option> + + + + <optgroup label="Functions"> + + <option value="F">F(t)</option> + + </optgroup> + + + + <optgroup label="Types"> + + + <option value="I">type I</option> + + + + + <option value="S1">type S1</option> + + + + + <option value="S2">type S2</option> + + + + + <option value="T">type T</option> + + <option value="TF">TF()</option> + + + <option value="T.M">M()</option> + + + </optgroup> + + + + <optgroup label="Notes"> + + <option value="pkg-note-BUG">BUGs</option> + + </optgroup> + + </select> + </nav> + + +<div class="Documentation-content js-docContent"> <section class="Documentation-overview"> + <h2 tabindex="-1" id="pkg-overview" class="Documentation-overviewHeader">Overview <a href="#pkg-overview">¶</a></h2> + +<p>Package p is for testing godoc.Render. There are a lot +of other things to say, but that's the gist of it. +</p> +</section><section class="Documentation-index"> + <h3 id="pkg-index" class="Documentation-indexHeader">Index <a href="#pkg-index">¶</a></h3> + +<ul class="Documentation-indexList"> +<li class="Documentation-indexConstants"><a href="#pkg-constants">Constants</a></li> +<li class="Documentation-indexVariables"><a href="#pkg-variables">Variables</a></li> +<li class="Documentation-indexFunction"> + <a href="#F">func F(t time.Time)</a> + </li> +<li class="Documentation-indexType"><a href="#I">type I</a></li> +<li class="Documentation-indexType"><a href="#S1">type S1</a></li> +<li class="Documentation-indexType"><a href="#S2">type S2</a></li> +<li class="Documentation-indexType"><a href="#T">type T</a></li> +<li><ul class="Documentation-indexTypeFunctions"> +<li><a href="#TF">func TF() T</a></li> + + </ul></li> +<li><ul class="Documentation-indexTypeMethods"> +<li><a href="#T.M">func (T) M()</a></li> + + </ul></li> +<li class="Documentation-indexNote"><a href="#pkg-note-BUG">BUGs</a></li></ul> +</section><section class="Documentation-examples"> + <h3 tabindex="-1" id="pkg-examples" class="Documentation-examplesHeader">Examples <a href="#pkg-examples">¶</a></h3> +<ul class="Documentation-examplesList"> +<li><a href="#example-F" class="js-exampleHref">F</a></li> +<li><a href="#example-TF" class="js-exampleHref">TF</a></li> +</ul> +</section><section class="Documentation-constants"> + <h3 tabindex="-1" id="pkg-constants" class="Documentation-constantsHeader">Constants <a href="#pkg-constants">¶</a></h3> +<pre> +<span id="C" data-kind="constant"></span>const C = 1</pre> +<p>const +</p> +</section><section class="Documentation-variables"> + <h3 tabindex="-1" id="pkg-variables" class="Documentation-variablesHeader">Variables <a href="#pkg-variables">¶</a></h3> +<pre> +<span id="V" data-kind="variable"></span>var V = unexp()</pre> +<p>var +</p> +</section><section class="Documentation-functions"><div class="Documentation-function"><h3 tabindex="-1" id="F" data-kind="function" class="Documentation-functionHeader">func <a class="Documentation-source" href="github.com/valid/module_name/blob/abcde/../godoc/testdata/p/p.go#L21">F</a> <a href="#F">¶</a></h3> +<pre> +func F(t <a href="/time">time</a>.<a href="/time#Time">Time</a>)</pre> +<p>exported func +</p> +<details tabindex="-1" id="example-F" class="Documentation-exampleDetails js-exampleContainer"> +<summary class="Documentation-exampleDetailsHeader">Example <a href="#example-F">¶</a></summary> +<div class="Documentation-exampleDetailsBody"> +<p>executable example +</p> +<p>Code:</p> + +<pre class="Documentation-exampleCode"> +package main + +import ( + "golang.org/x/pkgsite/internal/godoc/testdata/p" +) + +func main() { + <span class="comment">// example comment</span> + p.F() +} +</pre> + +<pre class="Documentation-exampleOutput"> +ok +</pre> +</div> +<div class="Documentation-exampleButtonsContainer"> + <p class="Documentation-exampleError" role="alert" aria-atomic="true"></p> + <button class="Documentation-examplePlayButton" aria-label="Play Code">Play</button> + </div></details> + +</div></section><section class="Documentation-types"><div class="Documentation-type"><h3 tabindex="-1" id="I" data-kind="type" class="Documentation-typeHeader">type <a class="Documentation-source" href="github.com/valid/module_name/blob/abcde/../godoc/testdata/p/p.go#L65">I</a> <a href="#I">¶</a></h3> +<pre> +type I interface { +<span id="I.M1" data-kind="method"></span> M1() +}</pre> +<p>I is an interface. +</p> +</div><div class="Documentation-type"><h3 tabindex="-1" id="S1" data-kind="type" class="Documentation-typeHeader">type <a class="Documentation-source" href="github.com/valid/module_name/blob/abcde/../godoc/testdata/p/p.go#L50">S1</a> <a href="#S1">¶</a></h3> +<pre> +type S1 struct { +<span id="S1.F" data-kind="field"></span> F <a href="/builtin#int">int</a> <span class="comment">// field</span> +}</pre> + +</div><div class="Documentation-type"><h3 tabindex="-1" id="S2" data-kind="type" class="Documentation-typeHeader">type <a class="Documentation-source" href="github.com/valid/module_name/blob/abcde/../godoc/testdata/p/p.go#L58">S2</a> <a href="#S2">¶</a></h3> +<pre> +type S2 struct { +<span id="S2.S1" data-kind="field"></span> <a href="#S1">S1</a> <span class="comment">// embedded struct</span> + +<span id="S2.H" data-kind="field"></span> H <a href="/builtin#int">int</a> + <span class="comment">// contains filtered or unexported fields</span> +}</pre> + +</div><div class="Documentation-type"><h3 tabindex="-1" id="T" data-kind="type" class="Documentation-typeHeader">type <a class="Documentation-source" href="github.com/valid/module_name/blob/abcde/../godoc/testdata/p/p.go#L30">T</a> <a href="#T">¶</a></h3> +<pre> +type T <a href="/builtin#int">int</a></pre> +<p>type +</p> +<div class="Documentation-typeConstant"><pre> +<span id="CT" data-kind="constant"></span>const CT <a href="#T">T</a> = 3</pre> +<p>typeConstant +</p> + + </div><div class="Documentation-typeVariable"><pre> +<span id="VT" data-kind="variable"></span>var VT <a href="#T">T</a></pre> +<p>typeVariable +</p> + + </div><div class="Documentation-typeFunc"><h3 tabindex="-1" id="TF" data-kind="function" class="Documentation-typeFuncHeader">func <a class="Documentation-source" href="github.com/valid/module_name/blob/abcde/../godoc/testdata/p/p.go#L39">TF</a> <a href="#TF">¶</a></h3> +<pre> +func TF() <a href="#T">T</a></pre> +<p>typeFunc +</p> +<details tabindex="-1" id="example-TF" class="Documentation-exampleDetails js-exampleContainer"> +<summary class="Documentation-exampleDetailsHeader">Example <a href="#example-TF">¶</a></summary> +<div class="Documentation-exampleDetailsBody"> +<p>non-executable example +</p> +<p>Code:</p> + +<pre class="Documentation-exampleCode"> +<span class="comment">// example comment</span> +app := App{} +app.Name = "greet" +_ = app.Run([]string{"greet"}) +</pre> + +</div> +</details> + +</div><div class="Documentation-typeMethod"><h3 tabindex="-1" id="T.M" data-kind="method" class="Documentation-typeMethodHeader">func (T) <a class="Documentation-source" href="github.com/valid/module_name/blob/abcde/../godoc/testdata/p/p.go#L45">M</a> <a href="#T.M">¶</a></h3> +<pre> +func (<a href="#T">T</a>) M()</pre> +<p>method +BUG(uid): this verifies that notes are rendered +</p> +</div></div></section> + + <section class="Documentation-files"> + <h3 tabindex="-1" id="pkg-files" class="Documentation-filesHeader">Package Files <a href="#pkg-files">¶</a></h3> + <ul class="Documentation-filesList"><li><a class="Documentation-file" href="github.com/valid/module_name/blob/abcde/../godoc/testdata/p/p.go">../../godoc/testdata/p/p.go</a></li></ul> + </section><section class="Documentation-notes"><div class="Documentation-note"> + <h2 tabindex="-1" id="pkg-note-BUG" class="Documentation-noteHeader">BUGs <a href="#pkg-note-BUG">¶</a></h2> + <ul class="Documentation-noteList" style="padding-left: 20px; list-style: initial;"> +<li style="margin: 6px 0 6px 0;"><p>this verifies that notes are rendered +</p></li></ul> +</div></section></div> `) + DocumentationSource = []byte{0x41, 0x53, 0x54, 0x31, 0x33, 0xff, 0x81, 0x3, 0x1, 0x1, 0x11, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x1, 0xff, 0x82, 0x0, 0x1, 0x2, 0x1, 0x4, 0x42, 0x61, 0x73, 0x65, 0x1, 0x4, 0x0, 0x1, 0x5, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x1, 0xff, 0x8c, 0x0, 0x0, 0x0, 0x25, 0xff, 0x8b, 0x2, 0x1, 0x1, 0x16, 0x5b, 0x5d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x1, 0xff, 0x8c, 0x0, 0x1, 0xff, 0x84, 0x0, 0x0, 0x4d, 0xff, 0x83, 0x3, 0x1, 0x1, 0xe, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x1, 0xff, 0x84, 0x0, 0x1, 0x5, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x4, 0x42, 0x61, 0x73, 0x65, 0x1, 0x4, 0x0, 0x1, 0x4, 0x53, 0x69, 0x7a, 0x65, 0x1, 0x4, 0x0, 0x1, 0x5, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x1, 0xff, 0x86, 0x0, 0x1, 0x5, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x1, 0xff, 0x8a, 0x0, 0x0, 0x0, 0x13, 0xff, 0x85, 0x2, 0x1, 0x1, 0x5, 0x5b, 0x5d, 0x69, 0x6e, 0x74, 0x1, 0xff, 0x86, 0x0, 0x1, 0x4, 0x0, 0x0, 0x1f, 0xff, 0x89, 0x2, 0x1, 0x1, 0x10, 0x5b, 0x5d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1, 0xff, 0x8a, 0x0, 0x1, 0xff, 0x88, 0x0, 0x0, 0x42, 0xff, 0x87, 0x3, 0x1, 0x1, 0x8, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1, 0xff, 0x88, 0x0, 0x1, 0x4, 0x1, 0x6, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x1, 0x4, 0x0, 0x1, 0x8, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x4, 0x4c, 0x69, 0x6e, 0x65, 0x1, 0x4, 0x0, 0x1, 0x6, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x1, 0x4, 0x0, 0x0, 0x0, 0xfe, 0x1, 0x66, 0xff, 0x82, 0x1, 0xfe, 0xa, 0x8c, 0x1, 0x2, 0x1, 0x26, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x67, 0x6f, 0x1, 0x2, 0x1, 0xfe, 0x3, 0x8e, 0x1, 0x17, 0x0, 0x6e, 0xff, 0xda, 0xfe, 0x1, 0x3e, 0xfe, 0x1, 0x40, 0xfe, 0x1, 0x5e, 0xfe, 0x1, 0x60, 0xfe, 0x1, 0xd0, 0xfe, 0x1, 0xd2, 0xfe, 0x2, 0x6, 0xfe, 0x2, 0x2c, 0xfe, 0x2, 0x54, 0xfe, 0x2, 0x70, 0xfe, 0x2, 0x98, 0xfe, 0x2, 0xd8, 0xfe, 0x2, 0xdc, 0xfe, 0x2, 0xde, 0xfe, 0x3, 0xa, 0xfe, 0x3, 0x2e, 0xfe, 0x3, 0x56, 0xfe, 0x3, 0x64, 0xfe, 0x3, 0x7c, 0xfe, 0x3, 0x8a, 0x0, 0x1, 0x1b, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x2f, 0x70, 0x2e, 0x67, 0x6f, 0x1, 0xfe, 0x3, 0x92, 0x1, 0xfe, 0x6, 0xf8, 0x1, 0x43, 0x0, 0x6e, 0xff, 0xda, 0xfe, 0x1, 0x3e, 0xfe, 0x1, 0x40, 0xfe, 0x1, 0xb4, 0xfe, 0x2, 0x20, 0xfe, 0x2, 0x34, 0xfe, 0x2, 0x36, 0xfe, 0x2, 0x48, 0xfe, 0x2, 0x56, 0xfe, 0x2, 0x66, 0xfe, 0x2, 0x6a, 0xfe, 0x2, 0x6c, 0xfe, 0x2, 0x7e, 0xfe, 0x2, 0x96, 0xfe, 0x2, 0x98, 0xfe, 0x2, 0xa6, 0xfe, 0x2, 0xc6, 0xfe, 0x2, 0xc8, 0xfe, 0x2, 0xea, 0xfe, 0x3, 0x16, 0xfe, 0x3, 0x36, 0xfe, 0x3, 0x3a, 0xfe, 0x3, 0x3c, 0xfe, 0x3, 0x62, 0xfe, 0x3, 0x80, 0xfe, 0x3, 0x84, 0xfe, 0x3, 0x86, 0xfe, 0x3, 0x96, 0xfe, 0x3, 0xac, 0xfe, 0x3, 0xae, 0xfe, 0x3, 0xce, 0xfe, 0x3, 0xec, 0xfe, 0x3, 0xee, 0xfe, 0x4, 0xe, 0xfe, 0x4, 0x20, 0xfe, 0x4, 0x22, 0xfe, 0x4, 0x3a, 0xfe, 0x4, 0x56, 0xfe, 0x4, 0x70, 0xfe, 0x4, 0x74, 0xfe, 0x4, 0x76, 0xfe, 0x4, 0x8a, 0xfe, 0x4, 0xf0, 0xfe, 0x5, 0x10, 0xfe, 0x5, 0x12, 0xfe, 0x5, 0x3c, 0xfe, 0x5, 0x5c, 0xfe, 0x5, 0x5e, 0xfe, 0x5, 0x80, 0xfe, 0x5, 0xa0, 0xfe, 0x5, 0xa4, 0xfe, 0x5, 0xa6, 0xfe, 0x5, 0xc8, 0xfe, 0x5, 0xd8, 0xfe, 0x5, 0xe6, 0xfe, 0x5, 0xea, 0xfe, 0x6, 0xc, 0xfe, 0x6, 0x3a, 0xfe, 0x6, 0x80, 0xfe, 0x6, 0x90, 0xfe, 0x6, 0x94, 0xfe, 0x6, 0x96, 0xfe, 0x6, 0xc2, 0xfe, 0x6, 0xe8, 0xfe, 0x6, 0xf4, 0x0, 0x0, 0x4f, 0xff, 0x8d, 0x3, 0x1, 0x1, 0xa, 0x65, 0x6e, 0x63, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x1, 0xff, 0x8e, 0x0, 0x1, 0x4, 0x1, 0x4, 0x47, 0x4f, 0x4f, 0x53, 0x1, 0xc, 0x0, 0x1, 0x6, 0x47, 0x4f, 0x41, 0x52, 0x43, 0x48, 0x1, 0xc, 0x0, 0x1, 0x5, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x1, 0xff, 0xb2, 0x0, 0x1, 0x12, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x1, 0xff, 0xb4, 0x0, 0x0, 0x0, 0x1c, 0xff, 0xb1, 0x2, 0x1, 0x1, 0xd, 0x5b, 0x5d, 0x2a, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x1, 0xff, 0xb2, 0x0, 0x1, 0xff, 0x90, 0x0, 0x0, 0x42, 0xff, 0x8f, 0x3, 0x1, 0x2, 0xff, 0x90, 0x0, 0x1, 0x4, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x3, 0x41, 0x53, 0x54, 0x1, 0xff, 0x92, 0x0, 0x1, 0xe, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4e, 0x75, 0x6d, 0x73, 0x1, 0xff, 0x86, 0x0, 0x1, 0xa, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x1, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x72, 0xff, 0x91, 0x3, 0x1, 0x1, 0x4, 0x46, 0x69, 0x6c, 0x65, 0x1, 0xff, 0x92, 0x0, 0x1, 0x8, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x7, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xff, 0x9a, 0x0, 0x1, 0x5, 0x44, 0x65, 0x63, 0x6c, 0x73, 0x1, 0xff, 0x9e, 0x0, 0x1, 0x5, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x1, 0xff, 0xa0, 0x0, 0x1, 0x7, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x1, 0xff, 0xa8, 0x0, 0x1, 0xa, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x1, 0xff, 0xaa, 0x0, 0x1, 0x8, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1, 0xff, 0xac, 0x0, 0x0, 0x0, 0x24, 0xff, 0x93, 0x3, 0x1, 0x1, 0xc, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1, 0xff, 0x94, 0x0, 0x1, 0x1, 0x1, 0x4, 0x4c, 0x69, 0x73, 0x74, 0x1, 0xff, 0x98, 0x0, 0x0, 0x0, 0x1d, 0xff, 0x97, 0x2, 0x1, 0x1, 0xe, 0x5b, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x98, 0x0, 0x1, 0xff, 0x96, 0x0, 0x0, 0x1f, 0xff, 0x95, 0x3, 0x1, 0x2, 0xff, 0x96, 0x0, 0x1, 0x2, 0x1, 0x5, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x1, 0x4, 0x0, 0x1, 0x4, 0x54, 0x65, 0x78, 0x74, 0x1, 0xc, 0x0, 0x0, 0x0, 0x31, 0xff, 0x99, 0x3, 0x1, 0x1, 0x5, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x9a, 0x0, 0x1, 0x3, 0x1, 0x7, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x6f, 0x73, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x3, 0x4f, 0x62, 0x6a, 0x1, 0xff, 0x9c, 0x0, 0x0, 0x0, 0x41, 0xff, 0x9b, 0x3, 0x1, 0x1, 0x6, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x1, 0xff, 0x9c, 0x0, 0x1, 0x5, 0x1, 0x4, 0x4b, 0x69, 0x6e, 0x64, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x4, 0x44, 0x65, 0x63, 0x6c, 0x1, 0x10, 0x0, 0x1, 0x4, 0x44, 0x61, 0x74, 0x61, 0x1, 0x10, 0x0, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0x10, 0x0, 0x0, 0x0, 0x18, 0xff, 0x9d, 0x2, 0x1, 0x1, 0xa, 0x5b, 0x5d, 0x61, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x1, 0xff, 0x9e, 0x0, 0x1, 0x10, 0x0, 0x0, 0x2b, 0xff, 0x9f, 0x3, 0x1, 0x1, 0x5, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x1, 0xff, 0xa0, 0x0, 0x1, 0x2, 0x1, 0x5, 0x4f, 0x75, 0x74, 0x65, 0x72, 0x1, 0xff, 0xa0, 0x0, 0x1, 0x7, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x1, 0xff, 0xa2, 0x0, 0x0, 0x0, 0x27, 0xff, 0xa1, 0x4, 0x1, 0x1, 0x16, 0x6d, 0x61, 0x70, 0x5b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x1, 0xff, 0xa2, 0x0, 0x1, 0xc, 0x1, 0xff, 0x9c, 0x0, 0x0, 0x20, 0xff, 0xa7, 0x2, 0x1, 0x1, 0x11, 0x5b, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x1, 0xff, 0xa8, 0x0, 0x1, 0xff, 0xa4, 0x0, 0x0, 0x41, 0xff, 0xa3, 0x3, 0x1, 0x2, 0xff, 0xa4, 0x0, 0x1, 0x5, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xff, 0x9a, 0x0, 0x1, 0x4, 0x50, 0x61, 0x74, 0x68, 0x1, 0xff, 0xa6, 0x0, 0x1, 0x7, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x94, 0x0, 0x1, 0x6, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x1, 0x4, 0x0, 0x0, 0x0, 0x36, 0xff, 0xa5, 0x3, 0x1, 0x1, 0x8, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4c, 0x69, 0x74, 0x1, 0xff, 0xa6, 0x0, 0x1, 0x3, 0x1, 0x8, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x6f, 0x73, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4b, 0x69, 0x6e, 0x64, 0x1, 0x4, 0x0, 0x1, 0x5, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1, 0xc, 0x0, 0x0, 0x0, 0x1b, 0xff, 0xa9, 0x2, 0x1, 0x1, 0xc, 0x5b, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x1, 0xff, 0xaa, 0x0, 0x1, 0xff, 0x9a, 0x0, 0x0, 0x22, 0xff, 0xab, 0x2, 0x1, 0x1, 0x13, 0x5b, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1, 0xff, 0xac, 0x0, 0x1, 0xff, 0x94, 0x0, 0x0, 0x20, 0xff, 0xaf, 0x2, 0x1, 0x1, 0x11, 0x5b, 0x5d, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2e, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x1, 0xff, 0xb0, 0x0, 0x1, 0xff, 0xae, 0x0, 0x0, 0x28, 0xff, 0xad, 0x3, 0x1, 0x1, 0x9, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x1, 0xff, 0xae, 0x0, 0x1, 0x2, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x3, 0x4e, 0x75, 0x6d, 0x1, 0x4, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xb3, 0x4, 0x1, 0x1, 0xf, 0x6d, 0x61, 0x70, 0x5b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5d, 0x62, 0x6f, 0x6f, 0x6c, 0x1, 0xff, 0xb4, 0x0, 0x1, 0xc, 0x1, 0x2, 0x0, 0x0, 0xff, 0xae, 0xff, 0x8e, 0x1, 0x5, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x1, 0x5, 0x61, 0x6d, 0x64, 0x36, 0x34, 0x1, 0x2, 0x1, 0x26, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x67, 0x6f, 0x1, 0x2, 0xfe, 0x1, 0x42, 0x1, 0x1, 0xfe, 0x1, 0x52, 0x1, 0x6, 0x70, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x0, 0x1, 0x3, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb5, 0x3, 0x1, 0x1, 0x7, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0x1, 0xff, 0xb6, 0x0, 0x1, 0x6, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x6, 0x54, 0x6f, 0x6b, 0x50, 0x6f, 0x73, 0x1, 0x4, 0x0, 0x1, 0x3, 0x54, 0x6f, 0x6b, 0x1, 0x4, 0x0, 0x1, 0x6, 0x4c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x1, 0x4, 0x0, 0x1, 0x5, 0x53, 0x70, 0x65, 0x63, 0x73, 0x1, 0xff, 0xb8, 0x0, 0x1, 0x6, 0x52, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x1, 0x4, 0x0, 0x0, 0x0, 0x18, 0xff, 0xb7, 0x2, 0x1, 0x1, 0xa, 0x5b, 0x5d, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x70, 0x65, 0x63, 0x1, 0xff, 0xb8, 0x0, 0x1, 0x10, 0x0, 0x0, 0xff, 0xb0, 0xff, 0xb6, 0x58, 0x2, 0xfe, 0x1, 0x62, 0x1, 0xff, 0x96, 0x2, 0x1, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0xff, 0xa4, 0x3b, 0x3, 0x1, 0xfe, 0x1, 0x70, 0x1, 0x12, 0x1, 0x30, 0x22, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x78, 0x2f, 0x70, 0x6b, 0x67, 0x73, 0x69, 0x74, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x22, 0x0, 0x0, 0x0, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb9, 0x3, 0x1, 0x1, 0x8, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0x1, 0xff, 0xba, 0x0, 0x1, 0x5, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x4, 0x52, 0x65, 0x63, 0x76, 0x1, 0xff, 0xbc, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xff, 0x9a, 0x0, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0xff, 0xc2, 0x0, 0x1, 0x4, 0x42, 0x6f, 0x64, 0x79, 0x1, 0xff, 0xc4, 0x0, 0x0, 0x0, 0x39, 0xff, 0xbb, 0x3, 0x1, 0x1, 0x9, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x1, 0xff, 0xbc, 0x0, 0x1, 0x3, 0x1, 0x7, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4c, 0x69, 0x73, 0x74, 0x1, 0xff, 0xc0, 0x0, 0x1, 0x7, 0x43, 0x6c, 0x6f, 0x73, 0x69, 0x6e, 0x67, 0x1, 0x4, 0x0, 0x0, 0x0, 0x1b, 0xff, 0xbf, 0x2, 0x1, 0x1, 0xc, 0x5b, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x1, 0xff, 0xc0, 0x0, 0x1, 0xff, 0xbe, 0x0, 0x0, 0x3f, 0xff, 0xbd, 0x3, 0x1, 0x2, 0xff, 0xbe, 0x0, 0x1, 0x5, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x5, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x1, 0xff, 0xaa, 0x0, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0x10, 0x0, 0x1, 0x3, 0x54, 0x61, 0x67, 0x1, 0xff, 0xa6, 0x0, 0x1, 0x7, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x94, 0x0, 0x0, 0x0, 0x38, 0xff, 0xc1, 0x3, 0x1, 0x1, 0x8, 0x46, 0x75, 0x6e, 0x63, 0x54, 0x79, 0x70, 0x65, 0x1, 0xff, 0xc2, 0x0, 0x1, 0x3, 0x1, 0x4, 0x46, 0x75, 0x6e, 0x63, 0x1, 0x4, 0x0, 0x1, 0x6, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1, 0xff, 0xbc, 0x0, 0x1, 0x7, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x1, 0xff, 0xbc, 0x0, 0x0, 0x0, 0x37, 0xff, 0xc3, 0x3, 0x1, 0x1, 0x9, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x6d, 0x74, 0x1, 0xff, 0xc4, 0x0, 0x1, 0x3, 0x1, 0x6, 0x4c, 0x62, 0x72, 0x61, 0x63, 0x65, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4c, 0x69, 0x73, 0x74, 0x1, 0xff, 0xc6, 0x0, 0x1, 0x6, 0x52, 0x62, 0x72, 0x61, 0x63, 0x65, 0x1, 0x4, 0x0, 0x0, 0x0, 0x18, 0xff, 0xc5, 0x2, 0x1, 0x1, 0xa, 0x5b, 0x5d, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x74, 0x6d, 0x74, 0x1, 0xff, 0xc6, 0x0, 0x1, 0x10, 0x0, 0x0, 0xfe, 0x15, 0x37, 0xff, 0xba, 0xff, 0xba, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x1, 0xd4, 0x1, 0x19, 0x2f, 0x2f, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x0, 0x0, 0x2, 0x1, 0xfe, 0x2, 0x12, 0x1, 0x9, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x46, 0x1, 0x1, 0xa, 0x1, 0x9, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x6, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x2, 0x8, 0x1, 0x1, 0xfe, 0x2, 0x24, 0x2, 0xfe, 0x2, 0x26, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x2, 0x2a, 0x1, 0x3, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x53, 0x74, 0x6d, 0x74, 0xff, 0xc7, 0x3, 0x1, 0x1, 0xa, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x53, 0x74, 0x6d, 0x74, 0x1, 0xff, 0xc8, 0x0, 0x1, 0x4, 0x1, 0x3, 0x4c, 0x68, 0x73, 0x1, 0xff, 0xca, 0x0, 0x1, 0x6, 0x54, 0x6f, 0x6b, 0x50, 0x6f, 0x73, 0x1, 0x4, 0x0, 0x1, 0x3, 0x54, 0x6f, 0x6b, 0x1, 0x4, 0x0, 0x1, 0x3, 0x52, 0x68, 0x73, 0x1, 0xff, 0xca, 0x0, 0x0, 0x0, 0x18, 0xff, 0xc9, 0x2, 0x1, 0x1, 0xa, 0x5b, 0x5d, 0x61, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x1, 0xff, 0xca, 0x0, 0x1, 0x10, 0x0, 0x0, 0xfe, 0x3, 0x2f, 0xff, 0xc8, 0xff, 0xa1, 0x1, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x25, 0x1, 0xfe, 0x2, 0x58, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x1, 0x8, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x2, 0x0, 0x0, 0x1, 0xfe, 0x2, 0x60, 0x1, 0x5e, 0x1, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x74, 0xff, 0xcb, 0x3, 0x1, 0x1, 0xc, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x74, 0x1, 0xff, 0xcc, 0x0, 0x1, 0x5, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0x10, 0x0, 0x1, 0x6, 0x4c, 0x62, 0x72, 0x61, 0x63, 0x65, 0x1, 0x4, 0x0, 0x1, 0x4, 0x45, 0x6c, 0x74, 0x73, 0x1, 0xff, 0xca, 0x0, 0x1, 0x6, 0x52, 0x62, 0x72, 0x61, 0x63, 0x65, 0x1, 0x4, 0x0, 0x1, 0xa, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x1, 0x2, 0x0, 0x0, 0x0, 0x26, 0xff, 0xcc, 0x22, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xa, 0x1, 0xfe, 0x2, 0x66, 0x1, 0x3, 0x41, 0x70, 0x70, 0x0, 0x1, 0xfe, 0x2, 0x6c, 0x2, 0xfe, 0x2, 0x6e, 0x0, 0x0, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x53, 0x74, 0x6d, 0x74, 0xff, 0xc8, 0x3d, 0x1, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x78, 0x70, 0x72, 0xff, 0xcd, 0x3, 0x1, 0x1, 0xc, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x78, 0x70, 0x72, 0x1, 0xff, 0xce, 0x0, 0x1, 0x2, 0x1, 0x1, 0x58, 0x1, 0x10, 0x0, 0x1, 0x3, 0x53, 0x65, 0x6c, 0x1, 0xff, 0x9a, 0x0, 0x0, 0x0, 0x6e, 0xff, 0xce, 0x41, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x25, 0x1, 0xfe, 0x2, 0x74, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x1, 0x8, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x2, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x2, 0x7c, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x0, 0x0, 0x1, 0xfe, 0x2, 0x86, 0x1, 0x54, 0x1, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4c, 0x69, 0x74, 0xff, 0xa6, 0x10, 0x1, 0xfe, 0x2, 0x8a, 0x1, 0x12, 0x1, 0x7, 0x22, 0x67, 0x72, 0x65, 0x65, 0x74, 0x22, 0x0, 0x0, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x53, 0x74, 0x6d, 0x74, 0xff, 0xc8, 0x79, 0x1, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x8, 0x1, 0xfe, 0x2, 0x9c, 0x1, 0x1, 0x5f, 0x0, 0x1, 0xfe, 0x2, 0xa0, 0x1, 0x54, 0x1, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x72, 0xff, 0xcf, 0x3, 0x1, 0x1, 0x8, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x72, 0x1, 0xff, 0xd0, 0x0, 0x1, 0x5, 0x1, 0x3, 0x46, 0x75, 0x6e, 0x1, 0x10, 0x0, 0x1, 0x6, 0x4c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x1, 0x4, 0x0, 0x1, 0x4, 0x41, 0x72, 0x67, 0x73, 0x1, 0xff, 0xca, 0x0, 0x1, 0x8, 0x45, 0x6c, 0x6c, 0x69, 0x70, 0x73, 0x69, 0x73, 0x1, 0x4, 0x0, 0x1, 0x6, 0x52, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x1, 0x4, 0x0, 0x0, 0x0, 0xfe, 0x1, 0xf, 0xff, 0xd0, 0xfe, 0x1, 0x9, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x78, 0x70, 0x72, 0xff, 0xce, 0x40, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x25, 0x1, 0xfe, 0x2, 0xa4, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x1, 0x8, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x2, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x2, 0xac, 0x1, 0x3, 0x52, 0x75, 0x6e, 0x0, 0x0, 0x1, 0xfe, 0x2, 0xb2, 0x1, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x74, 0xff, 0xcc, 0x42, 0x1, 0xe, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x41, 0x72, 0x72, 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, 0xff, 0xd1, 0x3, 0x1, 0x1, 0x9, 0x41, 0x72, 0x72, 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, 0x1, 0xff, 0xd2, 0x0, 0x1, 0x3, 0x1, 0x6, 0x4c, 0x62, 0x72, 0x61, 0x63, 0x6b, 0x1, 0x4, 0x0, 0x1, 0x3, 0x4c, 0x65, 0x6e, 0x1, 0x10, 0x0, 0x1, 0x3, 0x45, 0x6c, 0x74, 0x1, 0x10, 0x0, 0x0, 0x0, 0x50, 0xff, 0xd2, 0x21, 0x1, 0xfe, 0x2, 0xb4, 0x2, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xd, 0x1, 0xfe, 0x2, 0xb8, 0x1, 0x6, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x0, 0x0, 0x1, 0xfe, 0x2, 0xc4, 0x1, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4c, 0x69, 0x74, 0xff, 0xa6, 0x10, 0x1, 0xfe, 0x2, 0xc6, 0x1, 0x12, 0x1, 0x7, 0x22, 0x67, 0x72, 0x65, 0x65, 0x74, 0x22, 0x0, 0x1, 0xfe, 0x2, 0xd4, 0x0, 0x2, 0xfe, 0x2, 0xd6, 0x0, 0x0, 0x1, 0xfe, 0x2, 0xda, 0x0, 0x0, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xba, 0xff, 0x91, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x2, 0xe0, 0x1, 0x15, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x0, 0x0, 0x2, 0x1, 0xfe, 0x3, 0x16, 0x1, 0x8, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x46, 0x1, 0x1, 0xa, 0x1, 0x8, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1a, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x4, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x3, 0xc, 0x1, 0x1, 0xfe, 0x3, 0x26, 0x2, 0xfe, 0x3, 0x28, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x3, 0x2c, 0x1, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x53, 0x74, 0x6d, 0x74, 0xff, 0xd3, 0x3, 0x1, 0x1, 0x8, 0x45, 0x78, 0x70, 0x72, 0x53, 0x74, 0x6d, 0x74, 0x1, 0xff, 0xd4, 0x0, 0x1, 0x1, 0x1, 0x1, 0x58, 0x1, 0x10, 0x0, 0x0, 0x0, 0x5c, 0xff, 0xd4, 0x53, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x72, 0xff, 0xd0, 0x40, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x78, 0x70, 0x72, 0xff, 0xce, 0x21, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x8, 0x1, 0xfe, 0x3, 0x5a, 0x1, 0x1, 0x70, 0x0, 0x1, 0x1, 0xfe, 0x3, 0x5e, 0x1, 0x1, 0x46, 0x0, 0x0, 0x1, 0xfe, 0x3, 0x60, 0x3, 0xfe, 0x3, 0x62, 0x0, 0x0, 0x1, 0xfe, 0x3, 0x8c, 0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x3, 0x1, 0xfe, 0x1, 0x70, 0x1, 0x12, 0x1, 0x30, 0x22, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x78, 0x2f, 0x70, 0x6b, 0x67, 0x73, 0x69, 0x74, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x22, 0x0, 0x0, 0x2, 0x6, 0x1, 0x3, 0x1, 0x2, 0x1, 0x36, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, 0x32, 0x30, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x6f, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e, 0x0, 0x1, 0x70, 0x1, 0x35, 0x2f, 0x2f, 0x20, 0x55, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x42, 0x53, 0x44, 0x2d, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x0, 0x1, 0xff, 0xdc, 0x1, 0x31, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x1, 0xd4, 0x1, 0x19, 0x2f, 0x2f, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x2, 0x30, 0x1, 0x12, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x2, 0xe0, 0x1, 0x15, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x3, 0x32, 0x1, 0x12, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x0, 0x0, 0x1, 0x2, 0x1, 0xfe, 0x3, 0x68, 0x1, 0xa, 0x2f, 0x2f, 0x20, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x3a, 0x0, 0x1, 0xfe, 0x3, 0x80, 0x1, 0x5, 0x2f, 0x2f, 0x20, 0x6f, 0x6b, 0x0, 0x0, 0x0, 0x1, 0x3, 0xc, 0x18, 0x1e, 0x1, 0x2, 0x1, 0x8, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x46, 0x1, 0x4, 0x0, 0x1, 0x9, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x46, 0x0, 0x0, 0x1, 0x1b, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x2f, 0x70, 0x2e, 0x67, 0x6f, 0x1, 0x1, 0x1, 0x2, 0x1, 0xfe, 0x4, 0xd2, 0x1, 0x39, 0x2f, 0x2f, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x20, 0x70, 0x20, 0x69, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x74, 0x0, 0x1, 0xfe, 0x5, 0x46, 0x1, 0x35, 0x2f, 0x2f, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x61, 0x79, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x27, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x2e, 0x0, 0x0, 0x1, 0xfe, 0x5, 0xb2, 0x1, 0x1, 0xfe, 0x5, 0xc2, 0x1, 0x1, 0x70, 0x0, 0x1, 0xd, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0x59, 0x2, 0xfe, 0x5, 0xc8, 0x1, 0xff, 0x96, 0x1, 0xfe, 0x5, 0xd6, 0x1, 0x2, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0xff, 0xa4, 0x10, 0x3, 0x1, 0xfe, 0x5, 0xdc, 0x1, 0x12, 0x1, 0x5, 0x22, 0x66, 0x6d, 0x74, 0x22, 0x0, 0x0, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0xff, 0xa4, 0x11, 0x3, 0x1, 0xfe, 0x5, 0xea, 0x1, 0x12, 0x1, 0x6, 0x22, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x0, 0x0, 0x1, 0xfe, 0x5, 0xf8, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0x78, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x5, 0xfe, 0x1, 0x8, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x0, 0x0, 0x1, 0xfe, 0x6, 0x10, 0x1, 0xff, 0x80, 0x2, 0x1, 0xe, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd5, 0x3, 0x1, 0x1, 0x9, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x70, 0x65, 0x63, 0x1, 0xff, 0xd6, 0x0, 0x1, 0x5, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x5, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x1, 0xff, 0xaa, 0x0, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0x10, 0x0, 0x1, 0x6, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1, 0xff, 0xca, 0x0, 0x1, 0x7, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x94, 0x0, 0x0, 0x0, 0x45, 0xff, 0xd6, 0x41, 0x2, 0x1, 0x1, 0xfe, 0x6, 0x1c, 0x1, 0x1, 0x43, 0x1, 0x1, 0x4, 0x1, 0x1, 0x43, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x0, 0x0, 0x0, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4c, 0x69, 0x74, 0xff, 0xa6, 0xa, 0x1, 0xfe, 0x6, 0x24, 0x1, 0xa, 0x1, 0x1, 0x31, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xff, 0xa5, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x6, 0x2a, 0x1, 0x6, 0x2f, 0x2f, 0x20, 0x76, 0x61, 0x72, 0x0, 0x0, 0x1, 0xfe, 0x6, 0x38, 0x1, 0xff, 0xaa, 0x2, 0x1, 0xe, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd6, 0x78, 0x2, 0x1, 0x1, 0xfe, 0x6, 0x40, 0x1, 0x1, 0x56, 0x1, 0x1, 0x8, 0x1, 0x1, 0x56, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x10, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x2, 0x0, 0x0, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x72, 0xff, 0xd0, 0x41, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x29, 0x1, 0xfe, 0x6, 0x48, 0x1, 0x5, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x1, 0x1, 0xa, 0x1, 0x5, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x4, 0x0, 0x0, 0x1, 0xfe, 0x6, 0x52, 0x3, 0xfe, 0x6, 0x54, 0x0, 0x0, 0x0, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xba, 0xff, 0xb1, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x6, 0x5a, 0x1, 0x10, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x0, 0x0, 0x2, 0x1, 0xfe, 0x6, 0x86, 0x1, 0x1, 0x46, 0x1, 0x1, 0xa, 0x1, 0x1, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x16, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x6, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x6, 0x7c, 0x1, 0x1, 0xfe, 0x6, 0x88, 0x1, 0x1, 0x2, 0x1, 0x1, 0xfe, 0x6, 0x8a, 0x1, 0x1, 0x74, 0x1, 0x1, 0x8, 0x1, 0x1, 0x74, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x78, 0x70, 0x72, 0xff, 0xce, 0x27, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xb, 0x1, 0xfe, 0x6, 0x8e, 0x1, 0x4, 0x74, 0x69, 0x6d, 0x65, 0x0, 0x1, 0x1, 0xfe, 0x6, 0x98, 0x1, 0x4, 0x54, 0x69, 0x6d, 0x65, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x6, 0xa0, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0x73, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x18, 0x1, 0x7, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x0, 0x0, 0x1, 0xfe, 0x7, 0x28, 0x1, 0xff, 0xa8, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd7, 0x3, 0x1, 0x1, 0x8, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x1, 0xff, 0xd8, 0x0, 0x1, 0x5, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xff, 0x9a, 0x0, 0x1, 0x6, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x1, 0x4, 0x0, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0x10, 0x0, 0x1, 0x7, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x94, 0x0, 0x0, 0x0, 0x40, 0xff, 0xd8, 0x3c, 0x2, 0x1, 0xfe, 0x7, 0x32, 0x1, 0x1, 0x54, 0x1, 0x1, 0x6, 0x1, 0x1, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x0, 0x0, 0x2, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xa, 0x1, 0xfe, 0x7, 0x36, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xff, 0xa9, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x40, 0x1, 0xf, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x0, 0x0, 0x1, 0xfe, 0x7, 0x60, 0x1, 0xff, 0x80, 0x2, 0x1, 0xe, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd6, 0x73, 0x2, 0x1, 0x1, 0xfe, 0x7, 0x6c, 0x1, 0x2, 0x43, 0x54, 0x1, 0x1, 0x4, 0x1, 0x2, 0x43, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x2a, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xc, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x21, 0x1, 0xfe, 0x7, 0x72, 0x1, 0x1, 0x54, 0x1, 0x1, 0x6, 0x1, 0x1, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x0, 0x0, 0x1, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4c, 0x69, 0x74, 0xff, 0xa6, 0xa, 0x1, 0xfe, 0x7, 0x7a, 0x1, 0xa, 0x1, 0x1, 0x33, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xff, 0x8c, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x80, 0x1, 0xf, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x0, 0x0, 0x1, 0xfe, 0x7, 0xa0, 0x1, 0xff, 0xaa, 0x2, 0x1, 0xe, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd6, 0x56, 0x2, 0x1, 0x1, 0xfe, 0x7, 0xa8, 0x1, 0x2, 0x56, 0x54, 0x1, 0x1, 0x8, 0x1, 0x2, 0x56, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x32, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xe, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x21, 0x1, 0xfe, 0x7, 0xae, 0x1, 0x1, 0x54, 0x1, 0x1, 0x6, 0x1, 0x1, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x0, 0x0, 0x0, 0x0, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xba, 0xff, 0x80, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x7, 0xb4, 0x1, 0xb, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x0, 0x0, 0x2, 0x1, 0xfe, 0x7, 0xd6, 0x1, 0x2, 0x54, 0x46, 0x1, 0x1, 0xa, 0x1, 0x2, 0x54, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x38, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x10, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x7, 0xcc, 0x1, 0x1, 0xfe, 0x7, 0xda, 0x2, 0xfe, 0x7, 0xdc, 0x0, 0x1, 0x2, 0x1, 0x3, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x21, 0x1, 0xfe, 0x7, 0xe0, 0x1, 0x1, 0x54, 0x1, 0x1, 0x6, 0x1, 0x1, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xba, 0xff, 0xa4, 0x1, 0x1, 0x2, 0x1, 0xfe, 0x8, 0x8, 0x1, 0x9, 0x2f, 0x2f, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x0, 0x1, 0xfe, 0x8, 0x1c, 0x1, 0x32, 0x2f, 0x2f, 0x20, 0x42, 0x55, 0x47, 0x28, 0x75, 0x69, 0x64, 0x29, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x65, 0x64, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x8, 0x8c, 0x1, 0x1, 0x3, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x21, 0x1, 0xfe, 0x8, 0x8e, 0x1, 0x1, 0x54, 0x1, 0x1, 0x6, 0x1, 0x1, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x8, 0x90, 0x0, 0x1, 0x1, 0xfe, 0x8, 0x94, 0x1, 0x1, 0x4d, 0x0, 0x1, 0x1, 0xfe, 0x8, 0x82, 0x1, 0x1, 0xfe, 0x8, 0x96, 0x2, 0xfe, 0x8, 0x98, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xff, 0xf4, 0x2, 0xfe, 0x8, 0xf0, 0x1, 0xff, 0xa8, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd8, 0x73, 0x2, 0x1, 0xfe, 0x8, 0xfa, 0x1, 0x2, 0x53, 0x31, 0x1, 0x1, 0x6, 0x1, 0x2, 0x53, 0x31, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x12, 0x0, 0x0, 0x2, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0xff, 0xd9, 0x3, 0x1, 0x1, 0xa, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x1, 0xff, 0xda, 0x0, 0x1, 0x3, 0x1, 0x6, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x1, 0x4, 0x0, 0x1, 0x6, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1, 0xff, 0xbc, 0x0, 0x1, 0xa, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x1, 0x2, 0x0, 0x0, 0x0, 0x65, 0xff, 0xda, 0x61, 0x1, 0xfe, 0x9, 0x0, 0x1, 0x1, 0xfe, 0x9, 0xe, 0x1, 0x1, 0x2, 0x1, 0x1, 0xfe, 0x9, 0x14, 0x1, 0x1, 0x46, 0x1, 0x1, 0x8, 0x1, 0x1, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x14, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xa, 0x1, 0xfe, 0x9, 0x18, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x0, 0x2, 0x1, 0x1, 0x1, 0xfe, 0x9, 0x20, 0x1, 0x8, 0x2f, 0x2f, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x9, 0x32, 0x0, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xff, 0xe2, 0x2, 0xfe, 0x9, 0x38, 0x1, 0xff, 0xa8, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd8, 0xff, 0xc6, 0x2, 0x1, 0xfe, 0x9, 0x42, 0x1, 0x2, 0x75, 0x73, 0x1, 0x1, 0x6, 0x1, 0x2, 0x75, 0x73, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x50, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x16, 0x0, 0x0, 0x2, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0xff, 0xda, 0xff, 0x8c, 0x1, 0xfe, 0x9, 0x48, 0x1, 0x1, 0xfe, 0x9, 0x56, 0x1, 0x2, 0x2, 0x1, 0x1, 0xfe, 0x9, 0x5c, 0x1, 0x1, 0x47, 0x1, 0x1, 0x8, 0x1, 0x1, 0x47, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x18, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xb, 0x1, 0xfe, 0x9, 0x60, 0x1, 0x4, 0x62, 0x6f, 0x6f, 0x6c, 0x0, 0x0, 0x2, 0x1, 0x1, 0xfe, 0x9, 0x6c, 0x1, 0x1, 0x75, 0x1, 0x1, 0x8, 0x1, 0x1, 0x75, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1a, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xa, 0x1, 0xfe, 0x9, 0x70, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x0, 0x0, 0x1, 0xfe, 0x9, 0x78, 0x0, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xfe, 0x1, 0x51, 0x2, 0xfe, 0x9, 0x7c, 0x1, 0xff, 0xa8, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd8, 0xfe, 0x1, 0x34, 0x2, 0x1, 0xfe, 0x9, 0x86, 0x1, 0x2, 0x53, 0x32, 0x1, 0x1, 0x6, 0x1, 0x2, 0x53, 0x32, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x5e, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1c, 0x0, 0x0, 0x2, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0xff, 0xda, 0xff, 0xfa, 0x1, 0xfe, 0x9, 0x8c, 0x1, 0x1, 0xfe, 0x9, 0x9a, 0x1, 0x3, 0x3, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x23, 0x1, 0xfe, 0x9, 0xa0, 0x1, 0x2, 0x53, 0x31, 0x1, 0x1, 0x6, 0x1, 0x2, 0x53, 0x31, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x12, 0x0, 0x0, 0x2, 0x1, 0x1, 0x1, 0xfe, 0x9, 0xa6, 0x1, 0x12, 0x2f, 0x2f, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x0, 0x0, 0x0, 0x3, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x23, 0x1, 0xfe, 0x9, 0xce, 0x1, 0x2, 0x75, 0x73, 0x1, 0x1, 0x6, 0x1, 0x2, 0x75, 0x73, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x50, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x16, 0x0, 0x0, 0x2, 0x1, 0x1, 0x1, 0xfe, 0x9, 0xd4, 0x1, 0x1e, 0x2f, 0x2f, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x2c, 0x20, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x0, 0x0, 0x0, 0x2, 0x1, 0x1, 0xfe, 0xa, 0x14, 0x1, 0x1, 0x48, 0x1, 0x1, 0x8, 0x1, 0x1, 0x48, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1e, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xa, 0x1, 0xfe, 0xa, 0x1a, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x0, 0x0, 0x1, 0xfe, 0xa, 0x22, 0x0, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xfe, 0x1, 0xf, 0x1, 0x1, 0x1, 0x1, 0xfe, 0xa, 0x28, 0x1, 0x15, 0x2f, 0x2f, 0x20, 0x49, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x0, 0x0, 0x1, 0xfe, 0xa, 0x54, 0x1, 0xff, 0xa8, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd8, 0x7b, 0x2, 0x1, 0xfe, 0xa, 0x5e, 0x1, 0x1, 0x49, 0x1, 0x1, 0x6, 0x1, 0x1, 0x49, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x6c, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x20, 0x0, 0x0, 0x2, 0x12, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0xff, 0xdb, 0x3, 0x1, 0x1, 0xd, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x1, 0xff, 0xdc, 0x0, 0x1, 0x3, 0x1, 0x9, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x1, 0x4, 0x0, 0x1, 0x7, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x1, 0xff, 0xbc, 0x0, 0x1, 0xa, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x1, 0x2, 0x0, 0x0, 0x0, 0x58, 0xff, 0xdc, 0x54, 0x1, 0xfe, 0xa, 0x62, 0x1, 0x1, 0xfe, 0xa, 0x76, 0x1, 0x1, 0x2, 0x1, 0x1, 0xfe, 0xa, 0x7c, 0x1, 0x2, 0x4d, 0x31, 0x1, 0x1, 0xa, 0x1, 0x2, 0x4d, 0x31, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x0, 0x0, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x54, 0x79, 0x70, 0x65, 0xff, 0xc2, 0xb, 0x2, 0x1, 0xfe, 0xa, 0x80, 0x2, 0xfe, 0xa, 0x82, 0x0, 0x0, 0x0, 0x1, 0xfe, 0xa, 0x86, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x2, 0x3, 0x1, 0xfe, 0x5, 0xdc, 0x1, 0x12, 0x1, 0x5, 0x22, 0x66, 0x6d, 0x74, 0x22, 0x0, 0x0, 0x3, 0x1, 0xfe, 0x5, 0xea, 0x1, 0x12, 0x1, 0x6, 0x22, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x0, 0x0, 0x2, 0x10, 0x1, 0x3, 0x1, 0xfe, 0x3, 0x92, 0x1, 0x36, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, 0x32, 0x30, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x6f, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e, 0x0, 0x1, 0xfe, 0x4, 0x0, 0x1, 0x35, 0x2f, 0x2f, 0x20, 0x55, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x42, 0x53, 0x44, 0x2d, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x0, 0x1, 0xfe, 0x4, 0x6c, 0x1, 0x31, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x0, 0x0, 0x1, 0x2, 0x1, 0xfe, 0x4, 0xd2, 0x1, 0x39, 0x2f, 0x2f, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x20, 0x70, 0x20, 0x69, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x74, 0x0, 0x1, 0xfe, 0x5, 0x46, 0x1, 0x35, 0x2f, 0x2f, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x61, 0x79, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x27, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x2e, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x5, 0xfe, 0x1, 0x8, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x6, 0x2a, 0x1, 0x6, 0x2f, 0x2f, 0x20, 0x76, 0x61, 0x72, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x6, 0x5a, 0x1, 0x10, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x6, 0xce, 0x1, 0x12, 0x2f, 0x2f, 0x20, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x18, 0x1, 0x7, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x40, 0x1, 0xf, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x80, 0x1, 0xf, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x7, 0xb4, 0x1, 0xb, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x0, 0x0, 0x1, 0x2, 0x1, 0xfe, 0x8, 0x8, 0x1, 0x9, 0x2f, 0x2f, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x0, 0x1, 0xfe, 0x8, 0x1c, 0x1, 0x32, 0x2f, 0x2f, 0x20, 0x42, 0x55, 0x47, 0x28, 0x75, 0x69, 0x64, 0x29, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x65, 0x64, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x8, 0xa4, 0x1, 0x14, 0x2f, 0x2f, 0x20, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x9, 0x20, 0x1, 0x8, 0x2f, 0x2f, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x9, 0xa6, 0x1, 0x12, 0x2f, 0x2f, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x9, 0xd4, 0x1, 0x1e, 0x2f, 0x2f, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x2c, 0x20, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0xa, 0x28, 0x1, 0x15, 0x2f, 0x2f, 0x20, 0x49, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x0, 0x0, 0x0, 0x1, 0x6, 0x1c, 0x26, 0x4c, 0x56, 0x5a, 0x68, 0x1, 0xc, 0x1, 0x1, 0x43, 0x0, 0x1, 0x2, 0x43, 0x54, 0x1, 0xc, 0x0, 0x1, 0x1, 0x46, 0x1, 0x6, 0x0, 0x1, 0x1, 0x49, 0x1, 0x20, 0x0, 0x1, 0x2, 0x53, 0x31, 0x1, 0x12, 0x0, 0x1, 0x2, 0x53, 0x32, 0x1, 0x1c, 0x0, 0x1, 0x1, 0x54, 0x1, 0xa, 0x0, 0x1, 0x2, 0x54, 0x46, 0x1, 0x10, 0x0, 0x1, 0x1, 0x56, 0x1, 0x2, 0x0, 0x1, 0x2, 0x56, 0x54, 0x1, 0xe, 0x0, 0x1, 0x5, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x1, 0x4, 0x0, 0x1, 0x2, 0x75, 0x73, 0x1, 0x16, 0x0, 0x0, 0x0} + Documentation = &internal.Documentation{ + Synopsis: Synopsis, + GOOS: GOOS, + GOARCH: GOARCH, + HTML: DocumentationHTML, + Source: DocumentationSource, + } +) diff --git a/internal/testing/sample/gen_documentation.go b/internal/testing/sample/gen_documentation.go new file mode 100644 index 00000000..da5477ec --- /dev/null +++ b/internal/testing/sample/gen_documentation.go @@ -0,0 +1,85 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// Run this to generate documentation.go. + +package main + +import ( + "context" + "fmt" + "go/parser" + "go/token" + "log" + "os" + + "golang.org/x/pkgsite/internal/godoc" + "golang.org/x/pkgsite/internal/source" + "golang.org/x/pkgsite/internal/testing/sample" +) + +func main() { + ctx := context.Background() + fset := token.NewFileSet() + pkgs, err := parser.ParseDir(fset, "../../godoc/testdata/p", nil, parser.ParseComments) + if err != nil { + log.Fatal(err) + } + p := godoc.NewPackage(fset, sample.GOOS, sample.GOARCH, nil) + for _, pkg := range pkgs { + for _, f := range pkg.Files { + p.AddFile(f, true) + } + } + src, err := p.Encode(ctx) + if err != nil { + log.Fatal(err) + } + si := source.NewGitHubInfo(sample.ModulePath, "", "abcde") + mi := &godoc.ModuleInfo{ + ModulePath: sample.ModulePath, + ResolvedVersion: sample.VersionString, + ModulePackages: nil, + } + _, _, html, err := p.Render(ctx, "p", si, mi, "", "") + if err != nil { + log.Fatal(err) + } + + f, err := os.Create("documentation.gen.go") + if err != nil { + log.Fatal(err) + } + fmt.Fprintf(f, ` +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sample + +import ( + "github.com/google/safehtml/testconversions" + "golang.org/x/pkgsite/internal" +) + + + +var ( + DocumentationHTML = testconversions.MakeHTMLForTest(%s) + DocumentationSource = %#v + Documentation = &internal.Documentation{ + Synopsis: Synopsis, + GOOS: GOOS, + GOARCH: GOARCH, + HTML: DocumentationHTML, + Source: DocumentationSource, + } +) +`, "`"+html.String()+"`", src) + if err := f.Close(); err != nil { + log.Fatal(err) + } +} diff --git a/internal/testing/sample/sample.go b/internal/testing/sample/sample.go index c35cde00..ca88902b 100644 --- a/internal/testing/sample/sample.go +++ b/internal/testing/sample/sample.go @@ -17,13 +17,14 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/licensecheck" - "github.com/google/safehtml/template" "golang.org/x/pkgsite/internal" "golang.org/x/pkgsite/internal/licenses" "golang.org/x/pkgsite/internal/source" "golang.org/x/pkgsite/internal/stdlib" ) +//go:generate go run gen_documentation.go + // These sample values can be used to construct test cases. var ( ModulePath = "github.com/valid/module_name" @@ -50,23 +51,16 @@ var ( }, Contents: []byte(`unknown`), } - DocumentationHTML = template.MustParseAndExecuteToHTML("This is the documentation HTML") - PackageName = "foo" - Suffix = "foo" - PackagePath = path.Join(ModulePath, Suffix) - V1Path = PackagePath - Imports = []string{"path/to/bar", "fmt"} - Synopsis = "This is a package synopsis" - ReadmeFilePath = "README.md" - ReadmeContents = "readme" - GOOS = "linux" - GOARCH = "amd64" - Documentation = &internal.Documentation{ - Synopsis: Synopsis, - HTML: DocumentationHTML, - GOOS: GOOS, - GOARCH: GOARCH, - } + PackageName = "foo" + Suffix = "foo" + PackagePath = path.Join(ModulePath, Suffix) + V1Path = PackagePath + Imports = []string{"path/to/bar", "fmt"} + Synopsis = "This is a package synopsis" + ReadmeFilePath = "README.md" + ReadmeContents = "readme" + GOOS = "linux" + GOARCH = "amd64" ) // LicenseCmpOpts are options to use when comparing licenses with the cmp package. @@ -146,6 +140,7 @@ func UnitForPackage(path, modulePath, version, name string, isRedistributable bo Documentation: &internal.Documentation{ Synopsis: Synopsis, HTML: DocumentationHTML, + Source: DocumentationSource, GOOS: GOOS, GOARCH: GOARCH, }, |
