💄 Added revision info into templates

This commit is contained in:
Maxim Lebedev 2023-03-15 05:16:21 +06:00
parent 9678e99140
commit 71ee3e4da4
Signed by: toby3d
GPG key ID: 1F14E25B7C119FC5
8 changed files with 274 additions and 182 deletions

View file

@ -39,29 +39,30 @@ func init() {
}
var messageKeyToIndex = map[string]int{
"%d subscribers": 4,
"%s logo": 0,
"Dead simple WebSub hub": 1,
"How to publish and consume?": 2,
"What the spec?": 3,
"%d subscribers": 5,
"%s logo": 1,
"Dead simple WebSub hub": 2,
"How to publish and consume?": 3,
"What the spec?": 4,
"version": 0,
}
var enIndex = []uint32{ // 6 elements
0x00000000, 0x0000000b, 0x00000022, 0x0000003e,
0x0000004d, 0x0000005f,
} // Size: 48 bytes
var enIndex = []uint32{ // 7 elements
0x00000000, 0x00000008, 0x00000013, 0x0000002a,
0x00000046, 0x00000055, 0x00000067,
} // Size: 52 bytes
const enData string = "" + // Size: 95 bytes
"\x02%[1]s logo\x02Dead simple WebSub hub\x02How to publish and consume?" +
"\x02What the spec?\x02%[1]d subscribers"
const enData string = "" + // Size: 103 bytes
"\x02version\x02%[1]s logo\x02Dead simple WebSub hub\x02How to publish an" +
"d consume?\x02What the spec?\x02%[1]d subscribers"
var ruIndex = []uint32{ // 6 elements
0x00000000, 0x00000015, 0x00000038, 0x0000006d,
0x00000083, 0x000000a0,
} // Size: 48 bytes
var ruIndex = []uint32{ // 7 elements
0x00000000, 0x0000000d, 0x00000022, 0x00000045,
0x0000007a, 0x00000090, 0x000000ad,
} // Size: 52 bytes
const ruData string = "" + // Size: 160 bytes
"\x02логотип %[1]s\x02Простейший хаб WebSub\x02Как публиковать и принимат" +
"ь?\x02В чём спека?\x02%[1]d подписчиков"
const ruData string = "" + // Size: 173 bytes
"\x02версия\x02логотип %[1]s\x02Простейший хаб WebSub\x02Как публиковать " +
"и принимать?\x02В чём спека?\x02%[1]d подписчиков"
// Total table size 351 bytes (0KiB); checksum: D963980B
// Total table size 380 bytes (0KiB); checksum: 7D8C2E8B

View file

