From daa92f990b09baf84d41973c791af6bbc926cdae Mon Sep 17 00:00:00 2001 From: Bruno Bigras Date: Tue, 10 Jan 2017 13:08:24 -0500 Subject: [PATCH] Add Matrix Notifier --- config/config.go | 1 + config/notifiers.go | 39 +++++++++++++++ doc/examples/simple.yml | 6 +++ notify/impl.go | 75 ++++++++++++++++++++++++++++ template/default.tmpl | 5 ++ template/internal/deftmpl/bindata.go | 4 +- 6 files changed, 128 insertions(+), 2 deletions(-) diff --git a/config/config.go b/config/config.go index 7b18b1f379..3ffee04934 100644 --- a/config/config.go +++ b/config/config.go @@ -439,6 +439,7 @@ type Receiver struct { OpsGenieConfigs []*OpsGenieConfig `yaml:"opsgenie_configs,omitempty" json:"opsgenie_configs,omitempty"` PushoverConfigs []*PushoverConfig `yaml:"pushover_configs,omitempty" json:"pushover_configs,omitempty"` VictorOpsConfigs []*VictorOpsConfig `yaml:"victorops_configs,omitempty" json:"victorops_configs,omitempty"` + MatrixConfigs []*MatrixConfig `yaml:"matrix_configs,omitempty" json:"matrix_configs,omitempty"` // Catches all undefined fields and must be empty after parsing. XXX map[string]interface{} `yaml:",inline" json:"-"` diff --git a/config/notifiers.go b/config/notifiers.go index 53cc3d43d7..a6c64dadd7 100644 --- a/config/notifiers.go +++ b/config/notifiers.go @@ -115,6 +115,14 @@ var ( Retry: duration(1 * time.Minute), Expire: duration(1 * time.Hour), } + + DefaultMatrixConfig = MatrixConfig{ + NotifierConfig: NotifierConfig{ + VSendResolved: false, + }, + Text: `{{ template "matrix.default.text" . }}`, + HTML: `{{ template "matrix.default.html" . }}`, + } ) // NotifierConfig contains base options common across all notifier configurations. @@ -231,6 +239,37 @@ func (c *SlackConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { return checkOverflow(c.XXX, "slack config") } +type MatrixConfig struct { + NotifierConfig `yaml:",inline" json:",inline"` + + AccessToken string `yaml:"access_token" json:"access_token"` + RoomID string `yaml:"room_id" json:"room_id"` + + Text string `yaml:"text" json:"text"` + HTML string `yaml:"html" json:"html"` + + // Catches all undefined fields and must be empty after parsing. + XXX map[string]interface{} `yaml:",inline" json:"-"` +} + +// UnmarshalYAML implements the yaml.Unmarshaler interface. +func (c *MatrixConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { + *c = DefaultMatrixConfig + type plain MatrixConfig + if err := unmarshal((*plain)(c)); err != nil { + return err + } + if c.RoomID == "" { + return fmt.Errorf("missing room id in Matrix config") + } + + if c.AccessToken == "" { + return fmt.Errorf("missing access token in Matrix config") + } + + return checkOverflow(c.XXX, "matrix config") +} + // HipchatConfig configures notifications via Hipchat. type HipchatConfig struct { NotifierConfig `yaml:",inline" json:",inline"` diff --git a/doc/examples/simple.yml b/doc/examples/simple.yml index 74821fcdc5..25a6b848b9 100644 --- a/doc/examples/simple.yml +++ b/doc/examples/simple.yml @@ -121,3 +121,9 @@ receivers: room_id: 85 message_format: html notify: true +- name: 'matrix' + matrix_configs: + - access_token: + room_id: !:matrix.org + text: "text msg" + html: "html msg" diff --git a/notify/impl.go b/notify/impl.go index b81efed0e9..8126210268 100644 --- a/notify/impl.go +++ b/notify/impl.go @@ -130,6 +130,10 @@ func BuildReceiverIntegrations(nc *config.Receiver, tmpl *template.Template) []I n := NewPushover(c, tmpl) add("pushover", i, n, c) } + for i, c := range nc.MatrixConfigs { + n := NewMatrix(c, tmpl) + add("matrix", i, n, c) + } return integrations } @@ -543,6 +547,77 @@ func (n *Slack) retry(statusCode int) (bool, error) { return false, nil } +// matrixEvent is the event for sending a matrix notification. +type matrixEvent struct { + MsgType string `json:"msgtype"` + Body string `json:"body"` + FormattedBody string `json:"formatted_body,omitempty"` + Format string `json:"format,omitempty"` +} + +// Matrix implements a Notifier for Matrix notifications. +type Matrix struct { + conf *config.MatrixConfig + tmpl *template.Template +} + +// NewMatrix returns a new Matrix notification handler. +func NewMatrix(conf *config.MatrixConfig, tmpl *template.Template) *Matrix { + return &Matrix{ + conf: conf, + tmpl: tmpl, + } +} + +// Notify implements the Notifier interface. +func (n *Matrix) Notify(ctx context.Context, as ...*types.Alert) (bool, error) { + var err error + var ( + data = n.tmpl.Data(receiverName(ctx), groupLabels(ctx), as...) + tmplText = tmplText(n.tmpl, data, &err) + tmplHTML = tmplHTML(n.tmpl, data, &err) + url = fmt.Sprintf("https://matrix.org/_matrix/client/r0/rooms/%s/send/m.room.message/m%d.1?access_token=%s", n.conf.RoomID, time.Now().Unix(), n.conf.AccessToken) + ) + + event := &matrixEvent{ + MsgType: "m.text", + Body: tmplText(n.conf.Text), + FormattedBody: tmplHTML(n.conf.HTML), + } + if event.FormattedBody != "" { + event.Format = "org.matrix.custom.html" + } + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(event); err != nil { + return false, err + } + + req, errNew := http.NewRequest("PUT", url, &buf) + if errNew != nil { + return false, errNew + } + + resp, err := ctxhttp.Do(ctx, http.DefaultClient, req) + if err != nil { + return true, err + } + defer resp.Body.Close() + + return n.retry(resp.StatusCode) +} + +func (n *Matrix) retry(statusCode int) (bool, error) { + // Matrix responds with a 200 response code on a successful + // request and 5xx response codes are assumed to be recoverable. + // http://matrix.org/docs/spec/client_server/r0.2.0.html#put-matrix-client-r0-rooms-roomid-send-eventtype-txnid + if statusCode != 200 { + return (statusCode/100 == 5), fmt.Errorf("unexpected status code %v", statusCode) + } + + return false, nil +} + // Hipchat implements a Notifier for Hipchat notifications. type Hipchat struct { conf *config.HipchatConfig diff --git a/template/default.tmpl b/template/default.tmpl index 9e5cb0e082..c198c7042e 100644 --- a/template/default.tmpl +++ b/template/default.tmpl @@ -26,6 +26,11 @@ {{ define "hipchat.default.message" }}{{ template "__subject" . }}{{ end }} +{{ define "matrix.default.text" }}{{ template "__subject" . }} +{{ template "__alertmanagerURL" . }}{{ end }} +{{ define "matrix.default.html" }}{{ template "__subject" . }}{{ end }} + + {{ define "pagerduty.default.description" }}{{ template "__subject" . }}{{ end }} {{ define "pagerduty.default.client" }}{{ template "__alertmanager" . }}{{ end }} {{ define "pagerduty.default.clientURL" }}{{ template "__alertmanagerURL" . }}{{ end }} diff --git a/template/internal/deftmpl/bindata.go b/template/internal/deftmpl/bindata.go index aa8eaa7f0f..4a490f0418 100644 --- a/template/internal/deftmpl/bindata.go +++ b/template/internal/deftmpl/bindata.go @@ -68,7 +68,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _templateDefaultTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x1b\x7b\x6f\xdb\x36\xfe\x7f\x7d\x8a\xdf\x34\x1c\xd6\x00\x96\xe5\xb4\x5b\xb1\x38\x76\x0e\xae\xa3\x34\xc2\x39\x72\x20\x2b\xed\x8a\x61\x18\x68\x89\xb6\xd9\x4a\xa4\x46\x52\x49\xbc\xcc\xdf\xfd\x40\x4a\x7e\xc8\x96\x53\x27\xe8\x12\xdf\x2d\x09\xda\x48\x14\x7f\xef\x27\x45\xea\xee\x0e\x22\x3c\x22\x14\x83\xf9\xfb\xef\x28\xc6\x5c\x26\x88\xa2\x31\xe6\x26\xcc\x66\x1d\x75\x7f\x91\xdf\xdf\xdd\x01\xa6\x11\xcc\x66\xc6\x56\x90\x2b\xbf\xa7\xa0\xee\xee\xa0\xee\xdc\x4a\xcc\x29\x8a\xaf\xfc\x1e\xcc\x66\xf6\xf7\xb6\x9e\x27\xfe\xcd\x71\x88\xc9\x35\xe6\x6d\x35\xc9\x2f\x6e\x72\x98\x02\x7b\x19\xbd\xc8\x86\x9f\x71\x28\x15\xda\x5f\x15\xc8\x40\x22\x99\x09\xf8\x0b\x24\xbb\x4a\xd3\x39\x28\x19\x01\xfe\x63\xf1\xd0\x1c\x11\x4e\xe8\x58\xc1\x34\x15\x8c\x96\x42\xd4\xcf\xf4\x28\xfc\x05\x31\xa6\xab\x14\x7f\x03\x35\xe9\x3d\x67\x59\xda\x43\x43\x1c\x8b\xfa\x80\x71\x89\xa3\x4b\x44\xb8\xa8\x7f\x40\x71\x86\x15\xc1\xcf\x8c\x50\x30\x41\x61\x85\x9c\xe4\x58\xc2\x2b\x85\xab\xde\x65\x49\xc2\x68\x0e\x7c\x50\x8c\xad\xe0\x3b\x80\xd9\xec\xd5\xdd\x1d\xdc\x10\x39\x29\x4f\xae\xfb\x38\x61\xd7\xb8\x4c\xdd\x43\x09\x16\x85\x1a\xab\xa8\x2f\x18\x3f\x58\x5c\x6d\xb1\x4d\x84\x45\xc8\x49\x2a\x09\xa3\xe6\x3d\x3a\x96\xf8\x56\xe6\x76\xfc\x3d\x26\x42\x16\x53\x39\xa2\x63\x0c\x75\x98\xcd\x72\xbe\x9a\xc6\x72\x70\x53\x4f\x4a\x2b\x96\x56\xa4\x62\x5f\xdd\xb5\x61\x21\x40\xc1\x58\x4e\xbc\x43\x29\x93\x48\xf1\x54\x42\xb9\x32\xfc\x38\xbc\x03\x96\xf1\x10\x37\x73\x63\x62\x8a\x39\x92\x8c\xe7\xee\x67\x54\x28\xaa\xa4\x03\x11\xa3\xf0\x4b\x3d\xc2\x23\x94\xc5\xb2\x2e\x89\x8c\x71\xa1\x05\x89\x93\x34\x46\xb2\xec\x8b\xf5\x6d\x2a\x2f\xe3\xc9\x84\x0a\x81\xa4\x0a\x55\x39\xd0\x76\xc4\x37\x42\x71\x3c\x44\xe1\x97\x0d\x7c\x95\xec\x2b\xa4\xf0\x17\x7c\x6d\x62\x4c\xe8\x97\x9d\x39\x48\x39\x56\xce\x62\xee\x36\x7b\x05\xff\xbd\x0a\xd0\x69\x63\x47\x0e\x48\xc8\x28\x4e\xd8\x67\xb2\x23\x0f\x6a\x7e\xc6\xe3\x5d\x39\xde\x10\xae\xe4\x26\x13\x92\x86\x13\x24\x97\x06\xe1\x2c\x79\xbc\x71\xd7\xb1\x25\x58\x08\x34\x7e\x80\xe3\x95\x78\x4b\x15\xb5\x28\x93\xd3\x05\xbe\xcd\xe8\x7f\x98\x33\x6f\x62\x0c\x63\x82\xa9\x7c\xbc\xc4\xdb\x30\x2e\xeb\xc6\xe3\x5c\x64\x13\x2f\xa1\x42\x22\x1a\x62\x51\x81\x77\x23\xdd\xdd\xa3\x55\x96\x8a\x31\xa6\x04\x3f\xde\x48\xf7\x21\xdb\xb4\x50\x51\x1d\xb6\x24\xc3\xca\x72\x60\xac\x15\xa3\x52\xb5\x3b\x80\x06\x58\xb3\x99\x91\x0f\x42\x3e\xa8\xd3\xee\xfd\x1a\x29\x97\x4c\x4d\xc4\x5a\x91\xa8\x82\x9e\x8f\x05\x8b\xaf\x71\xb4\x46\x71\x3e\xbc\x3b\xcd\x39\xc4\x06\x55\x6b\x17\x95\x0a\x5d\x05\x1e\xee\x4d\x25\xab\x5f\x93\x50\x32\xce\x52\xf1\x50\xb3\xaf\xe7\xdb\x87\x38\xf1\x26\xd1\x47\xa4\x97\x92\x18\x38\x41\x24\x5e\x6a\x66\xd9\x49\x3d\xd8\x73\xcb\x98\x26\x32\xd1\x09\xd5\x68\x7d\x77\xda\xef\x06\x9f\x2e\x1d\x50\x43\x70\x79\xf5\xae\xe7\x76\xc1\xb4\x6c\xfb\xe3\x9b\xae\x6d\x9f\x06\xa7\xf0\xcb\x79\x70\xd1\x83\xc3\x7a\x03\x02\x8e\xa8\x20\xca\xa7\x51\x6c\xdb\x8e\x67\x82\x39\x91\x32\x6d\xda\xf6\xcd\xcd\x4d\xfd\xe6\x4d\x9d\xf1\xb1\x1d\xf8\xf6\xad\xc2\x75\xa8\x80\x8b\x4b\x4b\xae\x40\xd6\x23\x19\x99\x27\x46\xeb\x3b\xcb\x32\x06\x72\x1a\x63\x40\x34\x02\x4d\x24\xc2\x9c\x28\xbf\x51\x6a\x03\x85\x5a\x34\x6d\x7b\x4c\xe4\x24\x1b\xd6\x43\x96\xd8\x4a\x86\x71\x46\x6d\x8d\x0e\x85\x39\x3e\x4b\x8b\x66\xcd\xd5\x21\x0c\xc3\x08\x26\x18\x2e\xdc\x00\x7a\x24\xc4\x54\x60\x78\x75\xe1\x06\x07\x86\xd1\x65\xe9\x94\x93\xf1\x44\xc2\xab\xf0\x00\x5e\x37\x0e\x7f\x84\x8b\x1c\xa3\x61\x5c\x62\x9e\x10\x21\x08\xa3\x40\x04\x4c\x30\xc7\xc3\x29\x8c\x39\xa2\x12\x47\x35\x18\x71\x8c\x81\x8d\x20\x9c\x20\x3e\xc6\x35\x90\x0c\x10\x9d\x42\x8a\xb9\x60\x14\xd8\x50\x22\x42\x55\x98\x21\x08\x59\x3a\x35\xd8\x08\xe4\x84\x08\x10\x6c\x24\x6f\x10\xcf\x25\x44\x42\xb0\x90\x20\x89\x23\x88\x58\x98\x25\x98\xe6\xf9\x01\x46\x24\xc6\x02\x5e\xc9\x09\x06\x73\x50\x40\x98\x07\x9a\x48\x84\x51\x6c\x10\x0a\xea\xd9\xfc\x91\x6e\x42\x59\x26\x81\x63\x21\x39\xd1\x5a\xa8\x01\xa1\x61\x9c\x45\x8a\x87\xf9\xe3\x98\x24\xa4\xa0\xa0\xc0\xb5\xe0\xc2\x90\x0c\x32\x81\x6b\x9a\xcf\x1a\x24\x2c\x22\x23\xf5\x17\x6b\xb1\xd2\x6c\x18\x13\x31\xa9\x41\x44\x14\xea\x61\x26\x71\x0d\x84\x1a\xd4\x7a\xac\x29\x39\x6c\xc6\x41\xe0\x38\x36\x42\x96\x12\x2c\x40\xcb\xba\xe4\x4e\xcf\x51\xac\xa7\x4a\xa1\xb2\x50\x91\x50\x23\x37\x13\x96\x94\x25\x21\xc2\x18\x65\x9c\x12\x31\xc1\x1a\x26\x62\x20\x98\xa6\xa8\xbc\x59\x8d\xa8\xe9\x23\x16\xc7\xec\x46\x89\x16\x32\x1a\x91\xa2\xef\xd4\x46\x46\x43\xd5\x7b\x87\x0b\xbb\x52\x26\x49\x98\xab\x5b\x1b\x20\x5d\x5a\xb5\x78\x24\x26\x28\x8e\x61\x88\x0b\x85\xe1\x08\x08\x05\xb4\x22\x0e\x57\xe4\x55\xe9\x91\x04\xc5\x90\x32\xae\xe9\xad\x8b\x59\x37\x8c\xe0\xdc\x81\x41\xff\x2c\xf8\xd8\xf1\x1d\x70\x07\x70\xe9\xf7\x3f\xb8\xa7\xce\x29\x98\x9d\x01\xb8\x03\xb3\x06\x1f\xdd\xe0\xbc\x7f\x15\xc0\xc7\x8e\xef\x77\xbc\xe0\x13\xf4\xcf\xa0\xe3\x7d\x82\xff\xb8\xde\x69\x0d\x9c\x5f\x2e\x7d\x67\x30\x80\xbe\x6f\xb8\x17\x97\x3d\xd7\x39\xad\x81\xeb\x75\x7b\x57\xa7\xae\xf7\x1e\xde\x5d\x05\xe0\xf5\x03\xe8\xb9\x17\x6e\xe0\x9c\x42\xd0\x07\x45\xb0\x40\xe5\x3a\x03\x85\xec\xc2\xf1\xbb\xe7\x1d\x2f\xe8\xbc\x73\x7b\x6e\xf0\xa9\x66\x9c\xb9\x81\xa7\x70\x9e\xf5\x7d\xe8\xc0\x65\xc7\x0f\xdc\xee\x55\xaf\xe3\xc3\xe5\x95\x7f\xd9\x1f\x38\xd0\xf1\x4e\xc1\xeb\x7b\xae\x77\xe6\xbb\xde\x7b\xe7\xc2\xf1\x82\x3a\xb8\x1e\x78\x7d\x70\x3e\x38\x5e\x00\x83\xf3\x4e\xaf\xa7\x48\x19\x9d\xab\xe0\xbc\xef\x2b\xfe\xa0\xdb\xbf\xfc\xe4\xbb\xef\xcf\x03\x38\xef\xf7\x4e\x1d\x7f\x00\xef\x1c\xe8\xb9\x9d\x77\x3d\x27\x27\xe5\x7d\x82\x6e\xaf\xe3\x5e\xd4\xe0\xb4\x73\xd1\x79\xef\x68\xa8\x7e\x70\xee\xf8\x86\x9a\x96\x73\x07\x1f\xcf\x1d\x35\xa4\xe8\x75\x3c\xe8\x74\x03\xb7\xef\x29\x31\xba\x7d\x2f\xf0\x3b\xdd\xa0\x06\x41\xdf\x0f\x16\xa0\x1f\xdd\x81\x53\x83\x8e\xef\x0e\x94\x42\xce\xfc\xfe\x45\xcd\x50\xea\xec\x9f\xa9\x29\xae\xa7\xe0\x3c\x27\xc7\xa2\x54\x0d\x25\x8b\xf4\x7d\x7d\x7f\x35\x70\x16\x08\xe1\xd4\xe9\xf4\x5c\xef\xfd\x40\x01\x2b\x11\xe7\x93\xeb\x86\x65\x9d\x18\x2d\x9d\x02\x6f\x93\x98\x8a\x76\x45\x62\x3b\x3c\x3a\x3a\xca\xf3\x99\xb9\xdb\x24\xa1\x92\x5b\xdb\x1c\x31\x2a\xad\x11\x4a\x48\x3c\x6d\xc2\x0f\xe7\x38\xbe\xc6\x92\x84\x08\x3c\x9c\xe1\x1f\x6a\xb0\x18\xa8\x41\x87\x13\x14\xd7\x40\x20\x2a\x2c\x81\x39\x19\x1d\xc3\x90\xdd\x5a\x82\xfc\xa9\x4a\x3e\x0c\x19\x8f\x30\xb7\x86\xec\xf6\x18\x34\x52\x41\xfe\xc4\x4d\x38\xfc\x31\xbd\x3d\x86\x04\xf1\x31\xa1\x4d\x68\x1c\xab\xdc\x3a\xc1\x28\x7a\x4e\xfa\x09\x96\x08\xd4\xc2\xa9\x6d\x5e\x13\x7c\xa3\xa2\xc8\x54\xd1\x2b\x31\x95\x6d\xf3\x86\x44\x72\xd2\x8e\xf0\x35\x09\xb1\xa5\x6f\x9e\x4f\x59\x60\xcf\xd9\x55\xc6\xb4\xf0\x1f\x19\xb9\x6e\x9b\xdd\x9c\x55\x2b\x98\xa6\x78\x85\x71\xd5\xf1\xd8\xca\xb8\xc7\xba\x12\x08\x2c\xdb\x57\xc1\x99\xf5\xf3\x33\xb3\xaf\x57\x69\xcf\x67\xee\xfb\x7a\x91\x96\xad\x99\x3b\x31\x8c\x96\xad\x9c\x52\x5d\x0c\x59\x34\x05\x22\x71\x22\x42\x96\xe2\xb6\x69\xea\x1b\x39\x55\xd7\x45\x44\x89\x70\x82\x13\xa4\x23\xca\x51\xd5\xfd\x62\xde\xbc\x3d\xa9\x90\xd6\x0d\x1e\x7e\x21\xd2\xca\x1f\x24\x8c\xc9\x89\x06\xca\x6b\x03\x41\x02\x47\xcb\x49\xca\x37\x34\xb4\x85\xa2\xcf\x99\x90\x4d\xa0\x8c\xe2\x63\x98\x60\x55\x99\x9a\x70\xd8\x68\xfc\xeb\x18\x62\x42\xb1\xb5\x18\xaa\xbf\xc5\xc9\x31\xe8\x08\xc8\x27\xc0\x77\x24\x51\xc1\x82\xa8\x3c\x86\x21\x0a\xbf\x8c\x39\xcb\x68\x64\x85\x2c\x66\xbc\x09\xdf\x8f\xde\xaa\xdf\x55\xf5\x43\x8a\xa2\x48\x73\xa5\xbc\x61\x38\xd6\x33\xdb\x66\x31\xd3\x54\xfa\x96\x68\xf8\xd4\xee\xb1\x22\xd2\x8e\x72\x54\xf2\x0e\xd0\x92\xfc\x19\xf3\x18\x80\xe2\xe0\x89\x33\xe9\x35\xe6\x0a\x49\x6c\xa1\x98\x8c\x69\x13\x24\x4b\xcb\x8a\xba\xd6\x0f\xda\xa6\x64\xa9\x79\xd2\xb2\x65\xb4\x64\x34\xcf\xac\xe6\xdb\x46\xe3\x89\x43\xa5\x92\xe9\x88\x88\x34\x46\xd3\x26\x0c\x63\x16\x7e\x29\xf9\x76\x82\x6e\xad\xc2\x49\xde\x36\x1a\xe9\x6d\xe9\x61\x18\x63\xc4\x15\x41\x39\x29\x8d\x6f\x0b\x94\x85\x72\x00\x65\x92\xad\x85\x44\x49\x5b\x5a\x51\x00\xad\x88\x5c\x3f\xb5\x5b\x95\xe5\x5d\x57\xce\xfd\x42\xcc\xf9\x56\x46\xd6\xc1\x5c\xd8\x59\x69\xc2\x84\x10\xc7\x71\x31\xbb\x6d\x36\xf2\x7b\x91\xa2\x70\x7e\xff\xa4\x82\x16\x0f\x39\x8a\x48\x26\x9a\xf0\x46\x8f\x55\x24\x80\xd1\xa8\x94\xc5\x72\xb0\x26\x1c\xa6\xb7\x20\x58\x4c\x22\xf8\x1e\x1f\xa9\xdf\x72\x62\x18\x8d\x56\x74\xb1\x0f\xd9\x61\xc9\xc9\xd3\x65\x89\xb7\x5b\x03\xae\xa4\x5d\x0d\x72\x53\x94\x9a\x9f\x1a\x8d\x63\xd0\x25\xaa\x98\x1f\x62\x2a\x31\xaf\xb2\x97\xfe\xd7\xd0\x46\xd9\xb4\x9b\xf3\xf6\xa7\xd7\xaf\xbb\xd5\x05\xe8\xb5\xf2\x6b\x13\x8a\x78\xcb\x09\xac\x5a\x2f\x87\xad\x8e\xc8\xf9\xcf\x72\xb3\x67\xb1\xcb\x03\xfa\x6d\x49\xe5\x2b\xab\x03\x38\x84\xd9\x4c\x2c\x5e\x78\xc0\x88\x71\x58\x6e\x48\x6c\xd9\x10\x82\xd9\x6c\x8d\x2a\xac\x6e\x4f\xb4\x4b\x9b\x13\x1b\xd3\x8a\x57\x2b\x25\xe3\x2f\x72\xf0\xe2\x9e\xbf\xb8\xe9\x2e\xc5\x6c\xe9\x3c\x87\xb9\xf3\xdc\xe7\x1b\x7b\x9f\xfb\xb6\xaa\x7d\xbf\x9c\x60\xdf\x5d\xa1\x01\x8d\x79\x2e\xb9\xcf\x1d\x0a\x31\x10\x4c\x38\x1e\xb5\xcd\x5d\xde\xda\x3e\xb1\x3f\xcc\x93\xe6\xd9\xd9\x59\x91\x7c\x23\x1c\x32\xae\xdf\xc9\xcd\x97\x07\xa5\x05\xc1\x6b\xb5\x1c\x28\xe5\xed\x21\x8b\xa3\xea\xc4\x1d\x66\x5c\x28\xec\x29\x23\xf9\xc0\xa2\xa1\x20\x54\x23\x2d\xfa\x8a\xb5\x04\xff\x93\x62\x4c\xe3\xd3\x2f\x51\x47\x8c\x27\x4d\x08\x51\x4a\x24\x8a\xc9\x9f\xb8\x32\xe9\xbf\xf9\xf1\x67\x1c\xa1\x8a\x7a\xbd\x31\xa3\x18\xd6\x5a\x6e\xe6\x85\x7c\x31\xb8\xe8\xde\xd2\xdb\xc2\xbc\x27\x1f\x08\xbe\x01\x42\xef\x7b\xe3\x3e\x5f\x46\xa2\x4a\x1f\x5e\x4b\xbc\xd5\xe9\x37\xff\xf9\xda\x1e\x4b\x45\x51\x78\x09\xd9\xbf\x27\x64\x85\xe4\x8c\x8e\x9f\x4f\xb5\xbf\x6e\x3f\x52\xf2\x5b\xb1\xc1\xd6\xb2\x73\x26\xbf\x81\xd7\x55\x34\x0c\xc5\x93\xf9\xb9\x89\xf5\x9d\xba\x17\x3f\xfc\x67\xf8\x61\xde\x9a\x2e\x5c\xad\x35\x7c\x3e\x33\x83\x5d\xad\xa3\xaf\x1c\x18\xda\x7e\xaa\xe7\x99\x85\xd9\x1e\x77\x50\x51\x0b\x96\x7b\xf5\x79\x25\x78\x76\xcf\x58\xe1\x68\x5f\xdc\xe3\xab\x1a\xfd\xea\x29\xb0\xff\x51\x67\x59\xed\x30\xd7\x8f\xa5\x3d\x53\x43\x39\x6f\xb7\x36\x7a\xca\x8c\x46\x98\xab\xee\xaf\xec\x4e\xf9\xc1\x3a\xd5\x44\xed\x5f\x8e\x79\x5c\x35\xdd\xb1\xbd\x5b\x3d\xd2\x52\x69\xde\x97\xae\x70\x6f\xaa\xf1\xde\x79\x26\x40\x6b\xb2\x87\x3c\xed\x9d\x9e\x1e\x12\xc1\xf7\x75\xc4\x2f\x81\xf5\xff\xd9\xe6\xae\x2e\xb7\x16\x47\x03\x97\x0b\xae\xf9\xd0\x33\x2c\xb9\x56\x0f\x2a\xbe\x78\xe3\x3f\xc3\x1b\x5f\x16\x5d\x2f\x8b\xae\x97\x45\xd7\xbe\x3b\xcb\xcb\xa2\x6b\x6f\x5a\xb6\x6d\x86\x6a\xd9\x7a\x3f\xee\xe4\x01\x5b\xa1\x0b\x90\xe5\xc8\x93\x9f\xc4\x28\x1d\x4d\x5a\x39\x69\xb2\x34\xf4\xd1\xd1\xd1\x7d\x1b\xdc\xe5\x9d\xdd\xcd\x2d\xc9\xfd\x68\x1a\xf6\xa9\x7d\x79\xca\xd6\xe5\xf5\xd6\xd6\xa5\x72\x13\xed\x6b\x26\x5f\xe9\x6d\xd6\xce\x35\x94\x4f\x61\xad\xa6\xab\xf2\x87\xb3\x4f\xe7\x10\xaf\x57\xb3\x95\x96\x68\xe7\x54\x85\xa9\x84\xe1\x74\xb7\x7d\xb8\xcd\xdc\xb1\x71\xde\x61\x3d\x33\xb4\xec\x88\x5c\x9f\xe4\xff\x1b\xe5\x34\xb1\x6f\x6d\xed\x96\xe3\x75\xb9\x88\xcb\xfc\xd5\xb2\x87\x2c\x9a\xaa\x91\x89\x4c\xe2\x13\xc3\xa8\xfe\x32\x37\xcd\xc4\x84\x5d\x63\xfe\x0d\x3e\x4c\xdd\x40\x55\xfe\xa0\xe9\xef\xf8\xec\xec\xdb\x7c\x75\xb6\xfb\x47\x67\xdf\xee\x9b\xb3\x15\x9a\x3b\x68\x72\xf9\x75\xe9\x03\xbe\xfb\xfa\x6f\x00\x00\x00\xff\xff\x07\xde\x61\xfd\x76\x3f\x00\x00") +var _templateDefaultTmpl = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\x1b\x7b\x6f\xdb\x36\xfe\x7f\x7d\x8a\xdf\x34\x1c\xd6\x00\x96\xe5\xb4\x5b\xb1\x38\xb6\x0f\xae\xa3\x34\xc2\x39\x72\x20\x2b\xed\x8a\x61\x18\x68\x89\xb6\xd9\x4a\xa4\x46\x52\x79\x2c\xf3\x77\x3f\x90\x92\x1f\xb2\xe5\xd4\x09\xba\xc4\x77\x4b\x82\x36\x12\xc5\xdf\xfb\x49\x91\xba\xbb\x83\x08\x8f\x09\xc5\x60\xfe\xfe\x3b\x8a\x31\x97\x09\xa2\x68\x82\xb9\x09\xb3\x59\x57\xdd\x9f\xe7\xf7\x77\x77\x80\x69\x04\xb3\x99\xb1\x15\xe4\xd2\xef\x2b\xa8\xbb\x3b\xa8\x3b\x37\x12\x73\x8a\xe2\x4b\xbf\x0f\xb3\x99\xfd\xbd\xad\xe7\x89\x7f\x73\x1c\x62\x72\x85\x79\x5b\x4d\xf2\x8b\x9b\x1c\xa6\xc0\x5e\x46\x2f\xb2\xd1\x67\x1c\x4a\x85\xf6\x57\x05\x32\x94\x48\x66\x02\xfe\x02\xc9\x2e\xd3\x74\x0e\x4a\xc6\x80\xff\x58\x3c\x34\xc7\x84\x13\x3a\x51\x30\x4d\x05\xa3\xa5\x10\xf5\x53\x3d\x0a\x7f\x41\x8c\xe9\x2a\xc5\xdf\x40\x4d\x7a\xcf\x59\x96\xf6\xd1\x08\xc7\xa2\x3e\x64\x5c\xe2\xe8\x02\x11\x2e\xea\x1f\x50\x9c\x61\x45\xf0\x33\x23\x14\x4c\x50\x58\x21\x27\x39\x91\xf0\x4a\xe1\xaa\xf7\x58\x92\x30\x9a\x03\x1f\x14\x63\x2b\xf8\x0e\x60\x36\x7b\x75\x77\x07\xd7\x44\x4e\xcb\x93\xeb\x3e\x4e\xd8\x15\x2e\x53\xf7\x50\x82\x45\xa1\xc6\x2a\xea\x0b\xc6\x0f\x16\x57\x5b\x6c\x13\x61\x11\x72\x92\x4a\xc2\xa8\x79\x8f\x8e\x25\xbe\x91\xb9\x1d\x7f\x8f\x89\x90\xc5\x54\x8e\xe8\x04\x43\x1d\x66\xb3\x9c\xaf\xa6\xb1\x1c\xdc\xd4\x93\xd2\x8a\xa5\x15\xa9\xd8\x57\x77\x6d\x58\x08\x50\x30\x96\x13\xef\x52\xca\x24\x52\x3c\x95\x50\xae\x0c\x3f\x0e\xef\x90\x65\x3c\xc4\xcd\xdc\x98\x98\x62\x8e\x24\xe3\xb9\xfb\x19\x15\x8a\x2a\xe9\x40\xc4\x28\xfc\x52\x8f\xf0\x18\x65\xb1\xac\x4b\x22\x63\x5c\x68\x41\xe2\x24\x8d\x91\x2c\xfb\x62\x7d\x9b\xca\xcb\x78\x32\xa1\x42\x20\xa9\x42\x55\x0e\xb4\x1d\xf1\x8d\x51\x1c\x8f\x50\xf8\x65\x03\x5f\x25\xfb\x0a\x29\xfc\x05\x5f\x9b\x18\x13\xfa\x65\x67\x0e\x52\x8e\x95\xb3\x98\xbb\xcd\x5e\xc1\x7f\xaf\x02\x74\xda\xd8\x91\x03\x12\x32\x8a\x13\xf6\x99\xec\xc8\x83\x9a\x9f\xf1\x78\x57\x8e\x37\x84\x2b\xb9\xc9\x94\xa4\xe1\x14\xc9\xa5\x41\x38\x4b\x1e\x6f\xdc\x75\x6c\x09\x16\x02\x4d\x1e\xe0\x78\x25\xde\x12\x24\x39\xb9\xa9\x92\x64\x2b\x26\xe3\xd1\x36\x59\x23\x36\x95\x89\xd6\x70\x0b\xc1\x94\xe3\x71\xdb\xdc\x05\xb1\xd9\x69\x8d\x19\x95\x10\xb2\x98\x71\x0d\xb2\x35\x8b\x73\x1c\x29\x36\x62\xa1\x22\x7e\xc2\x31\xa6\x0b\xae\xcc\x4e\x6b\xd4\xb9\x4f\xc8\x96\x3d\xea\xb4\x6c\x45\xa9\xd3\xb2\x51\x67\x8b\xf6\x52\xc5\x5a\x94\xc9\xdb\x85\x4c\x9b\xb9\xf3\x61\xa9\x60\x13\x63\x18\x13\x4c\xab\x8c\xb2\xa3\xbf\x6c\xc3\xb8\xac\xba\x8f\x33\xe6\x26\x5e\x42\x85\x44\x34\xc4\xa2\x02\xef\x46\xb1\xb8\xc7\x27\x59\x2a\x26\x98\x12\xfc\x78\x17\xbf\x0f\xd9\xa6\x85\x8a\xda\xba\xa5\x94\x54\x16\x53\x63\xad\x94\x97\x7a\x85\x03\x68\x80\x35\x9b\x19\xf9\x20\xe4\x83\xcd\xf5\xb0\xd9\xd4\x48\xb9\xe1\xd0\x44\xac\x15\x89\x2a\xe8\xf9\x58\xb0\xf8\x0a\x47\x6b\x14\xe7\xc3\xbb\xd3\x9c\x43\x6c\x50\xb5\x76\x51\xa9\xd0\x35\xf4\xe1\xde\x54\xb2\xfa\x15\x09\x25\xe3\x2c\x15\x0f\x35\xfb\x7a\xb5\x7a\x88\x13\x6f\x12\x7d\x44\x72\x2e\x89\x81\x13\x44\xe2\xa5\x66\x96\x7d\xe8\x83\x3d\xb7\x8c\x69\x9e\x2c\x8d\xd6\x77\x27\x83\x5e\xf0\xe9\xc2\x01\x35\x04\x17\x97\xef\xfa\x6e\x0f\x4c\xcb\xb6\x3f\xbe\xe9\xd9\xf6\x49\x70\x02\xbf\x9c\x05\xe7\x7d\x38\xac\x37\x20\xe0\x88\x0a\xa2\x7c\x1a\xc5\xb6\xed\x78\x26\x98\x53\x29\xd3\xa6\x6d\x5f\x5f\x5f\xd7\xaf\xdf\xd4\x19\x9f\xd8\x81\x6f\xdf\x28\x5c\x87\x0a\xb8\xb8\xb4\xe4\x0a\x64\x3d\x92\x91\xd9\x31\x5a\xdf\x59\x96\x31\x94\xb7\x31\x06\x44\x23\xd0\x44\x22\xcc\x89\xf2\x1b\xa5\x36\x50\xa8\x45\xd3\xb6\x27\x44\x4e\xb3\x51\x3d\x64\x89\xad\x64\x98\x64\xd4\xd6\xe8\x50\x98\xe3\xb3\xb4\x68\xd6\x5c\x1d\xc2\x30\x8c\x60\x8a\xe1\xdc\x0d\xa0\x4f\x42\x4c\x05\x86\x57\xe7\x6e\x70\x60\x18\x3d\x96\xde\x72\x32\x99\x4a\x78\x15\x1e\xc0\xeb\xc6\xe1\x8f\x70\x9e\x63\x34\x8c\x0b\xcc\x13\x22\x04\x61\x14\x88\x80\x29\xe6\x78\x74\x0b\x13\x8e\xa8\xc4\x51\x0d\xc6\x1c\x63\x60\x63\x08\xa7\x88\x4f\x70\x0d\x24\x03\x44\x6f\x21\xc5\x5c\x30\x0a\x6c\x24\x11\xa1\x2a\xcc\x10\x84\x2c\xbd\x35\xd8\x18\xe4\x94\x08\x10\x6c\x2c\xaf\x11\xcf\x25\x44\x42\xb0\x90\x20\x89\x23\x88\x58\x98\x25\x98\xe6\xf9\x01\xc6\x24\xc6\x02\x5e\xc9\x29\x06\x73\x58\x40\x98\x07\x9a\x48\x84\x51\x6c\x10\x0a\xea\xd9\xfc\x91\x6e\xe1\x59\x26\x81\x63\x21\x39\xd1\x5a\xa8\x01\xa1\x61\x9c\x45\x8a\x87\xf9\xe3\x98\x24\xa4\xa0\xa0\xc0\xb5\xe0\xc2\x90\x0c\x32\x81\x6b\x9a\xcf\x1a\x24\x2c\x22\x63\xf5\x17\x6b\xb1\xd2\x6c\x14\x13\x31\xad\x41\x44\x14\xea\x51\x26\x71\x0d\x84\x1a\xd4\x7a\xac\x29\x39\x6c\xc6\x41\xe0\x38\x36\x42\x96\x12\x2c\x40\xcb\xba\xe4\x4e\xcf\x51\xac\xa7\x4a\xa1\xb2\x50\x91\x50\x23\xd7\x53\x96\x94\x25\x21\xc2\x18\x67\x9c\x12\x31\xc5\x1a\x26\x62\x20\x98\xa6\xa8\xbc\x59\x8d\xa8\xe9\x63\x16\xc7\xec\x5a\x89\x16\x32\x1a\x91\xa2\x6b\xd7\x46\x46\x23\xb5\x72\x09\x17\x76\xa5\x4c\x92\x30\x57\xb7\x36\x40\xba\xb4\x6a\xf1\x48\x4c\x51\x1c\xc3\x08\x17\x0a\xc3\x11\x10\x0a\x68\x45\x1c\xae\xc8\xab\xd2\x23\x09\x8a\x21\x65\x5c\xd3\x5b\x17\xb3\x6e\x18\xc1\x99\x03\xc3\xc1\x69\xf0\xb1\xeb\x3b\xe0\x0e\xe1\xc2\x1f\x7c\x70\x4f\x9c\x13\x30\xbb\x43\x70\x87\x66\x0d\x3e\xba\xc1\xd9\xe0\x32\x80\x8f\x5d\xdf\xef\x7a\xc1\x27\x18\x9c\x42\xd7\xfb\x04\xff\x71\xbd\x93\x1a\x38\xbf\x5c\xf8\xce\x70\x08\x03\xdf\x70\xcf\x2f\xfa\xae\x73\x52\x03\xd7\xeb\xf5\x2f\x4f\x5c\xef\x3d\xbc\xbb\x0c\xc0\x1b\x04\xd0\x77\xcf\xdd\xc0\x39\x81\x60\x00\x8a\x60\x81\xca\x75\x86\x0a\xd9\xb9\xe3\xf7\xce\xba\x5e\xd0\x7d\xe7\xf6\xdd\xe0\x53\xcd\x38\x75\x03\x4f\xe1\x3c\x1d\xf8\xd0\x85\x8b\xae\x1f\xb8\xbd\xcb\x7e\xd7\x87\x8b\x4b\xff\x62\x30\x74\xa0\xeb\x9d\x80\x37\xf0\x5c\xef\xd4\x77\xbd\xf7\xce\xb9\xe3\x05\x75\x70\x3d\xf0\x06\xe0\x7c\x70\xbc\x00\x86\x67\xdd\x7e\x5f\x91\x32\xba\x97\xc1\xd9\xc0\x57\xfc\x41\x6f\x70\xf1\xc9\x77\xdf\x9f\x05\x70\x36\xe8\x9f\x38\xfe\x10\xde\x39\xd0\x77\xbb\xef\xfa\x4e\x4e\xca\xfb\x04\xbd\x7e\xd7\x3d\xaf\xc1\x49\xf7\xbc\xfb\xde\xd1\x50\x83\xe0\xcc\xf1\x0d\x35\x2d\xe7\x0e\x3e\x9e\x39\x6a\x48\xd1\xeb\x7a\xd0\xed\x05\xee\xc0\x53\x62\xf4\x06\x5e\xe0\x77\x7b\x41\x0d\x82\x81\x1f\x2c\x40\x3f\xba\x43\xa7\x06\x5d\xdf\x1d\x2a\x85\x9c\xfa\x83\xf3\x9a\xa1\xd4\x39\x38\x55\x53\x5c\x4f\xc1\x79\x4e\x8e\x45\xa9\x1a\x4a\x16\x19\xf8\xfa\xfe\x72\xe8\x2c\x10\xc2\x89\xd3\xed\xbb\xde\xfb\xa1\x02\x56\x22\xce\x27\xd7\x0d\xcb\xea\x18\x2d\x9d\x02\x6f\x92\x98\x8a\x76\x45\x62\x3b\x3c\x3a\x3a\xca\xf3\x99\xb9\xdb\x24\xa1\x92\x5b\xdb\x54\x6d\x9f\x35\x46\x09\x89\x6f\x9b\xf0\xc3\x19\x8e\xaf\xb0\x24\x21\x02\x0f\x67\xf8\x87\x1a\x2c\x06\x6a\xd0\xe5\x04\xc5\x35\x10\x88\x0a\x4b\x60\x4e\xc6\xc7\x30\x62\x37\x96\x20\x7f\xaa\x92\x0f\x23\xc6\x23\xcc\xad\x11\xbb\x39\x06\x8d\x54\x90\x3f\x71\x13\x0e\x7f\x4c\x6f\x8e\x21\x41\x7c\x42\x68\x13\x1a\xc7\x2a\xb7\x4e\x31\x8a\x9e\x93\x7e\x82\x25\x02\xb5\xec\x6c\x9b\x57\x04\x5f\xab\x28\x32\x55\xf4\x4a\x4c\x65\xdb\xbc\x26\x91\x9c\xb6\x23\x7c\x45\x42\x6c\xe9\x9b\xe7\x53\x16\xd8\x73\x76\x95\x31\x2d\xfc\x47\x46\xae\xda\x66\x2f\x67\xd5\x0a\x6e\x53\xbc\xc2\xb8\xea\x78\x6c\x65\xdc\x63\x5d\x09\x04\x96\xed\xcb\xe0\xd4\xfa\xf9\x99\xd9\xd7\x6b\xdc\xe7\x33\xf7\xfd\x2b\x1f\xcd\x5c\xc7\x30\x5a\xb6\x72\x4a\x75\x31\x62\xd1\x2d\x10\x89\x13\x11\xb2\x14\xb7\x4d\x53\xdf\xc8\x5b\x75\x5d\x44\x94\x08\xa7\x38\x41\x3a\xa2\x1c\x55\xdd\xcf\xe7\xcd\xdb\x93\x0a\x69\x5d\xe3\xd1\x17\x22\xad\xfc\x41\xc2\x98\x9c\x6a\xa0\xbc\x36\x10\x24\x70\xb4\x9c\xa4\x7c\x43\x43\x5b\x28\xfa\x9c\x09\xd9\x04\xca\x28\x3e\x86\x29\x56\x95\xa9\x09\x87\x8d\xc6\xbf\x8e\x21\x26\x14\x5b\x8b\xa1\xfa\x5b\x9c\x1c\x83\x8e\x80\x7c\x02\x7c\x47\x12\x15\x2c\x88\xca\x63\x18\xa1\xf0\xcb\x84\xb3\x8c\x46\x96\x5e\x9f\x36\xe1\xfb\xf1\x5b\xf5\xbb\xaa\x7e\x48\x51\x14\x69\xae\x94\x37\x8c\x26\xc5\x4a\xb6\x98\x69\x2a\x7d\x4b\x34\x7a\x6a\xf7\x58\x11\x69\x47\x39\x2a\x79\x07\x68\x49\xfe\x8c\x79\x0c\x40\x71\xf0\xc4\x99\xf4\x0a\x73\x85\x24\xb6\x50\x4c\x26\xb4\x09\x92\xa5\x65\x45\x5d\xe9\x07\x6d\x53\xb2\xd4\xec\xb4\x6c\x19\x2d\x19\xcd\x33\xab\xf9\xb6\xd1\x78\xe2\x50\xa9\x64\x3a\x22\x22\x8d\xd1\x6d\x13\x46\x31\x0b\xbf\x94\x7c\x3b\x41\x37\x56\xe1\x24\x6f\x1b\x8d\xf4\xa6\xf4\x30\x8c\x31\xe2\x8a\xa0\x9c\x96\xc6\xb7\x05\xca\x42\x39\x80\x32\xc9\xd6\x42\xa2\xa4\x2d\xad\x28\x80\x56\x44\xae\x9e\xda\xad\xca\xf2\xae\x2b\xe7\x7e\x21\xe6\x7c\x2b\x23\xeb\x60\x2e\xec\xac\x34\x61\x42\x88\xe3\xb8\x98\xdd\x36\x1b\xf9\xbd\x48\x51\x38\xbf\x7f\x52\x41\x8b\x87\x1c\x45\x24\x13\x4d\x78\xa3\xc7\x2a\x12\xc0\x78\x5c\xca\x62\x39\x58\x13\x0e\xd3\x1b\x10\x2c\x26\x11\x7c\x8f\x8f\xd4\x6f\x39\x31\x8c\xc7\x2b\xba\xd8\x87\xec\xb0\xe4\xe4\xe9\xb2\xc4\xdb\xad\x01\x57\xd2\xae\x06\xb9\x2e\x4a\xcd\x4f\x8d\xc6\x31\xe8\x12\x55\xcc\x0f\x31\x95\x98\x57\xd9\x4b\xff\x6b\x68\xa3\x6c\xda\xcd\x79\xfb\xd3\xeb\xd7\xbd\xea\x02\xf4\x5a\xf9\xb5\x09\x45\xbc\xe5\x04\x56\xad\x97\xc3\x56\x47\xe4\xfc\x67\xb9\x55\xb6\xd8\x23\x03\xfd\xb6\xa4\xf2\x95\xd5\x01\x1c\xc2\x6c\x26\x16\x2f\x3c\x60\xcc\x38\x2c\xb7\x73\xb6\x6c\xa7\xc1\x6c\xb6\x46\x15\x56\x37\x77\xda\xa5\xad\x9d\x8d\x69\xc5\xab\x95\x92\xf1\x17\x39\x78\x71\xcf\x5f\xdc\x74\x97\x62\xb6\x74\x9e\xc3\xdc\x79\xee\xf3\x8d\xbd\xcf\x7d\x5b\xd5\xbe\x5f\x4e\xb0\xef\xae\xd0\x80\xc6\x3c\x97\xdc\xe7\x0e\x85\x18\x0f\xda\xee\x79\x5a\x89\xe7\x49\xf3\xf4\xf4\xb4\x48\xbe\x11\x0e\x19\xd7\xef\xe4\xe6\xcb\x83\xd2\x82\xe0\xb5\x5a\x0e\x94\xf2\xf6\x88\xc5\x51\x75\xe2\x0e\x33\x2e\x14\xf6\x94\x91\x7c\x60\xd1\x50\x10\xaa\x91\x16\x7d\xc5\x5a\x82\xff\x49\x31\xa6\xf1\xe9\x97\xa8\x63\xc6\x93\x26\x84\x28\x25\x12\xc5\xe4\x4f\x5c\x99\xf4\xdf\xfc\xf8\x33\x8e\x50\x45\xbd\xde\x98\x51\x0c\x6b\x2d\x37\xf3\x42\xbe\x18\x5c\x74\x6f\xe9\x4d\x61\xde\xce\x07\x82\xaf\x81\xd0\xfb\xde\xb8\xcf\x97\x91\xa8\xd2\x87\xd7\x12\x6f\x75\xfa\xcd\x7f\xbe\xb6\xc7\x52\x51\x14\x5e\x42\xf6\xef\x09\x59\x21\x39\xa3\x93\xe7\x53\xed\xaf\xdb\x0f\xe4\xfc\x56\x6c\xb0\xb5\xec\x9c\xc9\x6f\xe0\x75\x15\x0d\x43\xf1\x64\x7e\xea\x64\x7d\xa7\xee\xc5\x0f\xff\x19\x7e\x98\xb7\xa6\x0b\x57\x6b\x8d\x9e\xcf\xcc\x60\x57\xeb\xe8\x2b\xc7\xad\xb6\x9f\x89\x7a\x66\x61\xb6\xc7\x1d\x54\xd4\x82\xe5\x5e\x7d\x5e\x09\x9e\xdd\x33\x56\x38\xda\x17\xf7\xf8\xaa\x46\xbf\x7a\x86\xee\x7f\xd4\x59\x56\x3b\xcc\xf5\x43\x7d\xcf\xd4\x50\xce\xdb\xad\x8d\x9e\x32\xa3\x11\xe6\xaa\xfb\x2b\xbb\x53\x7e\x2c\x51\x35\x51\xfb\x97\x63\x1e\x57\x4d\x77\x6c\xef\x56\x8f\xb4\x54\x9a\xf7\xa5\x2b\xdc\x9b\x6a\xbc\x77\x9e\x09\xd0\x9a\xee\x21\x4f\x7b\xa7\xa7\x87\x44\xf0\x7d\x1d\xf1\x4b\x60\xfd\x7f\xb6\xb9\xab\xcb\xad\xc5\xd1\xc0\xe5\x82\x6b\x3e\xf4\x0c\x4b\xae\xd5\x83\x8a\x2f\xde\xf8\xcf\xf0\xc6\x97\x45\xd7\xcb\xa2\xeb\x65\xd1\xb5\xef\xce\xf2\xb2\xe8\xda\x9b\x96\x6d\x9b\xa1\x5a\xb6\xde\x8f\xeb\x3c\x60\x2b\x74\x01\xb2\x1c\x79\xf2\x93\x18\xa5\xa3\x49\x2b\x27\x4d\x96\x86\x3e\x3a\x3a\xba\x6f\x83\xbb\xbc\xb3\xbb\xb9\x25\xb9\x1f\x4d\xc3\x3e\xb5\x2f\x4f\xd9\xba\xbc\xde\xda\xba\x54\x6e\xa2\x7d\xcd\xe4\x2b\xbd\xcd\xda\xb9\x86\xf2\x29\xac\xd5\x74\x55\xfe\xec\xf8\xe9\x1c\xe2\xf5\x6a\xb6\xd2\x12\xed\x9c\xaa\x30\x95\x30\xba\xdd\x6d\x1f\x6e\x33\x77\x6c\x9c\x77\x58\xcf\x0c\x2d\x3b\x22\x57\x9d\xfc\x7f\xa3\x9c\x26\xf6\xad\xad\xdd\x72\xbc\x2e\x17\x71\x99\xbf\x5a\xf6\x88\x45\xb7\x6a\x64\x2a\x93\xb8\x63\x18\xd5\xdf\x35\xa7\x99\x98\xb2\x2b\xcc\xbf\xc1\x67\xbd\x1b\xa8\xca\x1f\x34\xfd\x1d\x9f\x9d\x7d\x9b\xaf\xce\x76\xff\xe8\xec\xdb\x7d\x73\xb6\x42\x73\x07\x4d\x2e\xbf\xcd\x7d\xc0\x77\x5f\xff\x0d\x00\x00\xff\xff\x73\x49\xcc\x0c\xb4\x40\x00\x00") func templateDefaultTmplBytes() ([]byte, error) { return bindataRead( @@ -83,7 +83,7 @@ func templateDefaultTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "template/default.tmpl", size: 16246, mode: os.FileMode(420), modTime: time.Unix(1483467521, 0)} + info := bindataFileInfo{name: "template/default.tmpl", size: 16564, mode: os.FileMode(420), modTime: time.Unix(1484071147, 0)} a := &asset{bytes: bytes, info: info} return a, nil }