From 2e3d5240c2f8c58bc606d18517eeb403c08534e6 Mon Sep 17 00:00:00 2001 From: Mrunal Patel Date: Fri, 22 Sep 2017 14:56:10 -0700 Subject: [PATCH 01/18] client: Add crio client package Signed-off-by: Mrunal Patel --- client/client.go | 103 +++++++++++++++++++++++++++++++++++++++ cmd/crioctl/container.go | 37 ++++++++++++++ cmd/crioctl/info.go | 31 ++++++++++++ cmd/crioctl/main.go | 1 + server/inspect.go | 36 +++----------- types/types.go | 22 +++++++++ 6 files changed, 202 insertions(+), 28 deletions(-) create mode 100644 client/client.go create mode 100644 cmd/crioctl/info.go create mode 100644 types/types.go diff --git a/client/client.go b/client/client.go new file mode 100644 index 00000000..ad717b97 --- /dev/null +++ b/client/client.go @@ -0,0 +1,103 @@ +package client + +import ( + "encoding/json" + "fmt" + "net" + "net/http" + "syscall" + "time" + + "github.com/kubernetes-incubator/cri-o/types" +) + +const ( + maxUnixSocketPathSize = len(syscall.RawSockaddrUnix{}.Path) +) + +// CrioClient is an interface to get information from crio daemon endpoint. +type CrioClient interface { + DaemonInfo() (types.CrioInfo, error) + ContainerInfo(string) (*types.ContainerInfo, error) +} + +type crioClientImpl struct { + client *http.Client + crioSocketPath string +} + +func configureUnixTransport(tr *http.Transport, proto, addr string) error { + if len(addr) > maxUnixSocketPathSize { + return fmt.Errorf("Unix socket path %q is too long", addr) + } + // No need for compression in local communications. + tr.DisableCompression = true + tr.Dial = func(_, _ string) (net.Conn, error) { + return net.DialTimeout(proto, addr, 32*time.Second) + } + return nil +} + +// New returns a crio client +func New(crioSocketPath string) (CrioClient, error) { + tr := new(http.Transport) + configureUnixTransport(tr, "unix", crioSocketPath) + c := &http.Client{ + Transport: tr, + } + return &crioClientImpl{ + client: c, + crioSocketPath: crioSocketPath, + }, nil +} + +func (c *crioClientImpl) getRequest(path string) (*http.Request, error) { + req, err := http.NewRequest("GET", path, nil) + if err != nil { + return nil, err + } + // For local communications over a unix socket, it doesn't matter what + // the host is. We just need a valid and meaningful host name. + req.Host = "crio" + req.URL.Host = c.crioSocketPath + req.URL.Scheme = "http" + return req, nil +} + +// DaemonInfo return cri-o daemon info from the cri-o +// info endpoint. +func (c *crioClientImpl) DaemonInfo() (types.CrioInfo, error) { + info := types.CrioInfo{} + req, err := c.getRequest("/info") + if err != nil { + return info, err + } + resp, err := c.client.Do(req) + if err != nil { + return info, err + } + defer resp.Body.Close() + if err := json.NewDecoder(resp.Body).Decode(&info); err != nil { + return info, err + } + return info, nil +} + +// ContainerInfo returns container info by querying +// the cri-o container endpoint. +func (c *crioClientImpl) ContainerInfo(id string) (*types.ContainerInfo, error) { + req, err := c.getRequest("/containers/" + id) + if err != nil { + return nil, err + } + resp, err := c.client.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + cInfo := types.ContainerInfo{} + if err := json.NewDecoder(resp.Body).Decode(&cInfo); err != nil { + return nil, err + } + return &cInfo, nil +} diff --git a/cmd/crioctl/container.go b/cmd/crioctl/container.go index e02ce9f8..7be5a7d6 100644 --- a/cmd/crioctl/container.go +++ b/cmd/crioctl/container.go @@ -1,6 +1,7 @@ package main import ( + "encoding/json" "fmt" "log" "net/url" @@ -8,6 +9,7 @@ import ( "strings" "time" + "github.com/kubernetes-incubator/cri-o/client" "github.com/urfave/cli" "golang.org/x/net/context" remocommandconsts "k8s.io/apimachinery/pkg/util/remotecommand" @@ -21,6 +23,7 @@ var containerCommand = cli.Command{ Aliases: []string{"ctr"}, Subcommands: []cli.Command{ createContainerCommand, + inspectContainerCommand, startContainerCommand, stopContainerCommand, removeContainerCommand, @@ -617,3 +620,37 @@ func ListContainers(client pb.RuntimeServiceClient, opts listOptions) error { } return nil } + +var inspectContainerCommand = cli.Command{ + Name: "inspect", + Usage: "get container info from crio daemon", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "id", + Value: "", + Usage: "id of the container", + }, + }, + Action: func(context *cli.Context) error { + ID := context.String("id") + if ID == "" { + return fmt.Errorf("ID cannot be empty") + } + c, err := client.New(context.GlobalString("connect")) + if err != nil { + return err + } + + cInfo, err := c.ContainerInfo(ID) + if err != nil { + return err + } + + jsonBytes, err := json.MarshalIndent(cInfo, "", " ") + if err != nil { + return err + } + fmt.Println(string(jsonBytes)) + return nil + }, +} diff --git a/cmd/crioctl/info.go b/cmd/crioctl/info.go new file mode 100644 index 00000000..1f06f594 --- /dev/null +++ b/cmd/crioctl/info.go @@ -0,0 +1,31 @@ +package main + +import ( + "encoding/json" + "fmt" + + "github.com/kubernetes-incubator/cri-o/client" + "github.com/urfave/cli" +) + +var infoCommand = cli.Command{ + Name: "info", + Usage: "get crio daemon info", + Action: func(context *cli.Context) error { + c, err := client.New(context.GlobalString("connect")) + if err != nil { + return err + } + di, err := c.DaemonInfo() + if err != nil { + return err + } + + jsonBytes, err := json.MarshalIndent(di, "", " ") + if err != nil { + return err + } + fmt.Println(string(jsonBytes)) + return nil + }, +} diff --git a/cmd/crioctl/main.go b/cmd/crioctl/main.go index 247906a9..3d77867f 100644 --- a/cmd/crioctl/main.go +++ b/cmd/crioctl/main.go @@ -91,6 +91,7 @@ func main() { containerCommand, runtimeVersionCommand, imageCommand, + infoCommand, } app.Flags = []cli.Flag{ diff --git a/server/inspect.go b/server/inspect.go index 8359d0a7..50de0c85 100644 --- a/server/inspect.go +++ b/server/inspect.go @@ -9,32 +9,12 @@ import ( "github.com/go-zoo/bone" "github.com/kubernetes-incubator/cri-o/libkpod/sandbox" "github.com/kubernetes-incubator/cri-o/oci" + "github.com/kubernetes-incubator/cri-o/types" "github.com/sirupsen/logrus" ) -// ContainerInfo stores information about containers -type ContainerInfo struct { - Name string `json:"name"` - Pid int `json:"pid"` - Image string `json:"image"` - CreatedTime int64 `json:"created_time"` - Labels map[string]string `json:"labels"` - Annotations map[string]string `json:"annotations"` - LogPath string `json:"log_path"` - Root string `json:"root"` - Sandbox string `json:"sandbox"` - IP string `json:"ip_address"` -} - -// CrioInfo stores information about the crio daemon -type CrioInfo struct { - StorageDriver string `json:"storage_driver"` - StorageRoot string `json:"storage_root"` - CgroupDriver string `json:"cgroup_driver"` -} - -func (s *Server) getInfo() CrioInfo { - return CrioInfo{ +func (s *Server) getInfo() types.CrioInfo { + return types.CrioInfo{ StorageDriver: s.config.Config.Storage, StorageRoot: s.config.Config.Root, CgroupDriver: s.config.Config.CgroupManager, @@ -47,25 +27,25 @@ var ( errSandboxNotFound = errors.New("sandbox for container not found") ) -func (s *Server) getContainerInfo(id string, getContainerFunc func(id string) *oci.Container, getInfraContainerFunc func(id string) *oci.Container, getSandboxFunc func(id string) *sandbox.Sandbox) (ContainerInfo, error) { +func (s *Server) getContainerInfo(id string, getContainerFunc func(id string) *oci.Container, getInfraContainerFunc func(id string) *oci.Container, getSandboxFunc func(id string) *sandbox.Sandbox) (types.ContainerInfo, error) { ctr := getContainerFunc(id) if ctr == nil { ctr = getInfraContainerFunc(id) if ctr == nil { - return ContainerInfo{}, errCtrNotFound + return types.ContainerInfo{}, errCtrNotFound } } // TODO(mrunalp): should we call UpdateStatus()? ctrState := ctr.State() if ctrState == nil { - return ContainerInfo{}, errCtrStateNil + return types.ContainerInfo{}, errCtrStateNil } sb := getSandboxFunc(ctr.Sandbox()) if sb == nil { logrus.Debugf("can't find sandbox %s for container %s", ctr.Sandbox(), id) - return ContainerInfo{}, errSandboxNotFound + return types.ContainerInfo{}, errSandboxNotFound } - return ContainerInfo{ + return types.ContainerInfo{ Name: ctr.Name(), Pid: ctrState.Pid, Image: ctr.Image(), diff --git a/types/types.go b/types/types.go new file mode 100644 index 00000000..73b9a4e6 --- /dev/null +++ b/types/types.go @@ -0,0 +1,22 @@ +package types + +// ContainerInfo stores information about containers +type ContainerInfo struct { + Name string `json:"name"` + Pid int `json:"pid"` + Image string `json:"image"` + CreatedTime int64 `json:"created_time"` + Labels map[string]string `json:"labels"` + Annotations map[string]string `json:"annotations"` + LogPath string `json:"log_path"` + Root string `json:"root"` + Sandbox string `json:"sandbox"` + IP string `json:"ip_address"` +} + +// CrioInfo stores information about the crio daemon +type CrioInfo struct { + StorageDriver string `json:"storage_driver"` + StorageRoot string `json:"storage_root"` + CgroupDriver string `json:"cgroup_driver"` +} From 50baca10e9d0f5559e961aa06386235c837e9d99 Mon Sep 17 00:00:00 2001 From: Mrunal Patel Date: Fri, 22 Sep 2017 16:44:02 -0700 Subject: [PATCH 02/18] Add crio annotations to container endpoint Signed-off-by: Mrunal Patel --- libkpod/container_server.go | 4 +- oci/container.go | 83 ++++++++++++++++++++----------------- server/container_create.go | 5 ++- server/inspect.go | 21 +++++----- server/inspect_test.go | 6 +-- server/sandbox_run.go | 2 +- types/types.go | 21 +++++----- 7 files changed, 77 insertions(+), 65 deletions(-) diff --git a/libkpod/container_server.go b/libkpod/container_server.go index f20705df..e894537e 100644 --- a/libkpod/container_server.go +++ b/libkpod/container_server.go @@ -384,7 +384,7 @@ func (c *ContainerServer) LoadSandbox(id string) error { return err } - scontainer, err := oci.NewContainer(m.Annotations[annotations.ContainerID], cname, sandboxPath, m.Annotations[annotations.LogPath], sb.NetNs(), labels, kubeAnnotations, "", "", "", nil, id, false, false, false, privileged, trusted, sandboxDir, created, m.Annotations["org.opencontainers.image.stopSignal"]) + scontainer, err := oci.NewContainer(m.Annotations[annotations.ContainerID], cname, sandboxPath, m.Annotations[annotations.LogPath], sb.NetNs(), labels, m.Annotations, kubeAnnotations, "", "", "", nil, id, false, false, false, privileged, trusted, sandboxDir, created, m.Annotations["org.opencontainers.image.stopSignal"]) if err != nil { return err } @@ -507,7 +507,7 @@ func (c *ContainerServer) LoadContainer(id string) error { return err } - ctr, err := oci.NewContainer(id, name, containerPath, m.Annotations[annotations.LogPath], sb.NetNs(), labels, kubeAnnotations, img, imgName, imgRef, &metadata, sb.ID(), tty, stdin, stdinOnce, sb.Privileged(), sb.Trusted(), containerDir, created, m.Annotations["org.opencontainers.image.stopSignal"]) + ctr, err := oci.NewContainer(id, name, containerPath, m.Annotations[annotations.LogPath], sb.NetNs(), labels, m.Annotations, kubeAnnotations, img, imgName, imgRef, &metadata, sb.ID(), tty, stdin, stdinOnce, sb.Privileged(), sb.Trusted(), containerDir, created, m.Annotations["org.opencontainers.image.stopSignal"]) if err != nil { return err } diff --git a/oci/container.go b/oci/container.go index e86ab0f7..197c3d85 100644 --- a/oci/container.go +++ b/oci/container.go @@ -22,22 +22,23 @@ const ( // Container represents a runtime container. type Container struct { - id string - name string - logPath string - labels fields.Set - annotations fields.Set - image string - sandbox string - netns ns.NetNS - terminal bool - stdin bool - stdinOnce bool - privileged bool - trusted bool - state *ContainerState - metadata *pb.ContainerMetadata - opLock sync.Locker + id string + name string + logPath string + labels fields.Set + annotations fields.Set + crioAnnotations fields.Set + image string + sandbox string + netns ns.NetNS + terminal bool + stdin bool + stdinOnce bool + privileged bool + trusted bool + state *ContainerState + metadata *pb.ContainerMetadata + opLock sync.Locker // this is the /var/run/storage/... directory, erased on reboot bundlePath string // this is the /var/lib/storage/... directory @@ -68,31 +69,32 @@ type ContainerState struct { } // NewContainer creates a container object. -func NewContainer(id string, name string, bundlePath string, logPath string, netns ns.NetNS, labels map[string]string, annotations map[string]string, image string, imageName string, imageRef string, metadata *pb.ContainerMetadata, sandbox string, terminal bool, stdin bool, stdinOnce bool, privileged bool, trusted bool, dir string, created time.Time, stopSignal string) (*Container, error) { +func NewContainer(id string, name string, bundlePath string, logPath string, netns ns.NetNS, labels map[string]string, crioAnnotations map[string]string, annotations map[string]string, image string, imageName string, imageRef string, metadata *pb.ContainerMetadata, sandbox string, terminal bool, stdin bool, stdinOnce bool, privileged bool, trusted bool, dir string, created time.Time, stopSignal string) (*Container, error) { state := &ContainerState{} state.Created = created c := &Container{ - id: id, - name: name, - bundlePath: bundlePath, - logPath: logPath, - labels: labels, - sandbox: sandbox, - netns: netns, - terminal: terminal, - stdin: stdin, - stdinOnce: stdinOnce, - privileged: privileged, - trusted: trusted, - metadata: metadata, - annotations: annotations, - image: image, - imageName: imageName, - imageRef: imageRef, - dir: dir, - state: state, - stopSignal: stopSignal, - opLock: new(sync.Mutex), + id: id, + name: name, + bundlePath: bundlePath, + logPath: logPath, + labels: labels, + sandbox: sandbox, + netns: netns, + terminal: terminal, + stdin: stdin, + stdinOnce: stdinOnce, + privileged: privileged, + trusted: trusted, + metadata: metadata, + annotations: annotations, + crioAnnotations: crioAnnotations, + image: image, + imageName: imageName, + imageRef: imageRef, + dir: dir, + state: state, + stopSignal: stopSignal, + opLock: new(sync.Mutex), } return c, nil } @@ -163,6 +165,11 @@ func (c *Container) Annotations() map[string]string { return c.annotations } +// CrioAnnotations returns the crio annotations of the container. +func (c *Container) CrioAnnotations() map[string]string { + return c.crioAnnotations +} + // Image returns the image of the container. func (c *Container) Image() string { return c.image diff --git a/server/container_create.go b/server/container_create.go index 1cbde263..7212ed02 100644 --- a/server/container_create.go +++ b/server/container_create.go @@ -862,6 +862,7 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string, specgen.AddAnnotation(annotations.Stdin, fmt.Sprintf("%v", containerConfig.Stdin)) specgen.AddAnnotation(annotations.StdinOnce, fmt.Sprintf("%v", containerConfig.StdinOnce)) specgen.AddAnnotation(annotations.Image, image) + specgen.AddAnnotation(annotations.ResolvPath, sb.InfraContainer().CrioAnnotations()[annotations.ResolvPath]) created := time.Now() specgen.AddAnnotation(annotations.Created, created.Format(time.RFC3339Nano)) @@ -1000,7 +1001,9 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string, return nil, err } - container, err := oci.NewContainer(containerID, containerName, containerInfo.RunDir, logPath, sb.NetNs(), labels, kubeAnnotations, image, imageName, imageRef, metadata, sb.ID(), containerConfig.Tty, containerConfig.Stdin, containerConfig.StdinOnce, sb.Privileged(), sb.Trusted(), containerInfo.Dir, created, containerImageConfig.Config.StopSignal) + crioAnnotations := specgen.Spec().Annotations + + container, err := oci.NewContainer(containerID, containerName, containerInfo.RunDir, logPath, sb.NetNs(), labels, crioAnnotations, kubeAnnotations, image, imageName, imageRef, metadata, sb.ID(), containerConfig.Tty, containerConfig.Stdin, containerConfig.StdinOnce, sb.Privileged(), sb.Trusted(), containerInfo.Dir, created, containerImageConfig.Config.StopSignal) if err != nil { return nil, err } diff --git a/server/inspect.go b/server/inspect.go index 50de0c85..6e3e813c 100644 --- a/server/inspect.go +++ b/server/inspect.go @@ -46,16 +46,17 @@ func (s *Server) getContainerInfo(id string, getContainerFunc func(id string) *o return types.ContainerInfo{}, errSandboxNotFound } return types.ContainerInfo{ - Name: ctr.Name(), - Pid: ctrState.Pid, - Image: ctr.Image(), - CreatedTime: ctrState.Created.UnixNano(), - Labels: ctr.Labels(), - Annotations: ctr.Annotations(), - Root: ctr.MountPoint(), - LogPath: ctr.LogPath(), - Sandbox: ctr.Sandbox(), - IP: sb.IP(), + Name: ctr.Name(), + Pid: ctrState.Pid, + Image: ctr.Image(), + CreatedTime: ctrState.Created.UnixNano(), + Labels: ctr.Labels(), + Annotations: ctr.Annotations(), + CrioAnnotations: ctr.CrioAnnotations(), + Root: ctr.MountPoint(), + LogPath: ctr.LogPath(), + Sandbox: ctr.Sandbox(), + IP: sb.IP(), }, nil } diff --git a/server/inspect_test.go b/server/inspect_test.go index 6ac2e4cd..8c892e43 100644 --- a/server/inspect_test.go +++ b/server/inspect_test.go @@ -67,7 +67,7 @@ func TestGetContainerInfo(t *testing.T) { "io.kubernetes.test1": "value1", } getContainerFunc := func(id string) *oci.Container { - container, err := oci.NewContainer("testid", "testname", "", "/container/logs", mockNetNS{}, labels, annotations, "imageName", "imageName", "imageRef", &runtime.ContainerMetadata{}, "testsandboxid", false, false, false, false, false, "/root/for/container", created, "SIGKILL") + container, err := oci.NewContainer("testid", "testname", "", "/container/logs", mockNetNS{}, labels, annotations, annotations, "imageName", "imageName", "imageRef", &runtime.ContainerMetadata{}, "testsandboxid", false, false, false, false, false, "/root/for/container", created, "SIGKILL") if err != nil { t.Fatal(err) } @@ -181,7 +181,7 @@ func TestGetContainerInfoCtrStateNil(t *testing.T) { labels := map[string]string{} annotations := map[string]string{} getContainerFunc := func(id string) *oci.Container { - container, err := oci.NewContainer("testid", "testname", "", "/container/logs", mockNetNS{}, labels, annotations, "imageName", "imageName", "imageRef", &runtime.ContainerMetadata{}, "testsandboxid", false, false, false, false, false, "/root/for/container", created, "SIGKILL") + container, err := oci.NewContainer("testid", "testname", "", "/container/logs", mockNetNS{}, labels, annotations, annotations, "imageName", "imageName", "imageRef", &runtime.ContainerMetadata{}, "testsandboxid", false, false, false, false, false, "/root/for/container", created, "SIGKILL") if err != nil { t.Fatal(err) } @@ -212,7 +212,7 @@ func TestGetContainerInfoSandboxNotFound(t *testing.T) { labels := map[string]string{} annotations := map[string]string{} getContainerFunc := func(id string) *oci.Container { - container, err := oci.NewContainer("testid", "testname", "", "/container/logs", mockNetNS{}, labels, annotations, "imageName", "imageName", "imageRef", &runtime.ContainerMetadata{}, "testsandboxid", false, false, false, false, false, "/root/for/container", created, "SIGKILL") + container, err := oci.NewContainer("testid", "testname", "", "/container/logs", mockNetNS{}, labels, annotations, annotations, "imageName", "imageName", "imageRef", &runtime.ContainerMetadata{}, "testsandboxid", false, false, false, false, false, "/root/for/container", created, "SIGKILL") if err != nil { t.Fatal(err) } diff --git a/server/sandbox_run.go b/server/sandbox_run.go index 0444e6c0..4a5a3046 100644 --- a/server/sandbox_run.go +++ b/server/sandbox_run.go @@ -472,7 +472,7 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest g.AddAnnotation(annotations.HostnamePath, hostnamePath) sb.AddHostnamePath(hostnamePath) - container, err := oci.NewContainer(id, containerName, podContainer.RunDir, logPath, sb.NetNs(), labels, kubeAnnotations, "", "", "", nil, id, false, false, false, sb.Privileged(), sb.Trusted(), podContainer.Dir, created, podContainer.Config.Config.StopSignal) + container, err := oci.NewContainer(id, containerName, podContainer.RunDir, logPath, sb.NetNs(), labels, g.Spec().Annotations, kubeAnnotations, "", "", "", nil, id, false, false, false, sb.Privileged(), sb.Trusted(), podContainer.Dir, created, podContainer.Config.Config.StopSignal) if err != nil { return nil, err } diff --git a/types/types.go b/types/types.go index 73b9a4e6..63780143 100644 --- a/types/types.go +++ b/types/types.go @@ -2,16 +2,17 @@ package types // ContainerInfo stores information about containers type ContainerInfo struct { - Name string `json:"name"` - Pid int `json:"pid"` - Image string `json:"image"` - CreatedTime int64 `json:"created_time"` - Labels map[string]string `json:"labels"` - Annotations map[string]string `json:"annotations"` - LogPath string `json:"log_path"` - Root string `json:"root"` - Sandbox string `json:"sandbox"` - IP string `json:"ip_address"` + Name string `json:"name"` + Pid int `json:"pid"` + Image string `json:"image"` + CreatedTime int64 `json:"created_time"` + Labels map[string]string `json:"labels"` + Annotations map[string]string `json:"annotations"` + CrioAnnotations map[string]string `json:"crio_annotations"` + LogPath string `json:"log_path"` + Root string `json:"root"` + Sandbox string `json:"sandbox"` + IP string `json:"ip_address"` } // CrioInfo stores information about the crio daemon From 1beb75d839df120e7950a574e27c90a864c9f82d Mon Sep 17 00:00:00 2001 From: Mrunal Patel Date: Sat, 23 Sep 2017 12:36:04 -0700 Subject: [PATCH 03/18] test: Add steps for testing crio client Signed-off-by: Mrunal Patel --- test/inspect.bats | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/test/inspect.bats b/test/inspect.bats index 277789ce..c63a688e 100644 --- a/test/inspect.bats +++ b/test/inspect.bats @@ -12,6 +12,11 @@ function teardown() { echo "$out" [[ "$out" =~ "\"cgroup_driver\":\"$CGROUP_MANAGER\"" ]] [[ "$out" =~ "\"storage_root\":\"$TESTDIR/crio\"" ]] + run crioctl info + echo "$output" + [ "$status" -eq 0 ] + [[ "$output" =~ "\"cgroup_driver\": \"$CGROUP_MANAGER\"" ]] + [[ "$output" =~ "\"storage_root\": \"$TESTDIR/crio\"" ]] stop_crio } @@ -32,13 +37,20 @@ function teardown() { [[ "$out" =~ "\"sandbox\":\"$pod_id\"" ]] [[ "$out" =~ "\"image\":\"redis:alpine\"" ]] + run crioctl ctr inspect --id $ctr_id + echo "$output" + [ "$status" -eq 0 ] + [[ "$output" =~ "\"sandbox\": \"$pod_id\"" ]] + [[ "$output" =~ "\"image\": \"redis:alpine\"" ]] + inet=`crioctl ctr execsync --id $ctr_id ip addr show dev eth0 scope global 2>&1 | grep inet` IFS=" " ip=`parse_pod_ip $inet` [[ "$out" =~ "\"ip_address\":\"$ip\"" ]] - [[ "$out" =~ "\"name\":\"k8s_container1_podsandbox1_redhat.test.crio_redhat-test-crio_1\"" ]] + [[ "$output" =~ "\"ip_address\": \"$ip\"" ]] + [[ "$output" =~ "\"name\": \"k8s_container1_podsandbox1_redhat.test.crio_redhat-test-crio_1\"" ]] # TODO: add some other check based on the json below: From e8cfe3b8676d45278723a6ff0b16c91561dcadd9 Mon Sep 17 00:00:00 2001 From: Antonio Murdaca Date: Mon, 18 Sep 2017 12:50:39 +0200 Subject: [PATCH 04/18] container_create: support seccomp docker/default annotation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes the following Origin/Kube test: ``` • Failure [10.323 seconds] [k8s.io] Security Context [Feature:SecurityContext] /go/src/github.com/openshift/origin/vendor/k8s.io/kubernetes/test/e2e/framework/framework.go:619 should support seccomp alpha docker/default annotation [Feature:Seccomp] [It] /go/src/github.com/openshift/origin/vendor/k8s.io/kubernetes/test/e2e/security_context.go:133 Expected error: <*errors.errorString | 0xc420cbacf0>: { s: "expected \"2\" in container output: Expected\n : Seccomp:\t0\n \nto contain substring\n : 2", } expected "2" in container output: Expected : Seccomp: 0 to contain substring : 2 not to have occurred } ``` Signed-off-by: Antonio Murdaca --- server/container_create.go | 10 +++------- test/seccomp.bats | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/server/container_create.go b/server/container_create.go index 1cbde263..3234c5bf 100644 --- a/server/container_create.go +++ b/server/container_create.go @@ -38,6 +38,7 @@ import ( const ( seccompUnconfined = "unconfined" seccompRuntimeDefault = "runtime/default" + seccompDockerDefault = "docker/default" seccompLocalhostPrefix = "localhost/" scopePrefix = "crio" @@ -1033,18 +1034,13 @@ func (s *Server) setupSeccomp(specgen *generate.Generator, cname string, sbAnnot specgen.Spec().Linux.Seccomp = nil return nil } - if profile == seccompRuntimeDefault { + if profile == seccompRuntimeDefault || profile == seccompDockerDefault { return seccomp.LoadProfileFromStruct(s.seccompProfile, specgen) } if !strings.HasPrefix(profile, seccompLocalhostPrefix) { return fmt.Errorf("unknown seccomp profile option: %q", profile) } - //file, err := ioutil.ReadFile(filepath.Join(s.seccompProfileRoot, strings.TrimPrefix(profile, seccompLocalhostPrefix))) - //if err != nil { - //return err - //} - // TODO(runcom): setup from provided node's seccomp profile - // can't do this yet, see https://issues.k8s.io/36997 + // FIXME: https://github.com/kubernetes/kubernetes/issues/39128 return nil } diff --git a/test/seccomp.bats b/test/seccomp.bats index 1c6229dc..56f30381 100644 --- a/test/seccomp.bats +++ b/test/seccomp.bats @@ -328,3 +328,41 @@ function teardown() { skip "need https://issues.k8s.io/36997" } + +# test running with ctr docker/default +# test that we cannot run with a syscall blocked by the default seccomp profile +@test "ctr seccomp profiles docker/default" { + # this test requires seccomp, so skip this test if seccomp is not enabled. + enabled=$(is_seccomp_enabled) + if [[ "$enabled" -eq 0 ]]; then + skip "skip this test since seccomp is not enabled." + fi + + sed -e 's/"chmod",//' "$CRIO_ROOT"/cri-o/seccomp.json > "$TESTDIR"/seccomp_profile1.json + sed -i 's/"fchmod",//' "$TESTDIR"/seccomp_profile1.json + sed -i 's/"fchmodat",//g' "$TESTDIR"/seccomp_profile1.json + + start_crio "$TESTDIR"/seccomp_profile1.json + + sed -e 's/%VALUE%/,"security\.alpha\.kubernetes\.io\/seccomp\/container\/k8s_testname2_seccomp2_redhat\.test\.crio_redhat-test-crio_0": "docker\/default"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp2.json + run crioctl pod run --name seccomp2 --config "$TESTDIR"/seccomp2.json + echo "$output" + [ "$status" -eq 0 ] + pod_id="$output" + run crioctl ctr create --name testname2 --config "$TESTDATA"/container_redis.json --pod "$pod_id" + echo "$output" + [ "$status" -eq 0 ] + ctr_id="$output" + run crioctl ctr start --id "$ctr_id" + echo "$output" + [ "$status" -eq 0 ] + run crioctl ctr execsync --id "$ctr_id" chmod 777 . + echo "$output" + [ "$status" -eq 0 ] + [[ "$output" =~ "Exit code: 1" ]] + [[ "$output" =~ "Operation not permitted" ]] + + cleanup_ctrs + cleanup_pods + stop_crio +} From 5e7c932771d80f8cbdcab929366a56d41c09a1bb Mon Sep 17 00:00:00 2001 From: Antonio Murdaca Date: Mon, 18 Sep 2017 13:04:23 +0200 Subject: [PATCH 05/18] vendor: update kube to v1.7.6 Signed-off-by: Antonio Murdaca --- vendor.conf | 5 +- .../pkg/util/strategicpatch/patch.go | 2 +- .../apiserver/pkg/features/kube_features.go | 11 +- .../apiserver/pkg/util/wsstream/conn.go | 5 +- .../client-go/discovery/discovery_client.go | 19 +- vendor/k8s.io/client-go/pkg/version/base.go | 2 +- vendor/k8s.io/kubernetes/pkg/api/types.go | 2 +- .../kubernetes/pkg/api/v1/generated.pb.go | 1443 +++++++++-------- .../kubernetes/pkg/api/v1/types.generated.go | 68 +- vendor/k8s.io/kubernetes/pkg/api/v1/types.go | 2 +- .../pkg/api/v1/zz_generated.conversion.go | 5 +- .../pkg/api/v1/zz_generated.deepcopy.go | 7 +- .../pkg/api/validation/validation.go | 17 +- .../pkg/api/zz_generated.deepcopy.go | 7 +- .../apis/autoscaling/v2alpha1/generated.pb.go | 167 +- .../apis/autoscaling/v2alpha1/generated.proto | 1 - 16 files changed, 893 insertions(+), 870 deletions(-) diff --git a/vendor.conf b/vendor.conf index 83137df8..0aae101f 100644 --- a/vendor.conf +++ b/vendor.conf @@ -1,6 +1,5 @@ -k8s.io/kubernetes v1.7.5 https://github.com/kubernetes/kubernetes -# https://github.com/kubernetes/client-go#compatibility-matrix -k8s.io/client-go v4.0.0 https://github.com/kubernetes/client-go +k8s.io/kubernetes v1.7.6 https://github.com/kubernetes/kubernetes +k8s.io/client-go release-4.0 https://github.com/kubernetes/client-go k8s.io/apimachinery release-1.7 https://github.com/kubernetes/apimachinery k8s.io/apiserver release-1.7 https://github.com/kubernetes/apiserver # diff --git a/vendor/k8s.io/apimachinery/pkg/util/strategicpatch/patch.go b/vendor/k8s.io/apimachinery/pkg/util/strategicpatch/patch.go index 828df443..8884c738 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/strategicpatch/patch.go +++ b/vendor/k8s.io/apimachinery/pkg/util/strategicpatch/patch.go @@ -1138,7 +1138,7 @@ func mergePatchIntoOriginal(original, patch map[string]interface{}, t reflect.Ty return err } case !foundOriginal && !foundPatch: - return nil + continue } // Split all items into patch items and server-only items and then enforce the order. diff --git a/vendor/k8s.io/apiserver/pkg/features/kube_features.go b/vendor/k8s.io/apiserver/pkg/features/kube_features.go index eab9a28d..1b896e1e 100644 --- a/vendor/k8s.io/apiserver/pkg/features/kube_features.go +++ b/vendor/k8s.io/apiserver/pkg/features/kube_features.go @@ -27,26 +27,20 @@ const ( // // alpha: v1.4 // MyFeature() bool - // owner: tallclair + // owner: timstclair // alpha: v1.5 // // StreamingProxyRedirects controls whether the apiserver should intercept (and follow) // redirects from the backend (Kubelet) for streaming requests (exec/attach/port-forward). StreamingProxyRedirects utilfeature.Feature = "StreamingProxyRedirects" - // owner: tallclair + // owner: timstclair // alpha: v1.7 // // AdvancedAuditing enables a much more general API auditing pipeline, which includes support for // pluggable output backends and an audit policy specifying how different requests should be // audited. AdvancedAuditing utilfeature.Feature = "AdvancedAuditing" - - // owner: @ilackams - // alpha: v1.7 - // - // Enables compression of REST responses (GET and LIST only) - APIResponseCompression utilfeature.Feature = "APIResponseCompression" ) func init() { @@ -59,5 +53,4 @@ func init() { var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureSpec{ StreamingProxyRedirects: {Default: true, PreRelease: utilfeature.Beta}, AdvancedAuditing: {Default: false, PreRelease: utilfeature.Alpha}, - APIResponseCompression: {Default: false, PreRelease: utilfeature.Alpha}, } diff --git a/vendor/k8s.io/apiserver/pkg/util/wsstream/conn.go b/vendor/k8s.io/apiserver/pkg/util/wsstream/conn.go index 6f26b227..f01638ad 100644 --- a/vendor/k8s.io/apiserver/pkg/util/wsstream/conn.go +++ b/vendor/k8s.io/apiserver/pkg/util/wsstream/conn.go @@ -87,10 +87,7 @@ var ( // IsWebSocketRequest returns true if the incoming request contains connection upgrade headers // for WebSockets. func IsWebSocketRequest(req *http.Request) bool { - if !strings.EqualFold(req.Header.Get("Upgrade"), "websocket") { - return false - } - return connectionUpgradeRegex.MatchString(strings.ToLower(req.Header.Get("Connection"))) + return connectionUpgradeRegex.MatchString(strings.ToLower(req.Header.Get("Connection"))) && strings.ToLower(req.Header.Get("Upgrade")) == "websocket" } // IgnoreReceives reads from a WebSocket until it is closed, then returns. If timeout is set, the diff --git a/vendor/k8s.io/client-go/discovery/discovery_client.go b/vendor/k8s.io/client-go/discovery/discovery_client.go index 0ee46b86..011dd9ec 100644 --- a/vendor/k8s.io/client-go/discovery/discovery_client.go +++ b/vendor/k8s.io/client-go/discovery/discovery_client.go @@ -183,7 +183,7 @@ func (d *DiscoveryClient) ServerResourcesForGroupVersion(groupVersion string) (r } // serverResources returns the supported resources for all groups and versions. -func (d *DiscoveryClient) serverResources(failEarly bool) ([]*metav1.APIResourceList, error) { +func (d *DiscoveryClient) serverResources() ([]*metav1.APIResourceList, error) { apiGroups, err := d.ServerGroups() if err != nil { return nil, err @@ -199,9 +199,6 @@ func (d *DiscoveryClient) serverResources(failEarly bool) ([]*metav1.APIResource if err != nil { // TODO: maybe restrict this to NotFound errors failedGroups[gv] = err - if failEarly { - return nil, &ErrGroupDiscoveryFailed{Groups: failedGroups} - } continue } @@ -245,7 +242,7 @@ func IsGroupDiscoveryFailedError(err error) bool { } // serverPreferredResources returns the supported resources with the version preferred by the server. -func (d *DiscoveryClient) serverPreferredResources(failEarly bool) ([]*metav1.APIResourceList, error) { +func (d *DiscoveryClient) serverPreferredResources() ([]*metav1.APIResourceList, error) { serverGroupList, err := d.ServerGroups() if err != nil { return nil, err @@ -265,9 +262,6 @@ func (d *DiscoveryClient) serverPreferredResources(failEarly bool) ([]*metav1.AP if err != nil { // TODO: maybe restrict this to NotFound errors failedGroups[groupVersion] = err - if failEarly { - return nil, &ErrGroupDiscoveryFailed{Groups: failedGroups} - } continue } @@ -312,9 +306,7 @@ func (d *DiscoveryClient) serverPreferredResources(failEarly bool) ([]*metav1.AP // ServerPreferredResources returns the supported resources with the version preferred by the // server. func (d *DiscoveryClient) ServerPreferredResources() ([]*metav1.APIResourceList, error) { - return withRetries(defaultRetries, func(retryEarly bool) ([]*metav1.APIResourceList, error) { - return d.serverPreferredResources(retryEarly) - }) + return withRetries(defaultRetries, d.serverPreferredResources) } // ServerPreferredNamespacedResources returns the supported namespaced resources with the @@ -391,12 +383,11 @@ func (d *DiscoveryClient) OpenAPISchema() (*spec.Swagger, error) { } // withRetries retries the given recovery function in case the groups supported by the server change after ServerGroup() returns. -func withRetries(maxRetries int, f func(failEarly bool) ([]*metav1.APIResourceList, error)) ([]*metav1.APIResourceList, error) { +func withRetries(maxRetries int, f func() ([]*metav1.APIResourceList, error)) ([]*metav1.APIResourceList, error) { var result []*metav1.APIResourceList var err error for i := 0; i < maxRetries; i++ { - failEarly := i < maxRetries-1 - result, err = f(failEarly) + result, err = f() if err == nil { return result, nil } diff --git a/vendor/k8s.io/client-go/pkg/version/base.go b/vendor/k8s.io/client-go/pkg/version/base.go index bc5d6870..e9e65bcb 100644 --- a/vendor/k8s.io/client-go/pkg/version/base.go +++ b/vendor/k8s.io/client-go/pkg/version/base.go @@ -51,7 +51,7 @@ var ( // semantic version is a git hash, but the version itself is no // longer the direct output of "git describe", but a slight // translation to be semver compliant. - gitVersion string = "v1.7.3-beta.0+$Format:%h$" + gitVersion string = "v1.7.5-beta.0+$Format:%h$" gitCommit string = "$Format:%H$" // sha1 from git, output of $(git rev-parse HEAD) gitTreeState string = "not a git tree" // state of git tree, either "clean" or "dirty" diff --git a/vendor/k8s.io/kubernetes/pkg/api/types.go b/vendor/k8s.io/kubernetes/pkg/api/types.go index b59f7202..454b94ef 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/types.go +++ b/vendor/k8s.io/kubernetes/pkg/api/types.go @@ -615,7 +615,7 @@ type EmptyDirVolumeSource struct { // The default is nil which means that the limit is undefined. // More info: http://kubernetes.io/docs/user-guide/volumes#emptydir // +optional - SizeLimit resource.Quantity + SizeLimit *resource.Quantity } // StorageMedium defines ways that storage can be allocated to a volume. diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/api/v1/generated.pb.go index d45d2d5e..f159e3e4 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/generated.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/generated.pb.go @@ -2591,14 +2591,16 @@ func (m *EmptyDirVolumeSource) MarshalTo(dAtA []byte) (int, error) { i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Medium))) i += copy(dAtA[i:], m.Medium) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.SizeLimit.Size())) - n31, err := m.SizeLimit.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.SizeLimit != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.SizeLimit.Size())) + n31, err := m.SizeLimit.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n31 } - i += n31 return i, nil } @@ -10033,8 +10035,10 @@ func (m *EmptyDirVolumeSource) Size() (n int) { _ = l l = len(m.Medium) n += 1 + l + sovGenerated(uint64(l)) - l = m.SizeLimit.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.SizeLimit != nil { + l = m.SizeLimit.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -12949,7 +12953,7 @@ func (this *EmptyDirVolumeSource) String() string { } s := strings.Join([]string{`&EmptyDirVolumeSource{`, `Medium:` + fmt.Sprintf("%v", this.Medium) + `,`, - `SizeLimit:` + strings.Replace(strings.Replace(this.SizeLimit.String(), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `SizeLimit:` + strings.Replace(fmt.Sprintf("%v", this.SizeLimit), "Quantity", "k8s_io_apimachinery_pkg_api_resource.Quantity", 1) + `,`, `}`, }, "") return s @@ -19966,6 +19970,9 @@ func (m *EmptyDirVolumeSource) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } + if m.SizeLimit == nil { + m.SizeLimit = &k8s_io_apimachinery_pkg_api_resource.Quantity{} + } if err := m.SizeLimit.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -44391,720 +44398,720 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 11429 bytes of a gzipped FileDescriptorProto + // 11430 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x8c, 0x24, 0xc7, 0x75, 0x98, 0x7a, 0x66, 0xf6, 0x63, 0xde, 0x7e, 0xd7, 0xed, 0x1d, 0x97, 0x2b, 0xf2, 0xf6, 0xd8, 0x14, 0xe9, 0x23, 0x79, 0xdc, 0xd3, 0x1d, 0x49, 0x91, 0x12, 0x65, 0x5a, 0xbb, 0x3b, 0xbb, 0x77, 0xeb, 0xfb, 0x1a, 0xd6, 0xec, 0xdd, 0x51, 0x14, 0x43, 0xb2, 0x6f, 0xba, 0x76, 0xb7, 0x79, 0xb3, 0xdd, 0xc3, 0xee, 0x9e, 0xbd, 0x5b, 0x1a, 0x06, 0x6c, 0x45, 0xb0, 0x14, 0x40, 0x49, 0x64, 0x38, - 0x02, 0x02, 0x27, 0x80, 0x02, 0x03, 0x71, 0x94, 0x6f, 0x2b, 0x82, 0x3e, 0x0c, 0xcb, 0x09, 0xe2, - 0x48, 0x8e, 0x1c, 0x24, 0x8e, 0x00, 0x23, 0xb1, 0x02, 0xc3, 0x6b, 0x6b, 0x85, 0xf8, 0x4f, 0x80, - 0xfc, 0x48, 0xfe, 0x6d, 0x3e, 0x10, 0xd4, 0x67, 0x57, 0xf5, 0xf4, 0x6c, 0xf7, 0x2c, 0x6f, 0xd7, - 0x94, 0x90, 0x7f, 0x33, 0xf5, 0x5e, 0xbd, 0xaa, 0xae, 0x8f, 0x57, 0xef, 0xbd, 0x7a, 0xef, 0x15, - 0x9c, 0xbb, 0xfb, 0x52, 0x34, 0xef, 0x05, 0xe7, 0xef, 0x76, 0xee, 0x90, 0xd0, 0x27, 0x31, 0x89, - 0xce, 0xb7, 0xef, 0x6e, 0x9c, 0x77, 0xda, 0xde, 0xf9, 0xed, 0x0b, 0xe7, 0x37, 0x88, 0x4f, 0x42, - 0x27, 0x26, 0xee, 0x7c, 0x3b, 0x0c, 0xe2, 0x00, 0x3d, 0xc2, 0xb1, 0xe7, 0x13, 0xec, 0xf9, 0xf6, - 0xdd, 0x8d, 0x79, 0xa7, 0xed, 0xcd, 0x6f, 0x5f, 0x98, 0x7d, 0x76, 0xc3, 0x8b, 0x37, 0x3b, 0x77, - 0xe6, 0x9b, 0xc1, 0xd6, 0xf9, 0x8d, 0x60, 0x23, 0x38, 0xcf, 0x2a, 0xdd, 0xe9, 0xac, 0xb3, 0x7f, - 0xec, 0x0f, 0xfb, 0xc5, 0x89, 0xcd, 0x3e, 0x2f, 0x9a, 0x76, 0xda, 0xde, 0x96, 0xd3, 0xdc, 0xf4, - 0x7c, 0x12, 0xee, 0xa8, 0xc6, 0x43, 0x12, 0x05, 0x9d, 0xb0, 0x49, 0xd2, 0x5d, 0x38, 0xb0, 0x56, - 0x74, 0x7e, 0x8b, 0xc4, 0x4e, 0x46, 0xc7, 0x67, 0xcf, 0xf7, 0xaa, 0x15, 0x76, 0xfc, 0xd8, 0xdb, - 0xea, 0x6e, 0xe6, 0x63, 0x79, 0x15, 0xa2, 0xe6, 0x26, 0xd9, 0x72, 0xba, 0xea, 0x3d, 0xd7, 0xab, - 0x5e, 0x27, 0xf6, 0x5a, 0xe7, 0x3d, 0x3f, 0x8e, 0xe2, 0x30, 0x5d, 0xc9, 0xfe, 0x63, 0x0b, 0xce, - 0x2c, 0xdc, 0x6e, 0x2c, 0xb7, 0x9c, 0x28, 0xf6, 0x9a, 0x8b, 0xad, 0xa0, 0x79, 0xb7, 0x11, 0x07, - 0x21, 0xb9, 0x15, 0xb4, 0x3a, 0x5b, 0xa4, 0xc1, 0x06, 0x02, 0x9d, 0x83, 0xe1, 0x6d, 0xf6, 0x7f, - 0xb5, 0x36, 0x63, 0x9d, 0xb1, 0xce, 0x56, 0x17, 0x27, 0xbf, 0xbf, 0x3b, 0xf7, 0xa1, 0xbd, 0xdd, - 0xb9, 0xe1, 0x5b, 0xa2, 0x1c, 0x2b, 0x0c, 0xf4, 0x24, 0x0c, 0xae, 0x47, 0x6b, 0x3b, 0x6d, 0x32, - 0x53, 0x62, 0xb8, 0xe3, 0x02, 0x77, 0x70, 0xa5, 0x41, 0x4b, 0xb1, 0x80, 0xa2, 0xf3, 0x50, 0x6d, - 0x3b, 0x61, 0xec, 0xc5, 0x5e, 0xe0, 0xcf, 0x94, 0xcf, 0x58, 0x67, 0x07, 0x16, 0xa7, 0x04, 0x6a, - 0xb5, 0x2e, 0x01, 0x38, 0xc1, 0xa1, 0xdd, 0x08, 0x89, 0xe3, 0xde, 0xf0, 0x5b, 0x3b, 0x33, 0x95, - 0x33, 0xd6, 0xd9, 0xe1, 0xa4, 0x1b, 0x58, 0x94, 0x63, 0x85, 0x61, 0x7f, 0xbb, 0x04, 0xc3, 0x0b, - 0xeb, 0xeb, 0x9e, 0xef, 0xc5, 0x3b, 0xe8, 0x6d, 0x18, 0xf5, 0x03, 0x97, 0xc8, 0xff, 0xec, 0x2b, - 0x46, 0x2e, 0x3e, 0x3d, 0x7f, 0xd0, 0xa2, 0x9a, 0xbf, 0xae, 0xd5, 0x58, 0x9c, 0xdc, 0xdb, 0x9d, - 0x1b, 0xd5, 0x4b, 0xb0, 0x41, 0x11, 0xbd, 0x01, 0x23, 0xed, 0xc0, 0x55, 0x0d, 0x94, 0x58, 0x03, - 0x4f, 0x1d, 0xdc, 0x40, 0x3d, 0xa9, 0xb0, 0x38, 0xb1, 0xb7, 0x3b, 0x37, 0xa2, 0x15, 0x60, 0x9d, - 0x1c, 0x6a, 0xc1, 0x04, 0xfd, 0xeb, 0xc7, 0x9e, 0x6a, 0xa1, 0xcc, 0x5a, 0x78, 0x36, 0xbf, 0x05, - 0xad, 0xd2, 0xe2, 0x89, 0xbd, 0xdd, 0xb9, 0x89, 0x54, 0x21, 0x4e, 0x93, 0xb6, 0xdf, 0x83, 0xf1, - 0x85, 0x38, 0x76, 0x9a, 0x9b, 0xc4, 0xe5, 0xf3, 0x8b, 0x9e, 0x87, 0x8a, 0xef, 0x6c, 0x11, 0x31, - 0xfb, 0x67, 0xc4, 0xb0, 0x57, 0xae, 0x3b, 0x5b, 0x64, 0x7f, 0x77, 0x6e, 0xf2, 0xa6, 0xef, 0xbd, - 0xdb, 0x11, 0x6b, 0x86, 0x96, 0x61, 0x86, 0x8d, 0x2e, 0x02, 0xb8, 0x64, 0xdb, 0x6b, 0x92, 0xba, - 0x13, 0x6f, 0x8a, 0xd5, 0x80, 0x44, 0x5d, 0xa8, 0x29, 0x08, 0xd6, 0xb0, 0xec, 0xcf, 0x5a, 0x50, - 0x5d, 0xd8, 0x0e, 0x3c, 0xb7, 0x1e, 0xb8, 0x11, 0xea, 0xc0, 0x44, 0x3b, 0x24, 0xeb, 0x24, 0x54, - 0x45, 0x33, 0xd6, 0x99, 0xf2, 0xd9, 0x91, 0x8b, 0x17, 0x73, 0xbe, 0xdb, 0xac, 0xb4, 0xec, 0xc7, - 0xe1, 0xce, 0xe2, 0x43, 0xa2, 0xe9, 0x89, 0x14, 0x14, 0xa7, 0xdb, 0xb0, 0xbf, 0x5b, 0x82, 0x93, - 0x0b, 0xef, 0x75, 0x42, 0x52, 0xf3, 0xa2, 0xbb, 0xe9, 0xad, 0xe0, 0x7a, 0xd1, 0xdd, 0xeb, 0xc9, - 0x60, 0xa8, 0x35, 0x58, 0x13, 0xe5, 0x58, 0x61, 0xa0, 0x67, 0x61, 0x88, 0xfe, 0xbe, 0x89, 0x57, - 0xc5, 0xd7, 0x9f, 0x10, 0xc8, 0x23, 0x35, 0x27, 0x76, 0x6a, 0x1c, 0x84, 0x25, 0x0e, 0xba, 0x06, - 0x23, 0x4d, 0xb6, 0x73, 0x37, 0xae, 0x05, 0x2e, 0x61, 0x33, 0x5c, 0x5d, 0x7c, 0x86, 0xa2, 0x2f, - 0x25, 0xc5, 0xfb, 0xbb, 0x73, 0x33, 0xbc, 0x6f, 0x82, 0x84, 0x06, 0xc3, 0x7a, 0x7d, 0x64, 0xab, - 0x8d, 0x58, 0x61, 0x94, 0x20, 0x63, 0x13, 0x9e, 0xd5, 0xf6, 0xd4, 0x00, 0xdb, 0x53, 0xa3, 0xd9, - 0xfb, 0x09, 0x5d, 0x80, 0xca, 0x5d, 0xcf, 0x77, 0x67, 0x06, 0x19, 0xad, 0x47, 0xe9, 0xf4, 0x5f, - 0xf1, 0x7c, 0x77, 0x7f, 0x77, 0x6e, 0xca, 0xe8, 0x0e, 0x2d, 0xc4, 0x0c, 0xd5, 0xfe, 0x47, 0x96, - 0x18, 0xc6, 0x15, 0xaf, 0x65, 0x72, 0x94, 0x8b, 0x00, 0x11, 0x69, 0x86, 0x24, 0xd6, 0x06, 0x52, - 0xad, 0x8c, 0x86, 0x82, 0x60, 0x0d, 0x8b, 0xf2, 0x8b, 0x68, 0xd3, 0x09, 0xd9, 0x02, 0x13, 0xc3, - 0xa9, 0xf8, 0x45, 0x43, 0x02, 0x70, 0x82, 0x63, 0xf0, 0x8b, 0x72, 0x2e, 0xbf, 0xf8, 0x3d, 0x0b, - 0x86, 0x16, 0x3d, 0xdf, 0xf5, 0xfc, 0x0d, 0xf4, 0x36, 0x0c, 0x53, 0x76, 0xee, 0x3a, 0xb1, 0x23, - 0x58, 0xc5, 0x47, 0xe5, 0x7a, 0xd3, 0xb9, 0xab, 0x5c, 0x71, 0xd1, 0x3c, 0xc5, 0xa6, 0xeb, 0xee, - 0xc6, 0x9d, 0x77, 0x48, 0x33, 0xbe, 0x46, 0x62, 0x27, 0xf9, 0x9c, 0xa4, 0x0c, 0x2b, 0xaa, 0xe8, - 0x26, 0x0c, 0xc6, 0x4e, 0xb8, 0x41, 0x62, 0xc1, 0x29, 0x72, 0xf6, 0x31, 0xa7, 0x81, 0xe9, 0x2a, - 0x25, 0x7e, 0x93, 0x24, 0x3c, 0x75, 0x8d, 0x11, 0xc1, 0x82, 0x98, 0xdd, 0x84, 0xd1, 0x25, 0xa7, - 0xed, 0xdc, 0xf1, 0x5a, 0x5e, 0xec, 0x91, 0x08, 0xfd, 0x0c, 0x94, 0x1d, 0xd7, 0x65, 0x7b, 0xa6, - 0xba, 0x78, 0x72, 0x6f, 0x77, 0xae, 0xbc, 0xe0, 0xd2, 0x29, 0x03, 0x85, 0xb5, 0x83, 0x29, 0x06, - 0x7a, 0x1a, 0x2a, 0x6e, 0x18, 0xb4, 0x67, 0x4a, 0x0c, 0xf3, 0x14, 0x9d, 0xdd, 0x5a, 0x18, 0xb4, - 0x53, 0xa8, 0x0c, 0xc7, 0xfe, 0x5e, 0x09, 0xd0, 0x12, 0x69, 0x6f, 0xae, 0x34, 0x8c, 0x39, 0x3d, - 0x0b, 0xc3, 0x5b, 0x81, 0xef, 0xc5, 0x41, 0x18, 0x89, 0x06, 0xd9, 0x52, 0xba, 0x26, 0xca, 0xb0, - 0x82, 0xa2, 0x33, 0x50, 0x69, 0x27, 0x1c, 0x61, 0x54, 0x72, 0x13, 0xc6, 0x0b, 0x18, 0x84, 0x62, - 0x74, 0x22, 0x12, 0x8a, 0x2d, 0xa0, 0x30, 0x6e, 0x46, 0x24, 0xc4, 0x0c, 0x92, 0xac, 0x20, 0xba, - 0xb6, 0xc4, 0x02, 0x4f, 0xad, 0x20, 0x0a, 0xc1, 0x1a, 0x16, 0x7a, 0x0b, 0xaa, 0xfc, 0x1f, 0x26, - 0xeb, 0x6c, 0xb5, 0xe7, 0xf2, 0x91, 0xab, 0x41, 0xd3, 0x69, 0xa5, 0x07, 0x7f, 0x8c, 0xad, 0x38, - 0x49, 0x08, 0x27, 0x34, 0x8d, 0x15, 0x37, 0x98, 0xbb, 0xe2, 0xfe, 0xb6, 0x05, 0x68, 0xc9, 0xf3, - 0x5d, 0x12, 0x1e, 0xc3, 0x69, 0xdb, 0xdf, 0x66, 0xf8, 0x13, 0xda, 0xb5, 0x60, 0xab, 0x1d, 0xf8, - 0xc4, 0x8f, 0x97, 0x02, 0xdf, 0xe5, 0x27, 0xf0, 0x27, 0xa0, 0x12, 0xd3, 0xa6, 0x78, 0xb7, 0x9e, - 0x94, 0xd3, 0x42, 0x1b, 0xd8, 0xdf, 0x9d, 0x3b, 0xd5, 0x5d, 0x83, 0x75, 0x81, 0xd5, 0x41, 0x1f, - 0x87, 0xc1, 0x28, 0x76, 0xe2, 0x4e, 0x24, 0x3a, 0xfa, 0x98, 0xec, 0x68, 0x83, 0x95, 0xee, 0xef, - 0xce, 0x4d, 0xa8, 0x6a, 0xbc, 0x08, 0x8b, 0x0a, 0xe8, 0x29, 0x18, 0xda, 0x22, 0x51, 0xe4, 0x6c, - 0x48, 0x9e, 0x38, 0x21, 0xea, 0x0e, 0x5d, 0xe3, 0xc5, 0x58, 0xc2, 0xd1, 0xe3, 0x30, 0x40, 0xc2, - 0x30, 0x08, 0xc5, 0x8a, 0x18, 0x13, 0x88, 0x03, 0xcb, 0xb4, 0x10, 0x73, 0x98, 0xfd, 0x5f, 0x2c, - 0x98, 0x50, 0x7d, 0xe5, 0x6d, 0x1d, 0xc3, 0x96, 0x77, 0x01, 0x9a, 0xf2, 0x03, 0x23, 0xb6, 0xd1, - 0xb4, 0x36, 0xb2, 0x97, 0x5f, 0xf7, 0x80, 0x26, 0x6d, 0xa8, 0xa2, 0x08, 0x6b, 0x74, 0xed, 0x7f, - 0x6b, 0xc1, 0x89, 0xd4, 0xb7, 0x5d, 0xf5, 0xa2, 0x18, 0xbd, 0xd1, 0xf5, 0x7d, 0xf3, 0xc5, 0xbe, - 0x8f, 0xd6, 0x66, 0x5f, 0xa7, 0xd6, 0x8b, 0x2c, 0xd1, 0xbe, 0x0d, 0xc3, 0x80, 0x17, 0x93, 0x2d, - 0xf9, 0x59, 0xcf, 0x16, 0xfc, 0x2c, 0xde, 0xbf, 0x64, 0x96, 0x56, 0x29, 0x0d, 0xcc, 0x49, 0xd9, - 0xff, 0xcb, 0x82, 0xea, 0x52, 0xe0, 0xaf, 0x7b, 0x1b, 0xd7, 0x9c, 0xf6, 0x31, 0xcc, 0x4f, 0x03, - 0x2a, 0x8c, 0x3a, 0xff, 0x84, 0x0b, 0x79, 0x9f, 0x20, 0x3a, 0x36, 0x4f, 0xcf, 0x3d, 0x2e, 0x5f, - 0x28, 0x36, 0x45, 0x8b, 0x30, 0x23, 0x36, 0xfb, 0x22, 0x54, 0x15, 0x02, 0x9a, 0x84, 0xf2, 0x5d, - 0xc2, 0x85, 0xcf, 0x2a, 0xa6, 0x3f, 0xd1, 0x34, 0x0c, 0x6c, 0x3b, 0xad, 0x8e, 0xd8, 0xbc, 0x98, - 0xff, 0xf9, 0x44, 0xe9, 0x25, 0xcb, 0xfe, 0x1e, 0xdb, 0x81, 0xa2, 0x91, 0x65, 0x7f, 0x5b, 0x30, - 0x87, 0xcf, 0x59, 0x30, 0xdd, 0xca, 0x60, 0x4a, 0x62, 0x4c, 0x0e, 0xc3, 0xce, 0x1e, 0x11, 0xdd, - 0x9e, 0xce, 0x82, 0xe2, 0xcc, 0xd6, 0x28, 0xaf, 0x0f, 0xda, 0x74, 0xc1, 0x39, 0x2d, 0xd6, 0x75, - 0x21, 0x36, 0xdc, 0x10, 0x65, 0x58, 0x41, 0xed, 0xbf, 0xb0, 0x60, 0x5a, 0x7d, 0xc7, 0x15, 0xb2, - 0xd3, 0x20, 0x2d, 0xd2, 0x8c, 0x83, 0xf0, 0x83, 0xf2, 0x25, 0x8f, 0xf2, 0x39, 0xe1, 0x3c, 0x69, - 0x44, 0x10, 0x28, 0x5f, 0x21, 0x3b, 0x7c, 0x82, 0xf4, 0x0f, 0x2d, 0x1f, 0xf8, 0xa1, 0xbf, 0x63, - 0xc1, 0x98, 0xfa, 0xd0, 0x63, 0xd8, 0x72, 0x57, 0xcd, 0x2d, 0xf7, 0x33, 0x05, 0xd7, 0x6b, 0x8f, - 0xcd, 0xf6, 0xb7, 0x4a, 0x94, 0x6d, 0x08, 0x9c, 0x7a, 0x18, 0xd0, 0x41, 0xa2, 0x1c, 0xff, 0x03, - 0x32, 0x4b, 0xfd, 0x7d, 0xec, 0x15, 0xb2, 0xb3, 0x16, 0x50, 0x69, 0x22, 0xfb, 0x63, 0x8d, 0x49, - 0xad, 0x1c, 0x38, 0xa9, 0x7f, 0x50, 0x82, 0x93, 0x6a, 0x58, 0x8c, 0x53, 0xfa, 0xa7, 0x72, 0x60, - 0x2e, 0xc0, 0x88, 0x4b, 0xd6, 0x9d, 0x4e, 0x2b, 0x56, 0x0a, 0xc8, 0x00, 0xd7, 0x4c, 0x6b, 0x49, - 0x31, 0xd6, 0x71, 0xfa, 0x18, 0xcb, 0xaf, 0x8c, 0x30, 0x7e, 0x1e, 0x3b, 0x74, 0xd5, 0x53, 0x09, - 0x4f, 0xd3, 0x28, 0x47, 0x75, 0x8d, 0x52, 0x68, 0x8f, 0x8f, 0xc3, 0x80, 0xb7, 0x45, 0xcf, 0xfc, - 0x92, 0x79, 0x94, 0xaf, 0xd2, 0x42, 0xcc, 0x61, 0xe8, 0x09, 0x18, 0x6a, 0x06, 0x5b, 0x5b, 0x8e, - 0xef, 0xce, 0x94, 0x99, 0xcc, 0x39, 0x42, 0xc5, 0x82, 0x25, 0x5e, 0x84, 0x25, 0x0c, 0x3d, 0x02, - 0x15, 0x27, 0xdc, 0x88, 0x66, 0x2a, 0x0c, 0x67, 0x98, 0xb6, 0xb4, 0x10, 0x6e, 0x44, 0x98, 0x95, - 0x52, 0x59, 0xf2, 0x5e, 0x10, 0xde, 0xf5, 0xfc, 0x8d, 0x9a, 0x17, 0x32, 0xc1, 0x50, 0x93, 0x25, - 0x6f, 0x2b, 0x08, 0xd6, 0xb0, 0x50, 0x1d, 0x06, 0xda, 0x41, 0x18, 0x47, 0x33, 0x83, 0x6c, 0xe0, - 0x9f, 0xc9, 0xdd, 0x7e, 0xfc, 0xbb, 0xeb, 0x41, 0x18, 0x27, 0x9f, 0x42, 0xff, 0x45, 0x98, 0x13, - 0x42, 0x4b, 0x50, 0x26, 0xfe, 0xf6, 0xcc, 0x10, 0xa3, 0xf7, 0x91, 0x83, 0xe9, 0x2d, 0xfb, 0xdb, - 0xb7, 0x9c, 0x30, 0xe1, 0x57, 0xcb, 0xfe, 0x36, 0xa6, 0xb5, 0x51, 0x13, 0xaa, 0xd2, 0x7e, 0x15, - 0xcd, 0x0c, 0x17, 0x59, 0x8a, 0x58, 0xa0, 0x63, 0xf2, 0x6e, 0xc7, 0x0b, 0xc9, 0x16, 0xf1, 0xe3, - 0x28, 0x51, 0xac, 0x24, 0x34, 0xc2, 0x09, 0x5d, 0xd4, 0x84, 0x51, 0x2e, 0x7f, 0x5e, 0x0b, 0x3a, - 0x7e, 0x1c, 0xcd, 0x54, 0x59, 0x97, 0x73, 0x8c, 0x1d, 0xb7, 0x92, 0x1a, 0x8b, 0xd3, 0x82, 0xfc, - 0xa8, 0x56, 0x18, 0x61, 0x83, 0x28, 0x7a, 0x03, 0xc6, 0x5a, 0xde, 0x36, 0xf1, 0x49, 0x14, 0xd5, - 0xc3, 0xe0, 0x0e, 0x99, 0x01, 0xf6, 0x35, 0x8f, 0xe7, 0x29, 0xfe, 0xc1, 0x1d, 0xb2, 0x38, 0xb5, - 0xb7, 0x3b, 0x37, 0x76, 0x55, 0xaf, 0x8d, 0x4d, 0x62, 0xe8, 0x2d, 0x18, 0xa7, 0xc2, 0xae, 0x97, - 0x90, 0x1f, 0x29, 0x4e, 0x1e, 0xed, 0xed, 0xce, 0x8d, 0x63, 0xa3, 0x3a, 0x4e, 0x91, 0x43, 0x6b, - 0x50, 0x6d, 0x79, 0xeb, 0xa4, 0xb9, 0xd3, 0x6c, 0x91, 0x99, 0x51, 0x46, 0x3b, 0x67, 0x73, 0x5e, - 0x95, 0xe8, 0x5c, 0xc1, 0x50, 0x7f, 0x71, 0x42, 0x08, 0xdd, 0x82, 0x53, 0x31, 0x09, 0xb7, 0x3c, - 0xdf, 0xa1, 0x9b, 0x4a, 0x48, 0xbf, 0xcc, 0xba, 0x32, 0xc6, 0x56, 0xed, 0x69, 0x31, 0xb0, 0xa7, - 0xd6, 0x32, 0xb1, 0x70, 0x8f, 0xda, 0xe8, 0x06, 0x4c, 0xb0, 0xfd, 0x54, 0xef, 0xb4, 0x5a, 0xf5, - 0xa0, 0xe5, 0x35, 0x77, 0x66, 0xc6, 0x19, 0xc1, 0x27, 0xa4, 0xcd, 0x64, 0xd5, 0x04, 0x53, 0xc5, - 0x30, 0xf9, 0x87, 0xd3, 0xb5, 0x51, 0x0b, 0x26, 0x22, 0xd2, 0xec, 0x84, 0x5e, 0xbc, 0x43, 0xd7, - 0x3e, 0xb9, 0x1f, 0xcf, 0x4c, 0x14, 0x51, 0x74, 0x1b, 0x66, 0x25, 0x6e, 0xb0, 0x4a, 0x15, 0xe2, - 0x34, 0x69, 0xca, 0x2a, 0xa2, 0xd8, 0xf5, 0xfc, 0x99, 0x49, 0xc6, 0x81, 0xd4, 0xfe, 0x6a, 0xd0, - 0x42, 0xcc, 0x61, 0xcc, 0x7e, 0x40, 0x7f, 0xdc, 0xa0, 0x5c, 0x7a, 0x8a, 0x21, 0x26, 0xf6, 0x03, - 0x09, 0xc0, 0x09, 0x0e, 0x15, 0x0d, 0xe2, 0x78, 0x67, 0x06, 0x31, 0x54, 0xb5, 0xd5, 0xd6, 0xd6, - 0x3e, 0x8d, 0x69, 0x39, 0xba, 0x05, 0x43, 0xc4, 0xdf, 0x5e, 0x09, 0x83, 0xad, 0x99, 0x13, 0x45, - 0x78, 0xc0, 0x32, 0x47, 0xe6, 0xe7, 0x47, 0xa2, 0xc2, 0x88, 0x62, 0x2c, 0x89, 0xa1, 0xfb, 0x30, - 0x93, 0x31, 0x4b, 0x7c, 0x52, 0xa6, 0xd9, 0xa4, 0x7c, 0x52, 0xd4, 0x9d, 0x59, 0xeb, 0x81, 0xb7, - 0x7f, 0x00, 0x0c, 0xf7, 0xa4, 0x6e, 0xdf, 0x81, 0x71, 0xc5, 0xa8, 0xd8, 0x7c, 0xa3, 0x39, 0x18, - 0xa0, 0xbc, 0x58, 0x2a, 0xf4, 0x55, 0x3a, 0xa8, 0x94, 0x45, 0x47, 0x98, 0x97, 0xb3, 0x41, 0xf5, - 0xde, 0x23, 0x8b, 0x3b, 0x31, 0xe1, 0x8a, 0x5d, 0x59, 0x1b, 0x54, 0x09, 0xc0, 0x09, 0x8e, 0xfd, - 0x7f, 0xb9, 0x98, 0x94, 0x70, 0xc3, 0x02, 0x27, 0xc1, 0x39, 0x18, 0xde, 0x0c, 0xa2, 0x98, 0x62, - 0xb3, 0x36, 0x06, 0x12, 0xc1, 0xe8, 0xb2, 0x28, 0xc7, 0x0a, 0x03, 0xbd, 0x0c, 0x63, 0x4d, 0xbd, - 0x01, 0x71, 0x8c, 0x9d, 0x14, 0x55, 0xcc, 0xd6, 0xb1, 0x89, 0x8b, 0x5e, 0x82, 0x61, 0x66, 0x18, - 0x6f, 0x06, 0x2d, 0xa1, 0x42, 0xca, 0x53, 0x79, 0xb8, 0x2e, 0xca, 0xf7, 0xb5, 0xdf, 0x58, 0x61, - 0x53, 0x45, 0x9c, 0x76, 0x61, 0xb5, 0x2e, 0x0e, 0x10, 0xa5, 0x88, 0x5f, 0x66, 0xa5, 0x58, 0x40, - 0xed, 0xdf, 0x2a, 0x69, 0xa3, 0x4c, 0x15, 0x20, 0x82, 0x5e, 0x87, 0xa1, 0x7b, 0x8e, 0x17, 0x7b, - 0xfe, 0x86, 0x90, 0x1e, 0x9e, 0x2b, 0x78, 0x9a, 0xb0, 0xea, 0xb7, 0x79, 0x55, 0x7e, 0xf2, 0x89, - 0x3f, 0x58, 0x12, 0xa4, 0xb4, 0xc3, 0x8e, 0xef, 0x53, 0xda, 0xa5, 0xfe, 0x69, 0x63, 0x5e, 0x95, - 0xd3, 0x16, 0x7f, 0xb0, 0x24, 0x88, 0xd6, 0x01, 0xe4, 0x5a, 0x22, 0xae, 0x30, 0x48, 0x7f, 0xac, - 0x1f, 0xf2, 0x6b, 0xaa, 0xf6, 0xe2, 0x38, 0x3d, 0x6b, 0x93, 0xff, 0x58, 0xa3, 0x6c, 0xc7, 0x4c, - 0x08, 0xeb, 0xee, 0x16, 0xfa, 0x0c, 0xdd, 0xd2, 0x4e, 0x18, 0x13, 0x77, 0x21, 0x4e, 0xdb, 0xf4, - 0x0f, 0x16, 0xb1, 0xd7, 0xbc, 0x2d, 0xa2, 0x6f, 0x7f, 0x41, 0x04, 0x27, 0xf4, 0xec, 0x6f, 0x95, - 0x61, 0xa6, 0x57, 0x77, 0xe9, 0x92, 0x24, 0xf7, 0xbd, 0x78, 0x89, 0x8a, 0x49, 0x96, 0xb9, 0x24, - 0x97, 0x45, 0x39, 0x56, 0x18, 0x74, 0x6d, 0x44, 0xde, 0x86, 0x54, 0x96, 0x06, 0x92, 0xb5, 0xd1, - 0x60, 0xa5, 0x58, 0x40, 0x29, 0x5e, 0x48, 0x9c, 0x48, 0xdc, 0x87, 0x68, 0x6b, 0x08, 0xb3, 0x52, - 0x2c, 0xa0, 0xba, 0x41, 0xa4, 0x92, 0x63, 0x10, 0x31, 0x86, 0x68, 0xe0, 0xc1, 0x0e, 0x11, 0x7a, - 0x13, 0x60, 0xdd, 0xf3, 0xbd, 0x68, 0x93, 0x51, 0x1f, 0xec, 0x9b, 0xba, 0x12, 0xb2, 0x56, 0x14, - 0x15, 0xac, 0x51, 0x44, 0x2f, 0xc0, 0x88, 0xda, 0x9e, 0xab, 0xb5, 0x99, 0x21, 0xd3, 0x86, 0x9e, - 0xf0, 0xaa, 0x1a, 0xd6, 0xf1, 0xec, 0x77, 0xd2, 0xeb, 0x45, 0xec, 0x0a, 0x6d, 0x7c, 0xad, 0xa2, - 0xe3, 0x5b, 0x3a, 0x78, 0x7c, 0xed, 0xff, 0x5c, 0x86, 0x09, 0xa3, 0xb1, 0x4e, 0x54, 0x80, 0xa3, - 0xbd, 0x4a, 0x0f, 0x2c, 0x27, 0x26, 0x62, 0x4f, 0x9e, 0xeb, 0x67, 0xd3, 0xe8, 0xc7, 0x1b, 0xdd, - 0x0b, 0x9c, 0x12, 0xda, 0x84, 0x6a, 0xcb, 0x89, 0x98, 0x49, 0x85, 0x88, 0xbd, 0xd8, 0x1f, 0xd9, - 0x44, 0xfd, 0x70, 0xa2, 0x58, 0x3b, 0x3d, 0x78, 0x2b, 0x09, 0x71, 0x7a, 0xda, 0x52, 0x61, 0x47, - 0x5e, 0xc2, 0xa9, 0xee, 0x50, 0x89, 0x68, 0x07, 0x73, 0x18, 0x7a, 0x09, 0x46, 0x43, 0xc2, 0x56, - 0xca, 0x12, 0x95, 0xe7, 0xd8, 0xd2, 0x1b, 0x48, 0x04, 0x3f, 0xac, 0xc1, 0xb0, 0x81, 0x99, 0xc8, - 0xfd, 0x83, 0x07, 0xc8, 0xfd, 0x4f, 0xc1, 0x10, 0xfb, 0xa1, 0x56, 0x85, 0x9a, 0xa1, 0x55, 0x5e, - 0x8c, 0x25, 0x3c, 0xbd, 0x88, 0x86, 0x0b, 0x2e, 0xa2, 0xa7, 0x61, 0xbc, 0xe6, 0x90, 0xad, 0xc0, - 0x5f, 0xf6, 0xdd, 0x76, 0xe0, 0xf9, 0x31, 0x9a, 0x81, 0x0a, 0x3b, 0x4f, 0xf8, 0x7e, 0xaf, 0x50, - 0x0a, 0xb8, 0x42, 0x65, 0x77, 0xfb, 0x4f, 0x4a, 0x30, 0x56, 0x23, 0x2d, 0x12, 0x13, 0xae, 0xf7, - 0x44, 0x68, 0x05, 0xd0, 0x46, 0xe8, 0x34, 0x49, 0x9d, 0x84, 0x5e, 0xe0, 0x36, 0x48, 0x33, 0xf0, - 0xd9, 0xdd, 0x15, 0x3d, 0x20, 0x4f, 0xed, 0xed, 0xce, 0xa1, 0x4b, 0x5d, 0x50, 0x9c, 0x51, 0x03, - 0xb9, 0x30, 0xd6, 0x0e, 0x89, 0x61, 0x37, 0xb4, 0xf2, 0x45, 0x8d, 0xba, 0x5e, 0x85, 0x4b, 0xc3, - 0x46, 0x11, 0x36, 0x89, 0xa2, 0x4f, 0xc1, 0x64, 0x10, 0xb6, 0x37, 0x1d, 0xbf, 0x46, 0xda, 0xc4, - 0x77, 0xa9, 0x0a, 0x20, 0xac, 0x1d, 0xd3, 0x7b, 0xbb, 0x73, 0x93, 0x37, 0x52, 0x30, 0xdc, 0x85, - 0x8d, 0x5e, 0x87, 0xa9, 0x76, 0x18, 0xb4, 0x9d, 0x0d, 0xb6, 0x64, 0x84, 0xb4, 0xc2, 0x79, 0xd3, - 0xb9, 0xbd, 0xdd, 0xb9, 0xa9, 0x7a, 0x1a, 0xb8, 0xbf, 0x3b, 0x77, 0x82, 0x0d, 0x19, 0x2d, 0x49, - 0x80, 0xb8, 0x9b, 0x8c, 0xfd, 0x2e, 0x9c, 0xac, 0x05, 0xf7, 0xfc, 0x7b, 0x4e, 0xe8, 0x2e, 0xd4, - 0x57, 0x35, 0xe3, 0xc4, 0x6b, 0x52, 0xf9, 0xe5, 0x77, 0x82, 0x39, 0x27, 0x9b, 0x46, 0x83, 0xab, - 0x1d, 0x2b, 0x5e, 0x8b, 0xf4, 0x30, 0x87, 0xfc, 0xe3, 0x92, 0xd1, 0x66, 0x82, 0xaf, 0xee, 0x2e, - 0xac, 0x9e, 0x77, 0x17, 0x9f, 0x81, 0xe1, 0x75, 0x8f, 0xb4, 0x5c, 0x4c, 0xd6, 0xc5, 0x6c, 0x5d, - 0x28, 0x72, 0xb9, 0xb3, 0x42, 0xeb, 0x48, 0xeb, 0x18, 0x57, 0xa2, 0x57, 0x04, 0x19, 0xac, 0x08, - 0xa2, 0x0e, 0x4c, 0x4a, 0x3d, 0x4c, 0x42, 0xc5, 0x66, 0x7f, 0xae, 0x98, 0x9a, 0x67, 0x36, 0xc3, - 0xa6, 0x17, 0xa7, 0x08, 0xe2, 0xae, 0x26, 0xa8, 0xfe, 0xbc, 0x45, 0x8f, 0xba, 0x0a, 0x5b, 0xfa, - 0x4c, 0x7f, 0x66, 0xa6, 0x00, 0x56, 0x6a, 0xff, 0xa6, 0x05, 0x0f, 0x75, 0x8d, 0x96, 0xb0, 0x93, - 0x1c, 0xd9, 0x1c, 0xa5, 0x8d, 0x15, 0xa5, 0x7c, 0x63, 0x85, 0xfd, 0x5b, 0x16, 0x4c, 0x2f, 0x6f, - 0xb5, 0xe3, 0x9d, 0x9a, 0x67, 0xde, 0xb9, 0xbc, 0x08, 0x83, 0x5b, 0xc4, 0xf5, 0x3a, 0x5b, 0x62, - 0x5e, 0xe7, 0xe4, 0xc1, 0x70, 0x8d, 0x95, 0xee, 0xef, 0xce, 0x8d, 0x35, 0xe2, 0x20, 0x74, 0x36, - 0x08, 0x2f, 0xc0, 0x02, 0x9d, 0x5d, 0x29, 0x79, 0xef, 0x91, 0xab, 0xde, 0x96, 0x27, 0xaf, 0xf2, - 0x0e, 0x34, 0xf2, 0xcd, 0xcb, 0xa1, 0x9d, 0x7f, 0xb5, 0xe3, 0xf8, 0xb1, 0x17, 0xef, 0x98, 0xf2, - 0x32, 0x23, 0x84, 0x13, 0x9a, 0xf6, 0x8f, 0x2c, 0x98, 0x90, 0x1c, 0x68, 0xc1, 0x75, 0x43, 0x12, - 0x45, 0x68, 0x16, 0x4a, 0x5e, 0x5b, 0xf4, 0x14, 0x44, 0xed, 0xd2, 0x6a, 0x1d, 0x97, 0xbc, 0x36, - 0x7a, 0x1d, 0xaa, 0xfc, 0x2e, 0x30, 0x59, 0x7e, 0x7d, 0xde, 0x2d, 0x32, 0xed, 0x73, 0x4d, 0xd2, - 0xc0, 0x09, 0x39, 0x29, 0x87, 0xb3, 0xb3, 0xad, 0x6c, 0xde, 0x4c, 0x5d, 0x16, 0xe5, 0x58, 0x61, - 0xa0, 0xb3, 0x30, 0xec, 0x07, 0x2e, 0xbf, 0xae, 0xe5, 0x9c, 0x80, 0x2d, 0xea, 0xeb, 0xa2, 0x0c, - 0x2b, 0xa8, 0xfd, 0x45, 0x0b, 0x46, 0xe5, 0x37, 0x16, 0x54, 0x09, 0xe8, 0x36, 0x4c, 0xd4, 0x81, - 0x64, 0x1b, 0x52, 0x91, 0x9e, 0x41, 0x0c, 0x49, 0xbe, 0xdc, 0x8f, 0x24, 0x6f, 0xff, 0x76, 0x09, - 0xc6, 0x65, 0x77, 0x1a, 0x9d, 0x3b, 0x11, 0xa1, 0x82, 0x4e, 0xd5, 0xe1, 0x83, 0x4f, 0xe4, 0x4a, - 0x7e, 0x36, 0x4f, 0xdb, 0x33, 0xe6, 0x2c, 0x99, 0xe5, 0x05, 0x49, 0x07, 0x27, 0x24, 0xd1, 0x36, - 0x4c, 0xf9, 0x41, 0xcc, 0x0e, 0x50, 0x05, 0x2f, 0x76, 0x97, 0x92, 0x6e, 0xe7, 0x61, 0xd1, 0xce, - 0xd4, 0xf5, 0x34, 0x3d, 0xdc, 0xdd, 0x04, 0xba, 0x21, 0xad, 0x58, 0x65, 0xd6, 0xd6, 0xd3, 0xc5, - 0xda, 0xea, 0x6d, 0xc4, 0xb2, 0x7f, 0xdf, 0x82, 0xaa, 0x44, 0x3b, 0x8e, 0x4b, 0xb5, 0xdb, 0x30, - 0x14, 0xb1, 0x29, 0x92, 0xc3, 0x75, 0xae, 0xd8, 0x27, 0xf0, 0x79, 0x4d, 0xa4, 0x06, 0xfe, 0x3f, - 0xc2, 0x92, 0x1a, 0x33, 0xe7, 0xab, 0x0f, 0xf9, 0xc0, 0x99, 0xf3, 0x55, 0xcf, 0x7a, 0xdf, 0x9d, - 0x8d, 0x19, 0xf6, 0x06, 0x2a, 0xfa, 0xb6, 0x43, 0xb2, 0xee, 0xdd, 0x4f, 0x8b, 0xbe, 0x75, 0x56, - 0x8a, 0x05, 0x14, 0xad, 0xc3, 0x68, 0x53, 0x1a, 0xbc, 0x13, 0x16, 0xf2, 0xd1, 0x82, 0xb7, 0x0b, - 0xea, 0xa2, 0x8a, 0xfb, 0x4b, 0x2d, 0x69, 0x94, 0xb0, 0x41, 0x97, 0xf2, 0xa9, 0xe4, 0x2e, 0xbe, - 0x5c, 0xd0, 0x34, 0x14, 0x92, 0x38, 0x69, 0xa1, 0xe7, 0x35, 0xbc, 0xfd, 0x55, 0x0b, 0x06, 0xb9, - 0x85, 0xb4, 0x98, 0x99, 0x59, 0xbb, 0x82, 0x4b, 0xc6, 0xf3, 0x16, 0x2d, 0x14, 0x37, 0x72, 0xe8, - 0x36, 0x54, 0xd9, 0x0f, 0x66, 0xed, 0x29, 0x17, 0x71, 0x1e, 0xe3, 0xed, 0xeb, 0x5d, 0xbd, 0x25, - 0x09, 0xe0, 0x84, 0x96, 0xfd, 0x9d, 0x32, 0x65, 0x7d, 0x09, 0xaa, 0x21, 0x3d, 0x58, 0xc7, 0x21, - 0x3d, 0x94, 0x8e, 0x5e, 0x7a, 0x78, 0x17, 0x26, 0x9a, 0xda, 0x15, 0x60, 0x32, 0xe3, 0x17, 0x0b, - 0x2e, 0x2b, 0xed, 0xde, 0x90, 0x5b, 0x04, 0x97, 0x4c, 0x72, 0x38, 0x4d, 0x1f, 0x11, 0x18, 0xe5, - 0xeb, 0x41, 0xb4, 0x57, 0x61, 0xed, 0x9d, 0x2f, 0xb2, 0xc2, 0xf4, 0xc6, 0xd8, 0x2a, 0x6e, 0x68, - 0x84, 0xb0, 0x41, 0xd6, 0xfe, 0xf5, 0x01, 0x18, 0x58, 0xde, 0x26, 0x7e, 0x7c, 0x0c, 0xac, 0x6e, - 0x0b, 0xc6, 0x3d, 0x7f, 0x3b, 0x68, 0x6d, 0x13, 0x97, 0xc3, 0x0f, 0x77, 0xbc, 0x9f, 0x12, 0x8d, - 0x8c, 0xaf, 0x1a, 0xc4, 0x70, 0x8a, 0xf8, 0x51, 0xd8, 0x22, 0x5e, 0x85, 0x41, 0xbe, 0x32, 0x84, - 0x21, 0x22, 0xe7, 0xc6, 0x80, 0x0d, 0xac, 0xd8, 0x41, 0x89, 0xc5, 0x84, 0x5f, 0x56, 0x08, 0x42, - 0xe8, 0x1d, 0x18, 0x5f, 0xf7, 0xc2, 0x28, 0x5e, 0xf3, 0xb6, 0xa8, 0x0e, 0xb9, 0xd5, 0x3e, 0x84, - 0x15, 0x42, 0x8d, 0xc8, 0x8a, 0x41, 0x09, 0xa7, 0x28, 0xa3, 0x0d, 0x18, 0xa3, 0x4a, 0x70, 0xd2, - 0xd4, 0x50, 0xdf, 0x4d, 0x29, 0x23, 0xe4, 0x55, 0x9d, 0x10, 0x36, 0xe9, 0x52, 0x96, 0xd4, 0x64, - 0x4a, 0xf3, 0x30, 0x93, 0x6e, 0x14, 0x4b, 0xe2, 0xda, 0x32, 0x87, 0x51, 0xce, 0xc6, 0x7c, 0x71, - 0xaa, 0x26, 0x67, 0x4b, 0x3c, 0x6e, 0xec, 0xaf, 0xd3, 0xb3, 0x98, 0x8e, 0xe1, 0x31, 0x1c, 0x5f, - 0x97, 0xcd, 0xe3, 0xeb, 0xf1, 0x02, 0x33, 0xdb, 0xe3, 0xe8, 0x7a, 0x1b, 0x46, 0xb4, 0x89, 0x47, - 0xe7, 0xa1, 0xda, 0x94, 0xee, 0x22, 0x82, 0x8b, 0x2b, 0x51, 0x4a, 0xf9, 0x91, 0xe0, 0x04, 0x87, - 0x8e, 0x0b, 0x15, 0x41, 0xd3, 0xce, 0x65, 0x54, 0x40, 0xc5, 0x0c, 0x62, 0x3f, 0x07, 0xb0, 0x7c, - 0x9f, 0x34, 0x17, 0xb8, 0x12, 0xa9, 0xdd, 0x20, 0x5a, 0xbd, 0x6f, 0x10, 0xed, 0xaf, 0x59, 0x30, - 0xbe, 0xb2, 0x64, 0x28, 0x0d, 0xf3, 0x00, 0x5c, 0x36, 0xbe, 0x7d, 0xfb, 0xba, 0xb4, 0x90, 0x73, - 0x33, 0xa6, 0x2a, 0xc5, 0x1a, 0x06, 0x7a, 0x18, 0xca, 0xad, 0x8e, 0x2f, 0x44, 0xd6, 0xa1, 0xbd, - 0xdd, 0xb9, 0xf2, 0xd5, 0x8e, 0x8f, 0x69, 0x99, 0xe6, 0xc5, 0x55, 0x2e, 0xec, 0xc5, 0x95, 0xef, - 0x02, 0xfd, 0xe5, 0x32, 0x4c, 0xae, 0xb4, 0xc8, 0x7d, 0xa3, 0xd7, 0x4f, 0xc2, 0xa0, 0x1b, 0x7a, - 0xdb, 0x24, 0x4c, 0x0b, 0x02, 0x35, 0x56, 0x8a, 0x05, 0xb4, 0xb0, 0x63, 0xd9, 0x5b, 0xdd, 0x07, - 0xf9, 0xd1, 0x39, 0xd5, 0xe5, 0x7e, 0x33, 0x5a, 0x87, 0x21, 0x7e, 0xe3, 0x1c, 0xcd, 0x0c, 0xb0, - 0xa5, 0xf8, 0xf2, 0xc1, 0x9d, 0x49, 0x8f, 0xcf, 0xbc, 0xb0, 0xe0, 0x70, 0x97, 0x1e, 0xc5, 0xcb, - 0x44, 0x29, 0x96, 0xc4, 0x67, 0x3f, 0x01, 0xa3, 0x3a, 0x66, 0x5f, 0xbe, 0x3d, 0x7f, 0xd5, 0x82, - 0x13, 0x2b, 0xad, 0xa0, 0x79, 0x37, 0xe5, 0xf9, 0xf7, 0x02, 0x8c, 0xd0, 0xcd, 0x14, 0x19, 0x6e, - 0xb1, 0x86, 0xcb, 0xb0, 0x00, 0x61, 0x1d, 0x4f, 0xab, 0x76, 0xf3, 0xe6, 0x6a, 0x2d, 0xcb, 0xd3, - 0x58, 0x80, 0xb0, 0x8e, 0x67, 0xff, 0xa1, 0x05, 0x8f, 0x5e, 0x5a, 0x5a, 0xae, 0x93, 0x30, 0xf2, - 0xa2, 0x98, 0xf8, 0x71, 0x97, 0xb3, 0x33, 0x95, 0x19, 0x5d, 0xad, 0x2b, 0x89, 0xcc, 0x58, 0x63, - 0xbd, 0x10, 0xd0, 0x0f, 0x8a, 0xc7, 0xff, 0x57, 0x2d, 0x38, 0x71, 0xc9, 0x8b, 0x31, 0x69, 0x07, - 0x69, 0x67, 0xe3, 0x90, 0xb4, 0x83, 0xc8, 0x8b, 0x83, 0x70, 0x27, 0xed, 0x6c, 0x8c, 0x15, 0x04, - 0x6b, 0x58, 0xbc, 0xe5, 0x6d, 0x2f, 0xa2, 0x3d, 0x2d, 0x99, 0xaa, 0x2e, 0x16, 0xe5, 0x58, 0x61, - 0xd0, 0x0f, 0x73, 0xbd, 0x90, 0x89, 0x0c, 0x3b, 0x62, 0x07, 0xab, 0x0f, 0xab, 0x49, 0x00, 0x4e, - 0x70, 0xec, 0xbf, 0x6b, 0xc1, 0xc9, 0x4b, 0xad, 0x4e, 0x14, 0x93, 0x70, 0x3d, 0x32, 0x3a, 0xfb, - 0x1c, 0x54, 0x89, 0x14, 0xee, 0x45, 0x5f, 0xd5, 0xa1, 0xa1, 0xa4, 0x7e, 0xee, 0xe9, 0xac, 0xf0, - 0x0a, 0x38, 0xd4, 0xf6, 0xe7, 0xfe, 0xf9, 0xbb, 0x25, 0x18, 0xbb, 0xbc, 0xb6, 0x56, 0xbf, 0x44, - 0x62, 0xc1, 0x25, 0xf3, 0xcd, 0x5e, 0x58, 0xd3, 0xc8, 0x0f, 0x12, 0x7e, 0x3a, 0xb1, 0xd7, 0x9a, - 0xe7, 0xd1, 0x28, 0xf3, 0xab, 0x7e, 0x7c, 0x23, 0x6c, 0xc4, 0xa1, 0xe7, 0x6f, 0x64, 0xea, 0xf0, - 0x92, 0x97, 0x97, 0x7b, 0xf1, 0x72, 0xf4, 0x1c, 0x0c, 0xb2, 0x70, 0x18, 0x29, 0x7c, 0x7c, 0x58, - 0xc9, 0x09, 0xac, 0x74, 0x7f, 0x77, 0xae, 0x7a, 0x13, 0xaf, 0xf2, 0x3f, 0x58, 0xa0, 0xa2, 0xb7, - 0x60, 0x64, 0x33, 0x8e, 0xdb, 0x97, 0x89, 0xe3, 0x92, 0x50, 0xf2, 0x89, 0xb3, 0x07, 0xf3, 0x09, - 0x3a, 0x1c, 0xbc, 0x42, 0xb2, 0xb5, 0x92, 0xb2, 0x08, 0xeb, 0x14, 0xed, 0x06, 0x40, 0x02, 0x7b, - 0x40, 0x3a, 0x88, 0xfd, 0xcb, 0x25, 0x18, 0xba, 0xec, 0xf8, 0x6e, 0x8b, 0x84, 0x68, 0x05, 0x2a, - 0xe4, 0x3e, 0x69, 0x8a, 0x83, 0x3c, 0xa7, 0xeb, 0xc9, 0x61, 0xc7, 0x2d, 0x77, 0xf4, 0x3f, 0x66, - 0xf5, 0x11, 0x86, 0x21, 0xda, 0xef, 0x4b, 0xca, 0x0f, 0xfd, 0x99, 0xfc, 0x51, 0x50, 0x8b, 0x82, - 0x9f, 0x94, 0xa2, 0x08, 0x4b, 0x42, 0xcc, 0x02, 0xd5, 0x6c, 0x37, 0x28, 0x7b, 0x8b, 0x8b, 0x69, - 0x76, 0x6b, 0x4b, 0x75, 0x8e, 0x2e, 0xe8, 0x72, 0x0b, 0x94, 0x2c, 0xc4, 0x09, 0x39, 0x7b, 0x0d, - 0xaa, 0x74, 0xf2, 0x17, 0x5a, 0x9e, 0x73, 0xb0, 0x19, 0xec, 0x19, 0xa8, 0x4a, 0x43, 0x54, 0x24, - 0x9c, 0xda, 0x19, 0x55, 0x69, 0xa7, 0x8a, 0x70, 0x02, 0xb7, 0x5f, 0x82, 0x69, 0x76, 0x8f, 0xec, - 0xc4, 0x9b, 0xc6, 0x5e, 0xcc, 0x5d, 0xf4, 0xf6, 0x37, 0x2a, 0x30, 0xb5, 0xda, 0x58, 0x6a, 0x98, - 0x36, 0xcf, 0x97, 0x60, 0x94, 0x1f, 0xfb, 0x74, 0x29, 0x3b, 0x2d, 0x51, 0x5f, 0xdd, 0x7d, 0xac, - 0x69, 0x30, 0x6c, 0x60, 0xa2, 0x47, 0xa1, 0xec, 0xbd, 0xeb, 0xa7, 0xbd, 0x11, 0x57, 0x5f, 0xbd, - 0x8e, 0x69, 0x39, 0x05, 0x53, 0x09, 0x82, 0xb3, 0x4e, 0x05, 0x56, 0x52, 0xc4, 0x2b, 0x30, 0xee, - 0x45, 0xcd, 0xc8, 0x5b, 0xf5, 0x29, 0x5f, 0x71, 0x9a, 0x72, 0x53, 0x24, 0x22, 0x3f, 0xed, 0xaa, - 0x82, 0xe2, 0x14, 0xb6, 0xc6, 0xc7, 0x07, 0x0a, 0x4b, 0x21, 0xb9, 0x6e, 0xee, 0x54, 0xc0, 0x6a, - 0xb3, 0xaf, 0x8b, 0x98, 0x6f, 0x93, 0x10, 0xb0, 0xf8, 0x07, 0x47, 0x58, 0xc2, 0xd0, 0x25, 0x98, - 0x6a, 0x6e, 0x3a, 0xed, 0x85, 0x4e, 0xbc, 0x59, 0xf3, 0xa2, 0x66, 0xb0, 0x4d, 0xc2, 0x1d, 0x26, - 0x00, 0x0f, 0x27, 0x36, 0x2d, 0x05, 0x58, 0xba, 0xbc, 0x50, 0xa7, 0x98, 0xb8, 0xbb, 0x8e, 0x29, - 0x90, 0xc0, 0x11, 0x08, 0x24, 0x0b, 0x30, 0x21, 0x5b, 0x6d, 0x90, 0x88, 0x1d, 0x11, 0x23, 0xac, - 0x9f, 0x2a, 0xc0, 0x48, 0x14, 0xab, 0x5e, 0xa6, 0xf1, 0xed, 0x77, 0xa0, 0xaa, 0x7c, 0xf1, 0xa4, - 0x0b, 0xaa, 0xd5, 0xc3, 0x05, 0x35, 0x9f, 0xb9, 0x4b, 0xeb, 0x7c, 0x39, 0xd3, 0x3a, 0xff, 0x4f, - 0x2d, 0x48, 0x9c, 0x89, 0x10, 0x86, 0x6a, 0x3b, 0x60, 0x37, 0x79, 0xa1, 0xbc, 0x32, 0x7f, 0x22, - 0x67, 0xcf, 0x73, 0x9e, 0xc3, 0x07, 0xa4, 0x2e, 0xeb, 0xe2, 0x84, 0x0c, 0xba, 0x0a, 0x43, 0xed, - 0x90, 0x34, 0x62, 0x16, 0x3f, 0xd2, 0x07, 0x45, 0xbe, 0x10, 0x78, 0x4d, 0x2c, 0x49, 0xd8, 0xff, - 0xd2, 0x02, 0xe0, 0x66, 0x70, 0xc7, 0xdf, 0x20, 0xc7, 0xa0, 0x58, 0x5f, 0x87, 0x4a, 0xd4, 0x26, - 0xcd, 0x62, 0x77, 0xb1, 0x49, 0xcf, 0x1a, 0x6d, 0xd2, 0x4c, 0xa6, 0x83, 0xfe, 0xc3, 0x8c, 0x8e, - 0xfd, 0x6d, 0x80, 0xf1, 0x04, 0x8d, 0x2a, 0x37, 0xe8, 0x59, 0x23, 0x70, 0xe2, 0xe1, 0x54, 0xe0, - 0x44, 0x95, 0x61, 0x6b, 0xb1, 0x12, 0x31, 0x94, 0xb7, 0x9c, 0xfb, 0x42, 0x97, 0x7a, 0xa1, 0x68, - 0x87, 0x68, 0x4b, 0xf3, 0xd7, 0x9c, 0xfb, 0x5c, 0x74, 0x7d, 0x46, 0x2e, 0xa4, 0x6b, 0xce, 0xfd, - 0x7d, 0x7e, 0xe3, 0xca, 0xb8, 0x13, 0x55, 0xde, 0x3e, 0xfb, 0x67, 0xc9, 0x7f, 0x76, 0x0c, 0xd1, - 0xe6, 0x58, 0xab, 0x9e, 0x2f, 0x4c, 0xc1, 0x7d, 0xb6, 0xea, 0xf9, 0xe9, 0x56, 0x3d, 0xbf, 0x40, - 0xab, 0x1e, 0xf3, 0x30, 0x1e, 0x12, 0x77, 0x34, 0xcc, 0x3d, 0x73, 0xe4, 0xe2, 0xc7, 0xfb, 0x6a, - 0x5a, 0x5c, 0xf6, 0xf0, 0xe6, 0xcf, 0x4b, 0x79, 0x5d, 0x94, 0xe6, 0x76, 0x41, 0x36, 0x8d, 0xfe, - 0x9e, 0x05, 0xe3, 0xe2, 0x37, 0x26, 0xef, 0x76, 0x48, 0x14, 0x0b, 0xb9, 0xe0, 0x53, 0x87, 0xe9, - 0x8d, 0x20, 0xc1, 0x3b, 0xf5, 0x31, 0xc9, 0x7e, 0x4d, 0x60, 0x6e, 0xdf, 0x52, 0xfd, 0x41, 0xdf, - 0xb6, 0x60, 0x7a, 0xcb, 0xb9, 0xcf, 0x5b, 0xe4, 0x65, 0xd8, 0x89, 0xbd, 0x40, 0xb8, 0xa0, 0xae, - 0xf4, 0xbb, 0x4e, 0xba, 0x08, 0xf1, 0xee, 0x4a, 0xef, 0xb2, 0xe9, 0x2c, 0x94, 0xdc, 0x4e, 0x67, - 0xf6, 0x70, 0x76, 0x1d, 0x86, 0xe5, 0xc2, 0xcc, 0xd0, 0x94, 0x6a, 0xba, 0xf8, 0xd3, 0xf7, 0x05, - 0x9a, 0xa6, 0x59, 0xb1, 0x76, 0xc4, 0x52, 0x3c, 0xd2, 0x76, 0xde, 0x81, 0x51, 0x7d, 0xdd, 0x1d, - 0x69, 0x5b, 0xef, 0xc2, 0x89, 0x8c, 0x55, 0x75, 0xa4, 0x4d, 0xde, 0x83, 0x87, 0x7b, 0xae, 0x8f, - 0xa3, 0x6c, 0xd8, 0xfe, 0x5d, 0x4b, 0x67, 0x9d, 0xc7, 0x60, 0xb7, 0xba, 0x66, 0xda, 0xad, 0xce, - 0x16, 0xdd, 0x43, 0x3d, 0x8c, 0x57, 0xeb, 0x7a, 0xf7, 0xe9, 0x91, 0x80, 0xd6, 0x60, 0xb0, 0x45, - 0x4b, 0xe4, 0xb5, 0xe1, 0xb9, 0x7e, 0x76, 0x69, 0x22, 0x81, 0xb1, 0xf2, 0x08, 0x0b, 0x5a, 0xf6, - 0xb7, 0x2d, 0xa8, 0xfc, 0x25, 0x86, 0x75, 0x75, 0x91, 0x16, 0xa9, 0x09, 0xe6, 0xb1, 0x73, 0x6f, - 0xf9, 0x7e, 0x4c, 0xfc, 0x88, 0x89, 0xf1, 0x99, 0x43, 0xf4, 0x7f, 0x4a, 0x30, 0x42, 0x9b, 0x92, - 0x9e, 0x32, 0x2f, 0xc3, 0x58, 0xcb, 0xb9, 0x43, 0x5a, 0xd2, 0xe6, 0x9e, 0x56, 0x7a, 0xaf, 0xea, - 0x40, 0x6c, 0xe2, 0xd2, 0xca, 0xeb, 0xfa, 0x95, 0x84, 0x10, 0x92, 0x54, 0x65, 0xe3, 0xbe, 0x02, - 0x9b, 0xb8, 0x54, 0xeb, 0xba, 0xe7, 0xc4, 0xcd, 0x4d, 0xa1, 0x10, 0xab, 0xee, 0xde, 0xa6, 0x85, - 0x98, 0xc3, 0xa8, 0xb0, 0x27, 0x57, 0xec, 0x2d, 0x12, 0x32, 0x61, 0x8f, 0x0b, 0xd5, 0x4a, 0xd8, - 0xc3, 0x26, 0x18, 0xa7, 0xf1, 0xd1, 0x27, 0x60, 0x9c, 0x0e, 0x4e, 0xd0, 0x89, 0xa5, 0x1f, 0xd0, - 0x00, 0xf3, 0x03, 0x62, 0x6e, 0xe4, 0x6b, 0x06, 0x04, 0xa7, 0x30, 0x51, 0x1d, 0xa6, 0x3d, 0xbf, - 0xd9, 0xea, 0xb8, 0xe4, 0xa6, 0xef, 0xf9, 0x5e, 0xec, 0x39, 0x2d, 0xef, 0x3d, 0xe2, 0x0a, 0xb1, - 0x5b, 0xb9, 0x6c, 0xad, 0x66, 0xe0, 0xe0, 0xcc, 0x9a, 0xf6, 0x5b, 0x70, 0xe2, 0x6a, 0xe0, 0xb8, - 0x8b, 0x4e, 0xcb, 0xf1, 0x9b, 0x24, 0x5c, 0xf5, 0x37, 0x72, 0x7d, 0x0a, 0xf4, 0x7b, 0xff, 0x52, - 0xde, 0xbd, 0xbf, 0x1d, 0x02, 0xd2, 0x1b, 0x10, 0x3e, 0x71, 0x6f, 0xc0, 0x90, 0xc7, 0x9b, 0x12, - 0x1b, 0xe1, 0x42, 0x9e, 0x4c, 0xde, 0xd5, 0x47, 0xcd, 0xc7, 0x8b, 0x17, 0x60, 0x49, 0x92, 0x6a, - 0x70, 0x59, 0x42, 0x7c, 0xbe, 0xea, 0x6d, 0xbf, 0x00, 0x53, 0xac, 0x66, 0x9f, 0x8a, 0xdf, 0x5f, - 0xb3, 0x60, 0xe2, 0x7a, 0x2a, 0x00, 0xfa, 0x49, 0x18, 0x8c, 0x48, 0x98, 0x61, 0x59, 0x6d, 0xb0, - 0x52, 0x2c, 0xa0, 0x0f, 0xdc, 0x5a, 0xf3, 0x6b, 0x25, 0xa8, 0x32, 0xa7, 0xec, 0x36, 0x55, 0xe2, - 0x8e, 0x5e, 0x5e, 0xbe, 0x66, 0xc8, 0xcb, 0x39, 0x16, 0x03, 0xd5, 0xb1, 0x5e, 0xe2, 0x32, 0xba, - 0xa9, 0x02, 0x83, 0x0b, 0x19, 0x0b, 0x12, 0x82, 0x3c, 0x78, 0x74, 0xdc, 0x8c, 0x23, 0x96, 0x41, - 0xc3, 0xec, 0x02, 0x5f, 0xe1, 0x7e, 0xe0, 0x2e, 0xf0, 0x55, 0xcf, 0x7a, 0x70, 0xc9, 0xba, 0xd6, - 0x79, 0x76, 0x8e, 0xfc, 0x1c, 0x73, 0xb5, 0x65, 0x7b, 0x58, 0xc5, 0xd7, 0xcf, 0x09, 0xd7, 0x59, - 0x51, 0xba, 0xcf, 0x18, 0x9e, 0xf8, 0xc7, 0xd3, 0x27, 0x24, 0x55, 0xec, 0xcb, 0x30, 0x91, 0x1a, - 0x3a, 0xf4, 0x02, 0x0c, 0xb4, 0x37, 0x9d, 0x88, 0xa4, 0x9c, 0x9e, 0x06, 0xea, 0xb4, 0x70, 0x7f, - 0x77, 0x6e, 0x5c, 0x55, 0x60, 0x25, 0x98, 0x63, 0xdb, 0x9f, 0x2b, 0x41, 0xe5, 0x7a, 0xe0, 0x1e, - 0xc7, 0x52, 0xbb, 0x6c, 0x2c, 0xb5, 0x27, 0xf3, 0xf3, 0xb5, 0xf4, 0x5c, 0x65, 0xf5, 0xd4, 0x2a, - 0x3b, 0x5b, 0x80, 0xd6, 0xc1, 0x0b, 0x6c, 0x0b, 0x46, 0x58, 0x3e, 0x18, 0xe1, 0x94, 0xf5, 0x9c, - 0xa1, 0xe2, 0xcd, 0xa5, 0x54, 0xbc, 0x09, 0x0d, 0x55, 0x53, 0xf4, 0x9e, 0x82, 0x21, 0xe1, 0x04, - 0x94, 0x76, 0x34, 0x16, 0xb8, 0x58, 0xc2, 0xed, 0x7f, 0x51, 0x06, 0x23, 0xff, 0x0c, 0xfa, 0x7d, - 0x0b, 0xe6, 0x43, 0x1e, 0xb4, 0xe5, 0xd6, 0x3a, 0xa1, 0xe7, 0x6f, 0x34, 0x9a, 0x9b, 0xc4, 0xed, - 0xb4, 0x3c, 0x7f, 0x63, 0x75, 0xc3, 0x0f, 0x54, 0xf1, 0xf2, 0x7d, 0xd2, 0xec, 0x30, 0x9b, 0x7b, - 0xe1, 0xb4, 0x37, 0xea, 0x02, 0xfc, 0xe2, 0xde, 0xee, 0xdc, 0x3c, 0xee, 0xab, 0x15, 0xdc, 0x67, - 0xaf, 0xd0, 0x0f, 0x2d, 0x38, 0xcf, 0x33, 0xb0, 0x14, 0xff, 0x92, 0x42, 0xaa, 0x71, 0x5d, 0x12, - 0x4d, 0xc8, 0xad, 0x91, 0x70, 0x6b, 0xf1, 0x45, 0x31, 0xc8, 0xe7, 0xeb, 0xfd, 0xb5, 0x8a, 0xfb, - 0xed, 0xa6, 0xfd, 0xaf, 0xcb, 0x30, 0x46, 0xc7, 0x33, 0x49, 0xa1, 0xf0, 0x82, 0xb1, 0x4c, 0x1e, - 0x4b, 0x2d, 0x93, 0x29, 0x03, 0xf9, 0xc1, 0x64, 0x4f, 0x88, 0x60, 0xaa, 0xe5, 0x44, 0xf1, 0x65, + 0x02, 0x02, 0x27, 0x80, 0x02, 0x03, 0x71, 0x94, 0xc4, 0xf9, 0x50, 0x04, 0x7d, 0x18, 0x96, 0x13, + 0xc4, 0x91, 0x1c, 0x39, 0x48, 0x1c, 0x01, 0x46, 0x62, 0x05, 0x86, 0xd7, 0xd6, 0x0a, 0xf1, 0x9f, + 0x00, 0xf9, 0x91, 0xfc, 0xdb, 0x7c, 0x20, 0xa8, 0xcf, 0xae, 0xea, 0xe9, 0xd9, 0xee, 0x59, 0xde, + 0xae, 0x29, 0x21, 0xff, 0x66, 0xde, 0x7b, 0xf5, 0xaa, 0xba, 0x3e, 0x5e, 0xbd, 0x7a, 0xf5, 0xde, + 0x2b, 0x38, 0x77, 0xf7, 0xa5, 0x68, 0xde, 0x0b, 0xce, 0xdf, 0xed, 0xdc, 0x21, 0xa1, 0x4f, 0x62, + 0x12, 0x9d, 0x6f, 0xdf, 0xdd, 0x38, 0xef, 0xb4, 0xbd, 0xf3, 0xdb, 0x17, 0xce, 0x6f, 0x10, 0x9f, + 0x84, 0x4e, 0x4c, 0xdc, 0xf9, 0x76, 0x18, 0xc4, 0x01, 0x7a, 0x84, 0x53, 0xcf, 0x27, 0xd4, 0xf3, + 0xed, 0xbb, 0x1b, 0xf3, 0x4e, 0xdb, 0x9b, 0xdf, 0xbe, 0x30, 0xfb, 0xec, 0x86, 0x17, 0x6f, 0x76, + 0xee, 0xcc, 0x37, 0x83, 0xad, 0xf3, 0x1b, 0xc1, 0x46, 0x70, 0x9e, 0x15, 0xba, 0xd3, 0x59, 0x67, + 0xff, 0xd8, 0x1f, 0xf6, 0x8b, 0x33, 0x9b, 0x7d, 0x5e, 0x54, 0xed, 0xb4, 0xbd, 0x2d, 0xa7, 0xb9, + 0xe9, 0xf9, 0x24, 0xdc, 0x51, 0x95, 0x87, 0x24, 0x0a, 0x3a, 0x61, 0x93, 0xa4, 0x9b, 0x70, 0x60, + 0xa9, 0xe8, 0xfc, 0x16, 0x89, 0x9d, 0x8c, 0x86, 0xcf, 0x9e, 0xef, 0x55, 0x2a, 0xec, 0xf8, 0xb1, + 0xb7, 0xd5, 0x5d, 0xcd, 0xc7, 0xf2, 0x0a, 0x44, 0xcd, 0x4d, 0xb2, 0xe5, 0x74, 0x95, 0x7b, 0xae, + 0x57, 0xb9, 0x4e, 0xec, 0xb5, 0xce, 0x7b, 0x7e, 0x1c, 0xc5, 0x61, 0xba, 0x90, 0xfd, 0xc7, 0x16, + 0x9c, 0x59, 0xb8, 0xdd, 0x58, 0x6e, 0x39, 0x51, 0xec, 0x35, 0x17, 0x5b, 0x41, 0xf3, 0x6e, 0x23, + 0x0e, 0x42, 0x72, 0x2b, 0x68, 0x75, 0xb6, 0x48, 0x83, 0x75, 0x04, 0x3a, 0x07, 0xc3, 0xdb, 0xec, + 0xff, 0x6a, 0x6d, 0xc6, 0x3a, 0x63, 0x9d, 0xad, 0x2e, 0x4e, 0x7e, 0x7f, 0x77, 0xee, 0x43, 0x7b, + 0xbb, 0x73, 0xc3, 0xb7, 0x04, 0x1c, 0x2b, 0x0a, 0xf4, 0x24, 0x0c, 0xae, 0x47, 0x6b, 0x3b, 0x6d, + 0x32, 0x53, 0x62, 0xb4, 0xe3, 0x82, 0x76, 0x70, 0xa5, 0x41, 0xa1, 0x58, 0x60, 0xd1, 0x79, 0xa8, + 0xb6, 0x9d, 0x30, 0xf6, 0x62, 0x2f, 0xf0, 0x67, 0xca, 0x67, 0xac, 0xb3, 0x03, 0x8b, 0x53, 0x82, + 0xb4, 0x5a, 0x97, 0x08, 0x9c, 0xd0, 0xd0, 0x66, 0x84, 0xc4, 0x71, 0x6f, 0xf8, 0xad, 0x9d, 0x99, + 0xca, 0x19, 0xeb, 0xec, 0x70, 0xd2, 0x0c, 0x2c, 0xe0, 0x58, 0x51, 0xd8, 0xdf, 0x2e, 0xc1, 0xf0, + 0xc2, 0xfa, 0xba, 0xe7, 0x7b, 0xf1, 0x0e, 0x7a, 0x1b, 0x46, 0xfd, 0xc0, 0x25, 0xf2, 0x3f, 0xfb, + 0x8a, 0x91, 0x8b, 0x4f, 0xcf, 0x1f, 0x34, 0xa9, 0xe6, 0xaf, 0x6b, 0x25, 0x16, 0x27, 0xf7, 0x76, + 0xe7, 0x46, 0x75, 0x08, 0x36, 0x38, 0xa2, 0x37, 0x60, 0xa4, 0x1d, 0xb8, 0xaa, 0x82, 0x12, 0xab, + 0xe0, 0xa9, 0x83, 0x2b, 0xa8, 0x27, 0x05, 0x16, 0x27, 0xf6, 0x76, 0xe7, 0x46, 0x34, 0x00, 0xd6, + 0xd9, 0xa1, 0x16, 0x4c, 0xd0, 0xbf, 0x7e, 0xec, 0xa9, 0x1a, 0xca, 0xac, 0x86, 0x67, 0xf3, 0x6b, + 0xd0, 0x0a, 0x2d, 0x9e, 0xd8, 0xdb, 0x9d, 0x9b, 0x48, 0x01, 0x71, 0x9a, 0xb5, 0xfd, 0x1e, 0x8c, + 0x2f, 0xc4, 0xb1, 0xd3, 0xdc, 0x24, 0x2e, 0x1f, 0x5f, 0xf4, 0x3c, 0x54, 0x7c, 0x67, 0x8b, 0x88, + 0xd1, 0x3f, 0x23, 0xba, 0xbd, 0x72, 0xdd, 0xd9, 0x22, 0xfb, 0xbb, 0x73, 0x93, 0x37, 0x7d, 0xef, + 0xdd, 0x8e, 0x98, 0x33, 0x14, 0x86, 0x19, 0x35, 0xba, 0x08, 0xe0, 0x92, 0x6d, 0xaf, 0x49, 0xea, + 0x4e, 0xbc, 0x29, 0x66, 0x03, 0x12, 0x65, 0xa1, 0xa6, 0x30, 0x58, 0xa3, 0xb2, 0x3f, 0x6b, 0x41, + 0x75, 0x61, 0x3b, 0xf0, 0xdc, 0x7a, 0xe0, 0x46, 0xa8, 0x03, 0x13, 0xed, 0x90, 0xac, 0x93, 0x50, + 0x81, 0x66, 0xac, 0x33, 0xe5, 0xb3, 0x23, 0x17, 0x2f, 0xe6, 0x7c, 0xb7, 0x59, 0x68, 0xd9, 0x8f, + 0xc3, 0x9d, 0xc5, 0x87, 0x44, 0xd5, 0x13, 0x29, 0x2c, 0x4e, 0xd7, 0x61, 0x7f, 0xb7, 0x04, 0x27, + 0x17, 0xde, 0xeb, 0x84, 0xa4, 0xe6, 0x45, 0x77, 0xd3, 0x4b, 0xc1, 0xf5, 0xa2, 0xbb, 0xd7, 0x93, + 0xce, 0x50, 0x73, 0xb0, 0x26, 0xe0, 0x58, 0x51, 0xa0, 0x67, 0x61, 0x88, 0xfe, 0xbe, 0x89, 0x57, + 0xc5, 0xd7, 0x9f, 0x10, 0xc4, 0x23, 0x35, 0x27, 0x76, 0x6a, 0x1c, 0x85, 0x25, 0x0d, 0xba, 0x06, + 0x23, 0x4d, 0xb6, 0x72, 0x37, 0xae, 0x05, 0x2e, 0x61, 0x23, 0x5c, 0x5d, 0x7c, 0x86, 0x92, 0x2f, + 0x25, 0xe0, 0xfd, 0xdd, 0xb9, 0x19, 0xde, 0x36, 0xc1, 0x42, 0xc3, 0x61, 0xbd, 0x3c, 0xb2, 0xd5, + 0x42, 0xac, 0x30, 0x4e, 0x90, 0xb1, 0x08, 0xcf, 0x6a, 0x6b, 0x6a, 0x80, 0xad, 0xa9, 0xd1, 0xec, + 0xf5, 0x84, 0x2e, 0x40, 0xe5, 0xae, 0xe7, 0xbb, 0x33, 0x83, 0x8c, 0xd7, 0xa3, 0x74, 0xf8, 0xaf, + 0x78, 0xbe, 0xbb, 0xbf, 0x3b, 0x37, 0x65, 0x34, 0x87, 0x02, 0x31, 0x23, 0xb5, 0xff, 0x91, 0x25, + 0xba, 0x71, 0xc5, 0x6b, 0x99, 0x12, 0xe5, 0x22, 0x40, 0x44, 0x9a, 0x21, 0x89, 0xb5, 0x8e, 0x54, + 0x33, 0xa3, 0xa1, 0x30, 0x58, 0xa3, 0xa2, 0xf2, 0x22, 0xda, 0x74, 0x42, 0x36, 0xc1, 0x44, 0x77, + 0x2a, 0x79, 0xd1, 0x90, 0x08, 0x9c, 0xd0, 0x18, 0xf2, 0xa2, 0x9c, 0x2b, 0x2f, 0x7e, 0xcf, 0x82, + 0xa1, 0x45, 0xcf, 0x77, 0x3d, 0x7f, 0x03, 0xbd, 0x0d, 0xc3, 0x54, 0x9c, 0xbb, 0x4e, 0xec, 0x08, + 0x51, 0xf1, 0x51, 0x39, 0xdf, 0x74, 0xe9, 0x2a, 0x67, 0x5c, 0x34, 0x4f, 0xa9, 0xe9, 0xbc, 0xbb, + 0x71, 0xe7, 0x1d, 0xd2, 0x8c, 0xaf, 0x91, 0xd8, 0x49, 0x3e, 0x27, 0x81, 0x61, 0xc5, 0x15, 0xdd, + 0x84, 0xc1, 0xd8, 0x09, 0x37, 0x48, 0x2c, 0x24, 0x45, 0xce, 0x3a, 0xe6, 0x3c, 0x30, 0x9d, 0xa5, + 0xc4, 0x6f, 0x92, 0x44, 0xa6, 0xae, 0x31, 0x26, 0x58, 0x30, 0xb3, 0x9b, 0x30, 0xba, 0xe4, 0xb4, + 0x9d, 0x3b, 0x5e, 0xcb, 0x8b, 0x3d, 0x12, 0xa1, 0x9f, 0x81, 0xb2, 0xe3, 0xba, 0x6c, 0xcd, 0x54, + 0x17, 0x4f, 0xee, 0xed, 0xce, 0x95, 0x17, 0x5c, 0x3a, 0x64, 0xa0, 0xa8, 0x76, 0x30, 0xa5, 0x40, + 0x4f, 0x43, 0xc5, 0x0d, 0x83, 0xf6, 0x4c, 0x89, 0x51, 0x9e, 0xa2, 0xa3, 0x5b, 0x0b, 0x83, 0x76, + 0x8a, 0x94, 0xd1, 0xd8, 0xdf, 0x2b, 0x01, 0x5a, 0x22, 0xed, 0xcd, 0x95, 0x86, 0x31, 0xa6, 0x67, + 0x61, 0x78, 0x2b, 0xf0, 0xbd, 0x38, 0x08, 0x23, 0x51, 0x21, 0x9b, 0x4a, 0xd7, 0x04, 0x0c, 0x2b, + 0x2c, 0x3a, 0x03, 0x95, 0x76, 0x22, 0x11, 0x46, 0xa5, 0x34, 0x61, 0xb2, 0x80, 0x61, 0x28, 0x45, + 0x27, 0x22, 0xa1, 0x58, 0x02, 0x8a, 0xe2, 0x66, 0x44, 0x42, 0xcc, 0x30, 0xc9, 0x0c, 0xa2, 0x73, + 0x4b, 0x4c, 0xf0, 0xd4, 0x0c, 0xa2, 0x18, 0xac, 0x51, 0xa1, 0xb7, 0xa0, 0xca, 0xff, 0x61, 0xb2, + 0xce, 0x66, 0x7b, 0xae, 0x1c, 0xb9, 0x1a, 0x34, 0x9d, 0x56, 0xba, 0xf3, 0xc7, 0xd8, 0x8c, 0x93, + 0x8c, 0x70, 0xc2, 0xd3, 0x98, 0x71, 0x83, 0xb9, 0x33, 0xee, 0x6f, 0x5b, 0x80, 0x96, 0x3c, 0xdf, + 0x25, 0xe1, 0x31, 0xec, 0xb6, 0xfd, 0x2d, 0x86, 0x3f, 0xa1, 0x4d, 0x0b, 0xb6, 0xda, 0x81, 0x4f, + 0xfc, 0x78, 0x29, 0xf0, 0x5d, 0xbe, 0x03, 0x7f, 0x02, 0x2a, 0x31, 0xad, 0x8a, 0x37, 0xeb, 0x49, + 0x39, 0x2c, 0xb4, 0x82, 0xfd, 0xdd, 0xb9, 0x53, 0xdd, 0x25, 0x58, 0x13, 0x58, 0x19, 0xf4, 0x71, + 0x18, 0x8c, 0x62, 0x27, 0xee, 0x44, 0xa2, 0xa1, 0x8f, 0xc9, 0x86, 0x36, 0x18, 0x74, 0x7f, 0x77, + 0x6e, 0x42, 0x15, 0xe3, 0x20, 0x2c, 0x0a, 0xa0, 0xa7, 0x60, 0x68, 0x8b, 0x44, 0x91, 0xb3, 0x21, + 0x65, 0xe2, 0x84, 0x28, 0x3b, 0x74, 0x8d, 0x83, 0xb1, 0xc4, 0xa3, 0xc7, 0x61, 0x80, 0x84, 0x61, + 0x10, 0x8a, 0x19, 0x31, 0x26, 0x08, 0x07, 0x96, 0x29, 0x10, 0x73, 0x9c, 0xfd, 0x5f, 0x2c, 0x98, + 0x50, 0x6d, 0xe5, 0x75, 0x1d, 0xc3, 0x92, 0x77, 0x01, 0x9a, 0xf2, 0x03, 0x23, 0xb6, 0xd0, 0xb4, + 0x3a, 0xb2, 0xa7, 0x5f, 0x77, 0x87, 0x26, 0x75, 0x28, 0x50, 0x84, 0x35, 0xbe, 0xf6, 0xbf, 0xb5, + 0xe0, 0x44, 0xea, 0xdb, 0xae, 0x7a, 0x51, 0x8c, 0xde, 0xe8, 0xfa, 0xbe, 0xf9, 0x62, 0xdf, 0x47, + 0x4b, 0xb3, 0xaf, 0x53, 0xf3, 0x45, 0x42, 0xb4, 0x6f, 0xc3, 0x30, 0xe0, 0xc5, 0x64, 0x4b, 0x7e, + 0xd6, 0xb3, 0x05, 0x3f, 0x8b, 0xb7, 0x2f, 0x19, 0xa5, 0x55, 0xca, 0x03, 0x73, 0x56, 0xf6, 0xff, + 0xb2, 0xa0, 0xba, 0x14, 0xf8, 0xeb, 0xde, 0xc6, 0x35, 0xa7, 0x7d, 0x0c, 0xe3, 0xd3, 0x80, 0x0a, + 0xe3, 0xce, 0x3f, 0xe1, 0x42, 0xde, 0x27, 0x88, 0x86, 0xcd, 0xd3, 0x7d, 0x8f, 0xeb, 0x17, 0x4a, + 0x4c, 0x51, 0x10, 0x66, 0xcc, 0x66, 0x5f, 0x84, 0xaa, 0x22, 0x40, 0x93, 0x50, 0xbe, 0x4b, 0xb8, + 0xf2, 0x59, 0xc5, 0xf4, 0x27, 0x9a, 0x86, 0x81, 0x6d, 0xa7, 0xd5, 0x11, 0x8b, 0x17, 0xf3, 0x3f, + 0x9f, 0x28, 0xbd, 0x64, 0xd9, 0xdf, 0x63, 0x2b, 0x50, 0x54, 0xb2, 0xec, 0x6f, 0x0b, 0xe1, 0xf0, + 0x39, 0x0b, 0xa6, 0x5b, 0x19, 0x42, 0x49, 0xf4, 0xc9, 0x61, 0xc4, 0xd9, 0x23, 0xa2, 0xd9, 0xd3, + 0x59, 0x58, 0x9c, 0x59, 0x1b, 0x95, 0xf5, 0x41, 0x9b, 0x4e, 0x38, 0xa7, 0xc5, 0x9a, 0x2e, 0xd4, + 0x86, 0x1b, 0x02, 0x86, 0x15, 0xd6, 0xfe, 0x0b, 0x0b, 0xa6, 0xd5, 0x77, 0x5c, 0x21, 0x3b, 0x0d, + 0xd2, 0x22, 0xcd, 0x38, 0x08, 0x3f, 0x28, 0x5f, 0xf2, 0x28, 0x1f, 0x13, 0x2e, 0x93, 0x46, 0x04, + 0x83, 0xf2, 0x15, 0xb2, 0xc3, 0x07, 0x48, 0xff, 0xd0, 0xf2, 0x81, 0x1f, 0xfa, 0x3b, 0x16, 0x8c, + 0xa9, 0x0f, 0x3d, 0x86, 0x25, 0x77, 0xd5, 0x5c, 0x72, 0x3f, 0x53, 0x70, 0xbe, 0xf6, 0x58, 0x6c, + 0x7f, 0xab, 0x44, 0xc5, 0x86, 0xa0, 0xa9, 0x87, 0x01, 0xed, 0x24, 0x2a, 0xf1, 0x3f, 0x20, 0xa3, + 0xd4, 0xdf, 0xc7, 0x5e, 0x21, 0x3b, 0x6b, 0x01, 0xd5, 0x26, 0xb2, 0x3f, 0xd6, 0x18, 0xd4, 0xca, + 0x81, 0x83, 0xfa, 0x07, 0x25, 0x38, 0xa9, 0xba, 0xc5, 0xd8, 0xa5, 0x7f, 0x2a, 0x3b, 0xe6, 0x02, + 0x8c, 0xb8, 0x64, 0xdd, 0xe9, 0xb4, 0x62, 0x75, 0x00, 0x19, 0xe0, 0x27, 0xd3, 0x5a, 0x02, 0xc6, + 0x3a, 0x4d, 0x1f, 0x7d, 0xf9, 0x95, 0x11, 0x26, 0xcf, 0x63, 0x87, 0xce, 0x7a, 0xaa, 0xe1, 0x69, + 0x27, 0xca, 0x51, 0xfd, 0x44, 0x29, 0x4e, 0x8f, 0x8f, 0xc3, 0x80, 0xb7, 0x45, 0xf7, 0xfc, 0x92, + 0xb9, 0x95, 0xaf, 0x52, 0x20, 0xe6, 0x38, 0xf4, 0x04, 0x0c, 0x35, 0x83, 0xad, 0x2d, 0xc7, 0x77, + 0x67, 0xca, 0x4c, 0xe7, 0x1c, 0xa1, 0x6a, 0xc1, 0x12, 0x07, 0x61, 0x89, 0x43, 0x8f, 0x40, 0xc5, + 0x09, 0x37, 0xa2, 0x99, 0x0a, 0xa3, 0x19, 0xa6, 0x35, 0x2d, 0x84, 0x1b, 0x11, 0x66, 0x50, 0xaa, + 0x4b, 0xde, 0x0b, 0xc2, 0xbb, 0x9e, 0xbf, 0x51, 0xf3, 0x42, 0xa6, 0x18, 0x6a, 0xba, 0xe4, 0x6d, + 0x85, 0xc1, 0x1a, 0x15, 0xaa, 0xc3, 0x40, 0x3b, 0x08, 0xe3, 0x68, 0x66, 0x90, 0x75, 0xfc, 0x33, + 0xb9, 0xcb, 0x8f, 0x7f, 0x77, 0x3d, 0x08, 0xe3, 0xe4, 0x53, 0xe8, 0xbf, 0x08, 0x73, 0x46, 0x68, + 0x09, 0xca, 0xc4, 0xdf, 0x9e, 0x19, 0x62, 0xfc, 0x3e, 0x72, 0x30, 0xbf, 0x65, 0x7f, 0xfb, 0x96, + 0x13, 0x26, 0xf2, 0x6a, 0xd9, 0xdf, 0xc6, 0xb4, 0x34, 0x6a, 0x42, 0x55, 0xda, 0xaf, 0xa2, 0x99, + 0xe1, 0x22, 0x53, 0x11, 0x0b, 0x72, 0x4c, 0xde, 0xed, 0x78, 0x21, 0xd9, 0x22, 0x7e, 0x1c, 0x25, + 0x07, 0x2b, 0x89, 0x8d, 0x70, 0xc2, 0x17, 0x35, 0x61, 0x94, 0xeb, 0x9f, 0xd7, 0x82, 0x8e, 0x1f, + 0x47, 0x33, 0x55, 0xd6, 0xe4, 0x1c, 0x63, 0xc7, 0xad, 0xa4, 0xc4, 0xe2, 0xb4, 0x60, 0x3f, 0xaa, + 0x01, 0x23, 0x6c, 0x30, 0x45, 0x6f, 0xc0, 0x58, 0xcb, 0xdb, 0x26, 0x3e, 0x89, 0xa2, 0x7a, 0x18, + 0xdc, 0x21, 0x33, 0xc0, 0xbe, 0xe6, 0xf1, 0xbc, 0x83, 0x7f, 0x70, 0x87, 0x2c, 0x4e, 0xed, 0xed, + 0xce, 0x8d, 0x5d, 0xd5, 0x4b, 0x63, 0x93, 0x19, 0x7a, 0x0b, 0xc6, 0xa9, 0xb2, 0xeb, 0x25, 0xec, + 0x47, 0x8a, 0xb3, 0x47, 0x7b, 0xbb, 0x73, 0xe3, 0xd8, 0x28, 0x8e, 0x53, 0xec, 0xd0, 0x1a, 0x54, + 0x5b, 0xde, 0x3a, 0x69, 0xee, 0x34, 0x5b, 0x64, 0x66, 0x94, 0xf1, 0xce, 0x59, 0x9c, 0x57, 0x25, + 0x39, 0x3f, 0x60, 0xa8, 0xbf, 0x38, 0x61, 0x84, 0x6e, 0xc1, 0xa9, 0x98, 0x84, 0x5b, 0x9e, 0xef, + 0xd0, 0x45, 0x25, 0xb4, 0x5f, 0x66, 0x5d, 0x19, 0x63, 0xb3, 0xf6, 0xb4, 0xe8, 0xd8, 0x53, 0x6b, + 0x99, 0x54, 0xb8, 0x47, 0x69, 0x74, 0x03, 0x26, 0xd8, 0x7a, 0xaa, 0x77, 0x5a, 0xad, 0x7a, 0xd0, + 0xf2, 0x9a, 0x3b, 0x33, 0xe3, 0x8c, 0xe1, 0x13, 0xd2, 0x66, 0xb2, 0x6a, 0xa2, 0xe9, 0xc1, 0x30, + 0xf9, 0x87, 0xd3, 0xa5, 0x51, 0x0b, 0x26, 0x22, 0xd2, 0xec, 0x84, 0x5e, 0xbc, 0x43, 0xe7, 0x3e, + 0xb9, 0x1f, 0xcf, 0x4c, 0x14, 0x39, 0xe8, 0x36, 0xcc, 0x42, 0xdc, 0x60, 0x95, 0x02, 0xe2, 0x34, + 0x6b, 0x2a, 0x2a, 0xa2, 0xd8, 0xf5, 0xfc, 0x99, 0x49, 0x26, 0x81, 0xd4, 0xfa, 0x6a, 0x50, 0x20, + 0xe6, 0x38, 0x66, 0x3f, 0xa0, 0x3f, 0x6e, 0x50, 0x29, 0x3d, 0xc5, 0x08, 0x13, 0xfb, 0x81, 0x44, + 0xe0, 0x84, 0x86, 0xaa, 0x06, 0x71, 0xbc, 0x33, 0x83, 0x18, 0xa9, 0x5a, 0x6a, 0x6b, 0x6b, 0x9f, + 0xc6, 0x14, 0x8e, 0x6e, 0xc1, 0x10, 0xf1, 0xb7, 0x57, 0xc2, 0x60, 0x6b, 0xe6, 0x44, 0x11, 0x19, + 0xb0, 0xcc, 0x89, 0xf9, 0xfe, 0x91, 0x1c, 0x61, 0x04, 0x18, 0x4b, 0x66, 0xe8, 0x3e, 0xcc, 0x64, + 0x8c, 0x12, 0x1f, 0x94, 0x69, 0x36, 0x28, 0x9f, 0x14, 0x65, 0x67, 0xd6, 0x7a, 0xd0, 0xed, 0x1f, + 0x80, 0xc3, 0x3d, 0xb9, 0xdb, 0x77, 0x60, 0x5c, 0x09, 0x2a, 0x36, 0xde, 0x68, 0x0e, 0x06, 0xa8, + 0x2c, 0x96, 0x07, 0xfa, 0x2a, 0xed, 0x54, 0x2a, 0xa2, 0x23, 0xcc, 0xe1, 0xac, 0x53, 0xbd, 0xf7, + 0xc8, 0xe2, 0x4e, 0x4c, 0xf8, 0xc1, 0xae, 0xac, 0x75, 0xaa, 0x44, 0xe0, 0x84, 0xc6, 0xfe, 0xbf, + 0x5c, 0x4d, 0x4a, 0xa4, 0x61, 0x81, 0x9d, 0xe0, 0x1c, 0x0c, 0x6f, 0x06, 0x51, 0x4c, 0xa9, 0x59, + 0x1d, 0x03, 0x89, 0x62, 0x74, 0x59, 0xc0, 0xb1, 0xa2, 0x40, 0x2f, 0xc3, 0x58, 0x53, 0xaf, 0x40, + 0x6c, 0x63, 0x27, 0x45, 0x11, 0xb3, 0x76, 0x6c, 0xd2, 0xa2, 0x97, 0x60, 0x98, 0x19, 0xc6, 0x9b, + 0x41, 0x4b, 0x1c, 0x21, 0xe5, 0xae, 0x3c, 0x5c, 0x17, 0xf0, 0x7d, 0xed, 0x37, 0x56, 0xd4, 0xf4, + 0x20, 0x4e, 0x9b, 0xb0, 0x5a, 0x17, 0x1b, 0x88, 0x3a, 0x88, 0x5f, 0x66, 0x50, 0x2c, 0xb0, 0xf6, + 0x3f, 0x2f, 0x69, 0xbd, 0x4c, 0x0f, 0x40, 0x04, 0xbd, 0x0e, 0x43, 0xf7, 0x1c, 0x2f, 0xf6, 0xfc, + 0x0d, 0xa1, 0x3d, 0x3c, 0x57, 0x70, 0x37, 0x61, 0xc5, 0x6f, 0xf3, 0xa2, 0x7c, 0xe7, 0x13, 0x7f, + 0xb0, 0x64, 0x48, 0x79, 0x87, 0x1d, 0xdf, 0xa7, 0xbc, 0x4b, 0xfd, 0xf3, 0xc6, 0xbc, 0x28, 0xe7, + 0x2d, 0xfe, 0x60, 0xc9, 0x10, 0xad, 0x03, 0xc8, 0xb9, 0x44, 0x5c, 0x61, 0x90, 0xfe, 0x58, 0x3f, + 0xec, 0xd7, 0x54, 0xe9, 0xc5, 0x71, 0xba, 0xd7, 0x26, 0xff, 0xb1, 0xc6, 0xd9, 0x8e, 0x99, 0x12, + 0xd6, 0xdd, 0x2c, 0xf4, 0x19, 0xba, 0xa4, 0x9d, 0x30, 0x26, 0xee, 0x42, 0x9c, 0xb6, 0xe9, 0x1f, + 0xac, 0x62, 0xaf, 0x79, 0x5b, 0x44, 0x5f, 0xfe, 0x82, 0x09, 0x4e, 0xf8, 0xd9, 0xdf, 0x2a, 0xc3, + 0x4c, 0xaf, 0xe6, 0xd2, 0x29, 0x49, 0xee, 0x7b, 0xf1, 0x12, 0x55, 0x93, 0x2c, 0x73, 0x4a, 0x2e, + 0x0b, 0x38, 0x56, 0x14, 0x74, 0x6e, 0x44, 0xde, 0x86, 0x3c, 0x2c, 0x0d, 0x24, 0x73, 0xa3, 0xc1, + 0xa0, 0x58, 0x60, 0x29, 0x5d, 0x48, 0x9c, 0x48, 0xdc, 0x87, 0x68, 0x73, 0x08, 0x33, 0x28, 0x16, + 0x58, 0xdd, 0x20, 0x52, 0xc9, 0x31, 0x88, 0x18, 0x5d, 0x34, 0xf0, 0x60, 0xbb, 0x08, 0xbd, 0x09, + 0xb0, 0xee, 0xf9, 0x5e, 0xb4, 0xc9, 0xb8, 0x0f, 0xf6, 0xcd, 0x5d, 0x29, 0x59, 0x2b, 0x8a, 0x0b, + 0xd6, 0x38, 0xa2, 0x17, 0x60, 0x44, 0x2d, 0xcf, 0xd5, 0xda, 0xcc, 0x90, 0x69, 0x43, 0x4f, 0x64, + 0x55, 0x0d, 0xeb, 0x74, 0xf6, 0x3b, 0xe9, 0xf9, 0x22, 0x56, 0x85, 0xd6, 0xbf, 0x56, 0xd1, 0xfe, + 0x2d, 0x1d, 0xdc, 0xbf, 0xf6, 0x7f, 0x2e, 0xc3, 0x84, 0x51, 0x59, 0x27, 0x2a, 0x20, 0xd1, 0x5e, + 0xa5, 0x1b, 0x96, 0x13, 0x13, 0xb1, 0x26, 0xcf, 0xf5, 0xb3, 0x68, 0xf4, 0xed, 0x8d, 0xae, 0x05, + 0xce, 0x09, 0x6d, 0x42, 0xb5, 0xe5, 0x44, 0xcc, 0xa4, 0x42, 0xc4, 0x5a, 0xec, 0x8f, 0x6d, 0x72, + 0xfc, 0x70, 0xa2, 0x58, 0xdb, 0x3d, 0x78, 0x2d, 0x09, 0x73, 0xba, 0xdb, 0x52, 0x65, 0x47, 0x5e, + 0xc2, 0xa9, 0xe6, 0x50, 0x8d, 0x68, 0x07, 0x73, 0x1c, 0x7a, 0x09, 0x46, 0x43, 0xc2, 0x66, 0xca, + 0x12, 0xd5, 0xe7, 0xd8, 0xd4, 0x1b, 0x48, 0x14, 0x3f, 0xac, 0xe1, 0xb0, 0x41, 0x99, 0xe8, 0xfd, + 0x83, 0x07, 0xe8, 0xfd, 0x4f, 0xc1, 0x10, 0xfb, 0xa1, 0x66, 0x85, 0x1a, 0xa1, 0x55, 0x0e, 0xc6, + 0x12, 0x9f, 0x9e, 0x44, 0xc3, 0x05, 0x27, 0xd1, 0xd3, 0x30, 0x5e, 0x73, 0xc8, 0x56, 0xe0, 0x2f, + 0xfb, 0x6e, 0x3b, 0xf0, 0xfc, 0x18, 0xcd, 0x40, 0x85, 0xed, 0x27, 0x7c, 0xbd, 0x57, 0x28, 0x07, + 0x5c, 0xa1, 0xba, 0xbb, 0xfd, 0x27, 0x25, 0x18, 0xab, 0x91, 0x16, 0x89, 0x09, 0x3f, 0xf7, 0x44, + 0x68, 0x05, 0xd0, 0x46, 0xe8, 0x34, 0x49, 0x9d, 0x84, 0x5e, 0xe0, 0x36, 0x48, 0x33, 0xf0, 0xd9, + 0xdd, 0x15, 0xdd, 0x20, 0x4f, 0xed, 0xed, 0xce, 0xa1, 0x4b, 0x5d, 0x58, 0x9c, 0x51, 0x02, 0xb9, + 0x30, 0xd6, 0x0e, 0x89, 0x61, 0x37, 0xb4, 0xf2, 0x55, 0x8d, 0xba, 0x5e, 0x84, 0x6b, 0xc3, 0x06, + 0x08, 0x9b, 0x4c, 0xd1, 0xa7, 0x60, 0x32, 0x08, 0xdb, 0x9b, 0x8e, 0x5f, 0x23, 0x6d, 0xe2, 0xbb, + 0xf4, 0x08, 0x20, 0xac, 0x1d, 0xd3, 0x7b, 0xbb, 0x73, 0x93, 0x37, 0x52, 0x38, 0xdc, 0x45, 0x8d, + 0x5e, 0x87, 0xa9, 0x76, 0x18, 0xb4, 0x9d, 0x0d, 0x36, 0x65, 0x84, 0xb6, 0xc2, 0x65, 0xd3, 0xb9, + 0xbd, 0xdd, 0xb9, 0xa9, 0x7a, 0x1a, 0xb9, 0xbf, 0x3b, 0x77, 0x82, 0x75, 0x19, 0x85, 0x24, 0x48, + 0xdc, 0xcd, 0xc6, 0x7e, 0x17, 0x4e, 0xd6, 0x82, 0x7b, 0xfe, 0x3d, 0x27, 0x74, 0x17, 0xea, 0xab, + 0x9a, 0x71, 0xe2, 0x35, 0x79, 0xf8, 0xe5, 0x77, 0x82, 0x39, 0x3b, 0x9b, 0xc6, 0x83, 0x1f, 0x3b, + 0x56, 0xbc, 0x16, 0xe9, 0x61, 0x0e, 0xf9, 0xc7, 0x25, 0xa3, 0xce, 0x84, 0x5e, 0xdd, 0x5d, 0x58, + 0x3d, 0xef, 0x2e, 0x3e, 0x03, 0xc3, 0xeb, 0x1e, 0x69, 0xb9, 0x98, 0xac, 0x8b, 0xd1, 0xba, 0x50, + 0xe4, 0x72, 0x67, 0x85, 0x96, 0x91, 0xd6, 0x31, 0x7e, 0x88, 0x5e, 0x11, 0x6c, 0xb0, 0x62, 0x88, + 0x3a, 0x30, 0x29, 0xcf, 0x61, 0x12, 0x2b, 0x16, 0xfb, 0x73, 0xc5, 0x8e, 0x79, 0x66, 0x35, 0x6c, + 0x78, 0x71, 0x8a, 0x21, 0xee, 0xaa, 0x82, 0x9e, 0x9f, 0xb7, 0xe8, 0x56, 0x57, 0x61, 0x53, 0x9f, + 0x9d, 0x9f, 0x99, 0x29, 0x80, 0x41, 0xed, 0xdf, 0xb4, 0xe0, 0xa1, 0xae, 0xde, 0x12, 0x76, 0x92, + 0x23, 0x1b, 0xa3, 0xb4, 0xb1, 0xa2, 0x94, 0x6f, 0xac, 0xb0, 0x7f, 0xcb, 0x82, 0xe9, 0xe5, 0xad, + 0x76, 0xbc, 0x53, 0xf3, 0xcc, 0x3b, 0x97, 0x17, 0x61, 0x70, 0x8b, 0xb8, 0x5e, 0x67, 0x4b, 0x8c, + 0xeb, 0x9c, 0xdc, 0x18, 0xae, 0x31, 0xe8, 0xfe, 0xee, 0xdc, 0x58, 0x23, 0x0e, 0x42, 0x67, 0x83, + 0x70, 0x00, 0x16, 0xe4, 0x6c, 0x7b, 0xf5, 0xde, 0x23, 0x57, 0xbd, 0x2d, 0x4f, 0x5e, 0xe5, 0x1d, + 0x68, 0xe4, 0x9b, 0x97, 0x5d, 0x3b, 0xff, 0x6a, 0xc7, 0xf1, 0x63, 0x2f, 0xde, 0x11, 0xd7, 0x49, + 0x92, 0x09, 0x4e, 0xf8, 0xd9, 0x3f, 0xb2, 0x60, 0x42, 0x4a, 0x9f, 0x05, 0xd7, 0x0d, 0x49, 0x14, + 0xa1, 0x59, 0x28, 0x79, 0x6d, 0xd1, 0x4a, 0x10, 0xad, 0x2c, 0xad, 0xd6, 0x71, 0xc9, 0x6b, 0xa3, + 0xd7, 0xa1, 0xca, 0xef, 0x01, 0x93, 0xa9, 0xd7, 0xe7, 0xbd, 0x22, 0x6b, 0xcb, 0x9a, 0xe4, 0x81, + 0x13, 0x76, 0x52, 0x07, 0x67, 0xfb, 0x5a, 0xd9, 0xbc, 0x95, 0xba, 0x2c, 0xe0, 0x58, 0x51, 0xa0, + 0xb3, 0x30, 0xec, 0x07, 0x2e, 0xbf, 0xaa, 0xe5, 0x52, 0x80, 0x4d, 0xe8, 0xeb, 0x02, 0x86, 0x15, + 0xd6, 0xfe, 0xa2, 0x05, 0xa3, 0xf2, 0x1b, 0x0b, 0x1e, 0x07, 0xe8, 0x12, 0x4c, 0x8e, 0x02, 0xc9, + 0x12, 0xa4, 0xea, 0x3c, 0xc3, 0x18, 0x5a, 0x7c, 0xb9, 0x1f, 0x2d, 0xde, 0xfe, 0xed, 0x12, 0x8c, + 0xcb, 0xe6, 0x34, 0x3a, 0x77, 0x22, 0x42, 0x95, 0x9c, 0xaa, 0xc3, 0x3b, 0x9f, 0xc8, 0x59, 0xfc, + 0x6c, 0xde, 0x49, 0xcf, 0x18, 0xb3, 0x44, 0x89, 0x5a, 0x90, 0x7c, 0x70, 0xc2, 0x12, 0x6d, 0xc3, + 0x94, 0x1f, 0xc4, 0x6c, 0xf3, 0x54, 0xf8, 0x62, 0xf7, 0x28, 0xe9, 0x7a, 0x1e, 0x16, 0xf5, 0x4c, + 0x5d, 0x4f, 0xf3, 0xc3, 0xdd, 0x55, 0xa0, 0x1b, 0xd2, 0x82, 0x55, 0x66, 0x75, 0x3d, 0x5d, 0xac, + 0xae, 0xde, 0x06, 0x2c, 0xfb, 0xf7, 0x2d, 0xa8, 0x4a, 0xb2, 0xe3, 0xb8, 0x50, 0xbb, 0x0d, 0x43, + 0x11, 0x1b, 0x22, 0xd9, 0x5d, 0xe7, 0x8a, 0x7d, 0x02, 0x1f, 0xd7, 0x44, 0x63, 0xe0, 0xff, 0x23, + 0x2c, 0xb9, 0x31, 0x53, 0xbe, 0xfa, 0x90, 0x0f, 0x9c, 0x29, 0x5f, 0xb5, 0xac, 0xf7, 0xbd, 0xd9, + 0x98, 0x61, 0x6b, 0xa0, 0x6a, 0x6f, 0x3b, 0x24, 0xeb, 0xde, 0xfd, 0xb4, 0xda, 0x5b, 0x67, 0x50, + 0x2c, 0xb0, 0x68, 0x1d, 0x46, 0x9b, 0xd2, 0xd8, 0x9d, 0x88, 0x90, 0x8f, 0x16, 0xbc, 0x59, 0x50, + 0x97, 0x54, 0xdc, 0x57, 0x6a, 0x49, 0xe3, 0x84, 0x0d, 0xbe, 0x54, 0x4e, 0x25, 0xf7, 0xf0, 0xe5, + 0x82, 0x66, 0xa1, 0x90, 0xc4, 0x49, 0x0d, 0x3d, 0xaf, 0xe0, 0xed, 0xaf, 0x5a, 0x30, 0xc8, 0xad, + 0xa3, 0xc5, 0x4c, 0xcc, 0xda, 0xf5, 0x5b, 0xd2, 0x9f, 0xb7, 0x28, 0x50, 0xdc, 0xc6, 0xa1, 0xdb, + 0x50, 0x65, 0x3f, 0x98, 0xa5, 0xa7, 0x5c, 0xc4, 0x71, 0x8c, 0xd7, 0xaf, 0x37, 0xf5, 0x96, 0x64, + 0x80, 0x13, 0x5e, 0xf6, 0x77, 0xca, 0x54, 0xf4, 0x25, 0xa4, 0x86, 0xe6, 0x60, 0x1d, 0x87, 0xe6, + 0x50, 0x3a, 0x7a, 0xcd, 0xe1, 0x5d, 0x98, 0x68, 0x6a, 0xd7, 0x7f, 0xc9, 0x88, 0x5f, 0x2c, 0x38, + 0xad, 0xb4, 0x3b, 0x43, 0x6e, 0x0d, 0x5c, 0x32, 0xd9, 0xe1, 0x34, 0x7f, 0x44, 0x60, 0x94, 0xcf, + 0x07, 0x51, 0x5f, 0x85, 0xd5, 0x77, 0xbe, 0xc8, 0x0c, 0xd3, 0x2b, 0x63, 0xb3, 0xb8, 0xa1, 0x31, + 0xc2, 0x06, 0x5b, 0xfb, 0xd7, 0x07, 0x60, 0x60, 0x79, 0x9b, 0xf8, 0xf1, 0x31, 0x88, 0xba, 0x2d, + 0x18, 0xf7, 0xfc, 0xed, 0xa0, 0xb5, 0x4d, 0x5c, 0x8e, 0x3f, 0xdc, 0xf6, 0x7e, 0x4a, 0x54, 0x32, + 0xbe, 0x6a, 0x30, 0xc3, 0x29, 0xe6, 0x47, 0x61, 0x87, 0x78, 0x15, 0x06, 0xf9, 0xcc, 0x10, 0x46, + 0x88, 0x9c, 0xdb, 0x02, 0xd6, 0xb1, 0x62, 0x05, 0x25, 0xd6, 0x12, 0x7e, 0x51, 0x21, 0x18, 0xa1, + 0x77, 0x60, 0x7c, 0xdd, 0x0b, 0xa3, 0x78, 0xcd, 0xdb, 0xa2, 0xe7, 0xc7, 0xad, 0xf6, 0x21, 0x2c, + 0x10, 0xaa, 0x47, 0x56, 0x0c, 0x4e, 0x38, 0xc5, 0x19, 0x6d, 0xc0, 0x18, 0x3d, 0x00, 0x27, 0x55, + 0x0d, 0xf5, 0x5d, 0x95, 0x32, 0x40, 0x5e, 0xd5, 0x19, 0x61, 0x93, 0x2f, 0x15, 0x49, 0x4d, 0x76, + 0x60, 0x1e, 0x66, 0xda, 0x8d, 0x12, 0x49, 0xfc, 0xa4, 0xcc, 0x71, 0x54, 0xb2, 0x31, 0x3f, 0x9c, + 0xaa, 0x29, 0xd9, 0x12, 0x6f, 0x1b, 0xfb, 0xeb, 0x74, 0x2f, 0xa6, 0x7d, 0x78, 0x0c, 0xdb, 0xd7, + 0x65, 0x73, 0xfb, 0x7a, 0xbc, 0xc0, 0xc8, 0xf6, 0xd8, 0xba, 0xde, 0x86, 0x11, 0x6d, 0xe0, 0xd1, + 0x79, 0xa8, 0x36, 0xa5, 0xab, 0x88, 0x90, 0xe2, 0x4a, 0x95, 0x52, 0x3e, 0x24, 0x38, 0xa1, 0xa1, + 0xfd, 0x42, 0x55, 0xd0, 0xb4, 0x63, 0x19, 0x55, 0x50, 0x31, 0xc3, 0xd8, 0xcf, 0x01, 0x2c, 0xdf, + 0x27, 0xcd, 0x05, 0x7e, 0x80, 0xd4, 0x6e, 0x0f, 0xad, 0xde, 0xb7, 0x87, 0xf6, 0xd7, 0x2c, 0x18, + 0x5f, 0x59, 0x32, 0x0e, 0x0c, 0xf3, 0x00, 0x5c, 0x37, 0xbe, 0x7d, 0xfb, 0xba, 0xb4, 0x8e, 0x73, + 0x13, 0xa6, 0x82, 0x62, 0x8d, 0x02, 0x3d, 0x0c, 0xe5, 0x56, 0xc7, 0x17, 0x2a, 0xeb, 0xd0, 0xde, + 0xee, 0x5c, 0xf9, 0x6a, 0xc7, 0xc7, 0x14, 0xa6, 0x79, 0x70, 0x95, 0x0b, 0x7b, 0x70, 0xe5, 0xbb, + 0x3f, 0x7f, 0xb9, 0x0c, 0x93, 0x2b, 0x2d, 0x72, 0xdf, 0x68, 0xf5, 0x93, 0x30, 0xe8, 0x86, 0xde, + 0x36, 0x09, 0xd3, 0x8a, 0x40, 0x8d, 0x41, 0xb1, 0xc0, 0x16, 0x76, 0x2a, 0x7b, 0xab, 0x7b, 0x23, + 0x3f, 0x3a, 0x87, 0xba, 0xdc, 0x6f, 0x46, 0xeb, 0x30, 0xc4, 0x6f, 0x9b, 0xa3, 0x99, 0x01, 0x36, + 0x15, 0x5f, 0x3e, 0xb8, 0x31, 0xe9, 0xfe, 0x99, 0x17, 0xd6, 0x1b, 0xee, 0xce, 0xa3, 0x64, 0x99, + 0x80, 0x62, 0xc9, 0x7c, 0xf6, 0x13, 0x30, 0xaa, 0x53, 0xf6, 0xe5, 0xd7, 0xf3, 0x57, 0x2d, 0x38, + 0xb1, 0xd2, 0x0a, 0x9a, 0x77, 0x53, 0x5e, 0x7f, 0x2f, 0xc0, 0x08, 0x5d, 0x4c, 0x91, 0xe1, 0x12, + 0x6b, 0xb8, 0x0b, 0x0b, 0x14, 0xd6, 0xe9, 0xb4, 0x62, 0x37, 0x6f, 0xae, 0xd6, 0xb2, 0xbc, 0x8c, + 0x05, 0x0a, 0xeb, 0x74, 0xf6, 0x1f, 0x5a, 0xf0, 0xe8, 0xa5, 0xa5, 0xe5, 0x3a, 0x09, 0x23, 0x2f, + 0x8a, 0x89, 0x1f, 0x77, 0x39, 0x3a, 0x53, 0x9d, 0xd1, 0xd5, 0x9a, 0x92, 0xe8, 0x8c, 0x35, 0xd6, + 0x0a, 0x81, 0xfd, 0xa0, 0x78, 0xfb, 0x7f, 0xd5, 0x82, 0x13, 0x97, 0xbc, 0x18, 0x93, 0x76, 0x90, + 0x76, 0x34, 0x0e, 0x49, 0x3b, 0x88, 0xbc, 0x38, 0x08, 0x77, 0xd2, 0x8e, 0xc6, 0x58, 0x61, 0xb0, + 0x46, 0xc5, 0x6b, 0xde, 0xf6, 0x22, 0xda, 0xd2, 0x92, 0x79, 0xd4, 0xc5, 0x02, 0x8e, 0x15, 0x05, + 0xfd, 0x30, 0xd7, 0x0b, 0x99, 0xca, 0xb0, 0x23, 0x56, 0xb0, 0xfa, 0xb0, 0x9a, 0x44, 0xe0, 0x84, + 0xc6, 0xfe, 0xbb, 0x16, 0x9c, 0xbc, 0xd4, 0xea, 0x44, 0x31, 0x09, 0xd7, 0x23, 0xa3, 0xb1, 0xcf, + 0x41, 0x95, 0x48, 0xe5, 0x5e, 0xb4, 0x55, 0x6d, 0x1a, 0x4a, 0xeb, 0xe7, 0x5e, 0xce, 0x8a, 0xae, + 0x80, 0x33, 0x6d, 0x7f, 0xae, 0x9f, 0xbf, 0x5b, 0x82, 0xb1, 0xcb, 0x6b, 0x6b, 0xf5, 0x4b, 0x24, + 0x16, 0x52, 0x32, 0xdf, 0xe4, 0x85, 0xb5, 0x13, 0xf9, 0x41, 0xca, 0x4f, 0x27, 0xf6, 0x5a, 0xf3, + 0x3c, 0x12, 0x65, 0x7e, 0xd5, 0x8f, 0x6f, 0x84, 0x8d, 0x38, 0xf4, 0xfc, 0x8d, 0xcc, 0x33, 0xbc, + 0x94, 0xe5, 0xe5, 0x5e, 0xb2, 0x1c, 0x3d, 0x07, 0x83, 0x2c, 0x14, 0x46, 0x2a, 0x1f, 0x1f, 0x56, + 0x7a, 0x02, 0x83, 0xee, 0xef, 0xce, 0x55, 0x6f, 0xe2, 0x55, 0xfe, 0x07, 0x0b, 0x52, 0xf4, 0x16, + 0x8c, 0x6c, 0xc6, 0x71, 0xfb, 0x32, 0x71, 0x5c, 0x12, 0x4a, 0x39, 0x71, 0xf6, 0x60, 0x39, 0x41, + 0xbb, 0x83, 0x17, 0x48, 0x96, 0x56, 0x02, 0x8b, 0xb0, 0xce, 0xd1, 0x6e, 0x00, 0x24, 0xb8, 0x07, + 0x74, 0x06, 0xb1, 0x7f, 0xb9, 0x04, 0x43, 0x97, 0x1d, 0xdf, 0x6d, 0x91, 0x10, 0xad, 0x40, 0x85, + 0xdc, 0x27, 0x4d, 0xb1, 0x91, 0xe7, 0x34, 0x3d, 0xd9, 0xec, 0xb8, 0xd5, 0x8e, 0xfe, 0xc7, 0xac, + 0x3c, 0xc2, 0x30, 0x44, 0xdb, 0x7d, 0x49, 0xf9, 0xa0, 0x3f, 0x93, 0xdf, 0x0b, 0x6a, 0x52, 0xf0, + 0x9d, 0x52, 0x80, 0xb0, 0x64, 0xc4, 0x2c, 0x50, 0xcd, 0x76, 0x83, 0x8a, 0xb7, 0xb8, 0xd8, 0xc9, + 0x6e, 0x6d, 0xa9, 0xce, 0xc9, 0x05, 0x5f, 0x6e, 0x81, 0x92, 0x40, 0x9c, 0xb0, 0xb3, 0xd7, 0xa0, + 0x4a, 0x07, 0x7f, 0xa1, 0xe5, 0x39, 0x07, 0x9b, 0xc1, 0x9e, 0x81, 0xaa, 0x34, 0x44, 0x45, 0xc2, + 0xa1, 0x9d, 0x71, 0x95, 0x76, 0xaa, 0x08, 0x27, 0x78, 0xfb, 0x25, 0x98, 0x66, 0x77, 0xc8, 0x4e, + 0xbc, 0x69, 0xac, 0xc5, 0xdc, 0x49, 0x6f, 0x7f, 0xa3, 0x02, 0x53, 0xab, 0x8d, 0xa5, 0x86, 0x69, + 0xef, 0x7c, 0x09, 0x46, 0xf9, 0xb6, 0x4f, 0xa7, 0xb2, 0xd3, 0x12, 0xe5, 0xd5, 0xbd, 0xc7, 0x9a, + 0x86, 0xc3, 0x06, 0x25, 0x7a, 0x14, 0xca, 0xde, 0xbb, 0x7e, 0xda, 0x13, 0x71, 0xf5, 0xd5, 0xeb, + 0x98, 0xc2, 0x29, 0x9a, 0x6a, 0x10, 0x5c, 0x74, 0x2a, 0xb4, 0xd2, 0x22, 0x5e, 0x81, 0x71, 0x2f, + 0x6a, 0x46, 0xde, 0xaa, 0x4f, 0xe5, 0x8a, 0xd3, 0x94, 0x8b, 0x22, 0x51, 0xf9, 0x69, 0x53, 0x15, + 0x16, 0xa7, 0xa8, 0x35, 0x39, 0x3e, 0x50, 0x58, 0x0b, 0xc9, 0x75, 0x71, 0xa7, 0x0a, 0x56, 0x9b, + 0x7d, 0x5d, 0xc4, 0xfc, 0x9a, 0x84, 0x82, 0xc5, 0x3f, 0x38, 0xc2, 0x12, 0x87, 0x2e, 0xc1, 0x54, + 0x73, 0xd3, 0x69, 0x2f, 0x74, 0xe2, 0xcd, 0x9a, 0x17, 0x35, 0x83, 0x6d, 0x12, 0xee, 0x30, 0x05, + 0x78, 0x38, 0xb1, 0x69, 0x29, 0xc4, 0xd2, 0xe5, 0x85, 0x3a, 0xa5, 0xc4, 0xdd, 0x65, 0x4c, 0x85, + 0x04, 0x8e, 0x40, 0x21, 0x59, 0x80, 0x09, 0x59, 0x6b, 0x83, 0x44, 0x6c, 0x8b, 0x18, 0x61, 0xed, + 0x54, 0xc1, 0x45, 0x02, 0xac, 0x5a, 0x99, 0xa6, 0xb7, 0xdf, 0x81, 0xaa, 0xf2, 0xc3, 0x93, 0xee, + 0xa7, 0x56, 0x0f, 0xf7, 0xd3, 0x7c, 0xe1, 0x2e, 0x2d, 0xf3, 0xe5, 0x4c, 0xcb, 0xfc, 0x3f, 0xb1, + 0x20, 0x71, 0x24, 0x42, 0x18, 0xaa, 0xed, 0x80, 0xdd, 0xe2, 0x85, 0xf2, 0xba, 0xfc, 0x89, 0x9c, + 0x35, 0xcf, 0x65, 0x0e, 0xef, 0x90, 0xba, 0x2c, 0x8b, 0x13, 0x36, 0xe8, 0x2a, 0x0c, 0xb5, 0x43, + 0xd2, 0x88, 0x59, 0xec, 0x48, 0x1f, 0x1c, 0xf9, 0x44, 0xe0, 0x25, 0xb1, 0x64, 0x61, 0xff, 0x4b, + 0x0b, 0x80, 0x9b, 0xc1, 0x1d, 0x7f, 0x83, 0x1c, 0xc3, 0xc1, 0xfa, 0x3a, 0x54, 0xa2, 0x36, 0x69, + 0x16, 0xbb, 0x87, 0x4d, 0x5a, 0xd6, 0x68, 0x93, 0x66, 0x32, 0x1c, 0xf4, 0x1f, 0x66, 0x7c, 0xec, + 0x6f, 0x03, 0x8c, 0x27, 0x64, 0xf4, 0x70, 0x83, 0x9e, 0x35, 0x82, 0x26, 0x1e, 0x4e, 0x05, 0x4d, + 0x54, 0x19, 0xb5, 0x16, 0x27, 0x11, 0x43, 0x79, 0xcb, 0xb9, 0x2f, 0xce, 0x52, 0x2f, 0x14, 0x6d, + 0x10, 0xad, 0x69, 0xfe, 0x9a, 0x73, 0x9f, 0xab, 0xae, 0xcf, 0xc8, 0x89, 0x74, 0xcd, 0xb9, 0xbf, + 0xcf, 0x6f, 0x5b, 0x99, 0x74, 0xa2, 0x87, 0xb7, 0xcf, 0xfe, 0x59, 0xf2, 0x9f, 0x6d, 0x43, 0xb4, + 0x3a, 0x56, 0xab, 0xe7, 0x0b, 0x53, 0x70, 0x9f, 0xb5, 0x7a, 0x7e, 0xba, 0x56, 0xcf, 0x2f, 0x50, + 0xab, 0xc7, 0xbc, 0x8b, 0x87, 0xc4, 0xfd, 0x0c, 0x73, 0xcd, 0x1c, 0xb9, 0xf8, 0xf1, 0xbe, 0xaa, + 0x16, 0x17, 0x3d, 0xbc, 0xfa, 0xf3, 0x52, 0x5f, 0x17, 0xd0, 0xdc, 0x26, 0xc8, 0xaa, 0xd1, 0xdf, + 0xb3, 0x60, 0x5c, 0xfc, 0xc6, 0xe4, 0xdd, 0x0e, 0x89, 0x62, 0xa1, 0x17, 0x7c, 0xea, 0x30, 0xad, + 0x11, 0x2c, 0x78, 0xa3, 0x3e, 0x26, 0xc5, 0xaf, 0x89, 0xcc, 0x6d, 0x5b, 0xaa, 0x3d, 0xe8, 0xdb, + 0x16, 0x4c, 0x6f, 0x39, 0xf7, 0x79, 0x8d, 0x1c, 0x86, 0x9d, 0xd8, 0x0b, 0x84, 0xfb, 0xe9, 0x4a, + 0xbf, 0xf3, 0xa4, 0x8b, 0x11, 0x6f, 0xae, 0xf4, 0x2c, 0x9b, 0xce, 0x22, 0xc9, 0x6d, 0x74, 0x66, + 0x0b, 0x67, 0xd7, 0x61, 0x58, 0x4e, 0xcc, 0x8c, 0x93, 0x52, 0x4d, 0x57, 0x7f, 0xfa, 0xbe, 0x3c, + 0xd3, 0x4e, 0x56, 0xac, 0x1e, 0x31, 0x15, 0x8f, 0xb4, 0x9e, 0x77, 0x60, 0x54, 0x9f, 0x77, 0x47, + 0x5a, 0xd7, 0xbb, 0x70, 0x22, 0x63, 0x56, 0x1d, 0x69, 0x95, 0xf7, 0xe0, 0xe1, 0x9e, 0xf3, 0xe3, + 0x28, 0x2b, 0xb6, 0x7f, 0xd7, 0xd2, 0x45, 0xe7, 0x31, 0xd8, 0xad, 0xae, 0x99, 0x76, 0xab, 0xb3, + 0x45, 0xd7, 0x50, 0x0f, 0xe3, 0xd5, 0xba, 0xde, 0x7c, 0xba, 0x25, 0xa0, 0x35, 0x18, 0x6c, 0x51, + 0x88, 0xbc, 0x36, 0x3c, 0xd7, 0xcf, 0x2a, 0x4d, 0x34, 0x30, 0x06, 0x8f, 0xb0, 0xe0, 0x65, 0x7f, + 0xdb, 0x82, 0xca, 0x5f, 0x62, 0x48, 0x57, 0x17, 0x6b, 0x91, 0x96, 0x60, 0x1e, 0x3b, 0xf7, 0x96, + 0xef, 0xc7, 0xc4, 0x8f, 0x98, 0x1a, 0x9f, 0xd9, 0x45, 0xff, 0xa7, 0x04, 0x23, 0xb4, 0x2a, 0xe9, + 0x25, 0xf3, 0x32, 0x8c, 0xb5, 0x9c, 0x3b, 0xa4, 0x25, 0x6d, 0xee, 0xe9, 0x43, 0xef, 0x55, 0x1d, + 0x89, 0x4d, 0x5a, 0x5a, 0x78, 0x5d, 0xbf, 0x92, 0x10, 0x4a, 0x92, 0x2a, 0x6c, 0xdc, 0x57, 0x60, + 0x93, 0x96, 0x9e, 0xba, 0xee, 0x39, 0x71, 0x73, 0x53, 0x1c, 0x88, 0x55, 0x73, 0x6f, 0x53, 0x20, + 0xe6, 0x38, 0xaa, 0xec, 0xc9, 0x19, 0x7b, 0x8b, 0x84, 0x4c, 0xd9, 0xe3, 0x4a, 0xb5, 0x52, 0xf6, + 0xb0, 0x89, 0xc6, 0x69, 0x7a, 0xf4, 0x09, 0x18, 0xa7, 0x9d, 0x13, 0x74, 0x62, 0xe9, 0x03, 0x34, + 0xc0, 0x7c, 0x80, 0x98, 0x0b, 0xf9, 0x9a, 0x81, 0xc1, 0x29, 0x4a, 0x54, 0x87, 0x69, 0xcf, 0x6f, + 0xb6, 0x3a, 0x2e, 0xb9, 0xe9, 0x7b, 0xbe, 0x17, 0x7b, 0x4e, 0xcb, 0x7b, 0x8f, 0xb8, 0x42, 0xed, + 0x56, 0xee, 0x5a, 0xab, 0x19, 0x34, 0x38, 0xb3, 0xa4, 0xfd, 0x16, 0x9c, 0xb8, 0x1a, 0x38, 0xee, + 0xa2, 0xd3, 0x72, 0xfc, 0x26, 0x09, 0x57, 0xfd, 0x8d, 0x5c, 0x9f, 0x02, 0xfd, 0xde, 0xbf, 0x94, + 0x77, 0xef, 0x6f, 0x87, 0x80, 0xf4, 0x0a, 0x84, 0x3f, 0xdc, 0x1b, 0x30, 0xe4, 0xf1, 0xaa, 0xc4, + 0x42, 0xb8, 0x90, 0xa7, 0x93, 0x77, 0xb5, 0x51, 0xf3, 0xef, 0xe2, 0x00, 0x2c, 0x59, 0xd2, 0x13, + 0x5c, 0x96, 0x12, 0x9f, 0x7f, 0xf4, 0xb6, 0x5f, 0x80, 0x29, 0x56, 0xb2, 0xcf, 0x83, 0xdf, 0x5f, + 0xb3, 0x60, 0xe2, 0x7a, 0x2a, 0xf8, 0xf9, 0x49, 0x18, 0x8c, 0x48, 0x98, 0x61, 0x59, 0x6d, 0x30, + 0x28, 0x16, 0xd8, 0x07, 0x6e, 0xad, 0xf9, 0xb5, 0x12, 0x54, 0x99, 0x43, 0x76, 0x9b, 0x1e, 0xe2, + 0x8e, 0x5e, 0x5f, 0xbe, 0x66, 0xe8, 0xcb, 0x39, 0x16, 0x03, 0xd5, 0xb0, 0x5e, 0xea, 0x32, 0xba, + 0xa9, 0x82, 0x82, 0x0b, 0x19, 0x0b, 0x12, 0x86, 0x3c, 0x70, 0x74, 0xdc, 0x8c, 0x21, 0x96, 0x01, + 0xc3, 0xec, 0x02, 0x5f, 0xd1, 0x7e, 0xe0, 0x2e, 0xf0, 0x55, 0xcb, 0x7a, 0x48, 0xc9, 0xba, 0xd6, + 0x78, 0xb6, 0x8f, 0xfc, 0x1c, 0x73, 0xb3, 0x65, 0x6b, 0x58, 0xc5, 0xd6, 0xcf, 0x09, 0xb7, 0x59, + 0x01, 0xdd, 0x67, 0x02, 0x4f, 0xfc, 0xe3, 0xa9, 0x13, 0x92, 0x22, 0xf6, 0x65, 0x98, 0x48, 0x75, + 0x1d, 0x7a, 0x01, 0x06, 0xda, 0x9b, 0x4e, 0x44, 0x52, 0x0e, 0x4f, 0x03, 0x75, 0x0a, 0xdc, 0xdf, + 0x9d, 0x1b, 0x57, 0x05, 0x18, 0x04, 0x73, 0x6a, 0xfb, 0x73, 0x25, 0xa8, 0x5c, 0x0f, 0xdc, 0xe3, + 0x98, 0x6a, 0x97, 0x8d, 0xa9, 0xf6, 0x64, 0x7e, 0xae, 0x96, 0x9e, 0xb3, 0xac, 0x9e, 0x9a, 0x65, + 0x67, 0x0b, 0xf0, 0x3a, 0x78, 0x82, 0x6d, 0xc1, 0x08, 0xcb, 0x05, 0x23, 0x9c, 0xb2, 0x9e, 0x33, + 0x8e, 0x78, 0x73, 0xa9, 0x23, 0xde, 0x84, 0x46, 0xaa, 0x1d, 0xf4, 0x9e, 0x82, 0x21, 0xe1, 0x04, + 0x94, 0x76, 0x32, 0x16, 0xb4, 0x58, 0xe2, 0xed, 0x7f, 0x51, 0x06, 0x23, 0xf7, 0x0c, 0xfa, 0x7d, + 0x0b, 0xe6, 0x43, 0x1e, 0xb0, 0xe5, 0xd6, 0x3a, 0xa1, 0xe7, 0x6f, 0x34, 0x9a, 0x9b, 0xc4, 0xed, + 0xb4, 0x3c, 0x7f, 0x63, 0x75, 0xc3, 0x0f, 0x14, 0x78, 0xf9, 0x3e, 0x69, 0x76, 0x98, 0xcd, 0xbd, + 0x70, 0xca, 0x1b, 0x75, 0x01, 0x7e, 0x71, 0x6f, 0x77, 0x6e, 0x1e, 0xf7, 0x55, 0x0b, 0xee, 0xb3, + 0x55, 0xe8, 0x87, 0x16, 0x9c, 0xe7, 0xd9, 0x57, 0x8a, 0x7f, 0x49, 0xa1, 0xa3, 0x71, 0x5d, 0x32, + 0x4d, 0xd8, 0xad, 0x91, 0x70, 0x6b, 0xf1, 0x45, 0xd1, 0xc9, 0xe7, 0xeb, 0xfd, 0xd5, 0x8a, 0xfb, + 0x6d, 0xa6, 0xfd, 0xaf, 0xcb, 0x30, 0x46, 0xfb, 0x33, 0x49, 0x9f, 0xf0, 0x82, 0x31, 0x4d, 0x1e, + 0x4b, 0x4d, 0x93, 0x29, 0x83, 0xf8, 0xc1, 0x64, 0x4e, 0x88, 0x60, 0xaa, 0xe5, 0x44, 0xf1, 0x65, 0xe2, 0x84, 0xf1, 0x1d, 0xe2, 0xb0, 0x7b, 0xe6, 0xb4, 0x0f, 0x4b, 0x81, 0xab, 0x6b, 0x65, 0x84, - 0xbb, 0x9a, 0x26, 0x86, 0xbb, 0xe9, 0xa3, 0x6d, 0x40, 0xec, 0x4e, 0x3b, 0x74, 0xfc, 0x88, 0x7f, - 0x8b, 0x27, 0x6c, 0xf4, 0xfd, 0xb5, 0x3a, 0x2b, 0x5a, 0x45, 0x57, 0xbb, 0xa8, 0xe1, 0x8c, 0x16, - 0x34, 0xaf, 0x85, 0x81, 0xa2, 0x5e, 0x0b, 0x83, 0x39, 0x1e, 0xfe, 0xbf, 0x62, 0xc1, 0x09, 0x3a, - 0x2d, 0xa6, 0x37, 0x78, 0x84, 0x02, 0x98, 0xa0, 0xcb, 0xae, 0x45, 0x62, 0x59, 0x26, 0xf6, 0x57, - 0x8e, 0x88, 0x6f, 0xd2, 0x49, 0xe4, 0xc8, 0x2b, 0x26, 0x31, 0x9c, 0xa6, 0x6e, 0x7f, 0xcd, 0x02, - 0xe6, 0x3d, 0x79, 0x0c, 0x87, 0xd9, 0x25, 0xf3, 0x30, 0xb3, 0xf3, 0x39, 0x46, 0x8f, 0x73, 0xec, - 0x79, 0x98, 0xa4, 0xd0, 0x7a, 0x18, 0xdc, 0xdf, 0x91, 0x12, 0x7f, 0xbe, 0x74, 0xf5, 0x2b, 0x25, - 0xbe, 0x6d, 0x54, 0xf4, 0x29, 0xfa, 0xbc, 0x05, 0xc3, 0x4d, 0xa7, 0xed, 0x34, 0x79, 0xf6, 0xae, - 0x02, 0x66, 0x22, 0xa3, 0xfe, 0xfc, 0x92, 0xa8, 0xcb, 0x4d, 0x1c, 0x1f, 0x95, 0x9f, 0x2e, 0x8b, - 0x73, 0xcd, 0x1a, 0xaa, 0xf1, 0xd9, 0xbb, 0x30, 0x66, 0x10, 0x3b, 0x52, 0x7d, 0xf8, 0xf3, 0x16, - 0x67, 0xfa, 0x4a, 0x67, 0xb9, 0x07, 0x53, 0xbe, 0xf6, 0x9f, 0xb2, 0x33, 0x29, 0x50, 0xcf, 0x17, - 0x67, 0xeb, 0x8c, 0x0b, 0x6a, 0x9e, 0xa2, 0x29, 0x82, 0xb8, 0xbb, 0x0d, 0xfb, 0x37, 0x2c, 0x78, - 0x48, 0x47, 0xd4, 0xc2, 0x85, 0xf3, 0x0c, 0xd8, 0x35, 0x18, 0x0e, 0xda, 0x24, 0x74, 0x12, 0xfd, - 0xec, 0xac, 0x1c, 0xff, 0x1b, 0xa2, 0x7c, 0x7f, 0x77, 0x6e, 0x5a, 0xa7, 0x2e, 0xcb, 0xb1, 0xaa, - 0x89, 0x6c, 0x18, 0x64, 0xe3, 0x12, 0x89, 0x40, 0x6f, 0x96, 0xcd, 0x8a, 0x5d, 0x90, 0x45, 0x58, - 0x40, 0xec, 0xbf, 0x69, 0xf1, 0xe5, 0xa6, 0x77, 0x1d, 0xfd, 0x02, 0x4c, 0x6e, 0x51, 0x55, 0x6e, - 0xf9, 0x7e, 0x3b, 0xe4, 0xe6, 0x77, 0x39, 0x62, 0x2f, 0x14, 0x1f, 0x31, 0xed, 0x73, 0x17, 0x67, - 0x44, 0xef, 0x27, 0xaf, 0xa5, 0xc8, 0xe2, 0xae, 0x86, 0xec, 0x7f, 0x50, 0xe2, 0x7b, 0x96, 0xc9, - 0x70, 0x4f, 0xc1, 0x50, 0x3b, 0x70, 0x97, 0x56, 0x6b, 0x58, 0x8c, 0x95, 0x62, 0x3a, 0x75, 0x5e, - 0x8c, 0x25, 0x1c, 0x5d, 0x04, 0x20, 0xf7, 0x63, 0x12, 0xfa, 0x4e, 0x4b, 0x5d, 0xe9, 0x2b, 0x51, - 0x69, 0x59, 0x41, 0xb0, 0x86, 0x45, 0xeb, 0xb4, 0xc3, 0x60, 0xdb, 0x73, 0x59, 0x9c, 0x4b, 0xd9, - 0xac, 0x53, 0x57, 0x10, 0xac, 0x61, 0x51, 0x05, 0xba, 0xe3, 0x47, 0xfc, 0x18, 0x73, 0xee, 0x88, - 0x4c, 0x4a, 0xc3, 0x89, 0x02, 0x7d, 0x53, 0x07, 0x62, 0x13, 0x17, 0x5d, 0x81, 0xc1, 0xd8, 0x61, - 0x17, 0xd5, 0x03, 0x45, 0xbc, 0x7e, 0xd6, 0x28, 0xae, 0x9e, 0xba, 0x8a, 0x56, 0xc5, 0x82, 0x84, - 0xfd, 0x9f, 0xaa, 0x00, 0x89, 0xd4, 0x85, 0x3e, 0xd7, 0xbd, 0xe1, 0x3f, 0x56, 0x54, 0x64, 0x7b, - 0x70, 0xbb, 0x1d, 0x7d, 0xc9, 0x82, 0x11, 0xa7, 0xd5, 0x0a, 0x9a, 0x4e, 0xcc, 0x86, 0xa7, 0x54, - 0x94, 0xf5, 0x88, 0x9e, 0x2c, 0x24, 0x75, 0x79, 0x67, 0x9e, 0x93, 0x97, 0xc7, 0x1a, 0x24, 0xb7, - 0x3f, 0x7a, 0x17, 0xd0, 0x47, 0xa5, 0xd4, 0xce, 0x67, 0x78, 0x36, 0x2d, 0xb5, 0x57, 0x19, 0xc3, - 0xd5, 0x04, 0x76, 0xf4, 0x96, 0x91, 0x79, 0xa8, 0x52, 0x24, 0x58, 0xd9, 0x90, 0x43, 0xf2, 0x92, - 0x0e, 0xa1, 0xd7, 0x75, 0xf7, 0xf8, 0x81, 0x22, 0xd9, 0x00, 0x34, 0x71, 0x38, 0xc7, 0x35, 0x3e, - 0x86, 0x09, 0xd7, 0x3c, 0x79, 0x85, 0x8b, 0xdf, 0x85, 0xfc, 0x16, 0x52, 0x47, 0x76, 0x72, 0xd6, - 0xa6, 0x00, 0x38, 0xdd, 0x04, 0x7a, 0x9d, 0x07, 0x2f, 0xac, 0xfa, 0xeb, 0x81, 0x70, 0xf3, 0x3b, - 0x57, 0x60, 0xce, 0x77, 0xa2, 0x98, 0x6c, 0xd1, 0x3a, 0xc9, 0xe1, 0x7a, 0x5d, 0x50, 0xc1, 0x8a, - 0x1e, 0x5a, 0x83, 0x41, 0x16, 0x9b, 0x16, 0xcd, 0x0c, 0x17, 0x31, 0x09, 0x9a, 0x21, 0xd9, 0xc9, - 0xfe, 0x61, 0x7f, 0x23, 0x2c, 0x68, 0xa1, 0xcb, 0x32, 0x29, 0x43, 0xb4, 0xea, 0xdf, 0x8c, 0x08, - 0x4b, 0xca, 0x50, 0x5d, 0xfc, 0x48, 0x92, 0x65, 0x81, 0x97, 0x67, 0xa6, 0x6b, 0x34, 0x6a, 0x52, - 0xc1, 0x46, 0xfc, 0x97, 0x59, 0x20, 0x67, 0xa0, 0x48, 0x47, 0xcd, 0x9c, 0x91, 0xc9, 0x60, 0xdf, - 0x32, 0x89, 0xe1, 0x34, 0xf5, 0x63, 0x3d, 0x52, 0x67, 0x7d, 0x98, 0x4c, 0x6f, 0xca, 0x23, 0x3d, - 0xc2, 0x7f, 0x5c, 0x81, 0x71, 0x73, 0x71, 0xa0, 0xf3, 0x50, 0x15, 0x44, 0x54, 0x8a, 0x37, 0xb5, - 0x07, 0xae, 0x49, 0x00, 0x4e, 0x70, 0x58, 0xb2, 0x3b, 0x56, 0x5d, 0x73, 0xf0, 0x4a, 0x92, 0xdd, - 0x29, 0x08, 0xd6, 0xb0, 0xa8, 0x24, 0x7c, 0x27, 0x08, 0x62, 0x75, 0x12, 0xa8, 0x75, 0xb3, 0xc8, - 0x4a, 0xb1, 0x80, 0xd2, 0x13, 0xe0, 0x2e, 0x9d, 0xcc, 0x96, 0x69, 0xde, 0x54, 0x27, 0xc0, 0x15, - 0x1d, 0x88, 0x4d, 0x5c, 0x7a, 0xa2, 0x05, 0x11, 0x5b, 0x88, 0x42, 0xde, 0x4e, 0x1c, 0xe6, 0x1a, - 0x3c, 0x5e, 0x53, 0xc2, 0xd1, 0xa7, 0xe1, 0x21, 0x15, 0x5e, 0x89, 0xb9, 0xb9, 0x58, 0xb6, 0x38, - 0x68, 0xa8, 0xcc, 0x0f, 0x2d, 0x65, 0xa3, 0xe1, 0x5e, 0xf5, 0xd1, 0x2b, 0x30, 0x2e, 0x64, 0x65, - 0x49, 0x71, 0xc8, 0xf4, 0x7b, 0xb8, 0x62, 0x40, 0x71, 0x0a, 0x1b, 0xd5, 0x60, 0x92, 0x96, 0x30, - 0x21, 0x55, 0x52, 0xe0, 0x61, 0xa2, 0xea, 0xa8, 0xbf, 0x92, 0x82, 0xe3, 0xae, 0x1a, 0x68, 0x01, - 0x26, 0xb8, 0xb0, 0x42, 0x15, 0x43, 0x36, 0x0f, 0xc2, 0x37, 0x57, 0x6d, 0x84, 0x1b, 0x26, 0x18, - 0xa7, 0xf1, 0xd1, 0x4b, 0x30, 0xea, 0x84, 0xcd, 0x4d, 0x2f, 0x26, 0xcd, 0xb8, 0x13, 0xf2, 0x94, - 0x27, 0x9a, 0xe3, 0xc8, 0x82, 0x06, 0xc3, 0x06, 0xa6, 0xfd, 0x1e, 0x9c, 0xc8, 0x08, 0x04, 0xa0, - 0x0b, 0xc7, 0x69, 0x7b, 0xf2, 0x9b, 0x52, 0xae, 0x6f, 0x0b, 0xf5, 0x55, 0xf9, 0x35, 0x1a, 0x16, - 0x5d, 0x9d, 0xcc, 0x4e, 0xae, 0x25, 0x6d, 0x55, 0xab, 0x73, 0x45, 0x02, 0x70, 0x82, 0x63, 0xff, - 0x29, 0x80, 0x66, 0xbd, 0x29, 0xe0, 0xee, 0xf4, 0x12, 0x8c, 0xca, 0x3c, 0xc4, 0x5a, 0x32, 0x4f, - 0xf5, 0x99, 0x97, 0x34, 0x18, 0x36, 0x30, 0x69, 0xdf, 0x7c, 0x69, 0x93, 0x4a, 0x3b, 0xda, 0x29, - 0x63, 0x15, 0x4e, 0x70, 0xd0, 0x39, 0x18, 0x8e, 0x48, 0x6b, 0xfd, 0xaa, 0xe7, 0xdf, 0x15, 0x0b, - 0x5b, 0x71, 0xe6, 0x86, 0x28, 0xc7, 0x0a, 0x03, 0x2d, 0x42, 0xb9, 0xe3, 0xb9, 0x62, 0x29, 0x4b, - 0xb1, 0xa1, 0x7c, 0x73, 0xb5, 0xb6, 0xbf, 0x3b, 0xf7, 0x58, 0xaf, 0xf4, 0xca, 0x54, 0x3f, 0x8f, - 0xe6, 0xe9, 0xf6, 0xa3, 0x95, 0xb3, 0x2e, 0x0c, 0x06, 0xfb, 0xbc, 0x30, 0xb8, 0x08, 0x20, 0xbe, - 0x5a, 0xae, 0xe5, 0x72, 0x32, 0x6b, 0x97, 0x14, 0x04, 0x6b, 0x58, 0x54, 0xcb, 0x6f, 0x86, 0xc4, - 0x91, 0x8a, 0x30, 0x77, 0x50, 0x1f, 0x3e, 0xbc, 0x96, 0xbf, 0x94, 0x26, 0x86, 0xbb, 0xe9, 0xa3, - 0x00, 0xa6, 0x5c, 0x11, 0xc3, 0x9b, 0x34, 0x5a, 0xed, 0xdf, 0x2b, 0x9e, 0xf9, 0xf6, 0xa4, 0x09, - 0xe1, 0x6e, 0xda, 0xe8, 0x4d, 0x98, 0x95, 0x85, 0xdd, 0x01, 0xd4, 0x6c, 0xbb, 0x94, 0x17, 0x4f, - 0xef, 0xed, 0xce, 0xcd, 0xd6, 0x7a, 0x62, 0xe1, 0x03, 0x28, 0xa0, 0x37, 0x60, 0x90, 0x5d, 0x30, - 0x45, 0x33, 0x23, 0xec, 0xc4, 0x7b, 0xbe, 0x48, 0x6c, 0x05, 0x5d, 0xf5, 0xf3, 0xec, 0x9a, 0x4a, - 0x78, 0x0d, 0x27, 0xb7, 0x76, 0xac, 0x10, 0x0b, 0x9a, 0xa8, 0x0d, 0x23, 0x8e, 0xef, 0x07, 0xb1, - 0xc3, 0x05, 0xb1, 0xd1, 0x22, 0xb2, 0xa4, 0xd6, 0xc4, 0x42, 0x52, 0x97, 0xb7, 0xa3, 0x1c, 0x11, - 0x35, 0x08, 0xd6, 0x9b, 0x40, 0xf7, 0x60, 0x22, 0xb8, 0x47, 0x19, 0xa6, 0xbc, 0x11, 0x89, 0x66, - 0xc6, 0xcc, 0x0f, 0xcb, 0x31, 0xd4, 0x1a, 0x95, 0x35, 0x4e, 0x66, 0x12, 0xc5, 0xe9, 0x56, 0xd0, - 0xbc, 0x61, 0xae, 0x1e, 0x4f, 0x7c, 0xe3, 0x13, 0x73, 0xb5, 0x6e, 0x9d, 0x66, 0x41, 0xfa, 0xdc, - 0x1f, 0x96, 0x71, 0x84, 0x89, 0x54, 0x90, 0x7e, 0x02, 0xc2, 0x3a, 0x1e, 0xda, 0x84, 0xd1, 0xe4, - 0x6e, 0x2b, 0x8c, 0x58, 0xfe, 0x1f, 0xcd, 0xdd, 0xeb, 0xe0, 0x8f, 0x5b, 0xd5, 0x6a, 0xf2, 0x48, - 0x1f, 0xbd, 0x04, 0x1b, 0x94, 0x67, 0x3f, 0x0e, 0x23, 0xda, 0x14, 0xf7, 0xe3, 0xee, 0x3d, 0xfb, - 0x0a, 0x4c, 0xa6, 0xa7, 0xae, 0x2f, 0x77, 0xf1, 0xff, 0x51, 0x82, 0x89, 0x8c, 0x8b, 0x2d, 0x96, - 0x8d, 0x39, 0xc5, 0x64, 0x93, 0xe4, 0xcb, 0x26, 0xab, 0x2c, 0x15, 0x60, 0x95, 0x92, 0x6f, 0x97, - 0x7b, 0xf2, 0x6d, 0xc1, 0x1e, 0x2b, 0xef, 0x87, 0x3d, 0x9a, 0x27, 0xd2, 0x40, 0xa1, 0x13, 0xe9, - 0x01, 0xb0, 0x54, 0xe3, 0x50, 0x1b, 0x2a, 0x70, 0xa8, 0x7d, 0xb5, 0x04, 0x93, 0x89, 0x6b, 0xbc, - 0x48, 0x83, 0x7e, 0xf4, 0x17, 0x1e, 0x6b, 0xc6, 0x85, 0x47, 0x5e, 0x96, 0xf3, 0x54, 0xff, 0x7a, - 0x5e, 0x7e, 0xbc, 0x91, 0xba, 0xfc, 0x78, 0xbe, 0x4f, 0xba, 0x07, 0x5f, 0x84, 0x7c, 0xab, 0x04, - 0x27, 0xd3, 0x55, 0x96, 0x5a, 0x8e, 0xb7, 0x75, 0x0c, 0xe3, 0xf5, 0x69, 0x63, 0xbc, 0x5e, 0xec, - 0xef, 0xbb, 0x58, 0x27, 0x7b, 0x0e, 0x9a, 0x93, 0x1a, 0xb4, 0x8f, 0x1f, 0x86, 0xf8, 0xc1, 0x23, - 0xf7, 0x47, 0x16, 0x3c, 0x9c, 0x59, 0xef, 0x18, 0x4c, 0xbc, 0xaf, 0x99, 0x26, 0xde, 0xe7, 0x0e, + 0xbb, 0x9a, 0x66, 0x86, 0xbb, 0xf9, 0xa3, 0x6d, 0x40, 0xec, 0x4e, 0x3b, 0x74, 0xfc, 0x88, 0x7f, + 0x8b, 0x27, 0x6c, 0xf4, 0xfd, 0xd5, 0x3a, 0x2b, 0x6a, 0x45, 0x57, 0xbb, 0xb8, 0xe1, 0x8c, 0x1a, + 0x34, 0xaf, 0x85, 0x81, 0xa2, 0x5e, 0x0b, 0x83, 0x39, 0xde, 0xfd, 0xbf, 0x62, 0xc1, 0x09, 0x3a, + 0x2c, 0xa6, 0x27, 0x78, 0x84, 0x02, 0x98, 0xa0, 0xd3, 0xae, 0x45, 0x62, 0x09, 0x13, 0xeb, 0x2b, + 0x47, 0xc5, 0x37, 0xf9, 0x24, 0x7a, 0xe4, 0x15, 0x93, 0x19, 0x4e, 0x73, 0xb7, 0xbf, 0x66, 0x01, + 0xf3, 0x9e, 0x3c, 0x86, 0xcd, 0xec, 0x92, 0xb9, 0x99, 0xd9, 0xf9, 0x12, 0xa3, 0xc7, 0x3e, 0xf6, + 0x3c, 0x4c, 0x52, 0x6c, 0x3d, 0x0c, 0xee, 0xef, 0x48, 0x8d, 0x3f, 0x5f, 0xbb, 0xfa, 0x95, 0x12, + 0x5f, 0x36, 0x2a, 0xf2, 0x14, 0x7d, 0xde, 0x82, 0xe1, 0xa6, 0xd3, 0x76, 0x9a, 0x3c, 0x73, 0x57, + 0x01, 0x33, 0x91, 0x51, 0x7e, 0x7e, 0x49, 0x94, 0xe5, 0x26, 0x8e, 0x8f, 0xca, 0x4f, 0x97, 0xe0, + 0x5c, 0xb3, 0x86, 0xaa, 0x7c, 0xf6, 0x2e, 0x8c, 0x19, 0xcc, 0x8e, 0xf4, 0x3c, 0xfc, 0x79, 0x8b, + 0x0b, 0x7d, 0x75, 0x66, 0xb9, 0x07, 0x53, 0xbe, 0xf6, 0x9f, 0x8a, 0x33, 0xa9, 0x50, 0xcf, 0x17, + 0x17, 0xeb, 0x4c, 0x0a, 0x6a, 0x9e, 0xa2, 0x29, 0x86, 0xb8, 0xbb, 0x0e, 0xfb, 0x37, 0x2c, 0x78, + 0x48, 0x27, 0xd4, 0x42, 0x85, 0xf3, 0x0c, 0xd8, 0x35, 0x18, 0x0e, 0xda, 0x24, 0x74, 0x92, 0xf3, + 0xd9, 0x59, 0xd9, 0xff, 0x37, 0x04, 0x7c, 0x7f, 0x77, 0x6e, 0x5a, 0xe7, 0x2e, 0xe1, 0x58, 0x95, + 0x44, 0x36, 0x0c, 0xb2, 0x7e, 0x89, 0x44, 0x90, 0x37, 0xcb, 0x64, 0xc5, 0x2e, 0xc8, 0x22, 0x2c, + 0x30, 0xf6, 0xdf, 0xb4, 0xf8, 0x74, 0xd3, 0x9b, 0x8e, 0x7e, 0x01, 0x26, 0xb7, 0xe8, 0x51, 0x6e, + 0xf9, 0x7e, 0x3b, 0xe4, 0xe6, 0x77, 0xd9, 0x63, 0x2f, 0x14, 0xef, 0x31, 0xed, 0x73, 0x17, 0x67, + 0x44, 0xeb, 0x27, 0xaf, 0xa5, 0xd8, 0xe2, 0xae, 0x8a, 0xec, 0x7f, 0x50, 0xe2, 0x6b, 0x96, 0xe9, + 0x70, 0x4f, 0xc1, 0x50, 0x3b, 0x70, 0x97, 0x56, 0x6b, 0x58, 0xf4, 0x95, 0x12, 0x3a, 0x75, 0x0e, + 0xc6, 0x12, 0x8f, 0x2e, 0x02, 0x90, 0xfb, 0x31, 0x09, 0x7d, 0xa7, 0xa5, 0xae, 0xf4, 0x95, 0xaa, + 0xb4, 0xac, 0x30, 0x58, 0xa3, 0xa2, 0x65, 0xda, 0x61, 0xb0, 0xed, 0xb9, 0x2c, 0xc6, 0xa5, 0x6c, + 0x96, 0xa9, 0x2b, 0x0c, 0xd6, 0xa8, 0xe8, 0x01, 0xba, 0xe3, 0x47, 0x7c, 0x1b, 0x73, 0xee, 0x88, + 0x2c, 0x4a, 0xc3, 0xc9, 0x01, 0xfa, 0xa6, 0x8e, 0xc4, 0x26, 0x2d, 0xba, 0x02, 0x83, 0xb1, 0xc3, + 0x2e, 0xaa, 0x07, 0x8a, 0x78, 0xfd, 0xac, 0x51, 0x5a, 0x3d, 0x6d, 0x15, 0x2d, 0x8a, 0x05, 0x0b, + 0xfb, 0x3f, 0x55, 0x01, 0x12, 0xad, 0x0b, 0x7d, 0xae, 0x7b, 0xc1, 0x7f, 0xac, 0xa8, 0xca, 0xf6, + 0xe0, 0x56, 0x3b, 0xfa, 0x92, 0x05, 0x23, 0x4e, 0xab, 0x15, 0x34, 0x9d, 0x98, 0x75, 0x4f, 0xa9, + 0xa8, 0xe8, 0x11, 0x2d, 0x59, 0x48, 0xca, 0xf2, 0xc6, 0x3c, 0x27, 0x2f, 0x8f, 0x35, 0x4c, 0x6e, + 0x7b, 0xf4, 0x26, 0xa0, 0x8f, 0x4a, 0xad, 0x9d, 0x8f, 0xf0, 0x6c, 0x5a, 0x6b, 0xaf, 0x32, 0x81, + 0xab, 0x29, 0xec, 0xe8, 0x2d, 0x23, 0xeb, 0x50, 0xa5, 0x48, 0xa0, 0xb2, 0xa1, 0x87, 0xe4, 0x25, + 0x1c, 0x42, 0xaf, 0xeb, 0xee, 0xf1, 0x03, 0x45, 0x32, 0x01, 0x68, 0xea, 0x70, 0x8e, 0x6b, 0x7c, + 0x0c, 0x13, 0xae, 0xb9, 0xf3, 0x0a, 0x17, 0xbf, 0x0b, 0xf9, 0x35, 0xa4, 0xb6, 0xec, 0x64, 0xaf, + 0x4d, 0x21, 0x70, 0xba, 0x0a, 0xf4, 0x3a, 0x0f, 0x5e, 0x58, 0xf5, 0xd7, 0x03, 0xe1, 0xe6, 0x77, + 0xae, 0xc0, 0x98, 0xef, 0x44, 0x31, 0xd9, 0xa2, 0x65, 0x92, 0xcd, 0xf5, 0xba, 0xe0, 0x82, 0x15, + 0x3f, 0xb4, 0x06, 0x83, 0x2c, 0x2e, 0x2d, 0x9a, 0x19, 0x2e, 0x62, 0x12, 0x34, 0xc3, 0xb1, 0x93, + 0xf5, 0xc3, 0xfe, 0x46, 0x58, 0xf0, 0x42, 0x97, 0x65, 0x42, 0x86, 0x68, 0xd5, 0xbf, 0x19, 0x11, + 0x96, 0x90, 0xa1, 0xba, 0xf8, 0x91, 0x24, 0xc3, 0x02, 0x87, 0x67, 0xa6, 0x6a, 0x34, 0x4a, 0x52, + 0xc5, 0x46, 0xfc, 0x97, 0x19, 0x20, 0x67, 0xa0, 0x48, 0x43, 0xcd, 0x7c, 0x91, 0x49, 0x67, 0xdf, + 0x32, 0x99, 0xe1, 0x34, 0xf7, 0x63, 0xdd, 0x52, 0x67, 0x7d, 0x98, 0x4c, 0x2f, 0xca, 0x23, 0xdd, + 0xc2, 0x7f, 0x5c, 0x81, 0x71, 0x73, 0x72, 0xa0, 0xf3, 0x50, 0x15, 0x4c, 0x54, 0x7a, 0x37, 0xb5, + 0x06, 0xae, 0x49, 0x04, 0x4e, 0x68, 0x58, 0xa2, 0x3b, 0x56, 0x5c, 0x73, 0xf0, 0x4a, 0x12, 0xdd, + 0x29, 0x0c, 0xd6, 0xa8, 0xa8, 0x26, 0x7c, 0x27, 0x08, 0x62, 0xb5, 0x13, 0xa8, 0x79, 0xb3, 0xc8, + 0xa0, 0x58, 0x60, 0xe9, 0x0e, 0x70, 0x97, 0x0e, 0x66, 0xcb, 0x34, 0x6f, 0xaa, 0x1d, 0xe0, 0x8a, + 0x8e, 0xc4, 0x26, 0x2d, 0xdd, 0xd1, 0x82, 0x88, 0x4d, 0x44, 0xa1, 0x6f, 0x27, 0x0e, 0x73, 0x0d, + 0x1e, 0xab, 0x29, 0xf1, 0xe8, 0xd3, 0xf0, 0x90, 0x0a, 0xad, 0xc4, 0xdc, 0x5c, 0x2c, 0x6b, 0x1c, + 0x34, 0x8e, 0xcc, 0x0f, 0x2d, 0x65, 0x93, 0xe1, 0x5e, 0xe5, 0xd1, 0x2b, 0x30, 0x2e, 0x74, 0x65, + 0xc9, 0x71, 0xc8, 0xf4, 0x7b, 0xb8, 0x62, 0x60, 0x71, 0x8a, 0x1a, 0xd5, 0x60, 0x92, 0x42, 0x98, + 0x92, 0x2a, 0x39, 0xf0, 0x10, 0x51, 0xb5, 0xd5, 0x5f, 0x49, 0xe1, 0x71, 0x57, 0x09, 0xb4, 0x00, + 0x13, 0x5c, 0x59, 0xa1, 0x07, 0x43, 0x36, 0x0e, 0xc2, 0x37, 0x57, 0x2d, 0x84, 0x1b, 0x26, 0x1a, + 0xa7, 0xe9, 0xd1, 0x4b, 0x30, 0xea, 0x84, 0xcd, 0x4d, 0x2f, 0x26, 0xcd, 0xb8, 0x13, 0xf2, 0x74, + 0x27, 0x9a, 0xe3, 0xc8, 0x82, 0x86, 0xc3, 0x06, 0xa5, 0xfd, 0x1e, 0x9c, 0xc8, 0x08, 0x04, 0xa0, + 0x13, 0xc7, 0x69, 0x7b, 0xf2, 0x9b, 0x52, 0xae, 0x6f, 0x0b, 0xf5, 0x55, 0xf9, 0x35, 0x1a, 0x15, + 0x9d, 0x9d, 0xcc, 0x4e, 0xae, 0x25, 0x6c, 0x55, 0xb3, 0x73, 0x45, 0x22, 0x70, 0x42, 0x63, 0xff, + 0x29, 0x80, 0x66, 0xbd, 0x29, 0xe0, 0xee, 0xf4, 0x12, 0x8c, 0xca, 0x1c, 0xc4, 0x5a, 0x22, 0x4f, + 0xf5, 0x99, 0x97, 0x34, 0x1c, 0x36, 0x28, 0x69, 0xdb, 0x7c, 0x69, 0x93, 0x4a, 0x3b, 0xda, 0x29, + 0x63, 0x15, 0x4e, 0x68, 0xd0, 0x39, 0x18, 0x8e, 0x48, 0x6b, 0xfd, 0xaa, 0xe7, 0xdf, 0x15, 0x13, + 0x5b, 0x49, 0xe6, 0x86, 0x80, 0x63, 0x45, 0x81, 0x16, 0xa1, 0xdc, 0xf1, 0x5c, 0x31, 0x95, 0xa5, + 0xda, 0x50, 0xbe, 0xb9, 0x5a, 0xdb, 0xdf, 0x9d, 0x7b, 0xac, 0x57, 0x6a, 0x65, 0x7a, 0x3e, 0x8f, + 0xe6, 0xe9, 0xf2, 0xa3, 0x85, 0xb3, 0x2e, 0x0c, 0x06, 0xfb, 0xbc, 0x30, 0xb8, 0x08, 0x20, 0xbe, + 0x5a, 0xce, 0xe5, 0x72, 0x32, 0x6a, 0x97, 0x14, 0x06, 0x6b, 0x54, 0xf4, 0x94, 0xdf, 0x0c, 0x89, + 0x23, 0x0f, 0xc2, 0xdc, 0x41, 0x7d, 0xf8, 0xf0, 0xa7, 0xfc, 0xa5, 0x34, 0x33, 0xdc, 0xcd, 0x1f, + 0x05, 0x30, 0xe5, 0x8a, 0xf8, 0xdd, 0xa4, 0xd2, 0x6a, 0xff, 0x5e, 0xf1, 0xcc, 0xb7, 0x27, 0xcd, + 0x08, 0x77, 0xf3, 0x46, 0x6f, 0xc2, 0xac, 0x04, 0x76, 0x07, 0x4f, 0xb3, 0xe5, 0x52, 0x5e, 0x3c, + 0xbd, 0xb7, 0x3b, 0x37, 0x5b, 0xeb, 0x49, 0x85, 0x0f, 0xe0, 0x80, 0xde, 0x80, 0x41, 0x76, 0xc1, + 0x14, 0xcd, 0x8c, 0xb0, 0x1d, 0xef, 0xf9, 0x22, 0xb1, 0x15, 0x74, 0xd6, 0xcf, 0xb3, 0x6b, 0x2a, + 0xe1, 0x35, 0x9c, 0xdc, 0xda, 0x31, 0x20, 0x16, 0x3c, 0x51, 0x1b, 0x46, 0x1c, 0xdf, 0x0f, 0x62, + 0x87, 0x2b, 0x62, 0xa3, 0x45, 0x74, 0x49, 0xad, 0x8a, 0x85, 0xa4, 0x2c, 0xaf, 0x47, 0x39, 0x22, + 0x6a, 0x18, 0xac, 0x57, 0x81, 0xee, 0xc1, 0x44, 0x70, 0x8f, 0x0a, 0x4c, 0x79, 0x23, 0x12, 0xcd, + 0x8c, 0x99, 0x1f, 0x96, 0x63, 0xa8, 0x35, 0x0a, 0x6b, 0x92, 0xcc, 0x64, 0x8a, 0xd3, 0xb5, 0xa0, + 0x79, 0xc3, 0x5c, 0x3d, 0x9e, 0xf8, 0xc6, 0x27, 0xe6, 0x6a, 0xdd, 0x3a, 0xcd, 0x02, 0xf4, 0xb9, + 0x3f, 0x2c, 0x93, 0x08, 0x13, 0xa9, 0x00, 0xfd, 0x04, 0x85, 0x75, 0x3a, 0xb4, 0x09, 0xa3, 0xc9, + 0xdd, 0x56, 0x18, 0xb1, 0xdc, 0x3f, 0x9a, 0xbb, 0xd7, 0xc1, 0x1f, 0xb7, 0xaa, 0x95, 0xe4, 0x91, + 0x3e, 0x3a, 0x04, 0x1b, 0x9c, 0x67, 0x3f, 0x0e, 0x23, 0xda, 0x10, 0xf7, 0xe3, 0xee, 0x3d, 0xfb, + 0x0a, 0x4c, 0xa6, 0x87, 0xae, 0x2f, 0x77, 0xf1, 0xff, 0x51, 0x82, 0x89, 0x8c, 0x8b, 0x2d, 0x96, + 0x89, 0x39, 0x25, 0x64, 0x93, 0xc4, 0xcb, 0xa6, 0xa8, 0x2c, 0x15, 0x10, 0x95, 0x52, 0x6e, 0x97, + 0x7b, 0xca, 0x6d, 0x21, 0x1e, 0x2b, 0xef, 0x47, 0x3c, 0x9a, 0x3b, 0xd2, 0x40, 0xa1, 0x1d, 0xe9, + 0x01, 0x88, 0x54, 0x63, 0x53, 0x1b, 0x2a, 0xb0, 0xa9, 0x7d, 0xb5, 0x04, 0x93, 0x89, 0x6b, 0xbc, + 0x48, 0x81, 0x7e, 0xf4, 0x17, 0x1e, 0x6b, 0xc6, 0x85, 0x47, 0x5e, 0x86, 0xf3, 0x54, 0xfb, 0x7a, + 0x5e, 0x7e, 0xbc, 0x91, 0xba, 0xfc, 0x78, 0xbe, 0x4f, 0xbe, 0x07, 0x5f, 0x84, 0x7c, 0xab, 0x04, + 0x27, 0xd3, 0x45, 0x96, 0x5a, 0x8e, 0xb7, 0x75, 0x0c, 0xfd, 0xf5, 0x69, 0xa3, 0xbf, 0x5e, 0xec, + 0xef, 0xbb, 0x58, 0x23, 0x7b, 0x76, 0x9a, 0x93, 0xea, 0xb4, 0x8f, 0x1f, 0x86, 0xf9, 0xc1, 0x3d, + 0xf7, 0x47, 0x16, 0x3c, 0x9c, 0x59, 0xee, 0x18, 0x4c, 0xbc, 0xaf, 0x99, 0x26, 0xde, 0xe7, 0x0e, 0xf1, 0x75, 0x3d, 0x6c, 0xbe, 0xbf, 0x59, 0xee, 0xf1, 0x55, 0xcc, 0x08, 0x76, 0x03, 0x46, 0x9c, - 0x66, 0x93, 0x44, 0xd1, 0xb5, 0xc0, 0x55, 0x89, 0xc5, 0x9e, 0x65, 0xa7, 0x58, 0x52, 0xbc, 0xbf, - 0x3b, 0x37, 0x9b, 0x26, 0x91, 0x80, 0xb1, 0x4e, 0xc1, 0x4c, 0x79, 0x58, 0x3a, 0xa2, 0x94, 0x87, - 0x17, 0x01, 0xb6, 0x95, 0xbe, 0x9c, 0xb6, 0xad, 0x69, 0x9a, 0xb4, 0x86, 0x85, 0xfe, 0x0a, 0x93, - 0x3d, 0xb9, 0x5f, 0x4a, 0xc5, 0x8c, 0xb2, 0xcd, 0x99, 0x3f, 0xdd, 0xc7, 0x85, 0x07, 0xf3, 0x2a, - 0x3b, 0xa4, 0x22, 0x89, 0x3e, 0x05, 0x93, 0x11, 0xcf, 0x49, 0xb1, 0xd4, 0x72, 0x22, 0x16, 0x13, - 0x22, 0xf8, 0x29, 0x8b, 0xcb, 0x6d, 0xa4, 0x60, 0xb8, 0x0b, 0xdb, 0xfe, 0x66, 0x19, 0x3e, 0x7c, - 0xc0, 0xb2, 0x45, 0x0b, 0xe6, 0xfd, 0xf0, 0x33, 0x69, 0x4b, 0xd3, 0x6c, 0x66, 0x65, 0xc3, 0xf4, - 0x94, 0x9a, 0xed, 0xd2, 0xfb, 0x9e, 0xed, 0x2f, 0xeb, 0x76, 0x41, 0xee, 0xaa, 0x7a, 0xe9, 0xd0, - 0x1b, 0xf3, 0x27, 0xf5, 0x5a, 0xe0, 0xb3, 0x16, 0x3c, 0x96, 0xf9, 0x59, 0x86, 0x3f, 0xca, 0x79, - 0xa8, 0x36, 0x69, 0xa1, 0x16, 0xc1, 0x95, 0x84, 0x4e, 0x4a, 0x00, 0x4e, 0x70, 0x0c, 0xb7, 0x93, - 0x52, 0xae, 0xdb, 0xc9, 0x1f, 0x58, 0x30, 0x9d, 0xee, 0xc4, 0x31, 0xf0, 0xad, 0x86, 0xc9, 0xb7, - 0xe6, 0xfb, 0x9b, 0xfc, 0x1e, 0x2c, 0xeb, 0xab, 0x93, 0x70, 0xaa, 0xeb, 0xd4, 0xe3, 0xa3, 0xf8, - 0x4b, 0x16, 0x4c, 0x6d, 0x30, 0x3d, 0x41, 0x0b, 0x93, 0x13, 0xdf, 0x95, 0x13, 0x5b, 0x78, 0x60, - 0x74, 0x1d, 0xd7, 0x7a, 0xba, 0x50, 0x70, 0x77, 0x63, 0xe8, 0x8b, 0x16, 0x4c, 0x3b, 0xf7, 0xa2, - 0xae, 0x47, 0x7a, 0xc4, 0x42, 0x7a, 0x25, 0xc7, 0x2c, 0x97, 0xf3, 0xbc, 0xcf, 0xe2, 0xcc, 0xde, - 0xee, 0xdc, 0x74, 0x16, 0x16, 0xce, 0x6c, 0x95, 0xce, 0xef, 0xa6, 0x08, 0x97, 0x29, 0x16, 0xf0, - 0x99, 0x15, 0x5c, 0xc3, 0xd9, 0x9a, 0x84, 0x60, 0x45, 0x11, 0xbd, 0x0d, 0xd5, 0x0d, 0x19, 0x19, - 0x97, 0x66, 0x9b, 0x3d, 0x86, 0x39, 0x2b, 0x90, 0x8e, 0x87, 0x2b, 0x28, 0x10, 0x4e, 0x88, 0xa2, - 0xcb, 0x50, 0xf6, 0xd7, 0x23, 0x11, 0x83, 0x9e, 0xe7, 0x6d, 0x64, 0xfa, 0x78, 0xf1, 0xb0, 0xdd, - 0xeb, 0x2b, 0x0d, 0x4c, 0x49, 0x50, 0x4a, 0xe1, 0x1d, 0x57, 0xd8, 0xa3, 0x73, 0x28, 0xe1, 0xc5, - 0x5a, 0x37, 0x25, 0xbc, 0x58, 0xc3, 0x94, 0x04, 0xaa, 0xc3, 0x00, 0x0b, 0xc6, 0x11, 0xc6, 0xe6, - 0x9c, 0x44, 0x05, 0x5d, 0x21, 0x47, 0x3c, 0x33, 0x27, 0x2b, 0xc6, 0x9c, 0x10, 0x5a, 0x83, 0xc1, - 0x26, 0x7b, 0x5c, 0x42, 0x58, 0x01, 0xf2, 0x52, 0x78, 0x74, 0x3d, 0x44, 0xc1, 0x6f, 0xd8, 0x78, - 0x39, 0x16, 0xb4, 0x18, 0x55, 0xd2, 0xde, 0x5c, 0x8f, 0x84, 0x9a, 0x9f, 0x47, 0xb5, 0xeb, 0x99, - 0x10, 0x41, 0x95, 0x95, 0x63, 0x41, 0x0b, 0xd5, 0xa0, 0xb4, 0xde, 0x14, 0xb1, 0x3a, 0x39, 0x46, + 0x66, 0x93, 0x44, 0xd1, 0xb5, 0xc0, 0x55, 0x49, 0xc5, 0x9e, 0x65, 0xbb, 0x58, 0x02, 0xde, 0xdf, + 0x9d, 0x9b, 0x4d, 0xb3, 0x48, 0xd0, 0x58, 0xe7, 0x60, 0xa6, 0x3b, 0x2c, 0x1d, 0x51, 0xba, 0xc3, + 0x8b, 0x00, 0xdb, 0xea, 0xbc, 0x9c, 0xb6, 0xad, 0x69, 0x27, 0x69, 0x8d, 0x0a, 0xfd, 0x15, 0xa6, + 0x7b, 0x72, 0xbf, 0x94, 0x8a, 0x19, 0x65, 0x9b, 0x33, 0x7e, 0xba, 0x8f, 0x0b, 0x0f, 0xe6, 0x55, + 0x76, 0x48, 0xc5, 0x12, 0x7d, 0x0a, 0x26, 0x23, 0x9e, 0x8f, 0x62, 0xa9, 0xe5, 0x44, 0x2c, 0x26, + 0x44, 0xc8, 0x53, 0x16, 0x97, 0xdb, 0x48, 0xe1, 0x70, 0x17, 0xb5, 0xfd, 0xcd, 0x32, 0x7c, 0xf8, + 0x80, 0x69, 0x8b, 0x16, 0xcc, 0xfb, 0xe1, 0x67, 0xd2, 0x96, 0xa6, 0xd9, 0xcc, 0xc2, 0x86, 0xe9, + 0x29, 0x35, 0xda, 0xa5, 0xf7, 0x3d, 0xda, 0x5f, 0xd6, 0xed, 0x82, 0xdc, 0x55, 0xf5, 0xd2, 0xa1, + 0x17, 0xe6, 0x4f, 0xea, 0xb5, 0xc0, 0x67, 0x2d, 0x78, 0x2c, 0xf3, 0xb3, 0x0c, 0x7f, 0x94, 0xf3, + 0x50, 0x6d, 0x52, 0xa0, 0x16, 0xc1, 0x95, 0x84, 0x4e, 0x4a, 0x04, 0x4e, 0x68, 0x0c, 0xb7, 0x93, + 0x52, 0xae, 0xdb, 0xc9, 0x1f, 0x58, 0x30, 0x9d, 0x6e, 0xc4, 0x31, 0xc8, 0xad, 0x86, 0x29, 0xb7, + 0xe6, 0xfb, 0x1b, 0xfc, 0x1e, 0x22, 0xeb, 0xab, 0x93, 0x70, 0xaa, 0x6b, 0xd7, 0xe3, 0xbd, 0xf8, + 0x4b, 0x16, 0x4c, 0x6d, 0xb0, 0x73, 0x82, 0x16, 0x26, 0x27, 0xbe, 0x2b, 0x27, 0xb6, 0xf0, 0xc0, + 0xe8, 0x3a, 0x7e, 0xea, 0xe9, 0x22, 0xc1, 0xdd, 0x95, 0xa1, 0x2f, 0x5a, 0x30, 0xed, 0xdc, 0x8b, + 0xba, 0x1e, 0xe8, 0x11, 0x13, 0xe9, 0x95, 0x1c, 0xb3, 0x5c, 0xce, 0xd3, 0x3e, 0x8b, 0x33, 0x7b, + 0xbb, 0x73, 0xd3, 0x59, 0x54, 0x38, 0xb3, 0x56, 0x3a, 0xbe, 0x9b, 0x22, 0x5c, 0xa6, 0x58, 0xc0, + 0x67, 0x56, 0x70, 0x0d, 0x17, 0x6b, 0x12, 0x83, 0x15, 0x47, 0xf4, 0x36, 0x54, 0x37, 0x64, 0x64, + 0x5c, 0x5a, 0x6c, 0xf6, 0xe8, 0xe6, 0xac, 0x40, 0x3a, 0x1e, 0xae, 0xa0, 0x50, 0x38, 0x61, 0x8a, + 0x2e, 0x43, 0xd9, 0x5f, 0x8f, 0x44, 0x0c, 0x7a, 0x9e, 0xb7, 0x91, 0xe9, 0xe3, 0xc5, 0xc3, 0x76, + 0xaf, 0xaf, 0x34, 0x30, 0x65, 0x41, 0x39, 0x85, 0x77, 0x5c, 0x61, 0x8f, 0xce, 0xe1, 0x84, 0x17, + 0x6b, 0xdd, 0x9c, 0xf0, 0x62, 0x0d, 0x53, 0x16, 0xa8, 0x0e, 0x03, 0x2c, 0x18, 0x47, 0x18, 0x9b, + 0x73, 0x12, 0x15, 0x74, 0x85, 0x1c, 0xf1, 0xac, 0x9c, 0x0c, 0x8c, 0x39, 0x23, 0xb4, 0x06, 0x83, + 0x4d, 0xf6, 0xb0, 0x84, 0xb0, 0x02, 0xe4, 0xa5, 0xf0, 0xe8, 0x7a, 0x84, 0x82, 0xdf, 0xb0, 0x71, + 0x38, 0x16, 0xbc, 0x18, 0x57, 0xd2, 0xde, 0x5c, 0x8f, 0xc4, 0x31, 0x3f, 0x8f, 0x6b, 0xd7, 0x13, + 0x21, 0x82, 0x2b, 0x83, 0x63, 0xc1, 0x0b, 0xd5, 0xa0, 0xb4, 0xde, 0x14, 0xb1, 0x3a, 0x39, 0x46, 0x66, 0x33, 0x06, 0x7b, 0x71, 0x70, 0x6f, 0x77, 0xae, 0xb4, 0xb2, 0x84, 0x4b, 0xeb, 0x4d, 0xf4, - 0x1a, 0x0c, 0xad, 0xf3, 0xa8, 0x5a, 0x91, 0xcc, 0xf7, 0x42, 0x5e, 0xe8, 0x6f, 0x57, 0x08, 0x2e, - 0x0f, 0x49, 0x11, 0x00, 0x2c, 0xc9, 0xb1, 0x3c, 0x87, 0x2a, 0x4e, 0x58, 0x64, 0xf3, 0x9d, 0xef, - 0x2f, 0xae, 0x58, 0x68, 0xbf, 0xaa, 0x14, 0x6b, 0x14, 0xe9, 0x9a, 0x77, 0xe4, 0x3b, 0x39, 0x2c, - 0x93, 0x6f, 0xee, 0x9a, 0xcf, 0x7c, 0x56, 0x87, 0xaf, 0x79, 0x05, 0xc2, 0x09, 0x51, 0xd4, 0x81, - 0xb1, 0xed, 0xa8, 0xbd, 0x49, 0xe4, 0xd6, 0x67, 0xe9, 0x7d, 0x47, 0x2e, 0x7e, 0x32, 0x27, 0x67, - 0xb3, 0xa8, 0xe2, 0x85, 0x71, 0xc7, 0x69, 0x75, 0x71, 0x30, 0x96, 0x58, 0xee, 0x96, 0x4e, 0x16, - 0x9b, 0xad, 0xd0, 0x29, 0x79, 0xb7, 0x13, 0xdc, 0xd9, 0x89, 0x89, 0x48, 0xff, 0x9b, 0x33, 0x25, - 0xaf, 0x72, 0xe4, 0xee, 0x29, 0x11, 0x00, 0x2c, 0xc9, 0xa9, 0x21, 0x63, 0xdc, 0x78, 0xb2, 0xf0, - 0x90, 0x75, 0x7d, 0x43, 0x32, 0x64, 0x8c, 0xfb, 0x26, 0x44, 0x19, 0xd7, 0x6d, 0x6f, 0x06, 0x71, - 0xe0, 0xa7, 0x78, 0xff, 0x54, 0x11, 0xae, 0x5b, 0xcf, 0xa8, 0xd9, 0xcd, 0x75, 0xb3, 0xb0, 0x70, - 0x66, 0xab, 0xc8, 0x87, 0xf1, 0x76, 0x10, 0xc6, 0xf7, 0x82, 0x50, 0xae, 0x43, 0x54, 0x48, 0x47, - 0x34, 0xea, 0x88, 0xb6, 0x99, 0xe7, 0xb1, 0x09, 0xc1, 0x29, 0xea, 0x74, 0xea, 0xa2, 0xa6, 0xd3, - 0x22, 0xab, 0x37, 0x66, 0x4e, 0x14, 0x99, 0xba, 0x06, 0x47, 0xee, 0x9e, 0x3a, 0x01, 0xc0, 0x92, - 0x1c, 0xe5, 0x75, 0x2c, 0x97, 0x3d, 0xcb, 0x66, 0x9c, 0xcb, 0xeb, 0xba, 0xbc, 0x73, 0x39, 0xaf, - 0x63, 0xc5, 0x98, 0x13, 0x42, 0xef, 0x40, 0x55, 0x08, 0xb7, 0x41, 0x34, 0x73, 0x92, 0x51, 0xfd, - 0xd9, 0x9c, 0xde, 0x72, 0xf4, 0x1b, 0x8d, 0xec, 0x53, 0x5f, 0x44, 0xff, 0x49, 0x24, 0x9c, 0x90, - 0xb7, 0x7f, 0x63, 0xb0, 0x5b, 0xec, 0x61, 0x8a, 0xcd, 0xdf, 0xe8, 0xbe, 0xb1, 0xfe, 0x54, 0xff, - 0xfa, 0xfb, 0x03, 0xbc, 0xbb, 0xfe, 0xa2, 0x05, 0xa7, 0xda, 0x99, 0x9f, 0x27, 0x04, 0x87, 0x7e, - 0xcd, 0x00, 0x7c, 0x68, 0x54, 0x8e, 0xf1, 0x6c, 0x38, 0xee, 0xd1, 0x66, 0x5a, 0x15, 0x28, 0xbf, - 0x6f, 0x55, 0xe0, 0x36, 0x0c, 0x33, 0xd9, 0x35, 0xc9, 0xef, 0xd3, 0x67, 0x2a, 0x1c, 0x26, 0x82, - 0x2c, 0x09, 0x12, 0x58, 0x11, 0xa3, 0x03, 0xf7, 0x68, 0xfa, 0x23, 0x30, 0x61, 0x60, 0x91, 0xd9, - 0x92, 0xeb, 0x59, 0x2b, 0x62, 0x24, 0x1e, 0xad, 0x1f, 0x84, 0xbc, 0x9f, 0x87, 0x80, 0x0f, 0x6e, - 0x0c, 0xd5, 0x32, 0x14, 0xbd, 0x41, 0xf3, 0x7a, 0x2a, 0x5f, 0xd9, 0x3b, 0x5e, 0x05, 0xe5, 0x1f, - 0x5a, 0x19, 0xf2, 0x34, 0x57, 0x2a, 0x3f, 0x69, 0x2a, 0x95, 0x4f, 0xa6, 0x95, 0xca, 0x2e, 0x53, - 0x92, 0xa1, 0x4f, 0x16, 0xcf, 0xcc, 0x5b, 0x34, 0x81, 0x91, 0xdd, 0x82, 0x33, 0x79, 0xcc, 0x9a, - 0xb9, 0xac, 0xb9, 0xea, 0xb2, 0x36, 0x71, 0x59, 0x73, 0x57, 0x6b, 0x98, 0x41, 0x8a, 0xe6, 0xc0, - 0xb0, 0x7f, 0xb9, 0x04, 0xe5, 0x7a, 0xe0, 0x1e, 0x83, 0x69, 0xec, 0x92, 0x61, 0x1a, 0x7b, 0x22, - 0xf7, 0xa1, 0xc8, 0x9e, 0x86, 0xb0, 0x1b, 0x29, 0x43, 0xd8, 0xcf, 0xe4, 0x93, 0x3a, 0xd8, 0xec, - 0xf5, 0xed, 0x32, 0xe8, 0x4f, 0x5d, 0xa2, 0xff, 0x70, 0x18, 0x4f, 0xe6, 0x72, 0xb1, 0xd7, 0x2f, - 0x45, 0x1b, 0xcc, 0xe3, 0x4d, 0x06, 0x62, 0xfe, 0xc4, 0x3a, 0x34, 0xdf, 0x26, 0xde, 0xc6, 0x66, - 0x4c, 0xdc, 0xf4, 0x87, 0x1d, 0x9f, 0x43, 0xf3, 0x5f, 0x58, 0x30, 0x91, 0x6a, 0x1d, 0xb5, 0xb2, - 0x22, 0xb8, 0x0e, 0x69, 0xec, 0x9a, 0xca, 0x0d, 0xf9, 0x9a, 0x07, 0x50, 0x77, 0x16, 0xd2, 0xa0, - 0xc4, 0x64, 0x6b, 0x75, 0xa9, 0x11, 0x61, 0x0d, 0x03, 0xbd, 0x00, 0x23, 0x71, 0xd0, 0x0e, 0x5a, - 0xc1, 0xc6, 0xce, 0x15, 0x22, 0xb3, 0xb3, 0xa8, 0x9b, 0xa5, 0xb5, 0x04, 0x84, 0x75, 0x3c, 0xfb, - 0x3b, 0x65, 0x48, 0x3f, 0x94, 0xfa, 0xff, 0xd7, 0xe9, 0x4f, 0xce, 0x3a, 0xfd, 0x63, 0x0b, 0x26, - 0x69, 0xeb, 0xcc, 0xc5, 0x48, 0x3a, 0x1e, 0xab, 0x67, 0x42, 0xac, 0x03, 0x9e, 0x09, 0x79, 0x92, - 0x72, 0x3b, 0x37, 0xe8, 0xc4, 0xc2, 0x04, 0xa6, 0x31, 0x31, 0x5a, 0x8a, 0x05, 0x54, 0xe0, 0x91, - 0x30, 0x14, 0x11, 0x5a, 0x3a, 0x1e, 0x09, 0x43, 0x2c, 0xa0, 0xf2, 0x15, 0x91, 0x4a, 0x8f, 0x57, - 0x44, 0x58, 0x7e, 0x33, 0xe1, 0xd6, 0x22, 0xc4, 0x0a, 0x2d, 0xbf, 0x99, 0xf4, 0x77, 0x49, 0x70, - 0xec, 0xaf, 0x97, 0x61, 0xb4, 0x1e, 0xb8, 0x49, 0x44, 0xc1, 0xf3, 0x46, 0x44, 0xc1, 0x99, 0x54, - 0x44, 0xc1, 0xa4, 0x8e, 0xfb, 0x60, 0x02, 0x0a, 0x44, 0x1e, 0x3c, 0xf6, 0xce, 0xcd, 0x21, 0x83, - 0x09, 0x8c, 0x3c, 0x78, 0x8a, 0x10, 0x36, 0xe9, 0xfe, 0x34, 0x05, 0x11, 0xfc, 0x6f, 0x0b, 0xc6, - 0xeb, 0x81, 0x4b, 0x17, 0xe8, 0x4f, 0xd3, 0x6a, 0xd4, 0xb3, 0xe7, 0x0d, 0x1e, 0x90, 0x3d, 0xef, - 0x9f, 0x5b, 0x30, 0x54, 0x0f, 0xdc, 0x63, 0x30, 0x0f, 0xaf, 0x98, 0xe6, 0xe1, 0xc7, 0x72, 0x39, - 0x6f, 0x0f, 0x8b, 0xf0, 0x37, 0xcb, 0x30, 0x46, 0x7b, 0x1c, 0x6c, 0xc8, 0xf9, 0x32, 0xc6, 0xc6, - 0x2a, 0x30, 0x36, 0x54, 0x24, 0x0c, 0x5a, 0xad, 0xe0, 0x5e, 0x7a, 0xee, 0x56, 0x58, 0x29, 0x16, - 0x50, 0x74, 0x0e, 0x86, 0xdb, 0x21, 0xd9, 0xf6, 0x82, 0x4e, 0x94, 0x8e, 0xf6, 0xac, 0x8b, 0x72, - 0xac, 0x30, 0xd0, 0xf3, 0x30, 0x1a, 0x79, 0x7e, 0x93, 0x48, 0xa7, 0x97, 0x0a, 0x73, 0x7a, 0xe1, - 0x89, 0x4a, 0xb5, 0x72, 0x6c, 0x60, 0xa1, 0xdb, 0x50, 0x65, 0xff, 0xd9, 0x0e, 0xea, 0xff, 0x19, - 0x10, 0xae, 0x0e, 0x4b, 0x02, 0x38, 0xa1, 0x85, 0x2e, 0x02, 0xc4, 0xd2, 0x3d, 0x27, 0x12, 0x61, - 0xc9, 0x4a, 0x2e, 0x55, 0x8e, 0x3b, 0x11, 0xd6, 0xb0, 0xd0, 0x33, 0x50, 0x8d, 0x1d, 0xaf, 0x75, - 0xd5, 0xf3, 0x49, 0x24, 0xdc, 0x9b, 0x44, 0xd2, 0x71, 0x51, 0x88, 0x13, 0x38, 0x3d, 0xef, 0x59, - 0xd0, 0x3b, 0x7f, 0x62, 0x68, 0x98, 0x61, 0xb3, 0xf3, 0xfe, 0xaa, 0x2a, 0xc5, 0x1a, 0x86, 0xfd, - 0x12, 0x9c, 0xac, 0x07, 0x6e, 0x3d, 0x08, 0xe3, 0x95, 0x20, 0xbc, 0xe7, 0x84, 0xae, 0x9c, 0xbf, - 0x39, 0x99, 0xeb, 0x9a, 0x9e, 0xc9, 0x03, 0xdc, 0x8a, 0x60, 0xe4, 0xae, 0x7e, 0x8e, 0x9d, 0xf8, - 0x7d, 0x86, 0xaa, 0xfc, 0xa0, 0x04, 0xa8, 0xce, 0x1c, 0x88, 0x8c, 0x17, 0xa9, 0x36, 0x61, 0x3c, - 0x22, 0x57, 0x3d, 0xbf, 0x73, 0x5f, 0x90, 0x2a, 0x16, 0x1b, 0xd4, 0x58, 0xd6, 0xeb, 0x70, 0x3b, - 0x8d, 0x59, 0x86, 0x53, 0x74, 0xe9, 0x60, 0x86, 0x1d, 0x7f, 0x21, 0xba, 0x19, 0x91, 0x50, 0xbc, - 0xc0, 0xc4, 0x06, 0x13, 0xcb, 0x42, 0x9c, 0xc0, 0xe9, 0xe2, 0x61, 0x7f, 0xae, 0x07, 0x3e, 0x0e, - 0x82, 0x58, 0x2e, 0x37, 0xf6, 0x22, 0x87, 0x56, 0x8e, 0x0d, 0x2c, 0xb4, 0x02, 0x28, 0xea, 0xb4, - 0xdb, 0x2d, 0x76, 0x53, 0xea, 0xb4, 0x2e, 0x85, 0x41, 0xa7, 0xcd, 0xfd, 0xc8, 0xc5, 0x63, 0x16, - 0x8d, 0x2e, 0x28, 0xce, 0xa8, 0x41, 0x99, 0xc5, 0x7a, 0xc4, 0x7e, 0x8b, 0x08, 0x78, 0x6e, 0x6d, - 0x6d, 0xb0, 0x22, 0x2c, 0x61, 0xf6, 0x2f, 0xb2, 0x03, 0x8e, 0x3d, 0x8d, 0x13, 0x77, 0x42, 0x82, - 0xb6, 0x60, 0xac, 0xcd, 0x0e, 0xb1, 0x38, 0x0c, 0x5a, 0x2d, 0x22, 0xe5, 0xcb, 0xc3, 0xb9, 0x30, - 0xf1, 0xc7, 0x30, 0x74, 0x72, 0xd8, 0xa4, 0x6e, 0xff, 0xb7, 0x71, 0xc6, 0xab, 0xc4, 0x65, 0xf5, - 0x90, 0x70, 0x56, 0x16, 0x92, 0xdc, 0x47, 0x8a, 0x3c, 0x72, 0x97, 0x9c, 0x03, 0xc2, 0xf5, 0x19, - 0x4b, 0x2a, 0xe8, 0x33, 0xcc, 0x15, 0x9f, 0x33, 0x88, 0xe2, 0x4f, 0x77, 0x72, 0x7c, 0xc3, 0x0d, - 0x5f, 0x90, 0xc0, 0x1a, 0x39, 0x74, 0x15, 0xc6, 0xc4, 0x4b, 0x2a, 0xc2, 0x4c, 0x51, 0x36, 0x54, - 0xec, 0x31, 0xac, 0x03, 0xf7, 0xd3, 0x05, 0xd8, 0xac, 0x8c, 0x36, 0xe0, 0x51, 0xed, 0xa5, 0xb0, - 0x0c, 0x77, 0x3b, 0xce, 0x79, 0x1e, 0xdb, 0xdb, 0x9d, 0x7b, 0x74, 0xed, 0x20, 0x44, 0x7c, 0x30, - 0x1d, 0x74, 0x03, 0x4e, 0x3a, 0xcd, 0xd8, 0xdb, 0x26, 0x35, 0xe2, 0xb8, 0x2d, 0xcf, 0x27, 0x66, - 0x9a, 0x84, 0x87, 0xf7, 0x76, 0xe7, 0x4e, 0x2e, 0x64, 0x21, 0xe0, 0xec, 0x7a, 0xe8, 0x93, 0x50, - 0x75, 0xfd, 0x48, 0x8c, 0xc1, 0xa0, 0xf1, 0x30, 0x5e, 0xb5, 0x76, 0xbd, 0xa1, 0xbe, 0x3f, 0xf9, - 0x83, 0x93, 0x0a, 0xe8, 0x5d, 0x18, 0xd5, 0xc3, 0x9f, 0xc4, 0x83, 0x8c, 0x2f, 0x16, 0xd2, 0x9f, - 0x8d, 0x98, 0x21, 0x6e, 0xc1, 0x53, 0x6e, 0xad, 0x46, 0x38, 0x91, 0xd1, 0x04, 0xfa, 0x79, 0x40, - 0x11, 0x09, 0xb7, 0xbd, 0x26, 0x59, 0x68, 0xb2, 0xec, 0xbe, 0xcc, 0xc6, 0x33, 0x6c, 0xc4, 0x77, - 0xa0, 0x46, 0x17, 0x06, 0xce, 0xa8, 0x85, 0x2e, 0x53, 0xce, 0xa3, 0x97, 0x0a, 0x2f, 0x64, 0x29, - 0x18, 0xce, 0xd4, 0x48, 0x3b, 0x24, 0x4d, 0x27, 0x26, 0xae, 0x49, 0x11, 0xa7, 0xea, 0xd1, 0x73, - 0x49, 0x3d, 0xe0, 0x00, 0xa6, 0xef, 0x6c, 0xf7, 0x23, 0x0e, 0x54, 0xcf, 0xda, 0x0c, 0xa2, 0xf8, - 0x3a, 0x89, 0xef, 0x05, 0xe1, 0x5d, 0x91, 0x11, 0x2d, 0x49, 0x95, 0x98, 0x80, 0xb0, 0x8e, 0x47, - 0x65, 0x28, 0x76, 0xf5, 0xb7, 0x5a, 0x63, 0xf7, 0x2a, 0xc3, 0xc9, 0xde, 0xb9, 0xcc, 0x8b, 0xb1, - 0x84, 0x4b, 0xd4, 0xd5, 0xfa, 0x12, 0xbb, 0x23, 0x49, 0xa1, 0xae, 0xd6, 0x97, 0xb0, 0x84, 0xa3, - 0xa0, 0xfb, 0xf9, 0xc1, 0xf1, 0x22, 0xf7, 0x55, 0xdd, 0x9c, 0xbc, 0xe0, 0x0b, 0x84, 0xf7, 0x61, - 0x52, 0x3d, 0x81, 0xc8, 0x93, 0xc6, 0x45, 0x33, 0x13, 0x6c, 0xe1, 0x1c, 0x26, 0xf7, 0x9c, 0xb2, - 0xeb, 0xad, 0xa6, 0x68, 0xe2, 0xae, 0x56, 0x8c, 0xe4, 0x1c, 0x93, 0xb9, 0x8f, 0x72, 0x9c, 0x87, - 0x6a, 0xd4, 0xb9, 0xe3, 0x06, 0x5b, 0x8e, 0xe7, 0xb3, 0x8b, 0x0c, 0x4d, 0x88, 0x69, 0x48, 0x00, - 0x4e, 0x70, 0x50, 0x1d, 0x86, 0x1d, 0xa1, 0xc2, 0x89, 0x0b, 0x87, 0x9c, 0x28, 0x7c, 0xa9, 0xf0, - 0x71, 0xeb, 0xaa, 0xfc, 0x87, 0x15, 0x15, 0xf4, 0x32, 0x8c, 0x89, 0x20, 0x32, 0xe1, 0xec, 0x79, - 0xc2, 0x0c, 0x38, 0x68, 0xe8, 0x40, 0x6c, 0xe2, 0xa2, 0x0d, 0x18, 0xa7, 0x54, 0x12, 0x06, 0x38, - 0x33, 0xdd, 0x1f, 0x0f, 0xd5, 0xd2, 0x9f, 0xeb, 0x64, 0x70, 0x8a, 0x2c, 0x72, 0xe1, 0x11, 0xa7, - 0x13, 0x07, 0x5b, 0x74, 0x27, 0x98, 0xfb, 0x64, 0x2d, 0xb8, 0x4b, 0x7c, 0x76, 0xcb, 0x30, 0xbc, - 0x78, 0x66, 0x6f, 0x77, 0xee, 0x91, 0x85, 0x03, 0xf0, 0xf0, 0x81, 0x54, 0xd0, 0x5b, 0x30, 0x12, - 0x07, 0x2d, 0xe1, 0xc3, 0x1d, 0xcd, 0x9c, 0x2a, 0x92, 0x84, 0x68, 0x4d, 0x55, 0xd0, 0xcd, 0x18, - 0x8a, 0x08, 0xd6, 0x29, 0xa2, 0x37, 0xf9, 0xae, 0x64, 0x09, 0x33, 0x49, 0x34, 0xf3, 0x50, 0x91, - 0xc1, 0x52, 0x19, 0x36, 0xcd, 0xed, 0x2b, 0x68, 0x60, 0x9d, 0xe0, 0xec, 0xcf, 0xc1, 0x54, 0x17, - 0xcb, 0xeb, 0xcb, 0xb9, 0xf5, 0x3f, 0x0e, 0x40, 0x55, 0x59, 0x0c, 0xd1, 0x79, 0xd3, 0x38, 0xfc, - 0x70, 0xda, 0x38, 0x3c, 0x4c, 0x05, 0x34, 0xdd, 0x1e, 0xfc, 0x66, 0xc6, 0xa3, 0xfa, 0x4f, 0xe7, - 0xee, 0xf1, 0xe2, 0x91, 0x6d, 0x9a, 0x8a, 0x57, 0x2e, 0x6c, 0x6f, 0xae, 0x1c, 0xa8, 0x35, 0x16, - 0x7c, 0x28, 0x92, 0xea, 0x87, 0xed, 0xc0, 0x5d, 0xad, 0xa7, 0xdf, 0x41, 0xab, 0xd3, 0x42, 0xcc, - 0x61, 0x4c, 0xae, 0xa7, 0x67, 0x36, 0x93, 0xeb, 0x87, 0x0e, 0x29, 0xd7, 0x4b, 0x02, 0x38, 0xa1, - 0x85, 0xb6, 0x61, 0xaa, 0x69, 0x3e, 0x6b, 0xa7, 0xe2, 0xd5, 0x9e, 0xed, 0xe3, 0x59, 0xb9, 0x8e, - 0xf6, 0x22, 0xcd, 0x52, 0x9a, 0x1e, 0xee, 0x6e, 0x02, 0xbd, 0x0c, 0xc3, 0xef, 0x06, 0x11, 0xbb, - 0xb6, 0x10, 0x07, 0x97, 0x8c, 0x0b, 0x1a, 0x7e, 0xf5, 0x46, 0x83, 0x95, 0xef, 0xef, 0xce, 0x8d, - 0xd4, 0x03, 0x57, 0xfe, 0xc5, 0xaa, 0x02, 0xfa, 0xac, 0x05, 0x27, 0x8d, 0x7d, 0xac, 0x7a, 0x0e, - 0x87, 0xe9, 0xf9, 0xa3, 0xa2, 0xe5, 0x93, 0xab, 0x59, 0x34, 0x71, 0x76, 0x53, 0xf6, 0x77, 0xb9, - 0x89, 0x54, 0x18, 0x4d, 0x48, 0xd4, 0x69, 0x1d, 0xc7, 0xeb, 0x10, 0x37, 0x0c, 0x7b, 0xce, 0x03, - 0x30, 0xd2, 0xff, 0x7b, 0x8b, 0x19, 0xe9, 0xd7, 0xc8, 0x56, 0xbb, 0xe5, 0xc4, 0xc7, 0xe1, 0xfb, - 0xfc, 0x19, 0x18, 0x8e, 0x45, 0x6b, 0xc5, 0x9e, 0xb6, 0xd0, 0xba, 0xc7, 0x2e, 0x2f, 0xd4, 0xc1, - 0x27, 0x4b, 0xb1, 0x22, 0x68, 0xff, 0x2b, 0x3e, 0x2b, 0x12, 0x72, 0x0c, 0x96, 0x88, 0xeb, 0xa6, - 0x25, 0xe2, 0xa9, 0xc2, 0xdf, 0xd2, 0xc3, 0x22, 0xf1, 0x1d, 0xf3, 0x0b, 0x98, 0x7e, 0xf2, 0x93, - 0x73, 0x8b, 0x64, 0xff, 0xba, 0x05, 0xd3, 0x59, 0xce, 0x08, 0x54, 0x80, 0xe1, 0xda, 0x91, 0xba, - 0x5f, 0x53, 0xa3, 0x7a, 0x4b, 0x94, 0x63, 0x85, 0x51, 0x38, 0xd7, 0x7c, 0x7f, 0x29, 0xb4, 0x6e, - 0x80, 0xf9, 0x40, 0x22, 0x7a, 0x85, 0x87, 0x3a, 0x58, 0xea, 0x05, 0xc3, 0xfe, 0xc2, 0x1c, 0xec, - 0x6f, 0x94, 0x60, 0x9a, 0x1b, 0xb9, 0x17, 0xb6, 0x03, 0xcf, 0xad, 0x07, 0xae, 0x08, 0xfc, 0x70, - 0x61, 0xb4, 0xad, 0x29, 0xb7, 0xc5, 0x52, 0xf2, 0xe8, 0xea, 0x70, 0xa2, 0x50, 0xe8, 0xa5, 0xd8, - 0xa0, 0x4a, 0x5b, 0x21, 0xdb, 0x5e, 0x53, 0xd9, 0x4c, 0x4b, 0x7d, 0x9f, 0x0c, 0xaa, 0x95, 0x65, - 0x8d, 0x0e, 0x36, 0xa8, 0x1e, 0xc1, 0x13, 0x31, 0xf6, 0xdf, 0xb7, 0xe0, 0xa1, 0x1e, 0x69, 0x7b, - 0x68, 0x73, 0xf7, 0xd8, 0xc5, 0x82, 0x78, 0x81, 0x53, 0x35, 0xc7, 0xaf, 0x1b, 0xb0, 0x80, 0xa2, - 0x3b, 0x00, 0xfc, 0xba, 0x80, 0xca, 0xd2, 0xe9, 0xbb, 0xec, 0x82, 0xc9, 0x31, 0xb4, 0xbc, 0x09, - 0x92, 0x12, 0xd6, 0xa8, 0xda, 0x5f, 0x2b, 0xc3, 0x00, 0x7f, 0xe8, 0xbd, 0x0e, 0x43, 0x9b, 0x3c, - 0x9f, 0x71, 0x7f, 0xe9, 0x94, 0x13, 0xe5, 0x85, 0x17, 0x60, 0x49, 0x06, 0x5d, 0x83, 0x13, 0x22, - 0xf4, 0xa8, 0x46, 0x5a, 0xce, 0x8e, 0xd4, 0x86, 0xf9, 0xbb, 0x21, 0x32, 0xc1, 0xfd, 0x89, 0xd5, - 0x6e, 0x14, 0x9c, 0x55, 0x0f, 0xbd, 0xd2, 0x95, 0x7e, 0x90, 0xe7, 0x89, 0x56, 0x92, 0x70, 0x4e, - 0x0a, 0xc2, 0x97, 0x61, 0xac, 0xdd, 0xa5, 0xf7, 0x6b, 0xef, 0x69, 0x9b, 0xba, 0xbe, 0x89, 0xcb, - 0x7c, 0x17, 0x3a, 0xcc, 0x67, 0x63, 0x6d, 0x33, 0x24, 0xd1, 0x66, 0xd0, 0x72, 0xc5, 0x53, 0xb0, - 0x89, 0xef, 0x42, 0x0a, 0x8e, 0xbb, 0x6a, 0x50, 0x2a, 0xeb, 0x8e, 0xd7, 0xea, 0x84, 0x24, 0xa1, - 0x32, 0x68, 0x52, 0x59, 0x49, 0xc1, 0x71, 0x57, 0x0d, 0xba, 0xb6, 0x4e, 0x8a, 0xd7, 0x43, 0x65, - 0x90, 0xba, 0x60, 0x41, 0x9f, 0x86, 0x21, 0x19, 0x40, 0x50, 0x28, 0x97, 0x8a, 0x70, 0x4c, 0x50, - 0x2f, 0x91, 0x6a, 0xef, 0xc8, 0x89, 0xd0, 0x01, 0x49, 0xef, 0x30, 0xaf, 0x54, 0xfe, 0xb9, 0x05, - 0x27, 0x32, 0x1c, 0xe1, 0x38, 0x4b, 0xdb, 0xf0, 0xa2, 0x58, 0xbd, 0x62, 0xa1, 0xb1, 0x34, 0x5e, - 0x8e, 0x15, 0x06, 0xdd, 0x2d, 0x9c, 0x69, 0xa6, 0x19, 0xa5, 0x70, 0x31, 0x11, 0xd0, 0xfe, 0x18, - 0x25, 0x3a, 0x03, 0x95, 0x4e, 0x44, 0x42, 0xf9, 0xa0, 0xa3, 0xe4, 0xf3, 0xcc, 0xce, 0xc8, 0x20, - 0x54, 0x6c, 0xdd, 0x50, 0x26, 0x3e, 0x4d, 0x6c, 0xe5, 0x46, 0x3e, 0x0e, 0xb3, 0xbf, 0x5c, 0x86, - 0x89, 0x94, 0x43, 0x2c, 0xed, 0xc8, 0x56, 0xe0, 0x7b, 0x71, 0xa0, 0xf2, 0xdb, 0xf1, 0x37, 0xe4, - 0x48, 0x7b, 0xf3, 0x9a, 0x28, 0xc7, 0x0a, 0x03, 0x3d, 0x29, 0x5f, 0x09, 0x4e, 0xbf, 0xce, 0xb1, - 0x58, 0x33, 0x1e, 0x0a, 0x2e, 0xfa, 0xb2, 0xce, 0xe3, 0x50, 0x69, 0x07, 0xea, 0xd1, 0x77, 0x35, - 0x9f, 0x78, 0xb1, 0x56, 0x0f, 0x82, 0x16, 0x66, 0x40, 0xf4, 0x84, 0xf8, 0xfa, 0xd4, 0xcd, 0x08, - 0x76, 0xdc, 0x20, 0xd2, 0x86, 0xe0, 0x29, 0x18, 0xba, 0x4b, 0x76, 0x42, 0xcf, 0xdf, 0x48, 0xdf, - 0x0b, 0x5d, 0xe1, 0xc5, 0x58, 0xc2, 0xcd, 0x64, 0xf5, 0x43, 0x47, 0xfc, 0x7a, 0xce, 0x70, 0xee, - 0x39, 0xf8, 0x4d, 0x0b, 0x26, 0x58, 0xf6, 0x59, 0x91, 0x22, 0xc1, 0x0b, 0xfc, 0x63, 0x90, 0x31, - 0x1e, 0x87, 0x81, 0x90, 0x36, 0x9a, 0x7e, 0xfe, 0x82, 0xf5, 0x04, 0x73, 0x18, 0x7a, 0x04, 0x2a, - 0xac, 0x0b, 0x74, 0x1a, 0x47, 0x79, 0x92, 0xfb, 0x9a, 0x13, 0x3b, 0x98, 0x95, 0xb2, 0x18, 0x34, - 0x4c, 0xda, 0x2d, 0x8f, 0x77, 0x3a, 0x31, 0xe7, 0x7e, 0xd0, 0x62, 0xd0, 0x32, 0x3b, 0xf9, 0xa0, - 0x62, 0xd0, 0xb2, 0x89, 0x1f, 0x2c, 0xe7, 0xff, 0xf7, 0x12, 0x9c, 0xce, 0xac, 0x97, 0xdc, 0x30, - 0xaf, 0x18, 0x37, 0xcc, 0x17, 0x53, 0x37, 0xcc, 0xf6, 0xc1, 0xb5, 0x1f, 0xcc, 0x9d, 0x73, 0xf6, - 0x55, 0x70, 0xf9, 0x18, 0xaf, 0x82, 0x2b, 0x45, 0x45, 0x9c, 0x81, 0x1c, 0x11, 0xe7, 0x8f, 0x2c, - 0x78, 0x38, 0x73, 0xc8, 0x3e, 0x70, 0x41, 0x7f, 0x99, 0xbd, 0xec, 0xa1, 0x9d, 0xfc, 0x5a, 0xb9, - 0xc7, 0x57, 0x31, 0x3d, 0xe5, 0x2c, 0xe5, 0x42, 0x0c, 0x18, 0x09, 0xe1, 0x6d, 0x94, 0x73, 0x20, - 0x5e, 0x86, 0x15, 0x14, 0x45, 0x5a, 0xd0, 0x1c, 0xef, 0xe4, 0xf2, 0x21, 0x37, 0xd4, 0xbc, 0x69, - 0x87, 0xd7, 0xf3, 0x3e, 0xa4, 0x43, 0xe9, 0x6e, 0x6b, 0x9a, 0x67, 0xf9, 0x30, 0x9a, 0xe7, 0x68, - 0xb6, 0xd6, 0x89, 0x16, 0x60, 0x62, 0xcb, 0xf3, 0xd9, 0xa3, 0xbb, 0xa6, 0xf4, 0xa4, 0x22, 0x97, - 0xaf, 0x99, 0x60, 0x9c, 0xc6, 0x9f, 0x7d, 0x19, 0xc6, 0x0e, 0x6f, 0x5d, 0xfb, 0x51, 0x19, 0x3e, - 0x7c, 0x00, 0x53, 0xe0, 0xa7, 0x83, 0x31, 0x2f, 0xda, 0xe9, 0xd0, 0x35, 0x37, 0x75, 0x98, 0x5e, - 0xef, 0xb4, 0x5a, 0x3b, 0xcc, 0x3f, 0x8b, 0xb8, 0x12, 0x43, 0x08, 0x35, 0x2a, 0x19, 0xf5, 0x4a, - 0x06, 0x0e, 0xce, 0xac, 0x89, 0x7e, 0x1e, 0x50, 0x70, 0x87, 0xa5, 0x45, 0x76, 0x93, 0xbc, 0x16, - 0x6c, 0x0a, 0xca, 0xc9, 0x56, 0xbd, 0xd1, 0x85, 0x81, 0x33, 0x6a, 0x51, 0x39, 0x95, 0x9e, 0x63, - 0x3b, 0xaa, 0x5b, 0x29, 0x39, 0x15, 0xeb, 0x40, 0x6c, 0xe2, 0xa2, 0x4b, 0x30, 0xe5, 0x6c, 0x3b, - 0x1e, 0x4f, 0x73, 0x26, 0x09, 0x70, 0x41, 0x55, 0xd9, 0xaf, 0x16, 0xd2, 0x08, 0xb8, 0xbb, 0x0e, - 0x6a, 0x1b, 0x06, 0x49, 0xfe, 0x32, 0xc3, 0x27, 0x0f, 0xb1, 0x82, 0x0b, 0x9b, 0x28, 0xed, 0x3f, - 0xb5, 0xe8, 0xd1, 0x97, 0xf1, 0x3e, 0x2b, 0x1d, 0x11, 0x65, 0x60, 0xd3, 0x82, 0x00, 0xd5, 0x88, - 0x2c, 0xe9, 0x40, 0x6c, 0xe2, 0xf2, 0xa5, 0x11, 0x25, 0xee, 0xe2, 0x86, 0xb4, 0x29, 0xe2, 0x67, - 0x15, 0x06, 0x95, 0xa0, 0x5d, 0x6f, 0xdb, 0x8b, 0x82, 0x50, 0x6c, 0xa0, 0x7e, 0x5f, 0x41, 0x57, - 0xfc, 0xb2, 0xc6, 0xc9, 0x60, 0x49, 0xcf, 0xfe, 0x4a, 0x09, 0xc6, 0x64, 0x8b, 0xaf, 0x76, 0x82, - 0xd8, 0x39, 0x86, 0x23, 0xfd, 0x55, 0xe3, 0x48, 0x3f, 0x5f, 0x2c, 0x9c, 0x98, 0x75, 0xae, 0xe7, - 0x51, 0xfe, 0xe9, 0xd4, 0x51, 0x7e, 0xa1, 0x1f, 0xa2, 0x07, 0x1f, 0xe1, 0xff, 0xc6, 0x82, 0x29, - 0x03, 0xff, 0x18, 0x4e, 0x92, 0xba, 0x79, 0x92, 0x3c, 0xd3, 0xc7, 0xd7, 0xf4, 0x38, 0x41, 0xbe, - 0x5e, 0x4a, 0x7d, 0x05, 0x3b, 0x39, 0x7e, 0x01, 0x2a, 0x9b, 0x4e, 0xe8, 0x16, 0xcb, 0xf9, 0xd9, - 0x55, 0x7d, 0xfe, 0xb2, 0x13, 0xba, 0x9c, 0xff, 0x9f, 0x53, 0xaf, 0xc7, 0x39, 0xa1, 0x9b, 0x1b, - 0x45, 0xc1, 0x1a, 0x45, 0x2f, 0xc1, 0x60, 0xd4, 0x0c, 0xda, 0xca, 0xcf, 0xf4, 0x0c, 0x7f, 0x59, - 0x8e, 0x96, 0xec, 0xef, 0xce, 0x21, 0xb3, 0x39, 0x5a, 0x8c, 0x05, 0xfe, 0xec, 0x06, 0x54, 0x55, - 0xd3, 0x47, 0xea, 0x69, 0xff, 0x5f, 0xcb, 0x70, 0x22, 0x63, 0xad, 0xa0, 0x5f, 0x34, 0xc6, 0xed, - 0xe5, 0xbe, 0x17, 0xdb, 0xfb, 0x1c, 0xb9, 0x5f, 0x64, 0x9a, 0x92, 0x2b, 0x56, 0xc7, 0x21, 0x9a, - 0xbf, 0x19, 0x91, 0x74, 0xf3, 0xb4, 0x28, 0xbf, 0x79, 0xda, 0xec, 0xb1, 0x0d, 0x3f, 0x6d, 0x48, - 0xf5, 0xf4, 0x48, 0xe7, 0xf9, 0x0b, 0x15, 0x98, 0xce, 0xca, 0x5b, 0x80, 0x7e, 0xc5, 0x4a, 0xbd, - 0x30, 0xf2, 0x4a, 0xff, 0xc9, 0x0f, 0xf8, 0xb3, 0x23, 0x22, 0xab, 0xd0, 0xbc, 0xf9, 0xe6, 0x48, - 0xee, 0x88, 0x8b, 0xd6, 0x59, 0xfc, 0x53, 0xc8, 0x5f, 0x8b, 0x91, 0x5c, 0xe1, 0x53, 0x87, 0xe8, - 0x8a, 0x78, 0x70, 0x26, 0x4a, 0xc5, 0x3f, 0xc9, 0xe2, 0xfc, 0xf8, 0x27, 0xd9, 0x87, 0x59, 0x0f, - 0x46, 0xb4, 0xef, 0x3a, 0xd2, 0x65, 0x70, 0x97, 0x1e, 0x51, 0x5a, 0xbf, 0x8f, 0x74, 0x29, 0xfc, - 0x1d, 0x0b, 0x52, 0x4e, 0x61, 0xca, 0x2c, 0x63, 0xf5, 0x34, 0xcb, 0x9c, 0x81, 0x4a, 0x18, 0xb4, - 0x48, 0xfa, 0xd1, 0x09, 0x1c, 0xb4, 0x08, 0x66, 0x10, 0xf5, 0xa0, 0x74, 0xb9, 0xd7, 0x83, 0xd2, - 0x54, 0x4f, 0x6f, 0x91, 0x6d, 0x22, 0x8d, 0x24, 0x8a, 0x8d, 0x5f, 0xa5, 0x85, 0x98, 0xc3, 0xec, - 0xdf, 0xa9, 0xc0, 0x89, 0x8c, 0x58, 0x40, 0xaa, 0x21, 0x6d, 0x38, 0x31, 0xb9, 0xe7, 0xec, 0xa4, - 0x93, 0xdf, 0x5e, 0xe2, 0xc5, 0x58, 0xc2, 0x99, 0x33, 0x2b, 0x4f, 0xa0, 0x97, 0x32, 0x5d, 0x89, - 0xbc, 0x79, 0x02, 0x7a, 0xf4, 0x4f, 0x0f, 0x5f, 0x04, 0x88, 0xa2, 0xd6, 0xb2, 0x4f, 0x25, 0x3c, - 0x57, 0x38, 0xcd, 0x26, 0x79, 0x17, 0x1b, 0x57, 0x05, 0x04, 0x6b, 0x58, 0xa8, 0x06, 0x93, 0xed, - 0x30, 0x88, 0xb9, 0x61, 0xb0, 0xc6, 0x1d, 0x2d, 0x06, 0xcc, 0x68, 0xad, 0x7a, 0x0a, 0x8e, 0xbb, - 0x6a, 0xa0, 0x17, 0x60, 0x44, 0x44, 0x70, 0xd5, 0x83, 0xa0, 0x25, 0xcc, 0x48, 0xea, 0x3a, 0xbe, - 0x91, 0x80, 0xb0, 0x8e, 0xa7, 0x55, 0x63, 0xd6, 0xc6, 0xa1, 0xcc, 0x6a, 0xdc, 0xe2, 0xa8, 0xe1, - 0xa5, 0xb2, 0x9b, 0x0c, 0x17, 0xca, 0x6e, 0x92, 0x18, 0xd6, 0xaa, 0x85, 0x2f, 0x62, 0x20, 0xd7, - 0x00, 0xf5, 0x87, 0x65, 0x18, 0xe4, 0x53, 0x71, 0x0c, 0x52, 0x5e, 0x5d, 0x98, 0x94, 0x0a, 0x65, - 0x92, 0xe0, 0xbd, 0x9a, 0xaf, 0x39, 0xb1, 0xc3, 0x59, 0x93, 0xda, 0x21, 0x89, 0x19, 0x0a, 0xcd, - 0x1b, 0x7b, 0x68, 0x36, 0x65, 0x29, 0x01, 0x4e, 0x43, 0xdb, 0x51, 0x9b, 0x00, 0x11, 0x7b, 0xfe, - 0x96, 0xd2, 0x10, 0x99, 0x79, 0x9f, 0x2f, 0xd4, 0x8f, 0x86, 0xaa, 0xc6, 0x7b, 0x93, 0x2c, 0x4b, - 0x05, 0xc0, 0x1a, 0xed, 0xd9, 0x17, 0xa1, 0xaa, 0x90, 0xf3, 0x54, 0xc8, 0x51, 0x9d, 0xb5, 0xfd, - 0x2c, 0x4c, 0xa4, 0xda, 0xea, 0x4b, 0x03, 0xfd, 0x3d, 0x0b, 0x26, 0x78, 0x97, 0x97, 0xfd, 0x6d, - 0xc1, 0x0a, 0x3e, 0x67, 0xc1, 0x74, 0x2b, 0x63, 0x27, 0x8a, 0x69, 0x3e, 0xcc, 0x1e, 0x56, 0xca, - 0x67, 0x16, 0x14, 0x67, 0xb6, 0x86, 0xce, 0xc2, 0x30, 0x7f, 0xcd, 0xdb, 0x69, 0x09, 0x0f, 0xed, - 0x51, 0x9e, 0x93, 0x9c, 0x97, 0x61, 0x05, 0xb5, 0x7f, 0x6c, 0xc1, 0x14, 0xff, 0x88, 0x2b, 0x64, - 0x47, 0xa9, 0x57, 0x1f, 0x90, 0xcf, 0x10, 0xd9, 0xd7, 0x4b, 0x3d, 0xb2, 0xaf, 0xeb, 0x5f, 0x59, - 0x3e, 0xf0, 0x2b, 0xbf, 0x61, 0x81, 0x58, 0xa1, 0xc7, 0xa0, 0x3f, 0xac, 0x9a, 0xfa, 0xc3, 0x47, - 0x8a, 0x2c, 0xfa, 0x1e, 0x8a, 0xc3, 0xaf, 0x96, 0x60, 0x92, 0x23, 0x24, 0x37, 0x32, 0x1f, 0x94, - 0xc9, 0xe9, 0xef, 0x55, 0x20, 0xf5, 0x26, 0x6c, 0xf6, 0x97, 0x1a, 0x73, 0x59, 0x39, 0x70, 0x2e, - 0xff, 0xa7, 0x05, 0x88, 0x8f, 0x49, 0xfa, 0x29, 0x74, 0x7e, 0xba, 0x69, 0xe6, 0x80, 0x84, 0x73, - 0x28, 0x08, 0xd6, 0xb0, 0x1e, 0xf0, 0x27, 0xa4, 0xee, 0xc3, 0xca, 0xf9, 0xf7, 0x61, 0x7d, 0x7c, - 0xf5, 0x77, 0xcb, 0x90, 0x76, 0xd5, 0x44, 0x6f, 0xc3, 0x68, 0xd3, 0x69, 0x3b, 0x77, 0xbc, 0x96, - 0x17, 0x7b, 0x24, 0x2a, 0x76, 0xe1, 0xbe, 0xa4, 0xd5, 0x10, 0xd7, 0x50, 0x5a, 0x09, 0x36, 0x28, - 0xa2, 0x79, 0x80, 0x76, 0xe8, 0x6d, 0x7b, 0x2d, 0xb2, 0xc1, 0x34, 0x1e, 0x16, 0xeb, 0xc1, 0xef, - 0x8e, 0x65, 0x29, 0xd6, 0x30, 0x32, 0x62, 0x03, 0xca, 0xc7, 0x11, 0x1b, 0x50, 0xe9, 0x33, 0x36, - 0x60, 0xa0, 0x50, 0x6c, 0x00, 0x86, 0x53, 0xf2, 0xf0, 0xa6, 0xff, 0x57, 0xbc, 0x16, 0x11, 0xb2, - 0x1b, 0x8f, 0x05, 0x99, 0xdd, 0xdb, 0x9d, 0x3b, 0x85, 0x33, 0x31, 0x70, 0x8f, 0x9a, 0x76, 0x07, - 0x4e, 0x34, 0x48, 0x28, 0x9f, 0xb1, 0x53, 0x7b, 0xe9, 0x4d, 0xa8, 0x86, 0xa9, 0x6d, 0xdc, 0x67, - 0xc0, 0xbf, 0x96, 0xe3, 0x4d, 0x6e, 0xdb, 0x84, 0xa4, 0xfd, 0xd7, 0x4b, 0x30, 0x24, 0x9c, 0x34, - 0x8f, 0x41, 0xf8, 0xb8, 0x62, 0x98, 0x98, 0x9e, 0xca, 0xe3, 0x7f, 0xac, 0x5b, 0x3d, 0x8d, 0x4b, - 0x8d, 0x94, 0x71, 0xe9, 0x99, 0x62, 0xe4, 0x0e, 0x36, 0x2b, 0xfd, 0x93, 0x32, 0x8c, 0x9b, 0x4e, - 0xab, 0xc7, 0x30, 0x2c, 0xaf, 0xc1, 0x50, 0x24, 0xfc, 0xa7, 0x4b, 0x45, 0x7c, 0xf6, 0xd2, 0x53, - 0x9c, 0xdc, 0xc4, 0x0b, 0x8f, 0x69, 0x49, 0x2e, 0xd3, 0x45, 0xbb, 0x7c, 0x2c, 0x2e, 0xda, 0x79, - 0xbe, 0xc4, 0x95, 0x07, 0xe1, 0x4b, 0x6c, 0x7f, 0x8f, 0xb1, 0x7c, 0xbd, 0xfc, 0x18, 0x8e, 0xf1, - 0x57, 0xcd, 0xc3, 0xe1, 0x5c, 0xa1, 0x75, 0x27, 0xba, 0xd7, 0xe3, 0x38, 0xff, 0x96, 0x05, 0x23, - 0x02, 0xf1, 0x18, 0x3e, 0xe0, 0xe7, 0xcd, 0x0f, 0x78, 0xa2, 0xd0, 0x07, 0xf4, 0xe8, 0xf9, 0x57, - 0x4a, 0xaa, 0xe7, 0xf5, 0x20, 0x8c, 0x0b, 0x65, 0x42, 0x1f, 0xa6, 0xaa, 0x5f, 0xd0, 0x0c, 0x5a, - 0x42, 0x80, 0x7b, 0x24, 0x09, 0xfd, 0xe3, 0xe5, 0xfb, 0xda, 0x6f, 0xac, 0xb0, 0x59, 0x64, 0x5a, - 0x10, 0xc6, 0xe2, 0x00, 0x4d, 0x22, 0xd3, 0x82, 0x30, 0xc6, 0x0c, 0x82, 0x5c, 0x80, 0xd8, 0x09, - 0x37, 0x48, 0x4c, 0xcb, 0x44, 0xd4, 0x6c, 0xef, 0xdd, 0xda, 0x89, 0xbd, 0xd6, 0xbc, 0xe7, 0xc7, - 0x51, 0x1c, 0xce, 0xaf, 0xfa, 0xf1, 0x8d, 0x90, 0x0b, 0xfd, 0x5a, 0x2c, 0x9f, 0xa2, 0x85, 0x35, - 0xba, 0x32, 0x48, 0x84, 0xb5, 0x31, 0x60, 0xde, 0x20, 0x5d, 0x17, 0xe5, 0x58, 0x61, 0xd8, 0x2f, - 0x32, 0xce, 0xce, 0x06, 0xa8, 0xbf, 0x30, 0xbb, 0x2f, 0x0c, 0xa9, 0xa1, 0x65, 0x66, 0xe1, 0xeb, - 0x7a, 0x30, 0x5f, 0x51, 0xf6, 0x49, 0xbb, 0xa0, 0xfb, 0x51, 0x27, 0xb1, 0x7f, 0x88, 0x74, 0x5d, - 0x3b, 0xbe, 0x58, 0x98, 0x23, 0xf7, 0x71, 0xd1, 0xc8, 0x52, 0x32, 0xb2, 0x3c, 0x74, 0xab, 0xf5, - 0x74, 0xfe, 0xfa, 0x25, 0x09, 0xc0, 0x09, 0x0e, 0x3a, 0x2f, 0x14, 0x4a, 0x6e, 0x71, 0xf9, 0x70, - 0x4a, 0xa1, 0x94, 0x43, 0xa2, 0x69, 0x94, 0x17, 0x60, 0x44, 0x3d, 0x09, 0x54, 0xe7, 0x8f, 0xb1, - 0x54, 0xb9, 0x7c, 0xb5, 0x9c, 0x14, 0x63, 0x1d, 0x07, 0xad, 0xc1, 0x44, 0xc4, 0xdf, 0x2b, 0x92, - 0xd1, 0x1a, 0xc2, 0x70, 0xf0, 0xb4, 0xbc, 0xa4, 0x6c, 0x98, 0xe0, 0x7d, 0x56, 0xc4, 0xb7, 0xb2, - 0x8c, 0xef, 0x48, 0x93, 0x40, 0xaf, 0xc0, 0x78, 0x4b, 0x7f, 0xc3, 0xb5, 0x2e, 0xec, 0x0a, 0xca, - 0xed, 0xcc, 0x78, 0xe1, 0xb5, 0x8e, 0x53, 0xd8, 0xe8, 0x35, 0x98, 0xd1, 0x4b, 0x44, 0x72, 0x21, - 0xc7, 0xdf, 0x20, 0x91, 0x78, 0xdb, 0xe4, 0x91, 0xbd, 0xdd, 0xb9, 0x99, 0xab, 0x3d, 0x70, 0x70, - 0xcf, 0xda, 0xe8, 0x25, 0x18, 0x95, 0x9f, 0xaf, 0xc5, 0x36, 0x25, 0x0e, 0x8f, 0x1a, 0x0c, 0x1b, - 0x98, 0xe8, 0x1e, 0x9c, 0x94, 0xff, 0xd7, 0x42, 0x67, 0x7d, 0xdd, 0x6b, 0x8a, 0x20, 0xb3, 0x11, - 0x46, 0x62, 0x41, 0xfa, 0x8b, 0x2f, 0x67, 0x21, 0xed, 0xef, 0xce, 0x9d, 0x11, 0xa3, 0x96, 0x09, - 0x67, 0x93, 0x98, 0x4d, 0x1f, 0x5d, 0x83, 0x13, 0x9b, 0xc4, 0x69, 0xc5, 0x9b, 0x4b, 0x9b, 0xa4, - 0x79, 0x57, 0x6e, 0x2c, 0x16, 0x31, 0xa5, 0xb9, 0x04, 0x5e, 0xee, 0x46, 0xc1, 0x59, 0xf5, 0xde, - 0xdf, 0x9d, 0xf2, 0x2f, 0xd0, 0xca, 0x9a, 0xfc, 0x80, 0xde, 0x81, 0x51, 0x7d, 0xac, 0xd3, 0x82, - 0x41, 0xfe, 0xfb, 0xbe, 0x42, 0x0e, 0x51, 0x33, 0xa0, 0xc3, 0xb0, 0x41, 0xdb, 0xfe, 0x77, 0x25, - 0x98, 0xcb, 0xc9, 0xdd, 0x95, 0xb2, 0x66, 0x59, 0x85, 0xac, 0x59, 0x0b, 0xf2, 0xcd, 0x9b, 0xeb, - 0xa9, 0x9c, 0xe9, 0xa9, 0x57, 0x6c, 0x92, 0xcc, 0xe9, 0x69, 0xfc, 0xc2, 0x9e, 0x66, 0xba, 0x41, - 0xac, 0x92, 0xeb, 0x70, 0xf7, 0xba, 0x6e, 0xe3, 0x1c, 0x38, 0x8c, 0xd0, 0xdb, 0xd3, 0xbc, 0x69, - 0x7f, 0xaf, 0x04, 0x27, 0xd5, 0x60, 0xfe, 0xf4, 0x0e, 0xe1, 0x5b, 0xdd, 0x43, 0xf8, 0x40, 0xcd, - 0xc4, 0xf6, 0x0d, 0x18, 0x6c, 0xec, 0x44, 0xcd, 0xb8, 0x55, 0xe0, 0xc4, 0x7f, 0xdc, 0xd8, 0x57, - 0xc9, 0x69, 0xc4, 0x5e, 0xb2, 0x13, 0xdb, 0xcc, 0xfe, 0xbc, 0x05, 0x13, 0x6b, 0x4b, 0xf5, 0x46, - 0xd0, 0xbc, 0x4b, 0xe2, 0x05, 0x6e, 0xd0, 0xc0, 0xe2, 0xc0, 0xb7, 0x0e, 0x79, 0x90, 0x67, 0x89, - 0x08, 0x67, 0xa0, 0xb2, 0x19, 0x44, 0x71, 0xfa, 0x52, 0xe0, 0x72, 0x10, 0xc5, 0x98, 0x41, 0xec, - 0x3f, 0xb3, 0x60, 0x80, 0x3d, 0xd4, 0x96, 0xf7, 0xc8, 0x5f, 0x91, 0xef, 0x42, 0x2f, 0xc0, 0x20, - 0x59, 0x5f, 0x27, 0xcd, 0x58, 0xcc, 0xaf, 0x0c, 0xb0, 0x19, 0x5c, 0x66, 0xa5, 0xf4, 0x44, 0x63, - 0x8d, 0xf1, 0xbf, 0x58, 0x20, 0xa3, 0xcf, 0x40, 0x35, 0xf6, 0xb6, 0xc8, 0x82, 0xeb, 0x0a, 0x2b, - 0x7c, 0x7f, 0x3e, 0x5f, 0xea, 0x84, 0x5d, 0x93, 0x44, 0x70, 0x42, 0xcf, 0xfe, 0x52, 0x09, 0x20, - 0x09, 0x9f, 0xcb, 0xfb, 0xcc, 0xc5, 0xae, 0xb7, 0x0c, 0x9f, 0xcc, 0x78, 0xcb, 0x10, 0x25, 0x04, - 0x33, 0x5e, 0x32, 0x54, 0x43, 0x55, 0x2e, 0x34, 0x54, 0x95, 0x7e, 0x86, 0x6a, 0x09, 0xa6, 0x92, - 0xf0, 0x3f, 0x33, 0x8e, 0x9a, 0xe5, 0x1b, 0x5e, 0x4b, 0x03, 0x71, 0x37, 0xbe, 0xfd, 0x25, 0x0b, - 0x84, 0x97, 0x70, 0x81, 0x05, 0xed, 0xca, 0x77, 0xc7, 0x8c, 0xd4, 0x82, 0x4f, 0x17, 0x71, 0xa0, - 0x16, 0x09, 0x05, 0x15, 0xdf, 0x37, 0xd2, 0x08, 0x1a, 0x54, 0xed, 0xdf, 0xb6, 0x60, 0x84, 0x83, - 0xaf, 0x31, 0x45, 0x34, 0xbf, 0x5f, 0x7d, 0x25, 0xb3, 0x66, 0x4f, 0x72, 0x51, 0xc2, 0x2a, 0xa9, - 0xb1, 0xfe, 0x24, 0x97, 0x04, 0xe0, 0x04, 0x07, 0x3d, 0x05, 0x43, 0x51, 0xe7, 0x0e, 0x43, 0x4f, - 0xb9, 0x0c, 0x37, 0x78, 0x31, 0x96, 0x70, 0xfb, 0x9f, 0x95, 0x60, 0x32, 0xed, 0x31, 0x8e, 0x30, - 0x0c, 0x72, 0x06, 0x92, 0xd6, 0x69, 0x0e, 0x32, 0x80, 0x6a, 0x1e, 0xe7, 0xc0, 0x1f, 0x96, 0x67, - 0x2c, 0x48, 0x50, 0x42, 0xeb, 0x30, 0xe2, 0x06, 0xf7, 0xfc, 0x7b, 0x4e, 0xe8, 0x2e, 0xd4, 0x57, - 0xc5, 0x4c, 0xe4, 0xf8, 0xf8, 0xd5, 0x92, 0x0a, 0xba, 0x3f, 0x3b, 0x33, 0xc8, 0x25, 0x20, 0xac, - 0x13, 0x46, 0x6f, 0xb2, 0x4c, 0x28, 0xeb, 0xde, 0xc6, 0x35, 0xa7, 0x5d, 0xcc, 0x9b, 0x65, 0x49, - 0xa2, 0x6b, 0x6d, 0x8c, 0x89, 0xc4, 0x29, 0x1c, 0x80, 0x13, 0x92, 0xf6, 0xaf, 0x9e, 0x04, 0x63, - 0x2d, 0x18, 0x19, 0xa7, 0xad, 0x07, 0x9e, 0x71, 0xfa, 0x0d, 0x18, 0x26, 0x5b, 0xed, 0x78, 0xa7, - 0xe6, 0x85, 0xc5, 0xde, 0x0f, 0x58, 0x16, 0xd8, 0xdd, 0xd4, 0x25, 0x04, 0x2b, 0x8a, 0x3d, 0xf2, - 0x87, 0x97, 0x3f, 0x10, 0xf9, 0xc3, 0x2b, 0x7f, 0x29, 0xf9, 0xc3, 0x5f, 0x83, 0xa1, 0x0d, 0x2f, - 0xc6, 0xa4, 0x1d, 0x88, 0xd3, 0x38, 0x67, 0xf1, 0x5c, 0xe2, 0xc8, 0xdd, 0x99, 0x65, 0x05, 0x00, - 0x4b, 0x72, 0x68, 0x4d, 0x6d, 0xaa, 0xc1, 0x22, 0x32, 0x68, 0xb7, 0x81, 0x3c, 0x73, 0x5b, 0x89, - 0x7c, 0xe1, 0x43, 0xef, 0x3f, 0x5f, 0xb8, 0xca, 0xf2, 0x3d, 0xfc, 0xa0, 0xb2, 0x7c, 0x1b, 0xd9, - 0xd2, 0xab, 0x47, 0x91, 0x2d, 0xfd, 0x4b, 0x16, 0x9c, 0x6c, 0x67, 0xbd, 0x35, 0x20, 0xf2, 0x75, - 0xff, 0xdc, 0x21, 0x5e, 0x5f, 0x30, 0x9a, 0x66, 0xf9, 0x3d, 0x32, 0xd1, 0x70, 0x76, 0xc3, 0x32, - 0xed, 0xfa, 0xc8, 0xfb, 0x4f, 0xbb, 0x7e, 0xd4, 0x89, 0xbd, 0x93, 0x24, 0xec, 0x63, 0x47, 0x92, - 0x84, 0x7d, 0xfc, 0x01, 0x26, 0x61, 0xd7, 0xd2, 0xa7, 0x4f, 0x3c, 0xd8, 0xf4, 0xe9, 0x9b, 0xe6, - 0xb9, 0xc4, 0xb3, 0x75, 0xbf, 0x50, 0xf8, 0x5c, 0x32, 0x5a, 0x38, 0xf8, 0x64, 0xe2, 0x89, 0xe4, - 0xa7, 0xde, 0x67, 0x22, 0x79, 0x23, 0x1d, 0x3b, 0x3a, 0x8a, 0x74, 0xec, 0x6f, 0xeb, 0x27, 0xe8, - 0x89, 0x22, 0x2d, 0xa8, 0x83, 0xb2, 0xbb, 0x85, 0xac, 0x33, 0xb4, 0x3b, 0xe1, 0xfb, 0xf4, 0x71, - 0x27, 0x7c, 0x3f, 0x79, 0x84, 0x09, 0xdf, 0x4f, 0x1d, 0x6b, 0xc2, 0xf7, 0x87, 0x3e, 0x20, 0x09, - 0xdf, 0x67, 0x8e, 0x2b, 0xe1, 0xfb, 0xc3, 0x0f, 0x36, 0xe1, 0xfb, 0xdb, 0x50, 0x6d, 0xcb, 0xb8, - 0xcb, 0x99, 0xd9, 0x22, 0x53, 0x97, 0x19, 0xa6, 0xc9, 0xa7, 0x4e, 0x81, 0x70, 0x42, 0x94, 0xb6, - 0x90, 0x24, 0x80, 0xff, 0x70, 0x91, 0x16, 0x32, 0xed, 0x1e, 0x07, 0xa4, 0x7d, 0xff, 0x42, 0x09, - 0x4e, 0x1f, 0xbc, 0x3b, 0x12, 0xa3, 0x49, 0x3d, 0xb1, 0x65, 0xa7, 0x8c, 0x26, 0x4c, 0xf2, 0xd4, - 0xb0, 0x0a, 0x87, 0xb3, 0x5f, 0x82, 0x29, 0xe5, 0xe7, 0xd5, 0xf2, 0x9a, 0x3b, 0xda, 0x33, 0x54, - 0x2a, 0x3e, 0xa1, 0x91, 0x46, 0xc0, 0xdd, 0x75, 0xd0, 0x02, 0x4c, 0x18, 0x85, 0xab, 0x35, 0xa1, - 0xbf, 0x28, 0x2b, 0x4d, 0xc3, 0x04, 0xe3, 0x34, 0xbe, 0xfd, 0x75, 0x0b, 0x1e, 0xea, 0x91, 0xe1, - 0xb5, 0x70, 0x8c, 0x76, 0x1b, 0x26, 0xda, 0x66, 0xd5, 0xc2, 0x29, 0x1f, 0x8c, 0x8c, 0xb2, 0xaa, - 0xd7, 0x29, 0x00, 0x4e, 0x93, 0x5f, 0x3c, 0xfb, 0xfd, 0x1f, 0x9d, 0xfe, 0xd0, 0x0f, 0x7e, 0x74, - 0xfa, 0x43, 0x3f, 0xfc, 0xd1, 0xe9, 0x0f, 0xfd, 0xd2, 0xde, 0x69, 0xeb, 0xfb, 0x7b, 0xa7, 0xad, - 0x1f, 0xec, 0x9d, 0xb6, 0x7e, 0xb8, 0x77, 0xda, 0xfa, 0xf3, 0xbd, 0xd3, 0xd6, 0x97, 0x7e, 0x7c, - 0xfa, 0x43, 0xaf, 0x97, 0xb6, 0x2f, 0xfc, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x06, 0xe5, 0xd7, - 0x49, 0x99, 0xd0, 0x00, 0x00, + 0x1a, 0x0c, 0xad, 0xf3, 0xa8, 0x5a, 0x91, 0xc8, 0xf7, 0x42, 0x5e, 0xe8, 0x6f, 0x57, 0x08, 0x2e, + 0x0f, 0x49, 0x11, 0x08, 0x2c, 0xd9, 0xb1, 0x1c, 0x87, 0x2a, 0x4e, 0x58, 0x64, 0xf2, 0x9d, 0xef, + 0x2f, 0xae, 0x58, 0x9c, 0x7e, 0x15, 0x14, 0x6b, 0x1c, 0xe9, 0x9c, 0x77, 0xe4, 0x1b, 0x39, 0x2c, + 0x8b, 0x6f, 0xee, 0x9c, 0xcf, 0x7c, 0x52, 0x87, 0xcf, 0x79, 0x85, 0xc2, 0x09, 0x53, 0xd4, 0x81, + 0xb1, 0xed, 0xa8, 0xbd, 0x49, 0xe4, 0xd2, 0x67, 0xa9, 0x7d, 0x47, 0x2e, 0x7e, 0x32, 0x27, 0x5f, + 0xb3, 0x28, 0xe2, 0x85, 0x71, 0xc7, 0x69, 0x75, 0x49, 0x30, 0x96, 0x54, 0xee, 0x96, 0xce, 0x16, + 0x9b, 0xb5, 0xd0, 0x21, 0x79, 0xb7, 0x13, 0xdc, 0xd9, 0x89, 0x89, 0x48, 0xfd, 0x9b, 0x33, 0x24, + 0xaf, 0x72, 0xe2, 0xee, 0x21, 0x11, 0x08, 0x2c, 0xd9, 0xa9, 0x2e, 0x63, 0xd2, 0x78, 0xb2, 0x70, + 0x97, 0x75, 0x7d, 0x43, 0xd2, 0x65, 0x4c, 0xfa, 0x26, 0x4c, 0x99, 0xd4, 0x6d, 0x6f, 0x06, 0x71, + 0xe0, 0xa7, 0x64, 0xff, 0x54, 0x11, 0xa9, 0x5b, 0xcf, 0x28, 0xd9, 0x2d, 0x75, 0xb3, 0xa8, 0x70, + 0x66, 0xad, 0xc8, 0x87, 0xf1, 0x76, 0x10, 0xc6, 0xf7, 0x82, 0x50, 0xce, 0x43, 0x54, 0xe8, 0x8c, + 0x68, 0x94, 0x11, 0x75, 0x33, 0xcf, 0x63, 0x13, 0x83, 0x53, 0xdc, 0xe9, 0xd0, 0x45, 0x4d, 0xa7, + 0x45, 0x56, 0x6f, 0xcc, 0x9c, 0x28, 0x32, 0x74, 0x0d, 0x4e, 0xdc, 0x3d, 0x74, 0x02, 0x81, 0x25, + 0x3b, 0x2a, 0xeb, 0x58, 0x1e, 0x7b, 0x96, 0xc9, 0x38, 0x57, 0xd6, 0x75, 0x79, 0xe7, 0x72, 0x59, + 0xc7, 0xc0, 0x98, 0x33, 0x42, 0xef, 0x40, 0x55, 0x28, 0xb7, 0x41, 0x34, 0x73, 0x92, 0x71, 0xfd, + 0xd9, 0x9c, 0xd6, 0x72, 0xf2, 0x1b, 0x8d, 0xec, 0x5d, 0x5f, 0x44, 0xff, 0x49, 0x22, 0x9c, 0xb0, + 0xb7, 0x7f, 0x63, 0xb0, 0x5b, 0xed, 0x61, 0x07, 0x9b, 0xbf, 0xd1, 0x7d, 0x63, 0xfd, 0xa9, 0xfe, + 0xcf, 0xef, 0x0f, 0xf0, 0xee, 0xfa, 0x8b, 0x16, 0x9c, 0x6a, 0x67, 0x7e, 0x9e, 0x50, 0x1c, 0xfa, + 0x35, 0x03, 0xf0, 0xae, 0x51, 0xf9, 0xc5, 0xb3, 0xf1, 0xb8, 0x47, 0x9d, 0xe9, 0xa3, 0x40, 0xf9, + 0x7d, 0x1f, 0x05, 0x6e, 0xc3, 0x30, 0xd3, 0x5d, 0x93, 0xfc, 0x3e, 0x7d, 0xa6, 0xc2, 0x61, 0x2a, + 0xc8, 0x92, 0x60, 0x81, 0x15, 0x33, 0xda, 0x71, 0x8f, 0xa6, 0x3f, 0x02, 0x13, 0x86, 0x16, 0x59, + 0x2d, 0xf9, 0x39, 0x6b, 0x45, 0xf4, 0xc4, 0xa3, 0xf5, 0x83, 0x88, 0xf7, 0xf3, 0x08, 0xf0, 0xc1, + 0x95, 0xa1, 0x5a, 0xc6, 0x41, 0x6f, 0xd0, 0xbc, 0x9e, 0xca, 0x3f, 0xec, 0x1d, 0xef, 0x01, 0xe5, + 0x1f, 0x5a, 0x19, 0xfa, 0x34, 0x3f, 0x54, 0x7e, 0xd2, 0x3c, 0x54, 0x3e, 0x99, 0x3e, 0x54, 0x76, + 0x99, 0x92, 0x8c, 0xf3, 0x64, 0xf1, 0xac, 0xbc, 0x45, 0x13, 0x18, 0xd9, 0x2d, 0x38, 0x93, 0x27, + 0xac, 0x99, 0xcb, 0x9a, 0xab, 0x2e, 0x6b, 0x13, 0x97, 0x35, 0x77, 0xb5, 0x86, 0x19, 0xa6, 0x68, + 0x0e, 0x0c, 0xfb, 0x97, 0x4b, 0x50, 0xae, 0x07, 0xee, 0x31, 0x98, 0xc6, 0x2e, 0x19, 0xa6, 0xb1, + 0x27, 0x72, 0x1f, 0x89, 0xec, 0x69, 0x08, 0xbb, 0x91, 0x32, 0x84, 0xfd, 0x4c, 0x3e, 0xab, 0x83, + 0xcd, 0x5e, 0xdf, 0x2e, 0x83, 0xfe, 0xcc, 0x25, 0xfa, 0x0f, 0x87, 0xf1, 0x64, 0x2e, 0x17, 0x7b, + 0xf9, 0x52, 0xd4, 0xc1, 0x3c, 0xde, 0x64, 0x20, 0xe6, 0x4f, 0xac, 0x43, 0xf3, 0x6d, 0xe2, 0x6d, + 0x6c, 0xc6, 0xc4, 0x4d, 0x7f, 0xd8, 0xf1, 0x39, 0x34, 0xff, 0x85, 0x05, 0x13, 0xa9, 0xda, 0x51, + 0x2b, 0x2b, 0x82, 0xeb, 0x90, 0xc6, 0xae, 0xa9, 0xdc, 0x90, 0xaf, 0x79, 0x00, 0x75, 0x67, 0x21, + 0x0d, 0x4a, 0x4c, 0xb7, 0x56, 0x97, 0x1a, 0x11, 0xd6, 0x28, 0xd0, 0x0b, 0x30, 0x12, 0x07, 0xed, + 0xa0, 0x15, 0x6c, 0xec, 0x5c, 0x21, 0x32, 0x3b, 0x8b, 0xba, 0x59, 0x5a, 0x4b, 0x50, 0x58, 0xa7, + 0xb3, 0xbf, 0x53, 0x86, 0xf4, 0x23, 0xa9, 0xff, 0x7f, 0x9e, 0xfe, 0xe4, 0xcc, 0xd3, 0x3f, 0xb6, + 0x60, 0x92, 0xd6, 0xce, 0x5c, 0x8c, 0xa4, 0xe3, 0xb1, 0x7a, 0x22, 0xc4, 0x3a, 0xe0, 0x89, 0x90, + 0x27, 0xa9, 0xb4, 0x73, 0x83, 0x4e, 0x2c, 0x4c, 0x60, 0x9a, 0x10, 0xa3, 0x50, 0x2c, 0xb0, 0x82, + 0x8e, 0x84, 0xa1, 0x88, 0xd0, 0xd2, 0xe9, 0x48, 0x18, 0x62, 0x81, 0x95, 0x2f, 0x88, 0x54, 0x7a, + 0xbc, 0x20, 0xc2, 0xf2, 0x9b, 0x09, 0xb7, 0x16, 0xa1, 0x56, 0x68, 0xf9, 0xcd, 0xa4, 0xbf, 0x4b, + 0x42, 0x63, 0x7f, 0xbd, 0x0c, 0xa3, 0xf5, 0xc0, 0x4d, 0x22, 0x0a, 0x9e, 0x37, 0x22, 0x0a, 0xce, + 0xa4, 0x22, 0x0a, 0x26, 0x75, 0xda, 0x07, 0x13, 0x50, 0x20, 0xf2, 0xe0, 0xb1, 0x37, 0x6e, 0x0e, + 0x19, 0x4c, 0x60, 0xe4, 0xc1, 0x53, 0x8c, 0xb0, 0xc9, 0xf7, 0xa7, 0x29, 0x88, 0xe0, 0x7f, 0x5b, + 0x30, 0x5e, 0x0f, 0x5c, 0x3a, 0x41, 0x7f, 0x9a, 0x66, 0xa3, 0x9e, 0x3d, 0x6f, 0xf0, 0x80, 0xec, + 0x79, 0xff, 0xcc, 0x82, 0xa1, 0x7a, 0xe0, 0x1e, 0x83, 0x79, 0x78, 0xc5, 0x34, 0x0f, 0x3f, 0x96, + 0x2b, 0x79, 0x7b, 0x58, 0x84, 0xbf, 0x59, 0x86, 0x31, 0xda, 0xe2, 0x60, 0x43, 0x8e, 0x97, 0xd1, + 0x37, 0x56, 0x81, 0xbe, 0xa1, 0x2a, 0x61, 0xd0, 0x6a, 0x05, 0xf7, 0xd2, 0x63, 0xb7, 0xc2, 0xa0, + 0x58, 0x60, 0xd1, 0x39, 0x18, 0x6e, 0x87, 0x64, 0xdb, 0x0b, 0x3a, 0x51, 0x3a, 0xda, 0xb3, 0x2e, + 0xe0, 0x58, 0x51, 0xa0, 0xe7, 0x61, 0x34, 0xf2, 0xfc, 0x26, 0x91, 0x4e, 0x2f, 0x15, 0xe6, 0xf4, + 0xc2, 0x13, 0x95, 0x6a, 0x70, 0x6c, 0x50, 0xa1, 0xdb, 0x50, 0x65, 0xff, 0xd9, 0x0a, 0xea, 0xff, + 0x09, 0x10, 0x91, 0x9f, 0x5c, 0x30, 0xc0, 0x09, 0x2f, 0x74, 0x11, 0x20, 0x96, 0xee, 0x39, 0x91, + 0x08, 0x4b, 0x56, 0x7a, 0xa9, 0x72, 0xdc, 0x89, 0xb0, 0x46, 0x85, 0x9e, 0x81, 0x6a, 0xec, 0x78, + 0xad, 0xab, 0x9e, 0x4f, 0x22, 0xe1, 0xde, 0x24, 0x92, 0x8e, 0x0b, 0x20, 0x4e, 0xf0, 0x74, 0xbf, + 0x67, 0x41, 0xef, 0xfc, 0x79, 0xa1, 0x61, 0x46, 0xcd, 0xf6, 0xfb, 0xab, 0x0a, 0x8a, 0x35, 0x0a, + 0xfb, 0x25, 0x38, 0x59, 0x0f, 0xdc, 0x7a, 0x10, 0xc6, 0x2b, 0x41, 0x78, 0xcf, 0x09, 0x5d, 0x39, + 0x7e, 0x73, 0x32, 0xd7, 0x35, 0xdd, 0x93, 0x07, 0xb8, 0x15, 0xc1, 0xc8, 0x5d, 0xfd, 0x1c, 0xdb, + 0xf1, 0xfb, 0x0c, 0x55, 0xf9, 0x41, 0x09, 0x50, 0x9d, 0x39, 0x10, 0x19, 0xaf, 0x51, 0x6d, 0xc2, + 0x78, 0x44, 0xae, 0x7a, 0x7e, 0xe7, 0xbe, 0x60, 0x55, 0x2c, 0x36, 0xa8, 0xb1, 0xac, 0x97, 0xe1, + 0x76, 0x1a, 0x13, 0x86, 0x53, 0x7c, 0x69, 0x67, 0x86, 0x1d, 0x7f, 0x21, 0xba, 0x19, 0x91, 0x50, + 0xbc, 0xbe, 0xc4, 0x3a, 0x13, 0x4b, 0x20, 0x4e, 0xf0, 0x74, 0xf2, 0xb0, 0x3f, 0xd7, 0x03, 0x1f, + 0x07, 0x41, 0x2c, 0xa7, 0x1b, 0x7b, 0x8d, 0x43, 0x83, 0x63, 0x83, 0x0a, 0xad, 0x00, 0x8a, 0x3a, + 0xed, 0x76, 0x8b, 0xdd, 0x94, 0x3a, 0xad, 0x4b, 0x61, 0xd0, 0x69, 0x73, 0x3f, 0x72, 0xf1, 0x90, + 0x45, 0xa3, 0x0b, 0x8b, 0x33, 0x4a, 0x50, 0x61, 0xb1, 0x1e, 0xb1, 0xdf, 0x22, 0x02, 0x9e, 0x5b, + 0x5b, 0x1b, 0x0c, 0x84, 0x25, 0xce, 0xfe, 0x45, 0xb6, 0xc1, 0xb1, 0x67, 0x71, 0xe2, 0x4e, 0x48, + 0xd0, 0x16, 0x8c, 0xb5, 0xd9, 0x26, 0x16, 0x87, 0x41, 0xab, 0x45, 0xa4, 0x7e, 0x79, 0x38, 0x17, + 0x26, 0xfe, 0x10, 0x86, 0xce, 0x0e, 0x9b, 0xdc, 0xed, 0xff, 0x36, 0xce, 0x64, 0x95, 0xb8, 0xac, + 0x1e, 0x12, 0xce, 0xca, 0x42, 0x93, 0xfb, 0x48, 0x91, 0x07, 0xee, 0x92, 0x7d, 0x40, 0xb8, 0x3e, + 0x63, 0xc9, 0x05, 0x7d, 0x86, 0xb9, 0xe2, 0x73, 0x01, 0x51, 0xfc, 0xd9, 0x4e, 0x4e, 0x6f, 0xb8, + 0xe1, 0x0b, 0x16, 0x58, 0x63, 0x87, 0xae, 0xc2, 0x98, 0x78, 0x45, 0x45, 0x98, 0x29, 0xca, 0xc6, + 0x11, 0x7b, 0x0c, 0xeb, 0xc8, 0xfd, 0x34, 0x00, 0x9b, 0x85, 0xd1, 0x06, 0x3c, 0xaa, 0xbd, 0x12, + 0x96, 0xe1, 0x6e, 0xc7, 0x25, 0xcf, 0x63, 0x7b, 0xbb, 0x73, 0x8f, 0xae, 0x1d, 0x44, 0x88, 0x0f, + 0xe6, 0x83, 0x6e, 0xc0, 0x49, 0xa7, 0x19, 0x7b, 0xdb, 0xa4, 0x46, 0x1c, 0xb7, 0xe5, 0xf9, 0xc4, + 0x4c, 0x93, 0xf0, 0xf0, 0xde, 0xee, 0xdc, 0xc9, 0x85, 0x2c, 0x02, 0x9c, 0x5d, 0x0e, 0x7d, 0x12, + 0xaa, 0xae, 0x1f, 0x89, 0x3e, 0x18, 0x34, 0x1e, 0xc5, 0xab, 0xd6, 0xae, 0x37, 0xd4, 0xf7, 0x27, + 0x7f, 0x70, 0x52, 0x00, 0xbd, 0x0b, 0xa3, 0x7a, 0xf8, 0x93, 0x78, 0x8c, 0xf1, 0xc5, 0x42, 0xe7, + 0x67, 0x23, 0x66, 0x88, 0x5b, 0xf0, 0x94, 0x5b, 0xab, 0x11, 0x4e, 0x64, 0x54, 0x81, 0x7e, 0x1e, + 0x50, 0x44, 0xc2, 0x6d, 0xaf, 0x49, 0x16, 0x9a, 0x2c, 0xbb, 0x2f, 0xb3, 0xf1, 0x0c, 0x1b, 0xf1, + 0x1d, 0xa8, 0xd1, 0x45, 0x81, 0x33, 0x4a, 0xa1, 0xcb, 0x54, 0xf2, 0xe8, 0x50, 0xe1, 0x85, 0x2c, + 0x15, 0xc3, 0x99, 0x1a, 0x69, 0x87, 0xa4, 0xe9, 0xc4, 0xc4, 0x35, 0x39, 0xe2, 0x54, 0x39, 0xba, + 0x2f, 0xa9, 0x07, 0x1c, 0xc0, 0xf4, 0x9d, 0xed, 0x7e, 0xc4, 0x81, 0x9e, 0xb3, 0x36, 0x83, 0x28, + 0xbe, 0x4e, 0xe2, 0x7b, 0x41, 0x78, 0x57, 0x64, 0x44, 0x4b, 0x52, 0x25, 0x26, 0x28, 0xac, 0xd3, + 0x51, 0x1d, 0x8a, 0x5d, 0xfd, 0xad, 0xd6, 0xd8, 0xbd, 0xca, 0x70, 0xb2, 0x76, 0x2e, 0x73, 0x30, + 0x96, 0x78, 0x49, 0xba, 0x5a, 0x5f, 0x62, 0x77, 0x24, 0x29, 0xd2, 0xd5, 0xfa, 0x12, 0x96, 0x78, + 0x14, 0x74, 0x3f, 0x3d, 0x38, 0x5e, 0xe4, 0xbe, 0xaa, 0x5b, 0x92, 0x17, 0x7c, 0x7d, 0xf0, 0x3e, + 0x4c, 0xaa, 0xe7, 0x0f, 0x79, 0xd2, 0xb8, 0x68, 0x66, 0x82, 0x4d, 0x9c, 0xc3, 0xe4, 0x9e, 0x53, + 0x76, 0xbd, 0xd5, 0x14, 0x4f, 0xdc, 0x55, 0x8b, 0x91, 0x9c, 0x63, 0x32, 0xf7, 0x51, 0x8e, 0xf3, + 0x50, 0x8d, 0x3a, 0x77, 0xdc, 0x60, 0xcb, 0xf1, 0x7c, 0x76, 0x91, 0xa1, 0x29, 0x31, 0x0d, 0x89, + 0xc0, 0x09, 0x0d, 0xaa, 0xc3, 0xb0, 0x23, 0x8e, 0x70, 0xe2, 0xc2, 0x21, 0x27, 0x0a, 0x5f, 0x1e, + 0xf8, 0xb8, 0x75, 0x55, 0xfe, 0xc3, 0x8a, 0x0b, 0x7a, 0x19, 0xc6, 0x44, 0x10, 0x99, 0x70, 0xf6, + 0x3c, 0x61, 0x06, 0x1c, 0x34, 0x74, 0x24, 0x36, 0x69, 0xd1, 0x06, 0x8c, 0x53, 0x2e, 0x89, 0x00, + 0x9c, 0x99, 0xee, 0x4f, 0x86, 0x6a, 0xe9, 0xcf, 0x75, 0x36, 0x38, 0xc5, 0x16, 0xb9, 0xf0, 0x88, + 0xd3, 0x89, 0x83, 0x2d, 0xba, 0x12, 0xcc, 0x75, 0xb2, 0x16, 0xdc, 0x25, 0x3e, 0xbb, 0x65, 0x18, + 0x5e, 0x3c, 0xb3, 0xb7, 0x3b, 0xf7, 0xc8, 0xc2, 0x01, 0x74, 0xf8, 0x40, 0x2e, 0xe8, 0x2d, 0x18, + 0x89, 0x83, 0x96, 0xf0, 0xe1, 0x8e, 0x66, 0x4e, 0x15, 0x49, 0x42, 0xb4, 0xa6, 0x0a, 0xe8, 0x66, + 0x0c, 0xc5, 0x04, 0xeb, 0x1c, 0xd1, 0x9b, 0x7c, 0x55, 0xb2, 0x84, 0x99, 0x24, 0x9a, 0x79, 0xa8, + 0x48, 0x67, 0xa9, 0x0c, 0x9b, 0xe6, 0xf2, 0x15, 0x3c, 0xb0, 0xce, 0x70, 0xf6, 0xe7, 0x60, 0xaa, + 0x4b, 0xe4, 0xf5, 0xe5, 0xdc, 0xfa, 0x1f, 0x07, 0xa0, 0xaa, 0x2c, 0x86, 0xe8, 0xbc, 0x69, 0x1c, + 0x7e, 0x38, 0x6d, 0x1c, 0x1e, 0xa6, 0x0a, 0x9a, 0x6e, 0x0f, 0x7e, 0x33, 0xe3, 0x41, 0xfd, 0xa7, + 0x73, 0xd7, 0x78, 0xf1, 0xc8, 0x36, 0xed, 0x88, 0x57, 0x2e, 0x6c, 0x6f, 0xae, 0x1c, 0x78, 0x6a, + 0x2c, 0xf8, 0x48, 0x24, 0x3d, 0x1f, 0xb6, 0x03, 0x77, 0xb5, 0x9e, 0x7e, 0x03, 0xad, 0x4e, 0x81, + 0x98, 0xe3, 0x98, 0x5e, 0x4f, 0xf7, 0x6c, 0xa6, 0xd7, 0x0f, 0x1d, 0x52, 0xaf, 0x97, 0x0c, 0x70, + 0xc2, 0x0b, 0x6d, 0xc3, 0x54, 0xd3, 0x7c, 0xd2, 0x4e, 0xc5, 0xab, 0x3d, 0xdb, 0xc7, 0x93, 0x72, + 0x1d, 0xed, 0x45, 0x9a, 0xa5, 0x34, 0x3f, 0xdc, 0x5d, 0x05, 0x7a, 0x19, 0x86, 0xdf, 0x0d, 0x22, + 0x76, 0x6d, 0x21, 0x36, 0x2e, 0x19, 0x17, 0x34, 0xfc, 0xea, 0x8d, 0x06, 0x83, 0xef, 0xef, 0xce, + 0x8d, 0xd4, 0x03, 0x57, 0xfe, 0xc5, 0xaa, 0x00, 0xfa, 0xac, 0x05, 0x27, 0x8d, 0x75, 0xac, 0x5a, + 0x0e, 0x87, 0x69, 0xf9, 0xa3, 0xa2, 0xe6, 0x93, 0xab, 0x59, 0x3c, 0x71, 0x76, 0x55, 0xf6, 0x77, + 0xb9, 0x89, 0x54, 0x18, 0x4d, 0x48, 0xd4, 0x69, 0x1d, 0xc7, 0xeb, 0x10, 0x37, 0x0c, 0x7b, 0xce, + 0x03, 0x30, 0xd2, 0xff, 0x7b, 0x8b, 0x19, 0xe9, 0xd7, 0xc8, 0x56, 0xbb, 0xe5, 0xc4, 0xc7, 0xe1, + 0xfb, 0xfc, 0x19, 0x18, 0x8e, 0x45, 0x6d, 0xc5, 0x9e, 0xb6, 0xd0, 0x9a, 0xc7, 0x2e, 0x2f, 0xd4, + 0xc6, 0x27, 0xa1, 0x58, 0x31, 0xb4, 0xff, 0x15, 0x1f, 0x15, 0x89, 0x39, 0x06, 0x4b, 0xc4, 0x75, + 0xd3, 0x12, 0xf1, 0x54, 0xe1, 0x6f, 0xe9, 0x61, 0x91, 0xf8, 0x8e, 0xf9, 0x05, 0xec, 0x7c, 0xf2, + 0x93, 0x73, 0x8b, 0x64, 0xff, 0xba, 0x05, 0xd3, 0x59, 0xce, 0x08, 0x54, 0x81, 0xe1, 0xa7, 0x23, + 0x75, 0xbf, 0xa6, 0x7a, 0xf5, 0x96, 0x80, 0x63, 0x45, 0x51, 0x38, 0xd7, 0x7c, 0x7f, 0x29, 0xb4, + 0x6e, 0x80, 0xf9, 0x38, 0x22, 0x7a, 0x85, 0x87, 0x3a, 0x58, 0xea, 0xf5, 0xc2, 0xfe, 0xc2, 0x1c, + 0xec, 0x6f, 0x94, 0x60, 0x9a, 0x1b, 0xb9, 0x17, 0xb6, 0x03, 0xcf, 0xad, 0x07, 0xae, 0x08, 0xfc, + 0x70, 0x61, 0xb4, 0xad, 0x1d, 0x6e, 0x8b, 0xa5, 0xe4, 0xd1, 0x8f, 0xc3, 0xc9, 0x81, 0x42, 0x87, + 0x62, 0x83, 0x2b, 0xad, 0x85, 0x6c, 0x7b, 0x4d, 0x65, 0x33, 0x2d, 0xf5, 0xbd, 0x33, 0xa8, 0x5a, + 0x96, 0x35, 0x3e, 0xd8, 0xe0, 0x7a, 0x04, 0x4f, 0xc4, 0xd8, 0x7f, 0xdf, 0x82, 0x87, 0x7a, 0xa4, + 0xed, 0xa1, 0xd5, 0xdd, 0x63, 0x17, 0x0b, 0xe2, 0xf5, 0x4d, 0x55, 0x1d, 0xbf, 0x6e, 0xc0, 0x02, + 0x8b, 0xee, 0x00, 0xf0, 0xeb, 0x02, 0xaa, 0x4b, 0xa7, 0xef, 0xb2, 0x0b, 0x26, 0xc7, 0xd0, 0xf2, + 0x26, 0x48, 0x4e, 0x58, 0xe3, 0x6a, 0x7f, 0xad, 0x0c, 0x03, 0xfc, 0x91, 0xf7, 0x3a, 0x0c, 0x6d, + 0xf2, 0x7c, 0xc6, 0xfd, 0xa5, 0x53, 0x4e, 0x0e, 0x2f, 0x1c, 0x80, 0x25, 0x1b, 0x74, 0x0d, 0x4e, + 0x88, 0xd0, 0xa3, 0x1a, 0x69, 0x39, 0x3b, 0xf2, 0x34, 0xcc, 0xdf, 0x0d, 0x91, 0x09, 0xee, 0x4f, + 0xac, 0x76, 0x93, 0xe0, 0xac, 0x72, 0xe8, 0x95, 0xae, 0xf4, 0x83, 0x3c, 0x4f, 0xb4, 0xd2, 0x84, + 0x73, 0x52, 0x10, 0xbe, 0x0c, 0x63, 0xed, 0xae, 0x73, 0xbf, 0xf6, 0x96, 0xb6, 0x79, 0xd6, 0x37, + 0x69, 0x99, 0xef, 0x42, 0x87, 0xf9, 0x6c, 0xac, 0x6d, 0x86, 0x24, 0xda, 0x0c, 0x5a, 0xae, 0x78, + 0x06, 0x36, 0xf1, 0x5d, 0x48, 0xe1, 0x71, 0x57, 0x09, 0xca, 0x65, 0xdd, 0xf1, 0x5a, 0x9d, 0x90, + 0x24, 0x5c, 0x06, 0x4d, 0x2e, 0x2b, 0x29, 0x3c, 0xee, 0x2a, 0x41, 0xe7, 0xd6, 0x49, 0xf1, 0x72, + 0xa8, 0x0c, 0x52, 0x17, 0x22, 0xe8, 0xd3, 0x30, 0x24, 0x03, 0x08, 0x0a, 0xe5, 0x52, 0x11, 0x8e, + 0x09, 0xea, 0x15, 0x52, 0xed, 0x1d, 0x39, 0x11, 0x3a, 0x20, 0xf9, 0x1d, 0xe6, 0x85, 0xca, 0x3f, + 0xb7, 0xe0, 0x44, 0x86, 0x23, 0x1c, 0x17, 0x69, 0x1b, 0x5e, 0x14, 0xab, 0x57, 0x2c, 0x34, 0x91, + 0xc6, 0xe1, 0x58, 0x51, 0xd0, 0xd5, 0xc2, 0x85, 0x66, 0x5a, 0x50, 0x0a, 0x17, 0x13, 0x81, 0xed, + 0x4f, 0x50, 0xa2, 0x33, 0x50, 0xe9, 0x44, 0x24, 0x94, 0x0f, 0x3a, 0x4a, 0x39, 0xcf, 0xec, 0x8c, + 0x0c, 0x43, 0xd5, 0xd6, 0x0d, 0x65, 0xe2, 0xd3, 0xd4, 0x56, 0x6e, 0xe4, 0xe3, 0x38, 0xfb, 0xcb, + 0x65, 0x98, 0x48, 0x39, 0xc4, 0xd2, 0x86, 0x6c, 0x05, 0xbe, 0x17, 0x07, 0x2a, 0xbf, 0x1d, 0x7f, + 0x43, 0x8e, 0xb4, 0x37, 0xaf, 0x09, 0x38, 0x56, 0x14, 0xe8, 0x49, 0xf9, 0x42, 0x70, 0xfa, 0x75, + 0x8e, 0xc5, 0x9a, 0xf1, 0x48, 0x70, 0xd1, 0x97, 0x75, 0x1e, 0x87, 0x4a, 0x3b, 0x50, 0x0f, 0xbe, + 0xab, 0xf1, 0xc4, 0x8b, 0xb5, 0x7a, 0x10, 0xb4, 0x30, 0x43, 0xa2, 0x27, 0xc4, 0xd7, 0xa7, 0x6e, + 0x46, 0xb0, 0xe3, 0x06, 0x91, 0xd6, 0x05, 0x4f, 0xc1, 0xd0, 0x5d, 0xb2, 0x13, 0x7a, 0xfe, 0x46, + 0xfa, 0x5e, 0xe8, 0x0a, 0x07, 0x63, 0x89, 0x37, 0x93, 0xd5, 0x0f, 0x1d, 0xf1, 0xeb, 0x39, 0xc3, + 0xb9, 0xfb, 0xe0, 0x37, 0x2d, 0x98, 0x60, 0xd9, 0x67, 0x45, 0x8a, 0x04, 0x2f, 0xf0, 0x8f, 0x41, + 0xc7, 0x78, 0x1c, 0x06, 0x42, 0x5a, 0x69, 0xfa, 0xf9, 0x0b, 0xd6, 0x12, 0xcc, 0x71, 0xe8, 0x11, + 0xa8, 0xb0, 0x26, 0xd0, 0x61, 0x1c, 0xe5, 0x49, 0xee, 0x6b, 0x4e, 0xec, 0x60, 0x06, 0x65, 0x31, + 0x68, 0x98, 0xb4, 0x5b, 0x1e, 0x6f, 0x74, 0x62, 0xce, 0xfd, 0xa0, 0xc5, 0xa0, 0x65, 0x36, 0xf2, + 0x41, 0xc5, 0xa0, 0x65, 0x33, 0x3f, 0x58, 0xcf, 0xff, 0xef, 0x25, 0x38, 0x9d, 0x59, 0x2e, 0xb9, + 0x61, 0x5e, 0x31, 0x6e, 0x98, 0x2f, 0xa6, 0x6e, 0x98, 0xed, 0x83, 0x4b, 0x3f, 0x98, 0x3b, 0xe7, + 0xec, 0xab, 0xe0, 0xf2, 0x31, 0x5e, 0x05, 0x57, 0x8a, 0xaa, 0x38, 0x03, 0x39, 0x2a, 0xce, 0x1f, + 0x59, 0xf0, 0x70, 0x66, 0x97, 0x7d, 0xe0, 0x82, 0xfe, 0x32, 0x5b, 0xd9, 0xe3, 0x74, 0xf2, 0x6b, + 0xe5, 0x1e, 0x5f, 0xc5, 0xce, 0x29, 0x67, 0xa9, 0x14, 0x62, 0xc8, 0x48, 0x28, 0x6f, 0xa3, 0x5c, + 0x02, 0x71, 0x18, 0x56, 0x58, 0x14, 0x69, 0x41, 0x73, 0xbc, 0x91, 0xcb, 0x87, 0x5c, 0x50, 0xf3, + 0xa6, 0x1d, 0x5e, 0xcf, 0xfb, 0x90, 0x0e, 0xa5, 0xbb, 0xad, 0x9d, 0x3c, 0xcb, 0x87, 0x39, 0x79, + 0x8e, 0x66, 0x9f, 0x3a, 0xd1, 0x02, 0x4c, 0x6c, 0x79, 0x3e, 0x7b, 0x74, 0xd7, 0xd4, 0x9e, 0x54, + 0xe4, 0xf2, 0x35, 0x13, 0x8d, 0xd3, 0xf4, 0xb3, 0x2f, 0xc3, 0xd8, 0xe1, 0xad, 0x6b, 0x3f, 0x2a, + 0xc3, 0x87, 0x0f, 0x10, 0x0a, 0x7c, 0x77, 0x30, 0xc6, 0x45, 0xdb, 0x1d, 0xba, 0xc6, 0xa6, 0x0e, + 0xd3, 0xeb, 0x9d, 0x56, 0x6b, 0x87, 0xf9, 0x67, 0x11, 0x57, 0x52, 0x08, 0xa5, 0x46, 0x25, 0xa3, + 0x5e, 0xc9, 0xa0, 0xc1, 0x99, 0x25, 0xd1, 0xcf, 0x03, 0x0a, 0xee, 0xb0, 0xb4, 0xc8, 0x6e, 0x92, + 0xd7, 0x82, 0x0d, 0x41, 0x39, 0x59, 0xaa, 0x37, 0xba, 0x28, 0x70, 0x46, 0x29, 0xaa, 0xa7, 0xd2, + 0x7d, 0x6c, 0x47, 0x35, 0x2b, 0xa5, 0xa7, 0x62, 0x1d, 0x89, 0x4d, 0x5a, 0x74, 0x09, 0xa6, 0x9c, + 0x6d, 0xc7, 0xe3, 0x69, 0xce, 0x24, 0x03, 0xae, 0xa8, 0x2a, 0xfb, 0xd5, 0x42, 0x9a, 0x00, 0x77, + 0x97, 0x41, 0x6d, 0xc3, 0x20, 0xc9, 0x5f, 0x66, 0xf8, 0xe4, 0x21, 0x66, 0x70, 0x61, 0x13, 0xa5, + 0xfd, 0xa7, 0x16, 0xdd, 0xfa, 0x32, 0xde, 0x67, 0xa5, 0x3d, 0xa2, 0x0c, 0x6c, 0x5a, 0x10, 0xa0, + 0xea, 0x91, 0x25, 0x1d, 0x89, 0x4d, 0x5a, 0x3e, 0x35, 0xa2, 0xc4, 0x5d, 0xdc, 0xd0, 0x36, 0x45, + 0xfc, 0xac, 0xa2, 0xa0, 0x1a, 0xb4, 0xeb, 0x6d, 0x7b, 0x51, 0x10, 0x8a, 0x05, 0xd4, 0xef, 0x0b, + 0xe8, 0x4a, 0x5e, 0xd6, 0x38, 0x1b, 0x2c, 0xf9, 0xd9, 0x5f, 0x29, 0xc1, 0x98, 0xac, 0xf1, 0xd5, + 0x4e, 0x10, 0x3b, 0xc7, 0xb0, 0xa5, 0xbf, 0x6a, 0x6c, 0xe9, 0xe7, 0x8b, 0x85, 0x13, 0xb3, 0xc6, + 0xf5, 0xdc, 0xca, 0x3f, 0x9d, 0xda, 0xca, 0x2f, 0xf4, 0xc3, 0xf4, 0xe0, 0x2d, 0xfc, 0xdf, 0x58, + 0x30, 0x65, 0xd0, 0x1f, 0xc3, 0x4e, 0x52, 0x37, 0x77, 0x92, 0x67, 0xfa, 0xf8, 0x9a, 0x1e, 0x3b, + 0xc8, 0xd7, 0x4b, 0xa9, 0xaf, 0x60, 0x3b, 0xc7, 0x2f, 0x40, 0x65, 0xd3, 0x09, 0xdd, 0x62, 0x39, + 0x3f, 0xbb, 0x8a, 0xcf, 0x5f, 0x76, 0x42, 0x97, 0xcb, 0xff, 0x73, 0xea, 0xf5, 0x38, 0x27, 0x74, + 0x73, 0xa3, 0x28, 0x58, 0xa5, 0xe8, 0x25, 0x18, 0x8c, 0x9a, 0x41, 0x5b, 0xf9, 0x99, 0x9e, 0xe1, + 0x2f, 0xcb, 0x51, 0xc8, 0xfe, 0xee, 0x1c, 0x32, 0xab, 0xa3, 0x60, 0x2c, 0xe8, 0x67, 0x37, 0xa0, + 0xaa, 0xaa, 0x3e, 0x52, 0x4f, 0xfb, 0xff, 0x5a, 0x86, 0x13, 0x19, 0x73, 0x05, 0xfd, 0xa2, 0xd1, + 0x6f, 0x2f, 0xf7, 0x3d, 0xd9, 0xde, 0x67, 0xcf, 0xfd, 0x22, 0x3b, 0x29, 0xb9, 0x62, 0x76, 0x1c, + 0xa2, 0xfa, 0x9b, 0x11, 0x49, 0x57, 0x4f, 0x41, 0xf9, 0xd5, 0xd3, 0x6a, 0x8f, 0xad, 0xfb, 0x69, + 0x45, 0xaa, 0xa5, 0x47, 0x3a, 0xce, 0x5f, 0xa8, 0xc0, 0x74, 0x56, 0xde, 0x02, 0xf4, 0x2b, 0x56, + 0xea, 0x85, 0x91, 0x57, 0xfa, 0x4f, 0x7e, 0xc0, 0x9f, 0x1d, 0x11, 0x59, 0x85, 0xe6, 0xcd, 0x37, + 0x47, 0x72, 0x7b, 0x5c, 0xd4, 0xce, 0xe2, 0x9f, 0x42, 0xfe, 0x5a, 0x8c, 0x94, 0x0a, 0x9f, 0x3a, + 0x44, 0x53, 0xc4, 0x83, 0x33, 0x51, 0x2a, 0xfe, 0x49, 0x82, 0xf3, 0xe3, 0x9f, 0x64, 0x1b, 0x66, + 0x3d, 0x18, 0xd1, 0xbe, 0xeb, 0x48, 0xa7, 0xc1, 0x5d, 0xba, 0x45, 0x69, 0xed, 0x3e, 0xd2, 0xa9, + 0xf0, 0x77, 0x2c, 0x48, 0x39, 0x85, 0x29, 0xb3, 0x8c, 0xd5, 0xd3, 0x2c, 0x73, 0x06, 0x2a, 0x61, + 0xd0, 0x22, 0xe9, 0x47, 0x27, 0x70, 0xd0, 0x22, 0x98, 0x61, 0xd4, 0x83, 0xd2, 0xe5, 0x5e, 0x0f, + 0x4a, 0xd3, 0x73, 0x7a, 0x8b, 0x6c, 0x13, 0x69, 0x24, 0x51, 0x62, 0xfc, 0x2a, 0x05, 0x62, 0x8e, + 0xb3, 0x7f, 0xa7, 0x02, 0x27, 0x32, 0x62, 0x01, 0xe9, 0x09, 0x69, 0xc3, 0x89, 0xc9, 0x3d, 0x67, + 0x27, 0x9d, 0xfc, 0xf6, 0x12, 0x07, 0x63, 0x89, 0x67, 0xce, 0xac, 0x3c, 0x81, 0x5e, 0xca, 0x74, + 0x25, 0xf2, 0xe6, 0x09, 0xec, 0xd1, 0x3f, 0x3d, 0x7c, 0x11, 0x20, 0x8a, 0x5a, 0xcb, 0x3e, 0xd5, + 0xf0, 0x5c, 0xe1, 0x34, 0x9b, 0xe4, 0x5d, 0x6c, 0x5c, 0x15, 0x18, 0xac, 0x51, 0xa1, 0x1a, 0x4c, + 0xb6, 0xc3, 0x20, 0xe6, 0x86, 0xc1, 0x1a, 0x77, 0xb4, 0x18, 0x30, 0xa3, 0xb5, 0xea, 0x29, 0x3c, + 0xee, 0x2a, 0x81, 0x5e, 0x80, 0x11, 0x11, 0xc1, 0x55, 0x0f, 0x82, 0x96, 0x30, 0x23, 0xa9, 0xeb, + 0xf8, 0x46, 0x82, 0xc2, 0x3a, 0x9d, 0x56, 0x8c, 0x59, 0x1b, 0x87, 0x32, 0x8b, 0x71, 0x8b, 0xa3, + 0x46, 0x97, 0xca, 0x6e, 0x32, 0x5c, 0x28, 0xbb, 0x49, 0x62, 0x58, 0xab, 0x16, 0xbe, 0x88, 0x81, + 0x5c, 0x03, 0xd4, 0x1f, 0x96, 0x61, 0x90, 0x0f, 0xc5, 0x31, 0x68, 0x79, 0x75, 0x61, 0x52, 0x2a, + 0x94, 0x49, 0x82, 0xb7, 0x6a, 0xbe, 0xe6, 0xc4, 0x0e, 0x17, 0x4d, 0x6a, 0x85, 0x24, 0x66, 0x28, + 0x34, 0x6f, 0xac, 0xa1, 0xd9, 0x94, 0xa5, 0x04, 0x38, 0x0f, 0x6d, 0x45, 0x6d, 0x02, 0x44, 0xec, + 0xf9, 0x5b, 0xca, 0x43, 0x64, 0xe6, 0x7d, 0xbe, 0x50, 0x3b, 0x1a, 0xaa, 0x18, 0x6f, 0x4d, 0x32, + 0x2d, 0x15, 0x02, 0x6b, 0xbc, 0x67, 0x5f, 0x84, 0xaa, 0x22, 0xce, 0x3b, 0x42, 0x8e, 0xea, 0xa2, + 0xed, 0x67, 0x61, 0x22, 0x55, 0x57, 0x5f, 0x27, 0xd0, 0xdf, 0xb3, 0x60, 0x82, 0x37, 0x79, 0xd9, + 0xdf, 0x16, 0xa2, 0xe0, 0x73, 0x16, 0x4c, 0xb7, 0x32, 0x56, 0xa2, 0x18, 0xe6, 0xc3, 0xac, 0x61, + 0x75, 0xf8, 0xcc, 0xc2, 0xe2, 0xcc, 0xda, 0xd0, 0x59, 0x18, 0xe6, 0xaf, 0x79, 0x3b, 0x2d, 0xe1, + 0xa1, 0x3d, 0xca, 0x73, 0x92, 0x73, 0x18, 0x56, 0x58, 0xfb, 0xc7, 0x16, 0x4c, 0xf1, 0x8f, 0xb8, + 0x42, 0x76, 0xd4, 0xf1, 0xea, 0x03, 0xf2, 0x19, 0x22, 0xfb, 0x7a, 0xa9, 0x47, 0xf6, 0x75, 0xfd, + 0x2b, 0xcb, 0x07, 0x7e, 0xe5, 0x37, 0x2c, 0x10, 0x33, 0xf4, 0x18, 0xce, 0x0f, 0xab, 0xe6, 0xf9, + 0xe1, 0x23, 0x45, 0x26, 0x7d, 0x8f, 0x83, 0xc3, 0xaf, 0x96, 0x60, 0x92, 0x13, 0x24, 0x37, 0x32, + 0x1f, 0x94, 0xc1, 0xe9, 0xef, 0x55, 0x20, 0xf5, 0x26, 0x6c, 0xf6, 0x97, 0x1a, 0x63, 0x59, 0x39, + 0x70, 0x2c, 0xff, 0xa7, 0x05, 0x88, 0xf7, 0x49, 0xfa, 0x29, 0x74, 0xbe, 0xbb, 0x69, 0xe6, 0x80, + 0x44, 0x72, 0x28, 0x0c, 0xd6, 0xa8, 0x1e, 0xf0, 0x27, 0xa4, 0xee, 0xc3, 0xca, 0xf9, 0xf7, 0x61, + 0x7d, 0x7c, 0xf5, 0x77, 0xcb, 0x90, 0x76, 0xd5, 0x44, 0x6f, 0xc3, 0x68, 0xd3, 0x69, 0x3b, 0x77, + 0xbc, 0x96, 0x17, 0x7b, 0x24, 0x2a, 0x76, 0xe1, 0xbe, 0xa4, 0x95, 0x10, 0xd7, 0x50, 0x1a, 0x04, + 0x1b, 0x1c, 0xd1, 0x3c, 0x40, 0x3b, 0xf4, 0xb6, 0xbd, 0x16, 0xd9, 0x60, 0x27, 0x1e, 0x16, 0xeb, + 0xc1, 0xef, 0x8e, 0x25, 0x14, 0x6b, 0x14, 0x19, 0xb1, 0x01, 0xe5, 0xe3, 0x88, 0x0d, 0xa8, 0xf4, + 0x19, 0x1b, 0x30, 0x50, 0x28, 0x36, 0x00, 0xc3, 0x29, 0xb9, 0x79, 0xd3, 0xff, 0x2b, 0x5e, 0x8b, + 0x08, 0xdd, 0x8d, 0xc7, 0x82, 0xcc, 0xee, 0xed, 0xce, 0x9d, 0xc2, 0x99, 0x14, 0xb8, 0x47, 0x49, + 0xbb, 0x03, 0x27, 0x1a, 0x24, 0x94, 0xcf, 0xd8, 0xa9, 0xb5, 0xf4, 0x26, 0x54, 0xc3, 0xd4, 0x32, + 0xee, 0x33, 0xe0, 0x5f, 0xcb, 0xf1, 0x26, 0x97, 0x6d, 0xc2, 0xd2, 0xfe, 0xeb, 0x25, 0x18, 0x12, + 0x4e, 0x9a, 0xc7, 0xa0, 0x7c, 0x5c, 0x31, 0x4c, 0x4c, 0x4f, 0xe5, 0xc9, 0x3f, 0xd6, 0xac, 0x9e, + 0xc6, 0xa5, 0x46, 0xca, 0xb8, 0xf4, 0x4c, 0x31, 0x76, 0x07, 0x9b, 0x95, 0x7e, 0xab, 0x0c, 0xe3, + 0xa6, 0xd3, 0xea, 0x31, 0x74, 0xcb, 0x6b, 0x30, 0x14, 0x09, 0xff, 0xe9, 0x52, 0x11, 0x9f, 0xbd, + 0xf4, 0x10, 0x27, 0x37, 0xf1, 0xc2, 0x63, 0x5a, 0xb2, 0xcb, 0x74, 0xd1, 0x2e, 0x1f, 0x8b, 0x8b, + 0x76, 0x9e, 0x2f, 0x71, 0xe5, 0x41, 0xf8, 0x12, 0xdb, 0xdf, 0x63, 0x22, 0x5f, 0x87, 0x1f, 0xc3, + 0x36, 0xfe, 0xaa, 0xb9, 0x39, 0x9c, 0x2b, 0x34, 0xef, 0x44, 0xf3, 0x7a, 0x6c, 0xe7, 0xdf, 0xb2, + 0x60, 0x44, 0x10, 0x1e, 0xc3, 0x07, 0xfc, 0xbc, 0xf9, 0x01, 0x4f, 0x14, 0xfa, 0x80, 0x1e, 0x2d, + 0xff, 0x4a, 0x49, 0xb5, 0xbc, 0x1e, 0x84, 0x71, 0xa1, 0x4c, 0xe8, 0xc3, 0xf4, 0xe8, 0x17, 0x34, + 0x83, 0x96, 0x50, 0xe0, 0x1e, 0x49, 0x42, 0xff, 0x38, 0x7c, 0x5f, 0xfb, 0x8d, 0x15, 0x35, 0x8b, + 0x4c, 0x0b, 0xc2, 0x58, 0x6c, 0xa0, 0x49, 0x64, 0x5a, 0x10, 0xc6, 0x98, 0x61, 0x90, 0x0b, 0x10, + 0x3b, 0xe1, 0x06, 0x89, 0x29, 0x4c, 0x44, 0xcd, 0xf6, 0x5e, 0xad, 0x9d, 0xd8, 0x6b, 0xcd, 0x7b, + 0x7e, 0x1c, 0xc5, 0xe1, 0xfc, 0xaa, 0x1f, 0xdf, 0x08, 0xb9, 0xd2, 0xaf, 0xc5, 0xf2, 0x29, 0x5e, + 0x58, 0xe3, 0x2b, 0x83, 0x44, 0x58, 0x1d, 0x03, 0xe6, 0x0d, 0xd2, 0x75, 0x01, 0xc7, 0x8a, 0xc2, + 0x7e, 0x91, 0x49, 0x76, 0xd6, 0x41, 0xfd, 0x85, 0xd9, 0x7d, 0x61, 0x48, 0x75, 0x2d, 0x33, 0x0b, + 0x5f, 0xd7, 0x83, 0xf9, 0x8a, 0x8a, 0x4f, 0xda, 0x04, 0xdd, 0x8f, 0x3a, 0x89, 0xfd, 0x43, 0xa4, + 0xeb, 0xda, 0xf1, 0xc5, 0xc2, 0x12, 0xb9, 0x8f, 0x8b, 0x46, 0x96, 0x92, 0x91, 0xe5, 0xa1, 0x5b, + 0xad, 0xa7, 0xf3, 0xd7, 0x2f, 0x49, 0x04, 0x4e, 0x68, 0xd0, 0x79, 0x71, 0xa0, 0xe4, 0x16, 0x97, + 0x0f, 0xa7, 0x0e, 0x94, 0xb2, 0x4b, 0xb4, 0x13, 0xe5, 0x05, 0x18, 0x51, 0x4f, 0x02, 0xd5, 0xf9, + 0x63, 0x2c, 0x55, 0xae, 0x5f, 0x2d, 0x27, 0x60, 0xac, 0xd3, 0xa0, 0x35, 0x98, 0x88, 0xf8, 0x7b, + 0x45, 0x32, 0x5a, 0x43, 0x18, 0x0e, 0x9e, 0x96, 0x97, 0x94, 0x0d, 0x13, 0xbd, 0xcf, 0x40, 0x7c, + 0x29, 0xcb, 0xf8, 0x8e, 0x34, 0x0b, 0xf4, 0x0a, 0x8c, 0xb7, 0xf4, 0x37, 0x5c, 0xeb, 0xc2, 0xae, + 0xa0, 0xdc, 0xce, 0x8c, 0x17, 0x5e, 0xeb, 0x38, 0x45, 0x8d, 0x5e, 0x83, 0x19, 0x1d, 0x22, 0x92, + 0x0b, 0x39, 0xfe, 0x06, 0x89, 0xc4, 0xdb, 0x26, 0x8f, 0xec, 0xed, 0xce, 0xcd, 0x5c, 0xed, 0x41, + 0x83, 0x7b, 0x96, 0x46, 0x2f, 0xc1, 0xa8, 0xfc, 0x7c, 0x2d, 0xb6, 0x29, 0x71, 0x78, 0xd4, 0x70, + 0xd8, 0xa0, 0x44, 0xf7, 0xe0, 0xa4, 0xfc, 0xbf, 0x16, 0x3a, 0xeb, 0xeb, 0x5e, 0x53, 0x04, 0x99, + 0x8d, 0x30, 0x16, 0x0b, 0xd2, 0x5f, 0x7c, 0x39, 0x8b, 0x68, 0x7f, 0x77, 0xee, 0x8c, 0xe8, 0xb5, + 0x4c, 0x3c, 0x1b, 0xc4, 0x6c, 0xfe, 0xe8, 0x1a, 0x9c, 0xd8, 0x24, 0x4e, 0x2b, 0xde, 0x5c, 0xda, + 0x24, 0xcd, 0xbb, 0x72, 0x61, 0xb1, 0x88, 0x29, 0xcd, 0x25, 0xf0, 0x72, 0x37, 0x09, 0xce, 0x2a, + 0xf7, 0xfe, 0xee, 0x94, 0x7f, 0x81, 0x16, 0xd6, 0xf4, 0x07, 0xf4, 0x0e, 0x8c, 0xea, 0x7d, 0x9d, + 0x56, 0x0c, 0xf2, 0xdf, 0xf7, 0x15, 0x7a, 0x88, 0x1a, 0x01, 0x1d, 0x87, 0x0d, 0xde, 0xf6, 0xbf, + 0x2b, 0xc1, 0x5c, 0x4e, 0xee, 0xae, 0x94, 0x35, 0xcb, 0x2a, 0x64, 0xcd, 0x5a, 0x90, 0x6f, 0xde, + 0x5c, 0x4f, 0xe5, 0x4c, 0x4f, 0xbd, 0x62, 0x93, 0x64, 0x4e, 0x4f, 0xd3, 0x17, 0xf6, 0x34, 0xd3, + 0x0d, 0x62, 0x95, 0x5c, 0x87, 0xbb, 0xd7, 0x75, 0x1b, 0xe7, 0xc0, 0x61, 0x94, 0xde, 0x9e, 0xe6, + 0x4d, 0xfb, 0x7b, 0x25, 0x38, 0xa9, 0x3a, 0xf3, 0xa7, 0xb7, 0x0b, 0xdf, 0xea, 0xee, 0xc2, 0x07, + 0x6a, 0x26, 0xb6, 0x6f, 0xc0, 0x60, 0x63, 0x27, 0x6a, 0xc6, 0xad, 0x02, 0x3b, 0xfe, 0xe3, 0xc6, + 0xba, 0x4a, 0x76, 0x23, 0xf6, 0x92, 0x9d, 0x58, 0x66, 0xf6, 0xe7, 0x2d, 0x98, 0x58, 0x5b, 0xaa, + 0x37, 0x82, 0xe6, 0x5d, 0x12, 0x2f, 0x70, 0x83, 0x06, 0x16, 0x1b, 0xbe, 0x75, 0xc8, 0x8d, 0x3c, + 0x4b, 0x45, 0x38, 0x03, 0x95, 0xcd, 0x20, 0x8a, 0xd3, 0x97, 0x02, 0x97, 0x83, 0x28, 0xc6, 0x0c, + 0x63, 0xff, 0x99, 0x05, 0x03, 0xec, 0xa1, 0xb6, 0xbc, 0x47, 0xfe, 0x8a, 0x7c, 0x17, 0x7a, 0x01, + 0x06, 0xc9, 0xfa, 0x3a, 0x69, 0xc6, 0x62, 0x7c, 0x65, 0x80, 0xcd, 0xe0, 0x32, 0x83, 0xd2, 0x1d, + 0x8d, 0x55, 0xc6, 0xff, 0x62, 0x41, 0x8c, 0x3e, 0x03, 0xd5, 0xd8, 0xdb, 0x22, 0x0b, 0xae, 0x2b, + 0xac, 0xf0, 0xfd, 0xf9, 0x7c, 0xa9, 0x1d, 0x76, 0x4d, 0x32, 0xc1, 0x09, 0x3f, 0xfb, 0x4b, 0x25, + 0x80, 0x24, 0x7c, 0x2e, 0xef, 0x33, 0x17, 0xbb, 0xde, 0x32, 0x7c, 0x32, 0xe3, 0x2d, 0x43, 0x94, + 0x30, 0xcc, 0x78, 0xc9, 0x50, 0x75, 0x55, 0xb9, 0x50, 0x57, 0x55, 0xfa, 0xe9, 0xaa, 0x25, 0x98, + 0x4a, 0xc2, 0xff, 0xcc, 0x38, 0x6a, 0x96, 0x6f, 0x78, 0x2d, 0x8d, 0xc4, 0xdd, 0xf4, 0xf6, 0x97, + 0x2c, 0x10, 0x5e, 0xc2, 0x05, 0x26, 0xb4, 0x2b, 0xdf, 0x1d, 0x33, 0x52, 0x0b, 0x3e, 0x5d, 0xc4, + 0x81, 0x5a, 0x24, 0x14, 0x54, 0x72, 0xdf, 0x48, 0x23, 0x68, 0x70, 0xb5, 0x7f, 0xdb, 0x82, 0x11, + 0x8e, 0xbe, 0xc6, 0x0e, 0xa2, 0xf9, 0xed, 0xea, 0x2b, 0x99, 0x35, 0x7b, 0x92, 0x8b, 0x32, 0x56, + 0x49, 0x8d, 0xf5, 0x27, 0xb9, 0x24, 0x02, 0x27, 0x34, 0xe8, 0x29, 0x18, 0x8a, 0x3a, 0x77, 0x18, + 0x79, 0xca, 0x65, 0xb8, 0xc1, 0xc1, 0x58, 0xe2, 0xed, 0x7f, 0x5a, 0x82, 0xc9, 0xb4, 0xc7, 0x38, + 0xc2, 0x30, 0xc8, 0x05, 0x48, 0xfa, 0x4c, 0x73, 0x90, 0x01, 0x54, 0xf3, 0x38, 0x07, 0xfe, 0xb0, + 0x3c, 0x13, 0x41, 0x82, 0x13, 0x5a, 0x87, 0x11, 0x37, 0xb8, 0xe7, 0xdf, 0x73, 0x42, 0x77, 0xa1, + 0xbe, 0x2a, 0x46, 0x22, 0xc7, 0xc7, 0xaf, 0x96, 0x14, 0xd0, 0xfd, 0xd9, 0x99, 0x41, 0x2e, 0x41, + 0x61, 0x9d, 0x31, 0x7a, 0x93, 0x65, 0x42, 0x59, 0xf7, 0x36, 0xae, 0x39, 0xed, 0x62, 0xde, 0x2c, + 0x4b, 0x92, 0x5c, 0xab, 0x63, 0x4c, 0x24, 0x4e, 0xe1, 0x08, 0x9c, 0xb0, 0xb4, 0x7f, 0xf5, 0x24, + 0x18, 0x73, 0xc1, 0xc8, 0x38, 0x6d, 0x3d, 0xf0, 0x8c, 0xd3, 0x6f, 0xc0, 0x30, 0xd9, 0x6a, 0xc7, + 0x3b, 0x35, 0x2f, 0x2c, 0xf6, 0x7e, 0xc0, 0xb2, 0xa0, 0xee, 0xe6, 0x2e, 0x31, 0x58, 0x71, 0xec, + 0x91, 0x3f, 0xbc, 0xfc, 0x81, 0xc8, 0x1f, 0x5e, 0xf9, 0x4b, 0xc9, 0x1f, 0xfe, 0x1a, 0x0c, 0x6d, + 0x78, 0x31, 0x26, 0xed, 0x40, 0xec, 0xc6, 0x39, 0x93, 0xe7, 0x12, 0x27, 0xee, 0xce, 0x2c, 0x2b, + 0x10, 0x58, 0xb2, 0x43, 0x6b, 0x6a, 0x51, 0x0d, 0x16, 0xd1, 0x41, 0xbb, 0x0d, 0xe4, 0x99, 0xcb, + 0x4a, 0xe4, 0x0b, 0x1f, 0x7a, 0xff, 0xf9, 0xc2, 0x55, 0x96, 0xef, 0xe1, 0x07, 0x95, 0xe5, 0xdb, + 0xc8, 0x96, 0x5e, 0x3d, 0x8a, 0x6c, 0xe9, 0x5f, 0xb2, 0xe0, 0x64, 0x3b, 0xeb, 0xad, 0x01, 0x91, + 0xaf, 0xfb, 0xe7, 0x0e, 0xf1, 0xfa, 0x82, 0x51, 0x35, 0xcb, 0xef, 0x91, 0x49, 0x86, 0xb3, 0x2b, + 0x96, 0x69, 0xd7, 0x47, 0xde, 0x7f, 0xda, 0xf5, 0xa3, 0x4e, 0xec, 0x9d, 0x24, 0x61, 0x1f, 0x3b, + 0x92, 0x24, 0xec, 0xe3, 0x0f, 0x30, 0x09, 0xbb, 0x96, 0x3e, 0x7d, 0xe2, 0xc1, 0xa6, 0x4f, 0xdf, + 0x34, 0xf7, 0x25, 0x9e, 0xad, 0xfb, 0x85, 0xc2, 0xfb, 0x92, 0x51, 0xc3, 0xc1, 0x3b, 0x13, 0x4f, + 0x24, 0x3f, 0xf5, 0x3e, 0x13, 0xc9, 0x1b, 0xe9, 0xd8, 0xd1, 0x51, 0xa4, 0x63, 0x7f, 0x5b, 0xdf, + 0x41, 0x4f, 0x14, 0xa9, 0x41, 0x6d, 0x94, 0xdd, 0x35, 0x64, 0xed, 0xa1, 0xdd, 0x09, 0xdf, 0xa7, + 0x8f, 0x3b, 0xe1, 0xfb, 0xc9, 0x23, 0x4c, 0xf8, 0x7e, 0xea, 0x58, 0x13, 0xbe, 0x3f, 0xf4, 0x01, + 0x49, 0xf8, 0x3e, 0x73, 0x5c, 0x09, 0xdf, 0x1f, 0x7e, 0xb0, 0x09, 0xdf, 0xdf, 0x86, 0x6a, 0x5b, + 0xc6, 0x5d, 0xce, 0xcc, 0x16, 0x19, 0xba, 0xcc, 0x30, 0x4d, 0x3e, 0x74, 0x0a, 0x85, 0x13, 0xa6, + 0xb4, 0x86, 0x24, 0x01, 0xfc, 0x87, 0x8b, 0xd4, 0x90, 0x69, 0xf7, 0x38, 0x20, 0xed, 0xfb, 0x17, + 0x4a, 0x70, 0xfa, 0xe0, 0xd5, 0x91, 0x18, 0x4d, 0xea, 0x89, 0x2d, 0x3b, 0x65, 0x34, 0x61, 0x9a, + 0xa7, 0x46, 0x55, 0x38, 0x9c, 0xfd, 0x12, 0x4c, 0x29, 0x3f, 0xaf, 0x96, 0xd7, 0xdc, 0xd1, 0x9e, + 0xa1, 0x52, 0xf1, 0x09, 0x8d, 0x34, 0x01, 0xee, 0x2e, 0x83, 0x16, 0x60, 0xc2, 0x00, 0xae, 0xd6, + 0xc4, 0xf9, 0x45, 0x59, 0x69, 0x1a, 0x26, 0x1a, 0xa7, 0xe9, 0xed, 0xaf, 0x5b, 0xf0, 0x50, 0x8f, + 0x0c, 0xaf, 0x85, 0x63, 0xb4, 0xdb, 0x30, 0xd1, 0x36, 0x8b, 0x16, 0x4e, 0xf9, 0x60, 0x64, 0x94, + 0x55, 0xad, 0x4e, 0x21, 0x70, 0x9a, 0xfd, 0xe2, 0xd9, 0xef, 0xff, 0xe8, 0xf4, 0x87, 0x7e, 0xf0, + 0xa3, 0xd3, 0x1f, 0xfa, 0xe1, 0x8f, 0x4e, 0x7f, 0xe8, 0x97, 0xf6, 0x4e, 0x5b, 0xdf, 0xdf, 0x3b, + 0x6d, 0xfd, 0x60, 0xef, 0xb4, 0xf5, 0xc3, 0xbd, 0xd3, 0xd6, 0x9f, 0xef, 0x9d, 0xb6, 0xbe, 0xf4, + 0xe3, 0xd3, 0x1f, 0x7a, 0xbd, 0xb4, 0x7d, 0xe1, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x6b, 0x1c, + 0xd0, 0x1f, 0x95, 0xd0, 0x00, 0x00, } diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/types.generated.go b/vendor/k8s.io/kubernetes/pkg/api/v1/types.generated.go index 9bd5aa84..e289f199 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/types.generated.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/types.generated.go @@ -11488,7 +11488,7 @@ func (x *EmptyDirVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.Medium != "" - yyq2[1] = true + yyq2[1] = x.SizeLimit != nil var yynn2 int if yyr2 || yy2arr2 { r.EncodeArrayStart(2) @@ -11520,15 +11520,18 @@ func (x *EmptyDirVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) if yyq2[1] { - yy7 := &x.SizeLimit - yym8 := z.EncBinary() - _ = yym8 - if false { - } else if z.HasExtensions() && z.EncExt(yy7) { - } else if !yym8 && z.IsJSONHandle() { - z.EncJSONMarshal(yy7) + if x.SizeLimit == nil { + r.EncodeNil() } else { - z.EncFallback(yy7) + yym7 := z.EncBinary() + _ = yym7 + if false { + } else if z.HasExtensions() && z.EncExt(x.SizeLimit) { + } else if !yym7 && z.IsJSONHandle() { + z.EncJSONMarshal(x.SizeLimit) + } else { + z.EncFallback(x.SizeLimit) + } } } else { r.EncodeNil() @@ -11538,15 +11541,18 @@ func (x *EmptyDirVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("sizeLimit")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yy9 := &x.SizeLimit - yym10 := z.EncBinary() - _ = yym10 - if false { - } else if z.HasExtensions() && z.EncExt(yy9) { - } else if !yym10 && z.IsJSONHandle() { - z.EncJSONMarshal(yy9) + if x.SizeLimit == nil { + r.EncodeNil() } else { - z.EncFallback(yy9) + yym8 := z.EncBinary() + _ = yym8 + if false { + } else if z.HasExtensions() && z.EncExt(x.SizeLimit) { + } else if !yym8 && z.IsJSONHandle() { + z.EncJSONMarshal(x.SizeLimit) + } else { + z.EncFallback(x.SizeLimit) + } } } } @@ -11620,17 +11626,21 @@ func (x *EmptyDirVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decode } case "sizeLimit": if r.TryDecodeAsNil() { - x.SizeLimit = pkg3_resource.Quantity{} + if x.SizeLimit != nil { + x.SizeLimit = nil + } } else { - yyv5 := &x.SizeLimit + if x.SizeLimit == nil { + x.SizeLimit = new(pkg3_resource.Quantity) + } yym6 := z.DecBinary() _ = yym6 if false { - } else if z.HasExtensions() && z.DecExt(yyv5) { + } else if z.HasExtensions() && z.DecExt(x.SizeLimit) { } else if !yym6 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv5) + z.DecJSONUnmarshal(x.SizeLimit) } else { - z.DecFallback(yyv5, false) + z.DecFallback(x.SizeLimit, false) } } default: @@ -11676,17 +11686,21 @@ func (x *EmptyDirVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Deco } z.DecSendContainerState(codecSelfer_containerArrayElem1234) if r.TryDecodeAsNil() { - x.SizeLimit = pkg3_resource.Quantity{} + if x.SizeLimit != nil { + x.SizeLimit = nil + } } else { - yyv9 := &x.SizeLimit + if x.SizeLimit == nil { + x.SizeLimit = new(pkg3_resource.Quantity) + } yym10 := z.DecBinary() _ = yym10 if false { - } else if z.HasExtensions() && z.DecExt(yyv9) { + } else if z.HasExtensions() && z.DecExt(x.SizeLimit) { } else if !yym10 && z.IsJSONHandle() { - z.DecJSONUnmarshal(yyv9) + z.DecJSONUnmarshal(x.SizeLimit) } else { - z.DecFallback(yyv9, false) + z.DecFallback(x.SizeLimit, false) } } for { diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/types.go b/vendor/k8s.io/kubernetes/pkg/api/v1/types.go index cdb0088c..940f0e32 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/types.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/types.go @@ -700,7 +700,7 @@ type EmptyDirVolumeSource struct { // The default is nil which means that the limit is undefined. // More info: http://kubernetes.io/docs/user-guide/volumes#emptydir // +optional - SizeLimit resource.Quantity `json:"sizeLimit,omitempty" protobuf:"bytes,2,opt,name=sizeLimit"` + SizeLimit *resource.Quantity `json:"sizeLimit,omitempty" protobuf:"bytes,2,opt,name=sizeLimit"` } // Represents a Glusterfs mount that lasts the lifetime of a pod. diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.conversion.go index 9897d471..4492a063 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.conversion.go @@ -21,6 +21,7 @@ limitations under the License. package v1 import ( + resource "k8s.io/apimachinery/pkg/api/resource" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" conversion "k8s.io/apimachinery/pkg/conversion" runtime "k8s.io/apimachinery/pkg/runtime" @@ -1240,7 +1241,7 @@ func Convert_api_DownwardAPIVolumeSource_To_v1_DownwardAPIVolumeSource(in *api.D func autoConvert_v1_EmptyDirVolumeSource_To_api_EmptyDirVolumeSource(in *EmptyDirVolumeSource, out *api.EmptyDirVolumeSource, s conversion.Scope) error { out.Medium = api.StorageMedium(in.Medium) - out.SizeLimit = in.SizeLimit + out.SizeLimit = (*resource.Quantity)(unsafe.Pointer(in.SizeLimit)) return nil } @@ -1251,7 +1252,7 @@ func Convert_v1_EmptyDirVolumeSource_To_api_EmptyDirVolumeSource(in *EmptyDirVol func autoConvert_api_EmptyDirVolumeSource_To_v1_EmptyDirVolumeSource(in *api.EmptyDirVolumeSource, out *EmptyDirVolumeSource, s conversion.Scope) error { out.Medium = StorageMedium(in.Medium) - out.SizeLimit = in.SizeLimit + out.SizeLimit = (*resource.Quantity)(unsafe.Pointer(in.SizeLimit)) return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.deepcopy.go index b909d9b3..18cd4311 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.deepcopy.go @@ -21,6 +21,7 @@ limitations under the License. package v1 import ( + resource "k8s.io/apimachinery/pkg/api/resource" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" conversion "k8s.io/apimachinery/pkg/conversion" runtime "k8s.io/apimachinery/pkg/runtime" @@ -858,7 +859,11 @@ func DeepCopy_v1_EmptyDirVolumeSource(in interface{}, out interface{}, c *conver in := in.(*EmptyDirVolumeSource) out := out.(*EmptyDirVolumeSource) *out = *in - out.SizeLimit = in.SizeLimit.DeepCopy() + if in.SizeLimit != nil { + in, out := &in.SizeLimit, &out.SizeLimit + *out = new(resource.Quantity) + **out = (*in).DeepCopy() + } return nil } } diff --git a/vendor/k8s.io/kubernetes/pkg/api/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/api/validation/validation.go index b8c09113..859313b3 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/validation/validation.go +++ b/vendor/k8s.io/kubernetes/pkg/api/validation/validation.go @@ -399,10 +399,13 @@ func validateVolumeSource(source *api.VolumeSource, fldPath *field.Path) field.E if source.EmptyDir != nil { numVolumes++ if !utilfeature.DefaultFeatureGate.Enabled(features.LocalStorageCapacityIsolation) { - unsetSizeLimit := resource.Quantity{} - if unsetSizeLimit.Cmp(source.EmptyDir.SizeLimit) != 0 { + if source.EmptyDir.SizeLimit != nil && source.EmptyDir.SizeLimit.Cmp(resource.Quantity{}) != 0 { allErrs = append(allErrs, field.Forbidden(fldPath.Child("emptyDir").Child("sizeLimit"), "SizeLimit field disabled by feature-gate for EmptyDir volumes")) } + } else { + if source.EmptyDir.SizeLimit != nil && source.EmptyDir.SizeLimit.Cmp(resource.Quantity{}) < 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("emptyDir").Child("sizeLimit"), "SizeLimit field must be a valid resource quantity")) + } } } if source.HostPath != nil { @@ -3353,6 +3356,16 @@ func ValidateNodeUpdate(node, oldNode *api.Node) field.ErrorList { allErrs = append(allErrs, field.Forbidden(field.NewPath("spec", "podCIDR"), "node updates may not change podCIDR except from \"\" to valid")) } } + + // Allow controller manager updating provider ID when not set + if len(oldNode.Spec.ProviderID) == 0 { + oldNode.Spec.ProviderID = node.Spec.ProviderID + } else { + if oldNode.Spec.ProviderID != node.Spec.ProviderID { + allErrs = append(allErrs, field.Forbidden(field.NewPath("spec", "providerID"), "node updates may not change providerID except from \"\" to valid")) + } + } + // TODO: move reset function to its own location // Ignore metadata changes now that they have been tested oldNode.ObjectMeta = node.ObjectMeta diff --git a/vendor/k8s.io/kubernetes/pkg/api/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/api/zz_generated.deepcopy.go index cc111561..0aa95e10 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/zz_generated.deepcopy.go +++ b/vendor/k8s.io/kubernetes/pkg/api/zz_generated.deepcopy.go @@ -21,6 +21,7 @@ limitations under the License. package api import ( + resource "k8s.io/apimachinery/pkg/api/resource" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" conversion "k8s.io/apimachinery/pkg/conversion" fields "k8s.io/apimachinery/pkg/fields" @@ -860,7 +861,11 @@ func DeepCopy_api_EmptyDirVolumeSource(in interface{}, out interface{}, c *conve in := in.(*EmptyDirVolumeSource) out := out.(*EmptyDirVolumeSource) *out = *in - out.SizeLimit = in.SizeLimit.DeepCopy() + if in.SizeLimit != nil { + in, out := &in.SizeLimit, &out.SizeLimit + *out = new(resource.Quantity) + **out = (*in).DeepCopy() + } return nil } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2alpha1/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2alpha1/generated.pb.go index a2109009..65e4b919 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2alpha1/generated.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2alpha1/generated.pb.go @@ -3314,89 +3314,88 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 1331 bytes of a gzipped FileDescriptorProto + // 1323 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x57, 0x5b, 0x6f, 0x1b, 0x45, - 0x1b, 0xce, 0x3a, 0x4e, 0x9a, 0x6f, 0x9c, 0x26, 0xfd, 0xa6, 0x55, 0xeb, 0xa6, 0xd4, 0x8e, 0x56, - 0x08, 0xb5, 0x08, 0x76, 0xa9, 0x29, 0x88, 0x0a, 0x01, 0x8a, 0xcd, 0xa1, 0x15, 0x71, 0x0f, 0xd3, - 0x50, 0x21, 0x40, 0x82, 0xc9, 0x7a, 0xea, 0x0c, 0xf1, 0x1e, 0xb4, 0x33, 0xb6, 0x48, 0xa5, 0x4a, - 0xdc, 0x70, 0x87, 0x04, 0x37, 0xfc, 0x04, 0x24, 0xfe, 0x01, 0xd7, 0x20, 0x21, 0xf5, 0xb2, 0x97, - 0xe5, 0xc6, 0xa2, 0xee, 0x1d, 0x3f, 0x21, 0x12, 0x07, 0xcd, 0x61, 0x4f, 0x5e, 0x6f, 0x1a, 0x87, - 0xb4, 0x82, 0x3b, 0x7b, 0xe6, 0x7d, 0x9f, 0xe7, 0x3d, 0x3c, 0xf3, 0xce, 0x2c, 0x78, 0x6b, 0xfb, - 0x35, 0x66, 0x51, 0xdf, 0xde, 0xee, 0x6f, 0x92, 0xd0, 0x23, 0x9c, 0x30, 0x3b, 0xd8, 0xee, 0xda, - 0x38, 0xa0, 0xcc, 0xc6, 0x7d, 0xee, 0x33, 0x07, 0xf7, 0xa8, 0xd7, 0xb5, 0x07, 0x0d, 0xdc, 0x0b, - 0xb6, 0xf0, 0x05, 0xbb, 0x4b, 0x3c, 0x12, 0x62, 0x4e, 0x3a, 0x56, 0x10, 0xfa, 0xdc, 0x87, 0xb6, - 0x02, 0xb0, 0x12, 0x00, 0x2b, 0xd8, 0xee, 0x5a, 0x02, 0xc0, 0x4a, 0x01, 0x58, 0x11, 0xc0, 0xca, - 0x8b, 0x5d, 0xca, 0xb7, 0xfa, 0x9b, 0x96, 0xe3, 0xbb, 0x76, 0xd7, 0xef, 0xfa, 0xb6, 0xc4, 0xd9, - 0xec, 0xdf, 0x96, 0xff, 0xe4, 0x1f, 0xf9, 0x4b, 0xe1, 0xaf, 0x5c, 0xd4, 0x01, 0xe2, 0x80, 0xba, - 0xd8, 0xd9, 0xa2, 0x1e, 0x09, 0x77, 0xa2, 0x10, 0xed, 0x90, 0x30, 0xbf, 0x1f, 0x3a, 0x64, 0x3c, - 0xaa, 0x3d, 0xbd, 0x98, 0xed, 0x12, 0x8e, 0xed, 0x41, 0x2e, 0x97, 0x15, 0xbb, 0xc8, 0x2b, 0xec, - 0x7b, 0x9c, 0xba, 0x79, 0x9a, 0x57, 0x1f, 0xe7, 0xc0, 0x9c, 0x2d, 0xe2, 0xe2, 0x9c, 0xdf, 0xcb, - 0x45, 0x7e, 0x7d, 0x4e, 0x7b, 0x36, 0xf5, 0x38, 0xe3, 0x61, 0xce, 0xe9, 0x85, 0xc2, 0x56, 0x4d, - 0xca, 0xe5, 0xd2, 0x7e, 0x1b, 0x9b, 0x73, 0x35, 0xbf, 0x33, 0xc0, 0x99, 0x56, 0xe8, 0x33, 0x76, - 0x8b, 0x84, 0x8c, 0xfa, 0xde, 0xb5, 0xcd, 0xcf, 0x89, 0xc3, 0x11, 0xb9, 0x4d, 0x42, 0xe2, 0x39, - 0x04, 0xae, 0x82, 0xf2, 0x36, 0xf5, 0x3a, 0x55, 0x63, 0xd5, 0x38, 0xf7, 0xbf, 0xe6, 0xe2, 0xbd, - 0x61, 0x7d, 0x66, 0x34, 0xac, 0x97, 0xdf, 0xa7, 0x5e, 0x07, 0xc9, 0x1d, 0x61, 0xe1, 0x61, 0x97, - 0x54, 0x4b, 0x59, 0x8b, 0xab, 0xd8, 0x25, 0x48, 0xee, 0xc0, 0x06, 0x00, 0x38, 0xa0, 0x9a, 0xa0, - 0x3a, 0x2b, 0xed, 0xa0, 0xb6, 0x03, 0x6b, 0xd7, 0xaf, 0xe8, 0x1d, 0x94, 0xb2, 0x32, 0x1f, 0x95, - 0xc0, 0xa9, 0xcb, 0x7e, 0x48, 0xef, 0xf8, 0x1e, 0xc7, 0xbd, 0xeb, 0x7e, 0x67, 0x4d, 0xe7, 0x41, - 0x42, 0xf8, 0x19, 0x58, 0x10, 0x5d, 0xed, 0x60, 0x8e, 0x65, 0x5c, 0x95, 0xc6, 0x4b, 0x96, 0x56, - 0x66, 0xba, 0xc8, 0x89, 0x36, 0x85, 0xb5, 0x35, 0xb8, 0x60, 0xa9, 0xe4, 0xda, 0x84, 0xe3, 0x84, - 0x3f, 0x59, 0x43, 0x31, 0x2a, 0xf4, 0x40, 0x99, 0x05, 0xc4, 0x91, 0x39, 0x55, 0x1a, 0xeb, 0xd6, - 0x94, 0xba, 0xb7, 0x0a, 0x22, 0xbf, 0x19, 0x10, 0x27, 0xa9, 0x90, 0xf8, 0x87, 0x24, 0x0f, 0x1c, - 0x80, 0x79, 0xc6, 0x31, 0xef, 0x33, 0x59, 0x9d, 0x4a, 0xe3, 0xea, 0xa1, 0x31, 0x4a, 0xd4, 0xe6, - 0x92, 0xe6, 0x9c, 0x57, 0xff, 0x91, 0x66, 0x33, 0xbf, 0x99, 0x05, 0xab, 0x05, 0x9e, 0x2d, 0xdf, - 0xeb, 0x50, 0x4e, 0x7d, 0x0f, 0x5e, 0x06, 0x65, 0xbe, 0x13, 0x10, 0x2d, 0x81, 0x8b, 0x51, 0xf8, - 0x1b, 0x3b, 0x01, 0xd9, 0x1d, 0xd6, 0x9f, 0x7d, 0x9c, 0xbf, 0xb0, 0x43, 0x12, 0x01, 0xde, 0x8a, - 0xd3, 0x54, 0x62, 0x79, 0x33, 0x1b, 0xd6, 0xee, 0xb0, 0xbe, 0xa7, 0xee, 0xad, 0x18, 0x33, 0x9b, - 0x06, 0x1c, 0x00, 0xd8, 0xc3, 0x8c, 0x6f, 0x84, 0xd8, 0x63, 0x8a, 0x93, 0xba, 0x44, 0x97, 0xf2, - 0xf9, 0xfd, 0x49, 0x43, 0x78, 0x34, 0x57, 0x74, 0x3c, 0x70, 0x3d, 0x87, 0x86, 0x26, 0x30, 0xc0, - 0xe7, 0xc0, 0x7c, 0x48, 0x30, 0xf3, 0xbd, 0x6a, 0x59, 0xe6, 0x13, 0x97, 0x19, 0xc9, 0x55, 0xa4, - 0x77, 0xe1, 0x79, 0x70, 0xc4, 0x25, 0x8c, 0xe1, 0x2e, 0xa9, 0xce, 0x49, 0xc3, 0x65, 0x6d, 0x78, - 0xa4, 0xad, 0x96, 0x51, 0xb4, 0x6f, 0xfe, 0x6e, 0x80, 0x33, 0x05, 0x15, 0x5d, 0xa7, 0x8c, 0xc3, - 0x4f, 0x72, 0xda, 0xb7, 0xf6, 0x97, 0xa0, 0xf0, 0x96, 0xca, 0x3f, 0xa6, 0xb9, 0x17, 0xa2, 0x95, - 0x94, 0xee, 0x5d, 0x30, 0x47, 0x39, 0x71, 0x45, 0x7f, 0x66, 0xcf, 0x55, 0x1a, 0x97, 0x0f, 0x4b, - 0x86, 0xcd, 0xa3, 0x9a, 0x74, 0xee, 0x8a, 0x80, 0x47, 0x8a, 0xc5, 0xfc, 0xb3, 0x54, 0x98, 0xac, - 0x38, 0x1c, 0xf0, 0x6b, 0x03, 0x2c, 0xc9, 0xbf, 0x1b, 0x38, 0xec, 0x12, 0x31, 0x95, 0x74, 0xce, - 0xd3, 0x9f, 0xc8, 0x3d, 0x66, 0x5c, 0xf3, 0xa4, 0x0e, 0x6e, 0xe9, 0x66, 0x86, 0x0b, 0x8d, 0x71, - 0xc3, 0x0b, 0xa0, 0xe2, 0x52, 0x0f, 0x91, 0xa0, 0x47, 0x1d, 0xac, 0x34, 0x3c, 0xd7, 0x5c, 0x1e, - 0x0d, 0xeb, 0x95, 0x76, 0xb2, 0x8c, 0xd2, 0x36, 0xf0, 0x15, 0x50, 0x71, 0xf1, 0x17, 0xb1, 0xcb, - 0xac, 0x74, 0x39, 0xae, 0xf9, 0x2a, 0xed, 0x64, 0x0b, 0xa5, 0xed, 0xe0, 0x6d, 0x21, 0x18, 0x1e, - 0x52, 0x87, 0x55, 0xcb, 0xb2, 0x13, 0xaf, 0x4f, 0x9d, 0x70, 0x5b, 0xfa, 0xcb, 0x89, 0x93, 0x52, - 0x9b, 0xc4, 0x44, 0x11, 0xb8, 0xf9, 0x6b, 0x19, 0x9c, 0xdd, 0x73, 0x72, 0xc0, 0x77, 0x01, 0xf4, - 0x37, 0x19, 0x09, 0x07, 0xa4, 0xf3, 0x9e, 0xba, 0x3a, 0xc4, 0x0c, 0x17, 0x5d, 0x98, 0x6d, 0x9e, - 0x14, 0x47, 0xe5, 0x5a, 0x6e, 0x17, 0x4d, 0xf0, 0x80, 0x0e, 0x38, 0x2a, 0x0e, 0x90, 0xaa, 0x30, - 0xd5, 0xd7, 0xc5, 0x74, 0xa7, 0xf3, 0xff, 0xa3, 0x61, 0xfd, 0xe8, 0x7a, 0x1a, 0x04, 0x65, 0x31, - 0xe1, 0x1a, 0x58, 0x76, 0xfa, 0x61, 0x48, 0x3c, 0x3e, 0x56, 0xf1, 0x53, 0xba, 0x02, 0xcb, 0xad, - 0xec, 0x36, 0x1a, 0xb7, 0x17, 0x10, 0x1d, 0xc2, 0x68, 0x48, 0x3a, 0x31, 0x44, 0x39, 0x0b, 0xf1, - 0x76, 0x76, 0x1b, 0x8d, 0xdb, 0xc3, 0xbb, 0x60, 0x49, 0xa3, 0xea, 0x7a, 0x57, 0xe7, 0x64, 0x0f, - 0xdf, 0x38, 0x68, 0x0f, 0xd5, 0x0c, 0x8f, 0x55, 0xda, 0xca, 0x80, 0xa3, 0x31, 0x32, 0xf8, 0x95, - 0x01, 0x80, 0x13, 0x0d, 0x4a, 0x56, 0x9d, 0x97, 0xdc, 0x37, 0x0e, 0xeb, 0x24, 0xc7, 0x23, 0x38, - 0xb9, 0x41, 0xe3, 0x25, 0x86, 0x52, 0xc4, 0xe6, 0x1f, 0x25, 0x00, 0x12, 0x11, 0xc2, 0x8b, 0x99, - 0x5b, 0x64, 0x75, 0xec, 0x16, 0x39, 0xa6, 0x2d, 0xe5, 0x0b, 0x2f, 0x75, 0x63, 0x74, 0xc1, 0xbc, - 0x2f, 0x4f, 0xab, 0xd6, 0x4b, 0x6b, 0xea, 0x3c, 0xe2, 0xfb, 0x3d, 0x86, 0x6f, 0x02, 0x31, 0xa2, - 0xf5, 0x10, 0xd0, 0xf0, 0xf0, 0x53, 0x50, 0x0e, 0xfc, 0x4e, 0x74, 0xff, 0xae, 0x4d, 0x4d, 0x73, - 0xdd, 0xef, 0xb0, 0x0c, 0xc9, 0x82, 0xc8, 0x4e, 0xac, 0x22, 0x09, 0x0c, 0x7d, 0xb0, 0x10, 0xbd, - 0x60, 0xa5, 0xa2, 0x2a, 0x8d, 0x77, 0xa6, 0x26, 0x41, 0x1a, 0x20, 0x43, 0xb4, 0x28, 0x66, 0x79, - 0xb4, 0x83, 0x62, 0x12, 0xf3, 0xaf, 0x12, 0x58, 0x4c, 0x0b, 0xe8, 0xdf, 0xd1, 0x01, 0xa5, 0xe5, - 0x27, 0xdc, 0x01, 0x45, 0xf2, 0x14, 0x3a, 0xa0, 0x88, 0x8a, 0x3a, 0xf0, 0x7d, 0x09, 0xc0, 0xbc, - 0xfc, 0x20, 0x07, 0xf3, 0x5c, 0xde, 0x29, 0x4f, 0xe4, 0x32, 0x8b, 0xdf, 0x20, 0xfa, 0xde, 0xd2, - 0x5c, 0xe2, 0x11, 0xae, 0xa6, 0xfe, 0xd5, 0xe4, 0xb1, 0x1e, 0x1f, 0xe1, 0x76, 0xbc, 0x83, 0x52, - 0x56, 0x90, 0x80, 0x8a, 0xf2, 0xbe, 0x85, 0x7b, 0xfd, 0xe8, 0x41, 0xb5, 0xe7, 0x7b, 0xc3, 0x8a, - 0x92, 0xb7, 0x6e, 0xf4, 0xb1, 0xc7, 0x29, 0xdf, 0x49, 0x6e, 0xbb, 0x8d, 0x04, 0x0a, 0xa5, 0x71, - 0xcd, 0x1f, 0xc6, 0xeb, 0xa4, 0xf4, 0xfa, 0xdf, 0xa9, 0xd3, 0x16, 0x58, 0xd4, 0x43, 0xf8, 0x9f, - 0x14, 0xea, 0x84, 0x66, 0x59, 0x6c, 0xa5, 0xb0, 0x50, 0x06, 0xd9, 0xfc, 0xd9, 0x00, 0xc7, 0xc6, - 0x47, 0xcd, 0x58, 0xc8, 0xc6, 0xbe, 0x42, 0xbe, 0x03, 0xa0, 0x4a, 0x78, 0x6d, 0x40, 0x42, 0xdc, - 0x25, 0x2a, 0xf0, 0xd2, 0x81, 0x02, 0x8f, 0x9f, 0xcd, 0x1b, 0x39, 0x44, 0x34, 0x81, 0xc5, 0xfc, - 0x25, 0x9b, 0x84, 0xea, 0xf6, 0x41, 0x92, 0xb8, 0x0b, 0x8e, 0xeb, 0xea, 0x1c, 0x42, 0x16, 0x67, - 0x34, 0xd9, 0xf1, 0x56, 0x1e, 0x12, 0x4d, 0xe2, 0x31, 0x7f, 0x2c, 0x81, 0x13, 0x93, 0x46, 0x32, - 0x6c, 0xeb, 0x4f, 0x62, 0x95, 0xc5, 0xa5, 0xf4, 0x27, 0xf1, 0xee, 0xb0, 0x7e, 0x7e, 0xcf, 0x6f, - 0x9c, 0x08, 0x30, 0xf5, 0xfd, 0xfc, 0x21, 0xa8, 0x66, 0xaa, 0xf8, 0x01, 0xa7, 0x3d, 0x7a, 0x47, - 0xbd, 0xc4, 0xd4, 0x23, 0xf4, 0x99, 0xd1, 0xb0, 0x5e, 0xdd, 0x28, 0xb0, 0x41, 0x85, 0xde, 0xe2, - 0xc3, 0x69, 0x82, 0x0a, 0x0e, 0x26, 0xdf, 0x93, 0x53, 0x28, 0xe0, 0xa7, 0x7c, 0xe5, 0x94, 0x0a, - 0x0e, 0xb9, 0x72, 0x1f, 0x83, 0xd3, 0xd9, 0xc6, 0xe5, 0x4b, 0x77, 0x76, 0x34, 0xac, 0x9f, 0x6e, - 0x15, 0x19, 0xa1, 0x62, 0xff, 0x22, 0xf5, 0xcd, 0x3e, 0x1d, 0xf5, 0x35, 0xad, 0x7b, 0x0f, 0x6b, - 0x33, 0xf7, 0x1f, 0xd6, 0x66, 0x1e, 0x3c, 0xac, 0xcd, 0x7c, 0x39, 0xaa, 0x19, 0xf7, 0x46, 0x35, - 0xe3, 0xfe, 0xa8, 0x66, 0x3c, 0x18, 0xd5, 0x8c, 0xdf, 0x46, 0x35, 0xe3, 0xdb, 0x47, 0xb5, 0x99, - 0x8f, 0x16, 0xa2, 0x61, 0xf8, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4c, 0xa9, 0x91, 0xe9, 0xfe, - 0x13, 0x00, 0x00, + 0x14, 0xce, 0x3a, 0x4e, 0x1a, 0xc6, 0x69, 0x52, 0xa6, 0x55, 0xeb, 0xa6, 0xd4, 0x8e, 0x56, 0x08, + 0xb5, 0x08, 0x76, 0xa9, 0x29, 0x08, 0x84, 0x00, 0xc5, 0xe6, 0xd2, 0x8a, 0xb8, 0x97, 0x69, 0xa8, + 0x10, 0x20, 0xc1, 0x64, 0x3d, 0x75, 0x86, 0x78, 0x2f, 0xda, 0x19, 0x5b, 0xa4, 0x52, 0x25, 0x5e, + 0x78, 0x43, 0x82, 0x17, 0x7e, 0x02, 0x12, 0xff, 0x80, 0x67, 0x90, 0x90, 0xfa, 0xd8, 0xc7, 0xf2, + 0x62, 0x51, 0xf7, 0x8d, 0x9f, 0x50, 0x89, 0x8b, 0xe6, 0xb2, 0x37, 0xaf, 0xd7, 0xad, 0x43, 0x5a, + 0xc1, 0x9b, 0x3d, 0x73, 0xce, 0xf7, 0x9d, 0xcb, 0x37, 0x67, 0x66, 0xc1, 0xdb, 0xbb, 0xaf, 0x31, + 0x8b, 0xfa, 0xf6, 0x6e, 0x7f, 0x9b, 0x84, 0x1e, 0xe1, 0x84, 0xd9, 0xc1, 0x6e, 0xd7, 0xc6, 0x01, + 0x65, 0x36, 0xee, 0x73, 0x9f, 0x39, 0xb8, 0x47, 0xbd, 0xae, 0x3d, 0x68, 0xe0, 0x5e, 0xb0, 0x83, + 0xcf, 0xd9, 0x5d, 0xe2, 0x91, 0x10, 0x73, 0xd2, 0xb1, 0x82, 0xd0, 0xe7, 0x3e, 0xb4, 0x15, 0x80, + 0x95, 0x00, 0x58, 0xc1, 0x6e, 0xd7, 0x12, 0x00, 0x56, 0x0a, 0xc0, 0x8a, 0x00, 0xd6, 0x5e, 0xec, + 0x52, 0xbe, 0xd3, 0xdf, 0xb6, 0x1c, 0xdf, 0xb5, 0xbb, 0x7e, 0xd7, 0xb7, 0x25, 0xce, 0x76, 0xff, + 0x86, 0xfc, 0x27, 0xff, 0xc8, 0x5f, 0x0a, 0x7f, 0xed, 0xbc, 0x0e, 0x10, 0x07, 0xd4, 0xc5, 0xce, + 0x0e, 0xf5, 0x48, 0xb8, 0x17, 0x85, 0x68, 0x87, 0x84, 0xf9, 0xfd, 0xd0, 0x21, 0xe3, 0x51, 0x4d, + 0xf5, 0x62, 0xb6, 0x4b, 0x38, 0xb6, 0x07, 0xb9, 0x5c, 0xd6, 0xec, 0x22, 0xaf, 0xb0, 0xef, 0x71, + 0xea, 0xe6, 0x69, 0x5e, 0x7d, 0x98, 0x03, 0x73, 0x76, 0x88, 0x8b, 0x73, 0x7e, 0x2f, 0x17, 0xf9, + 0xf5, 0x39, 0xed, 0xd9, 0xd4, 0xe3, 0x8c, 0x87, 0x39, 0xa7, 0x17, 0x0a, 0x5b, 0x35, 0x21, 0x17, + 0xf3, 0x7b, 0x03, 0x9c, 0x6a, 0x85, 0x3e, 0x63, 0xd7, 0x49, 0xc8, 0xa8, 0xef, 0x5d, 0xde, 0xfe, + 0x82, 0x38, 0x1c, 0x91, 0x1b, 0x24, 0x24, 0x9e, 0x43, 0xe0, 0x3a, 0x28, 0xef, 0x52, 0xaf, 0x53, + 0x35, 0xd6, 0x8d, 0x33, 0x4f, 0x35, 0x97, 0x6f, 0x0f, 0xeb, 0x73, 0xa3, 0x61, 0xbd, 0xfc, 0x01, + 0xf5, 0x3a, 0x48, 0xee, 0x08, 0x0b, 0x0f, 0xbb, 0xa4, 0x5a, 0xca, 0x5a, 0x5c, 0xc2, 0x2e, 0x41, + 0x72, 0x07, 0x36, 0x00, 0xc0, 0x01, 0xd5, 0x04, 0xd5, 0x79, 0x69, 0x07, 0xb5, 0x1d, 0xd8, 0xb8, + 0x72, 0x51, 0xef, 0xa0, 0x94, 0x95, 0x79, 0xbf, 0x04, 0x4e, 0x5c, 0xf0, 0x43, 0x7a, 0xd3, 0xf7, + 0x38, 0xee, 0x5d, 0xf1, 0x3b, 0x1b, 0x5a, 0x24, 0x24, 0x84, 0x9f, 0x83, 0x25, 0xd1, 0x9a, 0x0e, + 0xe6, 0x58, 0xc6, 0x55, 0x69, 0xbc, 0x64, 0x69, 0x79, 0xa5, 0x2b, 0x95, 0x08, 0x4c, 0x58, 0x5b, + 0x83, 0x73, 0x96, 0x4a, 0xae, 0x4d, 0x38, 0x4e, 0xf8, 0x93, 0x35, 0x14, 0xa3, 0x42, 0x0f, 0x94, + 0x59, 0x40, 0x1c, 0x99, 0x53, 0xa5, 0xb1, 0x69, 0xcd, 0x28, 0x5e, 0xab, 0x20, 0xf2, 0x6b, 0x01, + 0x71, 0x92, 0x0a, 0x89, 0x7f, 0x48, 0xf2, 0xc0, 0x01, 0x58, 0x64, 0x1c, 0xf3, 0x3e, 0x93, 0xd5, + 0xa9, 0x34, 0x2e, 0x1d, 0x18, 0xa3, 0x44, 0x6d, 0xae, 0x68, 0xce, 0x45, 0xf5, 0x1f, 0x69, 0x36, + 0xf3, 0xdb, 0x79, 0xb0, 0x5e, 0xe0, 0xd9, 0xf2, 0xbd, 0x0e, 0xe5, 0xd4, 0xf7, 0xe0, 0x05, 0x50, + 0xe6, 0x7b, 0x01, 0xd1, 0x12, 0x38, 0x1f, 0x85, 0xbf, 0xb5, 0x17, 0x90, 0x07, 0xc3, 0xfa, 0xb3, + 0x0f, 0xf3, 0x17, 0x76, 0x48, 0x22, 0xc0, 0xeb, 0x71, 0x9a, 0x4a, 0x2c, 0x6f, 0x65, 0xc3, 0x7a, + 0x30, 0xac, 0x4f, 0x15, 0xaf, 0x15, 0x63, 0x66, 0xd3, 0x80, 0x03, 0x00, 0x7b, 0x98, 0xf1, 0xad, + 0x10, 0x7b, 0x4c, 0x71, 0x52, 0x97, 0xe8, 0x52, 0x3e, 0xff, 0x68, 0xd2, 0x10, 0x1e, 0xcd, 0x35, + 0x1d, 0x0f, 0xdc, 0xcc, 0xa1, 0xa1, 0x09, 0x0c, 0xf0, 0x39, 0xb0, 0x18, 0x12, 0xcc, 0x7c, 0xaf, + 0x5a, 0x96, 0xf9, 0xc4, 0x65, 0x46, 0x72, 0x15, 0xe9, 0x5d, 0x78, 0x16, 0x1c, 0x72, 0x09, 0x63, + 0xb8, 0x4b, 0xaa, 0x0b, 0xd2, 0x70, 0x55, 0x1b, 0x1e, 0x6a, 0xab, 0x65, 0x14, 0xed, 0x9b, 0x7f, + 0x18, 0xe0, 0x54, 0x41, 0x45, 0x37, 0x29, 0xe3, 0xf0, 0xd3, 0x9c, 0xf6, 0xad, 0x47, 0x4b, 0x50, + 0x78, 0x4b, 0xe5, 0x1f, 0xd1, 0xdc, 0x4b, 0xd1, 0x4a, 0x4a, 0xf7, 0x2e, 0x58, 0xa0, 0x9c, 0xb8, + 0xa2, 0x3f, 0xf3, 0x67, 0x2a, 0x8d, 0x0b, 0x07, 0x25, 0xc3, 0xe6, 0x61, 0x4d, 0xba, 0x70, 0x51, + 0xc0, 0x23, 0xc5, 0x62, 0xfe, 0x55, 0x2a, 0x4c, 0x56, 0x1c, 0x0e, 0xf8, 0x8d, 0x01, 0x56, 0xe4, + 0xdf, 0x2d, 0x1c, 0x76, 0x89, 0x98, 0x4a, 0x3a, 0xe7, 0xd9, 0x4f, 0xe4, 0x94, 0x19, 0xd7, 0x3c, + 0xae, 0x83, 0x5b, 0xb9, 0x96, 0xe1, 0x42, 0x63, 0xdc, 0xf0, 0x1c, 0xa8, 0xb8, 0xd4, 0x43, 0x24, + 0xe8, 0x51, 0x07, 0x2b, 0x0d, 0x2f, 0x34, 0x57, 0x47, 0xc3, 0x7a, 0xa5, 0x9d, 0x2c, 0xa3, 0xb4, + 0x0d, 0x7c, 0x05, 0x54, 0x5c, 0xfc, 0x65, 0xec, 0x32, 0x2f, 0x5d, 0x8e, 0x6a, 0xbe, 0x4a, 0x3b, + 0xd9, 0x42, 0x69, 0x3b, 0x78, 0x43, 0x08, 0x86, 0x87, 0xd4, 0x61, 0xd5, 0xb2, 0xec, 0xc4, 0x1b, + 0x33, 0x27, 0xdc, 0x96, 0xfe, 0x72, 0xe2, 0xa4, 0xd4, 0x26, 0x31, 0x51, 0x04, 0x6e, 0xfe, 0x56, + 0x06, 0xa7, 0xa7, 0x4e, 0x0e, 0xf8, 0x1e, 0x80, 0xfe, 0x36, 0x23, 0xe1, 0x80, 0x74, 0xde, 0x57, + 0x57, 0x87, 0x98, 0xe1, 0xa2, 0x0b, 0xf3, 0xcd, 0xe3, 0xe2, 0xa8, 0x5c, 0xce, 0xed, 0xa2, 0x09, + 0x1e, 0xd0, 0x01, 0x87, 0xc5, 0x01, 0x52, 0x15, 0xa6, 0xfa, 0xba, 0x98, 0xed, 0x74, 0x3e, 0x3d, + 0x1a, 0xd6, 0x0f, 0x6f, 0xa6, 0x41, 0x50, 0x16, 0x13, 0x6e, 0x80, 0x55, 0xa7, 0x1f, 0x86, 0xc4, + 0xe3, 0x63, 0x15, 0x3f, 0xa1, 0x2b, 0xb0, 0xda, 0xca, 0x6e, 0xa3, 0x71, 0x7b, 0x01, 0xd1, 0x21, + 0x8c, 0x86, 0xa4, 0x13, 0x43, 0x94, 0xb3, 0x10, 0xef, 0x64, 0xb7, 0xd1, 0xb8, 0x3d, 0xbc, 0x05, + 0x56, 0x34, 0xaa, 0xae, 0x77, 0x75, 0x41, 0xf6, 0xf0, 0xcd, 0xfd, 0xf6, 0x50, 0xcd, 0xf0, 0x58, + 0xa5, 0xad, 0x0c, 0x38, 0x1a, 0x23, 0x83, 0x5f, 0x1b, 0x00, 0x38, 0xd1, 0xa0, 0x64, 0xd5, 0x45, + 0xc9, 0x7d, 0xf5, 0xa0, 0x4e, 0x72, 0x3c, 0x82, 0x93, 0x1b, 0x34, 0x5e, 0x62, 0x28, 0x45, 0x6c, + 0xfe, 0x59, 0x02, 0x20, 0x11, 0x21, 0x3c, 0x9f, 0xb9, 0x45, 0xd6, 0xc7, 0x6e, 0x91, 0x23, 0xda, + 0x52, 0x3e, 0xd3, 0x52, 0x37, 0x46, 0x17, 0x2c, 0xfa, 0xf2, 0xb4, 0x6a, 0xbd, 0xb4, 0x66, 0xce, + 0x23, 0xbe, 0xdf, 0x63, 0xf8, 0x26, 0x10, 0x23, 0x5a, 0x0f, 0x01, 0x0d, 0x0f, 0x3f, 0x03, 0xe5, + 0xc0, 0xef, 0x44, 0xf7, 0xef, 0xc6, 0xcc, 0x34, 0x57, 0xfc, 0x0e, 0xcb, 0x90, 0x2c, 0x89, 0xec, + 0xc4, 0x2a, 0x92, 0xc0, 0xd0, 0x07, 0x4b, 0xd1, 0x33, 0x54, 0x2a, 0xaa, 0xd2, 0x78, 0x77, 0x66, + 0x12, 0xa4, 0x01, 0x32, 0x44, 0xcb, 0x62, 0x96, 0x47, 0x3b, 0x28, 0x26, 0x31, 0xff, 0x2e, 0x81, + 0xe5, 0xb4, 0x80, 0xfe, 0x1b, 0x1d, 0x50, 0x5a, 0x7e, 0xcc, 0x1d, 0x50, 0x24, 0x4f, 0xa0, 0x03, + 0x8a, 0xa8, 0xa8, 0x03, 0x3f, 0x94, 0x00, 0xcc, 0xcb, 0x0f, 0x72, 0xb0, 0xc8, 0xe5, 0x9d, 0xf2, + 0x58, 0x2e, 0xb3, 0xf8, 0x0d, 0xa2, 0xef, 0x2d, 0xcd, 0x25, 0x1e, 0xe1, 0x6a, 0xea, 0x5f, 0x4a, + 0x1e, 0xeb, 0xf1, 0x11, 0x6e, 0xc7, 0x3b, 0x28, 0x65, 0x05, 0x09, 0xa8, 0x28, 0xef, 0xeb, 0xb8, + 0xd7, 0x8f, 0x1e, 0x54, 0x53, 0xdf, 0x1b, 0x56, 0x94, 0xbc, 0x75, 0xb5, 0x8f, 0x3d, 0x4e, 0xf9, + 0x5e, 0x72, 0xdb, 0x6d, 0x25, 0x50, 0x28, 0x8d, 0x6b, 0xfe, 0x38, 0x5e, 0x27, 0xa5, 0xd7, 0xff, + 0x4f, 0x9d, 0x76, 0xc0, 0xb2, 0x1e, 0xc2, 0xff, 0xa6, 0x50, 0xc7, 0x34, 0xcb, 0x72, 0x2b, 0x85, + 0x85, 0x32, 0xc8, 0xe6, 0x2f, 0x06, 0x38, 0x32, 0x3e, 0x6a, 0xc6, 0x42, 0x36, 0x1e, 0x29, 0xe4, + 0x9b, 0x00, 0xaa, 0x84, 0x37, 0x06, 0x24, 0xc4, 0x5d, 0xa2, 0x02, 0x2f, 0xed, 0x2b, 0xf0, 0xf8, + 0xd9, 0xbc, 0x95, 0x43, 0x44, 0x13, 0x58, 0xcc, 0x5f, 0xb3, 0x49, 0xa8, 0x6e, 0xef, 0x27, 0x89, + 0x5b, 0xe0, 0xa8, 0xae, 0xce, 0x01, 0x64, 0x71, 0x4a, 0x93, 0x1d, 0x6d, 0xe5, 0x21, 0xd1, 0x24, + 0x1e, 0xf3, 0xa7, 0x12, 0x38, 0x36, 0x69, 0x24, 0xc3, 0xb6, 0xfe, 0x24, 0x56, 0x59, 0xbc, 0x9e, + 0xfe, 0x24, 0x7e, 0x30, 0xac, 0x9f, 0x9d, 0xfa, 0x8d, 0x13, 0x01, 0xa6, 0xbe, 0x9f, 0x3f, 0x02, + 0xd5, 0x4c, 0x15, 0x3f, 0xe4, 0xb4, 0x47, 0x6f, 0xaa, 0x97, 0x98, 0x7a, 0x84, 0x3e, 0x33, 0x1a, + 0xd6, 0xab, 0x5b, 0x05, 0x36, 0xa8, 0xd0, 0x5b, 0x7c, 0x38, 0x4d, 0x50, 0xc1, 0xfe, 0xe4, 0x7b, + 0x7c, 0x06, 0x05, 0xfc, 0x9c, 0xaf, 0x9c, 0x52, 0xc1, 0x01, 0x57, 0xee, 0x13, 0x70, 0x32, 0xdb, + 0xb8, 0x7c, 0xe9, 0x4e, 0x8f, 0x86, 0xf5, 0x93, 0xad, 0x22, 0x23, 0x54, 0xec, 0x5f, 0xa4, 0xbe, + 0xf9, 0x27, 0xa3, 0xbe, 0xa6, 0x75, 0xfb, 0x5e, 0x6d, 0xee, 0xce, 0xbd, 0xda, 0xdc, 0xdd, 0x7b, + 0xb5, 0xb9, 0xaf, 0x46, 0x35, 0xe3, 0xf6, 0xa8, 0x66, 0xdc, 0x19, 0xd5, 0x8c, 0xbb, 0xa3, 0x9a, + 0xf1, 0xfb, 0xa8, 0x66, 0x7c, 0x77, 0xbf, 0x36, 0xf7, 0xf1, 0x52, 0x34, 0x0c, 0xff, 0x09, 0x00, + 0x00, 0xff, 0xff, 0x88, 0x5a, 0x1f, 0xc3, 0xc3, 0x13, 0x00, 0x00, } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2alpha1/generated.proto b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2alpha1/generated.proto index d5154758..c2223a11 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2alpha1/generated.proto +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v2alpha1/generated.proto @@ -27,7 +27,6 @@ import "k8s.io/apimachinery/pkg/runtime/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; import "k8s.io/apimachinery/pkg/util/intstr/generated.proto"; import "k8s.io/kubernetes/pkg/api/v1/generated.proto"; -import "k8s.io/kubernetes/pkg/apis/autoscaling/v1/generated.proto"; // Package-wide variables from generator "generated". option go_package = "v2alpha1"; From 59c0218a9c9dbac056f2373f3a2fbd2e14a93a8a Mon Sep 17 00:00:00 2001 From: Antonio Murdaca Date: Mon, 18 Sep 2017 15:53:48 +0200 Subject: [PATCH 06/18] container_create: follow symlink for mount host path Signed-off-by: Antonio Murdaca --- server/container_create.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/server/container_create.go b/server/container_create.go index 3234c5bf..4b027759 100644 --- a/server/container_create.go +++ b/server/container_create.go @@ -66,6 +66,11 @@ func addOCIBindMounts(mountLabel string, containerConfig *pb.ContainerConfig, sp } } + src, err := resolveSymbolicLink(src) + if err != nil { + return nil, fmt.Errorf("failed to resolve symlink %q: %v", src, err) + } + options := []string{"rw"} if mount.Readonly { options = []string{"ro"} From 7b0bde4362d342c412dcf50f11e75988c0b4b459 Mon Sep 17 00:00:00 2001 From: Antonio Murdaca Date: Tue, 19 Sep 2017 19:39:58 +0200 Subject: [PATCH 07/18] container_create: fix seccomp annotations Signed-off-by: Antonio Murdaca --- server/container_create.go | 8 ++++---- server/seccomp/seccomp.go | 2 ++ test/seccomp.bats | 18 +++++++++--------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/server/container_create.go b/server/container_create.go index 4b027759..3b5a0f6c 100644 --- a/server/container_create.go +++ b/server/container_create.go @@ -890,13 +890,13 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string, } specgen.AddAnnotation(annotations.Annotations, string(kubeAnnotationsJSON)) + metaname := metadata.Name if !privileged { - if err = s.setupSeccomp(&specgen, containerName, sb.Annotations()); err != nil { + if err = s.setupSeccomp(&specgen, metaname, sb.Annotations()); err != nil { return nil, err } } - metaname := metadata.Name attempt := metadata.Attempt containerInfo, err := s.StorageRuntimeServer().CreateContainer(s.ImageContext(), sb.Name(), sb.ID(), @@ -1020,9 +1020,9 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string, } func (s *Server) setupSeccomp(specgen *generate.Generator, cname string, sbAnnotations map[string]string) error { - profile, ok := sbAnnotations["security.alpha.kubernetes.io/seccomp/container/"+cname] + profile, ok := sbAnnotations["container.seccomp.security.alpha.kubernetes.io/"+cname] if !ok { - profile, ok = sbAnnotations["security.alpha.kubernetes.io/seccomp/pod"] + profile, ok = sbAnnotations["seccomp.security.alpha.kubernetes.io/pod"] if !ok { // running w/o seccomp, aka unconfined profile = seccompUnconfined diff --git a/server/seccomp/seccomp.go b/server/seccomp/seccomp.go index d8ec63d2..cf77c827 100644 --- a/server/seccomp/seccomp.go +++ b/server/seccomp/seccomp.go @@ -11,6 +11,7 @@ import ( specs "github.com/opencontainers/runtime-spec/specs-go" "github.com/opencontainers/runtime-tools/generate" libseccomp "github.com/seccomp/libseccomp-golang" + "github.com/sirupsen/logrus" "golang.org/x/sys/unix" ) @@ -24,6 +25,7 @@ func IsEnabled() bool { enabled = true } } + logrus.Debugf("seccomp status: %v", enabled) return enabled } diff --git a/test/seccomp.bats b/test/seccomp.bats index 56f30381..b77a7f8c 100644 --- a/test/seccomp.bats +++ b/test/seccomp.bats @@ -21,7 +21,7 @@ function teardown() { start_crio "$TESTDIR"/seccomp_profile1.json - sed -e 's/%VALUE%/,"security\.alpha\.kubernetes\.io\/seccomp\/container\/k8s_testname_seccomp_1_redhat\.test\.crio_redhat-test-crio_0": "unconfined"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp1.json + sed -e 's/%VALUE%/,"container\.seccomp\.security\.alpha\.kubernetes\.io\/testname": "unconfined"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp1.json run crioctl pod run --name seccomp1 --config "$TESTDIR"/seccomp1.json echo "$output" [ "$status" -eq 0 ] @@ -57,7 +57,7 @@ function teardown() { start_crio "$TESTDIR"/seccomp_profile1.json - sed -e 's/%VALUE%/,"security\.alpha\.kubernetes\.io\/seccomp\/container\/k8s_testname2_seccomp2_redhat\.test\.crio_redhat-test-crio_0": "runtime\/default"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp2.json + sed -e 's/%VALUE%/,"container\.seccomp\.security\.alpha\.kubernetes\.io\/testname2": "runtime\/default"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp2.json run crioctl pod run --name seccomp2 --config "$TESTDIR"/seccomp2.json echo "$output" [ "$status" -eq 0 ] @@ -94,7 +94,7 @@ function teardown() { start_crio "$TESTDIR"/seccomp_profile1.json - sed -e 's/%VALUE%/,"security\.alpha\.kubernetes\.io\/seccomp\/container\/k8s_testname3_seccomp3_redhat\.test\.crio_redhat-test-crio_1": "notgood"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp3.json + sed -e 's/%VALUE%/,"container\.seccomp\.security\.alpha\.kubernetes\.io\/testname3": "notgood"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp3.json run crioctl pod run --name seccomp3 --config "$TESTDIR"/seccomp3.json echo "$output" [ "$status" -eq 0 ] @@ -145,7 +145,7 @@ function teardown() { start_crio "$TESTDIR"/seccomp_profile1.json - sed -e 's/%VALUE%/,"security\.alpha\.kubernetes\.io\/seccomp\/container\/redhat\.test\.crio-seccomp2-1-testname2-0-not-exists": "unconfined", "security\.alpha\.kubernetes\.io\/seccomp\/pod": "runtime\/default"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp5.json + sed -e 's/%VALUE%/,"container\.seccomp\.security\.alpha\.kubernetes\.io\/redhat\.test\.crio-seccomp2-1-testname2-0-not-exists": "unconfined", "seccomp\.security\.alpha\.kubernetes\.io\/pod": "runtime\/default"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp5.json run crioctl pod run --name seccomp5 --config "$TESTDIR"/seccomp5.json echo "$output" [ "$status" -eq 0 ] @@ -185,7 +185,7 @@ function teardown() { start_crio "$TESTDIR"/seccomp_profile1.json - sed -e 's/%VALUE%/,"security\.alpha\.kubernetes\.io\/seccomp\/container\/redhat\.test\.crio-seccomp6-1-testname6-0-not-exists": "runtime-default"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp6.json + sed -e 's/%VALUE%/,"container\.seccomp\.security\.alpha\.kubernetes\.io\/redhat\.test\.crio-seccomp6-1-testname6-0-not-exists": "runtime-default"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp6.json run crioctl pod run --name seccomp6 --config "$TESTDIR"/seccomp6.json echo "$output" [ "$status" -eq 0 ] @@ -221,7 +221,7 @@ function teardown() { start_crio "$TESTDIR"/seccomp_profile1.json - sed -e 's/%VALUE%/,"security\.alpha\.kubernetes\.io\/seccomp\/pod": "unconfined"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp1.json + sed -e 's/%VALUE%/,"seccomp\.security\.alpha\.kubernetes\.io\/pod": "unconfined"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp1.json run crioctl pod run --name seccomp1 --config "$TESTDIR"/seccomp1.json echo "$output" [ "$status" -eq 0 ] @@ -257,7 +257,7 @@ function teardown() { start_crio "$TESTDIR"/seccomp_profile1.json - sed -e 's/%VALUE%/,"security\.alpha\.kubernetes\.io\/seccomp\/pod": "runtime\/default"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp2.json + sed -e 's/%VALUE%/,"seccomp\.security\.alpha\.kubernetes\.io\/pod": "runtime\/default"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp2.json run crioctl pod run --name seccomp2 --config "$TESTDIR"/seccomp2.json echo "$output" [ "$status" -eq 0 ] @@ -295,7 +295,7 @@ function teardown() { start_crio "$TESTDIR"/seccomp_profile1.json # 3. test running with pod wrong profile name - sed -e 's/%VALUE%/,"security\.alpha\.kubernetes\.io\/seccomp\/pod": "notgood"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp3.json + sed -e 's/%VALUE%/,"seccomp\.security\.alpha\.kubernetes\.io\/pod": "notgood"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp3.json run crioctl pod run --name seccomp3 --config "$TESTDIR"/seccomp3.json echo "$output" [ "$status" -eq 0 ] @@ -344,7 +344,7 @@ function teardown() { start_crio "$TESTDIR"/seccomp_profile1.json - sed -e 's/%VALUE%/,"security\.alpha\.kubernetes\.io\/seccomp\/container\/k8s_testname2_seccomp2_redhat\.test\.crio_redhat-test-crio_0": "docker\/default"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp2.json + sed -e 's/%VALUE%/,"container\.seccomp\.security\.alpha\.kubernetes\.io\/testname2": "docker\/default"/g' "$TESTDATA"/sandbox_config_seccomp.json > "$TESTDIR"/seccomp2.json run crioctl pod run --name seccomp2 --config "$TESTDIR"/seccomp2.json echo "$output" [ "$status" -eq 0 ] From 6c871769b44c100c5fffa64e902b5e0727a14a8b Mon Sep 17 00:00:00 2001 From: Antonio Murdaca Date: Wed, 20 Sep 2017 15:19:58 +0200 Subject: [PATCH 08/18] server: more fixes for selinux and privileged mode Signed-off-by: Antonio Murdaca --- server/container_create.go | 59 +++++++++++++++++++++++++++----------- server/sandbox_run.go | 26 ++++++++++------- 2 files changed, 58 insertions(+), 27 deletions(-) diff --git a/server/container_create.go b/server/container_create.go index 3b5a0f6c..6f944b3f 100644 --- a/server/container_create.go +++ b/server/container_create.go @@ -525,12 +525,25 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string, specgen.HostSpecific = true specgen.ClearProcessRlimits() + var readOnlyRootfs bool + var privileged bool + if containerConfig.GetLinux().GetSecurityContext() != nil { + if containerConfig.GetLinux().GetSecurityContext().Privileged { + privileged = true + } + + if containerConfig.GetLinux().GetSecurityContext().ReadonlyRootfs { + readOnlyRootfs = true + specgen.SetRootReadonly(true) + } + } + mountLabel := sb.MountLabel() processLabel := sb.ProcessLabel() selinuxConfig := containerConfig.GetLinux().GetSecurityContext().GetSelinuxOptions() if selinuxConfig != nil { var err error - processLabel, mountLabel, err = getSELinuxLabels(selinuxConfig) + processLabel, mountLabel, err = getSELinuxLabels(selinuxConfig, privileged) if err != nil { return nil, err } @@ -570,19 +583,6 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string, } } - var readOnlyRootfs bool - var privileged bool - if containerConfig.GetLinux().GetSecurityContext() != nil { - if containerConfig.GetLinux().GetSecurityContext().Privileged { - privileged = true - } - - if containerConfig.GetLinux().GetSecurityContext().ReadonlyRootfs { - readOnlyRootfs = true - specgen.SetRootReadonly(true) - } - } - // set this container's apparmor profile if it is set by sandbox if s.appArmorEnabled && !privileged { appArmorProfileName := s.getAppArmorProfileName(sb.Annotations(), metadata.Name) @@ -673,6 +673,7 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string, if privileged { // this is setting correct capabilities as well for privileged mode specgen.SetupPrivileged(true) + setOCIBindMountsPrivileged(&specgen) } else { toCAPPrefixed := func(cap string) string { if !strings.HasPrefix(strings.ToLower(cap), "cap_") { @@ -720,10 +721,9 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string, } } } - specgen.SetProcessSelinuxLabel(processLabel) } - - specgen.SetLinuxMountLabel(sb.MountLabel()) + specgen.SetProcessSelinuxLabel(processLabel) + specgen.SetLinuxMountLabel(mountLabel) if containerConfig.GetLinux().GetSecurityContext() != nil && !containerConfig.GetLinux().GetSecurityContext().Privileged { @@ -1107,3 +1107,28 @@ func getUserInfo(rootfs string, userName string) (uint32, uint32, []uint32, erro return uid, gid, additionalGids, nil } + +func setOCIBindMountsPrivileged(g *generate.Generator) { + spec := g.Spec() + // clear readonly for /sys and cgroup + for i, m := range spec.Mounts { + if spec.Mounts[i].Destination == "/sys" && !spec.Root.Readonly { + clearReadOnly(&spec.Mounts[i]) + } + if m.Type == "cgroup" { + clearReadOnly(&spec.Mounts[i]) + } + } + spec.Linux.ReadonlyPaths = nil + spec.Linux.MaskedPaths = nil +} + +func clearReadOnly(m *rspec.Mount) { + var opt []string + for _, o := range m.Options { + if o != "ro" { + opt = append(opt, o) + } + } + m.Options = opt +} diff --git a/server/sandbox_run.go b/server/sandbox_run.go index 0444e6c0..321a9b2e 100644 --- a/server/sandbox_run.go +++ b/server/sandbox_run.go @@ -247,16 +247,20 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest return nil, fmt.Errorf("requested logDir for sbox id %s is a relative path: %s", id, logDir) } - // Don't use SELinux separation with Host Pid or IPC Namespace, - if !req.GetConfig().GetLinux().GetSecurityContext().GetNamespaceOptions().HostPid && !req.GetConfig().GetLinux().GetSecurityContext().GetNamespaceOptions().HostIpc { - processLabel, mountLabel, err = getSELinuxLabels(req.GetConfig().GetLinux().GetSecurityContext().GetSelinuxOptions()) - if err != nil { - return nil, err - } - g.SetProcessSelinuxLabel(processLabel) - g.SetLinuxMountLabel(mountLabel) + privileged := s.privilegedSandbox(req) + + processLabel, mountLabel, err = getSELinuxLabels(req.GetConfig().GetLinux().GetSecurityContext().GetSelinuxOptions(), privileged) + if err != nil { + return nil, err } + // Don't use SELinux separation with Host Pid or IPC Namespace or privileged. + if req.GetConfig().GetLinux().GetSecurityContext().GetNamespaceOptions().HostPid || req.GetConfig().GetLinux().GetSecurityContext().GetNamespaceOptions().HostIpc { + processLabel, mountLabel = "", "" + } + g.SetProcessSelinuxLabel(processLabel) + g.SetLinuxMountLabel(mountLabel) + // create shm mount for the pod containers. var shmPath string if req.GetConfig().GetLinux().GetSecurityContext().GetNamespaceOptions().HostIpc { @@ -308,7 +312,6 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest } g.SetHostname(hostname) - privileged := s.privilegedSandbox(req) trusted := s.trustedSandbox(req) g.AddAnnotation(annotations.Metadata, string(metadataJSON)) g.AddAnnotation(annotations.Labels, string(labelsJSON)) @@ -557,7 +560,10 @@ func (s *Server) setPodSandboxMountLabel(id, mountLabel string) error { return s.StorageRuntimeServer().SetContainerMetadata(id, storageMetadata) } -func getSELinuxLabels(selinuxOptions *pb.SELinuxOption) (processLabel string, mountLabel string, err error) { +func getSELinuxLabels(selinuxOptions *pb.SELinuxOption, privileged bool) (processLabel string, mountLabel string, err error) { + if privileged { + return "", "", nil + } labels := []string{} if selinuxOptions != nil { if selinuxOptions.User != "" { From 3dd043c58151d430c627b898d3482f18515ab360 Mon Sep 17 00:00:00 2001 From: Antonio Murdaca Date: Thu, 21 Sep 2017 10:17:39 +0200 Subject: [PATCH 09/18] sandbox_network: pass sandbox to newPodNetwork Signed-off-by: Antonio Murdaca --- server/sandbox_network.go | 4 ++-- server/utils.go | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/server/sandbox_network.go b/server/sandbox_network.go index 7ac6aada..15cf99c8 100644 --- a/server/sandbox_network.go +++ b/server/sandbox_network.go @@ -16,7 +16,7 @@ func (s *Server) networkStart(hostNetwork bool, sb *sandbox.Sandbox) (string, er return s.BindAddress(), nil } - podNetwork := newPodNetwork(sb.Namespace(), sb.KubeName(), sb.ID(), sb.NetNsPath()) + podNetwork := newPodNetwork(sb) err := s.netPlugin.SetUpPod(podNetwork) if err != nil { return "", fmt.Errorf("failed to create pod network sandbox %s(%s): %v", sb.Name(), sb.ID(), err) @@ -59,7 +59,7 @@ func (s *Server) networkStop(hostNetwork bool, sb *sandbox.Sandbox) error { sb.Name(), sb.ID(), err) } - podNetwork := newPodNetwork(sb.Namespace(), sb.KubeName(), sb.ID(), sb.NetNsPath()) + podNetwork := newPodNetwork(sb) if err := s.netPlugin.TearDownPod(podNetwork); err != nil { logrus.Warnf("failed to destroy network for pod sandbox %s(%s): %v", sb.Name(), sb.ID(), err) diff --git a/server/utils.go b/server/utils.go index 26c347f4..195942d3 100644 --- a/server/utils.go +++ b/server/utils.go @@ -7,6 +7,7 @@ import ( "strings" "github.com/cri-o/ocicni/pkg/ocicni" + "github.com/kubernetes-incubator/cri-o/libkpod/sandbox" "github.com/opencontainers/runtime-tools/validate" "github.com/syndtr/gocapability/capability" ) @@ -149,12 +150,12 @@ func SysctlsFromPodAnnotation(annotation string) ([]Sysctl, error) { return sysctls, nil } -func newPodNetwork(namespace, name, id, netns string) ocicni.PodNetwork { +func newPodNetwork(sb *sandbox.Sandbox) ocicni.PodNetwork { return ocicni.PodNetwork{ - Name: name, - Namespace: namespace, - ID: id, - NetNS: netns, + Name: sb.KubeName(), + Namespace: sb.Namespace(), + ID: sb.ID(), + NetNS: sb.NetNsPath(), } } From c7f5347673967c2ad9d3528c72ee6b750ac2b071 Mon Sep 17 00:00:00 2001 From: Mrunal Patel Date: Mon, 25 Sep 2017 15:27:21 -0700 Subject: [PATCH 10/18] Add log size max configuration Signed-off-by: Mrunal Patel --- cmd/crio/config.go | 4 ++++ libkpod/config.go | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/cmd/crio/config.go b/cmd/crio/config.go index 17ec67ca..149bb55a 100644 --- a/cmd/crio/config.go +++ b/cmd/crio/config.go @@ -108,6 +108,10 @@ hooks_dir_path = "{{ .HooksDirPath }}" # pids_limit is the number of processes allowed in a container pids_limit = {{ .PidsLimit }} +# log_size_max is the max limit for the container log size in bytes. +# Negative values indicate that no limit is imposed. +log_size_max = {{ .LogSizeMax }} + # The "crio.image" table contains settings pertaining to the # management of OCI images. [crio.image] diff --git a/libkpod/config.go b/libkpod/config.go index 4a3ade4f..ffcac56c 100644 --- a/libkpod/config.go +++ b/libkpod/config.go @@ -51,6 +51,10 @@ const ( // DefaultPidsLimit is the default value for maximum number of processes // allowed inside a container DefaultPidsLimit = 1024 + + // DefaultLogSizeMax is the default value for the maximum log size + // allowed for a container. Negative values mean that no limit is imposed. + DefaultLogSizeMax = -1 ) // This structure is necessary to fake the TOML tables when parsing, @@ -145,6 +149,12 @@ type RuntimeConfig struct { // by the cgroup process number controller. PidsLimit int64 `toml:"pids_limit"` + // LogSizeMax is the maximum number of bytes after which the log file + // will be truncated. It can be expressed as a human-friendly string + // that is parsed to bytes. + // Negative values indicate that the log file won't be truncated. + LogSizeMax int64 `toml:"log_size_max"` + // ContainerExitsDir is the directory in which container exit files are // written to by conmon. ContainerExitsDir string `toml:"container_exits_dir"` @@ -274,6 +284,7 @@ func DefaultConfig() *Config { PidsLimit: DefaultPidsLimit, ContainerExitsDir: containerExitsDir, HooksDirPath: DefaultHooksDirPath, + LogSizeMax: DefaultLogSizeMax, }, ImageConfig: ImageConfig{ DefaultTransport: defaultTransport, From bb11ee522bc9bb0b6f71e5f6347d325912e378a1 Mon Sep 17 00:00:00 2001 From: Mrunal Patel Date: Mon, 25 Sep 2017 15:28:29 -0700 Subject: [PATCH 11/18] oci: Add log size max to container Signed-off-by: Mrunal Patel --- libkpod/container_server.go | 2 +- oci/oci.go | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/libkpod/container_server.go b/libkpod/container_server.go index e894537e..ea2a84fa 100644 --- a/libkpod/container_server.go +++ b/libkpod/container_server.go @@ -121,7 +121,7 @@ func New(config *Config) (*ContainerServer, error) { return nil, err } - runtime, err := oci.New(config.Runtime, config.RuntimeUntrustedWorkload, config.DefaultWorkloadTrust, config.Conmon, config.ConmonEnv, config.CgroupManager, config.ContainerExitsDir) + runtime, err := oci.New(config.Runtime, config.RuntimeUntrustedWorkload, config.DefaultWorkloadTrust, config.Conmon, config.ConmonEnv, config.CgroupManager, config.ContainerExitsDir, config.LogSizeMax) if err != nil { return nil, err } diff --git a/oci/oci.go b/oci/oci.go index 7f03ef0f..e11c8cb4 100644 --- a/oci/oci.go +++ b/oci/oci.go @@ -38,7 +38,7 @@ const ( ) // New creates a new Runtime with options provided -func New(runtimeTrustedPath string, runtimeUntrustedPath string, trustLevel string, conmonPath string, conmonEnv []string, cgroupManager string, containerExitsDir string) (*Runtime, error) { +func New(runtimeTrustedPath string, runtimeUntrustedPath string, trustLevel string, conmonPath string, conmonEnv []string, cgroupManager string, containerExitsDir string, logSizeMax int64) (*Runtime, error) { r := &Runtime{ name: filepath.Base(runtimeTrustedPath), trustedPath: runtimeTrustedPath, @@ -48,6 +48,7 @@ func New(runtimeTrustedPath string, runtimeUntrustedPath string, trustLevel stri conmonEnv: conmonEnv, cgroupManager: cgroupManager, containerExitsDir: containerExitsDir, + logSizeMax: logSizeMax, } return r, nil } @@ -62,6 +63,7 @@ type Runtime struct { conmonEnv []string cgroupManager string containerExitsDir string + logSizeMax int64 } // syncInfo is used to return data from monitor process to daemon From 48d0706a497b5be36baa491650560db3f4868fc3 Mon Sep 17 00:00:00 2001 From: Mrunal Patel Date: Mon, 25 Sep 2017 15:31:00 -0700 Subject: [PATCH 12/18] Add log size max flag to conmon and pass it on container create Signed-off-by: Mrunal Patel --- conmon/conmon.c | 4 ++++ oci/oci.go | 3 +++ 2 files changed, 7 insertions(+) diff --git a/conmon/conmon.c b/conmon/conmon.c index 006ba141..85a0def3 100644 --- a/conmon/conmon.c +++ b/conmon/conmon.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -20,6 +21,7 @@ #include #include #include +#include #include #include @@ -107,6 +109,7 @@ static bool opt_exec = false; static char *opt_log_path = NULL; static char *opt_exit_dir = NULL; static int opt_timeout = 0; +static int64_t opt_log_size_max = -1; static GOptionEntry opt_entries[] = { { "terminal", 't', 0, G_OPTION_ARG_NONE, &opt_terminal, "Terminal", NULL }, @@ -122,6 +125,7 @@ static GOptionEntry opt_entries[] = { "exit-dir", 0, 0, G_OPTION_ARG_STRING, &opt_exit_dir, "Path to the directory where exit files are written", NULL }, { "log-path", 'l', 0, G_OPTION_ARG_STRING, &opt_log_path, "Log file path", NULL }, { "timeout", 'T', 0, G_OPTION_ARG_INT, &opt_timeout, "Timeout in seconds", NULL }, + { "log-size-max", 0, 0, G_OPTION_ARG_INT64, &opt_log_size_max, "Maximum size of log file", NULL }, { NULL } }; diff --git a/oci/oci.go b/oci/oci.go index e11c8cb4..ab8383b9 100644 --- a/oci/oci.go +++ b/oci/oci.go @@ -158,6 +158,9 @@ func (r *Runtime) CreateContainer(c *Container, cgroupParent string) error { args = append(args, "-p", filepath.Join(c.bundlePath, "pidfile")) args = append(args, "-l", c.logPath) args = append(args, "--exit-dir", r.containerExitsDir) + if r.logSizeMax >= 0 { + args = append(args, "--log-size-max", fmt.Sprintf("%v", r.logSizeMax)) + } if c.terminal { args = append(args, "-t") } else if c.stdin { From 82899bdb4e45afb8aa87b18504cca4dbeedf01e7 Mon Sep 17 00:00:00 2001 From: Mrunal Patel Date: Mon, 25 Sep 2017 15:35:25 -0700 Subject: [PATCH 13/18] conmon: Track the number of bytes written to the container log file Signed-off-by: Mrunal Patel --- conmon/conmon.c | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/conmon/conmon.c b/conmon/conmon.c index 85a0def3..223a2a73 100644 --- a/conmon/conmon.c +++ b/conmon/conmon.c @@ -285,11 +285,13 @@ const char *stdpipe_name(stdpipe_t pipe) * line in buf, and will partially write the final line of the log if buf is * not terminated by a newline. */ -int write_k8s_log(int fd, stdpipe_t pipe, const char *buf, ssize_t buflen) +static int write_k8s_log(int fd, stdpipe_t pipe, const char *buf, ssize_t buflen) { char tsbuf[TSBUFLEN]; static stdpipe_t trailing_line = NO_PIPE; writev_buffer_t bufv = {0}; + static int64_t bytes_written = 0; + int64_t bytes_to_be_written = 0; /* * Use the same timestamp for every line of the log in this buffer. @@ -303,6 +305,8 @@ int write_k8s_log(int fd, stdpipe_t pipe, const char *buf, ssize_t buflen) while (buflen > 0) { const char *line_end = NULL; ptrdiff_t line_len = 0; + bool insert_newline = FALSE; + bool insert_timestamp = FALSE; /* Find the end of the line, or alternatively the end of the buffer. */ line_end = memchr(buf, '\n', buflen); @@ -310,12 +314,15 @@ int write_k8s_log(int fd, stdpipe_t pipe, const char *buf, ssize_t buflen) line_end = &buf[buflen-1]; line_len = line_end - buf + 1; - /* - * Write the (timestamp, stream) tuple if there isn't any trailing - * output from the previous line (or if there is trailing output but - * the current buffer being printed is from a different pipe). - */ + bytes_to_be_written = line_len; if (trailing_line != pipe) { + /* + * Write the (timestamp, stream) tuple if there isn't any trailing + * output from the previous line (or if there is trailing output but + * the current buffer being printed is from a different pipe). + */ + insert_timestamp = TRUE; + bytes_to_be_written += (TSBUFLEN - 1); /* * If there was a trailing line from a different pipe, prepend a * newline to split it properly. This technically breaks the flow @@ -323,9 +330,24 @@ int write_k8s_log(int fd, stdpipe_t pipe, const char *buf, ssize_t buflen) * wasn't one output) but without modifying the file in a * non-append-only way there's not much we can do. */ - if ((trailing_line != NO_PIPE && - writev_buffer_append_segment(fd, &bufv, "\n", -1) < 0) || - writev_buffer_append_segment(fd, &bufv, tsbuf, -1) < 0) { + if (trailing_line != NO_PIPE) { + insert_newline = TRUE; + bytes_to_be_written += 1; + } + } + + + /* Output a newline */ + if (insert_newline) { + if (writev_buffer_append_segment(fd, &bufv, "\n", -1) < 0) { + nwarn("failed to write newline to log"); + goto next; + } + } + + /* Output a timestamp */ + if (insert_timestamp) { + if (writev_buffer_append_segment(fd, &bufv, tsbuf, -1) < 0) { nwarn("failed to write (timestamp, stream) to log"); goto next; } @@ -337,6 +359,8 @@ int write_k8s_log(int fd, stdpipe_t pipe, const char *buf, ssize_t buflen) goto next; } + bytes_written += bytes_to_be_written; + /* If we did not output a full line, then we are a trailing_line. */ trailing_line = (*line_end == '\n') ? NO_PIPE : pipe; @@ -350,6 +374,8 @@ next: nwarn("failed to flush buffer to log"); } + ninfo("Total bytes written: %"PRId64"", bytes_written); + return 0; } From c7d33e18995f7286cde9db77db43aff014c78940 Mon Sep 17 00:00:00 2001 From: Mrunal Patel Date: Mon, 25 Sep 2017 15:36:14 -0700 Subject: [PATCH 14/18] conmon: Re-open the log file to not exceed max log file size Signed-off-by: Mrunal Patel --- conmon/conmon.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/conmon/conmon.c b/conmon/conmon.c index 223a2a73..1232a0b8 100644 --- a/conmon/conmon.c +++ b/conmon/conmon.c @@ -134,6 +134,8 @@ static GOptionEntry opt_entries[] = #define CGROUP_ROOT "/sys/fs/cgroup" +static int log_fd = -1; + static ssize_t write_all(int fd, const void *buf, size_t count) { size_t remaining = count; @@ -336,6 +338,31 @@ static int write_k8s_log(int fd, stdpipe_t pipe, const char *buf, ssize_t buflen } } + /* + * We re-open the log file if writing out the bytes will exceed the max + * log size. We also reset the state so that the new file is started with + * a timestamp. + */ + if ((opt_log_size_max > 0) && (bytes_written + bytes_to_be_written) > opt_log_size_max) { + ninfo("Creating new log file"); + insert_newline = FALSE; + insert_timestamp = TRUE; + bytes_written = 0; + + /* Close the existing fd */ + close(fd); + + /* Unlink the file */ + if (unlink(opt_log_path) < 0) { + pexit("Failed to unlink log file"); + } + + /* Open the log path file again */ + log_fd = open(opt_log_path, O_WRONLY | O_APPEND | O_CREAT | O_CLOEXEC, 0600); + if (log_fd < 0) + pexit("Failed to open log file"); + fd = log_fd; + } /* Output a newline */ if (insert_newline) { @@ -511,7 +538,6 @@ static int conn_sock = -1; static int conn_sock_readable; static int conn_sock_writable; -static int log_fd = -1; static int oom_event_fd = -1; static int attach_socket_fd = -1; static int console_socket_fd = -1; From 4d0270d138bdea274c1709012319a19a4573e504 Mon Sep 17 00:00:00 2001 From: Mrunal Patel Date: Mon, 25 Sep 2017 15:37:10 -0700 Subject: [PATCH 15/18] crio: Add flag for --log-size-max Signed-off-by: Mrunal Patel --- cmd/crio/main.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cmd/crio/main.go b/cmd/crio/main.go index 754ab327..de67ca51 100644 --- a/cmd/crio/main.go +++ b/cmd/crio/main.go @@ -125,6 +125,9 @@ func mergeConfig(config *server.Config, ctx *cli.Context) error { if ctx.GlobalIsSet("pids-limit") { config.PidsLimit = ctx.GlobalInt64("pids-limit") } + if ctx.GlobalIsSet("log-size-max") { + config.LogSizeMax = ctx.GlobalInt64("log-size-max") + } if ctx.GlobalIsSet("cni-config-dir") { config.NetworkDir = ctx.GlobalString("cni-config-dir") } @@ -289,6 +292,11 @@ func main() { Value: libkpod.DefaultPidsLimit, Usage: "maximum number of processes allowed in a container", }, + cli.Int64Flag{ + Name: "log-size-max", + Value: libkpod.DefaultLogSizeMax, + Usage: "maximum log size in bytes for a container", + }, cli.StringFlag{ Name: "cni-config-dir", Usage: "CNI configuration files directory", From d47061ac570b21c2185f7852ca543e21e1a05e9e Mon Sep 17 00:00:00 2001 From: Mrunal Patel Date: Mon, 25 Sep 2017 15:37:55 -0700 Subject: [PATCH 16/18] test: Add a test for log size max Signed-off-by: Mrunal Patel --- test/ctr.bats | 47 +++++++++++++++++++++++++++++++++++++++++++++++ test/helpers.bash | 4 +++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/test/ctr.bats b/test/ctr.bats index 0707df5d..79eae2a3 100644 --- a/test/ctr.bats +++ b/test/ctr.bats @@ -255,6 +255,53 @@ function teardown() { stop_crio } +@test "ctr log max" { + LOG_SIZE_MAX_LIMIT=10000 start_crio + run crioctl pod run --config "$TESTDATA"/sandbox_config.json + echo "$output" + [ "$status" -eq 0 ] + pod_id="$output" + run crioctl pod list + echo "$output" + [ "$status" -eq 0 ] + + # Create a new container. + newconfig=$(mktemp --tmpdir crio-config.XXXXXX.json) + cp "$TESTDATA"/container_config_logging.json "$newconfig" + sed -i 's|"%shellcommand%"|"for i in $(seq 250); do echo $i; done"|' "$newconfig" + run crioctl ctr create --config "$newconfig" --pod "$pod_id" + echo "$output" + [ "$status" -eq 0 ] + ctr_id="$output" + run crioctl ctr start --id "$ctr_id" + echo "$output" + [ "$status" -eq 0 ] + sleep 6 + run crioctl ctr status --id "$ctr_id" + [ "$status" -eq 0 ] + run crioctl ctr remove --id "$ctr_id" + echo "$output" + [ "$status" -eq 0 ] + + # Check that the output is what we expect. + logpath="$DEFAULT_LOG_PATH/$pod_id/$ctr_id.log" + [ -f "$logpath" ] + echo "$logpath :: $(cat "$logpath")" + len=$(wc -l "$logpath" | awk '{print $1}') + [ $len -lt 250 ] + + run crioctl pod stop --id "$pod_id" + echo "$output" + [ "$status" -eq 0 ] + run crioctl pod remove --id "$pod_id" + echo "$output" + [ "$status" -eq 0 ] + + cleanup_ctrs + cleanup_pods + stop_crio +} + # regression test for #127 @test "ctrs status for a pod" { start_crio diff --git a/test/helpers.bash b/test/helpers.bash index b7f61bfd..6d185527 100644 --- a/test/helpers.bash +++ b/test/helpers.bash @@ -56,6 +56,8 @@ CGROUP_MANAGER=${CGROUP_MANAGER:-cgroupfs} IMAGE_VOLUMES=${IMAGE_VOLUMES:-mkdir} # Container pids limit PIDS_LIMIT=${PIDS_LIMIT:-1024} +# Log size max limit +LOG_SIZE_MAX_LIMIT=${LOG_SIZE_MAX_LIMIT:--1} TESTDIR=$(mktemp -d) @@ -231,7 +233,7 @@ function start_crio() { "$COPYIMG_BINARY" --root "$TESTDIR/crio" $STORAGE_OPTS --runroot "$TESTDIR/crio-run" --image-name=mrunalp/image-volume-test --import-from=dir:"$ARTIFACTS_PATH"/image-volume-test-image --add-name=docker.io/library/mrunalp/image-volume-test --signature-policy="$INTEGRATION_ROOT"/policy.json "$COPYIMG_BINARY" --root "$TESTDIR/crio" $STORAGE_OPTS --runroot "$TESTDIR/crio-run" --image-name=busybox:latest --import-from=dir:"$ARTIFACTS_PATH"/busybox-image --add-name=docker.io/library/busybox:latest --signature-policy="$INTEGRATION_ROOT"/policy.json "$COPYIMG_BINARY" --root "$TESTDIR/crio" $STORAGE_OPTS --runroot "$TESTDIR/crio-run" --image-name=runcom/stderr-test:latest --import-from=dir:"$ARTIFACTS_PATH"/stderr-test --add-name=docker.io/runcom/stderr-test:latest --signature-policy="$INTEGRATION_ROOT"/policy.json - "$CRIO_BINARY" ${HOOKS_OPTS} --conmon "$CONMON_BINARY" --listen "$CRIO_SOCKET" --cgroup-manager "$CGROUP_MANAGER" --registry "docker.io" --runtime "$RUNTIME_BINARY" --root "$TESTDIR/crio" --runroot "$TESTDIR/crio-run" $STORAGE_OPTS --seccomp-profile "$seccomp" --apparmor-profile "$apparmor" --cni-config-dir "$CRIO_CNI_CONFIG" --signature-policy "$INTEGRATION_ROOT"/policy.json --image-volumes "$IMAGE_VOLUMES" --pids-limit "$PIDS_LIMIT" --config /dev/null config >$CRIO_CONFIG + "$CRIO_BINARY" ${HOOKS_OPTS} --conmon "$CONMON_BINARY" --listen "$CRIO_SOCKET" --cgroup-manager "$CGROUP_MANAGER" --registry "docker.io" --runtime "$RUNTIME_BINARY" --root "$TESTDIR/crio" --runroot "$TESTDIR/crio-run" $STORAGE_OPTS --seccomp-profile "$seccomp" --apparmor-profile "$apparmor" --cni-config-dir "$CRIO_CNI_CONFIG" --signature-policy "$INTEGRATION_ROOT"/policy.json --image-volumes "$IMAGE_VOLUMES" --pids-limit "$PIDS_LIMIT" --log-size-max "$LOG_SIZE_MAX_LIMIT" --config /dev/null config >$CRIO_CONFIG # Prepare the CNI configuration files, we're running with non host networking by default if [[ -n "$4" ]]; then From 37e282a29b84ca12b594cc55767295f37da848ea Mon Sep 17 00:00:00 2001 From: Mrunal Patel Date: Mon, 25 Sep 2017 16:08:09 -0700 Subject: [PATCH 17/18] docs: Add docs for log size max Signed-off-by: Mrunal Patel --- docs/crio.8.md | 3 +++ docs/crio.conf.5.md | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/docs/crio.8.md b/docs/crio.8.md index 34f54571..a6cf27b8 100644 --- a/docs/crio.8.md +++ b/docs/crio.8.md @@ -105,6 +105,9 @@ set the CPU profile file path **--log-format**="" Set the format used by logs ('text' (default), or 'json') (default: "text") +**--log-size-max**="" + Maximum log size in bytes for a container (default: -1 (no limit)) + **--pause-command**="" Path to the pause executable in the pause image (default: "/pause") diff --git a/docs/crio.conf.5.md b/docs/crio.conf.5.md index 8200a30a..6f749b6d 100644 --- a/docs/crio.conf.5.md +++ b/docs/crio.conf.5.md @@ -54,6 +54,11 @@ The `crio` table supports the following options: **conmon_env**=[] Environment variable list for conmon process (default: ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",]) +**log_size_max**="" + Maximum sized allowed for the container log file (default: -1) + Negative numbers indicate that no size limit is imposed. + The file is truncated and re-opened so the limit is never exceeded. + **pids_limit**="" Maximum number of processes allowed in a container (default: 1024) From 266e620ea9780a4f9a1e38841f1a69935601540a Mon Sep 17 00:00:00 2001 From: Samuel Ortiz Date: Tue, 26 Sep 2017 12:24:14 +0200 Subject: [PATCH 18/18] README: Update status We're at rc2 now. Signed-off-by: Samuel Ortiz --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 265e6d4f..452d4cbb 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![Build Status](https://img.shields.io/travis/kubernetes-incubator/cri-o.svg?maxAge=2592000&style=flat-square)](https://travis-ci.org/kubernetes-incubator/cri-o) [![Go Report Card](https://goreportcard.com/badge/github.com/kubernetes-incubator/cri-o?style=flat-square)](https://goreportcard.com/report/github.com/kubernetes-incubator/cri-o) -### Status: Release Candidate 1 +### Status: Release Candidate 2 ## What is the scope of this project?