@ -1,6 +1,13 @@
{
"language": "en",
"messages": [
{
"id": "version",
"message": "version",
"translation": "version",
"translatorComment": "Copied from source.",
"fuzzy": true
},
{
"id": "{Name} logo",
"message": "{Name} logo",

View file

@ -1,6 +1,11 @@
{
"language": "ru",
"messages": [
{
"id": "version",
"message": "version",
"translation": "версия"
},
{
"id": "{Name} logo",
"message": "{Name} logo",

View file

@ -1,6 +1,11 @@
{
"language": "ru",
"messages": [
{
"id": "version",
"message": "version",
"translation": "версия"
},
{
"id": "{Name} logo",
"message": "{Name} logo",

View file

@ -1,4 +1,6 @@
{% import (
"runtime/debug"
"golang.org/x/text/language"
"golang.org/x/text/message"
) %}
@ -81,6 +83,53 @@ func NewBaseOf(lang language.Tag, name string) *BaseOf {
<body class="page__body cover">
{%= p.body() %}
{% code
var path, vcsRevision string
if bi, ok := debug.ReadBuildInfo(); ok {
path = bi.Path
for i := range bi.Settings {
if bi.Settings[i].Key != "vcs.revision" {
continue
}
vcsRevision = bi.Settings[i].Value
}
}
%}
<footer class="[ body__footer ][ center ][ text-align_center ]">
<p>
Made with
<span role="img"
aria-label="love">
❤️
</span>
to
<a rel="external"
href="https://{%s path %}">
open source
</a>
by
<a rel="author"
hreflang="en"
href="https://toby3d.me/">
toby3d
</a>
</p>
{% if vcsRevision != "" %}
<small>
{%= p.t("version") %}
<a href="https://{%s path %}/commit/{%s vcsRevision %}"
target="_blank">
{%s vcsRevision[:7] -%}
</a>
</small>
{% endif %}
</footer>
</body>
</html>
{% endfunc %}

View file

@ -6,59 +6,61 @@ package template
//line web/template/baseof.qtpl:1
import (
"runtime/debug"
"golang.org/x/text/language"
"golang.org/x/text/message"
)
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
import (
qtio422016 "io"
qt422016 "github.com/valyala/quicktemplate"
)
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
var (
_ = qtio422016.Copy
_ = qt422016.AcquireByteBuffer
)
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
type Page interface {
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
body() string
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
streambody(qw422016 *qt422016.Writer)
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
writebody(qq422016 qtio422016.Writer)
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
head() string
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
streamhead(qw422016 *qt422016.Writer)
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
writehead(qq422016 qtio422016.Writer)
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
lang() string
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
streamlang(qw422016 *qt422016.Writer)
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
writelang(qq422016 qtio422016.Writer)
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
t(format message.Reference, args ...any) string
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
streamt(qw422016 *qt422016.Writer, format message.Reference, args ...any)
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
writet(qq422016 qtio422016.Writer, format message.Reference, args ...any)
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
title() string
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
streamtitle(qw422016 *qt422016.Writer)
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
writetitle(qq422016 qtio422016.Writer)
//line web/template/baseof.qtpl:6
//line web/template/baseof.qtpl:8
}
//line web/template/baseof.qtpl:15
//line web/template/baseof.qtpl:17
type BaseOf struct {
language language.Tag
printer *message.Printer
@ -73,228 +75,273 @@ func NewBaseOf(lang language.Tag, name string) *BaseOf {
}
}
//line web/template/baseof.qtpl:31
//line web/template/baseof.qtpl:33
func (p *BaseOf) streamlang(qw422016 *qt422016.Writer) {
//line web/template/baseof.qtpl:31
//line web/template/baseof.qtpl:33
qw422016.N().S(` `)
//line web/template/baseof.qtpl:32
//line web/template/baseof.qtpl:34
qw422016.E().S(p.language.String())
//line web/template/baseof.qtpl:32
//line web/template/baseof.qtpl:34
qw422016.N().S(` `)
//line web/template/baseof.qtpl:33
//line web/template/baseof.qtpl:35
}
//line web/template/baseof.qtpl:33
//line web/template/baseof.qtpl:35
func (p *BaseOf) writelang(qq422016 qtio422016.Writer) {
//line web/template/baseof.qtpl:33
//line web/template/baseof.qtpl:35
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/baseof.qtpl:33
//line web/template/baseof.qtpl:35
p.streamlang(qw422016)
//line web/template/baseof.qtpl:33
//line web/template/baseof.qtpl:35
qt422016.ReleaseWriter(qw422016)
//line web/template/baseof.qtpl:33
//line web/template/baseof.qtpl:35
}
//line web/template/baseof.qtpl:33
//line web/template/baseof.qtpl:35
func (p *BaseOf) lang() string {
//line web/template/baseof.qtpl:33
//line web/template/baseof.qtpl:35
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/baseof.qtpl:33
//line web/template/baseof.qtpl:35
p.writelang(qb422016)
//line web/template/baseof.qtpl:33
//line web/template/baseof.qtpl:35
qs422016 := string(qb422016.B)
//line web/template/baseof.qtpl:33
//line web/template/baseof.qtpl:35
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/baseof.qtpl:33
//line web/template/baseof.qtpl:35
return qs422016
//line web/template/baseof.qtpl:33
//line web/template/baseof.qtpl:35
}
//line web/template/baseof.qtpl:35
//line web/template/baseof.qtpl:37
func (p *BaseOf) streamtitle(qw422016 *qt422016.Writer) {
//line web/template/baseof.qtpl:35
//line web/template/baseof.qtpl:37
qw422016.N().S(` `)
//line web/template/baseof.qtpl:36
//line web/template/baseof.qtpl:38
qw422016.E().S(p.name)
//line web/template/baseof.qtpl:36
//line web/template/baseof.qtpl:38
qw422016.N().S(` `)
//line web/template/baseof.qtpl:37
//line web/template/baseof.qtpl:39
}
//line web/template/baseof.qtpl:37
//line web/template/baseof.qtpl:39
func (p *BaseOf) writetitle(qq422016 qtio422016.Writer) {
//line web/template/baseof.qtpl:37
//line web/template/baseof.qtpl:39
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/baseof.qtpl:37
//line web/template/baseof.qtpl:39
p.streamtitle(qw422016)
//line web/template/baseof.qtpl:37
//line web/template/baseof.qtpl:39
qt422016.ReleaseWriter(qw422016)
//line web/template/baseof.qtpl:37
//line web/template/baseof.qtpl:39
}
//line web/template/baseof.qtpl:37
//line web/template/baseof.qtpl:39
func (p *BaseOf) title() string {
//line web/template/baseof.qtpl:37
//line web/template/baseof.qtpl:39
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/baseof.qtpl:37
//line web/template/baseof.qtpl:39
p.writetitle(qb422016)
//line web/template/baseof.qtpl:37
//line web/template/baseof.qtpl:39
qs422016 := string(qb422016.B)
//line web/template/baseof.qtpl:37
//line web/template/baseof.qtpl:39
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/baseof.qtpl:37
//line web/template/baseof.qtpl:39
return qs422016
//line web/template/baseof.qtpl:37
//line web/template/baseof.qtpl:39
}
//line web/template/baseof.qtpl:39
//line web/template/baseof.qtpl:41
func (p *BaseOf) streamhead(qw422016 *qt422016.Writer) {
//line web/template/baseof.qtpl:39
//line web/template/baseof.qtpl:41
qw422016.N().S(` `)
//line web/template/baseof.qtpl:40
qw422016.N().S(` <link rel="icon" href="/static/favicon.ico" sizes="any"> <link rel="icon" href="/static/icon.svg" type="image/svg+xml"> <link rel="apple-touch-icon" href="/static/apple-touch-icon.png"> <link rel="manifest" href="/static/manifest.webmanifest"> `)
//line web/template/baseof.qtpl:54
//line web/template/baseof.qtpl:42
qw422016.N().S(` <link rel="manifest" href="/static/manifest.webmanifest"> <link rel="icon" href="/static/favicon.ico" sizes="any"> <link rel="icon" href="/static/icon.svg" type="image/svg+xml"> <link rel="apple-touch-icon" href="/static/apple-touch-icon.png"> `)
//line web/template/baseof.qtpl:56
}
//line web/template/baseof.qtpl:54
//line web/template/baseof.qtpl:56
func (p *BaseOf) writehead(qq422016 qtio422016.Writer) {
//line web/template/baseof.qtpl:54
//line web/template/baseof.qtpl:56
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/baseof.qtpl:54
//line web/template/baseof.qtpl:56
p.streamhead(qw422016)
//line web/template/baseof.qtpl:54
//line web/template/baseof.qtpl:56
qt422016.ReleaseWriter(qw422016)
//line web/template/baseof.qtpl:54
//line web/template/baseof.qtpl:56
}
//line web/template/baseof.qtpl:54
//line web/template/baseof.qtpl:56
func (p *BaseOf) head() string {
//line web/template/baseof.qtpl:54
//line web/template/baseof.qtpl:56
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/baseof.qtpl:54
//line web/template/baseof.qtpl:56
p.writehead(qb422016)
//line web/template/baseof.qtpl:54
//line web/template/baseof.qtpl:56
qs422016 := string(qb422016.B)
//line web/template/baseof.qtpl:54
//line web/template/baseof.qtpl:56
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/baseof.qtpl:54
//line web/template/baseof.qtpl:56
return qs422016
//line web/template/baseof.qtpl:54
//line web/template/baseof.qtpl:56
}
//line web/template/baseof.qtpl:56
//line web/template/baseof.qtpl:58
func (p *BaseOf) streambody(qw422016 *qt422016.Writer) {
//line web/template/baseof.qtpl:56
//line web/template/baseof.qtpl:58
}
//line web/template/baseof.qtpl:56
//line web/template/baseof.qtpl:58
func (p *BaseOf) writebody(qq422016 qtio422016.Writer) {
//line web/template/baseof.qtpl:56
//line web/template/baseof.qtpl:58
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/baseof.qtpl:56
//line web/template/baseof.qtpl:58
p.streambody(qw422016)
//line web/template/baseof.qtpl:56
//line web/template/baseof.qtpl:58
qt422016.ReleaseWriter(qw422016)
//line web/template/baseof.qtpl:56
//line web/template/baseof.qtpl:58
}
//line web/template/baseof.qtpl:56
//line web/template/baseof.qtpl:58
func (p *BaseOf) body() string {
//line web/template/baseof.qtpl:56
//line web/template/baseof.qtpl:58
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/baseof.qtpl:56
//line web/template/baseof.qtpl:58
p.writebody(qb422016)
//line web/template/baseof.qtpl:56
//line web/template/baseof.qtpl:58
qs422016 := string(qb422016.B)
//line web/template/baseof.qtpl:56
//line web/template/baseof.qtpl:58
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/baseof.qtpl:56
//line web/template/baseof.qtpl:58
return qs422016
//line web/template/baseof.qtpl:56
//line web/template/baseof.qtpl:58
}
//line web/template/baseof.qtpl:58
//line web/template/baseof.qtpl:60
func (p *BaseOf) streamt(qw422016 *qt422016.Writer, format message.Reference, args ...any) {
//line web/template/baseof.qtpl:58
//line web/template/baseof.qtpl:60
qw422016.N().S(` `)
//line web/template/baseof.qtpl:59
//line web/template/baseof.qtpl:61
qw422016.E().S(p.printer.Sprintf(format, args...))
//line web/template/baseof.qtpl:59
//line web/template/baseof.qtpl:61
qw422016.N().S(` `)
//line web/template/baseof.qtpl:60
//line web/template/baseof.qtpl:62
}
//line web/template/baseof.qtpl:60
//line web/template/baseof.qtpl:62
func (p *BaseOf) writet(qq422016 qtio422016.Writer, format message.Reference, args ...any) {
//line web/template/baseof.qtpl:60
//line web/template/baseof.qtpl:62
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/baseof.qtpl:60
//line web/template/baseof.qtpl:62
p.streamt(qw422016, format, args...)
//line web/template/baseof.qtpl:60
//line web/template/baseof.qtpl:62
qt422016.ReleaseWriter(qw422016)
//line web/template/baseof.qtpl:60
//line web/template/baseof.qtpl:62
}
//line web/template/baseof.qtpl:60
//line web/template/baseof.qtpl:62
func (p *BaseOf) t(format message.Reference, args ...any) string {
//line web/template/baseof.qtpl:60
//line web/template/baseof.qtpl:62
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/baseof.qtpl:60
//line web/template/baseof.qtpl:62
p.writet(qb422016, format, args...)
//line web/template/baseof.qtpl:60
//line web/template/baseof.qtpl:62
qs422016 := string(qb422016.B)
//line web/template/baseof.qtpl:60
//line web/template/baseof.qtpl:62
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/baseof.qtpl:60
//line web/template/baseof.qtpl:62
return qs422016
//line web/template/baseof.qtpl:60
//line web/template/baseof.qtpl:62
}
//line web/template/baseof.qtpl:62
//line web/template/baseof.qtpl:64
func StreamTemplate(qw422016 *qt422016.Writer, p Page) {
//line web/template/baseof.qtpl:62
//line web/template/baseof.qtpl:64
qw422016.N().S(` <!DOCTYPE html> <html class="page" lang="`)
//line web/template/baseof.qtpl:65
//line web/template/baseof.qtpl:67
p.streamlang(qw422016)
//line web/template/baseof.qtpl:65
//line web/template/baseof.qtpl:67
qw422016.N().S(`" dir="ltr"> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>`)
//line web/template/baseof.qtpl:72
//line web/template/baseof.qtpl:74
p.streamtitle(qw422016)
//line web/template/baseof.qtpl:72
//line web/template/baseof.qtpl:74
qw422016.N().S(`</title> <link rel="preload stylesheet" as="style" href="/static/style.css" type="text/css"> `)
//line web/template/baseof.qtpl:79
//line web/template/baseof.qtpl:81
p.streamhead(qw422016)
//line web/template/baseof.qtpl:79
//line web/template/baseof.qtpl:81
qw422016.N().S(` </head> <body class="page__body cover"> `)
//line web/template/baseof.qtpl:83
//line web/template/baseof.qtpl:85
p.streambody(qw422016)
//line web/template/baseof.qtpl:83
qw422016.N().S(` </body> </html> `)
//line web/template/baseof.qtpl:86
//line web/template/baseof.qtpl:85
qw422016.N().S(` `)
//line web/template/baseof.qtpl:88
var path, vcsRevision string
if bi, ok := debug.ReadBuildInfo(); ok {
path = bi.Path
for i := range bi.Settings {
if bi.Settings[i].Key != "vcs.revision" {
continue
}
vcsRevision = bi.Settings[i].Value
}
}
//line web/template/baseof.qtpl:101
qw422016.N().S(` <footer class="[ body__footer ][ center ][ text-align_center ]"> <p> Made with <span role="img" aria-label="love"> ❤️ </span> to <a rel="external" href="https://`)
//line web/template/baseof.qtpl:112
qw422016.E().S(path)
//line web/template/baseof.qtpl:112
qw422016.N().S(`"> open source </a> by <a rel="author" hreflang="en" href="https://toby3d.me/"> toby3d </a> </p> `)
//line web/template/baseof.qtpl:123
if vcsRevision != "" {
//line web/template/baseof.qtpl:123
qw422016.N().S(` <small> `)
//line web/template/baseof.qtpl:125
p.streamt(qw422016, "version")
//line web/template/baseof.qtpl:125
qw422016.N().S(` <a href="https://`)
//line web/template/baseof.qtpl:126
qw422016.E().S(path)
//line web/template/baseof.qtpl:126
qw422016.N().S(`/commit/`)
//line web/template/baseof.qtpl:126
qw422016.E().S(vcsRevision)
//line web/template/baseof.qtpl:126
qw422016.N().S(`" target="_blank"> `)
//line web/template/baseof.qtpl:128
qw422016.E().S(vcsRevision[:7])
//line web/template/baseof.qtpl:128
qw422016.N().S(`</a> </small> `)
//line web/template/baseof.qtpl:131
}
//line web/template/baseof.qtpl:131
qw422016.N().S(` </footer> </body> </html> `)
//line web/template/baseof.qtpl:135
}
//line web/template/baseof.qtpl:86
//line web/template/baseof.qtpl:135
func WriteTemplate(qq422016 qtio422016.Writer, p Page) {
//line web/template/baseof.qtpl:86
//line web/template/baseof.qtpl:135
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/baseof.qtpl:86
//line web/template/baseof.qtpl:135
StreamTemplate(qw422016, p)
//line web/template/baseof.qtpl:86
//line web/template/baseof.qtpl:135
qt422016.ReleaseWriter(qw422016)
//line web/template/baseof.qtpl:86
//line web/template/baseof.qtpl:135
}
//line web/template/baseof.qtpl:86
//line web/template/baseof.qtpl:135
func Template(p Page) string {
//line web/template/baseof.qtpl:86
//line web/template/baseof.qtpl:135
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/baseof.qtpl:86
//line web/template/baseof.qtpl:135
WriteTemplate(qb422016, p)
//line web/template/baseof.qtpl:86
//line web/template/baseof.qtpl:135
qs422016 := string(qb422016.B)
//line web/template/baseof.qtpl:86
//line web/template/baseof.qtpl:135
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/baseof.qtpl:86
//line web/template/baseof.qtpl:135
return qs422016
//line web/template/baseof.qtpl:86
//line web/template/baseof.qtpl:135
}

View file

@ -51,27 +51,5 @@
</li>
</ul>
</main>
<footer class="[ body__footer ][ center ][ text-align_center ]">
<p>
Made with
<span role="img"
aria-label="love">
❤️
</span>
to
<a rel="external"
href="https://source.toby3d.me/toby3d/hub">
open source
</a>
by
<a rel="author"
hreflang="en"
href="https://toby3d.me/">
toby3d
</a>
</p>
<small>v1.0.0</small>
</footer>
{% endfunc %}
{% endcollapsespace %}

View file

@ -45,32 +45,32 @@ func (p *Home) streambody(qw422016 *qt422016.Writer) {
//line web/template/home.qtpl:49
p.streamt(qw422016, "What the spec?")
//line web/template/home.qtpl:49
qw422016.N().S(` </a> </li> </ul> </main> <footer class="[ body__footer ][ center ][ text-align_center ]"> <p> Made with <span role="img" aria-label="love"> ❤️ </span> to <a rel="external" href="https://source.toby3d.me/toby3d/hub"> open source </a> by <a rel="author" hreflang="en" href="https://toby3d.me/"> toby3d </a> </p> <small>v1.0.0</small> </footer> `)
//line web/template/home.qtpl:76
qw422016.N().S(` </a> </li> </ul> </main> `)
//line web/template/home.qtpl:54
}
//line web/template/home.qtpl:76
//line web/template/home.qtpl:54
func (p *Home) writebody(qq422016 qtio422016.Writer) {
//line web/template/home.qtpl:76
//line web/template/home.qtpl:54
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/template/home.qtpl:76
//line web/template/home.qtpl:54
p.streambody(qw422016)
//line web/template/home.qtpl:76
//line web/template/home.qtpl:54
qt422016.ReleaseWriter(qw422016)
//line web/template/home.qtpl:76
//line web/template/home.qtpl:54
}
//line web/template/home.qtpl:76
//line web/template/home.qtpl:54
func (p *Home) body() string {
//line web/template/home.qtpl:76
//line web/template/home.qtpl:54
qb422016 := qt422016.AcquireByteBuffer()
//line web/template/home.qtpl:76
//line web/template/home.qtpl:54
p.writebody(qb422016)
//line web/template/home.qtpl:76
//line web/template/home.qtpl:54
qs422016 := string(qb422016.B)
//line web/template/home.qtpl:76
//line web/template/home.qtpl:54
qt422016.ReleaseByteBuffer(qb422016)
//line web/template/home.qtpl:76
//line web/template/home.qtpl:54
return qs422016
//line web/template/home.qtpl:76
//line web/template/home.qtpl:54
}